@remnic/core 9.3.620 → 9.3.621

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.
Files changed (48) hide show
  1. package/dist/access-cli.js +6 -6
  2. package/dist/access-http.js +5 -5
  3. package/dist/access-mcp.js +4 -4
  4. package/dist/access-service.js +3 -3
  5. package/dist/active-recall.js +1 -1
  6. package/dist/{chunk-KGLPJROV.js → chunk-4EWRLK3C.js} +9 -9
  7. package/dist/{chunk-T7N6KQGS.js → chunk-5GOMXHLC.js} +6 -1
  8. package/dist/chunk-5GOMXHLC.js.map +1 -0
  9. package/dist/{chunk-UEY3VB6W.js → chunk-6HMYUWXR.js} +13 -3
  10. package/dist/chunk-6HMYUWXR.js.map +1 -0
  11. package/dist/{chunk-JQDZQ4TB.js → chunk-BMFZLLNI.js} +2 -2
  12. package/dist/{chunk-ZK32E74R.js → chunk-F4QTFIB4.js} +3 -3
  13. package/dist/{chunk-X4QQB7O6.js → chunk-FH3PPO42.js} +3 -3
  14. package/dist/{chunk-TNOWU6RP.js → chunk-HA5SI4GK.js} +3 -3
  15. package/dist/{chunk-EXUAP5LH.js → chunk-O3U5BPUP.js} +3 -3
  16. package/dist/{chunk-NM5NQYJE.js → chunk-THTIZJZA.js} +3 -3
  17. package/dist/{chunk-5OHHEORR.js → chunk-TIPYPLLQ.js} +2 -2
  18. package/dist/{chunk-VMGLYN42.js → chunk-XQNPGNKK.js} +11 -6
  19. package/dist/chunk-XQNPGNKK.js.map +1 -0
  20. package/dist/{chunk-OBIRVF36.js → chunk-YEEAADCI.js} +2 -2
  21. package/dist/cli.js +11 -11
  22. package/dist/config.js +1 -1
  23. package/dist/index.js +12 -12
  24. package/dist/namespaces/migrate.js +2 -2
  25. package/dist/namespaces/storage.js +1 -1
  26. package/dist/objective-state-writers.js +2 -2
  27. package/dist/objective-state.js +1 -1
  28. package/dist/operator-toolkit.js +4 -4
  29. package/dist/orchestrator.js +3 -3
  30. package/dist/resume-bundles.js +3 -3
  31. package/dist/schemas.d.ts +22 -22
  32. package/dist/transfer/types.d.ts +12 -12
  33. package/package.json +1 -1
  34. package/src/config.ts +5 -0
  35. package/src/namespaces/storage.ts +30 -5
  36. package/src/objective-state.ts +17 -2
  37. package/dist/chunk-T7N6KQGS.js.map +0 -1
  38. package/dist/chunk-UEY3VB6W.js.map +0 -1
  39. package/dist/chunk-VMGLYN42.js.map +0 -1
  40. /package/dist/{chunk-KGLPJROV.js.map → chunk-4EWRLK3C.js.map} +0 -0
  41. /package/dist/{chunk-JQDZQ4TB.js.map → chunk-BMFZLLNI.js.map} +0 -0
  42. /package/dist/{chunk-ZK32E74R.js.map → chunk-F4QTFIB4.js.map} +0 -0
  43. /package/dist/{chunk-X4QQB7O6.js.map → chunk-FH3PPO42.js.map} +0 -0
  44. /package/dist/{chunk-TNOWU6RP.js.map → chunk-HA5SI4GK.js.map} +0 -0
  45. /package/dist/{chunk-EXUAP5LH.js.map → chunk-O3U5BPUP.js.map} +0 -0
  46. /package/dist/{chunk-NM5NQYJE.js.map → chunk-THTIZJZA.js.map} +0 -0
  47. /package/dist/{chunk-5OHHEORR.js.map → chunk-TIPYPLLQ.js.map} +0 -0
  48. /package/dist/{chunk-OBIRVF36.js.map → chunk-YEEAADCI.js.map} +0 -0
@@ -30,6 +30,15 @@ function validateValueRef(raw, field) {
30
30
  function validateMetadata(raw) {
31
31
  return validateStringRecord(raw, "metadata");
32
32
  }
33
+ function assertWithinDir(baseDir, candidate) {
34
+ const resolvedBase = path.resolve(baseDir);
35
+ const resolved = path.resolve(candidate);
36
+ const rel = path.relative(resolvedBase, resolved);
37
+ if (rel === ".." || rel.startsWith(`..${path.sep}`) || path.isAbsolute(rel)) {
38
+ throw new Error("objective-state path escapes the snapshots directory");
39
+ }
40
+ return resolved;
41
+ }
33
42
  function resolveObjectiveStateStoreDir(memoryDir, overrideDir) {
34
43
  if (typeof overrideDir === "string" && overrideDir.trim().length > 0) {
35
44
  return overrideDir.trim();
@@ -89,8 +98,9 @@ async function recordObjectiveStateSnapshot(options) {
89
98
  const rootDir = resolveObjectiveStateStoreDir(options.memoryDir, options.objectiveStateStoreDir);
90
99
  const validated = validateObjectiveStateSnapshot(options.snapshot);
91
100
  const day = recordStoreDay(validated.recordedAt);
92
- const snapshotsDir = path.join(rootDir, "snapshots", day);
93
- const filePath = path.join(snapshotsDir, `${validated.snapshotId}.json`);
101
+ const snapshotsRoot = path.join(rootDir, "snapshots");
102
+ const snapshotsDir = assertWithinDir(snapshotsRoot, path.join(snapshotsRoot, day));
103
+ const filePath = assertWithinDir(snapshotsDir, path.join(snapshotsDir, `${validated.snapshotId}.json`));
94
104
  await mkdir(snapshotsDir, { recursive: true });
95
105
  await writeFile(filePath, JSON.stringify(validated, null, 2), "utf8");
96
106
  return filePath;
@@ -208,4 +218,4 @@ export {
208
218
  getObjectiveStateStoreStatus,
209
219
  searchObjectiveStateSnapshots
210
220
  };
211
- //# sourceMappingURL=chunk-UEY3VB6W.js.map
221
+ //# sourceMappingURL=chunk-6HMYUWXR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/objective-state.ts"],"sourcesContent":["import path from \"node:path\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { listJsonFiles, readJsonFile } from \"./json-store.js\";\nimport {\n assertIsoRecordedAt,\n assertSafePathSegment,\n assertString,\n isRecord,\n optionalString,\n optionalStringArray,\n recordStoreDay,\n validateStringRecord,\n} from \"./store-contract.js\";\n\nexport type ObjectiveStateSnapshotSource = \"tool_result\" | \"cli\" | \"system\" | \"manual\";\nexport type ObjectiveStateSnapshotKind = \"tool\" | \"file\" | \"process\" | \"record\" | \"workspace\";\nexport type ObjectiveStateChangeKind = \"created\" | \"updated\" | \"deleted\" | \"observed\" | \"executed\" | \"failed\";\nexport type ObjectiveStateOutcome = \"success\" | \"failure\" | \"partial\" | \"unknown\";\n\nexport interface ObjectiveStateValueRef {\n exists?: boolean;\n ref?: string;\n valueHash?: string;\n}\n\nexport interface ObjectiveStateSnapshot {\n schemaVersion: 1;\n snapshotId: string;\n recordedAt: string;\n sessionKey: string;\n source: ObjectiveStateSnapshotSource;\n kind: ObjectiveStateSnapshotKind;\n changeKind: ObjectiveStateChangeKind;\n scope: string;\n summary: string;\n toolName?: string;\n command?: string;\n outcome?: ObjectiveStateOutcome;\n before?: ObjectiveStateValueRef;\n after?: ObjectiveStateValueRef;\n entityRefs?: string[];\n tags?: string[];\n metadata?: Record<string, string>;\n}\n\nexport interface ObjectiveStateStoreStatus {\n enabled: boolean;\n writesEnabled: boolean;\n rootDir: string;\n snapshotsDir: string;\n snapshots: {\n total: number;\n valid: number;\n invalid: number;\n byKind: Partial<Record<ObjectiveStateSnapshotKind, number>>;\n byOutcome: Partial<Record<ObjectiveStateOutcome, number>>;\n latestSnapshotId?: string;\n latestRecordedAt?: string;\n latestSessionKey?: string;\n };\n latestSnapshot?: ObjectiveStateSnapshot;\n invalidSnapshots: Array<{\n path: string;\n error: string;\n }>;\n}\n\nexport interface ObjectiveStateSearchResult {\n snapshot: ObjectiveStateSnapshot;\n score: number;\n}\n\nfunction validateValueRef(raw: unknown, field: string): ObjectiveStateValueRef | undefined {\n if (raw === undefined) return undefined;\n if (!isRecord(raw)) throw new Error(`${field} must be an object`);\n const exists = typeof raw.exists === \"boolean\" ? raw.exists : undefined;\n const ref = optionalString(raw.ref);\n const valueHash = optionalString(raw.valueHash);\n if (exists === undefined && ref === undefined && valueHash === undefined) {\n throw new Error(`${field} must include exists, ref, or valueHash`);\n }\n return { exists, ref, valueHash };\n}\n\nfunction validateMetadata(raw: unknown): Record<string, string> | undefined {\n return validateStringRecord(raw, \"metadata\");\n}\n\n// Assert that a built path stays inside the expected base directory before it is\n// used in a filesystem write. snapshotId/recordedAt are already validated by\n// validateObjectiveStateSnapshot, so for valid data this is a defense-in-depth\n// barrier (and makes the containment provable to CodeQL js/path-injection).\nfunction assertWithinDir(baseDir: string, candidate: string): string {\n const resolvedBase = path.resolve(baseDir);\n const resolved = path.resolve(candidate);\n const rel = path.relative(resolvedBase, resolved);\n if (rel === \"..\" || rel.startsWith(`..${path.sep}`) || path.isAbsolute(rel)) {\n throw new Error(\"objective-state path escapes the snapshots directory\");\n }\n return resolved;\n}\n\nexport function resolveObjectiveStateStoreDir(memoryDir: string, overrideDir?: string): string {\n if (typeof overrideDir === \"string\" && overrideDir.trim().length > 0) {\n return overrideDir.trim();\n }\n return path.join(memoryDir, \"state\", \"objective-state\");\n}\n\nexport function objectiveStateStoreOverrideForNamespace(options: {\n memoryDir: string;\n configuredStoreDir?: string;\n namespacesEnabled: boolean;\n namespace: string;\n}): string | undefined {\n const configured = options.configuredStoreDir?.trim();\n if (!configured) return undefined;\n if (!options.namespacesEnabled) return configured;\n\n const defaultStoreDir = path.join(options.memoryDir, \"state\", \"objective-state\");\n if (path.resolve(configured) === path.resolve(defaultStoreDir)) {\n return undefined;\n }\n return path.join(configured, \"namespaces\", options.namespace);\n}\n\nexport function validateObjectiveStateSnapshot(raw: unknown): ObjectiveStateSnapshot {\n if (!isRecord(raw)) throw new Error(\"objective-state snapshot must be an object\");\n if (raw.schemaVersion !== 1) throw new Error(\"schemaVersion must be 1\");\n\n const source = assertString(raw.source, \"source\");\n if (![\"tool_result\", \"cli\", \"system\", \"manual\"].includes(source)) {\n throw new Error(\"source must be one of tool_result|cli|system|manual\");\n }\n\n const kind = assertString(raw.kind, \"kind\");\n if (![\"tool\", \"file\", \"process\", \"record\", \"workspace\"].includes(kind)) {\n throw new Error(\"kind must be one of tool|file|process|record|workspace\");\n }\n\n const changeKind = assertString(raw.changeKind, \"changeKind\");\n if (![\"created\", \"updated\", \"deleted\", \"observed\", \"executed\", \"failed\"].includes(changeKind)) {\n throw new Error(\"changeKind must be one of created|updated|deleted|observed|executed|failed\");\n }\n\n const outcomeRaw = optionalString(raw.outcome);\n if (outcomeRaw !== undefined && ![\"success\", \"failure\", \"partial\", \"unknown\"].includes(outcomeRaw)) {\n throw new Error(\"outcome must be one of success|failure|partial|unknown\");\n }\n\n return {\n schemaVersion: 1,\n snapshotId: assertSafePathSegment(assertString(raw.snapshotId, \"snapshotId\"), \"snapshotId\"),\n recordedAt: assertIsoRecordedAt(assertString(raw.recordedAt, \"recordedAt\")),\n sessionKey: assertString(raw.sessionKey, \"sessionKey\"),\n source: source as ObjectiveStateSnapshotSource,\n kind: kind as ObjectiveStateSnapshotKind,\n changeKind: changeKind as ObjectiveStateChangeKind,\n scope: assertString(raw.scope, \"scope\"),\n summary: assertString(raw.summary, \"summary\"),\n toolName: optionalString(raw.toolName),\n command: optionalString(raw.command),\n outcome: outcomeRaw as ObjectiveStateOutcome | undefined,\n before: validateValueRef(raw.before, \"before\"),\n after: validateValueRef(raw.after, \"after\"),\n entityRefs: optionalStringArray(raw.entityRefs, \"entityRefs\"),\n tags: optionalStringArray(raw.tags, \"tags\"),\n metadata: validateMetadata(raw.metadata),\n };\n}\n\nexport async function recordObjectiveStateSnapshot(options: {\n memoryDir: string;\n objectiveStateStoreDir?: string;\n snapshot: ObjectiveStateSnapshot;\n}): Promise<string> {\n const rootDir = resolveObjectiveStateStoreDir(options.memoryDir, options.objectiveStateStoreDir);\n const validated = validateObjectiveStateSnapshot(options.snapshot);\n const day = recordStoreDay(validated.recordedAt);\n const snapshotsRoot = path.join(rootDir, \"snapshots\");\n const snapshotsDir = assertWithinDir(snapshotsRoot, path.join(snapshotsRoot, day));\n const filePath = assertWithinDir(snapshotsDir, path.join(snapshotsDir, `${validated.snapshotId}.json`));\n await mkdir(snapshotsDir, { recursive: true });\n await writeFile(filePath, JSON.stringify(validated, null, 2), \"utf8\");\n return filePath;\n}\n\nexport async function getObjectiveStateStoreStatus(options: {\n memoryDir: string;\n objectiveStateStoreDir?: string;\n enabled: boolean;\n writesEnabled: boolean;\n}): Promise<ObjectiveStateStoreStatus> {\n const rootDir = resolveObjectiveStateStoreDir(options.memoryDir, options.objectiveStateStoreDir);\n const snapshotsDir = path.join(rootDir, \"snapshots\");\n const { files, snapshots, invalidSnapshots } = await readObjectiveStateSnapshots(options);\n\n snapshots.sort((a, b) => b.recordedAt.localeCompare(a.recordedAt));\n const byKind: Partial<Record<ObjectiveStateSnapshotKind, number>> = {};\n const byOutcome: Partial<Record<ObjectiveStateOutcome, number>> = {};\n for (const snapshot of snapshots) {\n byKind[snapshot.kind] = (byKind[snapshot.kind] ?? 0) + 1;\n const outcome = snapshot.outcome ?? \"unknown\";\n byOutcome[outcome] = (byOutcome[outcome] ?? 0) + 1;\n }\n\n return {\n enabled: options.enabled,\n writesEnabled: options.writesEnabled,\n rootDir,\n snapshotsDir,\n snapshots: {\n total: files.length,\n valid: snapshots.length,\n invalid: invalidSnapshots.length,\n byKind,\n byOutcome,\n latestSnapshotId: snapshots[0]?.snapshotId,\n latestRecordedAt: snapshots[0]?.recordedAt,\n latestSessionKey: snapshots[0]?.sessionKey,\n },\n latestSnapshot: snapshots[0],\n invalidSnapshots,\n };\n}\n\nasync function readObjectiveStateSnapshots(options: {\n memoryDir: string;\n objectiveStateStoreDir?: string;\n}): Promise<{\n files: string[];\n snapshots: ObjectiveStateSnapshot[];\n invalidSnapshots: Array<{ path: string; error: string }>;\n}> {\n const rootDir = resolveObjectiveStateStoreDir(options.memoryDir, options.objectiveStateStoreDir);\n const files = await listJsonFiles(path.join(rootDir, \"snapshots\"));\n const snapshots: ObjectiveStateSnapshot[] = [];\n const invalidSnapshots: Array<{ path: string; error: string }> = [];\n for (const filePath of files) {\n try {\n snapshots.push(validateObjectiveStateSnapshot(await readJsonFile(filePath)));\n } catch (error) {\n invalidSnapshots.push({\n path: filePath,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return { files, snapshots, invalidSnapshots };\n}\n\nfunction normalizeTokens(value: string): string[] {\n return value\n .toLowerCase()\n .split(/[^a-z0-9]+/)\n .map((token) => token.trim())\n .filter((token) => token.length >= 2);\n}\n\nfunction overlapScore(queryTokens: Set<string>, value: string | undefined, weight: number): number {\n if (!value) return 0;\n const tokens = new Set(normalizeTokens(value));\n let matches = 0;\n for (const token of queryTokens) {\n if (tokens.has(token)) matches += 1;\n }\n return matches * weight;\n}\n\nfunction lexicalScoreObjectiveStateSnapshot(\n snapshot: ObjectiveStateSnapshot,\n queryTokens: Set<string>,\n): number {\n let score = 0;\n score += overlapScore(queryTokens, snapshot.scope, 4);\n score += overlapScore(queryTokens, snapshot.summary, 3);\n score += overlapScore(queryTokens, snapshot.command, 3);\n score += overlapScore(queryTokens, snapshot.toolName, 2);\n score += overlapScore(queryTokens, snapshot.tags?.join(\" \"), 2);\n score += overlapScore(queryTokens, snapshot.entityRefs?.join(\" \"), 2);\n score += overlapScore(queryTokens, snapshot.kind, 1);\n score += overlapScore(queryTokens, snapshot.changeKind, 1);\n score += overlapScore(queryTokens, snapshot.outcome, 1);\n return score;\n}\n\nfunction scoreObjectiveStateSnapshot(\n snapshot: ObjectiveStateSnapshot,\n lexicalScore: number,\n sessionKey?: string,\n): number {\n let score = lexicalScore;\n if (sessionKey && snapshot.sessionKey === sessionKey) score += 1.5;\n\n const recordedAtMs = Date.parse(snapshot.recordedAt);\n if (Number.isFinite(recordedAtMs)) {\n const ageHours = Math.max(0, (Date.now() - recordedAtMs) / 3_600_000);\n score += 1 / (1 + ageHours);\n }\n return score;\n}\n\nexport async function searchObjectiveStateSnapshots(options: {\n memoryDir: string;\n objectiveStateStoreDir?: string;\n query: string;\n maxResults: number;\n sessionKey?: string;\n}): Promise<ObjectiveStateSearchResult[]> {\n const maxResults = Math.max(0, Math.floor(options.maxResults));\n if (maxResults === 0) return [];\n\n const { snapshots } = await readObjectiveStateSnapshots(options);\n if (snapshots.length === 0) return [];\n\n const queryTokens = new Set(normalizeTokens(options.query));\n const scored = snapshots.map((snapshot) => {\n const lexicalScore = lexicalScoreObjectiveStateSnapshot(snapshot, queryTokens);\n return {\n snapshot,\n lexicalScore,\n score: scoreObjectiveStateSnapshot(snapshot, lexicalScore, options.sessionKey),\n };\n });\n\n const filtered = queryTokens.size === 0\n ? scored\n : scored.filter((result) => result.lexicalScore > 0);\n\n filtered.sort((left, right) => {\n if (right.score !== left.score) return right.score - left.score;\n return right.snapshot.recordedAt.localeCompare(left.snapshot.recordedAt);\n });\n return filtered.slice(0, maxResults);\n}\n"],"mappings":"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","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-CI7RKSRE.js";
4
4
  import {
5
5
  recordObjectiveStateSnapshot
6
- } from "./chunk-UEY3VB6W.js";
6
+ } from "./chunk-6HMYUWXR.js";
7
7
 
8
8
  // src/objective-state-writers.ts
9
9
  import crypto from "crypto";
@@ -644,4 +644,4 @@ export {
644
644
  recordObjectiveStateSnapshotsFromAgentMessages,
645
645
  recordObjectiveStateSnapshotsFromObservedMessages
646
646
  };
647
- //# sourceMappingURL=chunk-JQDZQ4TB.js.map
647
+ //# sourceMappingURL=chunk-BMFZLLNI.js.map
@@ -49,10 +49,10 @@ import {
49
49
  } from "./chunk-BPSGLMQ4.js";
50
50
  import {
51
51
  recordObjectiveStateSnapshotsFromObservedMessages
52
- } from "./chunk-JQDZQ4TB.js";
52
+ } from "./chunk-BMFZLLNI.js";
53
53
  import {
54
54
  objectiveStateStoreOverrideForNamespace
55
- } from "./chunk-UEY3VB6W.js";
55
+ } from "./chunk-6HMYUWXR.js";
56
56
  import {
57
57
  recordMemoryOutcome
58
58
  } from "./chunk-EIR5VLIH.js";
@@ -4349,4 +4349,4 @@ export {
4349
4349
  shapeMemorySummary,
4350
4350
  EngramAccessService
4351
4351
  };
4352
- //# sourceMappingURL=chunk-ZK32E74R.js.map
4352
+ //# sourceMappingURL=chunk-F4QTFIB4.js.map
@@ -11,11 +11,11 @@ import {
11
11
  } from "./chunk-LMDRGRJ2.js";
12
12
  import {
13
13
  parseConfig
14
- } from "./chunk-T7N6KQGS.js";
14
+ } from "./chunk-5GOMXHLC.js";
15
15
  import {
16
16
  resolveObjectiveStateStoreDir,
17
17
  validateObjectiveStateSnapshot
18
- } from "./chunk-UEY3VB6W.js";
18
+ } from "./chunk-6HMYUWXR.js";
19
19
  import {
20
20
  assertIsoRecordedAt,
21
21
  assertSafePathSegment,
@@ -268,4 +268,4 @@ export {
268
268
  recordResumeBundle,
269
269
  getResumeBundleStatus
270
270
  };
271
- //# sourceMappingURL=chunk-X4QQB7O6.js.map
271
+ //# sourceMappingURL=chunk-FH3PPO42.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  listNamespaces
3
- } from "./chunk-OBIRVF36.js";
3
+ } from "./chunk-YEEAADCI.js";
4
4
  import {
5
5
  runConsolidationProvenanceCheck
6
6
  } from "./chunk-AL4RAJL5.js";
@@ -32,7 +32,7 @@ import {
32
32
  } from "./chunk-AJU4PJGY.js";
33
33
  import {
34
34
  parseConfig
35
- } from "./chunk-T7N6KQGS.js";
35
+ } from "./chunk-5GOMXHLC.js";
36
36
  import {
37
37
  listMemoryGovernanceRuns,
38
38
  readMemoryGovernanceRunArtifact
@@ -1336,4 +1336,4 @@ export {
1336
1336
  runBenchmarkRecall,
1337
1337
  runOperatorRepair
1338
1338
  };
1339
- //# sourceMappingURL=chunk-TNOWU6RP.js.map
1339
+ //# sourceMappingURL=chunk-HA5SI4GK.js.map
@@ -237,7 +237,7 @@ import {
237
237
  } from "./chunk-CYEPCZN5.js";
238
238
  import {
239
239
  NamespaceStorageRouter
240
- } from "./chunk-VMGLYN42.js";
240
+ } from "./chunk-XQNPGNKK.js";
241
241
  import {
242
242
  namespaceIdentityFromToken
243
243
  } from "./chunk-ZFXCQPNO.js";
@@ -321,7 +321,7 @@ import {
321
321
  import {
322
322
  objectiveStateStoreOverrideForNamespace,
323
323
  searchObjectiveStateSnapshots
324
- } from "./chunk-UEY3VB6W.js";
324
+ } from "./chunk-6HMYUWXR.js";
325
325
  import {
326
326
  ProfilingCollector
327
327
  } from "./chunk-QY7YA7OL.js";
@@ -12498,4 +12498,4 @@ export {
12498
12498
  resolvePersistedMemoryRelativePath,
12499
12499
  Orchestrator
12500
12500
  };
12501
- //# sourceMappingURL=chunk-EXUAP5LH.js.map
12501
+ //# sourceMappingURL=chunk-O3U5BPUP.js.map
@@ -3,10 +3,10 @@ import {
3
3
  } from "./chunk-2QSZNTDO.js";
4
4
  import {
5
5
  EngramMcpServer
6
- } from "./chunk-5OHHEORR.js";
6
+ } from "./chunk-TIPYPLLQ.js";
7
7
  import {
8
8
  EngramAccessInputError
9
- } from "./chunk-ZK32E74R.js";
9
+ } from "./chunk-F4QTFIB4.js";
10
10
  import {
11
11
  projectTagProjectId
12
12
  } from "./chunk-EDQVAMQI.js";
@@ -1847,4 +1847,4 @@ var EngramAccessHttpServer = class {
1847
1847
  export {
1848
1848
  EngramAccessHttpServer
1849
1849
  };
1850
- //# sourceMappingURL=chunk-NM5NQYJE.js.map
1850
+ //# sourceMappingURL=chunk-THTIZJZA.js.map
@@ -11,7 +11,7 @@ import {
11
11
  } from "./chunk-D24OXEPB.js";
12
12
  import {
13
13
  EngramAccessInputError
14
- } from "./chunk-ZK32E74R.js";
14
+ } from "./chunk-F4QTFIB4.js";
15
15
  import {
16
16
  projectTagProjectId
17
17
  } from "./chunk-EDQVAMQI.js";
@@ -2903,4 +2903,4 @@ ${body}`;
2903
2903
  export {
2904
2904
  EngramMcpServer
2905
2905
  };
2906
- //# sourceMappingURL=chunk-5OHHEORR.js.map
2906
+ //# sourceMappingURL=chunk-TIPYPLLQ.js.map
@@ -67,6 +67,12 @@ async function hasStoredEntries(p) {
67
67
  return false;
68
68
  }
69
69
  }
70
+ function resolveNamespaceDir(memoryDir, segment) {
71
+ if (segment.length === 0 || segment.includes("/") || segment.includes("\\") || segment.includes("..") || path2.isAbsolute(segment)) {
72
+ throw new Error(`unsafe namespace path segment: ${segment}`);
73
+ }
74
+ return path2.join(memoryDir, "namespaces", segment);
75
+ }
70
76
  var LEGACY_NAMESPACE_CONTENT_CHILDREN = [
71
77
  ...ALL_CATEGORY_DIRS,
72
78
  "entities",
@@ -103,10 +109,9 @@ var NamespaceStorageRouter = class {
103
109
  this.defaultNsRootResolved = this.config.memoryDir;
104
110
  return this.defaultNsRootResolved;
105
111
  }
106
- const legacyNsDir = path2.join(this.config.memoryDir, "namespaces", this.config.defaultNamespace);
107
- const tokenizedNsDir = path2.join(
112
+ const legacyNsDir = resolveNamespaceDir(this.config.memoryDir, this.config.defaultNamespace);
113
+ const tokenizedNsDir = resolveNamespaceDir(
108
114
  this.config.memoryDir,
109
- "namespaces",
110
115
  namespaceIdentityToken(this.config.defaultNamespace)
111
116
  );
112
117
  const tokenizedHasData = await exists(tokenizedNsDir) && await hasAnyNamespaceStorageMarker(tokenizedNsDir, { includeRuntimeState: true });
@@ -119,8 +124,8 @@ var NamespaceStorageRouter = class {
119
124
  if (namespace === this.config.defaultNamespace) {
120
125
  return this.defaultNsRootResolved ?? this.config.memoryDir;
121
126
  }
122
- const legacyRoot = path2.join(this.config.memoryDir, "namespaces", namespace);
123
- const tokenizedRoot = path2.join(this.config.memoryDir, "namespaces", namespaceIdentityToken(namespace));
127
+ const legacyRoot = resolveNamespaceDir(this.config.memoryDir, namespace);
128
+ const tokenizedRoot = resolveNamespaceDir(this.config.memoryDir, namespaceIdentityToken(namespace));
124
129
  if (await exists(tokenizedRoot) && await hasAnyNamespaceStorageMarker(tokenizedRoot, { includeRuntimeState: true })) {
125
130
  return tokenizedRoot;
126
131
  }
@@ -156,4 +161,4 @@ export {
156
161
  getCategoryDir,
157
162
  NamespaceStorageRouter
158
163
  };
159
- //# sourceMappingURL=chunk-VMGLYN42.js.map
164
+ //# sourceMappingURL=chunk-XQNPGNKK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/namespaces/storage.ts","../src/utils/category-dir.ts"],"sourcesContent":["import path from \"node:path\";\nimport { access, lstat, readdir } from \"node:fs/promises\";\nimport { isSafeRouteNamespace } from \"../routing/engine.js\";\nimport { StorageManager } from \"../storage.js\";\nimport type { PluginConfig } from \"../types.js\";\nimport { ALL_CATEGORY_DIRS } from \"../utils/category-dir.js\";\nimport { namespaceIdentityToken, normalizeNamespaceIdentity } from \"./identity.js\";\n\nasync function exists(p: string): Promise<boolean> {\n try {\n await access(p);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function hasStoredEntries(p: string): Promise<boolean> {\n try {\n const entry = await lstat(p);\n if (entry.isSymbolicLink()) return true;\n if (!entry.isDirectory()) return true;\n const children = await readdir(p, { withFileTypes: true });\n for (const child of children) {\n const childPath = path.join(p, child.name);\n if (child.isSymbolicLink() || child.isFile()) return true;\n if (child.isDirectory() && (await hasStoredEntries(childPath))) return true;\n }\n return false;\n } catch {\n return false;\n }\n}\n\n// Build a per-namespace directory under `<memoryDir>/namespaces` and assert the\n// resolved path stays inside that base. Namespace identifiers can originate from\n// operator config (config.defaultNamespace) and request-derived routing, so this\n// containment check prevents directory traversal (CodeQL js/path-injection).\n// For safe segments this returns exactly `path.join(base, segment)`, so there is\n// no behavioral change for valid namespaces.\nfunction resolveNamespaceDir(memoryDir: string, segment: string): string {\n // Mirror isSafeRouteNamespace's separator/parent-ref rejection (without its\n // 64-char cap, so identity tokens still pass). Rejecting separators and \"..\"\n // up front keeps the value a single contained child of <memoryDir>/namespaces.\n if (\n segment.length === 0 ||\n segment.includes(\"/\") ||\n segment.includes(\"\\\\\") ||\n segment.includes(\"..\") ||\n path.isAbsolute(segment)\n ) {\n throw new Error(`unsafe namespace path segment: ${segment}`);\n }\n return path.join(memoryDir, \"namespaces\", segment);\n}\n\nconst LEGACY_NAMESPACE_CONTENT_CHILDREN = [\n ...ALL_CATEGORY_DIRS,\n \"entities\",\n \"artifacts\",\n \"identity\",\n \"config\",\n \"summaries\",\n \"profile.md\",\n] as const;\n\nconst LEGACY_NAMESPACE_RUNTIME_CHILDREN = [\"state\"] as const;\n\nasync function hasAnyLegacyData(\n rootDir: string,\n options: { includeRuntimeState?: boolean } = {},\n): Promise<boolean> {\n const children = options.includeRuntimeState === true\n ? [...LEGACY_NAMESPACE_CONTENT_CHILDREN, ...LEGACY_NAMESPACE_RUNTIME_CHILDREN]\n : LEGACY_NAMESPACE_CONTENT_CHILDREN;\n for (const child of children) {\n if (await hasStoredEntries(path.join(rootDir, child))) return true;\n }\n return false;\n}\n\nasync function hasAnyNamespaceStorageMarker(\n rootDir: string,\n options: { includeRuntimeState?: boolean } = {},\n): Promise<boolean> {\n const children = options.includeRuntimeState === true\n ? [...LEGACY_NAMESPACE_CONTENT_CHILDREN, ...LEGACY_NAMESPACE_RUNTIME_CHILDREN]\n : LEGACY_NAMESPACE_CONTENT_CHILDREN;\n for (const child of children) {\n if (await exists(path.join(rootDir, child))) return true;\n }\n return false;\n}\n\n/**\n * Storage routing for namespaces.\n *\n * Compatibility note:\n * - When namespaces are enabled, existing raw namespace roots are preserved.\n * New namespace roots use tokenized names under `memoryDir/namespaces/<token>`.\n * - The default namespace continues to use the legacy `memoryDir` root unless the caller\n * has created `memoryDir/namespaces/<defaultNamespace>` (in which case we use that).\n *\n * This avoids surprising \"lost memories\" when an install flips namespaces on without\n * migrating existing data.\n */\nexport class NamespaceStorageRouter {\n private readonly cache = new Map<string, StorageManager>();\n private defaultNsRootResolved: string | null = null;\n\n constructor(private readonly config: PluginConfig) {}\n\n private async defaultNamespaceRoot(): Promise<string> {\n if (!this.config.namespacesEnabled) {\n this.defaultNsRootResolved = this.config.memoryDir;\n return this.defaultNsRootResolved;\n }\n\n const legacyNsDir = resolveNamespaceDir(this.config.memoryDir, this.config.defaultNamespace);\n const tokenizedNsDir = resolveNamespaceDir(\n this.config.memoryDir,\n namespaceIdentityToken(this.config.defaultNamespace),\n );\n const tokenizedHasData =\n (await exists(tokenizedNsDir)) && (await hasAnyNamespaceStorageMarker(tokenizedNsDir, { includeRuntimeState: true }));\n const nsDir = tokenizedHasData\n ? tokenizedNsDir\n : (await exists(legacyNsDir)) ? legacyNsDir : tokenizedNsDir;\n this.defaultNsRootResolved =\n (await exists(nsDir)) && !(await hasAnyLegacyData(this.config.memoryDir))\n ? nsDir\n : this.config.memoryDir;\n return this.defaultNsRootResolved;\n }\n\n private async namespaceRoot(namespace: string): Promise<string> {\n // NOTE: only used after defaultNamespaceRoot() resolution.\n if (!this.config.namespacesEnabled) return this.config.memoryDir;\n if (namespace === this.config.defaultNamespace) {\n return this.defaultNsRootResolved ?? this.config.memoryDir;\n }\n const legacyRoot = resolveNamespaceDir(this.config.memoryDir, namespace);\n const tokenizedRoot = resolveNamespaceDir(this.config.memoryDir, namespaceIdentityToken(namespace));\n if ((await exists(tokenizedRoot)) && (await hasAnyNamespaceStorageMarker(tokenizedRoot, { includeRuntimeState: true }))) {\n return tokenizedRoot;\n }\n return (await exists(legacyRoot)) ? legacyRoot : tokenizedRoot;\n }\n\n async storageFor(namespace: string): Promise<StorageManager> {\n const ns = normalizeNamespaceIdentity(namespace || this.config.defaultNamespace);\n if (ns !== this.config.defaultNamespace && !isSafeRouteNamespace(ns)) {\n throw new Error(`unsafe namespace: ${ns}`);\n }\n // Even when the default namespace is exempt from the check above, every\n // on-disk path is built through resolveNamespaceDir(), which rejects\n // traversal segments — so an unsafe configured default still cannot escape\n // <memoryDir>/namespaces (CodeQL js/path-injection).\n\n let root: string;\n if (ns === this.config.defaultNamespace) {\n root = await this.defaultNamespaceRoot();\n const cached = this.cache.get(ns);\n if (cached && cached.dir === root) {\n return cached;\n }\n } else {\n const cached = this.cache.get(ns);\n root = await this.namespaceRoot(ns);\n if (cached && cached.dir === root) return cached;\n }\n\n const sm = new StorageManager(root, this.config.entitySchemas);\n // Propagate the inline-attribution template so that router-created storages\n // (used by extraction and shared-promotion paths) strip citations consistently,\n // matching the behaviour of the primary this.storage instance in the orchestrator.\n sm.citationTemplate = this.config.inlineSourceAttributionFormat;\n this.cache.set(ns, sm);\n return sm;\n }\n}\n","/**\n * @remnic/core — Category Directory Map\n *\n * Shared mapping of memory category names to directory names.\n * Single source of truth — import from here instead of copy-pasting.\n */\n\nimport path from \"node:path\";\n\nexport const CATEGORY_DIR_MAP: Record<string, string> = {\n correction: \"corrections\",\n question: \"questions\",\n preference: \"preferences\",\n decision: \"decisions\",\n moment: \"moments\",\n commitment: \"commitments\",\n principle: \"principles\",\n rule: \"rules\",\n skill: \"skills\",\n relationship: \"relationships\",\n procedure: \"procedures\",\n reasoning_trace: \"reasoning-traces\",\n};\n\n/** All directory names derived from CATEGORY_DIR_MAP, plus \"facts\" (the default). */\nexport const ALL_CATEGORY_DIRS: string[] = [\n \"facts\",\n ...Object.values(CATEGORY_DIR_MAP),\n];\n\n/** All category keys (singular form) — used when iterating categories and calling getCategoryDir. */\nexport const ALL_CATEGORY_KEYS: string[] = [\n \"fact\",\n ...Object.keys(CATEGORY_DIR_MAP),\n];\n\n/**\n * Resolve a category name to its directory path under memoryDir.\n * Falls back to `facts/` for unknown categories.\n */\nexport function getCategoryDir(memoryDir: string, category: string): string {\n const dir = Object.hasOwn(CATEGORY_DIR_MAP, category)\n ? CATEGORY_DIR_MAP[category]\n : undefined;\n return dir ? path.join(memoryDir, dir) : path.join(memoryDir, \"facts\");\n}\n"],"mappings":"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","names":["path","path"]}
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  ALL_CATEGORY_DIRS,
6
6
  NamespaceStorageRouter
7
- } from "./chunk-VMGLYN42.js";
7
+ } from "./chunk-XQNPGNKK.js";
8
8
  import {
9
9
  namespaceIdentityFromToken,
10
10
  namespaceIdentityToken
@@ -202,4 +202,4 @@ export {
202
202
  verifyNamespaces,
203
203
  runNamespaceMigration
204
204
  };
205
- //# sourceMappingURL=chunk-OBIRVF36.js.map
205
+ //# sourceMappingURL=chunk-YEEAADCI.js.map
package/dist/cli.js CHANGED
@@ -89,7 +89,7 @@ import {
89
89
  runWorkProductStatusCliCommand,
90
90
  runWorkProjectCliCommand,
91
91
  runWorkTaskCliCommand
92
- } from "./chunk-KGLPJROV.js";
92
+ } from "./chunk-4EWRLK3C.js";
93
93
  import "./chunk-MC4FJXPA.js";
94
94
  import "./chunk-LQHDIS7L.js";
95
95
  import "./chunk-7F7Z6MOS.js";
@@ -118,11 +118,11 @@ import "./chunk-H2NCNXMS.js";
118
118
  import "./chunk-PU44GBL4.js";
119
119
  import "./chunk-YR6GIWWY.js";
120
120
  import "./chunk-CIOMS6DI.js";
121
- import "./chunk-X4QQB7O6.js";
121
+ import "./chunk-FH3PPO42.js";
122
122
  import "./chunk-3QSU4NFF.js";
123
123
  import "./chunk-TGQ2NTWH.js";
124
- import "./chunk-TNOWU6RP.js";
125
- import "./chunk-OBIRVF36.js";
124
+ import "./chunk-HA5SI4GK.js";
125
+ import "./chunk-YEEAADCI.js";
126
126
  import "./chunk-3T74IZB3.js";
127
127
  import "./chunk-HL4DB7TO.js";
128
128
  import "./chunk-YNDLCWXS.js";
@@ -152,7 +152,7 @@ import "./chunk-CYEPCZN5.js";
152
152
  import "./chunk-DCGT4FPP.js";
153
153
  import "./chunk-Q4CAQGKQ.js";
154
154
  import "./chunk-CINZGPSJ.js";
155
- import "./chunk-VMGLYN42.js";
155
+ import "./chunk-XQNPGNKK.js";
156
156
  import "./chunk-ZFXCQPNO.js";
157
157
  import "./chunk-Q6YIJGXJ.js";
158
158
  import "./chunk-ORFGK3XI.js";
@@ -176,14 +176,14 @@ import "./chunk-LMDRGRJ2.js";
176
176
  import "./chunk-OKTXM5H4.js";
177
177
  import "./chunk-3UXOZBHV.js";
178
178
  import "./chunk-4WMCPJWX.js";
179
- import "./chunk-T7N6KQGS.js";
179
+ import "./chunk-5GOMXHLC.js";
180
180
  import "./chunk-PHK3HARR.js";
181
181
  import "./chunk-Z5LAYHGJ.js";
182
182
  import "./chunk-LBJBNWS2.js";
183
183
  import "./chunk-HQ6NIBL6.js";
184
184
  import "./chunk-PVGDJXVK.js";
185
185
  import "./chunk-OADWQ5CR.js";
186
- import "./chunk-NM5NQYJE.js";
186
+ import "./chunk-THTIZJZA.js";
187
187
  import "./chunk-SEDEKFYQ.js";
188
188
  import "./chunk-2QSZNTDO.js";
189
189
  import "./chunk-RSUYKGGZ.js";
@@ -191,10 +191,10 @@ import "./chunk-42NQ7AVG.js";
191
191
  import "./chunk-TMSXWOBZ.js";
192
192
  import "./chunk-J64TK33U.js";
193
193
  import "./chunk-7RXCMVFQ.js";
194
- import "./chunk-5OHHEORR.js";
194
+ import "./chunk-TIPYPLLQ.js";
195
195
  import "./chunk-6L46YAEZ.js";
196
196
  import "./chunk-D24OXEPB.js";
197
- import "./chunk-ZK32E74R.js";
197
+ import "./chunk-F4QTFIB4.js";
198
198
  import "./chunk-GDASG7NC.js";
199
199
  import "./chunk-GDB4J2H3.js";
200
200
  import "./chunk-DGNQRNLL.js";
@@ -206,9 +206,9 @@ import "./chunk-5BTCT236.js";
206
206
  import "./chunk-EDQVAMQI.js";
207
207
  import "./chunk-JGSKJHF7.js";
208
208
  import "./chunk-BPSGLMQ4.js";
209
- import "./chunk-JQDZQ4TB.js";
209
+ import "./chunk-BMFZLLNI.js";
210
210
  import "./chunk-CI7RKSRE.js";
211
- import "./chunk-UEY3VB6W.js";
211
+ import "./chunk-6HMYUWXR.js";
212
212
  import "./chunk-EIR5VLIH.js";
213
213
  import "./chunk-7V2SGZ3H.js";
214
214
  import "./chunk-EI6V5UXY.js";
package/dist/config.js CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  isOpenaiApiKeyDisabled,
5
5
  parseConfig,
6
6
  resolveEnvVars
7
- } from "./chunk-T7N6KQGS.js";
7
+ } from "./chunk-5GOMXHLC.js";
8
8
  import "./chunk-PHK3HARR.js";
9
9
  import "./chunk-Z5LAYHGJ.js";
10
10
  import "./chunk-4DJQYKMN.js";
package/dist/index.js CHANGED
@@ -93,7 +93,7 @@ import {
93
93
  listTrainingExportAdapters,
94
94
  registerTrainingExportAdapter,
95
95
  runBulkImportCliCommand
96
- } from "./chunk-KGLPJROV.js";
96
+ } from "./chunk-4EWRLK3C.js";
97
97
  import "./chunk-MC4FJXPA.js";
98
98
  import "./chunk-LQHDIS7L.js";
99
99
  import "./chunk-7F7Z6MOS.js";
@@ -135,7 +135,7 @@ import {
135
135
  } from "./chunk-PU44GBL4.js";
136
136
  import "./chunk-YR6GIWWY.js";
137
137
  import "./chunk-CIOMS6DI.js";
138
- import "./chunk-X4QQB7O6.js";
138
+ import "./chunk-FH3PPO42.js";
139
139
  import {
140
140
  parseXrayBudgetFlag,
141
141
  parseXrayCliOptions
@@ -145,8 +145,8 @@ import {
145
145
  isAgentAccessSecretRef,
146
146
  resolveAgentAccessAuthToken
147
147
  } from "./chunk-TGQ2NTWH.js";
148
- import "./chunk-TNOWU6RP.js";
149
- import "./chunk-OBIRVF36.js";
148
+ import "./chunk-HA5SI4GK.js";
149
+ import "./chunk-YEEAADCI.js";
150
150
  import {
151
151
  parseStrictCliDate
152
152
  } from "./chunk-3T74IZB3.js";
@@ -182,7 +182,7 @@ import {
182
182
  saveTaxonomy,
183
183
  validateSlug,
184
184
  validateTaxonomy
185
- } from "./chunk-EXUAP5LH.js";
185
+ } from "./chunk-O3U5BPUP.js";
186
186
  import "./chunk-5RIRL3XL.js";
187
187
  import {
188
188
  migrateFromEngram,
@@ -381,7 +381,7 @@ import {
381
381
  ALL_CATEGORY_DIRS,
382
382
  ALL_CATEGORY_KEYS,
383
383
  getCategoryDir
384
- } from "./chunk-VMGLYN42.js";
384
+ } from "./chunk-XQNPGNKK.js";
385
385
  import "./chunk-ZFXCQPNO.js";
386
386
  import "./chunk-Q6YIJGXJ.js";
387
387
  import "./chunk-ORFGK3XI.js";
@@ -462,7 +462,7 @@ import {
462
462
  isOpenaiApiKeyDisabled,
463
463
  parseConfig,
464
464
  resolveEnvVars
465
- } from "./chunk-T7N6KQGS.js";
465
+ } from "./chunk-5GOMXHLC.js";
466
466
  import {
467
467
  coerceInstallExtension
468
468
  } from "./chunk-PHK3HARR.js";
@@ -478,7 +478,7 @@ import "./chunk-PVGDJXVK.js";
478
478
  import "./chunk-OADWQ5CR.js";
479
479
  import {
480
480
  EngramAccessHttpServer
481
- } from "./chunk-NM5NQYJE.js";
481
+ } from "./chunk-THTIZJZA.js";
482
482
  import "./chunk-SEDEKFYQ.js";
483
483
  import "./chunk-2QSZNTDO.js";
484
484
  import "./chunk-RSUYKGGZ.js";
@@ -488,7 +488,7 @@ import "./chunk-J64TK33U.js";
488
488
  import "./chunk-7RXCMVFQ.js";
489
489
  import {
490
490
  EngramMcpServer
491
- } from "./chunk-5OHHEORR.js";
491
+ } from "./chunk-TIPYPLLQ.js";
492
492
  import {
493
493
  REMNIC_CHATGPT_MEMORY_INSPECTOR_CANONICAL_TOOL,
494
494
  REMNIC_CHATGPT_MEMORY_INSPECTOR_MIME_TYPE,
@@ -509,7 +509,7 @@ import {
509
509
  EngramAccessService,
510
510
  computeProcedureStats,
511
511
  formatProcedureStatsText
512
- } from "./chunk-ZK32E74R.js";
512
+ } from "./chunk-F4QTFIB4.js";
513
513
  import "./chunk-GDASG7NC.js";
514
514
  import "./chunk-GDB4J2H3.js";
515
515
  import {
@@ -540,7 +540,7 @@ import {
540
540
  isTrustZoneName
541
541
  } from "./chunk-JGSKJHF7.js";
542
542
  import "./chunk-BPSGLMQ4.js";
543
- import "./chunk-JQDZQ4TB.js";
543
+ import "./chunk-BMFZLLNI.js";
544
544
  import {
545
545
  isLcmMessagePartKind,
546
546
  normalizeExplicitParts,
@@ -551,7 +551,7 @@ import {
551
551
  parsePiMessageParts,
552
552
  partsFromRenderedText
553
553
  } from "./chunk-CI7RKSRE.js";
554
- import "./chunk-UEY3VB6W.js";
554
+ import "./chunk-6HMYUWXR.js";
555
555
  import {
556
556
  memoryWorthOutcomeEligibleCategories,
557
557
  recordMemoryOutcome
@@ -2,7 +2,7 @@ import {
2
2
  listNamespaces,
3
3
  runNamespaceMigration,
4
4
  verifyNamespaces
5
- } from "../chunk-OBIRVF36.js";
5
+ } from "../chunk-YEEAADCI.js";
6
6
  import "../chunk-ZJR7VG5L.js";
7
7
  import "../chunk-YRMKDTKF.js";
8
8
  import "../chunk-JOASJWQR.js";
@@ -13,7 +13,7 @@ import "../chunk-CYEPCZN5.js";
13
13
  import "../chunk-DCGT4FPP.js";
14
14
  import "../chunk-Q4CAQGKQ.js";
15
15
  import "../chunk-CINZGPSJ.js";
16
- import "../chunk-VMGLYN42.js";
16
+ import "../chunk-XQNPGNKK.js";
17
17
  import "../chunk-ZFXCQPNO.js";
18
18
  import "../chunk-Q6YIJGXJ.js";
19
19
  import "../chunk-ORFGK3XI.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  NamespaceStorageRouter
3
- } from "../chunk-VMGLYN42.js";
3
+ } from "../chunk-XQNPGNKK.js";
4
4
  import "../chunk-ZFXCQPNO.js";
5
5
  import "../chunk-7MLB4NCL.js";
6
6
  import "../chunk-5UZXUTVO.js";
@@ -3,9 +3,9 @@ import {
3
3
  deriveObjectiveStateSnapshotsFromObservedMessages,
4
4
  recordObjectiveStateSnapshotsFromAgentMessages,
5
5
  recordObjectiveStateSnapshotsFromObservedMessages
6
- } from "./chunk-JQDZQ4TB.js";
6
+ } from "./chunk-BMFZLLNI.js";
7
7
  import "./chunk-CI7RKSRE.js";
8
- import "./chunk-UEY3VB6W.js";
8
+ import "./chunk-6HMYUWXR.js";
9
9
  import "./chunk-A2IYSXDQ.js";
10
10
  import "./chunk-LPSF4OQH.js";
11
11
  import "./chunk-PZ5AY32C.js";
@@ -5,7 +5,7 @@ import {
5
5
  resolveObjectiveStateStoreDir,
6
6
  searchObjectiveStateSnapshots,
7
7
  validateObjectiveStateSnapshot
8
- } from "./chunk-UEY3VB6W.js";
8
+ } from "./chunk-6HMYUWXR.js";
9
9
  import "./chunk-A2IYSXDQ.js";
10
10
  import "./chunk-LPSF4OQH.js";
11
11
  import "./chunk-PZ5AY32C.js";
@@ -11,8 +11,8 @@ import {
11
11
  summarizeMemoryWorthLegacyCounters,
12
12
  summarizeObservationThroughput,
13
13
  summarizeTierDistribution
14
- } from "./chunk-TNOWU6RP.js";
15
- import "./chunk-OBIRVF36.js";
14
+ } from "./chunk-HA5SI4GK.js";
15
+ import "./chunk-YEEAADCI.js";
16
16
  import "./chunk-AL4RAJL5.js";
17
17
  import "./chunk-YBPYIAA5.js";
18
18
  import "./chunk-ZJR7VG5L.js";
@@ -25,7 +25,7 @@ import "./chunk-CYEPCZN5.js";
25
25
  import "./chunk-DCGT4FPP.js";
26
26
  import "./chunk-Q4CAQGKQ.js";
27
27
  import "./chunk-CINZGPSJ.js";
28
- import "./chunk-VMGLYN42.js";
28
+ import "./chunk-XQNPGNKK.js";
29
29
  import "./chunk-ZFXCQPNO.js";
30
30
  import "./chunk-Q6YIJGXJ.js";
31
31
  import "./chunk-ORFGK3XI.js";
@@ -39,7 +39,7 @@ import "./chunk-BEUDU7Y4.js";
39
39
  import "./chunk-3PY7VHV7.js";
40
40
  import "./chunk-AJU4PJGY.js";
41
41
  import "./chunk-3ONXXHQO.js";
42
- import "./chunk-T7N6KQGS.js";
42
+ import "./chunk-5GOMXHLC.js";
43
43
  import "./chunk-PHK3HARR.js";
44
44
  import "./chunk-Z5LAYHGJ.js";
45
45
  import "./chunk-PVGDJXVK.js";
@@ -27,7 +27,7 @@ import {
27
27
  sanitizeSessionKeyForFilename,
28
28
  shouldFilterLifecycleRecallCandidate,
29
29
  summarizeGraphShadowComparison
30
- } from "./chunk-EXUAP5LH.js";
30
+ } from "./chunk-O3U5BPUP.js";
31
31
  import "./chunk-5RIRL3XL.js";
32
32
  import "./chunk-4HFJQCJZ.js";
33
33
  import "./chunk-6BDVBBBY.js";
@@ -119,7 +119,7 @@ import "./chunk-CYEPCZN5.js";
119
119
  import "./chunk-DCGT4FPP.js";
120
120
  import "./chunk-Q4CAQGKQ.js";
121
121
  import "./chunk-CINZGPSJ.js";
122
- import "./chunk-VMGLYN42.js";
122
+ import "./chunk-XQNPGNKK.js";
123
123
  import "./chunk-ZFXCQPNO.js";
124
124
  import "./chunk-Q6YIJGXJ.js";
125
125
  import "./chunk-ORFGK3XI.js";
@@ -162,7 +162,7 @@ import "./chunk-EDQVAMQI.js";
162
162
  import "./chunk-JGSKJHF7.js";
163
163
  import "./chunk-BPSGLMQ4.js";
164
164
  import "./chunk-CI7RKSRE.js";
165
- import "./chunk-UEY3VB6W.js";
165
+ import "./chunk-6HMYUWXR.js";
166
166
  import "./chunk-EI6V5UXY.js";
167
167
  import "./chunk-QY7YA7OL.js";
168
168
  import "./chunk-NNVTUXEB.js";
@@ -4,16 +4,16 @@ import {
4
4
  recordResumeBundle,
5
5
  resolveResumeBundleDir,
6
6
  validateResumeBundle
7
- } from "./chunk-X4QQB7O6.js";
7
+ } from "./chunk-FH3PPO42.js";
8
8
  import "./chunk-ZRWB5D4H.js";
9
9
  import "./chunk-A6D7A2FW.js";
10
10
  import "./chunk-FF4KLI5W.js";
11
11
  import "./chunk-KFY3SGN7.js";
12
12
  import "./chunk-LMDRGRJ2.js";
13
- import "./chunk-T7N6KQGS.js";
13
+ import "./chunk-5GOMXHLC.js";
14
14
  import "./chunk-PHK3HARR.js";
15
15
  import "./chunk-Z5LAYHGJ.js";
16
- import "./chunk-UEY3VB6W.js";
16
+ import "./chunk-6HMYUWXR.js";
17
17
  import "./chunk-4DJQYKMN.js";
18
18
  import "./chunk-EYIEWJNI.js";
19
19
  import "./chunk-JUC24CTX.js";