@wjarka/cezarion 0.15.1 → 0.16.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 (462) hide show
  1. package/README.md +167 -46
  2. package/dist/agent-config/catalog.d.ts +6 -2
  3. package/dist/agent-config/catalog.js +78 -3
  4. package/dist/agent-config/catalog.js.map +1 -1
  5. package/dist/agent-config/model-settings/shared.js +6 -3
  6. package/dist/agent-config/model-settings/shared.js.map +1 -1
  7. package/dist/agent-config/models.js +4 -0
  8. package/dist/agent-config/models.js.map +1 -1
  9. package/dist/agent-config/validate.js +6 -0
  10. package/dist/agent-config/validate.js.map +1 -1
  11. package/dist/artifacts/cli.js +10 -2
  12. package/dist/artifacts/cli.js.map +1 -1
  13. package/dist/automations/coordinator.d.ts +7 -0
  14. package/dist/automations/coordinator.js +22 -2
  15. package/dist/automations/coordinator.js.map +1 -1
  16. package/dist/automations/github-poller.d.ts +4 -4
  17. package/dist/automations/github-poller.js.map +1 -1
  18. package/dist/automations/schedule-runner.d.ts +130 -0
  19. package/dist/automations/schedule-runner.js +326 -0
  20. package/dist/automations/schedule-runner.js.map +1 -0
  21. package/dist/automations/scheduler.d.ts +38 -7
  22. package/dist/automations/scheduler.js +90 -22
  23. package/dist/automations/scheduler.js.map +1 -1
  24. package/dist/automations/store.d.ts +80 -3
  25. package/dist/automations/store.js +208 -16
  26. package/dist/automations/store.js.map +1 -1
  27. package/dist/automations/task-template.d.ts +42 -6
  28. package/dist/automations/task-template.js +152 -24
  29. package/dist/automations/task-template.js.map +1 -1
  30. package/dist/automations/types.d.ts +142 -6
  31. package/dist/automations/types.js +64 -6
  32. package/dist/automations/types.js.map +1 -1
  33. package/dist/autosave-holders.js +8 -12
  34. package/dist/autosave-holders.js.map +1 -1
  35. package/dist/ci-wait/client.d.ts +8 -1
  36. package/dist/ci-wait/client.js +43 -1
  37. package/dist/ci-wait/client.js.map +1 -1
  38. package/dist/ci-wait/controller.d.ts +83 -4
  39. package/dist/ci-wait/controller.js +76 -11
  40. package/dist/ci-wait/controller.js.map +1 -1
  41. package/dist/ci-wait/errors.d.ts +7 -1
  42. package/dist/ci-wait/errors.js +36 -0
  43. package/dist/ci-wait/errors.js.map +1 -1
  44. package/dist/ci-wait/github.d.ts +2 -0
  45. package/dist/ci-wait/github.js +3 -1
  46. package/dist/ci-wait/github.js.map +1 -1
  47. package/dist/ci-wait/mcp.d.ts +2 -98
  48. package/dist/ci-wait/mcp.js +11 -25
  49. package/dist/ci-wait/mcp.js.map +1 -1
  50. package/dist/ci-wait/supervisor.d.ts +2 -1
  51. package/dist/ci-wait/supervisor.js +2 -1
  52. package/dist/ci-wait/supervisor.js.map +1 -1
  53. package/dist/ci-wait/tools.d.ts +307 -0
  54. package/dist/ci-wait/tools.js +63 -0
  55. package/dist/ci-wait/tools.js.map +1 -0
  56. package/dist/config.d.ts +3 -0
  57. package/dist/config.js +7 -0
  58. package/dist/config.js.map +1 -1
  59. package/dist/contract/agent-config.d.ts +5 -0
  60. package/dist/contract/agent-profiles.d.ts +15 -0
  61. package/dist/contract/automation-schedule.d.ts +60 -0
  62. package/dist/contract/automations.d.ts +208 -36
  63. package/dist/contract/delegation.d.ts +96 -0
  64. package/dist/contract/discovery.d.ts +7 -0
  65. package/dist/contract/github.d.ts +1 -0
  66. package/dist/contract/health.d.ts +6 -0
  67. package/dist/contract/index.d.ts +3 -0
  68. package/dist/contract/index.js +1445 -745
  69. package/dist/contract/preview.d.ts +508 -0
  70. package/dist/contract/runs.d.ts +716 -15
  71. package/dist/contract/skills.d.ts +39 -0
  72. package/dist/contract/workflows.d.ts +6 -0
  73. package/dist/contract/workspace.d.ts +65 -0
  74. package/dist/contract/zoned-time.d.ts +35 -0
  75. package/dist/core/agent-env.d.ts +11 -0
  76. package/dist/core/agent-env.js +27 -5
  77. package/dist/core/agent-env.js.map +1 -1
  78. package/dist/core/agent-profiles.js +7 -0
  79. package/dist/core/agent-profiles.js.map +1 -1
  80. package/dist/core/agent-runner.d.ts +49 -1
  81. package/dist/core/agent-runner.js +2 -1
  82. package/dist/core/agent-runner.js.map +1 -1
  83. package/dist/core/backend-detect.d.ts +3 -2
  84. package/dist/core/backend-detect.js +27 -1
  85. package/dist/core/backend-detect.js.map +1 -1
  86. package/dist/core/claude-cli-runner.d.ts +1 -0
  87. package/dist/core/claude-cli-runner.js +69 -19
  88. package/dist/core/claude-cli-runner.js.map +1 -1
  89. package/dist/core/codex-app-server-runner.d.ts +1 -0
  90. package/dist/core/codex-app-server-runner.js +200 -25
  91. package/dist/core/codex-app-server-runner.js.map +1 -1
  92. package/dist/core/codex-app-server-transport.d.ts +7 -3
  93. package/dist/core/codex-app-server-transport.js +11 -9
  94. package/dist/core/codex-app-server-transport.js.map +1 -1
  95. package/dist/core/cursor-acp-runner.d.ts +1 -0
  96. package/dist/core/cursor-acp-runner.js +24 -9
  97. package/dist/core/cursor-acp-runner.js.map +1 -1
  98. package/dist/core/host-model-catalog.js +2 -0
  99. package/dist/core/host-model-catalog.js.map +1 -1
  100. package/dist/core/managed-session.js +2 -0
  101. package/dist/core/managed-session.js.map +1 -1
  102. package/dist/core/model-identity.js +2 -0
  103. package/dist/core/model-identity.js.map +1 -1
  104. package/dist/core/model-presets.js +3 -0
  105. package/dist/core/model-presets.js.map +1 -1
  106. package/dist/core/omp-model-catalog.d.ts +43 -0
  107. package/dist/core/omp-model-catalog.js +205 -0
  108. package/dist/core/omp-model-catalog.js.map +1 -0
  109. package/dist/core/omp-runner.d.ts +73 -0
  110. package/dist/core/omp-runner.js +990 -0
  111. package/dist/core/omp-runner.js.map +1 -0
  112. package/dist/core/omp-ui-mapper.d.ts +106 -0
  113. package/dist/core/omp-ui-mapper.js +882 -0
  114. package/dist/core/omp-ui-mapper.js.map +1 -0
  115. package/dist/core/opencode-server-runner.d.ts +18 -4
  116. package/dist/core/opencode-server-runner.js +337 -96
  117. package/dist/core/opencode-server-runner.js.map +1 -1
  118. package/dist/core/opencode-session-error.d.ts +11 -0
  119. package/dist/core/opencode-session-error.js +26 -0
  120. package/dist/core/opencode-session-error.js.map +1 -0
  121. package/dist/core/opencode-ui-mapper.js +4 -36
  122. package/dist/core/opencode-ui-mapper.js.map +1 -1
  123. package/dist/core/pi-runner.d.ts +1 -0
  124. package/dist/core/pi-runner.js +75 -12
  125. package/dist/core/pi-runner.js.map +1 -1
  126. package/dist/core/provider-auth.d.ts +9 -2
  127. package/dist/core/provider-auth.js +43 -6
  128. package/dist/core/provider-auth.js.map +1 -1
  129. package/dist/core/runner-factory.js +3 -0
  130. package/dist/core/runner-factory.js.map +1 -1
  131. package/dist/core/runner-model-catalog.js +1 -0
  132. package/dist/core/runner-model-catalog.js.map +1 -1
  133. package/dist/core/runner-stderr.d.ts +2 -0
  134. package/dist/core/runner-stderr.js +20 -0
  135. package/dist/core/runner-stderr.js.map +1 -0
  136. package/dist/core/session-process.d.ts +22 -0
  137. package/dist/core/session-process.js +202 -0
  138. package/dist/core/session-process.js.map +1 -0
  139. package/dist/core/ui-events.d.ts +1 -1
  140. package/dist/core/usage-limit.js +3 -60
  141. package/dist/core/usage-limit.js.map +1 -1
  142. package/dist/data-gitignore.d.ts +6 -0
  143. package/dist/data-gitignore.js +57 -0
  144. package/dist/data-gitignore.js.map +1 -0
  145. package/dist/delegation/capacity.d.ts +19 -0
  146. package/dist/delegation/capacity.js +34 -0
  147. package/dist/delegation/capacity.js.map +1 -0
  148. package/dist/delegation/cli.js +13 -4
  149. package/dist/delegation/cli.js.map +1 -1
  150. package/dist/delegation/conversations.d.ts +4 -2
  151. package/dist/delegation/conversations.js +8 -12
  152. package/dist/delegation/conversations.js.map +1 -1
  153. package/dist/delegation/credentials.d.ts +2 -0
  154. package/dist/delegation/credentials.js +10 -0
  155. package/dist/delegation/credentials.js.map +1 -1
  156. package/dist/delegation/destroy-observation.d.ts +42 -0
  157. package/dist/delegation/destroy-observation.js +115 -0
  158. package/dist/delegation/destroy-observation.js.map +1 -0
  159. package/dist/delegation/execution-identity.d.ts +6 -0
  160. package/dist/delegation/execution-identity.js +1 -1
  161. package/dist/delegation/execution-identity.js.map +1 -1
  162. package/dist/delegation/policy.d.ts +3 -2
  163. package/dist/delegation/policy.js +7 -5
  164. package/dist/delegation/policy.js.map +1 -1
  165. package/dist/delegation/process-liveness.d.ts +57 -20
  166. package/dist/delegation/process-liveness.js +114 -92
  167. package/dist/delegation/process-liveness.js.map +1 -1
  168. package/dist/delegation/provision.js +6 -6
  169. package/dist/delegation/provision.js.map +1 -1
  170. package/dist/delegation/results.js +4 -2
  171. package/dist/delegation/results.js.map +1 -1
  172. package/dist/delegation/retry-backoff.d.ts +23 -0
  173. package/dist/delegation/retry-backoff.js +18 -0
  174. package/dist/delegation/retry-backoff.js.map +1 -0
  175. package/dist/delegation/routes.d.ts +64 -58
  176. package/dist/delegation/scratch-cleanup.d.ts +29 -0
  177. package/dist/delegation/scratch-cleanup.js +143 -0
  178. package/dist/delegation/scratch-cleanup.js.map +1 -0
  179. package/dist/delegation/service.d.ts +20 -1
  180. package/dist/delegation/service.js +233 -70
  181. package/dist/delegation/service.js.map +1 -1
  182. package/dist/delegation/transport.d.ts +12 -6
  183. package/dist/delegation/workspace.d.ts +23 -4
  184. package/dist/delegation/workspace.js +147 -31
  185. package/dist/delegation/workspace.js.map +1 -1
  186. package/dist/git-worktree-lock-helper.js +8 -3
  187. package/dist/git-worktree-lock-helper.js.map +1 -1
  188. package/dist/git-worktree-lock.d.ts +6 -1
  189. package/dist/git-worktree-lock.js +10 -4
  190. package/dist/git-worktree-lock.js.map +1 -1
  191. package/dist/git-worktree-release.d.ts +20 -0
  192. package/dist/git-worktree-release.js +27 -0
  193. package/dist/git-worktree-release.js.map +1 -0
  194. package/dist/git-worktree.d.ts +8 -2
  195. package/dist/git-worktree.js +19 -2
  196. package/dist/git-worktree.js.map +1 -1
  197. package/dist/handoff.d.ts +2 -2
  198. package/dist/handoff.js +1 -1
  199. package/dist/index.js +109 -76
  200. package/dist/index.js.map +1 -1
  201. package/dist/paths.d.ts +1 -1
  202. package/dist/paths.js +5 -1
  203. package/dist/paths.js.map +1 -1
  204. package/dist/preview/cdp.d.ts +13 -0
  205. package/dist/preview/cdp.js +69 -0
  206. package/dist/preview/cdp.js.map +1 -0
  207. package/dist/preview/chromium.d.ts +75 -0
  208. package/dist/preview/chromium.js +394 -0
  209. package/dist/preview/chromium.js.map +1 -0
  210. package/dist/preview/dev-server.d.ts +68 -0
  211. package/dist/preview/dev-server.js +341 -0
  212. package/dist/preview/dev-server.js.map +1 -0
  213. package/dist/preview/host.d.ts +154 -0
  214. package/dist/preview/host.js +681 -0
  215. package/dist/preview/host.js.map +1 -0
  216. package/dist/preview/registration.d.ts +63 -0
  217. package/dist/preview/registration.js +109 -0
  218. package/dist/preview/registration.js.map +1 -0
  219. package/dist/preview/session.d.ts +73 -0
  220. package/dist/preview/session.js +347 -0
  221. package/dist/preview/session.js.map +1 -0
  222. package/dist/preview/url.d.ts +6 -0
  223. package/dist/preview/url.js +17 -0
  224. package/dist/preview/url.js.map +1 -0
  225. package/dist/runs/agent-tmpdir-removal.d.ts +15 -0
  226. package/dist/runs/agent-tmpdir-removal.js +60 -0
  227. package/dist/runs/agent-tmpdir-removal.js.map +1 -0
  228. package/dist/runs/agent-tmpdir.d.ts +12 -1
  229. package/dist/runs/agent-tmpdir.js +123 -34
  230. package/dist/runs/agent-tmpdir.js.map +1 -1
  231. package/dist/runs/delegation-state.d.ts +5 -1
  232. package/dist/runs/delegation-state.js +9 -0
  233. package/dist/runs/delegation-state.js.map +1 -1
  234. package/dist/runs/event-history.d.ts +4 -4
  235. package/dist/runs/event-history.js +97 -117
  236. package/dist/runs/event-history.js.map +1 -1
  237. package/dist/runs/history-compressor.d.ts +29 -0
  238. package/dist/runs/history-compressor.js +116 -0
  239. package/dist/runs/history-compressor.js.map +1 -0
  240. package/dist/runs/history-file.d.ts +36 -0
  241. package/dist/runs/history-file.js +463 -0
  242. package/dist/runs/history-file.js.map +1 -0
  243. package/dist/runs/human-ask-summary.js +18 -13
  244. package/dist/runs/human-ask-summary.js.map +1 -1
  245. package/dist/runs/legacy-index.d.ts +62 -0
  246. package/dist/runs/legacy-index.js +168 -0
  247. package/dist/runs/legacy-index.js.map +1 -0
  248. package/dist/runs/raw-record.d.ts +52 -0
  249. package/dist/runs/raw-record.js +145 -0
  250. package/dist/runs/raw-record.js.map +1 -0
  251. package/dist/runs/retention.d.ts +13 -6
  252. package/dist/runs/retention.js +42 -13
  253. package/dist/runs/retention.js.map +1 -1
  254. package/dist/runs/run-claims.d.ts +23 -0
  255. package/dist/runs/run-claims.js +24 -0
  256. package/dist/runs/run-claims.js.map +1 -0
  257. package/dist/runs/run-database.d.ts +385 -0
  258. package/dist/runs/run-database.js +930 -0
  259. package/dist/runs/run-database.js.map +1 -0
  260. package/dist/runs/run-index.d.ts +35 -9
  261. package/dist/runs/run-index.js +200 -25
  262. package/dist/runs/run-index.js.map +1 -1
  263. package/dist/runs/run-row.d.ts +44 -0
  264. package/dist/runs/run-row.js +84 -0
  265. package/dist/runs/run-row.js.map +1 -0
  266. package/dist/runs/run-search.d.ts +29 -0
  267. package/dist/runs/run-search.js +63 -0
  268. package/dist/runs/run-search.js.map +1 -0
  269. package/dist/runs/store-open-error.d.ts +24 -0
  270. package/dist/runs/store-open-error.js +61 -0
  271. package/dist/runs/store-open-error.js.map +1 -0
  272. package/dist/runs/store.d.ts +667 -32
  273. package/dist/runs/store.js +2153 -324
  274. package/dist/runs/store.js.map +1 -1
  275. package/dist/runs/transcript-facts.d.ts +77 -0
  276. package/dist/runs/transcript-facts.js +302 -0
  277. package/dist/runs/transcript-facts.js.map +1 -0
  278. package/dist/runs/webhook.js +5 -4
  279. package/dist/runs/webhook.js.map +1 -1
  280. package/dist/runs/worker-execution.d.ts +22 -0
  281. package/dist/runs/worker-execution.js +30 -0
  282. package/dist/runs/worker-execution.js.map +1 -0
  283. package/dist/server/capabilities.d.ts +1 -0
  284. package/dist/server/capabilities.js +2 -0
  285. package/dist/server/capabilities.js.map +1 -1
  286. package/dist/server/cockpit-ownership.d.ts +8 -0
  287. package/dist/server/cockpit-ownership.js +19 -0
  288. package/dist/server/cockpit-ownership.js.map +1 -1
  289. package/dist/server/forge/github.d.ts +1 -4
  290. package/dist/server/forge/github.js +47 -23
  291. package/dist/server/forge/github.js.map +1 -1
  292. package/dist/server/git.js +1 -1
  293. package/dist/server/git.js.map +1 -1
  294. package/dist/server/open-in-app.js +1 -0
  295. package/dist/server/open-in-app.js.map +1 -1
  296. package/dist/server/preview-socket.d.ts +36 -0
  297. package/dist/server/preview-socket.js +126 -0
  298. package/dist/server/preview-socket.js.map +1 -0
  299. package/dist/server/project-context.d.ts +31 -4
  300. package/dist/server/project-context.js +73 -9
  301. package/dist/server/project-context.js.map +1 -1
  302. package/dist/server/provider-action-gate.js +1 -0
  303. package/dist/server/provider-action-gate.js.map +1 -1
  304. package/dist/server/repo-branches.d.ts +4 -3
  305. package/dist/server/repo-branches.js +5 -4
  306. package/dist/server/repo-branches.js.map +1 -1
  307. package/dist/server/server.d.ts +4500 -2727
  308. package/dist/server/server.js +651 -202
  309. package/dist/server/server.js.map +1 -1
  310. package/dist/server/upgrade-router.d.ts +23 -0
  311. package/dist/server/upgrade-router.js +53 -0
  312. package/dist/server/upgrade-router.js.map +1 -0
  313. package/dist/server/validators.d.ts +6 -1
  314. package/dist/server/validators.js +4 -4
  315. package/dist/server/validators.js.map +1 -1
  316. package/dist/server/ws.d.ts +16 -16
  317. package/dist/server/ws.js +56 -54
  318. package/dist/server/ws.js.map +1 -1
  319. package/dist/skills-remote.d.ts +14 -0
  320. package/dist/skills-remote.js +91 -15
  321. package/dist/skills-remote.js.map +1 -1
  322. package/dist/task-cli/cli.js +40 -16
  323. package/dist/task-cli/cli.js.map +1 -1
  324. package/dist/task-cli/discovery.d.ts +4 -3
  325. package/dist/task-cli/discovery.js +4 -3
  326. package/dist/task-cli/discovery.js.map +1 -1
  327. package/dist/task-cli/http.d.ts +2 -0
  328. package/dist/task-cli/http.js +10 -4
  329. package/dist/task-cli/http.js.map +1 -1
  330. package/dist/task-cli/projections.d.ts +5 -2
  331. package/dist/task-cli/projections.js +13 -0
  332. package/dist/task-cli/projections.js.map +1 -1
  333. package/dist/task-cli/watch.d.ts +15 -2
  334. package/dist/task-cli/watch.js +31 -9
  335. package/dist/task-cli/watch.js.map +1 -1
  336. package/dist/ui-state.d.ts +4 -3
  337. package/dist/ui-state.js +8 -3
  338. package/dist/ui-state.js.map +1 -1
  339. package/dist/workflows/grouped-command.d.ts +31 -0
  340. package/dist/workflows/grouped-command.js +143 -0
  341. package/dist/workflows/grouped-command.js.map +1 -0
  342. package/dist/workflows/run.d.ts +223 -42
  343. package/dist/workflows/run.js +1316 -398
  344. package/dist/workflows/run.js.map +1 -1
  345. package/dist/workflows/types.d.ts +12 -0
  346. package/dist/workflows/types.js +20 -0
  347. package/dist/workflows/types.js.map +1 -1
  348. package/dist/workspace/agent-accounts.d.ts +5 -1
  349. package/dist/workspace/agent-accounts.js +1 -0
  350. package/dist/workspace/agent-accounts.js.map +1 -1
  351. package/dist/workspace/agent-profiles.js +1 -1
  352. package/dist/workspace/agent-profiles.js.map +1 -1
  353. package/dist/workspace/config.d.ts +3 -1
  354. package/dist/workspace/config.js +1 -0
  355. package/dist/workspace/config.js.map +1 -1
  356. package/dist/worktree-setup.d.ts +85 -0
  357. package/dist/worktree-setup.js +164 -0
  358. package/dist/worktree-setup.js.map +1 -0
  359. package/package.json +7 -5
  360. package/scripts/benchmark-run-store-fixture.ts +428 -0
  361. package/scripts/benchmark-run-store.ts +743 -0
  362. package/scripts/benchmark-stuck-destroys.ts +143 -0
  363. package/scripts/mock-autonomous.mjs +11 -0
  364. package/scripts/mock-ci-tool.mjs +20 -5
  365. package/scripts/mock-claude.mjs +110 -1
  366. package/scripts/mock-codex-app-server.mjs +117 -2
  367. package/scripts/mock-codex-coalesce-steer.mjs +59 -0
  368. package/scripts/mock-codex-reverse-steer.mjs +130 -0
  369. package/scripts/mock-cursor-acp.mjs +75 -1
  370. package/scripts/mock-omp-rpc.mjs +605 -0
  371. package/scripts/mock-opencode-serve.mjs +312 -22
  372. package/scripts/mock-pi-rpc.mjs +109 -3
  373. package/scripts/mock-runner-crash.mjs +42 -0
  374. package/scripts/mock-silent-tail.mjs +78 -0
  375. package/scripts/mock-turn-messages.mjs +5 -0
  376. package/scripts/omp-ci-wait.mjs +29 -0
  377. package/scripts/omp-restrict-delegation.yml +4 -0
  378. package/scripts/pi-ci-wait.mjs +12 -9
  379. package/scripts/seed-archive-profile.ts +3 -3
  380. package/web/dist/assets/agent-accounts-CFOBMVHc.js +1 -0
  381. package/web/dist/assets/alert-dialog-BrpNUwMt.js +1 -0
  382. package/web/dist/assets/app-window-CSHwDX9N.js +1 -0
  383. package/web/dist/assets/button-C_rd7CPp.js +43 -0
  384. package/web/dist/assets/compare-variants-D6WXhvXA.js +1 -0
  385. package/web/dist/assets/diff-DrEARXTV.js +3 -0
  386. package/web/dist/assets/diff-controls-B1-j7nFg.js +1 -0
  387. package/web/dist/assets/{diff-view-DPn6bQ5W.js → diff-view-DvGLjdTk.js} +3 -3
  388. package/web/dist/assets/dropdown-menu-BegOZFrj.js +1 -0
  389. package/web/dist/assets/format-DpNe3S0A.js +1 -0
  390. package/web/dist/assets/git-toolbar-Cw4ljmhB.js +1 -0
  391. package/web/dist/assets/github-CfV5sqL0.js +1 -0
  392. package/web/dist/assets/{image-preview-DJ8cgb1Z.js → image-preview-FOEfqpZP.js} +1 -1
  393. package/web/dist/assets/index-DgWWlOLy.js +13 -0
  394. package/web/dist/assets/index-fBFnuvxu.css +1 -0
  395. package/web/dist/assets/{nav-row-styles-3j64kH5s.js → nav-row-styles-vp2JbhuJ.js} +1 -1
  396. package/web/dist/assets/play-CmVAj_fu.js +1 -0
  397. package/web/dist/assets/popover-BohP6WTx.js +1 -0
  398. package/web/dist/assets/preview-pane-connected-qTA5KNoJ.js +3 -0
  399. package/web/dist/assets/preview-state-vuMviq6q.js +1 -0
  400. package/web/dist/assets/prompt-templates-Cubdut_C.js +15 -0
  401. package/web/dist/assets/repo-git-Cf4t5PD0.js +1 -0
  402. package/web/dist/assets/{run-diff-5-RRdcVz.js → run-diff-BpkUW37Z.js} +3 -3
  403. package/web/dist/assets/run-header-68WHf9wV.js +1 -0
  404. package/web/dist/assets/skills-DiVIgKeU.js +1 -0
  405. package/web/dist/assets/square-terminal-B6RYYieR.js +1 -0
  406. package/web/dist/assets/status-dot-CqTJHSP9.js +1 -0
  407. package/web/dist/assets/{tab-link-K0hjzEXR.js → tab-link-B07Hu4QX.js} +1 -1
  408. package/web/dist/assets/task-changes--lQF6EYf.js +1 -0
  409. package/web/dist/assets/task-commits-Cx0qy4DN.js +1 -0
  410. package/web/dist/assets/task-files-D50s-gKW.js +2 -0
  411. package/web/dist/assets/task-github-item-DaqmSwYT.js +1 -0
  412. package/web/dist/assets/task-thread-BPQ64lui.js +7 -0
  413. package/web/dist/assets/{task-thread-Bw_nQuTx.css → task-thread-zNE2Q9E-.css} +1 -1
  414. package/web/dist/assets/textarea-D20O4Pw0.js +1 -0
  415. package/web/dist/assets/thread-state-DWcFMrvb.js +4 -0
  416. package/web/dist/assets/use-hand-to-agent-state-BLIGmwbd.css +1 -0
  417. package/web/dist/assets/use-hand-to-agent-state-Cy9eyyfL.js +1 -0
  418. package/web/dist/assets/{utils-fzNfbPzA.js → utils-JsL3ZsJf.js} +1 -1
  419. package/web/dist/assets/workflows-jwG7uxqi.js +11 -0
  420. package/web/dist/assets/{zoomable-image-CDmZ_Rtl.js → zoomable-image-BJJ64KGc.js} +1 -1
  421. package/web/dist/cezarion-lockup-dark.svg +1 -13
  422. package/web/dist/cezarion-lockup-light.svg +1 -13
  423. package/web/dist/cezarion-mark-dark.svg +1 -12
  424. package/web/dist/cezarion-mark-light.svg +1 -12
  425. package/web/dist/index.html +16 -21
  426. package/web/dist/assets/agent-accounts-CU2ZDv24.js +0 -1
  427. package/web/dist/assets/alert-dialog-C-xYE_dg.js +0 -43
  428. package/web/dist/assets/chevron-right-BENZ-1ZN.js +0 -1
  429. package/web/dist/assets/collapsible-DD9J91Iv.js +0 -1
  430. package/web/dist/assets/compare-variants-5FmqpFSN.js +0 -1
  431. package/web/dist/assets/diff-controls-Bj0YrioE.js +0 -1
  432. package/web/dist/assets/diff-rE8rm75J2.js +0 -3
  433. package/web/dist/assets/diff-stat-BKDCSVfJ.js +0 -1
  434. package/web/dist/assets/dropdown-menu-Ch5BYQh_.js +0 -1
  435. package/web/dist/assets/format-dBiNDNVe.js +0 -1
  436. package/web/dist/assets/git-toolbar-ClVvf5iF.js +0 -1
  437. package/web/dist/assets/github-BkNOyour.css +0 -1
  438. package/web/dist/assets/github-DeZMeMwJ.js +0 -1
  439. package/web/dist/assets/github-item-detail-W5F6GVjF.js +0 -1
  440. package/web/dist/assets/github-sidebar-model-DcMu-IK2.js +0 -1
  441. package/web/dist/assets/highlighter-CdHqIwFr.js +0 -3
  442. package/web/dist/assets/index-CatemBEL.js +0 -8
  443. package/web/dist/assets/index-MvfD8bZJ.css +0 -1
  444. package/web/dist/assets/markdown-zdKeLIYA.js +0 -2
  445. package/web/dist/assets/mobile-run-bar-BCfmFi8V.js +0 -1
  446. package/web/dist/assets/prompt-templates-CBPp39IU.js +0 -15
  447. package/web/dist/assets/reference-chip-D6owncJT.js +0 -1
  448. package/web/dist/assets/repo-git-CtdkZFey.js +0 -1
  449. package/web/dist/assets/run-header-BcjoDi0W.js +0 -1
  450. package/web/dist/assets/sheet-ChnYVrp1.js +0 -1
  451. package/web/dist/assets/skills-C8YKp2vr.js +0 -1
  452. package/web/dist/assets/task-changes-BW8YdWG8.js +0 -1
  453. package/web/dist/assets/task-commits-q2kB2y6L.js +0 -1
  454. package/web/dist/assets/task-files-pPL6_3Cr.js +0 -2
  455. package/web/dist/assets/task-github-item-BXF5R52U.js +0 -1
  456. package/web/dist/assets/task-thread-DtkFL3EC.js +0 -10
  457. package/web/dist/assets/textarea-DxlkE-Yd.js +0 -1
  458. package/web/dist/assets/token-metrics-DIAjrPlM.js +0 -1
  459. package/web/dist/assets/use-desktop-CrDny2uG.js +0 -1
  460. package/web/dist/assets/use-submit-shortcut-KWJsC906.js +0 -1
  461. package/web/dist/assets/workflows-TmcPEj2K.js +0 -11
  462. /package/web/dist/assets/{lib-BQXq3kEf2.js → lib-BQXq3kEf.js} +0 -0
@@ -0,0 +1,23 @@
1
+ /**
2
+ * One retry schedule for the cleanup loops that have no other wake source (hearsay-tools/cezarion#879):
3
+ * worker destroy, terminal scratch and orphaned-generation reprobes. Each stays at its fast cadence
4
+ * for `fastCount` attempts, so a holder that exits soon is noticed soon, then doubles up to `capMs`
5
+ * and stays there. None ever stops: cezar has no exit callback for a process it did not spawn.
6
+ */
7
+ export type Backoff = {
8
+ fastMs: number;
9
+ fastCount: number;
10
+ capMs: number;
11
+ };
12
+ export declare const DESTROY_BACKOFF: Backoff;
13
+ export declare const SCRATCH_BACKOFF: Backoff;
14
+ /** The orphan reprobe kept 15 s for its first 15 minutes before hearsay-tools/cezarion#879; that window is unchanged. */
15
+ export declare const ORPHAN_BACKOFF: Backoff;
16
+ /** For the batched reprobes: ids that probe together keep probing together, so they share a scan. */
17
+ export declare const noJitter: () => number;
18
+ /** Scheduled destroy attempts after which the cockpit says the cleanup needs attention: the first capped delay. */
19
+ export declare const DESTROY_ATTENTION_ATTEMPTS = 10;
20
+ /** Delay before the next attempt, after `attempt` consecutive failed attempts. Past the fast window
21
+ * the delay is stretched by up to 10 %, never shortened, so stuck items spread out and a capped
22
+ * delay is never under `capMs`. */
23
+ export declare function retryDelayMs(attempt: number, backoff: Backoff, random?: () => number): number;
@@ -0,0 +1,18 @@
1
+ export const DESTROY_BACKOFF = { fastMs: 60_000, fastCount: 5, capMs: 3_600_000 };
2
+ export const SCRATCH_BACKOFF = { fastMs: 60_000, fastCount: 5, capMs: 3_600_000 };
3
+ /** The orphan reprobe kept 15 s for its first 15 minutes before hearsay-tools/cezarion#879; that window is unchanged. */
4
+ export const ORPHAN_BACKOFF = { fastMs: 15_000, fastCount: 60, capMs: 3_600_000 };
5
+ /** For the batched reprobes: ids that probe together keep probing together, so they share a scan. */
6
+ export const noJitter = () => 0;
7
+ /** Scheduled destroy attempts after which the cockpit says the cleanup needs attention: the first capped delay. */
8
+ export const DESTROY_ATTENTION_ATTEMPTS = 10;
9
+ /** Delay before the next attempt, after `attempt` consecutive failed attempts. Past the fast window
10
+ * the delay is stretched by up to 10 %, never shortened, so stuck items spread out and a capped
11
+ * delay is never under `capMs`. */
12
+ export function retryDelayMs(attempt, backoff, random = Math.random) {
13
+ const n = Math.max(0, Math.floor(attempt));
14
+ if (n < backoff.fastCount)
15
+ return backoff.fastMs;
16
+ return Math.min(backoff.capMs, backoff.fastMs * 2 ** (n - backoff.fastCount + 1)) * (1 + 0.1 * random());
17
+ }
18
+ //# sourceMappingURL=retry-backoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry-backoff.js","sourceRoot":"","sources":["../../src/delegation/retry-backoff.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,eAAe,GAAY,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC3F,MAAM,CAAC,MAAM,eAAe,GAAY,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC3F,yHAAyH;AACzH,MAAM,CAAC,MAAM,cAAc,GAAY,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC3F,qGAAqG;AACrG,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;AAChC,mHAAmH;AACnH,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAE7C;;mCAEmC;AACnC,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,OAAgB,EAAE,MAAM,GAAiB,IAAI,CAAC,MAAM;IAChG,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG,OAAO,CAAC,SAAS;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC;IACjD,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,EAAE,CAAC,CAAC;AAC3G,CAAC"}
@@ -10,7 +10,7 @@ export declare function delegationFailure(error: unknown): {
10
10
  readonly code: "capacity_limit" | "denied_scope" | "incompatible_state" | "incomplete_cleanup" | "invalid_baseline" | "invalid_input" | "unauthenticated" | "unavailable_diff" | "unavailable_transport";
11
11
  readonly error: string;
12
12
  readonly modelChoices?: {
13
- runner: "claude" | "codex" | "cursor" | "opencode" | "pi";
13
+ runner: "claude" | "codex" | "cursor" | "omp" | "opencode" | "pi";
14
14
  requestedModel: string;
15
15
  availableModels: {
16
16
  id: string;
@@ -18,7 +18,7 @@ export declare function delegationFailure(error: unknown): {
18
18
  description: string;
19
19
  effortLevels?: ("high" | "low" | "max" | "medium" | "xhigh")[] | undefined;
20
20
  }[];
21
- otherRunners: ("claude" | "codex" | "cursor" | "opencode" | "pi")[];
21
+ otherRunners: ("claude" | "codex" | "cursor" | "omp" | "opencode" | "pi")[];
22
22
  } | undefined;
23
23
  };
24
24
  readonly status: 400 | 401 | 403 | 409 | 503;
@@ -34,10 +34,10 @@ export declare function createDelegationRoutes(service: DelegationService, crede
34
34
  enabled?: boolean | undefined;
35
35
  hint?: string | undefined;
36
36
  authFailureId?: string | undefined;
37
- runner: "claude" | "codex" | "cursor" | "opencode" | "pi";
37
+ runner: "claude" | "codex" | "cursor" | "omp" | "opencode" | "pi";
38
38
  }[];
39
39
  } | {
40
- runner: "claude" | "codex" | "cursor" | "opencode" | "pi";
40
+ runner: "claude" | "codex" | "cursor" | "omp" | "opencode" | "pi";
41
41
  models: {
42
42
  id: string;
43
43
  label: string;
@@ -55,7 +55,7 @@ export declare function createDelegationRoutes(service: DelegationService, crede
55
55
  kind: "runners";
56
56
  } | {
57
57
  kind: "models";
58
- runner: "claude" | "codex" | "cursor" | "opencode" | "pi";
58
+ runner: "claude" | "codex" | "cursor" | "omp" | "opencode" | "pi";
59
59
  };
60
60
  };
61
61
  };
@@ -84,10 +84,11 @@ export declare function createDelegationRoutes(service: DelegationService, crede
84
84
  id: string;
85
85
  })[] | undefined;
86
86
  } | undefined;
87
- backend?: "claude" | "codex" | "cursor" | "opencode" | "pi" | undefined;
87
+ backend?: "claude" | "codex" | "cursor" | "omp" | "opencode" | "pi" | undefined;
88
88
  model?: string | undefined;
89
89
  effort?: string | undefined;
90
90
  workflow?: string | undefined;
91
+ skill?: string | undefined;
91
92
  };
92
93
  };
93
94
  };
@@ -486,6 +487,18 @@ export declare function createDelegationRoutes(service: DelegationService, crede
486
487
  } & {
487
488
  "/:workerId": {
488
489
  $get: {
490
+ output: {
491
+ error: string;
492
+ code?: "invalid_input" | undefined;
493
+ };
494
+ outputFormat: "json";
495
+ status: 400;
496
+ input: {
497
+ param: {
498
+ workerId: string;
499
+ };
500
+ };
501
+ } | {
489
502
  output: {
490
503
  workerId: string;
491
504
  parentRunId: string;
@@ -500,7 +513,7 @@ export declare function createDelegationRoutes(service: DelegationService, crede
500
513
  branch: string;
501
514
  baselineSha: string;
502
515
  };
503
- backend?: "claude" | "codex" | "cursor" | "opencode" | "pi" | undefined;
516
+ backend?: "claude" | "codex" | "cursor" | "omp" | "opencode" | "pi" | undefined;
504
517
  model?: string | undefined;
505
518
  inputs?: {
506
519
  source: {
@@ -546,6 +559,11 @@ export declare function createDelegationRoutes(service: DelegationService, crede
546
559
  phase: "cleaning" | "complete" | "incomplete" | "requested" | "terminating";
547
560
  remaining: ("branch" | "process" | "worktree")[];
548
561
  error?: string | undefined;
562
+ retry?: {
563
+ attempts: number;
564
+ nextAt: string;
565
+ needsAttention?: true | undefined;
566
+ } | undefined;
549
567
  } | undefined;
550
568
  outcome?: {
551
569
  workerId: string;
@@ -562,7 +580,11 @@ export declare function createDelegationRoutes(service: DelegationService, crede
562
580
  workerId: string;
563
581
  };
564
582
  };
565
- } | {
583
+ };
584
+ };
585
+ } & {
586
+ "/:workerId/collect": {
587
+ $post: {
566
588
  output: {
567
589
  error: string;
568
590
  code?: "invalid_input" | undefined;
@@ -573,12 +595,10 @@ export declare function createDelegationRoutes(service: DelegationService, crede
573
595
  param: {
574
596
  workerId: string;
575
597
  };
598
+ } & {
599
+ json: Record<string, never>;
576
600
  };
577
- };
578
- };
579
- } & {
580
- "/:workerId/collect": {
581
- $post: {
601
+ } | {
582
602
  output: {
583
603
  workerId: string;
584
604
  parentRunId: string;
@@ -590,7 +610,7 @@ export declare function createDelegationRoutes(service: DelegationService, crede
590
610
  partial: boolean;
591
611
  settled: boolean;
592
612
  error?: string | undefined;
593
- backend?: "claude" | "codex" | "cursor" | "opencode" | "pi" | undefined;
613
+ backend?: "claude" | "codex" | "cursor" | "omp" | "opencode" | "pi" | undefined;
594
614
  model?: string | undefined;
595
615
  baselineSha: string;
596
616
  workspace: {
@@ -680,7 +700,11 @@ export declare function createDelegationRoutes(service: DelegationService, crede
680
700
  } & {
681
701
  json: Record<string, never>;
682
702
  };
683
- } | {
703
+ };
704
+ };
705
+ } & {
706
+ "/:workerId/steer": {
707
+ $post: {
684
708
  output: {
685
709
  error: string;
686
710
  code?: "invalid_input" | undefined;
@@ -692,13 +716,11 @@ export declare function createDelegationRoutes(service: DelegationService, crede
692
716
  workerId: string;
693
717
  };
694
718
  } & {
695
- json: Record<string, never>;
719
+ json: {
720
+ text: string;
721
+ };
696
722
  };
697
- };
698
- };
699
- } & {
700
- "/:workerId/steer": {
701
- $post: {
723
+ } | {
702
724
  output: {
703
725
  workerId: string;
704
726
  state: "delivered" | "queued";
@@ -714,7 +736,11 @@ export declare function createDelegationRoutes(service: DelegationService, crede
714
736
  text: string;
715
737
  };
716
738
  };
717
- } | {
739
+ };
740
+ };
741
+ } & {
742
+ "/:workerId/stop": {
743
+ $post: {
718
744
  output: {
719
745
  error: string;
720
746
  code?: "invalid_input" | undefined;
@@ -726,15 +752,9 @@ export declare function createDelegationRoutes(service: DelegationService, crede
726
752
  workerId: string;
727
753
  };
728
754
  } & {
729
- json: {
730
- text: string;
731
- };
755
+ json: Record<string, never>;
732
756
  };
733
- };
734
- };
735
- } & {
736
- "/:workerId/stop": {
737
- $post: {
757
+ } | {
738
758
  output: {
739
759
  workerId: string;
740
760
  state: "stopping" | "terminated";
@@ -748,7 +768,11 @@ export declare function createDelegationRoutes(service: DelegationService, crede
748
768
  } & {
749
769
  json: Record<string, never>;
750
770
  };
751
- } | {
771
+ };
772
+ };
773
+ } & {
774
+ "/:workerId/destroy": {
775
+ $post: {
752
776
  output: {
753
777
  error: string;
754
778
  code?: "invalid_input" | undefined;
@@ -762,11 +786,7 @@ export declare function createDelegationRoutes(service: DelegationService, crede
762
786
  } & {
763
787
  json: Record<string, never>;
764
788
  };
765
- };
766
- };
767
- } & {
768
- "/:workerId/destroy": {
769
- $post: {
789
+ } | {
770
790
  output: {
771
791
  workerId: string;
772
792
  state: "complete" | "incomplete";
@@ -789,20 +809,6 @@ export declare function createDelegationRoutes(service: DelegationService, crede
789
809
  } & {
790
810
  json: Record<string, never>;
791
811
  };
792
- } | {
793
- output: {
794
- error: string;
795
- code?: "invalid_input" | undefined;
796
- };
797
- outputFormat: "json";
798
- status: 400;
799
- input: {
800
- param: {
801
- workerId: string;
802
- };
803
- } & {
804
- json: Record<string, never>;
805
- };
806
812
  } | {
807
813
  output: {
808
814
  workerId: string;
@@ -832,13 +838,11 @@ export declare function createDelegationRoutes(service: DelegationService, crede
832
838
  "/:workerId/diff": {
833
839
  $get: {
834
840
  output: {
835
- workerId: string;
836
- baselineSha: string;
837
- diff: string;
838
- truncated: boolean;
841
+ error: string;
842
+ code?: "invalid_input" | undefined;
839
843
  };
840
844
  outputFormat: "json";
841
- status: 200;
845
+ status: 400;
842
846
  input: {
843
847
  param: {
844
848
  workerId: string;
@@ -846,11 +850,13 @@ export declare function createDelegationRoutes(service: DelegationService, crede
846
850
  };
847
851
  } | {
848
852
  output: {
849
- error: string;
850
- code?: "invalid_input" | undefined;
853
+ workerId: string;
854
+ baselineSha: string;
855
+ diff: string;
856
+ truncated: boolean;
851
857
  };
852
858
  outputFormat: "json";
853
- status: 400;
859
+ status: 200;
854
860
  input: {
855
861
  param: {
856
862
  workerId: string;
@@ -0,0 +1,29 @@
1
+ import type { RunStore } from '../runs/store.ts';
2
+ /** Terminal intent lives in the generation checkpoint as well as the run index. Unknown
3
+ * evidence is retained and reprobed, including when the index cannot load the worker.
4
+ * One timer serves every pending id, and a tick shares one `/proc` scan across every id it
5
+ * probes; a retained id backs off to hourly (hearsay-tools/cezarion#879). The batch does not
6
+ * jitter: ids that probe together should keep probing together. */
7
+ export declare class WorkerScratchCleanup {
8
+ private store;
9
+ private dataDir;
10
+ private busy;
11
+ private due;
12
+ private timer?;
13
+ /** The `at` the timer was armed for; with the clock, it decides what a tick takes. */
14
+ private armedFor;
15
+ private ticking;
16
+ private recoveryTimer?;
17
+ private enabled;
18
+ private backoff;
19
+ constructor(store: RunStore, dataDir: string, busy: (id: string) => boolean);
20
+ pause(): void;
21
+ recover(): void;
22
+ /** A cleanup intent: probe now. An id already pending for the same generation keeps its place
23
+ * in the backoff, so a repeated terminal `run` event cannot reset it; a new generation starts over. */
24
+ schedule(id: string): void;
25
+ private arm;
26
+ private wake;
27
+ private tick;
28
+ private probe;
29
+ }
@@ -0,0 +1,143 @@
1
+ import { agentTmpDirMayExist, removeAgentTmpDir, sweepAgentTmpDirs } from '../runs/agent-tmpdir.js';
2
+ import { workerEvidenceRunIds } from '../runs/worker-execution.js';
3
+ import { sharedCwdScan } from './process-liveness.js';
4
+ import { noJitter, retryDelayMs, SCRATCH_BACKOFF } from './retry-backoff.js';
5
+ /** Terminal intent lives in the generation checkpoint as well as the run index. Unknown
6
+ * evidence is retained and reprobed, including when the index cannot load the worker.
7
+ * One timer serves every pending id, and a tick shares one `/proc` scan across every id it
8
+ * probes; a retained id backs off to hourly (hearsay-tools/cezarion#879). The batch does not
9
+ * jitter: ids that probe together should keep probing together. */
10
+ export class WorkerScratchCleanup {
11
+ store;
12
+ dataDir;
13
+ busy;
14
+ due = new Map();
15
+ timer;
16
+ /** The `at` the timer was armed for; with the clock, it decides what a tick takes. */
17
+ armedFor = 0;
18
+ ticking = false;
19
+ recoveryTimer;
20
+ enabled = true;
21
+ // Private and overridable so tests need not wait out production cadence.
22
+ backoff = SCRATCH_BACKOFF;
23
+ constructor(store, dataDir, busy) {
24
+ this.store = store;
25
+ this.dataDir = dataDir;
26
+ this.busy = busy;
27
+ }
28
+ pause() {
29
+ this.enabled = false;
30
+ clearTimeout(this.timer);
31
+ this.timer = undefined;
32
+ this.due.clear();
33
+ clearTimeout(this.recoveryTimer);
34
+ this.recoveryTimer = undefined;
35
+ }
36
+ recover() {
37
+ // A store that could not open (#779) knows none of its runs: every scratch dir would look orphaned.
38
+ if (this.store.unavailable)
39
+ return;
40
+ this.enabled = true;
41
+ clearTimeout(this.recoveryTimer);
42
+ this.recoveryTimer = undefined;
43
+ const retained = workerEvidenceRunIds(this.dataDir);
44
+ // Only runs that can own scratch matter: the live set, and every worker or quarantined run
45
+ // by id (indexed, nothing decoded, #779). Other finished runs were reaped when they ended.
46
+ const live = this.store.listRuns();
47
+ const owners = [...this.store.listWorkerIds(), ...this.store.listQuarantinedRunIds()];
48
+ for (const id of new Set([...live.map(run => run.id), ...owners, ...(retained ?? [])]))
49
+ this.schedule(id);
50
+ // The sweep independently reserves every private-evidence id, even if the index lost it, and
51
+ // every run another process claims (#779): its live runs are not in this store's live set, and
52
+ // their scratch is theirs.
53
+ sweepAgentTmpDirs(this.dataDir, [...new Set([...live.filter(run => this.busy(run.id) || ['queued', 'running', 'waiting'].includes(run.status)).map(run => run.id), ...owners,
54
+ ...this.store.listForeignClaimedRunIds()])]);
55
+ if (!retained) { // failed enumeration must not permanently lose a wake source
56
+ this.recoveryTimer = setTimeout(() => this.recover(), 60_000);
57
+ this.recoveryTimer.unref?.();
58
+ }
59
+ }
60
+ /** A cleanup intent: probe now. An id already pending for the same generation keeps its place
61
+ * in the backoff, so a repeated terminal `run` event cannot reset it; a new generation starts over. */
62
+ schedule(id) {
63
+ const pending = this.due.get(id);
64
+ if (pending && this.store.readWorkerExecution(id)?.generation === pending.generation)
65
+ return;
66
+ this.arm(id, 0, 0);
67
+ }
68
+ arm(id, attempts, delay, from = Date.now()) {
69
+ this.due.delete(id);
70
+ if (!this.enabled || this.store.unavailable)
71
+ return;
72
+ // The scratch check first: most ids have none, and a finished record is decoded to ask (#779).
73
+ if (!agentTmpDirMayExist(this.dataDir, id))
74
+ return;
75
+ // Another process's run (#779, plan step 3): cleaning up after it is its owner's job, or the
76
+ // job of whoever adopts it once that owner is gone.
77
+ if (this.store.writeRefusal(id))
78
+ return;
79
+ const run = this.store.getRun(id);
80
+ if (run && (['queued', 'running', 'waiting'].includes(run.status) ||
81
+ (run.delegation?.role !== 'worker' && run.delegation?.role !== 'invalid')))
82
+ return;
83
+ // Reconstruct older complete checkpoints while the valid terminal index still exists.
84
+ try {
85
+ this.store.retainWorkerScratchCleanup(id);
86
+ }
87
+ catch { /* retry unreadable evidence */ }
88
+ const proof = this.store.readWorkerExecution(id);
89
+ if (run?.delegation?.role === 'worker' && proof && proof.phase !== 'complete')
90
+ return;
91
+ this.due.set(id, { at: from + delay, attempts, generation: proof?.generation, resourceId: proof?.scratchCleanup?.resourceId });
92
+ if (!this.ticking)
93
+ this.wake();
94
+ }
95
+ wake() {
96
+ clearTimeout(this.timer);
97
+ this.timer = undefined;
98
+ if (!this.enabled || !this.due.size)
99
+ return;
100
+ let next = Infinity;
101
+ for (const { at } of this.due.values())
102
+ next = Math.min(next, at);
103
+ this.armedFor = next;
104
+ this.timer = setTimeout(() => this.tick(), Math.max(0, next - Date.now()));
105
+ this.timer.unref?.();
106
+ }
107
+ tick() {
108
+ this.timer = undefined;
109
+ if (!this.enabled)
110
+ return;
111
+ // Ids due within 5 % of the fast cadence ride along, so near neighbours share the scan, and
112
+ // every id this tick retains is re-armed from the same instant, so they stay together.
113
+ const now = Date.now();
114
+ const dueBy = Math.max(this.armedFor, now) + this.backoff.fastMs / 20;
115
+ const cwds = sharedCwdScan();
116
+ this.ticking = true;
117
+ try {
118
+ for (const [id, pending] of [...this.due])
119
+ if (pending.at <= dueBy)
120
+ this.probe(id, pending, cwds, now);
121
+ }
122
+ finally {
123
+ this.ticking = false;
124
+ }
125
+ this.wake();
126
+ }
127
+ probe(id, { attempts, generation, resourceId }, cwds, now) {
128
+ this.due.delete(id);
129
+ const execution = this.store.readWorkerExecution(id);
130
+ // No await between ownership/generation + holder proof and rm. Admission is synchronous
131
+ // too, so a queued stale callback can never touch the next generation's scratch. The
132
+ // shared snapshot is this synchronous tick's: it never outlives a yield.
133
+ try {
134
+ if (generation && resourceId && execution?.generation === generation && !this.busy(id) &&
135
+ this.store.workerScratchResourcesSafe(id, generation, resourceId, cwds))
136
+ removeAgentTmpDir(this.dataDir, id);
137
+ }
138
+ catch { /* Transient evidence/read failures retain the durable intent for another wake. */ }
139
+ // Uncertainty has no age limit or force-delete exit; it backs off instead.
140
+ this.arm(id, attempts + 1, retryDelayMs(attempts, this.backoff, noJitter), now);
141
+ }
142
+ }
143
+ //# sourceMappingURL=scratch-cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scratch-cleanup.js","sourceRoot":"","sources":["../../src/delegation/scratch-cleanup.ts"],"names":[],"mappings":"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"}
@@ -20,14 +20,28 @@ export declare class DelegationService {
20
20
  private serial;
21
21
  private destroyRetryTimers;
22
22
  private destroyRetryInFlight;
23
- private destroyRetryDelayMs;
23
+ /** What each pending destroy's last full attempt observed (hearsay-tools/cezarion#879). */
24
+ private destroyObservations;
25
+ /** Each project's common Git dir, resolved once per registration for the change check. */
26
+ private commonDirs;
27
+ private destroyBackoff;
28
+ private destroyAttentionAttempts;
24
29
  /** How long destroy waits for proven termination; private and overridable so tests need not wait it out. */
25
30
  private terminationTimeoutMs;
26
31
  registerProject(project: DelegationProject): () => void;
27
32
  private clearDestroyRetries;
28
33
  /** Called only after manager recovery, when persisted destroy intents may be retried. */
29
34
  armDestroyRetries(projectId: string): void;
35
+ /** Arms the next automatic attempt of a pending destroy. A retry state written before a restart
36
+ * resumes where it was; the fast cadence is the floor, and a little over the cap the ceiling, so
37
+ * a clock that jumped cannot park a destroy for days (hearsay-tools/cezarion#879). */
30
38
  private scheduleDestroyRetry;
39
+ /** One automatic attempt. It runs in full only when something its last full attempt observed has
40
+ * changed, or a holder it named has exited; either way it records the attempt and when the next
41
+ * is due, and from the attention threshold on the cockpit says the cleanup needs attention. */
42
+ private destroyTick;
43
+ private commonDir;
44
+ private observeAttempt;
31
45
  private context;
32
46
  private serialized;
33
47
  private target;
@@ -180,5 +194,10 @@ export declare class DelegationService {
180
194
  remaining: ("branch" | "process" | "worktree")[];
181
195
  error?: string | undefined;
182
196
  }>;
197
+ /** An explicit destroy (Clean up, `cez worker destroy`): always a full attempt, and it restarts the
198
+ * backoff, so a timer armed for a later automatic attempt is dropped and re-armed at the fast cadence. */
183
199
  private destroySerialized;
200
+ /** One full destroy attempt; the caller holds the worker's serialization key. A manual attempt
201
+ * clears the run's `destroyRetry`, which resets the backoff; a completed destroy drops it. */
202
+ private destroyAttempt;
184
203
  }