ctxr-cli 0.1.0

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 (390) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +25 -0
  3. package/dist/adapter.d.ts +18 -0
  4. package/dist/adapter.d.ts.map +1 -0
  5. package/dist/adapter.js +4 -0
  6. package/dist/adapter.js.map +1 -0
  7. package/dist/adapters/builtin/index.d.ts +10 -0
  8. package/dist/adapters/builtin/index.d.ts.map +1 -0
  9. package/dist/adapters/builtin/index.js +11 -0
  10. package/dist/adapters/builtin/index.js.map +1 -0
  11. package/dist/adapters/forge/github.d.ts +9 -0
  12. package/dist/adapters/forge/github.d.ts.map +1 -0
  13. package/dist/adapters/forge/github.js +36 -0
  14. package/dist/adapters/forge/github.js.map +1 -0
  15. package/dist/adapters/forge/types.d.ts +23 -0
  16. package/dist/adapters/forge/types.d.ts.map +1 -0
  17. package/dist/adapters/forge/types.js +2 -0
  18. package/dist/adapters/forge/types.js.map +1 -0
  19. package/dist/adapters/harness/claude-code.d.ts +9 -0
  20. package/dist/adapters/harness/claude-code.d.ts.map +1 -0
  21. package/dist/adapters/harness/claude-code.js +42 -0
  22. package/dist/adapters/harness/claude-code.js.map +1 -0
  23. package/dist/adapters/identity/claude-code.d.ts +11 -0
  24. package/dist/adapters/identity/claude-code.d.ts.map +1 -0
  25. package/dist/adapters/identity/claude-code.js +18 -0
  26. package/dist/adapters/identity/claude-code.js.map +1 -0
  27. package/dist/adapters/registry.d.ts +16 -0
  28. package/dist/adapters/registry.d.ts.map +1 -0
  29. package/dist/adapters/registry.js +29 -0
  30. package/dist/adapters/registry.js.map +1 -0
  31. package/dist/adapters/types.d.ts +65 -0
  32. package/dist/adapters/types.d.ts.map +1 -0
  33. package/dist/adapters/types.js +12 -0
  34. package/dist/adapters/types.js.map +1 -0
  35. package/dist/bin.d.ts +3 -0
  36. package/dist/bin.d.ts.map +1 -0
  37. package/dist/bin.js +6 -0
  38. package/dist/bin.js.map +1 -0
  39. package/dist/commands/adapters-generate.d.ts +23 -0
  40. package/dist/commands/adapters-generate.d.ts.map +1 -0
  41. package/dist/commands/adapters-generate.js +59 -0
  42. package/dist/commands/adapters-generate.js.map +1 -0
  43. package/dist/commands/archive.d.ts +28 -0
  44. package/dist/commands/archive.d.ts.map +1 -0
  45. package/dist/commands/archive.js +66 -0
  46. package/dist/commands/archive.js.map +1 -0
  47. package/dist/commands/catalog-build.d.ts +7 -0
  48. package/dist/commands/catalog-build.d.ts.map +1 -0
  49. package/dist/commands/catalog-build.js +15 -0
  50. package/dist/commands/catalog-build.js.map +1 -0
  51. package/dist/commands/catalog-check.d.ts +22 -0
  52. package/dist/commands/catalog-check.d.ts.map +1 -0
  53. package/dist/commands/catalog-check.js +49 -0
  54. package/dist/commands/catalog-check.js.map +1 -0
  55. package/dist/commands/catalog-show.d.ts +13 -0
  56. package/dist/commands/catalog-show.d.ts.map +1 -0
  57. package/dist/commands/catalog-show.js +19 -0
  58. package/dist/commands/catalog-show.js.map +1 -0
  59. package/dist/commands/check.d.ts +22 -0
  60. package/dist/commands/check.d.ts.map +1 -0
  61. package/dist/commands/check.js +43 -0
  62. package/dist/commands/check.js.map +1 -0
  63. package/dist/commands/doctor.d.ts +27 -0
  64. package/dist/commands/doctor.d.ts.map +1 -0
  65. package/dist/commands/doctor.js +53 -0
  66. package/dist/commands/doctor.js.map +1 -0
  67. package/dist/commands/graph-build.d.ts +24 -0
  68. package/dist/commands/graph-build.d.ts.map +1 -0
  69. package/dist/commands/graph-build.js +36 -0
  70. package/dist/commands/graph-build.js.map +1 -0
  71. package/dist/commands/graph-query.d.ts +41 -0
  72. package/dist/commands/graph-query.d.ts.map +1 -0
  73. package/dist/commands/graph-query.js +63 -0
  74. package/dist/commands/graph-query.js.map +1 -0
  75. package/dist/commands/ingest.d.ts +28 -0
  76. package/dist/commands/ingest.d.ts.map +1 -0
  77. package/dist/commands/ingest.js +60 -0
  78. package/dist/commands/ingest.js.map +1 -0
  79. package/dist/commands/init.d.ts +28 -0
  80. package/dist/commands/init.d.ts.map +1 -0
  81. package/dist/commands/init.js +203 -0
  82. package/dist/commands/init.js.map +1 -0
  83. package/dist/commands/lint.d.ts +30 -0
  84. package/dist/commands/lint.d.ts.map +1 -0
  85. package/dist/commands/lint.js +48 -0
  86. package/dist/commands/lint.js.map +1 -0
  87. package/dist/commands/migrate.d.ts +30 -0
  88. package/dist/commands/migrate.d.ts.map +1 -0
  89. package/dist/commands/migrate.js +56 -0
  90. package/dist/commands/migrate.js.map +1 -0
  91. package/dist/commands/note-resolve.d.ts +14 -0
  92. package/dist/commands/note-resolve.d.ts.map +1 -0
  93. package/dist/commands/note-resolve.js +24 -0
  94. package/dist/commands/note-resolve.js.map +1 -0
  95. package/dist/commands/rollup-gather.d.ts +21 -0
  96. package/dist/commands/rollup-gather.d.ts.map +1 -0
  97. package/dist/commands/rollup-gather.js +40 -0
  98. package/dist/commands/rollup-gather.js.map +1 -0
  99. package/dist/commands/rollup-write.d.ts +25 -0
  100. package/dist/commands/rollup-write.d.ts.map +1 -0
  101. package/dist/commands/rollup-write.js +43 -0
  102. package/dist/commands/rollup-write.js.map +1 -0
  103. package/dist/commands/session-abandon.d.ts +13 -0
  104. package/dist/commands/session-abandon.d.ts.map +1 -0
  105. package/dist/commands/session-abandon.js +22 -0
  106. package/dist/commands/session-abandon.js.map +1 -0
  107. package/dist/commands/session-list.d.ts +14 -0
  108. package/dist/commands/session-list.d.ts.map +1 -0
  109. package/dist/commands/session-list.js +19 -0
  110. package/dist/commands/session-list.js.map +1 -0
  111. package/dist/commands/session-reap.d.ts +22 -0
  112. package/dist/commands/session-reap.d.ts.map +1 -0
  113. package/dist/commands/session-reap.js +47 -0
  114. package/dist/commands/session-reap.js.map +1 -0
  115. package/dist/commands/session-start.d.ts +18 -0
  116. package/dist/commands/session-start.d.ts.map +1 -0
  117. package/dist/commands/session-start.js +36 -0
  118. package/dist/commands/session-start.js.map +1 -0
  119. package/dist/commands/session-submit.d.ts +27 -0
  120. package/dist/commands/session-submit.d.ts.map +1 -0
  121. package/dist/commands/session-submit.js +68 -0
  122. package/dist/commands/session-submit.js.map +1 -0
  123. package/dist/commands/source-check.d.ts +21 -0
  124. package/dist/commands/source-check.d.ts.map +1 -0
  125. package/dist/commands/source-check.js +54 -0
  126. package/dist/commands/source-check.js.map +1 -0
  127. package/dist/commands/source-hash.d.ts +14 -0
  128. package/dist/commands/source-hash.d.ts.map +1 -0
  129. package/dist/commands/source-hash.js +34 -0
  130. package/dist/commands/source-hash.js.map +1 -0
  131. package/dist/commands/update.d.ts +17 -0
  132. package/dist/commands/update.d.ts.map +1 -0
  133. package/dist/commands/update.js +25 -0
  134. package/dist/commands/update.js.map +1 -0
  135. package/dist/commands/verify.d.ts +23 -0
  136. package/dist/commands/verify.d.ts.map +1 -0
  137. package/dist/commands/verify.js +126 -0
  138. package/dist/commands/verify.js.map +1 -0
  139. package/dist/config/defaults.d.ts +69 -0
  140. package/dist/config/defaults.d.ts.map +1 -0
  141. package/dist/config/defaults.js +71 -0
  142. package/dist/config/defaults.js.map +1 -0
  143. package/dist/config/load.d.ts +11 -0
  144. package/dist/config/load.d.ts.map +1 -0
  145. package/dist/config/load.js +49 -0
  146. package/dist/config/load.js.map +1 -0
  147. package/dist/config/render.d.ts +9 -0
  148. package/dist/config/render.d.ts.map +1 -0
  149. package/dist/config/render.js +15 -0
  150. package/dist/config/render.js.map +1 -0
  151. package/dist/config/schema.d.ts +124 -0
  152. package/dist/config/schema.d.ts.map +1 -0
  153. package/dist/config/schema.js +142 -0
  154. package/dist/config/schema.js.map +1 -0
  155. package/dist/core/agents-doc.d.ts +80 -0
  156. package/dist/core/agents-doc.d.ts.map +1 -0
  157. package/dist/core/agents-doc.js +207 -0
  158. package/dist/core/agents-doc.js.map +1 -0
  159. package/dist/core/catalog/build.d.ts +49 -0
  160. package/dist/core/catalog/build.d.ts.map +1 -0
  161. package/dist/core/catalog/build.js +113 -0
  162. package/dist/core/catalog/build.js.map +1 -0
  163. package/dist/core/catalog/model.d.ts +33 -0
  164. package/dist/core/catalog/model.d.ts.map +1 -0
  165. package/dist/core/catalog/model.js +58 -0
  166. package/dist/core/catalog/model.js.map +1 -0
  167. package/dist/core/checks/catalog-checks.d.ts +4 -0
  168. package/dist/core/checks/catalog-checks.d.ts.map +1 -0
  169. package/dist/core/checks/catalog-checks.js +65 -0
  170. package/dist/core/checks/catalog-checks.js.map +1 -0
  171. package/dist/core/checks/identity-checks.d.ts +11 -0
  172. package/dist/core/checks/identity-checks.d.ts.map +1 -0
  173. package/dist/core/checks/identity-checks.js +39 -0
  174. package/dist/core/checks/identity-checks.js.map +1 -0
  175. package/dist/core/checks/integrity-checks.d.ts +23 -0
  176. package/dist/core/checks/integrity-checks.d.ts.map +1 -0
  177. package/dist/core/checks/integrity-checks.js +132 -0
  178. package/dist/core/checks/integrity-checks.js.map +1 -0
  179. package/dist/core/checks/manifest.d.ts +7 -0
  180. package/dist/core/checks/manifest.d.ts.map +1 -0
  181. package/dist/core/checks/manifest.js +20 -0
  182. package/dist/core/checks/manifest.js.map +1 -0
  183. package/dist/core/checks/organize-checks.d.ts +18 -0
  184. package/dist/core/checks/organize-checks.d.ts.map +1 -0
  185. package/dist/core/checks/organize-checks.js +97 -0
  186. package/dist/core/checks/organize-checks.js.map +1 -0
  187. package/dist/core/checks/registry.d.ts +24 -0
  188. package/dist/core/checks/registry.d.ts.map +1 -0
  189. package/dist/core/checks/registry.js +33 -0
  190. package/dist/core/checks/registry.js.map +1 -0
  191. package/dist/core/checks/types.d.ts +72 -0
  192. package/dist/core/checks/types.d.ts.map +1 -0
  193. package/dist/core/checks/types.js +4 -0
  194. package/dist/core/checks/types.js.map +1 -0
  195. package/dist/core/checks/write-lifecycle-checks.d.ts +24 -0
  196. package/dist/core/checks/write-lifecycle-checks.d.ts.map +1 -0
  197. package/dist/core/checks/write-lifecycle-checks.js +205 -0
  198. package/dist/core/checks/write-lifecycle-checks.js.map +1 -0
  199. package/dist/core/command.d.ts +23 -0
  200. package/dist/core/command.d.ts.map +1 -0
  201. package/dist/core/command.js +2 -0
  202. package/dist/core/command.js.map +1 -0
  203. package/dist/core/content/canonicalize.d.ts +14 -0
  204. package/dist/core/content/canonicalize.d.ts.map +1 -0
  205. package/dist/core/content/canonicalize.js +34 -0
  206. package/dist/core/content/canonicalize.js.map +1 -0
  207. package/dist/core/conventions.d.ts +21 -0
  208. package/dist/core/conventions.d.ts.map +1 -0
  209. package/dist/core/conventions.js +73 -0
  210. package/dist/core/conventions.js.map +1 -0
  211. package/dist/core/disclosure/model.d.ts +18 -0
  212. package/dist/core/disclosure/model.d.ts.map +1 -0
  213. package/dist/core/disclosure/model.js +45 -0
  214. package/dist/core/disclosure/model.js.map +1 -0
  215. package/dist/core/env.d.ts +40 -0
  216. package/dist/core/env.d.ts.map +1 -0
  217. package/dist/core/env.js +24 -0
  218. package/dist/core/env.js.map +1 -0
  219. package/dist/core/envelope.d.ts +46 -0
  220. package/dist/core/envelope.d.ts.map +1 -0
  221. package/dist/core/envelope.js +21 -0
  222. package/dist/core/envelope.js.map +1 -0
  223. package/dist/core/errors.d.ts +96 -0
  224. package/dist/core/errors.d.ts.map +1 -0
  225. package/dist/core/errors.js +267 -0
  226. package/dist/core/errors.js.map +1 -0
  227. package/dist/core/exit-codes.d.ts +32 -0
  228. package/dist/core/exit-codes.d.ts.map +1 -0
  229. package/dist/core/exit-codes.js +31 -0
  230. package/dist/core/exit-codes.js.map +1 -0
  231. package/dist/core/fs/atomic.d.ts +10 -0
  232. package/dist/core/fs/atomic.d.ts.map +1 -0
  233. package/dist/core/fs/atomic.js +31 -0
  234. package/dist/core/fs/atomic.js.map +1 -0
  235. package/dist/core/fs/fenced-region.d.ts +47 -0
  236. package/dist/core/fs/fenced-region.d.ts.map +1 -0
  237. package/dist/core/fs/fenced-region.js +122 -0
  238. package/dist/core/fs/fenced-region.js.map +1 -0
  239. package/dist/core/git/exec.d.ts +28 -0
  240. package/dist/core/git/exec.d.ts.map +1 -0
  241. package/dist/core/git/exec.js +21 -0
  242. package/dist/core/git/exec.js.map +1 -0
  243. package/dist/core/git/repo.d.ts +63 -0
  244. package/dist/core/git/repo.d.ts.map +1 -0
  245. package/dist/core/git/repo.js +91 -0
  246. package/dist/core/git/repo.js.map +1 -0
  247. package/dist/core/git/staged.d.ts +10 -0
  248. package/dist/core/git/staged.d.ts.map +1 -0
  249. package/dist/core/git/staged.js +49 -0
  250. package/dist/core/git/staged.js.map +1 -0
  251. package/dist/core/git/worktree.d.ts +29 -0
  252. package/dist/core/git/worktree.d.ts.map +1 -0
  253. package/dist/core/git/worktree.js +61 -0
  254. package/dist/core/git/worktree.js.map +1 -0
  255. package/dist/core/graph/model.d.ts +43 -0
  256. package/dist/core/graph/model.d.ts.map +1 -0
  257. package/dist/core/graph/model.js +60 -0
  258. package/dist/core/graph/model.js.map +1 -0
  259. package/dist/core/graph/persist.d.ts +7 -0
  260. package/dist/core/graph/persist.d.ts.map +1 -0
  261. package/dist/core/graph/persist.js +23 -0
  262. package/dist/core/graph/persist.js.map +1 -0
  263. package/dist/core/graph/query.d.ts +16 -0
  264. package/dist/core/graph/query.d.ts.map +1 -0
  265. package/dist/core/graph/query.js +91 -0
  266. package/dist/core/graph/query.js.map +1 -0
  267. package/dist/core/graph/visibility-filter.d.ts +13 -0
  268. package/dist/core/graph/visibility-filter.d.ts.map +1 -0
  269. package/dist/core/graph/visibility-filter.js +26 -0
  270. package/dist/core/graph/visibility-filter.js.map +1 -0
  271. package/dist/core/hooks.d.ts +34 -0
  272. package/dist/core/hooks.d.ts.map +1 -0
  273. package/dist/core/hooks.js +89 -0
  274. package/dist/core/hooks.js.map +1 -0
  275. package/dist/core/identity.d.ts +14 -0
  276. package/dist/core/identity.d.ts.map +1 -0
  277. package/dist/core/identity.js +36 -0
  278. package/dist/core/identity.js.map +1 -0
  279. package/dist/core/ingest/identity.d.ts +15 -0
  280. package/dist/core/ingest/identity.d.ts.map +1 -0
  281. package/dist/core/ingest/identity.js +17 -0
  282. package/dist/core/ingest/identity.js.map +1 -0
  283. package/dist/core/ingest/model.d.ts +17 -0
  284. package/dist/core/ingest/model.d.ts.map +1 -0
  285. package/dist/core/ingest/model.js +24 -0
  286. package/dist/core/ingest/model.js.map +1 -0
  287. package/dist/core/json-config-merge.d.ts +13 -0
  288. package/dist/core/json-config-merge.d.ts.map +1 -0
  289. package/dist/core/json-config-merge.js +43 -0
  290. package/dist/core/json-config-merge.js.map +1 -0
  291. package/dist/core/markers.d.ts +17 -0
  292. package/dist/core/markers.d.ts.map +1 -0
  293. package/dist/core/markers.js +16 -0
  294. package/dist/core/markers.js.map +1 -0
  295. package/dist/core/migrations/registry.d.ts +6 -0
  296. package/dist/core/migrations/registry.d.ts.map +1 -0
  297. package/dist/core/migrations/registry.js +8 -0
  298. package/dist/core/migrations/registry.js.map +1 -0
  299. package/dist/core/migrations/rename-visibility-field.d.ts +3 -0
  300. package/dist/core/migrations/rename-visibility-field.d.ts.map +1 -0
  301. package/dist/core/migrations/rename-visibility-field.js +62 -0
  302. package/dist/core/migrations/rename-visibility-field.js.map +1 -0
  303. package/dist/core/migrations/types.d.ts +27 -0
  304. package/dist/core/migrations/types.d.ts.map +1 -0
  305. package/dist/core/migrations/types.js +2 -0
  306. package/dist/core/migrations/types.js.map +1 -0
  307. package/dist/core/notes/checks.d.ts +20 -0
  308. package/dist/core/notes/checks.d.ts.map +1 -0
  309. package/dist/core/notes/checks.js +58 -0
  310. package/dist/core/notes/checks.js.map +1 -0
  311. package/dist/core/notes/list.d.ts +26 -0
  312. package/dist/core/notes/list.d.ts.map +1 -0
  313. package/dist/core/notes/list.js +84 -0
  314. package/dist/core/notes/list.js.map +1 -0
  315. package/dist/core/notes/parse.d.ts +12 -0
  316. package/dist/core/notes/parse.d.ts.map +1 -0
  317. package/dist/core/notes/parse.js +36 -0
  318. package/dist/core/notes/parse.js.map +1 -0
  319. package/dist/core/notes/render.d.ts +7 -0
  320. package/dist/core/notes/render.d.ts.map +1 -0
  321. package/dist/core/notes/render.js +13 -0
  322. package/dist/core/notes/render.js.map +1 -0
  323. package/dist/core/notes/visibility.d.ts +26 -0
  324. package/dist/core/notes/visibility.d.ts.map +1 -0
  325. package/dist/core/notes/visibility.js +41 -0
  326. package/dist/core/notes/visibility.js.map +1 -0
  327. package/dist/core/procedures.d.ts +44 -0
  328. package/dist/core/procedures.d.ts.map +1 -0
  329. package/dist/core/procedures.js +154 -0
  330. package/dist/core/procedures.js.map +1 -0
  331. package/dist/core/queue.d.ts +16 -0
  332. package/dist/core/queue.d.ts.map +1 -0
  333. package/dist/core/queue.js +75 -0
  334. package/dist/core/queue.js.map +1 -0
  335. package/dist/core/reconcile.d.ts +18 -0
  336. package/dist/core/reconcile.d.ts.map +1 -0
  337. package/dist/core/reconcile.js +49 -0
  338. package/dist/core/reconcile.js.map +1 -0
  339. package/dist/core/records.d.ts +16 -0
  340. package/dist/core/records.d.ts.map +1 -0
  341. package/dist/core/records.js +36 -0
  342. package/dist/core/records.js.map +1 -0
  343. package/dist/core/reporter.d.ts +20 -0
  344. package/dist/core/reporter.d.ts.map +1 -0
  345. package/dist/core/reporter.js +25 -0
  346. package/dist/core/reporter.js.map +1 -0
  347. package/dist/core/root.d.ts +24 -0
  348. package/dist/core/root.d.ts.map +1 -0
  349. package/dist/core/root.js +51 -0
  350. package/dist/core/root.js.map +1 -0
  351. package/dist/core/security/secrets.d.ts +17 -0
  352. package/dist/core/security/secrets.d.ts.map +1 -0
  353. package/dist/core/security/secrets.js +21 -0
  354. package/dist/core/security/secrets.js.map +1 -0
  355. package/dist/core/session.d.ts +15 -0
  356. package/dist/core/session.d.ts.map +1 -0
  357. package/dist/core/session.js +27 -0
  358. package/dist/core/session.js.map +1 -0
  359. package/dist/core/store.d.ts +15 -0
  360. package/dist/core/store.d.ts.map +1 -0
  361. package/dist/core/store.js +19 -0
  362. package/dist/core/store.js.map +1 -0
  363. package/dist/index.d.ts +13 -0
  364. package/dist/index.d.ts.map +1 -0
  365. package/dist/index.js +7 -0
  366. package/dist/index.js.map +1 -0
  367. package/dist/prompt/inquirer-prompter.d.ts +14 -0
  368. package/dist/prompt/inquirer-prompter.d.ts.map +1 -0
  369. package/dist/prompt/inquirer-prompter.js +27 -0
  370. package/dist/prompt/inquirer-prompter.js.map +1 -0
  371. package/dist/prompt/prompter.d.ts +24 -0
  372. package/dist/prompt/prompter.d.ts.map +1 -0
  373. package/dist/prompt/prompter.js +2 -0
  374. package/dist/prompt/prompter.js.map +1 -0
  375. package/dist/run.d.ts +16 -0
  376. package/dist/run.d.ts.map +1 -0
  377. package/dist/run.js +464 -0
  378. package/dist/run.js.map +1 -0
  379. package/dist/taxonomy/profiles.d.ts +31 -0
  380. package/dist/taxonomy/profiles.d.ts.map +1 -0
  381. package/dist/taxonomy/profiles.js +45 -0
  382. package/dist/taxonomy/profiles.js.map +1 -0
  383. package/dist/version.d.ts +3 -0
  384. package/dist/version.d.ts.map +1 -0
  385. package/dist/version.js +3 -0
  386. package/dist/version.js.map +1 -0
  387. package/package.json +56 -0
  388. package/templates/.gitkeep +0 -0
  389. package/templates/hooks/pre-commit.sh +21 -0
  390. package/templates/hooks/pre-push.sh +24 -0
package/dist/bin.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
package/dist/bin.js ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ import { realEnv } from './core/env.js';
3
+ import { run } from './run.js';
4
+ const exitCode = await run(process.argv.slice(2), realEnv());
5
+ process.exitCode = exitCode;
6
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AAC7D,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { CommandOutcome, CommandRequires } from '../core/command.js';
2
+ import type { Store } from '../core/store.js';
3
+ export declare const requires: CommandRequires;
4
+ export interface AdaptersGenerateFileResult {
5
+ path: string;
6
+ changed: boolean;
7
+ }
8
+ export interface AdaptersGenerateData {
9
+ files: AdaptersGenerateFileResult[];
10
+ }
11
+ /**
12
+ * adapters spec / task 8.3-8.4: every configured harness-generation adapter
13
+ * gets its entry file's fenced region (re)written from `render()`, and,
14
+ * for a harness that supports it, its permission config merged in; every
15
+ * configured identity-injection adapter gets its own, separately-removable
16
+ * fenced region in whatever file it targets. Two adapters targeting the
17
+ * same physical file (the common case: one harness's own entry file) never
18
+ * collide, because each owns a distinctly-named fence.
19
+ */
20
+ /** The generation itself, shared with `ctxr update`. */
21
+ export declare function generateAdapterOutputs(store: Store): Promise<AdaptersGenerateFileResult[]>;
22
+ export declare function execute(store: Store): Promise<CommandOutcome<AdaptersGenerateData>>;
23
+ //# sourceMappingURL=adapters-generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters-generate.d.ts","sourceRoot":"","sources":["../../src/commands/adapters-generate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAQ1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,0BAA0B,EAAE,CAAC;CACrC;AAUD;;;;;;;;GAQG;AACH,wDAAwD;AACxD,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,0BAA0B,EAAE,CAAC,CAoChG;AAED,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC,CAWzF"}
@@ -0,0 +1,59 @@
1
+ import path from 'node:path';
2
+ import { configuredAdapters } from '../adapters/registry.js';
3
+ import { agentsMdPath } from '../core/agents-doc.js';
4
+ import { ExitCode } from '../core/exit-codes.js';
5
+ import { upsertFencedRegionInFile } from '../core/fs/fenced-region.js';
6
+ import { identityFilePaths } from '../core/identity.js';
7
+ import { mergeJsonArrayLists } from '../core/json-config-merge.js';
8
+ import { htmlCommentFence } from '../core/markers.js';
9
+ export const requires = { store: 'required' };
10
+ function harnessEntryFence(adapterId) {
11
+ return htmlCommentFence(`adapter:${adapterId}:harness-entry`);
12
+ }
13
+ function identityInjectionFence(adapterId) {
14
+ return htmlCommentFence(`adapter:${adapterId}:identity`);
15
+ }
16
+ /**
17
+ * adapters spec / task 8.3-8.4: every configured harness-generation adapter
18
+ * gets its entry file's fenced region (re)written from `render()`, and,
19
+ * for a harness that supports it, its permission config merged in; every
20
+ * configured identity-injection adapter gets its own, separately-removable
21
+ * fenced region in whatever file it targets. Two adapters targeting the
22
+ * same physical file (the common case: one harness's own entry file) never
23
+ * collide, because each owns a distinctly-named fence.
24
+ */
25
+ /** The generation itself, shared with `ctxr update`. */
26
+ export async function generateAdapterOutputs(store) {
27
+ const files = [];
28
+ for (const adapter of configuredAdapters(store.config, 'harness-generation')) {
29
+ const entryPath = path.join(store.root, adapter.entryFileName);
30
+ const { changed } = await upsertFencedRegionInFile(entryPath, harnessEntryFence(adapter.id), adapter.render(agentsMdPath(store.root)));
31
+ files.push({ path: adapter.entryFileName, changed });
32
+ if (adapter.permissionConfig) {
33
+ const permPath = path.join(store.root, adapter.permissionConfig.path);
34
+ const rules = adapter.permissionConfig.render({ worktreesPath: store.config.session.worktrees_path });
35
+ const { changed: permChanged } = await mergeJsonArrayLists(permPath, rules);
36
+ files.push({ path: adapter.permissionConfig.path, changed: permChanged });
37
+ }
38
+ }
39
+ const identityPaths = identityFilePaths(store.config);
40
+ for (const adapter of configuredAdapters(store.config, 'identity-injection')) {
41
+ const entryPath = path.join(store.root, adapter.entryFileName);
42
+ const { changed } = await upsertFencedRegionInFile(entryPath, identityInjectionFence(adapter.id), adapter.render(identityPaths));
43
+ files.push({ path: adapter.entryFileName, changed });
44
+ }
45
+ return files;
46
+ }
47
+ export async function execute(store) {
48
+ const files = await generateAdapterOutputs(store);
49
+ const changedCount = files.filter((f) => f.changed).length;
50
+ return {
51
+ exitCode: ExitCode.Ok,
52
+ data: { files },
53
+ findings: [],
54
+ humanSummary: `adapters generate: ${changedCount} file(s) changed, ${files.length - changedCount} already up to date.`,
55
+ storeRoot: store.root,
56
+ schemaVersion: store.config.schema_version,
57
+ };
58
+ }
59
+ //# sourceMappingURL=adapters-generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters-generate.js","sourceRoot":"","sources":["../../src/commands/adapters-generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { CommandOutcome, CommandRequires } from '../core/command.js';
2
+ import type { RunEnv } from '../core/env.js';
3
+ import type { Store } from '../core/store.js';
4
+ export declare const requires: CommandRequires;
5
+ export interface ArchiveFlags {
6
+ path: string;
7
+ }
8
+ export interface ArchiveData {
9
+ path: string;
10
+ newPath: string;
11
+ linkingNotes: string[];
12
+ }
13
+ /**
14
+ * context-organize spec: archiving is a single tracked rename (via
15
+ * core/git/repo.ts's movePath, the Phase 1.5 primitive) — never a
16
+ * read+delete+rewrite — so the note's frontmatter (including its
17
+ * visibility field) is untouched by construction, and `git log --follow`
18
+ * on the new path returns its full prior history. The destination lives
19
+ * under `organize.archive_path`, independent of taxonomy layer names, so
20
+ * this works identically under any configured taxonomy (task 7.1).
21
+ *
22
+ * Wikilinks resolve by filename stem (context-retrieval spec), and archive
23
+ * never changes a note's filename — only its directory — so no other
24
+ * note's link actually breaks. `linkingNotes` is reported purely so the
25
+ * operator is aware those notes now point at the archived location.
26
+ */
27
+ export declare function execute(env: RunEnv, store: Store, flags: ArchiveFlags): Promise<CommandOutcome<ArchiveData>>;
28
+ //# sourceMappingURL=archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAM7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAOD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CA0ClH"}
@@ -0,0 +1,66 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { mkdir } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import { ArchiveDestinationExistsError, NoteNotFoundError, NoteNotTrackedError } from '../core/errors.js';
5
+ import { ExitCode } from '../core/exit-codes.js';
6
+ import { isTracked, movePath } from '../core/git/repo.js';
7
+ import { extractLinkTargets } from '../core/graph/model.js';
8
+ import { listNotes } from '../core/notes/list.js';
9
+ export const requires = { store: 'required' };
10
+ function toStoreRelativePath(env, store, givenPath) {
11
+ const absolute = path.isAbsolute(givenPath) ? givenPath : path.resolve(env.cwd, givenPath);
12
+ return path.relative(store.root, absolute).split(path.sep).join('/');
13
+ }
14
+ /**
15
+ * context-organize spec: archiving is a single tracked rename (via
16
+ * core/git/repo.ts's movePath, the Phase 1.5 primitive) — never a
17
+ * read+delete+rewrite — so the note's frontmatter (including its
18
+ * visibility field) is untouched by construction, and `git log --follow`
19
+ * on the new path returns its full prior history. The destination lives
20
+ * under `organize.archive_path`, independent of taxonomy layer names, so
21
+ * this works identically under any configured taxonomy (task 7.1).
22
+ *
23
+ * Wikilinks resolve by filename stem (context-retrieval spec), and archive
24
+ * never changes a note's filename — only its directory — so no other
25
+ * note's link actually breaks. `linkingNotes` is reported purely so the
26
+ * operator is aware those notes now point at the archived location.
27
+ */
28
+ export async function execute(env, store, flags) {
29
+ const relativePath = toStoreRelativePath(env, store, flags.path);
30
+ const absolutePath = path.join(store.root, relativePath);
31
+ if (!existsSync(absolutePath))
32
+ throw new NoteNotFoundError(relativePath);
33
+ const stem = path.basename(relativePath, '.md');
34
+ const newRelativePath = path
35
+ .join(store.config.organize.archive_path, path.basename(relativePath))
36
+ .split(path.sep)
37
+ .join('/');
38
+ const newAbsolutePath = path.join(store.root, newRelativePath);
39
+ if (newRelativePath !== relativePath && existsSync(newAbsolutePath)) {
40
+ throw new ArchiveDestinationExistsError(newRelativePath);
41
+ }
42
+ const notes = await listNotes(store.root, store.config);
43
+ const linkingNotes = notes
44
+ .filter((note) => note.path !== relativePath)
45
+ .filter((note) => extractLinkTargets(note.body).includes(stem))
46
+ .map((note) => note.path)
47
+ .sort();
48
+ if (newRelativePath !== relativePath) {
49
+ if (!(await isTracked(env.git, store.root, relativePath))) {
50
+ throw new NoteNotTrackedError(relativePath);
51
+ }
52
+ await mkdir(path.dirname(newAbsolutePath), { recursive: true });
53
+ await movePath(env.git, store.root, relativePath, newRelativePath);
54
+ }
55
+ return {
56
+ exitCode: ExitCode.Ok,
57
+ data: { path: relativePath, newPath: newRelativePath, linkingNotes },
58
+ findings: [],
59
+ humanSummary: newRelativePath === relativePath
60
+ ? `"${relativePath}" is already archived.`
61
+ : `Archived "${relativePath}" to "${newRelativePath}"${linkingNotes.length > 0 ? ` (${linkingNotes.length} note(s) link to it)` : ''}.`,
62
+ storeRoot: store.root,
63
+ schemaVersion: store.config.schema_version,
64
+ };
65
+ }
66
+ //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { CommandOutcome, CommandRequires } from '../core/command.js';
2
+ import { type CatalogBuildResult } from '../core/catalog/build.js';
3
+ import type { Store } from '../core/store.js';
4
+ export declare const requires: CommandRequires;
5
+ export type CatalogBuildData = CatalogBuildResult;
6
+ export declare function execute(store: Store): Promise<CommandOutcome<CatalogBuildData>>;
7
+ //# sourceMappingURL=catalog-build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-build.d.ts","sourceRoot":"","sources":["../../src/commands/catalog-build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEjF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAElD,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAUrF"}
@@ -0,0 +1,15 @@
1
+ import { buildCatalog } from '../core/catalog/build.js';
2
+ import { ExitCode } from '../core/exit-codes.js';
3
+ export const requires = { store: 'required' };
4
+ export async function execute(store) {
5
+ const result = await buildCatalog(store);
6
+ return {
7
+ exitCode: ExitCode.Ok,
8
+ data: result,
9
+ findings: [],
10
+ humanSummary: `Catalog built: ${result.totalNotes} note(s) across ${result.sections.length} section(s).`,
11
+ storeRoot: store.root,
12
+ schemaVersion: store.config.schema_version,
13
+ };
14
+ }
15
+ //# sourceMappingURL=catalog-build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-build.js","sourceRoot":"","sources":["../../src/commands/catalog-build.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAA2B,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGjD,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAI/D,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAY;IACxC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,kBAAkB,MAAM,CAAC,UAAU,mBAAmB,MAAM,CAAC,QAAQ,CAAC,MAAM,cAAc;QACxG,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { CommandOutcome, CommandRequires } from '../core/command.js';
2
+ import { type CatalogStaleEntry } from '../core/catalog/build.js';
3
+ import type { Store } from '../core/store.js';
4
+ export declare const requires: CommandRequires;
5
+ export interface CatalogCheckFlags {
6
+ stale?: boolean;
7
+ }
8
+ export interface CatalogCheckData {
9
+ missing: string[];
10
+ dangling: string[];
11
+ stale?: CatalogStaleEntry[];
12
+ }
13
+ /**
14
+ * context-catalog spec: coverage is a hard invariant in both directions —
15
+ * this exits non-zero if any retrievable note lacks an entry (missing) OR
16
+ * any entry references a note that no longer exists (dangling, e.g.
17
+ * deleted). Staleness (--stale) is a review prompt, not a coverage
18
+ * violation, so it's reported but never fails the exit code on its own —
19
+ * the same doctor/lint severity split applied elsewhere in this codebase.
20
+ */
21
+ export declare function execute(store: Store, flags: CatalogCheckFlags): Promise<CommandOutcome<CatalogCheckData>>;
22
+ //# sourceMappingURL=catalog-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-check.d.ts","sourceRoot":"","sources":["../../src/commands/catalog-check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAA2C,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG3G,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAwC/G"}
@@ -0,0 +1,49 @@
1
+ import { checkCatalogCoverage, checkCatalogStale } from '../core/catalog/build.js';
2
+ import { ExitCode } from '../core/exit-codes.js';
3
+ export const requires = { store: 'required' };
4
+ /**
5
+ * context-catalog spec: coverage is a hard invariant in both directions —
6
+ * this exits non-zero if any retrievable note lacks an entry (missing) OR
7
+ * any entry references a note that no longer exists (dangling, e.g.
8
+ * deleted). Staleness (--stale) is a review prompt, not a coverage
9
+ * violation, so it's reported but never fails the exit code on its own —
10
+ * the same doctor/lint severity split applied elsewhere in this codebase.
11
+ */
12
+ export async function execute(store, flags) {
13
+ const { missing, dangling } = await checkCatalogCoverage(store);
14
+ const stale = flags.stale ? await checkCatalogStale(store) : undefined;
15
+ const findings = [
16
+ ...missing.map((notePath) => ({
17
+ code: 'catalog.coverage.missing',
18
+ severity: 'error',
19
+ message: `"${notePath}" is retrievable but has no catalog entry.`,
20
+ subject: notePath,
21
+ })),
22
+ ...dangling.map((notePath) => ({
23
+ code: 'catalog.coverage.dangling',
24
+ severity: 'error',
25
+ message: `A catalog entry references "${notePath}", which no longer exists.`,
26
+ subject: notePath,
27
+ })),
28
+ ];
29
+ if (stale) {
30
+ findings.push(...stale.map((entry) => ({
31
+ code: 'catalog.stale',
32
+ severity: 'warning',
33
+ message: `"${entry.path}" in section "${entry.section}" has changed since its gloss was last confirmed.`,
34
+ subject: entry.path,
35
+ })));
36
+ }
37
+ const failed = missing.length > 0 || dangling.length > 0;
38
+ return {
39
+ exitCode: failed ? ExitCode.CheckFailed : ExitCode.Ok,
40
+ data: { missing, dangling, stale },
41
+ findings,
42
+ humanSummary: failed
43
+ ? `${missing.length} missing, ${dangling.length} dangling catalog entr(y/ies).`
44
+ : `Catalog coverage is complete.${stale ? ` ${stale.length} entr(y/ies) may need gloss review.` : ''}`,
45
+ storeRoot: store.root,
46
+ schemaVersion: store.config.schema_version,
47
+ };
48
+ }
49
+ //# sourceMappingURL=catalog-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-check.js","sourceRoot":"","sources":["../../src/commands/catalog-check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAA0B,MAAM,0BAA0B,CAAC;AAE3G,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGjD,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAY/D;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAY,EAAE,KAAwB;IAClE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvE,MAAM,QAAQ,GAAc;QAC1B,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC5B,IAAI,EAAE,0BAA0B;YAChC,QAAQ,EAAE,OAAgB;YAC1B,OAAO,EAAE,IAAI,QAAQ,4CAA4C;YACjE,OAAO,EAAE,QAAQ;SAClB,CAAC,CAAC;QACH,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC7B,IAAI,EAAE,2BAA2B;YACjC,QAAQ,EAAE,OAAgB;YAC1B,OAAO,EAAE,+BAA+B,QAAQ,4BAA4B;YAC5E,OAAO,EAAE,QAAQ;SAClB,CAAC,CAAC;KACJ,CAAC;IACF,IAAI,KAAK,EAAE,CAAC;QACV,QAAQ,CAAC,IAAI,CACX,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACvB,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,SAAkB;YAC5B,OAAO,EAAE,IAAI,KAAK,CAAC,IAAI,iBAAiB,KAAK,CAAC,OAAO,mDAAmD;YACxG,OAAO,EAAE,KAAK,CAAC,IAAI;SACpB,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACzD,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;QACrD,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE;QAClC,QAAQ;QACR,YAAY,EAAE,MAAM;YAClB,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,aAAa,QAAQ,CAAC,MAAM,gCAAgC;YAC/E,CAAC,CAAC,gCAAgC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,qCAAqC,CAAC,CAAC,CAAC,EAAE,EAAE;QACxG,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { CommandOutcome, CommandRequires } from '../core/command.js';
2
+ import type { Store } from '../core/store.js';
3
+ export declare const requires: CommandRequires;
4
+ export interface CatalogShowFlags {
5
+ section: string;
6
+ as?: string;
7
+ }
8
+ export interface CatalogShowData {
9
+ section: string;
10
+ content: string;
11
+ }
12
+ export declare function execute(store: Store, flags: CatalogShowFlags): Promise<CommandOutcome<CatalogShowData>>;
13
+ //# sourceMappingURL=catalog-show.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-show.d.ts","sourceRoot":"","sources":["../../src/commands/catalog-show.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAa7G"}
@@ -0,0 +1,19 @@
1
+ import { readCatalogSection } from '../core/catalog/build.js';
2
+ import { CatalogSectionNotFoundError } from '../core/errors.js';
3
+ import { ExitCode } from '../core/exit-codes.js';
4
+ export const requires = { store: 'required' };
5
+ export async function execute(store, flags) {
6
+ const content = await readCatalogSection(store, flags.section, flags.as);
7
+ if (content === null) {
8
+ throw new CatalogSectionNotFoundError(flags.section);
9
+ }
10
+ return {
11
+ exitCode: ExitCode.Ok,
12
+ data: { section: flags.section, content },
13
+ findings: [],
14
+ humanSummary: content,
15
+ storeRoot: store.root,
16
+ schemaVersion: store.config.schema_version,
17
+ };
18
+ }
19
+ //# sourceMappingURL=catalog-show.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-show.js","sourceRoot":"","sources":["../../src/commands/catalog-show.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGjD,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAY/D,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAY,EAAE,KAAuB;IACjE,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACzE,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,2BAA2B,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE;QACzC,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,OAAO;QACrB,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { CommandOutcome, CommandRequires } from '../core/command.js';
2
+ import type { DisclosureRung, DisclosureVerdict } from '../core/disclosure/model.js';
3
+ import type { RunEnv } from '../core/env.js';
4
+ import type { Store } from '../core/store.js';
5
+ export declare const requires: CommandRequires;
6
+ export interface CheckFlags {
7
+ path: string;
8
+ audience: string;
9
+ }
10
+ export interface CheckData {
11
+ path: string;
12
+ audience: string;
13
+ verdict: DisclosureVerdict;
14
+ rung: DisclosureRung;
15
+ }
16
+ /**
17
+ * disclosure-policy spec: the tri-state ALLOW/DENY/ASK verdict, each with
18
+ * its own documented exit code (cli-contract's reserved 4/5), printing the
19
+ * rung that produced it so a script or a human can see WHY, not just WHAT.
20
+ */
21
+ export declare function execute(env: RunEnv, store: Store, flags: CheckFlags): Promise<CommandOutcome<CheckData>>;
22
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAI7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,IAAI,EAAE,cAAc,CAAC;CACtB;AAaD;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAsB9G"}
@@ -0,0 +1,43 @@
1
+ import path from 'node:path';
2
+ import { evaluateDisclosure } from '../core/disclosure/model.js';
3
+ import { NoteNotFoundError } from '../core/errors.js';
4
+ import { ExitCode } from '../core/exit-codes.js';
5
+ import { parseNote } from '../core/notes/parse.js';
6
+ export const requires = { store: 'required' };
7
+ const VERDICT_EXIT_CODE = {
8
+ allow: ExitCode.Ok,
9
+ deny: ExitCode.DisclosureDeny,
10
+ ask: ExitCode.DisclosureAsk,
11
+ };
12
+ function toStoreRelativePath(env, store, givenPath) {
13
+ const absolute = path.isAbsolute(givenPath) ? givenPath : path.resolve(env.cwd, givenPath);
14
+ return path.relative(store.root, absolute).split(path.sep).join('/');
15
+ }
16
+ /**
17
+ * disclosure-policy spec: the tri-state ALLOW/DENY/ASK verdict, each with
18
+ * its own documented exit code (cli-contract's reserved 4/5), printing the
19
+ * rung that produced it so a script or a human can see WHY, not just WHAT.
20
+ */
21
+ export async function execute(env, store, flags) {
22
+ const relativePath = toStoreRelativePath(env, store, flags.path);
23
+ const absolutePath = path.join(store.root, relativePath);
24
+ let note;
25
+ try {
26
+ note = await parseNote(absolutePath, relativePath);
27
+ }
28
+ catch (err) {
29
+ if (err.code === 'ENOENT')
30
+ throw new NoteNotFoundError(relativePath);
31
+ throw err;
32
+ }
33
+ const { verdict, rung } = evaluateDisclosure(store.config, note, flags.audience);
34
+ return {
35
+ exitCode: VERDICT_EXIT_CODE[verdict],
36
+ data: { path: relativePath, audience: flags.audience, verdict, rung },
37
+ findings: [],
38
+ humanSummary: `${relativePath} for audience "${flags.audience}": ${verdict.toUpperCase()} (rung: ${rung})`,
39
+ storeRoot: store.root,
40
+ schemaVersion: store.config.schema_version,
41
+ };
42
+ }
43
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAc/D,MAAM,iBAAiB,GAAsC;IAC3D,KAAK,EAAE,QAAQ,CAAC,EAAE;IAClB,IAAI,EAAE,QAAQ,CAAC,cAAc;IAC7B,GAAG,EAAE,QAAQ,CAAC,aAAa;CAC5B,CAAC;AAEF,SAAS,mBAAmB,CAAC,GAAW,EAAE,KAAY,EAAE,SAAiB;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC3F,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvE,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,KAAY,EAAE,KAAiB;IACxE,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAEzD,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,IAAI,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAChG,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEjF,OAAO;QACL,QAAQ,EAAE,iBAAiB,CAAC,OAAO,CAAa;QAChD,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE;QACrE,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,GAAG,YAAY,kBAAkB,KAAK,CAAC,QAAQ,MAAM,OAAO,CAAC,WAAW,EAAE,WAAW,IAAI,GAAG;QAC1G,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { CommandOutcome, CommandRequires } from '../core/command.js';
2
+ import type { CheckScope, CheckStatus } from '../core/checks/types.js';
3
+ import type { RunEnv } from '../core/env.js';
4
+ import type { Finding } from '../core/envelope.js';
5
+ import type { Store } from '../core/store.js';
6
+ export declare const requires: CommandRequires;
7
+ export interface DoctorFlags {
8
+ staged?: boolean;
9
+ }
10
+ export interface DoctorCheckSummary {
11
+ id: string;
12
+ title: string;
13
+ result: CheckStatus;
14
+ reason?: string;
15
+ findings?: Finding[];
16
+ }
17
+ export interface DoctorData {
18
+ scope: CheckScope;
19
+ checks: DoctorCheckSummary[];
20
+ summary: {
21
+ pass: number;
22
+ fail: number;
23
+ skip: number;
24
+ };
25
+ }
26
+ export declare function execute(env: RunEnv, store: Store, flags?: DoctorFlags): Promise<CommandOutcome<DoctorData>>;
27
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1E,OAAO,KAAK,EAAgB,UAAU,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAKnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACvD;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAE,WAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAiDrH"}
@@ -0,0 +1,53 @@
1
+ import { CHECKS } from '../core/checks/manifest.js';
2
+ import { overallStatus, runChecks } from '../core/checks/registry.js';
3
+ import { ExitCode } from '../core/exit-codes.js';
4
+ import { getStagedFiles } from '../core/git/staged.js';
5
+ import { readGraph } from '../core/graph/persist.js';
6
+ import { listNotes } from '../core/notes/list.js';
7
+ export const requires = { store: 'required' };
8
+ export async function execute(env, store, flags = {}) {
9
+ const scope = flags.staged ? 'staged' : 'store';
10
+ const staged = scope === 'staged' ? await getStagedFiles(env.git, store.root) : undefined;
11
+ const ctx = {
12
+ storeRoot: store.root,
13
+ config: store.config,
14
+ scope,
15
+ git: env.git,
16
+ staged,
17
+ notes: () => listNotes(store.root, store.config),
18
+ graph: () => readGraph(store),
19
+ catalog: async () => undefined,
20
+ };
21
+ // doctor runs only `invariant` checks — `observation` checks (lint's,
22
+ // Phase 7) are registered in the same manifest but never affect doctor's
23
+ // exit code. This is what makes "no condition double-counted as both a
24
+ // lint finding and a doctor failure" (task 9.4) a type-level fact instead
25
+ // of a later audit.
26
+ const reports = await runChecks(CHECKS, ctx, { scope, severity: 'invariant' });
27
+ const summary = {
28
+ pass: reports.filter((r) => r.result.status === 'pass').length,
29
+ fail: reports.filter((r) => r.result.status === 'fail').length,
30
+ skip: reports.filter((r) => r.result.status === 'skip').length,
31
+ };
32
+ const status = overallStatus(reports);
33
+ const data = {
34
+ scope,
35
+ checks: reports.map((r) => ({
36
+ id: r.id,
37
+ title: r.title,
38
+ result: r.result.status,
39
+ reason: r.result.skipReason,
40
+ findings: r.result.findings.length > 0 ? r.result.findings : undefined,
41
+ })),
42
+ summary,
43
+ };
44
+ return {
45
+ exitCode: status === 'fail' ? ExitCode.CheckFailed : ExitCode.Ok,
46
+ data,
47
+ findings: reports.flatMap((r) => r.result.findings),
48
+ humanSummary: `doctor (${scope}): ${summary.pass} passed, ${summary.fail} failed, ${summary.skip} skipped`,
49
+ storeRoot: store.root,
50
+ schemaVersion: store.config.schema_version,
51
+ };
52
+ }
53
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { CommandOutcome, CommandRequires } from '../core/command.js';
2
+ import { type GraphBuildResult } from '../core/graph/model.js';
3
+ import { type PerNoteRecord } from '../core/records.js';
4
+ import type { Store } from '../core/store.js';
5
+ export declare const requires: CommandRequires;
6
+ export interface GraphBuildFlags {
7
+ emitRecords?: boolean;
8
+ }
9
+ export interface GraphBuildData {
10
+ nodeCount: number;
11
+ edgeCount: number;
12
+ dangling: GraphBuildResult['dangling'];
13
+ records?: PerNoteRecord[];
14
+ }
15
+ /**
16
+ * context-retrieval spec: node identity is path-based, so a genuine identity
17
+ * collision is structurally unreachable through a real note listing —
18
+ * `buildGraphFromNotes` throwing here is a defensive invariant, not a
19
+ * scenario this command tries to recover from. A dangling link (unresolved
20
+ * or ambiguous wikilink target) is the opposite: expected, non-fatal, and
21
+ * reported as a finding rather than failing the build.
22
+ */
23
+ export declare function execute(store: Store, flags?: GraphBuildFlags): Promise<CommandOutcome<GraphBuildData>>;
24
+ //# sourceMappingURL=graph-build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-build.d.ts","sourceRoot":"","sources":["../../src/commands/graph-build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1E,OAAO,EAAuB,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAGpF,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAuBhH"}
@@ -0,0 +1,36 @@
1
+ import { ExitCode } from '../core/exit-codes.js';
2
+ import { buildGraphFromNotes } from '../core/graph/model.js';
3
+ import { writeGraph } from '../core/graph/persist.js';
4
+ import { listNotes } from '../core/notes/list.js';
5
+ import { buildPerNoteRecords } from '../core/records.js';
6
+ export const requires = { store: 'required' };
7
+ /**
8
+ * context-retrieval spec: node identity is path-based, so a genuine identity
9
+ * collision is structurally unreachable through a real note listing —
10
+ * `buildGraphFromNotes` throwing here is a defensive invariant, not a
11
+ * scenario this command tries to recover from. A dangling link (unresolved
12
+ * or ambiguous wikilink target) is the opposite: expected, non-fatal, and
13
+ * reported as a finding rather than failing the build.
14
+ */
15
+ export async function execute(store, flags = {}) {
16
+ const notes = await listNotes(store.root, store.config);
17
+ const graph = buildGraphFromNotes(notes);
18
+ await writeGraph(store, graph);
19
+ const records = flags.emitRecords ? await buildPerNoteRecords(store) : undefined;
20
+ const findings = graph.dangling.map((d) => ({
21
+ code: 'graph.dangling_link',
22
+ severity: 'warning',
23
+ message: `"${d.from}" links to "${d.target}", which is ${d.reason === 'ambiguous' ? 'ambiguous (multiple notes share that name)' : 'not found'}.`,
24
+ subject: d.from,
25
+ details: { target: d.target, reason: d.reason },
26
+ }));
27
+ return {
28
+ exitCode: ExitCode.Ok,
29
+ data: { nodeCount: graph.nodes.length, edgeCount: graph.edges.length, dangling: graph.dangling, records },
30
+ findings,
31
+ humanSummary: `Graph built: ${graph.nodes.length} node(s), ${graph.edges.length} edge(s), ${graph.dangling.length} dangling link(s).`,
32
+ storeRoot: store.root,
33
+ schemaVersion: store.config.schema_version,
34
+ };
35
+ }
36
+ //# sourceMappingURL=graph-build.js.map