@remnic/core 9.3.643 → 9.3.645

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 (73) hide show
  1. package/dist/access-cli.js +12 -12
  2. package/dist/access-http.js +6 -6
  3. package/dist/access-mcp.js +5 -5
  4. package/dist/access-service.js +4 -4
  5. package/dist/briefing.js +2 -2
  6. package/dist/causal-consolidation.js +3 -3
  7. package/dist/{chunk-SZL2GGFY.js → chunk-4BISW7RX.js} +2 -2
  8. package/dist/{chunk-2GCNTHRA.js → chunk-6YLJZ2EU.js} +12 -12
  9. package/dist/{chunk-GYITUZFT.js → chunk-A4BTPHIN.js} +171 -134
  10. package/dist/chunk-A4BTPHIN.js.map +1 -0
  11. package/dist/{chunk-NV2MGIW7.js → chunk-ALUZN7BE.js} +2 -2
  12. package/dist/{chunk-RFSCIBCB.js → chunk-AMACWKM4.js} +2 -2
  13. package/dist/{chunk-S2SEPLLA.js → chunk-BTRL6GG7.js} +3 -3
  14. package/dist/{chunk-RREI7CNM.js → chunk-D6WVJIS3.js} +9 -42
  15. package/dist/chunk-D6WVJIS3.js.map +1 -0
  16. package/dist/{chunk-DM4US77W.js → chunk-IZXOO6NP.js} +5 -3
  17. package/dist/{chunk-DM4US77W.js.map → chunk-IZXOO6NP.js.map} +1 -1
  18. package/dist/{chunk-3UR4SBZF.js → chunk-MBT3ASYV.js} +9 -9
  19. package/dist/{chunk-4HYWWO3W.js → chunk-MCYT2RNT.js} +3 -3
  20. package/dist/{chunk-THWT7RJU.js → chunk-OR7R6M5Z.js} +2 -2
  21. package/dist/{chunk-4MNDVDBS.js → chunk-OTC2KOZ2.js} +2 -2
  22. package/dist/{chunk-TTOYT5RB.js → chunk-PQFUUXWK.js} +2 -2
  23. package/dist/{chunk-EGBH5IPJ.js → chunk-T22TZJWJ.js} +4 -4
  24. package/dist/{chunk-4HYLRROV.js → chunk-UMKPSD35.js} +2 -2
  25. package/dist/{chunk-NLPH23IQ.js → chunk-UMTG2BN2.js} +2 -2
  26. package/dist/{chunk-AK4DSORQ.js → chunk-W5ISYSIL.js} +4 -4
  27. package/dist/{chunk-GJSNDJHR.js → chunk-YOXCJP3A.js} +3 -3
  28. package/dist/{chunk-ECMMM2VE.js → chunk-Z3PZRDLW.js} +2 -2
  29. package/dist/{chunk-TKNTAUA3.js → chunk-ZXWAQFDE.js} +2 -2
  30. package/dist/cli.js +15 -15
  31. package/dist/compounding/engine.js +2 -2
  32. package/dist/connectors/codex-materialize-runner.js +2 -2
  33. package/dist/connectors/index.js +2 -2
  34. package/dist/entity-retrieval.js +2 -2
  35. package/dist/index.js +23 -24
  36. package/dist/index.js.map +1 -1
  37. package/dist/maintenance/memory-governance.js +2 -2
  38. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +2 -2
  39. package/dist/maintenance/rebuild-memory-projection.js +3 -3
  40. package/dist/namespaces/migrate.js +3 -3
  41. package/dist/namespaces/storage.js +2 -2
  42. package/dist/operator-toolkit.js +5 -5
  43. package/dist/orchestrator.js +10 -10
  44. package/dist/schemas.d.ts +22 -22
  45. package/dist/semantic-consolidation.js +3 -3
  46. package/dist/semantic-rule-promotion.js +2 -2
  47. package/dist/semantic-rule-verifier.js +2 -2
  48. package/dist/storage.js +1 -1
  49. package/dist/transfer/types.d.ts +12 -12
  50. package/dist/verified-recall.js +2 -2
  51. package/package.json +1 -1
  52. package/src/storage-fallback-category-dirs.test.ts +389 -0
  53. package/src/storage.ts +36 -4
  54. package/src/utils/category-dir.ts +26 -0
  55. package/dist/chunk-GYITUZFT.js.map +0 -1
  56. package/dist/chunk-RREI7CNM.js.map +0 -1
  57. /package/dist/{chunk-SZL2GGFY.js.map → chunk-4BISW7RX.js.map} +0 -0
  58. /package/dist/{chunk-2GCNTHRA.js.map → chunk-6YLJZ2EU.js.map} +0 -0
  59. /package/dist/{chunk-NV2MGIW7.js.map → chunk-ALUZN7BE.js.map} +0 -0
  60. /package/dist/{chunk-RFSCIBCB.js.map → chunk-AMACWKM4.js.map} +0 -0
  61. /package/dist/{chunk-S2SEPLLA.js.map → chunk-BTRL6GG7.js.map} +0 -0
  62. /package/dist/{chunk-3UR4SBZF.js.map → chunk-MBT3ASYV.js.map} +0 -0
  63. /package/dist/{chunk-4HYWWO3W.js.map → chunk-MCYT2RNT.js.map} +0 -0
  64. /package/dist/{chunk-THWT7RJU.js.map → chunk-OR7R6M5Z.js.map} +0 -0
  65. /package/dist/{chunk-4MNDVDBS.js.map → chunk-OTC2KOZ2.js.map} +0 -0
  66. /package/dist/{chunk-TTOYT5RB.js.map → chunk-PQFUUXWK.js.map} +0 -0
  67. /package/dist/{chunk-EGBH5IPJ.js.map → chunk-T22TZJWJ.js.map} +0 -0
  68. /package/dist/{chunk-4HYLRROV.js.map → chunk-UMKPSD35.js.map} +0 -0
  69. /package/dist/{chunk-NLPH23IQ.js.map → chunk-UMTG2BN2.js.map} +0 -0
  70. /package/dist/{chunk-AK4DSORQ.js.map → chunk-W5ISYSIL.js.map} +0 -0
  71. /package/dist/{chunk-GJSNDJHR.js.map → chunk-YOXCJP3A.js.map} +0 -0
  72. /package/dist/{chunk-ECMMM2VE.js.map → chunk-Z3PZRDLW.js.map} +0 -0
  73. /package/dist/{chunk-TKNTAUA3.js.map → chunk-ZXWAQFDE.js.map} +0 -0
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  compareEntityTimestamps,
6
6
  normalizeEntityName
7
- } from "./chunk-GYITUZFT.js";
7
+ } from "./chunk-A4BTPHIN.js";
8
8
  import {
9
9
  sanitizeMemoryContent
10
10
  } from "./chunk-FVQJYWH7.js";
@@ -677,4 +677,4 @@ export {
677
677
  entityIndexVersion,
678
678
  entityRecentTranscriptLookbackHours
679
679
  };
680
- //# sourceMappingURL=chunk-NV2MGIW7.js.map
680
+ //# sourceMappingURL=chunk-ALUZN7BE.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  StorageManager,
3
3
  normalizeEntityName
4
- } from "./chunk-GYITUZFT.js";
4
+ } from "./chunk-A4BTPHIN.js";
5
5
  import {
6
6
  extractJsonCandidates
7
7
  } from "./chunk-RGMVMVMF.js";
@@ -860,4 +860,4 @@ export {
860
860
  resolveBriefingSaveDir,
861
861
  briefingFilename
862
862
  };
863
- //# sourceMappingURL=chunk-RFSCIBCB.js.map
863
+ //# sourceMappingURL=chunk-AMACWKM4.js.map
@@ -6,10 +6,10 @@ import {
6
6
  } from "./chunk-7WV3F5DQ.js";
7
7
  import {
8
8
  EngramMcpServer
9
- } from "./chunk-GJSNDJHR.js";
9
+ } from "./chunk-YOXCJP3A.js";
10
10
  import {
11
11
  EngramAccessInputError
12
- } from "./chunk-AK4DSORQ.js";
12
+ } from "./chunk-W5ISYSIL.js";
13
13
  import {
14
14
  projectTagProjectId
15
15
  } from "./chunk-6GIKAUTN.js";
@@ -2023,4 +2023,4 @@ function positiveIntQueryParam(value, label) {
2023
2023
  export {
2024
2024
  EngramAccessHttpServer
2025
2025
  };
2026
- //# sourceMappingURL=chunk-S2SEPLLA.js.map
2026
+ //# sourceMappingURL=chunk-BTRL6GG7.js.map
@@ -3,46 +3,16 @@ import {
3
3
  normalizeNamespaceIdentity
4
4
  } from "./chunk-ZFXCQPNO.js";
5
5
  import {
6
+ ALL_CATEGORY_DIRS,
6
7
  StorageManager
7
- } from "./chunk-GYITUZFT.js";
8
+ } from "./chunk-A4BTPHIN.js";
8
9
  import {
9
10
  isSafeRouteNamespace
10
11
  } from "./chunk-U3PN77QT.js";
11
12
 
12
13
  // src/namespaces/storage.ts
13
- import path2 from "path";
14
- import { access, lstat, readdir } from "fs/promises";
15
-
16
- // src/utils/category-dir.ts
17
14
  import path from "path";
18
- var CATEGORY_DIR_MAP = {
19
- correction: "corrections",
20
- question: "questions",
21
- preference: "preferences",
22
- decision: "decisions",
23
- moment: "moments",
24
- commitment: "commitments",
25
- principle: "principles",
26
- rule: "rules",
27
- skill: "skills",
28
- relationship: "relationships",
29
- procedure: "procedures",
30
- reasoning_trace: "reasoning-traces"
31
- };
32
- var ALL_CATEGORY_DIRS = [
33
- "facts",
34
- ...Object.values(CATEGORY_DIR_MAP)
35
- ];
36
- var ALL_CATEGORY_KEYS = [
37
- "fact",
38
- ...Object.keys(CATEGORY_DIR_MAP)
39
- ];
40
- function getCategoryDir(memoryDir, category) {
41
- const dir = Object.hasOwn(CATEGORY_DIR_MAP, category) ? CATEGORY_DIR_MAP[category] : void 0;
42
- return dir ? path.join(memoryDir, dir) : path.join(memoryDir, "facts");
43
- }
44
-
45
- // src/namespaces/storage.ts
15
+ import { access, lstat, readdir } from "fs/promises";
46
16
  async function exists(p) {
47
17
  try {
48
18
  await access(p);
@@ -58,7 +28,7 @@ async function hasStoredEntries(p) {
58
28
  if (!entry.isDirectory()) return true;
59
29
  const children = await readdir(p, { withFileTypes: true });
60
30
  for (const child of children) {
61
- const childPath = path2.join(p, child.name);
31
+ const childPath = path.join(p, child.name);
62
32
  if (child.isSymbolicLink() || child.isFile()) return true;
63
33
  if (child.isDirectory() && await hasStoredEntries(childPath)) return true;
64
34
  }
@@ -68,10 +38,10 @@ async function hasStoredEntries(p) {
68
38
  }
69
39
  }
70
40
  function resolveNamespaceDir(memoryDir, segment) {
71
- if (segment.length === 0 || segment.includes("/") || segment.includes("\\") || segment.includes("..") || path2.isAbsolute(segment)) {
41
+ if (segment.length === 0 || segment.includes("/") || segment.includes("\\") || segment.includes("..") || path.isAbsolute(segment)) {
72
42
  throw new Error(`unsafe namespace path segment: ${segment}`);
73
43
  }
74
- return path2.join(memoryDir, "namespaces", segment);
44
+ return path.join(memoryDir, "namespaces", segment);
75
45
  }
76
46
  var LEGACY_NAMESPACE_CONTENT_CHILDREN = [
77
47
  ...ALL_CATEGORY_DIRS,
@@ -86,14 +56,14 @@ var LEGACY_NAMESPACE_RUNTIME_CHILDREN = ["state"];
86
56
  async function hasAnyLegacyData(rootDir, options = {}) {
87
57
  const children = options.includeRuntimeState === true ? [...LEGACY_NAMESPACE_CONTENT_CHILDREN, ...LEGACY_NAMESPACE_RUNTIME_CHILDREN] : LEGACY_NAMESPACE_CONTENT_CHILDREN;
88
58
  for (const child of children) {
89
- if (await hasStoredEntries(path2.join(rootDir, child))) return true;
59
+ if (await hasStoredEntries(path.join(rootDir, child))) return true;
90
60
  }
91
61
  return false;
92
62
  }
93
63
  async function hasAnyNamespaceStorageMarker(rootDir, options = {}) {
94
64
  const children = options.includeRuntimeState === true ? [...LEGACY_NAMESPACE_CONTENT_CHILDREN, ...LEGACY_NAMESPACE_RUNTIME_CHILDREN] : LEGACY_NAMESPACE_CONTENT_CHILDREN;
95
65
  for (const child of children) {
96
- if (await exists(path2.join(rootDir, child))) return true;
66
+ if (await exists(path.join(rootDir, child))) return true;
97
67
  }
98
68
  return false;
99
69
  }
@@ -156,9 +126,6 @@ var NamespaceStorageRouter = class {
156
126
  };
157
127
 
158
128
  export {
159
- ALL_CATEGORY_DIRS,
160
- ALL_CATEGORY_KEYS,
161
- getCategoryDir,
162
129
  NamespaceStorageRouter
163
130
  };
164
- //# sourceMappingURL=chunk-RREI7CNM.js.map
131
+ //# sourceMappingURL=chunk-D6WVJIS3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/namespaces/storage.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"],"mappings":"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","names":[]}
@@ -1,7 +1,6 @@
1
1
  import {
2
- ALL_CATEGORY_DIRS,
3
2
  NamespaceStorageRouter
4
- } from "./chunk-RREI7CNM.js";
3
+ } from "./chunk-D6WVJIS3.js";
5
4
  import {
6
5
  namespaceCollectionName
7
6
  } from "./chunk-HRXCPKN4.js";
@@ -9,6 +8,9 @@ import {
9
8
  namespaceIdentityFromToken,
10
9
  namespaceIdentityToken
11
10
  } from "./chunk-ZFXCQPNO.js";
11
+ import {
12
+ ALL_CATEGORY_DIRS
13
+ } from "./chunk-A4BTPHIN.js";
12
14
  import {
13
15
  isSafeRouteNamespace
14
16
  } from "./chunk-U3PN77QT.js";
@@ -202,4 +204,4 @@ export {
202
204
  verifyNamespaces,
203
205
  runNamespaceMigration
204
206
  };
205
- //# sourceMappingURL=chunk-DM4US77W.js.map
207
+ //# sourceMappingURL=chunk-IZXOO6NP.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/namespaces/migrate.ts"],"sourcesContent":["import path from \"node:path\";\nimport { access, lstat, mkdir, readdir, realpath, rename, rmdir } from \"node:fs/promises\";\nimport type { PluginConfig } from \"../types.js\";\nimport { NamespaceStorageRouter } from \"./storage.js\";\nimport { namespaceCollectionName } from \"./search.js\";\nimport { isSafeRouteNamespace } from \"../routing/engine.js\";\nimport { namespaceIdentityFromToken, namespaceIdentityToken } from \"./identity.js\";\nimport { ALL_CATEGORY_DIRS } from \"../utils/category-dir.js\";\n\nconst LEGACY_NAMESPACE_CHILDREN = [\n ...ALL_CATEGORY_DIRS,\n \"entities\",\n \"artifacts\",\n \"identity\",\n \"state\",\n \"config\",\n \"summaries\",\n \"profile.md\",\n] as const;\n\nexport interface NamespaceInventoryEntry {\n namespace: string;\n rootDir: string;\n exists: boolean;\n usesLegacyRoot: boolean;\n hasMemoryData: boolean;\n collection: string;\n}\n\nexport interface NamespaceVerifyReport {\n ok: boolean;\n problems: string[];\n namespaces: NamespaceInventoryEntry[];\n}\n\nexport interface NamespaceMigrationMove {\n from: string;\n to: string;\n}\n\nexport interface NamespaceMigrationReport {\n dryRun: boolean;\n fromRoot: string;\n targetRoot: string;\n moved: NamespaceMigrationMove[];\n collection: string;\n}\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 hasAnyLegacyData(rootDir: string): Promise<boolean> {\n for (const child of LEGACY_NAMESPACE_CHILDREN) {\n if (await exists(path.join(rootDir, child))) return true;\n }\n return false;\n}\n\nasync function discoverConfiguredNamespaces(\n config: PluginConfig,\n): Promise<string[]> {\n const discovered = new Set<string>([\n config.defaultNamespace,\n config.sharedNamespace,\n ...config.namespacePolicies.map((policy) => policy.name),\n ]);\n const configuredNamespaces = new Set(discovered);\n\n const namespacesDir = path.join(config.memoryDir, \"namespaces\");\n try {\n const entries = await readdir(namespacesDir, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const namespace = configuredNamespaces.has(entry.name)\n ? entry.name\n : namespaceIdentityFromToken(entry.name) ?? entry.name;\n if (isSafeRouteNamespace(namespace)) {\n discovered.add(namespace);\n }\n }\n } catch {\n // No namespace directory yet.\n }\n\n return [...discovered];\n}\n\nexport async function listNamespaces(options: {\n config: PluginConfig;\n storageRouter?: NamespaceStorageRouter;\n}): Promise<NamespaceInventoryEntry[]> {\n const storageRouter = options.storageRouter ?? new NamespaceStorageRouter(options.config);\n const namespaces = await discoverConfiguredNamespaces(options.config);\n const items = await Promise.all(\n namespaces.map(async (namespace) => {\n const storage = await storageRouter.storageFor(namespace);\n const usesLegacyRoot =\n namespace === options.config.defaultNamespace &&\n storage.dir === options.config.memoryDir;\n return {\n namespace,\n rootDir: storage.dir,\n exists: await exists(storage.dir),\n usesLegacyRoot,\n hasMemoryData: await hasAnyLegacyData(storage.dir),\n collection: namespaceCollectionName(options.config.qmdCollection, namespace, {\n defaultNamespace: options.config.defaultNamespace,\n useLegacyDefaultCollection: usesLegacyRoot,\n }),\n } satisfies NamespaceInventoryEntry;\n }),\n );\n\n return items.sort((a, b) => a.namespace.localeCompare(b.namespace));\n}\n\nexport async function verifyNamespaces(options: {\n config: PluginConfig;\n storageRouter?: NamespaceStorageRouter;\n}): Promise<NamespaceVerifyReport> {\n const namespaces = await listNamespaces(options);\n const problems: string[] = [];\n\n for (const entry of namespaces) {\n if (entry.exists && !entry.hasMemoryData) {\n problems.push(`${entry.namespace}: root exists but contains no Engram data`);\n }\n }\n\n return {\n ok: problems.length === 0,\n problems,\n namespaces,\n };\n}\n\nexport async function runNamespaceMigration(options: {\n config: PluginConfig;\n to: string;\n dryRun?: boolean;\n renameFn?: typeof rename;\n}): Promise<NamespaceMigrationReport> {\n if (!options.config.namespacesEnabled) {\n throw new Error(\"Namespaces are disabled.\");\n }\n\n const targetNamespace = options.to.trim();\n if (!isSafeRouteNamespace(targetNamespace)) {\n throw new Error(`Invalid namespace: ${options.to}`);\n }\n\n const targetRoot = path.join(\n options.config.memoryDir,\n \"namespaces\",\n namespaceIdentityToken(targetNamespace),\n );\n const moved: NamespaceMigrationMove[] = [];\n const renamePath = options.renameFn ?? rename;\n\n for (const child of LEGACY_NAMESPACE_CHILDREN) {\n const from = path.join(options.config.memoryDir, child);\n if (!(await exists(from))) continue;\n const to = path.join(targetRoot, child);\n if (await exists(to)) {\n throw new Error(`Target already contains ${child}: ${to}`);\n }\n const sourceStat = await lstat(from);\n if (sourceStat.isSymbolicLink()) {\n throw new Error(`Refusing to migrate symlinked legacy path: ${from}`);\n }\n moved.push({ from, to });\n }\n\n if (!options.dryRun && moved.length > 0) {\n await assertSafeNamespaceTarget(options.config.memoryDir, targetRoot);\n await mkdir(targetRoot, { recursive: true });\n await assertSafeNamespaceTarget(options.config.memoryDir, targetRoot);\n const completed: NamespaceMigrationMove[] = [];\n try {\n for (const move of moved) {\n await renamePath(move.from, move.to);\n completed.push(move);\n }\n } catch (cause) {\n const rollbackErrors: string[] = [];\n for (const move of completed.reverse()) {\n try {\n if (!(await exists(move.from)) && (await exists(move.to))) {\n await rename(move.to, move.from);\n }\n } catch (rollbackCause) {\n rollbackErrors.push(rollbackCause instanceof Error ? rollbackCause.message : String(rollbackCause));\n }\n }\n try {\n await rmdir(targetRoot);\n } catch {\n // Target may predate migration or still contain unrelated files.\n }\n const message = cause instanceof Error ? cause.message : String(cause);\n throw new Error(\n `Namespace migration failed and was rolled back: ${message}` +\n (rollbackErrors.length > 0 ? `; rollback errors: ${rollbackErrors.join(\"; \")}` : \"\"),\n { cause },\n );\n }\n }\n\n return {\n dryRun: options.dryRun === true,\n fromRoot: options.config.memoryDir,\n targetRoot,\n moved,\n collection: namespaceCollectionName(options.config.qmdCollection, targetNamespace, {\n defaultNamespace: options.config.defaultNamespace,\n useLegacyDefaultCollection: false,\n }),\n };\n}\n\nasync function assertSafeNamespaceTarget(memoryDir: string, targetRoot: string): Promise<void> {\n const memoryReal = await realpath(memoryDir);\n const namespacesDir = path.join(memoryDir, \"namespaces\");\n if (await exists(namespacesDir)) {\n const namespacesStat = await lstat(namespacesDir);\n if (namespacesStat.isSymbolicLink()) {\n throw new Error(`Refusing to migrate through symlinked namespaces directory: ${namespacesDir}`);\n }\n const namespacesReal = await realpath(namespacesDir);\n if (!isPathInside(memoryReal, namespacesReal)) {\n throw new Error(`Refusing to migrate through namespaces directory outside memoryDir: ${namespacesDir}`);\n }\n }\n if (await exists(targetRoot)) {\n const targetStat = await lstat(targetRoot);\n if (targetStat.isSymbolicLink()) {\n throw new Error(`Refusing to migrate into symlinked namespace root: ${targetRoot}`);\n }\n const targetReal = await realpath(targetRoot);\n if (!isPathInside(memoryReal, targetReal)) {\n throw new Error(`Refusing to migrate into namespace root outside memoryDir: ${targetRoot}`);\n }\n }\n}\n\nfunction isPathInside(root: string, child: string): boolean {\n const relative = path.relative(root, child);\n return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative));\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,OAAO,UAAU;AACjB,SAAS,QAAQ,OAAO,OAAO,SAAS,UAAU,QAAQ,aAAa;AAQvE,IAAM,4BAA4B;AAAA,EAChC,GAAG;AAAA,EACH;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AA8BA,eAAe,OAAO,GAA6B;AACjD,MAAI;AACF,UAAM,OAAO,CAAC;AACd,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAe,iBAAiB,SAAmC;AACjE,aAAW,SAAS,2BAA2B;AAC7C,QAAI,MAAM,OAAO,KAAK,KAAK,SAAS,KAAK,CAAC,EAAG,QAAO;AAAA,EACtD;AACA,SAAO;AACT;AAEA,eAAe,6BACb,QACmB;AACnB,QAAM,aAAa,oBAAI,IAAY;AAAA,IACjC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,GAAG,OAAO,kBAAkB,IAAI,CAAC,WAAW,OAAO,IAAI;AAAA,EACzD,CAAC;AACD,QAAM,uBAAuB,IAAI,IAAI,UAAU;AAE/C,QAAM,gBAAgB,KAAK,KAAK,OAAO,WAAW,YAAY;AAC9D,MAAI;AACF,UAAM,UAAU,MAAM,QAAQ,eAAe,EAAE,eAAe,KAAK,CAAC;AACpE,eAAW,SAAS,SAAS;AAC3B,UAAI,CAAC,MAAM,YAAY,EAAG;AAC1B,YAAM,YAAY,qBAAqB,IAAI,MAAM,IAAI,IACjD,MAAM,OACN,2BAA2B,MAAM,IAAI,KAAK,MAAM;AACpD,UAAI,qBAAqB,SAAS,GAAG;AACnC,mBAAW,IAAI,SAAS;AAAA,MAC1B;AAAA,IACF;AAAA,EACF,QAAQ;AAAA,EAER;AAEA,SAAO,CAAC,GAAG,UAAU;AACvB;AAEA,eAAsB,eAAe,SAGE;AACrC,QAAM,gBAAgB,QAAQ,iBAAiB,IAAI,uBAAuB,QAAQ,MAAM;AACxF,QAAM,aAAa,MAAM,6BAA6B,QAAQ,MAAM;AACpE,QAAM,QAAQ,MAAM,QAAQ;AAAA,IAC1B,WAAW,IAAI,OAAO,cAAc;AAClC,YAAM,UAAU,MAAM,cAAc,WAAW,SAAS;AACxD,YAAM,iBACJ,cAAc,QAAQ,OAAO,oBAC7B,QAAQ,QAAQ,QAAQ,OAAO;AACjC,aAAO;AAAA,QACL;AAAA,QACA,SAAS,QAAQ;AAAA,QACjB,QAAQ,MAAM,OAAO,QAAQ,GAAG;AAAA,QAChC;AAAA,QACA,eAAe,MAAM,iBAAiB,QAAQ,GAAG;AAAA,QACjD,YAAY,wBAAwB,QAAQ,OAAO,eAAe,WAAW;AAAA,UAC3E,kBAAkB,QAAQ,OAAO;AAAA,UACjC,4BAA4B;AAAA,QAC9B,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,MAAM,KAAK,CAAC,GAAG,MAAM,EAAE,UAAU,cAAc,EAAE,SAAS,CAAC;AACpE;AAEA,eAAsB,iBAAiB,SAGJ;AACjC,QAAM,aAAa,MAAM,eAAe,OAAO;AAC/C,QAAM,WAAqB,CAAC;AAE5B,aAAW,SAAS,YAAY;AAC9B,QAAI,MAAM,UAAU,CAAC,MAAM,eAAe;AACxC,eAAS,KAAK,GAAG,MAAM,SAAS,2CAA2C;AAAA,IAC7E;AAAA,EACF;AAEA,SAAO;AAAA,IACL,IAAI,SAAS,WAAW;AAAA,IACxB;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,sBAAsB,SAKN;AACpC,MAAI,CAAC,QAAQ,OAAO,mBAAmB;AACrC,UAAM,IAAI,MAAM,0BAA0B;AAAA,EAC5C;AAEA,QAAM,kBAAkB,QAAQ,GAAG,KAAK;AACxC,MAAI,CAAC,qBAAqB,eAAe,GAAG;AAC1C,UAAM,IAAI,MAAM,sBAAsB,QAAQ,EAAE,EAAE;AAAA,EACpD;AAEA,QAAM,aAAa,KAAK;AAAA,IACtB,QAAQ,OAAO;AAAA,IACf;AAAA,IACA,uBAAuB,eAAe;AAAA,EACxC;AACA,QAAM,QAAkC,CAAC;AACzC,QAAM,aAAa,QAAQ,YAAY;AAEvC,aAAW,SAAS,2BAA2B;AAC7C,UAAM,OAAO,KAAK,KAAK,QAAQ,OAAO,WAAW,KAAK;AACtD,QAAI,CAAE,MAAM,OAAO,IAAI,EAAI;AAC3B,UAAM,KAAK,KAAK,KAAK,YAAY,KAAK;AACtC,QAAI,MAAM,OAAO,EAAE,GAAG;AACpB,YAAM,IAAI,MAAM,2BAA2B,KAAK,KAAK,EAAE,EAAE;AAAA,IAC3D;AACA,UAAM,aAAa,MAAM,MAAM,IAAI;AACnC,QAAI,WAAW,eAAe,GAAG;AAC/B,YAAM,IAAI,MAAM,8CAA8C,IAAI,EAAE;AAAA,IACtE;AACA,UAAM,KAAK,EAAE,MAAM,GAAG,CAAC;AAAA,EACzB;AAEA,MAAI,CAAC,QAAQ,UAAU,MAAM,SAAS,GAAG;AACvC,UAAM,0BAA0B,QAAQ,OAAO,WAAW,UAAU;AACpE,UAAM,MAAM,YAAY,EAAE,WAAW,KAAK,CAAC;AAC3C,UAAM,0BAA0B,QAAQ,OAAO,WAAW,UAAU;AACpE,UAAM,YAAsC,CAAC;AAC7C,QAAI;AACF,iBAAW,QAAQ,OAAO;AACxB,cAAM,WAAW,KAAK,MAAM,KAAK,EAAE;AACnC,kBAAU,KAAK,IAAI;AAAA,MACrB;AAAA,IACF,SAAS,OAAO;AACd,YAAM,iBAA2B,CAAC;AAClC,iBAAW,QAAQ,UAAU,QAAQ,GAAG;AACtC,YAAI;AACF,cAAI,CAAE,MAAM,OAAO,KAAK,IAAI,KAAO,MAAM,OAAO,KAAK,EAAE,GAAI;AACzD,kBAAM,OAAO,KAAK,IAAI,KAAK,IAAI;AAAA,UACjC;AAAA,QACF,SAAS,eAAe;AACtB,yBAAe,KAAK,yBAAyB,QAAQ,cAAc,UAAU,OAAO,aAAa,CAAC;AAAA,QACpG;AAAA,MACF;AACA,UAAI;AACF,cAAM,MAAM,UAAU;AAAA,MACxB,QAAQ;AAAA,MAER;AACA,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,YAAM,IAAI;AAAA,QACR,mDAAmD,OAAO,MACvD,eAAe,SAAS,IAAI,sBAAsB,eAAe,KAAK,IAAI,CAAC,KAAK;AAAA,QACnF,EAAE,MAAM;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,QAAQ,QAAQ,WAAW;AAAA,IAC3B,UAAU,QAAQ,OAAO;AAAA,IACzB;AAAA,IACA;AAAA,IACA,YAAY,wBAAwB,QAAQ,OAAO,eAAe,iBAAiB;AAAA,MACjF,kBAAkB,QAAQ,OAAO;AAAA,MACjC,4BAA4B;AAAA,IAC9B,CAAC;AAAA,EACH;AACF;AAEA,eAAe,0BAA0B,WAAmB,YAAmC;AAC7F,QAAM,aAAa,MAAM,SAAS,SAAS;AAC3C,QAAM,gBAAgB,KAAK,KAAK,WAAW,YAAY;AACvD,MAAI,MAAM,OAAO,aAAa,GAAG;AAC/B,UAAM,iBAAiB,MAAM,MAAM,aAAa;AAChD,QAAI,eAAe,eAAe,GAAG;AACnC,YAAM,IAAI,MAAM,+DAA+D,aAAa,EAAE;AAAA,IAChG;AACA,UAAM,iBAAiB,MAAM,SAAS,aAAa;AACnD,QAAI,CAAC,aAAa,YAAY,cAAc,GAAG;AAC7C,YAAM,IAAI,MAAM,uEAAuE,aAAa,EAAE;AAAA,IACxG;AAAA,EACF;AACA,MAAI,MAAM,OAAO,UAAU,GAAG;AAC5B,UAAM,aAAa,MAAM,MAAM,UAAU;AACzC,QAAI,WAAW,eAAe,GAAG;AAC/B,YAAM,IAAI,MAAM,sDAAsD,UAAU,EAAE;AAAA,IACpF;AACA,UAAM,aAAa,MAAM,SAAS,UAAU;AAC5C,QAAI,CAAC,aAAa,YAAY,UAAU,GAAG;AACzC,YAAM,IAAI,MAAM,8DAA8D,UAAU,EAAE;AAAA,IAC5F;AAAA,EACF;AACF;AAEA,SAAS,aAAa,MAAc,OAAwB;AAC1D,QAAM,WAAW,KAAK,SAAS,MAAM,KAAK;AAC1C,SAAO,aAAa,MAAO,CAAC,SAAS,WAAW,IAAI,KAAK,CAAC,KAAK,WAAW,QAAQ;AACpF;","names":[]}
1
+ {"version":3,"sources":["../src/namespaces/migrate.ts"],"sourcesContent":["import path from \"node:path\";\nimport { access, lstat, mkdir, readdir, realpath, rename, rmdir } from \"node:fs/promises\";\nimport type { PluginConfig } from \"../types.js\";\nimport { NamespaceStorageRouter } from \"./storage.js\";\nimport { namespaceCollectionName } from \"./search.js\";\nimport { isSafeRouteNamespace } from \"../routing/engine.js\";\nimport { namespaceIdentityFromToken, namespaceIdentityToken } from \"./identity.js\";\nimport { ALL_CATEGORY_DIRS } from \"../utils/category-dir.js\";\n\nconst LEGACY_NAMESPACE_CHILDREN = [\n ...ALL_CATEGORY_DIRS,\n \"entities\",\n \"artifacts\",\n \"identity\",\n \"state\",\n \"config\",\n \"summaries\",\n \"profile.md\",\n] as const;\n\nexport interface NamespaceInventoryEntry {\n namespace: string;\n rootDir: string;\n exists: boolean;\n usesLegacyRoot: boolean;\n hasMemoryData: boolean;\n collection: string;\n}\n\nexport interface NamespaceVerifyReport {\n ok: boolean;\n problems: string[];\n namespaces: NamespaceInventoryEntry[];\n}\n\nexport interface NamespaceMigrationMove {\n from: string;\n to: string;\n}\n\nexport interface NamespaceMigrationReport {\n dryRun: boolean;\n fromRoot: string;\n targetRoot: string;\n moved: NamespaceMigrationMove[];\n collection: string;\n}\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 hasAnyLegacyData(rootDir: string): Promise<boolean> {\n for (const child of LEGACY_NAMESPACE_CHILDREN) {\n if (await exists(path.join(rootDir, child))) return true;\n }\n return false;\n}\n\nasync function discoverConfiguredNamespaces(\n config: PluginConfig,\n): Promise<string[]> {\n const discovered = new Set<string>([\n config.defaultNamespace,\n config.sharedNamespace,\n ...config.namespacePolicies.map((policy) => policy.name),\n ]);\n const configuredNamespaces = new Set(discovered);\n\n const namespacesDir = path.join(config.memoryDir, \"namespaces\");\n try {\n const entries = await readdir(namespacesDir, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const namespace = configuredNamespaces.has(entry.name)\n ? entry.name\n : namespaceIdentityFromToken(entry.name) ?? entry.name;\n if (isSafeRouteNamespace(namespace)) {\n discovered.add(namespace);\n }\n }\n } catch {\n // No namespace directory yet.\n }\n\n return [...discovered];\n}\n\nexport async function listNamespaces(options: {\n config: PluginConfig;\n storageRouter?: NamespaceStorageRouter;\n}): Promise<NamespaceInventoryEntry[]> {\n const storageRouter = options.storageRouter ?? new NamespaceStorageRouter(options.config);\n const namespaces = await discoverConfiguredNamespaces(options.config);\n const items = await Promise.all(\n namespaces.map(async (namespace) => {\n const storage = await storageRouter.storageFor(namespace);\n const usesLegacyRoot =\n namespace === options.config.defaultNamespace &&\n storage.dir === options.config.memoryDir;\n return {\n namespace,\n rootDir: storage.dir,\n exists: await exists(storage.dir),\n usesLegacyRoot,\n hasMemoryData: await hasAnyLegacyData(storage.dir),\n collection: namespaceCollectionName(options.config.qmdCollection, namespace, {\n defaultNamespace: options.config.defaultNamespace,\n useLegacyDefaultCollection: usesLegacyRoot,\n }),\n } satisfies NamespaceInventoryEntry;\n }),\n );\n\n return items.sort((a, b) => a.namespace.localeCompare(b.namespace));\n}\n\nexport async function verifyNamespaces(options: {\n config: PluginConfig;\n storageRouter?: NamespaceStorageRouter;\n}): Promise<NamespaceVerifyReport> {\n const namespaces = await listNamespaces(options);\n const problems: string[] = [];\n\n for (const entry of namespaces) {\n if (entry.exists && !entry.hasMemoryData) {\n problems.push(`${entry.namespace}: root exists but contains no Engram data`);\n }\n }\n\n return {\n ok: problems.length === 0,\n problems,\n namespaces,\n };\n}\n\nexport async function runNamespaceMigration(options: {\n config: PluginConfig;\n to: string;\n dryRun?: boolean;\n renameFn?: typeof rename;\n}): Promise<NamespaceMigrationReport> {\n if (!options.config.namespacesEnabled) {\n throw new Error(\"Namespaces are disabled.\");\n }\n\n const targetNamespace = options.to.trim();\n if (!isSafeRouteNamespace(targetNamespace)) {\n throw new Error(`Invalid namespace: ${options.to}`);\n }\n\n const targetRoot = path.join(\n options.config.memoryDir,\n \"namespaces\",\n namespaceIdentityToken(targetNamespace),\n );\n const moved: NamespaceMigrationMove[] = [];\n const renamePath = options.renameFn ?? rename;\n\n for (const child of LEGACY_NAMESPACE_CHILDREN) {\n const from = path.join(options.config.memoryDir, child);\n if (!(await exists(from))) continue;\n const to = path.join(targetRoot, child);\n if (await exists(to)) {\n throw new Error(`Target already contains ${child}: ${to}`);\n }\n const sourceStat = await lstat(from);\n if (sourceStat.isSymbolicLink()) {\n throw new Error(`Refusing to migrate symlinked legacy path: ${from}`);\n }\n moved.push({ from, to });\n }\n\n if (!options.dryRun && moved.length > 0) {\n await assertSafeNamespaceTarget(options.config.memoryDir, targetRoot);\n await mkdir(targetRoot, { recursive: true });\n await assertSafeNamespaceTarget(options.config.memoryDir, targetRoot);\n const completed: NamespaceMigrationMove[] = [];\n try {\n for (const move of moved) {\n await renamePath(move.from, move.to);\n completed.push(move);\n }\n } catch (cause) {\n const rollbackErrors: string[] = [];\n for (const move of completed.reverse()) {\n try {\n if (!(await exists(move.from)) && (await exists(move.to))) {\n await rename(move.to, move.from);\n }\n } catch (rollbackCause) {\n rollbackErrors.push(rollbackCause instanceof Error ? rollbackCause.message : String(rollbackCause));\n }\n }\n try {\n await rmdir(targetRoot);\n } catch {\n // Target may predate migration or still contain unrelated files.\n }\n const message = cause instanceof Error ? cause.message : String(cause);\n throw new Error(\n `Namespace migration failed and was rolled back: ${message}` +\n (rollbackErrors.length > 0 ? `; rollback errors: ${rollbackErrors.join(\"; \")}` : \"\"),\n { cause },\n );\n }\n }\n\n return {\n dryRun: options.dryRun === true,\n fromRoot: options.config.memoryDir,\n targetRoot,\n moved,\n collection: namespaceCollectionName(options.config.qmdCollection, targetNamespace, {\n defaultNamespace: options.config.defaultNamespace,\n useLegacyDefaultCollection: false,\n }),\n };\n}\n\nasync function assertSafeNamespaceTarget(memoryDir: string, targetRoot: string): Promise<void> {\n const memoryReal = await realpath(memoryDir);\n const namespacesDir = path.join(memoryDir, \"namespaces\");\n if (await exists(namespacesDir)) {\n const namespacesStat = await lstat(namespacesDir);\n if (namespacesStat.isSymbolicLink()) {\n throw new Error(`Refusing to migrate through symlinked namespaces directory: ${namespacesDir}`);\n }\n const namespacesReal = await realpath(namespacesDir);\n if (!isPathInside(memoryReal, namespacesReal)) {\n throw new Error(`Refusing to migrate through namespaces directory outside memoryDir: ${namespacesDir}`);\n }\n }\n if (await exists(targetRoot)) {\n const targetStat = await lstat(targetRoot);\n if (targetStat.isSymbolicLink()) {\n throw new Error(`Refusing to migrate into symlinked namespace root: ${targetRoot}`);\n }\n const targetReal = await realpath(targetRoot);\n if (!isPathInside(memoryReal, targetReal)) {\n throw new Error(`Refusing to migrate into namespace root outside memoryDir: ${targetRoot}`);\n }\n }\n}\n\nfunction isPathInside(root: string, child: string): boolean {\n const relative = path.relative(root, child);\n return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative));\n}\n"],"mappings":"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","names":[]}
@@ -29,7 +29,7 @@ import {
29
29
  import {
30
30
  CompoundingEngine,
31
31
  defaultTierMigrationCycleBudget
32
- } from "./chunk-ECMMM2VE.js";
32
+ } from "./chunk-Z3PZRDLW.js";
33
33
  import {
34
34
  SharedContextManager
35
35
  } from "./chunk-DRD2Q7HQ.js";
@@ -175,7 +175,7 @@ import {
175
175
  buildEntityRecallSection,
176
176
  entityRecentTranscriptLookbackHours,
177
177
  readRecentEntityTranscriptEntries
178
- } from "./chunk-NV2MGIW7.js";
178
+ } from "./chunk-ALUZN7BE.js";
179
179
  import {
180
180
  buildEventOrderRecallSection,
181
181
  shouldRecallEventOrderEvidence
@@ -210,7 +210,7 @@ import {
210
210
  materializeAfterSemanticConsolidation,
211
211
  parseConsolidationResponse,
212
212
  parseOperatorAwareConsolidationResponse
213
- } from "./chunk-TKNTAUA3.js";
213
+ } from "./chunk-ZXWAQFDE.js";
214
214
  import {
215
215
  normalizeReplaySessionKey
216
216
  } from "./chunk-2PRQG7PV.js";
@@ -219,13 +219,13 @@ import {
219
219
  } from "./chunk-X6IRLNOO.js";
220
220
  import {
221
221
  searchVerifiedEpisodes
222
- } from "./chunk-4HYLRROV.js";
222
+ } from "./chunk-UMKPSD35.js";
223
223
  import {
224
224
  ThreadingManager
225
225
  } from "./chunk-W4RVMTHR.js";
226
226
  import {
227
227
  searchVerifiedSemanticRules
228
- } from "./chunk-SZL2GGFY.js";
228
+ } from "./chunk-4BISW7RX.js";
229
229
  import {
230
230
  searchWorkProductLedgerEntries
231
231
  } from "./chunk-ZRWB5D4H.js";
@@ -234,7 +234,7 @@ import {
234
234
  } from "./chunk-IHG27THY.js";
235
235
  import {
236
236
  NamespaceStorageRouter
237
- } from "./chunk-RREI7CNM.js";
237
+ } from "./chunk-D6WVJIS3.js";
238
238
  import {
239
239
  PolicyRuntimeManager
240
240
  } from "./chunk-33JBK2XP.js";
@@ -352,7 +352,7 @@ import {
352
352
  } from "./chunk-Y56J7CXW.js";
353
353
  import {
354
354
  buildChainFollowupGenerator
355
- } from "./chunk-RFSCIBCB.js";
355
+ } from "./chunk-AMACWKM4.js";
356
356
  import {
357
357
  ContentHashIndex,
358
358
  StorageManager,
@@ -362,7 +362,7 @@ import {
362
362
  normalizeEntityName,
363
363
  parseEntityFile,
364
364
  stripAttributesSuffix
365
- } from "./chunk-GYITUZFT.js";
365
+ } from "./chunk-A4BTPHIN.js";
366
366
  import {
367
367
  isValidTranscriptDate,
368
368
  loadSpeakerRegistry,
@@ -14302,4 +14302,4 @@ export {
14302
14302
  resolvePersistedMemoryRelativePath,
14303
14303
  Orchestrator
14304
14304
  };
14305
- //# sourceMappingURL=chunk-3UR4SBZF.js.map
14305
+ //# sourceMappingURL=chunk-MBT3ASYV.js.map
@@ -10,10 +10,10 @@ import {
10
10
  import {
11
11
  listMemoryGovernanceRuns,
12
12
  readMemoryGovernanceRunArtifact
13
- } from "./chunk-NLPH23IQ.js";
13
+ } from "./chunk-UMTG2BN2.js";
14
14
  import {
15
15
  StorageManager
16
- } from "./chunk-GYITUZFT.js";
16
+ } from "./chunk-A4BTPHIN.js";
17
17
  import {
18
18
  MEMORY_LIFECYCLE_EVENT_SORT_ORDER,
19
19
  buildLifecycleEventsForMemory,
@@ -929,4 +929,4 @@ export {
929
929
  verifyMemoryProjection,
930
930
  repairMemoryProjection
931
931
  };
932
- //# sourceMappingURL=chunk-4HYWWO3W.js.map
932
+ //# sourceMappingURL=chunk-MCYT2RNT.js.map
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-3UXOZBHV.js";
8
8
  import {
9
9
  StorageManager
10
- } from "./chunk-GYITUZFT.js";
10
+ } from "./chunk-A4BTPHIN.js";
11
11
  import {
12
12
  isSafeRouteNamespace
13
13
  } from "./chunk-U3PN77QT.js";
@@ -118,4 +118,4 @@ export {
118
118
  runCodexMaterialize,
119
119
  runPostConsolidationMaterialize
120
120
  };
121
- //# sourceMappingURL=chunk-THWT7RJU.js.map
121
+ //# sourceMappingURL=chunk-OR7R6M5Z.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  StorageManager
3
- } from "./chunk-GYITUZFT.js";
3
+ } from "./chunk-A4BTPHIN.js";
4
4
 
5
5
  // src/semantic-rule-promotion.ts
6
6
  import { createHash, randomUUID } from "crypto";
@@ -529,4 +529,4 @@ export {
529
529
  setSemanticRulePromotionTestHooks,
530
530
  promoteSemanticRuleFromMemory
531
531
  };
532
- //# sourceMappingURL=chunk-4MNDVDBS.js.map
532
+ //# sourceMappingURL=chunk-OTC2KOZ2.js.map
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-SFQ6QNL7.js";
7
7
  import {
8
8
  StorageManager
9
- } from "./chunk-GYITUZFT.js";
9
+ } from "./chunk-A4BTPHIN.js";
10
10
  import {
11
11
  buildLifecycleEventsForMemory,
12
12
  sortMemoryLifecycleEvents
@@ -74,4 +74,4 @@ export {
74
74
  backupExistingLedger,
75
75
  rebuildMemoryLifecycleLedger
76
76
  };
77
- //# sourceMappingURL=chunk-TTOYT5RB.js.map
77
+ //# sourceMappingURL=chunk-PQFUUXWK.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  listNamespaces
3
- } from "./chunk-DM4US77W.js";
3
+ } from "./chunk-IZXOO6NP.js";
4
4
  import {
5
5
  runConsolidationProvenanceCheck
6
6
  } from "./chunk-AL4RAJL5.js";
@@ -36,13 +36,13 @@ import {
36
36
  import {
37
37
  listMemoryGovernanceRuns,
38
38
  readMemoryGovernanceRunArtifact
39
- } from "./chunk-NLPH23IQ.js";
39
+ } from "./chunk-UMTG2BN2.js";
40
40
  import {
41
41
  analyzeGraphHealth
42
42
  } from "./chunk-Y56J7CXW.js";
43
43
  import {
44
44
  StorageManager
45
- } from "./chunk-GYITUZFT.js";
45
+ } from "./chunk-A4BTPHIN.js";
46
46
  import {
47
47
  lintWorkspaceFiles
48
48
  } from "./chunk-DM2T26WE.js";
@@ -1336,4 +1336,4 @@ export {
1336
1336
  runBenchmarkRecall,
1337
1337
  runOperatorRepair
1338
1338
  };
1339
- //# sourceMappingURL=chunk-EGBH5IPJ.js.map
1339
+ //# sourceMappingURL=chunk-T22TZJWJ.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-HQ6NIBL6.js";
4
4
  import {
5
5
  StorageManager
6
- } from "./chunk-GYITUZFT.js";
6
+ } from "./chunk-A4BTPHIN.js";
7
7
  import {
8
8
  getCachedEpisodeMap,
9
9
  setCachedEpisodeMap
@@ -105,4 +105,4 @@ async function searchVerifiedEpisodes(options) {
105
105
  export {
106
106
  searchVerifiedEpisodes
107
107
  };
108
- //# sourceMappingURL=chunk-4HYLRROV.js.map
108
+ //# sourceMappingURL=chunk-UMKPSD35.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  StorageManager
3
- } from "./chunk-GYITUZFT.js";
3
+ } from "./chunk-A4BTPHIN.js";
4
4
  import {
5
5
  decideLifecycleTransition
6
6
  } from "./chunk-TBBDFYXW.js";
@@ -729,4 +729,4 @@ export {
729
729
  listMemoryGovernanceRuns,
730
730
  readMemoryGovernanceRunArtifact
731
731
  };
732
- //# sourceMappingURL=chunk-NLPH23IQ.js.map
732
+ //# sourceMappingURL=chunk-UMTG2BN2.js.map
@@ -27,7 +27,7 @@ import {
27
27
  listMemoryGovernanceRuns,
28
28
  readMemoryGovernanceRunArtifact,
29
29
  runMemoryGovernance
30
- } from "./chunk-NLPH23IQ.js";
30
+ } from "./chunk-UMTG2BN2.js";
31
31
  import {
32
32
  clusterByKey,
33
33
  combineNamespaces,
@@ -91,10 +91,10 @@ import {
91
91
  buildBriefing,
92
92
  parseBriefingFocus,
93
93
  parseBriefingWindow
94
- } from "./chunk-RFSCIBCB.js";
94
+ } from "./chunk-AMACWKM4.js";
95
95
  import {
96
96
  parseEntityFile
97
- } from "./chunk-GYITUZFT.js";
97
+ } from "./chunk-A4BTPHIN.js";
98
98
  import {
99
99
  DEFAULT_RECALL_DISCLOSURE,
100
100
  isRecallDisclosure
@@ -4649,4 +4649,4 @@ export {
4649
4649
  shapeMemorySummary,
4650
4650
  EngramAccessService
4651
4651
  };
4652
- //# sourceMappingURL=chunk-AK4DSORQ.js.map
4652
+ //# sourceMappingURL=chunk-W5ISYSIL.js.map
@@ -11,13 +11,13 @@ import {
11
11
  } from "./chunk-D24OXEPB.js";
12
12
  import {
13
13
  EngramAccessInputError
14
- } from "./chunk-AK4DSORQ.js";
14
+ } from "./chunk-W5ISYSIL.js";
15
15
  import {
16
16
  projectTagProjectId
17
17
  } from "./chunk-6GIKAUTN.js";
18
18
  import {
19
19
  validateBriefingFormat
20
- } from "./chunk-RFSCIBCB.js";
20
+ } from "./chunk-AMACWKM4.js";
21
21
  import {
22
22
  expandTildePath
23
23
  } from "./chunk-EYIEWJNI.js";
@@ -3102,4 +3102,4 @@ ${body}`;
3102
3102
  export {
3103
3103
  EngramMcpServer
3104
3104
  };
3105
- //# sourceMappingURL=chunk-GJSNDJHR.js.map
3105
+ //# sourceMappingURL=chunk-YOXCJP3A.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-DRD2Q7HQ.js";
5
5
  import {
6
6
  StorageManager
7
- } from "./chunk-GYITUZFT.js";
7
+ } from "./chunk-A4BTPHIN.js";
8
8
  import {
9
9
  parseContinuityImprovementLoops
10
10
  } from "./chunk-LDXUBPMO.js";
@@ -1261,4 +1261,4 @@ export {
1261
1261
  defaultTierMigrationCycleBudget,
1262
1262
  CompoundingEngine
1263
1263
  };
1264
- //# sourceMappingURL=chunk-ECMMM2VE.js.map
1264
+ //# sourceMappingURL=chunk-Z3PZRDLW.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runPostConsolidationMaterialize
3
- } from "./chunk-THWT7RJU.js";
3
+ } from "./chunk-OR7R6M5Z.js";
4
4
  import {
5
5
  discoverMemoryExtensions,
6
6
  renderExtensionsBlock,
@@ -217,4 +217,4 @@ export {
217
217
  buildExtensionsBlockForConsolidation,
218
218
  materializeAfterSemanticConsolidation
219
219
  };
220
- //# sourceMappingURL=chunk-TKNTAUA3.js.map
220
+ //# sourceMappingURL=chunk-ZXWAQFDE.js.map
package/dist/cli.js CHANGED
@@ -89,7 +89,7 @@ import {
89
89
  runWorkProductStatusCliCommand,
90
90
  runWorkProjectCliCommand,
91
91
  runWorkTaskCliCommand
92
- } from "./chunk-2GCNTHRA.js";
92
+ } from "./chunk-6YLJZ2EU.js";
93
93
  import "./chunk-MC4FJXPA.js";
94
94
  import "./chunk-LQHDIS7L.js";
95
95
  import "./chunk-7F7Z6MOS.js";
@@ -111,18 +111,18 @@ import "./chunk-PYIFUBRK.js";
111
111
  import "./chunk-WMWVO45V.js";
112
112
  import "./chunk-D6RIFG4O.js";
113
113
  import "./chunk-JCK7V6SN.js";
114
- import "./chunk-TTOYT5RB.js";
115
- import "./chunk-4HYWWO3W.js";
114
+ import "./chunk-PQFUUXWK.js";
115
+ import "./chunk-MCYT2RNT.js";
116
116
  import "./chunk-KJTKLXTH.js";
117
117
  import "./chunk-CKITWVWJ.js";
118
118
  import "./chunk-OUELRE5E.js";
119
119
  import "./chunk-GQL52GQ5.js";
120
- import "./chunk-4MNDVDBS.js";
120
+ import "./chunk-OTC2KOZ2.js";
121
121
  import "./chunk-3SF7QNKF.js";
122
122
  import "./chunk-WLGE6KEO.js";
123
123
  import "./chunk-TGQ2NTWH.js";
124
- import "./chunk-EGBH5IPJ.js";
125
- import "./chunk-DM4US77W.js";
124
+ import "./chunk-T22TZJWJ.js";
125
+ import "./chunk-IZXOO6NP.js";
126
126
  import "./chunk-3T74IZB3.js";
127
127
  import "./chunk-HL4DB7TO.js";
128
128
  import "./chunk-YNDLCWXS.js";
@@ -135,13 +135,13 @@ import "./chunk-2PRQG7PV.js";
135
135
  import "./chunk-X6IRLNOO.js";
136
136
  import "./chunk-2F6NP3NT.js";
137
137
  import "./chunk-TERNBNJB.js";
138
- import "./chunk-4HYLRROV.js";
138
+ import "./chunk-UMKPSD35.js";
139
139
  import "./chunk-W4RVMTHR.js";
140
- import "./chunk-SZL2GGFY.js";
140
+ import "./chunk-4BISW7RX.js";
141
141
  import "./chunk-ZRWB5D4H.js";
142
142
  import "./chunk-IHG27THY.js";
143
143
  import "./chunk-SFQ6QNL7.js";
144
- import "./chunk-RREI7CNM.js";
144
+ import "./chunk-D6WVJIS3.js";
145
145
  import "./chunk-KFY3SGN7.js";
146
146
  import "./chunk-CMTINOFS.js";
147
147
  import "./chunk-33JBK2XP.js";
@@ -164,7 +164,7 @@ import "./chunk-Z5LAYHGJ.js";
164
164
  import "./chunk-LBJBNWS2.js";
165
165
  import "./chunk-HQ6NIBL6.js";
166
166
  import "./chunk-OADWQ5CR.js";
167
- import "./chunk-S2SEPLLA.js";
167
+ import "./chunk-BTRL6GG7.js";
168
168
  import "./chunk-SEDEKFYQ.js";
169
169
  import "./chunk-2QSZNTDO.js";
170
170
  import "./chunk-RSUYKGGZ.js";
@@ -173,10 +173,10 @@ import "./chunk-TMSXWOBZ.js";
173
173
  import "./chunk-J64TK33U.js";
174
174
  import "./chunk-7RXCMVFQ.js";
175
175
  import "./chunk-7WV3F5DQ.js";
176
- import "./chunk-GJSNDJHR.js";
176
+ import "./chunk-YOXCJP3A.js";
177
177
  import "./chunk-T4WDJPEZ.js";
178
178
  import "./chunk-D24OXEPB.js";
179
- import "./chunk-AK4DSORQ.js";
179
+ import "./chunk-W5ISYSIL.js";
180
180
  import "./chunk-GDASG7NC.js";
181
181
  import "./chunk-GDB4J2H3.js";
182
182
  import "./chunk-DGNQRNLL.js";
@@ -184,7 +184,7 @@ import "./chunk-IENGGY2C.js";
184
184
  import "./chunk-SOBJ6NEY.js";
185
185
  import "./chunk-BT7NVCML.js";
186
186
  import "./chunk-H7XKCNR6.js";
187
- import "./chunk-NLPH23IQ.js";
187
+ import "./chunk-UMTG2BN2.js";
188
188
  import "./chunk-6GIKAUTN.js";
189
189
  import "./chunk-5RIRL3XL.js";
190
190
  import "./chunk-JGSKJHF7.js";
@@ -222,8 +222,8 @@ import "./chunk-3ONXXHQO.js";
222
222
  import "./chunk-Y56J7CXW.js";
223
223
  import "./chunk-2LSZVONP.js";
224
224
  import "./chunk-DEUNUKTD.js";
225
- import "./chunk-RFSCIBCB.js";
226
- import "./chunk-GYITUZFT.js";
225
+ import "./chunk-AMACWKM4.js";
226
+ import "./chunk-A4BTPHIN.js";
227
227
  import "./chunk-M7XQSUBB.js";
228
228
  import "./chunk-5UZXUTVO.js";
229
229
  import "./chunk-J6A3CX5N.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  CompoundingEngine,
3
3
  defaultTierMigrationCycleBudget
4
- } from "../chunk-ECMMM2VE.js";
4
+ } from "../chunk-Z3PZRDLW.js";
5
5
  import "../chunk-DRD2Q7HQ.js";
6
- import "../chunk-GYITUZFT.js";
6
+ import "../chunk-A4BTPHIN.js";
7
7
  import "../chunk-M7XQSUBB.js";
8
8
  import "../chunk-5UZXUTVO.js";
9
9
  import "../chunk-J6A3CX5N.js";