memorix 1.1.7 → 1.1.8
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.
- package/CHANGELOG.md +13 -0
- package/CLAUDE.md +6 -1
- package/README.md +21 -0
- package/README.zh-CN.md +21 -0
- package/TEAM.md +86 -86
- package/dist/cli/index.js +730 -150
- package/dist/cli/index.js.map +1 -1
- package/dist/dashboard/static/index.html +201 -201
- package/dist/dashboard/static/style.css +3584 -3584
- package/dist/index.js +15 -8
- package/dist/index.js.map +1 -1
- package/dist/memcode-runtime/CHANGELOG.md +13 -0
- package/dist/memcode-runtime/package.json +4 -4
- package/dist/sdk.js +15 -8
- package/dist/sdk.js.map +1 -1
- package/docs/AGENT_OPERATOR_PLAYBOOK.md +18 -0
- package/docs/DESIGN_DECISIONS.md +357 -357
- package/docs/SETUP.md +10 -0
- package/docs/dev-log/progress.txt +35 -26
- package/package.json +1 -1
- package/src/audit/index.ts +156 -156
- package/src/cli/commands/agent-integrations.ts +623 -0
- package/src/cli/commands/audit-list.ts +89 -89
- package/src/cli/commands/background.ts +659 -659
- package/src/cli/commands/cleanup.ts +255 -255
- package/src/cli/commands/doctor.ts +23 -0
- package/src/cli/commands/formation.ts +48 -48
- package/src/cli/commands/git-hook-install.ts +111 -111
- package/src/cli/commands/handoff.ts +66 -66
- package/src/cli/commands/hooks-status.ts +63 -63
- package/src/cli/commands/ingest-commit.ts +153 -153
- package/src/cli/commands/ingest-image.ts +73 -73
- package/src/cli/commands/ingest-log.ts +180 -180
- package/src/cli/commands/ingest.ts +44 -44
- package/src/cli/commands/integrate-shared.ts +15 -15
- package/src/cli/commands/lock.ts +96 -96
- package/src/cli/commands/message.ts +121 -121
- package/src/cli/commands/poll.ts +70 -70
- package/src/cli/commands/purge-all-memory.ts +85 -85
- package/src/cli/commands/purge-project-memory.ts +83 -83
- package/src/cli/commands/reasoning.ts +132 -132
- package/src/cli/commands/repair.ts +60 -0
- package/src/cli/commands/retention.ts +108 -108
- package/src/cli/commands/serve-shared.ts +118 -118
- package/src/cli/commands/setup.ts +3 -3
- package/src/cli/commands/skills.ts +123 -123
- package/src/cli/commands/task.ts +192 -192
- package/src/cli/commands/transfer.ts +73 -73
- package/src/cli/commands/uninstall-project-artifacts.ts +85 -85
- package/src/cli/index.ts +3 -1
- package/src/cli/tui/ChatView.tsx +234 -234
- package/src/cli/tui/CommandBar.tsx +312 -312
- package/src/cli/tui/ContextRail.tsx +118 -118
- package/src/cli/tui/HeaderBar.tsx +72 -72
- package/src/cli/tui/LogoBanner.tsx +51 -51
- package/src/cli/tui/Panels.tsx +632 -632
- package/src/cli/tui/Sidebar.tsx +179 -179
- package/src/cli/tui/chat-service.ts +742 -742
- package/src/cli/tui/data.ts +547 -547
- package/src/cli/tui/index.ts +41 -41
- package/src/cli/tui/markdown-render.tsx +371 -371
- package/src/cli/tui/theme.ts +178 -178
- package/src/cli/tui/use-mouse.ts +157 -157
- package/src/cli/tui/useNavigation.ts +56 -56
- package/src/cli/update-checker.ts +211 -211
- package/src/cli/version.ts +7 -7
- package/src/cli/workbench.ts +1 -1
- package/src/codegraph/context-pack.ts +5 -1
- package/src/codegraph/lite-provider.ts +5 -1
- package/src/codegraph/project-context.ts +5 -1
- package/src/compact/token-budget.ts +74 -74
- package/src/config/behavior.ts +59 -59
- package/src/dashboard/project-classification.ts +64 -64
- package/src/dashboard/static/index.html +201 -201
- package/src/dashboard/static/style.css +3584 -3584
- package/src/embedding/fastembed-provider.ts +142 -142
- package/src/embedding/transformers-provider.ts +111 -111
- package/src/git/extractor.ts +209 -209
- package/src/git/hooks-path.ts +85 -85
- package/src/git/noise-filter.ts +210 -210
- package/src/hooks/installers/index.ts +4 -4
- package/src/hooks/official-skills.ts +1 -1
- package/src/hooks/pattern-detector.ts +173 -173
- package/src/hooks/rules/memorix-agent-rules.md +2 -2
- package/src/hooks/significance-filter.ts +250 -250
- package/src/llm/memory-manager.ts +328 -328
- package/src/llm/provider.ts +885 -885
- package/src/llm/quality.ts +248 -248
- package/src/memory/attribution-guard.ts +249 -249
- package/src/memory/auto-relations.ts +107 -107
- package/src/memory/consolidation.ts +302 -302
- package/src/memory/disclosure-policy.ts +141 -141
- package/src/memory/entity-extractor.ts +197 -197
- package/src/memory/formation/evaluate.ts +217 -217
- package/src/memory/formation/extract.ts +361 -361
- package/src/memory/formation/index.ts +417 -417
- package/src/memory/formation/resolve.ts +344 -344
- package/src/memory/formation/types.ts +315 -315
- package/src/memory/freshness.ts +122 -122
- package/src/memory/graph.ts +197 -197
- package/src/memory/refs.ts +94 -94
- package/src/memory/retention.ts +433 -433
- package/src/memory/secret-filter.ts +79 -79
- package/src/memory/session.ts +523 -523
- package/src/multimodal/image-loader.ts +143 -143
- package/src/orchestrate/adapters/claude-stream.ts +192 -192
- package/src/orchestrate/adapters/claude.ts +111 -111
- package/src/orchestrate/adapters/codex-stream.ts +134 -134
- package/src/orchestrate/adapters/codex.ts +41 -41
- package/src/orchestrate/adapters/gemini-stream.ts +166 -166
- package/src/orchestrate/adapters/gemini.ts +42 -42
- package/src/orchestrate/adapters/index.ts +73 -73
- package/src/orchestrate/adapters/opencode-stream.ts +143 -143
- package/src/orchestrate/adapters/opencode.ts +47 -47
- package/src/orchestrate/adapters/spawn-helper.ts +286 -286
- package/src/orchestrate/adapters/types.ts +77 -77
- package/src/orchestrate/capability-router.ts +284 -284
- package/src/orchestrate/context-compact.ts +188 -188
- package/src/orchestrate/cost-tracker.ts +219 -219
- package/src/orchestrate/error-recovery.ts +191 -191
- package/src/orchestrate/evidence.ts +140 -140
- package/src/orchestrate/ledger.ts +110 -110
- package/src/orchestrate/memorix-bridge.ts +380 -380
- package/src/orchestrate/output-budget.ts +80 -80
- package/src/orchestrate/permission.ts +152 -152
- package/src/orchestrate/pipeline-trace.ts +131 -131
- package/src/orchestrate/prompt-builder.ts +155 -155
- package/src/orchestrate/ring-buffer.ts +37 -37
- package/src/orchestrate/task-graph.ts +389 -389
- package/src/orchestrate/verify-gate.ts +219 -219
- package/src/orchestrate/worktree.ts +232 -232
- package/src/project/aliases.ts +374 -374
- package/src/project/detector.ts +268 -268
- package/src/rules/adapters/claude-code.ts +99 -99
- package/src/rules/adapters/codex.ts +97 -97
- package/src/rules/adapters/copilot.ts +124 -124
- package/src/rules/adapters/cursor.ts +114 -114
- package/src/rules/adapters/kiro.ts +126 -126
- package/src/rules/adapters/trae.ts +56 -56
- package/src/rules/adapters/windsurf.ts +83 -83
- package/src/rules/syncer.ts +235 -235
- package/src/sdk.ts +327 -327
- package/src/search/intent-detector.ts +289 -289
- package/src/search/query-expansion.ts +52 -52
- package/src/server/formation-timeout.ts +27 -27
- package/src/skills/mini-skills.ts +386 -386
- package/src/store/chat-store.ts +119 -119
- package/src/store/file-lock.ts +100 -100
- package/src/store/graph-store.ts +249 -249
- package/src/store/mini-skill-store.ts +349 -349
- package/src/store/obs-store.ts +255 -255
- package/src/store/persistence-json.ts +212 -212
- package/src/store/persistence.ts +291 -291
- package/src/store/project-affinity.ts +195 -195
- package/src/store/session-store.ts +259 -259
- package/src/store/sqlite-store.ts +339 -339
- package/src/team/event-bus.ts +76 -76
- package/src/team/file-locks.ts +173 -173
- package/src/team/handoff.ts +167 -167
- package/src/team/messages.ts +203 -203
- package/src/team/poll.ts +132 -132
- package/src/team/tasks.ts +211 -211
- package/src/wiki/generator.ts +237 -237
- package/src/wiki/knowledge-graph.ts +334 -334
- package/src/wiki/types.ts +85 -85
- package/src/workspace/mcp-adapters/codex.ts +191 -191
- package/src/workspace/mcp-adapters/copilot.ts +105 -105
- package/src/workspace/mcp-adapters/cursor.ts +53 -53
- package/src/workspace/mcp-adapters/kiro.ts +64 -64
- package/src/workspace/mcp-adapters/opencode.ts +123 -123
- package/src/workspace/mcp-adapters/trae.ts +134 -134
- package/src/workspace/mcp-adapters/windsurf.ts +91 -91
- package/src/workspace/sanitizer.ts +60 -60
- package/src/workspace/workflow-sync.ts +131 -131
|
@@ -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
|
+
}
|