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,107 +1,107 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auto-Relation Creator
|
|
3
|
-
*
|
|
4
|
-
* Automatically creates Knowledge Graph relations from entity extraction.
|
|
5
|
-
* Inspired by mcp-memory-service's typed relationships and MemCP's MAGMA 4-graph.
|
|
6
|
-
*
|
|
7
|
-
* When an observation is stored:
|
|
8
|
-
* 1. Extract entities from narrative (files, modules, CamelCase)
|
|
9
|
-
* 2. Find matching existing entities in the graph
|
|
10
|
-
* 3. Auto-create relations: "references", "modifies", or "causes" (if causal)
|
|
11
|
-
*
|
|
12
|
-
* This is "implicit memory" — the agent doesn't need to call create_relations.
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import type { Observation, Relation } from '../types.js';
|
|
16
|
-
import type { KnowledgeGraphManager } from './graph.js';
|
|
17
|
-
import type { ExtractedEntities } from './entity-extractor.js';
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Infer relation type based on observation type and causal language.
|
|
21
|
-
*/
|
|
22
|
-
function inferRelationType(obs: Observation): string {
|
|
23
|
-
if (obs.hasCausalLanguage) return 'causes';
|
|
24
|
-
|
|
25
|
-
switch (obs.type) {
|
|
26
|
-
case 'problem-solution':
|
|
27
|
-
return 'fixes';
|
|
28
|
-
case 'decision':
|
|
29
|
-
case 'trade-off':
|
|
30
|
-
return 'decides';
|
|
31
|
-
case 'what-changed':
|
|
32
|
-
return 'modifies';
|
|
33
|
-
case 'gotcha':
|
|
34
|
-
return 'warns_about';
|
|
35
|
-
default:
|
|
36
|
-
return 'references';
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Auto-create relations from a stored observation.
|
|
42
|
-
*
|
|
43
|
-
* Scans the knowledge graph for entities matching extracted file names,
|
|
44
|
-
* modules, and identifiers, then creates typed relations.
|
|
45
|
-
*
|
|
46
|
-
* Returns the number of relations created.
|
|
47
|
-
*/
|
|
48
|
-
export async function createAutoRelations(
|
|
49
|
-
obs: Observation,
|
|
50
|
-
extracted: ExtractedEntities,
|
|
51
|
-
graphManager: KnowledgeGraphManager,
|
|
52
|
-
): Promise<number> {
|
|
53
|
-
const relationType = inferRelationType(obs);
|
|
54
|
-
const relations: Relation[] = [];
|
|
55
|
-
|
|
56
|
-
// Skip self-references
|
|
57
|
-
const selfName = obs.entityName.toLowerCase();
|
|
58
|
-
|
|
59
|
-
// Check extracted identifiers against existing entities (O(1) lookups via index)
|
|
60
|
-
const candidates = [
|
|
61
|
-
...extracted.identifiers,
|
|
62
|
-
...extracted.files.map((f) => f.split('/').pop()?.replace(/\.\w+$/, '') ?? ''),
|
|
63
|
-
...extracted.modules.map((m) => m.split(/[./]/).pop() ?? ''),
|
|
64
|
-
].filter((c) => c.length >= 3);
|
|
65
|
-
|
|
66
|
-
for (const candidate of candidates) {
|
|
67
|
-
const lower = candidate.toLowerCase();
|
|
68
|
-
if (lower === selfName) continue;
|
|
69
|
-
|
|
70
|
-
const matchedEntity = graphManager.findEntityByName(candidate);
|
|
71
|
-
if (matchedEntity) {
|
|
72
|
-
relations.push({
|
|
73
|
-
from: obs.entityName,
|
|
74
|
-
to: matchedEntity.name,
|
|
75
|
-
relationType,
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Also create relations from explicit filesModified → existing entities
|
|
81
|
-
for (const file of obs.filesModified) {
|
|
82
|
-
const basename = file.split('/').pop()?.replace(/\.\w+$/, '') ?? '';
|
|
83
|
-
if (basename.length < 3 || basename.toLowerCase() === selfName) continue;
|
|
84
|
-
|
|
85
|
-
const matchedEntity = graphManager.findEntityByName(basename);
|
|
86
|
-
if (matchedEntity) {
|
|
87
|
-
relations.push({
|
|
88
|
-
from: obs.entityName,
|
|
89
|
-
to: matchedEntity.name,
|
|
90
|
-
relationType: 'modifies',
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
if (relations.length === 0) return 0;
|
|
96
|
-
|
|
97
|
-
// Deduplicate
|
|
98
|
-
const unique = relations.filter(
|
|
99
|
-
(r, i, arr) =>
|
|
100
|
-
arr.findIndex(
|
|
101
|
-
(o) => o.from === r.from && o.to === r.to && o.relationType === r.relationType,
|
|
102
|
-
) === i,
|
|
103
|
-
);
|
|
104
|
-
|
|
105
|
-
const created = await graphManager.createRelations(unique);
|
|
106
|
-
return created.length;
|
|
107
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Auto-Relation Creator
|
|
3
|
+
*
|
|
4
|
+
* Automatically creates Knowledge Graph relations from entity extraction.
|
|
5
|
+
* Inspired by mcp-memory-service's typed relationships and MemCP's MAGMA 4-graph.
|
|
6
|
+
*
|
|
7
|
+
* When an observation is stored:
|
|
8
|
+
* 1. Extract entities from narrative (files, modules, CamelCase)
|
|
9
|
+
* 2. Find matching existing entities in the graph
|
|
10
|
+
* 3. Auto-create relations: "references", "modifies", or "causes" (if causal)
|
|
11
|
+
*
|
|
12
|
+
* This is "implicit memory" — the agent doesn't need to call create_relations.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import type { Observation, Relation } from '../types.js';
|
|
16
|
+
import type { KnowledgeGraphManager } from './graph.js';
|
|
17
|
+
import type { ExtractedEntities } from './entity-extractor.js';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Infer relation type based on observation type and causal language.
|
|
21
|
+
*/
|
|
22
|
+
function inferRelationType(obs: Observation): string {
|
|
23
|
+
if (obs.hasCausalLanguage) return 'causes';
|
|
24
|
+
|
|
25
|
+
switch (obs.type) {
|
|
26
|
+
case 'problem-solution':
|
|
27
|
+
return 'fixes';
|
|
28
|
+
case 'decision':
|
|
29
|
+
case 'trade-off':
|
|
30
|
+
return 'decides';
|
|
31
|
+
case 'what-changed':
|
|
32
|
+
return 'modifies';
|
|
33
|
+
case 'gotcha':
|
|
34
|
+
return 'warns_about';
|
|
35
|
+
default:
|
|
36
|
+
return 'references';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Auto-create relations from a stored observation.
|
|
42
|
+
*
|
|
43
|
+
* Scans the knowledge graph for entities matching extracted file names,
|
|
44
|
+
* modules, and identifiers, then creates typed relations.
|
|
45
|
+
*
|
|
46
|
+
* Returns the number of relations created.
|
|
47
|
+
*/
|
|
48
|
+
export async function createAutoRelations(
|
|
49
|
+
obs: Observation,
|
|
50
|
+
extracted: ExtractedEntities,
|
|
51
|
+
graphManager: KnowledgeGraphManager,
|
|
52
|
+
): Promise<number> {
|
|
53
|
+
const relationType = inferRelationType(obs);
|
|
54
|
+
const relations: Relation[] = [];
|
|
55
|
+
|
|
56
|
+
// Skip self-references
|
|
57
|
+
const selfName = obs.entityName.toLowerCase();
|
|
58
|
+
|
|
59
|
+
// Check extracted identifiers against existing entities (O(1) lookups via index)
|
|
60
|
+
const candidates = [
|
|
61
|
+
...extracted.identifiers,
|
|
62
|
+
...extracted.files.map((f) => f.split('/').pop()?.replace(/\.\w+$/, '') ?? ''),
|
|
63
|
+
...extracted.modules.map((m) => m.split(/[./]/).pop() ?? ''),
|
|
64
|
+
].filter((c) => c.length >= 3);
|
|
65
|
+
|
|
66
|
+
for (const candidate of candidates) {
|
|
67
|
+
const lower = candidate.toLowerCase();
|
|
68
|
+
if (lower === selfName) continue;
|
|
69
|
+
|
|
70
|
+
const matchedEntity = graphManager.findEntityByName(candidate);
|
|
71
|
+
if (matchedEntity) {
|
|
72
|
+
relations.push({
|
|
73
|
+
from: obs.entityName,
|
|
74
|
+
to: matchedEntity.name,
|
|
75
|
+
relationType,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Also create relations from explicit filesModified → existing entities
|
|
81
|
+
for (const file of obs.filesModified) {
|
|
82
|
+
const basename = file.split('/').pop()?.replace(/\.\w+$/, '') ?? '';
|
|
83
|
+
if (basename.length < 3 || basename.toLowerCase() === selfName) continue;
|
|
84
|
+
|
|
85
|
+
const matchedEntity = graphManager.findEntityByName(basename);
|
|
86
|
+
if (matchedEntity) {
|
|
87
|
+
relations.push({
|
|
88
|
+
from: obs.entityName,
|
|
89
|
+
to: matchedEntity.name,
|
|
90
|
+
relationType: 'modifies',
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (relations.length === 0) return 0;
|
|
96
|
+
|
|
97
|
+
// Deduplicate
|
|
98
|
+
const unique = relations.filter(
|
|
99
|
+
(r, i, arr) =>
|
|
100
|
+
arr.findIndex(
|
|
101
|
+
(o) => o.from === r.from && o.to === r.to && o.relationType === r.relationType,
|
|
102
|
+
) === i,
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
const created = await graphManager.createRelations(unique);
|
|
106
|
+
return created.length;
|
|
107
|
+
}
|