@wjarka/cezarion 0.16.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (907) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +594 -207
  3. package/dist/agent-config/account-identity.d.ts +3 -19
  4. package/dist/agent-config/account-identity.js +8 -5
  5. package/dist/agent-config/account-identity.js.map +1 -1
  6. package/dist/agent-config/catalog.d.ts +3 -14
  7. package/dist/agent-config/catalog.js.map +1 -1
  8. package/dist/agent-config/files.d.ts +2 -6
  9. package/dist/agent-config/files.js +2 -6
  10. package/dist/agent-config/files.js.map +1 -1
  11. package/dist/agent-config/model-settings/types.d.ts +1 -1
  12. package/dist/agent-config/seed.d.ts +11 -3
  13. package/dist/agent-config/seed.js +52 -48
  14. package/dist/agent-config/seed.js.map +1 -1
  15. package/dist/agent-config/service.js +3 -2
  16. package/dist/agent-config/service.js.map +1 -1
  17. package/dist/agent-config/validate.d.ts +1 -4
  18. package/dist/agent-config/validate.js.map +1 -1
  19. package/dist/application-update/helper.d.ts +2 -2
  20. package/dist/application-update/helper.js +7 -12
  21. package/dist/application-update/helper.js.map +1 -1
  22. package/dist/application-update/launcher.d.ts +4 -0
  23. package/dist/application-update/launcher.js +18 -12
  24. package/dist/application-update/launcher.js.map +1 -1
  25. package/dist/application-update/service.d.ts +3 -3
  26. package/dist/application-update/service.js +1 -1
  27. package/dist/application-update/service.js.map +1 -1
  28. package/dist/archive-on-merge-setting.d.ts +15 -0
  29. package/dist/archive-on-merge-setting.js +14 -0
  30. package/dist/archive-on-merge-setting.js.map +1 -0
  31. package/dist/artifacts/cli.d.ts +8 -0
  32. package/dist/artifacts/cli.js +21 -2
  33. package/dist/artifacts/cli.js.map +1 -1
  34. package/dist/artifacts/resolve.js +2 -1
  35. package/dist/artifacts/resolve.js.map +1 -1
  36. package/dist/artifacts/store.js.map +1 -1
  37. package/dist/automations/automation-cli.d.ts +59 -0
  38. package/dist/automations/automation-cli.js +509 -0
  39. package/dist/automations/automation-cli.js.map +1 -0
  40. package/dist/automations/builtin-skill.d.ts +7 -0
  41. package/dist/automations/builtin-skill.js +14 -0
  42. package/dist/automations/builtin-skill.js.map +1 -0
  43. package/dist/automations/github-baseline.d.ts +3 -0
  44. package/dist/automations/github-baseline.js +17 -0
  45. package/dist/automations/github-baseline.js.map +1 -0
  46. package/dist/automations/github-poller.d.ts +23 -4
  47. package/dist/automations/github-poller.js +157 -88
  48. package/dist/automations/github-poller.js.map +1 -1
  49. package/dist/automations/prompts.d.ts +12 -0
  50. package/dist/automations/prompts.js +160 -0
  51. package/dist/automations/prompts.js.map +1 -0
  52. package/dist/automations/schedule-runner.d.ts +43 -24
  53. package/dist/automations/schedule-runner.js +207 -20
  54. package/dist/automations/schedule-runner.js.map +1 -1
  55. package/dist/automations/scheduler.d.ts +10 -2
  56. package/dist/automations/scheduler.js +200 -54
  57. package/dist/automations/scheduler.js.map +1 -1
  58. package/dist/automations/service.d.ts +777 -0
  59. package/dist/automations/service.js +444 -0
  60. package/dist/automations/service.js.map +1 -0
  61. package/dist/automations/store.d.ts +17 -7
  62. package/dist/automations/store.js +88 -17
  63. package/dist/automations/store.js.map +1 -1
  64. package/dist/automations/task-template.d.ts +7 -2
  65. package/dist/automations/task-template.js +93 -44
  66. package/dist/automations/task-template.js.map +1 -1
  67. package/dist/automations/tool-adapter.d.ts +6 -0
  68. package/dist/automations/tool-adapter.js +108 -0
  69. package/dist/automations/tool-adapter.js.map +1 -0
  70. package/dist/automations/types.d.ts +1 -405
  71. package/dist/automations/types.js +1 -218
  72. package/dist/automations/types.js.map +1 -1
  73. package/dist/autosave-cleanup.d.ts +26 -0
  74. package/dist/autosave-cleanup.js +87 -0
  75. package/dist/autosave-cleanup.js.map +1 -0
  76. package/dist/autosave-git.d.ts +3 -0
  77. package/dist/autosave-git.js +67 -35
  78. package/dist/autosave-git.js.map +1 -1
  79. package/dist/autosave-group.d.ts +8 -0
  80. package/dist/autosave-group.js +61 -0
  81. package/dist/autosave-group.js.map +1 -0
  82. package/dist/autosave-holders.d.ts +31 -4
  83. package/dist/autosave-holders.js +92 -7
  84. package/dist/autosave-holders.js.map +1 -1
  85. package/dist/autosave-windows.d.ts +14 -0
  86. package/dist/autosave-windows.js +36 -2
  87. package/dist/autosave-windows.js.map +1 -1
  88. package/dist/ci-wait/client.d.ts +20 -3
  89. package/dist/ci-wait/client.js +40 -44
  90. package/dist/ci-wait/client.js.map +1 -1
  91. package/dist/ci-wait/controller.d.ts +622 -36
  92. package/dist/ci-wait/controller.js +152 -20
  93. package/dist/ci-wait/controller.js.map +1 -1
  94. package/dist/ci-wait/errors.d.ts +19 -0
  95. package/dist/ci-wait/errors.js +180 -2
  96. package/dist/ci-wait/errors.js.map +1 -1
  97. package/dist/ci-wait/github.d.ts +25 -1
  98. package/dist/ci-wait/github.js +76 -9
  99. package/dist/ci-wait/github.js.map +1 -1
  100. package/dist/ci-wait/mcp.d.ts +0 -1
  101. package/dist/ci-wait/mcp.js +0 -2
  102. package/dist/ci-wait/mcp.js.map +1 -1
  103. package/dist/ci-wait/supervisor.d.ts +7 -0
  104. package/dist/ci-wait/supervisor.js +113 -17
  105. package/dist/ci-wait/supervisor.js.map +1 -1
  106. package/dist/ci-wait/tools.d.ts +536 -16
  107. package/dist/ci-wait/tools.js +165 -20
  108. package/dist/ci-wait/tools.js.map +1 -1
  109. package/dist/config.d.ts +3 -17
  110. package/dist/config.js +4 -60
  111. package/dist/config.js.map +1 -1
  112. package/dist/contract/active-provider.d.ts +12 -0
  113. package/dist/contract/agent-profiles.d.ts +2 -10
  114. package/dist/contract/ask-schema.d.ts +22 -4
  115. package/dist/contract/ask.d.ts +6 -4
  116. package/dist/contract/attachments.d.ts +35 -0
  117. package/dist/contract/attention.d.ts +46 -37
  118. package/dist/contract/automation-requests.d.ts +308 -0
  119. package/dist/contract/automation-schedule.d.ts +40 -11
  120. package/dist/contract/automation-storage.d.ts +512 -0
  121. package/dist/contract/automations.d.ts +421 -40
  122. package/dist/contract/ci-wait.d.ts +41 -4
  123. package/dist/contract/config-requests.d.ts +36 -0
  124. package/dist/contract/conversations.d.ts +24 -10
  125. package/dist/contract/defined.d.ts +8 -0
  126. package/dist/contract/delegation.d.ts +312 -8
  127. package/dist/contract/events.d.ts +24 -3
  128. package/dist/contract/github-requests.d.ts +26 -0
  129. package/dist/contract/github.d.ts +60 -27
  130. package/dist/contract/handoff.d.ts +43 -0
  131. package/dist/contract/health.d.ts +2 -2
  132. package/dist/contract/image-path.d.ts +6 -0
  133. package/dist/contract/index.d.ts +31 -0
  134. package/dist/contract/index.js +3756 -1525
  135. package/dist/contract/live-coordination.d.ts +158 -0
  136. package/dist/contract/live-limits.d.ts +8 -0
  137. package/dist/contract/live.d.ts +123 -0
  138. package/dist/contract/pending-ask.d.ts +58 -0
  139. package/dist/contract/permissions.d.ts +54 -0
  140. package/dist/contract/preview.d.ts +33 -0
  141. package/dist/contract/project-limits.d.ts +33 -0
  142. package/dist/contract/projects.d.ts +486 -20
  143. package/dist/contract/provider-requests.d.ts +77 -0
  144. package/dist/contract/query-requests.d.ts +52 -0
  145. package/dist/contract/repo-requests.d.ts +12 -0
  146. package/dist/contract/run-labels.d.ts +8 -0
  147. package/dist/contract/run-limits.d.ts +8 -0
  148. package/dist/contract/run-predicates.d.ts +32 -0
  149. package/dist/contract/run-requests.d.ts +33 -0
  150. package/dist/contract/run-search.d.ts +193 -0
  151. package/dist/contract/runs.d.ts +2232 -1894
  152. package/dist/contract/scheduled-tasks.d.ts +187 -0
  153. package/dist/contract/skills.d.ts +22 -772
  154. package/dist/contract/team-skill-ref.d.ts +10 -0
  155. package/dist/{core → contract}/tool-display.d.ts +4 -10
  156. package/dist/contract/ui-state-requests.d.ts +60 -0
  157. package/dist/contract/version.d.ts +3 -0
  158. package/dist/contract/voice.d.ts +213 -0
  159. package/dist/contract/waits.d.ts +1204 -0
  160. package/dist/contract/workflow-file.d.ts +37 -0
  161. package/dist/contract/workflow-requests.d.ts +7 -0
  162. package/dist/contract/workflows.d.ts +1 -2
  163. package/dist/contract/workspace.d.ts +34 -82
  164. package/dist/contract/zoned-time.d.ts +2 -11
  165. package/dist/core/agent-env.d.ts +4 -16
  166. package/dist/core/agent-env.js +14 -16
  167. package/dist/core/agent-env.js.map +1 -1
  168. package/dist/core/agent-profiles.d.ts +28 -40
  169. package/dist/core/agent-profiles.js +56 -51
  170. package/dist/core/agent-profiles.js.map +1 -1
  171. package/dist/core/agent-runner.d.ts +88 -44
  172. package/dist/core/agent-runner.js +17 -18
  173. package/dist/core/agent-runner.js.map +1 -1
  174. package/dist/core/ask.d.ts +3 -0
  175. package/dist/core/ask.js +12 -0
  176. package/dist/core/ask.js.map +1 -1
  177. package/dist/core/backend-detect.js +16 -2
  178. package/dist/core/backend-detect.js.map +1 -1
  179. package/dist/core/claude-cli-runner.d.ts +23 -4
  180. package/dist/core/claude-cli-runner.js +280 -76
  181. package/dist/core/claude-cli-runner.js.map +1 -1
  182. package/dist/core/claude-model-catalog.d.ts +2 -10
  183. package/dist/core/claude-model-catalog.js +2 -10
  184. package/dist/core/claude-model-catalog.js.map +1 -1
  185. package/dist/core/claude-ui-mapper.d.ts +2 -2
  186. package/dist/core/claude-ui-mapper.js +94 -2
  187. package/dist/core/claude-ui-mapper.js.map +1 -1
  188. package/dist/core/codex-app-server-runner.d.ts +3 -4
  189. package/dist/core/codex-app-server-runner.js +146 -51
  190. package/dist/core/codex-app-server-runner.js.map +1 -1
  191. package/dist/core/codex-app-server-transport.d.ts +4 -3
  192. package/dist/core/codex-app-server-transport.js +11 -7
  193. package/dist/core/codex-app-server-transport.js.map +1 -1
  194. package/dist/core/codex-approvals.d.ts +12 -0
  195. package/dist/core/codex-approvals.js +161 -0
  196. package/dist/core/codex-approvals.js.map +1 -0
  197. package/dist/core/codex-permissions.d.ts +1 -1
  198. package/dist/core/codex-ui-mapper.js +45 -1
  199. package/dist/core/codex-ui-mapper.js.map +1 -1
  200. package/dist/core/cursor-acp-runner.d.ts +1 -1
  201. package/dist/core/cursor-acp-runner.js +39 -15
  202. package/dist/core/cursor-acp-runner.js.map +1 -1
  203. package/dist/core/cursor-cli-flags.d.ts +19 -0
  204. package/dist/core/cursor-cli-flags.js +47 -0
  205. package/dist/core/cursor-cli-flags.js.map +1 -0
  206. package/dist/core/cursor-model-catalog.d.ts +22 -0
  207. package/dist/core/cursor-model-catalog.js +53 -24
  208. package/dist/core/cursor-model-catalog.js.map +1 -1
  209. package/dist/core/cursor-print-capabilities.d.ts +16 -0
  210. package/dist/core/cursor-print-capabilities.js +141 -0
  211. package/dist/core/cursor-print-capabilities.js.map +1 -0
  212. package/dist/core/cursor-print-process.d.ts +31 -0
  213. package/dist/core/cursor-print-process.js +117 -0
  214. package/dist/core/cursor-print-process.js.map +1 -0
  215. package/dist/core/cursor-print-runner.d.ts +31 -0
  216. package/dist/core/cursor-print-runner.js +555 -0
  217. package/dist/core/cursor-print-runner.js.map +1 -0
  218. package/dist/core/cursor-print-tool-catalog.d.ts +10 -0
  219. package/dist/core/cursor-print-tool-catalog.js +91 -0
  220. package/dist/core/cursor-print-tool-catalog.js.map +1 -0
  221. package/dist/core/cursor-print-ui-mapper.d.ts +47 -0
  222. package/dist/core/cursor-print-ui-mapper.js +553 -0
  223. package/dist/core/cursor-print-ui-mapper.js.map +1 -0
  224. package/dist/core/cursor-runner.d.ts +24 -0
  225. package/dist/core/cursor-runner.js +149 -0
  226. package/dist/core/cursor-runner.js.map +1 -0
  227. package/dist/core/cursor-ui-mapper.js +5 -2
  228. package/dist/core/cursor-ui-mapper.js.map +1 -1
  229. package/dist/core/defined.d.ts +1 -0
  230. package/dist/core/defined.js +2 -0
  231. package/dist/core/defined.js.map +1 -0
  232. package/dist/core/hook-items.d.ts +14 -0
  233. package/dist/core/hook-items.js +13 -0
  234. package/dist/core/hook-items.js.map +1 -0
  235. package/dist/core/host-model-catalog.d.ts +2 -9
  236. package/dist/core/host-model-catalog.js +2 -9
  237. package/dist/core/host-model-catalog.js.map +1 -1
  238. package/dist/core/managed-session.js +15 -3
  239. package/dist/core/managed-session.js.map +1 -1
  240. package/dist/core/model-identity.d.ts +4 -21
  241. package/dist/core/model-identity.js.map +1 -1
  242. package/dist/core/model-presets.d.ts +2 -13
  243. package/dist/core/model-presets.js +2 -13
  244. package/dist/core/model-presets.js.map +1 -1
  245. package/dist/core/omp-model-catalog.js.map +1 -1
  246. package/dist/core/omp-runner.d.ts +6 -7
  247. package/dist/core/omp-runner.js +92 -33
  248. package/dist/core/omp-runner.js.map +1 -1
  249. package/dist/core/omp-ui-mapper.js +1 -1
  250. package/dist/core/omp-ui-mapper.js.map +1 -1
  251. package/dist/core/opencode-model-catalog.js.map +1 -1
  252. package/dist/core/opencode-permissions.d.ts +52 -0
  253. package/dist/core/opencode-permissions.js +101 -0
  254. package/dist/core/opencode-permissions.js.map +1 -0
  255. package/dist/core/opencode-server-runner.d.ts +10 -9
  256. package/dist/core/opencode-server-runner.js +286 -28
  257. package/dist/core/opencode-server-runner.js.map +1 -1
  258. package/dist/core/opencode-session-error.d.ts +15 -7
  259. package/dist/core/opencode-session-error.js +25 -9
  260. package/dist/core/opencode-session-error.js.map +1 -1
  261. package/dist/core/opencode-ui-mapper.js +2 -2
  262. package/dist/core/opencode-ui-mapper.js.map +1 -1
  263. package/dist/core/pi-model-catalog.js.map +1 -1
  264. package/dist/core/pi-runner.d.ts +12 -4
  265. package/dist/core/pi-runner.js +171 -63
  266. package/dist/core/pi-runner.js.map +1 -1
  267. package/dist/core/pi-ui-mapper.js +1 -1
  268. package/dist/core/pi-ui-mapper.js.map +1 -1
  269. package/dist/core/process-usage.d.ts +5 -0
  270. package/dist/core/process-usage.js +24 -4
  271. package/dist/core/process-usage.js.map +1 -1
  272. package/dist/core/provider-auth.d.ts +16 -107
  273. package/dist/core/provider-auth.js +16 -132
  274. package/dist/core/provider-auth.js.map +1 -1
  275. package/dist/core/runner-factory.d.ts +4 -1
  276. package/dist/core/runner-factory.js +3 -3
  277. package/dist/core/runner-factory.js.map +1 -1
  278. package/dist/core/runner-runtime.d.ts +22 -0
  279. package/dist/core/runner-runtime.js +66 -5
  280. package/dist/core/runner-runtime.js.map +1 -1
  281. package/dist/core/runner-tool-grants.d.ts +21 -0
  282. package/dist/core/runner-tool-grants.js +64 -0
  283. package/dist/core/runner-tool-grants.js.map +1 -0
  284. package/dist/core/secret-redaction.d.ts +3 -20
  285. package/dist/core/secret-redaction.js +3 -20
  286. package/dist/core/secret-redaction.js.map +1 -1
  287. package/dist/core/session-process.d.ts +22 -2
  288. package/dist/core/session-process.js +170 -12
  289. package/dist/core/session-process.js.map +1 -1
  290. package/dist/core/shell-env.d.ts +2 -15
  291. package/dist/core/shell-env.js +2 -15
  292. package/dist/core/shell-env.js.map +1 -1
  293. package/dist/core/ui-events.d.ts +60 -47
  294. package/dist/core/ui-events.js +0 -23
  295. package/dist/core/ui-events.js.map +1 -1
  296. package/dist/core/usage-limit.js.map +1 -1
  297. package/dist/data-gitignore.js +3 -1
  298. package/dist/data-gitignore.js.map +1 -1
  299. package/dist/delegation/capacity.d.ts +4 -8
  300. package/dist/delegation/capacity.js +4 -8
  301. package/dist/delegation/capacity.js.map +1 -1
  302. package/dist/delegation/cli.js +123 -21
  303. package/dist/delegation/cli.js.map +1 -1
  304. package/dist/delegation/context.d.ts +19 -3
  305. package/dist/delegation/context.js +217 -22
  306. package/dist/delegation/context.js.map +1 -1
  307. package/dist/delegation/conversations.d.ts +4 -3
  308. package/dist/delegation/conversations.js +7 -5
  309. package/dist/delegation/conversations.js.map +1 -1
  310. package/dist/delegation/destroy-observation.d.ts +1 -1
  311. package/dist/delegation/destroy-observation.js.map +1 -1
  312. package/dist/delegation/effort.js.map +1 -1
  313. package/dist/delegation/execution-identity.d.ts +1 -1
  314. package/dist/delegation/execution-identity.js +41 -7
  315. package/dist/delegation/execution-identity.js.map +1 -1
  316. package/dist/delegation/idle-test-app.d.ts +4 -0
  317. package/dist/delegation/idle-test-app.js +174 -0
  318. package/dist/delegation/idle-test-app.js.map +1 -0
  319. package/dist/delegation/input.js.map +1 -1
  320. package/dist/delegation/park-notice.d.ts +42 -0
  321. package/dist/delegation/park-notice.js +71 -0
  322. package/dist/delegation/park-notice.js.map +1 -0
  323. package/dist/delegation/policy.d.ts +2 -0
  324. package/dist/delegation/policy.js +9 -1
  325. package/dist/delegation/policy.js.map +1 -1
  326. package/dist/delegation/process-liveness.d.ts +10 -15
  327. package/dist/delegation/process-liveness.js +11 -35
  328. package/dist/delegation/process-liveness.js.map +1 -1
  329. package/dist/delegation/provision.js +21 -19
  330. package/dist/delegation/provision.js.map +1 -1
  331. package/dist/delegation/questions.d.ts +3 -1
  332. package/dist/delegation/questions.js +10 -5
  333. package/dist/delegation/questions.js.map +1 -1
  334. package/dist/delegation/readiness.d.ts +2 -2
  335. package/dist/delegation/results.d.ts +4 -1
  336. package/dist/delegation/results.js +49 -18
  337. package/dist/delegation/results.js.map +1 -1
  338. package/dist/delegation/retry-backoff.d.ts +8 -0
  339. package/dist/delegation/retry-backoff.js +8 -0
  340. package/dist/delegation/retry-backoff.js.map +1 -1
  341. package/dist/delegation/routes.d.ts +114 -30
  342. package/dist/delegation/routes.js +4 -1
  343. package/dist/delegation/routes.js.map +1 -1
  344. package/dist/delegation/scratch-cleanup.d.ts +4 -5
  345. package/dist/delegation/scratch-cleanup.js +10 -8
  346. package/dist/delegation/scratch-cleanup.js.map +1 -1
  347. package/dist/delegation/service.d.ts +12 -4
  348. package/dist/delegation/service.js +76 -28
  349. package/dist/delegation/service.js.map +1 -1
  350. package/dist/delegation/transport.d.ts +154 -70
  351. package/dist/delegation/wait.d.ts +11 -0
  352. package/dist/delegation/wait.js +24 -0
  353. package/dist/delegation/wait.js.map +1 -1
  354. package/dist/delegation/windows-test-app.d.ts +5 -0
  355. package/dist/delegation/windows-test-app.js +63 -0
  356. package/dist/delegation/windows-test-app.js.map +1 -0
  357. package/dist/delegation/windows-workspace-identity.d.ts +3 -0
  358. package/dist/delegation/windows-workspace-identity.js +22 -0
  359. package/dist/delegation/windows-workspace-identity.js.map +1 -0
  360. package/dist/delegation/workspace.d.ts +5 -10
  361. package/dist/delegation/workspace.js +136 -75
  362. package/dist/delegation/workspace.js.map +1 -1
  363. package/dist/detached-process.d.ts +103 -0
  364. package/dist/detached-process.js +301 -0
  365. package/dist/detached-process.js.map +1 -0
  366. package/dist/discovery/catalog.d.ts +2 -1
  367. package/dist/discovery/catalog.js.map +1 -1
  368. package/dist/discovery/cli.js +3 -1
  369. package/dist/discovery/cli.js.map +1 -1
  370. package/dist/git-diff-base.d.ts +6 -61
  371. package/dist/git-diff-base.js +6 -70
  372. package/dist/git-diff-base.js.map +1 -1
  373. package/dist/git-index-copy.d.ts +4 -0
  374. package/dist/git-index-copy.js +10 -0
  375. package/dist/git-index-copy.js.map +1 -0
  376. package/dist/git-worktree-lock.d.ts +2 -4
  377. package/dist/git-worktree-lock.js +2 -4
  378. package/dist/git-worktree-lock.js.map +1 -1
  379. package/dist/git-worktree-release.d.ts +2 -2
  380. package/dist/git-worktree-release.js.map +1 -1
  381. package/dist/git-worktree.d.ts +47 -76
  382. package/dist/git-worktree.js +240 -94
  383. package/dist/git-worktree.js.map +1 -1
  384. package/dist/handoff.d.ts +51 -41
  385. package/dist/handoff.js +130 -78
  386. package/dist/handoff.js.map +1 -1
  387. package/dist/index.js +60 -39
  388. package/dist/index.js.map +1 -1
  389. package/dist/merge-observations.d.ts +13 -0
  390. package/dist/merge-observations.js +55 -0
  391. package/dist/merge-observations.js.map +1 -0
  392. package/dist/open-url.js +4 -14
  393. package/dist/open-url.js.map +1 -1
  394. package/dist/paths.d.ts +10 -13
  395. package/dist/paths.js +36 -17
  396. package/dist/paths.js.map +1 -1
  397. package/dist/planner.d.ts +2 -1
  398. package/dist/planner.js +9 -6
  399. package/dist/planner.js.map +1 -1
  400. package/dist/preview/agent-address.d.ts +34 -0
  401. package/dist/preview/agent-address.js +51 -0
  402. package/dist/preview/agent-address.js.map +1 -0
  403. package/dist/preview/agent-marker.d.ts +17 -0
  404. package/dist/preview/agent-marker.js +71 -0
  405. package/dist/preview/agent-marker.js.map +1 -0
  406. package/dist/preview/cdp-proxy.d.ts +54 -0
  407. package/dist/preview/cdp-proxy.js +151 -0
  408. package/dist/preview/cdp-proxy.js.map +1 -0
  409. package/dist/preview/cdp.d.ts +39 -3
  410. package/dist/preview/cdp.js +155 -57
  411. package/dist/preview/cdp.js.map +1 -1
  412. package/dist/preview/chromium.d.ts +18 -6
  413. package/dist/preview/chromium.js +112 -25
  414. package/dist/preview/chromium.js.map +1 -1
  415. package/dist/preview/dev-server.d.ts +1 -1
  416. package/dist/preview/dev-server.js +20 -44
  417. package/dist/preview/dev-server.js.map +1 -1
  418. package/dist/preview/host.d.ts +70 -3
  419. package/dist/preview/host.js +314 -28
  420. package/dist/preview/host.js.map +1 -1
  421. package/dist/preview/registration.d.ts +10 -5
  422. package/dist/preview/registration.js +2 -0
  423. package/dist/preview/registration.js.map +1 -1
  424. package/dist/preview/session.d.ts +2 -0
  425. package/dist/preview/session.js +10 -0
  426. package/dist/preview/session.js.map +1 -1
  427. package/dist/process-wait/exit-file.d.ts +29 -0
  428. package/dist/process-wait/exit-file.js +67 -0
  429. package/dist/process-wait/exit-file.js.map +1 -0
  430. package/dist/process-wait/supervisor.d.ts +30 -0
  431. package/dist/process-wait/supervisor.js +71 -0
  432. package/dist/process-wait/supervisor.js.map +1 -0
  433. package/dist/release/snapshot.d.ts +6 -6
  434. package/dist/runs/agent-tmpdir.d.ts +51 -36
  435. package/dist/runs/agent-tmpdir.js +389 -132
  436. package/dist/runs/agent-tmpdir.js.map +1 -1
  437. package/dist/runs/auto-name.d.ts +6 -6
  438. package/dist/runs/auto-name.js +1 -1
  439. package/dist/runs/auto-name.js.map +1 -1
  440. package/dist/runs/client-request.d.ts +3 -3
  441. package/dist/runs/client-request.js +3 -3
  442. package/dist/runs/client-request.js.map +1 -1
  443. package/dist/runs/delegation-state.d.ts +11 -2
  444. package/dist/runs/delegation-state.js.map +1 -1
  445. package/dist/runs/event-history-agent-context.d.ts +14 -0
  446. package/dist/runs/event-history-agent-context.js +105 -0
  447. package/dist/runs/event-history-agent-context.js.map +1 -0
  448. package/dist/runs/event-history-context.d.ts +15 -0
  449. package/dist/runs/event-history-context.js +109 -0
  450. package/dist/runs/event-history-context.js.map +1 -0
  451. package/dist/runs/event-history.d.ts +4 -1
  452. package/dist/runs/event-history.js +29 -130
  453. package/dist/runs/event-history.js.map +1 -1
  454. package/dist/runs/history-stream.d.ts +2 -0
  455. package/dist/runs/history-stream.js +62 -0
  456. package/dist/runs/history-stream.js.map +1 -0
  457. package/dist/runs/legacy-index.d.ts +6 -19
  458. package/dist/runs/legacy-index.js +6 -19
  459. package/dist/runs/legacy-index.js.map +1 -1
  460. package/dist/runs/live-item-snapshots.d.ts +13 -0
  461. package/dist/runs/live-item-snapshots.js +79 -0
  462. package/dist/runs/live-item-snapshots.js.map +1 -0
  463. package/dist/runs/loaded-run-healing.d.ts +3 -0
  464. package/dist/runs/loaded-run-healing.js +17 -0
  465. package/dist/runs/loaded-run-healing.js.map +1 -0
  466. package/dist/runs/outcome-commit.d.ts +98 -0
  467. package/dist/runs/outcome-commit.js +132 -0
  468. package/dist/runs/outcome-commit.js.map +1 -0
  469. package/dist/runs/pull-requests.d.ts +14 -0
  470. package/dist/runs/pull-requests.js +96 -0
  471. package/dist/runs/pull-requests.js.map +1 -0
  472. package/dist/runs/raw-record.d.ts +3 -15
  473. package/dist/runs/raw-record.js +3 -15
  474. package/dist/runs/raw-record.js.map +1 -1
  475. package/dist/runs/retention.d.ts +2 -2
  476. package/dist/runs/retention.js +7 -0
  477. package/dist/runs/retention.js.map +1 -1
  478. package/dist/runs/review-gate.d.ts +1 -1
  479. package/dist/runs/review-gate.js.map +1 -1
  480. package/dist/runs/run-claims.d.ts +2 -9
  481. package/dist/runs/run-claims.js.map +1 -1
  482. package/dist/runs/run-database.d.ts +29 -34
  483. package/dist/runs/run-database.js +124 -46
  484. package/dist/runs/run-database.js.map +1 -1
  485. package/dist/runs/run-index.d.ts +6 -25
  486. package/dist/runs/run-index.js +25 -38
  487. package/dist/runs/run-index.js.map +1 -1
  488. package/dist/runs/run-row.d.ts +5 -34
  489. package/dist/runs/run-row.js +13 -38
  490. package/dist/runs/run-row.js.map +1 -1
  491. package/dist/runs/store.d.ts +1597 -744
  492. package/dist/runs/store.js +1231 -739
  493. package/dist/runs/store.js.map +1 -1
  494. package/dist/runs/task-markers.d.ts +1 -0
  495. package/dist/runs/task-markers.js +5 -1
  496. package/dist/runs/task-markers.js.map +1 -1
  497. package/dist/runs/task-refs.d.ts +3 -3
  498. package/dist/runs/transcript-facts-fold.d.ts +64 -0
  499. package/dist/runs/transcript-facts-fold.js +109 -0
  500. package/dist/runs/transcript-facts-fold.js.map +1 -0
  501. package/dist/runs/transcript-facts-load.d.ts +11 -0
  502. package/dist/runs/transcript-facts-load.js +66 -0
  503. package/dist/runs/transcript-facts-load.js.map +1 -0
  504. package/dist/runs/transcript-facts-queue.d.ts +30 -0
  505. package/dist/runs/transcript-facts-queue.js +227 -0
  506. package/dist/runs/transcript-facts-queue.js.map +1 -0
  507. package/dist/runs/transcript-facts-worker.d.ts +15 -0
  508. package/dist/runs/transcript-facts-worker.js +26 -0
  509. package/dist/runs/transcript-facts-worker.js.map +1 -0
  510. package/dist/runs/transcript-facts.d.ts +13 -51
  511. package/dist/runs/transcript-facts.js +86 -202
  512. package/dist/runs/transcript-facts.js.map +1 -1
  513. package/dist/runs/ui-event-sink.d.ts +5 -30
  514. package/dist/runs/ui-event-sink.js +8 -30
  515. package/dist/runs/ui-event-sink.js.map +1 -1
  516. package/dist/runs/webhook.d.ts +104 -38
  517. package/dist/runs/webhook.js +180 -77
  518. package/dist/runs/webhook.js.map +1 -1
  519. package/dist/server/app-type.d.ts +2 -17
  520. package/dist/server/archive-on-merge.d.ts +35 -0
  521. package/dist/server/archive-on-merge.js +202 -0
  522. package/dist/server/archive-on-merge.js.map +1 -0
  523. package/dist/server/capabilities.d.ts +3 -15
  524. package/dist/server/capabilities.js +6 -19
  525. package/dist/server/capabilities.js.map +1 -1
  526. package/dist/server/checkout-progress.d.ts +10 -0
  527. package/dist/server/checkout-progress.js +27 -0
  528. package/dist/server/checkout-progress.js.map +1 -0
  529. package/dist/server/checkout.d.ts +10 -19
  530. package/dist/server/checkout.js +15 -45
  531. package/dist/server/checkout.js.map +1 -1
  532. package/dist/server/cockpit-ownership.d.ts +2 -0
  533. package/dist/server/cockpit-ownership.js +9 -0
  534. package/dist/server/cockpit-ownership.js.map +1 -1
  535. package/dist/server/cold-repo-handles.d.ts +2 -7
  536. package/dist/server/cold-repo-handles.js +2 -7
  537. package/dist/server/cold-repo-handles.js.map +1 -1
  538. package/dist/server/completion-actions.d.ts +30 -0
  539. package/dist/server/completion-actions.js +204 -0
  540. package/dist/server/completion-actions.js.map +1 -0
  541. package/dist/server/create-project.d.ts +71 -0
  542. package/dist/server/create-project.js +448 -0
  543. package/dist/server/create-project.js.map +1 -0
  544. package/dist/server/forge/github-filters.d.ts +7 -1
  545. package/dist/server/forge/github-filters.js +66 -51
  546. package/dist/server/forge/github-filters.js.map +1 -1
  547. package/dist/server/forge/github-merge-requirements.d.ts +18 -0
  548. package/dist/server/forge/github-merge-requirements.js +137 -0
  549. package/dist/server/forge/github-merge-requirements.js.map +1 -0
  550. package/dist/server/forge/github.d.ts +98 -111
  551. package/dist/server/forge/github.js +625 -306
  552. package/dist/server/forge/github.js.map +1 -1
  553. package/dist/server/forge/types.d.ts +25 -22
  554. package/dist/server/fs-browse.d.ts +3 -28
  555. package/dist/server/fs-browse.js.map +1 -1
  556. package/dist/server/git-changes.d.ts +5 -15
  557. package/dist/server/git-changes.js +3 -50
  558. package/dist/server/git-changes.js.map +1 -1
  559. package/dist/server/git.d.ts +3 -1
  560. package/dist/server/git.js +12 -0
  561. package/dist/server/git.js.map +1 -1
  562. package/dist/server/github.d.ts +1 -1
  563. package/dist/server/github.js +1 -1
  564. package/dist/server/github.js.map +1 -1
  565. package/dist/server/launch-key.d.ts +2 -4
  566. package/dist/server/launch-key.js +2 -4
  567. package/dist/server/launch-key.js.map +1 -1
  568. package/dist/server/live-routes.d.ts +68 -0
  569. package/dist/server/live-routes.js +147 -0
  570. package/dist/server/live-routes.js.map +1 -0
  571. package/dist/server/open-in-app.d.ts +4 -13
  572. package/dist/server/open-in-app.js +5 -41
  573. package/dist/server/open-in-app.js.map +1 -1
  574. package/dist/server/open-in-targets.d.ts +42 -0
  575. package/dist/server/open-in-targets.js +110 -0
  576. package/dist/server/open-in-targets.js.map +1 -0
  577. package/dist/server/open-in-terminal.d.ts +3 -0
  578. package/dist/server/open-in-terminal.js +6 -26
  579. package/dist/server/open-in-terminal.js.map +1 -1
  580. package/dist/server/preview-cdp-socket.d.ts +21 -0
  581. package/dist/server/preview-cdp-socket.js +112 -0
  582. package/dist/server/preview-cdp-socket.js.map +1 -0
  583. package/dist/server/preview-socket.d.ts +11 -11
  584. package/dist/server/preview-socket.js +22 -22
  585. package/dist/server/preview-socket.js.map +1 -1
  586. package/dist/server/preview-sockets.d.ts +14 -0
  587. package/dist/server/preview-sockets.js +18 -0
  588. package/dist/server/preview-sockets.js.map +1 -0
  589. package/dist/server/project-context.d.ts +54 -18
  590. package/dist/server/project-context.js +178 -5
  591. package/dist/server/project-context.js.map +1 -1
  592. package/dist/server/provider-action-gate.d.ts +0 -2
  593. package/dist/server/provider-action-gate.js +0 -21
  594. package/dist/server/provider-action-gate.js.map +1 -1
  595. package/dist/server/provider-auth-runtime.d.ts +3 -18
  596. package/dist/server/provider-auth-runtime.js +3 -18
  597. package/dist/server/provider-auth-runtime.js.map +1 -1
  598. package/dist/server/repo-branches.d.ts +3 -9
  599. package/dist/server/repo-branches.js +6 -22
  600. package/dist/server/repo-branches.js.map +1 -1
  601. package/dist/server/run-event-feed.d.ts +20 -0
  602. package/dist/server/run-event-feed.js +190 -0
  603. package/dist/server/run-event-feed.js.map +1 -0
  604. package/dist/server/server-deps.d.ts +37 -0
  605. package/dist/server/server-deps.js +114 -0
  606. package/dist/server/server-deps.js.map +1 -0
  607. package/dist/server/server.d.ts +14082 -11998
  608. package/dist/server/server.js +785 -1647
  609. package/dist/server/server.js.map +1 -1
  610. package/dist/server/start-run-options.d.ts +82 -0
  611. package/dist/server/start-run-options.js +111 -0
  612. package/dist/server/start-run-options.js.map +1 -0
  613. package/dist/server/validators.d.ts +3 -29
  614. package/dist/server/validators.js +1 -2
  615. package/dist/server/validators.js.map +1 -1
  616. package/dist/server/ws.d.ts +3 -23
  617. package/dist/server/ws.js +3 -23
  618. package/dist/server/ws.js.map +1 -1
  619. package/dist/server-install/engine.d.ts +6 -9
  620. package/dist/server-install/engine.js +2 -9
  621. package/dist/server-install/engine.js.map +1 -1
  622. package/dist/server-install/platforms/ubuntu-vps.d.ts +1 -1
  623. package/dist/server-install/state.d.ts +2 -4
  624. package/dist/server-install/state.js +2 -4
  625. package/dist/server-install/state.js.map +1 -1
  626. package/dist/server-install/steps.d.ts +2 -5
  627. package/dist/server-install/steps.js +3 -6
  628. package/dist/server-install/steps.js.map +1 -1
  629. package/dist/server-install/types.d.ts +3 -6
  630. package/dist/server-install/types.js +2 -5
  631. package/dist/server-install/types.js.map +1 -1
  632. package/dist/server-install/ui.d.ts +2 -8
  633. package/dist/server-install/ui.js +3 -3
  634. package/dist/server-install/ui.js.map +1 -1
  635. package/dist/session-context.d.ts +64 -0
  636. package/dist/session-context.js +264 -0
  637. package/dist/session-context.js.map +1 -0
  638. package/dist/skills-provision.d.ts +62 -0
  639. package/dist/skills-provision.js +325 -0
  640. package/dist/skills-provision.js.map +1 -0
  641. package/dist/skills-remote.d.ts +29 -27
  642. package/dist/skills-remote.js +236 -100
  643. package/dist/skills-remote.js.map +1 -1
  644. package/dist/skills.d.ts +25 -36
  645. package/dist/skills.js +43 -54
  646. package/dist/skills.js.map +1 -1
  647. package/dist/subcommands.d.ts +11 -0
  648. package/dist/subcommands.js +24 -0
  649. package/dist/subcommands.js.map +1 -0
  650. package/dist/task-cli/cli.js +78 -25
  651. package/dist/task-cli/cli.js.map +1 -1
  652. package/dist/task-cli/discovery.d.ts +4 -2
  653. package/dist/task-cli/discovery.js +14 -13
  654. package/dist/task-cli/discovery.js.map +1 -1
  655. package/dist/task-cli/hint.d.ts +20 -0
  656. package/dist/task-cli/hint.js +14 -0
  657. package/dist/task-cli/hint.js.map +1 -0
  658. package/dist/task-cli/http.d.ts +1 -0
  659. package/dist/task-cli/http.js +3 -1
  660. package/dist/task-cli/http.js.map +1 -1
  661. package/dist/task-cli/projections.d.ts +14 -11
  662. package/dist/task-cli/projections.js +15 -11
  663. package/dist/task-cli/projections.js.map +1 -1
  664. package/dist/task-cli/watch.d.ts +18 -10
  665. package/dist/task-cli/watch.js +128 -20
  666. package/dist/task-cli/watch.js.map +1 -1
  667. package/dist/ui-state.d.ts +17 -3
  668. package/dist/ui-state.js +56 -9
  669. package/dist/ui-state.js.map +1 -1
  670. package/dist/update-check.d.ts +0 -10
  671. package/dist/update-check.js +1 -16
  672. package/dist/update-check.js.map +1 -1
  673. package/dist/voice/decide.d.ts +32 -0
  674. package/dist/voice/decide.js +297 -0
  675. package/dist/voice/decide.js.map +1 -0
  676. package/dist/voice/decision-log.d.ts +52 -0
  677. package/dist/voice/decision-log.js +107 -0
  678. package/dist/voice/decision-log.js.map +1 -0
  679. package/dist/voice/engine.d.ts +119 -0
  680. package/dist/voice/engine.js +60 -0
  681. package/dist/voice/engine.js.map +1 -0
  682. package/dist/voice/fake-engine.d.ts +10 -0
  683. package/dist/voice/fake-engine.js +192 -0
  684. package/dist/voice/fake-engine.js.map +1 -0
  685. package/dist/voice/jev-engine.d.ts +17 -0
  686. package/dist/voice/jev-engine.js +110 -0
  687. package/dist/voice/jev-engine.js.map +1 -0
  688. package/dist/voice/pending-ask.d.ts +17 -0
  689. package/dist/voice/pending-ask.js +50 -0
  690. package/dist/voice/pending-ask.js.map +1 -0
  691. package/dist/voice/routes.d.ts +115 -0
  692. package/dist/voice/routes.js +91 -0
  693. package/dist/voice/routes.js.map +1 -0
  694. package/dist/voice/sentence.d.ts +21 -0
  695. package/dist/voice/sentence.js +61 -0
  696. package/dist/voice/sentence.js.map +1 -0
  697. package/dist/voice/thresholds.d.ts +28 -0
  698. package/dist/voice/thresholds.js +29 -0
  699. package/dist/voice/thresholds.js.map +1 -0
  700. package/dist/webhooks/cli.d.ts +18 -0
  701. package/dist/webhooks/cli.js +145 -0
  702. package/dist/webhooks/cli.js.map +1 -0
  703. package/dist/webhooks/prompt.d.ts +5 -0
  704. package/dist/webhooks/prompt.js +26 -0
  705. package/dist/webhooks/prompt.js.map +1 -0
  706. package/dist/workflows/active-run.d.ts +167 -0
  707. package/dist/workflows/active-run.js +21 -0
  708. package/dist/workflows/active-run.js.map +1 -0
  709. package/dist/workflows/continuation-admission.d.ts +913 -0
  710. package/dist/workflows/continuation-admission.js +265 -0
  711. package/dist/workflows/continuation-admission.js.map +1 -0
  712. package/dist/workflows/execution-account.d.ts +13 -0
  713. package/dist/workflows/execution-account.js +18 -0
  714. package/dist/workflows/execution-account.js.map +1 -0
  715. package/dist/workflows/input-acknowledgement.d.ts +152 -0
  716. package/dist/workflows/input-acknowledgement.js +38 -0
  717. package/dist/workflows/input-acknowledgement.js.map +1 -0
  718. package/dist/workflows/line-order.d.ts +5 -0
  719. package/dist/workflows/line-order.js +25 -0
  720. package/dist/workflows/line-order.js.map +1 -0
  721. package/dist/workflows/outcome-batches.d.ts +20 -0
  722. package/dist/workflows/outcome-batches.js +25 -0
  723. package/dist/workflows/outcome-batches.js.map +1 -0
  724. package/dist/workflows/question-routing.d.ts +8 -0
  725. package/dist/workflows/question-routing.js +18 -0
  726. package/dist/workflows/question-routing.js.map +1 -0
  727. package/dist/workflows/run-scheduling.d.ts +35 -0
  728. package/dist/workflows/run-scheduling.js +61 -0
  729. package/dist/workflows/run-scheduling.js.map +1 -0
  730. package/dist/workflows/run-states.d.ts +190 -0
  731. package/dist/workflows/run-states.js +295 -0
  732. package/dist/workflows/run-states.js.map +1 -0
  733. package/dist/workflows/run.d.ts +1296 -278
  734. package/dist/workflows/run.js +5730 -3265
  735. package/dist/workflows/run.js.map +1 -1
  736. package/dist/workflows/turn-end.d.ts +116 -0
  737. package/dist/workflows/turn-end.js +68 -0
  738. package/dist/workflows/turn-end.js.map +1 -0
  739. package/dist/workflows/types.d.ts +35 -130
  740. package/dist/workflows/types.js +47 -100
  741. package/dist/workflows/types.js.map +1 -1
  742. package/dist/workflows/waits.d.ts +74 -0
  743. package/dist/workflows/waits.js +197 -0
  744. package/dist/workflows/waits.js.map +1 -0
  745. package/dist/workspace/agent-accounts.d.ts +5 -38
  746. package/dist/workspace/agent-accounts.js +14 -40
  747. package/dist/workspace/agent-accounts.js.map +1 -1
  748. package/dist/workspace/agent-profiles.d.ts +40 -16
  749. package/dist/workspace/agent-profiles.js +77 -17
  750. package/dist/workspace/agent-profiles.js.map +1 -1
  751. package/dist/workspace/config.d.ts +48 -49
  752. package/dist/workspace/config.js +68 -72
  753. package/dist/workspace/config.js.map +1 -1
  754. package/dist/workspace/migrations.d.ts +3 -13
  755. package/dist/workspace/migrations.js.map +1 -1
  756. package/dist/workspace/projects-cli.d.ts +1 -1
  757. package/dist/workspace/projects-cli.js.map +1 -1
  758. package/dist/workspace/projects.d.ts +15 -18
  759. package/dist/workspace/projects.js +20 -16
  760. package/dist/workspace/projects.js.map +1 -1
  761. package/dist/workspace/semaphore.d.ts +11 -45
  762. package/dist/workspace/semaphore.js +6 -18
  763. package/dist/workspace/semaphore.js.map +1 -1
  764. package/dist/workspace/ui-state.d.ts +6 -4
  765. package/dist/workspace/ui-state.js +6 -4
  766. package/dist/workspace/ui-state.js.map +1 -1
  767. package/dist/workspace/webhooks.d.ts +40 -0
  768. package/dist/workspace/webhooks.js +146 -0
  769. package/dist/workspace/webhooks.js.map +1 -0
  770. package/dist/worktree-manifest.d.ts +165 -0
  771. package/dist/worktree-manifest.js +530 -0
  772. package/dist/worktree-manifest.js.map +1 -0
  773. package/dist/worktree-setup.js.map +1 -1
  774. package/package.json +6 -5
  775. package/scripts/benchmark-run-store-fixture.ts +7 -3
  776. package/scripts/check-pack.mjs +3 -1
  777. package/scripts/inline-contract.mjs +80 -27
  778. package/scripts/install-as-command.mjs +3 -1
  779. package/scripts/measure-transcript-facts-health.mjs +87 -0
  780. package/scripts/measure-transcript-facts-lag.mjs +68 -0
  781. package/scripts/mock-ci-tool.mjs +49 -6
  782. package/scripts/mock-claude-model-refusal.mjs +42 -0
  783. package/scripts/mock-claude.mjs +833 -591
  784. package/scripts/mock-codex-app-server.mjs +785 -418
  785. package/scripts/mock-cursor-acp.mjs +296 -125
  786. package/scripts/mock-cursor-print.mjs +256 -0
  787. package/scripts/mock-deferred-turn-start.mjs +16 -0
  788. package/scripts/mock-delivery-control.d.mts +23 -0
  789. package/scripts/mock-delivery-control.mjs +80 -0
  790. package/scripts/mock-env-record.mjs +11 -0
  791. package/scripts/mock-failure-control.d.mts +13 -0
  792. package/scripts/mock-failure-control.mjs +68 -0
  793. package/scripts/mock-multi-pr.mjs +7 -0
  794. package/scripts/mock-nudge.mjs +45 -0
  795. package/scripts/mock-omp-rpc.mjs +429 -255
  796. package/scripts/mock-opencode-serve.mjs +972 -557
  797. package/scripts/mock-pi-rpc.mjs +558 -331
  798. package/scripts/mock-runner-crash.mjs +18 -2
  799. package/scripts/mock-session-context.d.mts +5 -0
  800. package/scripts/mock-session-context.mjs +56 -0
  801. package/scripts/mock-silent-tail.mjs +10 -3
  802. package/scripts/pi-default-tools.mjs +22 -0
  803. package/scripts/pi-project-skills.mjs +59 -0
  804. package/scripts/probe-cursor-print.mjs +627 -0
  805. package/scripts/transcript-facts-fixture.mjs +53 -0
  806. package/scripts/voice-replay.ts +50 -0
  807. package/scripts/windows-workspace-identity.cs +208 -0
  808. package/scripts/windows-workspace-identity.ps1 +10 -0
  809. package/web/dist/assets/alert-dialog-DfctKUMw.js +1 -0
  810. package/web/dist/assets/button-CeupvoKG.js +41 -0
  811. package/web/dist/assets/centered-state-hDsyXrnH.js +1 -0
  812. package/web/dist/assets/cez-idle-D3aj_9lp.js +1 -0
  813. package/web/dist/assets/diff-BnIXZK3i2.js +3 -0
  814. package/web/dist/assets/diff-controls-GewpW9aF.js +1 -0
  815. package/web/dist/assets/diff-view-Byo7gpvW.js +11 -0
  816. package/web/dist/assets/dropdown-menu-COj_J5wd.js +6 -0
  817. package/web/dist/assets/eye-B8okNWXU.js +1 -0
  818. package/web/dist/assets/git-toolbar-DY0z0n4S.js +1 -0
  819. package/web/dist/assets/github-DwU6ALRK.js +1 -0
  820. package/web/dist/assets/{image-preview-FOEfqpZP.js → image-preview-C_t9q45f.js} +1 -1
  821. package/web/dist/assets/index-BOfE8pyD.js +34 -0
  822. package/web/dist/assets/index-D9HpsmdW.css +1 -0
  823. package/web/dist/assets/live-protocol-Uce2NwEX.js +64 -0
  824. package/web/dist/assets/live-worker-BizfZSoh.ts +33 -0
  825. package/web/dist/assets/markdown-BBDDg-4t.js +1 -0
  826. package/web/dist/assets/nav-row-styles-AoIhhIwf.js +1 -0
  827. package/web/dist/assets/popover-D56fhiXj.js +1 -0
  828. package/web/dist/assets/preview-pane-connected-BmVqfSU5.js +3 -0
  829. package/web/dist/assets/reference-chip-gQNk-4jc.js +1 -0
  830. package/web/dist/assets/repo-git-B5ECDUuv.js +1 -0
  831. package/web/dist/assets/{repo-git-CoKp-g9K.css → repo-git-DVXNOJDT.css} +1 -1
  832. package/web/dist/assets/run-header-C0Y1NvEM.js +2 -0
  833. package/web/dist/assets/run-header-CC7VUTg9.css +1 -0
  834. package/web/dist/assets/skills-DUeTkZ9z.js +1 -0
  835. package/web/dist/assets/status-dot-1PR0i69P.js +1 -0
  836. package/web/dist/assets/tab-link-DmWk4l5O.js +1 -0
  837. package/web/dist/assets/task-changes-DKZXuW89.js +1 -0
  838. package/web/dist/assets/task-commits-BZ6KxWdF.js +1 -0
  839. package/web/dist/assets/task-files-DlF7Apcn.js +2 -0
  840. package/web/dist/assets/task-github-item-CVPo3geZ.js +1 -0
  841. package/web/dist/assets/task-thread-DtQ6uGfQ.css +1 -0
  842. package/web/dist/assets/task-thread-mm4-ECyo.js +9 -0
  843. package/web/dist/assets/thread-state-CIw2BlhT.js +4 -0
  844. package/web/dist/assets/use-hand-to-agent-state-BCDjzHnG.js +1 -0
  845. package/web/dist/assets/use-hand-to-agent-state-C7esPJ-N.css +1 -0
  846. package/web/dist/assets/workflows-D8vYD-ql.js +7 -0
  847. package/web/dist/assets/zoomable-image-CxQSsfcn.js +1 -0
  848. package/web/dist/index.html +13 -17
  849. package/web/dist/live-worker.js +4 -0
  850. package/dist/core/tool-display.js +0 -179
  851. package/dist/core/tool-display.js.map +0 -1
  852. package/dist/runs/human-ask-summary.d.ts +0 -9
  853. package/dist/runs/human-ask-summary.js +0 -39
  854. package/dist/runs/human-ask-summary.js.map +0 -1
  855. package/dist/runs/run-search.d.ts +0 -29
  856. package/dist/runs/run-search.js +0 -63
  857. package/dist/runs/run-search.js.map +0 -1
  858. package/dist/skills-banner.d.ts +0 -22
  859. package/dist/skills-banner.js +0 -41
  860. package/dist/skills-banner.js.map +0 -1
  861. package/dist/skills-update.d.ts +0 -88
  862. package/dist/skills-update.js +0 -392
  863. package/dist/skills-update.js.map +0 -1
  864. package/dist/todos.d.ts +0 -48
  865. package/dist/todos.js +0 -201
  866. package/dist/todos.js.map +0 -1
  867. package/web/dist/assets/agent-accounts-CFOBMVHc.js +0 -1
  868. package/web/dist/assets/alert-dialog-BrpNUwMt.js +0 -1
  869. package/web/dist/assets/button-C_rd7CPp.js +0 -43
  870. package/web/dist/assets/compare-variants-D6WXhvXA.js +0 -1
  871. package/web/dist/assets/diff-DrEARXTV.js +0 -3
  872. package/web/dist/assets/diff-controls-B1-j7nFg.js +0 -1
  873. package/web/dist/assets/diff-view-DvGLjdTk.js +0 -6
  874. package/web/dist/assets/dropdown-menu-BegOZFrj.js +0 -1
  875. package/web/dist/assets/format-DpNe3S0A.js +0 -1
  876. package/web/dist/assets/git-toolbar-Cw4ljmhB.js +0 -1
  877. package/web/dist/assets/github-CfV5sqL0.js +0 -1
  878. package/web/dist/assets/index-DgWWlOLy.js +0 -13
  879. package/web/dist/assets/index-fBFnuvxu.css +0 -1
  880. package/web/dist/assets/nav-row-styles-vp2JbhuJ.js +0 -1
  881. package/web/dist/assets/popover-BohP6WTx.js +0 -1
  882. package/web/dist/assets/preview-pane-connected-qTA5KNoJ.js +0 -3
  883. package/web/dist/assets/preview-state-vuMviq6q.js +0 -1
  884. package/web/dist/assets/prompt-templates-Cubdut_C.js +0 -15
  885. package/web/dist/assets/repo-git-Cf4t5PD0.js +0 -1
  886. package/web/dist/assets/run-diff-BpkUW37Z.js +0 -3
  887. package/web/dist/assets/run-header-68WHf9wV.js +0 -1
  888. package/web/dist/assets/run-header-8GObNx6F.css +0 -1
  889. package/web/dist/assets/search-x-I9Q8pgUa.js +0 -1
  890. package/web/dist/assets/skills-DFBiAuJG.js +0 -1
  891. package/web/dist/assets/skills-DiVIgKeU.js +0 -1
  892. package/web/dist/assets/square-terminal-B6RYYieR.js +0 -1
  893. package/web/dist/assets/status-dot-CqTJHSP9.js +0 -1
  894. package/web/dist/assets/tab-link-B07Hu4QX.js +0 -1
  895. package/web/dist/assets/task-changes--lQF6EYf.js +0 -1
  896. package/web/dist/assets/task-commits-Cx0qy4DN.js +0 -1
  897. package/web/dist/assets/task-files-D50s-gKW.js +0 -2
  898. package/web/dist/assets/task-github-item-DaqmSwYT.js +0 -1
  899. package/web/dist/assets/task-thread-BPQ64lui.js +0 -7
  900. package/web/dist/assets/task-thread-zNE2Q9E-.css +0 -1
  901. package/web/dist/assets/textarea-D20O4Pw0.js +0 -1
  902. package/web/dist/assets/thread-state-DWcFMrvb.js +0 -4
  903. package/web/dist/assets/use-hand-to-agent-state-BLIGmwbd.css +0 -1
  904. package/web/dist/assets/use-hand-to-agent-state-Cy9eyyfL.js +0 -1
  905. package/web/dist/assets/utils-JsL3ZsJf.js +0 -64
  906. package/web/dist/assets/workflows-jwG7uxqi.js +0 -11
  907. package/web/dist/assets/zoomable-image-BJJ64KGc.js +0 -1
@@ -6,8 +6,8 @@ import { fileURLToPath } from 'node:url';
6
6
  import { dirname, resolve as resolvePath } from 'node:path';
7
7
  import { parseAskMarker } from './ask.js';
8
8
  import { AUTO_END_DELAY_MS, DEFAULT_RUN_TIMEOUT_MS, EOF_KILL_GRACE_MS, EOF_TERM_GRACE_MS, KILL_GRACE_MS, boundOutputDrainAfterExit, } from './runner-runtime.js';
9
- import { isSignalTerminationExit, trackChildExit } from './agent-runner.js';
10
- import { signalSession, spawnSessionLeader } from './session-process.js';
9
+ import { isSignalTerminationExit, trackChildExit, unknownToolGrant } from './agent-runner.js';
10
+ import { signalSession, spawnSessionLeader, waitForEofExit } from './session-process.js';
11
11
  import { buildChildEnv } from './agent-env.js';
12
12
  import { cezarToolEnvNames, cezarToolNames } from '../ci-wait/tools.js';
13
13
  import { costWeightedTokens } from './usage.js';
@@ -23,8 +23,8 @@ export function resolveClaudeExecutable(override) {
23
23
  * `AgentRunner` over the Claude Code CLI in headless stream-json mode. Auth =
24
24
  * the host's logged-in Pro/Max subscription (no API key needed). Sandboxing is
25
25
  * `--allowedTools` (default-deny for anything not listed) + running inside the
26
- * repo `cwd`; `Bash` is narrowed to `Bash(<prefix>:*)` patterns only when
27
- * `bashAllowlist` is set — the zero-config default has no allowlist, so `Bash`
26
+ * repo `cwd`; `Bash` is narrowed to `Bash(<prefix>:*)` patterns only when the
27
+ * grant carries a `bashAllowlist` — the zero-config default has none, so `Bash`
28
28
  * is unrestricted shell access (#430).
29
29
  *
30
30
  * Session mechanics (multi-turn stdin, EOF watchdog, reopen window) follow
@@ -43,9 +43,8 @@ export const CLAUDE_SPEC_SUPPORT = {
43
43
  userPrompt: { honored: true, via: 'text block of the first stream-json user message on stdin' },
44
44
  images: { honored: true, via: 'image blocks ahead of the text in the first stdin message' },
45
45
  cwd: { honored: true, via: 'spawn cwd' },
46
- allowedTools: { honored: true, via: '--allowedTools, through buildAllowedTools' },
47
- restrictNativeDelegation: { honored: true, via: '--disallowedTools Agent,Task (D1)' },
48
- bashAllowlist: { honored: true, via: 'Bash(<prefix>:*) entries in --allowedTools, one per prefix' },
46
+ toolGrant: { honored: true, via: '--allowedTools, through buildAllowedTools, with a bashAllowlist as Bash(<prefix>:*) entries, one per prefix; unset and an empty list send none' },
47
+ restrictNativeDelegation: { honored: true, via: '--disallowedTools Agent,Task,Workflow (D1); context: fork skills are not blocked' },
49
48
  additionalDirectories: { honored: true, via: '--add-dir, once per directory' },
50
49
  env: { honored: true, via: 'merged over the child env through buildChildEnv' },
51
50
  model: { honored: true, via: '--model' },
@@ -78,7 +77,7 @@ export class ClaudeCliRunner {
78
77
  this.lastSession?.interrupt();
79
78
  }
80
79
  startSession(spec, onEvent, opts = {}) {
81
- const args = buildClaudeArgs(spec, process.env, { replayUserMessages: supportsReplayUserMessages(this.bin) });
80
+ const args = buildClaudeArgs(spec, process.env, claudeHelpFeatures(this.bin));
82
81
  let child;
83
82
  try {
84
83
  child = spawnSessionLeader(this.bin, args, {
@@ -125,6 +124,28 @@ export class ClaudeCliRunner {
125
124
  const humanUnsettled = new Set();
126
125
  let queuedTurnPending = false;
127
126
  const submissions = new InputSubmissions();
127
+ // Only live, observed success grants replay eligibility (hearsay-tools/cezarion#1351).
128
+ let reportedModel;
129
+ let reportedSession;
130
+ let successfulIdentity;
131
+ let attemptDidWork = false;
132
+ const sentLines = new Map();
133
+ const deferredHuman = [];
134
+ let refusalRetry;
135
+ let refusalTimer;
136
+ const cancelRefusalRetry = () => {
137
+ if (refusalTimer)
138
+ clearTimeout(refusalTimer);
139
+ refusalTimer = undefined;
140
+ refusalRetry = undefined;
141
+ };
142
+ child.once('exit', () => {
143
+ if (refusalTimer)
144
+ clearTimeout(refusalTimer);
145
+ refusalTimer = undefined;
146
+ // Retain the diagnosis until stdout drains: a final result can still
147
+ // be buffered when the process exit event arrives.
148
+ });
128
149
  const scheduleAutoEnd = () => {
129
150
  // Never arm the close window while an accepted turn is still running:
130
151
  // the timer the opening result would start here has nothing to cancel it,
@@ -132,7 +153,7 @@ export class ClaudeCliRunner {
132
153
  // result brings the count to 0 and arms the window as before.
133
154
  if (!opts.autoEndAfterFirstTurn || !stdinOpen || autoEndTimer || agentWritePending)
134
155
  return;
135
- if (unsettled.size > 0)
156
+ if (unsettled.size > 0 || refusalRetry || deferredHuman.length)
136
157
  return;
137
158
  autoEndTimer = setTimeout(() => {
138
159
  autoEndTimer = undefined;
@@ -143,9 +164,18 @@ export class ClaudeCliRunner {
143
164
  };
144
165
  let pendingMarkerAsk = false;
145
166
  let turnTextStart = 0;
146
- const sendMessage = (content, acknowledge, inputIds = [], humanFollowUp = false) => {
167
+ const sendMessage = (content, acknowledge, inputIds = [], humanFollowUp = false, retryWrite = false) => {
147
168
  if (!stdinOpen)
148
169
  return false;
170
+ if (refusalRetry && !retryWrite) {
171
+ if (!humanFollowUp)
172
+ return false;
173
+ const id = randomUUID();
174
+ // Snapshot now: caller-owned arrays must not change an accepted input.
175
+ deferredHuman.push({ id, content: structuredClone(content) });
176
+ humanUnsettled.add(id);
177
+ return true;
178
+ }
149
179
  // A line written while a turn runs joins that turn instead of opening one (#505).
150
180
  const opensTurn = unsettled.size === 0;
151
181
  if (opensTurn)
@@ -154,6 +184,7 @@ export class ClaudeCliRunner {
154
184
  if (opensTurn) {
155
185
  pendingMarkerAsk = false;
156
186
  turnTextStart = textChunks.length;
187
+ attemptDidWork = false;
157
188
  }
158
189
  // A follow-up inside the reopen window cancels the scheduled close.
159
190
  if (autoEndTimer) {
@@ -170,6 +201,7 @@ export class ClaudeCliRunner {
170
201
  try {
171
202
  child.stdin.write(`${line}\n`, acknowledge);
172
203
  unsettled.add(uuid);
204
+ sentLines.set(uuid, line);
173
205
  // Agent writes always pass an acknowledgement, even without inputIds (nudges, #544).
174
206
  // The opening/seed prompt shares this path without an ack, but it is not a human
175
207
  // follow-up — only session.sendMessage holds (#871 / #486).
@@ -192,8 +224,10 @@ export class ClaudeCliRunner {
192
224
  // 143 instead of dying from the signal, so without this flag our own
193
225
  // teardown reads as an agent failure (#703).
194
226
  let terminatedByCezar = false;
195
- const signalChild = (signal) => {
196
- terminatedByCezar = true;
227
+ let explicitEnd = false;
228
+ let automaticCleanupStarted = false;
229
+ const signalChild = (signal, intentional = true) => {
230
+ terminatedByCezar ||= intentional;
197
231
  signalSession(child, signal);
198
232
  };
199
233
  // Every watchdog below asks "is the child still alive?" — and that question
@@ -202,9 +236,14 @@ export class ClaudeCliRunner {
202
236
  // has to follow real termination or it never fires (#844).
203
237
  const hasExited = trackChildExit(child);
204
238
  const end = () => {
239
+ if (!hasExited()) {
240
+ explicitEnd = true;
241
+ terminatedByCezar ||= automaticCleanupStarted;
242
+ }
205
243
  if (!stdinOpen)
206
244
  return;
207
245
  stdinOpen = false;
246
+ cancelRefusalRetry();
208
247
  try {
209
248
  child.stdin.end();
210
249
  }
@@ -222,14 +261,17 @@ export class ClaudeCliRunner {
222
261
  }, EOF_TERM_GRACE_MS);
223
262
  eofTermTimer.unref?.();
224
263
  };
225
- const interrupt = () => {
264
+ const interrupt = (intentional = true) => {
265
+ if (!hasExited())
266
+ terminatedByCezar ||= intentional;
226
267
  stdinOpen = false;
268
+ cancelRefusalRetry();
227
269
  if (hasExited() || killTimer)
228
270
  return;
229
- signalChild('SIGTERM');
271
+ signalChild('SIGTERM', intentional);
230
272
  killTimer = setTimeout(() => {
231
273
  if (!hasExited())
232
- signalChild('SIGKILL');
274
+ signalChild('SIGKILL', intentional);
233
275
  }, KILL_GRACE_MS);
234
276
  killTimer.unref?.();
235
277
  };
@@ -258,6 +300,16 @@ export class ClaudeCliRunner {
258
300
  }, limitMs);
259
301
  deadline.unref?.();
260
302
  }
303
+ // EOF retains the existing grace and escalation order. Only attribution depends on evidence.
304
+ const cleanupAfterEof = async () => {
305
+ if (!timedOut && !hasExited()) {
306
+ const state = await waitForEofExit(child);
307
+ if (state !== 'exited') {
308
+ automaticCleanupStarted = true;
309
+ interrupt(explicitEnd || state === 'live');
310
+ }
311
+ }
312
+ };
261
313
  const result = (async () => {
262
314
  let outputFailure;
263
315
  try {
@@ -292,7 +344,86 @@ export class ClaudeCliRunner {
292
344
  continue;
293
345
  }
294
346
  opts.onActivity?.();
295
- const mappedMessage = normalizeIntentionalTeardownResult(msg, terminatedByCezar);
347
+ if (msg.type === 'system' && msg.subtype === 'init') {
348
+ reportedModel = typeof msg.model === 'string' && msg.model !== '' ? msg.model : undefined;
349
+ reportedSession = typeof msg.session_id === 'string' && msg.session_id !== '' ? msg.session_id : undefined;
350
+ }
351
+ // Background tasks and hooks can start work without assistant content
352
+ // or token usage. Only init is known to be identity-only metadata.
353
+ if ((msg.type === 'system' && msg.subtype !== 'init') || msg.type === 'tool_progress')
354
+ attemptDidWork = true;
355
+ if (msg.type === 'assistant' || msg.type === 'user') {
356
+ // A refusal's own visible text is diagnostic, not model work. Any
357
+ // other output, tool call/result, reasoning or nonzero usage forbids replay.
358
+ if (msg.message?.usage && !zeroClaudeUsage(msg.message.usage))
359
+ attemptDidWork = true;
360
+ const content = msg.message?.content;
361
+ if (content !== undefined && !Array.isArray(content))
362
+ attemptDidWork = true;
363
+ for (const block of Array.isArray(content) ? content : []) {
364
+ if (!block || typeof block !== 'object') {
365
+ attemptDidWork = true;
366
+ continue;
367
+ }
368
+ const b = block;
369
+ if (b.type !== 'text' || selectedModelRefusal(b.text) !== reportedModel || !reportedModel)
370
+ attemptDidWork = true;
371
+ }
372
+ }
373
+ const identity = reportedModel && reportedSession ? JSON.stringify([reportedSession, reportedModel]) : undefined;
374
+ const retryable = !terminatedByCezar && stdinOpen && !attemptDidWork
375
+ && msg.type === 'result' && msg.is_error === true
376
+ && identity !== undefined && identity === successfulIdentity
377
+ && selectedModelRefusal(msg.result) === reportedModel
378
+ && zeroClaudeUsage(msg.usage)
379
+ && zeroClaudeModelUsage(msg.modelUsage)
380
+ && (msg.total_cost_usd === undefined || msg.total_cost_usd === 0)
381
+ && unsettled.size === 1
382
+ && (msg.user_message_uuids === undefined || (Array.isArray(msg.user_message_uuids) && msg.user_message_uuids.length === 1
383
+ && msg.user_message_uuids[0] === [...unsettled][0]));
384
+ const uuid = [...unsettled][0];
385
+ const lineToRetry = uuid ? sentLines.get(uuid) : undefined;
386
+ if (retryable && uuid && lineToRetry && (!refusalRetry || refusalRetry.attempts < 2)) {
387
+ // Native attempts remain balanced, but a retryable result must not
388
+ // emit v1 error/turn-end: those would fail or park the workflow.
389
+ emitUi(state => mapClaudeMessage(msg, state));
390
+ refusalRetry ??= { uuid, line: lineToRetry, message: msg.result, attempts: 0 };
391
+ const retry = refusalRetry;
392
+ const delay = retry.attempts++ === 0 ? 5000 : 15000;
393
+ onEvent?.({ type: 'note', message: `Claude model refusal: ${retry.message}; retrying (${retry.attempts}/2) in ${delay / 1000}s` });
394
+ refusalTimer = setTimeout(() => {
395
+ refusalTimer = undefined;
396
+ if (!stdinOpen || hasExited() || refusalRetry !== retry)
397
+ return;
398
+ const input = JSON.parse(retry.line);
399
+ // A fresh native UUID, the same logical input IDs, and byte-for-byte
400
+ // content. Already-observed consumption is never acknowledged twice.
401
+ const ids = submissions.consume(retry.uuid);
402
+ const human = humanUnsettled.delete(retry.uuid);
403
+ unsettled.delete(retry.uuid);
404
+ sentLines.delete(retry.uuid);
405
+ if (!sendMessage(input.message.content, error => {
406
+ if (!error || !stdinOpen)
407
+ return;
408
+ cancelRefusalRetry();
409
+ onEvent?.({ type: 'error', message: retry.message });
410
+ interrupt();
411
+ }, ids, human, true)) {
412
+ cancelRefusalRetry();
413
+ onEvent?.({ type: 'error', message: retry.message });
414
+ interrupt();
415
+ return;
416
+ }
417
+ retry.uuid = [...unsettled][0];
418
+ retry.line = sentLines.get(retry.uuid);
419
+ }, delay);
420
+ refusalTimer.unref?.();
421
+ continue;
422
+ }
423
+ // Keep the original diagnosis on exhaustion, even if the final result
424
+ // differs. Other errors outside a retry still use their native message.
425
+ const originalRefusal = msg.type === 'result' && msg.is_error && refusalRetry?.message;
426
+ const mappedMessage = normalizeIntentionalTeardownResult(originalRefusal ? { ...msg, result: originalRefusal } : msg, terminatedByCezar);
296
427
  emitUi((state) => mapClaudeMessage(mappedMessage, state));
297
428
  let delta = 0;
298
429
  try {
@@ -309,6 +440,10 @@ export class ClaudeCliRunner {
309
440
  onEvent?.({ type: 'token-usage', tokensUsed });
310
441
  }
311
442
  if (msg.type === 'result') {
443
+ if (msg.is_error !== true && msg.subtype === 'success' && costWeightedTokens(msg.usage) > 0)
444
+ successfulIdentity = identity;
445
+ const wasRetrying = refusalRetry !== undefined;
446
+ cancelRefusalRetry();
312
447
  if (typeof msg.total_cost_usd === 'number' && Number.isFinite(msg.total_cost_usd) && msg.total_cost_usd >= 0) {
313
448
  onEvent?.({ type: 'cost', usd: msg.total_cost_usd });
314
449
  }
@@ -324,6 +459,7 @@ export class ClaudeCliRunner {
324
459
  // pipe, and only a named UUID or a replay echo proves the model read it (#486).
325
460
  const covered = settled.flatMap(id => {
326
461
  unsettled.delete(id);
462
+ sentLines.delete(id);
327
463
  if (named)
328
464
  humanUnsettled.delete(id);
329
465
  return msg.is_error === true ? [] : submissions.consume(id);
@@ -338,7 +474,21 @@ export class ClaudeCliRunner {
338
474
  // CLI never runs must not look like activity. Decided before the turn-end
339
475
  // callback, which may itself submit (and announce) the next prompt.
340
476
  queuedTurnPending = unsettled.size > 0;
477
+ // Remaining inputs belong to the next turn. Clear the completed
478
+ // turn's work before any queued frame (including system activity)
479
+ // arrives; resetting at its first assistant frame would erase work.
480
+ if (queuedTurnPending)
481
+ attemptDidWork = false;
341
482
  onEvent?.({ type: 'turn-end' });
483
+ // Drain later human input only after a successful logical turn.
484
+ // Failed turns retain the hold until the workflow tears down.
485
+ if (wasRetrying && msg.is_error !== true && stdinOpen) {
486
+ for (const input of deferredHuman.splice(0)) {
487
+ humanUnsettled.delete(input.id);
488
+ sendMessage(input.content, undefined, [], true);
489
+ }
490
+ opts.onAgentInputReady?.();
491
+ }
342
492
  scheduleAutoEnd();
343
493
  }
344
494
  }
@@ -356,24 +506,13 @@ export class ClaudeCliRunner {
356
506
  clearTimeout(deadline);
357
507
  if (autoEndTimer)
358
508
  clearTimeout(autoEndTimer);
509
+ if (refusalRetry && stdinOpen && !terminatedByCezar && !timedOut) {
510
+ onEvent?.({ type: 'error', message: refusalRetry.message });
511
+ }
359
512
  stdinOpen = false;
513
+ cancelRefusalRetry();
360
514
  }
361
- // Clean stdout EOF is not a read failure, but a still-running child would
362
- // leave waitForExit hanging on a timeout-less session. Give the normal
363
- // EOF→exit race a tick, then use the same SIGTERM→SIGKILL path as interrupt().
364
- if (!timedOut && !hasExited()) {
365
- await new Promise((resolve) => {
366
- if (hasExited())
367
- return resolve();
368
- const done = () => { child.off('exit', done); child.off('close', done); clearTimeout(timer); resolve(); };
369
- const timer = setTimeout(done, 50);
370
- timer.unref?.();
371
- child.once('exit', done);
372
- child.once('close', done);
373
- });
374
- if (!hasExited())
375
- interrupt();
376
- }
515
+ await cleanupAfterEof();
377
516
  const exitCode = await waitForExit(child);
378
517
  // Draining/destroying stdout is not process exit. Keep timeout escalation
379
518
  // armed until the child has actually settled.
@@ -429,9 +568,9 @@ export class ClaudeCliRunner {
429
568
  const session = {
430
569
  result,
431
570
  sendMessage: content => sendMessage(content, undefined, [], true),
432
- sendAgentMessage: (content, inputIds = []) => {
571
+ sendAgentMessage: (content, inputIds = [], options) => {
433
572
  // #505: allowed mid-turn — the CLI steers the line into the running turn.
434
- if (!stdinOpen || pendingMarkerAsk || agentWritePending)
573
+ if (!stdinOpen || refusalRetry || (pendingMarkerAsk && !options?.besideQuestion) || agentWritePending)
435
574
  return false;
436
575
  let resolve, reject;
437
576
  const acknowledged = new Promise((yes, no) => { resolve = yes; reject = no; });
@@ -459,7 +598,10 @@ export class ClaudeCliRunner {
459
598
  // transport boundary, not a promise that the model executed the input.
460
599
  return acknowledged;
461
600
  },
462
- discardQueuedMessages: () => undefined,
601
+ discardQueuedMessages: () => {
602
+ for (const input of deferredHuman.splice(0))
603
+ humanUnsettled.delete(input.id);
604
+ },
463
605
  holdsHumanInput: () => humanUnsettled.size > 0,
464
606
  heldHumanInputCount: () => humanUnsettled.size,
465
607
  end,
@@ -473,34 +615,25 @@ export class ClaudeCliRunner {
473
615
  return session;
474
616
  }
475
617
  }
476
- /**
477
- * Build the headless argv. `--input-format stream-json` reads user messages
478
- * from stdin; `--output-format stream-json --verbose` gives per-event NDJSON;
479
- * `--permission-mode dontAsk` keeps headless runs non-interactive: tools in
480
- * `--allowedTools` proceed and everything else is denied instead of prompting.
481
- * `CEZ_CLAUDE_PERMISSION_MODE` selects `dontAsk` / `acceptEdits` / `bypass`
482
- * (`bypass` emits `--dangerously-skip-permissions` instead). Unset or unknown
483
- * keeps today's path: `CEZ_APPROVAL_GATE=1` opts into `acceptEdits` (#435).
484
- * `CEZ_CLAUDE_SETTING_SOURCES` optionally adds `--setting-sources`.
485
- */
486
- /** `--replay-user-messages` is the read signal (#505), but an older CLI rejects unknown
487
- * options at startup. Read the installed CLI's own `--help` once per binary; without the
488
- * flag, result coverage (`user_message_uuids`) still reports reads. */
489
- const replaySupport = new Map();
490
- export function supportsReplayUserMessages(bin) {
491
- const known = replaySupport.get(bin);
618
+ /** Read the installed CLI's own `--help` once per binary. */
619
+ const helpFeatures = new Map();
620
+ export function claudeHelpFeatures(bin) {
621
+ const known = helpFeatures.get(bin);
492
622
  if (known !== undefined)
493
623
  return known;
494
- let supported = false;
624
+ let help = '';
495
625
  try {
496
- supported = execFileSync(bin, ['--help'], { encoding: 'utf8', timeout: 5_000, stdio: ['ignore', 'pipe', 'ignore'] })
497
- .includes('--replay-user-messages');
626
+ help = execFileSync(bin, ['--help'], { encoding: 'utf8', timeout: 5_000, stdio: ['ignore', 'pipe', 'ignore'] });
498
627
  }
499
628
  catch {
500
- supported = false;
629
+ help = '';
501
630
  }
502
- replaySupport.set(bin, supported);
503
- return supported;
631
+ const features = {
632
+ replayUserMessages: help.includes('--replay-user-messages'),
633
+ includeHookEvents: help.includes('--include-hook-events'),
634
+ };
635
+ helpFeatures.set(bin, features);
636
+ return features;
504
637
  }
505
638
  export function buildClaudeArgs(spec, env = process.env, features = { replayUserMessages: true }) {
506
639
  const args = [
@@ -513,6 +646,31 @@ export function buildClaudeArgs(spec, env = process.env, features = { replayUser
513
646
  // Echo each stdin line when the model consumes it: the consumption signal (#505).
514
647
  if (features.replayUserMessages)
515
648
  args.push('--replay-user-messages');
649
+ // Every hook's lifecycle, so the transcript can show what hooks told the agent (#961).
650
+ if (features.includeHookEvents)
651
+ args.push('--include-hook-events');
652
+ args.push(...claudePermissionArgs(env));
653
+ const settingSources = env.CEZ_CLAUDE_SETTING_SOURCES;
654
+ if (settingSources) {
655
+ args.push('--setting-sources', settingSources);
656
+ }
657
+ if (spec.systemPrompt) {
658
+ args.push('--append-system-prompt', spec.systemPrompt);
659
+ }
660
+ args.push(...claudeSessionArgs(spec), ...claudeToolArgs(spec));
661
+ if (spec.model) {
662
+ args.push('--model', spec.model);
663
+ }
664
+ const effort = parseEffort(spec.effort);
665
+ if (effort)
666
+ args.push('--effort', effort);
667
+ for (const dir of spec.additionalDirectories ?? []) {
668
+ args.push('--add-dir', dir);
669
+ }
670
+ return args;
671
+ }
672
+ function claudePermissionArgs(env) {
673
+ const args = [];
516
674
  const permissionMode = env.CEZ_CLAUDE_PERMISSION_MODE;
517
675
  if (permissionMode === 'bypass') {
518
676
  args.push('--dangerously-skip-permissions');
@@ -523,13 +681,10 @@ export function buildClaudeArgs(spec, env = process.env, features = { replayUser
523
681
  else {
524
682
  args.push('--permission-mode', env.CEZ_APPROVAL_GATE === '1' ? 'acceptEdits' : 'dontAsk');
525
683
  }
526
- const settingSources = env.CEZ_CLAUDE_SETTING_SOURCES;
527
- if (settingSources) {
528
- args.push('--setting-sources', settingSources);
529
- }
530
- if (spec.systemPrompt) {
531
- args.push('--append-system-prompt', spec.systemPrompt);
532
- }
684
+ return args;
685
+ }
686
+ function claudeSessionArgs(spec) {
687
+ const args = [];
533
688
  // Pin the session so the user can `claude --resume <sessionId>` in the repo
534
689
  // to take over interactively after a run. With `resume` we reopen the
535
690
  // existing on-disk conversation instead.
@@ -541,11 +696,20 @@ export function buildClaudeArgs(spec, env = process.env, features = { replayUser
541
696
  args.push('--session-id', spec.sessionId);
542
697
  }
543
698
  }
699
+ return args;
700
+ }
701
+ function claudeToolArgs(spec) {
702
+ const args = [];
544
703
  // Claude 2.1.260 --help: per-process deny rules; Agent is current, Task
545
- // remains the name in older harnesses/recorded fixtures. Never widen grants.
704
+ // remains the name in older harnesses/recorded fixtures. Workflow runs a
705
+ // script that starts subagents; a free 2.1.303 probe (`/reload-plugins` as
706
+ // the only stream-json line) lists it in init `tools` under `Agent,Task` and
707
+ // drops it under this deny. `context: fork` skills still start a subagent
708
+ // (AGENT_PROTOCOL.md D1 forked-skill gap, hearsay-tools/cezarion#1284).
709
+ // Never widen grants.
546
710
  if (spec.restrictNativeDelegation)
547
- args.push('--disallowedTools', 'Agent,Task');
548
- const allowed = buildAllowedTools(spec.allowedTools ?? [], spec.bashAllowlist);
711
+ args.push('--disallowedTools', 'Agent,Task,Workflow');
712
+ const allowed = claudeAllowedTools(spec.toolGrant);
549
713
  if (spec.cezarTools) {
550
714
  const { name, command, args: toolArgs } = spec.cezarTools;
551
715
  args.push('--mcp-config', JSON.stringify({ mcpServers: { [name]: {
@@ -558,17 +722,22 @@ export function buildClaudeArgs(spec, env = process.env, features = { replayUser
558
722
  if (allowed.length > 0) {
559
723
  args.push('--allowedTools', allowed.join(','));
560
724
  }
561
- if (spec.model) {
562
- args.push('--model', spec.model);
563
- }
564
- const effort = parseEffort(spec.effort);
565
- if (effort)
566
- args.push('--effort', effort);
567
- for (const dir of spec.additionalDirectories ?? []) {
568
- args.push('--add-dir', dir);
569
- }
570
725
  return args;
571
726
  }
727
+ /**
728
+ * The `--allowedTools` entries for each grant kind. No entries sends no flag, so
729
+ * Claude's permission mode and the user's settings decide; an empty list does
730
+ * the same (hearsay-tools/cezarion#1849).
731
+ */
732
+ function claudeAllowedTools(grant) {
733
+ switch (grant.kind) {
734
+ case 'unset': return [];
735
+ case 'step-default':
736
+ case 'inherited':
737
+ case 'explicit': return buildAllowedTools(grant.tools, grant.bashAllowlist);
738
+ default: return unknownToolGrant(grant);
739
+ }
740
+ }
572
741
  /**
573
742
  * Map `allowedTools` onto claude's `--allowedTools` syntax. `Bash` with a
574
743
  * `bashAllowlist` becomes one `Bash(<prefix>:*)` entry per allowed prefix;
@@ -599,6 +768,41 @@ function mockClaudePath() {
599
768
  // here = <pkg>/dist/core (built) or <pkg>/src/core (tsx dev).
600
769
  return resolvePath(here, '..', '..', 'scripts', 'mock-claude.mjs');
601
770
  }
771
+ /** Fail closed on absent/partial/invalid usage; include cache and nested counters. */
772
+ function zeroClaudeUsage(usage) {
773
+ if (!usage || typeof usage !== 'object' || Array.isArray(usage))
774
+ return false;
775
+ const record = usage;
776
+ if (record.input_tokens !== 0 || record.output_tokens !== 0)
777
+ return false;
778
+ const zero = (value) => typeof value === 'number' ? value === 0
779
+ : value !== null && typeof value === 'object' && !Array.isArray(value) && Object.values(value).every(zero);
780
+ return Object.entries(record).every(([key, value]) =>
781
+ // Claude includes this non-accounting metadata in some usage envelopes.
782
+ (key === 'service_tier' && typeof value === 'string') || zero(value));
783
+ }
784
+ /** Per-model accounting must agree with the aggregate before replay is safe. */
785
+ function zeroClaudeModelUsage(usage) {
786
+ if (usage === undefined)
787
+ return true;
788
+ if (!usage || typeof usage !== 'object' || Array.isArray(usage))
789
+ return false;
790
+ return Object.values(usage).every(model => {
791
+ if (!model || typeof model !== 'object' || Array.isArray(model))
792
+ return false;
793
+ const record = model;
794
+ if (record.inputTokens !== 0 || record.outputTokens !== 0)
795
+ return false;
796
+ return Object.entries(record).every(([key, value]) => key === 'contextWindow' || key === 'maxOutputTokens'
797
+ ? typeof value === 'number' && Number.isFinite(value) && value >= 0
798
+ : value === 0);
799
+ });
800
+ }
801
+ function selectedModelRefusal(text) {
802
+ return typeof text === 'string'
803
+ ? /^There's an issue with the selected model \(([^()]+)\)\. It may not exist or you may not have access to it\. Run --model to pick a different model\.$/.exec(text.trim())?.[1]
804
+ : undefined;
805
+ }
602
806
  function normalizeIntentionalTeardownResult(msg, terminatedByCezar) {
603
807
  if (terminatedByCezar
604
808
  && msg.type === 'result'