memorix 1.2.2 → 1.2.3
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 +7 -0
- package/TEAM.md +86 -86
- package/dist/cli/index.js +34 -18
- package/dist/cli/index.js.map +1 -1
- package/dist/index.js +17 -8
- package/dist/index.js.map +1 -1
- package/dist/maintenance-runner.js.map +1 -1
- package/dist/memcode-runtime/CHANGELOG.md +7 -0
- package/dist/sdk.js +17 -8
- package/dist/sdk.js.map +1 -1
- package/docs/DESIGN_DECISIONS.md +357 -357
- package/docs/dev-log/progress.txt +18 -8
- 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/commands/audit-list.ts +89 -89
- package/src/cli/commands/background.ts +659 -659
- 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/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/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/compact/token-budget.ts +74 -74
- 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/pattern-detector.ts +173 -173
- 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/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 +24 -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 +7 -2
- package/src/skills/mini-skills.ts +386 -386
- 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/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/dist/index.js
CHANGED
|
@@ -15342,7 +15342,7 @@ async function startSession(projectDir2, projectId, opts) {
|
|
|
15342
15342
|
status: "active",
|
|
15343
15343
|
agent: opts?.agent
|
|
15344
15344
|
};
|
|
15345
|
-
const previousContext = await getSessionContext(projectDir2, projectId);
|
|
15345
|
+
const previousContext = await getSessionContext(projectDir2, projectId, 3, opts?.reader);
|
|
15346
15346
|
const sessionStore = getSessionStore();
|
|
15347
15347
|
const aliasSet = await resolveProjectIds(projectId);
|
|
15348
15348
|
await sessionStore.atomicRolloverInsert(session, [...aliasSet], now3);
|
|
@@ -15360,23 +15360,27 @@ async function endSession(projectDir2, sessionId, summary) {
|
|
|
15360
15360
|
await sessionStore.update(session);
|
|
15361
15361
|
return session;
|
|
15362
15362
|
}
|
|
15363
|
-
async function getSessionContext(projectDir2, projectId, limit = 3) {
|
|
15363
|
+
async function getSessionContext(projectDir2, projectId, limit = 3, reader) {
|
|
15364
15364
|
const aliasSet = await resolveProjectIds(projectId);
|
|
15365
15365
|
const [sessions, allObs] = await Promise.all([
|
|
15366
15366
|
loadAliasSessions(aliasSet),
|
|
15367
15367
|
loadAliasActiveObservations(aliasSet)
|
|
15368
15368
|
]);
|
|
15369
|
+
const readableObs = reader ? allObs.filter((observation) => {
|
|
15370
|
+
const observationReader = reader.projectId && aliasSet.has(observation.projectId) ? { ...reader, projectId: observation.projectId } : reader;
|
|
15371
|
+
return canReadObservation(observation, observationReader);
|
|
15372
|
+
}) : allObs;
|
|
15369
15373
|
const isNoisySummary = (summary) => {
|
|
15370
15374
|
if (!summary) return false;
|
|
15371
15375
|
return NOISE_PATTERNS2.some((p) => p.test(summary)) || SYSTEM_SELF_PATTERNS.some((p) => p.test(summary));
|
|
15372
15376
|
};
|
|
15373
15377
|
const projectSessions = sessions.filter((session) => session.status === "completed").filter((session) => !isNoisySummary(session.summary)).sort((a, b) => new Date(b.endedAt || b.startedAt).getTime() - new Date(a.endedAt || a.startedAt).getTime()).slice(0, limit);
|
|
15374
|
-
if (projectSessions.length === 0 &&
|
|
15378
|
+
if (projectSessions.length === 0 && readableObs.length === 0) {
|
|
15375
15379
|
return "";
|
|
15376
15380
|
}
|
|
15377
15381
|
const lines = [];
|
|
15378
15382
|
const projectTokens = tokenizeProjectId(projectId);
|
|
15379
|
-
const projectObs =
|
|
15383
|
+
const projectObs = readableObs.filter((obs) => !isNoiseObservation(obs) && !isSystemSelfObservation(obs));
|
|
15380
15384
|
const l2Scored = projectObs.filter((obs) => PRIORITY_TYPES.has(obs.type) && classifyLayer(obs) === "L2").map((obs) => ({ obs, score: scoreObservationForSessionContext(obs, projectTokens) })).sort((a, b) => {
|
|
15381
15385
|
if (b.score !== a.score) return b.score - a.score;
|
|
15382
15386
|
return new Date(b.obs.createdAt).getTime() - new Date(a.obs.createdAt).getTime();
|
|
@@ -15402,7 +15406,7 @@ async function getSessionContext(projectDir2, projectId, limit = 3) {
|
|
|
15402
15406
|
const hasL1Content = l1HookObs.length > 0 || l3GitCount > 0;
|
|
15403
15407
|
if (hasL1Content) {
|
|
15404
15408
|
let graphNeighbors = [];
|
|
15405
|
-
if (activeEntities.length > 0) {
|
|
15409
|
+
if (!reader && activeEntities.length > 0) {
|
|
15406
15410
|
try {
|
|
15407
15411
|
const graphMgr = new KnowledgeGraphManager(projectDir2);
|
|
15408
15412
|
await graphMgr.init();
|
|
@@ -15528,6 +15532,7 @@ var init_session = __esm({
|
|
|
15528
15532
|
init_session_store();
|
|
15529
15533
|
init_graph();
|
|
15530
15534
|
init_secret_filter();
|
|
15535
|
+
init_visibility();
|
|
15531
15536
|
PRIORITY_TYPES = /* @__PURE__ */ new Set(["gotcha", "decision", "problem-solution", "trade-off", "discovery"]);
|
|
15532
15537
|
TYPE_EMOJI = {
|
|
15533
15538
|
"gotcha": "[DISCOVERY]",
|
|
@@ -26999,7 +27004,7 @@ The path should point to a directory containing a .git folder.`
|
|
|
26999
27004
|
};
|
|
27000
27005
|
const server = existingServer ?? new McpServer({
|
|
27001
27006
|
name: "memorix",
|
|
27002
|
-
version: true ? "1.2.
|
|
27007
|
+
version: true ? "1.2.3" : "1.0.1"
|
|
27003
27008
|
});
|
|
27004
27009
|
const originalRegisterTool = server.registerTool.bind(server);
|
|
27005
27010
|
server.registerTool = ((name, ...args) => {
|
|
@@ -29500,7 +29505,6 @@ Ensure the path points to a directory containing a .git folder (or a subdirector
|
|
|
29500
29505
|
const unresolved = requireResolvedProject("start a project session");
|
|
29501
29506
|
if (unresolved) return unresolved;
|
|
29502
29507
|
const { startSession: startSession2 } = await Promise.resolve().then(() => (init_session(), session_exports));
|
|
29503
|
-
const result = await startSession2(projectDir2, project.id, { sessionId, agent });
|
|
29504
29508
|
const llmStatus = isLLMEnabled() ? `LLM enhanced mode: ${getLLMConfig()?.provider}/${getLLMConfig()?.model} (fact extraction + auto-dedup active)` : "LLM mode: off (set MEMORIX_LLM_API_KEY to enable enhanced memory quality)";
|
|
29505
29509
|
const shouldJoinTeam = !!joinTeam;
|
|
29506
29510
|
let registeredAgent = null;
|
|
@@ -29557,6 +29561,11 @@ Ensure the path points to a directory containing a .git folder (or a subdirector
|
|
|
29557
29561
|
}
|
|
29558
29562
|
} catch {
|
|
29559
29563
|
}
|
|
29564
|
+
const result = await startSession2(projectDir2, project.id, {
|
|
29565
|
+
sessionId,
|
|
29566
|
+
agent,
|
|
29567
|
+
reader: getObservationReader()
|
|
29568
|
+
});
|
|
29560
29569
|
const lines = [
|
|
29561
29570
|
`[OK] Session started: ${result.session.id}`,
|
|
29562
29571
|
`Project: ${project.name} (${project.id})`,
|
|
@@ -29679,7 +29688,7 @@ ${summary ? "Summary saved for next session context injection." : "No summary pr
|
|
|
29679
29688
|
async ({ limit }) => {
|
|
29680
29689
|
const safeLimit = limit != null ? coerceNumber(limit, 3) : 3;
|
|
29681
29690
|
const { getSessionContext: getSessionContext2, listSessions: listSessions2 } = await Promise.resolve().then(() => (init_session(), session_exports));
|
|
29682
|
-
const context = await getSessionContext2(projectDir2, project.id, safeLimit);
|
|
29691
|
+
const context = await getSessionContext2(projectDir2, project.id, safeLimit, getObservationReader());
|
|
29683
29692
|
const sessions = await listSessions2(projectDir2, project.id);
|
|
29684
29693
|
const activeSessions = sessions.filter((s) => s.status === "active");
|
|
29685
29694
|
const completedSessions = sessions.filter((s) => s.status === "completed");
|