@remnic/core 9.69.102 → 9.69.104

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 (366) hide show
  1. package/dist/access-admin-ops-surface.js +53 -52
  2. package/dist/access-authorization-probe.js +54 -53
  3. package/dist/access-boundary.js +53 -52
  4. package/dist/access-cli.js +153 -150
  5. package/dist/access-cli.js.map +1 -1
  6. package/dist/access-extraction-force-flush.js +53 -52
  7. package/dist/access-http-briefing.js +54 -53
  8. package/dist/access-http-query.js +55 -54
  9. package/dist/access-http.js +77 -76
  10. package/dist/access-identity-continuity-surface.js +53 -52
  11. package/dist/access-lcm-surface.js +53 -52
  12. package/dist/access-mcp.js +66 -65
  13. package/dist/access-namespace-preflight.js +53 -52
  14. package/dist/access-observe-write-category.js +9 -9
  15. package/dist/access-observe-write-surface.js +53 -52
  16. package/dist/access-offline-manifest.js +6 -6
  17. package/dist/access-operations-batch.js +57 -56
  18. package/dist/access-operations.js +64 -63
  19. package/dist/access-recall-concurrency.js +53 -52
  20. package/dist/access-recall-response.js +53 -52
  21. package/dist/access-recall-surface.js +53 -52
  22. package/dist/access-schema.js +8 -8
  23. package/dist/access-service.js +53 -52
  24. package/dist/access-surface-catalog.js +55 -54
  25. package/dist/access-surface-catalog.js.map +1 -1
  26. package/dist/active-recall.js +21 -20
  27. package/dist/active-recall.js.map +1 -1
  28. package/dist/adapters/index.js +4 -4
  29. package/dist/adapters/registry.js +2 -2
  30. package/dist/briefing.js +14 -13
  31. package/dist/buffer.js +5 -5
  32. package/dist/{capsule-crypto-7FJQINUR.js → capsule-crypto-YO5QJ6L3.js} +2 -2
  33. package/dist/{capsule-merge-ZCXUPLNJ.js → capsule-merge-42GJGDUC.js} +4 -3
  34. package/dist/{capsule-merge-ZCXUPLNJ.js.map → capsule-merge-42GJGDUC.js.map} +1 -1
  35. package/dist/causal-behavior.js +2 -2
  36. package/dist/causal-chain.js +2 -2
  37. package/dist/causal-consolidation.js +17 -16
  38. package/dist/causal-consolidation.js.map +1 -1
  39. package/dist/causal-retrieval.js +2 -2
  40. package/dist/causal-trajectory-graph.js +3 -3
  41. package/dist/causal-trajectory.js +1 -1
  42. package/dist/{chunk-47LTKAGL.js → chunk-2COXDQ6C.js} +21 -6
  43. package/dist/chunk-2COXDQ6C.js.map +1 -0
  44. package/dist/{chunk-IOYY6ROU.js → chunk-2MMBJE53.js} +7 -7
  45. package/dist/{chunk-QSXEQPC4.js → chunk-2OFDC3AK.js} +2 -2
  46. package/dist/{chunk-4MP2Q2EI.js → chunk-2TCNEJ36.js} +4 -4
  47. package/dist/{chunk-5FAGCOZD.js → chunk-2U3R3DDH.js} +9 -9
  48. package/dist/{chunk-SCXURCVT.js → chunk-2UPTRDGM.js} +3 -3
  49. package/dist/{chunk-XVZA6VXC.js → chunk-3SL52JKD.js} +4 -4
  50. package/dist/{chunk-SBOCJ47I.js → chunk-5R4YPRAR.js} +19 -6
  51. package/dist/chunk-5R4YPRAR.js.map +1 -0
  52. package/dist/{chunk-ANPRNTPT.js → chunk-63LFM77Z.js} +15 -2
  53. package/dist/chunk-63LFM77Z.js.map +1 -0
  54. package/dist/{chunk-DINOVGA5.js → chunk-6WRHNA4I.js} +48 -48
  55. package/dist/chunk-6WRHNA4I.js.map +1 -0
  56. package/dist/{chunk-DSPWVQZ6.js → chunk-73R4HOOK.js} +3 -3
  57. package/dist/chunk-7CT3AI52.js +84 -0
  58. package/dist/chunk-7CT3AI52.js.map +1 -0
  59. package/dist/{chunk-PHBH74Q6.js → chunk-7NBUE5VY.js} +2 -2
  60. package/dist/{chunk-S533KGX6.js → chunk-7X7A7KVN.js} +2 -2
  61. package/dist/{chunk-XEATJBNB.js → chunk-7YQR6XHY.js} +71 -71
  62. package/dist/{chunk-F5MINS3R.js → chunk-A6WNTVA7.js} +3 -3
  63. package/dist/{chunk-F5MINS3R.js.map → chunk-A6WNTVA7.js.map} +1 -1
  64. package/dist/{chunk-533RHNHB.js → chunk-ATFFWIKL.js} +2 -2
  65. package/dist/{chunk-QCYUIZK2.js → chunk-AU43D3IT.js} +7 -7
  66. package/dist/{chunk-JZ66PN72.js → chunk-AWSP3WNM.js} +2 -2
  67. package/dist/{chunk-IY47KPML.js → chunk-B3OFQP5Y.js} +6 -6
  68. package/dist/{chunk-4DXNOVNW.js → chunk-B454SHPU.js} +6 -6
  69. package/dist/{chunk-3LMOJXZR.js → chunk-BKVCTTEN.js} +2 -2
  70. package/dist/{chunk-2NLLXCJG.js → chunk-BXLOS5AJ.js} +2 -2
  71. package/dist/{chunk-CZN53OT5.js → chunk-CGBE3N7T.js} +2 -2
  72. package/dist/{chunk-HWLIMQE2.js → chunk-CHDGJJV6.js} +2 -2
  73. package/dist/{chunk-UYPQOASU.js → chunk-CNBGAFDY.js} +2 -2
  74. package/dist/{chunk-JTC3PBNH.js → chunk-DB6XFMOF.js} +3 -3
  75. package/dist/{chunk-X7Y7WX73.js → chunk-DQEMWVMT.js} +1 -1
  76. package/dist/{chunk-UFIZRMQZ.js → chunk-E4XLFYHV.js} +61 -29
  77. package/dist/chunk-E4XLFYHV.js.map +1 -0
  78. package/dist/{chunk-4OXXDL3X.js → chunk-EWWK65CI.js} +2 -2
  79. package/dist/{chunk-DFPG47ET.js → chunk-EZ3F4YIN.js} +11 -11
  80. package/dist/{chunk-V3I4NLZP.js → chunk-FYX2LXIX.js} +2 -2
  81. package/dist/{chunk-PNVOKGAX.js → chunk-G5I5ZT6O.js} +2 -2
  82. package/dist/{chunk-7Z2UKRNJ.js → chunk-GQ6ZF4LD.js} +2 -2
  83. package/dist/{chunk-PEZAHDDU.js → chunk-GZ2KV2RO.js} +5 -5
  84. package/dist/chunk-H6Z3RNW3.js +330 -0
  85. package/dist/chunk-H6Z3RNW3.js.map +1 -0
  86. package/dist/{chunk-645WOU5I.js → chunk-H7BZBSP6.js} +4 -4
  87. package/dist/{chunk-AXHU56C3.js → chunk-HWGFTTPS.js} +2 -2
  88. package/dist/{chunk-2SGLMP2E.js → chunk-IDSZNHIP.js} +2 -2
  89. package/dist/{chunk-LO4UKPKX.js → chunk-IFCKHPY4.js} +2 -2
  90. package/dist/{chunk-ZHXSOMYH.js → chunk-IOMLGJHG.js} +4 -4
  91. package/dist/{chunk-YRULQW5J.js → chunk-ISX7GVZE.js} +4 -4
  92. package/dist/{chunk-5PHZSD75.js → chunk-J3ZJBX7I.js} +2 -2
  93. package/dist/{chunk-X5TAWDRO.js → chunk-JC7QQ2DJ.js} +2 -2
  94. package/dist/{chunk-RFQT7IZO.js → chunk-JRDL3FGM.js} +3 -3
  95. package/dist/{chunk-OGZC2WUX.js → chunk-JWFTPRYD.js} +2 -2
  96. package/dist/{chunk-7OA4JWP5.js → chunk-KFHEZJQZ.js} +2 -2
  97. package/dist/{chunk-P3WRFSYF.js → chunk-KMN2JE4D.js} +2 -2
  98. package/dist/{chunk-GNBZB43J.js → chunk-KV7LFOPF.js} +2 -2
  99. package/dist/{chunk-L6YCGS7I.js → chunk-KYUVFCT2.js} +2 -2
  100. package/dist/{chunk-5BVL2XUD.js → chunk-LHDSCWDK.js} +17 -17
  101. package/dist/{chunk-SF7CWSR6.js → chunk-LXJZUNLX.js} +2 -2
  102. package/dist/{chunk-XCB6QDL6.js → chunk-M5GVCJSJ.js} +8 -2
  103. package/dist/chunk-M5GVCJSJ.js.map +1 -0
  104. package/dist/{chunk-DGS34QSY.js → chunk-MFZACYZ6.js} +2 -2
  105. package/dist/{chunk-PYYQCHJC.js → chunk-MZOQ26LH.js} +2 -2
  106. package/dist/{chunk-R2TVWQLR.js → chunk-NT2Q6AHC.js} +2 -2
  107. package/dist/{chunk-ABGM2BN4.js → chunk-O43AAJFQ.js} +2 -2
  108. package/dist/{chunk-G3BW6SDE.js → chunk-OFGTRDWX.js} +3 -3
  109. package/dist/{chunk-6Z263Z3E.js → chunk-OWV6LKNZ.js} +2 -2
  110. package/dist/{chunk-HIHN4XHL.js → chunk-PQ7EB5AD.js} +3 -3
  111. package/dist/{chunk-VVYLVE6R.js → chunk-PQKZLBCJ.js} +1 -1
  112. package/dist/{chunk-OFFW73OZ.js → chunk-PRNR47DI.js} +2 -2
  113. package/dist/{chunk-UL7KDVLC.js → chunk-PZ2QQULY.js} +11 -11
  114. package/dist/{chunk-55NZVUNI.js → chunk-QAIVTLL2.js} +3 -3
  115. package/dist/{chunk-M7T2NKET.js → chunk-QKCGOECM.js} +2 -2
  116. package/dist/{chunk-ARY6O3JN.js → chunk-QUNCLKHM.js} +2 -2
  117. package/dist/{chunk-Z3O53WZR.js → chunk-QWUJWBZ5.js} +2 -2
  118. package/dist/{chunk-RZXFXKWY.js → chunk-QX3K3INR.js} +2 -2
  119. package/dist/{chunk-HFOY2SBG.js → chunk-RYN4AIRM.js} +7 -5
  120. package/dist/chunk-RYN4AIRM.js.map +1 -0
  121. package/dist/{chunk-4LNCLZNK.js → chunk-S2GR3T7W.js} +2 -2
  122. package/dist/{chunk-VPOAMPDD.js → chunk-SFDBLCZV.js} +59 -59
  123. package/dist/{chunk-2IWBHZ3H.js → chunk-SIGDETMB.js} +2 -2
  124. package/dist/chunk-SP4DB6SX.js +19 -0
  125. package/dist/chunk-SP4DB6SX.js.map +1 -0
  126. package/dist/{chunk-DBWNTLLI.js → chunk-STQC2FYQ.js} +6 -6
  127. package/dist/{chunk-S5R77WHV.js → chunk-SWXPR5SE.js} +2 -2
  128. package/dist/{chunk-3DNTFZAT.js → chunk-T32YYUT2.js} +2 -2
  129. package/dist/{chunk-W5JQSVPZ.js → chunk-T6RQNV7E.js} +2 -2
  130. package/dist/{chunk-O23QMYN4.js → chunk-TRN56SPQ.js} +2 -2
  131. package/dist/{chunk-NM3BT2OH.js → chunk-TXTRHF3B.js} +2 -2
  132. package/dist/{chunk-7AUIGOH4.js → chunk-VDVHIRCK.js} +2 -2
  133. package/dist/{chunk-KQAFEZQX.js → chunk-VDX2J7OX.js} +2 -2
  134. package/dist/{chunk-ZGYLPCWN.js → chunk-VO2BNAA2.js} +3 -3
  135. package/dist/{chunk-WVEECBCG.js → chunk-VV2MVHCJ.js} +2 -2
  136. package/dist/{chunk-HVDEKJJR.js → chunk-VYIBRCVW.js} +70 -61
  137. package/dist/chunk-VYIBRCVW.js.map +1 -0
  138. package/dist/{chunk-B3O3IRZN.js → chunk-VZBW6CDG.js} +1 -1
  139. package/dist/{chunk-JPKK466T.js → chunk-W5XWHTDO.js} +2 -2
  140. package/dist/{chunk-CYG3K2T2.js → chunk-WR66CTVU.js} +6 -6
  141. package/dist/{chunk-JNAOTN7B.js → chunk-XLWMNDQR.js} +4 -4
  142. package/dist/chunk-XLWMNDQR.js.map +1 -0
  143. package/dist/{chunk-RP7RSENW.js → chunk-XQWKB6PY.js} +2 -2
  144. package/dist/{chunk-64S6X4IU.js → chunk-XTN54NML.js} +4 -4
  145. package/dist/{chunk-UCPGOUDZ.js → chunk-Y57GJDG5.js} +108 -3
  146. package/dist/chunk-Y57GJDG5.js.map +1 -0
  147. package/dist/{chunk-KYLYXGKD.js → chunk-YI6XIFQV.js} +2 -2
  148. package/dist/{chunk-EZ25VE3G.js → chunk-YNDLCWXS.js} +4 -4
  149. package/dist/{chunk-Y7427SL7.js → chunk-Z6EZCN6Z.js} +10 -10
  150. package/dist/{chunk-5K2ALMSZ.js → chunk-ZRUC7FD3.js} +2 -2
  151. package/dist/cli.js +103 -102
  152. package/dist/coding/export-okf-codegraph.js +13 -12
  153. package/dist/coding/export-okf-codegraph.js.map +1 -1
  154. package/dist/coding/pre-action-gate.js +2 -2
  155. package/dist/compounding/engine.js +14 -13
  156. package/dist/config.js +21 -20
  157. package/dist/connectors/codex-materialize-runner.js +14 -13
  158. package/dist/connectors/index.js +14 -13
  159. package/dist/consolidation-provenance-check.js +4 -3
  160. package/dist/consolidation-undo.js +3 -2
  161. package/dist/consolidation-undo.js.map +1 -1
  162. package/dist/contradiction/index.js +3 -2
  163. package/dist/convergence-refresh.js +16 -15
  164. package/dist/corpus-watermark.js +16 -15
  165. package/dist/dashboard-runtime.js +2 -2
  166. package/dist/deep-recall-http-glue.js +9 -9
  167. package/dist/deep-recall.js +2 -2
  168. package/dist/embedding-fallback.d.ts +2 -1
  169. package/dist/embedding-fallback.d.ts.map +1 -1
  170. package/dist/embedding-fallback.js +2 -2
  171. package/dist/embedding-index-storage.d.ts +28 -1
  172. package/dist/embedding-index-storage.d.ts.map +1 -1
  173. package/dist/embedding-index-storage.js +1 -1
  174. package/dist/entity-mention-carry.d.ts +16 -0
  175. package/dist/entity-mention-carry.d.ts.map +1 -0
  176. package/dist/entity-mention-carry.js +8 -0
  177. package/dist/entity-mention-epoch.d.ts +22 -0
  178. package/dist/entity-mention-epoch.d.ts.map +1 -0
  179. package/dist/entity-mention-epoch.js +8 -0
  180. package/dist/entity-mention-index-cache.d.ts +28 -0
  181. package/dist/entity-mention-index-cache.d.ts.map +1 -0
  182. package/dist/entity-mention-index-cache.js +29 -0
  183. package/dist/entity-mention-index-cache.js.map +1 -0
  184. package/dist/entity-retrieval.d.ts.map +1 -1
  185. package/dist/entity-retrieval.js +18 -15
  186. package/dist/event-order-recall.js +2 -2
  187. package/dist/external-wiki-access.js +54 -53
  188. package/dist/extraction-span-materialize.js +2 -2
  189. package/dist/extraction.js +21 -20
  190. package/dist/{graph-edge-decay-MKIRZ762.js → graph-edge-decay-PVKDKLQK.js} +6 -6
  191. package/dist/graph-edge-decay-PVKDKLQK.js.map +1 -0
  192. package/dist/graph-jsonl.js +4 -4
  193. package/dist/graph-snapshot.js +4 -4
  194. package/dist/graph.js +5 -5
  195. package/dist/harmonic-retrieval.js +1 -1
  196. package/dist/index.js +187 -184
  197. package/dist/lcm/engine.js +4 -4
  198. package/dist/lcm/index.js +13 -13
  199. package/dist/location/index.js +16 -15
  200. package/dist/maintenance/memory-governance.js +14 -13
  201. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +14 -13
  202. package/dist/maintenance/rebuild-memory-projection.js +15 -14
  203. package/dist/memory-browse-operations.js +54 -53
  204. package/dist/memory-browse.js +5 -5
  205. package/dist/memory-corpus-version.d.ts +8 -3
  206. package/dist/memory-corpus-version.d.ts.map +1 -1
  207. package/dist/memory-corpus-version.js +2 -1
  208. package/dist/namespaces/migrate.js +15 -14
  209. package/dist/namespaces/search.js +7 -7
  210. package/dist/namespaces/storage.js +14 -13
  211. package/dist/offline-sync-changeset-generations.js +4 -4
  212. package/dist/offline-sync-embedding-generation.js +3 -3
  213. package/dist/offline-sync-exclude-globs.d.ts +8 -0
  214. package/dist/offline-sync-exclude-globs.d.ts.map +1 -1
  215. package/dist/offline-sync-exclude-globs.js +3 -1
  216. package/dist/offline-sync-snapshot-stream.js +6 -6
  217. package/dist/offline-sync.d.ts.map +1 -1
  218. package/dist/offline-sync.js +9 -9
  219. package/dist/operator-doctor-corpus.js +17 -16
  220. package/dist/operator-toolkit.js +34 -33
  221. package/dist/orchestration/maintenance.js +22 -21
  222. package/dist/orchestrator.js +153 -150
  223. package/dist/page-versioning.js +3 -2
  224. package/dist/preferences/preference-drift.d.ts.map +1 -1
  225. package/dist/procedural/library-maintenance.d.ts.map +1 -1
  226. package/dist/qmd.js +4 -4
  227. package/dist/recall-navigation-operations.js +54 -53
  228. package/dist/recall-navigation.js +53 -52
  229. package/dist/recall-state-view-admission.js +5 -5
  230. package/dist/recall-why-service.js +5 -5
  231. package/dist/{resolution-BROE3TRO.js → resolution-RSG4HZTL.js} +4 -3
  232. package/dist/resolution-RSG4HZTL.js.map +1 -0
  233. package/dist/resume-bundles.js +22 -21
  234. package/dist/search/factory.js +6 -6
  235. package/dist/search/index.js +12 -12
  236. package/dist/semantic-consolidation.js +15 -14
  237. package/dist/semantic-rule-promotion.js +14 -13
  238. package/dist/semantic-rule-verifier.js +14 -13
  239. package/dist/source-agent-qualifier.js +17 -16
  240. package/dist/standup/build.js +14 -13
  241. package/dist/storage/entity-mention-frontmatter-hold.d.ts +14 -0
  242. package/dist/storage/entity-mention-frontmatter-hold.d.ts.map +1 -0
  243. package/dist/storage.d.ts +13 -9
  244. package/dist/storage.d.ts.map +1 -1
  245. package/dist/storage.js +13 -12
  246. package/dist/support-passport/index.js +56 -55
  247. package/dist/transfer/backup.js +2 -2
  248. package/dist/transfer/capsule-export.js +2 -2
  249. package/dist/transfer/capsule-import.js +5 -4
  250. package/dist/transfer/export-okf.js +14 -13
  251. package/dist/verified-recall.js +14 -13
  252. package/dist/who-knows-cli.js +15 -14
  253. package/dist/who-knows.js +14 -13
  254. package/package.json +2 -2
  255. package/src/embedding-fallback-cross-process.test.ts +533 -0
  256. package/src/embedding-fallback.ts +19 -7
  257. package/src/embedding-index-storage.test.ts +482 -2
  258. package/src/embedding-index-storage.ts +131 -2
  259. package/src/entity-mention-carry.ts +31 -0
  260. package/src/entity-mention-epoch.ts +120 -0
  261. package/src/entity-mention-index-cache.ts +443 -0
  262. package/src/entity-retrieval.ts +72 -71
  263. package/src/maintenance/rebuild-memory-projection.ts +1 -1
  264. package/src/memory-corpus-version.ts +13 -3
  265. package/src/offline-sync-exclude-globs.ts +23 -0
  266. package/src/offline-sync.test.ts +325 -0
  267. package/src/offline-sync.ts +17 -1
  268. package/src/preferences/preference-drift.ts +5 -3
  269. package/src/procedural/library-maintenance.ts +4 -3
  270. package/src/semantic-rule-promotion.ts +1 -1
  271. package/src/storage/entity-mention-frontmatter-hold.ts +44 -0
  272. package/src/storage.ts +40 -38
  273. package/dist/chunk-47LTKAGL.js.map +0 -1
  274. package/dist/chunk-ANPRNTPT.js.map +0 -1
  275. package/dist/chunk-DINOVGA5.js.map +0 -1
  276. package/dist/chunk-HFOY2SBG.js.map +0 -1
  277. package/dist/chunk-HVDEKJJR.js.map +0 -1
  278. package/dist/chunk-JNAOTN7B.js.map +0 -1
  279. package/dist/chunk-SBOCJ47I.js.map +0 -1
  280. package/dist/chunk-UCPGOUDZ.js.map +0 -1
  281. package/dist/chunk-UFIZRMQZ.js.map +0 -1
  282. package/dist/chunk-XCB6QDL6.js.map +0 -1
  283. /package/dist/{capsule-crypto-7FJQINUR.js.map → capsule-crypto-YO5QJ6L3.js.map} +0 -0
  284. /package/dist/{chunk-IOYY6ROU.js.map → chunk-2MMBJE53.js.map} +0 -0
  285. /package/dist/{chunk-QSXEQPC4.js.map → chunk-2OFDC3AK.js.map} +0 -0
  286. /package/dist/{chunk-4MP2Q2EI.js.map → chunk-2TCNEJ36.js.map} +0 -0
  287. /package/dist/{chunk-5FAGCOZD.js.map → chunk-2U3R3DDH.js.map} +0 -0
  288. /package/dist/{chunk-SCXURCVT.js.map → chunk-2UPTRDGM.js.map} +0 -0
  289. /package/dist/{chunk-XVZA6VXC.js.map → chunk-3SL52JKD.js.map} +0 -0
  290. /package/dist/{chunk-DSPWVQZ6.js.map → chunk-73R4HOOK.js.map} +0 -0
  291. /package/dist/{chunk-PHBH74Q6.js.map → chunk-7NBUE5VY.js.map} +0 -0
  292. /package/dist/{chunk-S533KGX6.js.map → chunk-7X7A7KVN.js.map} +0 -0
  293. /package/dist/{chunk-XEATJBNB.js.map → chunk-7YQR6XHY.js.map} +0 -0
  294. /package/dist/{chunk-533RHNHB.js.map → chunk-ATFFWIKL.js.map} +0 -0
  295. /package/dist/{chunk-QCYUIZK2.js.map → chunk-AU43D3IT.js.map} +0 -0
  296. /package/dist/{chunk-JZ66PN72.js.map → chunk-AWSP3WNM.js.map} +0 -0
  297. /package/dist/{chunk-IY47KPML.js.map → chunk-B3OFQP5Y.js.map} +0 -0
  298. /package/dist/{chunk-4DXNOVNW.js.map → chunk-B454SHPU.js.map} +0 -0
  299. /package/dist/{chunk-3LMOJXZR.js.map → chunk-BKVCTTEN.js.map} +0 -0
  300. /package/dist/{chunk-2NLLXCJG.js.map → chunk-BXLOS5AJ.js.map} +0 -0
  301. /package/dist/{chunk-CZN53OT5.js.map → chunk-CGBE3N7T.js.map} +0 -0
  302. /package/dist/{chunk-HWLIMQE2.js.map → chunk-CHDGJJV6.js.map} +0 -0
  303. /package/dist/{chunk-UYPQOASU.js.map → chunk-CNBGAFDY.js.map} +0 -0
  304. /package/dist/{chunk-JTC3PBNH.js.map → chunk-DB6XFMOF.js.map} +0 -0
  305. /package/dist/{chunk-X7Y7WX73.js.map → chunk-DQEMWVMT.js.map} +0 -0
  306. /package/dist/{chunk-4OXXDL3X.js.map → chunk-EWWK65CI.js.map} +0 -0
  307. /package/dist/{chunk-DFPG47ET.js.map → chunk-EZ3F4YIN.js.map} +0 -0
  308. /package/dist/{chunk-V3I4NLZP.js.map → chunk-FYX2LXIX.js.map} +0 -0
  309. /package/dist/{chunk-PNVOKGAX.js.map → chunk-G5I5ZT6O.js.map} +0 -0
  310. /package/dist/{chunk-7Z2UKRNJ.js.map → chunk-GQ6ZF4LD.js.map} +0 -0
  311. /package/dist/{chunk-PEZAHDDU.js.map → chunk-GZ2KV2RO.js.map} +0 -0
  312. /package/dist/{chunk-645WOU5I.js.map → chunk-H7BZBSP6.js.map} +0 -0
  313. /package/dist/{chunk-AXHU56C3.js.map → chunk-HWGFTTPS.js.map} +0 -0
  314. /package/dist/{chunk-2SGLMP2E.js.map → chunk-IDSZNHIP.js.map} +0 -0
  315. /package/dist/{chunk-LO4UKPKX.js.map → chunk-IFCKHPY4.js.map} +0 -0
  316. /package/dist/{chunk-ZHXSOMYH.js.map → chunk-IOMLGJHG.js.map} +0 -0
  317. /package/dist/{chunk-YRULQW5J.js.map → chunk-ISX7GVZE.js.map} +0 -0
  318. /package/dist/{chunk-5PHZSD75.js.map → chunk-J3ZJBX7I.js.map} +0 -0
  319. /package/dist/{chunk-X5TAWDRO.js.map → chunk-JC7QQ2DJ.js.map} +0 -0
  320. /package/dist/{chunk-RFQT7IZO.js.map → chunk-JRDL3FGM.js.map} +0 -0
  321. /package/dist/{chunk-OGZC2WUX.js.map → chunk-JWFTPRYD.js.map} +0 -0
  322. /package/dist/{chunk-7OA4JWP5.js.map → chunk-KFHEZJQZ.js.map} +0 -0
  323. /package/dist/{chunk-P3WRFSYF.js.map → chunk-KMN2JE4D.js.map} +0 -0
  324. /package/dist/{chunk-GNBZB43J.js.map → chunk-KV7LFOPF.js.map} +0 -0
  325. /package/dist/{chunk-L6YCGS7I.js.map → chunk-KYUVFCT2.js.map} +0 -0
  326. /package/dist/{chunk-5BVL2XUD.js.map → chunk-LHDSCWDK.js.map} +0 -0
  327. /package/dist/{chunk-SF7CWSR6.js.map → chunk-LXJZUNLX.js.map} +0 -0
  328. /package/dist/{chunk-DGS34QSY.js.map → chunk-MFZACYZ6.js.map} +0 -0
  329. /package/dist/{chunk-PYYQCHJC.js.map → chunk-MZOQ26LH.js.map} +0 -0
  330. /package/dist/{chunk-R2TVWQLR.js.map → chunk-NT2Q6AHC.js.map} +0 -0
  331. /package/dist/{chunk-ABGM2BN4.js.map → chunk-O43AAJFQ.js.map} +0 -0
  332. /package/dist/{chunk-G3BW6SDE.js.map → chunk-OFGTRDWX.js.map} +0 -0
  333. /package/dist/{chunk-6Z263Z3E.js.map → chunk-OWV6LKNZ.js.map} +0 -0
  334. /package/dist/{chunk-HIHN4XHL.js.map → chunk-PQ7EB5AD.js.map} +0 -0
  335. /package/dist/{chunk-VVYLVE6R.js.map → chunk-PQKZLBCJ.js.map} +0 -0
  336. /package/dist/{chunk-OFFW73OZ.js.map → chunk-PRNR47DI.js.map} +0 -0
  337. /package/dist/{chunk-UL7KDVLC.js.map → chunk-PZ2QQULY.js.map} +0 -0
  338. /package/dist/{chunk-55NZVUNI.js.map → chunk-QAIVTLL2.js.map} +0 -0
  339. /package/dist/{chunk-M7T2NKET.js.map → chunk-QKCGOECM.js.map} +0 -0
  340. /package/dist/{chunk-ARY6O3JN.js.map → chunk-QUNCLKHM.js.map} +0 -0
  341. /package/dist/{chunk-Z3O53WZR.js.map → chunk-QWUJWBZ5.js.map} +0 -0
  342. /package/dist/{chunk-RZXFXKWY.js.map → chunk-QX3K3INR.js.map} +0 -0
  343. /package/dist/{chunk-4LNCLZNK.js.map → chunk-S2GR3T7W.js.map} +0 -0
  344. /package/dist/{chunk-VPOAMPDD.js.map → chunk-SFDBLCZV.js.map} +0 -0
  345. /package/dist/{chunk-2IWBHZ3H.js.map → chunk-SIGDETMB.js.map} +0 -0
  346. /package/dist/{chunk-DBWNTLLI.js.map → chunk-STQC2FYQ.js.map} +0 -0
  347. /package/dist/{chunk-S5R77WHV.js.map → chunk-SWXPR5SE.js.map} +0 -0
  348. /package/dist/{chunk-3DNTFZAT.js.map → chunk-T32YYUT2.js.map} +0 -0
  349. /package/dist/{chunk-W5JQSVPZ.js.map → chunk-T6RQNV7E.js.map} +0 -0
  350. /package/dist/{chunk-O23QMYN4.js.map → chunk-TRN56SPQ.js.map} +0 -0
  351. /package/dist/{chunk-NM3BT2OH.js.map → chunk-TXTRHF3B.js.map} +0 -0
  352. /package/dist/{chunk-7AUIGOH4.js.map → chunk-VDVHIRCK.js.map} +0 -0
  353. /package/dist/{chunk-KQAFEZQX.js.map → chunk-VDX2J7OX.js.map} +0 -0
  354. /package/dist/{chunk-ZGYLPCWN.js.map → chunk-VO2BNAA2.js.map} +0 -0
  355. /package/dist/{chunk-WVEECBCG.js.map → chunk-VV2MVHCJ.js.map} +0 -0
  356. /package/dist/{chunk-B3O3IRZN.js.map → chunk-VZBW6CDG.js.map} +0 -0
  357. /package/dist/{chunk-JPKK466T.js.map → chunk-W5XWHTDO.js.map} +0 -0
  358. /package/dist/{chunk-CYG3K2T2.js.map → chunk-WR66CTVU.js.map} +0 -0
  359. /package/dist/{chunk-RP7RSENW.js.map → chunk-XQWKB6PY.js.map} +0 -0
  360. /package/dist/{chunk-64S6X4IU.js.map → chunk-XTN54NML.js.map} +0 -0
  361. /package/dist/{chunk-KYLYXGKD.js.map → chunk-YI6XIFQV.js.map} +0 -0
  362. /package/dist/{chunk-EZ25VE3G.js.map → chunk-YNDLCWXS.js.map} +0 -0
  363. /package/dist/{chunk-Y7427SL7.js.map → chunk-Z6EZCN6Z.js.map} +0 -0
  364. /package/dist/{chunk-5K2ALMSZ.js.map → chunk-ZRUC7FD3.js.map} +0 -0
  365. /package/dist/{graph-edge-decay-MKIRZ762.js.map → entity-mention-carry.js.map} +0 -0
  366. /package/dist/{resolution-BROE3TRO.js.map → entity-mention-epoch.js.map} +0 -0
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-GZFKCLRC.js";
7
7
  import {
8
8
  StorageManager
9
- } from "./chunk-UFIZRMQZ.js";
9
+ } from "./chunk-E4XLFYHV.js";
10
10
  import {
11
11
  normalizeEntityName
12
12
  } from "./chunk-YXZG5TVN.js";
@@ -962,4 +962,4 @@ export {
962
962
  resolveBriefingSaveDir,
963
963
  briefingFilename
964
964
  };
965
- //# sourceMappingURL=chunk-5K2ALMSZ.js.map
965
+ //# sourceMappingURL=chunk-ZRUC7FD3.js.map
package/dist/cli.js CHANGED
@@ -91,54 +91,54 @@ import {
91
91
  runWorkProductStatusCliCommand,
92
92
  runWorkProjectCliCommand,
93
93
  runWorkTaskCliCommand
94
- } from "./chunk-VPOAMPDD.js";
94
+ } from "./chunk-SFDBLCZV.js";
95
+ import "./chunk-MMACM5G2.js";
95
96
  import "./chunk-54BGIBCR.js";
96
97
  import "./chunk-H4CKS5B2.js";
97
- import "./chunk-MMACM5G2.js";
98
98
  import "./chunk-FXZTL7F7.js";
99
- import "./chunk-ABGM2BN4.js";
100
- import "./chunk-BV2TIZ4F.js";
101
99
  import "./chunk-HDDRVXX4.js";
102
100
  import "./chunk-PYHOAXTI.js";
101
+ import "./chunk-UP6MOYCB.js";
102
+ import "./chunk-O43AAJFQ.js";
103
+ import "./chunk-BV2TIZ4F.js";
103
104
  import "./chunk-Z734BLO3.js";
104
105
  import "./chunk-OZKVVUJB.js";
105
106
  import "./chunk-2DL3OFLD.js";
106
107
  import "./chunk-G4IAEX6D.js";
107
- import "./chunk-2NLLXCJG.js";
108
+ import "./chunk-BXLOS5AJ.js";
108
109
  import "./chunk-765K3SAT.js";
109
- import "./chunk-UP6MOYCB.js";
110
110
  import "./chunk-FGDKJJZS.js";
111
111
  import "./chunk-AJVLDJU6.js";
112
112
  import "./chunk-TBUEE7XF.js";
113
113
  import "./chunk-SZDLX763.js";
114
114
  import "./chunk-PYIFUBRK.js";
115
- import "./chunk-DQTCGVFK.js";
116
- import "./chunk-YLBE6PLR.js";
117
115
  import "./chunk-IIFFC3RL.js";
116
+ import "./chunk-T32YYUT2.js";
117
+ import "./chunk-DQTCGVFK.js";
118
118
  import "./chunk-AXFWMRKI.js";
119
- import "./chunk-3DNTFZAT.js";
120
- import "./chunk-G2STTRYB.js";
121
- import "./chunk-2524MOWK.js";
119
+ import "./chunk-YLBE6PLR.js";
122
120
  import "./chunk-HSSERO3E.js";
123
121
  import "./chunk-NOUJNHWG.js";
122
+ import "./chunk-G2STTRYB.js";
123
+ import "./chunk-2524MOWK.js";
124
+ import "./chunk-SWXPR5SE.js";
125
+ import "./chunk-HL4DB7TO.js";
124
126
  import "./chunk-W3K3HITK.js";
125
127
  import "./chunk-EBA5DA77.js";
126
- import "./chunk-S5R77WHV.js";
127
- import "./chunk-HL4DB7TO.js";
128
128
  import "./chunk-OJP3N7UK.js";
129
- import "./chunk-F5MINS3R.js";
130
- import "./chunk-QSXEQPC4.js";
131
- import "./chunk-PYYQCHJC.js";
129
+ import "./chunk-A6WNTVA7.js";
130
+ import "./chunk-2OFDC3AK.js";
131
+ import "./chunk-MZOQ26LH.js";
132
132
  import "./chunk-G7NYVKD6.js";
133
133
  import "./chunk-AM4T6CHX.js";
134
134
  import "./chunk-BTOHGPHC.js";
135
+ import "./chunk-3T74IZB3.js";
135
136
  import "./chunk-2LA3H54D.js";
136
- import "./chunk-UL7KDVLC.js";
137
- import "./chunk-RFQT7IZO.js";
137
+ import "./chunk-PZ2QQULY.js";
138
+ import "./chunk-JRDL3FGM.js";
138
139
  import "./chunk-KFY3SGN7.js";
139
140
  import "./chunk-CMTINOFS.js";
140
- import "./chunk-3T74IZB3.js";
141
- import "./chunk-WVEECBCG.js";
141
+ import "./chunk-VV2MVHCJ.js";
142
142
  import "./chunk-6UDLN4IA.js";
143
143
  import "./chunk-KXRX7YC2.js";
144
144
  import "./chunk-GGRRF4PZ.js";
@@ -147,26 +147,26 @@ import "./chunk-C7SRUWBW.js";
147
147
  import "./chunk-OZKOPQCM.js";
148
148
  import "./chunk-4IHBN6WU.js";
149
149
  import "./chunk-CIO7GCWE.js";
150
- import "./chunk-EZ25VE3G.js";
151
- import "./chunk-44442YCH.js";
150
+ import "./chunk-YNDLCWXS.js";
152
151
  import "./chunk-AUDJPF4N.js";
152
+ import "./chunk-44442YCH.js";
153
153
  import "./chunk-Y4Z4I6WK.js";
154
- import "./chunk-JNAOTN7B.js";
154
+ import "./chunk-XLWMNDQR.js";
155
155
  import "./chunk-KJTKLXTH.js";
156
156
  import "./chunk-2DQ2XREU.js";
157
157
  import "./chunk-OKTXM5H4.js";
158
- import "./chunk-2SGLMP2E.js";
158
+ import "./chunk-IDSZNHIP.js";
159
159
  import "./chunk-NHLLKEKK.js";
160
160
  import "./chunk-YBPYIAA5.js";
161
161
  import "./chunk-6TBIWIAG.js";
162
162
  import "./chunk-C6WMSXCJ.js";
163
163
  import "./chunk-B7RWBZXW.js";
164
- import "./chunk-55NZVUNI.js";
164
+ import "./chunk-QAIVTLL2.js";
165
165
  import "./chunk-ZKOPY4WW.js";
166
166
  import "./chunk-62OKGIJA.js";
167
167
  import "./chunk-EUL3S3LE.js";
168
168
  import "./chunk-QNJQCLI6.js";
169
- import "./chunk-Z3O53WZR.js";
169
+ import "./chunk-QWUJWBZ5.js";
170
170
  import "./chunk-LHRQBMJN.js";
171
171
  import "./chunk-LI4APB6M.js";
172
172
  import "./chunk-Z5LAYHGJ.js";
@@ -189,102 +189,102 @@ import "./chunk-UHESJ6TQ.js";
189
189
  import "./chunk-27NO2KVB.js";
190
190
  import "./chunk-KFZY2OFH.js";
191
191
  import "./chunk-B32WYRXX.js";
192
- import "./chunk-5BVL2XUD.js";
192
+ import "./chunk-LHDSCWDK.js";
193
193
  import "./chunk-V7IZKJI3.js";
194
+ import "./chunk-TB6CBZ5V.js";
194
195
  import "./chunk-XW2T4QAW.js";
195
- import "./chunk-64S6X4IU.js";
196
+ import "./chunk-XTN54NML.js";
197
+ import "./chunk-3JKYQBLC.js";
196
198
  import "./chunk-7RKSJVOQ.js";
197
199
  import "./chunk-HCAGBFE7.js";
198
200
  import "./chunk-SI36RWC3.js";
199
- import "./chunk-TB6CBZ5V.js";
200
- import "./chunk-3JKYQBLC.js";
201
201
  import "./chunk-NJAIR57U.js";
202
202
  import "./chunk-ZSEFGDCI.js";
203
203
  import "./chunk-P6P35FY4.js";
204
204
  import "./chunk-3HSRWJTC.js";
205
- import "./chunk-533RHNHB.js";
206
- import "./chunk-KYLYXGKD.js";
207
- import "./chunk-7AUIGOH4.js";
205
+ import "./chunk-ATFFWIKL.js";
206
+ import "./chunk-YI6XIFQV.js";
207
+ import "./chunk-VDVHIRCK.js";
208
208
  import "./chunk-SRT6SHVZ.js";
209
- import "./chunk-QCYUIZK2.js";
209
+ import "./chunk-AU43D3IT.js";
210
210
  import "./chunk-TE6S7KDF.js";
211
- import "./chunk-EIB4FJVR.js";
212
211
  import "./chunk-MZUQVWVC.js";
212
+ import "./chunk-EIB4FJVR.js";
213
213
  import "./chunk-A5KNZSNA.js";
214
214
  import "./chunk-HUSTM6PU.js";
215
215
  import "./chunk-D24OXEPB.js";
216
- import "./chunk-DBWNTLLI.js";
217
- import "./chunk-4LNCLZNK.js";
218
- import "./chunk-ARY6O3JN.js";
219
- import "./chunk-HIHN4XHL.js";
220
- import "./chunk-GNBZB43J.js";
221
- import "./chunk-RZXFXKWY.js";
222
- import "./chunk-7OA4JWP5.js";
216
+ import "./chunk-STQC2FYQ.js";
217
+ import "./chunk-S2GR3T7W.js";
218
+ import "./chunk-QUNCLKHM.js";
219
+ import "./chunk-PQ7EB5AD.js";
220
+ import "./chunk-KV7LFOPF.js";
221
+ import "./chunk-QX3K3INR.js";
222
+ import "./chunk-KFHEZJQZ.js";
223
223
  import "./chunk-7T4TOGMS.js";
224
224
  import "./chunk-7YQ6ESEA.js";
225
- import "./chunk-CYG3K2T2.js";
226
- import "./chunk-SCXURCVT.js";
225
+ import "./chunk-WR66CTVU.js";
226
+ import "./chunk-2UPTRDGM.js";
227
227
  import "./chunk-EQWEIIKQ.js";
228
- import "./chunk-HFOY2SBG.js";
228
+ import "./chunk-RYN4AIRM.js";
229
229
  import "./chunk-CEN6DW6X.js";
230
230
  import "./chunk-E4RMZGRS.js";
231
- import "./chunk-DGS34QSY.js";
231
+ import "./chunk-MFZACYZ6.js";
232
232
  import "./chunk-WHTMVTU4.js";
233
233
  import "./chunk-JATHBCAV.js";
234
234
  import "./chunk-ZQUVBZI4.js";
235
235
  import "./chunk-5R627MYY.js";
236
- import "./chunk-OFFW73OZ.js";
237
- import "./chunk-UYPQOASU.js";
236
+ import "./chunk-PRNR47DI.js";
237
+ import "./chunk-CNBGAFDY.js";
238
238
  import "./chunk-AB3A7EFH.js";
239
239
  import "./chunk-2FLFJTCI.js";
240
- import "./chunk-PHBH74Q6.js";
240
+ import "./chunk-7NBUE5VY.js";
241
241
  import "./chunk-2BPPGNAQ.js";
242
242
  import "./chunk-DJSJ4ULL.js";
243
- import "./chunk-CZN53OT5.js";
244
- import "./chunk-DINOVGA5.js";
243
+ import "./chunk-CGBE3N7T.js";
244
+ import "./chunk-6WRHNA4I.js";
245
245
  import "./chunk-W4F3C7N7.js";
246
246
  import "./chunk-MPC7TYTZ.js";
247
- import "./chunk-ZHXSOMYH.js";
247
+ import "./chunk-IOMLGJHG.js";
248
248
  import "./chunk-IFBSZGW3.js";
249
+ import "./chunk-OGXXGHW6.js";
249
250
  import "./chunk-EQUD7FP4.js";
250
251
  import "./chunk-VQ7B2Q6M.js";
251
- import "./chunk-OGXXGHW6.js";
252
- import "./chunk-W5JQSVPZ.js";
252
+ import "./chunk-T6RQNV7E.js";
253
253
  import "./chunk-PJSK6OJM.js";
254
+ import "./chunk-ROBHL3GL.js";
254
255
  import "./chunk-GNVZQ5JN.js";
255
256
  import "./chunk-YN2UN7N3.js";
256
- import "./chunk-ROBHL3GL.js";
257
257
  import "./chunk-U46P4UAR.js";
258
258
  import "./chunk-6DNMUYEE.js";
259
259
  import "./chunk-P5FPO2BR.js";
260
- import "./chunk-JYG2334B.js";
261
260
  import "./chunk-S4DDLTPX.js";
262
- import "./chunk-LI76ESJL.js";
263
- import "./chunk-2IWBHZ3H.js";
261
+ import "./chunk-JYG2334B.js";
262
+ import "./chunk-SIGDETMB.js";
264
263
  import "./chunk-5HFVWYHL.js";
264
+ import "./chunk-LI76ESJL.js";
265
265
  import "./chunk-KIW3OOZE.js";
266
+ import "./chunk-35A7GCHG.js";
266
267
  import "./chunk-YE4JBZO5.js";
268
+ import "./chunk-7O5EW7KX.js";
267
269
  import "./chunk-5KVT6G5U.js";
268
270
  import "./chunk-VYDGHJIN.js";
269
- import "./chunk-35A7GCHG.js";
270
- import "./chunk-7O5EW7KX.js";
271
271
  import "./chunk-H7XKCNR6.js";
272
272
  import "./chunk-32HO62I4.js";
273
273
  import "./chunk-SOBJ6NEY.js";
274
274
  import "./chunk-QPWUG2S3.js";
275
- import "./chunk-PNVOKGAX.js";
276
- import "./chunk-4MP2Q2EI.js";
275
+ import "./chunk-G5I5ZT6O.js";
277
276
  import "./chunk-E6UNM67F.js";
277
+ import "./chunk-2TCNEJ36.js";
278
278
  import "./chunk-6WHJ2EAB.js";
279
279
  import "./chunk-AQEJKOKI.js";
280
280
  import "./chunk-HM7RHKS4.js";
281
281
  import "./chunk-UD7UNYRD.js";
282
282
  import "./chunk-IISBCCWR.js";
283
- import "./chunk-JZ66PN72.js";
284
- import "./chunk-OGZC2WUX.js";
283
+ import "./chunk-AWSP3WNM.js";
284
+ import "./chunk-JWFTPRYD.js";
285
285
  import "./chunk-2YA5N2BY.js";
286
- import "./chunk-HWLIMQE2.js";
287
- import "./chunk-VVYLVE6R.js";
286
+ import "./chunk-PQKZLBCJ.js";
287
+ import "./chunk-CHDGJJV6.js";
288
288
  import "./chunk-EI6V5UXY.js";
289
289
  import "./chunk-QAIKLICT.js";
290
290
  import "./chunk-WL7N5VGG.js";
@@ -301,31 +301,31 @@ import "./chunk-C37ZRXX7.js";
301
301
  import "./chunk-NVKO5YKP.js";
302
302
  import "./chunk-RF2SMMPP.js";
303
303
  import "./chunk-3X5OPDPF.js";
304
- import "./chunk-YRULQW5J.js";
305
- import "./chunk-WTWQA7BB.js";
304
+ import "./chunk-ISX7GVZE.js";
306
305
  import "./chunk-VZIAVM72.js";
307
306
  import "./chunk-HRATODNO.js";
307
+ import "./chunk-WTWQA7BB.js";
308
308
  import "./chunk-UFGFMWAD.js";
309
309
  import "./chunk-BMWN7B3Y.js";
310
310
  import "./chunk-JNLEJE4A.js";
311
- import "./chunk-ZGYLPCWN.js";
312
- import "./chunk-O23QMYN4.js";
313
- import "./chunk-DSPWVQZ6.js";
314
- import "./chunk-P3WRFSYF.js";
311
+ import "./chunk-VO2BNAA2.js";
312
+ import "./chunk-TRN56SPQ.js";
313
+ import "./chunk-73R4HOOK.js";
314
+ import "./chunk-KMN2JE4D.js";
315
315
  import "./chunk-ZY2MNJR6.js";
316
- import "./chunk-4OXXDL3X.js";
316
+ import "./chunk-EWWK65CI.js";
317
317
  import "./chunk-3UXOZBHV.js";
318
318
  import "./chunk-PIWFNPQT.js";
319
- import "./chunk-5FAGCOZD.js";
319
+ import "./chunk-2U3R3DDH.js";
320
+ import "./chunk-LXY5VVGM.js";
320
321
  import "./chunk-EUT2WCWS.js";
322
+ import "./chunk-GKCXTSFF.js";
321
323
  import "./chunk-2LSZVONP.js";
322
324
  import "./chunk-DEUNUKTD.js";
323
- import "./chunk-LXY5VVGM.js";
324
- import "./chunk-GKCXTSFF.js";
325
- import "./chunk-5K2ALMSZ.js";
325
+ import "./chunk-ZRUC7FD3.js";
326
326
  import "./chunk-6JMQR72P.js";
327
- import "./chunk-S533KGX6.js";
328
- import "./chunk-R2TVWQLR.js";
327
+ import "./chunk-7X7A7KVN.js";
328
+ import "./chunk-NT2Q6AHC.js";
329
329
  import "./chunk-CSAKJVXW.js";
330
330
  import "./chunk-K2XUWZBM.js";
331
331
  import "./chunk-OD4FM2U7.js";
@@ -347,19 +347,19 @@ import "./chunk-A7AISUJI.js";
347
347
  import "./chunk-236PXYG7.js";
348
348
  import "./chunk-ZCUTSMR2.js";
349
349
  import "./chunk-QDW3E4RD.js";
350
- import "./chunk-B3O3IRZN.js";
351
- import "./chunk-UFIZRMQZ.js";
352
- import "./chunk-46WM6JX2.js";
350
+ import "./chunk-VZBW6CDG.js";
351
+ import "./chunk-E4XLFYHV.js";
353
352
  import "./chunk-UHVXE24Y.js";
353
+ import "./chunk-46WM6JX2.js";
354
354
  import "./chunk-V4JZCTMK.js";
355
- import "./chunk-3LMOJXZR.js";
356
- import "./chunk-DFPG47ET.js";
357
- import "./chunk-7VO6E5UD.js";
358
- import "./chunk-5BUCKFRE.js";
359
- import "./chunk-S7LWX2PQ.js";
355
+ import "./chunk-BKVCTTEN.js";
356
+ import "./chunk-EZ3F4YIN.js";
360
357
  import "./chunk-T2YX56QI.js";
361
358
  import "./chunk-CYEPCZN5.js";
362
359
  import "./chunk-T3FMRLWQ.js";
360
+ import "./chunk-7VO6E5UD.js";
361
+ import "./chunk-5BUCKFRE.js";
362
+ import "./chunk-S7LWX2PQ.js";
363
363
  import "./chunk-4O6WRBGE.js";
364
364
  import "./chunk-GUMZC2BO.js";
365
365
  import "./chunk-TFA6HPOA.js";
@@ -368,8 +368,8 @@ import "./chunk-72A4L5JJ.js";
368
368
  import "./chunk-A7Q43EUZ.js";
369
369
  import "./chunk-S2V7RUCL.js";
370
370
  import "./chunk-X3724WL4.js";
371
- import "./chunk-MRPOZBJC.js";
372
371
  import "./chunk-S2HLHAZ4.js";
372
+ import "./chunk-MRPOZBJC.js";
373
373
  import "./chunk-DM2T26WE.js";
374
374
  import "./chunk-LDXUBPMO.js";
375
375
  import "./chunk-FF6N7BXC.js";
@@ -384,17 +384,18 @@ import "./chunk-YXZG5TVN.js";
384
384
  import "./chunk-5GINB5LC.js";
385
385
  import "./chunk-3WU7XOFN.js";
386
386
  import "./chunk-G7D6GZ5J.js";
387
- import "./chunk-JPKK466T.js";
388
- import "./chunk-XCB6QDL6.js";
387
+ import "./chunk-W5XWHTDO.js";
388
+ import "./chunk-M5GVCJSJ.js";
389
389
  import "./chunk-RBOJCG4T.js";
390
390
  import "./chunk-R7QY5ZVB.js";
391
391
  import "./chunk-5WITETWU.js";
392
392
  import "./chunk-6CIAGZ6X.js";
393
+ import "./chunk-7CT3AI52.js";
393
394
  import "./chunk-ZJP66Q4I.js";
394
- import "./chunk-IY47KPML.js";
395
- import "./chunk-IUM3VSHI.js";
395
+ import "./chunk-B3OFQP5Y.js";
396
396
  import "./chunk-G26YNEOC.js";
397
397
  import "./chunk-ZLQ37WJX.js";
398
+ import "./chunk-IUM3VSHI.js";
398
399
  import "./chunk-23G5P7TA.js";
399
400
  import "./chunk-C64XATK7.js";
400
401
  import "./chunk-42JKGUFJ.js";
@@ -413,16 +414,16 @@ import "./chunk-Z7L72ZHL.js";
413
414
  import "./chunk-4O4TKIXQ.js";
414
415
  import "./chunk-RMMA44HE.js";
415
416
  import "./chunk-SYOIVK7K.js";
416
- import "./chunk-X5TAWDRO.js";
417
+ import "./chunk-JC7QQ2DJ.js";
417
418
  import "./chunk-MY7B3HYC.js";
418
419
  import "./chunk-353C5UNV.js";
419
420
  import "./chunk-5AYUHSAU.js";
420
421
  import "./chunk-BT7NVCML.js";
421
422
  import "./chunk-PO7NXNGC.js";
422
- import "./chunk-G3BW6SDE.js";
423
- import "./chunk-KQAFEZQX.js";
423
+ import "./chunk-OFGTRDWX.js";
424
+ import "./chunk-VDX2J7OX.js";
424
425
  import "./chunk-WEHSQBFR.js";
425
- import "./chunk-X7Y7WX73.js";
426
+ import "./chunk-DQEMWVMT.js";
426
427
  import "./chunk-J4EB7DNW.js";
427
428
  import "./chunk-Z2YFLXHU.js";
428
429
  import "./chunk-I4WBNM3M.js";
@@ -430,7 +431,7 @@ import "./chunk-SOAU2OE2.js";
430
431
  import "./chunk-BJMBJZ2Y.js";
431
432
  import "./chunk-UKJAGEXH.js";
432
433
  import "./chunk-FP2373TW.js";
433
- import "./chunk-V3I4NLZP.js";
434
+ import "./chunk-FYX2LXIX.js";
434
435
  import "./chunk-N7QV3CMX.js";
435
436
  import "./chunk-PAAJWQH5.js";
436
437
  import "./chunk-2JRB3Z5N.js";
@@ -448,17 +449,17 @@ import "./chunk-C7HJ3NEI.js";
448
449
  import "./chunk-N4PYB235.js";
449
450
  import "./chunk-AW4QUFQF.js";
450
451
  import "./chunk-5FVVY2EB.js";
451
- import "./chunk-SBOCJ47I.js";
452
+ import "./chunk-5R4YPRAR.js";
452
453
  import "./chunk-UI3NYK34.js";
453
454
  import "./chunk-3E6DGSGZ.js";
454
455
  import "./chunk-EFHNFTWB.js";
455
- import "./chunk-JTC3PBNH.js";
456
- import "./chunk-PEZAHDDU.js";
456
+ import "./chunk-DB6XFMOF.js";
457
+ import "./chunk-GZ2KV2RO.js";
458
+ import "./chunk-63LFM77Z.js";
457
459
  import "./chunk-TYT4TEQV.js";
458
460
  import "./chunk-GCGJW34D.js";
459
- import "./chunk-ANPRNTPT.js";
460
461
  import "./chunk-75PT4N7Q.js";
461
- import "./chunk-UCPGOUDZ.js";
462
+ import "./chunk-Y57GJDG5.js";
462
463
  import "./chunk-LQWOFU6L.js";
463
464
  import "./chunk-FFAZ2XFU.js";
464
465
  import "./chunk-YVRQ5JRA.js";
@@ -24,18 +24,18 @@ import "../chunk-FEHIOYML.js";
24
24
  import "../chunk-P32IDSHD.js";
25
25
  import {
26
26
  StorageManager
27
- } from "../chunk-UFIZRMQZ.js";
28
- import "../chunk-46WM6JX2.js";
27
+ } from "../chunk-E4XLFYHV.js";
29
28
  import "../chunk-UHVXE24Y.js";
29
+ import "../chunk-46WM6JX2.js";
30
30
  import "../chunk-V4JZCTMK.js";
31
- import "../chunk-3LMOJXZR.js";
32
- import "../chunk-DFPG47ET.js";
33
- import "../chunk-7VO6E5UD.js";
34
- import "../chunk-5BUCKFRE.js";
35
- import "../chunk-S7LWX2PQ.js";
31
+ import "../chunk-BKVCTTEN.js";
32
+ import "../chunk-EZ3F4YIN.js";
36
33
  import "../chunk-T2YX56QI.js";
37
34
  import "../chunk-CYEPCZN5.js";
38
35
  import "../chunk-T3FMRLWQ.js";
36
+ import "../chunk-7VO6E5UD.js";
37
+ import "../chunk-5BUCKFRE.js";
38
+ import "../chunk-S7LWX2PQ.js";
39
39
  import "../chunk-4O6WRBGE.js";
40
40
  import "../chunk-GUMZC2BO.js";
41
41
  import "../chunk-TFA6HPOA.js";
@@ -44,8 +44,8 @@ import "../chunk-72A4L5JJ.js";
44
44
  import "../chunk-A7Q43EUZ.js";
45
45
  import "../chunk-S2V7RUCL.js";
46
46
  import "../chunk-X3724WL4.js";
47
- import "../chunk-MRPOZBJC.js";
48
47
  import "../chunk-S2HLHAZ4.js";
48
+ import "../chunk-MRPOZBJC.js";
49
49
  import "../chunk-DM2T26WE.js";
50
50
  import "../chunk-LDXUBPMO.js";
51
51
  import "../chunk-FF6N7BXC.js";
@@ -64,16 +64,17 @@ import "../chunk-YXZG5TVN.js";
64
64
  import "../chunk-5GINB5LC.js";
65
65
  import "../chunk-3WU7XOFN.js";
66
66
  import "../chunk-G7D6GZ5J.js";
67
- import "../chunk-JPKK466T.js";
68
- import "../chunk-XCB6QDL6.js";
67
+ import "../chunk-W5XWHTDO.js";
68
+ import "../chunk-M5GVCJSJ.js";
69
69
  import "../chunk-RBOJCG4T.js";
70
70
  import "../chunk-R7QY5ZVB.js";
71
71
  import "../chunk-5WITETWU.js";
72
72
  import "../chunk-6CIAGZ6X.js";
73
- import "../chunk-IY47KPML.js";
74
- import "../chunk-IUM3VSHI.js";
73
+ import "../chunk-7CT3AI52.js";
74
+ import "../chunk-B3OFQP5Y.js";
75
75
  import "../chunk-G26YNEOC.js";
76
76
  import "../chunk-ZLQ37WJX.js";
77
+ import "../chunk-IUM3VSHI.js";
77
78
  import "../chunk-23G5P7TA.js";
78
79
  import "../chunk-C64XATK7.js";
79
80
  import "../chunk-42JKGUFJ.js";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/coding/export-okf-codegraph.ts"],"sourcesContent":["/**\n * Codegraph OKF projection (issue #1950).\n *\n * Read-only projection of one project's code-graph SQLite store into an\n * OKF v0.1 knowledge bundle: the stored architecture card, decision\n * records, and one `Code Module` concept per indexed source file with its\n * symbols and outgoing edges. The store is NEVER opened for write — the\n * SQLite file is opened `readonly`, so an export cannot mutate indexing\n * state and the file's bytes are stable across runs.\n *\n * Rendering discipline mirrors architecture-card.ts (rule 38): byte-stable\n * output for an unchanged graph; every list is sorted with a total order.\n * Shared bundle mechanics come from ../okf/render.ts (one source of truth\n * with the memory exporter, issue #1948).\n */\nimport { existsSync, readdirSync, rmSync, statSync } from \"node:fs\";\nimport { mkdtemp } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport { lintOkfDir } from \"../okf/lint.js\";\nimport {\n OKF_ARCHITECTURE_CARD_TYPE,\n OKF_CODE_MODULE_TYPE,\n OKF_DECISION_RECORD_TYPE,\n} from \"../okf/type-mapping.js\";\nimport {\n OKF_EXPORT_VERSION,\n publishBundle,\n renderFrontmatter,\n rejectSymlinkPath,\n writeBundleFile,\n} from \"../okf/render.js\";\nimport { openBetterSqlite3 } from \"../runtime/better-sqlite.js\";\nimport { StorageManager, stripAttributesSuffix } from \"../storage.js\";\nimport type { PluginConfig } from \"../types.js\";\nimport { findArchitectureCardMemory, type ArchitectureSurfaceStorage } from \"./architecture-surfaces.js\";\nimport {\n CodegraphRuntimeError,\n codegraphSurfaceVisible,\n listCodegraphProjects,\n resolveCodegraphDbPath,\n} from \"./codegraph-runtime.js\";\nimport { defaultGitInvoker, normalizeOriginUrl } from \"./git-context.js\";\nimport { projectNamespaceName } from \"./coding-namespace.js\";\nimport {\n ACTIVE_DECISION_STATUSES,\n DECISION_STATUSES,\n parseDecisionRecord,\n type DecisionRecord,\n} from \"./decision-records.js\";\nimport { buildCodingGraphInstallHint, isCodingGraphInstalled } from \"./optional-coding-graph.js\";\n\n/** Default cap on rendered module concepts (`--max-module-concepts`). */\nexport const DEFAULT_OKF_CODEGRAPH_MAX_MODULE_CONCEPTS = 500;\n\n/**\n * Visible marker written into the root index when module concepts were\n * truncated (mirrors `ARCHITECTURE_CARD_TRUNCATION_MARKER` — never\n * silently incomplete).\n */\nexport const OKF_CODEGRAPH_TRUNCATION_MARKER = \"<!-- okf-codegraph-truncated -->\";\n\nexport type OkfCodegraphSymbolFilter = \"none\" | \"exported\" | \"all\";\n\nconst SYMBOL_FILTERS: readonly OkfCodegraphSymbolFilter[] = [\"none\", \"exported\", \"all\"];\n\nexport function parseOkfCodegraphSymbolFilter(raw: unknown): OkfCodegraphSymbolFilter {\n const value = typeof raw === \"string\" ? raw.trim().toLowerCase() : \"\";\n if (value.length === 0) return \"exported\";\n if ((SYMBOL_FILTERS as readonly string[]).includes(value)) return value as OkfCodegraphSymbolFilter;\n throw new Error(`invalid --symbols ${String(raw)}; allowed: ${SYMBOL_FILTERS.join(\", \")}`);\n}\n\nexport interface ExportOkfCodegraphOptions {\n readonly config: PluginConfig;\n readonly memoryDir: string;\n /** Store owner; defaults to `\"default\"` like the access-service principal key. */\n readonly principal?: string;\n readonly projectId: string;\n readonly outDir: string;\n /**\n * Working directory used to resolve git context (repo root, origin URL).\n * Defaults to `process.cwd()`.\n */\n readonly cwd?: string;\n readonly maxModuleConcepts?: number;\n readonly symbols?: OkfCodegraphSymbolFilter;\n /** Default ON; pass `false` for `--no-include-adrs`. */\n readonly includeAdrs?: boolean;\n readonly force?: boolean;\n /**\n * Namespace holding the project's decision records + architecture card.\n * Defaults to the project-scope coding namespace for the project id.\n */\n readonly namespace?: string;\n}\n\nexport interface ExportOkfCodegraphResult {\n readonly projectId: string;\n readonly moduleConcepts: number;\n readonly moduleFilesInGraph: number;\n readonly truncated: boolean;\n readonly decisions: number;\n readonly architectureCard: boolean;\n}\n\ninterface GraphFileRow {\n readonly id: number;\n readonly path: string;\n readonly lang: string;\n}\n\ninterface GraphNodeRow {\n readonly name: string;\n readonly label: string;\n readonly file_id: number;\n readonly span_start: number;\n readonly span_end: number;\n readonly is_exported: number;\n}\n\ninterface GraphEdgeRow {\n readonly type: string;\n readonly confidence: number;\n readonly src_file_id: number;\n readonly dst_file_id: number;\n readonly dst_name: string;\n readonly dst_path: string;\n}\n\nexport async function exportCodegraphOkfBundle(\n opts: ExportOkfCodegraphOptions,\n): Promise<ExportOkfCodegraphResult> {\n if (!codegraphSurfaceVisible(opts.config)) {\n throw new CodegraphRuntimeError(\n \"disabled\",\n \"codegraph tools are disabled (codingKnowledge.enabled or codingKnowledge.codegraphTools is false)\",\n );\n }\n if (!(await isCodingGraphInstalled())) {\n throw new CodegraphRuntimeError(\"package_missing\", buildCodingGraphInstallHint());\n }\n const principal = opts.principal?.trim() || \"default\";\n const projectId = opts.projectId.trim();\n if (projectId.length === 0) {\n throw new CodegraphRuntimeError(\n \"project_required\",\n \"codegraph export-okf requires --project (or a cwd inside the project's git repo)\",\n );\n }\n rejectSymlinkPath(path.resolve(opts.outDir));\n // Explicit option validation (config-coercion footgun): honor the given\n // value or fail loudly — never silently default a bad input. `0` is a\n // legitimate \"no module concepts\" cap and is honored.\n const maxModules = opts.maxModuleConcepts ?? DEFAULT_OKF_CODEGRAPH_MAX_MODULE_CONCEPTS;\n if (!Number.isInteger(maxModules) || maxModules < 0) {\n throw new Error(\n `invalid --max-module-concepts ${String(opts.maxModuleConcepts)}; must be a non-negative integer`,\n );\n }\n const dbPath = resolveCodegraphDbPath({ config: opts.config, memoryDir: opts.memoryDir, principal, projectId });\n if (!existsSync(dbPath)) {\n const known = listCodegraphProjects({\n config: opts.config,\n memoryDir: opts.memoryDir,\n principal,\n listDir: (dir) => {\n try {\n return readdirSync(dir);\n } catch {\n return [];\n }\n },\n });\n throw new CodegraphRuntimeError(\n \"project_not_found\",\n `no codegraph store for project '${projectId}' (principal '${principal}'); known projects: ${\n known.length > 0 ? known.join(\", \") : \"(none)\"\n }`,\n );\n }\n\n // Read the graph through a readonly handle — bytes on disk are never\n // touched, and the store cache (write-mode handles) is bypassed entirely.\n const graphIndexedAt = statSync(dbPath).mtime.toISOString();\n const db = openBetterSqlite3(dbPath, { readonly: true, fileMustExist: true });\n let files: GraphFileRow[];\n let nodes: GraphNodeRow[];\n let edges: GraphEdgeRow[];\n try {\n files = db.prepare(\"SELECT id, path, lang FROM files ORDER BY path ASC\").all() as GraphFileRow[];\n nodes = db\n .prepare(\n `SELECT n.name, n.label, n.file_id, n.span_start, n.span_end,\n COALESCE(na.is_exported, 0) AS is_exported\n FROM nodes n LEFT JOIN node_attributes na ON na.node_id = n.id`,\n )\n .all() as GraphNodeRow[];\n edges = db\n .prepare(\n `SELECT e.type, e.confidence, s.file_id AS src_file_id, d.file_id AS dst_file_id,\n d.name AS dst_name, df.path AS dst_path\n FROM edges e\n JOIN nodes s ON s.id = e.src\n JOIN nodes d ON d.id = e.dst\n JOIN files df ON d.file_id = df.id`,\n )\n .all() as GraphEdgeRow[];\n } finally {\n db.close();\n }\n\n // Trust boundary: file paths come from the indexed graph. Reject anything\n // that is not a strict repo-relative POSIX path so a hostile row cannot\n // escape the staging directory via writeBundleFile's path.join.\n const safeFiles = files.filter(\n (f) => f.path.length > 0 && !f.path.startsWith(\"/\") && !f.path.split(\"/\").includes(\"..\"),\n );\n const fileIdToPath = new Map<number, string>(safeFiles.map((f) => [f.id, f.path]));\n const nodesByFile = new Map<number, GraphNodeRow[]>();\n for (const node of nodes) {\n if (!fileIdToPath.has(node.file_id)) continue;\n const list = nodesByFile.get(node.file_id) ?? [];\n list.push(node);\n nodesByFile.set(node.file_id, list);\n }\n\n // Deterministic truncation: most symbols first, path ascending as the\n // tie-break (issue acceptance: cap of 1 keeps the highest-symbol file).\n const ranked = [...safeFiles].sort((a, b) => {\n const aCount = (nodesByFile.get(a.id) ?? []).length;\n const bCount = (nodesByFile.get(b.id) ?? []).length;\n if (aCount !== bCount) return bCount - aCount;\n return a.path.localeCompare(b.path);\n });\n const keptFiles = ranked.slice(0, maxModules);\n const keptPaths = new Set<string>(keptFiles.map((f) => f.path));\n const truncated = safeFiles.length > keptFiles.length;\n\n const symbolFilter = parseOkfCodegraphSymbolFilter(opts.symbols);\n const git = await resolveGitHints(opts.cwd ?? process.cwd());\n const staging = await mkdtemp(path.join(os.tmpdir(), \"remnic-okf-codegraph-\"));\nlet decisions = 0;\nlet architectureCard = false;\ntry {\n const namespace = opts.namespace?.trim() || projectNamespaceName(projectId);\n const namespaceDir = path.join(opts.memoryDir, \"namespaces\", namespace);\n if (opts.includeAdrs !== false && existsSync(namespaceDir)) {\n const storage = new StorageManager(namespaceDir);\n const memories = await storage.readAllMemories();\n // Architecture card — reuse the surface's classification (rule 53).\n const card = await findArchitectureCardMemory(readOnlyCardStorage(storage, namespaceDir, namespace));\n if (card) {\n architectureCard = true;\n writeBundleFile(\n staging,\n \"architecture.md\",\n renderFrontmatter({\n type: OKF_ARCHITECTURE_CARD_TYPE,\n title: git.repoName,\n ...(git.originUrl ? { resource: git.originUrl } : git.repoRoot ? { resource: git.repoRoot } : {}),\n timestamp: card.frontmatter.updated ?? card.frontmatter.created,\n }) +\n stripAttributesSuffix(card.content.replace(/^\\uFEFF/, \"\")).trimEnd() +\n \"\\n\",\n );\n }\n const records: Array<{ record: DecisionRecord; timestamp: string }> = [];\n for (const memory of memories) {\n if (memory.frontmatter.category !== \"decision\") continue;\n try {\n const parsed = parseDecisionRecord(memory.content);\n records.push({\n // Production writes leave the ADR frontmatter id empty and use\n // the memory id as the canonical identifier (decisionRecord\n // surface path) — prefer the ADR id, fall back to the memory id.\n record: parsed.id ? parsed : { ...parsed, id: memory.frontmatter.id },\n timestamp: memory.frontmatter.updated ?? memory.frontmatter.created,\n });\n } catch {\n // Unparseable decision bodies are skipped, mirroring the surface's\n // safeParseDecisionRecord degradation.\n }\n }\n records.sort((a, b) => a.record.title.localeCompare(b.record.title));\n decisions = records.length;\n for (const { record, timestamp } of records) {\n writeBundleFile(staging, `decisions/${decisionFileStem(record)}.md`, renderDecision(record, timestamp));\n }\n if (records.length > 0 || architectureCard) {\n writeBundleFile(staging, \"decisions/index.md\", renderDecisionsIndex(records));\n }\n }\n\n for (const file of keptFiles) {\n writeBundleFile(\n staging,\n `modules/${file.path}.md`,\n renderModule(\n file,\n nodesByFile.get(file.id) ?? [],\n edges,\n fileIdToPath,\n keptPaths,\n symbolFilter,\n git,\n graphIndexedAt,\n ),\n );\n }\n if (keptFiles.length > 0) {\n writeBundleFile(staging, \"modules/index.md\", renderModulesIndex(keptFiles));\n }\n writeBundleFile(\n staging,\n \"index.md\",\n renderRootIndex(git.repoName, projectId, architectureCard, decisions, keptFiles, safeFiles, truncated),\n );\n\n // Self-validate with the #1946 conformance checker; non-conformant\n // output fails the command. Reserved basenames (the bundle's own\n // index.md files) are the documented exemption, as in the memory export.\n const lint = lintOkfDir(staging);\n const blocking = lint.findings.filter((f) => f.code !== \"skipped_encrypted\" && f.code !== \"reserved_basename\");\n if (blocking.length > 0) {\n throw new Error(`OKF codegraph export failed lint: ${blocking.map((f) => `${f.file}: ${f.message}`).join(\"; \")}`);\n }\n publishBundle(staging, path.resolve(opts.outDir), opts.force === true);\n } catch (err) {\n rmSync(staging, { recursive: true, force: true });\n throw err;\n }\n return {\n projectId,\n moduleConcepts: keptFiles.length,\n moduleFilesInGraph: safeFiles.length,\n truncated,\n decisions,\n architectureCard,\n };\n}\n\n/**\n * Read-only adapter over the namespace StorageManager for\n * {@link findArchitectureCardMemory} — write arms throw so a future edit\n * cannot silently turn the exporter into a mutating surface.\n */\nfunction readOnlyCardStorage(\n storage: StorageManager,\n dir: string,\n namespace: string,\n): ArchitectureSurfaceStorage {\n return {\n dir,\n namespace,\n readAllMemories: () => storage.readAllMemories(),\n updateMemory: () => {\n throw new Error(\"codegraph export-okf is read-only\");\n },\n writeSealedMemory: () => {\n throw new Error(\"codegraph export-okf is read-only\");\n },\n };\n}\n\ninterface GitHints {\n readonly repoRoot: string | null;\n readonly repoName: string;\n readonly originUrl: string | null;\n}\n\nasync function resolveGitHints(cwd: string): Promise<GitHints> {\n try {\n const invoker = defaultGitInvoker();\n const topLevel = await invoker(cwd, [\"rev-parse\", \"--show-toplevel\"]);\n if (topLevel.exitCode !== 0) {\n return { repoRoot: null, repoName: \"codegraph\", originUrl: null };\n }\n const repoRoot = topLevel.stdout.trim();\n const origin = await invoker(repoRoot, [\"remote\", \"get-url\", \"origin\"]);\n const originUrl = origin.exitCode === 0 ? normalizeOriginUrl(origin.stdout) : null;\n return {\n repoRoot: repoRoot || null,\n repoName: (repoRoot && path.basename(repoRoot)) || \"codegraph\",\n originUrl: originUrl && originUrl.length > 0 ? originUrl : null,\n };\n } catch {\n return { repoRoot: null, repoName: \"codegraph\", originUrl: null };\n }\n}\n\nfunction moduleResource(git: GitHints, filePath: string): string {\n if (git.originUrl) return `${git.originUrl}/${filePath}`;\n if (git.repoRoot) return path.join(git.repoRoot, filePath);\n return filePath;\n}\n\nfunction confidenceTier(confidence: number): string {\n if (confidence >= 0.9) return \"high\";\n if (confidence >= 0.5) return \"medium\";\n return \"low\";\n}\n\nfunction decisionFileStem(record: Pick<DecisionRecord, \"id\">): string {\n const safe = record.id.replace(/[^A-Za-z0-9._-]+/g, \"_\");\n return safe.length > 0 ? safe : \"decision\";\n}\n\nfunction renderModule(\n file: GraphFileRow,\n fileNodes: readonly GraphNodeRow[],\n edges: readonly GraphEdgeRow[],\n fileIdToPath: ReadonlyMap<number, string>,\n keptPaths: ReadonlySet<string>,\n symbolFilter: OkfCodegraphSymbolFilter,\n git: GitHints,\n graphIndexedAt: string,\n): string {\n const visible =\n symbolFilter === \"all\"\n ? [...fileNodes]\n : symbolFilter === \"exported\"\n ? fileNodes.filter((n) => n.is_exported === 1)\n : [];\n visible.sort((a, b) => (a.name !== b.name ? a.name.localeCompare(b.name) : a.span_start - b.span_start));\n const outEdges = edges\n .filter((e) => e.src_file_id === file.id && fileIdToPath.get(e.src_file_id) === file.path)\n .map((e) => ({\n type: e.type,\n verb: e.type.toLowerCase(),\n dstPath: e.dst_path,\n dstName: e.dst_name,\n tier: confidenceTier(e.confidence),\n }))\n .sort((a, b) =>\n a.type !== b.type\n ? a.type.localeCompare(b.type)\n : a.dstPath !== b.dstPath\n ? a.dstPath.localeCompare(b.dstPath)\n : a.dstName.localeCompare(b.dstName),\n );\n const fields: Record<string, unknown> = {\n type: OKF_CODE_MODULE_TYPE,\n title: file.path,\n description: `${fileNodes.length} symbols, ${file.lang}`,\n resource: moduleResource(git, file.path),\n tags: [file.lang],\n timestamp: graphIndexedAt,\n };\n let body = \"\";\n if (symbolFilter !== \"none\") {\n const rows = visible.map((n) => `| ${n.name} | ${n.label} | ${n.span_start}-${n.span_end} |`).join(\"\\n\");\n body += `# Symbols\\n\\n| Name | Kind | Span (bytes) |\\n|---|---|---|\\n${rows}\\n\\n`;\n }\n if (outEdges.length > 0) {\n const lines = outEdges.map((e) => {\n // Broken links (target truncated out of the bundle) are legal per OKF\n // §5.3 — the link records the relationship regardless of target presence.\n const href = `/modules/${e.dstPath}.md`;\n const label = e.verb === \"calls\" ? `${e.dstName}() in ${e.dstPath}` : e.dstPath;\n const broken = keptPaths.has(e.dstPath) ? \"\" : \" (link target not exported)\";\n return `- ${e.verb}: [${label}](${href}) (confidence: ${e.tier})${broken}`;\n });\n body += `# Dependencies\\n\\n${lines.join(\"\\n\")}\\n\\n`;\n }\n return renderFrontmatter(fields) + body.trimEnd() + \"\\n\";\n}\n\nfunction renderModulesIndex(files: readonly GraphFileRow[]): string {\n const groups = new Map<string, GraphFileRow[]>();\n for (const file of files) {\n const key = file.path.includes(\"/\") ? (file.path.split(\"/\")[0] ?? \"\") : \"(root)\";\n const list = groups.get(key) ?? [];\n list.push(file);\n groups.set(key, list);\n }\n const sections = [...groups.keys()].sort().map((key) => {\n const lines = (groups.get(key) ?? [])\n .sort((a, b) => a.path.localeCompare(b.path))\n .map((f) => `* [${f.path}](/modules/${f.path}.md)`);\n return `## ${key}\\n\\n${lines.join(\"\\n\")}`;\n });\n return `---\\nokf_version: \"${OKF_EXPORT_VERSION}\"\\n---\\n\\n# Code Modules\\n\\n${sections.join(\"\\n\\n\")}\\n`;\n}\n\nfunction renderDecisionsIndex(records: ReadonlyArray<{ record: DecisionRecord }>): string {\n // ACTIVE set first — the single classification source (rule 53), never a\n // re-derived list.\n const orderedStatuses = [\n ...DECISION_STATUSES.filter((s) => ACTIVE_DECISION_STATUSES.has(s)),\n ...DECISION_STATUSES.filter((s) => !ACTIVE_DECISION_STATUSES.has(s)),\n ];\n const byStatus = new Map<string, { record: DecisionRecord }[]>();\n for (const entry of records) {\n const list = byStatus.get(entry.record.status) ?? [];\n list.push(entry);\n byStatus.set(entry.record.status, list);\n }\n const sections: string[] = [];\n for (const status of orderedStatuses) {\n const list = byStatus.get(status);\n if (!list || list.length === 0) continue;\n const lines = list\n .map((e) => e.record)\n .sort((a, b) => a.title.localeCompare(b.title))\n .map((r) => `* [${r.title}](/decisions/${decisionFileStem(r)}.md)`);\n sections.push(`## ${status[0]!.toUpperCase()}${status.slice(1)}\\n\\n${lines.join(\"\\n\")}`);\n }\n return `---\\nokf_version: \"${OKF_EXPORT_VERSION}\"\\n---\\n\\n# Decision Records\\n\\n${sections.join(\"\\n\\n\")}\\n`;\n}\n\nfunction renderDecision(record: DecisionRecord, timestamp: string): string {\n const fields: Record<string, unknown> = {\n id: record.id,\n title: record.title,\n status: record.status,\n context: record.context,\n decision: record.decision,\n ...(record.consequences !== undefined ? { consequences: record.consequences } : {}),\n entityRefs: record.entityRefs,\n ...(record.supersedes !== undefined ? { supersedes: record.supersedes } : {}),\n type: OKF_DECISION_RECORD_TYPE,\n timestamp,\n };\n const lines: string[] = [];\n if (record.context) lines.push(record.context, \"\");\n lines.push(\"# Decision\", \"\");\n if (record.decision) lines.push(record.decision, \"\");\n if (record.consequences && record.consequences.length > 0) {\n lines.push(\"# Consequences\", \"\", record.consequences, \"\");\n }\n if (record.supersedes !== undefined) {\n lines.push(`- supersedes: [${record.supersedes}](/decisions/${decisionFileStem({ id: record.supersedes })}.md)`, \"\");\n }\n return renderFrontmatter(fields) + lines.join(\"\\n\").trimEnd() + \"\\n\";\n}\n\nfunction renderRootIndex(\n repoName: string,\n projectId: string,\n architectureCard: boolean,\n decisions: number,\n keptFiles: readonly GraphFileRow[],\n totalFiles: readonly GraphFileRow[],\n truncated: boolean,\n): string {\n const lines: string[] = [\n `# ${repoName} Code Graph`,\n \"\",\n `- project: ${projectId}`,\n architectureCard ? \"- [Architecture card](/architecture.md)\" : \"- architecture card: none stored\",\n `- decision records: ${decisions}`,\n `- code modules: ${keptFiles.length} of ${totalFiles.length} indexed files`,\n \"\",\n ];\n if (truncated) {\n lines.push(\n OKF_CODEGRAPH_TRUNCATION_MARKER,\n `Truncated to the ${keptFiles.length} files with the most symbols of ${totalFiles.length} in the graph; raise --max-module-concepts to widen.`,\n \"\",\n );\n }\n return `---\\nokf_version: \"${OKF_EXPORT_VERSION}\"\\n---\\n\\n${lines.join(\"\\n\")}\\n`;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/coding/export-okf-codegraph.ts"],"sourcesContent":["/**\n * Codegraph OKF projection (issue #1950).\n *\n * Read-only projection of one project's code-graph SQLite store into an\n * OKF v0.1 knowledge bundle: the stored architecture card, decision\n * records, and one `Code Module` concept per indexed source file with its\n * symbols and outgoing edges. The store is NEVER opened for write — the\n * SQLite file is opened `readonly`, so an export cannot mutate indexing\n * state and the file's bytes are stable across runs.\n *\n * Rendering discipline mirrors architecture-card.ts (rule 38): byte-stable\n * output for an unchanged graph; every list is sorted with a total order.\n * Shared bundle mechanics come from ../okf/render.ts (one source of truth\n * with the memory exporter, issue #1948).\n */\nimport { existsSync, readdirSync, rmSync, statSync } from \"node:fs\";\nimport { mkdtemp } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport { lintOkfDir } from \"../okf/lint.js\";\nimport {\n OKF_ARCHITECTURE_CARD_TYPE,\n OKF_CODE_MODULE_TYPE,\n OKF_DECISION_RECORD_TYPE,\n} from \"../okf/type-mapping.js\";\nimport {\n OKF_EXPORT_VERSION,\n publishBundle,\n renderFrontmatter,\n rejectSymlinkPath,\n writeBundleFile,\n} from \"../okf/render.js\";\nimport { openBetterSqlite3 } from \"../runtime/better-sqlite.js\";\nimport { StorageManager, stripAttributesSuffix } from \"../storage.js\";\nimport type { PluginConfig } from \"../types.js\";\nimport { findArchitectureCardMemory, type ArchitectureSurfaceStorage } from \"./architecture-surfaces.js\";\nimport {\n CodegraphRuntimeError,\n codegraphSurfaceVisible,\n listCodegraphProjects,\n resolveCodegraphDbPath,\n} from \"./codegraph-runtime.js\";\nimport { defaultGitInvoker, normalizeOriginUrl } from \"./git-context.js\";\nimport { projectNamespaceName } from \"./coding-namespace.js\";\nimport {\n ACTIVE_DECISION_STATUSES,\n DECISION_STATUSES,\n parseDecisionRecord,\n type DecisionRecord,\n} from \"./decision-records.js\";\nimport { buildCodingGraphInstallHint, isCodingGraphInstalled } from \"./optional-coding-graph.js\";\n\n/** Default cap on rendered module concepts (`--max-module-concepts`). */\nexport const DEFAULT_OKF_CODEGRAPH_MAX_MODULE_CONCEPTS = 500;\n\n/**\n * Visible marker written into the root index when module concepts were\n * truncated (mirrors `ARCHITECTURE_CARD_TRUNCATION_MARKER` — never\n * silently incomplete).\n */\nexport const OKF_CODEGRAPH_TRUNCATION_MARKER = \"<!-- okf-codegraph-truncated -->\";\n\nexport type OkfCodegraphSymbolFilter = \"none\" | \"exported\" | \"all\";\n\nconst SYMBOL_FILTERS: readonly OkfCodegraphSymbolFilter[] = [\"none\", \"exported\", \"all\"];\n\nexport function parseOkfCodegraphSymbolFilter(raw: unknown): OkfCodegraphSymbolFilter {\n const value = typeof raw === \"string\" ? raw.trim().toLowerCase() : \"\";\n if (value.length === 0) return \"exported\";\n if ((SYMBOL_FILTERS as readonly string[]).includes(value)) return value as OkfCodegraphSymbolFilter;\n throw new Error(`invalid --symbols ${String(raw)}; allowed: ${SYMBOL_FILTERS.join(\", \")}`);\n}\n\nexport interface ExportOkfCodegraphOptions {\n readonly config: PluginConfig;\n readonly memoryDir: string;\n /** Store owner; defaults to `\"default\"` like the access-service principal key. */\n readonly principal?: string;\n readonly projectId: string;\n readonly outDir: string;\n /**\n * Working directory used to resolve git context (repo root, origin URL).\n * Defaults to `process.cwd()`.\n */\n readonly cwd?: string;\n readonly maxModuleConcepts?: number;\n readonly symbols?: OkfCodegraphSymbolFilter;\n /** Default ON; pass `false` for `--no-include-adrs`. */\n readonly includeAdrs?: boolean;\n readonly force?: boolean;\n /**\n * Namespace holding the project's decision records + architecture card.\n * Defaults to the project-scope coding namespace for the project id.\n */\n readonly namespace?: string;\n}\n\nexport interface ExportOkfCodegraphResult {\n readonly projectId: string;\n readonly moduleConcepts: number;\n readonly moduleFilesInGraph: number;\n readonly truncated: boolean;\n readonly decisions: number;\n readonly architectureCard: boolean;\n}\n\ninterface GraphFileRow {\n readonly id: number;\n readonly path: string;\n readonly lang: string;\n}\n\ninterface GraphNodeRow {\n readonly name: string;\n readonly label: string;\n readonly file_id: number;\n readonly span_start: number;\n readonly span_end: number;\n readonly is_exported: number;\n}\n\ninterface GraphEdgeRow {\n readonly type: string;\n readonly confidence: number;\n readonly src_file_id: number;\n readonly dst_file_id: number;\n readonly dst_name: string;\n readonly dst_path: string;\n}\n\nexport async function exportCodegraphOkfBundle(\n opts: ExportOkfCodegraphOptions,\n): Promise<ExportOkfCodegraphResult> {\n if (!codegraphSurfaceVisible(opts.config)) {\n throw new CodegraphRuntimeError(\n \"disabled\",\n \"codegraph tools are disabled (codingKnowledge.enabled or codingKnowledge.codegraphTools is false)\",\n );\n }\n if (!(await isCodingGraphInstalled())) {\n throw new CodegraphRuntimeError(\"package_missing\", buildCodingGraphInstallHint());\n }\n const principal = opts.principal?.trim() || \"default\";\n const projectId = opts.projectId.trim();\n if (projectId.length === 0) {\n throw new CodegraphRuntimeError(\n \"project_required\",\n \"codegraph export-okf requires --project (or a cwd inside the project's git repo)\",\n );\n }\n rejectSymlinkPath(path.resolve(opts.outDir));\n // Explicit option validation (config-coercion footgun): honor the given\n // value or fail loudly — never silently default a bad input. `0` is a\n // legitimate \"no module concepts\" cap and is honored.\n const maxModules = opts.maxModuleConcepts ?? DEFAULT_OKF_CODEGRAPH_MAX_MODULE_CONCEPTS;\n if (!Number.isInteger(maxModules) || maxModules < 0) {\n throw new Error(\n `invalid --max-module-concepts ${String(opts.maxModuleConcepts)}; must be a non-negative integer`,\n );\n }\n const dbPath = resolveCodegraphDbPath({ config: opts.config, memoryDir: opts.memoryDir, principal, projectId });\n if (!existsSync(dbPath)) {\n const known = listCodegraphProjects({\n config: opts.config,\n memoryDir: opts.memoryDir,\n principal,\n listDir: (dir) => {\n try {\n return readdirSync(dir);\n } catch {\n return [];\n }\n },\n });\n throw new CodegraphRuntimeError(\n \"project_not_found\",\n `no codegraph store for project '${projectId}' (principal '${principal}'); known projects: ${\n known.length > 0 ? known.join(\", \") : \"(none)\"\n }`,\n );\n }\n\n // Read the graph through a readonly handle — bytes on disk are never\n // touched, and the store cache (write-mode handles) is bypassed entirely.\n const graphIndexedAt = statSync(dbPath).mtime.toISOString();\n const db = openBetterSqlite3(dbPath, { readonly: true, fileMustExist: true });\n let files: GraphFileRow[];\n let nodes: GraphNodeRow[];\n let edges: GraphEdgeRow[];\n try {\n files = db.prepare(\"SELECT id, path, lang FROM files ORDER BY path ASC\").all() as GraphFileRow[];\n nodes = db\n .prepare(\n `SELECT n.name, n.label, n.file_id, n.span_start, n.span_end,\n COALESCE(na.is_exported, 0) AS is_exported\n FROM nodes n LEFT JOIN node_attributes na ON na.node_id = n.id`,\n )\n .all() as GraphNodeRow[];\n edges = db\n .prepare(\n `SELECT e.type, e.confidence, s.file_id AS src_file_id, d.file_id AS dst_file_id,\n d.name AS dst_name, df.path AS dst_path\n FROM edges e\n JOIN nodes s ON s.id = e.src\n JOIN nodes d ON d.id = e.dst\n JOIN files df ON d.file_id = df.id`,\n )\n .all() as GraphEdgeRow[];\n } finally {\n db.close();\n }\n\n // Trust boundary: file paths come from the indexed graph. Reject anything\n // that is not a strict repo-relative POSIX path so a hostile row cannot\n // escape the staging directory via writeBundleFile's path.join.\n const safeFiles = files.filter(\n (f) => f.path.length > 0 && !f.path.startsWith(\"/\") && !f.path.split(\"/\").includes(\"..\"),\n );\n const fileIdToPath = new Map<number, string>(safeFiles.map((f) => [f.id, f.path]));\n const nodesByFile = new Map<number, GraphNodeRow[]>();\n for (const node of nodes) {\n if (!fileIdToPath.has(node.file_id)) continue;\n const list = nodesByFile.get(node.file_id) ?? [];\n list.push(node);\n nodesByFile.set(node.file_id, list);\n }\n\n // Deterministic truncation: most symbols first, path ascending as the\n // tie-break (issue acceptance: cap of 1 keeps the highest-symbol file).\n const ranked = [...safeFiles].sort((a, b) => {\n const aCount = (nodesByFile.get(a.id) ?? []).length;\n const bCount = (nodesByFile.get(b.id) ?? []).length;\n if (aCount !== bCount) return bCount - aCount;\n return a.path.localeCompare(b.path);\n });\n const keptFiles = ranked.slice(0, maxModules);\n const keptPaths = new Set<string>(keptFiles.map((f) => f.path));\n const truncated = safeFiles.length > keptFiles.length;\n\n const symbolFilter = parseOkfCodegraphSymbolFilter(opts.symbols);\n const git = await resolveGitHints(opts.cwd ?? process.cwd());\n const staging = await mkdtemp(path.join(os.tmpdir(), \"remnic-okf-codegraph-\"));\nlet decisions = 0;\nlet architectureCard = false;\ntry {\n const namespace = opts.namespace?.trim() || projectNamespaceName(projectId);\n const namespaceDir = path.join(opts.memoryDir, \"namespaces\", namespace);\n if (opts.includeAdrs !== false && existsSync(namespaceDir)) {\n const storage = new StorageManager(namespaceDir);\n const memories = await storage.readAllMemories();\n // Architecture card — reuse the surface's classification (rule 53).\n const card = await findArchitectureCardMemory(readOnlyCardStorage(storage, namespaceDir, namespace));\n if (card) {\n architectureCard = true;\n writeBundleFile(\n staging,\n \"architecture.md\",\n renderFrontmatter({\n type: OKF_ARCHITECTURE_CARD_TYPE,\n title: git.repoName,\n ...(git.originUrl ? { resource: git.originUrl } : git.repoRoot ? { resource: git.repoRoot } : {}),\n timestamp: card.frontmatter.updated ?? card.frontmatter.created,\n }) +\n stripAttributesSuffix(card.content.replace(/^\\uFEFF/, \"\")).trimEnd() +\n \"\\n\",\n );\n }\n const records: Array<{ record: DecisionRecord; timestamp: string }> = [];\n for (const memory of memories) {\n if (memory.frontmatter.category !== \"decision\") continue;\n try {\n const parsed = parseDecisionRecord(memory.content);\n records.push({\n // Production writes leave the ADR frontmatter id empty and use\n // the memory id as the canonical identifier (decisionRecord\n // surface path) — prefer the ADR id, fall back to the memory id.\n record: parsed.id ? parsed : { ...parsed, id: memory.frontmatter.id },\n timestamp: memory.frontmatter.updated ?? memory.frontmatter.created,\n });\n } catch {\n // Unparseable decision bodies are skipped, mirroring the surface's\n // safeParseDecisionRecord degradation.\n }\n }\n records.sort((a, b) => a.record.title.localeCompare(b.record.title));\n decisions = records.length;\n for (const { record, timestamp } of records) {\n writeBundleFile(staging, `decisions/${decisionFileStem(record)}.md`, renderDecision(record, timestamp));\n }\n if (records.length > 0 || architectureCard) {\n writeBundleFile(staging, \"decisions/index.md\", renderDecisionsIndex(records));\n }\n }\n\n for (const file of keptFiles) {\n writeBundleFile(\n staging,\n `modules/${file.path}.md`,\n renderModule(\n file,\n nodesByFile.get(file.id) ?? [],\n edges,\n fileIdToPath,\n keptPaths,\n symbolFilter,\n git,\n graphIndexedAt,\n ),\n );\n }\n if (keptFiles.length > 0) {\n writeBundleFile(staging, \"modules/index.md\", renderModulesIndex(keptFiles));\n }\n writeBundleFile(\n staging,\n \"index.md\",\n renderRootIndex(git.repoName, projectId, architectureCard, decisions, keptFiles, safeFiles, truncated),\n );\n\n // Self-validate with the #1946 conformance checker; non-conformant\n // output fails the command. Reserved basenames (the bundle's own\n // index.md files) are the documented exemption, as in the memory export.\n const lint = lintOkfDir(staging);\n const blocking = lint.findings.filter((f) => f.code !== \"skipped_encrypted\" && f.code !== \"reserved_basename\");\n if (blocking.length > 0) {\n throw new Error(`OKF codegraph export failed lint: ${blocking.map((f) => `${f.file}: ${f.message}`).join(\"; \")}`);\n }\n publishBundle(staging, path.resolve(opts.outDir), opts.force === true);\n } catch (err) {\n rmSync(staging, { recursive: true, force: true });\n throw err;\n }\n return {\n projectId,\n moduleConcepts: keptFiles.length,\n moduleFilesInGraph: safeFiles.length,\n truncated,\n decisions,\n architectureCard,\n };\n}\n\n/**\n * Read-only adapter over the namespace StorageManager for\n * {@link findArchitectureCardMemory} — write arms throw so a future edit\n * cannot silently turn the exporter into a mutating surface.\n */\nfunction readOnlyCardStorage(\n storage: StorageManager,\n dir: string,\n namespace: string,\n): ArchitectureSurfaceStorage {\n return {\n dir,\n namespace,\n readAllMemories: () => storage.readAllMemories(),\n updateMemory: () => {\n throw new Error(\"codegraph export-okf is read-only\");\n },\n writeSealedMemory: () => {\n throw new Error(\"codegraph export-okf is read-only\");\n },\n };\n}\n\ninterface GitHints {\n readonly repoRoot: string | null;\n readonly repoName: string;\n readonly originUrl: string | null;\n}\n\nasync function resolveGitHints(cwd: string): Promise<GitHints> {\n try {\n const invoker = defaultGitInvoker();\n const topLevel = await invoker(cwd, [\"rev-parse\", \"--show-toplevel\"]);\n if (topLevel.exitCode !== 0) {\n return { repoRoot: null, repoName: \"codegraph\", originUrl: null };\n }\n const repoRoot = topLevel.stdout.trim();\n const origin = await invoker(repoRoot, [\"remote\", \"get-url\", \"origin\"]);\n const originUrl = origin.exitCode === 0 ? normalizeOriginUrl(origin.stdout) : null;\n return {\n repoRoot: repoRoot || null,\n repoName: (repoRoot && path.basename(repoRoot)) || \"codegraph\",\n originUrl: originUrl && originUrl.length > 0 ? originUrl : null,\n };\n } catch {\n return { repoRoot: null, repoName: \"codegraph\", originUrl: null };\n }\n}\n\nfunction moduleResource(git: GitHints, filePath: string): string {\n if (git.originUrl) return `${git.originUrl}/${filePath}`;\n if (git.repoRoot) return path.join(git.repoRoot, filePath);\n return filePath;\n}\n\nfunction confidenceTier(confidence: number): string {\n if (confidence >= 0.9) return \"high\";\n if (confidence >= 0.5) return \"medium\";\n return \"low\";\n}\n\nfunction decisionFileStem(record: Pick<DecisionRecord, \"id\">): string {\n const safe = record.id.replace(/[^A-Za-z0-9._-]+/g, \"_\");\n return safe.length > 0 ? safe : \"decision\";\n}\n\nfunction renderModule(\n file: GraphFileRow,\n fileNodes: readonly GraphNodeRow[],\n edges: readonly GraphEdgeRow[],\n fileIdToPath: ReadonlyMap<number, string>,\n keptPaths: ReadonlySet<string>,\n symbolFilter: OkfCodegraphSymbolFilter,\n git: GitHints,\n graphIndexedAt: string,\n): string {\n const visible =\n symbolFilter === \"all\"\n ? [...fileNodes]\n : symbolFilter === \"exported\"\n ? fileNodes.filter((n) => n.is_exported === 1)\n : [];\n visible.sort((a, b) => (a.name !== b.name ? a.name.localeCompare(b.name) : a.span_start - b.span_start));\n const outEdges = edges\n .filter((e) => e.src_file_id === file.id && fileIdToPath.get(e.src_file_id) === file.path)\n .map((e) => ({\n type: e.type,\n verb: e.type.toLowerCase(),\n dstPath: e.dst_path,\n dstName: e.dst_name,\n tier: confidenceTier(e.confidence),\n }))\n .sort((a, b) =>\n a.type !== b.type\n ? a.type.localeCompare(b.type)\n : a.dstPath !== b.dstPath\n ? a.dstPath.localeCompare(b.dstPath)\n : a.dstName.localeCompare(b.dstName),\n );\n const fields: Record<string, unknown> = {\n type: OKF_CODE_MODULE_TYPE,\n title: file.path,\n description: `${fileNodes.length} symbols, ${file.lang}`,\n resource: moduleResource(git, file.path),\n tags: [file.lang],\n timestamp: graphIndexedAt,\n };\n let body = \"\";\n if (symbolFilter !== \"none\") {\n const rows = visible.map((n) => `| ${n.name} | ${n.label} | ${n.span_start}-${n.span_end} |`).join(\"\\n\");\n body += `# Symbols\\n\\n| Name | Kind | Span (bytes) |\\n|---|---|---|\\n${rows}\\n\\n`;\n }\n if (outEdges.length > 0) {\n const lines = outEdges.map((e) => {\n // Broken links (target truncated out of the bundle) are legal per OKF\n // §5.3 — the link records the relationship regardless of target presence.\n const href = `/modules/${e.dstPath}.md`;\n const label = e.verb === \"calls\" ? `${e.dstName}() in ${e.dstPath}` : e.dstPath;\n const broken = keptPaths.has(e.dstPath) ? \"\" : \" (link target not exported)\";\n return `- ${e.verb}: [${label}](${href}) (confidence: ${e.tier})${broken}`;\n });\n body += `# Dependencies\\n\\n${lines.join(\"\\n\")}\\n\\n`;\n }\n return renderFrontmatter(fields) + body.trimEnd() + \"\\n\";\n}\n\nfunction renderModulesIndex(files: readonly GraphFileRow[]): string {\n const groups = new Map<string, GraphFileRow[]>();\n for (const file of files) {\n const key = file.path.includes(\"/\") ? (file.path.split(\"/\")[0] ?? \"\") : \"(root)\";\n const list = groups.get(key) ?? [];\n list.push(file);\n groups.set(key, list);\n }\n const sections = [...groups.keys()].sort().map((key) => {\n const lines = (groups.get(key) ?? [])\n .sort((a, b) => a.path.localeCompare(b.path))\n .map((f) => `* [${f.path}](/modules/${f.path}.md)`);\n return `## ${key}\\n\\n${lines.join(\"\\n\")}`;\n });\n return `---\\nokf_version: \"${OKF_EXPORT_VERSION}\"\\n---\\n\\n# Code Modules\\n\\n${sections.join(\"\\n\\n\")}\\n`;\n}\n\nfunction renderDecisionsIndex(records: ReadonlyArray<{ record: DecisionRecord }>): string {\n // ACTIVE set first — the single classification source (rule 53), never a\n // re-derived list.\n const orderedStatuses = [\n ...DECISION_STATUSES.filter((s) => ACTIVE_DECISION_STATUSES.has(s)),\n ...DECISION_STATUSES.filter((s) => !ACTIVE_DECISION_STATUSES.has(s)),\n ];\n const byStatus = new Map<string, { record: DecisionRecord }[]>();\n for (const entry of records) {\n const list = byStatus.get(entry.record.status) ?? [];\n list.push(entry);\n byStatus.set(entry.record.status, list);\n }\n const sections: string[] = [];\n for (const status of orderedStatuses) {\n const list = byStatus.get(status);\n if (!list || list.length === 0) continue;\n const lines = list\n .map((e) => e.record)\n .sort((a, b) => a.title.localeCompare(b.title))\n .map((r) => `* [${r.title}](/decisions/${decisionFileStem(r)}.md)`);\n sections.push(`## ${status[0]!.toUpperCase()}${status.slice(1)}\\n\\n${lines.join(\"\\n\")}`);\n }\n return `---\\nokf_version: \"${OKF_EXPORT_VERSION}\"\\n---\\n\\n# Decision Records\\n\\n${sections.join(\"\\n\\n\")}\\n`;\n}\n\nfunction renderDecision(record: DecisionRecord, timestamp: string): string {\n const fields: Record<string, unknown> = {\n id: record.id,\n title: record.title,\n status: record.status,\n context: record.context,\n decision: record.decision,\n ...(record.consequences !== undefined ? { consequences: record.consequences } : {}),\n entityRefs: record.entityRefs,\n ...(record.supersedes !== undefined ? { supersedes: record.supersedes } : {}),\n type: OKF_DECISION_RECORD_TYPE,\n timestamp,\n };\n const lines: string[] = [];\n if (record.context) lines.push(record.context, \"\");\n lines.push(\"# Decision\", \"\");\n if (record.decision) lines.push(record.decision, \"\");\n if (record.consequences && record.consequences.length > 0) {\n lines.push(\"# Consequences\", \"\", record.consequences, \"\");\n }\n if (record.supersedes !== undefined) {\n lines.push(`- supersedes: [${record.supersedes}](/decisions/${decisionFileStem({ id: record.supersedes })}.md)`, \"\");\n }\n return renderFrontmatter(fields) + lines.join(\"\\n\").trimEnd() + \"\\n\";\n}\n\nfunction renderRootIndex(\n repoName: string,\n projectId: string,\n architectureCard: boolean,\n decisions: number,\n keptFiles: readonly GraphFileRow[],\n totalFiles: readonly GraphFileRow[],\n truncated: boolean,\n): string {\n const lines: string[] = [\n `# ${repoName} Code Graph`,\n \"\",\n `- project: ${projectId}`,\n architectureCard ? \"- [Architecture card](/architecture.md)\" : \"- architecture card: none stored\",\n `- decision records: ${decisions}`,\n `- code modules: ${keptFiles.length} of ${totalFiles.length} indexed files`,\n \"\",\n ];\n if (truncated) {\n lines.push(\n OKF_CODEGRAPH_TRUNCATION_MARKER,\n `Truncated to the ${keptFiles.length} files with the most symbols of ${totalFiles.length} in the graph; raise --max-module-concepts to widen.`,\n \"\",\n );\n }\n return `---\\nokf_version: \"${OKF_EXPORT_VERSION}\"\\n---\\n\\n${lines.join(\"\\n\")}\\n`;\n}\n"],"mappings":"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","names":[]}