@remnic/core 9.45.4 → 9.45.5

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 (241) hide show
  1. package/dist/access-admin-ops-surface.d.ts +5 -5
  2. package/dist/access-admin-ops-surface.js +20 -19
  3. package/dist/access-authorization-probe.d.ts +5 -5
  4. package/dist/access-authorization-probe.js +21 -20
  5. package/dist/access-boundary.d.ts +5 -5
  6. package/dist/access-boundary.js +20 -19
  7. package/dist/access-cli.js +60 -58
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-extraction-force-flush.d.ts +5 -5
  10. package/dist/access-extraction-force-flush.js +20 -19
  11. package/dist/access-http-lcm-compaction.d.ts +5 -5
  12. package/dist/access-http-lifecycle-flush.d.ts +5 -5
  13. package/dist/access-http-offline-stream.d.ts +5 -5
  14. package/dist/access-http-offline-stream.js +1 -1
  15. package/dist/access-http-query.js +20 -19
  16. package/dist/access-http.d.ts +5 -6
  17. package/dist/access-http.js +32 -31
  18. package/dist/access-identity-continuity-surface.d.ts +4 -4
  19. package/dist/access-identity-continuity-surface.js +20 -19
  20. package/dist/access-lcm-surface.d.ts +5 -5
  21. package/dist/access-lcm-surface.js +20 -19
  22. package/dist/access-mcp.d.ts +5 -5
  23. package/dist/access-mcp.js +26 -25
  24. package/dist/access-namespace-preflight.js +20 -19
  25. package/dist/access-observe-write-surface.d.ts +5 -5
  26. package/dist/access-observe-write-surface.js +20 -19
  27. package/dist/access-offline-manifest.d.ts +4 -4
  28. package/dist/access-operations-batch.js +21 -20
  29. package/dist/access-operations.d.ts +8 -8
  30. package/dist/access-operations.js +25 -24
  31. package/dist/access-recall-concurrency.d.ts +5 -5
  32. package/dist/access-recall-concurrency.js +20 -19
  33. package/dist/access-recall-response.d.ts +5 -5
  34. package/dist/access-recall-response.js +20 -19
  35. package/dist/access-recall-surface.d.ts +5 -5
  36. package/dist/access-recall-surface.js +20 -19
  37. package/dist/access-schema.d.ts +84 -84
  38. package/dist/{access-service-CsU-ljFD.d.ts → access-service-CNN89xyn.d.ts} +3 -3
  39. package/dist/access-service-helpers.d.ts +5 -5
  40. package/dist/access-service.d.ts +5 -5
  41. package/dist/access-service.js +20 -19
  42. package/dist/access-surface-catalog.d.ts +5 -5
  43. package/dist/access-wearables-meetings-surface.d.ts +2 -2
  44. package/dist/adapters/index.js +4 -4
  45. package/dist/adapters/registry.js +2 -2
  46. package/dist/bootstrap.d.ts +4 -4
  47. package/dist/briefing.d.ts +1 -1
  48. package/dist/briefing.js +3 -2
  49. package/dist/buffer.d.ts +1 -1
  50. package/dist/buffer.js +4 -4
  51. package/dist/causal-consolidation.js +4 -3
  52. package/dist/causal-consolidation.js.map +1 -1
  53. package/dist/{chunk-7SHJHPTY.js → chunk-2FSTB6BJ.js} +2 -2
  54. package/dist/{chunk-ULVR5KG7.js → chunk-2X2T2UVE.js} +2 -2
  55. package/dist/{chunk-QVSBTCVP.js → chunk-3COYXTGM.js} +2 -2
  56. package/dist/{chunk-XTAUXTDO.js → chunk-4FBVAGV3.js} +2 -2
  57. package/dist/{chunk-R5RFK3CB.js → chunk-5QJQHBLE.js} +2 -2
  58. package/dist/{chunk-YMAQDHQM.js → chunk-6ISC4AVB.js} +2 -2
  59. package/dist/{chunk-7CITSYSH.js → chunk-7T4TOGMS.js} +2 -2
  60. package/dist/{chunk-ZMAYKGPN.js → chunk-7YQ6ESEA.js} +12 -41
  61. package/dist/chunk-7YQ6ESEA.js.map +1 -0
  62. package/dist/{chunk-TYISDI6B.js → chunk-A4IJCD2Z.js} +2 -2
  63. package/dist/{chunk-JH6BPLOP.js → chunk-AC5OWJLV.js} +4 -4
  64. package/dist/{chunk-CLB32OHM.js → chunk-AMAUBUKY.js} +2 -2
  65. package/dist/{chunk-WGP57SR3.js → chunk-CK5KOVHW.js} +3 -2
  66. package/dist/{chunk-WGP57SR3.js.map → chunk-CK5KOVHW.js.map} +1 -1
  67. package/dist/{chunk-XSFHWBQO.js → chunk-CX4ZUMC6.js} +7 -61
  68. package/dist/{chunk-XSFHWBQO.js.map → chunk-CX4ZUMC6.js.map} +1 -1
  69. package/dist/{chunk-UQWIKLQK.js → chunk-DAJPRXBR.js} +6 -6
  70. package/dist/{chunk-U2VLVBBH.js → chunk-E5XQIWAL.js} +2 -2
  71. package/dist/{chunk-NTOIP2E6.js → chunk-ERZ2R42X.js} +2 -2
  72. package/dist/{chunk-5CEECY6P.js → chunk-FIK3CQNA.js} +3 -3
  73. package/dist/{chunk-EJHEWCGQ.js → chunk-FR27HBBA.js} +2 -2
  74. package/dist/{chunk-FZP32336.js → chunk-FUCYDRE5.js} +43 -21
  75. package/dist/chunk-FUCYDRE5.js.map +1 -0
  76. package/dist/{chunk-P7NGM24P.js → chunk-GFCVUY6G.js} +2 -2
  77. package/dist/{chunk-DYVMXPCF.js → chunk-GODSPTOT.js} +41 -41
  78. package/dist/{chunk-AJQ57VV3.js → chunk-GRUYA45P.js} +4 -4
  79. package/dist/chunk-GRUYA45P.js.map +1 -0
  80. package/dist/{chunk-2MRHJNWL.js → chunk-GUAL4PQH.js} +2 -2
  81. package/dist/{chunk-EITZHSX6.js → chunk-HC3PBX23.js} +2 -2
  82. package/dist/{chunk-NUEQKLNB.js → chunk-JZH4LWHB.js} +2 -2
  83. package/dist/{chunk-7RZJWZ46.js → chunk-LEPOP46W.js} +5 -5
  84. package/dist/{chunk-TQ4GD737.js → chunk-LPYDOLSM.js} +2 -2
  85. package/dist/{chunk-TN76AKO3.js → chunk-MO4HSXHZ.js} +2 -2
  86. package/dist/{chunk-WQIHRA5F.js → chunk-N3LL5NEU.js} +2 -2
  87. package/dist/{chunk-D3I2MCN7.js → chunk-NEF7LR5J.js} +3 -3
  88. package/dist/{chunk-C26TE27X.js → chunk-QR6G5KF4.js} +3 -3
  89. package/dist/{chunk-ZI32MKDW.js → chunk-QUENPGWZ.js} +18 -21
  90. package/dist/chunk-QUENPGWZ.js.map +1 -0
  91. package/dist/{chunk-5SNZSWWR.js → chunk-QVJPH7SH.js} +21 -21
  92. package/dist/{chunk-MDISBSYA.js → chunk-R3KHKU7M.js} +2 -2
  93. package/dist/{chunk-2QSZNTDO.js → chunk-RKNJBZ55.js} +4 -4
  94. package/dist/{chunk-KXEFRMCF.js → chunk-RNHVVMFN.js} +2 -2
  95. package/dist/{chunk-QCECHYZL.js → chunk-RVO6TCTU.js} +6 -6
  96. package/dist/chunk-S2HLHAZ4.js +16 -0
  97. package/dist/chunk-S2HLHAZ4.js.map +1 -0
  98. package/dist/{chunk-ZFGZ6PZ2.js → chunk-UW66OZTD.js} +2 -2
  99. package/dist/{chunk-BGHFOD5A.js → chunk-V2TNYF6Q.js} +3 -3
  100. package/dist/chunk-VL35ZFSZ.js +102 -0
  101. package/dist/chunk-VL35ZFSZ.js.map +1 -0
  102. package/dist/{chunk-Y7HRYCNW.js → chunk-W2V7UESE.js} +2 -2
  103. package/dist/{chunk-DSUAAZZX.js → chunk-WZ3TOIDW.js} +2 -2
  104. package/dist/{chunk-7YERSTN7.js → chunk-XAGYS7X6.js} +7 -7
  105. package/dist/{chunk-VOUOLGIP.js → chunk-YRFAYOFQ.js} +11 -13
  106. package/dist/chunk-YRFAYOFQ.js.map +1 -0
  107. package/dist/{chunk-6NNNURLK.js → chunk-Z54EM5YZ.js} +4 -4
  108. package/dist/{cli-BBHDtG36.d.ts → cli-BHBswmUa.d.ts} +3 -3
  109. package/dist/cli.d.ts +6 -6
  110. package/dist/cli.js +43 -42
  111. package/dist/compounding/engine.d.ts +1 -1
  112. package/dist/compounding/engine.js +3 -2
  113. package/dist/connectors/codex-materialize-runner.js +3 -2
  114. package/dist/connectors/index.js +3 -2
  115. package/dist/consolidation-provenance-check.d.ts +1 -1
  116. package/dist/consolidation-undo.d.ts +1 -1
  117. package/dist/contradiction/index.d.ts +1 -1
  118. package/dist/convergence-refresh.d.ts +1 -1
  119. package/dist/convergence-refresh.js +5 -4
  120. package/dist/conversation-index/backend.js +2 -2
  121. package/dist/corpus-watermark.js +12 -11
  122. package/dist/entity-retrieval.d.ts +1 -1
  123. package/dist/entity-retrieval.js +3 -2
  124. package/dist/explicit-capture.d.ts +4 -4
  125. package/dist/external-wiki-access.d.ts +5 -5
  126. package/dist/external-wiki-access.js +23 -22
  127. package/dist/external-wiki-cli.js +4 -90
  128. package/dist/external-wiki-cli.js.map +1 -1
  129. package/dist/external-wiki-mcp-tools.d.ts +5 -5
  130. package/dist/external-wiki-search.js +2 -2
  131. package/dist/external-wiki.d.ts +1 -5
  132. package/dist/external-wiki.js +1 -3
  133. package/dist/extraction.js +8 -7
  134. package/dist/{first-start-migration-F2QJD66E.js → first-start-migration-ZSHEFEI3.js} +10 -12
  135. package/dist/{first-start-migration-F2QJD66E.js.map → first-start-migration-ZSHEFEI3.js.map} +1 -1
  136. package/dist/index.d.ts +688 -687
  137. package/dist/index.js +81 -78
  138. package/dist/lcm/engine.js +2 -2
  139. package/dist/lcm/index.js +2 -2
  140. package/dist/maintenance/memory-governance.js +3 -2
  141. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +1 -1
  142. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +3 -2
  143. package/dist/maintenance/rebuild-memory-projection.d.ts +1 -1
  144. package/dist/maintenance/rebuild-memory-projection.js +4 -3
  145. package/dist/{maintenance-D2mveyCd.d.ts → maintenance-CoRikzIt.d.ts} +1 -1
  146. package/dist/mcp-memory-inspector-app.d.ts +5 -5
  147. package/dist/memory-snapshot.d.ts +10 -0
  148. package/dist/memory-snapshot.js +8 -0
  149. package/dist/memory-snapshot.js.map +1 -0
  150. package/dist/memory-worth-outcomes.d.ts +1 -1
  151. package/dist/namespaces/migrate.d.ts +1 -1
  152. package/dist/namespaces/migrate.js +11 -10
  153. package/dist/namespaces/search.js +7 -7
  154. package/dist/namespaces/storage.d.ts +1 -1
  155. package/dist/namespaces/storage.js +3 -2
  156. package/dist/operator-doctor-corpus.js +13 -12
  157. package/dist/operator-toolkit.d.ts +1 -1
  158. package/dist/operator-toolkit.js +17 -16
  159. package/dist/orchestration/compression-guideline-coordinator.d.ts +1 -1
  160. package/dist/orchestration/maintenance.d.ts +2 -2
  161. package/dist/orchestration/maintenance.js +8 -7
  162. package/dist/{orchestrator-DJYlwiUv.d.ts → orchestrator-BJeq7Pw1.d.ts} +3 -3
  163. package/dist/orchestrator.d.ts +4 -4
  164. package/dist/orchestrator.js +61 -59
  165. package/dist/qmd.js +4 -4
  166. package/dist/schemas.d.ts +76 -76
  167. package/dist/search/factory.js +6 -6
  168. package/dist/search/index.js +8 -8
  169. package/dist/semantic-consolidation.js +4 -3
  170. package/dist/semantic-rule-promotion.js +3 -2
  171. package/dist/semantic-rule-verifier.js +3 -2
  172. package/dist/{service-BeDxSqE-.d.ts → service-DWC4tq7p.d.ts} +1 -1
  173. package/dist/shared-context/manager.d.ts +8 -8
  174. package/dist/source-agent-qualifier.js +7 -6
  175. package/dist/{storage-DfjxusTE.d.ts → storage-DPGjB-8e.d.ts} +4 -1
  176. package/dist/storage.d.ts +1 -1
  177. package/dist/storage.js +2 -1
  178. package/dist/temporal-supersession.d.ts +1 -1
  179. package/dist/tier-migration.d.ts +1 -1
  180. package/dist/tier-migration.js +1 -1
  181. package/dist/transfer/types.d.ts +66 -66
  182. package/dist/verified-recall.js +3 -2
  183. package/package.json +2 -2
  184. package/src/access-http-offline-stream.ts +1 -0
  185. package/src/access-http.ts +0 -57
  186. package/src/access-operations-batch.ts +1 -1
  187. package/src/access-service-observe-lcm-parity.test.ts +45 -20
  188. package/src/access-service.ts +3 -4
  189. package/src/external-wiki-cli.ts +28 -20
  190. package/src/external-wiki-search.test.ts +68 -2
  191. package/src/external-wiki.ts +12 -38
  192. package/src/index.ts +1 -5
  193. package/src/maintenance/first-start-migration.ts +11 -11
  194. package/src/memory-snapshot.ts +15 -0
  195. package/src/storage-contract/cache-coherence.test.ts +99 -0
  196. package/src/storage-fact-hash-index-defer.test.ts +14 -7
  197. package/src/storage.ts +47 -48
  198. package/src/testing/subjects/first-start-tier-migration.test.ts +75 -0
  199. package/src/tier-migration.ts +10 -12
  200. package/dist/chunk-AJQ57VV3.js.map +0 -1
  201. package/dist/chunk-FZP32336.js.map +0 -1
  202. package/dist/chunk-VOUOLGIP.js.map +0 -1
  203. package/dist/chunk-ZI32MKDW.js.map +0 -1
  204. package/dist/chunk-ZMAYKGPN.js.map +0 -1
  205. /package/dist/{chunk-7SHJHPTY.js.map → chunk-2FSTB6BJ.js.map} +0 -0
  206. /package/dist/{chunk-ULVR5KG7.js.map → chunk-2X2T2UVE.js.map} +0 -0
  207. /package/dist/{chunk-QVSBTCVP.js.map → chunk-3COYXTGM.js.map} +0 -0
  208. /package/dist/{chunk-XTAUXTDO.js.map → chunk-4FBVAGV3.js.map} +0 -0
  209. /package/dist/{chunk-R5RFK3CB.js.map → chunk-5QJQHBLE.js.map} +0 -0
  210. /package/dist/{chunk-YMAQDHQM.js.map → chunk-6ISC4AVB.js.map} +0 -0
  211. /package/dist/{chunk-7CITSYSH.js.map → chunk-7T4TOGMS.js.map} +0 -0
  212. /package/dist/{chunk-TYISDI6B.js.map → chunk-A4IJCD2Z.js.map} +0 -0
  213. /package/dist/{chunk-JH6BPLOP.js.map → chunk-AC5OWJLV.js.map} +0 -0
  214. /package/dist/{chunk-CLB32OHM.js.map → chunk-AMAUBUKY.js.map} +0 -0
  215. /package/dist/{chunk-UQWIKLQK.js.map → chunk-DAJPRXBR.js.map} +0 -0
  216. /package/dist/{chunk-U2VLVBBH.js.map → chunk-E5XQIWAL.js.map} +0 -0
  217. /package/dist/{chunk-NTOIP2E6.js.map → chunk-ERZ2R42X.js.map} +0 -0
  218. /package/dist/{chunk-5CEECY6P.js.map → chunk-FIK3CQNA.js.map} +0 -0
  219. /package/dist/{chunk-EJHEWCGQ.js.map → chunk-FR27HBBA.js.map} +0 -0
  220. /package/dist/{chunk-P7NGM24P.js.map → chunk-GFCVUY6G.js.map} +0 -0
  221. /package/dist/{chunk-DYVMXPCF.js.map → chunk-GODSPTOT.js.map} +0 -0
  222. /package/dist/{chunk-2MRHJNWL.js.map → chunk-GUAL4PQH.js.map} +0 -0
  223. /package/dist/{chunk-EITZHSX6.js.map → chunk-HC3PBX23.js.map} +0 -0
  224. /package/dist/{chunk-NUEQKLNB.js.map → chunk-JZH4LWHB.js.map} +0 -0
  225. /package/dist/{chunk-7RZJWZ46.js.map → chunk-LEPOP46W.js.map} +0 -0
  226. /package/dist/{chunk-TQ4GD737.js.map → chunk-LPYDOLSM.js.map} +0 -0
  227. /package/dist/{chunk-TN76AKO3.js.map → chunk-MO4HSXHZ.js.map} +0 -0
  228. /package/dist/{chunk-WQIHRA5F.js.map → chunk-N3LL5NEU.js.map} +0 -0
  229. /package/dist/{chunk-D3I2MCN7.js.map → chunk-NEF7LR5J.js.map} +0 -0
  230. /package/dist/{chunk-C26TE27X.js.map → chunk-QR6G5KF4.js.map} +0 -0
  231. /package/dist/{chunk-5SNZSWWR.js.map → chunk-QVJPH7SH.js.map} +0 -0
  232. /package/dist/{chunk-MDISBSYA.js.map → chunk-R3KHKU7M.js.map} +0 -0
  233. /package/dist/{chunk-2QSZNTDO.js.map → chunk-RKNJBZ55.js.map} +0 -0
  234. /package/dist/{chunk-KXEFRMCF.js.map → chunk-RNHVVMFN.js.map} +0 -0
  235. /package/dist/{chunk-QCECHYZL.js.map → chunk-RVO6TCTU.js.map} +0 -0
  236. /package/dist/{chunk-ZFGZ6PZ2.js.map → chunk-UW66OZTD.js.map} +0 -0
  237. /package/dist/{chunk-BGHFOD5A.js.map → chunk-V2TNYF6Q.js.map} +0 -0
  238. /package/dist/{chunk-Y7HRYCNW.js.map → chunk-W2V7UESE.js.map} +0 -0
  239. /package/dist/{chunk-DSUAAZZX.js.map → chunk-WZ3TOIDW.js.map} +0 -0
  240. /package/dist/{chunk-7YERSTN7.js.map → chunk-XAGYS7X6.js.map} +0 -0
  241. /package/dist/{chunk-6NNNURLK.js.map → chunk-Z54EM5YZ.js.map} +0 -0
@@ -112,9 +112,16 @@ function normalizeCatalogPath(target, config, base) {
112
112
  return null;
113
113
  }
114
114
  const pagesDir = path.posix.normalize(config.pagesDir);
115
- const baseDir = base === "index" ? path.posix.dirname(config.indexFile) : pagesDir;
116
- const rootRelativeTarget = path.posix.normalize(path.posix.join(baseDir, withoutFragment));
117
- const relative = path.posix.relative(pagesDir, rootRelativeTarget);
115
+ let relative;
116
+ if (base === "index") {
117
+ const baseDir = path.posix.dirname(config.indexFile);
118
+ const rootRelativeTarget = path.posix.normalize(path.posix.join(baseDir, withoutFragment));
119
+ relative = path.posix.relative(pagesDir, rootRelativeTarget);
120
+ } else {
121
+ const pagesPrefix = pagesDir === "." ? "" : `${pagesDir}/`;
122
+ const stripped = pagesPrefix.length > 0 && withoutFragment.startsWith(pagesPrefix) ? withoutFragment.slice(pagesPrefix.length) : withoutFragment;
123
+ relative = path.posix.normalize(stripped);
124
+ }
118
125
  if (relative === ".." || relative.startsWith("../") || path.posix.isAbsolute(relative) || relative === "." || !relative.toLowerCase().endsWith(".md")) {
119
126
  return null;
120
127
  }
@@ -305,47 +312,11 @@ async function readExternalWikiPage(config, relativePath, maxBytes = DEFAULT_MAX
305
312
  bytes: page.bytes
306
313
  };
307
314
  }
308
- async function runExternalWikiCliCommand(roots, rest, io) {
309
- const { searchExternalWikis } = await import("./external-wiki-search.js");
310
- const query = rest.filter((a) => !a.startsWith("-")).join(" ").trim();
311
- if (!query) {
312
- io.stderr.write("external-wiki: provide a search query\n");
313
- return 1;
314
- }
315
- const enabled = roots.filter((r) => r.enabled !== false);
316
- if (enabled.length === 0) {
317
- io.stderr.write("external-wiki: no enabled wiki roots configured\n");
318
- return 1;
319
- }
320
- try {
321
- const result = await searchExternalWikis(enabled, { query });
322
- if (result.hits.length === 0) {
323
- io.stdout.write("No results.\n");
324
- return 0;
325
- }
326
- for (const hit of result.hits) {
327
- io.stdout.write(`[${hit.wikiId}] ${hit.path} (score ${hit.score})
328
- ${hit.snippet}
329
-
330
- `);
331
- }
332
- if (result.degradedWikiIds.length > 0) {
333
- io.stderr.write(`Warning: degraded roots: ${result.degradedWikiIds.join(", ")}
334
- `);
335
- }
336
- return 0;
337
- } catch (error) {
338
- io.stderr.write(`external-wiki: ${error instanceof Error ? error.message : "search failed"}
339
- `);
340
- return 1;
341
- }
342
- }
343
315
 
344
316
  export {
345
317
  validateExternalWikiLayout,
346
318
  parseExternalWikiCatalog,
347
319
  loadExternalWikiCatalog,
348
- readExternalWikiPage,
349
- runExternalWikiCliCommand
320
+ readExternalWikiPage
350
321
  };
351
- //# sourceMappingURL=chunk-ZMAYKGPN.js.map
322
+ //# sourceMappingURL=chunk-7YQ6ESEA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/external-wiki.ts"],"sourcesContent":["import { constants } from \"node:fs\";\nimport { open, opendir, realpath, stat } from \"node:fs/promises\";\nimport type { FileHandle } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { ExternalWikiRoot } from \"./external-wiki-config.js\";\n\nconst DEFAULT_MAX_INDEX_BYTES = 1_048_576;\nconst DEFAULT_MAX_PAGE_BYTES = 1_048_576;\nconst DEFAULT_MAX_CATALOG_ENTRIES = 10_000;\nconst DEFAULT_MAX_DIRECTORY_DEPTH = 32;\nconst MAX_READ_BYTES = 16_777_216;\nconst MAX_CATALOG_ENTRIES = 100_000;\nconst MAX_DIRECTORY_DEPTH = 128;\nconst MIN_VISITED_ENTRIES = 100;\nconst MAX_VISITED_ENTRIES = 1_000_000;\n\nexport type { ExternalWikiRoot } from \"./external-wiki-config.js\";\n\nexport interface ExternalWikiLayout {\n rootDir: string;\n pagesDir: string;\n indexFile: string;\n indexPresent: boolean;\n rawDir?: string;\n outputsDir?: string;\n}\n\nexport interface ExternalWikiCatalogEntry {\n title: string;\n path: string;\n indexBlurb?: string;\n indexLine?: number;\n}\n\nexport interface ExternalWikiCatalog {\n wikiId: string;\n indexPresent: boolean;\n entries: ExternalWikiCatalogEntry[];\n}\n\nexport interface ExternalWikiCatalogLimits {\n maxIndexBytes?: number;\n maxEntries?: number;\n maxDepth?: number;\n}\n\nexport interface ExternalWikiPage {\n wikiId: string;\n path: string;\n title: string;\n content: string;\n bytes: number;\n}\n\nfunction assertPositiveInteger(value: number, keyName: string, maximum?: number): void {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new Error(`${keyName} must be a positive integer`);\n }\n if (maximum !== undefined && value > maximum) {\n throw new Error(`${keyName} must be at most ${maximum}`);\n }\n}\n\nfunction isInside(baseDir: string, candidate: string): boolean {\n const relative = path.relative(baseDir, candidate);\n return relative === \"\" || (relative !== \"..\" && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative));\n}\n\nfunction resolveInside(baseDir: string, relativePath: string, keyName: string): string {\n const resolved = path.resolve(baseDir, relativePath);\n if (!isInside(baseDir, resolved) || resolved === baseDir) {\n throw new Error(`${keyName} must stay within ${baseDir}`);\n }\n return resolved;\n}\n\nasync function requireDirectory(candidate: string, rootDir: string, description: string): Promise<string> {\n let canonical: string;\n try {\n canonical = await realpath(candidate);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n throw new Error(`${description} does not exist: ${candidate}`);\n }\n throw error;\n }\n if (!isInside(rootDir, canonical)) throw new Error(`${description} escapes rootDir`);\n if (!(await stat(canonical)).isDirectory()) throw new Error(`${description} is not a directory`);\n return canonical;\n}\n\nasync function optionalDirectory(rootDir: string, name: \"raw\" | \"outputs\"): Promise<string | undefined> {\n const candidate = path.join(rootDir, name);\n let canonical: string;\n try {\n canonical = await realpath(candidate);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return undefined;\n throw error;\n }\n if (!isInside(rootDir, canonical)) throw new Error(`${name} directory escapes rootDir`);\n if (!(await stat(canonical)).isDirectory()) throw new Error(`${name} path is not a directory`);\n return canonical;\n}\n\nasync function optionalIndexFile(candidate: string, rootDir: string): Promise<string | undefined> {\n let canonical: string;\n try {\n canonical = await realpath(candidate);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return undefined;\n throw error;\n }\n if (!isInside(rootDir, canonical)) throw new Error(\"catalog index escapes rootDir\");\n if (!(await stat(canonical)).isFile()) throw new Error(\"catalog index is not a file\");\n return canonical;\n}\n\nexport async function validateExternalWikiLayout(config: ExternalWikiRoot): Promise<ExternalWikiLayout> {\n let rootDir: string;\n try {\n rootDir = await realpath(config.rootDir);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n throw new Error(`external wiki root does not exist: ${config.rootDir}`);\n }\n throw error;\n }\n if (!(await stat(rootDir)).isDirectory()) throw new Error(\"external wiki root is not a directory\");\n\n const pagesDir = await requireDirectory(\n resolveInside(rootDir, config.pagesDir, \"pages directory\"),\n rootDir,\n \"pages directory\"\n );\n const configuredIndexFile = resolveInside(rootDir, config.indexFile, \"catalog index\");\n const canonicalIndexFile = await optionalIndexFile(configuredIndexFile, rootDir);\n const [rawDir, outputsDir] = await Promise.all([\n optionalDirectory(rootDir, \"raw\"),\n optionalDirectory(rootDir, \"outputs\"),\n ]);\n\n return {\n rootDir,\n pagesDir,\n indexFile: canonicalIndexFile ?? configuredIndexFile,\n indexPresent: canonicalIndexFile !== undefined,\n ...(rawDir === undefined ? {} : { rawDir }),\n ...(outputsDir === undefined ? {} : { outputsDir }),\n };\n}\n\ntype CatalogPathBase = \"index\" | \"pages\";\n\nfunction normalizeCatalogPath(target: string, config: ExternalWikiRoot, base: CatalogPathBase): string | null {\n let decoded: string;\n try {\n decoded = decodeURIComponent(target.trim());\n } catch {\n return null;\n }\n const withoutFragment = decoded.split(/[?#]/, 1)[0] ?? \"\";\n if (\n withoutFragment.length === 0 ||\n withoutFragment.startsWith(\"/\") ||\n withoutFragment.includes(\"\\\\\") ||\n /^[a-z][a-z0-9+.-]*:/i.test(withoutFragment)\n ) {\n return null;\n }\n\n const pagesDir = path.posix.normalize(config.pagesDir);\n let relative: string;\n if (base === \"index\") {\n const baseDir = path.posix.dirname(config.indexFile);\n const rootRelativeTarget = path.posix.normalize(path.posix.join(baseDir, withoutFragment));\n relative = path.posix.relative(pagesDir, rootRelativeTarget);\n } else {\n const pagesPrefix = pagesDir === \".\" ? \"\" : `${pagesDir}/`;\n const stripped = pagesPrefix.length > 0 && withoutFragment.startsWith(pagesPrefix)\n ? withoutFragment.slice(pagesPrefix.length)\n : withoutFragment;\n relative = path.posix.normalize(stripped);\n }\n if (\n relative === \"..\" ||\n relative.startsWith(\"../\") ||\n path.posix.isAbsolute(relative) ||\n relative === \".\" ||\n !relative.toLowerCase().endsWith(\".md\")\n ) {\n return null;\n }\n return relative;\n}\n\nfunction catalogBlurb(line: string, matchEnd: number): string | undefined {\n const blurb = line\n .slice(matchEnd)\n .trim()\n .replace(/^[-:|]\\s*/, \"\")\n .trim();\n return blurb.length === 0 ? undefined : blurb;\n}\n\nexport function parseExternalWikiCatalog(\n content: string,\n config: ExternalWikiRoot,\n limits: Pick<ExternalWikiCatalogLimits, \"maxEntries\"> = {}\n): ExternalWikiCatalogEntry[] {\n const maxEntries = limits.maxEntries ?? DEFAULT_MAX_CATALOG_ENTRIES;\n assertPositiveInteger(maxEntries, \"maxEntries\", MAX_CATALOG_ENTRIES);\n const entries: ExternalWikiCatalogEntry[] = [];\n const seenPaths = new Set<string>();\n\n for (const [lineIndex, line] of content.split(/\\r?\\n/).entries()) {\n const markdownMatch = /\\[([^\\]]+)]\\(([^)\\s]+)(?:\\s+\"[^\"]*\")?\\)/.exec(line);\n const wikiMatch = /\\[\\[([^\\]|]+)(?:\\|([^\\]]+))?]]/.exec(line);\n let target: string;\n let title: string;\n let matchEnd: number;\n let pathBase: CatalogPathBase;\n if (markdownMatch) {\n title = markdownMatch[1]?.trim() ?? \"\";\n target = markdownMatch[2]?.trim() ?? \"\";\n matchEnd = (markdownMatch.index ?? 0) + markdownMatch[0].length;\n pathBase = \"index\";\n } else if (wikiMatch) {\n const wikiTarget = wikiMatch[1]?.trim() ?? \"\";\n title = wikiMatch[2]?.trim() || humanizePagePath(wikiTarget);\n target = wikiTarget.toLowerCase().endsWith(\".md\") ? wikiTarget : `${wikiTarget}.md`;\n matchEnd = (wikiMatch.index ?? 0) + wikiMatch[0].length;\n pathBase = \"pages\";\n } else {\n continue;\n }\n\n const pagePath = normalizeCatalogPath(target, config, pathBase);\n if (!pagePath || title.length === 0 || seenPaths.has(pagePath)) continue;\n if (entries.length >= maxEntries) {\n throw new Error(`catalog contains more than ${maxEntries} entries`);\n }\n seenPaths.add(pagePath);\n const indexBlurb = catalogBlurb(line, matchEnd);\n entries.push({\n title,\n path: pagePath,\n ...(indexBlurb === undefined ? {} : { indexBlurb }),\n indexLine: lineIndex + 1,\n });\n }\n return entries;\n}\n\ninterface BoundedUtf8Read {\n content: string;\n bytes: number;\n}\n\nasync function canonicalOpenedFile(handle: FileHandle, filePath: string, displayPath: string): Promise<string> {\n if (process.platform === \"linux\") {\n const descriptorPath = await realpath(`/proc/self/fd/${handle.fd}`).catch(() => undefined);\n if (descriptorPath !== undefined) return descriptorPath;\n }\n\n let canonical: string;\n try {\n canonical = await realpath(filePath);\n } catch {\n throw new Error(`${displayPath} changed while being opened`);\n }\n const [openedStat, pathStat] = await Promise.all([handle.stat(), stat(canonical)]);\n if (openedStat.dev !== pathStat.dev || openedStat.ino !== pathStat.ino) {\n throw new Error(`${displayPath} changed while being opened`);\n }\n return canonical;\n}\n\nasync function readBoundedUtf8(\n filePath: string,\n allowedRoot: string,\n maxBytes: number,\n displayPath: string\n): Promise<BoundedUtf8Read> {\n assertPositiveInteger(maxBytes, \"maxBytes\", MAX_READ_BYTES);\n const handle = await open(filePath, constants.O_RDONLY | constants.O_NOFOLLOW);\n try {\n const openedStat = await handle.stat();\n if (!openedStat.isFile()) throw new Error(`${displayPath} is not a file`);\n const canonical = await canonicalOpenedFile(handle, filePath, displayPath);\n if (!isInside(allowedRoot, canonical)) {\n throw new Error(`${displayPath} escapes configured root`);\n }\n const buffer = Buffer.allocUnsafe(maxBytes + 1);\n const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0);\n if (bytesRead > maxBytes) throw new Error(`${displayPath} exceeds ${maxBytes} bytes`);\n let content: string;\n try {\n content = new TextDecoder(\"utf-8\", { fatal: true }).decode(buffer.subarray(0, bytesRead));\n } catch {\n throw new Error(`${displayPath} is not valid UTF-8`);\n }\n return { content, bytes: bytesRead };\n } finally {\n await handle.close();\n }\n}\n\nfunction humanizePagePath(pagePath: string): string {\n const stem = path.posix.basename(pagePath, path.posix.extname(pagePath));\n const words = stem.replace(/[-_]+/g, \" \").trim();\n return words.length === 0 ? stem : `${words[0]?.toUpperCase() ?? \"\"}${words.slice(1)}`;\n}\n\nasync function listMarkdownPages(\n pagesDir: string,\n maxEntries: number,\n maxDepth: number\n): Promise<ExternalWikiCatalogEntry[]> {\n assertPositiveInteger(maxEntries, \"maxEntries\", MAX_CATALOG_ENTRIES);\n assertPositiveInteger(maxDepth, \"maxDepth\", MAX_DIRECTORY_DEPTH);\n const paths: string[] = [];\n const maxVisitedEntries = Math.min(MAX_VISITED_ENTRIES, Math.max(MIN_VISITED_ENTRIES, maxEntries * 100));\n let visitedEntries = 0;\n const walk = async (directory: string, relativeDirectory: string, depth: number): Promise<void> => {\n if (depth > maxDepth) throw new Error(`pages directory exceeds maxDepth ${maxDepth}`);\n const dir = await opendir(directory);\n for await (const entry of dir) {\n visitedEntries += 1;\n if (visitedEntries > maxVisitedEntries) {\n throw new Error(`pages directory contains more than ${maxVisitedEntries} filesystem entries`);\n }\n const relativePath = relativeDirectory ? path.posix.join(relativeDirectory, entry.name) : entry.name;\n if (entry.isDirectory()) {\n await walk(path.join(directory, entry.name), relativePath, depth + 1);\n } else if (entry.isFile() && entry.name.toLowerCase().endsWith(\".md\")) {\n if (paths.length >= maxEntries) {\n throw new Error(`pages directory contains more than ${maxEntries} markdown files`);\n }\n paths.push(relativePath);\n }\n }\n };\n await walk(pagesDir, \"\", 1);\n return paths\n .sort((left, right) => left.localeCompare(right))\n .map((pagePath) => ({\n title: humanizePagePath(pagePath),\n path: pagePath,\n }));\n}\n\nfunction assertWikiEnabled(config: ExternalWikiRoot): void {\n if (!config.enabled) throw new Error(`external wiki \"${config.id}\" is disabled`);\n}\n\nexport async function loadExternalWikiCatalog(\n config: ExternalWikiRoot,\n limits: ExternalWikiCatalogLimits = {}\n): Promise<ExternalWikiCatalog> {\n assertWikiEnabled(config);\n const maxIndexBytes = limits.maxIndexBytes ?? DEFAULT_MAX_INDEX_BYTES;\n const maxEntries = limits.maxEntries ?? DEFAULT_MAX_CATALOG_ENTRIES;\n const maxDepth = limits.maxDepth ?? DEFAULT_MAX_DIRECTORY_DEPTH;\n assertPositiveInteger(maxEntries, \"maxEntries\", MAX_CATALOG_ENTRIES);\n assertPositiveInteger(maxDepth, \"maxDepth\", MAX_DIRECTORY_DEPTH);\n const layout = await validateExternalWikiLayout(config);\n const entries = layout.indexPresent\n ? parseExternalWikiCatalog(\n (await readBoundedUtf8(layout.indexFile, layout.rootDir, maxIndexBytes, config.indexFile)).content,\n config,\n { maxEntries }\n )\n : await listMarkdownPages(layout.pagesDir, maxEntries, maxDepth);\n return { wikiId: config.id, indexPresent: layout.indexPresent, entries };\n}\n\nfunction normalizePagePath(relativePath: string): string {\n if (relativePath.includes(\"\\\\\")) {\n throw new Error(\"page path must use POSIX separators\");\n }\n const normalized = path.posix.normalize(relativePath);\n if (normalized === \".\" || normalized === \"..\" || normalized.startsWith(\"../\") || normalized.startsWith(\"/\")) {\n throw new Error(\"page path must stay within the pages directory\");\n }\n if (!normalized.toLowerCase().endsWith(\".md\")) {\n throw new Error(\"page path must end in .md\");\n }\n return normalized;\n}\n\nfunction pageTitle(content: string, pagePath: string): string {\n const heading = /^#\\s+(.+?)\\s*$/m.exec(content)?.[1]?.trim();\n return heading && heading.length > 0 ? heading : humanizePagePath(pagePath);\n}\n\nexport async function readExternalWikiPage(\n config: ExternalWikiRoot,\n relativePath: string,\n maxBytes = DEFAULT_MAX_PAGE_BYTES\n): Promise<ExternalWikiPage> {\n assertWikiEnabled(config);\n const pagePath = normalizePagePath(relativePath);\n const layout = await validateExternalWikiLayout(config);\n const candidate = resolveInside(layout.pagesDir, pagePath, \"page path\");\n let canonical: string;\n try {\n canonical = await realpath(candidate);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n throw new Error(`external wiki page does not exist: ${pagePath}`);\n }\n throw error;\n }\n if (!isInside(layout.pagesDir, canonical)) {\n throw new Error(\"page path must stay within the pages directory\");\n }\n if (!(await stat(canonical)).isFile()) throw new Error(`external wiki page is not a file: ${pagePath}`);\n const page = await readBoundedUtf8(canonical, layout.pagesDir, maxBytes, pagePath);\n return {\n wikiId: config.id,\n path: pagePath,\n title: pageTitle(page.content, pagePath),\n content: page.content,\n bytes: page.bytes,\n };\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  StorageManager
3
- } from "./chunk-FZP32336.js";
3
+ } from "./chunk-FUCYDRE5.js";
4
4
  import {
5
5
  composeMemoryEnvelope
6
6
  } from "./chunk-CGASUJVP.js";
@@ -546,4 +546,4 @@ export {
546
546
  setSemanticRulePromotionTestHooks,
547
547
  promoteSemanticRuleFromMemory
548
548
  };
549
- //# sourceMappingURL=chunk-TYISDI6B.js.map
549
+ //# sourceMappingURL=chunk-A4IJCD2Z.js.map
@@ -9,14 +9,14 @@ import {
9
9
  } from "./chunk-666A3MOW.js";
10
10
  import {
11
11
  rebuildMemoryLifecycleLedger
12
- } from "./chunk-R5RFK3CB.js";
12
+ } from "./chunk-5QJQHBLE.js";
13
13
  import {
14
14
  planNamespaceMaintenance,
15
15
  runNamespaceMaintenanceBatchPlan
16
- } from "./chunk-7SHJHPTY.js";
16
+ } from "./chunk-2FSTB6BJ.js";
17
17
  import {
18
18
  rebuildMemoryProjection
19
- } from "./chunk-5CEECY6P.js";
19
+ } from "./chunk-FIK3CQNA.js";
20
20
  import {
21
21
  activityDayWindow,
22
22
  activityDigestPath,
@@ -1714,4 +1714,4 @@ export {
1714
1714
  ActivitySyncScheduler,
1715
1715
  MaintenanceScheduler
1716
1716
  };
1717
- //# sourceMappingURL=chunk-JH6BPLOP.js.map
1717
+ //# sourceMappingURL=chunk-AC5OWJLV.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  StorageManager
3
- } from "./chunk-FZP32336.js";
3
+ } from "./chunk-FUCYDRE5.js";
4
4
  import {
5
5
  keyring_exports,
6
6
  secureStoreDir
@@ -388,4 +388,4 @@ export {
388
388
  resolveNamespaceStorageRoot,
389
389
  NamespaceStorageRouter
390
390
  };
391
- //# sourceMappingURL=chunk-CLB32OHM.js.map
391
+ //# sourceMappingURL=chunk-AMAUBUKY.js.map
@@ -49,7 +49,8 @@ async function respondOfflineSnapshotStream(response, snapshot, requestId) {
49
49
  schemaVersion: snapshot.schemaVersion,
50
50
  createdAt: snapshot.createdAt,
51
51
  sourceId: snapshot.sourceId,
52
- includeTranscripts: snapshot.includeTranscripts
52
+ includeTranscripts: snapshot.includeTranscripts,
53
+ deletions: snapshot.deletions
53
54
  }, snapshot.files, requestId);
54
55
  }
55
56
  async function respondOfflineManifestStream(response, manifest, requestId) {
@@ -65,4 +66,4 @@ export {
65
66
  respondOfflineSnapshotStream,
66
67
  respondOfflineManifestStream
67
68
  };
68
- //# sourceMappingURL=chunk-WGP57SR3.js.map
69
+ //# sourceMappingURL=chunk-CK5KOVHW.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/access-http-offline-stream.ts"],"sourcesContent":["import type { ServerResponse } from \"node:http\";\nimport type { OfflineSyncManifestStreamResponse } from \"./access-offline-manifest.js\";\nimport type { EngramAccessOfflineSyncSnapshotStreamResponse } from \"./access-service.js\";\n\nasync function respondOfflineNdjsonStream(\n response: ServerResponse,\n header: unknown,\n files: AsyncIterable<unknown>,\n requestId?: string,\n): Promise<void> {\n response.statusCode = 200;\n response.setHeader(\"content-type\", \"application/x-ndjson; charset=utf-8\");\n response.setHeader(\"cache-control\", \"no-store\");\n if (requestId) response.setHeader(\"x-request-id\", requestId);\n const waitForDrainOrClose = async (): Promise<boolean> => {\n const { promise, resolve, reject } = Promise.withResolvers<boolean>();\n const cleanup = () => {\n response.off(\"drain\", onDrain);\n response.off(\"close\", onClose);\n response.off(\"error\", onError);\n };\n const onDrain = () => {\n cleanup();\n resolve(true);\n };\n const onClose = () => {\n cleanup();\n resolve(false);\n };\n const onError = (error: Error) => {\n cleanup();\n reject(error);\n };\n response.once(\"drain\", onDrain);\n response.once(\"close\", onClose);\n response.once(\"error\", onError);\n return promise;\n };\n const writeLine = async (payload: unknown): Promise<boolean> => {\n if (response.destroyed || response.writableEnded) return false;\n if (response.write(`${JSON.stringify(payload)}\\n`)) return true;\n if (response.destroyed || response.writableEnded) return false;\n return waitForDrainOrClose();\n };\n if (!await writeLine(header)) return;\n for await (const file of files) {\n if (!await writeLine({ type: \"file\", file })) return;\n }\n if (!response.destroyed && !response.writableEnded) response.end();\n}\n\nexport async function respondOfflineSnapshotStream(\n response: ServerResponse,\n snapshot: EngramAccessOfflineSyncSnapshotStreamResponse,\n requestId?: string,\n): Promise<void> {\n await respondOfflineNdjsonStream(response, {\n type: \"snapshot\",\n namespace: snapshot.namespace,\n format: snapshot.format,\n schemaVersion: snapshot.schemaVersion,\n createdAt: snapshot.createdAt,\n sourceId: snapshot.sourceId,\n includeTranscripts: snapshot.includeTranscripts,\n }, snapshot.files, requestId);\n}\n\nexport async function respondOfflineManifestStream(\n response: ServerResponse,\n manifest: OfflineSyncManifestStreamResponse,\n requestId?: string,\n): Promise<void> {\n await respondOfflineNdjsonStream(response, {\n type: \"manifest\",\n namespace: manifest.namespace,\n format: manifest.format,\n schemaVersion: manifest.schemaVersion,\n }, manifest.files, requestId);\n}\n"],"mappings":";AAIA,eAAe,2BACb,UACA,QACA,OACA,WACe;AACf,WAAS,aAAa;AACtB,WAAS,UAAU,gBAAgB,qCAAqC;AACxE,WAAS,UAAU,iBAAiB,UAAU;AAC9C,MAAI,UAAW,UAAS,UAAU,gBAAgB,SAAS;AAC3D,QAAM,sBAAsB,YAA8B;AACxD,UAAM,EAAE,SAAS,SAAS,OAAO,IAAI,QAAQ,cAAuB;AACpE,UAAM,UAAU,MAAM;AACpB,eAAS,IAAI,SAAS,OAAO;AAC7B,eAAS,IAAI,SAAS,OAAO;AAC7B,eAAS,IAAI,SAAS,OAAO;AAAA,IAC/B;AACA,UAAM,UAAU,MAAM;AACpB,cAAQ;AACR,cAAQ,IAAI;AAAA,IACd;AACA,UAAM,UAAU,MAAM;AACpB,cAAQ;AACR,cAAQ,KAAK;AAAA,IACf;AACA,UAAM,UAAU,CAAC,UAAiB;AAChC,cAAQ;AACR,aAAO,KAAK;AAAA,IACd;AACA,aAAS,KAAK,SAAS,OAAO;AAC9B,aAAS,KAAK,SAAS,OAAO;AAC9B,aAAS,KAAK,SAAS,OAAO;AAC9B,WAAO;AAAA,EACT;AACA,QAAM,YAAY,OAAO,YAAuC;AAC9D,QAAI,SAAS,aAAa,SAAS,cAAe,QAAO;AACzD,QAAI,SAAS,MAAM,GAAG,KAAK,UAAU,OAAO,CAAC;AAAA,CAAI,EAAG,QAAO;AAC3D,QAAI,SAAS,aAAa,SAAS,cAAe,QAAO;AACzD,WAAO,oBAAoB;AAAA,EAC7B;AACA,MAAI,CAAC,MAAM,UAAU,MAAM,EAAG;AAC9B,mBAAiB,QAAQ,OAAO;AAC9B,QAAI,CAAC,MAAM,UAAU,EAAE,MAAM,QAAQ,KAAK,CAAC,EAAG;AAAA,EAChD;AACA,MAAI,CAAC,SAAS,aAAa,CAAC,SAAS,cAAe,UAAS,IAAI;AACnE;AAEA,eAAsB,6BACpB,UACA,UACA,WACe;AACf,QAAM,2BAA2B,UAAU;AAAA,IACzC,MAAM;AAAA,IACN,WAAW,SAAS;AAAA,IACpB,QAAQ,SAAS;AAAA,IACjB,eAAe,SAAS;AAAA,IACxB,WAAW,SAAS;AAAA,IACpB,UAAU,SAAS;AAAA,IACnB,oBAAoB,SAAS;AAAA,EAC/B,GAAG,SAAS,OAAO,SAAS;AAC9B;AAEA,eAAsB,6BACpB,UACA,UACA,WACe;AACf,QAAM,2BAA2B,UAAU;AAAA,IACzC,MAAM;AAAA,IACN,WAAW,SAAS;AAAA,IACpB,QAAQ,SAAS;AAAA,IACjB,eAAe,SAAS;AAAA,EAC1B,GAAG,SAAS,OAAO,SAAS;AAC9B;","names":[]}
1
+ {"version":3,"sources":["../src/access-http-offline-stream.ts"],"sourcesContent":["import type { ServerResponse } from \"node:http\";\nimport type { OfflineSyncManifestStreamResponse } from \"./access-offline-manifest.js\";\nimport type { EngramAccessOfflineSyncSnapshotStreamResponse } from \"./access-service.js\";\n\nasync function respondOfflineNdjsonStream(\n response: ServerResponse,\n header: unknown,\n files: AsyncIterable<unknown>,\n requestId?: string,\n): Promise<void> {\n response.statusCode = 200;\n response.setHeader(\"content-type\", \"application/x-ndjson; charset=utf-8\");\n response.setHeader(\"cache-control\", \"no-store\");\n if (requestId) response.setHeader(\"x-request-id\", requestId);\n const waitForDrainOrClose = async (): Promise<boolean> => {\n const { promise, resolve, reject } = Promise.withResolvers<boolean>();\n const cleanup = () => {\n response.off(\"drain\", onDrain);\n response.off(\"close\", onClose);\n response.off(\"error\", onError);\n };\n const onDrain = () => {\n cleanup();\n resolve(true);\n };\n const onClose = () => {\n cleanup();\n resolve(false);\n };\n const onError = (error: Error) => {\n cleanup();\n reject(error);\n };\n response.once(\"drain\", onDrain);\n response.once(\"close\", onClose);\n response.once(\"error\", onError);\n return promise;\n };\n const writeLine = async (payload: unknown): Promise<boolean> => {\n if (response.destroyed || response.writableEnded) return false;\n if (response.write(`${JSON.stringify(payload)}\\n`)) return true;\n if (response.destroyed || response.writableEnded) return false;\n return waitForDrainOrClose();\n };\n if (!await writeLine(header)) return;\n for await (const file of files) {\n if (!await writeLine({ type: \"file\", file })) return;\n }\n if (!response.destroyed && !response.writableEnded) response.end();\n}\n\nexport async function respondOfflineSnapshotStream(\n response: ServerResponse,\n snapshot: EngramAccessOfflineSyncSnapshotStreamResponse,\n requestId?: string,\n): Promise<void> {\n await respondOfflineNdjsonStream(response, {\n type: \"snapshot\",\n namespace: snapshot.namespace,\n format: snapshot.format,\n schemaVersion: snapshot.schemaVersion,\n createdAt: snapshot.createdAt,\n sourceId: snapshot.sourceId,\n includeTranscripts: snapshot.includeTranscripts,\n deletions: snapshot.deletions,\n }, snapshot.files, requestId);\n}\n\nexport async function respondOfflineManifestStream(\n response: ServerResponse,\n manifest: OfflineSyncManifestStreamResponse,\n requestId?: string,\n): Promise<void> {\n await respondOfflineNdjsonStream(response, {\n type: \"manifest\",\n namespace: manifest.namespace,\n format: manifest.format,\n schemaVersion: manifest.schemaVersion,\n }, manifest.files, requestId);\n}\n"],"mappings":";AAIA,eAAe,2BACb,UACA,QACA,OACA,WACe;AACf,WAAS,aAAa;AACtB,WAAS,UAAU,gBAAgB,qCAAqC;AACxE,WAAS,UAAU,iBAAiB,UAAU;AAC9C,MAAI,UAAW,UAAS,UAAU,gBAAgB,SAAS;AAC3D,QAAM,sBAAsB,YAA8B;AACxD,UAAM,EAAE,SAAS,SAAS,OAAO,IAAI,QAAQ,cAAuB;AACpE,UAAM,UAAU,MAAM;AACpB,eAAS,IAAI,SAAS,OAAO;AAC7B,eAAS,IAAI,SAAS,OAAO;AAC7B,eAAS,IAAI,SAAS,OAAO;AAAA,IAC/B;AACA,UAAM,UAAU,MAAM;AACpB,cAAQ;AACR,cAAQ,IAAI;AAAA,IACd;AACA,UAAM,UAAU,MAAM;AACpB,cAAQ;AACR,cAAQ,KAAK;AAAA,IACf;AACA,UAAM,UAAU,CAAC,UAAiB;AAChC,cAAQ;AACR,aAAO,KAAK;AAAA,IACd;AACA,aAAS,KAAK,SAAS,OAAO;AAC9B,aAAS,KAAK,SAAS,OAAO;AAC9B,aAAS,KAAK,SAAS,OAAO;AAC9B,WAAO;AAAA,EACT;AACA,QAAM,YAAY,OAAO,YAAuC;AAC9D,QAAI,SAAS,aAAa,SAAS,cAAe,QAAO;AACzD,QAAI,SAAS,MAAM,GAAG,KAAK,UAAU,OAAO,CAAC;AAAA,CAAI,EAAG,QAAO;AAC3D,QAAI,SAAS,aAAa,SAAS,cAAe,QAAO;AACzD,WAAO,oBAAoB;AAAA,EAC7B;AACA,MAAI,CAAC,MAAM,UAAU,MAAM,EAAG;AAC9B,mBAAiB,QAAQ,OAAO;AAC9B,QAAI,CAAC,MAAM,UAAU,EAAE,MAAM,QAAQ,KAAK,CAAC,EAAG;AAAA,EAChD;AACA,MAAI,CAAC,SAAS,aAAa,CAAC,SAAS,cAAe,UAAS,IAAI;AACnE;AAEA,eAAsB,6BACpB,UACA,UACA,WACe;AACf,QAAM,2BAA2B,UAAU;AAAA,IACzC,MAAM;AAAA,IACN,WAAW,SAAS;AAAA,IACpB,QAAQ,SAAS;AAAA,IACjB,eAAe,SAAS;AAAA,IACxB,WAAW,SAAS;AAAA,IACpB,UAAU,SAAS;AAAA,IACnB,oBAAoB,SAAS;AAAA,IAC7B,WAAW,SAAS;AAAA,EACtB,GAAG,SAAS,OAAO,SAAS;AAC9B;AAEA,eAAsB,6BACpB,UACA,UACA,WACe;AACf,QAAM,2BAA2B,UAAU;AAAA,IACzC,MAAM;AAAA,IACN,WAAW,SAAS;AAAA,IACpB,QAAQ,SAAS;AAAA,IACjB,eAAe,SAAS;AAAA,EAC1B,GAAG,SAAS,OAAO,SAAS;AAC9B;","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-V7IZKJI3.js";
4
4
  import {
5
5
  AdapterRegistry
6
- } from "./chunk-2QSZNTDO.js";
6
+ } from "./chunk-RKNJBZ55.js";
7
7
  import {
8
8
  WriteRateLimiter
9
9
  } from "./chunk-MKQBXQKU.js";
@@ -21,10 +21,10 @@ import {
21
21
  processChatMessage,
22
22
  sessionBelongsToPrincipal,
23
23
  subscribeChatTranscript
24
- } from "./chunk-XTAUXTDO.js";
24
+ } from "./chunk-4FBVAGV3.js";
25
25
  import {
26
26
  RelayMissionStoreError
27
- } from "./chunk-BGHFOD5A.js";
27
+ } from "./chunk-V2TNYF6Q.js";
28
28
  import {
29
29
  validateRequest
30
30
  } from "./chunk-NIS256NW.js";
@@ -46,16 +46,16 @@ import {
46
46
  import {
47
47
  respondOfflineManifestStream,
48
48
  respondOfflineSnapshotStream
49
- } from "./chunk-WGP57SR3.js";
49
+ } from "./chunk-CK5KOVHW.js";
50
50
  import {
51
51
  authorizationProbeNamespaces,
52
52
  probeOperationAuthorization
53
- } from "./chunk-QVSBTCVP.js";
53
+ } from "./chunk-3COYXTGM.js";
54
54
  import {
55
55
  CorrectionContractError,
56
56
  getOperation,
57
57
  resolveQueryNamespaceWritablePreflight
58
- } from "./chunk-ZI32MKDW.js";
58
+ } from "./chunk-QUENPGWZ.js";
59
59
  import {
60
60
  isTrustZoneName
61
61
  } from "./chunk-JGSKJHF7.js";
@@ -2797,60 +2797,6 @@ var EngramAccessHttpServer = class {
2797
2797
  }
2798
2798
  res.end(body);
2799
2799
  }
2800
- async respondOfflineSnapshotStream(res, snapshot) {
2801
- res.statusCode = 200;
2802
- res.setHeader("content-type", "application/x-ndjson; charset=utf-8");
2803
- res.setHeader("cache-control", "no-store");
2804
- const cid = correlationIdStore.getStore();
2805
- if (cid) {
2806
- res.setHeader("x-request-id", cid);
2807
- }
2808
- const waitForDrainOrClose = async () => new Promise((resolve, reject) => {
2809
- const cleanup = () => {
2810
- res.off("drain", onDrain);
2811
- res.off("close", onClose);
2812
- res.off("error", onError);
2813
- };
2814
- const onDrain = () => {
2815
- cleanup();
2816
- resolve(true);
2817
- };
2818
- const onClose = () => {
2819
- cleanup();
2820
- resolve(false);
2821
- };
2822
- const onError = (error) => {
2823
- cleanup();
2824
- reject(error);
2825
- };
2826
- res.once("drain", onDrain);
2827
- res.once("close", onClose);
2828
- res.once("error", onError);
2829
- });
2830
- const writeLine = async (payload) => {
2831
- if (res.destroyed || res.writableEnded) return false;
2832
- if (res.write(`${JSON.stringify(payload)}
2833
- `)) return true;
2834
- if (res.destroyed || res.writableEnded) return false;
2835
- return waitForDrainOrClose();
2836
- };
2837
- if (!await writeLine({
2838
- type: "snapshot",
2839
- namespace: snapshot.namespace,
2840
- format: snapshot.format,
2841
- schemaVersion: snapshot.schemaVersion,
2842
- createdAt: snapshot.createdAt,
2843
- sourceId: snapshot.sourceId,
2844
- includeTranscripts: snapshot.includeTranscripts,
2845
- deletions: snapshot.deletions
2846
- })) return;
2847
- for await (const file of snapshot.files) {
2848
- if (!await writeLine({ type: "file", file })) return;
2849
- }
2850
- if (!res.destroyed && !res.writableEnded) {
2851
- res.end();
2852
- }
2853
- }
2854
2800
  respondBinary(res, status, body, headers = {}) {
2855
2801
  res.statusCode = status;
2856
2802
  res.setHeader("content-type", "application/octet-stream");
@@ -3288,4 +3234,4 @@ export {
3288
3234
  MeetingsInputError,
3289
3235
  EngramAccessHttpServer
3290
3236
  };
3291
- //# sourceMappingURL=chunk-XSFHWBQO.js.map
3237
+ //# sourceMappingURL=chunk-CX4ZUMC6.js.map