Skip to content

fix: include version in generated DSH plugin package.json (fixes #408) - #410

Open
PerryLink wants to merge 1 commit into
MemTensor:mainfrom
PerryLink:fix/408-dsh-plugin-version
Open

PerryLink wants to merge 1 commit into
MemTensor:mainfrom
PerryLink:fix/408-dsh-plugin-version

Conversation

@PerryLink

Copy link
Copy Markdown

Summary

Fixes #408.

The DeepSeek Harness integration writes the @memmy/memmy-memory plugin's package.json without a version field. DSH's plugin package inventory (@deepseek-ai/dsh-plugin-package-inventory-deepseek) re-reads that manifest before every DeepSeek request and rejects a bare-name plugin row unless both name and version are non-empty, so every DeepSeek request fails during preparation with REQUEST_EXTENSION / plugin-package-inventory-deepseek: ... must declare non-empty name and version. The turn dies before any HTTP call reaches the model.

Root cause

createDeepseekHarnessPluginPackageManifest() — the generator behind <DSH_HOME>/profiles/node_modules/@memmy/memmy-memory/package.json — returned a manifest with name but no version. private: true only prevents npm publishing; it does not make version optional for consumers that resolve the package by name.

Changes

  • Memory/src/agent-source/integration/templates/memmy-deepseek-harness-plugin.ts: the generated manifest now includes version: MEMORY_SERVICE_VERSION (currently 2.1.2), imported from src/version.ts — the same convention the Memory-side OpenClaw and Hermes targets already use for their generated plugin manifests.
  • App/backend/src/adapters/outbound/skill-writer/templates/memmy-deepseek-harness-plugin.ts: the parallel backend copy now includes version: MEMMY_VERSION (currently 1.1.4), imported from src/project-version.ts — the same convention the backend OpenClaw and Hermes targets already use.
  • App/backend/src/adapters/outbound/skill-writer/deepseek-harness/tests/target.test.ts: the assertion that the generated manifest has no version is replaced with an assertion that it equals MEMMY_VERSION.

Both generators keep their manifest in sync with their workspace's own release version automatically, so the emitted version stays valid and non-empty on every future release without extra bookkeeping.

Verification

  • npx vitest run src/adapters/outbound/skill-writer/deepseek-harness/tests/target.test.ts — 9/9 passed (includes the updated manifest assertion and the stale-manifest detection test).
  • npx vitest run src/adapters/outbound/skill-writer/tests/l3-world-model-adapter-matrix.test.ts — 2/2 passed.
  • npm run typecheck -w @memmy/backend — passed.
  • npm run typecheck -w @memmy/memory — passed.
  • Runtime smoke: executing both manifest generators directly now yields "version": "2.1.2" (Memory) and "version": "1.1.4" (backend) in the written package.json, alongside the existing fields.

Note: dependencies were installed with --ignore-scripts because the better-sqlite3 prebuild download timed out and node-gyp found no usable Python on the verification machine. The affected code paths and all tests above do not load native modules, so this does not affect the verification results.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] DeepSeek Harness integration writes a plugin package.json without a version field, which makes every DeepSeek request fail

1 participant