memorix 1.2.2 → 1.2.4

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 (163) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +3 -3
  3. package/README.zh-CN.md +3 -3
  4. package/TEAM.md +86 -86
  5. package/dist/cli/index.js +5199 -4726
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/index.js +428 -49
  8. package/dist/index.js.map +1 -1
  9. package/dist/maintenance-runner.js +97 -18
  10. package/dist/maintenance-runner.js.map +1 -1
  11. package/dist/memcode-runtime/CHANGELOG.md +27 -0
  12. package/dist/sdk.js +428 -49
  13. package/dist/sdk.js.map +1 -1
  14. package/docs/1.2.4-PERSISTENT-MEMORY-DELIVERY.md +86 -0
  15. package/docs/AGENT_OPERATOR_PLAYBOOK.md +13 -1
  16. package/docs/API_REFERENCE.md +13 -3
  17. package/docs/DESIGN_DECISIONS.md +357 -357
  18. package/docs/dev-log/progress.txt +60 -9
  19. package/package.json +1 -1
  20. package/plugins/codex/memorix/.codex-plugin/plugin.json +1 -1
  21. package/src/audit/index.ts +156 -156
  22. package/src/cli/capability-map.ts +1 -1
  23. package/src/cli/command-guide.ts +4 -1
  24. package/src/cli/commands/agent-integrations.ts +5 -1
  25. package/src/cli/commands/audit-list.ts +89 -89
  26. package/src/cli/commands/background.ts +659 -659
  27. package/src/cli/commands/codegraph.ts +1 -1
  28. package/src/cli/commands/context.ts +9 -1
  29. package/src/cli/commands/formation.ts +48 -48
  30. package/src/cli/commands/git-hook-install.ts +111 -111
  31. package/src/cli/commands/handoff.ts +54 -54
  32. package/src/cli/commands/hooks-status.ts +63 -63
  33. package/src/cli/commands/ingest-commit.ts +153 -153
  34. package/src/cli/commands/ingest-image.ts +66 -66
  35. package/src/cli/commands/ingest-log.ts +180 -180
  36. package/src/cli/commands/ingest.ts +44 -44
  37. package/src/cli/commands/integrate-shared.ts +15 -15
  38. package/src/cli/commands/lock.ts +82 -82
  39. package/src/cli/commands/message.ts +104 -104
  40. package/src/cli/commands/poll.ts +58 -58
  41. package/src/cli/commands/purge-all-memory.ts +85 -85
  42. package/src/cli/commands/purge-project-memory.ts +83 -83
  43. package/src/cli/commands/reasoning.ts +118 -118
  44. package/src/cli/commands/resume.ts +31 -0
  45. package/src/cli/commands/serve-shared.ts +118 -118
  46. package/src/cli/commands/session.ts +15 -7
  47. package/src/cli/commands/skills.ts +114 -114
  48. package/src/cli/commands/task.ts +167 -167
  49. package/src/cli/commands/transfer.ts +47 -47
  50. package/src/cli/commands/uninstall-project-artifacts.ts +85 -85
  51. package/src/cli/index.ts +3 -1
  52. package/src/cli/tui/ChatView.tsx +234 -234
  53. package/src/cli/tui/CommandBar.tsx +312 -312
  54. package/src/cli/tui/ContextRail.tsx +118 -118
  55. package/src/cli/tui/HeaderBar.tsx +72 -72
  56. package/src/cli/tui/LogoBanner.tsx +51 -51
  57. package/src/cli/tui/Sidebar.tsx +179 -179
  58. package/src/cli/tui/index.ts +41 -41
  59. package/src/cli/tui/markdown-render.tsx +371 -371
  60. package/src/cli/tui/session-service.ts +3 -2
  61. package/src/cli/tui/use-mouse.ts +157 -157
  62. package/src/cli/tui/useNavigation.ts +56 -56
  63. package/src/cli/update-checker.ts +211 -211
  64. package/src/cli/version.ts +7 -7
  65. package/src/cli/workbench.ts +1 -1
  66. package/src/codegraph/auto-context.ts +54 -1
  67. package/src/codegraph/task-lens.ts +29 -0
  68. package/src/compact/token-budget.ts +89 -74
  69. package/src/config/toml-loader.ts +9 -5
  70. package/src/dashboard/project-classification.ts +64 -64
  71. package/src/embedding/fastembed-provider.ts +142 -142
  72. package/src/embedding/transformers-provider.ts +111 -111
  73. package/src/git/extractor.ts +209 -209
  74. package/src/git/hooks-path.ts +85 -85
  75. package/src/hooks/handler.ts +127 -66
  76. package/src/hooks/installers/index.ts +5 -4
  77. package/src/hooks/official-skills.ts +6 -4
  78. package/src/hooks/pattern-detector.ts +173 -173
  79. package/src/hooks/rules/memorix-agent-rules.md +9 -7
  80. package/src/hooks/significance-filter.ts +250 -250
  81. package/src/knowledge/context-assembly.ts +4 -1
  82. package/src/knowledge/workset.ts +89 -1
  83. package/src/llm/memory-manager.ts +328 -328
  84. package/src/llm/provider.ts +885 -885
  85. package/src/llm/quality.ts +248 -248
  86. package/src/memory/attribution-guard.ts +249 -249
  87. package/src/memory/disclosure-policy.ts +135 -135
  88. package/src/memory/entity-extractor.ts +197 -197
  89. package/src/memory/formation/evaluate.ts +217 -217
  90. package/src/memory/formation/extract.ts +361 -361
  91. package/src/memory/formation/index.ts +417 -417
  92. package/src/memory/formation/resolve.ts +344 -344
  93. package/src/memory/formation/types.ts +315 -315
  94. package/src/memory/freshness.ts +122 -122
  95. package/src/memory/graph.ts +197 -197
  96. package/src/memory/refs.ts +94 -94
  97. package/src/memory/secret-filter.ts +79 -79
  98. package/src/memory/session.ts +158 -9
  99. package/src/multimodal/image-loader.ts +143 -143
  100. package/src/orchestrate/adapters/claude-stream.ts +192 -192
  101. package/src/orchestrate/adapters/claude.ts +111 -111
  102. package/src/orchestrate/adapters/codex-stream.ts +134 -134
  103. package/src/orchestrate/adapters/codex.ts +41 -41
  104. package/src/orchestrate/adapters/gemini-stream.ts +166 -166
  105. package/src/orchestrate/adapters/gemini.ts +42 -42
  106. package/src/orchestrate/adapters/index.ts +73 -73
  107. package/src/orchestrate/adapters/opencode-stream.ts +143 -143
  108. package/src/orchestrate/adapters/opencode.ts +47 -47
  109. package/src/orchestrate/adapters/spawn-helper.ts +286 -286
  110. package/src/orchestrate/adapters/types.ts +77 -77
  111. package/src/orchestrate/capability-router.ts +284 -284
  112. package/src/orchestrate/context-compact.ts +188 -188
  113. package/src/orchestrate/cost-tracker.ts +219 -219
  114. package/src/orchestrate/error-recovery.ts +191 -191
  115. package/src/orchestrate/evidence.ts +140 -140
  116. package/src/orchestrate/ledger.ts +110 -110
  117. package/src/orchestrate/memorix-bridge.ts +343 -343
  118. package/src/orchestrate/output-budget.ts +80 -80
  119. package/src/orchestrate/permission.ts +152 -152
  120. package/src/orchestrate/pipeline-trace.ts +131 -131
  121. package/src/orchestrate/prompt-builder.ts +155 -155
  122. package/src/orchestrate/ring-buffer.ts +37 -37
  123. package/src/orchestrate/task-graph.ts +389 -389
  124. package/src/orchestrate/worktree.ts +232 -232
  125. package/src/project/aliases.ts +374 -374
  126. package/src/project/detector.ts +268 -268
  127. package/src/rules/adapters/claude-code.ts +99 -99
  128. package/src/rules/adapters/codex.ts +97 -97
  129. package/src/rules/adapters/copilot.ts +124 -124
  130. package/src/rules/adapters/cursor.ts +114 -114
  131. package/src/rules/adapters/kiro.ts +126 -126
  132. package/src/rules/adapters/trae.ts +56 -56
  133. package/src/rules/adapters/windsurf.ts +83 -83
  134. package/src/rules/syncer.ts +235 -235
  135. package/src/sdk.ts +299 -299
  136. package/src/search/intent-detector.ts +289 -289
  137. package/src/search/query-expansion.ts +52 -52
  138. package/src/server/formation-timeout.ts +27 -27
  139. package/src/server.ts +144 -10
  140. package/src/skills/mini-skills.ts +386 -386
  141. package/src/store/bun-sqlite-compat.ts +118 -15
  142. package/src/store/chat-store.ts +119 -119
  143. package/src/store/graph-store.ts +249 -249
  144. package/src/store/mini-skill-store.ts +349 -349
  145. package/src/store/persistence-json.ts +212 -212
  146. package/src/store/persistence.ts +291 -291
  147. package/src/store/project-affinity.ts +195 -195
  148. package/src/store/sqlite-db.ts +3 -3
  149. package/src/team/event-bus.ts +76 -76
  150. package/src/team/file-locks.ts +173 -173
  151. package/src/team/handoff.ts +161 -161
  152. package/src/team/messages.ts +203 -203
  153. package/src/team/poll.ts +132 -132
  154. package/src/team/tasks.ts +211 -211
  155. package/src/workspace/mcp-adapters/codex.ts +191 -191
  156. package/src/workspace/mcp-adapters/copilot.ts +105 -105
  157. package/src/workspace/mcp-adapters/cursor.ts +53 -53
  158. package/src/workspace/mcp-adapters/kiro.ts +64 -64
  159. package/src/workspace/mcp-adapters/opencode.ts +123 -123
  160. package/src/workspace/mcp-adapters/trae.ts +134 -134
  161. package/src/workspace/mcp-adapters/windsurf.ts +91 -91
  162. package/src/workspace/sanitizer.ts +60 -60
  163. package/src/workspace/workflow-sync.ts +131 -131
@@ -0,0 +1,86 @@
1
+ # 1.2.4 Persistent Memory Delivery
2
+
3
+ **Status:** release-ready
4
+ **Date:** 2026-07-26
5
+
6
+ ## Problem
7
+
8
+ Memorix already has durable project memory, Code State, session summaries,
9
+ knowledge, visibility policy, CLI, and MCP. The delivery path was uneven:
10
+
11
+ - A fresh agent without a visible MCP tool could guess through many CLI commands
12
+ before finding the relevant state.
13
+ - The normal task Workset deliberately avoided generic old-chat dumping, but it
14
+ also hid the small amount of prior work that matters when a user says
15
+ "continue" or "take over".
16
+ - A new retrieval path must not bypass the session visibility fix shipped in
17
+ 1.2.3.
18
+
19
+ This release improves delivery, not storage. It does not create a handoff
20
+ database, a transcript archive, or another default MCP tool.
21
+
22
+ ## Product Contract
23
+
24
+ | Situation | Delivery |
25
+ | --- | --- |
26
+ | Start a new, unrelated task | A bounded task Workset. No automatic prior-session text. |
27
+ | Continue or take over prior work | The same Workset plus a bounded prior-work projection. |
28
+ | MCP is available | Use the existing `memorix_project_context` tool with the real task. |
29
+ | MCP is unavailable | Make one CLI call: `memorix resume "<task>" --json` for continuation or `memorix context "<task>" --json` for a new task. |
30
+ | Claude Code hook is installed | An explicit continuation prompt receives the same bounded prior-work Workset through the official `UserPromptSubmit` context channel, unless `memory.inject = "silent"`. |
31
+ | Read-only assessment | The brief may be read, but Memorix does not persist a new observation unless the user explicitly asks to save one. |
32
+ | Need a deliberate session handoff | Keep using the explicit session/handoff surfaces; this projection does not replace them. |
33
+
34
+ Continuation detection is independent of the underlying task lens. For example,
35
+ "continue fixing the authentication timeout" is still a `bugfix` task, with
36
+ bugfix verification guidance, plus bounded prior-work evidence.
37
+
38
+ ## Delivery Model
39
+
40
+ ```text
41
+ Canonical project identity
42
+ -> existing SQLite sessions + durable observations + visibility policy
43
+ -> Task Workset
44
+ -> normal task: current facts, code state, selected evidence
45
+ -> continuation: normal task + one session summary + <=3 durable anchors
46
+ -> existing MCP Project Context, direct CLI Context/Resume, or an eligible host hook
47
+ ```
48
+
49
+ The projection is intentionally small and source-aware:
50
+
51
+ - The latest meaningful completed session summary is eligible.
52
+ - At most three durable decision/fix/discovery-style observations are eligible.
53
+ - Project, team, and personal visibility is enforced with the caller's reader.
54
+ - The `ContextReceipt` records selected or budget-withheld continuation items.
55
+ - Current code remains the authority; historical material is a lead, not an
56
+ instruction.
57
+
58
+ ## Explicit Non-Goals
59
+
60
+ - Do not inject arbitrary transcript history into every request.
61
+ - Do not infer continuation from every mention of a past file or release.
62
+ - Do not add a separate `handoff` store or duplicate session memory.
63
+ - Do not add an eighth default MCP tool merely for CLI parity.
64
+ - Do not make an unbound terminal see personal or team-scoped memory.
65
+
66
+ ## Acceptance Gates
67
+
68
+ 1. A normal new task has no `Resume from prior work` section.
69
+ 2. A continuation task has a bounded section and keeps its real task lens.
70
+ 3. `memorix resume` and `memorix_project_context` share the Workset contract.
71
+ 4. A foreign identity cannot receive personal continuation evidence.
72
+ 5. Generated guidance performs one precise CLI fallback instead of help/search
73
+ enumeration or inferring an empty memory store from project files.
74
+ 6. Compiled package smoke proves CLI positional parsing and stdio MCP output.
75
+ 7. Claude Code receives an explicit continuation through its official
76
+ `UserPromptSubmit.additionalContext` path; an unrelated prompt stays quiet.
77
+ 8. A fresh agent-style user path evaluates the installed package without
78
+ modifying the maintainer's real agent configuration.
79
+ 9. A fresh package installation whose optional native SQLite binary cannot load
80
+ still preserves the same `memorix.db` across separate CLI and hook processes
81
+ through the supported Node 22 SQLite fallback.
82
+ 10. A successful Autopilot brief preserves the exact continuation flag/path or
83
+ command needed to act, and does not trigger redundant memory retrieval by
84
+ default.
85
+ 11. A read-only continuation assessment neither replays already-delivered
86
+ durable evidence nor writes a new memory without an explicit user request.
@@ -38,7 +38,7 @@ For the 1.2 release line, the visible product shape is:
38
38
  - model lanes are separate: `[memory.llm]` for formation/rerank/summaries, `[embedding]` for semantic search, `[agent]` for the model memcode talks to while coding
39
39
  - legacy `memorix.yml`, `.env`, and `~/.memorix/config.json` are compatibility inputs, not the recommended setup path
40
40
  - generated agent rules treat `memorix_session_start` as optional unless explicit session semantics matter
41
- - `memorix_project_context` / `memorix context --task "..."` is the normal black-box entry for non-trivial coding work: it assembles a bounded task Workset instead of injecting a generic memory dump
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
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
@@ -766,6 +766,18 @@ memorix doctor
766
766
 
767
767
  to inspect active runtime status.
768
768
 
769
+ ### 9. Does a fresh CLI install report a `better-sqlite3` binding error?
770
+
771
+ On the supported Node 22 runtime, current Memorix releases automatically use
772
+ Node's built-in SQLite with the same local `memorix.db` when the optional
773
+ `better-sqlite3` native binary is unavailable. Upgrade the package and rerun
774
+ the command; do not delete the data directory or create a replacement database.
775
+
776
+ Node may print its own experimental SQLite warning on that fallback path. It is
777
+ not a memory-loss condition. If Memorix instead reports that SQLite is
778
+ unavailable, confirm the installed Node version satisfies the package engine
779
+ and include the exact error when filing an issue.
780
+
769
781
  ---
770
782
 
771
783
  ## 11. What Not to Do
@@ -59,7 +59,7 @@ The current CLI namespaces are:
59
59
  Typical examples:
60
60
 
61
61
  ```bash
62
- memorix --cwd /path/to/repo context --task "continue auth bug"
62
+ memorix --cwd /path/to/repo resume "continue auth bug"
63
63
  memorix identity join --agent-type codex --name codex-main
64
64
  memorix session start --agent codex-main --agent-type codex --join-team --use
65
65
  memorix memory search --query "release blocker"
@@ -96,6 +96,8 @@ memorix codegraph status
96
96
  memorix codegraph status --json
97
97
  memorix context
98
98
  memorix context --task "continue auth bug"
99
+ memorix context "continue auth bug"
100
+ memorix resume "continue auth bug"
99
101
  memorix context --task "prepare 1.1.7 release"
100
102
  memorix explain
101
103
  memorix codegraph context-pack --task "continue auth bug"
@@ -107,11 +109,11 @@ MCP:
107
109
  - `memorix_codegraph_status` returns provider/index counts for the current project.
108
110
  - `memorix_context_pack` builds a task-specific packet with reliable current memories, lower-trust unbound memories, current code facts, freshness warnings, suggested reads, and suggested verification.
109
111
 
110
- `memorix context` defaults to `--refresh auto`, so first use can seed Code State without a separate manual `memorix codegraph refresh`. Its brief puts live package/changelog/Git facts before memory hints and flags old `progress.txt` / dev-log notes as historical when they predate the latest changelog, so agents should treat current facts as the source of truth when files disagree. Task lenses keep the packet shaped to the work: bugfix briefs prefer failing tests and repros, release briefs prefer metadata/changelog/package checks, and onboarding briefs prefer docs and entry points while hiding unrelated suspect details. Use `--refresh never` for read-only inspection and `--refresh always` when you want to force a fresh scan.
112
+ `memorix context` defaults to `--refresh auto`, so first use can seed Code State without a separate manual `memorix codegraph refresh`. Its brief puts live package/changelog/Git facts before memory hints and flags old `progress.txt` / dev-log notes as historical when they predate the latest changelog, so agents should treat current facts as the source of truth when files disagree. Task lenses keep the packet shaped to the work: bugfix briefs prefer failing tests and repros, release briefs prefer metadata/changelog/package checks, and onboarding briefs prefer docs and entry points while hiding unrelated suspect details. Continuation delivery is separate from the task lens: continuation language in `memorix_project_context` enables a bounded prior-work projection, and `memorix resume "..."` makes that choice explicit. It includes only the latest useful session summary and up to three readable durable memories; ordinary new tasks do not receive historical-session context. A completed MCP brief is the default retrieval boundary: search, detail, or Context Pack should expand it only for a named missing fact or an explicit request for deeper history. Use `--refresh never` for read-only inspection and `--refresh always` when you want to force a fresh scan.
111
113
 
112
114
  Project-specific generated, vendored, or cache paths can be excluded from Code State with `[codegraph].exclude_patterns` in `memorix.toml` or `~/.memorix/config.toml` (`codegraph.excludePatterns` in legacy YAML). User patterns extend the built-in excludes and are applied to indexing, Project Context suggested reads, and Context Pack suggested reads.
113
115
 
114
- SessionStart hooks keep the default minimal hint lightweight. When memory behavior is configured with `sessionInject=full`, Memorix injects the compact Memory Autopilot brief at session start instead of only listing recent text memories.
116
+ SessionStart hooks keep the default minimal hint lightweight. When memory behavior is configured with `sessionInject=full`, Codex receives the compact Memory Autopilot brief at session start instead of only listing recent text memories. Claude Code delivers an explicit continuation through its official `UserPromptSubmit` context channel, so a user saying “continue” receives the bounded prior-work brief even under the default minimal setting. Set `memory.inject = "silent"` to disable automatic hook delivery.
115
117
 
116
118
  The intended loop for agents is: get the project brief when it helps, inspect the suggested current files, use stale or unbound memory only as a lead, store durable outcomes after the work changes the project, and resolve obsolete memories.
117
119
 
@@ -220,6 +222,10 @@ require a joined coordination identity; a personal record is readable only by
220
222
  its creator and explicitly named recipients. Supplying a `topicKey` never
221
223
  lets an agent overwrite a record outside its write scope.
222
224
 
225
+ When the current Autopilot task is read-only or explicitly says not to modify
226
+ files, `memorix_store` returns without writing. Use `overrideReadOnly: true`
227
+ only when the user explicitly asks to preserve a record during that task.
228
+
223
229
  Example:
224
230
 
225
231
  ```json
@@ -252,6 +258,8 @@ Important inputs:
252
258
  - `since`
253
259
  - `until`
254
260
  - `maxTokens`
261
+ - `purpose` when deliberately expanding beyond the current Autopilot brief
262
+ - `force: true` only when the user explicitly asks to re-read a record already represented in that brief
255
263
 
256
264
  Typical uses:
257
265
 
@@ -281,6 +289,8 @@ Global example:
281
289
 
282
290
  Fetch full observation detail.
283
291
 
292
+ After `memorix_project_context`, use `purpose` only for a named missing fact. Set `force: true` only when the user explicitly asks for the full underlying record already represented in the brief.
293
+
284
294
  Supports two modes:
285
295
 
286
296
  - `ids` for current-project observations