[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-94988":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":36,"readmeContent":37,"aiSummary":38,"trendingCount":16,"starSnapshotCount":16,"syncStatus":15,"lastSyncTime":39,"discoverSource":40},94988,"dsh-noema","ZSeven-W\u002Fdsh-noema","ZSeven-W","Noema long-term memory plugin for DSH: durable, inspectable agent memory with recall tools and a settings page.","op.zseven.tech",null,"TypeScript",113,7,102,2,0,4,45.11,"MIT License",false,"main",true,[24,25,26,27,28,29,30,31,32,33,34,35],"agent-memory","ai-agents","coding-agent","deepseek-harness","dsh","dsh-plugin","long-term-memory","mcp","memory","noema","plugin","typescript","2026-08-24 04:01:23","\u003Cp align=\"center\">\n  \u003Cimg src=\".\u002Fdocs\u002Fimages\u002Fdsh-noema-logo.png\" alt=\"DSH Noema\" width=\"120\" \u002F>\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">DSH Noema\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  \u003Cstrong>Long-term memory for DeepSeek Harness — durable, inspectable agent memory backed by Noema.\u003C\u002Fstrong>\u003Cbr \u002F>\n  \u003Csub>Recall Before Work &bull; Import From 9 Agent Tools &bull; Settings-Page Memory Management &bull; Crash Keep-Alive &bull; Hot Reload\u003C\u002Fsub>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Csub>npm: \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@zseven-w\u002Fdsh-noema\">\u003Ccode>@zseven-w\u002Fdsh-noema\u003C\u002Fcode>\u003C\u002Fa> · Current plugin release: \u003Ccode>0.1.0-rc.2\u003C\u002Fcode> · Tested with DSH \u003Ccode>0.1.0-rc.6\u003C\u002Fcode>\u003C\u002Fsub>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\".\u002FREADME.md\">\u003Cb>English\u003C\u002Fb>\u003C\u002Fa> · \u003Ca href=\".\u002FREADME.zh.md\">简体中文\u003C\u002Fa> · \u003Ca href=\".\u002FREADME.zh-TW.md\">繁體中文\u003C\u002Fa> · \u003Ca href=\".\u002FREADME.ja.md\">日本語\u003C\u002Fa> · \u003Ca href=\".\u002FREADME.ko.md\">한국어\u003C\u002Fa> · \u003Ca href=\".\u002FREADME.fr.md\">Français\u003C\u002Fa> · \u003Ca href=\".\u002FREADME.es.md\">Español\u003C\u002Fa> · \u003Ca href=\".\u002FREADME.de.md\">Deutsch\u003C\u002Fa> · \u003Ca href=\".\u002FREADME.pt.md\">Português\u003C\u002Fa> · \u003Ca href=\".\u002FREADME.ru.md\">Русский\u003C\u002Fa> · \u003Ca href=\".\u002FREADME.hi.md\">हिन्दी\u003C\u002Fa> · \u003Ca href=\".\u002FREADME.tr.md\">Türkçe\u003C\u002Fa> · \u003Ca href=\".\u002FREADME.th.md\">ไทย\u003C\u002Fa> · \u003Ca href=\".\u002FREADME.vi.md\">Tiếng Việt\u003C\u002Fa> · \u003Ca href=\".\u002FREADME.id.md\">Bahasa Indonesia\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@zseven-w\u002Fdsh-noema\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F%40zseven-w%2Fdsh-noema?style=flat&color=cfb537\" alt=\"npm\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FZSeven-W\u002Fdsh-noema\u002Fstargazers\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002FZSeven-W\u002Fdsh-noema?style=flat&color=cfb537\" alt=\"Stars\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FZSeven-W\u002Fdsh-noema\u002Fblob\u002Fmain\u002FLICENSE\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002FZSeven-W\u002Fdsh-noema?color=64748b\" alt=\"License\" \u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cbr \u002F>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\".\u002Fdocs\u002Fimages\u002Fdsh-noema-overview.png\" alt=\"DSH Noema — memory settings page\" width=\"100%\" \u002F>\n\u003C\u002Fp>\n\u003Cp align=\"center\">\u003Csub>The Noema Memory settings page — import sources, memory management, and live server status\u003C\u002Fsub>\u003C\u002Fp>\n\n## Why DSH Noema\n\nDSH Noema connects [DeepSeek Harness](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002Fdeepseek-harness) with [Noema](https:\u002F\u002Fgithub.com\u002FZSeven-W\u002Fnoema) — a local-first, non-vector memory system for coding agents — so an Agent keeps durable knowledge across sessions instead of starting every conversation from zero.\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd width=\"50%\">\n\n### 🧠 Durable Recall\n\nMemories persist as inspectable Markdown files under `NOEMA_ROOT` (default `~\u002F.agent-memory\u002F`). `noema_recall` loads relevant context at the start of a session; `noema_search`, `noema_browse`, `noema_catalog`, and `noema_recall_graph` cover lookup, exploration, and auditing.\n\n\u003C\u002Ftd>\n\u003Ctd width=\"50%\">\n\n### 📥 Import From Other Tools\n\n`noema_import` reads the memory files of ten other AI coding tools — Codex, Claude Code, opencode, Cursor, Grok, WorkBuddy, Antigravity, Trae, Qoder, Hermes — splits them into sections, and saves each as a durable memory. A content-keyed ledger deduplicates across runs and across tools that share files.\n\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd width=\"50%\">\n\n### 🛠️ Settings-Page Management\n\nThe Noema Memory settings page configures the server command, memory root, budgets, idle\u002Fcall timeouts, and the guidance section — and a Manage memories card searches, browses, adds, reviews, and deletes stored memories directly.\n\n\u003C\u002Ftd>\n\u003Ctd width=\"50%\">\n\n### 🩺 Keep-Alive\n\nThe memory server stays up: idle timeout defaults to never, and a keep-alive loop restarts the `noema-mcp` child in the background when it crashes or exits, with a configurable check interval and restart backoff.\n\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd width=\"50%\">\n\n### 🔍 Smart Entity Extraction\n\nNoema's extraction engine combines jieba word segmentation with high-precision signals — English proper nouns, CJK names and technical terms, quoted topics, and repetition — with stopword and path filters, so the PageIndex topic catalog stays clean.\n\n\u003C\u002Ftd>\n\u003Ctd width=\"50%\">\n\n### ⚡ Hot Reload\n\nAfter the first boot, the plugin never needs a restart again: `pnpm run build` hot-reloads the host plugin through Cordis HMR, and `ppnpm run build:client` hot-swaps the browser bundle over the client-hmr SSE channel.\n\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n## Install into DSH\n\n```sh\ndsh plugin --profile web add @zseven-w\u002Fdsh-noema@latest\ndsh web\n```\n\nOr, for local development straight from the source tree:\n\n```sh\ndsh plugin --profile web add link:\u002Fpath\u002Fto\u002Fdsh-noema\ndsh web\n```\n\nThe `link:` protocol symlinks the profile dependency to this repository, so rebuilds are visible immediately and Cordis HMR can watch the compiled output.\n\nThe plugin bundles the `noema-mcp` binary through per-platform optional npm packages. To build it yourself instead, run `cargo build --release -p noema-mcp` inside the bundled `noema` submodule, or point the Server command setting at any `noema-mcp` build.\n\n## Memory Tools\n\nThe model-facing tools mirror the Noema MCP surface:\n\n| Tool | What it does |\n| --- | --- |\n| `noema_recall` | Recall relevant memories for a query, with a token budget. |\n| `noema_search` | Full-text search over stored memories. |\n| `noema_browse` | Browse the PageIndex catalog for a topic or entity. |\n| `noema_catalog` | Render the full memory catalog as markdown. |\n| `noema_recall_graph` | Multi-hop recall through links and shared entities. |\n| `noema_neighbors` | One graph hop from a memory. |\n| `noema_explain` | Explain why a memory was or was not recalled. |\n| `noema_remember` | Save a durable fact, decision, constraint, or preference. |\n| `noema_review_list` | List pending review candidates. |\n| `noema_review_decide` | Accept, reject, edit, or merge a candidate. |\n| `noema_forget` | Tombstone or hard-delete a memory. |\n| `noema_policy_get` \u002F `noema_policy_set` | Read or update the write policy. |\n| `noema_status` | Server and tenant status: counts, index health, storage root. |\n| `noema_import` | Import memories from other AI coding tools. |\n\nEach tool returns a uniform envelope `{ ok, tool, text }` where `text` carries the full server output.\n\n## Import memories from other tools\n\n| Source id | Global files | Workspace files |\n| --- | --- | --- |\n| `codex` | `~\u002F.codex\u002FAGENTS.md` + the Codex memory pipeline: `~\u002F.codex\u002Fmemories\u002FMEMORY.md`, `memory_summary.md`, `rollout_summaries\u002F*.md`, `extensions\u002Fad_hoc\u002Fnotes\u002F*.md` (`raw_memories.md` skipped — it is the uncurated feed) | `AGENTS.md`, `AGENTS.local.md` |\n| `claude-code` | `~\u002F.claude\u002FCLAUDE.md`, `~\u002F.claude\u002FCLAUDE.local.md`, `~\u002F.claude\u002FMEMORY.md` | `CLAUDE.md`, `CLAUDE.local.md`, `MEMORY.md` |\n| `opencode` | `~\u002F.config\u002Fopencode\u002FAGENTS.md` | `AGENTS.md` |\n| `cursor` | `~\u002F.cursor\u002Frules\u002F*.mdc`, `~\u002F.cursorrules` | `.cursor\u002Frules\u002F*.mdc`, `.cursorrules` |\n| `grok` | `~\u002F.grok\u002FAGENTS.md` + the Grok cross-session memory: `~\u002F.grok\u002Fmemory\u002FMEMORY.md`, per-project `MEMORY.md`, and `sessions\u002F*.md` summaries | `AGENTS.md` |\n| `workbuddy` | `~\u002F.codebuddy\u002FCODEBUDDY.md` (WorkBuddy memory file), `~\u002F.workbuddy\u002FAGENTS.md`, `~\u002F.workbuddy\u002Fmemory.md`, `~\u002F.config\u002Fworkbuddy\u002FAGENTS.md`, `~\u002FLibrary\u002FApplication Support\u002FWorkBuddy\u002FAGENTS.md` | `AGENTS.md`, `CODEBUDDY.md` |\n| `antigravity` | `~\u002F.antigravity\u002FAGENTS.md`, `~\u002F.config\u002Fantigravity\u002FAGENTS.md`, `~\u002FLibrary\u002FApplication Support\u002FAntigravity\u002FAGENTS.md` (best-effort; no documented global memory store yet) | `AGENTS.md`, `AGENTS.local.md` |\n| `trae` | `~\u002F.trae\u002FAGENTS.md`, `~\u002F.trae\u002Fmemory\u002F`, `~\u002F.trae\u002Frules\u002F` (plus the `~\u002F.trae-cn` variants) | `AGENTS.md`, `.trae\u002Frules\u002F` |\n| `qoder` | `~\u002F.qoder-cn\u002FAGENTS.md`, `~\u002F.qoder-cn\u002Frules\u002F`, the auto-memory roots `~\u002F.qoder-cn\u002Fmemory\u002F` and `~\u002F.qoder-cn\u002Fprojects\u002F*\u002Fmemory\u002F` (plus `~\u002F.qoder` variants) | `AGENTS.md`, `AGENTS.local.md`, `.qoder\u002Frules\u002F` |\n| `hermes` | `~\u002F.hermes\u002Fmemories\u002F` (`MEMORY.md` + `USER.md`) and the global `~\u002F.hermes\u002FSOUL.md` | `.hermes.md`, `HERMES.md`, `AGENTS.md`, `CLAUDE.md` |\n\n- The `source` argument selects one tool, or omit it to run every source enabled in settings.\n- The `path` argument selects the workspace root for project-scoped files (defaults to the session workspace; workspace files only load when the Import workspace files setting is on).\n- Imports are deduplicated through a ledger at `$DSH_HOME\u002Fstorages\u002Fdsh-noema-imports.json`, keyed by file path + section content — when several tools share one project `AGENTS.md`, each section is imported exactly once. `force: true` re-imports everything.\n- The settings page exposes per-source checkboxes, an import-on-startup toggle, a file-size cap, and an Import now button with a last-run summary.\n\n## Settings\n\nOpen **Settings → Noema Memory**:\n\n| Setting | Default | Meaning |\n| --- | --- | --- |\n| Enable memory | on | Master switch for the `noema_*` tools. |\n| Memory guidance | on | System-prompt section teaching memory usage. |\n| Start server at boot | on | Spawn at DSH start instead of first use. |\n| Auto-accept new memories | on | `noema_remember` persists immediately. |\n| Server command | `bundled` | Bundled `noema-mcp` binary or a custom executable path\u002Fcommand. |\n| Working directory | — | cwd for the server (needed for `cargo run`). |\n| Memory root (NOEMA_ROOT) | — | Where memories are stored; empty = `~\u002F.agent-memory`. |\n| Recall token budget | 1200 | Default `budget_tokens` for `noema_recall`. |\n| Idle timeout (ms) | 0 | Stop the server after idle; 0 = never. |\n| Keep alive | on | Restart the server in the background when it crashes or exits. |\n| Keep-alive interval (ms) | 5000 | Minimum delay between background health checks. |\n| Call timeout (ms) | 30000 | Per-tool-call deadline. |\n| Restart delay (ms) | 1000 | Backoff between a stop\u002Fcrash and the next start. |\n\nThe status card shows server health with restart\u002Fstop actions, and the import section manages the nine memory sources.\n\n## Hot reload\n\nDSH's HMR machinery is fully usable once the plugin has been loaded once:\n\n- **Host plugin** — enable the Cordis HMR entry in the profile patch with its watch root pointed at this package's `lib\u002F` output, and keep the `link:` dependency. Run `pnpm run build` and the running DSH reloads the plugin entry automatically (the Noema server child is restarted by the reload) — no server restart.\n\n  ```yaml\n  # ~\u002F.dsh\u002Fprofiles\u002F\u003Cprofile>\u002Fcordis.patch.yml\n  - id: hmr\n    disabled: false\n    config:\n      root:\n        - \u002Fpath\u002Fto\u002Fdsh-noema\u002Flib\n  ```\n\n- **Client bundle** — `ppnpm run build:client` rewrites `lib\u002Fclient.js`; the client-hmr node half stat-polls every graph bundle (default 500ms) and broadcasts a `rebuilt` frame over the `\u002Fplugins\u002Fevents` SSE channel, and the browser hot-swaps the module without a page refresh.\n- **Settings** — every change made on the Noema Memory settings page applies live through the settings service.\n\nThe one thing hot-reload cannot do is load a plugin that was never in the booted tree: the running composition neither watches the profile patch layer (the web app does not wire `watchUserPatches`) nor exposes a loader mutation API (the plugin inventory RPC is read-only). A fresh plugin therefore needs exactly one server restart, after which the loop above is fully hot.\n\n## Develop\n\n```sh\npnpm install\npnpm run build     # host tsc + client tsdown bundle\npnpm test          # build + node --test tests\u002F\n```\n\nThe e2e test runs against `noema\u002Ftarget\u002Fdebug\u002Fnoema-mcp` when present (it is skipped otherwise).\n\n## License\n\nMIT\n\n","DSH Noema 是一个为 DeepSeek Harness（DSH）设计的长期记忆插件，基于本地优先、非向量化的 Noema 内存系统，提供持久化、可检查的智能体记忆能力。核心功能包括会话启动前自动召回相关记忆、支持从 9 种主流 AI 编程工具导入历史上下文、图形化内存管理设置页、崩溃后内存保活及热重载。技术上采用 TypeScript 实现，内存以结构化 Markdown 文件形式落盘，兼顾可读性与可审计性。适用于需要跨会话保持代码理解、项目上下文延续和团队知识沉淀的 AI 编程助手场景。","2026-08-19 02:30:05","CREATED_QUERY"]