@mjasnikovs/pi-task 0.38.29 → 0.38.31

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 (373) hide show
  1. package/dist/config/config.d.ts +70 -70
  2. package/dist/config/config.js +26 -35
  3. package/dist/config/extension-list.d.ts +6 -5
  4. package/dist/config/extension-list.js +3 -2
  5. package/dist/config/reasoning-args.d.ts +9 -7
  6. package/dist/config/reasoning-args.js +12 -10
  7. package/dist/config/reasoning.d.ts +44 -105
  8. package/dist/config/reasoning.js +27 -704
  9. package/dist/config/register.d.ts +34 -48
  10. package/dist/config/register.js +41 -51
  11. package/dist/config/tool-list.d.ts +16 -16
  12. package/dist/config/tool-list.js +1 -1
  13. package/dist/index.js +2 -0
  14. package/dist/remote/bridge.d.ts +19 -10
  15. package/dist/remote/bridge.js +3 -2
  16. package/dist/remote/broadcast.js +3 -1
  17. package/dist/remote/events.js +12 -11
  18. package/dist/remote/history.d.ts +1 -1
  19. package/dist/remote/protocol.d.ts +6 -3
  20. package/dist/remote/protocol.js +2 -1
  21. package/dist/remote/push.d.ts +16 -16
  22. package/dist/remote/push.js +27 -27
  23. package/dist/remote/register.d.ts +3 -3
  24. package/dist/remote/register.js +17 -19
  25. package/dist/remote/server.d.ts +9 -8
  26. package/dist/remote/server.js +15 -14
  27. package/dist/remote/session-state.d.ts +5 -4
  28. package/dist/remote/session-state.js +8 -5
  29. package/dist/remote/sw.d.ts +7 -6
  30. package/dist/remote/sw.js +7 -6
  31. package/dist/remote/tailscale.d.ts +4 -2
  32. package/dist/remote/tailscale.js +4 -2
  33. package/dist/remote/ui-highlight.js +6 -5
  34. package/dist/remote/ui-render.js +4 -4
  35. package/dist/remote/ui-script.js +24 -24
  36. package/dist/remote/ui-styles.d.ts +1 -1
  37. package/dist/remote/ui-styles.js +10 -13
  38. package/dist/remote/ui-tools.js +9 -6
  39. package/dist/shared/child-extensions.d.ts +29 -17
  40. package/dist/shared/child-extensions.js +29 -17
  41. package/dist/shared/child-output.d.ts +30 -24
  42. package/dist/shared/child-output.js +25 -17
  43. package/dist/shared/child-process.d.ts +47 -40
  44. package/dist/shared/child-process.js +50 -59
  45. package/dist/shared/command-watchdog.d.ts +85 -16
  46. package/dist/shared/command-watchdog.js +115 -21
  47. package/dist/shared/fs-text.d.ts +16 -10
  48. package/dist/shared/fs-text.js +16 -10
  49. package/dist/shared/git-runner.d.ts +25 -25
  50. package/dist/shared/git-runner.js +25 -25
  51. package/dist/shared/leaked-tool-call.d.ts +17 -11
  52. package/dist/shared/leaked-tool-call.js +23 -15
  53. package/dist/shared/model-endpoint.d.ts +29 -16
  54. package/dist/shared/model-endpoint.js +33 -21
  55. package/dist/shared/pi-invocation.d.ts +7 -4
  56. package/dist/shared/pi-invocation.js +12 -7
  57. package/dist/shared/pkg-version.d.ts +13 -5
  58. package/dist/shared/pkg-version.js +13 -5
  59. package/dist/shared/reasoning-capability.d.ts +35 -24
  60. package/dist/shared/reasoning-capability.js +35 -24
  61. package/dist/shared/stream-watchdog.d.ts +60 -44
  62. package/dist/shared/stream-watchdog.js +62 -45
  63. package/dist/task/accept-debt.d.ts +41 -43
  64. package/dist/task/accept-debt.js +73 -65
  65. package/dist/task/api-synthesis.d.ts +24 -21
  66. package/dist/task/api-synthesis.js +32 -26
  67. package/dist/task/apis-contract.d.ts +32 -64
  68. package/dist/task/apis-contract.js +32 -64
  69. package/dist/task/artifact-closure.d.ts +27 -13
  70. package/dist/task/artifact-closure.js +95 -67
  71. package/dist/task/auto-commit.d.ts +46 -35
  72. package/dist/task/auto-commit.js +51 -38
  73. package/dist/task/auto-io.d.ts +45 -25
  74. package/dist/task/auto-io.js +57 -29
  75. package/dist/task/auto-orchestrator.d.ts +26 -24
  76. package/dist/task/auto-orchestrator.js +192 -165
  77. package/dist/task/auto-prompts.d.ts +36 -24
  78. package/dist/task/auto-prompts.js +40 -26
  79. package/dist/task/autofix-ledger.d.ts +27 -25
  80. package/dist/task/autofix-ledger.js +29 -26
  81. package/dist/task/batch-test-task.d.ts +20 -12
  82. package/dist/task/batch-test-task.js +67 -60
  83. package/dist/task/boot-probe.d.ts +60 -44
  84. package/dist/task/boot-probe.js +91 -72
  85. package/dist/task/cancel-input.d.ts +30 -16
  86. package/dist/task/cancel-input.js +20 -11
  87. package/dist/task/cancel-points.d.ts +27 -20
  88. package/dist/task/cancel-points.js +30 -22
  89. package/dist/task/child-runner.d.ts +124 -55
  90. package/dist/task/child-runner.js +298 -90
  91. package/dist/task/child-status.d.ts +23 -16
  92. package/dist/task/child-status.js +23 -16
  93. package/dist/task/clamp-output.js +12 -5
  94. package/dist/task/command-run.d.ts +31 -28
  95. package/dist/task/command-run.js +44 -35
  96. package/dist/task/command-shrink.d.ts +25 -18
  97. package/dist/task/command-shrink.js +37 -31
  98. package/dist/task/command-watchdog.d.ts +9 -6
  99. package/dist/task/command-watchdog.js +21 -15
  100. package/dist/task/context-attribution.d.ts +34 -26
  101. package/dist/task/context-attribution.js +34 -26
  102. package/dist/task/context-silence.d.ts +39 -29
  103. package/dist/task/context-silence.js +35 -25
  104. package/dist/task/context-usage.d.ts +16 -9
  105. package/dist/task/context-usage.js +16 -9
  106. package/dist/task/contracts.d.ts +8 -4
  107. package/dist/task/contracts.js +25 -17
  108. package/dist/task/coverage-loop.d.ts +22 -18
  109. package/dist/task/coverage-loop.js +35 -30
  110. package/dist/task/critique-probes.d.ts +13 -14
  111. package/dist/task/critique-probes.js +50 -39
  112. package/dist/task/debug-log.d.ts +13 -5
  113. package/dist/task/debug-log.js +32 -20
  114. package/dist/task/decompose-fidelity.d.ts +11 -9
  115. package/dist/task/decompose-fidelity.js +38 -33
  116. package/dist/task/decompose-granularity.d.ts +41 -38
  117. package/dist/task/decompose-granularity.js +41 -38
  118. package/dist/task/deep-render-check.d.ts +22 -14
  119. package/dist/task/deep-render-check.js +40 -31
  120. package/dist/task/dropped-input.d.ts +12 -7
  121. package/dist/task/dropped-input.js +5 -2
  122. package/dist/task/enforce-attribution.d.ts +38 -47
  123. package/dist/task/enforce-attribution.js +46 -52
  124. package/dist/task/enforce-guidelines.d.ts +31 -20
  125. package/dist/task/enforce-guidelines.js +32 -21
  126. package/dist/task/enrichment.d.ts +7 -2
  127. package/dist/task/enrichment.js +26 -14
  128. package/dist/task/env-notes.d.ts +16 -7
  129. package/dist/task/env-notes.js +48 -31
  130. package/dist/task/env-template-closure.d.ts +4 -4
  131. package/dist/task/env-template-closure.js +42 -34
  132. package/dist/task/external-context.d.ts +28 -21
  133. package/dist/task/external-context.js +17 -12
  134. package/dist/task/failure-classifier.d.ts +4 -5
  135. package/dist/task/failure-classifier.js +30 -8
  136. package/dist/task/file-inventory.d.ts +15 -11
  137. package/dist/task/file-inventory.js +25 -22
  138. package/dist/task/final-gate-fix.d.ts +74 -86
  139. package/dist/task/final-gate-fix.js +97 -116
  140. package/dist/task/final-gate-progress.d.ts +29 -46
  141. package/dist/task/final-gate-progress.js +40 -51
  142. package/dist/task/final-gate.d.ts +64 -97
  143. package/dist/task/final-gate.js +192 -199
  144. package/dist/task/fix-child.d.ts +21 -27
  145. package/dist/task/fix-child.js +21 -27
  146. package/dist/task/foreign-path.d.ts +6 -5
  147. package/dist/task/foreign-path.js +0 -0
  148. package/dist/task/frozen-conflict.d.ts +9 -10
  149. package/dist/task/frozen-conflict.js +61 -64
  150. package/dist/task/frozen-path-guard.d.ts +35 -14
  151. package/dist/task/frozen-path-guard.js +56 -39
  152. package/dist/task/gate-child.d.ts +27 -28
  153. package/dist/task/gate-child.js +36 -35
  154. package/dist/task/gate-deps.d.ts +34 -27
  155. package/dist/task/gate-deps.js +169 -159
  156. package/dist/task/gate-tally.d.ts +77 -80
  157. package/dist/task/gate-tally.js +65 -68
  158. package/dist/task/git-state-guard.d.ts +15 -11
  159. package/dist/task/git-state-guard.js +76 -66
  160. package/dist/task/impl-widget.d.ts +25 -16
  161. package/dist/task/impl-widget.js +27 -17
  162. package/dist/task/implementation-guards.d.ts +26 -0
  163. package/dist/task/implementation-guards.js +177 -0
  164. package/dist/task/implementation-thinking.d.ts +33 -31
  165. package/dist/task/implementation-thinking.js +5 -6
  166. package/dist/task/implementation-turn.d.ts +39 -31
  167. package/dist/task/implementation-turn.js +41 -28
  168. package/dist/task/inline-markdown.d.ts +20 -7
  169. package/dist/task/inline-markdown.js +15 -6
  170. package/dist/task/launch-config-gap.js +25 -39
  171. package/dist/task/launch-contract.d.ts +18 -21
  172. package/dist/task/launch-contract.js +28 -30
  173. package/dist/task/launch-manifest.d.ts +6 -2
  174. package/dist/task/launch-manifest.js +35 -34
  175. package/dist/task/ledger.js +16 -14
  176. package/dist/task/lint-fix.d.ts +6 -8
  177. package/dist/task/lint-fix.js +67 -69
  178. package/dist/task/loop-detector.d.ts +27 -8
  179. package/dist/task/loop-detector.js +38 -14
  180. package/dist/task/mid-run-input.d.ts +17 -15
  181. package/dist/task/mid-run-input.js +17 -15
  182. package/dist/task/orchestrator.d.ts +24 -28
  183. package/dist/task/orchestrator.js +89 -66
  184. package/dist/task/orientation.d.ts +18 -23
  185. package/dist/task/orientation.js +24 -31
  186. package/dist/task/owned-freeze-conflict.d.ts +21 -20
  187. package/dist/task/owned-freeze-conflict.js +52 -85
  188. package/dist/task/owned-freeze-reassign.d.ts +40 -60
  189. package/dist/task/owned-freeze-reassign.js +41 -61
  190. package/dist/task/parsers.d.ts +4 -2
  191. package/dist/task/parsers.js +4 -4
  192. package/dist/task/phases.d.ts +41 -48
  193. package/dist/task/phases.js +196 -252
  194. package/dist/task/plan-io.d.ts +6 -7
  195. package/dist/task/plan-io.js +6 -7
  196. package/dist/task/plan-orchestrator.d.ts +10 -8
  197. package/dist/task/plan-orchestrator.js +14 -10
  198. package/dist/task/plan-prompts.d.ts +6 -5
  199. package/dist/task/plan-prompts.js +6 -5
  200. package/dist/task/plan-readonly.d.ts +4 -5
  201. package/dist/task/plan-readonly.js +4 -5
  202. package/dist/task/plan-rounds.d.ts +17 -29
  203. package/dist/task/plan-rounds.js +21 -34
  204. package/dist/task/plan-session.d.ts +58 -72
  205. package/dist/task/plan-session.js +61 -83
  206. package/dist/task/probe-gaming.d.ts +28 -27
  207. package/dist/task/probe-gaming.js +0 -0
  208. package/dist/task/prohibition-probe.d.ts +14 -16
  209. package/dist/task/prompts.d.ts +3 -4
  210. package/dist/task/prompts.js +17 -26
  211. package/dist/task/qa-transcript.d.ts +15 -22
  212. package/dist/task/qa-transcript.js +15 -21
  213. package/dist/task/question-box.d.ts +17 -13
  214. package/dist/task/question-box.js +19 -15
  215. package/dist/task/question-dedup.d.ts +6 -7
  216. package/dist/task/question-dedup.js +13 -14
  217. package/dist/task/question-dialog.d.ts +22 -32
  218. package/dist/task/question-dialog.js +22 -32
  219. package/dist/task/question-source.d.ts +18 -44
  220. package/dist/task/question-source.js +22 -51
  221. package/dist/task/refuted-constraint.d.ts +11 -31
  222. package/dist/task/refuted-constraint.js +27 -51
  223. package/dist/task/regenerable-artifacts.d.ts +12 -31
  224. package/dist/task/regenerable-artifacts.js +12 -31
  225. package/dist/task/render-check.d.ts +11 -22
  226. package/dist/task/render-check.js +33 -46
  227. package/dist/task/repo-health-check.d.ts +10 -14
  228. package/dist/task/repo-health-check.js +17 -23
  229. package/dist/task/requirements.d.ts +38 -71
  230. package/dist/task/requirements.js +78 -126
  231. package/dist/task/research-fanout-budget.d.ts +51 -88
  232. package/dist/task/research-fanout-budget.js +51 -88
  233. package/dist/task/research-worker.d.ts +29 -39
  234. package/dist/task/research-worker.js +37 -61
  235. package/dist/task/resume-gap.d.ts +14 -15
  236. package/dist/task/root-cause-repair.d.ts +9 -9
  237. package/dist/task/root-cause-repair.js +28 -40
  238. package/dist/task/run-bracket.d.ts +10 -13
  239. package/dist/task/run-end.d.ts +12 -22
  240. package/dist/task/run-end.js +8 -16
  241. package/dist/task/run-final-gate.d.ts +19 -21
  242. package/dist/task/run-final-gate.js +62 -80
  243. package/dist/task/runner-globs.d.ts +12 -13
  244. package/dist/task/runner-globs.js +12 -13
  245. package/dist/task/runner-resolve.d.ts +9 -9
  246. package/dist/task/runner-resolve.js +22 -23
  247. package/dist/task/script-escape.d.ts +10 -12
  248. package/dist/task/script-escape.js +13 -14
  249. package/dist/task/serve-entry.d.ts +1 -1
  250. package/dist/task/serve-entry.js +22 -25
  251. package/dist/task/service-blocks.js +4 -2
  252. package/dist/task/shipped-source.d.ts +11 -29
  253. package/dist/task/shipped-source.js +11 -29
  254. package/dist/task/skip-escape.js +10 -14
  255. package/dist/task/spec-urls.d.ts +26 -65
  256. package/dist/task/spec-urls.js +26 -65
  257. package/dist/task/spec-validation.d.ts +17 -20
  258. package/dist/task/spec-validation.js +17 -20
  259. package/dist/task/stall-detector.d.ts +23 -30
  260. package/dist/task/stall-detector.js +23 -30
  261. package/dist/task/stream-watchdog.d.ts +14 -12
  262. package/dist/task/stream-watchdog.js +14 -12
  263. package/dist/task/substitution-probe.d.ts +17 -20
  264. package/dist/task/substitution-probe.js +17 -20
  265. package/dist/task/task-gates.d.ts +36 -41
  266. package/dist/task/task-gates.js +95 -106
  267. package/dist/task/task-io.d.ts +4 -4
  268. package/dist/task/task-io.js +4 -4
  269. package/dist/task/task-parsers.js +4 -3
  270. package/dist/task/task-provenance.d.ts +2 -2
  271. package/dist/task/task-provenance.js +11 -13
  272. package/dist/task/task-types.d.ts +4 -3
  273. package/dist/task/terminal-outcome.d.ts +14 -16
  274. package/dist/task/terminal-outcome.js +12 -14
  275. package/dist/task/test-assembly.d.ts +13 -20
  276. package/dist/task/test-assembly.js +13 -20
  277. package/dist/task/timings.d.ts +5 -3
  278. package/dist/task/timings.js +5 -3
  279. package/dist/task/title-label.d.ts +9 -4
  280. package/dist/task/title-label.js +9 -4
  281. package/dist/task/type-only-answer.d.ts +44 -52
  282. package/dist/task/type-only-answer.js +44 -52
  283. package/dist/task/unfailable-command.d.ts +18 -24
  284. package/dist/task/unfailable-command.js +21 -27
  285. package/dist/task/unknown-routing.d.ts +10 -4
  286. package/dist/task/unknown-routing.js +10 -4
  287. package/dist/task/user-directives.d.ts +5 -8
  288. package/dist/task/user-directives.js +5 -8
  289. package/dist/task/verify-quality.d.ts +18 -22
  290. package/dist/task/verify-quality.js +45 -46
  291. package/dist/task/verify-reconcile.d.ts +15 -10
  292. package/dist/task/verify-reconcile.js +45 -43
  293. package/dist/task/verify-resolution.d.ts +24 -20
  294. package/dist/task/verify-resolution.js +51 -50
  295. package/dist/task/verify-work.d.ts +59 -66
  296. package/dist/task/verify-work.js +101 -138
  297. package/dist/task/widget.d.ts +15 -14
  298. package/dist/task/widget.js +22 -17
  299. package/dist/task/wiring-claims.d.ts +25 -32
  300. package/dist/task/wiring-claims.js +30 -35
  301. package/dist/task/write-guard.d.ts +39 -39
  302. package/dist/task/write-guard.js +48 -51
  303. package/dist/task/yolo.d.ts +34 -30
  304. package/dist/task/yolo.js +42 -37
  305. package/dist/workers/abstention.d.ts +21 -41
  306. package/dist/workers/abstention.js +27 -48
  307. package/dist/workers/brave-search.d.ts +4 -3
  308. package/dist/workers/brave-search.js +5 -2
  309. package/dist/workers/brave-warning.d.ts +7 -4
  310. package/dist/workers/brave-warning.js +19 -7
  311. package/dist/workers/ddg-search.d.ts +6 -6
  312. package/dist/workers/ddg-search.js +18 -12
  313. package/dist/workers/docs-cache.js +5 -2
  314. package/dist/workers/docs-chunk.d.ts +30 -37
  315. package/dist/workers/docs-chunk.js +37 -41
  316. package/dist/workers/docs-core.d.ts +28 -44
  317. package/dist/workers/docs-core.js +25 -44
  318. package/dist/workers/docs-index.js +4 -3
  319. package/dist/workers/docs-lookup.d.ts +15 -22
  320. package/dist/workers/docs-lookup.js +12 -21
  321. package/dist/workers/docs-project.d.ts +15 -9
  322. package/dist/workers/docs-project.js +17 -10
  323. package/dist/workers/docs-resolve.d.ts +19 -20
  324. package/dist/workers/docs-resolve.js +35 -32
  325. package/dist/workers/docs-retrieve.d.ts +5 -6
  326. package/dist/workers/docs-retrieve.js +18 -15
  327. package/dist/workers/exa-search.d.ts +9 -6
  328. package/dist/workers/exa-search.js +23 -12
  329. package/dist/workers/fetch-core.d.ts +13 -16
  330. package/dist/workers/fetch-core.js +23 -23
  331. package/dist/workers/focused-extractor.d.ts +13 -12
  332. package/dist/workers/focused-extractor.js +27 -19
  333. package/dist/workers/html-clean.js +24 -14
  334. package/dist/workers/http-request.d.ts +28 -20
  335. package/dist/workers/http-request.js +22 -17
  336. package/dist/workers/npm-version.d.ts +28 -11
  337. package/dist/workers/npm-version.js +24 -15
  338. package/dist/workers/phantom-imports.d.ts +15 -12
  339. package/dist/workers/phantom-imports.js +30 -24
  340. package/dist/workers/pi-worker-core.d.ts +65 -96
  341. package/dist/workers/pi-worker-core.js +93 -181
  342. package/dist/workers/pi-worker-docs.d.ts +24 -19
  343. package/dist/workers/pi-worker-docs.js +67 -76
  344. package/dist/workers/pi-worker-fetch.d.ts +7 -3
  345. package/dist/workers/pi-worker-fetch.js +27 -19
  346. package/dist/workers/pi-worker-search.js +12 -8
  347. package/dist/workers/pi-worker.d.ts +9 -4
  348. package/dist/workers/pi-worker.js +21 -14
  349. package/dist/workers/reasoning-warning.d.ts +18 -17
  350. package/dist/workers/reasoning-warning.js +22 -20
  351. package/dist/workers/research-cache.js +50 -78
  352. package/dist/workers/search-core.js +7 -5
  353. package/dist/workers/search-types.d.ts +10 -9
  354. package/dist/workers/search-types.js +9 -8
  355. package/dist/workers/session-hint.d.ts +13 -14
  356. package/dist/workers/session-hint.js +8 -9
  357. package/dist/workers/shared.d.ts +21 -25
  358. package/dist/workers/shared.js +0 -0
  359. package/dist/workers/single-read-extension.d.ts +14 -7
  360. package/dist/workers/single-read-extension.js +14 -7
  361. package/dist/workers/single-read-guard.d.ts +27 -30
  362. package/dist/workers/single-read-guard.js +36 -36
  363. package/dist/workers/typeonly-log.d.ts +12 -9
  364. package/dist/workers/typeonly-log.js +29 -33
  365. package/dist/workers/worker-channels.d.ts +15 -23
  366. package/dist/workers/worker-channels.js +15 -23
  367. package/dist/workers/worker-failure.d.ts +38 -46
  368. package/dist/workers/worker-failure.js +31 -39
  369. package/dist/workers/worker-kill.d.ts +25 -26
  370. package/dist/workers/worker-kill.js +16 -19
  371. package/dist/workers/worker-profiles.d.ts +54 -56
  372. package/dist/workers/worker-profiles.js +63 -39
  373. package/package.json +10 -8
@@ -1,20 +1,24 @@
1
1
  /**
2
- * Project file inventory — runs `git ls-files` once per /task run so research
3
- * workers can skip their own discovery loops and jump straight to targeted
4
- * read/grep on known paths. Returns '' on failure (non-git repo, git missing,
5
- * timeout) so callers can fall back to the pre-inventory behavior.
2
+ * Project file inventory — `git ls-files`, capped, with the task directory
3
+ * stripped. `phaseResearch` computes it once and puts it in the header every
4
+ * research worker gets; `refineExistingFilesBlock` also uses it to pick the
5
+ * paths orientation pre-reads.
6
+ *
7
+ * Returns '' on failure: a non-git tree exits 128, and a missing binary reaches
8
+ * `runChildDefault`'s `error` handler as exit 1. Both callers treat '' as "no
9
+ * inventory" and carry on.
6
10
  */
7
11
  import { makeGit } from '../shared/git-runner.js';
8
12
  import { TASKS_DIR_NAME } from './task-types.js';
9
13
  const DEFAULT_MAX_LINES = 2000;
10
14
  /**
11
- * Drop the committed task directory from the inventory. `git ls-files` lists
12
- * tracked files regardless of `.ignore`, so once tasks are committed they would
13
- * otherwise be handed to every research worker (and feed orientation). The user
14
- * wants tasks committable but invisible to workers and the local model, so we
15
- * strip `.pi-tasks/` here the inventory's single chokepoint. (`git ls-files`
16
- * always emits posix-style paths, so the forward-slash prefix is correct on all
17
- * platforms.)
15
+ * Drop the committed task directory from the inventory. `git ls-files` lists a
16
+ * TRACKED file even when `.gitignore` matches it confirmed against a real
17
+ * repo where `.pi-tasks/` is both ignored and committed so once tasks are
18
+ * committed they reach every research worker and feed orientation unless they
19
+ * are stripped here. This is the only filter on the inventory path.
20
+ *
21
+ * `git ls-files` prints forward slashes, so the prefix matches as written.
18
22
  */
19
23
  export function stripTasksDir(raw) {
20
24
  const prefix = `${TASKS_DIR_NAME}/`;
@@ -24,19 +28,18 @@ export function stripTasksDir(raw) {
24
28
  .join('\n');
25
29
  }
26
30
  /**
27
- * `git ls-files`, or '' on ANY failure — non-git tree, missing git, cancelled run.
28
- * The empty string is the caller's fall-back-to-pre-inventory signal, so every
29
- * unhappy path has to collapse to it.
31
+ * `git ls-files`, or '' on ANY failure — non-git tree, missing git, cancelled
32
+ * run. '' is the signal both callers branch on, so every unhappy path has to
33
+ * collapse to it.
30
34
  *
31
- * Runs on the shared GitRunner (`shared/git-runner.ts`), which brings the abort
32
- * discipline this used to hand-roll: the listener is detached when the child
33
- * settles normally, so a run-long orchestrator signal does not accumulate one
34
- * retained child per invocation (GitHub issue #9).
35
+ * Runs on the shared GitRunner, whose child detaches its abort listener when it
36
+ * settles: one AbortController is shared across a whole run, so a listener left
37
+ * attached per call would retain each finished child.
35
38
  *
36
- * The `signal.aborted` check is what preserves this function's OWN contract on
37
- * cancellation. A killed child closes with a null exit code, which the runner
38
- * reports as 0 — so without it a cancelled run would hand back a truncated
39
- * inventory as if it were complete, where the hand-rolled version returned ''.
39
+ * The `signal.aborted` check is what holds the contract on cancellation. A
40
+ * killed child closes with a null exit code and `runChild` reports `code ?? 0`,
41
+ * so without the check a cancelled run would return partial stdout as if the
42
+ * listing were complete.
40
43
  */
41
44
  async function runGitLsFiles(cwd, signal) {
42
45
  const git = makeGit(cwd, signal);
@@ -5,13 +5,15 @@ import { type TreeChangeSummary, type IgnoredSnapshot } from './write-guard.js';
5
5
  export declare const FINAL_FIX_TOOLS = "read,edit,bash";
6
6
  /**
7
7
  * How many fix passes the user may launch from the picker before the option is
8
- * withdrawn (mirrors the per-task MAX_AUTO_AUTOFIX budget). Each attempt is a
9
- * full model child plus a full gate re-run — after this many that still FAIL,
10
- * only Leave-failed / Accept remain so a person breaks the loop.
8
+ * withdrawn. Same value as the per-task MAX_AUTO_AUTOFIX budget. Each attempt is
9
+ * a full model child plus a full gate re-run — after this many that still FAIL,
10
+ * `run-final-gate.ts` drops the Autofix card and only Leave-failed / Accept
11
+ * remain, so a person breaks the loop.
11
12
  */
12
13
  export declare const MAX_FINAL_GATE_AUTOFIX = 3;
13
- /** Picker labels/values. Classification accepts the value token, the label, or
14
- * free text (→ autofix guidance), same contract as the per-task resolution. */
14
+ /** Picker labels/values. Each label starts with its own value word, so
15
+ * `classifyFinalGateAnswer` accepts the value token and the label alike;
16
+ * anything else is free text and becomes autofix guidance. */
15
17
  export declare const FINAL_LEAVE_VALUE = "fail";
16
18
  export declare const FINAL_ACCEPT_VALUE = "accept";
17
19
  export declare const FINAL_AUTOFIX_VALUE = "autofix";
@@ -19,8 +21,8 @@ export declare const FINAL_LEAVE_LABEL = "Leave failed \u2014 I will fix and /ta
19
21
  export declare const FINAL_ACCEPT_LABEL = "Accept \u2014 complete the run anyway";
20
22
  export declare const FINAL_AUTOFIX_LABEL = "Autofix \u2014 run a bounded fix pass and re-run the gate";
21
23
  export interface FinalGateChoice {
22
- /** What the user decided. 'leave' = leave the run failed (also the dismissal
23
- * default identical to the pre-autofix behavior). */
24
+ /** What the user decided. 'leave' = leave the run failed, and also what a
25
+ * dismissed picker means. */
24
26
  action: 'leave' | 'accept' | 'autofix';
25
27
  /** Free-text guidance typed instead of picking a card; folded into the fix
26
28
  * child's failure seed. Only set with 'autofix'. */
@@ -28,63 +30,51 @@ export interface FinalGateChoice {
28
30
  }
29
31
  /**
30
32
  * Map a final-gate picker answer to an action. Dismissal (undefined/empty) and
31
- * an explicit leave stay "leave" exactly what the two-option picker did.
32
- * Free text becomes autofix guidance, mirroring classifyResolutionAnswer; the
33
- * caller demotes autofix back to "leave" when the option was not offered.
33
+ * an explicit leave both stay "leave". Free text becomes autofix guidance; the
34
+ * caller's `choice.action === 'autofix' && canAutofix` test demotes autofix back
35
+ * to leave when the card was not offered.
34
36
  */
35
37
  export declare function classifyFinalGateAnswer(answer: string | undefined): FinalGateChoice;
36
38
  /**
37
- * The gate's fail reason always carries the failing command in backticks
38
- * (`` `bun run test` exited 1 `` / ``static checks: `make lint` exited 2``).
39
- * Extract it for reporting; the shrink guard itself compares the FULL
40
- * discovered-command sets, so a reason this cannot parse still guards.
39
+ * The gate's fail reason carries the failing command in backticks — final-gate
40
+ * mints `` `<label>` exited <status><tail> ``, with a `lockfile check: ` or
41
+ * `launch script: ` prefix on two of the sections. Extract it for reporting
42
+ * only; the shrink guard compares the FULL discovered-command sets, so a reason
43
+ * this cannot parse still guards.
41
44
  */
42
45
  export declare function exitedCommandFromReason(reason: string): string | null;
43
46
  /**
44
47
  * Build the fix child's prompt. Generic by construction: the only project facts
45
- * in it are the gate's own failure text the command comes from the project's
46
- * discovered manifest, never from a hardcoded ecosystem. The seed may carry
47
- * SEVERAL failures (the gate aggregates every section since mx5 run 13, ranked
48
- * most load-bearing first); convergence means the WHOLE list is empty, so the
49
- * child is told to fix all of them.
48
+ * in it are the gate's own failure text, whose command labels come from the
49
+ * project's discovered manifest. The seed may carry SEVERAL failures the gate
50
+ * runs every section and aggregates, emitting "N failures (ranked, most
51
+ * load-bearing first)" and it reports `ok` only when that list is empty, so
52
+ * the child is told to fix all of them.
50
53
  */
51
54
  export declare function buildFinalFixPrompt(failReason: string): string;
52
- /**
53
- * Parse the child's final marker. Last match wins (the model reasons before
54
- * concluding and bash output can echo the words). No marker → treated as DONE:
55
- * the gate re-run is the arbiter either way, so a missing marker only skips the
56
- * early-out on a self-declared BLOCKED.
57
- */
55
+ /** This pass's marker word, parsed by the shared `parseFixMarker` (last match
56
+ * wins; no marker DONE). */
58
57
  export declare function parseFinalFixMarker(text: string): {
59
58
  blocked: boolean;
60
59
  note?: string;
61
60
  };
62
61
  /**
63
- * STRANDED SUB-FIXES (mx5 run 13, PROMPT 4 item 3).
64
- *
65
- * A fix attempt that does not converge keeps its edits: they are NOT discarded
66
- * (only a guard trip discards), and `deps.commit` runs only on `fix.ok`. So a
67
- * partial fix that genuinely repaired something sits in the working tree, uncommitted,
68
- * and if the user then ACCEPTs the FAIL the run completes around it — leaving HEAD
69
- * broken while the repair is invisible unless someone runs `git status`.
62
+ * STRANDED SUB-FIXES.
70
63
  *
71
- * That is exactly what run 13 shipped: the fix child's bunfig.toml change made
72
- * `bun run test` pass 116/116, attempt 1 did not converge overall, the user accepted
73
- * the FAIL, and the tree still shows the file modified while HEAD's `bun run test` is
74
- * broken. The repair and the breakage were BOTH real; only the repair was discarded
75
- * by default.
64
+ * An attempt that does not converge KEEPS its edits only a guard trip
65
+ * discards and the caller commits only on `fix.ok`. So a partial fix that
66
+ * genuinely repaired something sits uncommitted in the working tree while HEAD
67
+ * still carries the defect, invisible unless someone runs `git status`.
76
68
  *
77
- * The rule: a partial fix is either committed (its own commit, named in the trail) or
78
- * explicitly surfaced — never silently stranded.
69
+ * The rule: a partial fix is either committed as its own named commit or
70
+ * explicitly surfaced — never silently stranded. `run-final-gate.ts` calls
71
+ * `commitStranded` on BOTH terminal outcomes, accept and leave-failed, so an
72
+ * unattended run that ends on LEAVE does not leave real repairs one `git
73
+ * checkout` from gone.
79
74
  *
80
- * mx5 run 14 proved the committing half only ever ran on the ACCEPT path. The run
81
- * ended on LEAVE (YOLO, budget spent) and 13 real repairs the dev script, the
82
- * teardown bug, test serialization, the migrate script: the changes that make that
83
- * app work today — were left dirty in the tree, one `git checkout` from gone, after
84
- * an UNATTENDED run nobody was watching. So EVERY terminal non-converged outcome
85
- * commits them now, not just ACCEPT. Only guard-CLEAN edits qualify: an attempt a
86
- * write-guard rejected without discarding leaves REJECTED edits in the tree, and
87
- * those are never committed (the guard is not weakened to make committing easier).
75
+ * Only guard-CLEAN edits qualify. `AutofixLedger.mayCommitTree()` goes false
76
+ * once a guard has rejected an attempt whose edits could not be discarded, and
77
+ * never flips back: the guard is not weakened to make committing easier.
88
78
  */
89
79
  /** Commit subject for partial fixes committed alongside a terminal gate FAIL. */
90
80
  export declare const STRANDED_FIX_COMMIT: (runId: string, outcome?: "accepted" | "left-failed") => string;
@@ -99,38 +89,32 @@ export interface FinalFixResult {
99
89
  /** Human-readable outcome (converged gate reason, or why the attempt failed). */
100
90
  reason: string;
101
91
  /**
102
- * The re-run gate's OUTCOME, whole — present whenever the gate actually ran
103
- * (absent only when the fix child self-declared blocked and the re-run was
104
- * skipped).
105
- *
106
- * This used to be four flattened `gate*` mirrors, and the flattening lost
107
- * things. `openDebts` never crossed at all, so `runFinalGateStage` rebuilt
108
- * `fin` as a literal three times and each literal dropped it — the recorded
109
- * mx5 run-18 defect, fixed by RE-DERIVING the field (`reconcileDebts`) rather
110
- * than by keeping the value. Then 19A had to push `observedFailures` across the
111
- * same wall as a third parallel field and re-pair it downstream by
112
- * `gateObservedFailures?.includes(detail)` — a membership test that exists only
113
- * because the pairing was broken in transit.
92
+ * The re-run gate's OUTCOME, whole — present whenever the gate actually ran,
93
+ * absent only when the fix child self-declared BLOCKED and the re-run was
94
+ * skipped. The whole `FinalGateOutcome` crosses, not a hand-picked copy of
95
+ * some of its fields: a copy silently drops whatever it forgot, and the
96
+ * pairing between `failures` and `observedFailures` only holds inside it.
114
97
  */
115
98
  gate?: FinalGateOutcome;
116
99
  /** On a converged outcome: the UNOBSERVED note the CALLER should show. It is
117
100
  * the gate's own note plus any downgrade this fix pass added (see the
118
101
  * ignored-dependency probe below), so it is not simply `gate.unobserved`. */
119
102
  unobserved?: string;
120
- /** Gitignored path(s) this fix pass wrote, exempt classes already removed (see
121
- * write-guard.ts). Present whether or not the gate converged the caller
122
- * trails them either way; path names only, never contents. */
103
+ /** Gitignored path(s) this fix pass wrote, with the exempt classes already
104
+ * removed (task dir, `.git`, node_modules, build outputwrite-guard.ts).
105
+ * Present whether or not the gate converged; path names only, never
106
+ * contents. */
123
107
  ignoredWrites?: string[];
124
108
  /** …and the mechanical dependency probe found the converged gate does NOT pass
125
109
  * without them, so `unobserved` above carries the downgrade. Absent when the
126
- * probe could not answer (no probe wired, restore risk, too many paths). */
110
+ * probe could not answer: no probe wired, a path that would not move, or more
111
+ * paths than its bound allows. */
127
112
  ignoredDependent?: boolean;
128
113
  /** A write-guard rejected this attempt (deletion / shrink / probe-gaming). */
129
114
  guardTripped?: boolean;
130
- /** …and its edits were discarded. When a guard tripped and this is false, the
131
- * working tree still holds REJECTED edits, so the caller must NOT commit what
132
- * it finds there (mx5 run 14 item 2b: commit surviving fix-pass edits — but
133
- * only guard-CLEAN ones; the cheat guard is never weakened to ease committing). */
115
+ /** …and its edits were discarded. False here with `guardTripped` true means
116
+ * the tree still holds REJECTED edits, and the caller must not commit what it
117
+ * finds: that is what `AutofixLedger.mayCommitTree()` latches off. */
134
118
  editsDiscarded?: boolean;
135
119
  }
136
120
  export interface FinalFixDeps {
@@ -143,34 +127,37 @@ export interface FinalFixDeps {
143
127
  runChild: (tools: string, prompt: string, signal?: AbortSignal) => Promise<string>;
144
128
  /** Re-run the final integration gate — the only arbiter of convergence.
145
129
  * Converges only when the gate's FULL aggregated failure list is empty
146
- * (ok=true); `failures` rides through so the caller sees every entry. */
147
- /** Returns the gate's own outcome type, not a structural copy of five of its
148
- * fields — a re-declaration is how `openDebts` came to be silently absent. */
130
+ * (ok=true); `failures` rides through so the caller sees every entry.
131
+ * Typed as the gate's own outcome, not a structural copy of some fields. */
149
132
  gate: (cwd: string) => Promise<FinalGateOutcome>;
150
- /** Labels of every currently-discoverable gate command (static + integration),
151
- * for the shrink guard. Pure discovery nothing is executed. */
133
+ /** Labels of every currently-discoverable gate command health, lockfile,
134
+ * integration and boot — for the shrink guard. Pure discovery: nothing
135
+ * runs. */
152
136
  discoverLabels: (cwd: string) => string[];
153
137
  /** The same commands' RESOLVED BODIES (`label → scripts[name]` / Makefile
154
138
  * recipe), for the scope-shrink half of the guard. Absent → only the label
155
- * comparison runs, i.e. the pre-run-19 behaviour. */
139
+ * comparison runs. */
156
140
  discoverBodies?: (cwd: string) => Record<string, string>;
157
141
  /** Discard the fix child's working-tree edits (guard trips only). Absent
158
142
  * → the violation is still rejected, edits are left for inspection. */
159
143
  discard?: (cwd: string) => Promise<void>;
160
- /** The fix child's tree changes (`git status --porcelain` shape)diff capture
161
- * for the log and the deletion guard's input. The tree was clean before the
162
- * child ran (every task committed), so status IS the child's work. */
144
+ /** Tree changes in `git status --porcelain` shape — the deletion guard's input
145
+ * and the "created by this fix" set the scope-shrink guard consults. Every
146
+ * task is committed before this stage, so what status reports is fix-pass
147
+ * work; on a second attempt that includes the first attempt's kept edits,
148
+ * since a non-converged attempt is not discarded. */
163
149
  treeChanges?: () => Promise<TreeChangeSummary>;
164
150
  /** The union of every task spec's frozen (Do-NOT-modify) paths — the whole-run
165
151
  * write-deny set, since this child works across all slices at once. */
166
152
  frozenPaths?: () => Promise<string[]>;
167
- /** Restore the given frozen paths to HEAD; returns the files actually reverted
168
- * (same mechanical deny the enforce pass carries — see frozen-path-guard.ts). */
153
+ /** Restore the given frozen paths to HEAD; returns the files actually reverted.
154
+ * `frozen-path-guard.ts`'s `revertFrozenPaths`, the same one the per-task
155
+ * passes use. */
169
156
  revertFrozen?: (paths: string[]) => Promise<string[]>;
170
- /** Deterministic probe scan over the child's ADDED lines (probe-gaming, F6):
171
- * a fix written to game a check rather than meet it rejects the attempt —
172
- * run 11's autofix replaced the typed client with a hand-written contract
173
- * copy to green the lint. Findings are verbatim offending lines. */
157
+ /** Deterministic probe scan over the child's ADDED lines: a fix whose own
158
+ * added text says it is gaming a check rather than meeting it rejects the
159
+ * attempt. There is no verify child downstream of this pass to judge such a
160
+ * finding. Findings are the verbatim offending lines. */
174
161
  probeScan?: () => Promise<string[]>;
175
162
  /** Fingerprint of the ACTIONABLE ignored paths (build output and node_modules
176
163
  * already exempt). Called before and after the child; the difference is what
@@ -189,9 +176,10 @@ export interface FinalFixDeps {
189
176
  log?: (msg: string) => void;
190
177
  }
191
178
  /**
192
- * Run one bounded final-gate fix attempt: snapshot discovery child write-guard
193
- * stack (diff capture → frozen-path revert → deletion guard → shrink guard → probe
194
- * scan) → gate re-run. Never throws for an outcome; only a user cancel inside
195
- * runChild propagates (the caller's USER_CANCELLED path handles it).
179
+ * Run one bounded final-gate fix attempt: snapshot discovery and ignored paths
180
+ * child → frozen-path revert → deletion guard → shrink guard → scope-shrink
181
+ * guard → probe scan → gate re-run. Never throws for an outcome; only a user
182
+ * cancel inside runChild propagates, and the caller's USER_CANCELLED path
183
+ * handles that.
196
184
  */
197
185
  export declare function runFinalGateAutofix(deps: FinalFixDeps): Promise<FinalFixResult>;