@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,347 @@
1
+ import { normalizePreviewUrl } from './url.js';
2
+ const QUALITY = 60;
3
+ const DEFAULT_VIEWPORT = { w: 1280, h: 800 };
4
+ /** A started stream with no frame after this long is restarted: Chromium can stay silent after back-to-back restarts on a page that no longer changes. */
5
+ const FIRST_FRAME_WAIT_MS = 500;
6
+ const FIRST_FRAME_RETRIES = 5;
7
+ /**
8
+ * Page activity (a click, a key, a navigation, a load step) with no frame after it this long restarts
9
+ * the stream. Chromium can paint once and then go silent, so the pane kept the first frame for good,
10
+ * and a first paint after the first-frame retries never reached it (#870).
11
+ */
12
+ const ACTIVITY_FRAME_WAIT_MS = 1000;
13
+ /** Input that can change what the page shows. A pointer move alone is too frequent to count. */
14
+ const ACTIVE_MOUSE = new Set(['mousePressed', 'mouseReleased', 'mouseWheel']);
15
+ /**
16
+ * The pixel size of a JPEG frame, from its first baseline/progressive SOF segment; undefined when
17
+ * the bytes are not a JPEG this can read. Screencast metadata is no help: it can report the
18
+ * requested size for a frame captured before the page resized.
19
+ */
20
+ function jpegSize(base64) {
21
+ const bytes = Buffer.from(base64, 'base64');
22
+ if (bytes.length < 4 || bytes[0] !== 0xff || bytes[1] !== 0xd8)
23
+ return undefined;
24
+ let at = 2;
25
+ while (at + 4 <= bytes.length) {
26
+ if (bytes[at] !== 0xff)
27
+ return undefined;
28
+ const marker = bytes[at + 1];
29
+ if (marker === 0xff) {
30
+ at += 1;
31
+ continue;
32
+ }
33
+ if (marker >= 0xc0 && marker <= 0xcf && marker !== 0xc4 && marker !== 0xc8 && marker !== 0xcc) {
34
+ return at + 9 <= bytes.length ? { h: bytes.readUInt16BE(at + 5), w: bytes.readUInt16BE(at + 7) } : undefined;
35
+ }
36
+ at += 2 + bytes.readUInt16BE(at + 2);
37
+ }
38
+ return undefined;
39
+ }
40
+ /**
41
+ * Runs in every page. Popups open in the same tab (there is one page to stream), and the cursor
42
+ * shape is reported through the `__cursor` binding because screencast frames carry no cursor.
43
+ */
44
+ export const INJECT = `(() => {
45
+ window.open = (u) => { if (u) location.href = u; return null; };
46
+ document.addEventListener('click', (e) => {
47
+ const a = e.target.closest && e.target.closest('a[target]');
48
+ if (a && a.target !== '_self') a.target = '_self';
49
+ }, true);
50
+ let last = '';
51
+ document.addEventListener('mousemove', (e) => {
52
+ const c = getComputedStyle(e.target).cursor;
53
+ if (c !== last) { last = c; window.__cursor && window.__cursor(c); }
54
+ }, true);
55
+ })();`;
56
+ function originOf(url) {
57
+ try {
58
+ return url ? new URL(url).origin : '';
59
+ }
60
+ catch {
61
+ return '';
62
+ }
63
+ }
64
+ export class PreviewSession {
65
+ cdp;
66
+ opts;
67
+ /** The page's current top-level URL, as Chromium last reported it. */
68
+ url;
69
+ viewer;
70
+ /** The frame sent to the viewer and not yet acked. */
71
+ pending;
72
+ /** The newest frame that arrived while one was in flight. */
73
+ held;
74
+ announced = false;
75
+ viewport = DEFAULT_VIEWPORT;
76
+ /** Viewport changes and screencast stops run one at a time: overlapping stop/start pairs can leave Chromium without a first frame. */
77
+ queue = Promise.resolve();
78
+ /** The size the running screencast was started at; unset while stopped. */
79
+ streaming;
80
+ watchdog;
81
+ silentStarts = 0;
82
+ /** The top-level frame, so a subframe's load steps do not count as page activity. */
83
+ mainFrameId;
84
+ constructor(cdp, opts) {
85
+ this.cdp = cdp;
86
+ this.opts = opts;
87
+ cdp.on('Page.screencastFrame', frame => this.onFrame(frame));
88
+ cdp.on('Page.frameNavigated', ({ frame }) => {
89
+ if (frame.parentId)
90
+ return;
91
+ this.mainFrameId = frame.id;
92
+ this.url = frame.url;
93
+ this.tell({ t: 'url', url: frame.url });
94
+ this.expectFrame();
95
+ });
96
+ cdp.on('Page.navigatedWithinDocument', ({ frameId, url }) => {
97
+ if (!this.isMainFrame(frameId))
98
+ return;
99
+ this.url = url;
100
+ this.tell({ t: 'url', url });
101
+ this.expectFrame();
102
+ });
103
+ // The page's load steps, first paint among them: the moment a page that painted late has something to show.
104
+ cdp.on('Page.lifecycleEvent', ({ frameId }) => {
105
+ if (this.isMainFrame(frameId))
106
+ this.expectFrame();
107
+ });
108
+ cdp.on('Page.javascriptDialogOpening', dialog => this.tell({
109
+ t: 'dialog',
110
+ type: dialog.type,
111
+ message: dialog.message,
112
+ ...(dialog.type === 'prompt' ? { defaultPrompt: dialog.defaultPrompt ?? '' } : {}),
113
+ origin: originOf(dialog.url ?? this.url),
114
+ }));
115
+ cdp.on('Runtime.bindingCalled', ({ name, payload }) => {
116
+ if (name === '__cursor')
117
+ this.tell({ t: 'cursor', cursor: payload });
118
+ });
119
+ }
120
+ /** Prepares the page: events, the cursor binding and the injected script, as the prototype did. */
121
+ static async create(cdp, opts = {}) {
122
+ const session = new PreviewSession(cdp, opts);
123
+ await cdp.send('Page.enable');
124
+ await cdp.send('Page.setLifecycleEventsEnabled', { enabled: true });
125
+ await cdp.send('Runtime.enable');
126
+ await cdp.send('Runtime.addBinding', { name: '__cursor' });
127
+ await cdp.send('Page.addScriptToEvaluateOnNewDocument', { source: INJECT });
128
+ return session;
129
+ }
130
+ /** Makes `viewer` the one the page streams to and starts the screencast at the current viewport. */
131
+ attach(viewer) {
132
+ this.viewer = viewer;
133
+ this.announced = false;
134
+ // A new viewer needs its own first frame, so its stream always restarts, whatever the size.
135
+ this.streaming = undefined;
136
+ this.silentStarts = 0;
137
+ void this.setViewport(this.viewport.w, this.viewport.h).catch(() => { });
138
+ }
139
+ detach(viewer) {
140
+ if (this.viewer !== viewer)
141
+ return;
142
+ this.viewer = undefined;
143
+ this.releaseFrames();
144
+ this.streaming = undefined;
145
+ this.disarmWatchdog();
146
+ this.enqueue(async () => {
147
+ await this.cdp.send('Page.stopScreencast').catch(() => { });
148
+ });
149
+ }
150
+ async navigate(url) {
151
+ this.announced = false;
152
+ this.expectFrame();
153
+ await this.cdp.send('Page.navigate', { url });
154
+ }
155
+ close() {
156
+ this.viewer = undefined;
157
+ this.disarmWatchdog();
158
+ this.cdp.close();
159
+ }
160
+ /** The whole browser-facing surface. Everything else in CDP stays unreachable. */
161
+ async handle(msg) {
162
+ switch (msg.t) {
163
+ case 'resize':
164
+ return this.setViewport(msg.w, msg.h);
165
+ case 'ack': {
166
+ if (this.pending === undefined)
167
+ return;
168
+ const acked = this.pending;
169
+ this.pending = undefined;
170
+ const held = this.held;
171
+ this.held = undefined;
172
+ if (held)
173
+ this.sendFrame(held);
174
+ return this.ackFrame(acked);
175
+ }
176
+ case 'mouse':
177
+ if (ACTIVE_MOUSE.has(msg.type))
178
+ this.expectFrame();
179
+ await this.cdp.send('Input.dispatchMouseEvent', {
180
+ type: msg.type,
181
+ x: msg.x,
182
+ y: msg.y,
183
+ button: msg.button ?? 'none',
184
+ buttons: msg.buttons ?? 0,
185
+ clickCount: msg.clickCount ?? 0,
186
+ deltaX: msg.deltaX ?? 0,
187
+ deltaY: msg.deltaY ?? 0,
188
+ modifiers: msg.modifiers ?? 0,
189
+ });
190
+ return;
191
+ case 'key':
192
+ if (msg.type !== 'keyUp')
193
+ this.expectFrame();
194
+ await this.cdp.send('Input.dispatchKeyEvent', {
195
+ type: msg.type,
196
+ key: msg.key ?? '',
197
+ code: msg.code ?? '',
198
+ ...(msg.type === 'keyUp' ? {} : { text: msg.text ?? '' }),
199
+ modifiers: msg.modifiers ?? 0,
200
+ windowsVirtualKeyCode: msg.vk ?? 0,
201
+ ...(msg.commands ? { commands: msg.commands } : {}),
202
+ });
203
+ return;
204
+ case 'insertText':
205
+ this.expectFrame();
206
+ await this.cdp.send('Input.insertText', { text: msg.text });
207
+ return;
208
+ case 'nav':
209
+ return this.navigate(normalizePreviewUrl(msg.url));
210
+ case 'reload':
211
+ this.expectFrame();
212
+ await this.cdp.send('Page.reload', { ignoreCache: msg.ignoreCache ?? false });
213
+ return;
214
+ case 'back':
215
+ case 'forward': {
216
+ this.expectFrame();
217
+ const { currentIndex, entries } = await this.cdp.send('Page.getNavigationHistory');
218
+ const entry = entries[currentIndex + (msg.t === 'back' ? -1 : 1)];
219
+ if (entry)
220
+ await this.cdp.send('Page.navigateToHistoryEntry', { entryId: entry.id });
221
+ return;
222
+ }
223
+ case 'dialogResult':
224
+ await this.cdp.send('Page.handleJavaScriptDialog', { accept: msg.accept, promptText: msg.text ?? '' });
225
+ return;
226
+ default:
227
+ // Server and lifecycle messages belong to the host.
228
+ return;
229
+ }
230
+ }
231
+ enqueue(job) {
232
+ const run = this.queue.then(job);
233
+ this.queue = run.catch(() => { });
234
+ return run;
235
+ }
236
+ setViewport(w, h) {
237
+ // Recorded now, so an attach that follows queued resizes starts at the newest size.
238
+ this.viewport = { w, h };
239
+ return this.enqueue(() => this.applyViewport(w, h));
240
+ }
241
+ async applyViewport(w, h) {
242
+ // The pane repeats its size at every loading step; a stream already at this size has nothing to redo.
243
+ if (this.streaming?.w === w && this.streaming.h === h)
244
+ return;
245
+ await this.cdp.send('Emulation.setDeviceMetricsOverride', { width: w, height: h, deviceScaleFactor: 1, mobile: false });
246
+ if (!this.viewer)
247
+ return;
248
+ this.streaming = undefined;
249
+ await this.cdp.send('Page.stopScreencast').catch(() => { });
250
+ // A restarted screencast numbers its frames afresh; the old in-flight frame will never be acked.
251
+ this.pending = undefined;
252
+ this.held = undefined;
253
+ // Set before the start: its first frame can beat the command's reply, and is judged against this size.
254
+ this.streaming = { w, h };
255
+ try {
256
+ await this.cdp.send('Page.startScreencast', { format: 'jpeg', quality: QUALITY, maxWidth: w, maxHeight: h, everyNthFrame: 1 });
257
+ }
258
+ catch (error) {
259
+ this.streaming = undefined;
260
+ throw error;
261
+ }
262
+ this.armWatchdog();
263
+ }
264
+ /**
265
+ * Something happened that should paint: wait for a frame, and restart the stream if none comes.
266
+ * Each activity gets its own few tries, so a stream the start retries gave up on recovers on the
267
+ * next click or load step. A frame at the viewport size disarms it, as after a start.
268
+ */
269
+ expectFrame() {
270
+ if (!this.viewer)
271
+ return;
272
+ this.silentStarts = 0;
273
+ // Mid-restart, the start arms its own watchdog, now with fresh tries.
274
+ if (this.streaming)
275
+ this.armWatchdog(ACTIVITY_FRAME_WAIT_MS);
276
+ }
277
+ isMainFrame(frameId) {
278
+ return frameId === undefined || this.mainFrameId === undefined || frameId === this.mainFrameId;
279
+ }
280
+ /** No frame, or none at the viewport size, since the last start or activity: start again, a few times, then wait for the next activity. */
281
+ armWatchdog(waitMs = FIRST_FRAME_WAIT_MS) {
282
+ this.disarmWatchdog();
283
+ this.watchdog = setTimeout(() => {
284
+ if (!this.viewer || !this.streaming || this.silentStarts >= FIRST_FRAME_RETRIES)
285
+ return;
286
+ this.silentStarts += 1;
287
+ this.streaming = undefined;
288
+ void this.setViewport(this.viewport.w, this.viewport.h).catch(() => { });
289
+ }, waitMs);
290
+ this.watchdog.unref?.();
291
+ }
292
+ disarmWatchdog() {
293
+ clearTimeout(this.watchdog);
294
+ this.watchdog = undefined;
295
+ }
296
+ /** One frame in flight per viewer. A newer frame replaces a held one, so the last visual state always arrives. */
297
+ onFrame(frame) {
298
+ // A frame the size of the viewport settles the stream. Chromium can capture one before the page
299
+ // has resized (646x362 for a 646x787 viewport) and send nothing after it on a static page; the
300
+ // viewer still gets that frame, and the watchdog starts the stream again to replace it.
301
+ const size = jpegSize(frame.data);
302
+ const stale = size !== undefined && this.streaming !== undefined && (size.w !== this.streaming.w || size.h !== this.streaming.h);
303
+ if (stale) {
304
+ this.armWatchdog();
305
+ }
306
+ else {
307
+ this.silentStarts = 0;
308
+ this.disarmWatchdog();
309
+ }
310
+ if (!this.viewer)
311
+ return void this.ackFrame(frame.sessionId);
312
+ if (this.pending !== undefined) {
313
+ if (this.held)
314
+ void this.ackFrame(this.held.sessionId);
315
+ this.held = frame;
316
+ return;
317
+ }
318
+ this.sendFrame(frame);
319
+ }
320
+ sendFrame(frame) {
321
+ const viewer = this.viewer;
322
+ if (!viewer)
323
+ return void this.ackFrame(frame.sessionId);
324
+ this.pending = frame.sessionId;
325
+ if (!this.announced) {
326
+ this.announced = true;
327
+ this.opts.onFirstFrame?.(viewer);
328
+ }
329
+ viewer.sendFrame(Buffer.from(frame.data, 'base64'));
330
+ }
331
+ /** Frames owed to a viewer that left: ack them so Chromium does not stall. */
332
+ releaseFrames() {
333
+ if (this.pending !== undefined)
334
+ void this.ackFrame(this.pending);
335
+ if (this.held)
336
+ void this.ackFrame(this.held.sessionId);
337
+ this.pending = undefined;
338
+ this.held = undefined;
339
+ }
340
+ ackFrame(sessionId) {
341
+ return this.cdp.send('Page.screencastFrameAck', { sessionId }).then(() => { }, () => { });
342
+ }
343
+ tell(msg) {
344
+ this.viewer?.send(msg);
345
+ }
346
+ }
347
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/preview/session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAiB/C,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;AAC7C,0JAA0J;AAC1J,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B;;;;GAIG;AACH,MAAM,sBAAsB,GAAG,IAAI,CAAC;AACpC,gGAAgG;AAChG,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC,CAAC;AAE9E;;;;GAIG;AACH,SAAS,QAAQ,CAAC,MAAc;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACjF,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,OAAO,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QACzC,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC;QAC9B,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,EAAE,IAAI,CAAC,CAAC;YACR,SAAS;QACX,CAAC;QACD,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAC9F,OAAO,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/G,CAAC;QACD,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;;;;;;;;;;;MAWhB,CAAC;AAKP,SAAS,QAAQ,CAAC,GAAuB;IACvC,IAAI,CAAC;QACH,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,OAAO,cAAc;IAqBN,GAAG;IACH,IAAI;IArBvB,sEAAsE;IACtE,GAAG,CAAU;IAEL,MAAM,CAAU;IACxB,sDAAsD;IAC9C,OAAO,CAAU;IACzB,6DAA6D;IACrD,IAAI,CAAmB;IACvB,SAAS,GAAG,KAAK,CAAC;IAClB,QAAQ,GAAG,gBAAgB,CAAC;IACpC,sIAAsI;IAC9H,KAAK,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IACjD,2EAA2E;IACnE,SAAS,CAA4B;IACrC,QAAQ,CAAiC;IACzC,YAAY,GAAG,CAAC,CAAC;IACzB,qFAAqF;IAC7E,WAAW,CAAU;IAE7B,YACmB,GAAQ,EACR,IAAiD;mBADjD,GAAG;oBACH,IAAI;QAErB,GAAG,CAAC,EAAE,CAAkB,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9E,GAAG,CAAC,EAAE,CAA6D,qBAAqB,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;YACtG,IAAI,KAAK,CAAC,QAAQ;gBAAE,OAAO;YAC3B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;YACxC,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAoC,8BAA8B,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE;YAC7F,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;gBAAE,OAAO;YACvC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,4GAA4G;QAC5G,GAAG,CAAC,EAAE,CAAqC,qBAAqB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAChF,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;gBAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QACpD,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAgB,8BAA8B,EAAE,MAAM,CAAC,EAAE,CAC7D,IAAI,CAAC,IAAI,CAAC;YACR,CAAC,EAAE,QAAQ;YACX,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;SACzC,CAAC,CACH,CAAC;QACF,GAAG,CAAC,EAAE,CAAoC,uBAAuB,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;YACvF,IAAI,IAAI,KAAK,UAAU;gBAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,mGAAmG;IACnG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAQ,EAAE,IAAI,GAAgD,EAAE;QAClF,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9B,MAAM,GAAG,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACjC,MAAM,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAC3D,MAAM,GAAG,CAAC,IAAI,CAAC,uCAAuC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5E,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,oGAAoG;IACpG,MAAM,CAAC,MAAc;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,4FAA4F;QAC5F,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,CAAC,MAAc;QACnB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO;QACnC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;YACtB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAW;QACxB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAED,kFAAkF;IAClF,KAAK,CAAC,MAAM,CAAC,GAAyB;QACpC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC;YACd,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YACxC,KAAK,KAAK,EAAE,CAAC;gBACX,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;oBAAE,OAAO;gBACvC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;gBAC3B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;gBACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACvB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;gBACtB,IAAI,IAAI;oBAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;YACD,KAAK,OAAO;gBACV,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnD,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE;oBAC9C,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,CAAC,EAAE,GAAG,CAAC,CAAC;oBACR,CAAC,EAAE,GAAG,CAAC,CAAC;oBACR,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,MAAM;oBAC5B,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,CAAC;oBACzB,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,CAAC;oBAC/B,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC;oBACvB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC;oBACvB,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,CAAC;iBAC9B,CAAC,CAAC;gBACH,OAAO;YACT,KAAK,KAAK;gBACR,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;oBAAE,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC7C,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE;oBAC5C,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE;oBAClB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;oBACpB,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;oBACzD,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,CAAC;oBAC7B,qBAAqB,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC;oBAClC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpD,CAAC,CAAC;gBACH,OAAO;YACT,KAAK,YAAY;gBACf,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC5D,OAAO;YACT,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACrD,KAAK,QAAQ;gBACX,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,KAAK,EAAE,CAAC,CAAC;gBAC9E,OAAO;YACT,KAAK,MAAM,CAAC;YACZ,KAAK,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAA2D,2BAA2B,CAAC,CAAC;gBAC7I,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClE,IAAI,KAAK;oBAAE,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBACrF,OAAO;YACT,CAAC;YACD,KAAK,cAAc;gBACjB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;gBACvG,OAAO;YACT;gBACE,oDAAoD;gBACpD,OAAO;QACX,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,GAAwB;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACjC,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,WAAW,CAAC,CAAS,EAAE,CAAS;QACtC,oFAAoF;QACpF,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,CAAS,EAAE,CAAS;QAC9C,sGAAsG;QACtG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC;YAAE,OAAO;QAC9D,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oCAAoC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACxH,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC3D,iGAAiG;QACjG,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QACtB,uGAAuG;QACvG,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;QACjI,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACK,WAAW;QACjB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,sEAAsE;QACtE,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAC/D,CAAC;IAEO,WAAW,CAAC,OAA2B;QAC7C,OAAO,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,CAAC,WAAW,CAAC;IACjG,CAAC;IAED,2IAA2I;IACnI,WAAW,CAAC,MAAM,GAAG,mBAAmB;QAC9C,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,mBAAmB;gBAAE,OAAO;YACxF,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC1E,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;IAC1B,CAAC;IAEO,cAAc;QACpB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,kHAAkH;IAC1G,OAAO,CAAC,KAAsB;QACpC,gGAAgG;QAChG,+FAA+F;QAC/F,wFAAwF;QACxF,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACjI,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,IAAI;gBAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAEO,SAAS,CAAC,KAAsB;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,8EAA8E;IACtE,aAAa;QACnB,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjE,IAAI,IAAI,CAAC,IAAI;YAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;IACxB,CAAC;IAEO,QAAQ,CAAC,SAAiB;QAChC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC1F,CAAC;IAEO,IAAI,CAAC,GAAyB;QACpC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The preview URL bar's one rule (#781, spec 2026-10-02-live-preview-v1): a bare port means the
3
+ * host's localhost, an address without a scheme means `http://`, and only http(s) reaches Chromium.
4
+ * `javascript:`, `file:`, `chrome:` and `data:` would turn the URL bar into a way past the page.
5
+ */
6
+ export declare function normalizePreviewUrl(input: string): string;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * The preview URL bar's one rule (#781, spec 2026-10-02-live-preview-v1): a bare port means the
3
+ * host's localhost, an address without a scheme means `http://`, and only http(s) reaches Chromium.
4
+ * `javascript:`, `file:`, `chrome:` and `data:` would turn the URL bar into a way past the page.
5
+ */
6
+ export function normalizePreviewUrl(input) {
7
+ const text = input.trim();
8
+ if (/^\d+$/.test(text))
9
+ return new URL(`http://localhost:${text}/`).href;
10
+ // `localhost:5173/x` parses as scheme `localhost:`; a host followed by a port is an address, not a scheme.
11
+ const hasScheme = /^[a-z][a-z0-9+.-]*:/i.test(text) && !/^[a-z0-9.-]+:\d+(?:[/?#]|$)/i.test(text);
12
+ const url = new URL(hasScheme ? text : `http://${text}`);
13
+ if (url.protocol !== 'http:' && url.protocol !== 'https:')
14
+ throw new Error('only http(s)');
15
+ return url.href;
16
+ }
17
+ //# sourceMappingURL=url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/preview/url.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1B,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,GAAG,CAAC,oBAAoB,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;IACzE,2GAA2G;IAC3G,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClG,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IACzD,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IAC3F,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { z } from 'zod';
2
+ declare const identitySchema: z.ZodObject<{
3
+ path: z.ZodString;
4
+ dev: z.ZodNumber;
5
+ ino: z.ZodNumber;
6
+ birthtimeMs: z.ZodNumber;
7
+ }, z.core.$strict>;
8
+ export type FallbackRemoval = z.infer<typeof identitySchema>;
9
+ /** A recursive rm can remove the owner marker before failing to remove its directory.
10
+ * This private checkpoint preserves that already-verified authority across retry/restart,
11
+ * bound to the exact directory incarnation, never a replacement at the same pathname. */
12
+ export declare function readFallbackRemovals(local: string): FallbackRemoval[];
13
+ export declare function fallbackIdentity(path: string): FallbackRemoval;
14
+ export declare function checkpointFallbackRemoval(local: string, path: string, records: FallbackRemoval[]): void;
15
+ export {};
@@ -0,0 +1,60 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { closeSync, constants, fstatSync, fsyncSync, lstatSync, mkdirSync, openSync, readSync, realpathSync, renameSync, rmSync, writeFileSync } from 'node:fs';
3
+ import { join, resolve } from 'node:path';
4
+ import { z } from 'zod';
5
+ const identitySchema = z.object({ path: z.string(), dev: z.number(), ino: z.number(), birthtimeMs: z.number() }).strict();
6
+ const removalsSchema = z.array(identitySchema).max(32);
7
+ const FILE = '.cez-fallback-removal.json';
8
+ /** A recursive rm can remove the owner marker before failing to remove its directory.
9
+ * This private checkpoint preserves that already-verified authority across retry/restart,
10
+ * bound to the exact directory incarnation, never a replacement at the same pathname. */
11
+ export function readFallbackRemovals(local) {
12
+ let fd;
13
+ try {
14
+ fd = openSync(join(local, FILE), constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
15
+ }
16
+ catch (error) {
17
+ if (error.code === 'ENOENT')
18
+ return [];
19
+ throw error;
20
+ }
21
+ try {
22
+ const stat = fstatSync(fd);
23
+ if (!stat.isFile() || stat.size > 16384 || (stat.mode & 0o077))
24
+ throw Error('Unsafe fallback removal checkpoint');
25
+ const buffer = Buffer.alloc(16385), count = readSync(fd, buffer, 0, buffer.length, 0);
26
+ return removalsSchema.parse(JSON.parse(buffer.subarray(0, count).toString('utf8')));
27
+ }
28
+ finally {
29
+ closeSync(fd);
30
+ }
31
+ }
32
+ export function fallbackIdentity(path) {
33
+ const stat = lstatSync(path);
34
+ if (!stat.isDirectory() || realpathSync(path) !== resolve(path))
35
+ throw Error('Unsafe fallback directory');
36
+ return { path, dev: stat.dev, ino: stat.ino, birthtimeMs: stat.birthtimeMs };
37
+ }
38
+ export function checkpointFallbackRemoval(local, path, records) {
39
+ const identity = fallbackIdentity(path);
40
+ const next = removalsSchema.parse([...records.filter(record => record.path !== path), identity]);
41
+ mkdirSync(local, { recursive: true });
42
+ if (!lstatSync(local).isDirectory() || realpathSync(local) !== resolve(local))
43
+ throw Error('Unsafe fallback pointer directory');
44
+ const target = join(local, FILE), temporary = `${target}.${randomUUID()}.tmp`;
45
+ const fd = openSync(temporary, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);
46
+ try {
47
+ try {
48
+ writeFileSync(fd, JSON.stringify(next));
49
+ fsyncSync(fd);
50
+ }
51
+ finally {
52
+ closeSync(fd);
53
+ }
54
+ renameSync(temporary, target);
55
+ }
56
+ finally {
57
+ rmSync(temporary, { force: true });
58
+ }
59
+ }
60
+ //# sourceMappingURL=agent-tmpdir-removal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-tmpdir-removal.js","sourceRoot":"","sources":["../../src/runs/agent-tmpdir-removal.ts"],"names":[],"mappings":"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"}
@@ -61,8 +61,19 @@ export declare function agentTmpDirEnabled(env?: NodeJS.ProcessEnv): boolean;
61
61
  * actually take.
62
62
  */
63
63
  export declare function agentTmpEnv(dataDir: string, runId: string, env?: NodeJS.ProcessEnv): Record<string, string>;
64
- /** Every place a run's scratch may live: the local directory and each OS-root fallback. */
64
+ /** False includes malformed/unreadable pointers and foreign ownership, never just a missing
65
+ * path in a best-effort list. Call before resource reuse/deletion and preserve the evidence. */
66
+ export declare function agentTmpDirOwnershipProven(dataDir: string, runId: string): boolean;
67
+ /** Every candidate path, including readable pointers whose ownership is still uncertain. */
65
68
  export declare function agentTmpDirLocations(dataDir: string, runId: string): string[];
69
+ /** A clear scan of a partial list cannot settle legacy execution. Completeness is distinct
70
+ * from ownership: neither this list nor a known reboot authorizes resource deletion/reuse. */
71
+ export declare function agentTmpDirLocationEvidence(dataDir: string, runId: string): {
72
+ paths: string[];
73
+ complete: boolean;
74
+ };
75
+ /** Only ENOENT proves cleanup finished. Permission/read errors retain the durable intent. */
76
+ export declare function agentTmpDirMayExist(dataDir: string, runId: string): boolean;
66
77
  /**
67
78
  * Reap one task's directory after terminal completion or history deletion.
68
79
  * Session close alone is not completion: a live task's Continue must retain