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
@@ -0,0 +1,124 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * store-lifecycle spec: schema_version versions STORE STATE (config shape +
4
+ * note frontmatter conventions) — a monotonic integer independent of the npm
5
+ * package version — not "what this CLI release happens to be."
6
+ */
7
+ /**
8
+ * Bumped to 2 by the visibility-field key rename migration (store-lifecycle
9
+ * spec task 9.2) — proof that renaming DEFAULT_VISIBILITY_FIELD_KEY really
10
+ * is "a config-default change plus a migration, never a spec or code
11
+ * rewrite" (design.md D7): every consumer already reads
12
+ * config.fields.visibility, never a literal key, so nothing else changed.
13
+ */
14
+ export declare const SUPPORTED_SCHEMA_VERSION = 2;
15
+ export declare const TaxonomyLayerSchema: z.ZodObject<{
16
+ name: z.ZodString;
17
+ path: z.ZodString;
18
+ description: z.ZodString;
19
+ }, z.core.$strip>;
20
+ /**
21
+ * disclosure-policy spec: "v1 keeps the disclosure ladder's shape with a
22
+ * flat, user-defined value list" (design.md) — no registry syntax, just a
23
+ * flat set of audience names the operator considers internal, and a flat
24
+ * list of hard-wall rules evaluated before any tag or visibility rung.
25
+ */
26
+ declare const HardWallSchema: z.ZodObject<{
27
+ audience: z.ZodString;
28
+ note_path_prefix: z.ZodOptional<z.ZodString>;
29
+ except: z.ZodOptional<z.ZodArray<z.ZodString>>;
30
+ verdict: z.ZodEnum<{
31
+ allow: "allow";
32
+ ask: "ask";
33
+ deny: "deny";
34
+ }>;
35
+ }, z.core.$strip>;
36
+ declare const AdapterDeclarationSchema: z.ZodObject<{
37
+ id: z.ZodString;
38
+ kind: z.ZodEnum<{
39
+ forge: "forge";
40
+ "harness-generation": "harness-generation";
41
+ "identity-injection": "identity-injection";
42
+ }>;
43
+ module: z.ZodOptional<z.ZodString>;
44
+ }, z.core.$strip>;
45
+ export declare const StoreConfigSchema: z.ZodObject<{
46
+ schema_version: z.ZodNumber;
47
+ taxonomy: z.ZodObject<{
48
+ profile: z.ZodString;
49
+ layers: z.ZodArray<z.ZodObject<{
50
+ name: z.ZodString;
51
+ path: z.ZodString;
52
+ description: z.ZodString;
53
+ }, z.core.$strip>>;
54
+ }, z.core.$strip>;
55
+ fields: z.ZodObject<{
56
+ visibility: z.ZodString;
57
+ }, z.core.$loose>;
58
+ visibility: z.ZodObject<{
59
+ default_context: z.ZodString;
60
+ directory_defaults: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
61
+ contexts: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
62
+ }, z.core.$strip>;
63
+ derived: z.ZodObject<{
64
+ paths: z.ZodArray<z.ZodString>;
65
+ }, z.core.$strip>;
66
+ retrieval: z.ZodObject<{
67
+ exclude_paths: z.ZodArray<z.ZodString>;
68
+ }, z.core.$strip>;
69
+ git: z.ZodObject<{
70
+ default_branch: z.ZodString;
71
+ }, z.core.$strip>;
72
+ session: z.ZodObject<{
73
+ branch_prefix: z.ZodString;
74
+ worktrees_path: z.ZodString;
75
+ }, z.core.$strip>;
76
+ write_lifecycle: z.ZodObject<{
77
+ diff_size_ceiling_lines: z.ZodNumber;
78
+ }, z.core.$strip>;
79
+ catalog: z.ZodObject<{
80
+ path: z.ZodString;
81
+ section_max_bytes: z.ZodNumber;
82
+ }, z.core.$strip>;
83
+ disclosure: z.ZodObject<{
84
+ internal_audiences: z.ZodArray<z.ZodString>;
85
+ hard_walls: z.ZodArray<z.ZodObject<{
86
+ audience: z.ZodString;
87
+ note_path_prefix: z.ZodOptional<z.ZodString>;
88
+ except: z.ZodOptional<z.ZodArray<z.ZodString>>;
89
+ verdict: z.ZodEnum<{
90
+ allow: "allow";
91
+ ask: "ask";
92
+ deny: "deny";
93
+ }>;
94
+ }, z.core.$strip>>;
95
+ }, z.core.$strip>;
96
+ ingest: z.ZodObject<{
97
+ inbox_path: z.ZodString;
98
+ }, z.core.$strip>;
99
+ organize: z.ZodObject<{
100
+ archive_path: z.ZodString;
101
+ }, z.core.$strip>;
102
+ identity: z.ZodObject<{
103
+ path: z.ZodString;
104
+ }, z.core.$strip>;
105
+ harness: z.ZodObject<{
106
+ procedures_path: z.ZodString;
107
+ conventions_path: z.ZodDefault<z.ZodString>;
108
+ }, z.core.$strip>;
109
+ adapters: z.ZodArray<z.ZodObject<{
110
+ id: z.ZodString;
111
+ kind: z.ZodEnum<{
112
+ forge: "forge";
113
+ "harness-generation": "harness-generation";
114
+ "identity-injection": "identity-injection";
115
+ }>;
116
+ module: z.ZodOptional<z.ZodString>;
117
+ }, z.core.$strip>>;
118
+ }, z.core.$loose>;
119
+ export type StoreConfig = z.infer<typeof StoreConfigSchema>;
120
+ export type TaxonomyLayerConfig = z.infer<typeof TaxonomyLayerSchema>;
121
+ export type HardWallConfig = z.infer<typeof HardWallSchema>;
122
+ export type AdapterDeclaration = z.infer<typeof AdapterDeclarationSchema>;
123
+ export {};
124
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,eAAO,MAAM,mBAAmB;;;;iBAI9B,CAAC;AAiEH;;;;;GAKG;AACH,QAAA,MAAM,cAAc;;;;;;;;;iBAQlB,CAAC;AAoCH,QAAA,MAAM,wBAAwB;;;;;;;;iBAI5B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmBd,CAAC;AAEjB,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAC5D,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
@@ -0,0 +1,142 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * store-lifecycle spec: schema_version versions STORE STATE (config shape +
4
+ * note frontmatter conventions) — a monotonic integer independent of the npm
5
+ * package version — not "what this CLI release happens to be."
6
+ */
7
+ /**
8
+ * Bumped to 2 by the visibility-field key rename migration (store-lifecycle
9
+ * spec task 9.2) — proof that renaming DEFAULT_VISIBILITY_FIELD_KEY really
10
+ * is "a config-default change plus a migration, never a spec or code
11
+ * rewrite" (design.md D7): every consumer already reads
12
+ * config.fields.visibility, never a literal key, so nothing else changed.
13
+ */
14
+ export const SUPPORTED_SCHEMA_VERSION = 2;
15
+ export const TaxonomyLayerSchema = z.object({
16
+ name: z.string().min(1),
17
+ path: z.string().min(1),
18
+ description: z.string().min(1),
19
+ });
20
+ const TaxonomySchema = z.object({
21
+ /** A shipped profile id, or "custom" when a custom taxonomy definition was supplied. */
22
+ profile: z.string().min(1),
23
+ layers: z.array(TaxonomyLayerSchema),
24
+ });
25
+ /**
26
+ * Loose (passthrough), not strict: a later phase adding its own field key
27
+ * (e.g. audience tagging) must not force every existing store through a
28
+ * migration just to keep loading. schema_version bumps only on a genuinely
29
+ * incompatible change, never on an additive one.
30
+ */
31
+ const FieldsSchema = z
32
+ .object({
33
+ visibility: z.string().min(1),
34
+ })
35
+ .passthrough();
36
+ const VisibilitySchema = z.object({
37
+ default_context: z.string().min(1),
38
+ directory_defaults: z.record(z.string(), z.string()).default({}),
39
+ /**
40
+ * context-visibility spec (visibility-contexts-and-wall-verdicts): which
41
+ * visibility VALUES each named context can see. A context with no entry
42
+ * sees exactly its own value (identity default) — so an unconfigured
43
+ * store behaves byte-identically to the equality matching this replaced,
44
+ * and an unknown context fails closed to that same identity match.
45
+ */
46
+ contexts: z.record(z.string(), z.array(z.string())).default({}),
47
+ });
48
+ const DerivedSchema = z.object({
49
+ paths: z.array(z.string()),
50
+ });
51
+ const RetrievalSchema = z.object({
52
+ exclude_paths: z.array(z.string()),
53
+ });
54
+ /**
55
+ * Recorded once, at init, from whatever branch `git init` actually created
56
+ * (never hardcoded to "main") — this is what lets the pre-push hook refuse
57
+ * a push to the default branch without re-deriving it from a possibly
58
+ * network-dependent `git remote show` at hook time.
59
+ */
60
+ const GitSchema = z.object({
61
+ default_branch: z.string().min(1),
62
+ });
63
+ const SessionSchema = z.object({
64
+ branch_prefix: z.string().min(1),
65
+ worktrees_path: z.string().min(1),
66
+ });
67
+ const WriteLifecycleSchema = z.object({
68
+ diff_size_ceiling_lines: z.number().int().positive(),
69
+ });
70
+ const CatalogSchema = z.object({
71
+ path: z.string().min(1),
72
+ section_max_bytes: z.number().int().positive(),
73
+ });
74
+ /**
75
+ * disclosure-policy spec: "v1 keeps the disclosure ladder's shape with a
76
+ * flat, user-defined value list" (design.md) — no registry syntax, just a
77
+ * flat set of audience names the operator considers internal, and a flat
78
+ * list of hard-wall rules evaluated before any tag or visibility rung.
79
+ */
80
+ const HardWallSchema = z.object({
81
+ /** A named audience, or "*" to match every audience. */
82
+ audience: z.string().min(1),
83
+ /** Omitted means the wall applies to every note. */
84
+ note_path_prefix: z.string().min(1).optional(),
85
+ /** Audiences this wall does NOT apply to — evaluation falls through to later rungs for them. */
86
+ except: z.array(z.string()).optional(),
87
+ verdict: z.enum(['allow', 'deny', 'ask']),
88
+ });
89
+ const DisclosureSchema = z.object({
90
+ internal_audiences: z.array(z.string()),
91
+ hard_walls: z.array(HardWallSchema),
92
+ });
93
+ /** context-ingest spec: where capture lands raw material before ingest stamps identity onto it. */
94
+ const IngestSchema = z.object({
95
+ inbox_path: z.string().min(1),
96
+ });
97
+ /** context-organize spec: archive's destination — independent of taxonomy layers, so it works under any profile. */
98
+ const OrganizeSchema = z.object({
99
+ archive_path: z.string().min(1),
100
+ });
101
+ /** agent-identity spec: canonical identity files live here, excluded from every retrieval leg. */
102
+ const IdentitySchema = z.object({
103
+ path: z.string().min(1),
104
+ });
105
+ /** harness-portability spec: the portable procedure pack and operator convention docs AGENTS.md's indexes point into. */
106
+ const HarnessSchema = z.object({
107
+ procedures_path: z.string().min(1),
108
+ conventions_path: z.string().min(1).default('.contexture/conventions/'),
109
+ });
110
+ /**
111
+ * adapters spec: the one declared-registration mechanism shared by every
112
+ * adapter kind. `module` is reserved for a future third-party-loading path;
113
+ * v1 resolves every entry against the built-in adapter registry by
114
+ * (kind, id).
115
+ */
116
+ const AdapterKindSchema = z.enum(['harness-generation', 'identity-injection', 'forge']);
117
+ const AdapterDeclarationSchema = z.object({
118
+ id: z.string().min(1),
119
+ kind: AdapterKindSchema,
120
+ module: z.string().min(1).optional(),
121
+ });
122
+ export const StoreConfigSchema = z
123
+ .object({
124
+ schema_version: z.number().int().positive(),
125
+ taxonomy: TaxonomySchema,
126
+ fields: FieldsSchema,
127
+ visibility: VisibilitySchema,
128
+ derived: DerivedSchema,
129
+ retrieval: RetrievalSchema,
130
+ git: GitSchema,
131
+ session: SessionSchema,
132
+ write_lifecycle: WriteLifecycleSchema,
133
+ catalog: CatalogSchema,
134
+ disclosure: DisclosureSchema,
135
+ ingest: IngestSchema,
136
+ organize: OrganizeSchema,
137
+ identity: IdentitySchema,
138
+ harness: HarnessSchema,
139
+ adapters: z.array(AdapterDeclarationSchema),
140
+ })
141
+ .passthrough();
142
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import type { StoreConfig } from '../config/schema.js';
2
+ import { type ScannedDoc } from './conventions.js';
3
+ /**
4
+ * context-retrieval spec (task 4.5): the leg-routing rule that tells an
5
+ * agent which of its two retrieval legs to use for a given question — the
6
+ * catalog/graph (contexture-built-and-maintained) or its own direct content
7
+ * matching (grep, scoped by the store's declared exclusion paths). This is
8
+ * one fenced region within AGENTS.md; Phase 8 adds the canonical template's
9
+ * other sections (root-resolution, frontmatter schema, write-path, procedure
10
+ * index) as sibling regions in the same file, never touching this one.
11
+ */
12
+ export declare const AGENTS_MD_LEG_ROUTING_FENCE: import("./markers.js").Fence;
13
+ export declare function agentsMdPath(root: string): string;
14
+ export declare function renderLegRoutingSection(config: StoreConfig): string[];
15
+ /** Idempotently reconciles AGENTS.md's leg-routing section from current config — called at init and on re-init. */
16
+ export declare function buildAgentsLegRoutingSection(root: string, config: StoreConfig): Promise<{
17
+ changed: boolean;
18
+ }>;
19
+ /**
20
+ * context-ingest spec (task 6.3): capture is a plain file write an agent
21
+ * does directly with its own tools — no CLI command wraps it, the same
22
+ * "agents gather, the CLI computes/writes/verifies" split that dropped
23
+ * `ctxr search`. This section documents the one rule that write must
24
+ * follow, so it isn't only tribal knowledge: no source-identity fields, and
25
+ * where the file goes.
26
+ */
27
+ export declare const AGENTS_MD_CAPTURE_FENCE: import("./markers.js").Fence;
28
+ export declare function renderCaptureSection(config: StoreConfig): string[];
29
+ export declare function buildAgentsCaptureSection(root: string, config: StoreConfig): Promise<{
30
+ changed: boolean;
31
+ }>;
32
+ /**
33
+ * context-organize spec (task 7.1): the placement procedure is
34
+ * documentation driven entirely by the configured taxonomy, never a
35
+ * hardcoded layout — this section is generated purely from
36
+ * `config.taxonomy.layers`, so it reads correctly under PARA, Zettelkasten,
37
+ * Diátaxis, or any custom taxonomy without a single layer name appearing in
38
+ * this file's own source.
39
+ */
40
+ export declare const AGENTS_MD_PLACEMENT_FENCE: import("./markers.js").Fence;
41
+ export declare function renderPlacementSection(config: StoreConfig): string[];
42
+ export declare function buildAgentsPlacementSection(root: string, config: StoreConfig): Promise<{
43
+ changed: boolean;
44
+ }>;
45
+ /**
46
+ * harness-portability spec (task 8.5): the canonical template's four
47
+ * required pieces — root-resolution rule, frontmatter schema pointer,
48
+ * write-path rule, and a procedure index — so an agent that has read only
49
+ * this file, with no harness-specific context, has everything it needs
50
+ * (the spec's own "Reading only AGENTS.md is sufficient" scenario).
51
+ */
52
+ export declare const AGENTS_MD_CANONICAL_FENCE: import("./markers.js").Fence;
53
+ export declare function renderCanonicalSection(config: StoreConfig, procedures: readonly ScannedDoc[]): string[];
54
+ export declare function buildAgentsCanonicalSection(root: string, config: StoreConfig): Promise<{
55
+ changed: boolean;
56
+ }>;
57
+ /**
58
+ * entry-doc-generation spec: operator conventions as referenced documents.
59
+ * The index lists what is actually on disk at the configured conventions
60
+ * path; contexture ships no seeds here — conventions are definitionally
61
+ * operator-authored, so an empty store's section explains the mechanism.
62
+ */
63
+ export declare const AGENTS_MD_CONVENTIONS_FENCE: import("./markers.js").Fence;
64
+ export declare function renderConventionsSection(config: StoreConfig, conventions: readonly ScannedDoc[]): string[];
65
+ export declare function buildAgentsConventionsSection(root: string, config: StoreConfig): Promise<{
66
+ changed: boolean;
67
+ }>;
68
+ /**
69
+ * agent-identity spec (contexture-home-layout): identity reachable open-box
70
+ * — a harness with no identity-injection adapter that reads only AGENTS.md
71
+ * still learns which files carry identity and that they load at session
72
+ * start. References by path only, never inlined content, so editing an
73
+ * identity file never requires regenerating this section.
74
+ */
75
+ export declare const AGENTS_MD_IDENTITY_FENCE: import("./markers.js").Fence;
76
+ export declare function renderIdentitySection(config: StoreConfig): string[];
77
+ export declare function buildAgentsIdentitySection(root: string, config: StoreConfig): Promise<{
78
+ changed: boolean;
79
+ }>;
80
+ //# sourceMappingURL=agents-doc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents-doc.d.ts","sourceRoot":"","sources":["../../src/core/agents-doc.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMpE;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,8BAA4C,CAAC;AAErF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE,CAiBrE;AAED,mHAAmH;AACnH,wBAAsB,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAEnH;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,8BAAyC,CAAC;AAE9E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE,CAoBlE;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAEhH;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,8BAAgC,CAAC;AAEvE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE,CA8BpE;AAED,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAElH;AAED;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,8BAAgC,CAAC;AAEvE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,UAAU,EAAE,GAAG,MAAM,EAAE,CAiCvG;AAED,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAGlH;AAED;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,8BAAwC,CAAC;AAEjF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,UAAU,EAAE,GAAG,MAAM,EAAE,CAe1G;AAED,wBAAsB,6BAA6B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAGpH;AAED;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,8BAAqC,CAAC;AAE3E,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE,CAanE;AAED,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAEjH"}
@@ -0,0 +1,207 @@
1
+ import path from 'node:path';
2
+ import { CONFIG_FILE_NAME } from './root.js';
3
+ import { excludedPrefixesFor } from './notes/list.js';
4
+ import { scanConventions } from './conventions.js';
5
+ import { identityFilePaths } from './identity.js';
6
+ import { scanProcedures } from './procedures.js';
7
+ import { upsertFencedRegionInFile } from './fs/fenced-region.js';
8
+ import { htmlCommentFence } from './markers.js';
9
+ /**
10
+ * context-retrieval spec (task 4.5): the leg-routing rule that tells an
11
+ * agent which of its two retrieval legs to use for a given question — the
12
+ * catalog/graph (contexture-built-and-maintained) or its own direct content
13
+ * matching (grep, scoped by the store's declared exclusion paths). This is
14
+ * one fenced region within AGENTS.md; Phase 8 adds the canonical template's
15
+ * other sections (root-resolution, frontmatter schema, write-path, procedure
16
+ * index) as sibling regions in the same file, never touching this one.
17
+ */
18
+ export const AGENTS_MD_LEG_ROUTING_FENCE = htmlCommentFence('retrieval-leg-routing');
19
+ export function agentsMdPath(root) {
20
+ return path.join(root, 'AGENTS.md');
21
+ }
22
+ export function renderLegRoutingSection(config) {
23
+ const exclusions = [...new Set(excludedPrefixesFor(config))];
24
+ return [
25
+ '## Retrieval: which leg to use',
26
+ '',
27
+ 'contexture builds and maintains two retrieval tools ahead of time — consult them first:',
28
+ '',
29
+ '- **Catalog** (`ctxr catalog show --section <id>`): a curated, coverage-guaranteed index of every retrievable note, one section per taxonomy layer.',
30
+ '- **Graph** (`ctxr graph query ...`): the wikilink graph between notes — neighbors, shortest path, hubs, orphans.',
31
+ '',
32
+ 'For a literal or entity question the catalog and graph do not answer (a specific string, an exact identifier, a phrase),',
33
+ 'use your own direct content-matching tool (e.g. grep/ripgrep) against the store, scoped to exclude:',
34
+ '',
35
+ ...exclusions.map((prefix) => `- \`${prefix}\``),
36
+ '',
37
+ 'There is no `ctxr search` command. Ranked or semantic search is deferred to a future version — do not look for one.',
38
+ ];
39
+ }
40
+ /** Idempotently reconciles AGENTS.md's leg-routing section from current config — called at init and on re-init. */
41
+ export async function buildAgentsLegRoutingSection(root, config) {
42
+ return upsertFencedRegionInFile(agentsMdPath(root), AGENTS_MD_LEG_ROUTING_FENCE, renderLegRoutingSection(config));
43
+ }
44
+ /**
45
+ * context-ingest spec (task 6.3): capture is a plain file write an agent
46
+ * does directly with its own tools — no CLI command wraps it, the same
47
+ * "agents gather, the CLI computes/writes/verifies" split that dropped
48
+ * `ctxr search`. This section documents the one rule that write must
49
+ * follow, so it isn't only tribal knowledge: no source-identity fields, and
50
+ * where the file goes.
51
+ */
52
+ export const AGENTS_MD_CAPTURE_FENCE = htmlCommentFence('capture-and-ingest');
53
+ export function renderCaptureSection(config) {
54
+ return [
55
+ '## Capturing and ingesting new material',
56
+ '',
57
+ `To capture something new, write a plain markdown file directly into \`${config.ingest.inbox_path}\` —`,
58
+ 'no CLI command wraps this. That file MUST NOT contain any of these frontmatter fields; contexture assigns',
59
+ 'them once, at ingest, and never before:',
60
+ '',
61
+ '- `source_type`',
62
+ '- `source_id`',
63
+ '- `source_hash`',
64
+ '- `ingested`',
65
+ '',
66
+ 'Before ingesting, run `ctxr source check <path> --source-id <id>` to get one of four verdicts:',
67
+ '`new`, `already_ingested`, `alternate_source_match`, or `multiple_matches` — the last one means stop and',
68
+ 'resolve the ambiguity yourself rather than guessing which existing note it is.',
69
+ '',
70
+ 'To ingest, run `ctxr ingest <path> --source-type <type> --source-id <id>`. It stamps the four fields',
71
+ 'above onto the file in place and rebuilds the catalog, so the result already has a catalog entry.',
72
+ ];
73
+ }
74
+ export async function buildAgentsCaptureSection(root, config) {
75
+ return upsertFencedRegionInFile(agentsMdPath(root), AGENTS_MD_CAPTURE_FENCE, renderCaptureSection(config));
76
+ }
77
+ /**
78
+ * context-organize spec (task 7.1): the placement procedure is
79
+ * documentation driven entirely by the configured taxonomy, never a
80
+ * hardcoded layout — this section is generated purely from
81
+ * `config.taxonomy.layers`, so it reads correctly under PARA, Zettelkasten,
82
+ * Diátaxis, or any custom taxonomy without a single layer name appearing in
83
+ * this file's own source.
84
+ */
85
+ export const AGENTS_MD_PLACEMENT_FENCE = htmlCommentFence('placement');
86
+ export function renderPlacementSection(config) {
87
+ const { layers } = config.taxonomy;
88
+ if (layers.length === 0) {
89
+ return [
90
+ '## Placing a new note',
91
+ '',
92
+ 'This store\'s taxonomy declares no top-level layers — place new notes directly at the store root (or',
93
+ 'wherever related notes already live) and rely on wikilinks and `ctxr graph` for organization,',
94
+ 'rather than a folder hierarchy.',
95
+ ];
96
+ }
97
+ const lines = [
98
+ '## Placing a new note',
99
+ '',
100
+ 'This store\'s taxonomy declares these layers — choose the one whose description best matches the note:',
101
+ '',
102
+ ];
103
+ for (const layer of layers) {
104
+ const directoryDefault = Object.entries(config.visibility.directory_defaults).find(([prefix]) => prefix === layer.path || prefix === `${layer.path}/`)?.[1];
105
+ lines.push(`- **${layer.name}** (\`${layer.path}/\`): ${layer.description}${directoryDefault ? ` Notes here default to visibility "${directoryDefault}" unless given an explicit value.` : ''}`);
106
+ }
107
+ lines.push('', "If no layer fits, use the store's uncategorized/catch-all location and revisit placement later.");
108
+ return lines;
109
+ }
110
+ export async function buildAgentsPlacementSection(root, config) {
111
+ return upsertFencedRegionInFile(agentsMdPath(root), AGENTS_MD_PLACEMENT_FENCE, renderPlacementSection(config));
112
+ }
113
+ /**
114
+ * harness-portability spec (task 8.5): the canonical template's four
115
+ * required pieces — root-resolution rule, frontmatter schema pointer,
116
+ * write-path rule, and a procedure index — so an agent that has read only
117
+ * this file, with no harness-specific context, has everything it needs
118
+ * (the spec's own "Reading only AGENTS.md is sufficient" scenario).
119
+ */
120
+ export const AGENTS_MD_CANONICAL_FENCE = htmlCommentFence('canonical');
121
+ export function renderCanonicalSection(config, procedures) {
122
+ const lines = [
123
+ '## Store fundamentals',
124
+ '',
125
+ '### Root resolution',
126
+ '',
127
+ `Every contexture command resolves the store root in this order: an explicit ` +
128
+ '`--root <path>` flag; the `CONTEXTURE_ROOT` environment variable; walking up from the current directory ' +
129
+ `looking for \`${CONFIG_FILE_NAME}\`. No other flag or environment variable selects the root.`,
130
+ '',
131
+ '### Frontmatter schema',
132
+ '',
133
+ `- Visibility field: \`${config.fields.visibility}:\` — resolves explicit value, then directory default, then the ` +
134
+ `configured fail-closed default (\`${config.visibility.default_context}\`). See \`ctxr note resolve <path>\`.`,
135
+ '- Source-identity fields (assigned only by `ctxr ingest`, never hand-written): `source_type`, `source_id`, `source_hash`, `ingested`.',
136
+ '- Disclosure audience tags (optional, hand-written): `audience: [<name>, ...]`.',
137
+ '',
138
+ '### Write path',
139
+ '',
140
+ 'Every write to this store happens inside a session worktree, never directly on the default branch: `ctxr ' +
141
+ 'session start` creates one, then `ctxr session submit` validates, commits, pushes, and opens (or ' +
142
+ 'reports how to open) a pull request. Do not edit files in the store root directly.',
143
+ '',
144
+ '### Procedure index',
145
+ '',
146
+ 'Judgment-driven operations, documented as portable markdown under ' +
147
+ `\`${config.harness.procedures_path}\` — read one directly, no harness-specific discovery required:`,
148
+ '',
149
+ ];
150
+ for (const procedure of procedures) {
151
+ lines.push(`- [${procedure.title}](${procedure.path})${procedure.description ? ` — ${procedure.description}` : ''}`);
152
+ }
153
+ return lines;
154
+ }
155
+ export async function buildAgentsCanonicalSection(root, config) {
156
+ const procedures = await scanProcedures(root, config);
157
+ return upsertFencedRegionInFile(agentsMdPath(root), AGENTS_MD_CANONICAL_FENCE, renderCanonicalSection(config, procedures));
158
+ }
159
+ /**
160
+ * entry-doc-generation spec: operator conventions as referenced documents.
161
+ * The index lists what is actually on disk at the configured conventions
162
+ * path; contexture ships no seeds here — conventions are definitionally
163
+ * operator-authored, so an empty store's section explains the mechanism.
164
+ */
165
+ export const AGENTS_MD_CONVENTIONS_FENCE = htmlCommentFence('store-conventions');
166
+ export function renderConventionsSection(config, conventions) {
167
+ const lines = ['## Store conventions', ''];
168
+ if (conventions.length === 0) {
169
+ lines.push(`This store declares no convention documents yet. Operator-authored conventions (content style, field`, `semantics, house rules) belong as markdown files under \`${config.harness.conventions_path}\` — each is`, 'indexed here on regeneration, referenced by path, never inlined.');
170
+ return lines;
171
+ }
172
+ lines.push('Operator-authored conventions for this store — read the ones relevant to your task:', '');
173
+ for (const doc of conventions) {
174
+ lines.push(`- [${doc.title}](${doc.path})${doc.description ? ` — ${doc.description}` : ''}`);
175
+ }
176
+ return lines;
177
+ }
178
+ export async function buildAgentsConventionsSection(root, config) {
179
+ const conventions = await scanConventions(root, config);
180
+ return upsertFencedRegionInFile(agentsMdPath(root), AGENTS_MD_CONVENTIONS_FENCE, renderConventionsSection(config, conventions));
181
+ }
182
+ /**
183
+ * agent-identity spec (contexture-home-layout): identity reachable open-box
184
+ * — a harness with no identity-injection adapter that reads only AGENTS.md
185
+ * still learns which files carry identity and that they load at session
186
+ * start. References by path only, never inlined content, so editing an
187
+ * identity file never requires regenerating this section.
188
+ */
189
+ export const AGENTS_MD_IDENTITY_FENCE = htmlCommentFence('agent-identity');
190
+ export function renderIdentitySection(config) {
191
+ const paths = identityFilePaths(config);
192
+ return [
193
+ '## Agent identity — load at session start',
194
+ '',
195
+ 'This store carries durable agent identity as plain files. Before doing anything else in a session,',
196
+ 'read all three (harnesses with a native injection mechanism may already have loaded them for you):',
197
+ '',
198
+ ...paths.map((p) => `- \`${p}\``),
199
+ '',
200
+ 'They are identity, not knowledge: excluded from every retrieval leg, and never edited as part of',
201
+ 'ordinary note work.',
202
+ ];
203
+ }
204
+ export async function buildAgentsIdentitySection(root, config) {
205
+ return upsertFencedRegionInFile(agentsMdPath(root), AGENTS_MD_IDENTITY_FENCE, renderIdentitySection(config));
206
+ }
207
+ //# sourceMappingURL=agents-doc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents-doc.js","sourceRoot":"","sources":["../../src/core/agents-doc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { Store } from '../store.js';
2
+ import { type CatalogSection } from './model.js';
3
+ export declare const CATALOG_FENCE: import("../markers.js").Fence;
4
+ export interface CatalogSectionBuildResult {
5
+ id: string;
6
+ file: string;
7
+ noteCount: number;
8
+ changed: boolean;
9
+ }
10
+ export interface CatalogBuildResult {
11
+ sections: CatalogSectionBuildResult[];
12
+ totalNotes: number;
13
+ }
14
+ /**
15
+ * context-catalog spec: regenerates each section's fenced identity/path
16
+ * entries, preserving any already-authored gloss. Re-running with no
17
+ * underlying change is byte-identical (upsertFencedRegionInFile only writes
18
+ * when content actually differs).
19
+ */
20
+ export declare function buildCatalog(store: Store): Promise<CatalogBuildResult>;
21
+ export interface CatalogCoverageResult {
22
+ /** Retrievable notes with no catalog entry anywhere. */
23
+ missing: string[];
24
+ /** Catalog entries referencing a path that is no longer a retrievable note (e.g. deleted). */
25
+ dangling: string[];
26
+ }
27
+ /**
28
+ * context-catalog spec: coverage is a hard invariant in BOTH directions —
29
+ * every retrievable note must have an entry (missing), and every entry must
30
+ * still reference a real, retrievable note (dangling). A deleted note whose
31
+ * stale entry survives a build is exactly the failure this second half
32
+ * catches — `catalog build` only ever ADDS/preserves entries, so removal
33
+ * must be caught here rather than silently left to rot.
34
+ */
35
+ export declare function checkCatalogCoverage(store: Store): Promise<CatalogCoverageResult>;
36
+ export interface CatalogStaleEntry {
37
+ path: string;
38
+ section: string;
39
+ }
40
+ /** context-catalog spec: an entry whose note has changed since its gloss was confirmed needs review. */
41
+ export declare function checkCatalogStale(store: Store): Promise<CatalogStaleEntry[]>;
42
+ /**
43
+ * Returns null ONLY when `sectionId` doesn't name a configured section — a
44
+ * real section that simply hasn't been built yet (or has no notes) returns
45
+ * an empty string, which is a valid, uninteresting result, not an error.
46
+ */
47
+ export declare function readCatalogSection(store: Store, sectionId: string, asContext?: string): Promise<string | null>;
48
+ export declare function catalogSectionPath(store: Store, section: CatalogSection): string;
49
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/core/catalog/build.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,aAAa,+BAA8B,CAAC;AAoBzD,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,yBAAyB,EAAE,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmB5E;AAED,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,8FAA8F;IAC9F,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAgBvF;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wGAAwG;AACxG,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAmBlF;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMpH;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAEhF"}