@isaacriehm/cairn-core 0.1.10 → 0.3.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 (399) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/claude/runner.d.ts +1 -1
  3. package/dist/claude/runner.js +62 -1
  4. package/dist/claude/runner.js.map +1 -1
  5. package/dist/claude/types.d.ts +14 -7
  6. package/dist/claude/types.js +5 -7
  7. package/dist/claude/types.js.map +1 -1
  8. package/dist/context/index.d.ts +4 -4
  9. package/dist/context/index.js +3 -4
  10. package/dist/context/index.js.map +1 -1
  11. package/dist/context/spec-delta.js +3 -4
  12. package/dist/context/spec-delta.js.map +1 -1
  13. package/dist/context/task-summary.d.ts +18 -0
  14. package/dist/context/task-summary.js +89 -0
  15. package/dist/context/task-summary.js.map +1 -0
  16. package/dist/decision-capture/id.d.ts +21 -4
  17. package/dist/decision-capture/id.js +56 -5
  18. package/dist/decision-capture/id.js.map +1 -1
  19. package/dist/decision-capture/index.d.ts +7 -22
  20. package/dist/decision-capture/index.js +7 -17
  21. package/dist/decision-capture/index.js.map +1 -1
  22. package/dist/doctor/index.d.ts +2 -2
  23. package/dist/doctor/index.js +5 -60
  24. package/dist/doctor/index.js.map +1 -1
  25. package/dist/events/index.d.ts +1 -1
  26. package/dist/events/index.js +1 -1
  27. package/dist/events/writer.d.ts +1 -1
  28. package/dist/events/writer.js +1 -1
  29. package/dist/gc/canary.d.ts +13 -23
  30. package/dist/gc/canary.js +36 -92
  31. package/dist/gc/canary.js.map +1 -1
  32. package/dist/gc/citation-integrity.d.ts +6 -6
  33. package/dist/gc/citation-integrity.js +64 -20
  34. package/dist/gc/citation-integrity.js.map +1 -1
  35. package/dist/gc/frontmatter.js +1 -1
  36. package/dist/gc/generator-drift.js +1 -1
  37. package/dist/gc/generator-drift.js.map +1 -1
  38. package/dist/gc/index.d.ts +2 -2
  39. package/dist/gc/index.js +1 -1
  40. package/dist/gc/index.js.map +1 -1
  41. package/dist/gc/quality-update.d.ts +4 -4
  42. package/dist/gc/quality-update.js +5 -5
  43. package/dist/gc/quality-update.js.map +1 -1
  44. package/dist/gc/types.d.ts +1 -30
  45. package/dist/ground/index.d.ts +2 -2
  46. package/dist/ground/index.js +1 -1
  47. package/dist/ground/index.js.map +1 -1
  48. package/dist/ground/ledgers.d.ts +0 -4
  49. package/dist/ground/ledgers.js +10 -8
  50. package/dist/ground/ledgers.js.map +1 -1
  51. package/dist/ground/manifest.js +0 -4
  52. package/dist/ground/manifest.js.map +1 -1
  53. package/dist/ground/paths.js +0 -1
  54. package/dist/ground/paths.js.map +1 -1
  55. package/dist/ground/quality-grades.js +3 -1
  56. package/dist/ground/quality-grades.js.map +1 -1
  57. package/dist/ground/schemas.d.ts +2 -7
  58. package/dist/ground/schemas.js +7 -2
  59. package/dist/ground/schemas.js.map +1 -1
  60. package/dist/ground/scope-index.d.ts +62 -14
  61. package/dist/ground/scope-index.js +215 -45
  62. package/dist/ground/scope-index.js.map +1 -1
  63. package/dist/hooks/bypass-detection.js +14 -17
  64. package/dist/hooks/bypass-detection.js.map +1 -1
  65. package/dist/hooks/defer.d.ts +50 -0
  66. package/dist/hooks/defer.js +87 -0
  67. package/dist/hooks/defer.js.map +1 -0
  68. package/dist/hooks/post-tool-use/citation-scanner.d.ts +7 -5
  69. package/dist/hooks/post-tool-use/citation-scanner.js +15 -9
  70. package/dist/hooks/post-tool-use/citation-scanner.js.map +1 -1
  71. package/dist/hooks/post-tool-use/copy-scanner.js +1 -1
  72. package/dist/hooks/post-tool-use/copy-scanner.js.map +1 -1
  73. package/dist/hooks/post-tool-use/ledger-cache.d.ts +10 -2
  74. package/dist/hooks/post-tool-use/ledger-cache.js +58 -4
  75. package/dist/hooks/post-tool-use/ledger-cache.js.map +1 -1
  76. package/dist/hooks/post-tool-use/legend-builder.d.ts +3 -3
  77. package/dist/hooks/post-tool-use/legend-builder.js +30 -8
  78. package/dist/hooks/post-tool-use/legend-builder.js.map +1 -1
  79. package/dist/hooks/post-tool-use/read-enricher.d.ts +1 -1
  80. package/dist/hooks/post-tool-use/read-enricher.js +68 -21
  81. package/dist/hooks/post-tool-use/read-enricher.js.map +1 -1
  82. package/dist/hooks/post-tool-use/write-guardian.js +148 -18
  83. package/dist/hooks/post-tool-use/write-guardian.js.map +1 -1
  84. package/dist/hooks/runners/index.d.ts +3 -0
  85. package/dist/hooks/runners/index.js +2 -0
  86. package/dist/hooks/runners/index.js.map +1 -1
  87. package/dist/hooks/runners/payload.d.ts +1 -1
  88. package/dist/hooks/runners/payload.js +27 -12
  89. package/dist/hooks/runners/payload.js.map +1 -1
  90. package/dist/hooks/runners/session-start.js +250 -75
  91. package/dist/hooks/runners/session-start.js.map +1 -1
  92. package/dist/hooks/runners/stop.d.ts +9 -12
  93. package/dist/hooks/runners/stop.js +129 -41
  94. package/dist/hooks/runners/stop.js.map +1 -1
  95. package/dist/hooks/runners/user-prompt-submit.d.ts +15 -0
  96. package/dist/hooks/runners/user-prompt-submit.js +149 -0
  97. package/dist/hooks/runners/user-prompt-submit.js.map +1 -0
  98. package/dist/hooks/seed-attested.d.ts +25 -0
  99. package/dist/hooks/seed-attested.js +84 -0
  100. package/dist/hooks/seed-attested.js.map +1 -0
  101. package/dist/hooks/user-prompt-submit.d.ts +7 -0
  102. package/dist/hooks/user-prompt-submit.js +12 -0
  103. package/dist/hooks/user-prompt-submit.js.map +1 -0
  104. package/dist/index.d.ts +3 -6
  105. package/dist/index.js +14 -12
  106. package/dist/index.js.map +1 -1
  107. package/dist/init/baseline-audit.d.ts +5 -1
  108. package/dist/init/baseline-audit.js +25 -2
  109. package/dist/init/baseline-audit.js.map +1 -1
  110. package/dist/init/glob-inference.d.ts +16 -0
  111. package/dist/init/glob-inference.js +108 -0
  112. package/dist/init/glob-inference.js.map +1 -0
  113. package/dist/init/index.d.ts +4 -0
  114. package/dist/init/index.js +2 -0
  115. package/dist/init/index.js.map +1 -1
  116. package/dist/init/ingest-docs.d.ts +1 -1
  117. package/dist/init/ingest-docs.js +19 -6
  118. package/dist/init/ingest-docs.js.map +1 -1
  119. package/dist/init/init.js +17 -94
  120. package/dist/init/init.js.map +1 -1
  121. package/dist/init/mapper-merge.d.ts +8 -2
  122. package/dist/init/mapper-merge.js +50 -32
  123. package/dist/init/mapper-merge.js.map +1 -1
  124. package/dist/init/mapper-parallel.d.ts +2 -3
  125. package/dist/init/mapper-parallel.js +9 -38
  126. package/dist/init/mapper-parallel.js.map +1 -1
  127. package/dist/init/mapper-prompts.js +1 -1
  128. package/dist/init/mapper-prompts.js.map +1 -1
  129. package/dist/init/mapper.d.ts +7 -128
  130. package/dist/init/mapper.js +30 -7
  131. package/dist/init/mapper.js.map +1 -1
  132. package/dist/init/module-slicer.d.ts +1 -1
  133. package/dist/init/module-slicer.js +1 -1
  134. package/dist/init/multi-dev/install.d.ts +9 -10
  135. package/dist/init/multi-dev/install.js +15 -84
  136. package/dist/init/multi-dev/install.js.map +1 -1
  137. package/dist/init/overlay.d.ts +14 -0
  138. package/dist/init/overlay.js +65 -0
  139. package/dist/init/overlay.js.map +1 -0
  140. package/dist/init/phases/1-detect.d.ts +10 -0
  141. package/dist/init/phases/1-detect.js +36 -0
  142. package/dist/init/phases/1-detect.js.map +1 -0
  143. package/dist/init/phases/10-strip.d.ts +11 -0
  144. package/dist/init/phases/10-strip.js +79 -0
  145. package/dist/init/phases/10-strip.js.map +1 -0
  146. package/dist/init/phases/12-multidev.d.ts +6 -0
  147. package/dist/init/phases/12-multidev.js +34 -0
  148. package/dist/init/phases/12-multidev.js.map +1 -0
  149. package/dist/init/phases/2-walker.d.ts +8 -0
  150. package/dist/init/phases/2-walker.js +34 -0
  151. package/dist/init/phases/2-walker.js.map +1 -0
  152. package/dist/init/phases/3-mapper.d.ts +14 -0
  153. package/dist/init/phases/3-mapper.js +56 -0
  154. package/dist/init/phases/3-mapper.js.map +1 -0
  155. package/dist/init/phases/3b-seed.d.ts +18 -0
  156. package/dist/init/phases/3b-seed.js +140 -0
  157. package/dist/init/phases/3b-seed.js.map +1 -0
  158. package/dist/init/phases/4-pilot.d.ts +10 -0
  159. package/dist/init/phases/4-pilot.js +108 -0
  160. package/dist/init/phases/4-pilot.js.map +1 -0
  161. package/dist/init/phases/5-brand.d.ts +10 -0
  162. package/dist/init/phases/5-brand.js +66 -0
  163. package/dist/init/phases/5-brand.js.map +1 -0
  164. package/dist/init/phases/6-docs-ingest.d.ts +11 -0
  165. package/dist/init/phases/6-docs-ingest.js +39 -0
  166. package/dist/init/phases/6-docs-ingest.js.map +1 -0
  167. package/dist/init/phases/7b-source-comments.d.ts +6 -0
  168. package/dist/init/phases/7b-source-comments.js +34 -0
  169. package/dist/init/phases/7b-source-comments.js.map +1 -0
  170. package/dist/init/phases/7c-rules-merge.d.ts +6 -0
  171. package/dist/init/phases/7c-rules-merge.js +34 -0
  172. package/dist/init/phases/7c-rules-merge.js.map +1 -0
  173. package/dist/init/phases/8-baseline.d.ts +10 -0
  174. package/dist/init/phases/8-baseline.js +52 -0
  175. package/dist/init/phases/8-baseline.js.map +1 -0
  176. package/dist/init/phases/index.d.ts +15 -0
  177. package/dist/init/phases/index.js +16 -0
  178. package/dist/init/phases/index.js.map +1 -0
  179. package/dist/init/phases/orchestrator.d.ts +49 -0
  180. package/dist/init/phases/orchestrator.js +85 -0
  181. package/dist/init/phases/orchestrator.js.map +1 -0
  182. package/dist/init/phases/state-io.d.ts +19 -0
  183. package/dist/init/phases/state-io.js +73 -0
  184. package/dist/init/phases/state-io.js.map +1 -0
  185. package/dist/init/phases/types.d.ts +93 -0
  186. package/dist/init/phases/types.js +30 -0
  187. package/dist/init/phases/types.js.map +1 -0
  188. package/dist/init/prompts.d.ts +6 -8
  189. package/dist/init/prompts.js +3 -6
  190. package/dist/init/prompts.js.map +1 -1
  191. package/dist/init/rules-merge/ingest.js +1 -1
  192. package/dist/init/seed.js +11 -2
  193. package/dist/init/seed.js.map +1 -1
  194. package/dist/init/source-comments/classify.d.ts +1 -41
  195. package/dist/init/source-comments/classify.js +68 -37
  196. package/dist/init/source-comments/classify.js.map +1 -1
  197. package/dist/init/source-comments/index.d.ts +2 -2
  198. package/dist/init/source-comments/index.js +2 -2
  199. package/dist/init/source-comments/index.js.map +1 -1
  200. package/dist/init/source-comments/ingest.d.ts +38 -2
  201. package/dist/init/source-comments/ingest.js +237 -4
  202. package/dist/init/source-comments/ingest.js.map +1 -1
  203. package/dist/init/source-comments/strip-replace.d.ts +10 -19
  204. package/dist/init/source-comments/strip-replace.js +26 -2
  205. package/dist/init/source-comments/strip-replace.js.map +1 -1
  206. package/dist/init/source-comments/walker.d.ts +9 -2
  207. package/dist/init/source-comments/walker.js +38 -19
  208. package/dist/init/source-comments/walker.js.map +1 -1
  209. package/dist/init/submodules.d.ts +3 -2
  210. package/dist/init/types.d.ts +3 -5
  211. package/dist/init/types.js +3 -5
  212. package/dist/init/types.js.map +1 -1
  213. package/dist/init/visual.d.ts +4 -9
  214. package/dist/init/visual.js +1 -16
  215. package/dist/init/visual.js.map +1 -1
  216. package/dist/init/walker.d.ts +0 -6
  217. package/dist/init/walker.js +2 -3
  218. package/dist/init/walker.js.map +1 -1
  219. package/dist/join/index.js +49 -2
  220. package/dist/join/index.js.map +1 -1
  221. package/dist/logger.d.ts +1 -2
  222. package/dist/logger.js +5 -6
  223. package/dist/logger.js.map +1 -1
  224. package/dist/mcp/context.d.ts +2 -3
  225. package/dist/mcp/context.js.map +1 -1
  226. package/dist/mcp/errors.d.ts +1 -1
  227. package/dist/mcp/errors.js.map +1 -1
  228. package/dist/mcp/history/prompt.d.ts +2 -1
  229. package/dist/mcp/history/walker.js +1 -1
  230. package/dist/mcp/history/walker.js.map +1 -1
  231. package/dist/mcp/path-allowlist.d.ts +0 -6
  232. package/dist/mcp/path-allowlist.js +0 -10
  233. package/dist/mcp/path-allowlist.js.map +1 -1
  234. package/dist/mcp/schemas.d.ts +34 -72
  235. package/dist/mcp/schemas.js +40 -70
  236. package/dist/mcp/schemas.js.map +1 -1
  237. package/dist/mcp/serve.d.ts +1 -1
  238. package/dist/mcp/serve.js +2 -5
  239. package/dist/mcp/serve.js.map +1 -1
  240. package/dist/mcp/server.js +10 -4
  241. package/dist/mcp/server.js.map +1 -1
  242. package/dist/mcp/telemetry.d.ts +8 -1
  243. package/dist/mcp/telemetry.js +16 -0
  244. package/dist/mcp/telemetry.js.map +1 -1
  245. package/dist/mcp/tools/decision-get.js +37 -29
  246. package/dist/mcp/tools/decision-get.js.map +1 -1
  247. package/dist/mcp/tools/decisions-in-scope.js +22 -3
  248. package/dist/mcp/tools/decisions-in-scope.js.map +1 -1
  249. package/dist/mcp/tools/ground-get.js +2 -2
  250. package/dist/mcp/tools/ground-get.js.map +1 -1
  251. package/dist/mcp/tools/index.js +6 -2
  252. package/dist/mcp/tools/index.js.map +1 -1
  253. package/dist/mcp/tools/init-phases.d.ts +24 -0
  254. package/dist/mcp/tools/init-phases.js +140 -0
  255. package/dist/mcp/tools/init-phases.js.map +1 -0
  256. package/dist/mcp/tools/invariant-get.js +1 -1
  257. package/dist/mcp/tools/invariant-get.js.map +1 -1
  258. package/dist/mcp/tools/invariants-in-scope.js +26 -7
  259. package/dist/mcp/tools/invariants-in-scope.js.map +1 -1
  260. package/dist/mcp/tools/query-history.js +3 -3
  261. package/dist/mcp/tools/query-history.js.map +1 -1
  262. package/dist/mcp/tools/resolve-attention.d.ts +6 -4
  263. package/dist/mcp/tools/resolve-attention.js +253 -24
  264. package/dist/mcp/tools/resolve-attention.js.map +1 -1
  265. package/dist/mcp/tools/search.js +3 -4
  266. package/dist/mcp/tools/search.js.map +1 -1
  267. package/dist/mcp/tools/task-create.d.ts +15 -0
  268. package/dist/mcp/tools/task-create.js +96 -0
  269. package/dist/mcp/tools/task-create.js.map +1 -0
  270. package/dist/mcp/tools/timeline.js +3 -7
  271. package/dist/mcp/tools/timeline.js.map +1 -1
  272. package/dist/profiles/types.d.ts +2 -2
  273. package/dist/profiles/types.js +1 -1
  274. package/dist/sensors/catalog.js +8 -3
  275. package/dist/sensors/catalog.js.map +1 -1
  276. package/dist/session/id.d.ts +1 -3
  277. package/dist/session/id.js +1 -1
  278. package/dist/session/id.js.map +1 -1
  279. package/dist/session-start/build.d.ts +7 -11
  280. package/dist/session-start/build.js +62 -34
  281. package/dist/session-start/build.js.map +1 -1
  282. package/dist/session-start/index.d.ts +2 -2
  283. package/dist/session-start/index.js +2 -2
  284. package/dist/session-start/index.js.map +1 -1
  285. package/dist/session-start/templates.d.ts +20 -4
  286. package/dist/session-start/templates.js +45 -35
  287. package/dist/session-start/templates.js.map +1 -1
  288. package/dist/status-line/format.d.ts +20 -9
  289. package/dist/status-line/format.js +45 -35
  290. package/dist/status-line/format.js.map +1 -1
  291. package/dist/status-line/index.d.ts +3 -4
  292. package/dist/status-line/index.js +1 -1
  293. package/dist/status-line/index.js.map +1 -1
  294. package/dist/status-line/reader.d.ts +9 -6
  295. package/dist/status-line/reader.js +50 -18
  296. package/dist/status-line/reader.js.map +1 -1
  297. package/dist/status-line/writer.d.ts +6 -9
  298. package/dist/status-line/writer.js +10 -12
  299. package/dist/status-line/writer.js.map +1 -1
  300. package/dist/trace/index.d.ts +44 -0
  301. package/dist/trace/index.js +51 -0
  302. package/dist/trace/index.js.map +1 -0
  303. package/package.json +2 -3
  304. package/templates/.archive/README.md +3 -3
  305. package/templates/.cairn/JOIN.md +3 -9
  306. package/templates/.cairn/config/sensors.yaml +16 -19
  307. package/templates/.cairn/config/stub-patterns.yaml +4 -4
  308. package/templates/.cairn/config/trust-policy.yaml +3 -35
  309. package/templates/.cairn/config/workflow.md +13 -194
  310. package/templates/.cairn/git-hooks/commit-msg +15 -4
  311. package/templates/.cairn/git-hooks/pre-commit +22 -13
  312. package/templates/.cairn/ground/canonical-map/topics.yaml +3 -26
  313. package/templates/.cairn/ground/capabilities/snippets.yaml +0 -1
  314. package/templates/.cairn/ground/manifest.yaml +5 -8
  315. package/templates/.cairn/ground/product/personas.yaml +0 -1
  316. package/dist/context/checkpoint.d.ts +0 -10
  317. package/dist/context/checkpoint.js +0 -29
  318. package/dist/context/checkpoint.js.map +0 -1
  319. package/dist/decision-capture/capture.d.ts +0 -57
  320. package/dist/decision-capture/capture.js +0 -186
  321. package/dist/decision-capture/capture.js.map +0 -1
  322. package/dist/decision-capture/extractor.d.ts +0 -20
  323. package/dist/decision-capture/extractor.js +0 -103
  324. package/dist/decision-capture/extractor.js.map +0 -1
  325. package/dist/decision-capture/prompt.d.ts +0 -15
  326. package/dist/decision-capture/prompt.js +0 -68
  327. package/dist/decision-capture/prompt.js.map +0 -1
  328. package/dist/decision-capture/refinement-prompt.d.ts +0 -25
  329. package/dist/decision-capture/refinement-prompt.js +0 -146
  330. package/dist/decision-capture/refinement-prompt.js.map +0 -1
  331. package/dist/decision-capture/refinement-schema.d.ts +0 -52
  332. package/dist/decision-capture/refinement-schema.js +0 -61
  333. package/dist/decision-capture/refinement-schema.js.map +0 -1
  334. package/dist/decision-capture/refinement.d.ts +0 -60
  335. package/dist/decision-capture/refinement.js +0 -439
  336. package/dist/decision-capture/refinement.js.map +0 -1
  337. package/dist/decision-capture/schema.d.ts +0 -70
  338. package/dist/decision-capture/schema.js +0 -71
  339. package/dist/decision-capture/schema.js.map +0 -1
  340. package/dist/decision-capture/types.d.ts +0 -201
  341. package/dist/decision-capture/types.js +0 -20
  342. package/dist/decision-capture/types.js.map +0 -1
  343. package/dist/decision-capture/writer.d.ts +0 -90
  344. package/dist/decision-capture/writer.js +0 -267
  345. package/dist/decision-capture/writer.js.map +0 -1
  346. package/dist/frontend-types.d.ts +0 -243
  347. package/dist/frontend-types.js +0 -15
  348. package/dist/frontend-types.js.map +0 -1
  349. package/dist/hooks/index.d.ts +0 -12
  350. package/dist/hooks/index.js +0 -13
  351. package/dist/hooks/index.js.map +0 -1
  352. package/dist/inbox.d.ts +0 -17
  353. package/dist/inbox.js +0 -30
  354. package/dist/inbox.js.map +0 -1
  355. package/dist/mcp/tools/append-run-note.d.ts +0 -18
  356. package/dist/mcp/tools/append-run-note.js +0 -47
  357. package/dist/mcp/tools/append-run-note.js.map +0 -1
  358. package/dist/mcp/tools/append.d.ts +0 -8
  359. package/dist/mcp/tools/append.js +0 -37
  360. package/dist/mcp/tools/append.js.map +0 -1
  361. package/dist/mcp/tools/ask-operator.d.ts +0 -34
  362. package/dist/mcp/tools/ask-operator.js +0 -97
  363. package/dist/mcp/tools/ask-operator.js.map +0 -1
  364. package/dist/mcp/tools/drop-task.d.ts +0 -12
  365. package/dist/mcp/tools/drop-task.js +0 -68
  366. package/dist/mcp/tools/drop-task.js.map +0 -1
  367. package/dist/mcp/tools/record-run-event.d.ts +0 -10
  368. package/dist/mcp/tools/record-run-event.js +0 -32
  369. package/dist/mcp/tools/record-run-event.js.map +0 -1
  370. package/dist/prompt.d.ts +0 -19
  371. package/dist/prompt.js +0 -50
  372. package/dist/prompt.js.map +0 -1
  373. package/dist/tier0/classify.d.ts +0 -10
  374. package/dist/tier0/classify.js +0 -110
  375. package/dist/tier0/classify.js.map +0 -1
  376. package/dist/tier0/index.d.ts +0 -2
  377. package/dist/tier0/index.js +0 -2
  378. package/dist/tier0/index.js.map +0 -1
  379. package/dist/tier0/types.d.ts +0 -24
  380. package/dist/tier0/types.js +0 -9
  381. package/dist/tier0/types.js.map +0 -1
  382. package/dist/tightener/index.d.ts +0 -4
  383. package/dist/tightener/index.js +0 -4
  384. package/dist/tightener/index.js.map +0 -1
  385. package/dist/tightener/prompt.d.ts +0 -3
  386. package/dist/tightener/prompt.js +0 -67
  387. package/dist/tightener/prompt.js.map +0 -1
  388. package/dist/tightener/schema.d.ts +0 -68
  389. package/dist/tightener/schema.js +0 -44
  390. package/dist/tightener/schema.js.map +0 -1
  391. package/dist/tightener/tighten.d.ts +0 -2
  392. package/dist/tightener/tighten.js +0 -66
  393. package/dist/tightener/tighten.js.map +0 -1
  394. package/dist/tightener/types.d.ts +0 -74
  395. package/dist/tightener/types.js +0 -6
  396. package/dist/tightener/types.js.map +0 -1
  397. package/templates/.claude/settings.json +0 -57
  398. package/templates/.mcp.json +0 -8
  399. package/templates/README.md +0 -24
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Orchestrator entry points for the MCP-native init pipeline.
3
+ *
4
+ * `resumePhases(repoRoot)` is the single readable surface for the
5
+ * cairn-adopt skill — it reads any persisted state, returns the next
6
+ * phase id, and (for fresh starts) constructs the initial PhaseState.
7
+ *
8
+ * Phase functions live in sibling files (one per id, see types.ts
9
+ * PHASE_IDS). The orchestrator does not invoke them directly; the
10
+ * skill driver calls each phase's MCP tool with the state returned
11
+ * from `resumePhases` and threads results forward.
12
+ */
13
+ import { type PhaseId, type PhaseState, type ResumeReport } from "./types.js";
14
+ /**
15
+ * Construct the fresh state for a brand-new init run. No filesystem
16
+ * IO — the caller persists this via `writePhaseState` once phase
17
+ * 1-detect has created `.cairn/`.
18
+ */
19
+ export declare function freshPhaseState(repoRoot: string): PhaseState;
20
+ /**
21
+ * Read whatever init state is on disk for `repoRoot` and return the
22
+ * next phase the skill driver should invoke. If no state exists, the
23
+ * first phase becomes "ready".
24
+ *
25
+ * The persisted `state.currentPhase` IS the next phase to run:
26
+ * - On "complete", the phase function calls `advancePhase` to
27
+ * increment `currentPhase` to the successor before persisting.
28
+ * - On "needs_input", `currentPhase` stays put — the operator's
29
+ * answer feeds back into the same phase.
30
+ *
31
+ * The init-phases MCP tool clears the state file as soon as the final
32
+ * phase returns nextPhase=null, so a "done" report only fires when
33
+ * cleanup itself failed. We model that as "ready" pointing at the last
34
+ * phase id; the skill re-invokes (idempotent) and then clearPhaseState
35
+ * runs again.
36
+ */
37
+ export declare function resumePhases(repoRoot: string): ResumeReport;
38
+ /**
39
+ * Compute the phase id that follows `current` in PHASE_IDS, or null
40
+ * when `current` is already the last id. Pure function — useful from
41
+ * inside individual phase functions when stamping their PhaseResult.
42
+ */
43
+ export declare function nextPhaseAfter(current: PhaseId): PhaseId | null;
44
+ /**
45
+ * Advance `state.currentPhase` to the next phase id. Returns a new
46
+ * state; does not mutate the input. Used by phase functions when
47
+ * stamping a "complete" result that hands off to the next phase.
48
+ */
49
+ export declare function advancePhase(state: PhaseState): PhaseState;
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Orchestrator entry points for the MCP-native init pipeline.
3
+ *
4
+ * `resumePhases(repoRoot)` is the single readable surface for the
5
+ * cairn-adopt skill — it reads any persisted state, returns the next
6
+ * phase id, and (for fresh starts) constructs the initial PhaseState.
7
+ *
8
+ * Phase functions live in sibling files (one per id, see types.ts
9
+ * PHASE_IDS). The orchestrator does not invoke them directly; the
10
+ * skill driver calls each phase's MCP tool with the state returned
11
+ * from `resumePhases` and threads results forward.
12
+ */
13
+ import { PHASE_IDS } from "./types.js";
14
+ import { readPhaseState } from "./state-io.js";
15
+ /**
16
+ * Construct the fresh state for a brand-new init run. No filesystem
17
+ * IO — the caller persists this via `writePhaseState` once phase
18
+ * 1-detect has created `.cairn/`.
19
+ */
20
+ export function freshPhaseState(repoRoot) {
21
+ return {
22
+ repoRoot,
23
+ currentPhase: PHASE_IDS[0],
24
+ outputs: {},
25
+ startedAt: new Date().toISOString(),
26
+ schemaVersion: 1,
27
+ };
28
+ }
29
+ /**
30
+ * Read whatever init state is on disk for `repoRoot` and return the
31
+ * next phase the skill driver should invoke. If no state exists, the
32
+ * first phase becomes "ready".
33
+ *
34
+ * The persisted `state.currentPhase` IS the next phase to run:
35
+ * - On "complete", the phase function calls `advancePhase` to
36
+ * increment `currentPhase` to the successor before persisting.
37
+ * - On "needs_input", `currentPhase` stays put — the operator's
38
+ * answer feeds back into the same phase.
39
+ *
40
+ * The init-phases MCP tool clears the state file as soon as the final
41
+ * phase returns nextPhase=null, so a "done" report only fires when
42
+ * cleanup itself failed. We model that as "ready" pointing at the last
43
+ * phase id; the skill re-invokes (idempotent) and then clearPhaseState
44
+ * runs again.
45
+ */
46
+ export function resumePhases(repoRoot) {
47
+ const persisted = readPhaseState(repoRoot);
48
+ if (persisted === null) {
49
+ return {
50
+ status: "ready",
51
+ nextPhase: PHASE_IDS[0],
52
+ state: freshPhaseState(repoRoot),
53
+ };
54
+ }
55
+ return {
56
+ status: "ready",
57
+ nextPhase: persisted.currentPhase,
58
+ state: persisted,
59
+ };
60
+ }
61
+ /**
62
+ * Compute the phase id that follows `current` in PHASE_IDS, or null
63
+ * when `current` is already the last id. Pure function — useful from
64
+ * inside individual phase functions when stamping their PhaseResult.
65
+ */
66
+ export function nextPhaseAfter(current) {
67
+ const idx = PHASE_IDS.indexOf(current);
68
+ if (idx === -1)
69
+ return null;
70
+ if (idx === PHASE_IDS.length - 1)
71
+ return null;
72
+ return PHASE_IDS[idx + 1] ?? null;
73
+ }
74
+ /**
75
+ * Advance `state.currentPhase` to the next phase id. Returns a new
76
+ * state; does not mutate the input. Used by phase functions when
77
+ * stamping a "complete" result that hands off to the next phase.
78
+ */
79
+ export function advancePhase(state) {
80
+ const next = nextPhaseAfter(state.currentPhase);
81
+ if (next === null)
82
+ return state;
83
+ return { ...state, currentPhase: next, answer: undefined };
84
+ }
85
+ //# sourceMappingURL=orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/init/phases/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,SAAS,EAAoD,MAAM,YAAY,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,OAAO;QACL,QAAQ;QACR,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC;QAC1B,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,aAAa,EAAE,CAAC;KACjB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO;YACL,MAAM,EAAE,OAAO;YACf,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;YACvB,KAAK,EAAE,eAAe,CAAC,QAAQ,CAAC;SACjC,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,OAAO;QACf,SAAS,EAAE,SAAS,CAAC,YAAY;QACjC,KAAK,EAAE,SAAS;KACjB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5B,IAAI,GAAG,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,OAAO,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC5C,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAChD,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAChC,OAAO,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * State persistence for the MCP-native init pipeline.
3
+ *
4
+ * State lives at `.cairn/init-state.json` once that directory exists
5
+ * (after phase 1-detect creates it). Before that, no state file is
6
+ * written — `readPhaseState` returns null and the orchestrator starts
7
+ * fresh at "1-detect". After the final phase succeeds the state file
8
+ * is removed by `clearPhaseState`.
9
+ */
10
+ import { type PhaseState } from "./types.js";
11
+ /** Filename relative to repoRoot. */
12
+ export declare const INIT_STATE_PATH: string;
13
+ export declare function phaseStateAbsPath(repoRoot: string): string;
14
+ /** Read the on-disk init state. Returns null if missing or unreadable. */
15
+ export declare function readPhaseState(repoRoot: string): PhaseState | null;
16
+ /** Atomically write the init state. Creates `.cairn/` if needed. */
17
+ export declare function writePhaseState(state: PhaseState): string;
18
+ /** Remove the init state file. No-op if it doesn't exist. */
19
+ export declare function clearPhaseState(repoRoot: string): void;
@@ -0,0 +1,73 @@
1
+ /**
2
+ * State persistence for the MCP-native init pipeline.
3
+ *
4
+ * State lives at `.cairn/init-state.json` once that directory exists
5
+ * (after phase 1-detect creates it). Before that, no state file is
6
+ * written — `readPhaseState` returns null and the orchestrator starts
7
+ * fresh at "1-detect". After the final phase succeeds the state file
8
+ * is removed by `clearPhaseState`.
9
+ */
10
+ import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync, } from "node:fs";
11
+ import { dirname, join } from "node:path";
12
+ import { PHASE_IDS } from "./types.js";
13
+ /** Filename relative to repoRoot. */
14
+ export const INIT_STATE_PATH = join(".cairn", "init-state.json");
15
+ export function phaseStateAbsPath(repoRoot) {
16
+ return join(repoRoot, INIT_STATE_PATH);
17
+ }
18
+ /** Read the on-disk init state. Returns null if missing or unreadable. */
19
+ export function readPhaseState(repoRoot) {
20
+ const abs = phaseStateAbsPath(repoRoot);
21
+ if (!existsSync(abs))
22
+ return null;
23
+ let parsed;
24
+ try {
25
+ parsed = JSON.parse(readFileSync(abs, "utf8"));
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ if (!isPhaseState(parsed))
31
+ return null;
32
+ return parsed;
33
+ }
34
+ /** Atomically write the init state. Creates `.cairn/` if needed. */
35
+ export function writePhaseState(state) {
36
+ const abs = phaseStateAbsPath(state.repoRoot);
37
+ mkdirSync(dirname(abs), { recursive: true });
38
+ const tmp = `${abs}.tmp`;
39
+ writeFileSync(tmp, JSON.stringify(state, null, 2), "utf8");
40
+ // POSIX rename is atomic on the same filesystem (always true here:
41
+ // tmp + final are in the same .cairn/ dir).
42
+ renameSync(tmp, abs);
43
+ return abs;
44
+ }
45
+ /** Remove the init state file. No-op if it doesn't exist. */
46
+ export function clearPhaseState(repoRoot) {
47
+ rmSync(phaseStateAbsPath(repoRoot), { force: true });
48
+ }
49
+ function isPhaseId(v) {
50
+ return typeof v === "string" && PHASE_IDS.includes(v);
51
+ }
52
+ function isStringOrUndef(v) {
53
+ return v === undefined || typeof v === "string";
54
+ }
55
+ function isPhaseState(x) {
56
+ if (x === null || typeof x !== "object")
57
+ return false;
58
+ const o = x;
59
+ if (o["schemaVersion"] !== 1)
60
+ return false;
61
+ if (typeof o["repoRoot"] !== "string")
62
+ return false;
63
+ if (!isPhaseId(o["currentPhase"]))
64
+ return false;
65
+ if (typeof o["outputs"] !== "object" || o["outputs"] === null)
66
+ return false;
67
+ if (!isStringOrUndef(o["answer"]))
68
+ return false;
69
+ if (typeof o["startedAt"] !== "string")
70
+ return false;
71
+ return true;
72
+ }
73
+ //# sourceMappingURL=state-io.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-io.js","sourceRoot":"","sources":["../../../src/init/phases/state-io.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Phase types for the MCP-native init pipeline.
3
+ *
4
+ * Each phase is a function `(ctx, state) → PhaseResult` registered as
5
+ * an MCP tool. The cairn-adopt skill drives the pipeline by invoking
6
+ * `cairn_init_resume` to read the next phase id, then calling the
7
+ * phase tool. When the phase returns `needs_input`, the skill renders
8
+ * an inline `AskUserQuestion`, threads the answer back, and re-invokes
9
+ * the same phase tool until it returns `complete` with the next id.
10
+ *
11
+ * State persists to `.cairn/init-state.json` between phases so the
12
+ * pipeline is crash-safe — operator can `/exit` Claude Code mid-init
13
+ * and pick up at the same phase on the next session.
14
+ */
15
+ /** Phase ids in execution order. */
16
+ export declare const PHASE_IDS: readonly ["1-detect", "2-walker", "3-mapper", "3b-seed", "4-pilot", "5-brand", "6-docs-ingest", "7b-source-comments", "7c-rules-merge", "8-baseline", "10-strip", "12-multidev"];
17
+ export type PhaseId = (typeof PHASE_IDS)[number];
18
+ /** Inline A/B/C question rendered via AskUserQuestion in the skill. */
19
+ export interface PhaseQuestion {
20
+ /** Stable identifier so the skill can correlate answers across re-invocations. */
21
+ id: string;
22
+ /** Operator-facing prompt — full English, not caveman. */
23
+ prompt: string;
24
+ /** Options labeled A/B/C/... */
25
+ options: PhaseOption[];
26
+ /** Default option id (used when operator skips or auto-pilot is set). */
27
+ default: string;
28
+ }
29
+ export interface PhaseOption {
30
+ /** Internal id stored back into state.answer when chosen. */
31
+ id: string;
32
+ /** Operator-visible label. */
33
+ label: string;
34
+ /** Optional secondary line — displayed under the label. */
35
+ detail?: string;
36
+ }
37
+ /**
38
+ * State carried between phase invocations. `outputs` accumulates each
39
+ * phase's typed result keyed by phase id; `answer` is set by the skill
40
+ * driver when re-invoking a phase that returned `needs_input`.
41
+ */
42
+ export interface PhaseState {
43
+ /** Repo root the pipeline is operating against. */
44
+ repoRoot: string;
45
+ /** The phase currently executing. */
46
+ currentPhase: PhaseId;
47
+ /** Accumulated outputs keyed by phase id. */
48
+ outputs: PhaseOutputs;
49
+ /** Operator's answer to the last `needs_input` question (if any). */
50
+ answer?: string | undefined;
51
+ /** When the pipeline started (ISO-8601). */
52
+ startedAt: string;
53
+ /** Schema version for the on-disk state file (bump on breaking change). */
54
+ schemaVersion: 1;
55
+ }
56
+ /**
57
+ * Phase outputs are deliberately loose-typed — each phase function
58
+ * stamps its own typed result under its id. Downstream phases read
59
+ * via type-narrowing helpers in their own modules.
60
+ */
61
+ export type PhaseOutputs = {
62
+ -readonly [K in PhaseId]?: unknown;
63
+ };
64
+ /** Discriminated union returned by every phase function. */
65
+ export type PhaseResult = {
66
+ readonly status: "complete";
67
+ /** Next phase id to invoke; null = pipeline done. */
68
+ readonly nextPhase: PhaseId | null;
69
+ readonly state: PhaseState;
70
+ } | {
71
+ readonly status: "needs_input";
72
+ readonly question: PhaseQuestion;
73
+ readonly state: PhaseState;
74
+ } | {
75
+ readonly status: "error";
76
+ readonly error: PhaseError;
77
+ readonly state: PhaseState;
78
+ };
79
+ /** Phase failure mode — propagates back to the skill for operator surfacing. */
80
+ export interface PhaseError {
81
+ /** Stable error code; the skill can pattern-match for retry semantics. */
82
+ code: string;
83
+ /** Operator-facing message. */
84
+ message: string;
85
+ /** Optional captured stderr / stack for diagnostics. */
86
+ detail?: string;
87
+ }
88
+ /** Step the orchestrator is reporting on. Used by the resume entry point. */
89
+ export interface ResumeReport {
90
+ readonly status: "ready" | "done";
91
+ readonly nextPhase: PhaseId | null;
92
+ readonly state: PhaseState;
93
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Phase types for the MCP-native init pipeline.
3
+ *
4
+ * Each phase is a function `(ctx, state) → PhaseResult` registered as
5
+ * an MCP tool. The cairn-adopt skill drives the pipeline by invoking
6
+ * `cairn_init_resume` to read the next phase id, then calling the
7
+ * phase tool. When the phase returns `needs_input`, the skill renders
8
+ * an inline `AskUserQuestion`, threads the answer back, and re-invokes
9
+ * the same phase tool until it returns `complete` with the next id.
10
+ *
11
+ * State persists to `.cairn/init-state.json` between phases so the
12
+ * pipeline is crash-safe — operator can `/exit` Claude Code mid-init
13
+ * and pick up at the same phase on the next session.
14
+ */
15
+ /** Phase ids in execution order. */
16
+ export const PHASE_IDS = [
17
+ "1-detect",
18
+ "2-walker",
19
+ "3-mapper",
20
+ "3b-seed",
21
+ "4-pilot",
22
+ "5-brand",
23
+ "6-docs-ingest",
24
+ "7b-source-comments",
25
+ "7c-rules-merge",
26
+ "8-baseline",
27
+ "10-strip",
28
+ "12-multidev",
29
+ ];
30
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/init/phases/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,oCAAoC;AACpC,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,UAAU;IACV,UAAU;IACV,UAAU;IACV,SAAS;IACT,SAAS;IACT,SAAS;IACT,eAAe;IACf,oBAAoB;IACpB,gBAAgB;IAChB,YAAY;IACZ,UAAU;IACV,aAAa;CACL,CAAC"}
@@ -1,12 +1,9 @@
1
1
  /**
2
2
  * Inquirer-driven prompts for `cairn init`.
3
3
  *
4
- * Per operator note 2026-05-02: cairn init uses inquirer
5
- * (`@inquirer/prompts`) for operator-facing dialogs. Hand-rolled readline
6
- * was rejected as too ad-hoc.
7
- *
8
- * `mode: "auto"` short-circuits prompts so smokes / scripted adoption can
9
- * run non-interactively.
4
+ * Uses `@inquirer/prompts` for operator-facing dialogs. `mode: "auto"`
5
+ * short-circuits prompts so smokes / scripted adoption can run
6
+ * non-interactively.
10
7
  */
11
8
  export type PromptMode = "interactive" | "auto";
12
9
  export interface Choice<T extends string = string> {
@@ -30,7 +27,7 @@ export interface PromptOptions<T extends string> {
30
27
  auto: T;
31
28
  }
32
29
  export declare function squareIntoSquareHole<T extends string>(opts: PromptOptions<T>): Promise<T>;
33
- export interface FreeTextOptions {
30
+ interface FreeTextOptions {
34
31
  mode: PromptMode;
35
32
  prompt: string;
36
33
  defaultValue: string;
@@ -38,7 +35,7 @@ export interface FreeTextOptions {
38
35
  auto?: string;
39
36
  }
40
37
  export declare function freeTextWithDefault(opts: FreeTextOptions): Promise<string>;
41
- export interface YesNoOptions {
38
+ interface YesNoOptions {
42
39
  mode: PromptMode;
43
40
  prompt: string;
44
41
  defaultYes?: boolean;
@@ -59,3 +56,4 @@ export declare function editYaml(opts: EditorOptions): Promise<string>;
59
56
  export declare function info(line: string): void;
60
57
  export declare function header(line: string): void;
61
58
  export declare function done(line: string): void;
59
+ export {};
@@ -1,12 +1,9 @@
1
1
  /**
2
2
  * Inquirer-driven prompts for `cairn init`.
3
3
  *
4
- * Per operator note 2026-05-02: cairn init uses inquirer
5
- * (`@inquirer/prompts`) for operator-facing dialogs. Hand-rolled readline
6
- * was rejected as too ad-hoc.
7
- *
8
- * `mode: "auto"` short-circuits prompts so smokes / scripted adoption can
9
- * run non-interactively.
4
+ * Uses `@inquirer/prompts` for operator-facing dialogs. `mode: "auto"`
5
+ * short-circuits prompts so smokes / scripted adoption can run
6
+ * non-interactively.
10
7
  */
11
8
  import { confirm, editor, input, select } from "@inquirer/prompts";
12
9
  export async function squareIntoSquareHole(opts) {
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/init/prompts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/init/prompts.ts"],"names":[],"mappings":"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"}
@@ -59,7 +59,7 @@ Return JSON matching the schema. \`kind\` must be exactly one of:
59
59
  Optional fields:
60
60
  - proposed_dec_title 5-10 word imperative title (only when kind = "rule-net-new")
61
61
  - proposed_rationale 2-3 sentence summary (only when kind = "rule-net-new")
62
- - conflicts_with DEC-NNNN or §V<N> id (only when kind = "rule-conflict")
62
+ - conflicts_with DEC-NNNN or §INV-NNNN id (only when kind = "rule-conflict")
63
63
 
64
64
  Be conservative. When in doubt, "informational".`;
65
65
  /* -------------------------------------------------------------------------- */
package/dist/init/seed.js CHANGED
@@ -10,8 +10,17 @@ import { chmodSync, existsSync, mkdirSync, readFileSync, readdirSync, statSync,
10
10
  import { dirname, join, relative } from "node:path";
11
11
  import { fileURLToPath } from "node:url";
12
12
  const HERE = dirname(fileURLToPath(import.meta.url));
13
- /** dist/init/seed.js → walk up to package root, then into templates/. */
14
- const TEMPLATES_ROOT = join(HERE, "..", "..", "templates");
13
+ /**
14
+ * dist/init/seed.js walk up to package root, then into templates/.
15
+ * The Claude Code plugin bundle co-locates templates beside the bundle
16
+ * (packages/cairn-frontend-claudecode/dist/templates/) — esbuild
17
+ * --define flips the lookup so the bundled binary finds them as a
18
+ * sibling of dist/cli.cjs rather than two levels up from a per-module
19
+ * dist file.
20
+ */
21
+ const TEMPLATES_ROOT = typeof __CAIRN_BUNDLED__ !== "undefined" && __CAIRN_BUNDLED__
22
+ ? join(HERE, "templates")
23
+ : join(HERE, "..", "..", "templates");
15
24
  export function seedCairnLayout(opts) {
16
25
  const written = [];
17
26
  const collisions = [];
@@ -1 +1 @@
1
- {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/init/seed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/init/seed.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@ export interface CommentClassification {
20
20
  kind: CommentClassKind;
21
21
  /** Proposed DEC draft title — non-empty only when classifier suggests one. */
22
22
  suggestedDecDraft: string;
23
- /** Proposed §V invariant body — non-empty only when classifier suggests one. */
23
+ /** Proposed §INV invariant body — non-empty only when classifier suggests one. */
24
24
  suggestedInvariant: string;
25
25
  /** Canonical-map topic slug. */
26
26
  suggestedCanonicalTopic: string;
@@ -56,43 +56,3 @@ export interface ClassifyResult {
56
56
  batchesFailed: number;
57
57
  }
58
58
  export declare function classifyBlocks(args: ClassifyArgs): Promise<ClassifyResult>;
59
- declare function buildBatchPrompt(batch: CommentBlock[]): string;
60
- export declare const _internal: {
61
- buildBatchPrompt: typeof buildBatchPrompt;
62
- BATCH_SIZE: number;
63
- BATCH_SCHEMA: {
64
- readonly type: "object";
65
- readonly additionalProperties: false;
66
- readonly required: readonly ["results"];
67
- readonly properties: {
68
- readonly results: {
69
- readonly type: "array";
70
- readonly items: {
71
- readonly type: "object";
72
- readonly additionalProperties: false;
73
- readonly required: readonly ["block_id", "kind"];
74
- readonly properties: {
75
- readonly block_id: {
76
- readonly type: "string";
77
- };
78
- readonly kind: {
79
- readonly type: "string";
80
- readonly enum: readonly ["rationale", "constraint", "citation", "license", "other"];
81
- };
82
- readonly suggested_dec_draft: {
83
- readonly type: "string";
84
- };
85
- readonly suggested_invariant: {
86
- readonly type: "string";
87
- };
88
- readonly suggested_canonical_topic: {
89
- readonly type: "string";
90
- };
91
- };
92
- };
93
- };
94
- };
95
- };
96
- SYSTEM_PROMPT: string;
97
- };
98
- export {};