@wjarka/cezarion 0.16.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (907) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +594 -207
  3. package/dist/agent-config/account-identity.d.ts +3 -19
  4. package/dist/agent-config/account-identity.js +8 -5
  5. package/dist/agent-config/account-identity.js.map +1 -1
  6. package/dist/agent-config/catalog.d.ts +3 -14
  7. package/dist/agent-config/catalog.js.map +1 -1
  8. package/dist/agent-config/files.d.ts +2 -6
  9. package/dist/agent-config/files.js +2 -6
  10. package/dist/agent-config/files.js.map +1 -1
  11. package/dist/agent-config/model-settings/types.d.ts +1 -1
  12. package/dist/agent-config/seed.d.ts +11 -3
  13. package/dist/agent-config/seed.js +52 -48
  14. package/dist/agent-config/seed.js.map +1 -1
  15. package/dist/agent-config/service.js +3 -2
  16. package/dist/agent-config/service.js.map +1 -1
  17. package/dist/agent-config/validate.d.ts +1 -4
  18. package/dist/agent-config/validate.js.map +1 -1
  19. package/dist/application-update/helper.d.ts +2 -2
  20. package/dist/application-update/helper.js +7 -12
  21. package/dist/application-update/helper.js.map +1 -1
  22. package/dist/application-update/launcher.d.ts +4 -0
  23. package/dist/application-update/launcher.js +18 -12
  24. package/dist/application-update/launcher.js.map +1 -1
  25. package/dist/application-update/service.d.ts +3 -3
  26. package/dist/application-update/service.js +1 -1
  27. package/dist/application-update/service.js.map +1 -1
  28. package/dist/archive-on-merge-setting.d.ts +15 -0
  29. package/dist/archive-on-merge-setting.js +14 -0
  30. package/dist/archive-on-merge-setting.js.map +1 -0
  31. package/dist/artifacts/cli.d.ts +8 -0
  32. package/dist/artifacts/cli.js +21 -2
  33. package/dist/artifacts/cli.js.map +1 -1
  34. package/dist/artifacts/resolve.js +2 -1
  35. package/dist/artifacts/resolve.js.map +1 -1
  36. package/dist/artifacts/store.js.map +1 -1
  37. package/dist/automations/automation-cli.d.ts +59 -0
  38. package/dist/automations/automation-cli.js +509 -0
  39. package/dist/automations/automation-cli.js.map +1 -0
  40. package/dist/automations/builtin-skill.d.ts +7 -0
  41. package/dist/automations/builtin-skill.js +14 -0
  42. package/dist/automations/builtin-skill.js.map +1 -0
  43. package/dist/automations/github-baseline.d.ts +3 -0
  44. package/dist/automations/github-baseline.js +17 -0
  45. package/dist/automations/github-baseline.js.map +1 -0
  46. package/dist/automations/github-poller.d.ts +23 -4
  47. package/dist/automations/github-poller.js +157 -88
  48. package/dist/automations/github-poller.js.map +1 -1
  49. package/dist/automations/prompts.d.ts +12 -0
  50. package/dist/automations/prompts.js +160 -0
  51. package/dist/automations/prompts.js.map +1 -0
  52. package/dist/automations/schedule-runner.d.ts +43 -24
  53. package/dist/automations/schedule-runner.js +207 -20
  54. package/dist/automations/schedule-runner.js.map +1 -1
  55. package/dist/automations/scheduler.d.ts +10 -2
  56. package/dist/automations/scheduler.js +200 -54
  57. package/dist/automations/scheduler.js.map +1 -1
  58. package/dist/automations/service.d.ts +777 -0
  59. package/dist/automations/service.js +444 -0
  60. package/dist/automations/service.js.map +1 -0
  61. package/dist/automations/store.d.ts +17 -7
  62. package/dist/automations/store.js +88 -17
  63. package/dist/automations/store.js.map +1 -1
  64. package/dist/automations/task-template.d.ts +7 -2
  65. package/dist/automations/task-template.js +93 -44
  66. package/dist/automations/task-template.js.map +1 -1
  67. package/dist/automations/tool-adapter.d.ts +6 -0
  68. package/dist/automations/tool-adapter.js +108 -0
  69. package/dist/automations/tool-adapter.js.map +1 -0
  70. package/dist/automations/types.d.ts +1 -405
  71. package/dist/automations/types.js +1 -218
  72. package/dist/automations/types.js.map +1 -1
  73. package/dist/autosave-cleanup.d.ts +26 -0
  74. package/dist/autosave-cleanup.js +87 -0
  75. package/dist/autosave-cleanup.js.map +1 -0
  76. package/dist/autosave-git.d.ts +3 -0
  77. package/dist/autosave-git.js +67 -35
  78. package/dist/autosave-git.js.map +1 -1
  79. package/dist/autosave-group.d.ts +8 -0
  80. package/dist/autosave-group.js +61 -0
  81. package/dist/autosave-group.js.map +1 -0
  82. package/dist/autosave-holders.d.ts +31 -4
  83. package/dist/autosave-holders.js +92 -7
  84. package/dist/autosave-holders.js.map +1 -1
  85. package/dist/autosave-windows.d.ts +14 -0
  86. package/dist/autosave-windows.js +36 -2
  87. package/dist/autosave-windows.js.map +1 -1
  88. package/dist/ci-wait/client.d.ts +20 -3
  89. package/dist/ci-wait/client.js +40 -44
  90. package/dist/ci-wait/client.js.map +1 -1
  91. package/dist/ci-wait/controller.d.ts +622 -36
  92. package/dist/ci-wait/controller.js +152 -20
  93. package/dist/ci-wait/controller.js.map +1 -1
  94. package/dist/ci-wait/errors.d.ts +19 -0
  95. package/dist/ci-wait/errors.js +180 -2
  96. package/dist/ci-wait/errors.js.map +1 -1
  97. package/dist/ci-wait/github.d.ts +25 -1
  98. package/dist/ci-wait/github.js +76 -9
  99. package/dist/ci-wait/github.js.map +1 -1
  100. package/dist/ci-wait/mcp.d.ts +0 -1
  101. package/dist/ci-wait/mcp.js +0 -2
  102. package/dist/ci-wait/mcp.js.map +1 -1
  103. package/dist/ci-wait/supervisor.d.ts +7 -0
  104. package/dist/ci-wait/supervisor.js +113 -17
  105. package/dist/ci-wait/supervisor.js.map +1 -1
  106. package/dist/ci-wait/tools.d.ts +536 -16
  107. package/dist/ci-wait/tools.js +165 -20
  108. package/dist/ci-wait/tools.js.map +1 -1
  109. package/dist/config.d.ts +3 -17
  110. package/dist/config.js +4 -60
  111. package/dist/config.js.map +1 -1
  112. package/dist/contract/active-provider.d.ts +12 -0
  113. package/dist/contract/agent-profiles.d.ts +2 -10
  114. package/dist/contract/ask-schema.d.ts +22 -4
  115. package/dist/contract/ask.d.ts +6 -4
  116. package/dist/contract/attachments.d.ts +35 -0
  117. package/dist/contract/attention.d.ts +46 -37
  118. package/dist/contract/automation-requests.d.ts +308 -0
  119. package/dist/contract/automation-schedule.d.ts +40 -11
  120. package/dist/contract/automation-storage.d.ts +512 -0
  121. package/dist/contract/automations.d.ts +421 -40
  122. package/dist/contract/ci-wait.d.ts +41 -4
  123. package/dist/contract/config-requests.d.ts +36 -0
  124. package/dist/contract/conversations.d.ts +24 -10
  125. package/dist/contract/defined.d.ts +8 -0
  126. package/dist/contract/delegation.d.ts +312 -8
  127. package/dist/contract/events.d.ts +24 -3
  128. package/dist/contract/github-requests.d.ts +26 -0
  129. package/dist/contract/github.d.ts +60 -27
  130. package/dist/contract/handoff.d.ts +43 -0
  131. package/dist/contract/health.d.ts +2 -2
  132. package/dist/contract/image-path.d.ts +6 -0
  133. package/dist/contract/index.d.ts +31 -0
  134. package/dist/contract/index.js +3756 -1525
  135. package/dist/contract/live-coordination.d.ts +158 -0
  136. package/dist/contract/live-limits.d.ts +8 -0
  137. package/dist/contract/live.d.ts +123 -0
  138. package/dist/contract/pending-ask.d.ts +58 -0
  139. package/dist/contract/permissions.d.ts +54 -0
  140. package/dist/contract/preview.d.ts +33 -0
  141. package/dist/contract/project-limits.d.ts +33 -0
  142. package/dist/contract/projects.d.ts +486 -20
  143. package/dist/contract/provider-requests.d.ts +77 -0
  144. package/dist/contract/query-requests.d.ts +52 -0
  145. package/dist/contract/repo-requests.d.ts +12 -0
  146. package/dist/contract/run-labels.d.ts +8 -0
  147. package/dist/contract/run-limits.d.ts +8 -0
  148. package/dist/contract/run-predicates.d.ts +32 -0
  149. package/dist/contract/run-requests.d.ts +33 -0
  150. package/dist/contract/run-search.d.ts +193 -0
  151. package/dist/contract/runs.d.ts +2232 -1894
  152. package/dist/contract/scheduled-tasks.d.ts +187 -0
  153. package/dist/contract/skills.d.ts +22 -772
  154. package/dist/contract/team-skill-ref.d.ts +10 -0
  155. package/dist/{core → contract}/tool-display.d.ts +4 -10
  156. package/dist/contract/ui-state-requests.d.ts +60 -0
  157. package/dist/contract/version.d.ts +3 -0
  158. package/dist/contract/voice.d.ts +213 -0
  159. package/dist/contract/waits.d.ts +1204 -0
  160. package/dist/contract/workflow-file.d.ts +37 -0
  161. package/dist/contract/workflow-requests.d.ts +7 -0
  162. package/dist/contract/workflows.d.ts +1 -2
  163. package/dist/contract/workspace.d.ts +34 -82
  164. package/dist/contract/zoned-time.d.ts +2 -11
  165. package/dist/core/agent-env.d.ts +4 -16
  166. package/dist/core/agent-env.js +14 -16
  167. package/dist/core/agent-env.js.map +1 -1
  168. package/dist/core/agent-profiles.d.ts +28 -40
  169. package/dist/core/agent-profiles.js +56 -51
  170. package/dist/core/agent-profiles.js.map +1 -1
  171. package/dist/core/agent-runner.d.ts +88 -44
  172. package/dist/core/agent-runner.js +17 -18
  173. package/dist/core/agent-runner.js.map +1 -1
  174. package/dist/core/ask.d.ts +3 -0
  175. package/dist/core/ask.js +12 -0
  176. package/dist/core/ask.js.map +1 -1
  177. package/dist/core/backend-detect.js +16 -2
  178. package/dist/core/backend-detect.js.map +1 -1
  179. package/dist/core/claude-cli-runner.d.ts +23 -4
  180. package/dist/core/claude-cli-runner.js +280 -76
  181. package/dist/core/claude-cli-runner.js.map +1 -1
  182. package/dist/core/claude-model-catalog.d.ts +2 -10
  183. package/dist/core/claude-model-catalog.js +2 -10
  184. package/dist/core/claude-model-catalog.js.map +1 -1
  185. package/dist/core/claude-ui-mapper.d.ts +2 -2
  186. package/dist/core/claude-ui-mapper.js +94 -2
  187. package/dist/core/claude-ui-mapper.js.map +1 -1
  188. package/dist/core/codex-app-server-runner.d.ts +3 -4
  189. package/dist/core/codex-app-server-runner.js +146 -51
  190. package/dist/core/codex-app-server-runner.js.map +1 -1
  191. package/dist/core/codex-app-server-transport.d.ts +4 -3
  192. package/dist/core/codex-app-server-transport.js +11 -7
  193. package/dist/core/codex-app-server-transport.js.map +1 -1
  194. package/dist/core/codex-approvals.d.ts +12 -0
  195. package/dist/core/codex-approvals.js +161 -0
  196. package/dist/core/codex-approvals.js.map +1 -0
  197. package/dist/core/codex-permissions.d.ts +1 -1
  198. package/dist/core/codex-ui-mapper.js +45 -1
  199. package/dist/core/codex-ui-mapper.js.map +1 -1
  200. package/dist/core/cursor-acp-runner.d.ts +1 -1
  201. package/dist/core/cursor-acp-runner.js +39 -15
  202. package/dist/core/cursor-acp-runner.js.map +1 -1
  203. package/dist/core/cursor-cli-flags.d.ts +19 -0
  204. package/dist/core/cursor-cli-flags.js +47 -0
  205. package/dist/core/cursor-cli-flags.js.map +1 -0
  206. package/dist/core/cursor-model-catalog.d.ts +22 -0
  207. package/dist/core/cursor-model-catalog.js +53 -24
  208. package/dist/core/cursor-model-catalog.js.map +1 -1
  209. package/dist/core/cursor-print-capabilities.d.ts +16 -0
  210. package/dist/core/cursor-print-capabilities.js +141 -0
  211. package/dist/core/cursor-print-capabilities.js.map +1 -0
  212. package/dist/core/cursor-print-process.d.ts +31 -0
  213. package/dist/core/cursor-print-process.js +117 -0
  214. package/dist/core/cursor-print-process.js.map +1 -0
  215. package/dist/core/cursor-print-runner.d.ts +31 -0
  216. package/dist/core/cursor-print-runner.js +555 -0
  217. package/dist/core/cursor-print-runner.js.map +1 -0
  218. package/dist/core/cursor-print-tool-catalog.d.ts +10 -0
  219. package/dist/core/cursor-print-tool-catalog.js +91 -0
  220. package/dist/core/cursor-print-tool-catalog.js.map +1 -0
  221. package/dist/core/cursor-print-ui-mapper.d.ts +47 -0
  222. package/dist/core/cursor-print-ui-mapper.js +553 -0
  223. package/dist/core/cursor-print-ui-mapper.js.map +1 -0
  224. package/dist/core/cursor-runner.d.ts +24 -0
  225. package/dist/core/cursor-runner.js +149 -0
  226. package/dist/core/cursor-runner.js.map +1 -0
  227. package/dist/core/cursor-ui-mapper.js +5 -2
  228. package/dist/core/cursor-ui-mapper.js.map +1 -1
  229. package/dist/core/defined.d.ts +1 -0
  230. package/dist/core/defined.js +2 -0
  231. package/dist/core/defined.js.map +1 -0
  232. package/dist/core/hook-items.d.ts +14 -0
  233. package/dist/core/hook-items.js +13 -0
  234. package/dist/core/hook-items.js.map +1 -0
  235. package/dist/core/host-model-catalog.d.ts +2 -9
  236. package/dist/core/host-model-catalog.js +2 -9
  237. package/dist/core/host-model-catalog.js.map +1 -1
  238. package/dist/core/managed-session.js +15 -3
  239. package/dist/core/managed-session.js.map +1 -1
  240. package/dist/core/model-identity.d.ts +4 -21
  241. package/dist/core/model-identity.js.map +1 -1
  242. package/dist/core/model-presets.d.ts +2 -13
  243. package/dist/core/model-presets.js +2 -13
  244. package/dist/core/model-presets.js.map +1 -1
  245. package/dist/core/omp-model-catalog.js.map +1 -1
  246. package/dist/core/omp-runner.d.ts +6 -7
  247. package/dist/core/omp-runner.js +92 -33
  248. package/dist/core/omp-runner.js.map +1 -1
  249. package/dist/core/omp-ui-mapper.js +1 -1
  250. package/dist/core/omp-ui-mapper.js.map +1 -1
  251. package/dist/core/opencode-model-catalog.js.map +1 -1
  252. package/dist/core/opencode-permissions.d.ts +52 -0
  253. package/dist/core/opencode-permissions.js +101 -0
  254. package/dist/core/opencode-permissions.js.map +1 -0
  255. package/dist/core/opencode-server-runner.d.ts +10 -9
  256. package/dist/core/opencode-server-runner.js +286 -28
  257. package/dist/core/opencode-server-runner.js.map +1 -1
  258. package/dist/core/opencode-session-error.d.ts +15 -7
  259. package/dist/core/opencode-session-error.js +25 -9
  260. package/dist/core/opencode-session-error.js.map +1 -1
  261. package/dist/core/opencode-ui-mapper.js +2 -2
  262. package/dist/core/opencode-ui-mapper.js.map +1 -1
  263. package/dist/core/pi-model-catalog.js.map +1 -1
  264. package/dist/core/pi-runner.d.ts +12 -4
  265. package/dist/core/pi-runner.js +171 -63
  266. package/dist/core/pi-runner.js.map +1 -1
  267. package/dist/core/pi-ui-mapper.js +1 -1
  268. package/dist/core/pi-ui-mapper.js.map +1 -1
  269. package/dist/core/process-usage.d.ts +5 -0
  270. package/dist/core/process-usage.js +24 -4
  271. package/dist/core/process-usage.js.map +1 -1
  272. package/dist/core/provider-auth.d.ts +16 -107
  273. package/dist/core/provider-auth.js +16 -132
  274. package/dist/core/provider-auth.js.map +1 -1
  275. package/dist/core/runner-factory.d.ts +4 -1
  276. package/dist/core/runner-factory.js +3 -3
  277. package/dist/core/runner-factory.js.map +1 -1
  278. package/dist/core/runner-runtime.d.ts +22 -0
  279. package/dist/core/runner-runtime.js +66 -5
  280. package/dist/core/runner-runtime.js.map +1 -1
  281. package/dist/core/runner-tool-grants.d.ts +21 -0
  282. package/dist/core/runner-tool-grants.js +64 -0
  283. package/dist/core/runner-tool-grants.js.map +1 -0
  284. package/dist/core/secret-redaction.d.ts +3 -20
  285. package/dist/core/secret-redaction.js +3 -20
  286. package/dist/core/secret-redaction.js.map +1 -1
  287. package/dist/core/session-process.d.ts +22 -2
  288. package/dist/core/session-process.js +170 -12
  289. package/dist/core/session-process.js.map +1 -1
  290. package/dist/core/shell-env.d.ts +2 -15
  291. package/dist/core/shell-env.js +2 -15
  292. package/dist/core/shell-env.js.map +1 -1
  293. package/dist/core/ui-events.d.ts +60 -47
  294. package/dist/core/ui-events.js +0 -23
  295. package/dist/core/ui-events.js.map +1 -1
  296. package/dist/core/usage-limit.js.map +1 -1
  297. package/dist/data-gitignore.js +3 -1
  298. package/dist/data-gitignore.js.map +1 -1
  299. package/dist/delegation/capacity.d.ts +4 -8
  300. package/dist/delegation/capacity.js +4 -8
  301. package/dist/delegation/capacity.js.map +1 -1
  302. package/dist/delegation/cli.js +123 -21
  303. package/dist/delegation/cli.js.map +1 -1
  304. package/dist/delegation/context.d.ts +19 -3
  305. package/dist/delegation/context.js +217 -22
  306. package/dist/delegation/context.js.map +1 -1
  307. package/dist/delegation/conversations.d.ts +4 -3
  308. package/dist/delegation/conversations.js +7 -5
  309. package/dist/delegation/conversations.js.map +1 -1
  310. package/dist/delegation/destroy-observation.d.ts +1 -1
  311. package/dist/delegation/destroy-observation.js.map +1 -1
  312. package/dist/delegation/effort.js.map +1 -1
  313. package/dist/delegation/execution-identity.d.ts +1 -1
  314. package/dist/delegation/execution-identity.js +41 -7
  315. package/dist/delegation/execution-identity.js.map +1 -1
  316. package/dist/delegation/idle-test-app.d.ts +4 -0
  317. package/dist/delegation/idle-test-app.js +174 -0
  318. package/dist/delegation/idle-test-app.js.map +1 -0
  319. package/dist/delegation/input.js.map +1 -1
  320. package/dist/delegation/park-notice.d.ts +42 -0
  321. package/dist/delegation/park-notice.js +71 -0
  322. package/dist/delegation/park-notice.js.map +1 -0
  323. package/dist/delegation/policy.d.ts +2 -0
  324. package/dist/delegation/policy.js +9 -1
  325. package/dist/delegation/policy.js.map +1 -1
  326. package/dist/delegation/process-liveness.d.ts +10 -15
  327. package/dist/delegation/process-liveness.js +11 -35
  328. package/dist/delegation/process-liveness.js.map +1 -1
  329. package/dist/delegation/provision.js +21 -19
  330. package/dist/delegation/provision.js.map +1 -1
  331. package/dist/delegation/questions.d.ts +3 -1
  332. package/dist/delegation/questions.js +10 -5
  333. package/dist/delegation/questions.js.map +1 -1
  334. package/dist/delegation/readiness.d.ts +2 -2
  335. package/dist/delegation/results.d.ts +4 -1
  336. package/dist/delegation/results.js +49 -18
  337. package/dist/delegation/results.js.map +1 -1
  338. package/dist/delegation/retry-backoff.d.ts +8 -0
  339. package/dist/delegation/retry-backoff.js +8 -0
  340. package/dist/delegation/retry-backoff.js.map +1 -1
  341. package/dist/delegation/routes.d.ts +114 -30
  342. package/dist/delegation/routes.js +4 -1
  343. package/dist/delegation/routes.js.map +1 -1
  344. package/dist/delegation/scratch-cleanup.d.ts +4 -5
  345. package/dist/delegation/scratch-cleanup.js +10 -8
  346. package/dist/delegation/scratch-cleanup.js.map +1 -1
  347. package/dist/delegation/service.d.ts +12 -4
  348. package/dist/delegation/service.js +76 -28
  349. package/dist/delegation/service.js.map +1 -1
  350. package/dist/delegation/transport.d.ts +154 -70
  351. package/dist/delegation/wait.d.ts +11 -0
  352. package/dist/delegation/wait.js +24 -0
  353. package/dist/delegation/wait.js.map +1 -1
  354. package/dist/delegation/windows-test-app.d.ts +5 -0
  355. package/dist/delegation/windows-test-app.js +63 -0
  356. package/dist/delegation/windows-test-app.js.map +1 -0
  357. package/dist/delegation/windows-workspace-identity.d.ts +3 -0
  358. package/dist/delegation/windows-workspace-identity.js +22 -0
  359. package/dist/delegation/windows-workspace-identity.js.map +1 -0
  360. package/dist/delegation/workspace.d.ts +5 -10
  361. package/dist/delegation/workspace.js +136 -75
  362. package/dist/delegation/workspace.js.map +1 -1
  363. package/dist/detached-process.d.ts +103 -0
  364. package/dist/detached-process.js +301 -0
  365. package/dist/detached-process.js.map +1 -0
  366. package/dist/discovery/catalog.d.ts +2 -1
  367. package/dist/discovery/catalog.js.map +1 -1
  368. package/dist/discovery/cli.js +3 -1
  369. package/dist/discovery/cli.js.map +1 -1
  370. package/dist/git-diff-base.d.ts +6 -61
  371. package/dist/git-diff-base.js +6 -70
  372. package/dist/git-diff-base.js.map +1 -1
  373. package/dist/git-index-copy.d.ts +4 -0
  374. package/dist/git-index-copy.js +10 -0
  375. package/dist/git-index-copy.js.map +1 -0
  376. package/dist/git-worktree-lock.d.ts +2 -4
  377. package/dist/git-worktree-lock.js +2 -4
  378. package/dist/git-worktree-lock.js.map +1 -1
  379. package/dist/git-worktree-release.d.ts +2 -2
  380. package/dist/git-worktree-release.js.map +1 -1
  381. package/dist/git-worktree.d.ts +47 -76
  382. package/dist/git-worktree.js +240 -94
  383. package/dist/git-worktree.js.map +1 -1
  384. package/dist/handoff.d.ts +51 -41
  385. package/dist/handoff.js +130 -78
  386. package/dist/handoff.js.map +1 -1
  387. package/dist/index.js +60 -39
  388. package/dist/index.js.map +1 -1
  389. package/dist/merge-observations.d.ts +13 -0
  390. package/dist/merge-observations.js +55 -0
  391. package/dist/merge-observations.js.map +1 -0
  392. package/dist/open-url.js +4 -14
  393. package/dist/open-url.js.map +1 -1
  394. package/dist/paths.d.ts +10 -13
  395. package/dist/paths.js +36 -17
  396. package/dist/paths.js.map +1 -1
  397. package/dist/planner.d.ts +2 -1
  398. package/dist/planner.js +9 -6
  399. package/dist/planner.js.map +1 -1
  400. package/dist/preview/agent-address.d.ts +34 -0
  401. package/dist/preview/agent-address.js +51 -0
  402. package/dist/preview/agent-address.js.map +1 -0
  403. package/dist/preview/agent-marker.d.ts +17 -0
  404. package/dist/preview/agent-marker.js +71 -0
  405. package/dist/preview/agent-marker.js.map +1 -0
  406. package/dist/preview/cdp-proxy.d.ts +54 -0
  407. package/dist/preview/cdp-proxy.js +151 -0
  408. package/dist/preview/cdp-proxy.js.map +1 -0
  409. package/dist/preview/cdp.d.ts +39 -3
  410. package/dist/preview/cdp.js +155 -57
  411. package/dist/preview/cdp.js.map +1 -1
  412. package/dist/preview/chromium.d.ts +18 -6
  413. package/dist/preview/chromium.js +112 -25
  414. package/dist/preview/chromium.js.map +1 -1
  415. package/dist/preview/dev-server.d.ts +1 -1
  416. package/dist/preview/dev-server.js +20 -44
  417. package/dist/preview/dev-server.js.map +1 -1
  418. package/dist/preview/host.d.ts +70 -3
  419. package/dist/preview/host.js +314 -28
  420. package/dist/preview/host.js.map +1 -1
  421. package/dist/preview/registration.d.ts +10 -5
  422. package/dist/preview/registration.js +2 -0
  423. package/dist/preview/registration.js.map +1 -1
  424. package/dist/preview/session.d.ts +2 -0
  425. package/dist/preview/session.js +10 -0
  426. package/dist/preview/session.js.map +1 -1
  427. package/dist/process-wait/exit-file.d.ts +29 -0
  428. package/dist/process-wait/exit-file.js +67 -0
  429. package/dist/process-wait/exit-file.js.map +1 -0
  430. package/dist/process-wait/supervisor.d.ts +30 -0
  431. package/dist/process-wait/supervisor.js +71 -0
  432. package/dist/process-wait/supervisor.js.map +1 -0
  433. package/dist/release/snapshot.d.ts +6 -6
  434. package/dist/runs/agent-tmpdir.d.ts +51 -36
  435. package/dist/runs/agent-tmpdir.js +389 -132
  436. package/dist/runs/agent-tmpdir.js.map +1 -1
  437. package/dist/runs/auto-name.d.ts +6 -6
  438. package/dist/runs/auto-name.js +1 -1
  439. package/dist/runs/auto-name.js.map +1 -1
  440. package/dist/runs/client-request.d.ts +3 -3
  441. package/dist/runs/client-request.js +3 -3
  442. package/dist/runs/client-request.js.map +1 -1
  443. package/dist/runs/delegation-state.d.ts +11 -2
  444. package/dist/runs/delegation-state.js.map +1 -1
  445. package/dist/runs/event-history-agent-context.d.ts +14 -0
  446. package/dist/runs/event-history-agent-context.js +105 -0
  447. package/dist/runs/event-history-agent-context.js.map +1 -0
  448. package/dist/runs/event-history-context.d.ts +15 -0
  449. package/dist/runs/event-history-context.js +109 -0
  450. package/dist/runs/event-history-context.js.map +1 -0
  451. package/dist/runs/event-history.d.ts +4 -1
  452. package/dist/runs/event-history.js +29 -130
  453. package/dist/runs/event-history.js.map +1 -1
  454. package/dist/runs/history-stream.d.ts +2 -0
  455. package/dist/runs/history-stream.js +62 -0
  456. package/dist/runs/history-stream.js.map +1 -0
  457. package/dist/runs/legacy-index.d.ts +6 -19
  458. package/dist/runs/legacy-index.js +6 -19
  459. package/dist/runs/legacy-index.js.map +1 -1
  460. package/dist/runs/live-item-snapshots.d.ts +13 -0
  461. package/dist/runs/live-item-snapshots.js +79 -0
  462. package/dist/runs/live-item-snapshots.js.map +1 -0
  463. package/dist/runs/loaded-run-healing.d.ts +3 -0
  464. package/dist/runs/loaded-run-healing.js +17 -0
  465. package/dist/runs/loaded-run-healing.js.map +1 -0
  466. package/dist/runs/outcome-commit.d.ts +98 -0
  467. package/dist/runs/outcome-commit.js +132 -0
  468. package/dist/runs/outcome-commit.js.map +1 -0
  469. package/dist/runs/pull-requests.d.ts +14 -0
  470. package/dist/runs/pull-requests.js +96 -0
  471. package/dist/runs/pull-requests.js.map +1 -0
  472. package/dist/runs/raw-record.d.ts +3 -15
  473. package/dist/runs/raw-record.js +3 -15
  474. package/dist/runs/raw-record.js.map +1 -1
  475. package/dist/runs/retention.d.ts +2 -2
  476. package/dist/runs/retention.js +7 -0
  477. package/dist/runs/retention.js.map +1 -1
  478. package/dist/runs/review-gate.d.ts +1 -1
  479. package/dist/runs/review-gate.js.map +1 -1
  480. package/dist/runs/run-claims.d.ts +2 -9
  481. package/dist/runs/run-claims.js.map +1 -1
  482. package/dist/runs/run-database.d.ts +29 -34
  483. package/dist/runs/run-database.js +124 -46
  484. package/dist/runs/run-database.js.map +1 -1
  485. package/dist/runs/run-index.d.ts +6 -25
  486. package/dist/runs/run-index.js +25 -38
  487. package/dist/runs/run-index.js.map +1 -1
  488. package/dist/runs/run-row.d.ts +5 -34
  489. package/dist/runs/run-row.js +13 -38
  490. package/dist/runs/run-row.js.map +1 -1
  491. package/dist/runs/store.d.ts +1597 -744
  492. package/dist/runs/store.js +1231 -739
  493. package/dist/runs/store.js.map +1 -1
  494. package/dist/runs/task-markers.d.ts +1 -0
  495. package/dist/runs/task-markers.js +5 -1
  496. package/dist/runs/task-markers.js.map +1 -1
  497. package/dist/runs/task-refs.d.ts +3 -3
  498. package/dist/runs/transcript-facts-fold.d.ts +64 -0
  499. package/dist/runs/transcript-facts-fold.js +109 -0
  500. package/dist/runs/transcript-facts-fold.js.map +1 -0
  501. package/dist/runs/transcript-facts-load.d.ts +11 -0
  502. package/dist/runs/transcript-facts-load.js +66 -0
  503. package/dist/runs/transcript-facts-load.js.map +1 -0
  504. package/dist/runs/transcript-facts-queue.d.ts +30 -0
  505. package/dist/runs/transcript-facts-queue.js +227 -0
  506. package/dist/runs/transcript-facts-queue.js.map +1 -0
  507. package/dist/runs/transcript-facts-worker.d.ts +15 -0
  508. package/dist/runs/transcript-facts-worker.js +26 -0
  509. package/dist/runs/transcript-facts-worker.js.map +1 -0
  510. package/dist/runs/transcript-facts.d.ts +13 -51
  511. package/dist/runs/transcript-facts.js +86 -202
  512. package/dist/runs/transcript-facts.js.map +1 -1
  513. package/dist/runs/ui-event-sink.d.ts +5 -30
  514. package/dist/runs/ui-event-sink.js +8 -30
  515. package/dist/runs/ui-event-sink.js.map +1 -1
  516. package/dist/runs/webhook.d.ts +104 -38
  517. package/dist/runs/webhook.js +180 -77
  518. package/dist/runs/webhook.js.map +1 -1
  519. package/dist/server/app-type.d.ts +2 -17
  520. package/dist/server/archive-on-merge.d.ts +35 -0
  521. package/dist/server/archive-on-merge.js +202 -0
  522. package/dist/server/archive-on-merge.js.map +1 -0
  523. package/dist/server/capabilities.d.ts +3 -15
  524. package/dist/server/capabilities.js +6 -19
  525. package/dist/server/capabilities.js.map +1 -1
  526. package/dist/server/checkout-progress.d.ts +10 -0
  527. package/dist/server/checkout-progress.js +27 -0
  528. package/dist/server/checkout-progress.js.map +1 -0
  529. package/dist/server/checkout.d.ts +10 -19
  530. package/dist/server/checkout.js +15 -45
  531. package/dist/server/checkout.js.map +1 -1
  532. package/dist/server/cockpit-ownership.d.ts +2 -0
  533. package/dist/server/cockpit-ownership.js +9 -0
  534. package/dist/server/cockpit-ownership.js.map +1 -1
  535. package/dist/server/cold-repo-handles.d.ts +2 -7
  536. package/dist/server/cold-repo-handles.js +2 -7
  537. package/dist/server/cold-repo-handles.js.map +1 -1
  538. package/dist/server/completion-actions.d.ts +30 -0
  539. package/dist/server/completion-actions.js +204 -0
  540. package/dist/server/completion-actions.js.map +1 -0
  541. package/dist/server/create-project.d.ts +71 -0
  542. package/dist/server/create-project.js +448 -0
  543. package/dist/server/create-project.js.map +1 -0
  544. package/dist/server/forge/github-filters.d.ts +7 -1
  545. package/dist/server/forge/github-filters.js +66 -51
  546. package/dist/server/forge/github-filters.js.map +1 -1
  547. package/dist/server/forge/github-merge-requirements.d.ts +18 -0
  548. package/dist/server/forge/github-merge-requirements.js +137 -0
  549. package/dist/server/forge/github-merge-requirements.js.map +1 -0
  550. package/dist/server/forge/github.d.ts +98 -111
  551. package/dist/server/forge/github.js +625 -306
  552. package/dist/server/forge/github.js.map +1 -1
  553. package/dist/server/forge/types.d.ts +25 -22
  554. package/dist/server/fs-browse.d.ts +3 -28
  555. package/dist/server/fs-browse.js.map +1 -1
  556. package/dist/server/git-changes.d.ts +5 -15
  557. package/dist/server/git-changes.js +3 -50
  558. package/dist/server/git-changes.js.map +1 -1
  559. package/dist/server/git.d.ts +3 -1
  560. package/dist/server/git.js +12 -0
  561. package/dist/server/git.js.map +1 -1
  562. package/dist/server/github.d.ts +1 -1
  563. package/dist/server/github.js +1 -1
  564. package/dist/server/github.js.map +1 -1
  565. package/dist/server/launch-key.d.ts +2 -4
  566. package/dist/server/launch-key.js +2 -4
  567. package/dist/server/launch-key.js.map +1 -1
  568. package/dist/server/live-routes.d.ts +68 -0
  569. package/dist/server/live-routes.js +147 -0
  570. package/dist/server/live-routes.js.map +1 -0
  571. package/dist/server/open-in-app.d.ts +4 -13
  572. package/dist/server/open-in-app.js +5 -41
  573. package/dist/server/open-in-app.js.map +1 -1
  574. package/dist/server/open-in-targets.d.ts +42 -0
  575. package/dist/server/open-in-targets.js +110 -0
  576. package/dist/server/open-in-targets.js.map +1 -0
  577. package/dist/server/open-in-terminal.d.ts +3 -0
  578. package/dist/server/open-in-terminal.js +6 -26
  579. package/dist/server/open-in-terminal.js.map +1 -1
  580. package/dist/server/preview-cdp-socket.d.ts +21 -0
  581. package/dist/server/preview-cdp-socket.js +112 -0
  582. package/dist/server/preview-cdp-socket.js.map +1 -0
  583. package/dist/server/preview-socket.d.ts +11 -11
  584. package/dist/server/preview-socket.js +22 -22
  585. package/dist/server/preview-socket.js.map +1 -1
  586. package/dist/server/preview-sockets.d.ts +14 -0
  587. package/dist/server/preview-sockets.js +18 -0
  588. package/dist/server/preview-sockets.js.map +1 -0
  589. package/dist/server/project-context.d.ts +54 -18
  590. package/dist/server/project-context.js +178 -5
  591. package/dist/server/project-context.js.map +1 -1
  592. package/dist/server/provider-action-gate.d.ts +0 -2
  593. package/dist/server/provider-action-gate.js +0 -21
  594. package/dist/server/provider-action-gate.js.map +1 -1
  595. package/dist/server/provider-auth-runtime.d.ts +3 -18
  596. package/dist/server/provider-auth-runtime.js +3 -18
  597. package/dist/server/provider-auth-runtime.js.map +1 -1
  598. package/dist/server/repo-branches.d.ts +3 -9
  599. package/dist/server/repo-branches.js +6 -22
  600. package/dist/server/repo-branches.js.map +1 -1
  601. package/dist/server/run-event-feed.d.ts +20 -0
  602. package/dist/server/run-event-feed.js +190 -0
  603. package/dist/server/run-event-feed.js.map +1 -0
  604. package/dist/server/server-deps.d.ts +37 -0
  605. package/dist/server/server-deps.js +114 -0
  606. package/dist/server/server-deps.js.map +1 -0
  607. package/dist/server/server.d.ts +14082 -11998
  608. package/dist/server/server.js +785 -1647
  609. package/dist/server/server.js.map +1 -1
  610. package/dist/server/start-run-options.d.ts +82 -0
  611. package/dist/server/start-run-options.js +111 -0
  612. package/dist/server/start-run-options.js.map +1 -0
  613. package/dist/server/validators.d.ts +3 -29
  614. package/dist/server/validators.js +1 -2
  615. package/dist/server/validators.js.map +1 -1
  616. package/dist/server/ws.d.ts +3 -23
  617. package/dist/server/ws.js +3 -23
  618. package/dist/server/ws.js.map +1 -1
  619. package/dist/server-install/engine.d.ts +6 -9
  620. package/dist/server-install/engine.js +2 -9
  621. package/dist/server-install/engine.js.map +1 -1
  622. package/dist/server-install/platforms/ubuntu-vps.d.ts +1 -1
  623. package/dist/server-install/state.d.ts +2 -4
  624. package/dist/server-install/state.js +2 -4
  625. package/dist/server-install/state.js.map +1 -1
  626. package/dist/server-install/steps.d.ts +2 -5
  627. package/dist/server-install/steps.js +3 -6
  628. package/dist/server-install/steps.js.map +1 -1
  629. package/dist/server-install/types.d.ts +3 -6
  630. package/dist/server-install/types.js +2 -5
  631. package/dist/server-install/types.js.map +1 -1
  632. package/dist/server-install/ui.d.ts +2 -8
  633. package/dist/server-install/ui.js +3 -3
  634. package/dist/server-install/ui.js.map +1 -1
  635. package/dist/session-context.d.ts +64 -0
  636. package/dist/session-context.js +264 -0
  637. package/dist/session-context.js.map +1 -0
  638. package/dist/skills-provision.d.ts +62 -0
  639. package/dist/skills-provision.js +325 -0
  640. package/dist/skills-provision.js.map +1 -0
  641. package/dist/skills-remote.d.ts +29 -27
  642. package/dist/skills-remote.js +236 -100
  643. package/dist/skills-remote.js.map +1 -1
  644. package/dist/skills.d.ts +25 -36
  645. package/dist/skills.js +43 -54
  646. package/dist/skills.js.map +1 -1
  647. package/dist/subcommands.d.ts +11 -0
  648. package/dist/subcommands.js +24 -0
  649. package/dist/subcommands.js.map +1 -0
  650. package/dist/task-cli/cli.js +78 -25
  651. package/dist/task-cli/cli.js.map +1 -1
  652. package/dist/task-cli/discovery.d.ts +4 -2
  653. package/dist/task-cli/discovery.js +14 -13
  654. package/dist/task-cli/discovery.js.map +1 -1
  655. package/dist/task-cli/hint.d.ts +20 -0
  656. package/dist/task-cli/hint.js +14 -0
  657. package/dist/task-cli/hint.js.map +1 -0
  658. package/dist/task-cli/http.d.ts +1 -0
  659. package/dist/task-cli/http.js +3 -1
  660. package/dist/task-cli/http.js.map +1 -1
  661. package/dist/task-cli/projections.d.ts +14 -11
  662. package/dist/task-cli/projections.js +15 -11
  663. package/dist/task-cli/projections.js.map +1 -1
  664. package/dist/task-cli/watch.d.ts +18 -10
  665. package/dist/task-cli/watch.js +128 -20
  666. package/dist/task-cli/watch.js.map +1 -1
  667. package/dist/ui-state.d.ts +17 -3
  668. package/dist/ui-state.js +56 -9
  669. package/dist/ui-state.js.map +1 -1
  670. package/dist/update-check.d.ts +0 -10
  671. package/dist/update-check.js +1 -16
  672. package/dist/update-check.js.map +1 -1
  673. package/dist/voice/decide.d.ts +32 -0
  674. package/dist/voice/decide.js +297 -0
  675. package/dist/voice/decide.js.map +1 -0
  676. package/dist/voice/decision-log.d.ts +52 -0
  677. package/dist/voice/decision-log.js +107 -0
  678. package/dist/voice/decision-log.js.map +1 -0
  679. package/dist/voice/engine.d.ts +119 -0
  680. package/dist/voice/engine.js +60 -0
  681. package/dist/voice/engine.js.map +1 -0
  682. package/dist/voice/fake-engine.d.ts +10 -0
  683. package/dist/voice/fake-engine.js +192 -0
  684. package/dist/voice/fake-engine.js.map +1 -0
  685. package/dist/voice/jev-engine.d.ts +17 -0
  686. package/dist/voice/jev-engine.js +110 -0
  687. package/dist/voice/jev-engine.js.map +1 -0
  688. package/dist/voice/pending-ask.d.ts +17 -0
  689. package/dist/voice/pending-ask.js +50 -0
  690. package/dist/voice/pending-ask.js.map +1 -0
  691. package/dist/voice/routes.d.ts +115 -0
  692. package/dist/voice/routes.js +91 -0
  693. package/dist/voice/routes.js.map +1 -0
  694. package/dist/voice/sentence.d.ts +21 -0
  695. package/dist/voice/sentence.js +61 -0
  696. package/dist/voice/sentence.js.map +1 -0
  697. package/dist/voice/thresholds.d.ts +28 -0
  698. package/dist/voice/thresholds.js +29 -0
  699. package/dist/voice/thresholds.js.map +1 -0
  700. package/dist/webhooks/cli.d.ts +18 -0
  701. package/dist/webhooks/cli.js +145 -0
  702. package/dist/webhooks/cli.js.map +1 -0
  703. package/dist/webhooks/prompt.d.ts +5 -0
  704. package/dist/webhooks/prompt.js +26 -0
  705. package/dist/webhooks/prompt.js.map +1 -0
  706. package/dist/workflows/active-run.d.ts +167 -0
  707. package/dist/workflows/active-run.js +21 -0
  708. package/dist/workflows/active-run.js.map +1 -0
  709. package/dist/workflows/continuation-admission.d.ts +913 -0
  710. package/dist/workflows/continuation-admission.js +265 -0
  711. package/dist/workflows/continuation-admission.js.map +1 -0
  712. package/dist/workflows/execution-account.d.ts +13 -0
  713. package/dist/workflows/execution-account.js +18 -0
  714. package/dist/workflows/execution-account.js.map +1 -0
  715. package/dist/workflows/input-acknowledgement.d.ts +152 -0
  716. package/dist/workflows/input-acknowledgement.js +38 -0
  717. package/dist/workflows/input-acknowledgement.js.map +1 -0
  718. package/dist/workflows/line-order.d.ts +5 -0
  719. package/dist/workflows/line-order.js +25 -0
  720. package/dist/workflows/line-order.js.map +1 -0
  721. package/dist/workflows/outcome-batches.d.ts +20 -0
  722. package/dist/workflows/outcome-batches.js +25 -0
  723. package/dist/workflows/outcome-batches.js.map +1 -0
  724. package/dist/workflows/question-routing.d.ts +8 -0
  725. package/dist/workflows/question-routing.js +18 -0
  726. package/dist/workflows/question-routing.js.map +1 -0
  727. package/dist/workflows/run-scheduling.d.ts +35 -0
  728. package/dist/workflows/run-scheduling.js +61 -0
  729. package/dist/workflows/run-scheduling.js.map +1 -0
  730. package/dist/workflows/run-states.d.ts +190 -0
  731. package/dist/workflows/run-states.js +295 -0
  732. package/dist/workflows/run-states.js.map +1 -0
  733. package/dist/workflows/run.d.ts +1296 -278
  734. package/dist/workflows/run.js +5730 -3265
  735. package/dist/workflows/run.js.map +1 -1
  736. package/dist/workflows/turn-end.d.ts +116 -0
  737. package/dist/workflows/turn-end.js +68 -0
  738. package/dist/workflows/turn-end.js.map +1 -0
  739. package/dist/workflows/types.d.ts +35 -130
  740. package/dist/workflows/types.js +47 -100
  741. package/dist/workflows/types.js.map +1 -1
  742. package/dist/workflows/waits.d.ts +74 -0
  743. package/dist/workflows/waits.js +197 -0
  744. package/dist/workflows/waits.js.map +1 -0
  745. package/dist/workspace/agent-accounts.d.ts +5 -38
  746. package/dist/workspace/agent-accounts.js +14 -40
  747. package/dist/workspace/agent-accounts.js.map +1 -1
  748. package/dist/workspace/agent-profiles.d.ts +40 -16
  749. package/dist/workspace/agent-profiles.js +77 -17
  750. package/dist/workspace/agent-profiles.js.map +1 -1
  751. package/dist/workspace/config.d.ts +48 -49
  752. package/dist/workspace/config.js +68 -72
  753. package/dist/workspace/config.js.map +1 -1
  754. package/dist/workspace/migrations.d.ts +3 -13
  755. package/dist/workspace/migrations.js.map +1 -1
  756. package/dist/workspace/projects-cli.d.ts +1 -1
  757. package/dist/workspace/projects-cli.js.map +1 -1
  758. package/dist/workspace/projects.d.ts +15 -18
  759. package/dist/workspace/projects.js +20 -16
  760. package/dist/workspace/projects.js.map +1 -1
  761. package/dist/workspace/semaphore.d.ts +11 -45
  762. package/dist/workspace/semaphore.js +6 -18
  763. package/dist/workspace/semaphore.js.map +1 -1
  764. package/dist/workspace/ui-state.d.ts +6 -4
  765. package/dist/workspace/ui-state.js +6 -4
  766. package/dist/workspace/ui-state.js.map +1 -1
  767. package/dist/workspace/webhooks.d.ts +40 -0
  768. package/dist/workspace/webhooks.js +146 -0
  769. package/dist/workspace/webhooks.js.map +1 -0
  770. package/dist/worktree-manifest.d.ts +165 -0
  771. package/dist/worktree-manifest.js +530 -0
  772. package/dist/worktree-manifest.js.map +1 -0
  773. package/dist/worktree-setup.js.map +1 -1
  774. package/package.json +6 -5
  775. package/scripts/benchmark-run-store-fixture.ts +7 -3
  776. package/scripts/check-pack.mjs +3 -1
  777. package/scripts/inline-contract.mjs +80 -27
  778. package/scripts/install-as-command.mjs +3 -1
  779. package/scripts/measure-transcript-facts-health.mjs +87 -0
  780. package/scripts/measure-transcript-facts-lag.mjs +68 -0
  781. package/scripts/mock-ci-tool.mjs +49 -6
  782. package/scripts/mock-claude-model-refusal.mjs +42 -0
  783. package/scripts/mock-claude.mjs +833 -591
  784. package/scripts/mock-codex-app-server.mjs +785 -418
  785. package/scripts/mock-cursor-acp.mjs +296 -125
  786. package/scripts/mock-cursor-print.mjs +256 -0
  787. package/scripts/mock-deferred-turn-start.mjs +16 -0
  788. package/scripts/mock-delivery-control.d.mts +23 -0
  789. package/scripts/mock-delivery-control.mjs +80 -0
  790. package/scripts/mock-env-record.mjs +11 -0
  791. package/scripts/mock-failure-control.d.mts +13 -0
  792. package/scripts/mock-failure-control.mjs +68 -0
  793. package/scripts/mock-multi-pr.mjs +7 -0
  794. package/scripts/mock-nudge.mjs +45 -0
  795. package/scripts/mock-omp-rpc.mjs +429 -255
  796. package/scripts/mock-opencode-serve.mjs +972 -557
  797. package/scripts/mock-pi-rpc.mjs +558 -331
  798. package/scripts/mock-runner-crash.mjs +18 -2
  799. package/scripts/mock-session-context.d.mts +5 -0
  800. package/scripts/mock-session-context.mjs +56 -0
  801. package/scripts/mock-silent-tail.mjs +10 -3
  802. package/scripts/pi-default-tools.mjs +22 -0
  803. package/scripts/pi-project-skills.mjs +59 -0
  804. package/scripts/probe-cursor-print.mjs +627 -0
  805. package/scripts/transcript-facts-fixture.mjs +53 -0
  806. package/scripts/voice-replay.ts +50 -0
  807. package/scripts/windows-workspace-identity.cs +208 -0
  808. package/scripts/windows-workspace-identity.ps1 +10 -0
  809. package/web/dist/assets/alert-dialog-DfctKUMw.js +1 -0
  810. package/web/dist/assets/button-CeupvoKG.js +41 -0
  811. package/web/dist/assets/centered-state-hDsyXrnH.js +1 -0
  812. package/web/dist/assets/cez-idle-D3aj_9lp.js +1 -0
  813. package/web/dist/assets/diff-BnIXZK3i2.js +3 -0
  814. package/web/dist/assets/diff-controls-GewpW9aF.js +1 -0
  815. package/web/dist/assets/diff-view-Byo7gpvW.js +11 -0
  816. package/web/dist/assets/dropdown-menu-COj_J5wd.js +6 -0
  817. package/web/dist/assets/eye-B8okNWXU.js +1 -0
  818. package/web/dist/assets/git-toolbar-DY0z0n4S.js +1 -0
  819. package/web/dist/assets/github-DwU6ALRK.js +1 -0
  820. package/web/dist/assets/{image-preview-FOEfqpZP.js → image-preview-C_t9q45f.js} +1 -1
  821. package/web/dist/assets/index-BOfE8pyD.js +34 -0
  822. package/web/dist/assets/index-D9HpsmdW.css +1 -0
  823. package/web/dist/assets/live-protocol-Uce2NwEX.js +64 -0
  824. package/web/dist/assets/live-worker-BizfZSoh.ts +33 -0
  825. package/web/dist/assets/markdown-BBDDg-4t.js +1 -0
  826. package/web/dist/assets/nav-row-styles-AoIhhIwf.js +1 -0
  827. package/web/dist/assets/popover-D56fhiXj.js +1 -0
  828. package/web/dist/assets/preview-pane-connected-BmVqfSU5.js +3 -0
  829. package/web/dist/assets/reference-chip-gQNk-4jc.js +1 -0
  830. package/web/dist/assets/repo-git-B5ECDUuv.js +1 -0
  831. package/web/dist/assets/{repo-git-CoKp-g9K.css → repo-git-DVXNOJDT.css} +1 -1
  832. package/web/dist/assets/run-header-C0Y1NvEM.js +2 -0
  833. package/web/dist/assets/run-header-CC7VUTg9.css +1 -0
  834. package/web/dist/assets/skills-DUeTkZ9z.js +1 -0
  835. package/web/dist/assets/status-dot-1PR0i69P.js +1 -0
  836. package/web/dist/assets/tab-link-DmWk4l5O.js +1 -0
  837. package/web/dist/assets/task-changes-DKZXuW89.js +1 -0
  838. package/web/dist/assets/task-commits-BZ6KxWdF.js +1 -0
  839. package/web/dist/assets/task-files-DlF7Apcn.js +2 -0
  840. package/web/dist/assets/task-github-item-CVPo3geZ.js +1 -0
  841. package/web/dist/assets/task-thread-DtQ6uGfQ.css +1 -0
  842. package/web/dist/assets/task-thread-mm4-ECyo.js +9 -0
  843. package/web/dist/assets/thread-state-CIw2BlhT.js +4 -0
  844. package/web/dist/assets/use-hand-to-agent-state-BCDjzHnG.js +1 -0
  845. package/web/dist/assets/use-hand-to-agent-state-C7esPJ-N.css +1 -0
  846. package/web/dist/assets/workflows-D8vYD-ql.js +7 -0
  847. package/web/dist/assets/zoomable-image-CxQSsfcn.js +1 -0
  848. package/web/dist/index.html +13 -17
  849. package/web/dist/live-worker.js +4 -0
  850. package/dist/core/tool-display.js +0 -179
  851. package/dist/core/tool-display.js.map +0 -1
  852. package/dist/runs/human-ask-summary.d.ts +0 -9
  853. package/dist/runs/human-ask-summary.js +0 -39
  854. package/dist/runs/human-ask-summary.js.map +0 -1
  855. package/dist/runs/run-search.d.ts +0 -29
  856. package/dist/runs/run-search.js +0 -63
  857. package/dist/runs/run-search.js.map +0 -1
  858. package/dist/skills-banner.d.ts +0 -22
  859. package/dist/skills-banner.js +0 -41
  860. package/dist/skills-banner.js.map +0 -1
  861. package/dist/skills-update.d.ts +0 -88
  862. package/dist/skills-update.js +0 -392
  863. package/dist/skills-update.js.map +0 -1
  864. package/dist/todos.d.ts +0 -48
  865. package/dist/todos.js +0 -201
  866. package/dist/todos.js.map +0 -1
  867. package/web/dist/assets/agent-accounts-CFOBMVHc.js +0 -1
  868. package/web/dist/assets/alert-dialog-BrpNUwMt.js +0 -1
  869. package/web/dist/assets/button-C_rd7CPp.js +0 -43
  870. package/web/dist/assets/compare-variants-D6WXhvXA.js +0 -1
  871. package/web/dist/assets/diff-DrEARXTV.js +0 -3
  872. package/web/dist/assets/diff-controls-B1-j7nFg.js +0 -1
  873. package/web/dist/assets/diff-view-DvGLjdTk.js +0 -6
  874. package/web/dist/assets/dropdown-menu-BegOZFrj.js +0 -1
  875. package/web/dist/assets/format-DpNe3S0A.js +0 -1
  876. package/web/dist/assets/git-toolbar-Cw4ljmhB.js +0 -1
  877. package/web/dist/assets/github-CfV5sqL0.js +0 -1
  878. package/web/dist/assets/index-DgWWlOLy.js +0 -13
  879. package/web/dist/assets/index-fBFnuvxu.css +0 -1
  880. package/web/dist/assets/nav-row-styles-vp2JbhuJ.js +0 -1
  881. package/web/dist/assets/popover-BohP6WTx.js +0 -1
  882. package/web/dist/assets/preview-pane-connected-qTA5KNoJ.js +0 -3
  883. package/web/dist/assets/preview-state-vuMviq6q.js +0 -1
  884. package/web/dist/assets/prompt-templates-Cubdut_C.js +0 -15
  885. package/web/dist/assets/repo-git-Cf4t5PD0.js +0 -1
  886. package/web/dist/assets/run-diff-BpkUW37Z.js +0 -3
  887. package/web/dist/assets/run-header-68WHf9wV.js +0 -1
  888. package/web/dist/assets/run-header-8GObNx6F.css +0 -1
  889. package/web/dist/assets/search-x-I9Q8pgUa.js +0 -1
  890. package/web/dist/assets/skills-DFBiAuJG.js +0 -1
  891. package/web/dist/assets/skills-DiVIgKeU.js +0 -1
  892. package/web/dist/assets/square-terminal-B6RYYieR.js +0 -1
  893. package/web/dist/assets/status-dot-CqTJHSP9.js +0 -1
  894. package/web/dist/assets/tab-link-B07Hu4QX.js +0 -1
  895. package/web/dist/assets/task-changes--lQF6EYf.js +0 -1
  896. package/web/dist/assets/task-commits-Cx0qy4DN.js +0 -1
  897. package/web/dist/assets/task-files-D50s-gKW.js +0 -2
  898. package/web/dist/assets/task-github-item-DaqmSwYT.js +0 -1
  899. package/web/dist/assets/task-thread-BPQ64lui.js +0 -7
  900. package/web/dist/assets/task-thread-zNE2Q9E-.css +0 -1
  901. package/web/dist/assets/textarea-D20O4Pw0.js +0 -1
  902. package/web/dist/assets/thread-state-DWcFMrvb.js +0 -4
  903. package/web/dist/assets/use-hand-to-agent-state-BLIGmwbd.css +0 -1
  904. package/web/dist/assets/use-hand-to-agent-state-Cy9eyyfL.js +0 -1
  905. package/web/dist/assets/utils-JsL3ZsJf.js +0 -64
  906. package/web/dist/assets/workflows-jwG7uxqi.js +0 -11
  907. package/web/dist/assets/zoomable-image-BJJ64KGc.js +0 -1
@@ -1,53 +1,12 @@
1
1
  /**
2
- * Task-scoped temp directory for spawned agents (#785, length-capped by #387).
3
- *
4
- * Every agent used to inherit the host's `TMPDIR`/`TEMP`/`TMP` verbatim — they
5
- * ride in on `buildChildEnv`'s base allowlist — so every run on the machine
6
- * shared one directory. On a box that runs agents continuously and never
7
- * reboots, that directory is a tmpfs nobody reaps, and once it hits its quota
8
- * the failure is *silent*: the Claude Code CLI roots its scratch tree at
9
- * `os.tmpdir()` and round-trips each `Bash` command's stdout/stderr through a
10
- * file there. Under `EDQUOT` the inode is still allocated, so the file is
11
- * created and the write fails — the command runs, its side effects land, and
12
- * the agent reads back an empty result with a bogus exit status. Nothing in the
13
- * cockpit says anything is wrong.
14
- *
15
- * Three properties fix that, and this module owns all of them:
16
- *
17
- * 1. **Isolation** — each run gets `<dataDir>/tmp/<runId>`, on the same disk
18
- * as the run's own state rather than a shared tmpfs, reaped when the run
19
- * ends. `buildChildEnv` applies the per-run env last, so these values win
20
- * over the host's without any allowlist change.
21
- * 2. **Fail loud** — the directory is write-probed before the backend spawns.
22
- * A run that cannot get a working temp directory fails immediately with a
23
- * named, actionable error instead of spawning an agent that will run blind.
24
- * 3. **Short enough to bind** (#387) — tools bind *named* unix sockets under
25
- * `TMPDIR` (tsx's IPC server lays down `<tmpdir>/tsx-<uid>/<pid>.pipe`,
26
- * Chrome a `SingletonSocket`), and the kernel caps a socket path at
27
- * `sun_path` — 108 bytes on Linux, 104 on macOS, NUL included. A checkout
28
- * deep enough (Cezar's own nested task worktrees land past 100 chars)
29
- * pushed every such bind past the cap and broke `npm install` and
30
- * typechecking inside the run. A directory that would land too deep
31
- * resolves instead to a short digest-named directory under the OS temp
32
- * root — still per-run, still probed, still reaped. A repo whose own path
33
- * already fits keeps today's directory, byte for byte. When the ambient
34
- * `TMPDIR` itself is too deep for that root's candidate (#440 — routine
35
- * inside a cezar task session, whose `TMPDIR` is the checkout's own
36
- * scratch tree per #785), the next root is the platform's own temp root
37
- * (`/tmp`), which `TMPDIR` cannot deepen; only when no root fits does the
38
- * spawn refuse.
39
- *
40
- * `CEZ_AGENT_TMPDIR=0` opts out of ALL THREE — cezar keeps its hands off the
41
- * temp directory entirely and the pre-#785 behaviour is back, byte for byte.
42
- * That is deliberate: an escape hatch that still imposed the preflight would be
43
- * a hatch you cannot actually escape through, and this repo's
44
- * graceful-degradation rule says a new check must never become the only way to
45
- * run.
2
+ * Task-owned temp directories with real-byte write probes and a Unix socket path budget. Prefer
3
+ * short repo-local paths; fall back to marked digest directories. CEZ_AGENT_TMPDIR=0 bypasses
4
+ * the mechanism.
46
5
  */
47
- import { createHash } from 'node:crypto';
6
+ import { createHash, randomUUID } from 'node:crypto';
48
7
  import { checkpointFallbackRemoval, fallbackIdentity, readFallbackRemovals } from './agent-tmpdir-removal.js';
49
8
  import { workerEvidenceRunIds } from './worker-execution.js';
50
- import { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, realpathSync, rmSync, writeFileSync } from 'node:fs';
9
+ import { cpSync, existsSync, linkSync, lstatSync, mkdirSync, readdirSync, readFileSync, realpathSync, renameSync, rmSync, unlinkSync, writeFileSync } from 'node:fs';
51
10
  import { tmpdir } from 'node:os';
52
11
  import { basename, dirname, isAbsolute, join } from 'node:path';
53
12
  /** Run ids are uuids; anything else must never reach a recursive `rmSync`.
@@ -59,28 +18,142 @@ import { basename, dirname, isAbsolute, join } from 'node:path';
59
18
  function safeRunId(id) {
60
19
  return /^[A-Za-z0-9._-]+$/.test(id) && id !== '.' && id !== '..';
61
20
  }
62
- /** Where a run's agent-scoped temp directory lives. */
21
+ /**
22
+ * The run's CONTROL directory, `<dataDir>/tmp/<runId>`: it holds the recorded
23
+ * fallback location (`.cez-fallback`) and the partial-removal receipts, and its
24
+ * entries are what the startup sweep reads run ids from. Before
25
+ * hearsay-tools/cezarion#1022 it was also the TMPDIR handed to the agent; a
26
+ * directory minted then is still a location every holder scan, reap and sweep
27
+ * covers, and `agentTmpEnv` moves its contents to `agentShortTmpDir` on the
28
+ * run's next spawn.
29
+ */
63
30
  export function agentTmpDir(dataDir, runId) {
64
31
  return join(dataDir, 'tmp', runId);
65
32
  }
66
- /** The root every per-run directory hangs off — the ONLY tree this module
67
- * removes anything from (`runs/`, `runs.json` and `worktrees/` are siblings). */
33
+ /** The root every control directory hangs off (`runs/`, `runs.db` and
34
+ * `worktrees/` are siblings this module never touches). */
68
35
  function agentTmpRoot(dataDir) {
69
36
  return join(dataDir, 'tmp');
70
37
  }
38
+ const SHORT_TMP_ROOT = 't';
39
+ const SHORT_TMP_NAME_LENGTH = 8;
40
+ const RUN_FILE = '.cez-run';
41
+ /**
42
+ * Repo-local scratch: <dataDir>/t/<id8>. The .cez-run marker names the full run; a foreign
43
+ * marker forces the OS-root fallback. Reap and sweep must respect that marker.
44
+ */
45
+ export function agentShortTmpDir(dataDir, runId) {
46
+ return join(dataDir, SHORT_TMP_ROOT, runId.slice(0, SHORT_TMP_NAME_LENGTH));
47
+ }
48
+ /**
49
+ * Marker run id: null when absent, undefined when unreadable or malformed. Unknown ownership is
50
+ * retained. ENOTDIR is absent so spawn fails with AgentTempDirError when creation fails.
51
+ */
52
+ function readRunMarker(dir) {
53
+ try {
54
+ const owner = readFileSync(join(dir, RUN_FILE), 'utf8');
55
+ return safeRunId(owner) && owner.slice(0, SHORT_TMP_NAME_LENGTH) === basename(dir) ? owner : undefined;
56
+ }
57
+ catch (err) {
58
+ const code = err.code;
59
+ return code === 'ENOENT' || code === 'ENOTDIR' ? null : undefined;
60
+ }
61
+ }
62
+ function shortTmpDirClaim(dir, runId) {
63
+ const owner = readRunMarker(dir);
64
+ if (owner === null)
65
+ return 'free';
66
+ if (owner === undefined)
67
+ return 'unknown';
68
+ return owner === runId ? 'ours' : 'other';
69
+ }
70
+ /** Mint the `.cez-run` marker without ever following an existing name, and
71
+ * refuse when the name turns out to be another run's — the read in
72
+ * `resolveAgentTmpDir` already steered away from one, so this only fires on a
73
+ * race or a replaced marker. The id is written to a private name first and
74
+ * hard-linked into place: `link` publishes it whole or not at all and, like
75
+ * `wx`, fails on an existing name, so a crash mid-write can never leave a
76
+ * partial marker for the sweep to misread (hearsay-tools/cezarion#1037). */
77
+ function writeRunMarker(dir, runId) {
78
+ const marker = join(dir, RUN_FILE);
79
+ const pending = `${marker}.${process.pid}.${randomUUID()}`;
80
+ writeFileSync(pending, runId, { encoding: 'utf8', flag: 'wx' });
81
+ try {
82
+ linkSync(pending, marker);
83
+ }
84
+ catch (err) {
85
+ if (err.code !== 'EEXIST')
86
+ throw err;
87
+ if (readRunMarker(dir) !== runId) {
88
+ throw new AgentTempDirError(dir, new Error('directory belongs to another run'));
89
+ }
90
+ }
91
+ finally {
92
+ unlinkSync(pending);
93
+ }
94
+ }
95
+ /**
96
+ * Carry a pre-hearsay-tools/cezarion#1022 run's scratch over to its new
97
+ * directory, so a Continue after the upgrade keeps its files (#515). Only a
98
+ * control directory that was the old TMPDIR qualifies — one holding a fallback
99
+ * pointer or removal receipt is control state and stays where the reap looks
100
+ * for it. Same filesystem (both under dataDir), so the rename is atomic; any
101
+ * failure just leaves a fresh directory, and the old one is still reaped.
102
+ */
103
+ function adoptLegacyTmpDir(dataDir, runId, short) {
104
+ const legacy = agentTmpDir(dataDir, runId);
105
+ try {
106
+ if (existsSync(short) || !lstatSync(legacy).isDirectory())
107
+ return;
108
+ if (readdirSync(legacy).some((name) => name.startsWith('.cez-fallback')))
109
+ return;
110
+ mkdirSync(dirname(short), { recursive: true });
111
+ renameSync(legacy, short);
112
+ }
113
+ catch {
114
+ // best-effort: nothing to adopt, or it could not be moved.
115
+ }
116
+ }
117
+ /**
118
+ * The bytes Chromium appends to TMPDIR for its singleton socket —
119
+ * `/org.chromium.Chromium.XXXXXX/SingletonSocket`, 45 bytes (Google Chrome's
120
+ * `/com.google.Chrome.XXXXXX/...` is 41). The longest name any known tool lays
121
+ * down under TMPDIR: tsx's `/tsx-<uid>/<pid>.pipe` is ~22.
122
+ *
123
+ * Mirrors `CHROME_SINGLETON_OVERHEAD` in `.ai/scripts/resolve-browser-launch.mjs`,
124
+ * which the e2e seam applies to its own browser launches. The published
125
+ * package cannot import a repo script, so the value is written twice and
126
+ * `packages/cezar/test/unit/resolve-browser-launch.test.ts` asserts they agree.
127
+ */
128
+ export const CHROME_SINGLETON_OVERHEAD = '/org.chromium.Chromium.XXXXXX/SingletonSocket'.length;
129
+ /** `sockaddr_un.sun_path` on macOS, the tighter platform: 104 bytes, NUL
130
+ * included (Linux has 108). Mirrors `DARWIN_UNIX_SOCKET_MAX` in
131
+ * `.ai/scripts/resolve-browser-launch.mjs`, under the same agreement test. */
132
+ export const DARWIN_UNIX_SOCKET_MAX = 103;
71
133
  /**
72
134
  * The longest a per-run temp directory may be so that tools binding named
73
135
  * unix sockets under it still work (#387), measured in UTF-8 bytes — the
74
- * kernel bounds the encoded path, not the JavaScript character count.
75
- * `sockaddr_un.sun_path` holds 108 bytes on Linux and 104 on macOS, NUL
76
- * included; the longest name a known tool lays down under TMPDIR is tsx's IPC
77
- * socket, `<tmpdir>/tsx-<uid>/<pid>.pipe`, ~22 bytes (Chrome's
78
- * `SingletonSocket` is 16). A 78-byte ceiling leaves ≥25 bytes of headroom on
79
- * the tighter platform — past anything these tools generate — while keeping
80
- * ordinary checkouts on their repo-local scratch: only a genuinely deep path,
81
- * like the 100-character directories #387 reports, moves to the fallback.
136
+ * kernel bounds the encoded path, not the JavaScript character count. It is
137
+ * the tighter platform's `sun_path` minus Chromium's singleton-socket suffix:
138
+ * 103 − 45 = 58. One value for every platform, so a checkout resolves the
139
+ * same way wherever it runs.
140
+ *
141
+ * It was 78 until hearsay-tools/cezarion#1022, sized for a `SingletonSocket`
142
+ * directly under TMPDIR. Chrome nests it one directory deeper, so a 77-byte
143
+ * task TMPDIR (an ordinary checkout's `.ai/cezar/tmp/<uuid>`) failed every
144
+ * browser launch with `Socket path too long`.
82
145
  */
83
- export const MAX_SOCKET_SAFE_DIR_LENGTH = 78;
146
+ export const MAX_SOCKET_SAFE_DIR_LENGTH = DARWIN_UNIX_SOCKET_MAX - CHROME_SINGLETON_OVERHEAD;
147
+ /** The pre-hearsay-tools/cezarion#1022 ceiling. Only reading a recorded fallback
148
+ * pointer still accepts it: a run that recorded one under the old ceiling must
149
+ * keep its scratch on Continue and must still be reaped, and the digest
150
+ * equality check — not the length — is what validates the pointer. Such a
151
+ * pointer is never handed to an agent again: `migrateLegacyFallback` moves its
152
+ * scratch to a directory inside the new budget first. */
153
+ const LEGACY_MAX_SOCKET_SAFE_DIR_LENGTH = 78;
154
+ function fitsSocketBudget(path) {
155
+ return Buffer.byteLength(path, 'utf8') <= MAX_SOCKET_SAFE_DIR_LENGTH;
156
+ }
84
157
  /** The OS temp root, symlink-resolved: `bind(2)` bounds the path the kernel
85
158
  * walks, so the check must measure what the path resolves to, not what it
86
159
  * says (macOS hands out `/var/folders/...` through a `/private/var` symlink). */
@@ -126,6 +199,11 @@ const FALLBACK_NAME_LENGTH = 12;
126
199
  * without this marker a sweep could not tell its own stale directories from
127
200
  * another project's live ones in the shared root — and would delete them. */
128
201
  const OWNER_FILE = '.cez-owner';
202
+ /** The dataDir itself, beside the marker (hearsay-tools/cezarion#1911). The digest cannot
203
+ * name a dataDir that was deleted, so without this path no sweep could ever match that
204
+ * dataDir's fallback directories again. It is a claim, not proof: the sweep trusts it only
205
+ * when it digests to the marker. */
206
+ const OWNER_DIR_FILE = '.cez-owner-dir';
129
207
  function dataDirOwner(dataDir) {
130
208
  return createHash('sha256').update(`cez-agent-owner:${dataDir}`).digest('hex').slice(0, 16);
131
209
  }
@@ -156,6 +234,36 @@ function writeOwnerMarker(dir, dataDir) {
156
234
  throw new AgentTempDirError(dir, new Error('ownership marker was replaced — remove the directory to re-mint it'));
157
235
  }
158
236
  }
237
+ // A directory minted before this file existed gets it on its next spawn. An existing one is
238
+ // left as it is: the sweep checks it against the marker before it acts on it.
239
+ try {
240
+ writeFileSync(join(dir, OWNER_DIR_FILE), dataDir, { encoding: 'utf8', flag: 'wx' });
241
+ }
242
+ catch (err) {
243
+ if (err.code !== 'EEXIST')
244
+ throw err;
245
+ }
246
+ }
247
+ /** True only when the fallback's recorded dataDir digests to its marker `owner` and that
248
+ * dataDir no longer exists. A missing or mismatched record, or any error but ENOENT, keeps
249
+ * the directory. */
250
+ function ownerDataDirGone(dir, owner) {
251
+ let dataDir;
252
+ try {
253
+ dataDir = readFileSync(join(dir, OWNER_DIR_FILE), 'utf8');
254
+ }
255
+ catch {
256
+ return false;
257
+ }
258
+ if (!isAbsolute(dataDir) || dataDirOwner(dataDir) !== owner)
259
+ return false;
260
+ try {
261
+ lstatSync(dataDir);
262
+ return false;
263
+ }
264
+ catch (err) {
265
+ return err.code === 'ENOENT';
266
+ }
159
267
  }
160
268
  /**
161
269
  * Where the fallback lives for this dataDir+run pair under one root. The name
@@ -176,8 +284,14 @@ function fallbackTmpDir(root, dataDir, runId) {
176
284
  * host temp environment can change between sessions, so recomputing it loses
177
285
  * the task's files. Only a digest-named absolute path is accepted on read. */
178
286
  const LOCATION_FILE = '.cez-fallback';
179
- function recordedFallback(dataDir, runId) {
180
- const marker = join(agentTmpDir(dataDir, runId), LOCATION_FILE);
287
+ /** The location a pointer migration is moving scratch AWAY from
288
+ * (hearsay-tools/cezarion#1037). It exists only between rewriting
289
+ * `.cez-fallback` and finishing the move, so a crash in that window still
290
+ * leaves the old directory in every holder scan, reap and sweep — the old root
291
+ * may be one no later env lists. */
292
+ const PREVIOUS_LOCATION_FILE = '.cez-fallback-previous';
293
+ function recordedFallback(dataDir, runId, file = LOCATION_FILE) {
294
+ const marker = join(agentTmpDir(dataDir, runId), file);
181
295
  let dir;
182
296
  try {
183
297
  dir = readFileSync(marker, 'utf8');
@@ -188,11 +302,83 @@ function recordedFallback(dataDir, runId) {
188
302
  throw new AgentTempDirError(marker, err);
189
303
  }
190
304
  if (!isAbsolute(dir) || dir !== fallbackTmpDir(dirname(dir), dataDir, runId)
191
- || Buffer.byteLength(dir, 'utf8') > MAX_SOCKET_SAFE_DIR_LENGTH) {
305
+ || Buffer.byteLength(dir, 'utf8') > LEGACY_MAX_SOCKET_SAFE_DIR_LENGTH) {
192
306
  throw new AgentTempDirError(marker, new Error('invalid recorded fallback directory'));
193
307
  }
194
308
  return dir;
195
309
  }
310
+ /** Replace a location record whole: write a private name, then `rename` over
311
+ * the record, so a crash leaves the old pointer or the new one, never a torn
312
+ * one. The private name never follows an existing file (`wx`). */
313
+ function rewriteLocation(dataDir, runId, file, dir) {
314
+ const target = join(agentTmpDir(dataDir, runId), file);
315
+ const pending = `${target}.${randomUUID()}.tmp`;
316
+ writeFileSync(pending, dir, { encoding: 'utf8', flag: 'wx' });
317
+ try {
318
+ renameSync(pending, target);
319
+ }
320
+ finally {
321
+ rmSync(pending, { force: true });
322
+ }
323
+ }
324
+ /**
325
+ * Move the scratch of a fallback recorded under the pre-hearsay-tools/cezarion#1022
326
+ * ceiling to `dir`, the socket-safe directory resolution now picks
327
+ * (hearsay-tools/cezarion#1037). Handing the old path back would keep a 59–78
328
+ * byte TMPDIR that Chromium's nested singleton socket cannot bind under.
329
+ *
330
+ * Order is what makes a crash safe, and every re-run converges:
331
+ * 1. record the old location in `.cez-fallback-previous`, so it stays in
332
+ * scans and reaps whatever the env is later;
333
+ * 2. point `.cez-fallback` at `dir`;
334
+ * 3. move the files — `rename` when `dir` does not exist yet, otherwise (or on
335
+ * `EXDEV`, the usual case across temp roots) copy into `dir` and remove the
336
+ * old directory under a removal receipt, so a removal cut short after the
337
+ * owner marker went still proves the directory ours on retry;
338
+ * 4. drop `.cez-fallback-previous`.
339
+ * The old directory is moved only when its `.cez-owner` marker is this
340
+ * dataDir's (or a receipt proves it was); anything else refuses the spawn.
341
+ */
342
+ function migrateLegacyFallback(dataDir, runId, dir) {
343
+ const recorded = recordedFallback(dataDir, runId);
344
+ const from = recordedFallback(dataDir, runId, PREVIOUS_LOCATION_FILE)
345
+ ?? (recorded !== undefined && recorded !== dir ? recorded : undefined);
346
+ if (from === undefined)
347
+ return;
348
+ const local = agentTmpDir(dataDir, runId);
349
+ if (from !== dir) {
350
+ rewriteLocation(dataDir, runId, PREVIOUS_LOCATION_FILE, from);
351
+ if (recorded !== dir)
352
+ rewriteLocation(dataDir, runId, LOCATION_FILE, dir);
353
+ const removals = readFallbackRemovals(local);
354
+ if (!fallbackOwnedOrAbsent(dataDir, from, removals)) {
355
+ throw new AgentTempDirError(from, new Error('ownership marker was replaced — remove the directory to re-mint it'));
356
+ }
357
+ if (existsSync(from))
358
+ moveFallbackScratch(dataDir, local, from, dir, removals);
359
+ }
360
+ rmSync(join(local, PREVIOUS_LOCATION_FILE), { force: true });
361
+ }
362
+ function moveFallbackScratch(dataDir, local, from, to, removals) {
363
+ if (!existsSync(to)) {
364
+ try {
365
+ renameSync(from, to);
366
+ return;
367
+ }
368
+ catch (err) {
369
+ if (err.code !== 'EXDEV')
370
+ throw err;
371
+ }
372
+ }
373
+ mkdirSync(to, { recursive: true, mode: 0o700 });
374
+ // The destination keeps (or gets) its own marker; the source's is never
375
+ // copied over it, so a foreign marker still refuses instead of being replaced.
376
+ writeOwnerMarker(to, dataDir);
377
+ const markers = new Set([join(from, OWNER_FILE), join(from, OWNER_DIR_FILE)]);
378
+ cpSync(from, to, { recursive: true, force: true, verbatimSymlinks: true, preserveTimestamps: true, filter: (src) => !markers.has(src) });
379
+ checkpointFallbackRemoval(local, from, removals);
380
+ rmSync(from, { recursive: true, force: true });
381
+ }
196
382
  function recordFallback(dataDir, runId, dir) {
197
383
  const local = agentTmpDir(dataDir, runId);
198
384
  mkdirSync(local, { recursive: true });
@@ -212,28 +398,43 @@ function recordFallback(dataDir, runId, dir) {
212
398
  * with the real candidates, tests with synthetic ones, so the nothing-fits
213
399
  * branch stays exercised even though a real platform root is always short. */
214
400
  export function firstSocketSafeDir(paths) {
215
- return paths.find((path) => Buffer.byteLength(path, 'utf8') <= MAX_SOCKET_SAFE_DIR_LENGTH);
401
+ return paths.find(fitsSocketBudget);
216
402
  }
217
403
  /**
218
- * The temp directory this run should use: the repo-local per-run directory
219
- * when it is short enough for unix-socket paths, and otherwise a short
404
+ * The temp directory this run should use: the repo-local `agentShortTmpDir`
405
+ * when it is short enough for unix-socket paths and no other run's marker
406
+ * claims it, and otherwise a short
220
407
  * digest-named directory under the first OS temp root whose candidate fits —
221
408
  * the env-honouring root first, the platform default when `TMPDIR` itself is
222
- * too deep (#387, #440). A recorded location wins across host-env changes.
409
+ * too deep (#387, #440). A recorded location wins across host-env changes
410
+ * while it fits the budget; one recorded under the pre-#1022 ceiling resolves
411
+ * to the fallback that fits now, where `agentTmpEnv` moves its scratch.
223
412
  * Read-only resolution — nothing is created, nothing is
224
413
  * probed; `agentTmpEnv` owns the side effects.
225
414
  */
226
415
  export function resolveAgentTmpDir(dataDir, runId) {
227
416
  const recorded = recordedFallback(dataDir, runId);
228
- if (recorded)
417
+ // A pointer recorded under the pre-#1022 ceiling is not reused: resolution
418
+ // picks a fallback that fits, and `agentTmpEnv` moves the scratch there.
419
+ if (recorded && fitsSocketBudget(recorded))
229
420
  return recorded;
230
- const local = agentTmpDir(dataDir, runId);
231
- if (Buffer.byteLength(local, 'utf8') <= MAX_SOCKET_SAFE_DIR_LENGTH)
232
- return local;
421
+ // An id that is not a plain identifier never names a repo-local directory;
422
+ // the digest-named fallback is safe for any input.
423
+ const local = safeRunId(runId) ? agentShortTmpDir(dataDir, runId) : agentTmpDir(dataDir, runId);
424
+ // A legacy pointer's scratch moves to another fallback, never into the
425
+ // repo-local directory: the control directory keeps owning its location.
426
+ if (!recorded && safeRunId(runId) && fitsSocketBudget(local)) {
427
+ const claim = shortTmpDirClaim(local, runId);
428
+ if (claim === 'free' || claim === 'ours')
429
+ return local;
430
+ }
233
431
  const candidates = osTempRoots().map((root) => fallbackTmpDir(root, dataDir, runId));
234
432
  const fallback = firstSocketSafeDir(candidates);
235
433
  if (fallback)
236
434
  return fallback;
435
+ if (recorded) {
436
+ throw new AgentTempDirError(recorded, new Error(`recorded fallback is past the ${MAX_SOCKET_SAFE_DIR_LENGTH}-byte unix socket budget and no OS temp root has a candidate that fits`));
437
+ }
237
438
  // Nothing fits — every root, the platform default included, has a candidate
238
439
  // past the cap. Minting any would hand the agent a temp directory that
239
440
  // cannot serve unix sockets: the silent failure #387 is about. Fail the
@@ -271,7 +472,7 @@ export class AgentTempDirError extends Error {
271
472
  }
272
473
  }
273
474
  /** Opt-out spelling matches the house style for default-on behaviour
274
- * (`CEZ_AUTONAME=0`, `CEZ_SKILLS_AUTO_UPDATE=0`): only an exact `0` disables. */
475
+ * (`CEZ_AUTONAME=0`): only an exact `0` disables. */
275
476
  export function agentTmpDirEnabled(env = process.env) {
276
477
  return env.CEZ_AGENT_TMPDIR !== '0';
277
478
  }
@@ -279,10 +480,8 @@ export function agentTmpDirEnabled(env = process.env) {
279
480
  * spawns racing on the same directory delete each other's file mid-probe. */
280
481
  let probeSeq = 0;
281
482
  /**
282
- * Write-probe `dir`. Creating the file is not enough to prove the directory
283
- * works — a quota-exhausted tmpfs still allocates the inode and only fails the
284
- * `write(2)` — so the probe writes real bytes and removes them again. A
285
- * directory that is merely *full but writable* passes, by design.
483
+ * Probe with a real data write, then remove the probe. File creation alone does not prove writes
484
+ * work.
286
485
  */
287
486
  function probeWritable(dir) {
288
487
  const probe = join(dir, `.cez-tmp-probe-${process.pid}-${(probeSeq += 1)}`);
@@ -324,19 +523,27 @@ function probeWritable(dir) {
324
523
  export function agentTmpEnv(dataDir, runId, env = process.env) {
325
524
  if (!agentTmpDirEnabled(env))
326
525
  return {};
327
- const local = agentTmpDir(dataDir, runId);
328
526
  const dir = resolveAgentTmpDir(dataDir, runId);
527
+ const repoLocal = safeRunId(runId) && dir === agentShortTmpDir(dataDir, runId);
329
528
  try {
330
- mkdirSync(dir, dir === local ? { recursive: true } : { recursive: true, mode: 0o700 });
331
- // In the shared OS root the directory carries its ownership marker, so a
332
- // startup sweep from another project can tell it apart from stale
333
- // scratch (the sweep skips anything whose marker is missing or foreign).
334
- if (dir !== local) {
529
+ if (repoLocal) {
530
+ adoptLegacyTmpDir(dataDir, runId, dir);
531
+ mkdirSync(dir, { recursive: true });
532
+ writeRunMarker(dir, runId);
533
+ }
534
+ else {
535
+ // In the shared OS root the directory carries its ownership marker, so a
536
+ // startup sweep from another project can tell it apart from stale
537
+ // scratch (the sweep skips anything whose marker is missing or foreign).
538
+ migrateLegacyFallback(dataDir, runId, dir);
539
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
335
540
  writeOwnerMarker(dir, dataDir);
336
541
  recordFallback(dataDir, runId, dir);
337
542
  }
338
543
  }
339
544
  catch (err) {
545
+ if (err instanceof AgentTempDirError)
546
+ throw err;
340
547
  throw new AgentTempDirError(dir, err);
341
548
  }
342
549
  probeWritable(dir);
@@ -347,13 +554,15 @@ export function agentTmpEnv(dataDir, runId, env = process.env) {
347
554
  function fallbackLocations(dataDir, runId) {
348
555
  const paths = new Set(osTempRoots().map(root => fallbackTmpDir(root, dataDir, runId)));
349
556
  let complete = true, removals = [];
350
- try {
351
- const recorded = recordedFallback(dataDir, runId);
352
- if (recorded)
353
- paths.add(recorded);
354
- }
355
- catch {
356
- complete = false;
557
+ for (const file of [LOCATION_FILE, PREVIOUS_LOCATION_FILE]) {
558
+ try {
559
+ const recorded = recordedFallback(dataDir, runId, file);
560
+ if (recorded)
561
+ paths.add(recorded);
562
+ }
563
+ catch {
564
+ complete = false;
565
+ }
357
566
  }
358
567
  // Independent evidence: a damaged receipt must never discard a readable pointer (#738).
359
568
  try {
@@ -400,7 +609,8 @@ export function agentTmpDirOwnershipProven(dataDir, runId) {
400
609
  return false;
401
610
  try {
402
611
  const { paths, removals, complete } = fallbackLocations(dataDir, runId);
403
- return complete && paths.every(path => fallbackOwnedOrAbsent(dataDir, path, removals));
612
+ return complete && shortTmpDirClaim(agentShortTmpDir(dataDir, runId), runId) !== 'unknown'
613
+ && paths.every(path => fallbackOwnedOrAbsent(dataDir, path, removals));
404
614
  }
405
615
  catch {
406
616
  return false;
@@ -416,7 +626,11 @@ export function agentTmpDirLocationEvidence(dataDir, runId) {
416
626
  if (!safeRunId(runId))
417
627
  return { paths: [], complete: false };
418
628
  const { paths, complete } = fallbackLocations(dataDir, runId);
419
- return { paths: [agentTmpDir(dataDir, runId), ...paths], complete };
629
+ // The short directory is listed unless its marker positively names another
630
+ // run: an unreadable marker is uncertainty, and uncertainty stays in scans.
631
+ const short = agentShortTmpDir(dataDir, runId);
632
+ const shorts = shortTmpDirClaim(short, runId) === 'other' ? [] : [short];
633
+ return { paths: [agentTmpDir(dataDir, runId), ...shorts, ...paths], complete };
420
634
  }
421
635
  /** Only ENOENT proves cleanup finished. Permission/read errors retain the durable intent. */
422
636
  export function agentTmpDirMayExist(dataDir, runId) {
@@ -433,17 +647,18 @@ export function agentTmpDirMayExist(dataDir, runId) {
433
647
  });
434
648
  }
435
649
  /**
436
- * Reap one task's directory after terminal completion or history deletion.
437
- * Session close alone is not completion: a live task's Continue must retain
438
- * its files. Never throws — reaping must not break a terminal transition.
439
- *
440
- * The repo-local directory and the digest name under EVERY root are tried,
441
- * because the resolution depends on the lengths of `dataDir` and the ambient
442
- * `TMPDIR`, either of which a Continue, a re-base or a changed env can move
443
- * between mint and reap; removing a name that was never minted is a no-op, so
444
- * trying them all is pure safety.
650
+ * Reap scratch after terminal completion or history deletion, never session close alone. Try
651
+ * repo-local paths and every digest root, subject to ownership checks. Never throw from cleanup.
445
652
  */
446
653
  export function removeAgentTmpDir(dataDir, runId) {
654
+ reapAgentTmpDir(dataDir, runId, false);
655
+ }
656
+ /** `spareUnclaimedShort` keeps a markerless short directory: the startup sweep
657
+ * sets it when a kept run's `agentShortTmpDir` lands on the same name, because
658
+ * that run may have created or adopted the directory and crashed before
659
+ * publishing its marker (hearsay-tools/cezarion#1037) — it is that run's
660
+ * Continue scratch, not this orphan's. */
661
+ function reapAgentTmpDir(dataDir, runId, spareUnclaimedShort) {
447
662
  if (!safeRunId(runId))
448
663
  return;
449
664
  const local = agentTmpDir(dataDir, runId);
@@ -472,6 +687,14 @@ export function removeAgentTmpDir(dataDir, runId) {
472
687
  throw error;
473
688
  }
474
689
  }
690
+ // The short directory goes only when it is this run's (or unclaimed): a
691
+ // colliding name may be another run's live scratch.
692
+ const short = agentShortTmpDir(dataDir, runId);
693
+ const claim = shortTmpDirClaim(short, runId);
694
+ if (claim === 'unknown')
695
+ return;
696
+ if (claim === 'ours' || (claim === 'free' && !spareUnclaimedShort))
697
+ rmSync(short, { recursive: true, force: true });
475
698
  // The durable location and partial-removal receipts are last, never before a fallback.
476
699
  rmSync(local, { recursive: true, force: true });
477
700
  }
@@ -480,19 +703,8 @@ export function removeAgentTmpDir(dataDir, runId) {
480
703
  }
481
704
  }
482
705
  /**
483
- * Remove every per-run directory that is not in `keepRunIds` — the startup
484
- * sweep, so a crash (which never reaches the terminal-transition reap) cannot
485
- * accumulate them forever. Three confined sets are swept and nothing else:
486
- *
487
- * - `<dataDir>/tmp`, where entries ARE the run ids (reports the ids reaped);
488
- * - the `cez-agent-<12 hex>` directories under EVERY OS temp root — the
489
- * env-honouring root and the platform default (#440) — where the name
490
- * digests the dataDir and is not reversible to a run id (reports the
491
- * directory names reaped). The pattern is exact — prefix, lowercase hex,
492
- * fixed length, directories only — and a directory is removed only when
493
- * its `.cez-owner` marker names THIS dataDir and none of this dataDir's
494
- * kept runs claims it, so another project's scratch in a shared root is
495
- * never touched.
706
+ * Startup sweep of confined repo-local and digest directories not claimed by keepRunIds. Respect
707
+ * full-run and dataDir ownership markers; retain unreadable or uncertain ownership.
496
708
  */
497
709
  export function sweepAgentTmpDirs(dataDir, keepRunIds) {
498
710
  // Private worker evidence outlives corrupt/missing/quarantined index rows. Both local
@@ -503,6 +715,9 @@ export function sweepAgentTmpDirs(dataDir, keepRunIds) {
503
715
  const keep = new Set([...keepRunIds, ...workers]);
504
716
  const reaped = [];
505
717
  let entries;
718
+ // Short names a kept run resolves to. Computed before the legacy loop, which
719
+ // must spare them too: a markerless one is a kept run's, mid-mint.
720
+ const claimedShort = new Set([...keep].filter(safeRunId).map((id) => basename(agentShortTmpDir(dataDir, id))));
506
721
  const root = agentTmpRoot(dataDir);
507
722
  if (existsSync(root)) {
508
723
  try {
@@ -518,7 +733,7 @@ export function sweepAgentTmpDirs(dataDir, keepRunIds) {
518
733
  continue;
519
734
  try {
520
735
  const locations = agentTmpDirLocations(dataDir, name).filter(dir => existsSync(dir));
521
- removeAgentTmpDir(dataDir, name);
736
+ reapAgentTmpDir(dataDir, name, claimedShort.has(basename(agentShortTmpDir(dataDir, name))));
522
737
  reaped.push(...locations.filter(dir => !existsSync(dir)).map(dir => basename(dir)));
523
738
  }
524
739
  catch {
@@ -526,14 +741,55 @@ export function sweepAgentTmpDirs(dataDir, keepRunIds) {
526
741
  }
527
742
  }
528
743
  }
529
- // The #387 fallback locations, in every shared OS temp root. Kept narrow on
530
- // purpose: exact prefix, 12 lowercase-hex name, directories only, and
531
- // ownership — a directory is removed only when its `.cez-owner` marker
532
- // names THIS dataDir (a marker that is missing or foreign is another
533
- // project's, or unknown, and is never ours to remove) and none of this
534
- // dataDir's kept runs claims it.
744
+ // The hearsay-tools/cezarion#1022 short directories. Every entry here is this
745
+ // dataDir's own, so no ownership marker is needed — only the claim check
746
+ // that keeps a kept run's directory, and a colliding name's, alive.
747
+ const shortRoot = join(dataDir, SHORT_TMP_ROOT);
748
+ if (existsSync(shortRoot)) {
749
+ let shortEntries;
750
+ try {
751
+ shortEntries = readdirSync(shortRoot, { withFileTypes: true })
752
+ .filter((e) => e.isDirectory())
753
+ .map((e) => e.name);
754
+ }
755
+ catch {
756
+ shortEntries = [];
757
+ }
758
+ for (const name of shortEntries) {
759
+ if (!safeRunId(name))
760
+ continue;
761
+ const owner = readRunMarker(join(shortRoot, name));
762
+ if (owner === undefined)
763
+ continue; // unreadable marker: unknown ownership is never ours to remove.
764
+ // A marker that is a proper prefix of a kept run's id is that run's, cut short.
765
+ if (owner === null ? claimedShort.has(name) : [...keep].some((id) => id.startsWith(owner)))
766
+ continue;
767
+ try {
768
+ rmSync(join(shortRoot, name), { recursive: true, force: true });
769
+ reaped.push(owner ?? name);
770
+ }
771
+ catch {
772
+ // best-effort: a locked directory is retried on the next boot.
773
+ }
774
+ }
775
+ }
776
+ reaped.push(...sweepFallbackRoots(dataDir, keep));
777
+ return reaped;
778
+ }
779
+ /**
780
+ * The #387 fallback locations, in every shared OS temp root. Kept narrow on
781
+ * purpose: exact prefix, 12 lowercase-hex name, directories only, and
782
+ * ownership — a directory is removed only when its `.cez-owner` marker
783
+ * names THIS dataDir and none of this dataDir's kept runs claims it, or
784
+ * when its marker names a dataDir that no longer exists
785
+ * (hearsay-tools/cezarion#1911): nothing else will ever remove that one. A
786
+ * marker that is missing, unreadable or names a live dataDir is another
787
+ * project's, or unknown, and is never ours to remove.
788
+ */
789
+ function sweepFallbackRoots(dataDir, keep) {
535
790
  const owner = dataDirOwner(dataDir);
536
791
  const claimed = new Set([...keep].filter(safeRunId).map((id) => basename(fallbackTmpDir(osTempRoot(), dataDir, id))));
792
+ const reaped = [];
537
793
  for (const osRoot of osTempRoots()) {
538
794
  let fallbackEntries;
539
795
  try {
@@ -543,20 +799,7 @@ export function sweepAgentTmpDirs(dataDir, keepRunIds) {
543
799
  continue; // an unreadable root is skipped, not fatal: others remain.
544
800
  }
545
801
  for (const entry of fallbackEntries) {
546
- if (!entry.isDirectory() || !entry.name.startsWith(FALLBACK_PREFIX))
547
- continue;
548
- if (!/^[0-9a-f]{12}$/.test(entry.name.slice(FALLBACK_PREFIX.length)))
549
- continue;
550
- let entryOwner;
551
- try {
552
- entryOwner = readFileSync(join(osRoot, entry.name, OWNER_FILE), 'utf8').trim();
553
- }
554
- catch {
555
- continue; // no readable marker: unknown ownership is never ours to remove.
556
- }
557
- if (entryOwner !== owner)
558
- continue;
559
- if (claimed.has(entry.name))
802
+ if (!fallbackSweepable(osRoot, entry, owner, claimed))
560
803
  continue;
561
804
  try {
562
805
  rmSync(join(osRoot, entry.name), { recursive: true, force: true });
@@ -569,4 +812,18 @@ export function sweepAgentTmpDirs(dataDir, keepRunIds) {
569
812
  }
570
813
  return reaped;
571
814
  }
815
+ function fallbackSweepable(osRoot, entry, owner, claimed) {
816
+ if (!entry.isDirectory() || !entry.name.startsWith(FALLBACK_PREFIX))
817
+ return false;
818
+ if (!/^[0-9a-f]{12}$/.test(entry.name.slice(FALLBACK_PREFIX.length)))
819
+ return false;
820
+ let entryOwner;
821
+ try {
822
+ entryOwner = readFileSync(join(osRoot, entry.name, OWNER_FILE), 'utf8').trim();
823
+ }
824
+ catch {
825
+ return false; // no readable marker: unknown ownership is never ours to remove.
826
+ }
827
+ return entryOwner === owner ? !claimed.has(entry.name) : ownerDataDirGone(join(osRoot, entry.name), entryOwner);
828
+ }
572
829
  //# sourceMappingURL=agent-tmpdir.js.map