@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
@@ -1 +0,0 @@
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 const baseDir = base === \"index\" ? path.posix.dirname(config.indexFile) : pagesDir;\n const rootRelativeTarget = path.posix.normalize(path.posix.join(baseDir, withoutFragment));\n const relative = path.posix.relative(pagesDir, rootRelativeTarget);\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\nexport async function runExternalWikiCliCommand(\n roots: readonly ExternalWikiRoot[],\n rest: readonly string[],\n io: { stdout: NodeJS.WritableStream; stderr: NodeJS.WritableStream },\n): Promise<number> {\n const { searchExternalWikis } = await import(\"./external-wiki-search.js\");\n const query = rest.filter((a) => !a.startsWith(\"-\")).join(\" \").trim();\n if (!query) {\n io.stderr.write(\"external-wiki: provide a search query\\n\");\n return 1;\n }\n const enabled = roots.filter((r) => r.enabled !== false);\n if (enabled.length === 0) {\n io.stderr.write(\"external-wiki: no enabled wiki roots configured\\n\");\n return 1;\n }\n try {\n const result = await searchExternalWikis(enabled, { query });\n if (result.hits.length === 0) {\n io.stdout.write(\"No results.\\n\");\n return 0;\n }\n for (const hit of result.hits) {\n io.stdout.write(`[${hit.wikiId}] ${hit.path} (score ${hit.score})\\n${hit.snippet}\\n\\n`);\n }\n if (result.degradedWikiIds.length > 0) {\n io.stderr.write(`Warning: degraded roots: ${result.degradedWikiIds.join(\", \")}\\n`);\n }\n return 0;\n } catch (error) {\n io.stderr.write(`external-wiki: ${error instanceof Error ? error.message : \"search failed\"}\\n`);\n return 1;\n }\n}\n"],"mappings":"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","names":[]}