Repository navigation
fix(dsh): use producer-owned source kind for memory injection - #5318
Merged
Merged
Conversation
t0saki
approved these changes
Sep 23, 2026
t0saki
left a comment
Collaborator
There was a problem hiding this comment.
Verified locally: npm run prepack && npm run check && npm test passes (75 pass, 0 fail). The producer-owned kind clears the DSH 0.1.7 format v4 admission check and remains valid on rc hosts, where MessageSourceMap is merge-extensible. Thanks!
This was referenced Sep 23, 2026
Closed
9 of 21 tasks
frankyang2008-eng
added a commit
to frankyang2008-eng/OpenViking
that referenced
this pull request
Oct 9, 2026
…I plugin, account-scoped embedding/VLM providers, resource permission management, ls/tree pagination) Upstream: 7b07c4a -> 3949b51 (57 commits, 518 files, +29307/-7524), post-v0.4.21. Themes - plugins: Kimi Code CLI memory plugin (volcengine#4787) with manifest alignment (volcengine#5376); shared capture filtering across adapters (volcengine#5359, volcengine#5375); find the installer runtime in the fetched checkout (volcengine#5280); dsh bundle/plugin card (volcengine#5390, volcengine#5362), producer-owned source kind (volcengine#5318), broad MCP recall scope (volcengine#5346), per-session workspace peer settings (volcengine#5380); OpenCode v2 support (volcengine#5341), parallel session-inject and recall (volcengine#5149) - config: isolate account runtime resources (volcengine#5323) - RuntimeConfigManager plus account-scoped embedding/VLM providers, which is what the embedding_provider / vlm_resolver plumbing in this merge serves - acl: inherit full-management permissions by default with create-time authorization (volcengine#5266); web-studio resource permission management (volcengine#5329) - fs: pagination state for ls and tree (volcengine#5330), unified URI normalization with Chinese path support (volcengine#5328), serialize mkdir abstract creation (volcengine#5183) - grep: propagate later-page ACL denials (volcengine#5289); drop the ripgrep invoke (volcengine#5369) - queue: requeue on semantic directory lock conflicts (volcengine#5340), fix the missing downstream index task on write-wait (volcengine#5357) - metrics: queue processing latency (volcengine#5365), persisted HTTP retrieval result counts (volcengine#5294); observer JSON status format (volcengine#5316) - openclaw: stop offering the legacy person peer role at install time (volcengine#5355), widen to unscoped recall when peer_role=sender has no sender (volcengine#5347) - session: split session.py into sub-modules (volcengine#5363) - hermes: gateway memory presets and sender attribution (volcengine#5293), rotate read-only session state (volcengine#5372), mirror native memory replacements/removals (volcengine#5281), bind settings to the initialized profile (volcengine#5374), skip writes for non-primary agent contexts (volcengine#5353) - docs: enterprise deployment guides (volcengine#5361, volcengine#5388), browser-language docs preferences (volcengine#5351); feishu project auth refresh (volcengine#5350) Conflicts (15) and resolutions - full analysis in plans/upstream-sync-14-conflict-analysis.md - openviking/models/vlm/token_usage.py - took upstream. The fork made TokenUsageTracker thread-safe with an RLock and hand-written locks; upstream shipped the same intent more completely (a @_locked decorator, _add_usage() that also merges last_updated, and a merge() that iterates a to_dict() snapshot instead of a live model map). Upstream is a superset, so the fork's version carries no information the merge would lose. - examples/agent-hook-plugin/hosts/zcode-capture.mjs, examples/dsh-memory-plugin/index.mjs, examples/openclaw-plugin/tests/ut/identity-routing.test.ts, docs/en/agent-integrations/17-dsh.md, docs/zh/agent-integrations/17-dsh.md, docs/en/api/03-filesystem.md - took upstream. Every fork change on these files is Prettier/markdown noise (re-wrapping, table pipes, arrow parens); verified by comparing base to the fork tip with whitespace, commas and semicolons stripped. The repository has no prettier/markdownlint/yamllint config and CI does not run them, so keeping the formatting only re-conflicts on every sync. identity-routing.test.ts also had to take upstream on semantics: the fork still asserted a throw for a sender-scoped call without a sender, which upstream replaced with a warning plus unscoped fallback. - openviking/service/core.py - union of three hunks. Kept the fork's _init_shared_rerank_runtime() call and the shared rerank client/executor, and took upstream's _init_runtime_config_manager() plus the VLM resolver check. Upstream's removal of the process-level embedder check is taken as-is: the attribute is no longer assigned anywhere upstream, so keeping the check would raise on every boot. The rerank runtime is initialized after the config manager, matching upstream's use of the same config reference for init_viking_fs(rerank_config=...). - openviking/service/debug_service.py - the constructor and set_dependencies now accept rerank_client together with upstream's embedding_provider and vlm_resolver, in that positional order. The models-status path reuses the service-shared rerank client and only falls back to building one. The fork's "if self._config.embedding: embedding_instance = get_embedder()" block is dropped: upstream replaced the process-level embedder with the token-tracker namespace, so keeping it would resurrect the deleted embedder. - openviking/storage/queuefs/queue_manager.py - union. The fork's shared "qfs-agfs" ThreadPoolExecutor and _agfs_call_timeout survive next to upstream's optional VLMResolver plus the TYPE_CHECKING import. - openviking/session/memory/patch_merge_context_provider.py - union of imports; the fork's consumer="patch_merge" attribution survives. - examples/pi-coding-agent-extension/index.ts - took upstream on both hunks (comment plus Prettier wrapping). The fork's omp getBranch() fallback and the WeakMap identity map live in non-conflicting regions and are preserved. - examples/openclaw-plugin/commands/setup.ts, setup-helper/install.js - took upstream's peer-role semantics. Upstream added normalizePeerRoleInput(), which rejects "person" for setup input while still reading it from existing configs; the fork side of the setup.ts hunk lacks that definition while other code calls it, so taking the fork would break at runtime. All five install.js conflicts are the same change plus Prettier wrapping. - examples/memory-plugin-shared/install.sh (20 hunks) - union. Upstream adds the kimicode harness, the fork adds qoder, codebuddy, omp and agy; both extend the same lists, so every hunk keeps both, in the order zcode, kimicode, qoder, codebuddy, omp, agy. copy_agent_integration() keeps upstream's explicit destination argument and the fork's host-specific source lookup side by side. This also fixes a fork bug found while resolving tui_item_at(): the missing i=$((i + 1)) between zcode and qoder left qoder without an index of its own (the row was unreachable and "add" was rendered twice), and tui_selectable_count() now says 12. - docs/maintenance: plans/upstream-sync-14-conflict-analysis.md records the per-file evidence, the TUI index/count self-check, and the report-only convention for upstream-owned lint/type debt. Not touched - No file that is byte-identical to upstream/main was modified; upstream-owned lint/type debt stays report-only per the convention established in the 12th and 13th syncs (plans/upstream-type-debt-20260917.md). Verified - git grep for conflict markers: clean - bash -n install.sh, node --check on every merged .js/.mjs, ast.parse on every merged .py: pass - local work still present on top of main: core.py +49, debug_service.py 14, queue_manager.py 125, install.sh +682, install.js 1588, setup.ts 530, pi-coding-agent-extension 95
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
DSH 0.1.7-alpha.1 rejects the retired
source.kind === "plugin"during format v4 persistence. When the OpenViking memory plugin injects profile or recall context, the whole turn can fail before the event is written to JSONL.Emit the producer-owned
plugin:openviking-memorykind, keep recognizing legacy{ kind: "plugin", plugin: "openviking-memory" }messages when older sessions are replayed, and filter namespaced/producer-owned user context from automatic capture and recall queries. Bump the plugin package to0.5.1.Human Involvement
Related Issue
Fixes #5291
Type of Change
Changes Made
plugin:openviking-memoryfrom the shared injection constructor.Testing
Checklist
Screenshots (if applicable)
Not applicable.
Additional Notes
npm run check:version, the plugin version-bump gate, andgit diff --checkpassed.plugin:openviking-memoryand rejects the legacypluginkind as expected. The repository'snpm run checkscript uses a POSIXforloop and cannot be invoked directly by Windowscmd; its syntax-check and version-check commands were run equivalently.