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.
- package/CHANGELOG.md +27 -0
- package/README.md +3 -3
- package/README.zh-CN.md +3 -3
- package/TEAM.md +86 -86
- package/dist/cli/index.js +5199 -4726
- package/dist/cli/index.js.map +1 -1
- package/dist/index.js +428 -49
- package/dist/index.js.map +1 -1
- package/dist/maintenance-runner.js +97 -18
- package/dist/maintenance-runner.js.map +1 -1
- package/dist/memcode-runtime/CHANGELOG.md +27 -0
- package/dist/sdk.js +428 -49
- package/dist/sdk.js.map +1 -1
- package/docs/1.2.4-PERSISTENT-MEMORY-DELIVERY.md +86 -0
- package/docs/AGENT_OPERATOR_PLAYBOOK.md +13 -1
- package/docs/API_REFERENCE.md +13 -3
- package/docs/DESIGN_DECISIONS.md +357 -357
- package/docs/dev-log/progress.txt +60 -9
- package/package.json +1 -1
- package/plugins/codex/memorix/.codex-plugin/plugin.json +1 -1
- package/src/audit/index.ts +156 -156
- package/src/cli/capability-map.ts +1 -1
- package/src/cli/command-guide.ts +4 -1
- package/src/cli/commands/agent-integrations.ts +5 -1
- package/src/cli/commands/audit-list.ts +89 -89
- package/src/cli/commands/background.ts +659 -659
- package/src/cli/commands/codegraph.ts +1 -1
- package/src/cli/commands/context.ts +9 -1
- package/src/cli/commands/formation.ts +48 -48
- package/src/cli/commands/git-hook-install.ts +111 -111
- package/src/cli/commands/handoff.ts +54 -54
- 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 +66 -66
- 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 +82 -82
- package/src/cli/commands/message.ts +104 -104
- package/src/cli/commands/poll.ts +58 -58
- 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 +118 -118
- package/src/cli/commands/resume.ts +31 -0
- package/src/cli/commands/serve-shared.ts +118 -118
- package/src/cli/commands/session.ts +15 -7
- package/src/cli/commands/skills.ts +114 -114
- package/src/cli/commands/task.ts +167 -167
- package/src/cli/commands/transfer.ts +47 -47
- 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/Sidebar.tsx +179 -179
- package/src/cli/tui/index.ts +41 -41
- package/src/cli/tui/markdown-render.tsx +371 -371
- package/src/cli/tui/session-service.ts +3 -2
- 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/auto-context.ts +54 -1
- package/src/codegraph/task-lens.ts +29 -0
- package/src/compact/token-budget.ts +89 -74
- package/src/config/toml-loader.ts +9 -5
- package/src/dashboard/project-classification.ts +64 -64
- 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/hooks/handler.ts +127 -66
- package/src/hooks/installers/index.ts +5 -4
- package/src/hooks/official-skills.ts +6 -4
- package/src/hooks/pattern-detector.ts +173 -173
- package/src/hooks/rules/memorix-agent-rules.md +9 -7
- package/src/hooks/significance-filter.ts +250 -250
- package/src/knowledge/context-assembly.ts +4 -1
- package/src/knowledge/workset.ts +89 -1
- 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/disclosure-policy.ts +135 -135
- 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/secret-filter.ts +79 -79
- package/src/memory/session.ts +158 -9
- 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 +343 -343
- 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/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 +299 -299
- 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/server.ts +144 -10
- package/src/skills/mini-skills.ts +386 -386
- package/src/store/bun-sqlite-compat.ts +118 -15
- package/src/store/chat-store.ts +119 -119
- package/src/store/graph-store.ts +249 -249
- package/src/store/mini-skill-store.ts +349 -349
- 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/sqlite-db.ts +3 -3
- package/src/team/event-bus.ts +76 -76
- package/src/team/file-locks.ts +173 -173
- package/src/team/handoff.ts +161 -161
- package/src/team/messages.ts +203 -203
- package/src/team/poll.ts +132 -132
- package/src/team/tasks.ts +211 -211
- 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
package/src/knowledge/workset.ts
CHANGED
|
@@ -77,11 +77,28 @@ export interface WorksetMemorySource {
|
|
|
77
77
|
reason?: string;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
+
/** Prior-work evidence selected only for an explicit or inferred continuation. */
|
|
81
|
+
export interface WorksetContinuation {
|
|
82
|
+
previousSession?: {
|
|
83
|
+
id: string;
|
|
84
|
+
agent?: string;
|
|
85
|
+
endedAt?: string;
|
|
86
|
+
summary: string;
|
|
87
|
+
};
|
|
88
|
+
memories: Array<{
|
|
89
|
+
id: number;
|
|
90
|
+
title: string;
|
|
91
|
+
type: string;
|
|
92
|
+
detail?: string;
|
|
93
|
+
}>;
|
|
94
|
+
}
|
|
95
|
+
|
|
80
96
|
export interface TaskWorkset {
|
|
81
97
|
version: '1.2';
|
|
82
98
|
task: string;
|
|
83
99
|
lens: string;
|
|
84
100
|
currentFacts: string[];
|
|
101
|
+
continuation?: WorksetContinuation;
|
|
85
102
|
codeState?: string;
|
|
86
103
|
startHere: string[];
|
|
87
104
|
/** Bounded task-specific relations from a validated local semantic graph. */
|
|
@@ -117,6 +134,7 @@ export interface BuildTaskWorksetInput {
|
|
|
117
134
|
task?: string;
|
|
118
135
|
lens: string;
|
|
119
136
|
currentFacts?: string[];
|
|
137
|
+
continuation?: WorksetContinuation;
|
|
120
138
|
codeState?: string;
|
|
121
139
|
startHere: string[];
|
|
122
140
|
semanticCode?: ExternalCodeGraphOutline;
|
|
@@ -151,6 +169,11 @@ function short(text: string, budget = 28): string {
|
|
|
151
169
|
return countTextTokens(safe) <= budget ? safe : truncateToTokenBudget(safe, budget);
|
|
152
170
|
}
|
|
153
171
|
|
|
172
|
+
// A continuation anchor often contains the exact flag, path, or command that
|
|
173
|
+
// makes the handoff actionable. Preserve a little more of it than generic
|
|
174
|
+
// display detail; the enclosing Workset budget still decides whether it fits.
|
|
175
|
+
const CONTINUATION_DETAIL_TOKEN_BUDGET = 20;
|
|
176
|
+
|
|
154
177
|
function claimAssertion(claim: KnowledgeClaim): string {
|
|
155
178
|
return short([claim.subject, claim.predicate, claim.objectValue].join(' '));
|
|
156
179
|
}
|
|
@@ -259,6 +282,7 @@ function freshnessForMemory(status: WorksetMemorySource['status']): ContextCandi
|
|
|
259
282
|
}
|
|
260
283
|
|
|
261
284
|
function receiptOmissionKind(raw: string): ContextCandidateKind | undefined {
|
|
285
|
+
if (raw.includes('continuation')) return 'continuation';
|
|
262
286
|
if (raw.includes('task')) return 'task';
|
|
263
287
|
if (raw.includes('fact')) return 'current-fact';
|
|
264
288
|
if (raw.includes('state')) return 'code-state';
|
|
@@ -328,6 +352,51 @@ export function renderTaskWorksetPrompt(input: Omit<TaskWorkset, 'prompt' | 'bud
|
|
|
328
352
|
});
|
|
329
353
|
appendLine(lines, 'Task lens: ' + input.lens, maxTokens, omitted, 'lens');
|
|
330
354
|
|
|
355
|
+
const hasContinuation = Boolean(
|
|
356
|
+
input.continuation?.previousSession || (input.continuation?.memories.length ?? 0) > 0,
|
|
357
|
+
);
|
|
358
|
+
if (hasContinuation && input.continuation) {
|
|
359
|
+
appendLine(lines, '', maxTokens, omitted, 'continuation-heading');
|
|
360
|
+
appendLine(lines, 'Resume from prior work', maxTokens, omitted, 'continuation-heading');
|
|
361
|
+
if (input.continuation.previousSession) {
|
|
362
|
+
const session = input.continuation.previousSession;
|
|
363
|
+
const source = [session.agent, session.endedAt ? session.endedAt.slice(0, 10) : undefined]
|
|
364
|
+
.filter(Boolean)
|
|
365
|
+
.join(', ');
|
|
366
|
+
appendLine(
|
|
367
|
+
lines,
|
|
368
|
+
'- Previous session' + (source ? ` (${source})` : '') + ': ' + short(session.summary, 44),
|
|
369
|
+
maxTokens,
|
|
370
|
+
omitted,
|
|
371
|
+
'continuation-session',
|
|
372
|
+
selected,
|
|
373
|
+
{
|
|
374
|
+
kind: 'continuation',
|
|
375
|
+
id: 'session:' + session.id,
|
|
376
|
+
reason: 'latest meaningful project session summary',
|
|
377
|
+
trust: 'historical',
|
|
378
|
+
},
|
|
379
|
+
);
|
|
380
|
+
}
|
|
381
|
+
for (const memory of input.continuation.memories.slice(0, 3)) {
|
|
382
|
+
const detail = memory.detail ? ': ' + short(memory.detail, CONTINUATION_DETAIL_TOKEN_BUDGET) : '';
|
|
383
|
+
appendLine(
|
|
384
|
+
lines,
|
|
385
|
+
'- #' + memory.id + ' ' + memory.type + ': ' + short(memory.title, 18) + detail,
|
|
386
|
+
maxTokens,
|
|
387
|
+
omitted,
|
|
388
|
+
'continuation-memory',
|
|
389
|
+
selected,
|
|
390
|
+
{
|
|
391
|
+
kind: 'continuation',
|
|
392
|
+
id: 'memory:' + memory.id,
|
|
393
|
+
reason: 'durable prior-work memory',
|
|
394
|
+
trust: 'historical',
|
|
395
|
+
},
|
|
396
|
+
);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
331
400
|
if (input.cautions.length > 0 || input.cautionMemory.length > 0) {
|
|
332
401
|
appendLine(lines, '', maxTokens, omitted, 'caution-heading');
|
|
333
402
|
appendLine(lines, 'Cautions', maxTokens, omitted, 'caution-heading');
|
|
@@ -629,6 +698,24 @@ export async function buildTaskWorkset(input: BuildTaskWorksetInput): Promise<Ta
|
|
|
629
698
|
const normalizedCautions = unique(cautions.map(caution => caution.kind))
|
|
630
699
|
.map(kind => cautions.find(caution => caution.kind === kind)!)
|
|
631
700
|
.slice(0, 6);
|
|
701
|
+
const continuation = input.continuation
|
|
702
|
+
&& (input.continuation.previousSession || input.continuation.memories.length > 0)
|
|
703
|
+
? {
|
|
704
|
+
...(input.continuation.previousSession
|
|
705
|
+
? {
|
|
706
|
+
previousSession: {
|
|
707
|
+
...input.continuation.previousSession,
|
|
708
|
+
summary: short(input.continuation.previousSession.summary, 52),
|
|
709
|
+
},
|
|
710
|
+
}
|
|
711
|
+
: {}),
|
|
712
|
+
memories: input.continuation.memories.slice(0, 3).map((memory) => ({
|
|
713
|
+
...memory,
|
|
714
|
+
title: short(memory.title, 20),
|
|
715
|
+
...(memory.detail ? { detail: short(memory.detail, CONTINUATION_DETAIL_TOKEN_BUDGET) } : {}),
|
|
716
|
+
})),
|
|
717
|
+
}
|
|
718
|
+
: undefined;
|
|
632
719
|
const base = {
|
|
633
720
|
version: '1.2' as const,
|
|
634
721
|
task,
|
|
@@ -636,6 +723,7 @@ export async function buildTaskWorkset(input: BuildTaskWorksetInput): Promise<Ta
|
|
|
636
723
|
currentFacts: input.currentFacts?.map(fact => fact.startsWith('Historical note:')
|
|
637
724
|
? short(fact, 48)
|
|
638
725
|
: short(fact, 28)).slice(0, 4) ?? [],
|
|
726
|
+
...(continuation ? { continuation } : {}),
|
|
639
727
|
...(input.codeState ? { codeState: short(input.codeState, 28) } : {}),
|
|
640
728
|
startHere: unique(input.startHere).slice(0, 5),
|
|
641
729
|
...(input.semanticCode ? { semanticCode: input.semanticCode } : {}),
|
|
@@ -660,7 +748,7 @@ export async function buildTaskWorkset(input: BuildTaskWorksetInput): Promise<Ta
|
|
|
660
748
|
budget: { maxTokens },
|
|
661
749
|
});
|
|
662
750
|
const receipt: ContextReceipt = {
|
|
663
|
-
version: '1.2.
|
|
751
|
+
version: '1.2.4',
|
|
664
752
|
target: input.deliveryTarget ?? 'project-context',
|
|
665
753
|
elapsedMs: Math.max(0, Date.now() - startedAt),
|
|
666
754
|
budget: {
|