{"_id":"@ajchemist/openviking-dsh-memory-plugin","_rev":"5-fd32914ce23bc192ff4c6620f5d798f3","name":"@ajchemist/openviking-dsh-memory-plugin","dist-tags":{"latest":"0.1.4"},"versions":{"0.1.0":{"name":"@ajchemist/openviking-dsh-memory-plugin","version":"0.1.0","keywords":["deepseek-harness","dsh","openviking","memory","context","auto-recall","auto-capture"],"license":"Apache-2.0","_id":"@ajchemist/openviking-dsh-memory-plugin@0.1.0","maintainers":[{"name":"ajchemist","email":"valchemist@me.com"}],"homepage":"https://github.com/ajchemist/OpenViking#readme","bugs":{"url":"https://github.com/ajchemist/OpenViking/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"0e85f4a16ea5d503fdf3a8a925f55fb477634a66","tarball":"https://registry.npmjs.org/@ajchemist/openviking-dsh-memory-plugin/-/openviking-dsh-memory-plugin-0.1.0.tgz","fileCount":24,"integrity":"sha512-O9c2tFtplca0/O3FVW+pLhndPhj3W2OF/vdJifDYBk7a/VfGwHsDmZqkabrYAx6dQFA+aQxSs+JQlqp5f501rg==","signatures":[{"sig":"MEUCIQCTA+bZtINIJC3j6wTiOmNxrzclRuQvR3IZDgH6Fr1nJwIgVI/YpVn3a5XVR3RWGjt+KmyHqocgNF0ZXFgoB0PSkPk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":136298},"main":"index.mjs","type":"module","engines":{"node":"^22.19.0 || >=24"},"exports":{".":"./index.mjs"},"gitHead":"4727883d6847c1ad1b3cec7ee8d15f47e3e23553","scripts":{"test":"node --test *.test.mjs"},"_npmUser":{"name":"ajchemist","email":"valchemist@me.com"},"repository":{"url":"git+https://github.com/ajchemist/OpenViking.git","type":"git","directory":"examples/dsh-memory-plugin"},"_npmVersion":"11.16.0","description":"OpenViking memory and context bundle for DeepSeek Harness","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@deepseek-ai/dsh-llm":"0.1.0-rc.6","@deepseek-ai/dsh-tools":"0.1.0-rc.6"},"peerDependencies":{"@deepseek-ai/dsh-llm":"0.1.0-rc.6","@deepseek-ai/dsh-tools":"0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/openviking-dsh-memory-plugin_0.1.0_1786959710928_0.4921733806461317","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@ajchemist/openviking-dsh-memory-plugin","version":"0.1.1","keywords":["deepseek-harness","dsh","openviking","memory","context","auto-recall","auto-capture"],"license":"Apache-2.0","_id":"@ajchemist/openviking-dsh-memory-plugin@0.1.1","maintainers":[{"name":"ajchemist","email":"valchemist@me.com"}],"homepage":"https://github.com/ajchemist/OpenViking#readme","bugs":{"url":"https://github.com/ajchemist/OpenViking/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"78ceae07f419c15f9b5874a924db2babc68cbcf2","tarball":"https://registry.npmjs.org/@ajchemist/openviking-dsh-memory-plugin/-/openviking-dsh-memory-plugin-0.1.1.tgz","fileCount":24,"integrity":"sha512-P99gQjRa5B6+aEcWCJu1YvAQk/JkUHEZgYPz76/8vo4ZtfJraQUQ8/5IEBgUFuYxXIbv3O0Ves24Se/Hwtlb2Q==","signatures":[{"sig":"MEUCIQD7ChE/RxxTgfwNLifQ/Mq/tQ0Iku7BhH3F8hBCDW02OwIgVHeqtKGIiJ3sAr0mchgBpP0eRBy+sKJag6zPHdOejkU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ajchemist%2fopenviking-dsh-memory-plugin@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":136298},"main":"index.mjs","type":"module","engines":{"node":"^22.19.0 || >=24"},"exports":{".":"./index.mjs"},"gitHead":"2991d83226a74611e4a2d32642d0e3639aa900c1","scripts":{"test":"node --test *.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:30afe498-aa46-421f-83c4-bfe3b3c89909"}},"repository":{"url":"git+https://github.com/ajchemist/OpenViking.git","type":"git","directory":"examples/dsh-memory-plugin"},"_npmVersion":"11.17.0","description":"OpenViking memory and context bundle for DeepSeek Harness","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@deepseek-ai/dsh-llm":"0.1.0-rc.6","@deepseek-ai/dsh-tools":"0.1.0-rc.6"},"peerDependencies":{"@deepseek-ai/dsh-llm":"0.1.0-rc.6","@deepseek-ai/dsh-tools":"0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/openviking-dsh-memory-plugin_0.1.1_1786960269093_0.5996233760837766","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@ajchemist/openviking-dsh-memory-plugin","version":"0.1.2","keywords":["deepseek-harness","dsh","openviking","memory","context","auto-recall","auto-capture"],"license":"Apache-2.0","_id":"@ajchemist/openviking-dsh-memory-plugin@0.1.2","maintainers":[{"name":"ajchemist","email":"valchemist@me.com"}],"homepage":"https://github.com/ajchemist/OpenViking#readme","bugs":{"url":"https://github.com/ajchemist/OpenViking/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"7b314500f2ae5f0582cc865b70beaed68cfb5a09","tarball":"https://registry.npmjs.org/@ajchemist/openviking-dsh-memory-plugin/-/openviking-dsh-memory-plugin-0.1.2.tgz","fileCount":26,"integrity":"sha512-uU3MdXbwMg9vi3lnBSdDKdG/uE1e93g6lpVDrrVM7GavPVMv+J2qOheYuVfkcCh0qfkHKCT0XqXXwW+H0g1DnA==","signatures":[{"sig":"MEQCIAUMbCt4TWmdLBqZZ6rY5t5e8rjhy0Y5NU7Rzuh19ZymAiB/lsN0F0reee8vHhaZLqlcMxeOHHrWLH5osPcs7guxHA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ajchemist%2fopenviking-dsh-memory-plugin@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":142251},"main":"index.mjs","type":"module","engines":{"node":"^22.19.0 || >=24"},"exports":{".":"./index.mjs"},"gitHead":"edc626b4f76039adf9429193ca3ae59e6b9f4c75","scripts":{"test":"node --test *.test.mjs","check":"node ./check.mjs","verify":"npm run check && npm test && npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:30afe498-aa46-421f-83c4-bfe3b3c89909"}},"repository":{"url":"git+https://github.com/ajchemist/OpenViking.git","type":"git","directory":"examples/dsh-memory-plugin"},"_npmVersion":"11.17.0","description":"OpenViking memory and context bundle for DeepSeek Harness","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@deepseek-ai/dsh-llm":"0.1.0-rc.6","@deepseek-ai/dsh-tools":"0.1.0-rc.6"},"peerDependencies":{"@deepseek-ai/dsh-llm":"0.1.0-rc.6","@deepseek-ai/dsh-tools":"0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/openviking-dsh-memory-plugin_0.1.2_1786964378051_0.33384203317241123","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@ajchemist/openviking-dsh-memory-plugin","version":"0.1.3","keywords":["deepseek-harness","dsh","openviking","memory","context","auto-recall","auto-capture"],"license":"Apache-2.0","_id":"@ajchemist/openviking-dsh-memory-plugin@0.1.3","maintainers":[{"name":"ajchemist","email":"valchemist@me.com"}],"homepage":"https://github.com/ajchemist/OpenViking#readme","bugs":{"url":"https://github.com/ajchemist/OpenViking/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"55f6592cd86bfc4170e5f5ce8da1e0ceace588c1","tarball":"https://registry.npmjs.org/@ajchemist/openviking-dsh-memory-plugin/-/openviking-dsh-memory-plugin-0.1.3.tgz","fileCount":26,"integrity":"sha512-VBbUaYYLfYgabkowdeHm4BlQgnzFlde6sAeNau+RiCuRzbuYfuyGUDy6kiXDKPRLaMvoJukmsAuMYAo4zt6NhA==","signatures":[{"sig":"MEUCIFH4wS77xSnfeitIea/ueXpW6kEmQjM/JxS/vydqgu/VAiEA5ImR5rRcHqjRHMVk1n80JANejm8/bz7HhH+VGrWCt6c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ajchemist%2fopenviking-dsh-memory-plugin@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":144024},"main":"index.mjs","type":"module","engines":{"node":"^22.19.0 || >=24"},"exports":{".":"./index.mjs"},"gitHead":"b7b941cc68c030c9c9b71f9dc63e3499437de298","scripts":{"test":"node --test *.test.mjs","check":"node ./check.mjs","verify":"npm run check && npm test && npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:30afe498-aa46-421f-83c4-bfe3b3c89909"}},"repository":{"url":"git+https://github.com/ajchemist/OpenViking.git","type":"git","directory":"examples/dsh-memory-plugin"},"_npmVersion":"11.17.0","description":"OpenViking memory and context bundle for DeepSeek Harness","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@deepseek-ai/dsh-llm":"0.1.0-rc.6","@deepseek-ai/dsh-tools":"0.1.0-rc.6"},"peerDependencies":{"@deepseek-ai/dsh-llm":"0.1.0-rc.6","@deepseek-ai/dsh-tools":"0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/openviking-dsh-memory-plugin_0.1.3_1786964550998_0.12353436356687864","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@ajchemist/openviking-dsh-memory-plugin","version":"0.1.4","description":"OpenViking memory and context bundle for DeepSeek Harness","type":"module","main":"index.mjs","exports":{".":"./index.mjs"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"scripts":{"check":"node ./check.mjs","test":"node --test *.test.mjs","verify":"npm run check && npm test && npm pack --dry-run"},"peerDependencies":{"@deepseek-ai/dsh-llm":"0.1.0-rc.6","@deepseek-ai/dsh-tools":"0.1.0-rc.6"},"devDependencies":{"@deepseek-ai/dsh-llm":"0.1.0-rc.6","@deepseek-ai/dsh-tools":"0.1.0-rc.6"},"engines":{"node":"^22.19.0 || >=24"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/ajchemist/OpenViking.git","directory":"examples/dsh-memory-plugin"},"keywords":["deepseek-harness","dsh","openviking","memory","context","auto-recall","auto-capture"],"license":"Apache-2.0","gitHead":"8991b0fe099d5f1047aae43fc97411e6728313fe","_id":"@ajchemist/openviking-dsh-memory-plugin@0.1.4","bugs":{"url":"https://github.com/ajchemist/OpenViking/issues"},"homepage":"https://github.com/ajchemist/OpenViking#readme","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-zpYpJRlLMuZiiszbiKTl5DhGK+ueduchQu9gjA3ukA0r3zzSfX8iDhFTCaU40EM9xp8S5Zomf2NKJ53eaV1iUA==","shasum":"525b4a191aed88d4184f2dd03e4a8bb088e49201","tarball":"https://registry.npmjs.org/@ajchemist/openviking-dsh-memory-plugin/-/openviking-dsh-memory-plugin-0.1.4.tgz","fileCount":26,"unpackedSize":144050,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ajchemist%2fopenviking-dsh-memory-plugin@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDGMfbWy96Dhvcx/T+LXpqboZ+Xg3SIogMhKv92809lNQIhAOz8UIM2CQcpBixonveZnqMWpwnaFSZVurvsJz6jYlwd"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:30afe498-aa46-421f-83c4-bfe3b3c89909"}},"directories":{},"maintainers":[{"name":"ajchemist","email":"valchemist@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/openviking-dsh-memory-plugin_0.1.4_1786964652051_0.7798184347880064"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-17T09:41:50.745Z","modified":"2026-08-17T11:04:12.655Z","0.1.0":"2026-08-17T09:41:51.074Z","0.1.1":"2026-08-17T09:51:09.218Z","0.1.2":"2026-08-17T10:59:38.196Z","0.1.3":"2026-08-17T11:02:31.172Z","0.1.4":"2026-08-17T11:04:12.198Z"},"bugs":{"url":"https://github.com/ajchemist/OpenViking/issues"},"license":"Apache-2.0","homepage":"https://github.com/ajchemist/OpenViking#readme","keywords":["deepseek-harness","dsh","openviking","memory","context","auto-recall","auto-capture"],"repository":{"type":"git","url":"git+https://github.com/ajchemist/OpenViking.git","directory":"examples/dsh-memory-plugin"},"description":"OpenViking memory and context bundle for DeepSeek Harness","maintainers":[{"name":"ajchemist","email":"valchemist@me.com"}],"readme":"# OpenViking Memory for DeepSeek Harness\n\nAn installable DeepSeek Harness bundle that adds OpenViking auto-recall, session capture, `viking://` URI protection, and model-invocable memory tools.\n\n## Requirements\n\n- `@deepseek-ai/dsh` `0.1.0-rc.6`\n- Node.js `^22.19.0` or `>=24`\n- A reachable OpenViking server\n\nThe bundle has no runtime npm dependencies. Its tool and message structures\ncome from the DSH constructors (`defineTool` from `@deepseek-ai/dsh-tools`,\n`createUserMessage` from `@deepseek-ai/dsh-llm`) behind exact-pinned\npeerDependencies that DSH exposes through its profile fallback at boot time, so\nthe definitions track DSH's contracts instead of hand-built object shapes.\nIt is tested against `0.1.0-rc.6`; install that exact DSH release because\nprerelease package dist-tags are not synchronized across the package family.\n\n## Why injection uses pre-step user messages, not the system prompt\n\nRecall and profile context enter through the `agent/pre-step` waterfall as\ndurable, source-attributed user messages (`source: { kind: 'plugin', … }`).\nThey are deliberately **not** added to the system prompt: a DSH preset whose\npersona declares `complete: true` (the stock `minimal` preset does) restores\nthat persona as the sole prompt section after assembly, silently discarding\nevery other contribution — a system-prompt-based memory plugin loses its\ncontext under such presets with no error. Pre-step injection also makes each\ninjection a session event that replays, is visible to compaction, and never\nreaches `request/header`.\n\n## Install\n\nFrom the OpenViking repository:\n\n```bash\ndsh plugin --profile default add ./examples/dsh-memory-plugin\n```\n\nOr install the published package:\n\n```bash\ndsh plugin --profile default add @ajchemist/openviking-dsh-memory-plugin\n```\n\nConfirm that the profile includes the bundle:\n\n```bash\ndsh --profile default --dump-config\n```\n\nThe package patch mounts the runtime inside a Cordis group with an isolated `openvikingMemory` service.\n\n## Configuration\n\nOpenViking credentials use the same resolution order as the other memory plugins:\n\n1. `OPENVIKING_*` environment variables\n2. `~/.openviking/ovcli.conf`\n3. `~/.openviking/ov.conf`\n\nCommon environment variables:\n\n| Variable | Purpose |\n| --- | --- |\n| `OPENVIKING_URL` / `OPENVIKING_BASE_URL` | OpenViking server endpoint |\n| `OPENVIKING_API_KEY` / `OPENVIKING_BEARER_TOKEN` | Bearer credential |\n| `OPENVIKING_ACCOUNT` | Trusted-mode account |\n| `OPENVIKING_USER` | Trusted-mode user |\n| `OPENVIKING_AGENT` | Agent namespace identity sent as `X-OpenViking-Agent` |\n| `OPENVIKING_PEER_ID` | Explicit actor peer |\n| `OPENVIKING_WORKSPACE_PEER` | Derive a peer from each DSH session workspace by default |\n| `OPENVIKING_RECALL_PEER_SCOPE` | `all` for cross-workspace recall or `actor` for isolation |\n\nThe patch can also carry plugin config:\n\n```yaml\n- insert:\n    - id: openviking-memory\n      name: '@deepseek-ai/cordis-plugin-group'\n      group: true\n      isolate:\n        openvikingMemory: true\n      config:\n        - id: openviking-memory-runtime\n          name: '@ajchemist/openviking-dsh-memory-plugin'\n          config:\n            endpoint: http://127.0.0.1:1933\n            agent: dsh\n            recallTokenBudget: 2000\n            scoreThreshold: 0.35\n            captureToolResults: false\n            commitTokenThreshold: 20000\n```\n\n## Behavior\n\n- `agent/session-start` injects the OpenViking profile and available-memory index through `agent.inject()`.\n- `agent/pre-step` retrieves with the current step input and appends a durable plugin message to that same step.\n- `session/event` captures user, assistant, and optionally tool-result messages without scraping a transcript.\n- `turn/end` checks the OpenViking pending-token threshold and commits when required.\n- Failed writes enter the shared OpenViking pending queue for replay at the next session start.\n- `tools/pre-execute` blocks DSH filesystem and shell tools from treating `viking://` URIs as local paths.\n\nEach DSH session maps to `dsh-<session-id>` in OpenViking. Workspace-derived actor peers are resolved per session and sent on every session-specific request.\n\n## Tools\n\nThe bundle registers:\n\n- `viking_search`\n- `viking_read`\n- `viking_browse`\n- `viking_remember`\n- `viking_forget`\n- `viking_add_resource`\n- `viking_archive_expand`\n\n`viking_forget` performs permanent deletion. The calling model should use it only when the user explicitly requests deletion.\n\n## Testing\n\n```bash\nnpm ci             # installs the exact-pinned dsh devDependencies the tests exercise\nnpm run check      # manifest, bundle contract, module syntax, agent-header smoke check\nnpm test           # behavioral tests — runs in the repo's PR workflow\nnpm run verify     # check + test + npm pack --dry-run; required before publishing\n```\n\nThe release workflow runs `npm run verify` before it can publish. It then uses npm\nTrusted Publishing from GitHub Actions (OIDC) and only publishes versions absent\nfrom the registry.\n\n### Updating a local DSH profile from a verified release\n\nAfter a release is published, update the local profile with the version you intend\nto install:\n\n```bash\nnode scripts/update-dsh-profile.mjs 0.1.1\n```\n\nThe updater verifies that the exact version is in npm's registry, has integrity\nmetadata and npm provenance, backs up the profile manifest, installs the exact\nversion, and verifies the installed package version. It never installs an\nunpublished local checkout.\n\n`live-recall.test.mjs` is an opt-in end-to-end gate against a real OpenViking\nserver: it stores a sentinel memory through a session commit, waits for\nextraction, and asserts recall returns that sentinel — the property no stub\ncan certify. Enable it with `OPENVIKING_E2E=1` plus the normal credential\nchain; it skips otherwise (including in CI until a server secret exists).\n","readmeFilename":"README.md"}