@isaacriehm/cairn-core 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 (616) hide show
  1. package/LICENSE +21 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/claude/error.d.ts +33 -0
  4. package/dist/claude/error.js +58 -0
  5. package/dist/claude/error.js.map +1 -0
  6. package/dist/claude/index.d.ts +3 -0
  7. package/dist/claude/index.js +3 -0
  8. package/dist/claude/index.js.map +1 -0
  9. package/dist/claude/runner.d.ts +11 -0
  10. package/dist/claude/runner.js +132 -0
  11. package/dist/claude/runner.js.map +1 -0
  12. package/dist/claude/types.d.ts +52 -0
  13. package/dist/claude/types.js +14 -0
  14. package/dist/claude/types.js.map +1 -0
  15. package/dist/context/checkpoint.d.ts +10 -0
  16. package/dist/context/checkpoint.js +29 -0
  17. package/dist/context/checkpoint.js.map +1 -0
  18. package/dist/context/handoff-builder.d.ts +11 -0
  19. package/dist/context/handoff-builder.js +268 -0
  20. package/dist/context/handoff-builder.js.map +1 -0
  21. package/dist/context/index.d.ts +11 -0
  22. package/dist/context/index.js +11 -0
  23. package/dist/context/index.js.map +1 -0
  24. package/dist/context/spec-delta.d.ts +47 -0
  25. package/dist/context/spec-delta.js +237 -0
  26. package/dist/context/spec-delta.js.map +1 -0
  27. package/dist/decision-capture/capture.d.ts +57 -0
  28. package/dist/decision-capture/capture.js +186 -0
  29. package/dist/decision-capture/capture.js.map +1 -0
  30. package/dist/decision-capture/extractor.d.ts +20 -0
  31. package/dist/decision-capture/extractor.js +103 -0
  32. package/dist/decision-capture/extractor.js.map +1 -0
  33. package/dist/decision-capture/id.d.ts +21 -0
  34. package/dist/decision-capture/id.js +60 -0
  35. package/dist/decision-capture/id.js.map +1 -0
  36. package/dist/decision-capture/index.d.ts +25 -0
  37. package/dist/decision-capture/index.js +21 -0
  38. package/dist/decision-capture/index.js.map +1 -0
  39. package/dist/decision-capture/prompt.d.ts +15 -0
  40. package/dist/decision-capture/prompt.js +68 -0
  41. package/dist/decision-capture/prompt.js.map +1 -0
  42. package/dist/decision-capture/refinement-prompt.d.ts +25 -0
  43. package/dist/decision-capture/refinement-prompt.js +146 -0
  44. package/dist/decision-capture/refinement-prompt.js.map +1 -0
  45. package/dist/decision-capture/refinement-schema.d.ts +52 -0
  46. package/dist/decision-capture/refinement-schema.js +61 -0
  47. package/dist/decision-capture/refinement-schema.js.map +1 -0
  48. package/dist/decision-capture/refinement.d.ts +60 -0
  49. package/dist/decision-capture/refinement.js +439 -0
  50. package/dist/decision-capture/refinement.js.map +1 -0
  51. package/dist/decision-capture/schema.d.ts +70 -0
  52. package/dist/decision-capture/schema.js +71 -0
  53. package/dist/decision-capture/schema.js.map +1 -0
  54. package/dist/decision-capture/types.d.ts +201 -0
  55. package/dist/decision-capture/types.js +20 -0
  56. package/dist/decision-capture/types.js.map +1 -0
  57. package/dist/decision-capture/writer.d.ts +90 -0
  58. package/dist/decision-capture/writer.js +267 -0
  59. package/dist/decision-capture/writer.js.map +1 -0
  60. package/dist/doctor/index.d.ts +48 -0
  61. package/dist/doctor/index.js +460 -0
  62. package/dist/doctor/index.js.map +1 -0
  63. package/dist/events/index.d.ts +15 -0
  64. package/dist/events/index.js +14 -0
  65. package/dist/events/index.js.map +1 -0
  66. package/dist/events/paths.d.ts +2 -0
  67. package/dist/events/paths.js +6 -0
  68. package/dist/events/paths.js.map +1 -0
  69. package/dist/events/reader.d.ts +40 -0
  70. package/dist/events/reader.js +139 -0
  71. package/dist/events/reader.js.map +1 -0
  72. package/dist/events/writer.d.ts +61 -0
  73. package/dist/events/writer.js +68 -0
  74. package/dist/events/writer.js.map +1 -0
  75. package/dist/frontend-types.d.ts +243 -0
  76. package/dist/frontend-types.js +15 -0
  77. package/dist/frontend-types.js.map +1 -0
  78. package/dist/gc/apply.d.ts +26 -0
  79. package/dist/gc/apply.js +48 -0
  80. package/dist/gc/apply.js.map +1 -0
  81. package/dist/gc/canary.d.ts +42 -0
  82. package/dist/gc/canary.js +134 -0
  83. package/dist/gc/canary.js.map +1 -0
  84. package/dist/gc/citation-integrity.d.ts +24 -0
  85. package/dist/gc/citation-integrity.js +151 -0
  86. package/dist/gc/citation-integrity.js.map +1 -0
  87. package/dist/gc/classify.d.ts +25 -0
  88. package/dist/gc/classify.js +89 -0
  89. package/dist/gc/classify.js.map +1 -0
  90. package/dist/gc/completion-integrity.d.ts +22 -0
  91. package/dist/gc/completion-integrity.js +165 -0
  92. package/dist/gc/completion-integrity.js.map +1 -0
  93. package/dist/gc/doc-gardening.d.ts +29 -0
  94. package/dist/gc/doc-gardening.js +146 -0
  95. package/dist/gc/doc-gardening.js.map +1 -0
  96. package/dist/gc/frontmatter.d.ts +35 -0
  97. package/dist/gc/frontmatter.js +105 -0
  98. package/dist/gc/frontmatter.js.map +1 -0
  99. package/dist/gc/generator-drift.d.ts +28 -0
  100. package/dist/gc/generator-drift.js +53 -0
  101. package/dist/gc/generator-drift.js.map +1 -0
  102. package/dist/gc/index.d.ts +42 -0
  103. package/dist/gc/index.js +30 -0
  104. package/dist/gc/index.js.map +1 -0
  105. package/dist/gc/quality-update.d.ts +23 -0
  106. package/dist/gc/quality-update.js +69 -0
  107. package/dist/gc/quality-update.js.map +1 -0
  108. package/dist/gc/scope-coverage.d.ts +20 -0
  109. package/dist/gc/scope-coverage.js +70 -0
  110. package/dist/gc/scope-coverage.js.map +1 -0
  111. package/dist/gc/stub-hits.d.ts +31 -0
  112. package/dist/gc/stub-hits.js +78 -0
  113. package/dist/gc/stub-hits.js.map +1 -0
  114. package/dist/gc/sweep.d.ts +56 -0
  115. package/dist/gc/sweep.js +205 -0
  116. package/dist/gc/sweep.js.map +1 -0
  117. package/dist/gc/types.d.ts +129 -0
  118. package/dist/gc/types.js +26 -0
  119. package/dist/gc/types.js.map +1 -0
  120. package/dist/gc/walk-source.d.ts +14 -0
  121. package/dist/gc/walk-source.js +59 -0
  122. package/dist/gc/walk-source.js.map +1 -0
  123. package/dist/ground/drift.d.ts +8 -0
  124. package/dist/ground/drift.js +23 -0
  125. package/dist/ground/drift.js.map +1 -0
  126. package/dist/ground/frontmatter.d.ts +20 -0
  127. package/dist/ground/frontmatter.js +49 -0
  128. package/dist/ground/frontmatter.js.map +1 -0
  129. package/dist/ground/glob.d.ts +10 -0
  130. package/dist/ground/glob.js +46 -0
  131. package/dist/ground/glob.js.map +1 -0
  132. package/dist/ground/index.d.ts +16 -0
  133. package/dist/ground/index.js +11 -0
  134. package/dist/ground/index.js.map +1 -0
  135. package/dist/ground/ledgers.d.ts +18 -0
  136. package/dist/ground/ledgers.js +103 -0
  137. package/dist/ground/ledgers.js.map +1 -0
  138. package/dist/ground/manifest.d.ts +10 -0
  139. package/dist/ground/manifest.js +88 -0
  140. package/dist/ground/manifest.js.map +1 -0
  141. package/dist/ground/paths.d.ts +20 -0
  142. package/dist/ground/paths.js +61 -0
  143. package/dist/ground/paths.js.map +1 -0
  144. package/dist/ground/quality-grades.d.ts +11 -0
  145. package/dist/ground/quality-grades.js +98 -0
  146. package/dist/ground/quality-grades.js.map +1 -0
  147. package/dist/ground/schemas.d.ts +306 -0
  148. package/dist/ground/schemas.js +188 -0
  149. package/dist/ground/schemas.js.map +1 -0
  150. package/dist/ground/scope-index.d.ts +48 -0
  151. package/dist/ground/scope-index.js +120 -0
  152. package/dist/ground/scope-index.js.map +1 -0
  153. package/dist/ground/walk.d.ts +7 -0
  154. package/dist/ground/walk.js +53 -0
  155. package/dist/ground/walk.js.map +1 -0
  156. package/dist/hooks/bypass-detection.d.ts +28 -0
  157. package/dist/hooks/bypass-detection.js +106 -0
  158. package/dist/hooks/bypass-detection.js.map +1 -0
  159. package/dist/hooks/index.d.ts +12 -0
  160. package/dist/hooks/index.js +13 -0
  161. package/dist/hooks/index.js.map +1 -0
  162. package/dist/hooks/post-tool-use/allowlist-reader.d.ts +14 -0
  163. package/dist/hooks/post-tool-use/allowlist-reader.js +69 -0
  164. package/dist/hooks/post-tool-use/allowlist-reader.js.map +1 -0
  165. package/dist/hooks/post-tool-use/citation-scanner.d.ts +23 -0
  166. package/dist/hooks/post-tool-use/citation-scanner.js +59 -0
  167. package/dist/hooks/post-tool-use/citation-scanner.js.map +1 -0
  168. package/dist/hooks/post-tool-use/copy-scanner.d.ts +25 -0
  169. package/dist/hooks/post-tool-use/copy-scanner.js +192 -0
  170. package/dist/hooks/post-tool-use/copy-scanner.js.map +1 -0
  171. package/dist/hooks/post-tool-use/index.d.ts +19 -0
  172. package/dist/hooks/post-tool-use/index.js +15 -0
  173. package/dist/hooks/post-tool-use/index.js.map +1 -0
  174. package/dist/hooks/post-tool-use/ledger-cache.d.ts +32 -0
  175. package/dist/hooks/post-tool-use/ledger-cache.js +236 -0
  176. package/dist/hooks/post-tool-use/ledger-cache.js.map +1 -0
  177. package/dist/hooks/post-tool-use/legend-builder.d.ts +15 -0
  178. package/dist/hooks/post-tool-use/legend-builder.js +84 -0
  179. package/dist/hooks/post-tool-use/legend-builder.js.map +1 -0
  180. package/dist/hooks/post-tool-use/read-enricher.d.ts +13 -0
  181. package/dist/hooks/post-tool-use/read-enricher.js +157 -0
  182. package/dist/hooks/post-tool-use/read-enricher.js.map +1 -0
  183. package/dist/hooks/post-tool-use/write-guardian.d.ts +17 -0
  184. package/dist/hooks/post-tool-use/write-guardian.js +176 -0
  185. package/dist/hooks/post-tool-use/write-guardian.js.map +1 -0
  186. package/dist/hooks/read-enrich.d.ts +6 -0
  187. package/dist/hooks/read-enrich.js +11 -0
  188. package/dist/hooks/read-enrich.js.map +1 -0
  189. package/dist/hooks/runners/index.d.ts +12 -0
  190. package/dist/hooks/runners/index.js +11 -0
  191. package/dist/hooks/runners/index.js.map +1 -0
  192. package/dist/hooks/runners/payload.d.ts +32 -0
  193. package/dist/hooks/runners/payload.js +70 -0
  194. package/dist/hooks/runners/payload.js.map +1 -0
  195. package/dist/hooks/runners/session-end.d.ts +7 -0
  196. package/dist/hooks/runners/session-end.js +42 -0
  197. package/dist/hooks/runners/session-end.js.map +1 -0
  198. package/dist/hooks/runners/session-start.d.ts +10 -0
  199. package/dist/hooks/runners/session-start.js +167 -0
  200. package/dist/hooks/runners/session-start.js.map +1 -0
  201. package/dist/hooks/runners/stop.d.ts +18 -0
  202. package/dist/hooks/runners/stop.js +165 -0
  203. package/dist/hooks/runners/stop.js.map +1 -0
  204. package/dist/hooks/session-end.d.ts +5 -0
  205. package/dist/hooks/session-end.js +10 -0
  206. package/dist/hooks/session-end.js.map +1 -0
  207. package/dist/hooks/session-start.d.ts +7 -0
  208. package/dist/hooks/session-start.js +12 -0
  209. package/dist/hooks/session-start.js.map +1 -0
  210. package/dist/hooks/stop.d.ts +5 -0
  211. package/dist/hooks/stop.js +10 -0
  212. package/dist/hooks/stop.js.map +1 -0
  213. package/dist/hooks/write-guard.d.ts +6 -0
  214. package/dist/hooks/write-guard.js +11 -0
  215. package/dist/hooks/write-guard.js.map +1 -0
  216. package/dist/inbox.d.ts +17 -0
  217. package/dist/inbox.js +30 -0
  218. package/dist/inbox.js.map +1 -0
  219. package/dist/index.d.ts +33 -0
  220. package/dist/index.js +32 -0
  221. package/dist/index.js.map +1 -0
  222. package/dist/init/baseline-audit.d.ts +71 -0
  223. package/dist/init/baseline-audit.js +377 -0
  224. package/dist/init/baseline-audit.js.map +1 -0
  225. package/dist/init/brand-setup.d.ts +44 -0
  226. package/dist/init/brand-setup.js +201 -0
  227. package/dist/init/brand-setup.js.map +1 -0
  228. package/dist/init/daemon-autostart.d.ts +16 -0
  229. package/dist/init/daemon-autostart.js +95 -0
  230. package/dist/init/daemon-autostart.js.map +1 -0
  231. package/dist/init/detect.d.ts +25 -0
  232. package/dist/init/detect.js +319 -0
  233. package/dist/init/detect.js.map +1 -0
  234. package/dist/init/index.d.ts +32 -0
  235. package/dist/init/index.js +18 -0
  236. package/dist/init/index.js.map +1 -0
  237. package/dist/init/ingest-docs.d.ts +74 -0
  238. package/dist/init/ingest-docs.js +499 -0
  239. package/dist/init/ingest-docs.js.map +1 -0
  240. package/dist/init/init.d.ts +165 -0
  241. package/dist/init/init.js +1166 -0
  242. package/dist/init/init.js.map +1 -0
  243. package/dist/init/mapper-legacy.d.ts +148 -0
  244. package/dist/init/mapper-legacy.js +238 -0
  245. package/dist/init/mapper-legacy.js.map +1 -0
  246. package/dist/init/mapper-merge.d.ts +38 -0
  247. package/dist/init/mapper-merge.js +238 -0
  248. package/dist/init/mapper-merge.js.map +1 -0
  249. package/dist/init/mapper-parallel.d.ts +48 -0
  250. package/dist/init/mapper-parallel.js +409 -0
  251. package/dist/init/mapper-parallel.js.map +1 -0
  252. package/dist/init/mapper-prompts.d.ts +135 -0
  253. package/dist/init/mapper-prompts.js +189 -0
  254. package/dist/init/mapper-prompts.js.map +1 -0
  255. package/dist/init/mapper.d.ts +211 -0
  256. package/dist/init/mapper.js +151 -0
  257. package/dist/init/mapper.js.map +1 -0
  258. package/dist/init/module-slicer.d.ts +39 -0
  259. package/dist/init/module-slicer.js +809 -0
  260. package/dist/init/module-slicer.js.map +1 -0
  261. package/dist/init/multi-dev/index.d.ts +2 -0
  262. package/dist/init/multi-dev/index.js +2 -0
  263. package/dist/init/multi-dev/index.js.map +1 -0
  264. package/dist/init/multi-dev/install.d.ts +40 -0
  265. package/dist/init/multi-dev/install.js +139 -0
  266. package/dist/init/multi-dev/install.js.map +1 -0
  267. package/dist/init/preflight-guards.d.ts +42 -0
  268. package/dist/init/preflight-guards.js +108 -0
  269. package/dist/init/preflight-guards.js.map +1 -0
  270. package/dist/init/prompts.d.ts +61 -0
  271. package/dist/init/prompts.js +66 -0
  272. package/dist/init/prompts.js.map +1 -0
  273. package/dist/init/rules-merge/discover.d.ts +21 -0
  274. package/dist/init/rules-merge/discover.js +78 -0
  275. package/dist/init/rules-merge/discover.js.map +1 -0
  276. package/dist/init/rules-merge/index.d.ts +10 -0
  277. package/dist/init/rules-merge/index.js +6 -0
  278. package/dist/init/rules-merge/index.js.map +1 -0
  279. package/dist/init/rules-merge/ingest.d.ts +56 -0
  280. package/dist/init/rules-merge/ingest.js +336 -0
  281. package/dist/init/rules-merge/ingest.js.map +1 -0
  282. package/dist/init/rules-merge/keep-markers.d.ts +39 -0
  283. package/dist/init/rules-merge/keep-markers.js +97 -0
  284. package/dist/init/rules-merge/keep-markers.js.map +1 -0
  285. package/dist/init/rules-merge/parse-sections.d.ts +24 -0
  286. package/dist/init/rules-merge/parse-sections.js +71 -0
  287. package/dist/init/rules-merge/parse-sections.js.map +1 -0
  288. package/dist/init/rules-merge/regenerate.d.ts +33 -0
  289. package/dist/init/rules-merge/regenerate.js +163 -0
  290. package/dist/init/rules-merge/regenerate.js.map +1 -0
  291. package/dist/init/secrets.d.ts +18 -0
  292. package/dist/init/secrets.js +76 -0
  293. package/dist/init/secrets.js.map +1 -0
  294. package/dist/init/seed.d.ts +21 -0
  295. package/dist/init/seed.js +96 -0
  296. package/dist/init/seed.js.map +1 -0
  297. package/dist/init/setup-runners.d.ts +15 -0
  298. package/dist/init/setup-runners.js +143 -0
  299. package/dist/init/setup-runners.js.map +1 -0
  300. package/dist/init/source-comments/classify.d.ts +98 -0
  301. package/dist/init/source-comments/classify.js +244 -0
  302. package/dist/init/source-comments/classify.js.map +1 -0
  303. package/dist/init/source-comments/index.d.ts +8 -0
  304. package/dist/init/source-comments/index.js +5 -0
  305. package/dist/init/source-comments/index.js.map +1 -0
  306. package/dist/init/source-comments/ingest.d.ts +51 -0
  307. package/dist/init/source-comments/ingest.js +236 -0
  308. package/dist/init/source-comments/ingest.js.map +1 -0
  309. package/dist/init/source-comments/strip-replace.d.ts +106 -0
  310. package/dist/init/source-comments/strip-replace.js +284 -0
  311. package/dist/init/source-comments/strip-replace.js.map +1 -0
  312. package/dist/init/source-comments/walker.d.ts +65 -0
  313. package/dist/init/source-comments/walker.js +777 -0
  314. package/dist/init/source-comments/walker.js.map +1 -0
  315. package/dist/init/submodules.d.ts +48 -0
  316. package/dist/init/submodules.js +149 -0
  317. package/dist/init/submodules.js.map +1 -0
  318. package/dist/init/types.d.ts +55 -0
  319. package/dist/init/types.js +10 -0
  320. package/dist/init/types.js.map +1 -0
  321. package/dist/init/visual.d.ts +69 -0
  322. package/dist/init/visual.js +265 -0
  323. package/dist/init/visual.js.map +1 -0
  324. package/dist/init/walker.d.ts +82 -0
  325. package/dist/init/walker.js +585 -0
  326. package/dist/init/walker.js.map +1 -0
  327. package/dist/init/workflow-block.d.ts +34 -0
  328. package/dist/init/workflow-block.js +110 -0
  329. package/dist/init/workflow-block.js.map +1 -0
  330. package/dist/join/index.d.ts +67 -0
  331. package/dist/join/index.js +256 -0
  332. package/dist/join/index.js.map +1 -0
  333. package/dist/lock.d.ts +39 -0
  334. package/dist/lock.js +129 -0
  335. package/dist/lock.js.map +1 -0
  336. package/dist/logger.d.ts +13 -0
  337. package/dist/logger.js +78 -0
  338. package/dist/logger.js.map +1 -0
  339. package/dist/mcp/bootstrap-guard.d.ts +29 -0
  340. package/dist/mcp/bootstrap-guard.js +47 -0
  341. package/dist/mcp/bootstrap-guard.js.map +1 -0
  342. package/dist/mcp/context.d.ts +23 -0
  343. package/dist/mcp/context.js +9 -0
  344. package/dist/mcp/context.js.map +1 -0
  345. package/dist/mcp/errors.d.ts +17 -0
  346. package/dist/mcp/errors.js +23 -0
  347. package/dist/mcp/errors.js.map +1 -0
  348. package/dist/mcp/history/index.d.ts +6 -0
  349. package/dist/mcp/history/index.js +5 -0
  350. package/dist/mcp/history/index.js.map +1 -0
  351. package/dist/mcp/history/prompt.d.ts +32 -0
  352. package/dist/mcp/history/prompt.js +99 -0
  353. package/dist/mcp/history/prompt.js.map +1 -0
  354. package/dist/mcp/history/schema.d.ts +58 -0
  355. package/dist/mcp/history/schema.js +41 -0
  356. package/dist/mcp/history/schema.js.map +1 -0
  357. package/dist/mcp/history/summarizer.d.ts +81 -0
  358. package/dist/mcp/history/summarizer.js +196 -0
  359. package/dist/mcp/history/summarizer.js.map +1 -0
  360. package/dist/mcp/history/walker.d.ts +57 -0
  361. package/dist/mcp/history/walker.js +156 -0
  362. package/dist/mcp/history/walker.js.map +1 -0
  363. package/dist/mcp/index.d.ts +13 -0
  364. package/dist/mcp/index.js +9 -0
  365. package/dist/mcp/index.js.map +1 -0
  366. package/dist/mcp/path-allowlist.d.ts +29 -0
  367. package/dist/mcp/path-allowlist.js +71 -0
  368. package/dist/mcp/path-allowlist.js.map +1 -0
  369. package/dist/mcp/result.d.ts +8 -0
  370. package/dist/mcp/result.js +18 -0
  371. package/dist/mcp/result.js.map +1 -0
  372. package/dist/mcp/schemas.d.ts +192 -0
  373. package/dist/mcp/schemas.js +174 -0
  374. package/dist/mcp/schemas.js.map +1 -0
  375. package/dist/mcp/serve.d.ts +15 -0
  376. package/dist/mcp/serve.js +71 -0
  377. package/dist/mcp/serve.js.map +1 -0
  378. package/dist/mcp/server.d.ts +11 -0
  379. package/dist/mcp/server.js +58 -0
  380. package/dist/mcp/server.js.map +1 -0
  381. package/dist/mcp/telemetry.d.ts +15 -0
  382. package/dist/mcp/telemetry.js +13 -0
  383. package/dist/mcp/telemetry.js.map +1 -0
  384. package/dist/mcp/tools/append-run-note.d.ts +18 -0
  385. package/dist/mcp/tools/append-run-note.js +47 -0
  386. package/dist/mcp/tools/append-run-note.js.map +1 -0
  387. package/dist/mcp/tools/append.d.ts +8 -0
  388. package/dist/mcp/tools/append.js +37 -0
  389. package/dist/mcp/tools/append.js.map +1 -0
  390. package/dist/mcp/tools/archive.d.ts +8 -0
  391. package/dist/mcp/tools/archive.js +72 -0
  392. package/dist/mcp/tools/archive.js.map +1 -0
  393. package/dist/mcp/tools/ask-operator.d.ts +34 -0
  394. package/dist/mcp/tools/ask-operator.js +97 -0
  395. package/dist/mcp/tools/ask-operator.js.map +1 -0
  396. package/dist/mcp/tools/canonical-for-topic.d.ts +6 -0
  397. package/dist/mcp/tools/canonical-for-topic.js +40 -0
  398. package/dist/mcp/tools/canonical-for-topic.js.map +1 -0
  399. package/dist/mcp/tools/decision-get.d.ts +6 -0
  400. package/dist/mcp/tools/decision-get.js +49 -0
  401. package/dist/mcp/tools/decision-get.js.map +1 -0
  402. package/dist/mcp/tools/decisions-for-symbol.d.ts +7 -0
  403. package/dist/mcp/tools/decisions-for-symbol.js +42 -0
  404. package/dist/mcp/tools/decisions-for-symbol.js.map +1 -0
  405. package/dist/mcp/tools/decisions-in-scope.d.ts +7 -0
  406. package/dist/mcp/tools/decisions-in-scope.js +47 -0
  407. package/dist/mcp/tools/decisions-in-scope.js.map +1 -0
  408. package/dist/mcp/tools/drop-task.d.ts +12 -0
  409. package/dist/mcp/tools/drop-task.js +68 -0
  410. package/dist/mcp/tools/drop-task.js.map +1 -0
  411. package/dist/mcp/tools/get-full.d.ts +7 -0
  412. package/dist/mcp/tools/get-full.js +46 -0
  413. package/dist/mcp/tools/get-full.js.map +1 -0
  414. package/dist/mcp/tools/ground-get.d.ts +7 -0
  415. package/dist/mcp/tools/ground-get.js +77 -0
  416. package/dist/mcp/tools/ground-get.js.map +1 -0
  417. package/dist/mcp/tools/index.d.ts +3 -0
  418. package/dist/mcp/tools/index.js +40 -0
  419. package/dist/mcp/tools/index.js.map +1 -0
  420. package/dist/mcp/tools/invariant-get.d.ts +6 -0
  421. package/dist/mcp/tools/invariant-get.js +49 -0
  422. package/dist/mcp/tools/invariant-get.js.map +1 -0
  423. package/dist/mcp/tools/invariants-in-scope.d.ts +7 -0
  424. package/dist/mcp/tools/invariants-in-scope.js +62 -0
  425. package/dist/mcp/tools/invariants-in-scope.js.map +1 -0
  426. package/dist/mcp/tools/query-history.d.ts +20 -0
  427. package/dist/mcp/tools/query-history.js +51 -0
  428. package/dist/mcp/tools/query-history.js.map +1 -0
  429. package/dist/mcp/tools/record-decision.d.ts +14 -0
  430. package/dist/mcp/tools/record-decision.js +98 -0
  431. package/dist/mcp/tools/record-decision.js.map +1 -0
  432. package/dist/mcp/tools/record-run-event.d.ts +10 -0
  433. package/dist/mcp/tools/record-run-event.js +32 -0
  434. package/dist/mcp/tools/record-run-event.js.map +1 -0
  435. package/dist/mcp/tools/resolve-attention.d.ts +31 -0
  436. package/dist/mcp/tools/resolve-attention.js +191 -0
  437. package/dist/mcp/tools/resolve-attention.js.map +1 -0
  438. package/dist/mcp/tools/search.d.ts +9 -0
  439. package/dist/mcp/tools/search.js +164 -0
  440. package/dist/mcp/tools/search.js.map +1 -0
  441. package/dist/mcp/tools/supersedes-chain.d.ts +6 -0
  442. package/dist/mcp/tools/supersedes-chain.js +66 -0
  443. package/dist/mcp/tools/supersedes-chain.js.map +1 -0
  444. package/dist/mcp/tools/timeline.d.ts +9 -0
  445. package/dist/mcp/tools/timeline.js +65 -0
  446. package/dist/mcp/tools/timeline.js.map +1 -0
  447. package/dist/mcp/tools/types.d.ts +9 -0
  448. package/dist/mcp/tools/types.js +2 -0
  449. package/dist/mcp/tools/types.js.map +1 -0
  450. package/dist/mirror/clone.d.ts +6 -0
  451. package/dist/mirror/clone.js +48 -0
  452. package/dist/mirror/clone.js.map +1 -0
  453. package/dist/mirror/dirty-overlap.d.ts +13 -0
  454. package/dist/mirror/dirty-overlap.js +42 -0
  455. package/dist/mirror/dirty-overlap.js.map +1 -0
  456. package/dist/mirror/index.d.ts +7 -0
  457. package/dist/mirror/index.js +7 -0
  458. package/dist/mirror/index.js.map +1 -0
  459. package/dist/mirror/paths.d.ts +18 -0
  460. package/dist/mirror/paths.js +45 -0
  461. package/dist/mirror/paths.js.map +1 -0
  462. package/dist/mirror/push.d.ts +9 -0
  463. package/dist/mirror/push.js +27 -0
  464. package/dist/mirror/push.js.map +1 -0
  465. package/dist/mirror/state.d.ts +4 -0
  466. package/dist/mirror/state.js +36 -0
  467. package/dist/mirror/state.js.map +1 -0
  468. package/dist/mirror/sync.d.ts +9 -0
  469. package/dist/mirror/sync.js +33 -0
  470. package/dist/mirror/sync.js.map +1 -0
  471. package/dist/mirror/types.d.ts +77 -0
  472. package/dist/mirror/types.js +2 -0
  473. package/dist/mirror/types.js.map +1 -0
  474. package/dist/paths/index.d.ts +23 -0
  475. package/dist/paths/index.js +50 -0
  476. package/dist/paths/index.js.map +1 -0
  477. package/dist/profiles/index.d.ts +3 -0
  478. package/dist/profiles/index.js +3 -0
  479. package/dist/profiles/index.js.map +1 -0
  480. package/dist/profiles/registry.d.ts +5 -0
  481. package/dist/profiles/registry.js +31 -0
  482. package/dist/profiles/registry.js.map +1 -0
  483. package/dist/profiles/types.d.ts +48 -0
  484. package/dist/profiles/types.js +11 -0
  485. package/dist/profiles/types.js.map +1 -0
  486. package/dist/profiles/unknown.d.ts +9 -0
  487. package/dist/profiles/unknown.js +17 -0
  488. package/dist/profiles/unknown.js.map +1 -0
  489. package/dist/prompt.d.ts +19 -0
  490. package/dist/prompt.js +50 -0
  491. package/dist/prompt.js.map +1 -0
  492. package/dist/sensors/attestation.d.ts +44 -0
  493. package/dist/sensors/attestation.js +262 -0
  494. package/dist/sensors/attestation.js.map +1 -0
  495. package/dist/sensors/catalog.d.ts +41 -0
  496. package/dist/sensors/catalog.js +123 -0
  497. package/dist/sensors/catalog.js.map +1 -0
  498. package/dist/sensors/decisions.d.ts +30 -0
  499. package/dist/sensors/decisions.js +393 -0
  500. package/dist/sensors/decisions.js.map +1 -0
  501. package/dist/sensors/diff.d.ts +27 -0
  502. package/dist/sensors/diff.js +148 -0
  503. package/dist/sensors/diff.js.map +1 -0
  504. package/dist/sensors/index.d.ts +13 -0
  505. package/dist/sensors/index.js +9 -0
  506. package/dist/sensors/index.js.map +1 -0
  507. package/dist/sensors/remediation.d.ts +20 -0
  508. package/dist/sensors/remediation.js +65 -0
  509. package/dist/sensors/remediation.js.map +1 -0
  510. package/dist/sensors/runner.d.ts +44 -0
  511. package/dist/sensors/runner.js +95 -0
  512. package/dist/sensors/runner.js.map +1 -0
  513. package/dist/sensors/structural.d.ts +30 -0
  514. package/dist/sensors/structural.js +204 -0
  515. package/dist/sensors/structural.js.map +1 -0
  516. package/dist/sensors/stub-catalog.d.ts +39 -0
  517. package/dist/sensors/stub-catalog.js +115 -0
  518. package/dist/sensors/stub-catalog.js.map +1 -0
  519. package/dist/sensors/types.d.ts +135 -0
  520. package/dist/sensors/types.js +14 -0
  521. package/dist/sensors/types.js.map +1 -0
  522. package/dist/session/events-marker.d.ts +39 -0
  523. package/dist/session/events-marker.js +74 -0
  524. package/dist/session/events-marker.js.map +1 -0
  525. package/dist/session/id.d.ts +83 -0
  526. package/dist/session/id.js +166 -0
  527. package/dist/session/id.js.map +1 -0
  528. package/dist/session/index.d.ts +14 -0
  529. package/dist/session/index.js +13 -0
  530. package/dist/session/index.js.map +1 -0
  531. package/dist/session-start/build.d.ts +53 -0
  532. package/dist/session-start/build.js +645 -0
  533. package/dist/session-start/build.js.map +1 -0
  534. package/dist/session-start/index.d.ts +18 -0
  535. package/dist/session-start/index.js +18 -0
  536. package/dist/session-start/index.js.map +1 -0
  537. package/dist/session-start/templates.d.ts +6 -0
  538. package/dist/session-start/templates.js +38 -0
  539. package/dist/session-start/templates.js.map +1 -0
  540. package/dist/status-line/format.d.ts +14 -0
  541. package/dist/status-line/format.js +40 -0
  542. package/dist/status-line/format.js.map +1 -0
  543. package/dist/status-line/index.d.ts +29 -0
  544. package/dist/status-line/index.js +14 -0
  545. package/dist/status-line/index.js.map +1 -0
  546. package/dist/status-line/reader.d.ts +13 -0
  547. package/dist/status-line/reader.js +76 -0
  548. package/dist/status-line/reader.js.map +1 -0
  549. package/dist/status-line/writer.d.ts +33 -0
  550. package/dist/status-line/writer.js +72 -0
  551. package/dist/status-line/writer.js.map +1 -0
  552. package/dist/tier0/classify.d.ts +10 -0
  553. package/dist/tier0/classify.js +110 -0
  554. package/dist/tier0/classify.js.map +1 -0
  555. package/dist/tier0/index.d.ts +2 -0
  556. package/dist/tier0/index.js +2 -0
  557. package/dist/tier0/index.js.map +1 -0
  558. package/dist/tier0/ollama.d.ts +22 -0
  559. package/dist/tier0/ollama.js +63 -0
  560. package/dist/tier0/ollama.js.map +1 -0
  561. package/dist/tier0/types.d.ts +24 -0
  562. package/dist/tier0/types.js +9 -0
  563. package/dist/tier0/types.js.map +1 -0
  564. package/dist/tightener/index.d.ts +4 -0
  565. package/dist/tightener/index.js +4 -0
  566. package/dist/tightener/index.js.map +1 -0
  567. package/dist/tightener/prompt.d.ts +3 -0
  568. package/dist/tightener/prompt.js +67 -0
  569. package/dist/tightener/prompt.js.map +1 -0
  570. package/dist/tightener/schema.d.ts +68 -0
  571. package/dist/tightener/schema.js +44 -0
  572. package/dist/tightener/schema.js.map +1 -0
  573. package/dist/tightener/tighten.d.ts +2 -0
  574. package/dist/tightener/tighten.js +66 -0
  575. package/dist/tightener/tighten.js.map +1 -0
  576. package/dist/tightener/types.d.ts +74 -0
  577. package/dist/tightener/types.js +6 -0
  578. package/dist/tightener/types.js.map +1 -0
  579. package/dist/voice/index.d.ts +4 -0
  580. package/dist/voice/index.js +4 -0
  581. package/dist/voice/index.js.map +1 -0
  582. package/dist/voice/model.d.ts +23 -0
  583. package/dist/voice/model.js +46 -0
  584. package/dist/voice/model.js.map +1 -0
  585. package/dist/voice/pipe.d.ts +9 -0
  586. package/dist/voice/pipe.js +47 -0
  587. package/dist/voice/pipe.js.map +1 -0
  588. package/dist/voice/transcribe.d.ts +3 -0
  589. package/dist/voice/transcribe.js +43 -0
  590. package/dist/voice/transcribe.js.map +1 -0
  591. package/dist/voice/types.d.ts +26 -0
  592. package/dist/voice/types.js +9 -0
  593. package/dist/voice/types.js.map +1 -0
  594. package/package.json +54 -0
  595. package/templates/.archive/README.md +67 -0
  596. package/templates/.cairn/JOIN.md +87 -0
  597. package/templates/.cairn/config/sensors.yaml +185 -0
  598. package/templates/.cairn/config/stub-patterns.yaml +231 -0
  599. package/templates/.cairn/config/trust-policy.yaml +95 -0
  600. package/templates/.cairn/config/workflow.md +230 -0
  601. package/templates/.cairn/git-hooks/commit-msg +17 -0
  602. package/templates/.cairn/git-hooks/post-commit +28 -0
  603. package/templates/.cairn/git-hooks/pre-commit +24 -0
  604. package/templates/.cairn/ground/brand/overview.md +24 -0
  605. package/templates/.cairn/ground/brand/voice.md +20 -0
  606. package/templates/.cairn/ground/canonical-map/topics.yaml +54 -0
  607. package/templates/.cairn/ground/capabilities/mcp-tools.yaml +4 -0
  608. package/templates/.cairn/ground/capabilities/skills.yaml +3 -0
  609. package/templates/.cairn/ground/capabilities/snippets.yaml +3 -0
  610. package/templates/.cairn/ground/manifest.yaml +16 -0
  611. package/templates/.cairn/ground/product/personas.yaml +4 -0
  612. package/templates/.cairn/ground/product/positioning.md +21 -0
  613. package/templates/.claude/settings.json +57 -0
  614. package/templates/.github/workflows/cairn-check.yml +31 -0
  615. package/templates/.mcp.json +8 -0
  616. package/templates/README.md +24 -0
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Mapper schema + system prompt + user-prompt builder.
3
+ *
4
+ * The chunked parallel mapper (`mapper-parallel.ts`) operates per-module on a
5
+ * subset of these inputs; the `cairn scope rebuild` CLI consumes the full
6
+ * surface to regenerate `scope_index.yaml` against an existing project. Both
7
+ * paths share the same JSON schema + system prompt to guarantee identical
8
+ * output shape.
9
+ */
10
+ export const MAPPER_OUTPUT_SCHEMA = {
11
+ type: "object",
12
+ additionalProperties: false,
13
+ properties: {
14
+ pilot_module: { type: "string" },
15
+ domain_summary: { type: "string" },
16
+ key_modules: {
17
+ type: "array",
18
+ items: {
19
+ type: "object",
20
+ additionalProperties: false,
21
+ properties: {
22
+ name: { type: "string" },
23
+ path: { type: "string" },
24
+ purpose: { type: "string" },
25
+ },
26
+ required: ["name", "path", "purpose"],
27
+ },
28
+ },
29
+ route_handler_globs: { type: "array", items: { type: "string" } },
30
+ dto_globs: { type: "array", items: { type: "string" } },
31
+ generator_source_globs: { type: "array", items: { type: "string" } },
32
+ high_stakes_globs: { type: "array", items: { type: "string" } },
33
+ off_limits_globs: { type: "array", items: { type: "string" } },
34
+ proposed_sensors: {
35
+ type: "array",
36
+ items: {
37
+ type: "object",
38
+ additionalProperties: false,
39
+ properties: {
40
+ id: { type: "string" },
41
+ description: { type: "string" },
42
+ applies_to_globs: {
43
+ type: "array",
44
+ items: { type: "string" },
45
+ },
46
+ },
47
+ required: ["id", "description", "applies_to_globs"],
48
+ },
49
+ },
50
+ notes: { type: "string" },
51
+ scope_index: {
52
+ type: "object",
53
+ additionalProperties: false,
54
+ properties: {
55
+ files: {
56
+ type: "object",
57
+ additionalProperties: {
58
+ type: "object",
59
+ additionalProperties: false,
60
+ properties: {
61
+ decisions: { type: "array", items: { type: "string" } },
62
+ invariants: { type: "array", items: { type: "string" } },
63
+ unscoped: { type: "boolean" },
64
+ },
65
+ required: ["decisions", "invariants"],
66
+ },
67
+ },
68
+ },
69
+ required: ["files"],
70
+ },
71
+ },
72
+ required: [
73
+ "pilot_module",
74
+ "domain_summary",
75
+ "key_modules",
76
+ "route_handler_globs",
77
+ "dto_globs",
78
+ "generator_source_globs",
79
+ "high_stakes_globs",
80
+ "off_limits_globs",
81
+ "proposed_sensors",
82
+ "notes",
83
+ ],
84
+ };
85
+ export const MAPPER_SYSTEM_PROMPT = [
86
+ "You are the INIT MAPPER for a code-agent cairn adopting a new project.",
87
+ "",
88
+ "Your job: read a structural inventory of an unknown project (top-level dirs, package manifests, framework signals, file-extension breakdown, notable files and dirs) and produce a structured proposal that lets the cairn run useful sensors against the project's diffs.",
89
+ "",
90
+ "You DO NOT execute code. You DO NOT modify files. You produce one JSON object.",
91
+ "",
92
+ "Required outputs:",
93
+ "",
94
+ "- `pilot_module` — a glob like `core/src/integrations/**` for the initial scope where the cairn should focus, OR the literal `ALL` if the project is small enough to cairn end-to-end on day one. Bias toward a focused module — operators add scope as confidence grows.",
95
+ "- `domain_summary` — one paragraph (~80-200 words). What does this codebase appear to do? Inferred from package name, README contents (when in a manifest preview), top-level dirs, and manifest deps. State only what the inventory supports; if uncertain, say so.",
96
+ "- `key_modules` — 3-8 modules the cairn should know about. Each `{ name, path, purpose }`. `path` is a directory path that EXISTS in the inventory (no glob); `purpose` is one short sentence.",
97
+ "- `route_handler_globs` — file glob patterns matching HTTP / CLI / RPC / route handlers. Examples: `core/src/**/*.controller.ts` (NestJS), `app/controllers/**/*.rb` (Rails), `apps/api/routes/**/*.py` (FastAPI), `internal/handlers/**/*.go`. EMPTY array if no handlers detected.",
98
+ "- `dto_globs` — globs matching DTO / schema / form-input / request-validator definitions. Examples: `**/*.dto.ts`, `apps/api/schemas/**/*.py`, `core/src/**/zod.ts`, `app/forms/**/*.rb`.",
99
+ "- `generator_source_globs` — globs whose changes mean a generator must re-run. Examples: `core/openapi.json`, `core/src/db/schema.ts` (Drizzle), `**/*.proto`, `prisma/schema.prisma`, `db/structure.sql`. EMPTY if no generators apparent.",
100
+ "- `high_stakes_globs` — globs for high-risk surfaces (auth, billing, multi-tenant boundaries, payments, integrations storing tokens, telephony, anything where a regression leaks user data or charges money). Be conservative; over-flagging dilutes the gate. EMPTY if not clear.",
101
+ "- `off_limits_globs` — globs the cairn MUST NOT touch beyond the generic defaults already in place (`node_modules/**`, `dist/**`, `.git/**`, `.cairn/**`, `.archive/**`, generated artifact dirs are already excluded). Add things like vendored third-party code, copied snapshots, large binary fixtures, anything under a directory the operator should not let an agent rewrite. EMPTY if nothing extra.",
102
+ "- `proposed_sensors` — project-specific sensors beyond the generic cairn Layer A/B/C/D. Each `{ id, description, applies_to_globs }`. Examples: `event-emit-coverage` (every emit() has a label), `migration-naming-convention`, `auth-guard-on-controllers`, `dto-discriminator-coverage`. EMPTY if nothing project-specific is obvious.",
103
+ "- `notes` — anything notable that didn't fit a structured field — e.g., \"truncated at file cap; pilot scope conservative\", \"no test infra detected\", \"monorepo with pnpm-workspace; cairn should adopt one package at a time\".",
104
+ "- `scope_index` — forward map from repo-relative file paths to the decisions and invariants whose `scope_globs` apply, keyed by file. Shape: `{ files: { \"<repo-relative-path>\": { decisions: [\"DEC-NNNN\"], invariants: [\"V-NNNN\"], unscoped?: true } } }`. The user prompt provides a list of in-scope decisions + invariants when ground state already exists; classify which apply to each meaningful source file. Use `unscoped: true` for files that should never carry rules (lockfiles, generated, vendored, dotfile config) so the GC scope-coverage pass doesn't re-flag them. EMPTY `{ files: {} }` is acceptable on first-run adopters with no decisions yet.",
105
+ "",
106
+ "Rules:",
107
+ "- Globs MUST start from repo root, no leading slash.",
108
+ "- Use forward slashes only (`/`), never backslashes.",
109
+ "- Use `**` for any-depth wildcards, `*` for single-segment.",
110
+ "- Do not invent paths that aren't in the inventory.",
111
+ "- Prefer EMPTY arrays over guessed entries. The cairn propagates empty fields to operator review; guessed entries silently mislead and the operator may not catch them at adoption time.",
112
+ "- Avoid overly-broad globs like `**/*.ts` for `route_handler_globs` — narrow to the controller / route directory.",
113
+ "- For `pilot_module`: if the repo has a clear modular layout (packages/, apps/, services/, core/src/<feature>/), name one. If it's a flat single-app codebase, use the literal `ALL` and let the operator narrow later.",
114
+ "- `key_modules.path` MUST appear in the inventory's notable directories or the file-count breakdown.",
115
+ "- Return ONLY the JSON object. No prose, no preamble, no code fences.",
116
+ ].join("\n");
117
+ export function buildMapperUserPrompt(args) {
118
+ const d = args.detection;
119
+ const s = args.summary;
120
+ const parts = [];
121
+ parts.push(`# Project inventory`);
122
+ parts.push("");
123
+ parts.push(`Project slug: ${d.project_slug}`);
124
+ parts.push(`Origin URL: ${d.origin_url ?? "(none — local-only repo)"}`);
125
+ parts.push(`Stack signatures (mechanical): ${d.stack_signatures.map((sig) => sig.kind).join(", ") || "(none)"}`);
126
+ if (d.start_command !== null) {
127
+ parts.push(`Start command (detected): ${[d.start_command.command, ...d.start_command.args].join(" ")}`);
128
+ }
129
+ if (d.proposed_sensors.length > 0) {
130
+ parts.push("Generic stack-detected sensors already proposed:");
131
+ for (const sensor of d.proposed_sensors) {
132
+ parts.push(` - ${sensor.id} (${sensor.command} ${sensor.args.join(" ")}) — ${sensor.reason}`);
133
+ }
134
+ }
135
+ parts.push("");
136
+ parts.push(`## Repo summary`);
137
+ parts.push(`Total files (after caps): ${s.total_files}`);
138
+ parts.push(`Total dirs: ${s.total_dirs}`);
139
+ parts.push(`Listing source: ${s.used_git_ls_files ? "git ls-files (gitignore-aware)" : "filesystem walk"}`);
140
+ if (s.truncated_at_file_cap)
141
+ parts.push(`(truncated at file cap)`);
142
+ if (s.truncated_at_depth_cap)
143
+ parts.push(`(truncated at depth cap — pilot scope should be conservative)`);
144
+ parts.push("");
145
+ parts.push(`## Top-level entries`);
146
+ parts.push(s.top_level.length === 0 ? "(none)" : s.top_level.join(", "));
147
+ parts.push("");
148
+ parts.push(`## Files per top-level dir (top 30)`);
149
+ for (const [dir, count] of Object.entries(s.by_top_dir)) {
150
+ parts.push(` - ${dir}/ (${count} files)`);
151
+ }
152
+ parts.push("");
153
+ parts.push(`## File extensions (top 25)`);
154
+ for (const [ext, count] of Object.entries(s.by_extension)) {
155
+ parts.push(` - ${ext} (${count})`);
156
+ }
157
+ parts.push("");
158
+ if (s.notable_files.length > 0) {
159
+ parts.push(`## Notable files`);
160
+ for (const f of s.notable_files)
161
+ parts.push(` - ${f}`);
162
+ parts.push("");
163
+ }
164
+ if (s.notable_dir_paths.length > 0) {
165
+ parts.push(`## Notable directories (matching framework conventions)`);
166
+ for (const dir of s.notable_dir_paths.slice(0, 80))
167
+ parts.push(` - ${dir}/`);
168
+ parts.push("");
169
+ }
170
+ if (s.framework_signals.length > 0) {
171
+ parts.push(`## Framework signals from manifests`);
172
+ for (const f of s.framework_signals)
173
+ parts.push(` - ${f}`);
174
+ parts.push("");
175
+ }
176
+ if (s.package_manifests.length > 0) {
177
+ parts.push(`## Package manifest previews (first 80 lines each)`);
178
+ for (const m of s.package_manifests) {
179
+ parts.push(`### ${m.path}`);
180
+ parts.push("```");
181
+ parts.push(m.preview);
182
+ parts.push("```");
183
+ parts.push("");
184
+ }
185
+ }
186
+ parts.push(`Now produce the JSON object per the schema. No preamble.`);
187
+ return parts.join("\n");
188
+ }
189
+ //# sourceMappingURL=mapper-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapper-prompts.js","sourceRoot":"","sources":["../../src/init/mapper-prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Init mapper orchestrator (Tier 2 / Sonnet, with cheap Haiku merge).
3
+ *
4
+ * Three-stage pipeline:
5
+ *
6
+ * 1. `module-slicer` partitions the repo into ModuleSlices (one per
7
+ * detected module — submodules, workspace packages, top-level packages,
8
+ * or fallback heuristic). Single-package repos collapse to one slice.
9
+ * 2. `mapper-parallel` dispatches one Sonnet call per slice in parallel
10
+ * (Promise.allSettled, 4-at-a-time batches when >8). Each call sees
11
+ * ~8k tokens of focused module input.
12
+ * 3. `mapper-merge` runs a cheap Haiku call to pick the pilot module and
13
+ * synthesize the project domain summary; the rest of the merge is
14
+ * mechanical (union of arrays, dedupe sensors by id).
15
+ *
16
+ * If every module call fails, the orchestrator throws — there's no
17
+ * fallback path. The operator re-runs `cairn init` with `--force` after
18
+ * fixing whatever broke (auth, network, etc.).
19
+ *
20
+ * Public surface (`MapperOutput`, `MapperResult`, validators, prompt + schema
21
+ * constants) is consumed by both this orchestrator and the standalone
22
+ * `cairn scope rebuild` command.
23
+ */
24
+ import { buildMapperUserPrompt as PROMPTS_BUILD } from "./mapper-prompts.js";
25
+ import { type ModuleProposal } from "./mapper-parallel.js";
26
+ import { type ModuleSlice } from "./module-slicer.js";
27
+ import type { DetectionResult } from "./types.js";
28
+ import type { RepoSummary } from "./walker.js";
29
+ export interface MapperKeyModule {
30
+ name: string;
31
+ path: string;
32
+ purpose: string;
33
+ }
34
+ export interface MapperProposedSensor {
35
+ id: string;
36
+ description: string;
37
+ applies_to_globs: string[];
38
+ }
39
+ export interface MapperScopeIndexEntry {
40
+ decisions: string[];
41
+ invariants: string[];
42
+ unscoped?: boolean;
43
+ }
44
+ export interface MapperScopeIndex {
45
+ files: Record<string, MapperScopeIndexEntry>;
46
+ }
47
+ export interface MapperOutput {
48
+ pilot_module: string;
49
+ domain_summary: string;
50
+ key_modules: MapperKeyModule[];
51
+ route_handler_globs: string[];
52
+ dto_globs: string[];
53
+ generator_source_globs: string[];
54
+ high_stakes_globs: string[];
55
+ off_limits_globs: string[];
56
+ proposed_sensors: MapperProposedSensor[];
57
+ notes: string;
58
+ scope_index: MapperScopeIndex;
59
+ }
60
+ export interface MapperResult {
61
+ output: MapperOutput;
62
+ duration_ms: number;
63
+ tier: "sonnet";
64
+ model: string;
65
+ /** Per-module proposals from the parallel pipeline. */
66
+ module_proposals?: ModuleProposal[];
67
+ usage?: {
68
+ input_tokens?: number;
69
+ output_tokens?: number;
70
+ };
71
+ }
72
+ export declare const MAPPER_OUTPUT_SCHEMA: {
73
+ readonly type: "object";
74
+ readonly additionalProperties: false;
75
+ readonly properties: {
76
+ readonly pilot_module: {
77
+ readonly type: "string";
78
+ };
79
+ readonly domain_summary: {
80
+ readonly type: "string";
81
+ };
82
+ readonly key_modules: {
83
+ readonly type: "array";
84
+ readonly items: {
85
+ readonly type: "object";
86
+ readonly additionalProperties: false;
87
+ readonly properties: {
88
+ readonly name: {
89
+ readonly type: "string";
90
+ };
91
+ readonly path: {
92
+ readonly type: "string";
93
+ };
94
+ readonly purpose: {
95
+ readonly type: "string";
96
+ };
97
+ };
98
+ readonly required: readonly ["name", "path", "purpose"];
99
+ };
100
+ };
101
+ readonly route_handler_globs: {
102
+ readonly type: "array";
103
+ readonly items: {
104
+ readonly type: "string";
105
+ };
106
+ };
107
+ readonly dto_globs: {
108
+ readonly type: "array";
109
+ readonly items: {
110
+ readonly type: "string";
111
+ };
112
+ };
113
+ readonly generator_source_globs: {
114
+ readonly type: "array";
115
+ readonly items: {
116
+ readonly type: "string";
117
+ };
118
+ };
119
+ readonly high_stakes_globs: {
120
+ readonly type: "array";
121
+ readonly items: {
122
+ readonly type: "string";
123
+ };
124
+ };
125
+ readonly off_limits_globs: {
126
+ readonly type: "array";
127
+ readonly items: {
128
+ readonly type: "string";
129
+ };
130
+ };
131
+ readonly proposed_sensors: {
132
+ readonly type: "array";
133
+ readonly items: {
134
+ readonly type: "object";
135
+ readonly additionalProperties: false;
136
+ readonly properties: {
137
+ readonly id: {
138
+ readonly type: "string";
139
+ };
140
+ readonly description: {
141
+ readonly type: "string";
142
+ };
143
+ readonly applies_to_globs: {
144
+ readonly type: "array";
145
+ readonly items: {
146
+ readonly type: "string";
147
+ };
148
+ };
149
+ };
150
+ readonly required: readonly ["id", "description", "applies_to_globs"];
151
+ };
152
+ };
153
+ readonly notes: {
154
+ readonly type: "string";
155
+ };
156
+ readonly scope_index: {
157
+ readonly type: "object";
158
+ readonly additionalProperties: false;
159
+ readonly properties: {
160
+ readonly files: {
161
+ readonly type: "object";
162
+ readonly additionalProperties: {
163
+ readonly type: "object";
164
+ readonly additionalProperties: false;
165
+ readonly properties: {
166
+ readonly decisions: {
167
+ readonly type: "array";
168
+ readonly items: {
169
+ readonly type: "string";
170
+ };
171
+ };
172
+ readonly invariants: {
173
+ readonly type: "array";
174
+ readonly items: {
175
+ readonly type: "string";
176
+ };
177
+ };
178
+ readonly unscoped: {
179
+ readonly type: "boolean";
180
+ };
181
+ };
182
+ readonly required: readonly ["decisions", "invariants"];
183
+ };
184
+ };
185
+ };
186
+ readonly required: readonly ["files"];
187
+ };
188
+ };
189
+ readonly required: readonly ["pilot_module", "domain_summary", "key_modules", "route_handler_globs", "dto_globs", "generator_source_globs", "high_stakes_globs", "off_limits_globs", "proposed_sensors", "notes"];
190
+ };
191
+ export declare const MAPPER_SYSTEM_PROMPT: string;
192
+ export declare const buildMapperUserPrompt: typeof PROMPTS_BUILD;
193
+ export declare function isMapperOutput(value: unknown): value is MapperOutput;
194
+ export declare function validateMapperOutput(value: unknown): MapperOutput;
195
+ export interface RunMapperArgs {
196
+ detection: DetectionResult;
197
+ /**
198
+ * Pre-built repo summary from the Phase-1 walker. Used by both the chunked
199
+ * path (its merge step references the workspace top-level package.json
200
+ * via repoRoot) and the legacy fallback (consumes summary directly).
201
+ */
202
+ summary: RepoSummary;
203
+ /** Repo root absolute path — slicer + ledger read from here. */
204
+ repoRoot: string;
205
+ /** Fires once after slicing, before any module call goes out. */
206
+ onSlicesDetected?: (slices: ModuleSlice[]) => void;
207
+ /** Optional progress callback fired as each module proposal completes. */
208
+ onModuleStart?: (slice: ModuleSlice) => void;
209
+ onModuleEnd?: (slice: ModuleSlice, proposal: ModuleProposal) => void;
210
+ }
211
+ export declare function runMapper(args: RunMapperArgs): Promise<MapperResult>;
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Init mapper orchestrator (Tier 2 / Sonnet, with cheap Haiku merge).
3
+ *
4
+ * Three-stage pipeline:
5
+ *
6
+ * 1. `module-slicer` partitions the repo into ModuleSlices (one per
7
+ * detected module — submodules, workspace packages, top-level packages,
8
+ * or fallback heuristic). Single-package repos collapse to one slice.
9
+ * 2. `mapper-parallel` dispatches one Sonnet call per slice in parallel
10
+ * (Promise.allSettled, 4-at-a-time batches when >8). Each call sees
11
+ * ~8k tokens of focused module input.
12
+ * 3. `mapper-merge` runs a cheap Haiku call to pick the pilot module and
13
+ * synthesize the project domain summary; the rest of the merge is
14
+ * mechanical (union of arrays, dedupe sensors by id).
15
+ *
16
+ * If every module call fails, the orchestrator throws — there's no
17
+ * fallback path. The operator re-runs `cairn init` with `--force` after
18
+ * fixing whatever broke (auth, network, etc.).
19
+ *
20
+ * Public surface (`MapperOutput`, `MapperResult`, validators, prompt + schema
21
+ * constants) is consumed by both this orchestrator and the standalone
22
+ * `cairn scope rebuild` command.
23
+ */
24
+ import { existsSync, readFileSync } from "node:fs";
25
+ import { join } from "node:path";
26
+ import { logger } from "../logger.js";
27
+ import { buildDecisionsLedger, buildInvariantsLedger, } from "../ground/ledgers.js";
28
+ import { MAPPER_OUTPUT_SCHEMA as PROMPTS_SCHEMA, MAPPER_SYSTEM_PROMPT as PROMPTS_SYSTEM, buildMapperUserPrompt as PROMPTS_BUILD, } from "./mapper-prompts.js";
29
+ import { mapModulesParallel, } from "./mapper-parallel.js";
30
+ import { mergeModuleProposals } from "./mapper-merge.js";
31
+ import { sliceModules } from "./module-slicer.js";
32
+ const log = logger("init.mapper");
33
+ // ── Re-exports — `cairn scope rebuild` and other consumers import these. ──
34
+ export const MAPPER_OUTPUT_SCHEMA = PROMPTS_SCHEMA;
35
+ export const MAPPER_SYSTEM_PROMPT = PROMPTS_SYSTEM;
36
+ export const buildMapperUserPrompt = PROMPTS_BUILD;
37
+ export function isMapperOutput(value) {
38
+ if (typeof value !== "object" || value === null)
39
+ return false;
40
+ const v = value;
41
+ if (!(typeof v["pilot_module"] === "string" &&
42
+ typeof v["domain_summary"] === "string" &&
43
+ Array.isArray(v["key_modules"]) &&
44
+ Array.isArray(v["route_handler_globs"]) &&
45
+ Array.isArray(v["dto_globs"]) &&
46
+ Array.isArray(v["generator_source_globs"]) &&
47
+ Array.isArray(v["high_stakes_globs"]) &&
48
+ Array.isArray(v["off_limits_globs"]) &&
49
+ Array.isArray(v["proposed_sensors"]) &&
50
+ typeof v["notes"] === "string")) {
51
+ return false;
52
+ }
53
+ const scopeIdxRaw = v["scope_index"];
54
+ if (scopeIdxRaw !== undefined) {
55
+ if (typeof scopeIdxRaw !== "object" || scopeIdxRaw === null)
56
+ return false;
57
+ const filesRaw = scopeIdxRaw["files"];
58
+ if (typeof filesRaw !== "object" || filesRaw === null)
59
+ return false;
60
+ }
61
+ return true;
62
+ }
63
+ export function validateMapperOutput(value) {
64
+ if (!isMapperOutput(value)) {
65
+ throw new Error(`mapper output failed shape validation: ${JSON.stringify(value).slice(0, 200)}`);
66
+ }
67
+ const v = value;
68
+ if (v["scope_index"] === undefined) {
69
+ v["scope_index"] = { files: {} };
70
+ }
71
+ return value;
72
+ }
73
+ export async function runMapper(args) {
74
+ const startedAt = Date.now();
75
+ // 1. Slice the repo into modules. The slicer always returns at least one
76
+ // slice (single-package repos get one whole-repo slice).
77
+ const slices = sliceModules({ repoRoot: args.repoRoot });
78
+ const decisions = readLedgerSafely(args.repoRoot, "decisions");
79
+ const invariants = readLedgerSafely(args.repoRoot, "invariants");
80
+ if (args.onSlicesDetected !== undefined)
81
+ args.onSlicesDetected(slices);
82
+ log.info({
83
+ slices: slices.length,
84
+ slice_slugs: slices.map((s) => s.moduleSlug),
85
+ decisions: decisions.length,
86
+ invariants: invariants.length,
87
+ }, "chunked mapper dispatch");
88
+ // 2. Parallel module calls.
89
+ const proposals = await mapModulesParallel({
90
+ slices,
91
+ decisions,
92
+ invariants,
93
+ ...(args.onModuleStart !== undefined ? { onModuleStart: args.onModuleStart } : {}),
94
+ ...(args.onModuleEnd !== undefined ? { onModuleEnd: args.onModuleEnd } : {}),
95
+ });
96
+ // 3. If every module call failed there's no fallback — surface the
97
+ // error so the operator can re-run after fixing the upstream cause.
98
+ const allFailed = proposals.length > 0 && proposals.every((p) => p.failed);
99
+ if (allFailed) {
100
+ throw new Error(`mapper failed: all ${proposals.length} module call(s) returned errors. ` +
101
+ `Re-run \`cairn init --force\` after fixing the upstream cause (auth, network, etc.).`);
102
+ }
103
+ // 4. Merge call (Haiku).
104
+ const workspacePackageJson = readIfExists(join(args.repoRoot, "package.json"));
105
+ const merged = await mergeModuleProposals({
106
+ proposals,
107
+ workspacePackageJson,
108
+ projectSlug: args.detection.project_slug,
109
+ });
110
+ log.info({
111
+ proposals: proposals.length,
112
+ successful: proposals.filter((p) => !p.failed).length,
113
+ pilot_module: merged.pilot_module,
114
+ total_sensors: merged.proposed_sensors.length,
115
+ }, "chunked mapper complete");
116
+ return {
117
+ output: merged,
118
+ tier: "sonnet",
119
+ model: "haiku+sonnet",
120
+ duration_ms: Date.now() - startedAt,
121
+ module_proposals: proposals,
122
+ };
123
+ }
124
+ // ── Helpers ────────────────────────────────────────────────────────────────
125
+ function readIfExists(path) {
126
+ if (!existsSync(path))
127
+ return null;
128
+ try {
129
+ return readFileSync(path, "utf8");
130
+ }
131
+ catch {
132
+ return null;
133
+ }
134
+ }
135
+ function readLedgerSafely(repoRoot, kind) {
136
+ // Ground state may not exist on first-run adopters. Empty list is fine —
137
+ // mapper just gets no in-scope ledger context to classify against.
138
+ try {
139
+ const groundDir = join(repoRoot, ".cairn", "ground");
140
+ if (!existsSync(groundDir))
141
+ return [];
142
+ return (kind === "decisions"
143
+ ? buildDecisionsLedger({ repoRoot })
144
+ : buildInvariantsLedger({ repoRoot }));
145
+ }
146
+ catch (err) {
147
+ log.warn({ err: String(err), kind }, "ledger read failed; using empty list");
148
+ return [];
149
+ }
150
+ }
151
+ //# sourceMappingURL=mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../src/init/mapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Module slicer — partitions a repo into per-module slices for the chunked
3
+ * parallel mapper. Each ModuleSlice is the focused input one Sonnet call sees.
4
+ *
5
+ * Per `docs/INIT_SPEC.md` §3 (chunked parallel path):
6
+ * - Detect modules via .gitmodules, pnpm/yarn/lerna workspaces, top-level
7
+ * package.json children, OR top-level dirs with >20 source files.
8
+ * - Single-package repos collapse to one slice covering the whole repo.
9
+ * - Each slice carries: directory tree (paths only), package.json (full),
10
+ * up to 5 representative files (full content), local docs (capped).
11
+ *
12
+ * The mapper-parallel module dispatches one Sonnet call per slice, and the
13
+ * merge call assembles the per-module proposals into a single MapperOutput.
14
+ */
15
+ export interface ModuleSlice {
16
+ /** Absolute path to the module root. */
17
+ modulePath: string;
18
+ /** Path relative to repoRoot. "." for the whole-repo single-package case. */
19
+ moduleRel: string;
20
+ /** Short slug used in progress display + per-module logs. */
21
+ moduleSlug: string;
22
+ /** Newline-separated relative paths, no file content. */
23
+ directoryTree: string;
24
+ /** Full package.json contents if present at module root, else null. */
25
+ packageJson: string | null;
26
+ /** Up to 5 files with full content (capped). */
27
+ representativeFiles: Array<{
28
+ path: string;
29
+ content: string;
30
+ }>;
31
+ /** Concatenated README/docs, capped. null when no docs found. */
32
+ localDocs: string | null;
33
+ }
34
+ export interface SliceModulesArgs {
35
+ repoRoot: string;
36
+ /** Optional: cap how many slices to return. Default unlimited. */
37
+ maxSlices?: number;
38
+ }
39
+ export declare function sliceModules(args: SliceModulesArgs): ModuleSlice[];