memorix 1.6.0 → 1.6.1

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 (119) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/TEAM.md +86 -86
  3. package/dist/cli/index.js +317 -62
  4. package/dist/cli/memcode.js +12 -1
  5. package/dist/index.js +56 -9
  6. package/dist/maintenance-runner.js +54 -7
  7. package/dist/media-audio-runner.js +54 -7
  8. package/dist/media-video-runner.js +54 -7
  9. package/dist/memcode-runtime/CHANGELOG.md +24 -0
  10. package/dist/sdk.js +55 -8
  11. package/dist/vector-backfill-runner.js +54 -7
  12. package/docs/AGENT_OPERATOR_PLAYBOOK.md +11 -3
  13. package/docs/API_REFERENCE.md +1 -1
  14. package/docs/DESIGN_DECISIONS.md +357 -357
  15. package/docs/DOCKER.md +5 -1
  16. package/docs/PERFORMANCE.md +2 -2
  17. package/docs/README.md +3 -1
  18. package/docs/SETUP.md +8 -2
  19. package/package.json +1 -1
  20. package/plugins/claude/memorix/.claude-plugin/plugin.json +1 -1
  21. package/plugins/codebuddy/memorix/.codebuddy-plugin/plugin.json +1 -1
  22. package/plugins/codex/memorix/.codex-plugin/plugin.json +1 -1
  23. package/plugins/copilot/memorix/plugin.json +1 -1
  24. package/plugins/gemini/memorix/gemini-extension.json +1 -1
  25. package/plugins/omp/memorix/package.json +1 -1
  26. package/plugins/openclaw/memorix/.codex-plugin/plugin.json +1 -1
  27. package/plugins/pi/memorix/package.json +1 -1
  28. package/server.json +2 -2
  29. package/src/audit/index.ts +156 -156
  30. package/src/cli/commands/agent-integrations.ts +9 -3
  31. package/src/cli/commands/doctor.ts +46 -15
  32. package/src/cli/commands/formation.ts +48 -48
  33. package/src/cli/commands/git-hook-install.ts +111 -111
  34. package/src/cli/commands/handoff.ts +54 -54
  35. package/src/cli/commands/hook.ts +13 -1
  36. package/src/cli/commands/hooks-status.ts +63 -63
  37. package/src/cli/commands/ingest.ts +44 -44
  38. package/src/cli/commands/integrate-shared.ts +15 -15
  39. package/src/cli/commands/lock.ts +82 -82
  40. package/src/cli/commands/message.ts +104 -104
  41. package/src/cli/commands/poll.ts +58 -58
  42. package/src/cli/commands/reasoning.ts +118 -118
  43. package/src/cli/commands/serve-http.ts +68 -7
  44. package/src/cli/commands/skills.ts +114 -114
  45. package/src/cli/commands/task.ts +167 -167
  46. package/src/cli/commands/transfer.ts +47 -47
  47. package/src/cli/heap.ts +76 -0
  48. package/src/cli/index.ts +406 -406
  49. package/src/cli/invocation.ts +7 -4
  50. package/src/cli/tui/ChatView.tsx +234 -234
  51. package/src/cli/tui/CommandBar.tsx +312 -312
  52. package/src/cli/tui/ContextRail.tsx +118 -118
  53. package/src/cli/tui/HeaderBar.tsx +72 -72
  54. package/src/cli/tui/LogoBanner.tsx +51 -51
  55. package/src/cli/tui/index.ts +41 -41
  56. package/src/cli/version.ts +7 -7
  57. package/src/cli/workbench.ts +1 -1
  58. package/src/dashboard/project-classification.ts +64 -64
  59. package/src/embedding/provider.ts +76 -6
  60. package/src/git/hooks-path.ts +85 -85
  61. package/src/hooks/handler.ts +9 -18
  62. package/src/hooks/lifecycle.ts +173 -0
  63. package/src/hooks/pattern-detector.ts +173 -173
  64. package/src/hooks/significance-filter.ts +250 -250
  65. package/src/llm/memory-manager.ts +328 -328
  66. package/src/llm/quality.ts +248 -248
  67. package/src/memory/attribution-guard.ts +249 -249
  68. package/src/memory/disclosure-policy.ts +135 -135
  69. package/src/memory/entity-extractor.ts +197 -197
  70. package/src/memory/formation/evaluate.ts +217 -217
  71. package/src/memory/freshness.ts +122 -122
  72. package/src/memory/graph.ts +197 -197
  73. package/src/memory/refs.ts +94 -94
  74. package/src/memory/secret-filter.ts +79 -79
  75. package/src/orchestrate/adapters/claude-stream.ts +192 -192
  76. package/src/orchestrate/adapters/claude.ts +111 -111
  77. package/src/orchestrate/adapters/codex-stream.ts +134 -134
  78. package/src/orchestrate/adapters/codex.ts +41 -41
  79. package/src/orchestrate/adapters/gemini-stream.ts +166 -166
  80. package/src/orchestrate/adapters/gemini.ts +42 -42
  81. package/src/orchestrate/adapters/index.ts +73 -73
  82. package/src/orchestrate/adapters/opencode-stream.ts +143 -143
  83. package/src/orchestrate/adapters/opencode.ts +47 -47
  84. package/src/orchestrate/adapters/types.ts +77 -77
  85. package/src/orchestrate/capability-router.ts +284 -284
  86. package/src/orchestrate/cost-tracker.ts +219 -219
  87. package/src/orchestrate/error-recovery.ts +191 -191
  88. package/src/orchestrate/evidence.ts +140 -140
  89. package/src/orchestrate/ledger.ts +110 -110
  90. package/src/orchestrate/memorix-bridge.ts +343 -343
  91. package/src/orchestrate/output-budget.ts +80 -80
  92. package/src/orchestrate/permission.ts +152 -152
  93. package/src/orchestrate/pipeline-trace.ts +131 -131
  94. package/src/orchestrate/prompt-builder.ts +155 -155
  95. package/src/orchestrate/ring-buffer.ts +37 -37
  96. package/src/orchestrate/task-graph.ts +389 -389
  97. package/src/project/aliases.ts +374 -374
  98. package/src/rules/adapters/trae.ts +56 -56
  99. package/src/rules/syncer.ts +235 -235
  100. package/src/search/query-expansion.ts +52 -52
  101. package/src/server/formation-timeout.ts +27 -27
  102. package/src/skills/mini-skills.ts +386 -386
  103. package/src/store/chat-store.ts +119 -119
  104. package/src/store/graph-store.ts +249 -249
  105. package/src/store/mini-skill-store.ts +349 -349
  106. package/src/store/persistence-json.ts +212 -212
  107. package/src/store/persistence.ts +291 -291
  108. package/src/store/project-affinity.ts +195 -195
  109. package/src/team/event-bus.ts +76 -76
  110. package/src/team/handoff.ts +161 -161
  111. package/src/team/poll.ts +132 -132
  112. package/src/workspace/mcp-adapters/codex.ts +191 -191
  113. package/src/workspace/mcp-adapters/copilot.ts +105 -105
  114. package/src/workspace/mcp-adapters/cursor.ts +53 -53
  115. package/src/workspace/mcp-adapters/kiro.ts +64 -64
  116. package/src/workspace/mcp-adapters/opencode.ts +123 -123
  117. package/src/workspace/mcp-adapters/trae.ts +134 -134
  118. package/src/workspace/mcp-adapters/windsurf.ts +91 -91
  119. package/src/workspace/sanitizer.ts +60 -60
@@ -1,119 +1,119 @@
1
- /**
2
- * ChatTranscriptStore — persistence for TUI chat history.
3
- *
4
- * Backed by the shared SQLite database (chat_transcript table).
5
- * Supports multiple threads (thread_id), so /new creates a new thread
6
- * and /resume reloads the most recent one.
7
- */
8
-
9
- import { getDatabase } from './sqlite-db.js';
10
- import type { ChatTranscriptMessage } from '../cli/tui/ChatView.js';
11
-
12
- export interface ChatThreadInfo {
13
- threadId: string;
14
- messageCount: number;
15
- lastActivity: string;
16
- }
17
-
18
- function safeJsonParse(text: string, fallback: any): any {
19
- try { return JSON.parse(text); } catch { return fallback; }
20
- }
21
-
22
- export class ChatTranscriptStore {
23
- private db: any = null;
24
-
25
- async init(dataDir: string): Promise<void> {
26
- this.db = getDatabase(dataDir);
27
- }
28
-
29
- /** Append a message to a thread */
30
- append(projectId: string, threadId: string, message: ChatTranscriptMessage): void {
31
- if (!this.db) return;
32
- const now = new Date().toISOString();
33
- this.db.prepare(`
34
- INSERT INTO chat_transcript (project_id, thread_id, role, content, sources_json, meta_json, error, created_at)
35
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)
36
- `).run(
37
- projectId,
38
- threadId,
39
- message.role,
40
- message.content,
41
- JSON.stringify(message.sources || []),
42
- JSON.stringify(message.meta || {}),
43
- message.error ? 1 : 0,
44
- message.timestamp || now,
45
- );
46
- }
47
-
48
- /** Load all messages for a thread, oldest first */
49
- load(projectId: string, threadId: string): ChatTranscriptMessage[] {
50
- if (!this.db) return [];
51
- const rows = this.db.prepare(`
52
- SELECT role, content, sources_json, meta_json, error, created_at
53
- FROM chat_transcript
54
- WHERE project_id = ? AND thread_id = ?
55
- ORDER BY id ASC
56
- `).all(projectId, threadId);
57
-
58
- return rows.map((row: any) => ({
59
- role: row.role as 'user' | 'assistant',
60
- content: row.content,
61
- sources: safeJsonParse(row.sources_json, []),
62
- meta: safeJsonParse(row.meta_json, {}),
63
- error: row.error === 1,
64
- timestamp: row.created_at,
65
- }));
66
- }
67
-
68
- /** Delete all messages for a thread */
69
- clear(projectId: string, threadId: string): void {
70
- if (!this.db) return;
71
- this.db.prepare(`
72
- DELETE FROM chat_transcript
73
- WHERE project_id = ? AND thread_id = ?
74
- `).run(projectId, threadId);
75
- }
76
-
77
- /** List all threads for a project, most recently active first */
78
- listThreads(projectId: string): ChatThreadInfo[] {
79
- if (!this.db) return [];
80
- const rows = this.db.prepare(`
81
- SELECT thread_id, COUNT(*) as message_count, MAX(created_at) as last_activity
82
- FROM chat_transcript
83
- WHERE project_id = ?
84
- GROUP BY thread_id
85
- ORDER BY last_activity DESC
86
- `).all(projectId);
87
-
88
- return rows.map((row: any) => ({
89
- threadId: row.thread_id,
90
- messageCount: row.message_count,
91
- lastActivity: row.last_activity,
92
- }));
93
- }
94
-
95
- /** Get the most recent thread_id for a project */
96
- getLatestThreadId(projectId: string): string | null {
97
- if (!this.db) return null;
98
- const row = this.db.prepare(`
99
- SELECT thread_id FROM chat_transcript
100
- WHERE project_id = ?
101
- ORDER BY created_at DESC
102
- LIMIT 1
103
- `).get(projectId);
104
- return row?.thread_id ?? null;
105
- }
106
-
107
- /** Generate a new thread ID (timestamp-based) */
108
- newThreadId(): string {
109
- return `t${Date.now().toString(36)}`;
110
- }
111
- }
112
-
113
- // Singleton
114
- let _store: ChatTranscriptStore | null = null;
115
-
116
- export function getChatStore(): ChatTranscriptStore {
117
- if (!_store) _store = new ChatTranscriptStore();
118
- return _store;
119
- }
1
+ /**
2
+ * ChatTranscriptStore — persistence for TUI chat history.
3
+ *
4
+ * Backed by the shared SQLite database (chat_transcript table).
5
+ * Supports multiple threads (thread_id), so /new creates a new thread
6
+ * and /resume reloads the most recent one.
7
+ */
8
+
9
+ import { getDatabase } from './sqlite-db.js';
10
+ import type { ChatTranscriptMessage } from '../cli/tui/ChatView.js';
11
+
12
+ export interface ChatThreadInfo {
13
+ threadId: string;
14
+ messageCount: number;
15
+ lastActivity: string;
16
+ }
17
+
18
+ function safeJsonParse(text: string, fallback: any): any {
19
+ try { return JSON.parse(text); } catch { return fallback; }
20
+ }
21
+
22
+ export class ChatTranscriptStore {
23
+ private db: any = null;
24
+
25
+ async init(dataDir: string): Promise<void> {
26
+ this.db = getDatabase(dataDir);
27
+ }
28
+
29
+ /** Append a message to a thread */
30
+ append(projectId: string, threadId: string, message: ChatTranscriptMessage): void {
31
+ if (!this.db) return;
32
+ const now = new Date().toISOString();
33
+ this.db.prepare(`
34
+ INSERT INTO chat_transcript (project_id, thread_id, role, content, sources_json, meta_json, error, created_at)
35
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
36
+ `).run(
37
+ projectId,
38
+ threadId,
39
+ message.role,
40
+ message.content,
41
+ JSON.stringify(message.sources || []),
42
+ JSON.stringify(message.meta || {}),
43
+ message.error ? 1 : 0,
44
+ message.timestamp || now,
45
+ );
46
+ }
47
+
48
+ /** Load all messages for a thread, oldest first */
49
+ load(projectId: string, threadId: string): ChatTranscriptMessage[] {
50
+ if (!this.db) return [];
51
+ const rows = this.db.prepare(`
52
+ SELECT role, content, sources_json, meta_json, error, created_at
53
+ FROM chat_transcript
54
+ WHERE project_id = ? AND thread_id = ?
55
+ ORDER BY id ASC
56
+ `).all(projectId, threadId);
57
+
58
+ return rows.map((row: any) => ({
59
+ role: row.role as 'user' | 'assistant',
60
+ content: row.content,
61
+ sources: safeJsonParse(row.sources_json, []),
62
+ meta: safeJsonParse(row.meta_json, {}),
63
+ error: row.error === 1,
64
+ timestamp: row.created_at,
65
+ }));
66
+ }
67
+
68
+ /** Delete all messages for a thread */
69
+ clear(projectId: string, threadId: string): void {
70
+ if (!this.db) return;
71
+ this.db.prepare(`
72
+ DELETE FROM chat_transcript
73
+ WHERE project_id = ? AND thread_id = ?
74
+ `).run(projectId, threadId);
75
+ }
76
+
77
+ /** List all threads for a project, most recently active first */
78
+ listThreads(projectId: string): ChatThreadInfo[] {
79
+ if (!this.db) return [];
80
+ const rows = this.db.prepare(`
81
+ SELECT thread_id, COUNT(*) as message_count, MAX(created_at) as last_activity
82
+ FROM chat_transcript
83
+ WHERE project_id = ?
84
+ GROUP BY thread_id
85
+ ORDER BY last_activity DESC
86
+ `).all(projectId);
87
+
88
+ return rows.map((row: any) => ({
89
+ threadId: row.thread_id,
90
+ messageCount: row.message_count,
91
+ lastActivity: row.last_activity,
92
+ }));
93
+ }
94
+
95
+ /** Get the most recent thread_id for a project */
96
+ getLatestThreadId(projectId: string): string | null {
97
+ if (!this.db) return null;
98
+ const row = this.db.prepare(`
99
+ SELECT thread_id FROM chat_transcript
100
+ WHERE project_id = ?
101
+ ORDER BY created_at DESC
102
+ LIMIT 1
103
+ `).get(projectId);
104
+ return row?.thread_id ?? null;
105
+ }
106
+
107
+ /** Generate a new thread ID (timestamp-based) */
108
+ newThreadId(): string {
109
+ return `t${Date.now().toString(36)}`;
110
+ }
111
+ }
112
+
113
+ // Singleton
114
+ let _store: ChatTranscriptStore | null = null;
115
+
116
+ export function getChatStore(): ChatTranscriptStore {
117
+ if (!_store) _store = new ChatTranscriptStore();
118
+ return _store;
119
+ }