memorix 1.4.4 → 1.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +9 -2
  3. package/README.zh-CN.md +9 -2
  4. package/dist/cli/index.js +348 -127
  5. package/dist/index.js +35 -5
  6. package/dist/memcode-runtime/CHANGELOG.md +15 -0
  7. package/dist/sdk.js +34 -4
  8. package/dist/types.d.ts +1 -1
  9. package/docs/AGENT_OPERATOR_PLAYBOOK.md +3 -2
  10. package/docs/INTEGRATIONS.md +9 -2
  11. package/docs/KNOWN_ISSUES_AND_ROADMAP.md +1 -0
  12. package/docs/MEMCODE.md +1 -1
  13. package/docs/SETUP.md +9 -1
  14. package/llms-full.txt +5 -4
  15. package/llms.txt +1 -1
  16. package/package.json +1 -1
  17. package/plugins/claude/memorix/.claude-plugin/plugin.json +1 -1
  18. package/plugins/codebuddy/memorix/.codebuddy-plugin/plugin.json +1 -1
  19. package/plugins/codex/memorix/.codex-plugin/plugin.json +1 -1
  20. package/plugins/copilot/memorix/plugin.json +1 -1
  21. package/plugins/gemini/memorix/gemini-extension.json +1 -1
  22. package/plugins/omp/memorix/package.json +1 -1
  23. package/plugins/openclaw/memorix/.codex-plugin/plugin.json +1 -1
  24. package/plugins/pi/memorix/package.json +1 -1
  25. package/server.json +2 -2
  26. package/src/cli/commands/agent-integrations.ts +7 -1
  27. package/src/cli/commands/hooks-install.ts +2 -0
  28. package/src/cli/commands/hooks-preview.ts +5 -0
  29. package/src/cli/commands/integrate.ts +2 -0
  30. package/src/cli/commands/setup.ts +57 -2
  31. package/src/cli/commands/uninstall.ts +20 -0
  32. package/src/hooks/installers/index.ts +43 -2
  33. package/src/hooks/types.ts +2 -0
  34. package/src/integrations/registry.ts +9 -0
  35. package/src/types.ts +1 -1
  36. package/src/workspace/mcp-adapters/dsh.ts +147 -0
package/dist/index.js CHANGED
@@ -164221,7 +164221,7 @@ async function installOfficialSkillsForAgent(agent, projectRoot, global2 = false
164221
164221
  const dirs = AGENT_SKILL_DIRS[agent];
164222
164222
  const relativeDir = global2 ? dirs?.global : dirs?.project;
164223
164223
  if (!relativeDir) return [];
164224
- const root = global2 ? os3.homedir() : projectRoot;
164224
+ const root = global2 ? agent === "dsh" ? process.env.DSH_HOME?.trim() || path32.join(os3.homedir(), ".dsh") : os3.homedir() : projectRoot;
164225
164225
  const skillPaths = [];
164226
164226
  for (const skillEntry of OFFICIAL_MEMORIX_SKILLS) {
164227
164227
  const skillPath = path32.join(root, relativeDir, skillEntry.name, "SKILL.md");
@@ -164453,6 +164453,8 @@ function getProjectConfigPath(agent, projectRoot) {
164453
164453
  return path32.join(projectRoot, "AGENTS.md");
164454
164454
  case "trae":
164455
164455
  return path32.join(projectRoot, ".trae", "rules", "project_rules.md");
164456
+ case "dsh":
164457
+ return path32.join(projectRoot, "AGENTS.md");
164456
164458
  case "opencode":
164457
164459
  return path32.join(projectRoot, ".opencode", "plugins", "memorix.js");
164458
164460
  case "pi":
@@ -164498,6 +164500,8 @@ function getGlobalConfigPath(agent) {
164498
164500
  return path32.join(home, ".omp", "agent", "packages", "memorix", "extensions", "memorix.js");
164499
164501
  case "trae":
164500
164502
  return path32.join(home, ".trae", "rules", "project_rules.md");
164503
+ case "dsh":
164504
+ return path32.join(process.env.DSH_HOME?.trim() || path32.join(home, ".dsh"), "AGENTS.md");
164501
164505
  default:
164502
164506
  return path32.join(home, ".memorix", "hooks.json");
164503
164507
  }
@@ -164522,6 +164526,8 @@ function getAgentRulesPath(agent, root, global2 = false) {
164522
164526
  return path32.join(root, ".gemini", "GEMINI.md");
164523
164527
  case "trae":
164524
164528
  return path32.join(root, ".trae", "rules", "project_rules.md");
164529
+ case "dsh":
164530
+ return path32.join(process.env.DSH_HOME?.trim() || path32.join(root, ".dsh"), "AGENTS.md");
164525
164531
  default:
164526
164532
  return path32.join(root, ".agent", "rules", "memorix.md");
164527
164533
  }
@@ -164546,6 +164552,8 @@ function getAgentRulesPath(agent, root, global2 = false) {
164546
164552
  return path32.join(root, "GEMINI.md");
164547
164553
  case "trae":
164548
164554
  return path32.join(root, ".trae", "rules", "project_rules.md");
164555
+ case "dsh":
164556
+ return path32.join(root, "AGENTS.md");
164549
164557
  default:
164550
164558
  return path32.join(root, ".agent", "rules", "memorix.md");
164551
164559
  }
@@ -164628,6 +164636,12 @@ async function detectInstalledAgents() {
164628
164636
  agents.push("trae");
164629
164637
  } catch {
164630
164638
  }
164639
+ const dshDir = process.env.DSH_HOME?.trim() || path32.join(home, ".dsh");
164640
+ try {
164641
+ await fs21.access(dshDir);
164642
+ agents.push("dsh");
164643
+ } catch {
164644
+ }
164631
164645
  return agents;
164632
164646
  }
164633
164647
  async function installHooks(agent, projectRoot, global2 = false) {
@@ -164710,6 +164724,19 @@ async function installHooks(agent, projectRoot, global2 = false) {
164710
164724
  generated: { note: "Trae has no hooks system, only rules (.trae/rules/project_rules.md) installed" }
164711
164725
  };
164712
164726
  }
164727
+ case "dsh": {
164728
+ const rulesPath = await installAgentRules(agent, projectRoot, global2);
164729
+ const skillPaths2 = await installOfficialSkillsForAgent(agent, projectRoot, global2);
164730
+ return {
164731
+ agent,
164732
+ configPath: rulesPath,
164733
+ events: [],
164734
+ generated: {
164735
+ note: "DeepSeek Harness has no hook system \u2014 installed AGENTS.md guidance and skills; the MCP row is installed by `memorix setup --agent dsh`.",
164736
+ ...skillPaths2.length > 0 ? { skillPaths: skillPaths2, skillPath: skillPaths2[0] } : {}
164737
+ }
164738
+ };
164739
+ }
164713
164740
  case "opencode": {
164714
164741
  const pluginContent = generateOpenCodePlugin();
164715
164742
  const pluginPath = global2 ? getGlobalConfigPath(agent) : getProjectConfigPath(agent, projectRoot);
@@ -164844,7 +164871,7 @@ async function installAgentRules(agent, projectRoot, global2 = false) {
164844
164871
  const rulesPath = getAgentRulesPath(agent, rulesRoot, global2);
164845
164872
  try {
164846
164873
  await fs21.mkdir(path32.dirname(rulesPath), { recursive: true });
164847
- if (agent === "claude" || agent === "codex" || agent === "opencode" || agent === "antigravity" || agent === "gemini-cli") {
164874
+ if (agent === "claude" || agent === "codex" || agent === "opencode" || agent === "antigravity" || agent === "gemini-cli" || agent === "dsh") {
164848
164875
  try {
164849
164876
  const existing = await fs21.readFile(rulesPath, "utf-8");
164850
164877
  await fs21.writeFile(rulesPath, mergeMemorixRulesContent(existing, rulesContent), "utf-8");
@@ -165133,7 +165160,10 @@ var init_installers = __esm({
165133
165160
  windsurf: { project: path32.join(".windsurf", "skills"), global: path32.join(".windsurf", "skills") },
165134
165161
  kiro: { project: path32.join(".kiro", "skills"), global: path32.join(".kiro", "skills") },
165135
165162
  opencode: { project: path32.join(".opencode", "skills"), global: path32.join(".config", "opencode", "skills") },
165136
- trae: { project: path32.join(".trae", "skills"), global: path32.join(".trae", "skills") }
165163
+ trae: { project: path32.join(".trae", "skills"), global: path32.join(".trae", "skills") },
165164
+ // DSH's user skill root is <harness home>/skills; the global root below is
165165
+ // resolved to $DSH_HOME (or ~/.dsh) for dsh by installOfficialSkillsForAgent.
165166
+ dsh: { project: path32.join(".dsh", "skills"), global: "skills" }
165137
165167
  };
165138
165168
  PACKAGE_OWNED_HOOK_AGENTS = /* @__PURE__ */ new Set(["openclaw", "hermes", "omp"]);
165139
165169
  }
@@ -165560,7 +165590,7 @@ The path should point to a directory containing a .git folder.`
165560
165590
  };
165561
165591
  const server = existingServer ?? new McpServer({
165562
165592
  name: "memorix",
165563
- version: true ? "1.4.4" : "1.0.1"
165593
+ version: true ? "1.4.5" : "1.0.1"
165564
165594
  });
165565
165595
  const originalRegisterTool = server.registerTool.bind(server);
165566
165596
  server.registerTool = ((name, ...args) => {
@@ -169893,7 +169923,7 @@ var init_serve_shared = __esm({
169893
169923
 
169894
169924
  // src/cli/version.ts
169895
169925
  function getCliVersion() {
169896
- return true ? "1.4.4" : pkg.version;
169926
+ return true ? "1.4.5" : pkg.version;
169897
169927
  }
169898
169928
  var init_version3 = __esm({
169899
169929
  "src/cli/version.ts"() {
@@ -2,6 +2,21 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [1.4.5] - 2026-08-14
6
+
7
+ ### Added
8
+ - **DeepSeek Harness integration** -- `memorix setup --agent dsh` installs
9
+ Memorix into DeepSeek's official harness: a `@deepseek-ai/dsh-mcp-client`
10
+ row in `$DSH_HOME/cordis.patch.yml` (tools appear as `mcp__memorix__*`),
11
+ AGENTS.md guidance at the harness and project levels, and official skills
12
+ under `$DSH_HOME/skills` or `.dsh/skills`. Existing user patch rows are
13
+ preserved and installs are idempotent. DSH has no hook surface, so none is
14
+ written. `doctor`, `repair`, `uninstall`, and `setup --list` cover the new
15
+ target, and MCP checks for user-level-only adapters now run under an
16
+ explicit global scope (fixing the same latent skip for Trae). Native
17
+ validation composed the generated patch with the real
18
+ `@deepseek-ai/dsh@0.1.0-rc.6` launcher.
19
+
5
20
  ## [1.4.4] - 2026-08-14
6
21
 
7
22
  ### Added
package/dist/sdk.js CHANGED
@@ -160280,7 +160280,7 @@ async function installOfficialSkillsForAgent(agent, projectRoot, global2 = false
160280
160280
  const dirs = AGENT_SKILL_DIRS[agent];
160281
160281
  const relativeDir = global2 ? dirs?.global : dirs?.project;
160282
160282
  if (!relativeDir) return [];
160283
- const root = global2 ? os3.homedir() : projectRoot;
160283
+ const root = global2 ? agent === "dsh" ? process.env.DSH_HOME?.trim() || path32.join(os3.homedir(), ".dsh") : os3.homedir() : projectRoot;
160284
160284
  const skillPaths = [];
160285
160285
  for (const skillEntry of OFFICIAL_MEMORIX_SKILLS) {
160286
160286
  const skillPath = path32.join(root, relativeDir, skillEntry.name, "SKILL.md");
@@ -160512,6 +160512,8 @@ function getProjectConfigPath(agent, projectRoot) {
160512
160512
  return path32.join(projectRoot, "AGENTS.md");
160513
160513
  case "trae":
160514
160514
  return path32.join(projectRoot, ".trae", "rules", "project_rules.md");
160515
+ case "dsh":
160516
+ return path32.join(projectRoot, "AGENTS.md");
160515
160517
  case "opencode":
160516
160518
  return path32.join(projectRoot, ".opencode", "plugins", "memorix.js");
160517
160519
  case "pi":
@@ -160557,6 +160559,8 @@ function getGlobalConfigPath(agent) {
160557
160559
  return path32.join(home, ".omp", "agent", "packages", "memorix", "extensions", "memorix.js");
160558
160560
  case "trae":
160559
160561
  return path32.join(home, ".trae", "rules", "project_rules.md");
160562
+ case "dsh":
160563
+ return path32.join(process.env.DSH_HOME?.trim() || path32.join(home, ".dsh"), "AGENTS.md");
160560
160564
  default:
160561
160565
  return path32.join(home, ".memorix", "hooks.json");
160562
160566
  }
@@ -160581,6 +160585,8 @@ function getAgentRulesPath(agent, root, global2 = false) {
160581
160585
  return path32.join(root, ".gemini", "GEMINI.md");
160582
160586
  case "trae":
160583
160587
  return path32.join(root, ".trae", "rules", "project_rules.md");
160588
+ case "dsh":
160589
+ return path32.join(process.env.DSH_HOME?.trim() || path32.join(root, ".dsh"), "AGENTS.md");
160584
160590
  default:
160585
160591
  return path32.join(root, ".agent", "rules", "memorix.md");
160586
160592
  }
@@ -160605,6 +160611,8 @@ function getAgentRulesPath(agent, root, global2 = false) {
160605
160611
  return path32.join(root, "GEMINI.md");
160606
160612
  case "trae":
160607
160613
  return path32.join(root, ".trae", "rules", "project_rules.md");
160614
+ case "dsh":
160615
+ return path32.join(root, "AGENTS.md");
160608
160616
  default:
160609
160617
  return path32.join(root, ".agent", "rules", "memorix.md");
160610
160618
  }
@@ -160687,6 +160695,12 @@ async function detectInstalledAgents() {
160687
160695
  agents.push("trae");
160688
160696
  } catch {
160689
160697
  }
160698
+ const dshDir = process.env.DSH_HOME?.trim() || path32.join(home, ".dsh");
160699
+ try {
160700
+ await fs21.access(dshDir);
160701
+ agents.push("dsh");
160702
+ } catch {
160703
+ }
160690
160704
  return agents;
160691
160705
  }
160692
160706
  async function installHooks(agent, projectRoot, global2 = false) {
@@ -160769,6 +160783,19 @@ async function installHooks(agent, projectRoot, global2 = false) {
160769
160783
  generated: { note: "Trae has no hooks system, only rules (.trae/rules/project_rules.md) installed" }
160770
160784
  };
160771
160785
  }
160786
+ case "dsh": {
160787
+ const rulesPath = await installAgentRules(agent, projectRoot, global2);
160788
+ const skillPaths2 = await installOfficialSkillsForAgent(agent, projectRoot, global2);
160789
+ return {
160790
+ agent,
160791
+ configPath: rulesPath,
160792
+ events: [],
160793
+ generated: {
160794
+ note: "DeepSeek Harness has no hook system \u2014 installed AGENTS.md guidance and skills; the MCP row is installed by `memorix setup --agent dsh`.",
160795
+ ...skillPaths2.length > 0 ? { skillPaths: skillPaths2, skillPath: skillPaths2[0] } : {}
160796
+ }
160797
+ };
160798
+ }
160772
160799
  case "opencode": {
160773
160800
  const pluginContent = generateOpenCodePlugin();
160774
160801
  const pluginPath = global2 ? getGlobalConfigPath(agent) : getProjectConfigPath(agent, projectRoot);
@@ -160903,7 +160930,7 @@ async function installAgentRules(agent, projectRoot, global2 = false) {
160903
160930
  const rulesPath = getAgentRulesPath(agent, rulesRoot, global2);
160904
160931
  try {
160905
160932
  await fs21.mkdir(path32.dirname(rulesPath), { recursive: true });
160906
- if (agent === "claude" || agent === "codex" || agent === "opencode" || agent === "antigravity" || agent === "gemini-cli") {
160933
+ if (agent === "claude" || agent === "codex" || agent === "opencode" || agent === "antigravity" || agent === "gemini-cli" || agent === "dsh") {
160907
160934
  try {
160908
160935
  const existing = await fs21.readFile(rulesPath, "utf-8");
160909
160936
  await fs21.writeFile(rulesPath, mergeMemorixRulesContent(existing, rulesContent), "utf-8");
@@ -161192,7 +161219,10 @@ var init_installers = __esm({
161192
161219
  windsurf: { project: path32.join(".windsurf", "skills"), global: path32.join(".windsurf", "skills") },
161193
161220
  kiro: { project: path32.join(".kiro", "skills"), global: path32.join(".kiro", "skills") },
161194
161221
  opencode: { project: path32.join(".opencode", "skills"), global: path32.join(".config", "opencode", "skills") },
161195
- trae: { project: path32.join(".trae", "skills"), global: path32.join(".trae", "skills") }
161222
+ trae: { project: path32.join(".trae", "skills"), global: path32.join(".trae", "skills") },
161223
+ // DSH's user skill root is <harness home>/skills; the global root below is
161224
+ // resolved to $DSH_HOME (or ~/.dsh) for dsh by installOfficialSkillsForAgent.
161225
+ dsh: { project: path32.join(".dsh", "skills"), global: "skills" }
161196
161226
  };
161197
161227
  PACKAGE_OWNED_HOOK_AGENTS = /* @__PURE__ */ new Set(["openclaw", "hermes", "omp"]);
161198
161228
  }
@@ -165374,7 +165404,7 @@ The path should point to a directory containing a .git folder.`
165374
165404
  };
165375
165405
  const server = existingServer ?? new McpServer({
165376
165406
  name: "memorix",
165377
- version: true ? "1.4.4" : "1.0.1"
165407
+ version: true ? "1.4.5" : "1.0.1"
165378
165408
  });
165379
165409
  const originalRegisterTool = server.registerTool.bind(server);
165380
165410
  server.registerTool = ((name, ...args) => {
package/dist/types.d.ts CHANGED
@@ -592,7 +592,7 @@ interface MemoryRef {
592
592
  /** MCP config format adapter interface */
593
593
  interface MCPConfigAdapter {
594
594
  /** Setup-only adapters may support a host that does not participate in workspace sync. */
595
- readonly source: AgentTarget | 'codebuddy';
595
+ readonly source: AgentTarget | 'codebuddy' | 'dsh';
596
596
  /** Parse MCP server entries from a config file */
597
597
  parse(content: string): MCPServerEntry[];
598
598
  /** Generate config file content from MCP server entries */
@@ -23,7 +23,7 @@ It supports:
23
23
  - HTTP MCP service + dashboard (`memorix background start` or `memorix serve-http --port 3211`)
24
24
  - bundled terminal agent (`memorix` or `memcode`) that uses the same shared memory pool
25
25
  - local-first project-scoped memory
26
- - cross-agent recall across Cursor, Claude Code, Codex, CodeBuddy Code, Windsurf, Gemini CLI, GitHub Copilot, OpenCode, OpenClaw, Hermes Agent, Oh-my-Pi, Pi, Kiro, Antigravity, and Trae
26
+ - cross-agent recall across Cursor, Claude Code, Codex, CodeBuddy Code, Windsurf, Gemini CLI, GitHub Copilot, OpenCode, OpenClaw, Hermes Agent, Oh-my-Pi, Pi, Kiro, Antigravity, Trae, and DeepSeek Harness
27
27
 
28
28
  ### Current 1.4 Baseline
29
29
 
@@ -41,7 +41,7 @@ For the 1.4 release line, the visible product shape is:
41
41
  - `memorix_project_context` / `memorix context "..."` is the normal black-box entry for non-trivial coding work: it assembles a bounded task Workset instead of injecting a generic memory dump; `memorix resume "..."` is the explicit CLI continuation projection
42
42
  - Code State keeps local snapshots and freshness links; a healthy pre-existing local CodeGraph index can add a bounded semantic outline, but Memorix never initializes or synchronizes that external index itself
43
43
  - `memorix knowledge` is an explicit review path for source-backed Markdown knowledge and canonical workflows. Do not initialize a versioned workspace or apply a proposal unless the user asks for that managed artifact
44
- - integration surfaces are agent-specific: Claude Code, Codex, GitHub Copilot CLI, Antigravity, and Hermes receive plugin packages; OpenClaw receives a compatible bundle; Pi and Oh-my-Pi receive package entries; Gemini CLI receives an extension package; OpenCode receives a plugin file and skill; Cursor and other agents receive MCP/rules/hooks where supported
44
+ - integration surfaces are agent-specific: Claude Code, Codex, GitHub Copilot CLI, Antigravity, and Hermes receive plugin packages; OpenClaw receives a compatible bundle; Pi and Oh-my-Pi receive package entries; Gemini CLI receives an extension package; OpenCode receives a plugin file and skill; DeepSeek Harness receives an MCP patch row, AGENTS.md guidance, and skills; Cursor and other agents receive MCP/rules/hooks where supported
45
45
  - privacy-safe diagnostics and receipts avoid raw chat, memory text, query text, tool payloads, and local file paths
46
46
 
47
47
  ---
@@ -256,6 +256,7 @@ What this installs depends on the target agent:
256
256
  - Hermes Agent: Hermes plugin under Hermes home (`%LOCALAPPDATA%\hermes` on native Windows, `~/.hermes` elsewhere, or `HERMES_HOME`), enabled in `config.yaml`, with plugin hooks, slash command, CLI command, skills, and MCP config.
257
257
  - Oh-my-Pi: `omp.extensions` package linked through `omp plugin link <path>` when available, with extension hook events, a `memorix` command, skills, and MCP config.
258
258
  - Windsurf, Kiro, Trae: MCP config plus rules/hooks where supported.
259
+ - DeepSeek Harness: a Memorix `@deepseek-ai/dsh-mcp-client` row in `$DSH_HOME/cordis.patch.yml` (default `~/.dsh/cordis.patch.yml`), harness `AGENTS.md` guidance, and official skills under `$DSH_HOME/skills`. Tools appear as `mcp__memorix__*`; there is no hooks surface. Project-local setup writes project `AGENTS.md` guidance and `.dsh/skills`, while the MCP row stays in the harness-level patch file.
259
260
 
260
261
  Run the same setup command without `--global` only when you intentionally want repo-local guidance, rules, or hooks for a single Git project.
261
262
 
@@ -20,7 +20,7 @@ That command installs the recommended Memorix package or config for the target a
20
20
  | Package or extension | Bundles Memorix for agents that use package or extension systems | `memorix setup --agent pi --global`, `omp --global`, or `gemini-cli --global` |
21
21
  | Local plugin | Installs a local plugin file where the agent loads plugins directly | `memorix setup --agent opencode --global` |
22
22
  | MCP server | Gives an agent live tools for search, recall, storage, reasoning, and coordination | bundled by setup, host MCP config, or `memorix serve` |
23
- | Usage guidance | Tells the agent when and how to use memory | `CLAUDE.md`, `AGENTS.md`, `GEMINI.md`, Cursor/Windsurf/Kiro/Trae rules |
23
+ | Usage guidance | Tells the agent when and how to use memory | `CLAUDE.md`, `AGENTS.md`, `GEMINI.md`, Cursor/Windsurf/Kiro/Trae rules, DeepSeek Harness AGENTS.md |
24
24
  | Hooks | Captures useful session events when the agent exposes hook events | bundled by plugin packages or generated hook files |
25
25
  | Skills | Turns durable project knowledge into reusable task guidance | plugin skills, `memorix skills`, `memorix_promote` |
26
26
  | memcode | Opens a terminal coding agent that already uses Memorix memory | `memorix`, `memcode` |
@@ -36,7 +36,7 @@ CLI, MCP, and HTTP have separate jobs:
36
36
 
37
37
  Generated guidance also has scope:
38
38
 
39
- - Project guidance (`CLAUDE.md`, `AGENTS.md`, `GEMINI.md`, Cursor/Windsurf/Kiro/Trae rules) may say the repository is configured for Memorix.
39
+ - Project guidance (`CLAUDE.md`, `AGENTS.md`, `GEMINI.md`, Cursor/Windsurf/Kiro/Trae rules, DeepSeek Harness AGENTS.md) may say the repository is configured for Memorix.
40
40
  - Plugin or skill package guidance is workspace-safe. It says to use Memorix when the active workspace has Memorix tools available.
41
41
  - `--global` writes user-level plugin, config, and hook surfaces where the host supports them.
42
42
  - Running the same setup command without `--global` is the repo-local path for one project only.
@@ -63,6 +63,7 @@ Generated guidance also has scope:
63
63
  | Kiro | `memorix setup --agent kiro --global` | Kiro MCP/steering/hooks config | MCP config, `.kiro/steering/memorix.md`, `.kiro/hooks/*.kiro.hook` | Uses Kiro steering and hook files. |
64
64
  | Antigravity | `memorix setup --agent antigravity --global` | Antigravity plugin | Plugin under `~/.gemini/config/plugins/memorix` or `.agents/plugins/memorix`, with `plugin.json`, `mcp_config.json`, `hooks.json`, rules, and skills | Uses Antigravity's official plugin layout. Dedicated MCP configs live at `~/.gemini/config/mcp_config.json` or `.agents/mcp_config.json`; legacy Gemini settings are read only for compatibility. |
65
65
  | Trae | `memorix setup --agent trae --global` | Trae MCP/rules config | MCP config and `.trae/rules/project_rules.md` | Current support is MCP plus project rules. |
66
+ | DeepSeek Harness | `memorix setup --agent dsh --global` | DeepSeek Harness MCP patch | Memorix `@deepseek-ai/dsh-mcp-client` row in `$DSH_HOME/cordis.patch.yml` (default `~/.dsh/cordis.patch.yml`), guidance in the harness `AGENTS.md`, and official skills under `$DSH_HOME/skills` | Tools appear as `mcp__memorix__*`. No hooks surface. Project-local setup writes project `AGENTS.md` guidance and `.dsh/skills`; the MCP row always lives in the harness-level patch file. |
66
67
  | memcode | `memorix` or `memcode` | Bundled terminal agent | Built-in Memorix memory access | memcode uses the same project memory pool; it is not a separate memory silo. |
67
68
  | Any MCP client | Manual MCP config | MCP stdio or HTTP | `memorix serve` or `memorix background start` | Use stdio first unless you need a shared HTTP endpoint. |
68
69
 
@@ -87,9 +88,15 @@ memorix setup --agent cursor --global
87
88
  memorix setup --agent pi --global
88
89
  memorix setup --agent gemini-cli --global
89
90
  memorix setup --agent opencode --global
91
+ memorix setup --agent windsurf --global
92
+ memorix setup --agent kiro --global
93
+ memorix setup --agent antigravity --global
94
+ memorix setup --agent trae --global
90
95
  memorix setup --agent openclaw --global
91
96
  memorix setup --agent hermes --global
97
+ memorix setup --agent codebuddy --global
92
98
  memorix setup --agent omp --global
99
+ memorix setup --agent dsh --global
93
100
  ```
94
101
 
95
102
  Use `memorix setup --agent all --global` only when you intentionally want every supported agent integration generated for the current machine/user scope.
@@ -63,6 +63,7 @@ Memorix 是本地优先、可插拔的 Agent Memory 系统。它给不同 Agent
63
63
 
64
64
  - 跟进受用户需求推动的集成,例如 [Qwen 自动 hooks](https://github.com/AVIDS2/memorix/issues/3) 与 [持久化 Agent 身份](https://github.com/AVIDS2/memorix/issues/49);
65
65
  - 独立推进记忆能力的实证研究,例如[模型能力如何改变项目记忆收益与伤害边界](https://github.com/AVIDS2/memorix/issues/152),不把研究假设当作产品已经证明的效果。
66
+ - DeepSeek Harness 支持已随 `memorix setup --agent dsh` 发布:写入 MCP 行(`$DSH_HOME/cordis.patch.yml`,默认 `~/.dsh/cordis.patch.yml`)、AGENTS.md 使用规范与官方 skills;工具以 `mcp__memorix__*` 形式出现。
66
67
 
67
68
  ---
68
69
 
package/docs/MEMCODE.md CHANGED
@@ -224,7 +224,7 @@ memcode update self
224
224
 
225
225
  Memorix is the shared memory layer. memcode is the bundled terminal agent built on top of it.
226
226
 
227
- Use Memorix when you want Claude Code, Codex, Cursor, Windsurf, Copilot, Gemini CLI, OpenCode, OpenClaw, Hermes Agent, Oh-my-Pi, Kiro, Antigravity, Trae, or another MCP client to share project memory.
227
+ Use Memorix when you want Claude Code, Codex, Cursor, Windsurf, Copilot, Gemini CLI, OpenCode, OpenClaw, Hermes Agent, Oh-my-Pi, Kiro, Antigravity, Trae, DeepSeek Harness, or another MCP client to share project memory.
228
228
 
229
229
  Use memcode when you want a terminal agent that already uses that memory layer.
230
230
 
package/docs/SETUP.md CHANGED
@@ -68,9 +68,15 @@ memorix setup --agent cursor --global
68
68
  memorix setup --agent pi --global
69
69
  memorix setup --agent gemini-cli --global
70
70
  memorix setup --agent opencode --global
71
+ memorix setup --agent windsurf --global
72
+ memorix setup --agent kiro --global
73
+ memorix setup --agent antigravity --global
74
+ memorix setup --agent trae --global
71
75
  memorix setup --agent openclaw --global
72
76
  memorix setup --agent hermes --global
77
+ memorix setup --agent codebuddy --global
73
78
  memorix setup --agent omp --global
79
+ memorix setup --agent dsh --global
74
80
  ```
75
81
 
76
82
  What this does:
@@ -86,6 +92,7 @@ What this does:
86
92
  - OpenClaw: installs `~/.openclaw/extensions/memorix` as an OpenClaw-compatible bundle with bundled stdio MCP, skills, and an OpenClaw `HOOK.md`/`handler.ts` hook pack.
87
93
  - Hermes Agent: installs into Hermes home (`%LOCALAPPDATA%\hermes` on native Windows, `~/.hermes` elsewhere, or `HERMES_HOME`), enables it in `config.yaml`, registers plugin hooks, a slash command, a CLI command, skills, and writes MCP config in `mcp_servers`.
88
94
  - Oh-my-Pi: installs an `omp.extensions` package, links it with `omp plugin link <path>` when available, and writes `.omp/mcp.json` or `~/.omp/agent/mcp.json` for MCP.
95
+ - DeepSeek Harness: writes a Memorix `@deepseek-ai/dsh-mcp-client` row into `$DSH_HOME/cordis.patch.yml` (default `~/.dsh/cordis.patch.yml`), appends guidance to the harness `AGENTS.md` (`$DSH_HOME/AGENTS.md`, default `~/.dsh/AGENTS.md`), and installs official skills under `$DSH_HOME/skills` (default `~/.dsh/skills`). Tools appear as `mcp__memorix__*`; there is no hooks surface. Project-local setup (without `--global`) appends guidance to the project-root `AGENTS.md` and installs skills under `.dsh/skills`, while the MCP row still goes to the harness-level patch file.
89
96
  - Other supported agents: writes their MCP/rules/hooks files according to agent support.
90
97
 
91
98
  Global setup writes user-level plugin, config, and hook files where the host supports them. Use the same command without `--global` only when you explicitly want repo-local guidance, rules, or hooks for the current project.
@@ -117,7 +124,7 @@ memorix doctor agents --agent <agent>
117
124
  memorix setup --agent <agent> --global
118
125
  ```
119
126
 
120
- Use this for Claude Code, Codex, Cursor, Windsurf, Copilot, Gemini CLI, OpenCode, OpenClaw, Hermes Agent, Oh-my-Pi, Pi, Kiro, Antigravity, Trae, or any supported agent. It is the default user-facing install path.
127
+ Use this for Claude Code, Codex, Cursor, Windsurf, Copilot, Gemini CLI, OpenCode, OpenClaw, Hermes Agent, Oh-my-Pi, Pi, Kiro, Antigravity, Trae, DeepSeek Harness, or any supported agent. It is the default user-facing install path.
121
128
 
122
129
  To see the current setup matrix:
123
130
 
@@ -666,6 +673,7 @@ Common MCP config locations:
666
673
  | Hermes Agent | `%LOCALAPPDATA%\hermes\config.yaml` on native Windows, `~/.hermes/config.yaml` elsewhere, or `HERMES_HOME\config.yaml` |
667
674
  | Oh-my-Pi | `.omp/mcp.json` or `~/.omp/agent/mcp.json` |
668
675
  | Trae | `%APPDATA%/Trae/User/mcp.json` on Windows |
676
+ | DeepSeek Harness | `$DSH_HOME/cordis.patch.yml` (default `~/.dsh/cordis.patch.yml`) |
669
677
 
670
678
  ---
671
679
 
package/llms-full.txt CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > Local-first shared memory layer for AI coding agents.
4
4
 
5
- Memorix is a TypeScript/Node.js project that gives AI coding agents persistent, project-aware memory. It targets software development workflows, not generic chat. It works across Claude Code, Codex, CodeBuddy Code, Cursor, Windsurf, GitHub Copilot CLI, Gemini CLI, OpenCode, OpenClaw, Hermes Agent, Oh-my-Pi, Pi, Kiro, Antigravity, Trae, and any agent that can speak MCP over stdio or HTTP. Integrations usually start with `memorix setup --agent <agent> --global`, which installs the recommended user-level package or config for that agent: plugin packages when supported, package or extension entries, MCP config, generated guidance, hooks, skills, or the bundled terminal agent.
5
+ Memorix is a TypeScript/Node.js project that gives AI coding agents persistent, project-aware memory. It targets software development workflows, not generic chat. It works across Claude Code, Codex, CodeBuddy Code, Cursor, Windsurf, GitHub Copilot CLI, Gemini CLI, OpenCode, OpenClaw, Hermes Agent, Oh-my-Pi, Pi, Kiro, Antigravity, Trae, DeepSeek Harness, and any agent that can speak MCP over stdio or HTTP. Integrations usually start with `memorix setup --agent <agent> --global`, which installs the recommended user-level package or config for that agent: plugin packages when supported, package or extension entries, MCP config, generated guidance, hooks, skills, or the bundled terminal agent.
6
6
 
7
7
  If you are an AI coding agent helping a user install, operate, or troubleshoot Memorix, read `docs/AGENT_OPERATOR_PLAYBOOK.md` before taking action. It is the main reference for install, runtime selection, Git/project binding, MCP integration, hooks, and troubleshooting.
8
8
 
@@ -36,6 +36,7 @@ It installs the recommended Memorix integration for the target agent:
36
36
  - Gemini CLI: local Gemini extension package with MCP and `GEMINI.md` context.
37
37
  - OpenCode: local plugin file, `opencode.json` MCP config, OpenCode skill, and `AGENTS.md` guidance.
38
38
  - Windsurf, Kiro, Antigravity, Trae: MCP config plus rules/hooks where supported.
39
+ - DeepSeek Harness: MCP patch row (`$DSH_HOME/cordis.patch.yml`) plus `AGENTS.md` guidance and official skills.
39
40
 
40
41
  Use:
41
42
 
@@ -131,7 +132,7 @@ memorix orchestrate --goal "Add authentication"
131
132
  - plugin packages: Claude Code, Codex, and GitHub Copilot CLI
132
133
  - package or extension entries: Pi package and Gemini CLI extension package
133
134
  - local plugins: OpenCode local plugin file and skill
134
- - project instructions and rules: AGENTS.md, GEMINI.md, Cursor rules, Windsurf rules, Kiro steering, Trae rules
135
+ - project instructions and rules: AGENTS.md, GEMINI.md, Cursor rules, Windsurf rules, Kiro steering, Trae rules, DeepSeek Harness AGENTS.md
135
136
  - hooks: agent event capture routed through `memorix hook`
136
137
  - skills: durable project knowledge promoted into reusable task guidance
137
138
 
@@ -365,7 +366,7 @@ Docker is for the HTTP service. The container must have access to the repositori
365
366
 
366
367
  ## Supported Clients
367
368
 
368
- Memorix supports Claude Code, Codex, CodeBuddy Code, Cursor, Windsurf, GitHub Copilot CLI, Gemini CLI, OpenCode, OpenClaw, Hermes Agent, Oh-my-Pi, Pi, Kiro, Antigravity, Trae, memcode, and other stdio or HTTP MCP clients.
369
+ Memorix supports Claude Code, Codex, CodeBuddy Code, Cursor, Windsurf, GitHub Copilot CLI, Gemini CLI, OpenCode, OpenClaw, Hermes Agent, Oh-my-Pi, Pi, Kiro, Antigravity, Trae, DeepSeek Harness, memcode, and other stdio or HTTP MCP clients.
369
370
 
370
371
  Support depth differs by client:
371
372
 
@@ -374,7 +375,7 @@ Support depth differs by client:
374
375
  - Claude Code, Codex, and GitHub Copilot CLI receive local plugin packages.
375
376
  - Pi receives a user-level package when setup runs with `--global`; Gemini CLI receives a local extension package.
376
377
  - OpenClaw receives a compatible bundle; Hermes Agent receives a plugin package; Oh-my-Pi receives a package/extension entry.
377
- - Project instructions and rules include AGENTS.md, GEMINI.md, Cursor rules, Windsurf rules, Kiro steering, and Trae rules.
378
+ - Project instructions and rules include AGENTS.md, GEMINI.md, Cursor rules, Windsurf rules, Kiro steering, Trae rules, and DeepSeek Harness AGENTS.md.
378
379
  - Hooks are generated for agents that expose usable hook events.
379
380
  - OpenCode receives a local plugin file at `.opencode/plugins/memorix.js`, an OpenCode skill at `.opencode/skills/memorix-memory/SKILL.md`, plus `opencode.json` MCP config.
380
381
  - memcode is the bundled terminal agent and uses the same project memory pool.
package/llms.txt CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > Local-first shared memory layer for AI coding agents.
4
4
 
5
- Memorix gives coding agents persistent, project-aware memory across sessions, IDEs, terminals, and MCP clients. It stores project knowledge once so multiple agents can retrieve it through plugin packages, MCP, CLI, SDK, generated rules/instructions, hooks, skills, local plugins, or the bundled terminal agent. It works with Claude Code, Codex, CodeBuddy Code, Cursor, Windsurf, GitHub Copilot CLI, Gemini CLI, OpenCode, OpenClaw, Hermes Agent, Oh-my-Pi, Pi, Kiro, Antigravity, Trae, and other MCP-capable agents.
5
+ Memorix gives coding agents persistent, project-aware memory across sessions, IDEs, terminals, and MCP clients. It stores project knowledge once so multiple agents can retrieve it through plugin packages, MCP, CLI, SDK, generated rules/instructions, hooks, skills, local plugins, or the bundled terminal agent. It works with Claude Code, Codex, CodeBuddy Code, Cursor, Windsurf, GitHub Copilot CLI, Gemini CLI, OpenCode, OpenClaw, Hermes Agent, Oh-my-Pi, Pi, Kiro, Antigravity, Trae, DeepSeek Harness, and other MCP-capable agents.
6
6
 
7
7
  ## Entry Points
8
8
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "memorix",
3
3
  "mcpName": "io.github.AVIDS2/memorix",
4
- "version": "1.4.4",
4
+ "version": "1.4.5",
5
5
  "description": "Local-first shared memory layer for AI coding agents across MCP clients, Git history, reasoning context, and project sessions.",
6
6
  "type": "module",
7
7
  "sideEffects": false,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://anthropic.com/claude-code/plugin.schema.json",
3
3
  "name": "memorix",
4
- "version": "1.4.4",
4
+ "version": "1.4.5",
5
5
  "description": "Shared workspace memory for Claude Code and other AI coding agents.",
6
6
  "author": {
7
7
  "name": "AVIDS2",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memorix",
3
- "version": "1.4.4",
3
+ "version": "1.4.5",
4
4
  "description": "Local-first project memory for CodeBuddy Code and other coding agents.",
5
5
  "author": {
6
6
  "name": "AVIDS2",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memorix",
3
- "version": "1.4.4",
3
+ "version": "1.4.5",
4
4
  "description": "Shared workspace memory for Codex and other AI coding agents.",
5
5
  "author": {
6
6
  "name": "AVIDS2",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memorix",
3
- "version": "1.4.4",
3
+ "version": "1.4.5",
4
4
  "description": "Shared local workspace memory for GitHub Copilot CLI and other AI coding agents.",
5
5
  "author": {
6
6
  "name": "AVIDS2",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memorix",
3
- "version": "1.4.4",
3
+ "version": "1.4.5",
4
4
  "mcpServers": {
5
5
  "memorix": {
6
6
  "command": "memorix",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memorix-omp-package",
3
- "version": "1.4.4",
3
+ "version": "1.4.5",
4
4
  "description": "Memorix shared workspace memory package for Oh-my-Pi.",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memorix",
3
- "version": "1.4.4",
3
+ "version": "1.4.5",
4
4
  "description": "Shared workspace memory for OpenClaw and other AI coding agents.",
5
5
  "author": {
6
6
  "name": "AVIDS2",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memorix-pi-package",
3
- "version": "1.4.4",
3
+ "version": "1.4.5",
4
4
  "description": "Memorix shared workspace memory package for Pi coding agent.",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
package/server.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "url": "https://github.com/AVIDS2/memorix",
8
8
  "source": "github"
9
9
  },
10
- "version": "1.4.4",
10
+ "version": "1.4.5",
11
11
  "websiteUrl": "https://github.com/AVIDS2/memorix#readme",
12
12
  "icons": [
13
13
  {
@@ -22,7 +22,7 @@
22
22
  {
23
23
  "registryType": "npm",
24
24
  "identifier": "memorix",
25
- "version": "1.4.4",
25
+ "version": "1.4.5",
26
26
  "runtimeHint": "npx",
27
27
  "packageArguments": [
28
28
  {
@@ -124,6 +124,7 @@ const GUIDANCE_AGENTS = new Set<AgentName>([
124
124
  'kiro',
125
125
  'opencode',
126
126
  'trae',
127
+ 'dsh',
127
128
  ]);
128
129
 
129
130
  const CODEX_PLUGIN_NAME = 'memorix';
@@ -787,7 +788,12 @@ async function inspectMcp(agent: AgentName, projectRoot: string, scope: AgentInt
787
788
  }
788
789
 
789
790
  const configPath = adapter.getConfigPath(targetScope === 'project' ? projectRoot : undefined);
790
- if (targetScope === 'global' && configPath === adapter.getConfigPath(projectRoot)) continue;
791
+ if (targetScope === 'global' && configPath === adapter.getConfigPath(projectRoot) && scope === 'all') {
792
+ // User-level-only adapters (Trae, DSH) resolve one path for every
793
+ // scope. Deduplicate only when the project iteration also runs;
794
+ // an explicit global-only scope must still inspect the shared path.
795
+ continue;
796
+ }
791
797
 
792
798
  if (!existsSync(configPath)) {
793
799
  checks.push({
@@ -159,6 +159,7 @@ function getAgentLabel(agent: string): string {
159
159
  hermes: 'Hermes Agent',
160
160
  omp: 'Oh-my-Pi',
161
161
  trae: 'Trae',
162
+ dsh: 'DeepSeek Harness',
162
163
  };
163
164
  return labels[agent] || agent;
164
165
  }
@@ -177,6 +178,7 @@ function getAgentHint(agent: string): string {
177
178
  hermes: 'Hermes plugin hooks; use `memorix setup --agent hermes`',
178
179
  omp: 'Oh-my-Pi package hooks; use `memorix setup --agent omp`',
179
180
  trae: '.trae/rules/project_rules.md (rules only, no hooks system)',
181
+ dsh: '~/.dsh/cordis.patch.yml MCP row via `memorix setup --agent dsh` (no hooks system)',
180
182
  codex: 'Codex plugin hooks; use `memorix setup --agent codex`',
181
183
  };
182
184
  return hints[agent] || '';
@@ -152,6 +152,7 @@ function estimateFileSize(agent: string, configPath: string): string {
152
152
  antigravity: '~2KB',
153
153
  opencode: '~3KB',
154
154
  trae: '~1KB',
155
+ dsh: '~1KB',
155
156
  };
156
157
  return sizes[agent] || '~2KB';
157
158
  }
@@ -171,6 +172,8 @@ function getRulesPath(agent: string, cwd: string, global: boolean): string {
171
172
  return path.join(home, '.gemini', 'GEMINI.md');
172
173
  case 'trae':
173
174
  return path.join(home, '.trae', 'rules', 'project_rules.md');
175
+ case 'dsh':
176
+ return path.join(process.env.DSH_HOME?.trim() || path.join(home, '.dsh'), 'AGENTS.md');
174
177
  default:
175
178
  return '';
176
179
  }
@@ -186,6 +189,8 @@ function getRulesPath(agent: string, cwd: string, global: boolean): string {
186
189
  return path.join(cwd, 'GEMINI.md');
187
190
  case 'trae':
188
191
  return path.join(cwd, '.trae', 'rules', 'project_rules.md');
192
+ case 'dsh':
193
+ return path.join(cwd, 'AGENTS.md');
189
194
  default:
190
195
  return '';
191
196
  }
@@ -114,6 +114,7 @@ function getAgentLabel(agent: string): string {
114
114
  antigravity: 'Antigravity',
115
115
  'gemini-cli': 'Gemini CLI',
116
116
  trae: 'Trae',
117
+ dsh: 'DeepSeek Harness',
117
118
  };
118
119
  return labels[agent] || agent;
119
120
  }
@@ -130,6 +131,7 @@ function getAgentHint(agent: string): string {
130
131
  antigravity: 'plugin + MCP + hooks + skills',
131
132
  'gemini-cli': 'settings + GEMINI.md',
132
133
  trae: 'rules',
134
+ dsh: 'MCP patch + AGENTS.md + skills',
133
135
  };
134
136
  return hints[agent] || 'integration files';
135
137
  }