@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,4 +1,6 @@
1
1
  import { type ContextSnapshot, type LoopHit, type SpawnFn } from '../shared/child-process.js';
2
+ import { type CommandKill } from '../shared/command-watchdog.js';
3
+ export { commandCeilingForAttempt } from '../shared/command-watchdog.js';
2
4
  import { RESTART_ORDER } from './worker-kill.js';
3
5
  import { type WorkerGuardOverride, type WorkerGuardPolicy, type WorkerPolicyInputs, type WorkerProfileId } from './worker-profiles.js';
4
6
  /**
@@ -6,44 +8,48 @@ import { type WorkerGuardOverride, type WorkerGuardPolicy, type WorkerPolicyInpu
6
8
  * command could be cited from. `pi-worker-docs` (the primary), `read` and `grep`
7
9
  * (project source), and the web escalations `pi-worker-search`/`pi-worker-fetch`.
8
10
  *
9
- * `ls` and `find` are deliberately EXCLUDED: they return file/directory NAMES,
10
- * and APIS owns symbols by name only, never paths (RESEARCH_APIS_PROMPT). Bare
11
- * enumeration cannot verify a signature, so a worker that fabricates its section
12
- * from memory does not launder itself grounded by calling `ls` once. That
13
- * exclusion is the anti-gaming property of any gate built on this count: "one
14
- * trivial `ls` then fabricate the rest" leaves groundingRetrievalCount at 0.
11
+ * `ls` and `find` are deliberately EXCLUDED: they return file and directory
12
+ * NAMES, and APIS owns symbols by name only, never paths (see
13
+ * RESEARCH_APIS_PROMPT in prompts.ts). Bare enumeration cannot verify a
14
+ * signature, so a worker that fabricates its section from memory cannot launder
15
+ * itself grounded by calling `ls` once "one trivial `ls` then fabricate the
16
+ * rest" still leaves groundingRetrievalCount at 0.
17
+ *
18
+ * The set is DERIVED from WORKER_CHANNELS (worker-channels.ts), not hand-kept.
19
+ * Re-exported here only so worker-channels.test.ts can assert this module hands
20
+ * back the same predicate.
15
21
  */
16
22
  export { isGroundingRetrieval } from './worker-channels.js';
17
23
  /**
18
24
  * Does this partial output carry ANSWER CONTENT, or is it the model clearing its
19
25
  * throat?
20
26
  *
21
- * Salvage originally kept the LONGEST partial, which is not the same question. On
22
- * the live carry arm, TASK_0020 and TASK_0021 both timed out on all three
23
- * attempts and salvage shipped this as the section:
27
+ * Keeping the LONGEST partial is not the same question, and it has an obvious
28
+ * failure: a preamble sentence like
24
29
  *
25
30
  * "Now let me get more details on the specific APIs and components I need:"
26
31
  *
27
- * — a preamble sentence, which beats an empty string on length and carries
28
- * nothing. Both trials scored 2 entries and DEGRADED, against 22 and 5 for the
29
- * same fixtures in baseline.
32
+ * beats an empty string on length and carries nothing.
30
33
  *
31
34
  * A research worker's answer is a list of lines that each name something and
32
- * describe it. The test is therefore structural, not lexical: at least two lines
33
- * that look like entries — a name, then a gap, then a description. Prose wraps
34
- * at no particular column and does not repeat that shape.
35
+ * describe it. The test is therefore structural, not lexical: at least TWO lines
36
+ * that look like entries — a name, then a gap, then a description. Prose wraps at
37
+ * no particular column and does not repeat that shape; the sentence above scores
38
+ * zero entry lines.
35
39
  */
36
40
  export declare function hasAnswerContent(text: string): boolean;
37
41
  /**
38
42
  * Is ONE line an entry — a name, a gap, then a description — rather than prose?
39
43
  *
40
- * Split out of `hasAnswerContent` so the same rule can decide what a line IS,
41
- * not just how many of them there are. A FILES section's paths are read back
42
- * with it, and a scorer that used its own idea of an entry counted a preamble
43
- * sentence and a leaked `</tool_call>` as invented paths.
44
+ * Split out of `hasAnswerContent` so the same rule can decide what a line IS, not
45
+ * just how many of them there are a reader of a FILES section needs the same
46
+ * test, and its own idea of an entry would count a preamble sentence or a leaked
47
+ * `</tool_call>` as one.
44
48
  *
45
- * Prose wraps at no particular column, so it carries no two-space gap and no
46
- * spaced dash; when it does, it ends in `.` or `:` and an entry does not.
49
+ * A leading `-`, `*`, `•` or `1.`/`1)` bullet is stripped first. What remains must
50
+ * hold a two-space gap or a spaced dash and must NOT end in `.` or `:`. Prose
51
+ * wraps at no particular column, so it carries neither; when it does carry one, it
52
+ * ends in punctuation and an entry does not.
47
53
  */
48
54
  export declare function isEntryLine(raw: string): boolean;
49
55
  /**
@@ -67,7 +73,7 @@ export interface RunWorkerInput {
67
73
  /** Called for each tool execution start and text-writing event inside the worker. */
68
74
  onLine?: (line: string) => void;
69
75
  /** Called when a tool call FINISHES, with its (truncatable) result — lets a caller
70
- * log tool OUTPUTS, not just the command (mx5 run 10 item 6). */
76
+ * log tool OUTPUTS, not just the command. */
71
77
  onToolResult?: (result: {
72
78
  name: string;
73
79
  isError: boolean;
@@ -85,34 +91,31 @@ export interface RunWorkerInput {
85
91
  * The worker child's context window in tokens, or `'unknown'` when the
86
92
  * caller genuinely has none.
87
93
  *
88
- * REQUIRED, and required for the same reason `profile` below is. This was
89
- * `contextWindow?: number`, and two of the three production call sites simply
90
- * did not write it: `pi-worker.ts` and `research-worker.ts`. pi's event
91
- * stream carries no window (issue #16), so `noteContext` only ever saw 0, and
92
- * `StallDetector`'s CONTEXT CHURN rule gated on a positive window
93
- * (`stall-detector.ts`) could never fire for the ad-hoc worker or for any
94
- * of the four research workers. Nothing was red. The optional was the whole
95
- * defect: a rule that silently does not exist reads exactly like a rule that
96
- * exists and did not trip.
94
+ * REQUIRED, and required for the same reason `profile` below is. pi's event
95
+ * stream carries NO window the string `context_usage` appears nowhere in any
96
+ * installed @earendil-works package, and its only usage-bearing JSON event is
97
+ * `message_update` so this parameter is the only source there is. Left
98
+ * optional, a caller that omits it leaves `noteContext` seeing 0, and
99
+ * `StallDetector`'s CONTEXT CHURN rule is gated on a positive window, so the
100
+ * rule silently does not exist. That reads exactly like a rule that exists and
101
+ * did not trip.
97
102
  *
98
- * WHY A WORD AND NOT `0` OR `null`. Both of those are what a caller types
99
- * when it has not thought about the question, and both disarm the rule
100
- * silently — which is the state this replaces. `'unknown'` cannot be typed by
101
- * accident, is greppable, and shows up in a diff as a decision.
103
+ * WHY A WORD AND NOT `0` OR `null`. Both of those are what a caller types when
104
+ * it has not thought about the question, and both disarm the rule silently.
105
+ * `'unknown'` cannot be typed by accident, is greppable, and shows up in a diff
106
+ * as a decision.
102
107
  *
103
108
  * Two consumers read it: the churn rule, and the caller's progress bar, which
104
- * shows a bare token count without a window. Both degrade exactly as before
105
- * on `'unknown'`.
109
+ * shows a bare token count without a window. Both degrade on `'unknown'`.
106
110
  */
107
111
  contextWindow: number | 'unknown';
108
112
  /**
109
113
  * WHICH KIND of worker child this is — the whole guard policy, in one word.
110
114
  *
111
- * REQUIRED, and required on purpose. The ten guard knobs this replaces used
112
- * to sit here as independent optionals, so a caller that named none of them
113
- * still got a full policy and nobody could see which one. That is how the
114
- * ad-hoc `pi-worker` tool came to run the strictest wall clock of the three
115
- * children without anyone deciding it should. See worker-profiles.ts.
115
+ * REQUIRED, and required on purpose. As independent optionals, a caller that
116
+ * named none of the guard knobs still got a full policy and nobody could see
117
+ * which one — so a child can end up running the strictest wall clock of the
118
+ * three without anyone deciding it should. See worker-profiles.ts.
116
119
  */
117
120
  profile: WorkerProfileId;
118
121
  /**
@@ -121,10 +124,11 @@ export interface RunWorkerInput {
121
124
  */
122
125
  policyInputs?: WorkerPolicyInputs;
123
126
  /**
124
- * Whole guard rows laid over the profile's. TESTS AND A/B HARNESSES ONLY —
125
- * an override at a production call site is the hand-picked subset this
126
- * design exists to stop, and `worker-profiles.test.ts` fails the build if
127
- * one appears under src/ outside a test.
127
+ * Whole guard rows laid over the profile's. TESTS AND HARNESSES ONLY — an
128
+ * override at a production call site is the hand-picked subset this design
129
+ * exists to stop. `worker-profiles.test.ts` enforces it: its "no production
130
+ * source file passes an `override` to runWorker" test scans src/ for a leading
131
+ * `override:` and fails on any hit.
128
132
  */
129
133
  override?: WorkerGuardOverride;
130
134
  /**
@@ -133,9 +137,9 @@ export interface RunWorkerInput {
133
137
  *
134
138
  * WHY: asserting that a profile RESOLVES correctly proves nothing about
135
139
  * whether runWorker then READS it correctly — a rewiring that turns "0 means
136
- * off" into "0 means on" leaves every profile assertion green. This hook is
137
- * what lets a caller's own test (gate-child.test.ts) drive the REAL call
138
- * site and check the REAL policy, instead of re-typing the table.
140
+ * off" into "0 means on" leaves every profile assertion green. This hook lets
141
+ * a test drive the REAL call site and read back the REAL policy instead of
142
+ * re-typing the table; worker-profiles.test.ts is where those assertions live.
139
143
  */
140
144
  onPolicy?: (policy: WorkerGuardPolicy) => void;
141
145
  /** Backoff sleep, injectable so tests don't wait out the real delays. */
@@ -168,12 +172,10 @@ export interface RunWorkerInput {
168
172
  *
169
173
  * WHY: every restart branch below throws away a whole attempt's wall clock
170
174
  * along with its text, and `waitMs`/`workMs` describe the FINAL attempt only.
171
- * With no hook here those attempts were structurally invisible: mx5 run 18
172
- * burned 30 wall-clock timeouts / 120 minutes of compute that appeared in no
173
- * log and no timing widget, and 21 of the 23 affected workers reported
174
- * `exit=0` — clean successes as far as the run could tell. The discrepancy
175
- * was only recoverable by subtracting reported wait+work from the timestamps
176
- * of the `start` and `done` lines around it.
175
+ * With no hook here a discarded attempt is structurally invisible the worker
176
+ * still returns `exitCode` 0 and reads as a clean success, and the lost time is
177
+ * recoverable only by subtracting the reported wait+work from the timestamps
178
+ * around the call.
177
179
  */
178
180
  onRestart?: (restart: WorkerRestart) => void;
179
181
  }
@@ -200,13 +202,9 @@ export interface WorkerRestart {
200
202
  * thrown away.
201
203
  *
202
204
  * Recorded whatever `carryForward` says, because the DISCARD is the thing a
203
- * reader cannot otherwise see. A restart line reported how long an attempt
204
- * ran and why it died, and never what died with it so "the guards worked
205
- * and the run still returned 52 characters" and "the guards worked and the
206
- * run threw away a finished answer" print identically. Measured on the
207
- * ad-hoc `pi-worker` corpus: T024 lost an attempt to a dropped model socket
208
- * at 275s and returned 52 chars over 620s; nothing in the run said whether
209
- * those 275s held anything.
205
+ * reader cannot otherwise see. Without it, "the guards worked and the run
206
+ * returned almost nothing" and "the guards worked and the run threw away a
207
+ * finished answer" print identically.
210
208
  *
211
209
  * It is an OBSERVATION, not a decision: harvesting into `salvage` is still
212
210
  * gated on the profile, and this number changes no behaviour.
@@ -222,9 +220,9 @@ export interface RunWorkerResult {
222
220
  * The provider-reported cause when the model turn itself failed (disconnect,
223
221
  * fetch failed, 5xx after pi's own retries): pi delivers it as an assistant
224
222
  * message with stopReason "error" and EMPTY text, exit code 0. Phase children
225
- * have always surfaced this (child-runner.ts) research workers did not, so a
226
- * swallowed provider error reached the caller as an indistinguishable empty
227
- * answer and was reported as the useless "produced no output" (issue #10).
223
+ * surface this through child-runner.ts; without it a swallowed provider error
224
+ * reaches the caller as an indistinguishable empty answer and gets reported as
225
+ * the useless "produced no output".
228
226
  * Only meaningful when `text` is empty: a turn that produced text after pi
229
227
  * recovered is a success, and the first-error capture must not relabel it.
230
228
  */
@@ -341,28 +339,6 @@ export interface RunWorkerResult {
341
339
  idleMs: number;
342
340
  };
343
341
  }
344
- /**
345
- * The per-command ceiling for attempt N, halving each time a hang recurs.
346
- *
347
- * The first attempt gets the full configured ceiling — a genuinely slow build or
348
- * test suite deserves it. But every hang-caused restart carries
349
- * commandTimeoutHint, which tells the model in as many words to bound its
350
- * command; a SECOND hang means it ignored an explicit instruction, and a third
351
- * means it ignored it twice. Giving a non-complying child the full ceiling again
352
- * would put the worst case at 3 × 15 min = 45 minutes of dead time, resting
353
- * entirely on the model obeying prose. Halving bounds it at ~26 min while
354
- * costing a complying child nothing.
355
- *
356
- * `priorHangs` counts watchdog kills specifically, NOT total restarts — the
357
- * restart budget is shared with loop kills, and a child restarted for LOOPING
358
- * never received the bound-your-command hint, so its first hang still deserves
359
- * the full ceiling. Only a hang after a hang is defiance.
360
- *
361
- * Floored at 30s so repeated halving cannot shrink the ceiling to something no
362
- * real command could finish inside — but never ABOVE the configured ceiling
363
- * itself, or a caller asking for 10s would silently get 30.
364
- */
365
- export declare function commandCeilingForAttempt(baseMs: number, priorHangs: number): number;
366
342
  /**
367
343
  * Everything the restart ladder reads about one finished attempt, plus the
368
344
  * budgets it draws on. Assembled once per attempt so the rules below can be
@@ -377,7 +353,8 @@ interface RestartState {
377
353
  timedOut: boolean;
378
354
  modelError?: string;
379
355
  leaked: string | null;
380
- /** The cap this attempt actually died against the SCALE arm moves it. */
356
+ /** The cap this attempt actually died against, not the configured one:
357
+ * `extend`/`progress` can push the deadline out during the attempt. */
381
358
  effectiveCapMs: number;
382
359
  /** The child's tool string, which decides whether its edits can persist. */
383
360
  tools: string;
@@ -440,12 +417,4 @@ interface RestartRule {
440
417
  * becoming visible in `restarts`.
441
418
  */
442
419
  export declare const RESTART_RULES: readonly RestartRule[];
443
- /** What the command watchdog recorded when it killed an attempt. */
444
- interface CommandKill {
445
- toolName: string;
446
- timeoutMs: number;
447
- /** The command line itself, when the tool carried one — quoted into the hint
448
- * so the fresh child knows which call it must not repeat unbounded. */
449
- detail?: string;
450
- }
451
420
  export declare function runWorker(input: RunWorkerInput): Promise<RunWorkerResult>;