@isaacriehm/cairn 0.1.0 → 0.1.3

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 (533) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/index.d.ts +0 -1
  3. package/dist/index.js +0 -1
  4. package/dist/index.js.map +1 -1
  5. package/package.json +4 -4
  6. package/dist/backprop/id.d.ts +0 -14
  7. package/dist/backprop/id.js +0 -40
  8. package/dist/backprop/id.js.map +0 -1
  9. package/dist/backprop/index.d.ts +0 -23
  10. package/dist/backprop/index.js +0 -21
  11. package/dist/backprop/index.js.map +0 -1
  12. package/dist/backprop/prompt.d.ts +0 -16
  13. package/dist/backprop/prompt.js +0 -101
  14. package/dist/backprop/prompt.js.map +0 -1
  15. package/dist/backprop/runner.d.ts +0 -18
  16. package/dist/backprop/runner.js +0 -95
  17. package/dist/backprop/runner.js.map +0 -1
  18. package/dist/backprop/schema.d.ts +0 -61
  19. package/dist/backprop/schema.js +0 -55
  20. package/dist/backprop/schema.js.map +0 -1
  21. package/dist/backprop/types.d.ts +0 -101
  22. package/dist/backprop/types.js +0 -24
  23. package/dist/backprop/types.js.map +0 -1
  24. package/dist/backprop/writer.d.ts +0 -27
  25. package/dist/backprop/writer.js +0 -301
  26. package/dist/backprop/writer.js.map +0 -1
  27. package/dist/claude/error.d.ts +0 -33
  28. package/dist/claude/error.js +0 -58
  29. package/dist/claude/error.js.map +0 -1
  30. package/dist/claude/index.d.ts +0 -3
  31. package/dist/claude/index.js +0 -3
  32. package/dist/claude/index.js.map +0 -1
  33. package/dist/claude/runner.d.ts +0 -11
  34. package/dist/claude/runner.js +0 -132
  35. package/dist/claude/runner.js.map +0 -1
  36. package/dist/claude/types.d.ts +0 -52
  37. package/dist/claude/types.js +0 -14
  38. package/dist/claude/types.js.map +0 -1
  39. package/dist/cli/daemon.d.ts +0 -54
  40. package/dist/cli/daemon.js +0 -351
  41. package/dist/cli/daemon.js.map +0 -1
  42. package/dist/cli/install.d.ts +0 -52
  43. package/dist/cli/install.js +0 -308
  44. package/dist/cli/install.js.map +0 -1
  45. package/dist/cli/mirror.d.ts +0 -1
  46. package/dist/cli/mirror.js +0 -97
  47. package/dist/cli/mirror.js.map +0 -1
  48. package/dist/cli/run.d.ts +0 -1
  49. package/dist/cli/run.js +0 -174
  50. package/dist/cli/run.js.map +0 -1
  51. package/dist/cli/task.d.ts +0 -18
  52. package/dist/cli/task.js +0 -137
  53. package/dist/cli/task.js.map +0 -1
  54. package/dist/cli/watch.d.ts +0 -1
  55. package/dist/cli/watch.js +0 -73
  56. package/dist/cli/watch.js.map +0 -1
  57. package/dist/decision-capture/capture.d.ts +0 -57
  58. package/dist/decision-capture/capture.js +0 -186
  59. package/dist/decision-capture/capture.js.map +0 -1
  60. package/dist/decision-capture/extractor.d.ts +0 -20
  61. package/dist/decision-capture/extractor.js +0 -103
  62. package/dist/decision-capture/extractor.js.map +0 -1
  63. package/dist/decision-capture/id.d.ts +0 -14
  64. package/dist/decision-capture/id.js +0 -44
  65. package/dist/decision-capture/id.js.map +0 -1
  66. package/dist/decision-capture/index.d.ts +0 -25
  67. package/dist/decision-capture/index.js +0 -21
  68. package/dist/decision-capture/index.js.map +0 -1
  69. package/dist/decision-capture/prompt.d.ts +0 -15
  70. package/dist/decision-capture/prompt.js +0 -68
  71. package/dist/decision-capture/prompt.js.map +0 -1
  72. package/dist/decision-capture/refinement-prompt.d.ts +0 -25
  73. package/dist/decision-capture/refinement-prompt.js +0 -146
  74. package/dist/decision-capture/refinement-prompt.js.map +0 -1
  75. package/dist/decision-capture/refinement-schema.d.ts +0 -52
  76. package/dist/decision-capture/refinement-schema.js +0 -61
  77. package/dist/decision-capture/refinement-schema.js.map +0 -1
  78. package/dist/decision-capture/refinement.d.ts +0 -60
  79. package/dist/decision-capture/refinement.js +0 -439
  80. package/dist/decision-capture/refinement.js.map +0 -1
  81. package/dist/decision-capture/schema.d.ts +0 -70
  82. package/dist/decision-capture/schema.js +0 -71
  83. package/dist/decision-capture/schema.js.map +0 -1
  84. package/dist/decision-capture/types.d.ts +0 -201
  85. package/dist/decision-capture/types.js +0 -20
  86. package/dist/decision-capture/types.js.map +0 -1
  87. package/dist/decision-capture/writer.d.ts +0 -90
  88. package/dist/decision-capture/writer.js +0 -267
  89. package/dist/decision-capture/writer.js.map +0 -1
  90. package/dist/frontend/discord/acl.d.ts +0 -6
  91. package/dist/frontend/discord/acl.js +0 -19
  92. package/dist/frontend/discord/acl.js.map +0 -1
  93. package/dist/frontend/discord/channels.d.ts +0 -29
  94. package/dist/frontend/discord/channels.js +0 -58
  95. package/dist/frontend/discord/channels.js.map +0 -1
  96. package/dist/frontend/discord/classifier.d.ts +0 -16
  97. package/dist/frontend/discord/classifier.js +0 -29
  98. package/dist/frontend/discord/classifier.js.map +0 -1
  99. package/dist/frontend/discord/index.d.ts +0 -118
  100. package/dist/frontend/discord/index.js +0 -1104
  101. package/dist/frontend/discord/index.js.map +0 -1
  102. package/dist/frontend/discord/slash.d.ts +0 -18
  103. package/dist/frontend/discord/slash.js +0 -90
  104. package/dist/frontend/discord/slash.js.map +0 -1
  105. package/dist/frontend/inbox.d.ts +0 -17
  106. package/dist/frontend/inbox.js +0 -30
  107. package/dist/frontend/inbox.js.map +0 -1
  108. package/dist/frontend/index.d.ts +0 -8
  109. package/dist/frontend/index.js +0 -6
  110. package/dist/frontend/index.js.map +0 -1
  111. package/dist/frontend/stub/index.d.ts +0 -58
  112. package/dist/frontend/stub/index.js +0 -144
  113. package/dist/frontend/stub/index.js.map +0 -1
  114. package/dist/frontend/types.d.ts +0 -247
  115. package/dist/frontend/types.js +0 -15
  116. package/dist/frontend/types.js.map +0 -1
  117. package/dist/gc/apply.d.ts +0 -26
  118. package/dist/gc/apply.js +0 -48
  119. package/dist/gc/apply.js.map +0 -1
  120. package/dist/gc/canary.d.ts +0 -42
  121. package/dist/gc/canary.js +0 -134
  122. package/dist/gc/canary.js.map +0 -1
  123. package/dist/gc/classify.d.ts +0 -25
  124. package/dist/gc/classify.js +0 -89
  125. package/dist/gc/classify.js.map +0 -1
  126. package/dist/gc/doc-gardening.d.ts +0 -29
  127. package/dist/gc/doc-gardening.js +0 -146
  128. package/dist/gc/doc-gardening.js.map +0 -1
  129. package/dist/gc/frontmatter.d.ts +0 -35
  130. package/dist/gc/frontmatter.js +0 -111
  131. package/dist/gc/frontmatter.js.map +0 -1
  132. package/dist/gc/generator-drift.d.ts +0 -28
  133. package/dist/gc/generator-drift.js +0 -53
  134. package/dist/gc/generator-drift.js.map +0 -1
  135. package/dist/gc/index.d.ts +0 -35
  136. package/dist/gc/index.js +0 -26
  137. package/dist/gc/index.js.map +0 -1
  138. package/dist/gc/quality-update.d.ts +0 -23
  139. package/dist/gc/quality-update.js +0 -69
  140. package/dist/gc/quality-update.js.map +0 -1
  141. package/dist/gc/stub-hits.d.ts +0 -31
  142. package/dist/gc/stub-hits.js +0 -125
  143. package/dist/gc/stub-hits.js.map +0 -1
  144. package/dist/gc/sweep.d.ts +0 -56
  145. package/dist/gc/sweep.js +0 -178
  146. package/dist/gc/sweep.js.map +0 -1
  147. package/dist/gc/types.d.ts +0 -129
  148. package/dist/gc/types.js +0 -26
  149. package/dist/gc/types.js.map +0 -1
  150. package/dist/ground/drift.d.ts +0 -8
  151. package/dist/ground/drift.js +0 -23
  152. package/dist/ground/drift.js.map +0 -1
  153. package/dist/ground/frontmatter.d.ts +0 -20
  154. package/dist/ground/frontmatter.js +0 -49
  155. package/dist/ground/frontmatter.js.map +0 -1
  156. package/dist/ground/glob.d.ts +0 -10
  157. package/dist/ground/glob.js +0 -46
  158. package/dist/ground/glob.js.map +0 -1
  159. package/dist/ground/index.d.ts +0 -14
  160. package/dist/ground/index.js +0 -10
  161. package/dist/ground/index.js.map +0 -1
  162. package/dist/ground/ledgers.d.ts +0 -18
  163. package/dist/ground/ledgers.js +0 -103
  164. package/dist/ground/ledgers.js.map +0 -1
  165. package/dist/ground/manifest.d.ts +0 -10
  166. package/dist/ground/manifest.js +0 -88
  167. package/dist/ground/manifest.js.map +0 -1
  168. package/dist/ground/paths.d.ts +0 -20
  169. package/dist/ground/paths.js +0 -61
  170. package/dist/ground/paths.js.map +0 -1
  171. package/dist/ground/quality-grades.d.ts +0 -11
  172. package/dist/ground/quality-grades.js +0 -98
  173. package/dist/ground/quality-grades.js.map +0 -1
  174. package/dist/ground/schemas.d.ts +0 -306
  175. package/dist/ground/schemas.js +0 -188
  176. package/dist/ground/schemas.js.map +0 -1
  177. package/dist/ground/walk.d.ts +0 -7
  178. package/dist/ground/walk.js +0 -53
  179. package/dist/ground/walk.js.map +0 -1
  180. package/dist/init/detect.d.ts +0 -25
  181. package/dist/init/detect.js +0 -336
  182. package/dist/init/detect.js.map +0 -1
  183. package/dist/init/index.d.ts +0 -14
  184. package/dist/init/index.js +0 -9
  185. package/dist/init/index.js.map +0 -1
  186. package/dist/init/init.d.ts +0 -68
  187. package/dist/init/init.js +0 -673
  188. package/dist/init/init.js.map +0 -1
  189. package/dist/init/mapper.d.ts +0 -160
  190. package/dist/init/mapper.js +0 -248
  191. package/dist/init/mapper.js.map +0 -1
  192. package/dist/init/prompts.d.ts +0 -70
  193. package/dist/init/prompts.js +0 -80
  194. package/dist/init/prompts.js.map +0 -1
  195. package/dist/init/secrets.d.ts +0 -18
  196. package/dist/init/secrets.js +0 -76
  197. package/dist/init/secrets.js.map +0 -1
  198. package/dist/init/seed.d.ts +0 -21
  199. package/dist/init/seed.js +0 -75
  200. package/dist/init/seed.js.map +0 -1
  201. package/dist/init/setup-runners.d.ts +0 -17
  202. package/dist/init/setup-runners.js +0 -70
  203. package/dist/init/setup-runners.js.map +0 -1
  204. package/dist/init/types.d.ts +0 -59
  205. package/dist/init/types.js +0 -10
  206. package/dist/init/types.js.map +0 -1
  207. package/dist/init/walker.d.ts +0 -53
  208. package/dist/init/walker.js +0 -460
  209. package/dist/init/walker.js.map +0 -1
  210. package/dist/init/workflow-block.d.ts +0 -34
  211. package/dist/init/workflow-block.js +0 -110
  212. package/dist/init/workflow-block.js.map +0 -1
  213. package/dist/logger.d.ts +0 -3
  214. package/dist/logger.js +0 -23
  215. package/dist/logger.js.map +0 -1
  216. package/dist/mcp/context.d.ts +0 -16
  217. package/dist/mcp/context.js +0 -8
  218. package/dist/mcp/context.js.map +0 -1
  219. package/dist/mcp/errors.d.ts +0 -17
  220. package/dist/mcp/errors.js +0 -23
  221. package/dist/mcp/errors.js.map +0 -1
  222. package/dist/mcp/index.d.ts +0 -10
  223. package/dist/mcp/index.js +0 -7
  224. package/dist/mcp/index.js.map +0 -1
  225. package/dist/mcp/path-allowlist.d.ts +0 -25
  226. package/dist/mcp/path-allowlist.js +0 -66
  227. package/dist/mcp/path-allowlist.js.map +0 -1
  228. package/dist/mcp/result.d.ts +0 -8
  229. package/dist/mcp/result.js +0 -18
  230. package/dist/mcp/result.js.map +0 -1
  231. package/dist/mcp/schemas.d.ts +0 -153
  232. package/dist/mcp/schemas.js +0 -135
  233. package/dist/mcp/schemas.js.map +0 -1
  234. package/dist/mcp/server.d.ts +0 -11
  235. package/dist/mcp/server.js +0 -58
  236. package/dist/mcp/server.js.map +0 -1
  237. package/dist/mcp/telemetry.d.ts +0 -15
  238. package/dist/mcp/telemetry.js +0 -13
  239. package/dist/mcp/telemetry.js.map +0 -1
  240. package/dist/mcp/tools/append.d.ts +0 -8
  241. package/dist/mcp/tools/append.js +0 -33
  242. package/dist/mcp/tools/append.js.map +0 -1
  243. package/dist/mcp/tools/archive.d.ts +0 -8
  244. package/dist/mcp/tools/archive.js +0 -49
  245. package/dist/mcp/tools/archive.js.map +0 -1
  246. package/dist/mcp/tools/ask-operator.d.ts +0 -34
  247. package/dist/mcp/tools/ask-operator.js +0 -93
  248. package/dist/mcp/tools/ask-operator.js.map +0 -1
  249. package/dist/mcp/tools/canonical-for-topic.d.ts +0 -6
  250. package/dist/mcp/tools/canonical-for-topic.js +0 -40
  251. package/dist/mcp/tools/canonical-for-topic.js.map +0 -1
  252. package/dist/mcp/tools/decision-get.d.ts +0 -6
  253. package/dist/mcp/tools/decision-get.js +0 -49
  254. package/dist/mcp/tools/decision-get.js.map +0 -1
  255. package/dist/mcp/tools/decisions-for-symbol.d.ts +0 -7
  256. package/dist/mcp/tools/decisions-for-symbol.js +0 -42
  257. package/dist/mcp/tools/decisions-for-symbol.js.map +0 -1
  258. package/dist/mcp/tools/decisions-in-scope.d.ts +0 -7
  259. package/dist/mcp/tools/decisions-in-scope.js +0 -47
  260. package/dist/mcp/tools/decisions-in-scope.js.map +0 -1
  261. package/dist/mcp/tools/drop-task.d.ts +0 -12
  262. package/dist/mcp/tools/drop-task.js +0 -47
  263. package/dist/mcp/tools/drop-task.js.map +0 -1
  264. package/dist/mcp/tools/get-full.d.ts +0 -7
  265. package/dist/mcp/tools/get-full.js +0 -46
  266. package/dist/mcp/tools/get-full.js.map +0 -1
  267. package/dist/mcp/tools/ground-get.d.ts +0 -7
  268. package/dist/mcp/tools/ground-get.js +0 -80
  269. package/dist/mcp/tools/ground-get.js.map +0 -1
  270. package/dist/mcp/tools/index.d.ts +0 -3
  271. package/dist/mcp/tools/index.js +0 -44
  272. package/dist/mcp/tools/index.js.map +0 -1
  273. package/dist/mcp/tools/invariant-get.d.ts +0 -6
  274. package/dist/mcp/tools/invariant-get.js +0 -49
  275. package/dist/mcp/tools/invariant-get.js.map +0 -1
  276. package/dist/mcp/tools/invariants-in-scope.d.ts +0 -7
  277. package/dist/mcp/tools/invariants-in-scope.js +0 -65
  278. package/dist/mcp/tools/invariants-in-scope.js.map +0 -1
  279. package/dist/mcp/tools/query-history.d.ts +0 -9
  280. package/dist/mcp/tools/query-history.js +0 -33
  281. package/dist/mcp/tools/query-history.js.map +0 -1
  282. package/dist/mcp/tools/record-decision.d.ts +0 -14
  283. package/dist/mcp/tools/record-decision.js +0 -101
  284. package/dist/mcp/tools/record-decision.js.map +0 -1
  285. package/dist/mcp/tools/record-run-event.d.ts +0 -10
  286. package/dist/mcp/tools/record-run-event.js +0 -28
  287. package/dist/mcp/tools/record-run-event.js.map +0 -1
  288. package/dist/mcp/tools/search.d.ts +0 -9
  289. package/dist/mcp/tools/search.js +0 -165
  290. package/dist/mcp/tools/search.js.map +0 -1
  291. package/dist/mcp/tools/supersedes-chain.d.ts +0 -6
  292. package/dist/mcp/tools/supersedes-chain.js +0 -66
  293. package/dist/mcp/tools/supersedes-chain.js.map +0 -1
  294. package/dist/mcp/tools/timeline.d.ts +0 -9
  295. package/dist/mcp/tools/timeline.js +0 -65
  296. package/dist/mcp/tools/timeline.js.map +0 -1
  297. package/dist/mcp/tools/types.d.ts +0 -9
  298. package/dist/mcp/tools/types.js +0 -2
  299. package/dist/mcp/tools/types.js.map +0 -1
  300. package/dist/mirror/clone.d.ts +0 -6
  301. package/dist/mirror/clone.js +0 -48
  302. package/dist/mirror/clone.js.map +0 -1
  303. package/dist/mirror/dirty-overlap.d.ts +0 -13
  304. package/dist/mirror/dirty-overlap.js +0 -77
  305. package/dist/mirror/dirty-overlap.js.map +0 -1
  306. package/dist/mirror/index.d.ts +0 -7
  307. package/dist/mirror/index.js +0 -7
  308. package/dist/mirror/index.js.map +0 -1
  309. package/dist/mirror/paths.d.ts +0 -18
  310. package/dist/mirror/paths.js +0 -45
  311. package/dist/mirror/paths.js.map +0 -1
  312. package/dist/mirror/push.d.ts +0 -9
  313. package/dist/mirror/push.js +0 -27
  314. package/dist/mirror/push.js.map +0 -1
  315. package/dist/mirror/state.d.ts +0 -4
  316. package/dist/mirror/state.js +0 -36
  317. package/dist/mirror/state.js.map +0 -1
  318. package/dist/mirror/sync.d.ts +0 -9
  319. package/dist/mirror/sync.js +0 -33
  320. package/dist/mirror/sync.js.map +0 -1
  321. package/dist/mirror/types.d.ts +0 -77
  322. package/dist/mirror/types.js +0 -2
  323. package/dist/mirror/types.js.map +0 -1
  324. package/dist/orchestrator/activity-summarizer.d.ts +0 -33
  325. package/dist/orchestrator/activity-summarizer.js +0 -120
  326. package/dist/orchestrator/activity-summarizer.js.map +0 -1
  327. package/dist/orchestrator/inbox.d.ts +0 -78
  328. package/dist/orchestrator/inbox.js +0 -115
  329. package/dist/orchestrator/inbox.js.map +0 -1
  330. package/dist/orchestrator/index.d.ts +0 -9
  331. package/dist/orchestrator/index.js +0 -7
  332. package/dist/orchestrator/index.js.map +0 -1
  333. package/dist/orchestrator/orchestrator.d.ts +0 -154
  334. package/dist/orchestrator/orchestrator.js +0 -2437
  335. package/dist/orchestrator/orchestrator.js.map +0 -1
  336. package/dist/orchestrator/prompt.d.ts +0 -19
  337. package/dist/orchestrator/prompt.js +0 -50
  338. package/dist/orchestrator/prompt.js.map +0 -1
  339. package/dist/orchestrator/queue.d.ts +0 -21
  340. package/dist/orchestrator/queue.js +0 -80
  341. package/dist/orchestrator/queue.js.map +0 -1
  342. package/dist/orchestrator/run-log.d.ts +0 -53
  343. package/dist/orchestrator/run-log.js +0 -92
  344. package/dist/orchestrator/run-log.js.map +0 -1
  345. package/dist/orchestrator/runner.d.ts +0 -56
  346. package/dist/orchestrator/runner.js +0 -172
  347. package/dist/orchestrator/runner.js.map +0 -1
  348. package/dist/orchestrator/tool-digest.d.ts +0 -35
  349. package/dist/orchestrator/tool-digest.js +0 -116
  350. package/dist/orchestrator/tool-digest.js.map +0 -1
  351. package/dist/orchestrator/types.d.ts +0 -263
  352. package/dist/orchestrator/types.js +0 -2
  353. package/dist/orchestrator/types.js.map +0 -1
  354. package/dist/orchestrator/workspace.d.ts +0 -21
  355. package/dist/orchestrator/workspace.js +0 -31
  356. package/dist/orchestrator/workspace.js.map +0 -1
  357. package/dist/profiles/index.d.ts +0 -3
  358. package/dist/profiles/index.js +0 -3
  359. package/dist/profiles/index.js.map +0 -1
  360. package/dist/profiles/registry.d.ts +0 -5
  361. package/dist/profiles/registry.js +0 -31
  362. package/dist/profiles/registry.js.map +0 -1
  363. package/dist/profiles/types.d.ts +0 -48
  364. package/dist/profiles/types.js +0 -11
  365. package/dist/profiles/types.js.map +0 -1
  366. package/dist/profiles/unknown.d.ts +0 -9
  367. package/dist/profiles/unknown.js +0 -17
  368. package/dist/profiles/unknown.js.map +0 -1
  369. package/dist/reviewer/index.d.ts +0 -6
  370. package/dist/reviewer/index.js +0 -5
  371. package/dist/reviewer/index.js.map +0 -1
  372. package/dist/reviewer/prompt.d.ts +0 -11
  373. package/dist/reviewer/prompt.js +0 -132
  374. package/dist/reviewer/prompt.js.map +0 -1
  375. package/dist/reviewer/remediation.d.ts +0 -15
  376. package/dist/reviewer/remediation.js +0 -61
  377. package/dist/reviewer/remediation.js.map +0 -1
  378. package/dist/reviewer/reviewer.d.ts +0 -9
  379. package/dist/reviewer/reviewer.js +0 -89
  380. package/dist/reviewer/reviewer.js.map +0 -1
  381. package/dist/reviewer/schema.d.ts +0 -45
  382. package/dist/reviewer/schema.js +0 -43
  383. package/dist/reviewer/schema.js.map +0 -1
  384. package/dist/reviewer/types.d.ts +0 -74
  385. package/dist/reviewer/types.js +0 -14
  386. package/dist/reviewer/types.js.map +0 -1
  387. package/dist/sensors/attestation.d.ts +0 -44
  388. package/dist/sensors/attestation.js +0 -262
  389. package/dist/sensors/attestation.js.map +0 -1
  390. package/dist/sensors/catalog.d.ts +0 -41
  391. package/dist/sensors/catalog.js +0 -123
  392. package/dist/sensors/catalog.js.map +0 -1
  393. package/dist/sensors/decisions.d.ts +0 -30
  394. package/dist/sensors/decisions.js +0 -393
  395. package/dist/sensors/decisions.js.map +0 -1
  396. package/dist/sensors/diff.d.ts +0 -27
  397. package/dist/sensors/diff.js +0 -148
  398. package/dist/sensors/diff.js.map +0 -1
  399. package/dist/sensors/index.d.ts +0 -13
  400. package/dist/sensors/index.js +0 -9
  401. package/dist/sensors/index.js.map +0 -1
  402. package/dist/sensors/remediation.d.ts +0 -20
  403. package/dist/sensors/remediation.js +0 -65
  404. package/dist/sensors/remediation.js.map +0 -1
  405. package/dist/sensors/runner.d.ts +0 -44
  406. package/dist/sensors/runner.js +0 -95
  407. package/dist/sensors/runner.js.map +0 -1
  408. package/dist/sensors/structural.d.ts +0 -30
  409. package/dist/sensors/structural.js +0 -204
  410. package/dist/sensors/structural.js.map +0 -1
  411. package/dist/sensors/stub-catalog.d.ts +0 -39
  412. package/dist/sensors/stub-catalog.js +0 -115
  413. package/dist/sensors/stub-catalog.js.map +0 -1
  414. package/dist/sensors/types.d.ts +0 -135
  415. package/dist/sensors/types.js +0 -14
  416. package/dist/sensors/types.js.map +0 -1
  417. package/dist/tier0/classify.d.ts +0 -5
  418. package/dist/tier0/classify.js +0 -91
  419. package/dist/tier0/classify.js.map +0 -1
  420. package/dist/tier0/index.d.ts +0 -3
  421. package/dist/tier0/index.js +0 -3
  422. package/dist/tier0/index.js.map +0 -1
  423. package/dist/tier0/ollama.d.ts +0 -22
  424. package/dist/tier0/ollama.js +0 -63
  425. package/dist/tier0/ollama.js.map +0 -1
  426. package/dist/tier0/types.d.ts +0 -24
  427. package/dist/tier0/types.js +0 -7
  428. package/dist/tier0/types.js.map +0 -1
  429. package/dist/tightener/index.d.ts +0 -4
  430. package/dist/tightener/index.js +0 -4
  431. package/dist/tightener/index.js.map +0 -1
  432. package/dist/tightener/prompt.d.ts +0 -3
  433. package/dist/tightener/prompt.js +0 -67
  434. package/dist/tightener/prompt.js.map +0 -1
  435. package/dist/tightener/schema.d.ts +0 -68
  436. package/dist/tightener/schema.js +0 -44
  437. package/dist/tightener/schema.js.map +0 -1
  438. package/dist/tightener/tighten.d.ts +0 -2
  439. package/dist/tightener/tighten.js +0 -66
  440. package/dist/tightener/tighten.js.map +0 -1
  441. package/dist/tightener/types.d.ts +0 -74
  442. package/dist/tightener/types.js +0 -6
  443. package/dist/tightener/types.js.map +0 -1
  444. package/dist/uat/bundle.d.ts +0 -68
  445. package/dist/uat/bundle.js +0 -168
  446. package/dist/uat/bundle.js.map +0 -1
  447. package/dist/uat/index.d.ts +0 -15
  448. package/dist/uat/index.js +0 -10
  449. package/dist/uat/index.js.map +0 -1
  450. package/dist/uat/persistent.d.ts +0 -64
  451. package/dist/uat/persistent.js +0 -206
  452. package/dist/uat/persistent.js.map +0 -1
  453. package/dist/uat/probes/cli.d.ts +0 -11
  454. package/dist/uat/probes/cli.js +0 -107
  455. package/dist/uat/probes/cli.js.map +0 -1
  456. package/dist/uat/probes/http.d.ts +0 -12
  457. package/dist/uat/probes/http.js +0 -139
  458. package/dist/uat/probes/http.js.map +0 -1
  459. package/dist/uat/probes/index.d.ts +0 -21
  460. package/dist/uat/probes/index.js +0 -30
  461. package/dist/uat/probes/index.js.map +0 -1
  462. package/dist/uat/probes/integration.d.ts +0 -18
  463. package/dist/uat/probes/integration.js +0 -188
  464. package/dist/uat/probes/integration.js.map +0 -1
  465. package/dist/uat/probes/sql/config.d.ts +0 -14
  466. package/dist/uat/probes/sql/config.js +0 -57
  467. package/dist/uat/probes/sql/config.js.map +0 -1
  468. package/dist/uat/probes/sql/index.d.ts +0 -29
  469. package/dist/uat/probes/sql/index.js +0 -43
  470. package/dist/uat/probes/sql/index.js.map +0 -1
  471. package/dist/uat/probes/sql/mysql.d.ts +0 -12
  472. package/dist/uat/probes/sql/mysql.js +0 -96
  473. package/dist/uat/probes/sql/mysql.js.map +0 -1
  474. package/dist/uat/probes/sql/pg.d.ts +0 -20
  475. package/dist/uat/probes/sql/pg.js +0 -102
  476. package/dist/uat/probes/sql/pg.js.map +0 -1
  477. package/dist/uat/probes/sql/sqlite.d.ts +0 -9
  478. package/dist/uat/probes/sql/sqlite.js +0 -58
  479. package/dist/uat/probes/sql/sqlite.js.map +0 -1
  480. package/dist/uat/probes/sql/types.d.ts +0 -46
  481. package/dist/uat/probes/sql/types.js +0 -10
  482. package/dist/uat/probes/sql/types.js.map +0 -1
  483. package/dist/uat/probes/sql.d.ts +0 -9
  484. package/dist/uat/probes/sql.js +0 -119
  485. package/dist/uat/probes/sql.js.map +0 -1
  486. package/dist/uat/probes/ui.d.ts +0 -19
  487. package/dist/uat/probes/ui.js +0 -244
  488. package/dist/uat/probes/ui.js.map +0 -1
  489. package/dist/uat/prompt.d.ts +0 -10
  490. package/dist/uat/prompt.js +0 -85
  491. package/dist/uat/prompt.js.map +0 -1
  492. package/dist/uat/question.d.ts +0 -50
  493. package/dist/uat/question.js +0 -139
  494. package/dist/uat/question.js.map +0 -1
  495. package/dist/uat/rejection.d.ts +0 -58
  496. package/dist/uat/rejection.js +0 -163
  497. package/dist/uat/rejection.js.map +0 -1
  498. package/dist/uat/runner.d.ts +0 -6
  499. package/dist/uat/runner.js +0 -96
  500. package/dist/uat/runner.js.map +0 -1
  501. package/dist/uat/schema.d.ts +0 -322
  502. package/dist/uat/schema.js +0 -189
  503. package/dist/uat/schema.js.map +0 -1
  504. package/dist/uat/types.d.ts +0 -268
  505. package/dist/uat/types.js +0 -18
  506. package/dist/uat/types.js.map +0 -1
  507. package/dist/uat/uat.d.ts +0 -89
  508. package/dist/uat/uat.js +0 -256
  509. package/dist/uat/uat.js.map +0 -1
  510. package/dist/voice/index.d.ts +0 -4
  511. package/dist/voice/index.js +0 -4
  512. package/dist/voice/index.js.map +0 -1
  513. package/dist/voice/model.d.ts +0 -23
  514. package/dist/voice/model.js +0 -46
  515. package/dist/voice/model.js.map +0 -1
  516. package/dist/voice/pipe.d.ts +0 -9
  517. package/dist/voice/pipe.js +0 -47
  518. package/dist/voice/pipe.js.map +0 -1
  519. package/dist/voice/transcribe.d.ts +0 -3
  520. package/dist/voice/transcribe.js +0 -43
  521. package/dist/voice/transcribe.js.map +0 -1
  522. package/dist/voice/types.d.ts +0 -26
  523. package/dist/voice/types.js +0 -9
  524. package/dist/voice/types.js.map +0 -1
  525. package/dist/watch/daemon.d.ts +0 -21
  526. package/dist/watch/daemon.js +0 -143
  527. package/dist/watch/daemon.js.map +0 -1
  528. package/dist/watch/index.d.ts +0 -4
  529. package/dist/watch/index.js +0 -3
  530. package/dist/watch/index.js.map +0 -1
  531. package/dist/watch/regenerate.d.ts +0 -25
  532. package/dist/watch/regenerate.js +0 -51
  533. package/dist/watch/regenerate.js.map +0 -1
@@ -1,66 +0,0 @@
1
- import { runClaude } from "../claude/index.js";
2
- import { logger } from "../logger.js";
3
- import { buildTightenerUserPrompt, TIGHTENER_SYSTEM_PROMPT } from "./prompt.js";
4
- import { TIGHTENER_OUTPUT_SCHEMA } from "./schema.js";
5
- const log = logger("tightener");
6
- /** Word-count cutoff at which we auto-escalate from Haiku → Sonnet. */
7
- const ESCALATE_WORDS = 500;
8
- /** Default `spec_quality_floor` per templates/.harness/config/workflow.md. */
9
- const DEFAULT_QUALITY_FLOOR = 7;
10
- function chooseTier(input) {
11
- if (input.force_tier !== undefined)
12
- return input.force_tier;
13
- const wordCount = `${input.title} ${input.body}`.split(/\s+/).filter(Boolean).length;
14
- return wordCount > ESCALATE_WORDS ? "sonnet" : "haiku";
15
- }
16
- function isOutput(value) {
17
- if (typeof value !== "object" || value === null)
18
- return false;
19
- const v = value;
20
- return (Array.isArray(v["ambiguities"]) &&
21
- Array.isArray(v["conflicts"]) &&
22
- Array.isArray(v["missing_acceptance"]) &&
23
- Array.isArray(v["scope_concerns"]) &&
24
- Array.isArray(v["existing_stub_overlap"]) &&
25
- typeof v["spec_quality_score"] === "number" &&
26
- typeof v["ready_to_execute"] === "boolean" &&
27
- typeof v["tightened_spec_proposal"] === "string");
28
- }
29
- export async function tightenSpec(input) {
30
- const tier = chooseTier(input);
31
- const userPrompt = buildTightenerUserPrompt(input);
32
- log.info({ tier, body_len: input.body.length, ship_anyway: input.ship_anyway === true }, "tightener dispatch");
33
- const result = await runClaude({
34
- tier,
35
- prompt: userPrompt,
36
- system: TIGHTENER_SYSTEM_PROMPT,
37
- jsonSchema: TIGHTENER_OUTPUT_SCHEMA,
38
- timeoutMs: 300_000,
39
- });
40
- if (!isOutput(result.parsed)) {
41
- throw new Error(`tightener returned malformed output (no parsed). preview: ${result.text.slice(0, 200)}`);
42
- }
43
- const output = result.parsed;
44
- const ready = input.ship_anyway === true ||
45
- (output.ready_to_execute === true && output.spec_quality_score >= DEFAULT_QUALITY_FLOOR);
46
- return {
47
- output,
48
- tier,
49
- ready,
50
- quality_floor: DEFAULT_QUALITY_FLOOR,
51
- duration_ms: result.durationMs,
52
- ...(result.usage !== undefined
53
- ? {
54
- usage: {
55
- ...(result.usage.input_tokens !== undefined
56
- ? { input_tokens: result.usage.input_tokens }
57
- : {}),
58
- ...(result.usage.output_tokens !== undefined
59
- ? { output_tokens: result.usage.output_tokens }
60
- : {}),
61
- },
62
- }
63
- : {}),
64
- };
65
- }
66
- //# sourceMappingURL=tighten.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tighten.js","sourceRoot":"","sources":["../../src/tightener/tighten.ts"],"names":[],"mappings":"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"}
@@ -1,74 +0,0 @@
1
- /**
2
- * Spec tightener (Layer F) per `docs/PRIMER.md` §10 + `docs/INTEGRATION_PLAN.md`
3
- * §5 Phase 7. Single Tier-1 (Haiku) call before any code is written.
4
- */
5
- export interface Ambiguity {
6
- /** Stable id within this tightener call (e.g. "Q1"). */
7
- id: string;
8
- question: string;
9
- /** Concrete A/B/C/D candidate resolutions; empty when caller must free-text. */
10
- candidate_resolutions: string[];
11
- }
12
- export interface TightenerOutput {
13
- ambiguities: Ambiguity[];
14
- conflicts: string[];
15
- missing_acceptance: string[];
16
- scope_concerns: string[];
17
- existing_stub_overlap: string[];
18
- /** 0-10 integer; >= 7 AND ready_to_execute → safe to dispatch. */
19
- spec_quality_score: number;
20
- ready_to_execute: boolean;
21
- /**
22
- * The model's proposed tightened version of the spec body. Must always
23
- * be set so callers have a fallback when ambiguities exist (the proposal
24
- * uses the most defensible default per L44).
25
- */
26
- tightened_spec_proposal: string;
27
- }
28
- export interface TightenerInput {
29
- title: string;
30
- body: string;
31
- /** Recent decisions in scope (id + summary). Loaded from MCP by caller. */
32
- decisions_in_scope?: {
33
- id: string;
34
- title: string;
35
- summary: string;
36
- }[];
37
- /** Invariants in scope (id + title). Loaded from MCP by caller. */
38
- invariants_in_scope?: {
39
- id: string;
40
- title: string;
41
- }[];
42
- /** Ground extracts in scope (key + content snippet). */
43
- ground_extracts?: {
44
- key: string;
45
- snippet: string;
46
- }[];
47
- /** Existing stubs/TODOs the agent may step on. */
48
- existing_stubs?: string[];
49
- /** Operator override per L24: ship even when score below threshold. */
50
- ship_anyway?: boolean;
51
- /**
52
- * Force a specific tier instead of the body-length heuristic. Useful for
53
- * smoke tests and for operators who know they want Sonnet on a touchy
54
- * spec without rewriting it to trip the auto-escalate threshold.
55
- */
56
- force_tier?: "haiku" | "sonnet";
57
- }
58
- export interface TightenerResult {
59
- /** Raw tightener output as returned by the model. */
60
- output: TightenerOutput;
61
- /** Tier actually used (auto-escalated if body length tripped the threshold). */
62
- tier: "haiku" | "sonnet";
63
- /** True when the gate passes: score >= floor AND ready_to_execute, OR ship_anyway. */
64
- ready: boolean;
65
- /** Quality floor used to compute `ready`. Default 7 per workflow.md `spec_quality_floor`. */
66
- quality_floor: number;
67
- /** Wall-clock duration of the model call. */
68
- duration_ms: number;
69
- /** Token usage if reported by the CLI. */
70
- usage?: {
71
- input_tokens?: number;
72
- output_tokens?: number;
73
- };
74
- }
@@ -1,6 +0,0 @@
1
- /**
2
- * Spec tightener (Layer F) per `docs/PRIMER.md` §10 + `docs/INTEGRATION_PLAN.md`
3
- * §5 Phase 7. Single Tier-1 (Haiku) call before any code is written.
4
- */
5
- export {};
6
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tightener/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -1,68 +0,0 @@
1
- /**
2
- * UAT bundle + evidence-file gate.
3
- *
4
- * The bundle is the canonical artifact set under
5
- * `.harness/runs/active/<run_id>/uat/`. The evidence file (`.uat-passed`)
6
- * carries the SHA256 of every artifact + a bundle-level SHA256 over the
7
- * sorted file:hash list.
8
- *
9
- * Pre-push gate refuses commit unless:
10
- * 1. evidence file exists at the run's UAT directory
11
- * 2. recompute the bundle SHA256 — must match the file's claim
12
- * 3. recompute every per-file SHA256 — each must match the file's claim
13
- * 4. operator_decision === "approve"
14
- *
15
- * Bare `touch .uat-passed` fails check 2 (missing fields). Modifying any
16
- * artifact after the fact fails check 3.
17
- */
18
- import type { EvidenceFile, EvidenceFileEntry, UatDecision, UatSummary } from "./types.js";
19
- export declare const EVIDENCE_FILE_NAME = ".uat-passed";
20
- /** Returns the absolute UAT directory for a run. */
21
- export declare function uatDirFor(repoRoot: string, runId: string): string;
22
- /** Compute SHA256 of a file's bytes; returns lowercase hex. */
23
- export declare function fileSha256(absPath: string): string;
24
- /** SHA256 of the canonical `path<tab>sha256<newline>` manifest. */
25
- export declare function bundleSha256(entries: readonly EvidenceFileEntry[]): string;
26
- /** Walk the UAT dir and return every artifact (excluding the evidence file itself). */
27
- export declare function collectArtifactPaths(uatDir: string): string[];
28
- export interface WriteSummaryArgs {
29
- repoRoot: string;
30
- runId: string;
31
- summary: UatSummary;
32
- }
33
- /** Write the summary.yaml that adapters consume. */
34
- export declare function writeSummary(args: WriteSummaryArgs): Promise<string>;
35
- export interface WriteEvidenceFileArgs {
36
- repoRoot: string;
37
- runId: string;
38
- /** Decision recorded with the evidence — only `approve` allows the commit gate to pass. */
39
- operatorDecision: UatDecision;
40
- }
41
- /** Walk the UAT dir, hash each file, write the .uat-passed manifest. */
42
- export declare function writeEvidenceFile(args: WriteEvidenceFileArgs): Promise<{
43
- path: string;
44
- bundleSha: string;
45
- entries: EvidenceFileEntry[];
46
- }>;
47
- export interface VerifyEvidenceArgs {
48
- repoRoot: string;
49
- runId: string;
50
- /** When set, must match the evidence's recorded operator_decision. Default: "approve". */
51
- requireDecision?: UatDecision;
52
- }
53
- export interface VerifyEvidenceResult {
54
- ok: boolean;
55
- /** First failure reason; undefined on ok. */
56
- reason?: string;
57
- /** Parsed evidence file when present. */
58
- evidence?: EvidenceFile;
59
- }
60
- /**
61
- * Re-walk the UAT directory and recompute every per-file SHA + the bundle
62
- * SHA. Compare against the file's claim. Reject when:
63
- * - evidence file missing or unparseable
64
- * - any artifact missing or modified after the evidence file was written
65
- * - bundle hash doesn't match the recomputed hash
66
- * - operator_decision != requireDecision
67
- */
68
- export declare function verifyEvidenceFile(args: VerifyEvidenceArgs): VerifyEvidenceResult;
@@ -1,168 +0,0 @@
1
- /**
2
- * UAT bundle + evidence-file gate.
3
- *
4
- * The bundle is the canonical artifact set under
5
- * `.harness/runs/active/<run_id>/uat/`. The evidence file (`.uat-passed`)
6
- * carries the SHA256 of every artifact + a bundle-level SHA256 over the
7
- * sorted file:hash list.
8
- *
9
- * Pre-push gate refuses commit unless:
10
- * 1. evidence file exists at the run's UAT directory
11
- * 2. recompute the bundle SHA256 — must match the file's claim
12
- * 3. recompute every per-file SHA256 — each must match the file's claim
13
- * 4. operator_decision === "approve"
14
- *
15
- * Bare `touch .uat-passed` fails check 2 (missing fields). Modifying any
16
- * artifact after the fact fails check 3.
17
- */
18
- import { createHash } from "node:crypto";
19
- import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
20
- import { mkdir, writeFile } from "node:fs/promises";
21
- import { dirname, join, relative } from "node:path";
22
- import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
23
- import { logger } from "../logger.js";
24
- const log = logger("uat.bundle");
25
- export const EVIDENCE_FILE_NAME = ".uat-passed";
26
- const SUMMARY_FILE_NAME = "summary.yaml";
27
- /** Returns the absolute UAT directory for a run. */
28
- export function uatDirFor(repoRoot, runId) {
29
- return join(repoRoot, ".harness", "runs", "active", runId, "uat");
30
- }
31
- /** Compute SHA256 of a file's bytes; returns lowercase hex. */
32
- export function fileSha256(absPath) {
33
- const buf = readFileSync(absPath);
34
- return createHash("sha256").update(buf).digest("hex");
35
- }
36
- /** SHA256 of the canonical `path<tab>sha256<newline>` manifest. */
37
- export function bundleSha256(entries) {
38
- const sorted = [...entries].sort((a, b) => a.path.localeCompare(b.path));
39
- const manifest = sorted.map((e) => `${e.path}\t${e.sha256}`).join("\n");
40
- return createHash("sha256").update(manifest, "utf8").digest("hex");
41
- }
42
- /** Walk the UAT dir and return every artifact (excluding the evidence file itself). */
43
- export function collectArtifactPaths(uatDir) {
44
- const out = [];
45
- walk(uatDir, (abs) => {
46
- const rel = relative(uatDir, abs);
47
- if (rel === EVIDENCE_FILE_NAME)
48
- return;
49
- out.push(rel);
50
- });
51
- out.sort();
52
- return out;
53
- }
54
- function walk(dir, visit) {
55
- if (!existsSync(dir))
56
- return;
57
- for (const name of readdirSync(dir)) {
58
- const abs = join(dir, name);
59
- const st = statSync(abs);
60
- if (st.isDirectory())
61
- walk(abs, visit);
62
- else if (st.isFile())
63
- visit(abs);
64
- }
65
- }
66
- /** Write the summary.yaml that adapters consume. */
67
- export async function writeSummary(args) {
68
- const path = join(uatDirFor(args.repoRoot, args.runId), SUMMARY_FILE_NAME);
69
- await mkdir(dirname(path), { recursive: true });
70
- await writeFile(path, stringifyYaml(args.summary), "utf8");
71
- return path;
72
- }
73
- /** Walk the UAT dir, hash each file, write the .uat-passed manifest. */
74
- export async function writeEvidenceFile(args) {
75
- const uatDir = uatDirFor(args.repoRoot, args.runId);
76
- const relPaths = collectArtifactPaths(uatDir);
77
- const entries = relPaths.map((rel) => ({
78
- path: rel,
79
- sha256: fileSha256(join(uatDir, rel)),
80
- }));
81
- const bundleSha = bundleSha256(entries);
82
- const evidence = {
83
- run_id: args.runId,
84
- generated_at: new Date().toISOString(),
85
- bundle_sha256: bundleSha,
86
- files: entries,
87
- operator_decision: args.operatorDecision,
88
- };
89
- const path = join(uatDir, EVIDENCE_FILE_NAME);
90
- await mkdir(dirname(path), { recursive: true });
91
- await writeFile(path, stringifyYaml(evidence), "utf8");
92
- log.info({ run_id: args.runId, file_count: entries.length, bundle_sha256: bundleSha }, "evidence file written");
93
- return { path, bundleSha, entries };
94
- }
95
- /**
96
- * Re-walk the UAT directory and recompute every per-file SHA + the bundle
97
- * SHA. Compare against the file's claim. Reject when:
98
- * - evidence file missing or unparseable
99
- * - any artifact missing or modified after the evidence file was written
100
- * - bundle hash doesn't match the recomputed hash
101
- * - operator_decision != requireDecision
102
- */
103
- export function verifyEvidenceFile(args) {
104
- const uatDir = uatDirFor(args.repoRoot, args.runId);
105
- const evidencePath = join(uatDir, EVIDENCE_FILE_NAME);
106
- if (!existsSync(evidencePath)) {
107
- return { ok: false, reason: `evidence file missing: ${evidencePath}` };
108
- }
109
- let parsed;
110
- try {
111
- const raw = readFileSync(evidencePath, "utf8");
112
- parsed = parseYaml(raw);
113
- if (typeof parsed !== "object" || parsed === null) {
114
- return { ok: false, reason: "evidence file is not an object (bare touch?)" };
115
- }
116
- if (typeof parsed.bundle_sha256 !== "string" || !Array.isArray(parsed.files)) {
117
- return { ok: false, reason: "evidence file missing required fields (bare touch?)" };
118
- }
119
- }
120
- catch (err) {
121
- return { ok: false, reason: `evidence file unparseable: ${String(err)}` };
122
- }
123
- const requireDecision = args.requireDecision ?? "approve";
124
- if (parsed.operator_decision !== requireDecision) {
125
- return {
126
- ok: false,
127
- reason: `operator_decision is "${parsed.operator_decision ?? "pending"}"; needs "${requireDecision}"`,
128
- evidence: parsed,
129
- };
130
- }
131
- // Per-file hash check.
132
- for (const entry of parsed.files) {
133
- const abs = join(uatDir, entry.path);
134
- if (!existsSync(abs)) {
135
- return { ok: false, reason: `artifact missing: ${entry.path}`, evidence: parsed };
136
- }
137
- const recomputed = fileSha256(abs);
138
- if (recomputed !== entry.sha256) {
139
- return {
140
- ok: false,
141
- reason: `artifact modified after evidence written: ${entry.path}`,
142
- evidence: parsed,
143
- };
144
- }
145
- }
146
- // Bundle hash check.
147
- const recomputedBundle = bundleSha256(parsed.files);
148
- if (recomputedBundle !== parsed.bundle_sha256) {
149
- return {
150
- ok: false,
151
- reason: `bundle hash mismatch: claim ${parsed.bundle_sha256.slice(0, 12)}, recomputed ${recomputedBundle.slice(0, 12)}`,
152
- evidence: parsed,
153
- };
154
- }
155
- // Reject extra files not in the manifest (post-hoc additions).
156
- const claimed = new Set(parsed.files.map((f) => f.path));
157
- for (const rel of collectArtifactPaths(uatDir)) {
158
- if (!claimed.has(rel)) {
159
- return {
160
- ok: false,
161
- reason: `artifact added after evidence written: ${rel}`,
162
- evidence: parsed,
163
- };
164
- }
165
- }
166
- return { ok: true, evidence: parsed };
167
- }
168
- //# sourceMappingURL=bundle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/uat/bundle.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- export type { CliExpectation, CliProbe, EvidenceFile, EvidenceFileEntry, HttpExpectation, HttpProbe, IntegrationProbe, ProbeKind, ProbeRunResult, SqlProbe, UatAcceptanceCheck, UatBundleArtifact, UatDecision, UatProbe, UatRejection, UatRunResult, UatRunnerInput, UatRunnerOutput, UatSummary, UiExpectation, UiProbe, UiStep, } from "./types.js";
2
- export { UAT_RUNNER_OUTPUT_SCHEMA } from "./schema.js";
3
- export { UAT_RUNNER_SYSTEM_PROMPT, buildUatRunnerUserPrompt } from "./prompt.js";
4
- export { generateUatChecks } from "./runner.js";
5
- export { executeProbe, runHttpProbe, runCliProbe, runUiProbe, runSqlProbe, runIntegrationProbe } from "./probes/index.js";
6
- export { EVIDENCE_FILE_NAME, uatDirFor, fileSha256, bundleSha256, collectArtifactPaths, writeSummary, writeEvidenceFile, verifyEvidenceFile, } from "./bundle.js";
7
- export type { WriteSummaryArgs, WriteEvidenceFileArgs, VerifyEvidenceArgs, VerifyEvidenceResult, } from "./bundle.js";
8
- export { readUatTaskFile, upsertUatTask, } from "./persistent.js";
9
- export type { UatTaskRecord, UatTaskStatus, UpsertUatTaskArgs, } from "./persistent.js";
10
- export { runUat } from "./uat.js";
11
- export type { ApprovalGate, ApprovalGateArgs, QuestionHandler, RunUatArgs, UatNotifier, } from "./uat.js";
12
- export { QUESTION_AGENT_SYSTEM_PROMPT, runQuestionAgent, } from "./question.js";
13
- export type { QuestionAgentInput, QuestionAgentOutput } from "./question.js";
14
- export { captureUatRejection, extractAudioUrl, formatUatRejectionRemediation, writeRejectionYaml, } from "./rejection.js";
15
- export type { CaptureUatRejectionArgs, UatRejectionRemediationArgs, WriteRejectionYamlArgs, } from "./rejection.js";
package/dist/uat/index.js DELETED
@@ -1,10 +0,0 @@
1
- export { UAT_RUNNER_OUTPUT_SCHEMA } from "./schema.js";
2
- export { UAT_RUNNER_SYSTEM_PROMPT, buildUatRunnerUserPrompt } from "./prompt.js";
3
- export { generateUatChecks } from "./runner.js";
4
- export { executeProbe, runHttpProbe, runCliProbe, runUiProbe, runSqlProbe, runIntegrationProbe } from "./probes/index.js";
5
- export { EVIDENCE_FILE_NAME, uatDirFor, fileSha256, bundleSha256, collectArtifactPaths, writeSummary, writeEvidenceFile, verifyEvidenceFile, } from "./bundle.js";
6
- export { readUatTaskFile, upsertUatTask, } from "./persistent.js";
7
- export { runUat } from "./uat.js";
8
- export { QUESTION_AGENT_SYSTEM_PROMPT, runQuestionAgent, } from "./question.js";
9
- export { captureUatRejection, extractAudioUrl, formatUatRejectionRemediation, writeRejectionYaml, } from "./rejection.js";
10
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/uat/index.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC1H,OAAO,EACL,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAOrB,OAAO,EACL,eAAe,EACf,aAAa,GACd,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAQlC,OAAO,EACL,4BAA4B,EAC5B,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,6BAA6B,EAC7B,kBAAkB,GACnB,MAAM,gBAAgB,CAAC"}
@@ -1,64 +0,0 @@
1
- /**
2
- * Persistent UAT.md per task — survives context resets.
3
- *
4
- * Per UAT_PIPELINE.md §8 + GSD pattern. One file per task at
5
- * `.harness/tasks/<task_id>/uat.md`. Carries:
6
- * - status: pending | passing | passed | failed | blocked | abandoned
7
- * - acceptance criteria checklist (per AC, status icon)
8
- * - cold-start smoke status
9
- * - blocked_by (env issues) — NEVER folded into Gaps
10
- * - Gaps from prior rejections
11
- * - related run ids
12
- */
13
- import type { UatSummary } from "./types.js";
14
- export type UatTaskStatus = "pending" | "passing" | "passed" | "failed" | "blocked" | "abandoned";
15
- export interface UatTaskRecord {
16
- status: UatTaskStatus;
17
- generated: string;
18
- last_updated: string;
19
- attempt: number;
20
- related_run_ids: string[];
21
- acceptance: {
22
- id: string;
23
- text: string;
24
- status: "pass" | "fail" | "pending" | "skipped";
25
- }[];
26
- cold_start_smoke?: {
27
- status: "pass" | "fail" | "skipped";
28
- };
29
- /** Environmental blockers (server down, third-party rate-limited). NEVER code bugs. */
30
- blocked_by: string[];
31
- /** Resolved gaps from prior rejections. */
32
- gaps_resolved: {
33
- run_id: string;
34
- description: string;
35
- }[];
36
- /** Open gaps not yet resolved. */
37
- gaps_open: {
38
- run_id: string;
39
- description: string;
40
- }[];
41
- notes?: string;
42
- }
43
- export declare function readUatTaskFile(repoRoot: string, taskId: string): UatTaskRecord | null;
44
- export interface UpsertUatTaskArgs {
45
- repoRoot: string;
46
- taskId: string;
47
- runId: string;
48
- summary: UatSummary;
49
- /** Final status to record on this attempt. */
50
- status: UatTaskStatus;
51
- /** New gap to record (from a rejection). */
52
- newGap?: {
53
- run_id: string;
54
- description: string;
55
- };
56
- /** Gap descriptions to mark resolved. */
57
- resolveGaps?: string[];
58
- /** Optional blocked_by reason to add. */
59
- blockedBy?: string;
60
- /** Free-text notes appended to the body. */
61
- notes?: string;
62
- }
63
- /** Create or update the per-task UAT.md. Idempotent. */
64
- export declare function upsertUatTask(args: UpsertUatTaskArgs): Promise<string>;