@isaacriehm/cairn-core 0.19.1 → 0.22.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 (336) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/align-undo/log.js +3 -2
  3. package/dist/align-undo/log.js.map +1 -1
  4. package/dist/attention/index.d.ts +0 -2
  5. package/dist/attention/index.js +0 -2
  6. package/dist/attention/index.js.map +1 -1
  7. package/dist/attention/restore.d.ts +1 -1
  8. package/dist/attention/restore.js +1 -1
  9. package/dist/attention/source-strip.d.ts +2 -2
  10. package/dist/attention/source-strip.js +4 -3
  11. package/dist/attention/source-strip.js.map +1 -1
  12. package/dist/components/audit.d.ts +7 -1
  13. package/dist/components/audit.js +144 -72
  14. package/dist/components/audit.js.map +1 -1
  15. package/dist/components/emit.js +33 -6
  16. package/dist/components/emit.js.map +1 -1
  17. package/dist/components/freshness.d.ts +51 -0
  18. package/dist/components/freshness.js +121 -0
  19. package/dist/components/freshness.js.map +1 -0
  20. package/dist/components/index.d.ts +4 -0
  21. package/dist/components/index.js +2 -0
  22. package/dist/components/index.js.map +1 -1
  23. package/dist/components/reconfirm.d.ts +64 -0
  24. package/dist/components/reconfirm.js +204 -0
  25. package/dist/components/reconfirm.js.map +1 -0
  26. package/dist/context/handoff-builder.js +3 -3
  27. package/dist/context/handoff-builder.js.map +1 -1
  28. package/dist/context/task-summary.js +2 -2
  29. package/dist/context/task-summary.js.map +1 -1
  30. package/dist/doctor/index.js +102 -9
  31. package/dist/doctor/index.js.map +1 -1
  32. package/dist/events/paths.js +2 -2
  33. package/dist/events/paths.js.map +1 -1
  34. package/dist/fix-align/sentinel.js +2 -3
  35. package/dist/fix-align/sentinel.js.map +1 -1
  36. package/dist/gc/attested-commits.js +2 -2
  37. package/dist/gc/attested-commits.js.map +1 -1
  38. package/dist/gc/canary.js +2 -3
  39. package/dist/gc/canary.js.map +1 -1
  40. package/dist/gc/citation-integrity.d.ts +4 -5
  41. package/dist/gc/citation-integrity.js +11 -33
  42. package/dist/gc/citation-integrity.js.map +1 -1
  43. package/dist/gc/classify.js +3 -16
  44. package/dist/gc/classify.js.map +1 -1
  45. package/dist/gc/completion-integrity.js +4 -3
  46. package/dist/gc/completion-integrity.js.map +1 -1
  47. package/dist/gc/entity-orphan.js +66 -12
  48. package/dist/gc/entity-orphan.js.map +1 -1
  49. package/dist/gc/ghost-anchor.d.ts +57 -0
  50. package/dist/gc/ghost-anchor.js +171 -0
  51. package/dist/gc/ghost-anchor.js.map +1 -0
  52. package/dist/gc/index.d.ts +2 -0
  53. package/dist/gc/index.js +1 -0
  54. package/dist/gc/index.js.map +1 -1
  55. package/dist/gc/sweep.d.ts +1 -1
  56. package/dist/gc/sweep.js +13 -1
  57. package/dist/gc/sweep.js.map +1 -1
  58. package/dist/gc/types.d.ts +1 -1
  59. package/dist/hooks/bypass-detection.js +3 -2
  60. package/dist/hooks/bypass-detection.js.map +1 -1
  61. package/dist/hooks/defer.js +3 -2
  62. package/dist/hooks/defer.js.map +1 -1
  63. package/dist/hooks/ghost-backup.d.ts +37 -0
  64. package/dist/hooks/ghost-backup.js +82 -0
  65. package/dist/hooks/ghost-backup.js.map +1 -0
  66. package/dist/hooks/post-tool-use/allowlist-reader.js +2 -2
  67. package/dist/hooks/post-tool-use/allowlist-reader.js.map +1 -1
  68. package/dist/hooks/post-tool-use/ask-user-blocked.d.ts +1 -2
  69. package/dist/hooks/post-tool-use/ask-user-blocked.js +3 -4
  70. package/dist/hooks/post-tool-use/ask-user-blocked.js.map +1 -1
  71. package/dist/hooks/post-tool-use/citation-scanner.d.ts +9 -7
  72. package/dist/hooks/post-tool-use/citation-scanner.js +9 -14
  73. package/dist/hooks/post-tool-use/citation-scanner.js.map +1 -1
  74. package/dist/hooks/post-tool-use/legend-builder.d.ts +2 -2
  75. package/dist/hooks/post-tool-use/legend-builder.js +1 -19
  76. package/dist/hooks/post-tool-use/legend-builder.js.map +1 -1
  77. package/dist/hooks/post-tool-use/post-write.js +18 -1
  78. package/dist/hooks/post-tool-use/post-write.js.map +1 -1
  79. package/dist/hooks/post-tool-use/read-enricher.d.ts +2 -2
  80. package/dist/hooks/post-tool-use/read-enricher.js +4 -6
  81. package/dist/hooks/post-tool-use/read-enricher.js.map +1 -1
  82. package/dist/hooks/post-tool-use/sot-align.js +29 -3
  83. package/dist/hooks/post-tool-use/sot-align.js.map +1 -1
  84. package/dist/hooks/post-tool-use/write-guardian.d.ts +1 -5
  85. package/dist/hooks/post-tool-use/write-guardian.js +25 -18
  86. package/dist/hooks/post-tool-use/write-guardian.js.map +1 -1
  87. package/dist/hooks/runners/context-threshold.js +3 -3
  88. package/dist/hooks/runners/context-threshold.js.map +1 -1
  89. package/dist/hooks/runners/payload.js +2 -1
  90. package/dist/hooks/runners/payload.js.map +1 -1
  91. package/dist/hooks/runners/phase-ready-surface.js +3 -2
  92. package/dist/hooks/runners/phase-ready-surface.js.map +1 -1
  93. package/dist/hooks/runners/session-start.js +103 -4
  94. package/dist/hooks/runners/session-start.js.map +1 -1
  95. package/dist/hooks/runners/stop.js +46 -42
  96. package/dist/hooks/runners/stop.js.map +1 -1
  97. package/dist/hooks/runners/user-prompt-submit.d.ts +2 -2
  98. package/dist/hooks/runners/user-prompt-submit.js +4 -9
  99. package/dist/hooks/runners/user-prompt-submit.js.map +1 -1
  100. package/dist/hooks/seed-attested.js +3 -2
  101. package/dist/hooks/seed-attested.js.map +1 -1
  102. package/dist/index.d.ts +4 -0
  103. package/dist/index.js +3 -0
  104. package/dist/index.js.map +1 -1
  105. package/dist/init/baseline-audit.js +3 -3
  106. package/dist/init/baseline-audit.js.map +1 -1
  107. package/dist/init/claude-rule.js +13 -1
  108. package/dist/init/claude-rule.js.map +1 -1
  109. package/dist/init/curator/corpus.d.ts +1 -0
  110. package/dist/init/curator/corpus.js +6 -2
  111. package/dist/init/curator/corpus.js.map +1 -1
  112. package/dist/init/curator/emit.js +2 -3
  113. package/dist/init/curator/emit.js.map +1 -1
  114. package/dist/init/detect-components.d.ts +3 -2
  115. package/dist/init/detect-components.js +33 -15
  116. package/dist/init/detect-components.js.map +1 -1
  117. package/dist/init/detect.d.ts +1 -5
  118. package/dist/init/detect.js +157 -143
  119. package/dist/init/detect.js.map +1 -1
  120. package/dist/init/eta-calibration.js +2 -2
  121. package/dist/init/eta-calibration.js.map +1 -1
  122. package/dist/init/glob-inference.js +24 -0
  123. package/dist/init/glob-inference.js.map +1 -1
  124. package/dist/init/index.d.ts +4 -4
  125. package/dist/init/index.js +2 -2
  126. package/dist/init/index.js.map +1 -1
  127. package/dist/init/init.d.ts +8 -0
  128. package/dist/init/init.js +16 -20
  129. package/dist/init/init.js.map +1 -1
  130. package/dist/init/mapper-merge.d.ts +1 -4
  131. package/dist/init/mapper-merge.js +4 -17
  132. package/dist/init/mapper-merge.js.map +1 -1
  133. package/dist/init/mapper-parallel.js +1 -1
  134. package/dist/init/mapper-parallel.js.map +1 -1
  135. package/dist/init/mapper-prompts.d.ts +1 -23
  136. package/dist/init/mapper-prompts.js +1 -25
  137. package/dist/init/mapper-prompts.js.map +1 -1
  138. package/dist/init/mapper.d.ts +0 -6
  139. package/dist/init/mapper.js +2 -5
  140. package/dist/init/mapper.js.map +1 -1
  141. package/dist/init/module-slicer.js +3 -24
  142. package/dist/init/module-slicer.js.map +1 -1
  143. package/dist/init/multi-dev/install.js +24 -0
  144. package/dist/init/multi-dev/install.js.map +1 -1
  145. package/dist/init/overlay.js +5 -16
  146. package/dist/init/overlay.js.map +1 -1
  147. package/dist/init/phases/11-baseline.js +1 -1
  148. package/dist/init/phases/11-baseline.js.map +1 -1
  149. package/dist/init/phases/4-seed.js +7 -5
  150. package/dist/init/phases/4-seed.js.map +1 -1
  151. package/dist/init/phases/9a-walker.js +4 -0
  152. package/dist/init/phases/9a-walker.js.map +1 -1
  153. package/dist/init/phases/9b-curate.d.ts +1 -0
  154. package/dist/init/phases/9b-curate.js +6 -2
  155. package/dist/init/phases/9b-curate.js.map +1 -1
  156. package/dist/init/phases/9d-comp-walk.js +3 -3
  157. package/dist/init/phases/9d-comp-walk.js.map +1 -1
  158. package/dist/init/phases/9e-comp-annotate.js +63 -3
  159. package/dist/init/phases/9e-comp-annotate.js.map +1 -1
  160. package/dist/init/phases/index.d.ts +0 -1
  161. package/dist/init/phases/index.js +0 -1
  162. package/dist/init/phases/index.js.map +1 -1
  163. package/dist/init/phases/mapper-output-io.d.ts +1 -1
  164. package/dist/init/phases/mapper-output-io.js +3 -2
  165. package/dist/init/phases/mapper-output-io.js.map +1 -1
  166. package/dist/init/phases/state-io.d.ts +1 -1
  167. package/dist/init/phases/state-io.js +3 -2
  168. package/dist/init/phases/state-io.js.map +1 -1
  169. package/dist/init/phases/types.d.ts +20 -8
  170. package/dist/init/phases/types.js +0 -1
  171. package/dist/init/phases/types.js.map +1 -1
  172. package/dist/init/progress.d.ts +1 -0
  173. package/dist/init/progress.js +3 -1
  174. package/dist/init/progress.js.map +1 -1
  175. package/dist/init/rules-merge/ingest.js +3 -3
  176. package/dist/init/rules-merge/ingest.js.map +1 -1
  177. package/dist/init/seed.js +54 -5
  178. package/dist/init/seed.js.map +1 -1
  179. package/dist/init/source-comments/strip-replace.d.ts +1 -2
  180. package/dist/init/source-comments/strip-replace.js +19 -3
  181. package/dist/init/source-comments/strip-replace.js.map +1 -1
  182. package/dist/init/source-comments/walker.js +8 -79
  183. package/dist/init/source-comments/walker.js.map +1 -1
  184. package/dist/init/types.d.ts +8 -16
  185. package/dist/init/walker.d.ts +1 -1
  186. package/dist/init/walker.js +1 -1
  187. package/dist/join/index.d.ts +9 -0
  188. package/dist/join/index.js +82 -25
  189. package/dist/join/index.js.map +1 -1
  190. package/dist/lock.js +4 -3
  191. package/dist/lock.js.map +1 -1
  192. package/dist/mcp/bootstrap-guard.js +10 -1
  193. package/dist/mcp/bootstrap-guard.js.map +1 -1
  194. package/dist/mcp/schemas.d.ts +26 -4
  195. package/dist/mcp/schemas.js +23 -1
  196. package/dist/mcp/schemas.js.map +1 -1
  197. package/dist/mcp/serve.js +9 -0
  198. package/dist/mcp/serve.js.map +1 -1
  199. package/dist/mcp/server.js +3 -3
  200. package/dist/mcp/server.js.map +1 -1
  201. package/dist/mcp/telemetry.js +4 -3
  202. package/dist/mcp/telemetry.js.map +1 -1
  203. package/dist/mcp/tools/component-reconfirm.d.ts +7 -0
  204. package/dist/mcp/tools/component-reconfirm.js +39 -0
  205. package/dist/mcp/tools/component-reconfirm.js.map +1 -0
  206. package/dist/mcp/tools/component-register.d.ts +15 -0
  207. package/dist/mcp/tools/component-register.js +65 -0
  208. package/dist/mcp/tools/component-register.js.map +1 -0
  209. package/dist/mcp/tools/decision-get.js +2 -2
  210. package/dist/mcp/tools/decision-get.js.map +1 -1
  211. package/dist/mcp/tools/index.js +5 -6
  212. package/dist/mcp/tools/index.js.map +1 -1
  213. package/dist/mcp/tools/init-phases.d.ts +2 -0
  214. package/dist/mcp/tools/init-phases.js +21 -5
  215. package/dist/mcp/tools/init-phases.js.map +1 -1
  216. package/dist/mcp/tools/mission-advance.d.ts +3 -4
  217. package/dist/mcp/tools/mission-advance.js +15 -19
  218. package/dist/mcp/tools/mission-advance.js.map +1 -1
  219. package/dist/mcp/tools/mission-resume.js +3 -3
  220. package/dist/mcp/tools/mission-resume.js.map +1 -1
  221. package/dist/mcp/tools/record-decision.js +17 -9
  222. package/dist/mcp/tools/record-decision.js.map +1 -1
  223. package/dist/mcp/tools/resolve-attention.js +70 -34
  224. package/dist/mcp/tools/resolve-attention.js.map +1 -1
  225. package/dist/mcp/tools/resume.js +3 -2
  226. package/dist/mcp/tools/resume.js.map +1 -1
  227. package/dist/mcp/tools/search.js +2 -2
  228. package/dist/mcp/tools/search.js.map +1 -1
  229. package/dist/mcp/tools/task-complete.js +2 -3
  230. package/dist/mcp/tools/task-complete.js.map +1 -1
  231. package/dist/mcp/tools/task-create.js +2 -2
  232. package/dist/mcp/tools/task-create.js.map +1 -1
  233. package/dist/migrate/config-io.d.ts +24 -0
  234. package/dist/migrate/config-io.js +73 -0
  235. package/dist/migrate/config-io.js.map +1 -0
  236. package/dist/migrate/gitignore.d.ts +28 -0
  237. package/dist/migrate/gitignore.js +82 -0
  238. package/dist/migrate/gitignore.js.map +1 -0
  239. package/dist/migrate/index.d.ts +6 -0
  240. package/dist/migrate/index.js +6 -0
  241. package/dist/migrate/index.js.map +1 -0
  242. package/dist/migrate/migrations/0001-drop-dead-config-fields.d.ts +12 -0
  243. package/dist/migrate/migrations/0001-drop-dead-config-fields.js +39 -0
  244. package/dist/migrate/migrations/0001-drop-dead-config-fields.js.map +1 -0
  245. package/dist/migrate/migrations/0002-backfill-gitignore.d.ts +14 -0
  246. package/dist/migrate/migrations/0002-backfill-gitignore.js +40 -0
  247. package/dist/migrate/migrations/0002-backfill-gitignore.js.map +1 -0
  248. package/dist/migrate/registry.d.ts +9 -0
  249. package/dist/migrate/registry.js +11 -0
  250. package/dist/migrate/registry.js.map +1 -0
  251. package/dist/migrate/runner.d.ts +45 -0
  252. package/dist/migrate/runner.js +177 -0
  253. package/dist/migrate/runner.js.map +1 -0
  254. package/dist/migrate/semver.d.ts +11 -0
  255. package/dist/migrate/semver.js +35 -0
  256. package/dist/migrate/semver.js.map +1 -0
  257. package/dist/migrate/types.d.ts +47 -0
  258. package/dist/migrate/types.js +13 -0
  259. package/dist/migrate/types.js.map +1 -0
  260. package/dist/missions/task-link.js +7 -8
  261. package/dist/missions/task-link.js.map +1 -1
  262. package/dist/paths/index.d.ts +12 -1
  263. package/dist/paths/index.js +17 -3
  264. package/dist/paths/index.js.map +1 -1
  265. package/dist/sensors/catalog.js +6 -11
  266. package/dist/sensors/catalog.js.map +1 -1
  267. package/dist/sensors/decisions.js +55 -19
  268. package/dist/sensors/decisions.js.map +1 -1
  269. package/dist/sensors/diff.d.ts +12 -0
  270. package/dist/sensors/diff.js +103 -0
  271. package/dist/sensors/diff.js.map +1 -1
  272. package/dist/sensors/index.d.ts +4 -5
  273. package/dist/sensors/index.js +2 -3
  274. package/dist/sensors/index.js.map +1 -1
  275. package/dist/sensors/runner.d.ts +34 -37
  276. package/dist/sensors/runner.js +63 -53
  277. package/dist/sensors/runner.js.map +1 -1
  278. package/dist/sensors/stub-catalog.d.ts +6 -3
  279. package/dist/sensors/stub-catalog.js +7 -19
  280. package/dist/sensors/stub-catalog.js.map +1 -1
  281. package/dist/sensors/types.d.ts +11 -55
  282. package/dist/sensors/types.js +4 -8
  283. package/dist/sensors/types.js.map +1 -1
  284. package/dist/session-start/build.js +36 -21
  285. package/dist/session-start/build.js.map +1 -1
  286. package/dist/session-start/templates.d.ts +1 -1
  287. package/dist/session-start/templates.js +1 -1
  288. package/dist/status-line/event-queue.js +2 -1
  289. package/dist/status-line/event-queue.js.map +1 -1
  290. package/dist/status-line/reader.js +5 -5
  291. package/dist/status-line/reader.js.map +1 -1
  292. package/dist/status-line/writer.js +2 -1
  293. package/dist/status-line/writer.js.map +1 -1
  294. package/dist/tasks/lifecycle.d.ts +3 -4
  295. package/dist/tasks/lifecycle.js +19 -21
  296. package/dist/tasks/lifecycle.js.map +1 -1
  297. package/dist/trace/index.js +2 -2
  298. package/dist/trace/index.js.map +1 -1
  299. package/dist/update-check.d.ts +28 -0
  300. package/dist/update-check.js +137 -0
  301. package/dist/update-check.js.map +1 -0
  302. package/package.json +2 -2
  303. package/templates/.cairn/git-hooks/commit-msg +33 -5
  304. package/templates/.cairn/git-hooks/post-commit +13 -3
  305. package/templates/.cairn/git-hooks/pre-commit +48 -22
  306. package/templates/.github/workflows/cairn-check.yml +8 -0
  307. package/dist/attention/bulk-accept.d.ts +0 -78
  308. package/dist/attention/bulk-accept.js +0 -348
  309. package/dist/attention/bulk-accept.js.map +0 -1
  310. package/dist/attention/serve/api.d.ts +0 -24
  311. package/dist/attention/serve/api.js +0 -383
  312. package/dist/attention/serve/api.js.map +0 -1
  313. package/dist/attention/serve/index.d.ts +0 -63
  314. package/dist/attention/serve/index.js +0 -219
  315. package/dist/attention/serve/index.js.map +0 -1
  316. package/dist/hooks/read-enrich.d.ts +0 -6
  317. package/dist/hooks/read-enrich.js +0 -11
  318. package/dist/hooks/read-enrich.js.map +0 -1
  319. package/dist/hooks/write-guard.d.ts +0 -6
  320. package/dist/hooks/write-guard.js +0 -11
  321. package/dist/hooks/write-guard.js.map +0 -1
  322. package/dist/init/phases/12-strip.d.ts +0 -10
  323. package/dist/init/phases/12-strip.js +0 -88
  324. package/dist/init/phases/12-strip.js.map +0 -1
  325. package/dist/mcp/tools/attention-serve.d.ts +0 -23
  326. package/dist/mcp/tools/attention-serve.js +0 -84
  327. package/dist/mcp/tools/attention-serve.js.map +0 -1
  328. package/dist/mcp/tools/attention-wait.d.ts +0 -18
  329. package/dist/mcp/tools/attention-wait.js +0 -84
  330. package/dist/mcp/tools/attention-wait.js.map +0 -1
  331. package/dist/mcp/tools/bulk-accept-attention.d.ts +0 -22
  332. package/dist/mcp/tools/bulk-accept-attention.js +0 -84
  333. package/dist/mcp/tools/bulk-accept-attention.js.map +0 -1
  334. package/dist/sensors/attestation.d.ts +0 -44
  335. package/dist/sensors/attestation.js +0 -262
  336. package/dist/sensors/attestation.js.map +0 -1
@@ -1,13 +1,12 @@
1
- export type { Attestation, AttestationDelivered, AttestationDeferred, DiffEntry, ProjectGlobs, SensorFinding, SensorInput, SensorLanguage, SensorResult, SensorSweepResult, StubCatalog, StubPattern, } from "./types.js";
2
- export { getDiff, diffHasGlobMatch, filterDiffByGlobs } from "./diff.js";
1
+ export type { DiffEntry, ProjectGlobs, SensorFinding, SensorLanguage, SensorResult, SensorSweepResult, StubCatalog, StubPattern, } from "./types.js";
2
+ export { getDiff, getStagedDiff, getRangeDiff, diffHasGlobMatch, filterDiffByGlobs, } from "./diff.js";
3
3
  export { loadStubCatalog, parseStubCatalog, loadSensorRegistry } from "./catalog.js";
4
4
  export type { SensorRegistry, SensorRegistryEntry } from "./catalog.js";
5
5
  export { detectStubMatches, runStubCatalog, detectLanguage } from "./stub-catalog.js";
6
6
  export type { StubMatch } from "./stub-catalog.js";
7
- export { extractAttestation, runAttestationCrossCheck, } from "./attestation.js";
8
7
  export { runRouteHandlerNonEmpty, runDtoNoFakeFields, } from "./structural.js";
9
8
  export { loadAcceptedDecisions, decisionsInScope, listMirrorFiles, runDecisionAssertions, } from "./decisions.js";
10
9
  export { formatRemediation } from "./remediation.js";
11
10
  export type { RemediationOptions } from "./remediation.js";
12
- export { runSensors } from "./runner.js";
13
- export type { RunSensorsArgs } from "./runner.js";
11
+ export { runSensorsOnDiff, loadProjectGlobs } from "./runner.js";
12
+ export type { RunSensorsOnDiffArgs } from "./runner.js";
@@ -1,9 +1,8 @@
1
- export { getDiff, diffHasGlobMatch, filterDiffByGlobs } from "./diff.js";
1
+ export { getDiff, getStagedDiff, getRangeDiff, diffHasGlobMatch, filterDiffByGlobs, } from "./diff.js";
2
2
  export { loadStubCatalog, parseStubCatalog, loadSensorRegistry } from "./catalog.js";
3
3
  export { detectStubMatches, runStubCatalog, detectLanguage } from "./stub-catalog.js";
4
- export { extractAttestation, runAttestationCrossCheck, } from "./attestation.js";
5
4
  export { runRouteHandlerNonEmpty, runDtoNoFakeFields, } from "./structural.js";
6
5
  export { loadAcceptedDecisions, decisionsInScope, listMirrorFiles, runDecisionAssertions, } from "./decisions.js";
7
6
  export { formatRemediation } from "./remediation.js";
8
- export { runSensors } from "./runner.js";
7
+ export { runSensorsOnDiff, loadProjectGlobs } from "./runner.js";
9
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sensors/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAErF,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEtF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sensors/index.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,OAAO,EACP,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAErF,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEtF,OAAO,EACL,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
@@ -1,44 +1,41 @@
1
1
  /**
2
- * Sensor runnerorchestrator-facing entry point.
2
+ * Sensor sweepthe live enforcement entry point.
3
3
  *
4
- * Composes Layer A + Layer B + Layer C + decision-assertions into a single
5
- * sweep. Returns the aggregated result + the remediation prompt body the
6
- * orchestrator feeds back to the agent on retry.
4
+ * Composes the sensors that actually have teeth into one diff-scoped sweep:
5
+ * - Layer A stub-pattern catalog (mechanical debt regex)
6
+ * - Layer C generic structural sensors (route handlers, DTOs)
7
+ * - decision-assertions — "was the in-scope DEC honored?"
7
8
  *
8
- * Phase 9 wires the implementer-side stack only. SessionStart Drain (reviewer subagent)
9
- * is Phase 10; Layer E (high-stakes E2E) and U (UAT) are Phases 11+. Soft
10
- * findings emitted here are intentionally surfaced for those later layers
11
- * to consume.
9
+ * Runs at the real gates: pre-commit (staged diff), CI (`--diff` range), and
10
+ * advisory at the Stop hook (working-tree diff). The diff + repoRoot are the
11
+ * only inputs there is no mirror checkout or orchestrator runtime.
12
+ *
13
+ * Layer-B attestation cross-check was removed: it depended on an
14
+ * agent-emitted attestation block that no production path produced, so it
15
+ * never ran. Project-specific "proposed sensors" were likewise never wired
16
+ * to an executor and have been dropped.
12
17
  */
13
- import type { Attestation, ProjectGlobs, SensorLanguage, SensorSweepResult } from "./types.js";
14
- export interface RunSensorsArgs {
15
- /** Mirror checkout where the agent worked. */
16
- mirrorPath: string;
17
- /** SHA pin captured at workspace prep. */
18
- shaPin: string;
19
- /** Final assistant text, used to extract the attestation block. */
20
- finalAssistantText?: string;
21
- /** Languages active for this profile (filters Layer A patterns). */
22
- languages: SensorLanguage[];
23
- /** Project-block globs from workflow.md. */
24
- projectGlobs: ProjectGlobs;
25
- /** Run id used in log lines. */
26
- runId: string;
27
- /** Number of this attempt (1 = first run, 2 = first retry). */
28
- attempt: number;
29
- /** Max attempts the orchestrator will allow. */
30
- maxAttempts: number;
31
- /**
32
- * Optional pre-extracted attestation. Useful for tests / smokes that
33
- * inject the attestation directly without going through the assistant
34
- * stream. When supplied, finalAssistantText is ignored for extraction.
35
- */
36
- attestation?: Attestation;
18
+ import type { DiffEntry, ProjectGlobs, SensorLanguage, SensorSweepResult } from "./types.js";
19
+ export interface RunSensorsOnDiffArgs {
20
+ /** Repo root decisions, stub catalog, and config are read from here. */
21
+ repoRoot: string;
22
+ /** Files changed in this diff, content already loaded. */
23
+ diff: DiffEntry[];
24
+ /** Languages to filter Layer A patterns. Omit = scan all known languages. */
25
+ languages?: SensorLanguage[];
26
+ /** Route/DTO globs. Omit = loaded from `.cairn/config.yaml`. */
27
+ projectGlobs?: ProjectGlobs;
28
+ /** Label for log lines (e.g. the gate name). */
29
+ runId?: string;
30
+ /** Retry context for the remediation prompt. Defaults to a single 1/1 pass. */
31
+ attempt?: number;
32
+ maxAttempts?: number;
37
33
  }
38
34
  /**
39
- * Run all sensors for a finished implementer run. Returns:
40
- * - per-sensor results (with `ok` + findings)
41
- * - aggregate `ok` (false if any hard failure)
42
- * - remediation prompt body for the next retry (empty string on success)
35
+ * Run the live sensor sweep over a diff. Returns per-sensor results, the
36
+ * aggregate `ok` (false on any hard failure), and a remediation prompt body
37
+ * the caller can surface to the agent.
43
38
  */
44
- export declare function runSensors(args: RunSensorsArgs): Promise<SensorSweepResult>;
39
+ export declare function runSensorsOnDiff(args: RunSensorsOnDiffArgs): Promise<SensorSweepResult>;
40
+ /** Read route/DTO/high-stakes globs from `.cairn/config.yaml`. */
41
+ export declare function loadProjectGlobs(repoRoot: string): ProjectGlobs;
@@ -1,78 +1,60 @@
1
1
  /**
2
- * Sensor runnerorchestrator-facing entry point.
2
+ * Sensor sweepthe live enforcement entry point.
3
3
  *
4
- * Composes Layer A + Layer B + Layer C + decision-assertions into a single
5
- * sweep. Returns the aggregated result + the remediation prompt body the
6
- * orchestrator feeds back to the agent on retry.
4
+ * Composes the sensors that actually have teeth into one diff-scoped sweep:
5
+ * - Layer A stub-pattern catalog (mechanical debt regex)
6
+ * - Layer C generic structural sensors (route handlers, DTOs)
7
+ * - decision-assertions — "was the in-scope DEC honored?"
7
8
  *
8
- * Phase 9 wires the implementer-side stack only. SessionStart Drain (reviewer subagent)
9
- * is Phase 10; Layer E (high-stakes E2E) and U (UAT) are Phases 11+. Soft
10
- * findings emitted here are intentionally surfaced for those later layers
11
- * to consume.
9
+ * Runs at the real gates: pre-commit (staged diff), CI (`--diff` range), and
10
+ * advisory at the Stop hook (working-tree diff). The diff + repoRoot are the
11
+ * only inputs there is no mirror checkout or orchestrator runtime.
12
+ *
13
+ * Layer-B attestation cross-check was removed: it depended on an
14
+ * agent-emitted attestation block that no production path produced, so it
15
+ * never ran. Project-specific "proposed sensors" were likewise never wired
16
+ * to an executor and have been dropped.
12
17
  */
13
18
  import { logger } from "../logger.js";
14
- import { decisionsInScope, loadAcceptedDecisions, runDecisionAssertions } from "./decisions.js";
15
- import { extractAttestation, runAttestationCrossCheck } from "./attestation.js";
16
- import { getDiff } from "./diff.js";
19
+ import { loadCairnConfig } from "@isaacriehm/cairn-state";
20
+ import { decisionsInScope, loadAcceptedDecisions, runDecisionAssertions, } from "./decisions.js";
17
21
  import { loadStubCatalog } from "./catalog.js";
18
22
  import { formatRemediation } from "./remediation.js";
19
23
  import { runStubCatalog } from "./stub-catalog.js";
20
24
  import { runDtoNoFakeFields, runRouteHandlerNonEmpty } from "./structural.js";
21
25
  const log = logger("sensors.runner");
22
26
  /**
23
- * Run all sensors for a finished implementer run. Returns:
24
- * - per-sensor results (with `ok` + findings)
25
- * - aggregate `ok` (false if any hard failure)
26
- * - remediation prompt body for the next retry (empty string on success)
27
+ * Run the live sensor sweep over a diff. Returns per-sensor results, the
28
+ * aggregate `ok` (false on any hard failure), and a remediation prompt body
29
+ * the caller can surface to the agent.
27
30
  */
28
- export async function runSensors(args) {
31
+ export async function runSensorsOnDiff(args) {
29
32
  const startedAt = Date.now();
30
- const diff = await getDiff({ mirrorPath: args.mirrorPath, shaPin: args.shaPin });
31
- const stubCatalog = loadStubCatalog(args.mirrorPath);
32
- const acceptedDecisions = loadAcceptedDecisions(args.mirrorPath);
33
+ const { repoRoot, diff } = args;
34
+ const projectGlobs = args.projectGlobs ?? loadProjectGlobs(repoRoot);
35
+ const stubCatalog = loadStubCatalog(repoRoot);
36
+ const acceptedDecisions = loadAcceptedDecisions(repoRoot);
33
37
  const inScope = decisionsInScope(acceptedDecisions, diff);
34
- const attestation = args.attestation ?? extractAttestation(args.finalAssistantText ?? "");
35
- const results = [];
36
- // Layer A stub-pattern catalog.
37
- results.push(runStubCatalog({
38
- diff,
39
- catalog: stubCatalog,
40
- languages: args.languages,
41
- }));
42
- // Layer B — attestation cross-check.
43
- results.push(runAttestationCrossCheck({
44
- attestation,
45
- diff,
46
- stubCatalog,
47
- ignoreGlobs: [".cairn/runs/active/**", ".cairn/inbox/processed/**"],
48
- }));
49
- // Layer C — generic structural sensors.
50
- results.push(runRouteHandlerNonEmpty({
51
- diff,
52
- globs: args.projectGlobs.route_handler_globs,
53
- }));
54
- results.push(runDtoNoFakeFields({
55
- diff,
56
- globs: args.projectGlobs.dto_globs,
57
- }));
58
- // Decision-assertions.
59
- results.push(runDecisionAssertions({
60
- mirrorPath: args.mirrorPath,
61
- diff,
62
- decisions: inScope,
63
- }));
38
+ const results = [
39
+ // Layer A — stub-pattern catalog.
40
+ runStubCatalog({ diff, catalog: stubCatalog, languages: args.languages }),
41
+ // Layer C — generic structural sensors.
42
+ runRouteHandlerNonEmpty({ diff, globs: projectGlobs.route_handler_globs }),
43
+ runDtoNoFakeFields({ diff, globs: projectGlobs.dto_globs }),
44
+ // Decision-assertions — the core value prop.
45
+ runDecisionAssertions({ mirrorPath: repoRoot, diff, decisions: inScope }),
46
+ ];
64
47
  const hard_failures = results.filter((r) => !r.ok).length;
65
48
  const soft_findings = results.reduce((n, r) => n + r.findings.filter((f) => f.severity === "soft").length, 0);
66
49
  const ok = hard_failures === 0;
67
50
  const remediation_prompt = ok
68
51
  ? ""
69
52
  : formatRemediation(results, {
70
- attempt: args.attempt,
71
- maxAttempts: args.maxAttempts,
53
+ attempt: args.attempt ?? 1,
54
+ maxAttempts: args.maxAttempts ?? 1,
72
55
  });
73
56
  log.info({
74
- run_id: args.runId,
75
- attempt: args.attempt,
57
+ run_id: args.runId ?? "sensor-sweep",
76
58
  ok,
77
59
  hard_failures,
78
60
  soft_findings,
@@ -92,4 +74,32 @@ export async function runSensors(args) {
92
74
  duration_ms: Date.now() - startedAt,
93
75
  };
94
76
  }
77
+ /** Read route/DTO/high-stakes globs from `.cairn/config.yaml`. */
78
+ export function loadProjectGlobs(repoRoot) {
79
+ const cfg = loadCairnConfig(repoRoot);
80
+ const out = {};
81
+ const asStrings = (v) => Array.isArray(v) ? v.filter((x) => typeof x === "string") : undefined;
82
+ const pg = cfg["project_globs"];
83
+ if (typeof pg === "object" && pg !== null) {
84
+ const p = pg;
85
+ const rh = asStrings(p["route_handler_globs"]);
86
+ if (rh)
87
+ out.route_handler_globs = rh;
88
+ const dto = asStrings(p["dto_globs"]);
89
+ if (dto)
90
+ out.dto_globs = dto;
91
+ const gen = asStrings(p["generator_source_globs"]);
92
+ if (gen)
93
+ out.generator_source_globs = gen;
94
+ const hs = asStrings(p["high_stakes_globs"]);
95
+ if (hs)
96
+ out.high_stakes_globs = hs;
97
+ }
98
+ if (out.high_stakes_globs === undefined) {
99
+ const topHs = asStrings(cfg["high_stakes_globs"]);
100
+ if (topHs)
101
+ out.high_stakes_globs = topHs;
102
+ }
103
+ return out;
104
+ }
95
105
  //# sourceMappingURL=runner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/sensors/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/sensors/runner.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,10 @@
8
8
  * Layer A mechanical stub-pattern catalog. Catalog grows additively via /oops dialog.
9
9
  */
10
10
  import type { DiffEntry, SensorLanguage, SensorResult, StubCatalog } from "./types.js";
11
- /** Detect language from extension. Returns undefined for binaries / unknown. */
11
+ /**
12
+ * Detect sensor language from extension via the shared `languages.ts` profile
13
+ * table (single source of truth). Returns undefined for binaries / unknown.
14
+ */
12
15
  export declare function detectLanguage(path: string): SensorLanguage | undefined;
13
16
  /** A single stub-pattern regex match found inside the diff. */
14
17
  export interface StubMatch {
@@ -32,9 +35,9 @@ export declare function detectStubMatches(args: {
32
35
  languages: readonly SensorLanguage[] | undefined;
33
36
  }): StubMatch[];
34
37
  /** Convert a character offset within `text` to a 1-based line number. */
35
- /** Run the Layer A sensor against a diff. */
38
+ /** Run the Layer A sensor against a diff. `languages: undefined` = all. */
36
39
  export declare function runStubCatalog(args: {
37
40
  diff: DiffEntry[];
38
41
  catalog: StubCatalog;
39
- languages: readonly SensorLanguage[];
42
+ languages: readonly SensorLanguage[] | undefined;
40
43
  }): SensorResult;
@@ -7,26 +7,14 @@
7
7
  *
8
8
  * Layer A mechanical stub-pattern catalog. Catalog grows additively via /oops dialog.
9
9
  */
10
- import { lineOf, matchAnyGlob } from "@isaacriehm/cairn-state";
10
+ import { lineOf, matchAnyGlob, sensorLangForFile } from "@isaacriehm/cairn-state";
11
11
  const SENSOR_ID = "stub-pattern-catalog";
12
- /** Detect language from extension. Returns undefined for binaries / unknown. */
12
+ /**
13
+ * Detect sensor language from extension via the shared `languages.ts` profile
14
+ * table (single source of truth). Returns undefined for binaries / unknown.
15
+ */
13
16
  export function detectLanguage(path) {
14
- const lower = path.toLowerCase();
15
- if (lower.endsWith(".ts") || lower.endsWith(".tsx") || lower.endsWith(".cts") || lower.endsWith(".mts"))
16
- return "typescript";
17
- if (lower.endsWith(".js") || lower.endsWith(".jsx") || lower.endsWith(".cjs") || lower.endsWith(".mjs"))
18
- return "javascript";
19
- if (lower.endsWith(".py"))
20
- return "python";
21
- if (lower.endsWith(".rb"))
22
- return "ruby";
23
- if (lower.endsWith(".go"))
24
- return "go";
25
- if (lower.endsWith(".rs"))
26
- return "rust";
27
- if (lower.endsWith(".sql"))
28
- return "sql";
29
- return undefined;
17
+ return sensorLangForFile(path);
30
18
  }
31
19
  /**
32
20
  * Walk the diff and emit a match for every regex hit on lines that were
@@ -98,7 +86,7 @@ export function detectStubMatches(args) {
98
86
  return out;
99
87
  }
100
88
  /** Convert a character offset within `text` to a 1-based line number. */
101
- /** Run the Layer A sensor against a diff. */
89
+ /** Run the Layer A sensor against a diff. `languages: undefined` = all. */
102
90
  export function runStubCatalog(args) {
103
91
  const startedAt = Date.now();
104
92
  const matches = detectStubMatches({
@@ -1 +1 @@
1
- {"version":3,"file":"stub-catalog.js","sourceRoot":"","sources":["../../src/sensors/stub-catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stub-catalog.js","sourceRoot":"","sources":["../../src/sensors/stub-catalog.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,10 @@
1
1
  /**
2
- * Sensor types — Phase 9 honest-agent invariants stack.
2
+ * Sensor types — honest-agent invariants stack.
3
3
  *
4
- * Sensors run after the implementer agent finishes. Each sensor reads a
5
- * `SensorInput` (diff + attestation + decisions + project block) and emits
6
- * `SensorFinding[]`. The orchestrator collects every sensor's `SensorResult`,
7
- * builds a remediation prompt from any findings, and either passes the run
8
- * through or feeds the prompt back to the agent for retry.
9
- *
10
- * Sensors follow the remediation-prompt pattern: failure messages are consumed by the agent on retry.
4
+ * Each sensor reads a diff (+ decisions + project globs) and emits
5
+ * `SensorFinding[]`. The sweep runner collects every sensor's `SensorResult`,
6
+ * aggregates `ok`, and builds a remediation prompt from any hard findings.
11
7
  */
12
- import type { DecisionFrontmatter } from "@isaacriehm/cairn-state";
13
8
  /** A single file changed in this run. */
14
9
  export interface DiffEntry {
15
10
  /** Repo-relative path. */
@@ -22,8 +17,13 @@ export interface DiffEntry {
22
17
  /** Original path when status === "renamed". */
23
18
  fromPath?: string;
24
19
  }
25
- /** Languages used to filter Layer A patterns + AST assertions. */
26
- export type SensorLanguage = "typescript" | "javascript" | "python" | "ruby" | "go" | "rust" | "sql";
20
+ /**
21
+ * Language tag used to filter Layer A patterns + AST assertions. OPEN string
22
+ * equal to a `languages.ts` profile id — the registry is the single source,
23
+ * so a new language is filterable just by living in the table. Common values:
24
+ * typescript, javascript, python, ruby, go, rust, sql.
25
+ */
26
+ export type SensorLanguage = string;
27
27
  /** One pattern entry from .cairn/config/stub-patterns.yaml. */
28
28
  export interface StubPattern {
29
29
  id: string;
@@ -56,30 +56,6 @@ export interface StubCatalog {
56
56
  version: number;
57
57
  patterns: StubPattern[];
58
58
  }
59
- /** YAML block the agent emits at end of turn. */
60
- export interface AttestationDelivered {
61
- symbol: string;
62
- path?: string;
63
- behavior: "full" | "partial" | "scaffolded";
64
- sensors_passed?: string[];
65
- }
66
- export interface AttestationDeferred {
67
- symbol: string;
68
- reason: string;
69
- }
70
- export interface Attestation {
71
- delivered: AttestationDelivered[];
72
- deferred: AttestationDeferred[];
73
- known_limitations: string[];
74
- todos_introduced: number;
75
- stubs_introduced: number;
76
- files_touched: string[];
77
- /** Set when the agent could not proceed; runner reports it as soft finding. */
78
- blocked_by?: {
79
- reason: string;
80
- needed_from_operator?: string;
81
- };
82
- }
83
59
  /**
84
60
  * Project-extension block resolved from workflow.md `<project>:` extension.
85
61
  * Sensors that trigger on `glob_keys` look up the matching key here.
@@ -93,26 +69,6 @@ export interface ProjectGlobs {
93
69
  off_limits?: string[];
94
70
  [key: string]: string[] | undefined;
95
71
  }
96
- export interface SensorInput {
97
- /** Absolute path to the mirror checkout. */
98
- mirrorPath: string;
99
- /** origin/main SHA pinned at workspace prep. */
100
- shaPin: string;
101
- /** Files changed in this run, content already loaded. */
102
- changedFiles: DiffEntry[];
103
- /** Parsed attestation; undefined if the agent emitted none (Layer B fails). */
104
- attestation: Attestation | undefined;
105
- /** Decisions accepted in scope of this diff. Already filtered. */
106
- decisionsInScope: DecisionFrontmatter[];
107
- /** Layer A catalog. */
108
- stubCatalog: StubCatalog;
109
- /** Stack profile language list — pattern filtering. */
110
- languages: SensorLanguage[];
111
- /** Project-extension globs. */
112
- projectGlobs: ProjectGlobs;
113
- /** Run id used in log lines. */
114
- runId: string;
115
- }
116
72
  export interface SensorFinding {
117
73
  /** id from sensors.yaml — e.g., "stub-pattern-catalog". */
118
74
  sensor_id: string;
@@ -1,13 +1,9 @@
1
1
  /**
2
- * Sensor types — Phase 9 honest-agent invariants stack.
2
+ * Sensor types — honest-agent invariants stack.
3
3
  *
4
- * Sensors run after the implementer agent finishes. Each sensor reads a
5
- * `SensorInput` (diff + attestation + decisions + project block) and emits
6
- * `SensorFinding[]`. The orchestrator collects every sensor's `SensorResult`,
7
- * builds a remediation prompt from any findings, and either passes the run
8
- * through or feeds the prompt back to the agent for retry.
9
- *
10
- * Sensors follow the remediation-prompt pattern: failure messages are consumed by the agent on retry.
4
+ * Each sensor reads a diff (+ decisions + project globs) and emits
5
+ * `SensorFinding[]`. The sweep runner collects every sensor's `SensorResult`,
6
+ * aggregates `ok`, and builds a remediation prompt from any hard findings.
11
7
  */
12
8
  export {};
13
9
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sensors/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sensors/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}