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
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [1.2.3] - 2026-07-25
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
- **Session context now respects observation visibility** -- Automatic session handoff and manual session-context reads in the CLI, MCP server, and Workbench apply the caller's project, team, and personal-memory reader. A new identity cannot receive another agent's personal observations through session startup.
|
|
9
|
+
- **Identity before handoff** -- CLI and MCP coordination sessions establish their explicit identity before assembling prior context, so an owner's own personal records remain available while a newly joined agent fails closed.
|
|
10
|
+
- **Graph-side disclosure guard** -- Agent-facing session handoff no longer derives graph-neighbor hints from graph relations that do not yet carry observation visibility metadata.
|
|
11
|
+
|
|
5
12
|
## [1.2.2] - 2026-07-25
|
|
6
13
|
|
|
7
14
|
### Added
|
package/dist/sdk.js
CHANGED
|
@@ -15346,7 +15346,7 @@ async function startSession(projectDir2, projectId, opts) {
|
|
|
15346
15346
|
status: "active",
|
|
15347
15347
|
agent: opts?.agent
|
|
15348
15348
|
};
|
|
15349
|
-
const previousContext = await getSessionContext(projectDir2, projectId);
|
|
15349
|
+
const previousContext = await getSessionContext(projectDir2, projectId, 3, opts?.reader);
|
|
15350
15350
|
const sessionStore = getSessionStore();
|
|
15351
15351
|
const aliasSet = await resolveProjectIds(projectId);
|
|
15352
15352
|
await sessionStore.atomicRolloverInsert(session, [...aliasSet], now3);
|
|
@@ -15364,23 +15364,27 @@ async function endSession(projectDir2, sessionId, summary) {
|
|
|
15364
15364
|
await sessionStore.update(session);
|
|
15365
15365
|
return session;
|
|
15366
15366
|
}
|
|
15367
|
-
async function getSessionContext(projectDir2, projectId, limit = 3) {
|
|
15367
|
+
async function getSessionContext(projectDir2, projectId, limit = 3, reader) {
|
|
15368
15368
|
const aliasSet = await resolveProjectIds(projectId);
|
|
15369
15369
|
const [sessions, allObs] = await Promise.all([
|
|
15370
15370
|
loadAliasSessions(aliasSet),
|
|
15371
15371
|
loadAliasActiveObservations(aliasSet)
|
|
15372
15372
|
]);
|
|
15373
|
+
const readableObs = reader ? allObs.filter((observation) => {
|
|
15374
|
+
const observationReader = reader.projectId && aliasSet.has(observation.projectId) ? { ...reader, projectId: observation.projectId } : reader;
|
|
15375
|
+
return canReadObservation(observation, observationReader);
|
|
15376
|
+
}) : allObs;
|
|
15373
15377
|
const isNoisySummary = (summary) => {
|
|
15374
15378
|
if (!summary) return false;
|
|
15375
15379
|
return NOISE_PATTERNS2.some((p) => p.test(summary)) || SYSTEM_SELF_PATTERNS.some((p) => p.test(summary));
|
|
15376
15380
|
};
|
|
15377
15381
|
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);
|
|
15378
|
-
if (projectSessions.length === 0 &&
|
|
15382
|
+
if (projectSessions.length === 0 && readableObs.length === 0) {
|
|
15379
15383
|
return "";
|
|
15380
15384
|
}
|
|
15381
15385
|
const lines = [];
|
|
15382
15386
|
const projectTokens = tokenizeProjectId(projectId);
|
|
15383
|
-
const projectObs =
|
|
15387
|
+
const projectObs = readableObs.filter((obs) => !isNoiseObservation(obs) && !isSystemSelfObservation(obs));
|
|
15384
15388
|
const l2Scored = projectObs.filter((obs) => PRIORITY_TYPES.has(obs.type) && classifyLayer(obs) === "L2").map((obs) => ({ obs, score: scoreObservationForSessionContext(obs, projectTokens) })).sort((a, b) => {
|
|
15385
15389
|
if (b.score !== a.score) return b.score - a.score;
|
|
15386
15390
|
return new Date(b.obs.createdAt).getTime() - new Date(a.obs.createdAt).getTime();
|
|
@@ -15406,7 +15410,7 @@ async function getSessionContext(projectDir2, projectId, limit = 3) {
|
|
|
15406
15410
|
const hasL1Content = l1HookObs.length > 0 || l3GitCount > 0;
|
|
15407
15411
|
if (hasL1Content) {
|
|
15408
15412
|
let graphNeighbors = [];
|
|
15409
|
-
if (activeEntities.length > 0) {
|
|
15413
|
+
if (!reader && activeEntities.length > 0) {
|
|
15410
15414
|
try {
|
|
15411
15415
|
const graphMgr = new KnowledgeGraphManager(projectDir2);
|
|
15412
15416
|
await graphMgr.init();
|
|
@@ -15532,6 +15536,7 @@ var init_session = __esm({
|
|
|
15532
15536
|
init_session_store();
|
|
15533
15537
|
init_graph();
|
|
15534
15538
|
init_secret_filter();
|
|
15539
|
+
init_visibility();
|
|
15535
15540
|
PRIORITY_TYPES = /* @__PURE__ */ new Set(["gotcha", "decision", "problem-solution", "trade-off", "discovery"]);
|
|
15536
15541
|
TYPE_EMOJI = {
|
|
15537
15542
|
"gotcha": "[DISCOVERY]",
|
|
@@ -26915,7 +26920,7 @@ The path should point to a directory containing a .git folder.`
|
|
|
26915
26920
|
};
|
|
26916
26921
|
const server = existingServer ?? new McpServer({
|
|
26917
26922
|
name: "memorix",
|
|
26918
|
-
version: true ? "1.2.
|
|
26923
|
+
version: true ? "1.2.3" : "1.0.1"
|
|
26919
26924
|
});
|
|
26920
26925
|
const originalRegisterTool = server.registerTool.bind(server);
|
|
26921
26926
|
server.registerTool = ((name, ...args) => {
|
|
@@ -29416,7 +29421,6 @@ Ensure the path points to a directory containing a .git folder (or a subdirector
|
|
|
29416
29421
|
const unresolved = requireResolvedProject("start a project session");
|
|
29417
29422
|
if (unresolved) return unresolved;
|
|
29418
29423
|
const { startSession: startSession2 } = await Promise.resolve().then(() => (init_session(), session_exports));
|
|
29419
|
-
const result = await startSession2(projectDir2, project.id, { sessionId, agent });
|
|
29420
29424
|
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)";
|
|
29421
29425
|
const shouldJoinTeam = !!joinTeam;
|
|
29422
29426
|
let registeredAgent = null;
|
|
@@ -29473,6 +29477,11 @@ Ensure the path points to a directory containing a .git folder (or a subdirector
|
|
|
29473
29477
|
}
|
|
29474
29478
|
} catch {
|
|
29475
29479
|
}
|
|
29480
|
+
const result = await startSession2(projectDir2, project.id, {
|
|
29481
|
+
sessionId,
|
|
29482
|
+
agent,
|
|
29483
|
+
reader: getObservationReader()
|
|
29484
|
+
});
|
|
29476
29485
|
const lines = [
|
|
29477
29486
|
`[OK] Session started: ${result.session.id}`,
|
|
29478
29487
|
`Project: ${project.name} (${project.id})`,
|
|
@@ -29595,7 +29604,7 @@ ${summary ? "Summary saved for next session context injection." : "No summary pr
|
|
|
29595
29604
|
async ({ limit }) => {
|
|
29596
29605
|
const safeLimit = limit != null ? coerceNumber(limit, 3) : 3;
|
|
29597
29606
|
const { getSessionContext: getSessionContext2, listSessions: listSessions2 } = await Promise.resolve().then(() => (init_session(), session_exports));
|
|
29598
|
-
const context = await getSessionContext2(projectDir2, project.id, safeLimit);
|
|
29607
|
+
const context = await getSessionContext2(projectDir2, project.id, safeLimit, getObservationReader());
|
|
29599
29608
|
const sessions = await listSessions2(projectDir2, project.id);
|
|
29600
29609
|
const activeSessions = sessions.filter((s) => s.status === "active");
|
|
29601
29610
|
const completedSessions = sessions.filter((s) => s.status === "completed");
|