memorix 1.6.1 → 1.6.3

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 (122) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/TEAM.md +86 -86
  3. package/dist/cli/index.js +2582 -1845
  4. package/dist/index.js +1355 -683
  5. package/dist/maintenance-runner.js +1621 -1096
  6. package/dist/media-audio-runner.js +1612 -1088
  7. package/dist/media-video-runner.js +1612 -1088
  8. package/dist/memcode-runtime/CHANGELOG.md +35 -0
  9. package/dist/sdk.js +2007 -1396
  10. package/dist/vector-backfill-runner.js +1610 -1086
  11. package/docs/DESIGN_DECISIONS.md +357 -357
  12. package/docs/PERFORMANCE.md +15 -0
  13. package/package.json +2 -1
  14. package/plugins/claude/memorix/.claude-plugin/plugin.json +1 -1
  15. package/plugins/codebuddy/memorix/.codebuddy-plugin/plugin.json +1 -1
  16. package/plugins/codex/memorix/.codex-plugin/plugin.json +1 -1
  17. package/plugins/copilot/memorix/plugin.json +1 -1
  18. package/plugins/gemini/memorix/gemini-extension.json +1 -1
  19. package/plugins/omp/memorix/package.json +1 -1
  20. package/plugins/openclaw/memorix/.codex-plugin/plugin.json +1 -1
  21. package/plugins/pi/memorix/package.json +1 -1
  22. package/server.json +2 -2
  23. package/src/audit/index.ts +156 -156
  24. package/src/cli/commands/background.ts +51 -5
  25. package/src/cli/commands/formation.ts +48 -48
  26. package/src/cli/commands/git-hook-install.ts +111 -111
  27. package/src/cli/commands/handoff.ts +54 -54
  28. package/src/cli/commands/hooks-status.ts +63 -63
  29. package/src/cli/commands/ingest.ts +44 -44
  30. package/src/cli/commands/integrate-shared.ts +15 -15
  31. package/src/cli/commands/lock.ts +82 -82
  32. package/src/cli/commands/message.ts +104 -104
  33. package/src/cli/commands/operator-shared.ts +18 -11
  34. package/src/cli/commands/poll.ts +58 -58
  35. package/src/cli/commands/reasoning.ts +118 -118
  36. package/src/cli/commands/serve-http.ts +29 -7
  37. package/src/cli/commands/serve-shared.ts +49 -6
  38. package/src/cli/commands/serve.ts +4 -0
  39. package/src/cli/commands/skills.ts +114 -114
  40. package/src/cli/commands/task.ts +167 -167
  41. package/src/cli/commands/transfer.ts +47 -47
  42. package/src/cli/index.ts +406 -406
  43. package/src/cli/tui/ChatView.tsx +234 -234
  44. package/src/cli/tui/CommandBar.tsx +312 -312
  45. package/src/cli/tui/ContextRail.tsx +118 -118
  46. package/src/cli/tui/HeaderBar.tsx +72 -72
  47. package/src/cli/tui/LogoBanner.tsx +51 -51
  48. package/src/cli/tui/index.ts +41 -41
  49. package/src/cli/version.ts +7 -7
  50. package/src/cli/workbench.ts +1 -1
  51. package/src/dashboard/project-classification.ts +64 -64
  52. package/src/embedding/api-provider.ts +503 -27
  53. package/src/embedding/provider.ts +20 -3
  54. package/src/git/hooks-path.ts +85 -85
  55. package/src/hooks/lifecycle.ts +1 -0
  56. package/src/hooks/pattern-detector.ts +173 -173
  57. package/src/hooks/significance-filter.ts +250 -250
  58. package/src/llm/memory-manager.ts +328 -328
  59. package/src/llm/quality.ts +248 -248
  60. package/src/memory/attribution-guard.ts +249 -249
  61. package/src/memory/disclosure-policy.ts +135 -135
  62. package/src/memory/entity-extractor.ts +197 -197
  63. package/src/memory/formation/evaluate.ts +217 -217
  64. package/src/memory/freshness.ts +122 -122
  65. package/src/memory/graph.ts +197 -197
  66. package/src/memory/observations.ts +68 -18
  67. package/src/memory/refs.ts +94 -94
  68. package/src/memory/secret-filter.ts +79 -79
  69. package/src/memory/session.ts +13 -3
  70. package/src/orchestrate/adapters/claude-stream.ts +192 -192
  71. package/src/orchestrate/adapters/claude.ts +111 -111
  72. package/src/orchestrate/adapters/codex-stream.ts +134 -134
  73. package/src/orchestrate/adapters/codex.ts +41 -41
  74. package/src/orchestrate/adapters/gemini-stream.ts +166 -166
  75. package/src/orchestrate/adapters/gemini.ts +42 -42
  76. package/src/orchestrate/adapters/index.ts +73 -73
  77. package/src/orchestrate/adapters/opencode-stream.ts +143 -143
  78. package/src/orchestrate/adapters/opencode.ts +47 -47
  79. package/src/orchestrate/adapters/types.ts +77 -77
  80. package/src/orchestrate/capability-router.ts +284 -284
  81. package/src/orchestrate/cost-tracker.ts +219 -219
  82. package/src/orchestrate/error-recovery.ts +191 -191
  83. package/src/orchestrate/evidence.ts +140 -140
  84. package/src/orchestrate/ledger.ts +110 -110
  85. package/src/orchestrate/memorix-bridge.ts +343 -343
  86. package/src/orchestrate/output-budget.ts +80 -80
  87. package/src/orchestrate/permission.ts +152 -152
  88. package/src/orchestrate/pipeline-trace.ts +131 -131
  89. package/src/orchestrate/prompt-builder.ts +155 -155
  90. package/src/orchestrate/ring-buffer.ts +37 -37
  91. package/src/orchestrate/task-graph.ts +389 -389
  92. package/src/project/aliases.ts +374 -374
  93. package/src/project/launch-root.ts +115 -0
  94. package/src/rules/adapters/trae.ts +56 -56
  95. package/src/rules/syncer.ts +235 -235
  96. package/src/runtime/isolated-maintenance.ts +12 -1
  97. package/src/sdk.ts +12 -8
  98. package/src/search/query-expansion.ts +52 -52
  99. package/src/server/formation-timeout.ts +27 -27
  100. package/src/server.ts +38 -5
  101. package/src/skills/mini-skills.ts +386 -386
  102. package/src/store/chat-store.ts +119 -119
  103. package/src/store/graph-store.ts +249 -249
  104. package/src/store/mini-skill-store.ts +349 -349
  105. package/src/store/obs-store.ts +2 -2
  106. package/src/store/orama-store.ts +21 -3
  107. package/src/store/persistence-json.ts +212 -212
  108. package/src/store/persistence.ts +291 -291
  109. package/src/store/project-affinity.ts +195 -195
  110. package/src/store/sqlite-db.ts +2 -0
  111. package/src/store/sqlite-store.ts +19 -4
  112. package/src/team/event-bus.ts +76 -76
  113. package/src/team/handoff.ts +161 -161
  114. package/src/team/poll.ts +132 -132
  115. package/src/workspace/mcp-adapters/codex.ts +191 -191
  116. package/src/workspace/mcp-adapters/copilot.ts +105 -105
  117. package/src/workspace/mcp-adapters/cursor.ts +53 -53
  118. package/src/workspace/mcp-adapters/kiro.ts +64 -64
  119. package/src/workspace/mcp-adapters/opencode.ts +123 -123
  120. package/src/workspace/mcp-adapters/trae.ts +134 -134
  121. package/src/workspace/mcp-adapters/windsurf.ts +91 -91
  122. package/src/workspace/sanitizer.ts +60 -60
package/CHANGELOG.md CHANGED
@@ -4,6 +4,41 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [1.6.3] - 2026-08-18
8
+
9
+ ### Fixed
10
+ - **Safe home-directory boundaries** -- project binding and SQLite now share
11
+ the same effective `HOME`/`USERPROFILE` resolution on Windows, so an agent
12
+ launched from a user directory is rejected consistently and cannot create a
13
+ decoy `~/memorix.db`. Contributed by
14
+ [@RaviTharuma](https://github.com/RaviTharuma) in #230, with a maintainer
15
+ compatibility follow-up for Windows environment resolution.
16
+ - **Fast first session on large stores** -- `memorix_session_start` uses a
17
+ bounded newest-first slice while the remaining hydration work continues in
18
+ the background, keeping first contact responsive on large projects.
19
+
20
+ ## [1.6.2] - 2026-08-18
21
+
22
+ ### Changed
23
+ - **Responsive large-store control plane** -- HTTP health and MCP initialize
24
+ no longer wait for full observation or embedding-cache hydration. Hook writes
25
+ persist directly without loading the full corpus, one-shot CLI paths avoid
26
+ cached-vector attachment, and ordinary embedding-disabled writes stay off
27
+ the provider/configuration hot path. Contributed by
28
+ [@RaviTharuma](https://github.com/RaviTharuma) in #214.
29
+ - **Bounded and crash-safe embedding cache** -- JSONL cache loading is bounded
30
+ by a 256 MiB raw-vector payload budget, legacy JSON migration publishes via
31
+ temporary-file rename, concurrent loads are single-flighted, and sidecar
32
+ metadata avoids rescanning a large cache on every save.
33
+
34
+ ### Fixed
35
+ - **SDK lifecycle and persistence parity** -- `MemoryClient.close()` releases
36
+ its SQLite handle on Windows, reopening the same directory reloads a fresh
37
+ store snapshot, and SDK clients use the same flat data directory as CLI,
38
+ hooks, and HTTP MCP instead of the retired per-project directory layout.
39
+ - **Correct background entrypoint** -- `memorix background start` launches the
40
+ built HTTP CLI entrypoint rather than the stdio library entry.
41
+
7
42
  ## [1.6.1] - 2026-08-17
8
43
 
9
44
  ### Fixed
package/TEAM.md CHANGED
@@ -1,18 +1,18 @@
1
- # Memorix Team Protocol
2
-
1
+ # Memorix Team Protocol
2
+
3
3
  Rules for project-scoped autonomous-agent coordination via Memorix team tools. The Team page is an **Agent Team status surface** — it shows explicitly joined autonomous agents, open tasks, locks, messages, handoffs, and what needs attention. It is NOT an organization backend, staffing admin tool, or automatic chat room between separate IDE windows.
4
4
 
5
5
  Only agents that are intentionally participating in team/task/message/lock workflows need this protocol. Memory-only sessions should stay lightweight and do not need a team identity.
6
6
 
7
7
  For real autonomous multi-agent development, prefer `memorix orchestrate`: it launches and supervises CLI agent workers through Memorix tasks, context, verification, and fix loops. The team tools support that workflow; they should not be interpreted as proof that unrelated IDE conversation windows can autonomously contact each other.
8
-
9
- There are 4 team tools, each with an `action` parameter:
10
-
11
- - `team_manage` — action: join / leave / status
12
- - `team_file_lock` — action: lock / unlock / status
13
- - `team_task` — action: create / claim / complete / list
14
- - `team_message` — action: send / broadcast / inbox
15
-
8
+
9
+ There are 4 team tools, each with an `action` parameter:
10
+
11
+ - `team_manage` — action: join / leave / status
12
+ - `team_file_lock` — action: lock / unlock / status
13
+ - `team_task` — action: create / claim / complete / list
14
+ - `team_message` — action: send / broadcast / inbox
15
+
16
16
  ## RULE 1: Start Lightweight, Join Team Explicitly
17
17
 
18
18
  At the **beginning of every memory session**, before project-scoped memory work:
@@ -25,82 +25,82 @@ At the **beginning of every memory session**, before project-scoped memory work:
25
25
  4. Store the returned **agent ID** only after an explicit join — you will need it for subsequent team operations.
26
26
  5. Call `memorix_poll` with your agent ID to see current autonomous agents, check available tasks, and read unread messages.
27
27
  6. If you need a custom role or capabilities, use explicit `team_manage(join)` so the role overrides the default mapping cleanly.
28
-
29
- ## RULE 2: Lock Before Edit
30
-
31
- Before modifying any file that another agent might also be working on:
32
-
33
- 1. Call `team_file_lock` with `action: "status"` and the file path to check if it is already locked.
34
- 2. If unlocked, call `team_file_lock` with `action: "lock"`, the file path, and your agent ID.
35
- 3. If locked by another agent, **do not edit that file**. Either:
36
- - Work on a different file.
37
- - Send a `request` message to the lock owner asking them to release it.
38
- - Wait and re-check later.
39
- 4. When you are done editing, call `team_file_lock` with `action: "unlock"` to release the lock.
40
-
41
- **Never edit a file locked by another agent.** Lock violations cause merge conflicts and data loss.
42
-
43
- Locks auto-expire after 10 minutes. If you hold a lock for extended work, re-lock periodically to refresh the TTL.
44
-
45
- ## RULE 3: Use Tasks for Work Coordination
46
-
47
- When the user assigns work that involves multiple agents or multiple steps:
48
-
49
- 1. Call `team_task` with `action: "create"` to break the work into discrete tasks with clear descriptions.
50
- 2. Use `deps` to declare dependencies between tasks (a task cannot be claimed until its dependencies are completed).
51
- 3. Call `team_task` with `action: "claim"` to assign a task to yourself before starting work on it.
52
- 4. Call `team_task` with `action: "complete"` and a `result` summary when the task is done.
53
- 5. Call `team_task` with `action: "list"` to see overall progress and find available work.
54
-
55
- Rules:
56
- - Only claim tasks whose dependencies are all completed.
57
- - Only one agent may claim a given task.
58
- - If you cannot complete a claimed task, leave the team so the task returns to pending and another agent can pick it up.
59
-
60
- ## RULE 4: Communication Protocol
61
-
62
- Use `team_message` with `action: "send"` for direct messages and `action: "broadcast"` for announcements. Message types and their intended use:
63
-
64
- | Type | Use |
65
- |------|-----|
66
- | `request` | Ask another agent to do something, release a lock, or provide information. |
67
- | `response` | Reply to a prior request. |
68
- | `info` | Share context: discoveries, status updates, warnings about tricky code. |
69
- | `announcement` | Broadcast to all agents: major state changes, deployment events, breaking changes. |
70
- | `contract` | Propose or agree on a division of work. Both agents should acknowledge. |
71
- | `error` | Report a blocking issue that requires another agent's attention. |
72
-
73
- Rules:
74
- - `action: "send"` requires the full UUID of the target agent. Get it from `team_manage` with `action: "status"`.
75
- - Check your inbox (`action: "inbox"`) at least once before starting new work and once before ending a session.
76
- - Keep message content under 10KB. Be concise and actionable.
77
-
78
- ## RULE 5: Leave on Session End
79
-
80
- When the session is ending:
81
-
82
- 1. Call `team_file_lock` with `action: "unlock"` for every file you have locked, or they will remain locked until TTL expiry (10 min).
83
- 2. If you have in-progress tasks you cannot finish, leave them — leaving releases your tasks back to pending.
84
- 3. Call `team_manage` with `action: "leave"` and your agent ID. This marks you inactive, releases all your locks, and clears your inbox.
85
-
86
- ## RULE 6: Conflict Prevention
87
-
88
- - **Check before acting.** Always check team status and file lock status before starting work to understand the current state.
89
- - **Communicate before diverging.** If you plan to refactor shared code, broadcast an `announcement` first so other agents can save their work.
90
- - **Respect lock ownership.** The lock holder has exclusive write access. No exceptions.
91
- - **Prefer small, scoped changes.** Large cross-cutting changes increase conflict risk. Coordinate via tasks and messages if a change touches files other agents are working on.
92
- - **Do not duplicate work.** Check the task list before creating new tasks. If a similar task exists, claim it instead of creating a duplicate.
93
-
94
- ## Summary of Required Calls
95
-
96
- | When | Tool Call |
97
- |------|-----------|
28
+
29
+ ## RULE 2: Lock Before Edit
30
+
31
+ Before modifying any file that another agent might also be working on:
32
+
33
+ 1. Call `team_file_lock` with `action: "status"` and the file path to check if it is already locked.
34
+ 2. If unlocked, call `team_file_lock` with `action: "lock"`, the file path, and your agent ID.
35
+ 3. If locked by another agent, **do not edit that file**. Either:
36
+ - Work on a different file.
37
+ - Send a `request` message to the lock owner asking them to release it.
38
+ - Wait and re-check later.
39
+ 4. When you are done editing, call `team_file_lock` with `action: "unlock"` to release the lock.
40
+
41
+ **Never edit a file locked by another agent.** Lock violations cause merge conflicts and data loss.
42
+
43
+ Locks auto-expire after 10 minutes. If you hold a lock for extended work, re-lock periodically to refresh the TTL.
44
+
45
+ ## RULE 3: Use Tasks for Work Coordination
46
+
47
+ When the user assigns work that involves multiple agents or multiple steps:
48
+
49
+ 1. Call `team_task` with `action: "create"` to break the work into discrete tasks with clear descriptions.
50
+ 2. Use `deps` to declare dependencies between tasks (a task cannot be claimed until its dependencies are completed).
51
+ 3. Call `team_task` with `action: "claim"` to assign a task to yourself before starting work on it.
52
+ 4. Call `team_task` with `action: "complete"` and a `result` summary when the task is done.
53
+ 5. Call `team_task` with `action: "list"` to see overall progress and find available work.
54
+
55
+ Rules:
56
+ - Only claim tasks whose dependencies are all completed.
57
+ - Only one agent may claim a given task.
58
+ - If you cannot complete a claimed task, leave the team so the task returns to pending and another agent can pick it up.
59
+
60
+ ## RULE 4: Communication Protocol
61
+
62
+ Use `team_message` with `action: "send"` for direct messages and `action: "broadcast"` for announcements. Message types and their intended use:
63
+
64
+ | Type | Use |
65
+ |------|-----|
66
+ | `request` | Ask another agent to do something, release a lock, or provide information. |
67
+ | `response` | Reply to a prior request. |
68
+ | `info` | Share context: discoveries, status updates, warnings about tricky code. |
69
+ | `announcement` | Broadcast to all agents: major state changes, deployment events, breaking changes. |
70
+ | `contract` | Propose or agree on a division of work. Both agents should acknowledge. |
71
+ | `error` | Report a blocking issue that requires another agent's attention. |
72
+
73
+ Rules:
74
+ - `action: "send"` requires the full UUID of the target agent. Get it from `team_manage` with `action: "status"`.
75
+ - Check your inbox (`action: "inbox"`) at least once before starting new work and once before ending a session.
76
+ - Keep message content under 10KB. Be concise and actionable.
77
+
78
+ ## RULE 5: Leave on Session End
79
+
80
+ When the session is ending:
81
+
82
+ 1. Call `team_file_lock` with `action: "unlock"` for every file you have locked, or they will remain locked until TTL expiry (10 min).
83
+ 2. If you have in-progress tasks you cannot finish, leave them — leaving releases your tasks back to pending.
84
+ 3. Call `team_manage` with `action: "leave"` and your agent ID. This marks you inactive, releases all your locks, and clears your inbox.
85
+
86
+ ## RULE 6: Conflict Prevention
87
+
88
+ - **Check before acting.** Always check team status and file lock status before starting work to understand the current state.
89
+ - **Communicate before diverging.** If you plan to refactor shared code, broadcast an `announcement` first so other agents can save their work.
90
+ - **Respect lock ownership.** The lock holder has exclusive write access. No exceptions.
91
+ - **Prefer small, scoped changes.** Large cross-cutting changes increase conflict risk. Coordinate via tasks and messages if a change touches files other agents are working on.
92
+ - **Do not duplicate work.** Check the task list before creating new tasks. If a similar task exists, claim it instead of creating a duplicate.
93
+
94
+ ## Summary of Required Calls
95
+
96
+ | When | Tool Call |
97
+ |------|-----------|
98
98
  | Session start | `memorix_session_start` (lightweight) |
99
99
  | Join Agent Team | `memorix_session_start(joinTeam=true)` or `team_manage(join)` |
100
100
  | After joining | `memorix_poll` (check status + inbox) |
101
- | Before editing a shared file | `team_file_lock(status)`, `team_file_lock(lock)` |
102
- | After editing | `team_file_lock(unlock)` |
103
- | Starting a unit of work | `team_task(claim)` or `team_task(create)` + `team_task(claim)` |
104
- | Finishing a unit of work | `team_task(complete)` |
105
- | Need to coordinate | `team_message(send)` or `team_message(broadcast)` |
106
- | Session end | `team_file_lock(unlock)` (all), `team_manage(leave)` |
101
+ | Before editing a shared file | `team_file_lock(status)`, `team_file_lock(lock)` |
102
+ | After editing | `team_file_lock(unlock)` |
103
+ | Starting a unit of work | `team_task(claim)` or `team_task(create)` + `team_task(claim)` |
104
+ | Finishing a unit of work | `team_task(complete)` |
105
+ | Need to coordinate | `team_message(send)` or `team_message(broadcast)` |
106
+ | Session end | `team_file_lock(unlock)` (all), `team_manage(leave)` |