@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,394 @@
1
+ import { execFile, spawn } from 'node:child_process';
2
+ import { existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, rmSync, writeFileSync } from 'node:fs';
3
+ import { mkdir, mkdtemp, open, rename, rm } from 'node:fs/promises';
4
+ import { homedir } from 'node:os';
5
+ import { basename, delimiter, dirname, join } from 'node:path';
6
+ import { promisify } from 'node:util';
7
+ import { z } from 'zod';
8
+ import { processStartToken } from '../delegation/process-liveness.js';
9
+ export const realFs = {
10
+ existsSync,
11
+ readdirSync: path => {
12
+ try {
13
+ return readdirSync(path);
14
+ }
15
+ catch {
16
+ return [];
17
+ }
18
+ },
19
+ realpathSync: path => {
20
+ try {
21
+ return realpathSync(path);
22
+ }
23
+ catch {
24
+ return path;
25
+ }
26
+ },
27
+ };
28
+ /** `~/.cache/cez`: the root the skills cache already uses. */
29
+ export function cezCacheDir(home = homedir()) {
30
+ return join(home, '.cache', 'cez');
31
+ }
32
+ /** Google Chrome first: a distro `chromium` is often a snap shim (Ubuntu) or a build that never
33
+ * opened its DevTools port headless (a GitHub runner's /usr/bin/chromium, PR #792). */
34
+ const PATH_NAMES = ['google-chrome', 'google-chrome-stable', 'chromium', 'chromium-browser'];
35
+ const MAC_APPS = ['Google Chrome', 'Chromium', 'Google Chrome Canary', 'Brave Browser', 'Microsoft Edge'];
36
+ const HEADLESS_SHELL = 'chrome-headless-shell';
37
+ /** Where a browser binary sits inside one installed revision directory, per platform. */
38
+ function revisionLayouts(platform) {
39
+ const exe = platform === 'win32' ? '.exe' : '';
40
+ if (platform === 'darwin') {
41
+ const cft = 'Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing';
42
+ return [
43
+ `chrome-mac-arm64/${cft}`,
44
+ `chrome-mac-x64/${cft}`,
45
+ cft,
46
+ 'chrome-mac/Chromium.app/Contents/MacOS/Chromium',
47
+ `${HEADLESS_SHELL}-mac-arm64/${HEADLESS_SHELL}`,
48
+ `${HEADLESS_SHELL}-mac-x64/${HEADLESS_SHELL}`,
49
+ ];
50
+ }
51
+ if (platform === 'win32') {
52
+ return ['chrome-win64/chrome.exe', 'chrome-win/chrome.exe', 'chrome.exe', `${HEADLESS_SHELL}-win64/${HEADLESS_SHELL}${exe}`];
53
+ }
54
+ return ['chrome-linux64/chrome', 'chrome-linux/chrome', 'chrome', `${HEADLESS_SHELL}-linux64/${HEADLESS_SHELL}`, 'chrome-linux/headless_shell'];
55
+ }
56
+ const byRevisionDesc = (a, b) => b.localeCompare(a, undefined, { numeric: true });
57
+ function firstBinary(fs, revisionDir, platform) {
58
+ return revisionLayouts(platform)
59
+ .map(rel => join(revisionDir, rel))
60
+ .find(p => fs.existsSync(p));
61
+ }
62
+ function firstInRevisions(fs, root, pattern, platform) {
63
+ for (const dir of fs.readdirSync(root).filter(d => pattern.test(d)).sort(byRevisionDesc)) {
64
+ const bin = firstBinary(fs, join(root, dir), platform);
65
+ if (bin)
66
+ return bin;
67
+ }
68
+ return undefined;
69
+ }
70
+ /** A snap's confinement keeps it out of hidden directories and /tmp, so it can never write the
71
+ * task profile under `.ai/cezar/preview/` and its DevTools port file never appears. */
72
+ function snapConfined(fs, path) {
73
+ return (fs.realpathSync?.(path) ?? path).startsWith('/snap/');
74
+ }
75
+ /**
76
+ * The first usable Chromium, most deliberate source first: PATH, macOS app bundles, Playwright's
77
+ * cache, agent-browser's Chrome for Testing cache, then the copy `downloadChromium` keeps.
78
+ */
79
+ export function resolveChromium(fs = realFs, env = process.env, platform = process.platform, _arch = process.arch) {
80
+ const home = env.HOME || env.USERPROFILE || homedir();
81
+ const exe = platform === 'win32' ? '.exe' : '';
82
+ for (const dir of (env.PATH ?? '').split(delimiter).filter(Boolean)) {
83
+ for (const name of PATH_NAMES) {
84
+ const p = join(dir, name + exe);
85
+ if (fs.existsSync(p) && !snapConfined(fs, p))
86
+ return p;
87
+ }
88
+ }
89
+ if (platform === 'darwin') {
90
+ for (const root of ['/Applications', join(home, 'Applications')]) {
91
+ for (const app of MAC_APPS) {
92
+ const p = join(root, `${app}.app`, 'Contents', 'MacOS', app);
93
+ if (fs.existsSync(p))
94
+ return p;
95
+ }
96
+ }
97
+ }
98
+ const playwright = env.PLAYWRIGHT_BROWSERS_PATH ||
99
+ (platform === 'darwin'
100
+ ? join(home, 'Library', 'Caches', 'ms-playwright')
101
+ : platform === 'win32'
102
+ ? join(env.LOCALAPPDATA || join(home, 'AppData', 'Local'), 'ms-playwright')
103
+ : join(home, '.cache', 'ms-playwright'));
104
+ // A full Chromium before a headless shell, the newest revision of each first.
105
+ const found = firstInRevisions(fs, playwright, /^chromium-\d+$/, platform) ?? firstInRevisions(fs, playwright, /^chromium_headless_shell-\d+$/, platform);
106
+ if (found)
107
+ return found;
108
+ // agent-browser keeps its Chrome for Testing under ~/.agent-browser/browsers/<chrome-version>/.
109
+ const agentBrowser = firstInRevisions(fs, join(home, '.agent-browser', 'browsers'), /^chrome-/, platform);
110
+ if (agentBrowser)
111
+ return agentBrowser;
112
+ const cache = join(cezCacheDir(home), 'chromium');
113
+ for (const dir of fs.readdirSync(cache).filter(d => d.startsWith(`${HEADLESS_SHELL}-`)).sort(byRevisionDesc)) {
114
+ const p = join(cache, dir, HEADLESS_SHELL + exe);
115
+ if (fs.existsSync(p))
116
+ return p;
117
+ }
118
+ return undefined;
119
+ }
120
+ /** The Chrome for Testing build for this machine. Google publishes none for linux-arm64. */
121
+ export function downloadTarget(platform, arch) {
122
+ if (platform === 'linux' && arch === 'x64')
123
+ return { platformKey: 'linux64' };
124
+ if (platform === 'darwin' && arch === 'arm64')
125
+ return { platformKey: 'mac-arm64' };
126
+ if (platform === 'darwin' && arch === 'x64')
127
+ return { platformKey: 'mac-x64' };
128
+ if (platform === 'win32' && arch === 'x64')
129
+ return { platformKey: 'win64' };
130
+ return undefined;
131
+ }
132
+ /** The command that installs Chromium on this OS, or '' when cezar does not know one. `osRelease` is /etc/os-release. */
133
+ export function installCommand(platform, osRelease) {
134
+ if (platform === 'darwin')
135
+ return 'brew install --cask chromium';
136
+ if (platform !== 'linux')
137
+ return '';
138
+ const field = (key) => osRelease.match(new RegExp(`^${key}=(.*)$`, 'm'))?.[1]?.replace(/^["']|["']$/g, '') ?? '';
139
+ const ids = [field('ID'), ...field('ID_LIKE').split(/\s+/)].filter(Boolean);
140
+ // Ubuntu (and its derivatives) has no `chromium` deb, only a snap; Debian proper has the package.
141
+ if (ids.includes('ubuntu'))
142
+ return 'sudo snap install chromium';
143
+ if (ids.includes('debian'))
144
+ return 'sudo apt-get install -y chromium';
145
+ if (ids.includes('fedora'))
146
+ return 'sudo dnf install -y chromium';
147
+ return '';
148
+ }
149
+ const VERSIONS_URL = 'https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json';
150
+ const RETRY_DELAYS_MS = [1_000, 4_000];
151
+ const versionsSchema = z.object({
152
+ channels: z.object({
153
+ Stable: z.object({
154
+ downloads: z.record(z.string(), z.array(z.object({ platform: z.string(), url: z.string() }))),
155
+ }),
156
+ }),
157
+ });
158
+ const execFileAsync = promisify(execFile);
159
+ async function extractZip(zip, dest, platform, signal) {
160
+ if (platform === 'win32')
161
+ await execFileAsync('tar', ['-xf', zip, '-C', dest], { signal });
162
+ else
163
+ await execFileAsync('unzip', ['-q', zip, '-d', dest], { signal });
164
+ }
165
+ function sleep(ms, signal) {
166
+ return new Promise((resolve, reject) => {
167
+ if (signal.aborted)
168
+ return reject(signal.reason);
169
+ const timer = setTimeout(() => {
170
+ signal.removeEventListener('abort', onAbort);
171
+ resolve();
172
+ }, ms);
173
+ const onAbort = () => {
174
+ clearTimeout(timer);
175
+ reject(signal.reason);
176
+ };
177
+ signal.addEventListener('abort', onAbort, { once: true });
178
+ });
179
+ }
180
+ /** A failure a retry cannot fix: a bad manifest, a missing extractor, a wrong archive layout. */
181
+ class PermanentDownloadError extends Error {
182
+ }
183
+ /**
184
+ * Downloads the Stable `chrome-headless-shell` build into `<cache>/chromium` and returns its binary.
185
+ * Each download stages in its own `.partial-*` directory (two cezar processes in different repos
186
+ * share the cache) and is renamed into place only once unpacked, so an abort or a crash never
187
+ * leaves a half-installed Chromium for `resolveChromium` to find. A copy another process already
188
+ * published wins; ours is discarded. Only the network
189
+ * phase gets three attempts; a failed extraction fails at once, since re-downloading would not help.
190
+ */
191
+ export async function downloadChromium(opts) {
192
+ const platform = opts.platform ?? process.platform;
193
+ const arch = opts.arch ?? process.arch;
194
+ const target = downloadTarget(platform, arch);
195
+ if (!target)
196
+ throw new Error(`Chrome for Testing publishes no download for ${platform}-${arch}`);
197
+ const root = join(opts.cacheDir ?? cezCacheDir(), 'chromium');
198
+ await mkdir(root, { recursive: true });
199
+ const partial = await mkdtemp(join(root, '.partial-'));
200
+ const zip = join(partial, 'chromium.zip');
201
+ try {
202
+ for (let attempt = 0;; attempt++) {
203
+ try {
204
+ await fetchArchive(opts, target.platformKey, partial, zip);
205
+ break;
206
+ }
207
+ catch (err) {
208
+ await rm(partial, { recursive: true, force: true });
209
+ if (opts.signal.aborted || err instanceof PermanentDownloadError)
210
+ throw err;
211
+ const delay = RETRY_DELAYS_MS[attempt];
212
+ if (delay === undefined)
213
+ throw err;
214
+ await (opts.sleep ?? sleep)(delay, opts.signal);
215
+ }
216
+ }
217
+ return await install(opts, target.platformKey, platform, root, partial, zip);
218
+ }
219
+ catch (err) {
220
+ await rm(partial, { recursive: true, force: true });
221
+ throw err;
222
+ }
223
+ }
224
+ async function fetchArchive(opts, platformKey, partial, zip) {
225
+ const doFetch = opts.fetchImpl ?? fetch;
226
+ const { signal } = opts;
227
+ const versionsRes = await doFetch(VERSIONS_URL, { signal });
228
+ if (!versionsRes.ok)
229
+ throw new Error(`Chrome for Testing version list answered ${versionsRes.status}`);
230
+ const versions = versionsSchema.safeParse(await versionsRes.json());
231
+ if (!versions.success)
232
+ throw new PermanentDownloadError('Chrome for Testing version list has an unexpected shape');
233
+ const url = versions.data.channels.Stable.downloads[HEADLESS_SHELL]?.find(d => d.platform === platformKey)?.url;
234
+ if (!url)
235
+ throw new PermanentDownloadError(`Chrome for Testing lists no ${HEADLESS_SHELL} download for ${platformKey}`);
236
+ await rm(partial, { recursive: true, force: true });
237
+ await mkdir(partial, { recursive: true });
238
+ const res = await doFetch(url, { signal });
239
+ if (!res.ok || !res.body)
240
+ throw new Error(`Chromium download answered ${res.status}`);
241
+ const total = Number(res.headers.get('content-length')) || 0;
242
+ const file = await open(zip, 'w');
243
+ try {
244
+ let received = 0;
245
+ const reader = res.body.getReader();
246
+ for (;;) {
247
+ const { done, value } = await reader.read();
248
+ if (done)
249
+ break;
250
+ await file.write(value);
251
+ received += value.length;
252
+ opts.onProgress(received, total || received);
253
+ }
254
+ }
255
+ finally {
256
+ await file.close();
257
+ }
258
+ signal.throwIfAborted();
259
+ }
260
+ /**
261
+ * Renames `staged` to `finalDir` in one step. A directory rename never replaces a non-empty one, so
262
+ * when another process published first, its complete copy stays and ours is discarded with the
263
+ * staging directory. Only a leftover without a binary is cleared and the rename tried again.
264
+ */
265
+ async function publish(staged, finalDir, bin) {
266
+ for (let attempt = 0;; attempt++) {
267
+ try {
268
+ await rename(staged, finalDir);
269
+ return;
270
+ }
271
+ catch (err) {
272
+ const code = err.code;
273
+ if (code !== 'ENOTEMPTY' && code !== 'EEXIST' && code !== 'EPERM')
274
+ throw err;
275
+ if (existsSync(bin))
276
+ return;
277
+ if (attempt >= 2)
278
+ throw err;
279
+ await rm(finalDir, { recursive: true, force: true });
280
+ }
281
+ }
282
+ }
283
+ async function install(opts, platformKey, platform, root, partial, zip) {
284
+ const tool = platform === 'win32' ? 'tar' : 'unzip';
285
+ const unpacked = join(partial, 'unpacked');
286
+ await mkdir(unpacked);
287
+ try {
288
+ await (opts.extract ?? extractZip)(zip, unpacked, platform, opts.signal);
289
+ }
290
+ catch (err) {
291
+ if (opts.signal.aborted)
292
+ throw err;
293
+ const reason = err.code === 'ENOENT' ? `${tool} is not installed` : `${tool} could not unpack the download: ${err.message}`;
294
+ throw new PermanentDownloadError(`Could not extract Chromium: ${reason}`);
295
+ }
296
+ opts.signal.throwIfAborted();
297
+ const dirName = `${HEADLESS_SHELL}-${platformKey}`;
298
+ const finalDir = join(root, dirName);
299
+ const bin = join(finalDir, HEADLESS_SHELL + (platform === 'win32' ? '.exe' : ''));
300
+ if (!existsSync(join(unpacked, dirName)))
301
+ throw new PermanentDownloadError(`The Chromium download did not contain ${dirName}`);
302
+ if (!existsSync(join(unpacked, dirName, basename(bin))))
303
+ throw new PermanentDownloadError(`The Chromium download did not contain ${HEADLESS_SHELL}`);
304
+ await publish(join(unpacked, dirName), finalDir, bin);
305
+ await rm(partial, { recursive: true, force: true });
306
+ return bin;
307
+ }
308
+ export class ChromiumError extends Error {
309
+ kind;
310
+ stderrTail;
311
+ constructor(kind, stderrTail, message) {
312
+ super(message);
313
+ this.kind = kind;
314
+ this.stderrTail = stderrTail;
315
+ this.name = 'ChromiumError';
316
+ }
317
+ }
318
+ const STDERR_TAIL_BYTES = 4096;
319
+ const SANDBOX_FAILURE = /No usable sandbox|zygote_host_impl|setuid sandbox/;
320
+ /** A cold start (fresh profile, loaded machine) can take well over 10 s; CI runners did (#781). */
321
+ const LAUNCH_TIMEOUT_MS = 30_000;
322
+ /** Chromium's argv: the prototype's, without its automatic `--no-sandbox` for root.
323
+ * `--proxy-server=direct://` so Linux Chrome does not inherit HTTP(S)_PROXY: it will not send
324
+ * proxy auth the way curl does, and a render-blocking third-party stylesheet then never paints. */
325
+ export function chromiumArgs(profileDir, env) {
326
+ const args = ['--headless=new', '--remote-debugging-port=0', `--user-data-dir=${profileDir}`, '--no-first-run', '--no-default-browser-check', '--proxy-server=direct://', 'about:blank'];
327
+ return env.CEZ_PREVIEW_NO_SANDBOX === '1' ? ['--no-sandbox', ...args] : args;
328
+ }
329
+ /**
330
+ * The task's Chromium pid record, `<runDir>/chromium.pid.json` beside its profile: `{ pid, startToken }`.
331
+ * A crashed cezar leaves the browser running; the boot sweep kills it by this record (#781).
332
+ */
333
+ export const CHROMIUM_PID_FILE = 'chromium.pid.json';
334
+ /**
335
+ * Starts headless Chromium on a loopback DevTools port of its choosing and resolves once it has
336
+ * written `DevToolsActivePort` into the profile. Failure kills the process and says why. While it
337
+ * runs, `CHROMIUM_PID_FILE` in the profile's parent names it.
338
+ */
339
+ export async function launchChromium(bin, profileDir, env, opts = {}) {
340
+ mkdirSync(profileDir, { recursive: true });
341
+ const portFile = join(profileDir, 'DevToolsActivePort');
342
+ // A file from an earlier launch would hand back a port nobody listens on.
343
+ rmSync(portFile, { force: true });
344
+ const proc = spawn(bin, chromiumArgs(profileDir, env), { stdio: ['ignore', 'ignore', 'pipe'] });
345
+ const pid = proc.pid;
346
+ if (pid !== undefined) {
347
+ const record = join(dirname(profileDir), CHROMIUM_PID_FILE);
348
+ writeFileSync(record, JSON.stringify({ pid, startToken: processStartToken(pid) }), { mode: 0o600 });
349
+ proc.once('exit', () => {
350
+ try {
351
+ if (JSON.parse(readFileSync(record, 'utf8')).pid !== pid)
352
+ return;
353
+ }
354
+ catch { /* gone or unreadable: nothing of ours to keep */ }
355
+ rmSync(record, { force: true });
356
+ });
357
+ }
358
+ let tail = Buffer.alloc(0);
359
+ proc.stderr?.on('data', (chunk) => {
360
+ tail = Buffer.concat([tail, chunk]).subarray(-STDERR_TAIL_BYTES);
361
+ });
362
+ let exit;
363
+ let missing = false;
364
+ proc.once('close', (code, signal) => {
365
+ exit ??= `Chromium exited (${signal ?? code})`;
366
+ });
367
+ proc.on('error', err => {
368
+ exit ??= `Chromium could not start: ${err.message}`;
369
+ missing ||= err.code === 'ENOENT';
370
+ tail = Buffer.from(err.message);
371
+ });
372
+ const fail = (kind, message) => {
373
+ proc.kill('SIGKILL');
374
+ const stderrTail = tail.toString('utf8');
375
+ if (missing)
376
+ return new ChromiumError('not-installed', stderrTail, message);
377
+ return new ChromiumError(SANDBOX_FAILURE.test(stderrTail) ? 'sandbox' : kind, stderrTail, message);
378
+ };
379
+ const timeoutMs = opts.timeoutMs ?? LAUNCH_TIMEOUT_MS;
380
+ const deadline = Date.now() + timeoutMs;
381
+ for (;;) {
382
+ if (exit)
383
+ throw fail('exited', exit);
384
+ if (existsSync(portFile)) {
385
+ const port = Number(readFileSync(portFile, 'utf8').split('\n')[0]);
386
+ if (port > 0)
387
+ return { proc, port };
388
+ }
389
+ if (Date.now() >= deadline)
390
+ throw fail('timeout', `Chromium did not open its DevTools port within ${timeoutMs / 1000} s (${bin})`);
391
+ await new Promise(resolve => setTimeout(resolve, 50));
392
+ }
393
+ }
394
+ //# sourceMappingURL=chromium.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chromium.js","sourceRoot":"","sources":["../../src/preview/chromium.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import type { PreviewServer } from '../contract/index.js';
3
+ /**
4
+ * Supervisor for one cezar-owned dev server (#781, spec 2026-10-02-live-preview-v1): spawn the
5
+ * registered command in its own process group, TCP-probe until the port answers, and kill the
6
+ * whole group on stop so a command that forks (`npm` -> `node` -> `vite`) frees its port.
7
+ */
8
+ export declare const PREVIEW_PORT_WAIT_MS: number;
9
+ export declare const PREVIEW_PROBE_MS = 2000;
10
+ export type DevServerState = 'starting' | 'up' | 'stalled' | 'exited' | 'stopped';
11
+ export type DevServerStopReason = 'user' | 'idle' | 'release';
12
+ /** Does anything answer on `port`? Vite resolves `localhost` to `::1` on some hosts, so both loopbacks count. */
13
+ export declare function probePort(port: number): Promise<boolean>;
14
+ /** Keep the last 1 MiB once the log passes 5 MiB. The child holds the file open in append mode, so it keeps writing at the end. */
15
+ export declare function trimLog(path: string): void;
16
+ export declare class DevServer extends EventEmitter {
17
+ state: DevServerState;
18
+ exitCode?: number;
19
+ attempts: number;
20
+ stopReason?: DevServerStopReason;
21
+ private readonly server;
22
+ private readonly worktreePath;
23
+ private readonly dir;
24
+ private readonly probeMs;
25
+ private readonly waitMs;
26
+ private child?;
27
+ private childExited?;
28
+ private probeTimer?;
29
+ private waitTimer?;
30
+ private logTimer?;
31
+ private probing;
32
+ private stopping?;
33
+ constructor(opts: {
34
+ server: PreviewServer;
35
+ worktreePath: string;
36
+ dir: string;
37
+ probeMs?: number;
38
+ waitMs?: number;
39
+ });
40
+ private get pidPath();
41
+ private get logPath();
42
+ start(): void;
43
+ /** The owner pressed "keep waiting" on a stalled server: probe again for another full window. */
44
+ keepWaiting(): void;
45
+ stop(reason: DevServerStopReason): Promise<void>;
46
+ logTail(lines?: number): string[];
47
+ private terminate;
48
+ private beginWaiting;
49
+ private endWaiting;
50
+ private probeOnce;
51
+ /** A terminal state: the process is gone, so timers and (unless its group is still being reaped) the pid record go with it. */
52
+ private finish;
53
+ /** Only our own record: a Start again on the same port may already have written its successor's. */
54
+ private removeRecord;
55
+ private setState;
56
+ }
57
+ /**
58
+ * Boot sweep: a crashed cezar leaves pid records behind, `<port>.pid.json` for each dev server and
59
+ * `chromium.pid.json` for the task's browser. Kill only when the recorded pid is still the process
60
+ * we started (an exactly matching start token), so a reused pid is never hit; a missing or
61
+ * unreadable token means skip. A dev server's whole group goes; Chromium shares cezar's group, so
62
+ * only its pid is signalled.
63
+ * The record goes either way, except one `keep` claims: a server or browser the live host still runs.
64
+ * Returns how many processes were killed.
65
+ */
66
+ export declare function sweepPreviewLeftovers(dataDir: string, opts?: {
67
+ keep?: (runId: string, what: number | 'browser') => boolean;
68
+ }): Promise<number>;