nexus-prime 3.12.1 → 3.14.0

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 (46) hide show
  1. package/README.md +83 -5
  2. package/dist/agents/adapters/mcp.d.ts.map +1 -1
  3. package/dist/agents/adapters/mcp.js +59 -0
  4. package/dist/agents/adapters/mcp.js.map +1 -1
  5. package/dist/agents/adapters.d.ts +10 -1
  6. package/dist/agents/adapters.d.ts.map +1 -1
  7. package/dist/agents/adapters.js +21 -0
  8. package/dist/agents/adapters.js.map +1 -1
  9. package/dist/agents/core/types.d.ts +1 -1
  10. package/dist/agents/core/types.d.ts.map +1 -1
  11. package/dist/agents/learner.d.ts +9 -0
  12. package/dist/agents/learner.d.ts.map +1 -1
  13. package/dist/agents/learner.js +35 -0
  14. package/dist/agents/learner.js.map +1 -1
  15. package/dist/cli.js +29 -5
  16. package/dist/cli.js.map +1 -1
  17. package/dist/core/types.d.ts +1 -1
  18. package/dist/core/types.d.ts.map +1 -1
  19. package/dist/dashboard/index.html +215 -43
  20. package/dist/engines/client-bootstrap.d.ts +1 -1
  21. package/dist/engines/client-bootstrap.d.ts.map +1 -1
  22. package/dist/engines/client-bootstrap.js +71 -7
  23. package/dist/engines/client-bootstrap.js.map +1 -1
  24. package/dist/engines/embedder.d.ts +11 -2
  25. package/dist/engines/embedder.d.ts.map +1 -1
  26. package/dist/engines/embedder.js +81 -6
  27. package/dist/engines/embedder.js.map +1 -1
  28. package/dist/engines/kv-bridge.d.ts +17 -0
  29. package/dist/engines/kv-bridge.d.ts.map +1 -1
  30. package/dist/engines/kv-bridge.js +87 -0
  31. package/dist/engines/kv-bridge.js.map +1 -1
  32. package/dist/engines/memory-bridge.d.ts +39 -0
  33. package/dist/engines/memory-bridge.d.ts.map +1 -0
  34. package/dist/engines/memory-bridge.js +105 -0
  35. package/dist/engines/memory-bridge.js.map +1 -0
  36. package/dist/engines/memory.d.ts +9 -1
  37. package/dist/engines/memory.d.ts.map +1 -1
  38. package/dist/engines/memory.js +31 -3
  39. package/dist/engines/memory.js.map +1 -1
  40. package/dist/engines/skill-runtime.d.ts.map +1 -1
  41. package/dist/engines/skill-runtime.js +37 -2
  42. package/dist/engines/skill-runtime.js.map +1 -1
  43. package/dist/engines/token-supremacy.d.ts.map +1 -1
  44. package/dist/engines/token-supremacy.js +19 -7
  45. package/dist/engines/token-supremacy.js.map +1 -1
  46. package/package.json +1 -1
package/README.md CHANGED
@@ -1,11 +1,11 @@
1
1
  <div align="center">
2
- <h1>🧬 Nexus Prime</h1>
2
+ <img src="./docs/assets/nexus-prime-logo.svg" alt="Nexus Prime" width="80" height="80">
3
+ <h1>Nexus Prime</h1>
3
4
  <p><strong>Local-first MCP control plane for coding agents</strong></p>
4
5
 
5
6
  [![npm version](https://img.shields.io/npm/v/nexus-prime?style=for-the-badge&color=00ff88)](https://www.npmjs.com/package/nexus-prime)
6
7
  [![npm downloads](https://img.shields.io/npm/d18m/nexus-prime?style=for-the-badge&color=00d4ff)](https://www.npmjs.com/package/nexus-prime)
7
8
  [![License: MIT](https://img.shields.io/badge/License-MIT-00d4ff?style=for-the-badge)](LICENSE)
8
- [![Agentic OS](https://img.shields.io/badge/Ecosystem-Agentic_OS-8b5cf6?style=for-the-badge)](https://github.com/topics/agentic-os)
9
9
  [![Build Status](https://img.shields.io/badge/build-passing-success?style=for-the-badge)](https://github.com/sir-ad/nexus-prime/actions)
10
10
  [![Node.js](https://img.shields.io/badge/node-%3E%3D20.0.0-339933?style=for-the-badge&logo=node.js)](https://nodejs.org)
11
11
  <!-- traffic-badges:start -->
@@ -13,11 +13,25 @@
13
13
  [![Clones](https://img.shields.io/endpoint?style=for-the-badge&logo=github&url=https%3A%2F%2Fgist.githubusercontent.com%2Fsir-ad%2Fbbf9ebc77ccb2097ccf760bec3825ab7%2Fraw%2Fclones.json)](https://github.com/sir-ad/nexus-prime)
14
14
  <!-- traffic-badges:end -->
15
15
 
16
+ [![GitHub Stars](https://img.shields.io/github/stars/sir-ad/nexus-prime?style=for-the-badge&logo=github&color=gold)](https://github.com/sir-ad/nexus-prime/stargazers)
17
+ [![GitHub Forks](https://img.shields.io/github/forks/sir-ad/nexus-prime?style=for-the-badge&logo=github&color=silver)](https://github.com/sir-ad/nexus-prime/network/members)
18
+ [![GitHub Issues](https://img.shields.io/github/issues/sir-ad/nexus-prime?style=for-the-badge&color=orange)](https://github.com/sir-ad/nexus-prime/issues)
19
+ [![GitHub Last Commit](https://img.shields.io/github/last-commit/sir-ad/nexus-prime?style=for-the-badge&color=00ff88)](https://github.com/sir-ad/nexus-prime/commits)
20
+ [![PRs Welcome](https://img.shields.io/badge/PRs-Welcome-brightgreen?style=for-the-badge)](https://github.com/sir-ad/nexus-prime/pulls)
21
+
16
22
  <!-- AI / Agentic Widgets -->
17
23
  [![AI Framework](https://img.shields.io/badge/AI-Framework-FF9900?style=for-the-badge)](https://github.com/topics/ai)
18
24
  [![LLM Ready](https://img.shields.io/badge/LLM-Ready-00A67E?style=for-the-badge)](https://github.com/topics/llm)
19
25
  [![MCP Protocol](https://img.shields.io/badge/Protocol-MCP-4285F4?style=for-the-badge)](https://modelcontextprotocol.io/)
20
-
26
+ [![Agentic OS](https://img.shields.io/badge/Ecosystem-Agentic_OS-8b5cf6?style=for-the-badge)](https://github.com/topics/agentic-os)
27
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.x-3178C6?style=for-the-badge&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
28
+ [![Open Source](https://img.shields.io/badge/Open_Source-%E2%9D%A4-red?style=for-the-badge)](https://opensource.org/)
29
+
30
+ <!-- Community -->
31
+ [![Reddit #1 Post](https://img.shields.io/badge/r%2FLLMDevs-%231_Post_of_the_Day-FF4500?style=for-the-badge&logo=reddit&logoColor=white)](https://www.reddit.com/r/LLMDevs/)
32
+ [![Reddit Community](https://img.shields.io/badge/Reddit-r%2FNexus__Prime-FF4500?style=for-the-badge&logo=reddit&logoColor=white)](https://www.reddit.com/r/Nexus_Prime/)
33
+ [![Discord](https://img.shields.io/badge/Discord-Join_Server-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/zCPEjPZj)
34
+
21
35
  <p><i>Bootstrap. Orchestrate. Verify. Learn.</i></p>
22
36
  <a href="https://www.producthunt.com/products/nexus-prime?embed=true&amp;utm_source=badge-featured&amp;utm_medium=badge&amp;utm_campaign=badge-nexus-prime" target="_blank" rel="noopener noreferrer"><img alt="Nexus-Prime - Semantic memory and parallel execution for AI coding agents | Product Hunt" width="250" height="54" src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=1096831&amp;theme=dark&amp;t=1773345508816"></a>
23
37
 
@@ -66,6 +80,34 @@ npx nexus-prime mcp
66
80
 
67
81
  Home-scoped bootstrap now runs automatically on install or first binary start, and the first Nexus run inside a repo writes the workspace-scoped client files it needs. `nexus-prime setup <client>` and `nexus-prime setup all` remain the explicit refresh/fix path when you want to force regeneration.
68
82
 
83
+ ### Docker
84
+
85
+ ```bash
86
+ docker compose up # Nexus Prime only
87
+ docker compose --profile with-ollama up # Nexus Prime + local Ollama
88
+ ```
89
+
90
+ ### Embedding backends
91
+
92
+ Nexus Prime supports multiple embedding backends with automatic fallback:
93
+
94
+ | Backend | Config | Default model |
95
+ |---------|--------|---------------|
96
+ | **Local TF-IDF** | `NEXUS_EMBED_MODE=local` (default) | Built-in 128-dim |
97
+ | **Ollama** | `NEXUS_EMBED_MODE=ollama` | `nomic-embed-text` |
98
+ | **HuggingFace** | `NEXUS_EMBED_MODE=huggingface` | `sentence-transformers/all-MiniLM-L6-v2` |
99
+ | **OpenAI** | `NEXUS_EMBED_MODE=api` | `text-embedding-3-small` |
100
+
101
+ ```bash
102
+ # Ollama (requires ollama running locally)
103
+ NEXUS_EMBED_MODE=ollama NEXUS_OLLAMA_ENDPOINT=http://localhost:11434 npx nexus-prime mcp
104
+
105
+ # HuggingFace Inference API
106
+ NEXUS_EMBED_MODE=huggingface NEXUS_HF_API_KEY=hf_... npx nexus-prime mcp
107
+ ```
108
+
109
+ Fallback chain: Ollama → HuggingFace → OpenAI → Local TF-IDF. If the preferred backend is unavailable, Nexus falls through automatically.
110
+
69
111
  ## Default bootstrap-orchestrate path
70
112
 
71
113
  ```txt
@@ -174,15 +216,18 @@ flowchart TD
174
216
  ## 🚀 Client Setup and Runtime Contract
175
217
 
176
218
  ### Supported MCP Clients
177
- Nexus Prime currently provides automated setup for:
219
+ Nexus Prime provides automated setup for **9 coding agents**:
178
220
  - 🔴 **Codex**
179
221
  - 🔵 **Cursor**
180
222
  - 🍊 **Claude Code**
181
223
  - 🟢 **Opencode**
182
224
  - 🌊 **Windsurf**
183
225
  - 🛡️ **Antigravity / OpenClaw**
226
+ - 🔧 **Aider**
227
+ - 🔗 **Continue.dev**
228
+ - ⚙️ **Cline**
184
229
 
185
- Codex now has a first-class setup path too: `nexus-prime setup codex` creates or updates a managed Nexus Prime bootstrap block inside the repo-local `AGENTS.md`. Manual copying is no longer required; Nexus also auto-establishes home-scoped bootstrap on install/start and writes workspace-scoped client files on first repo run.
230
+ All agent configurations are written automatically on `npm install`. The first Nexus run inside a repo writes workspace-scoped client files. `nexus-prime setup <client>` and `nexus-prime setup all` remain the explicit refresh/fix path.
186
231
 
187
232
  ### Automated Integration
188
233
  ```bash
@@ -191,6 +236,9 @@ nexus-prime setup cursor
191
236
  nexus-prime setup claude
192
237
  nexus-prime setup windsurf
193
238
  nexus-prime setup antigravity
239
+ nexus-prime setup aider
240
+ nexus-prime setup continue
241
+ nexus-prime setup cline
194
242
  nexus-prime setup all
195
243
  nexus-prime setup status
196
244
  ```
@@ -573,6 +621,36 @@ Inventory Snapshot: 109 skills · 64 workflows · 5 hooks · 3 automations · 7
573
621
  ## 📜 Release History
574
622
 
575
623
  <details open>
624
+ <summary><b>v3.14.0</b> · 2026-03-16 · Ollama/HuggingFace embeddings, autonomous memory, agent ecosystem expansion</summary>
625
+
626
+ - **Embedding backend chain**: Added Ollama and HuggingFace Inference API as embedding backends with automatic fallback (Ollama → HuggingFace → OpenAI → Local TF-IDF).
627
+ - **Agent ecosystem expansion**: Added first-class setup for Aider, Continue.dev, and Cline alongside existing Codex, Cursor, Claude Code, Opencode, Windsurf, and OpenClaw adapters (9 agents total).
628
+ - **OpenClaw memory bridge**: Bidirectional memory sync between Nexus Prime and OpenClaw instances via `nexus_openclaw_memory_sync`.
629
+ - **Autonomous memory management**: Configurable decay rates, access-frequency retention (frequently recalled memories decay slower), and a maintenance cycle that expires stale low-value memories.
630
+ - **Learning-to-skill promotion**: Recurring agent learnings are automatically promoted to reusable skills when access patterns indicate reliability.
631
+ - **Fuzzy skill matching**: Skill resolution now uses Jaccard similarity scoring instead of exact name matching, so approximate goal text finds relevant skills.
632
+ - **Adaptive token optimization**: Reading plan thresholds adjust dynamically based on file count and budget constraints.
633
+ - **Docker one-click install**: `docker compose up` starts Nexus Prime; `--profile with-ollama` adds local Ollama for fully offline operation.
634
+ - **Fixed**: Dashboard memory graph no longer overlaps text (z-index stacking). Claude Code MCP config path corrected to `~/.claude/mcp.json`. Agent auto-config now writes workspace configs during `npm install`.
635
+
636
+ Full notes: [CHANGELOG.md](./CHANGELOG.md)
637
+ </details>
638
+
639
+ <details>
640
+ <summary><b>v3.13.0</b> · 2026-03-15 · Workspace surfaces, dashboard layout fixes, and community presence</summary>
641
+
642
+ - Dashboard workspaces now drive their own graph visibility, library tabs, titles, and subtitles per surface mode (overview, knowledge, runs, catalog, governance).
643
+ - Fixed memory graph overlapping text in non-graph surfaces by collapsing focusable-shell gap when the graph widget is hidden and removing conflicting inline margin.
644
+ - Added graph-note text overflow handling and responsive min-height for hidden-graph surfaces.
645
+ - Library tabs are now rendered dynamically per workspace instead of a single hardcoded rail.
646
+ - Knowledge workspace auto-opens the create form when no collections exist.
647
+ - Plan and execute actions now switch to the runs workspace automatically.
648
+ - Added community badges (Reddit, Discord), engagement badges (stars, forks, issues, PRs), and the r/LLMDevs #1 Post of the Day recognition.
649
+
650
+ Full notes: [CHANGELOG.md](./CHANGELOG.md)
651
+ </details>
652
+
653
+ <details>
576
654
  <summary><b>v3.12.1</b> · 2026-03-14 · Dashboard focus mode, graph recall wiring, and bootstrap recovery</summary>
577
655
 
578
656
  - Added dashboard maximize/restore focus mode across the main operational panels so graph, memory snapshots, runtime events, and operator actions are usable without the cramped default layout.
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/agents/adapters/mcp.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAgE5C,KAAK,cAAc,GAAG,YAAY,GAAG,MAAM,CAAC;AAC5C,KAAK,iBAAiB,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC,CAAC;AAgKF,qBAAa,UAAW,YAAW,OAAO;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAG,KAAK,CAAU;IACtB,SAAS,UAAS;IAClB,MAAM,EAAE,MAAM,EAAE,CAAM;IAEtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,CAAa;IAC9B,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,OAAO,CAAC,CAAkB;IAElC,OAAO,CAAC,GAAG;;IAmBX,OAAO,CAAC,gBAAgB;IA4BxB,WAAW,CAAC,KAAK,EAAE,UAAU;IAI7B,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,+BAA+B;IAMvC,OAAO,CAAC,uBAAuB;IAqB/B,OAAO,CAAC,uBAAuB;IAsB/B,cAAc,CAAC,OAAO,GAAE,cAAsC,GAAG,iBAAiB,EAAE;IAIpF,OAAO,CAAC,oBAAoB;IAixB5B,OAAO,CAAC,2BAA2B;IAUnC,OAAO,CAAC,iBAAiB;YAsCX,cAAc;IA0wD5B,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAItC,OAAO,CAAC,IAAI;IAmBN,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAOxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB3B,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAClD,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;CACzC"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/agents/adapters/mcp.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAgE5C,KAAK,cAAc,GAAG,YAAY,GAAG,MAAM,CAAC;AAC5C,KAAK,iBAAiB,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC,CAAC;AAiKF,qBAAa,UAAW,YAAW,OAAO;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAG,KAAK,CAAU;IACtB,SAAS,UAAS;IAClB,MAAM,EAAE,MAAM,EAAE,CAAM;IAEtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,CAAa;IAC9B,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,OAAO,CAAC,CAAkB;IAElC,OAAO,CAAC,GAAG;;IAmBX,OAAO,CAAC,gBAAgB;IA4BxB,WAAW,CAAC,KAAK,EAAE,UAAU;IAI7B,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,+BAA+B;IAMvC,OAAO,CAAC,uBAAuB;IAqB/B,OAAO,CAAC,uBAAuB;IAsB/B,cAAc,CAAC,OAAO,GAAE,cAAsC,GAAG,iBAAiB,EAAE;IAIpF,OAAO,CAAC,oBAAoB;IA+xB5B,OAAO,CAAC,2BAA2B;IAUnC,OAAO,CAAC,iBAAiB;YAsCX,cAAc;IA0zD5B,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAItC,OAAO,CAAC,IAAI;IAmBN,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAOxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB3B,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAClD,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;CACzC"}
@@ -119,6 +119,7 @@ const MANUAL_OR_DIAGNOSTIC_TOOLS = new Set([
119
119
  'nexus_pattern_search',
120
120
  'nexus_pattern_list',
121
121
  'nexus_knowledge_provenance',
122
+ 'nexus_openclaw_memory_sync',
122
123
  ]);
123
124
  /** Session-level telemetry tracker */
124
125
  class SessionTelemetry {
@@ -408,6 +409,20 @@ export class MCPAdapter {
408
409
  description: 'Expert surface: run memory maintenance to expire TTL memories, cool stale entries, and quarantine or scrap low-signal items.',
409
410
  inputSchema: { type: 'object', properties: {}, required: [] },
410
411
  },
412
+ {
413
+ name: 'nexus_openclaw_memory_sync',
414
+ description: 'Expert surface: sync memory to/from OpenClaw/Antigravity instances. Use "syncTo" to export memory bundle to target directory, "syncFrom" to import from source directory.',
415
+ inputSchema: {
416
+ type: 'object',
417
+ properties: {
418
+ action: { type: 'string', enum: ['syncTo', 'syncFrom', 'status'], description: 'The sync action to perform' },
419
+ targetDir: { type: 'string', description: 'Target directory for syncTo (e.g. ~/.antigravity/nexus-prime/)' },
420
+ sourceDir: { type: 'string', description: 'Source directory for syncFrom' },
421
+ scope: { type: 'string', enum: ['session', 'project', 'user', 'promoted', 'shared'], description: 'Memory scope for syncTo' },
422
+ },
423
+ required: ['action'],
424
+ },
425
+ },
411
426
  {
412
427
  name: 'nexus_memory_trace',
413
428
  description: 'Expert surface: inspect one memory item with lineage, backlinks, and reconciliation details.',
@@ -1555,6 +1570,50 @@ export class MCPAdapter {
1555
1570
  }],
1556
1571
  };
1557
1572
  }
1573
+ case 'nexus_openclaw_memory_sync': {
1574
+ const action = String(request.params.arguments?.action ?? 'status');
1575
+ const targetDir = String(request.params.arguments?.targetDir ?? '');
1576
+ const sourceDir = String(request.params.arguments?.sourceDir ?? '');
1577
+ const scope = String(request.params.arguments?.scope ?? 'session');
1578
+ const { MemoryBridge } = await import('../../engines/memory-bridge.js');
1579
+ const { MemoryEngine } = await import('../../engines/memory.js');
1580
+ const memoryEngine = new MemoryEngine();
1581
+ const bridge = new MemoryBridge(memoryEngine);
1582
+ let detail;
1583
+ if (action === 'syncTo') {
1584
+ const result = bridge.syncTo(targetDir || bridge.getBridgeDir(), { scope });
1585
+ detail = formatBullets([
1586
+ `Success: ${result.success}`,
1587
+ `Items: ${result.itemCount}`,
1588
+ result.path ? `Path: ${result.path}` : '',
1589
+ ]);
1590
+ }
1591
+ else if (action === 'syncFrom') {
1592
+ const result = bridge.syncFrom(sourceDir || bridge.getBridgeDir());
1593
+ detail = formatBullets([
1594
+ `Success: ${result.success}`,
1595
+ `Items: ${result.itemCount}`,
1596
+ result.errors?.length ? `Errors: ${result.errors.join(', ')}` : '',
1597
+ ]);
1598
+ }
1599
+ else {
1600
+ const result = bridge.getSyncState();
1601
+ detail = formatBullets([
1602
+ `Last sync: ${result.lastSync ? new Date(result.lastSync).toISOString() : 'never'}`,
1603
+ `Direction: ${result.lastDirection || 'none'}`,
1604
+ `Items: ${result.lastItemCount}`,
1605
+ ]);
1606
+ }
1607
+ return {
1608
+ content: [{
1609
+ type: 'text',
1610
+ text: [
1611
+ `OpenClaw memory sync: ${action}`,
1612
+ detail,
1613
+ ].join('\n\n'),
1614
+ }],
1615
+ };
1616
+ }
1558
1617
  case 'nexus_memory_trace': {
1559
1618
  const id = String(request.params.arguments?.id ?? '');
1560
1619
  const detail = this.nexusRef.traceMemory(id);