@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,409 @@
1
+ /**
2
+ * Parallel module mapper — dispatches one Sonnet call per ModuleSlice in
3
+ * parallel via Promise.allSettled, with a per-module progress display.
4
+ *
5
+ * Per `docs/INIT_SPEC.md` §3:
6
+ * - One Sonnet call per slice, ~8k token input each.
7
+ * - Failed call → ModuleProposal with confidence: 0 and empty arrays.
8
+ * Never throws; allSettled handles errors.
9
+ * - >8 modules: batch into rounds of 4 to avoid rate limits. Still parallel
10
+ * within each round.
11
+ * - Progress: per-module line, updated in-place as each Promise resolves.
12
+ *
13
+ * Output is a list of ModuleProposal objects. The merge module (Haiku call)
14
+ * synthesizes them into the final MapperOutput.
15
+ */
16
+ import { runClaude } from "../claude/index.js";
17
+ import { logger } from "../logger.js";
18
+ const log = logger("init.mapper-parallel");
19
+ const PARALLEL_ROUND_SIZE = 4;
20
+ const PARALLEL_THRESHOLD = 8;
21
+ const PER_MODULE_TIMEOUT_MS = 180_000;
22
+ const MODULE_OUTPUT_SCHEMA = {
23
+ type: "object",
24
+ additionalProperties: false,
25
+ properties: {
26
+ domain: { type: "string" },
27
+ pilot_module_candidate: { type: "boolean" },
28
+ confidence: { type: "number" },
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
+ sensor_proposals: {
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: { type: "array", items: { type: "string" } },
43
+ },
44
+ required: ["id", "description", "applies_to_globs"],
45
+ },
46
+ },
47
+ scope_index: {
48
+ type: "object",
49
+ additionalProperties: false,
50
+ properties: {
51
+ files: {
52
+ type: "object",
53
+ additionalProperties: {
54
+ type: "object",
55
+ additionalProperties: false,
56
+ properties: {
57
+ decisions: { type: "array", items: { type: "string" } },
58
+ invariants: { type: "array", items: { type: "string" } },
59
+ unscoped: { type: "boolean" },
60
+ },
61
+ required: ["decisions", "invariants"],
62
+ },
63
+ },
64
+ },
65
+ required: ["files"],
66
+ },
67
+ notes: { type: "string" },
68
+ },
69
+ required: [
70
+ "domain",
71
+ "pilot_module_candidate",
72
+ "confidence",
73
+ "route_handler_globs",
74
+ "dto_globs",
75
+ "generator_source_globs",
76
+ "high_stakes_globs",
77
+ "off_limits_globs",
78
+ "sensor_proposals",
79
+ "notes",
80
+ ],
81
+ };
82
+ const MODULE_SYSTEM_PROMPT = [
83
+ "You are the per-module INIT MAPPER for a code-agent cairn adopting a project.",
84
+ "",
85
+ "You see ONE module of a (possibly larger) repo. Your job: read this slice and produce a structured per-module proposal so the cairn can run useful sensors against this module's diffs.",
86
+ "",
87
+ "You DO NOT execute code. You DO NOT modify files. You produce one JSON object.",
88
+ "",
89
+ "Inputs you receive:",
90
+ " - module path (relative to repo root) + module slug",
91
+ " - directory tree (paths only, no file content)",
92
+ " - the module's package.json (full)",
93
+ " - up to 5 representative files (full content) — controllers, services, schemas, routers, entry points",
94
+ " - module-level docs (README / AGENTS.md / docs/*.md)",
95
+ " - existing in-scope decisions/invariants from the project ledger (if any)",
96
+ "",
97
+ "Required outputs (all paths must be REPO-ROOT-RELATIVE — prepend the module path):",
98
+ " - `domain` — one short sentence describing what this module does.",
99
+ " - `pilot_module_candidate` — true if this module looks like the highest-change-velocity, smallest-blast-radius candidate to pilot first. Bias toward feature modules over infra / config / docs.",
100
+ " - `confidence` — 0.0–1.0 estimate of how reliable your output is. < 0.4 = low confidence, > 0.7 = high.",
101
+ " - `route_handler_globs` — globs matching HTTP / CLI / RPC handlers in this module. Examples: `core/src/**/*.controller.ts`, `apps/api/routes/**/*.py`. EMPTY if no handlers.",
102
+ " - `dto_globs` — globs matching DTO / schema / form-input / request-validator definitions in this module.",
103
+ " - `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`.",
104
+ " - `high_stakes_globs` — globs for high-risk surfaces in this module (auth, billing, payments, multi-tenant, integrations storing tokens, telephony). Be conservative.",
105
+ " - `off_limits_globs` — globs the cairn MUST NOT touch beyond defaults. Vendored code, large fixtures, copied snapshots.",
106
+ " - `sensor_proposals` — module-specific sensors. Each `{ id, description, applies_to_globs }`.",
107
+ " - `scope_index` — `{ files: { \"<repo-relative-path>\": { decisions: [], invariants: [], unscoped?: true } } }`. The user prompt provides the in-scope decisions + invariants list. Map only files within THIS module. Use `unscoped: true` for lockfiles, generated, vendored, or dotfile config.",
108
+ " - `notes` — anything notable that didn't fit a structured field.",
109
+ "",
110
+ "Rules:",
111
+ " - Globs MUST be repo-root-relative, no leading slash, forward slashes only.",
112
+ " - Do not invent paths absent from the inventory.",
113
+ " - Prefer EMPTY arrays over guessed entries.",
114
+ " - Return ONLY the JSON object. No prose, no preamble.",
115
+ ].join("\n");
116
+ export async function mapModulesParallel(args) {
117
+ const slices = args.slices;
118
+ if (slices.length === 0)
119
+ return [];
120
+ const rounds = chunkRounds(slices, PARALLEL_THRESHOLD, PARALLEL_ROUND_SIZE);
121
+ log.info({
122
+ total_slices: slices.length,
123
+ rounds: rounds.length,
124
+ round_sizes: rounds.map((r) => r.length),
125
+ }, "parallel mapper dispatch");
126
+ const out = [];
127
+ for (const round of rounds) {
128
+ const settled = await Promise.allSettled(round.map((slice) => mapOneSlice(slice, args)));
129
+ for (let i = 0; i < settled.length; i++) {
130
+ const slice = round[i];
131
+ if (slice === undefined)
132
+ continue;
133
+ const result = settled[i];
134
+ if (result === undefined)
135
+ continue;
136
+ if (result.status === "fulfilled") {
137
+ out.push(result.value);
138
+ }
139
+ else {
140
+ // Fail-soft proposal so the merge step still has an entry to acknowledge.
141
+ const reason = String(result.reason ?? "unknown");
142
+ log.warn({ slice: slice.moduleSlug, reason }, "module call failed");
143
+ out.push(buildFailedProposal(slice, reason));
144
+ if (args.onModuleEnd !== undefined) {
145
+ args.onModuleEnd(slice, buildFailedProposal(slice, reason));
146
+ }
147
+ }
148
+ }
149
+ }
150
+ return out;
151
+ }
152
+ function chunkRounds(items, threshold, size) {
153
+ if (items.length <= threshold)
154
+ return [items];
155
+ const out = [];
156
+ for (let i = 0; i < items.length; i += size) {
157
+ out.push(items.slice(i, i + size));
158
+ }
159
+ return out;
160
+ }
161
+ async function mapOneSlice(slice, args) {
162
+ if (args.onModuleStart !== undefined)
163
+ args.onModuleStart(slice);
164
+ const startedAt = Date.now();
165
+ let proposal;
166
+ try {
167
+ const userPrompt = buildModuleUserPrompt({
168
+ slice,
169
+ decisions: args.decisions,
170
+ invariants: args.invariants,
171
+ });
172
+ const result = await runClaude({
173
+ tier: "sonnet",
174
+ prompt: userPrompt,
175
+ system: MODULE_SYSTEM_PROMPT,
176
+ jsonSchema: MODULE_OUTPUT_SCHEMA,
177
+ timeoutMs: PER_MODULE_TIMEOUT_MS,
178
+ });
179
+ proposal = parseModuleProposal(slice, result.parsed, Date.now() - startedAt);
180
+ }
181
+ catch (err) {
182
+ proposal = buildFailedProposal(slice, String(err));
183
+ proposal.durationMs = Date.now() - startedAt;
184
+ }
185
+ if (args.onModuleEnd !== undefined)
186
+ args.onModuleEnd(slice, proposal);
187
+ return proposal;
188
+ }
189
+ function buildModuleUserPrompt(args) {
190
+ const slice = args.slice;
191
+ const parts = [];
192
+ parts.push(`# Module slice: ${slice.moduleSlug}`);
193
+ parts.push("");
194
+ parts.push(`Module path (repo-relative): ${slice.moduleRel}`);
195
+ parts.push("");
196
+ if (args.decisions.length > 0 || args.invariants.length > 0) {
197
+ parts.push("## In-scope decisions + invariants (project ledger)");
198
+ if (args.decisions.length > 0) {
199
+ parts.push("Decisions:");
200
+ for (const d of args.decisions) {
201
+ parts.push(` - ${d.id} — ${d.title} (status: ${d.status})`);
202
+ }
203
+ }
204
+ if (args.invariants.length > 0) {
205
+ parts.push("Invariants:");
206
+ for (const v of args.invariants) {
207
+ parts.push(` - ${v.id} — ${v.title} (status: ${v.status})`);
208
+ }
209
+ }
210
+ parts.push("");
211
+ }
212
+ parts.push(`## Directory tree (relative to module root)`);
213
+ parts.push("```");
214
+ parts.push(slice.directoryTree);
215
+ parts.push("```");
216
+ parts.push("");
217
+ if (slice.packageJson !== null) {
218
+ parts.push(`## package.json`);
219
+ parts.push("```json");
220
+ parts.push(slice.packageJson);
221
+ parts.push("```");
222
+ parts.push("");
223
+ }
224
+ if (slice.representativeFiles.length > 0) {
225
+ parts.push(`## Representative files (full content)`);
226
+ for (const f of slice.representativeFiles) {
227
+ parts.push(`### ${f.path}`);
228
+ parts.push("```");
229
+ parts.push(f.content);
230
+ parts.push("```");
231
+ parts.push("");
232
+ }
233
+ }
234
+ if (slice.localDocs !== null) {
235
+ parts.push(`## Module docs`);
236
+ parts.push("```markdown");
237
+ parts.push(slice.localDocs);
238
+ parts.push("```");
239
+ parts.push("");
240
+ }
241
+ parts.push(`Now produce the JSON object per the schema. Remember: globs are repo-root-relative (prepend "${slice.moduleRel === "." ? "" : slice.moduleRel + "/"}" to module-relative paths). No preamble.`);
242
+ return parts.join("\n");
243
+ }
244
+ function parseModuleProposal(slice, parsed, durationMs) {
245
+ if (typeof parsed !== "object" || parsed === null) {
246
+ return { ...buildFailedProposal(slice, "non-object parsed output"), durationMs };
247
+ }
248
+ const v = parsed;
249
+ const arr = (k) => {
250
+ const x = v[k];
251
+ return Array.isArray(x) ? x.filter((s) => typeof s === "string") : [];
252
+ };
253
+ const sensorRaw = Array.isArray(v["sensor_proposals"]) ? v["sensor_proposals"] : [];
254
+ const sensors = [];
255
+ for (const s of sensorRaw) {
256
+ if (typeof s !== "object" || s === null)
257
+ continue;
258
+ const ss = s;
259
+ if (typeof ss["id"] !== "string" ||
260
+ typeof ss["description"] !== "string" ||
261
+ !Array.isArray(ss["applies_to_globs"])) {
262
+ continue;
263
+ }
264
+ sensors.push({
265
+ id: ss["id"],
266
+ description: ss["description"],
267
+ applies_to_globs: ss["applies_to_globs"].filter((g) => typeof g === "string"),
268
+ });
269
+ }
270
+ const scopeRaw = v["scope_index"];
271
+ const scopeIndex = { files: {} };
272
+ if (typeof scopeRaw === "object" &&
273
+ scopeRaw !== null &&
274
+ typeof scopeRaw["files"] === "object" &&
275
+ scopeRaw["files"] !== null) {
276
+ const filesRaw = scopeRaw["files"];
277
+ for (const [path, entry] of Object.entries(filesRaw)) {
278
+ if (typeof entry !== "object" || entry === null)
279
+ continue;
280
+ const e = entry;
281
+ const decs = Array.isArray(e["decisions"])
282
+ ? e["decisions"].filter((s) => typeof s === "string")
283
+ : [];
284
+ const invs = Array.isArray(e["invariants"])
285
+ ? e["invariants"].filter((s) => typeof s === "string")
286
+ : [];
287
+ const out = {
288
+ decisions: decs,
289
+ invariants: invs,
290
+ };
291
+ if (e["unscoped"] === true)
292
+ out.unscoped = true;
293
+ scopeIndex.files[path] = out;
294
+ }
295
+ }
296
+ const conf = typeof v["confidence"] === "number" ? v["confidence"] : 0;
297
+ return {
298
+ moduleName: slice.moduleSlug,
299
+ moduleSlug: slice.moduleSlug,
300
+ modulePath: slice.modulePath,
301
+ moduleRel: slice.moduleRel,
302
+ domain: typeof v["domain"] === "string" ? v["domain"] : "",
303
+ pilotModuleCandidate: v["pilot_module_candidate"] === true,
304
+ confidence: conf,
305
+ routeHandlerGlobs: arr("route_handler_globs"),
306
+ dtoGlobs: arr("dto_globs"),
307
+ generatorSourceGlobs: arr("generator_source_globs"),
308
+ highStakesGlobs: arr("high_stakes_globs"),
309
+ offLimitsGlobs: arr("off_limits_globs"),
310
+ sensorProposals: sensors,
311
+ scopeIndex,
312
+ notes: typeof v["notes"] === "string" ? v["notes"] : "",
313
+ failed: false,
314
+ durationMs,
315
+ };
316
+ }
317
+ /**
318
+ * Heuristic keywords for the partial-fallback high-stakes scan. Files / dirs
319
+ * matching any of these on a path segment get globbed when the LLM call
320
+ * fails — so even a timed-out module surfaces obvious risk surfaces in the
321
+ * final proposal.
322
+ */
323
+ const FALLBACK_HIGH_STAKES_PATTERNS = [
324
+ /^auth(entication)?$/i,
325
+ /^billing$/i,
326
+ /^payment(s)?$/i,
327
+ /^security$/i,
328
+ ];
329
+ /**
330
+ * Build a ModuleProposal for a slice whose Sonnet call timed out or threw.
331
+ *
332
+ * Per `INIT_SPEC.md` §3 fallback policy: don't drop the module entirely.
333
+ * Mark it `failed: true` (so completion summary can name it), give it a
334
+ * confidence: 0.1, derive high-stakes globs heuristically from path
335
+ * segments, and stamp the slice's full directory tree into the scope index
336
+ * as `unscoped: true` so PostToolUse hooks downstream don't re-flag the
337
+ * files for missing scope. Operator can re-run `cairn scope rebuild` to
338
+ * upgrade the partial entry into a full proposal later.
339
+ */
340
+ function buildFailedProposal(slice, reason) {
341
+ const treePaths = slice.directoryTree
342
+ .split("\n")
343
+ .map((l) => l.trim())
344
+ .filter((l) => l.length > 0 && !l.startsWith("…"));
345
+ const moduleRel = slice.moduleRel;
346
+ const repoRel = (rel) => moduleRel === "." ? rel : `${moduleRel}/${rel}`;
347
+ // High-stakes globs: any path segment that matches a fallback keyword
348
+ // contributes a glob covering its parent directory.
349
+ const highStakesGlobs = new Set();
350
+ for (const path of treePaths) {
351
+ const segs = path.split("/");
352
+ for (let i = 0; i < segs.length; i++) {
353
+ const seg = segs[i];
354
+ if (seg === undefined)
355
+ continue;
356
+ if (!FALLBACK_HIGH_STAKES_PATTERNS.some((re) => re.test(seg)))
357
+ continue;
358
+ // Glob the matched directory if the keyword names a directory in the
359
+ // path (i.e., not the leaf filename). Keyword on a leaf file → glob
360
+ // its parent directory.
361
+ const isLeaf = i === segs.length - 1;
362
+ const dirPath = isLeaf ? segs.slice(0, i).join("/") : segs.slice(0, i + 1).join("/");
363
+ const repoDir = dirPath === "" ? moduleRel : repoRel(dirPath);
364
+ if (repoDir === "" || repoDir === ".") {
365
+ highStakesGlobs.add(`${seg}/**`);
366
+ }
367
+ else {
368
+ highStakesGlobs.add(`${repoDir}/**`);
369
+ }
370
+ break; // one glob per path is enough
371
+ }
372
+ }
373
+ // Scope index: every file in the slice → unscoped: true so the GC's
374
+ // scope-coverage pass doesn't re-flag them while the partial proposal
375
+ // stands.
376
+ const scopeIndex = {
377
+ files: {},
378
+ };
379
+ for (const path of treePaths) {
380
+ if (path.length === 0)
381
+ continue;
382
+ const repoPath = repoRel(path);
383
+ scopeIndex.files[repoPath] = {
384
+ decisions: [],
385
+ invariants: [],
386
+ unscoped: true,
387
+ };
388
+ }
389
+ return {
390
+ moduleName: slice.moduleSlug,
391
+ moduleSlug: slice.moduleSlug,
392
+ modulePath: slice.modulePath,
393
+ moduleRel,
394
+ domain: `${slice.moduleSlug} module (analysis timed out — run cairn scope rebuild)`,
395
+ pilotModuleCandidate: false,
396
+ confidence: 0.1,
397
+ routeHandlerGlobs: [],
398
+ dtoGlobs: [],
399
+ generatorSourceGlobs: [],
400
+ highStakesGlobs: [...highStakesGlobs],
401
+ offLimitsGlobs: [],
402
+ sensorProposals: [],
403
+ scopeIndex,
404
+ notes: `module mapper call failed: ${reason}; partial fallback used`,
405
+ failed: true,
406
+ durationMs: 0,
407
+ };
408
+ }
409
+ //# sourceMappingURL=mapper-parallel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapper-parallel.js","sourceRoot":"","sources":["../../src/init/mapper-parallel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
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
+ import type { DetectionResult } from "./types.js";
11
+ import type { RepoSummary } from "./walker.js";
12
+ export declare const MAPPER_OUTPUT_SCHEMA: {
13
+ readonly type: "object";
14
+ readonly additionalProperties: false;
15
+ readonly properties: {
16
+ readonly pilot_module: {
17
+ readonly type: "string";
18
+ };
19
+ readonly domain_summary: {
20
+ readonly type: "string";
21
+ };
22
+ readonly key_modules: {
23
+ readonly type: "array";
24
+ readonly items: {
25
+ readonly type: "object";
26
+ readonly additionalProperties: false;
27
+ readonly properties: {
28
+ readonly name: {
29
+ readonly type: "string";
30
+ };
31
+ readonly path: {
32
+ readonly type: "string";
33
+ };
34
+ readonly purpose: {
35
+ readonly type: "string";
36
+ };
37
+ };
38
+ readonly required: readonly ["name", "path", "purpose"];
39
+ };
40
+ };
41
+ readonly route_handler_globs: {
42
+ readonly type: "array";
43
+ readonly items: {
44
+ readonly type: "string";
45
+ };
46
+ };
47
+ readonly dto_globs: {
48
+ readonly type: "array";
49
+ readonly items: {
50
+ readonly type: "string";
51
+ };
52
+ };
53
+ readonly generator_source_globs: {
54
+ readonly type: "array";
55
+ readonly items: {
56
+ readonly type: "string";
57
+ };
58
+ };
59
+ readonly high_stakes_globs: {
60
+ readonly type: "array";
61
+ readonly items: {
62
+ readonly type: "string";
63
+ };
64
+ };
65
+ readonly off_limits_globs: {
66
+ readonly type: "array";
67
+ readonly items: {
68
+ readonly type: "string";
69
+ };
70
+ };
71
+ readonly proposed_sensors: {
72
+ readonly type: "array";
73
+ readonly items: {
74
+ readonly type: "object";
75
+ readonly additionalProperties: false;
76
+ readonly properties: {
77
+ readonly id: {
78
+ readonly type: "string";
79
+ };
80
+ readonly description: {
81
+ readonly type: "string";
82
+ };
83
+ readonly applies_to_globs: {
84
+ readonly type: "array";
85
+ readonly items: {
86
+ readonly type: "string";
87
+ };
88
+ };
89
+ };
90
+ readonly required: readonly ["id", "description", "applies_to_globs"];
91
+ };
92
+ };
93
+ readonly notes: {
94
+ readonly type: "string";
95
+ };
96
+ readonly scope_index: {
97
+ readonly type: "object";
98
+ readonly additionalProperties: false;
99
+ readonly properties: {
100
+ readonly files: {
101
+ readonly type: "object";
102
+ readonly additionalProperties: {
103
+ readonly type: "object";
104
+ readonly additionalProperties: false;
105
+ readonly properties: {
106
+ readonly decisions: {
107
+ readonly type: "array";
108
+ readonly items: {
109
+ readonly type: "string";
110
+ };
111
+ };
112
+ readonly invariants: {
113
+ readonly type: "array";
114
+ readonly items: {
115
+ readonly type: "string";
116
+ };
117
+ };
118
+ readonly unscoped: {
119
+ readonly type: "boolean";
120
+ };
121
+ };
122
+ readonly required: readonly ["decisions", "invariants"];
123
+ };
124
+ };
125
+ };
126
+ readonly required: readonly ["files"];
127
+ };
128
+ };
129
+ 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"];
130
+ };
131
+ export declare const MAPPER_SYSTEM_PROMPT: string;
132
+ export declare function buildMapperUserPrompt(args: {
133
+ detection: DetectionResult;
134
+ summary: RepoSummary;
135
+ }): string;