{"_id":"@abruzz1/dsh-plugin-test","name":"@abruzz1/dsh-plugin-test","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@abruzz1/dsh-plugin-test","version":"0.1.0","description":"TEST PUBLISH of @memorylake/dsh-plugin — do not depend on this package","type":"module","license":"MIT","publishConfig":{"access":"public"},"keywords":["dsh","deepseek-harness","memorylake","memory","long-term-memory"],"repository":{"type":"git","url":"git+https://github.com/memorylake-ai/memorylake-harness.git","directory":"dsh-plugin"},"exports":{"./service":{"types":"./lib/service.d.ts","default":"./lib/service.js"},"./tools":{"types":"./lib/tools.d.ts","default":"./lib/tools.js"},"./package.json":"./package.json"},"engines":{"node":"^22.19 || >=24"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-skill":"^0.1.0-rc.5","@deepseek-ai/dsh-subprocess":"^0.1.0-rc.5","@deepseek-ai/dsh-system-prompt":"^0.1.0-rc.5","@deepseek-ai/dsh-tools":"^0.1.0-rc.5"},"dependencies":{"@deepseek-ai/schemastery":"^3.18.1"},"_id":"@abruzz1/dsh-plugin-test@0.1.0","bugs":{"url":"https://github.com/memorylake-ai/memorylake-harness/issues"},"homepage":"https://github.com/memorylake-ai/memorylake-harness#readme","_nodeVersion":"22.19.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-mSZIZva70M/1lfMEzYa+FizpaPrRUew03GxqrfvUddkihT40Qr6azbdioxnICZvdFNXJjXcJPbNdZsbSYfI9HQ==","shasum":"dc2064f3a7ec33f58db37568c7765822eace643a","tarball":"https://registry.npmjs.org/@abruzz1/dsh-plugin-test/-/dsh-plugin-test-0.1.0.tgz","fileCount":17,"unpackedSize":106784,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGHZEBOEFggVKyQePWxxB/kaKZVVnnXYSRm2bZGK90QKAiEAkAU7YyvRpcuss6Uh0GRt06AOia/2WKMhXzRgQwyP3Iw="}]},"_npmUser":{"name":"abruzz1","email":"a1594834522@gmail.com"},"directories":{},"maintainers":[{"name":"abruzz1","email":"a1594834522@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-plugin-test_0.1.0_1786702180637_0.7724329250603434"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-14T10:09:40.329Z","0.1.0":"2026-08-14T10:09:40.780Z","modified":"2026-08-14T10:09:41.145Z"},"maintainers":[{"name":"abruzz1","email":"a1594834522@gmail.com"}],"description":"TEST PUBLISH of @memorylake/dsh-plugin — do not depend on this package","homepage":"https://github.com/memorylake-ai/memorylake-harness#readme","keywords":["dsh","deepseek-harness","memorylake","memory","long-term-memory"],"repository":{"type":"git","url":"git+https://github.com/memorylake-ai/memorylake-harness.git","directory":"dsh-plugin"},"bugs":{"url":"https://github.com/memorylake-ai/memorylake-harness/issues"},"license":"MIT","readme":"# @memorylake/dsh-plugin\n\nMemory Lake for [DeepSeek Harness (dsh)](https://github.com/deepseek-ai/deepseek-harness):\npersistent, cross-session, cross-project, cross-device memory.\n\ndsh ships no native memory capability, so this plugin is not a bridge to one —\nit IS the harness's memory layer. It contributes:\n\n- **Three tools** — `memory_search`, `memory_remember`, `memory_forget` —\n  backed by the `memorylake` CLI (never by direct HTTP, never through a shell).\n- **A prompt section** owning the policy: when to remember, how to phrase\n  recall queries, how to read results, and that a failed search is never an\n  empty one.\n- **A one-line status context** reporting connectivity — most importantly when\n  the backend is UNREACHABLE, because a silently unavailable memory backend is\n  indistinguishable from \"you never told me that\".\n- **Two user-invocable skills** — type `/memorylake-init` for the guided setup\n  wizard (CLI download with mandatory checksum verification, login, shared\n  config) and `/memorylake-status` for the end-to-end health check. The model\n  cannot trigger either.\n\n## Install\n\n```sh\ndsh plugin --profile <name> add @memorylake/dsh-plugin\ndsh --profile <name> --dump-config   # shows the \"@memorylake/dsh-plugin\" layer\ndsh --profile <name>\n```\n\nThe package publishes with built `lib/`, so no build allowance is needed. A\n`github:` install also works — a self-contained `prepare` script builds from\nsource — but pnpm ≥10 will ask you to allowlist the build; prefer the\nregistry install.\n\n## Zero-config on a machine that already has Memory Lake\n\nIdentity and switches live in the **shared `~/.memorylake/` tree**, not in\nthis plugin:\n\n- `~/.memorylake/credentials.toml` — the CLI's login state\n- `~/.memorylake/harness/config.md` — workspace, actor, and feature flags\n- `<repo>/.claude/memorylake.local.md` — optional per-project override,\n  **merged key by key** over the global file (a one-line\n  `sync_on_write: false` override keeps the global workspace working)\n\nIf the Claude Code or Codex integration already wrote these, a dsh session\npicks them up with zero additional steps: status line, tools, recall — all\nlive. Config files are re-read on every call, so `/memorylake-init` finishing\nmid-session takes effect on the very next message, no restart.\n\nWhen nothing is configured, the plugin is **completely silent**: no network\nrequests, no prompt injection. Only an explicitly invoked memory tool answers,\nand only to point at `/memorylake-init`.\n\n### Shared config keys (`config.md` / `memorylake.local.md` frontmatter)\n\n| Key | Default | Meaning |\n| --- | --- | --- |\n| `workspace` | — | Memory Lake workspace id. The only required key; absent means the plugin stays silent |\n| `actor` | — | Actor id facts are attributed to; required for writes |\n| `enabled` | `true` | `false` switches the plugin off entirely |\n| `sync_on_write` | `true` | `false` makes memory read-only (the canonical per-project override) |\n| `status_line` | `true` | `false` suppresses the session status line |\n\nKeys consumed by the other harnesses (`remind_on_read`, `sync_deny`,\n`projects`, `project_custom_id`) are parsed and preserved but not consumed by\nthis plugin's v1.\n\n## Deployment knobs (cordis config)\n\nOnly operational tuning lives in the bundle's rows; override by `id` in your\nprofile's `cordis.patch.yml` (a patch replaces the row's whole `config`).\n\nRow `memorylake` (`@memorylake/dsh-plugin/service`):\n\n| Key | Default | Meaning |\n| --- | --- | --- |\n| `binaryPath` | — | Absolute path of the `memorylake` binary, overriding resolution (PATH, then `~/.memorylake/bin/memorylake`) |\n| `timeoutMs` | `30000` | Hard deadline per CLI invocation |\n| `killGraceMs` | `2000` | SIGTERM→SIGKILL grace on timeout/cancel |\n| `maxOutputBytes` | `1000000` | In-memory cap per collected CLI stream |\n\nRow `memorylake-tools` (`@memorylake/dsh-plugin/tools`):\n\n| Key | Default | Meaning |\n| --- | --- | --- |\n| `topKMax` | `10` | Upper bound for the model's `top_k` |\n| `statusTtlSeconds` | `600` | Status-line refresh interval and cache TTL |\n\n## Behavior notes\n\n- **Authentication is CLI login state.** The dsh subprocess seam scrubs\n  credential-shaped environment names from children, so an ambient\n  `MEMORYLAKE_API_KEY` is never forwarded — by design, and matching the CLI's\n  own \"env vars alone are not a session\" rule. Log in once with\n  `memorylake auth login` (the init skill walks through it).\n- **Payload before exit code.** The CLI prints its full JSON payload and then\n  encodes the business outcome in the exit code (`fact delete` exits non-zero\n  when ids were not found). The plugin parses first and classifies second.\n- **Failure is not emptiness.** Unavailable backends produce an explicit\n  `notice` in the tool value and a loud status line, instructing the model to\n  attribute empty results to the connection rather than to missing memory.\n- **Scores are ordering-only.** Relevance scores sort results and are then\n  discarded; they never reach the model (they are weakly calibrated, and a\n  model shown a number treats it as authority).\n- **No auto-recall, no session memory digest.** Both were evaluated and\n  rejected in the Claude Code integration: fixed token cost on sessions that\n  never touch memory, no behavioral gain. The status line reports\n  connectivity only.\n\n## v2 roadmap (deliberately not in v1)\n\n- **Session→conversation cook**: append dsh session transcripts as Memory Lake\n  conversations and let the backend distill them into memories — dsh's\n  \"model-visible ⟺ logged\" invariant makes the transcript complete, which no\n  other harness guarantees. Privacy defaults off.\n- **Document search**: Library upload + project import, and passing\n  `--projects` on search (without it the server returns zero document hits —\n  facts are unaffected, which is why v1 is facts-only).\n- **Project identity**: the explicit-custom-id → normalized-git-remote →\n  physical-path rule shared with the other harnesses.\n- **Session-start facts digest**: a small, config-gated summary — dsh has no\n  local MEMORY.md, so unlike the other harnesses this may carry real value,\n  but it must first justify its token cost.\n- **Upstreaming** as an in-tree `packages/memorylake/` capability seam.\n\n## Development\n\n```sh\npnpm install\npnpm test        # vitest: unit + integration + real-Loader composition\npnpm build       # tsc → lib/\n```\n\nTests run against a mock `memorylake` binary and an isolated data tree; no\nnetwork, no API key, and no touching your real `~/.memorylake`.\n","readmeFilename":"README.md","_rev":"1-29c8dd8c8aa951c74a154b54de5a7345"}