memorix 1.6.1 → 1.6.2

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 (113) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/TEAM.md +86 -86
  3. package/dist/cli/index.js +1574 -1063
  4. package/dist/index.js +588 -107
  5. package/dist/maintenance-runner.js +565 -84
  6. package/dist/media-audio-runner.js +565 -84
  7. package/dist/media-video-runner.js +565 -84
  8. package/dist/memcode-runtime/CHANGELOG.md +22 -0
  9. package/dist/sdk.js +621 -111
  10. package/dist/vector-backfill-runner.js +565 -84
  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 +34 -2
  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 +6 -3
  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 +4 -0
  37. package/src/cli/commands/skills.ts +114 -114
  38. package/src/cli/commands/task.ts +167 -167
  39. package/src/cli/commands/transfer.ts +47 -47
  40. package/src/cli/index.ts +406 -406
  41. package/src/cli/tui/ChatView.tsx +234 -234
  42. package/src/cli/tui/CommandBar.tsx +312 -312
  43. package/src/cli/tui/ContextRail.tsx +118 -118
  44. package/src/cli/tui/HeaderBar.tsx +72 -72
  45. package/src/cli/tui/LogoBanner.tsx +51 -51
  46. package/src/cli/tui/index.ts +41 -41
  47. package/src/cli/version.ts +7 -7
  48. package/src/cli/workbench.ts +1 -1
  49. package/src/dashboard/project-classification.ts +64 -64
  50. package/src/embedding/api-provider.ts +503 -27
  51. package/src/embedding/provider.ts +20 -3
  52. package/src/git/hooks-path.ts +85 -85
  53. package/src/hooks/lifecycle.ts +1 -0
  54. package/src/hooks/pattern-detector.ts +173 -173
  55. package/src/hooks/significance-filter.ts +250 -250
  56. package/src/llm/memory-manager.ts +328 -328
  57. package/src/llm/quality.ts +248 -248
  58. package/src/memory/attribution-guard.ts +249 -249
  59. package/src/memory/disclosure-policy.ts +135 -135
  60. package/src/memory/entity-extractor.ts +197 -197
  61. package/src/memory/formation/evaluate.ts +217 -217
  62. package/src/memory/freshness.ts +122 -122
  63. package/src/memory/graph.ts +197 -197
  64. package/src/memory/observations.ts +68 -18
  65. package/src/memory/refs.ts +94 -94
  66. package/src/memory/secret-filter.ts +79 -79
  67. package/src/orchestrate/adapters/claude-stream.ts +192 -192
  68. package/src/orchestrate/adapters/claude.ts +111 -111
  69. package/src/orchestrate/adapters/codex-stream.ts +134 -134
  70. package/src/orchestrate/adapters/codex.ts +41 -41
  71. package/src/orchestrate/adapters/gemini-stream.ts +166 -166
  72. package/src/orchestrate/adapters/gemini.ts +42 -42
  73. package/src/orchestrate/adapters/index.ts +73 -73
  74. package/src/orchestrate/adapters/opencode-stream.ts +143 -143
  75. package/src/orchestrate/adapters/opencode.ts +47 -47
  76. package/src/orchestrate/adapters/types.ts +77 -77
  77. package/src/orchestrate/capability-router.ts +284 -284
  78. package/src/orchestrate/cost-tracker.ts +219 -219
  79. package/src/orchestrate/error-recovery.ts +191 -191
  80. package/src/orchestrate/evidence.ts +140 -140
  81. package/src/orchestrate/ledger.ts +110 -110
  82. package/src/orchestrate/memorix-bridge.ts +343 -343
  83. package/src/orchestrate/output-budget.ts +80 -80
  84. package/src/orchestrate/permission.ts +152 -152
  85. package/src/orchestrate/pipeline-trace.ts +131 -131
  86. package/src/orchestrate/prompt-builder.ts +155 -155
  87. package/src/orchestrate/ring-buffer.ts +37 -37
  88. package/src/orchestrate/task-graph.ts +389 -389
  89. package/src/project/aliases.ts +374 -374
  90. package/src/rules/adapters/trae.ts +56 -56
  91. package/src/rules/syncer.ts +235 -235
  92. package/src/sdk.ts +12 -8
  93. package/src/search/query-expansion.ts +52 -52
  94. package/src/server/formation-timeout.ts +27 -27
  95. package/src/skills/mini-skills.ts +386 -386
  96. package/src/store/chat-store.ts +119 -119
  97. package/src/store/graph-store.ts +249 -249
  98. package/src/store/mini-skill-store.ts +349 -349
  99. package/src/store/orama-store.ts +21 -3
  100. package/src/store/persistence-json.ts +212 -212
  101. package/src/store/persistence.ts +291 -291
  102. package/src/store/project-affinity.ts +195 -195
  103. package/src/team/event-bus.ts +76 -76
  104. package/src/team/handoff.ts +161 -161
  105. package/src/team/poll.ts +132 -132
  106. package/src/workspace/mcp-adapters/codex.ts +191 -191
  107. package/src/workspace/mcp-adapters/copilot.ts +105 -105
  108. package/src/workspace/mcp-adapters/cursor.ts +53 -53
  109. package/src/workspace/mcp-adapters/kiro.ts +64 -64
  110. package/src/workspace/mcp-adapters/opencode.ts +123 -123
  111. package/src/workspace/mcp-adapters/trae.ts +134 -134
  112. package/src/workspace/mcp-adapters/windsurf.ts +91 -91
  113. package/src/workspace/sanitizer.ts +60 -60
@@ -1,110 +1,110 @@
1
- /**
2
- * Shared Ledger — Phase 6d: Pipeline progress tracking.
3
- *
4
- * Maintains a structured record of completed/failed tasks within a pipeline.
5
- * Serialized into prompts so every worker has global context.
6
- * Built-in truncation prevents token bloat (pays D8 debt from day 1).
7
- */
8
-
9
- // ── Types ──────────────────────────────────────────────────────────
10
-
11
- export interface LedgerEntry {
12
- taskId: string;
13
- tempId?: string;
14
- role: string;
15
- agent: string;
16
- status: 'completed' | 'failed';
17
- summary: string;
18
- outputFiles: string[];
19
- durationMs: number;
20
- timestamp: number;
21
- }
22
-
23
- export interface PipelineLedger {
24
- pipelineId: string;
25
- goal: string;
26
- planSummary: string;
27
- totalTasks: number;
28
- entries: LedgerEntry[];
29
- }
30
-
31
- // ── CRUD ───────────────────────────────────────────────────────────
32
-
33
- export function createLedger(
34
- pipelineId: string,
35
- goal: string,
36
- planSummary: string,
37
- totalTasks: number,
38
- ): PipelineLedger {
39
- return { pipelineId, goal, planSummary, totalTasks, entries: [] };
40
- }
41
-
42
- export function appendEntry(ledger: PipelineLedger, entry: LedgerEntry): void {
43
- // Clamp summary to 200 chars
44
- if (entry.summary.length > 200) {
45
- entry.summary = entry.summary.slice(0, 197) + '...';
46
- }
47
- ledger.entries.push(entry);
48
- }
49
-
50
- // ── Serialization ──────────────────────────────────────────────────
51
-
52
- /**
53
- * Serialize ledger into a prompt section.
54
- * Truncates to stay within token budget (rough estimate: 1 token ≈ 4 chars).
55
- */
56
- export function ledgerToPromptSection(
57
- ledger: PipelineLedger,
58
- opts?: { maxChars?: number; taskIndex?: number },
59
- ): string {
60
- const maxChars = opts?.maxChars ?? 3200; // ~800 tokens
61
- const taskIndex = opts?.taskIndex;
62
-
63
- const header = [
64
- `## Pipeline Progress`,
65
- `Goal: ${ledger.goal}`,
66
- `Plan: ${ledger.planSummary}`,
67
- '',
68
- ].join('\n');
69
-
70
- const completedCount = ledger.entries.filter(e => e.status === 'completed').length;
71
- const failedCount = ledger.entries.filter(e => e.status === 'failed').length;
72
- const remaining = ledger.totalTasks - completedCount - failedCount;
73
-
74
- const stats = `Status: ${completedCount} completed, ${failedCount} failed, ${remaining} remaining\n`;
75
-
76
- let entries = ledger.entries;
77
- let entryLines = entries.map(formatEntry);
78
-
79
- // Truncation: keep first (plan context) + last N entries
80
- const overhead = header.length + stats.length + 100;
81
- while (totalChars(entryLines) + overhead > maxChars && entryLines.length > 2) {
82
- // Remove second entry (keep first + tail)
83
- entryLines.splice(1, 1);
84
- }
85
-
86
- // Add truncation notice if we removed entries
87
- if (entryLines.length < entries.length) {
88
- entryLines.splice(1, 0, ` ... (${entries.length - entryLines.length} entries omitted)`);
89
- }
90
-
91
- const position = taskIndex !== undefined
92
- ? `\nYou are task ${taskIndex + 1}/${ledger.totalTasks}. Focus on your role and build on prior work.`
93
- : '';
94
-
95
- return header + stats + '\n' + entryLines.join('\n') + position;
96
- }
97
-
98
- // ── Internals ──────────────────────────────────────────────────────
99
-
100
- function formatEntry(entry: LedgerEntry): string {
101
- const icon = entry.status === 'completed' ? '[OK]' : '[ERROR]';
102
- const files = entry.outputFiles.length > 0
103
- ? ` → ${entry.outputFiles.join(', ')}`
104
- : '';
105
- return `- ${icon} [${entry.role}] (${entry.agent}): ${entry.summary}${files}`;
106
- }
107
-
108
- function totalChars(lines: string[]): number {
109
- return lines.reduce((sum, l) => sum + l.length + 1, 0);
110
- }
1
+ /**
2
+ * Shared Ledger — Phase 6d: Pipeline progress tracking.
3
+ *
4
+ * Maintains a structured record of completed/failed tasks within a pipeline.
5
+ * Serialized into prompts so every worker has global context.
6
+ * Built-in truncation prevents token bloat (pays D8 debt from day 1).
7
+ */
8
+
9
+ // ── Types ──────────────────────────────────────────────────────────
10
+
11
+ export interface LedgerEntry {
12
+ taskId: string;
13
+ tempId?: string;
14
+ role: string;
15
+ agent: string;
16
+ status: 'completed' | 'failed';
17
+ summary: string;
18
+ outputFiles: string[];
19
+ durationMs: number;
20
+ timestamp: number;
21
+ }
22
+
23
+ export interface PipelineLedger {
24
+ pipelineId: string;
25
+ goal: string;
26
+ planSummary: string;
27
+ totalTasks: number;
28
+ entries: LedgerEntry[];
29
+ }
30
+
31
+ // ── CRUD ───────────────────────────────────────────────────────────
32
+
33
+ export function createLedger(
34
+ pipelineId: string,
35
+ goal: string,
36
+ planSummary: string,
37
+ totalTasks: number,
38
+ ): PipelineLedger {
39
+ return { pipelineId, goal, planSummary, totalTasks, entries: [] };
40
+ }
41
+
42
+ export function appendEntry(ledger: PipelineLedger, entry: LedgerEntry): void {
43
+ // Clamp summary to 200 chars
44
+ if (entry.summary.length > 200) {
45
+ entry.summary = entry.summary.slice(0, 197) + '...';
46
+ }
47
+ ledger.entries.push(entry);
48
+ }
49
+
50
+ // ── Serialization ──────────────────────────────────────────────────
51
+
52
+ /**
53
+ * Serialize ledger into a prompt section.
54
+ * Truncates to stay within token budget (rough estimate: 1 token ≈ 4 chars).
55
+ */
56
+ export function ledgerToPromptSection(
57
+ ledger: PipelineLedger,
58
+ opts?: { maxChars?: number; taskIndex?: number },
59
+ ): string {
60
+ const maxChars = opts?.maxChars ?? 3200; // ~800 tokens
61
+ const taskIndex = opts?.taskIndex;
62
+
63
+ const header = [
64
+ `## Pipeline Progress`,
65
+ `Goal: ${ledger.goal}`,
66
+ `Plan: ${ledger.planSummary}`,
67
+ '',
68
+ ].join('\n');
69
+
70
+ const completedCount = ledger.entries.filter(e => e.status === 'completed').length;
71
+ const failedCount = ledger.entries.filter(e => e.status === 'failed').length;
72
+ const remaining = ledger.totalTasks - completedCount - failedCount;
73
+
74
+ const stats = `Status: ${completedCount} completed, ${failedCount} failed, ${remaining} remaining\n`;
75
+
76
+ let entries = ledger.entries;
77
+ let entryLines = entries.map(formatEntry);
78
+
79
+ // Truncation: keep first (plan context) + last N entries
80
+ const overhead = header.length + stats.length + 100;
81
+ while (totalChars(entryLines) + overhead > maxChars && entryLines.length > 2) {
82
+ // Remove second entry (keep first + tail)
83
+ entryLines.splice(1, 1);
84
+ }
85
+
86
+ // Add truncation notice if we removed entries
87
+ if (entryLines.length < entries.length) {
88
+ entryLines.splice(1, 0, ` ... (${entries.length - entryLines.length} entries omitted)`);
89
+ }
90
+
91
+ const position = taskIndex !== undefined
92
+ ? `\nYou are task ${taskIndex + 1}/${ledger.totalTasks}. Focus on your role and build on prior work.`
93
+ : '';
94
+
95
+ return header + stats + '\n' + entryLines.join('\n') + position;
96
+ }
97
+
98
+ // ── Internals ──────────────────────────────────────────────────────
99
+
100
+ function formatEntry(entry: LedgerEntry): string {
101
+ const icon = entry.status === 'completed' ? '[OK]' : '[ERROR]';
102
+ const files = entry.outputFiles.length > 0
103
+ ? ` → ${entry.outputFiles.join(', ')}`
104
+ : '';
105
+ return `- ${icon} [${entry.role}] (${entry.agent}): ${entry.summary}${files}`;
106
+ }
107
+
108
+ function totalChars(lines: string[]): number {
109
+ return lines.reduce((sum, l) => sum + l.length + 1, 0);
110
+ }