@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,3 +1,4 @@
1
+ import { uiAskQuestions } from './ask.js';
1
2
  import { opencodeSkillWarning } from './opencode-session-error.js';
2
3
  import { summarizeRunnerStderr } from './runner-stderr.js';
3
4
  import { finished } from 'node:stream/promises';
@@ -8,6 +9,7 @@ import { parseEffort } from '../contract/index.js';
8
9
  import { request as httpRequest } from 'node:http';
9
10
  import { InputSubmissions } from './input-submissions.js';
10
11
  import { isSignalTerminationExit, prependSystemPrompt, trackChildExit } from './agent-runner.js';
12
+ import { opencodeToolGrantFields } from './runner-tool-grants.js';
11
13
  import { signalSession, spawnSessionLeader } from './session-process.js';
12
14
  import { buildChildEnv } from './agent-env.js';
13
15
  import { ciOpenCodeEnv } from '../ci-wait/injection.js';
@@ -15,6 +17,7 @@ import { parseAskRequest } from './ask.js';
15
17
  import { boundOutputDrainAfterExit, AUTO_END_DELAY_MS, DEFAULT_RUN_TIMEOUT_MS } from './runner-runtime.js';
16
18
  import { formatModelIdentity, parseModelIdentity } from './model-identity.js';
17
19
  import { V1TextCoalescer } from './v1-text-coalescer.js';
20
+ import { isOpencodeDefaultAsk, opencodePermissionAskSchema, opencodePermissionBridge, opencodeUserPermissionRules, } from './opencode-permissions.js';
18
21
  import { createOpencodeUiState, mapOpencodeEvent, opencodeSessionStarted, opencodeTurnStarted, } from './opencode-ui-mapper.js';
19
22
  const SERVER_START_TIMEOUT_MS = 30_000;
20
23
  /**
@@ -42,18 +45,19 @@ export const KILL_GRACE_MS = 4_000;
42
45
  * Continue and restart recovery GET /session/{id} and prompt that session; a 404
43
46
  * falls back to one fresh session with the full system prompt.
44
47
  *
45
- * Auth = the host's opencode config/logins. The agent runs autonomously
46
- * (auto-approved permissions); this adapter does not map `spec.allowedTools`.
47
- * Governed delegation adds only a supported session-level task deny rule.
48
+ * Auth = the host's opencode config/logins. OpenCode's own permission config
49
+ * governs tools: cezar answers OpenCode's built-in default asks once and routes
50
+ * asks the user configured to the cockpit (hearsay-tools/cezarion#1266); this
51
+ * adapter does not map `spec.toolGrant`. Governed delegation adds only a
52
+ * supported session-level task deny rule.
48
53
  * `spec.model` is `provider/model`.
49
54
  */
50
55
  /**
51
- * What `opencode serve` receives from each `AgentRunSpec` field (#284). The
52
- * server auto-approves permissions and this adapter maps no per-tool
53
- * allowlist, so `allowedTools`/`bashAllowlist` are declared dropped rather than
54
- * mapped (spec 2026-07-17-permission-modes). Resume GETs `/session/{id}` and
55
- * prompts it; a 404 opens one fresh session. Held against the recorded HTTP
56
- * requests by the harness parity matrix.
56
+ * What `opencode serve` receives from each `AgentRunSpec` field (#284).
57
+ * OpenCode's own permission config governs tool access and this adapter maps no
58
+ * per-tool allowlist, so `toolGrant` is declared dropped rather than mapped (spec
59
+ * 2026-07-17-permission-modes). Resume GETs `/session/{id}` and prompts it; a 404 opens one
60
+ * fresh session. Held against the recorded HTTP requests by the harness parity matrix.
57
61
  */
58
62
  export const OPENCODE_SPEC_SUPPORT = {
59
63
  cezarTools: { honored: true, via: 'merged OPENCODE_CONFIG_CONTENT local mcp entry' },
@@ -61,9 +65,8 @@ export const OPENCODE_SPEC_SUPPORT = {
61
65
  userPrompt: { honored: true, via: 'prompt_async text part' },
62
66
  images: { honored: false, reason: 'the adapter posts text parts only; image blocks are dropped' },
63
67
  cwd: { honored: true, via: 'opencode serve spawn cwd; the session is bound to it' },
64
- allowedTools: { honored: false, reason: 'permissions are auto-approved server-side and no per-tool allowlist is mapped' },
68
+ toolGrant: { honored: false, reason: 'OpenCode permission config governs tool access and bash; cezar answers its built-in default asks and routes configured asks to the cockpit, but maps no per-tool allowlist, so no command-prefix restriction either' },
65
69
  restrictNativeDelegation: { honored: true, via: 'POST /session permission rule denying task (D1); PATCH /session/{id} permission on resume when the deny is absent — the deny persists on the session once added (a later unrestricted Continue cannot remove it; fails closed)' },
66
- bashAllowlist: { honored: false, reason: 'no per-tool allowlist is mapped, so no command-prefix restriction either' },
67
70
  additionalDirectories: { honored: false, reason: 'the server works from cwd; no extra-root mapping' },
68
71
  env: { honored: true, via: 'merged over the child env through buildChildEnv' },
69
72
  model: { honored: true, via: 'prompt_async model { providerID, modelID }, split from provider/model' },
@@ -154,6 +157,11 @@ class OpencodeSession {
154
157
  refusedBeforeOpening = false;
155
158
  turnErrored = false;
156
159
  lostWakeTimer;
160
+ /** Steered input an idle left unanswered: the server may still start a follow-on run for it.
161
+ * Settles when that run starts, or when the lost-wake grace or a teardown ends the wait. */
162
+ followOn;
163
+ followOnResolve = () => { };
164
+ refusedForFollowOn = false;
157
165
  tokensUsed = 0;
158
166
  /** OpenCode reports a cumulative cost for each message, not the session. */
159
167
  costByMessage = new Map();
@@ -193,6 +201,15 @@ class OpencodeSession {
193
201
  queuedPromptGeneration = 0;
194
202
  /** Human `prompt()` waiters in the current generation that have not posted yet (#486). */
195
203
  humanPromptWaiters = 0;
204
+ /** Native ask id → its live state, entered on receipt (hearsay-tools/cezarion#1266). Any
205
+ * entry holds agent input and auto-end, like a pending question, until OpenCode settles it. */
206
+ pendingPermissions = new Map();
207
+ /** Native ask ids already taken. Outlives retirement, so a duplicated frame is handled once. */
208
+ handledPermissionIds = new Set();
209
+ /** Asks are classified one at a time, in arrival order, after the one config read. */
210
+ permissionQueue = Promise.resolve();
211
+ permissionRules;
212
+ answeredDefaultAsk = false;
196
213
  autoEndTimer;
197
214
  timedOut = false;
198
215
  openingPromptFailed = false;
@@ -237,7 +254,9 @@ class OpencodeSession {
237
254
  clearTimeout(this.autoEndTimer);
238
255
  this.sse.abort();
239
256
  this.serverOpen = false;
257
+ this.clearLostWakeTimer();
240
258
  this.agentRequest?.abort();
259
+ this.expirePermissions('session ended');
241
260
  this.terminate();
242
261
  }
243
262
  const serve = this.serve;
@@ -250,7 +269,9 @@ class OpencodeSession {
250
269
  // SSE closure can precede the process exit event. Choose one authoritative
251
270
  // error after settlement, before the synthetic turn-end, retaining the code.
252
271
  const code = serve.child.exitCode;
253
- const crashed = code !== null && code !== 0 && !(serve.signalled && isSignalTerminationExit(code));
272
+ const signal = serve.child.signalCode;
273
+ const crashed = (signal !== null && !serve.signalled)
274
+ || (code !== null && code !== 0 && !(serve.signalled && isSignalTerminationExit(code)));
254
275
  if (!this.timedOut && (crashed || this.exitFailure)) {
255
276
  const stderr = serve.stderrChunks.join('');
256
277
  const detail = summarizeRunnerStderr(stderr);
@@ -278,7 +299,7 @@ class OpencodeSession {
278
299
  if (stderr.trim())
279
300
  this.emit({ type: 'note', message: `opencode serve stderr:\n${stderr}` });
280
301
  const message = crashed
281
- ? `opencode serve exited with code ${code}${detail ? ` — ${detail}` : ''}`
302
+ ? `opencode serve exited with ${describeExit(serve)}${detail ? ` — ${detail}` : ''}`
282
303
  : this.exitFailure;
283
304
  this.emit({ type: 'error', message });
284
305
  }
@@ -312,16 +333,23 @@ class OpencodeSession {
312
333
  return this.serve.child.pid;
313
334
  }
314
335
  sendAgentMessage(content, inputIds = []) {
315
- // #505: a busy session is steered with prompt_async; only a pending native question,
316
- // a queued human prompt or an in-flight agent POST refuses.
336
+ // #505: a busy session is steered with prompt_async; only a pending native question or
337
+ // permission ask, a queued human prompt or an in-flight agent POST refuses.
317
338
  // Nothing may run ahead of the task: refuse until the opening prompt has started,
318
339
  // then hint once so the refused input steers the opening turn.
319
340
  if (this.serverOpen && this.turnSerial === 0) {
320
341
  this.refusedBeforeOpening = true;
321
342
  return false;
322
343
  }
323
- if (!this.serverOpen || !this.sessionId || this.pendingQuestion || this.questionReply || this.pendingPromptRequests > 0 || this.agentRequest)
344
+ if (!this.serverOpen || !this.sessionId || this.pendingQuestion || this.questionReply || this.pendingPermissions.size > 0 ||
345
+ this.pendingPromptRequests > 0 || this.agentRequest)
324
346
  return false;
347
+ // A prompt posted before a due follow-on run would have that run's idle close its turn, and
348
+ // its own run would then surface nothing (PR #1291 CI): it waits for that run, as for a turn.
349
+ if (this.followOn) {
350
+ this.refusedForFollowOn = true;
351
+ return false;
352
+ }
325
353
  this.agentInputReady = false;
326
354
  const request = new AbortController();
327
355
  this.agentRequest = request;
@@ -339,7 +367,8 @@ class OpencodeSession {
339
367
  }).finally(() => {
340
368
  if (this.agentRequest === request)
341
369
  this.agentRequest = undefined;
342
- if (this.serverOpen && !this.providerErrorPending && !this.turnActive && !this.pendingQuestion && !this.questionReply) {
370
+ if (this.serverOpen && !this.providerErrorPending && !this.turnActive && !this.pendingQuestion && !this.questionReply &&
371
+ this.pendingPermissions.size === 0) {
343
372
  this.agentInputReady = true;
344
373
  this.opts.onAgentInputReady?.();
345
374
  this.scheduleAutoEnd();
@@ -400,12 +429,12 @@ class OpencodeSession {
400
429
  }
401
430
  notifyAgentInputReady() {
402
431
  if (this.serverOpen && this.turnEnded && !this.turnActive && !this.pendingQuestion &&
403
- !this.questionReply && this.pendingPromptRequests === 0) {
432
+ !this.questionReply && this.pendingPermissions.size === 0 && this.pendingPromptRequests === 0) {
404
433
  this.agentInputReady = true;
405
434
  this.opts.onAgentInputReady?.();
406
435
  }
407
436
  else if (this.serverOpen && this.turnActive && !this.pendingQuestion && !this.questionReply &&
408
- this.pendingPromptRequests === 0 && !this.agentRequest) {
437
+ this.pendingPermissions.size === 0 && this.pendingPromptRequests === 0 && !this.agentRequest) {
409
438
  // A reply or prompt acknowledgement cleared the last barrier mid-turn: held agent
410
439
  // input can steer the running turn now, not after it (#505 local review).
411
440
  this.opts.onAgentInputReady?.();
@@ -418,7 +447,7 @@ class OpencodeSession {
418
447
  this.autoEndTimer = undefined;
419
448
  }
420
449
  scheduleAutoEnd() {
421
- if (!this.opts.autoEndAfterFirstTurn || !this.serverOpen || this.autoEndTimer || this.agentRequest)
450
+ if (!this.opts.autoEndAfterFirstTurn || !this.serverOpen || this.autoEndTimer || this.agentRequest || this.pendingPermissions.size)
422
451
  return;
423
452
  this.autoEndTimer = setTimeout(() => {
424
453
  this.autoEndTimer = undefined;
@@ -431,13 +460,17 @@ class OpencodeSession {
431
460
  if (!this.serverOpen)
432
461
  return;
433
462
  this.serverOpen = false;
463
+ this.clearLostWakeTimer();
434
464
  this.agentRequest?.abort();
465
+ this.expirePermissions('session ended');
435
466
  this.sse.abort();
436
467
  this.terminate();
437
468
  }
438
469
  interrupt() {
439
470
  this.serverOpen = false;
471
+ this.clearLostWakeTimer();
440
472
  this.agentRequest?.abort();
473
+ this.expirePermissions('session ended');
441
474
  if (this.baseUrl && this.sessionId) {
442
475
  void this.http('POST', `/session/${this.sessionId}/abort`, undefined).catch(() => undefined);
443
476
  }
@@ -500,7 +533,7 @@ class OpencodeSession {
500
533
  }
501
534
  const hasExited = trackChildExit(child);
502
535
  boundOutputDrainAfterExit(child);
503
- // `exit` settles process liveness, not its pipes. The shared 250ms drain
536
+ // `exit` settles process liveness, not its pipes. The shared post-exit drain
504
537
  // bound prevents an inherited descendant pipe from retaining this session.
505
538
  const outputDrained = Promise.all([child.stdout, child.stderr].map(stream => finished(stream, { cleanup: true }).catch(() => undefined)));
506
539
  const exited = new Promise((resolve) => {
@@ -661,6 +694,7 @@ class OpencodeSession {
661
694
  if (!resumed) {
662
695
  const created = await this.http('POST', '/session', {
663
696
  title: 'cezar task',
697
+ ...opencodeToolGrantFields(this.spec.toolGrant),
664
698
  // OpenCode 1.18.33 /doc: session.create permission rules. The native task
665
699
  // tool checks this permission; other agent/project permissions stay intact.
666
700
  ...(this.spec.restrictNativeDelegation ? this.nativeDelegationPermission() : {}),
@@ -685,8 +719,9 @@ class OpencodeSession {
685
719
  if (this.refusedBeforeOpening)
686
720
  queueMicrotask(() => {
687
721
  this.refusedBeforeOpening = false;
688
- if (this.serverOpen && !this.pendingQuestion && !this.questionReply && !this.agentRequest)
722
+ if (this.serverOpen && !this.pendingQuestion && !this.questionReply && this.pendingPermissions.size === 0 && !this.agentRequest) {
689
723
  this.opts.onAgentInputReady?.();
724
+ }
690
725
  });
691
726
  }
692
727
  async prompt(text, origin = 'human', signal) {
@@ -700,8 +735,8 @@ class OpencodeSession {
700
735
  const humanWaiter = origin === 'human';
701
736
  if (humanWaiter)
702
737
  this.humanPromptWaiters += 1;
703
- while (this.turnActive)
704
- await this.turnFinished;
738
+ while (this.turnActive || this.followOn)
739
+ await (this.turnActive ? this.turnFinished : this.followOn);
705
740
  if (humanWaiter && generation === this.queuedPromptGeneration) {
706
741
  this.humanPromptWaiters = Math.max(0, this.humanPromptWaiters - 1);
707
742
  }
@@ -806,6 +841,20 @@ class OpencodeSession {
806
841
  if (this.lostWakeTimer)
807
842
  clearTimeout(this.lostWakeTimer);
808
843
  this.lostWakeTimer = undefined;
844
+ this.settleFollowOn();
845
+ }
846
+ /** The follow-on wait is over. Input it refused is offered again unless a turn took over. */
847
+ settleFollowOn() {
848
+ if (!this.followOn)
849
+ return;
850
+ this.followOn = undefined;
851
+ this.followOnResolve();
852
+ if (!this.refusedForFollowOn)
853
+ return;
854
+ this.refusedForFollowOn = false;
855
+ if (this.turnActive)
856
+ return;
857
+ queueMicrotask(() => this.notifyAgentInputReady());
809
858
  }
810
859
  finishTurn() {
811
860
  if (!this.turnActive || this.turnEnded)
@@ -817,6 +866,8 @@ class OpencodeSession {
817
866
  // owns pending-question cleanup; without one, the pending ask is stale.
818
867
  if (!this.questionReply)
819
868
  this.pendingQuestion = undefined;
869
+ // OpenCode settles its own pending permission requests when the run stops.
870
+ this.expirePermissions('turn ended');
820
871
  this.turnFinishedResolve();
821
872
  // A part that never saw `time.end` (abort, server quirk) still surfaces
822
873
  // its prose before the turn boundary (run.ts reads markers there).
@@ -837,14 +888,18 @@ class OpencodeSession {
837
888
  // them apart; then report it so cezar submits it as a new prompt.
838
889
  if (this.submissions.pending > 0) {
839
890
  this.clearLostWakeTimer();
891
+ this.followOn = new Promise((resolve) => { this.followOnResolve = resolve; });
840
892
  this.lostWakeTimer = setTimeout(() => {
841
893
  this.lostWakeTimer = undefined;
842
- if (!this.serverOpen || this.turnActive)
894
+ if (!this.serverOpen || this.turnActive) {
895
+ this.settleFollowOn();
843
896
  return;
897
+ }
844
898
  const inputIds = this.submissions.takeUnconsumed();
845
899
  this.userMessageSubmission.clear();
846
900
  if (inputIds.length)
847
901
  this.emit({ type: 'input-unconsumed', inputIds });
902
+ this.settleFollowOn();
848
903
  }, OPENCODE_LOST_WAKE_GRACE_MS);
849
904
  this.lostWakeTimer.unref?.();
850
905
  }
@@ -1007,6 +1062,20 @@ class OpencodeSession {
1007
1062
  else if (type === 'message.part.updated' || type === 'message.part.created') {
1008
1063
  this.handlePart(props.part ?? props);
1009
1064
  }
1065
+ else if (type === 'permission.asked') {
1066
+ this.handlePermissionAsked(props);
1067
+ }
1068
+ else if (type === 'permission.replied') {
1069
+ // OpenCode settled the request, in any phase: our own reply, another client's, or its own.
1070
+ const nativeId = stringField(props, 'requestID');
1071
+ const pending = nativeId === undefined ? undefined : this.pendingPermissions.get(nativeId);
1072
+ // OpenCode publishes this before it answers the reply route, so a human reply in flight
1073
+ // that it echoes is that human's answer.
1074
+ if (pending) {
1075
+ const answered = pending.phase === 'answering' && pending.answer?.reply === stringField(props, 'reply');
1076
+ this.settlePermission(pending, answered ? { optionId: pending.answer.optionId } : { reason: 'resolved by OpenCode' });
1077
+ }
1078
+ }
1010
1079
  else if (type === 'session.idle') {
1011
1080
  // THE turn-end signal. The SSE bus is server-wide, so a child session's
1012
1081
  // (sub-agent's) idle must not close the main turn; an idle with no
@@ -1189,7 +1258,7 @@ class OpencodeSession {
1189
1258
  {
1190
1259
  type: 'ask.requested',
1191
1260
  requestId: pending.askRequestId,
1192
- questions: pending.questions,
1261
+ questions: uiAskQuestions(pending.questions),
1193
1262
  },
1194
1263
  ],
1195
1264
  }));
@@ -1231,6 +1300,195 @@ class OpencodeSession {
1231
1300
  this.emitQuestion(pending);
1232
1301
  }
1233
1302
  }
1303
+ // ---- permissions (hearsay-tools/cezarion#1266) --------------------------
1304
+ /** Any session on this private server may ask, child sessions included. The ask holds agent
1305
+ * input and auto-end from receipt until OpenCode settles it, the turn ends or the session does. */
1306
+ handlePermissionAsked(props) {
1307
+ if (!this.serverOpen)
1308
+ return;
1309
+ const parsed = opencodePermissionAskSchema.safeParse(props);
1310
+ const nativeId = parsed.success ? parsed.data.id : typeof props.id === 'string' && props.id ? props.id : undefined;
1311
+ if (nativeId === undefined) {
1312
+ // OpenCode blocks the asking tool until a reply names this request: fail closed.
1313
+ this.emit({ type: 'error', message: 'opencode: unsupported permission request could not be rejected: no request id' });
1314
+ this.finishTurn();
1315
+ this.end();
1316
+ return;
1317
+ }
1318
+ if (this.handledPermissionIds.has(nativeId))
1319
+ return;
1320
+ this.handledPermissionIds.add(nativeId);
1321
+ // OpenCode asks only from inside a running session loop, so a main-session ask after the idle
1322
+ // means the server started a run: reopen the turn, as a steered follow-on run does. That run's
1323
+ // own idle closes it. A child session's ask leaves the main turn alone.
1324
+ if (!this.turnActive && this.sessionId !== undefined && stringField(props, 'sessionID') === this.sessionId) {
1325
+ this.openTurn();
1326
+ this.emitUi(opencodeTurnStarted);
1327
+ }
1328
+ const pending = parsed.success
1329
+ ? { nativeId, ask: parsed.data, phase: 'classifying' }
1330
+ : { nativeId, phase: 'rejecting' };
1331
+ this.pendingPermissions.set(nativeId, pending);
1332
+ this.agentInputReady = false;
1333
+ this.cancelAutoEnd();
1334
+ if (!parsed.success) {
1335
+ this.emit({ type: 'note', message: 'opencode: rejected an OpenCode permission request cezar could not read' });
1336
+ void this.rejectPermission(pending, 'cezar could not read this permission request');
1337
+ return;
1338
+ }
1339
+ this.permissionQueue = this.permissionQueue.then(() => this.answerPermission(pending)).catch(() => undefined);
1340
+ }
1341
+ /** Still the ask OpenCode is waiting on: not settled, expired or torn down since an await. */
1342
+ permissionLive(pending) {
1343
+ return this.serverOpen && this.pendingPermissions.get(pending.nativeId) === pending;
1344
+ }
1345
+ async answerPermission(pending) {
1346
+ const rules = await this.userPermissionRules();
1347
+ if (!this.permissionLive(pending))
1348
+ return;
1349
+ if (isOpencodeDefaultAsk(pending.ask, rules)) {
1350
+ pending.phase = 'auto-replying';
1351
+ try {
1352
+ // Never `always`: that can persist an approval beyond this run.
1353
+ await this.replyPermission(pending.nativeId, { reply: 'once' });
1354
+ }
1355
+ catch {
1356
+ // OpenCode is still waiting: a failed automatic reply asks the human instead.
1357
+ if (this.permissionLive(pending))
1358
+ this.bridgePermission(pending);
1359
+ return;
1360
+ }
1361
+ if (this.serverOpen && !this.answeredDefaultAsk) {
1362
+ this.answeredDefaultAsk = true;
1363
+ this.emit({
1364
+ type: 'note',
1365
+ message: "opencode: answered OpenCode's built-in permission asks (outside-worktree reads, .env reads, repeated-call guard) with allow-once; your own OpenCode permission rules still ask",
1366
+ });
1367
+ }
1368
+ this.settlePermission(pending);
1369
+ return;
1370
+ }
1371
+ this.bridgePermission(pending);
1372
+ }
1373
+ /** One lazy `GET /config` per session. An unreadable config is unknown provenance: every ask goes to the cockpit. */
1374
+ userPermissionRules() {
1375
+ this.permissionRules ??= this.readConfig().then(opencodeUserPermissionRules, () => undefined).then((rules) => {
1376
+ if (!rules)
1377
+ this.emit({ type: 'note', message: 'opencode: could not read the OpenCode config, so every permission prompt goes to the cockpit' });
1378
+ return rules;
1379
+ });
1380
+ return this.permissionRules;
1381
+ }
1382
+ /** Unlike `http`, an empty or unparsable body is a failure, never an empty config. */
1383
+ async readConfig() {
1384
+ if (!this.baseUrl)
1385
+ throw new Error('opencode server not ready');
1386
+ const res = await fetch(`${this.baseUrl}/config`, { method: 'GET' });
1387
+ if (!res.ok)
1388
+ throw new Error(`GET /config → ${res.status}`);
1389
+ return JSON.parse(await res.text());
1390
+ }
1391
+ bridgePermission(pending) {
1392
+ if (!this.opts.onUiEvent) {
1393
+ const message = 'no permission UI is attached to this cezar session';
1394
+ this.emit({ type: 'note', message: `opencode: rejected the OpenCode ${pending.ask.permission} permission prompt: ${message}` });
1395
+ void this.rejectPermission(pending, message);
1396
+ return;
1397
+ }
1398
+ if (!this.showPermissionCard(pending))
1399
+ void this.rejectPermission(pending, 'permission UI unavailable');
1400
+ }
1401
+ /** Emits a fresh cockpit card, with new ids, for the ask. False when the UI threw: that card is resolved again. */
1402
+ showPermissionCard(pending) {
1403
+ const bridge = opencodePermissionBridge(pending.ask);
1404
+ pending.bridge = bridge;
1405
+ pending.phase = 'card';
1406
+ pending.answer = undefined;
1407
+ try {
1408
+ this.opts.onUiEvent(bridge.event);
1409
+ return true;
1410
+ }
1411
+ catch {
1412
+ // A throwing consumer cannot leave OpenCode waiting on a card nobody sees.
1413
+ pending.bridge = undefined;
1414
+ this.emitPermissionResolved(bridge.event.requestId, { reason: 'permission UI unavailable' });
1415
+ return false;
1416
+ }
1417
+ }
1418
+ /** A reject OpenCode never receives leaves the asking tool blocked: fail closed. */
1419
+ async rejectPermission(pending, message) {
1420
+ pending.phase = 'rejecting';
1421
+ try {
1422
+ await this.replyPermission(pending.nativeId, { reply: 'reject', message });
1423
+ }
1424
+ catch (err) {
1425
+ if (!this.permissionLive(pending))
1426
+ return;
1427
+ this.emit({ type: 'error', message: `opencode: permission rejection failed: ${err instanceof Error ? err.message : String(err)}` });
1428
+ this.finishTurn();
1429
+ this.end();
1430
+ return;
1431
+ }
1432
+ this.settlePermission(pending);
1433
+ }
1434
+ /** The card and the input barrier stay until OpenCode accepts the reply; a failed reply shows a fresh card. */
1435
+ respondPermission(requestId, optionId) {
1436
+ if (!this.serverOpen)
1437
+ return false;
1438
+ const pending = [...this.pendingPermissions.values()].find((entry) => entry.bridge?.event.requestId === requestId);
1439
+ const reply = pending?.bridge?.replies.get(optionId);
1440
+ if (!pending || pending.phase !== 'card' || !reply)
1441
+ return false;
1442
+ const bridge = pending.bridge;
1443
+ pending.phase = 'answering';
1444
+ pending.answer = { optionId, reply };
1445
+ void this.replyPermission(pending.nativeId, { reply }).then(() => {
1446
+ if (this.permissionLive(pending) && pending.bridge === bridge)
1447
+ this.settlePermission(pending, { optionId });
1448
+ }, (err) => {
1449
+ if (!this.permissionLive(pending) || pending.bridge !== bridge)
1450
+ return;
1451
+ this.emit({ type: 'note', message: `opencode: permission reply failed: ${err instanceof Error ? err.message : String(err)}` });
1452
+ // The fresh card first, so the run's pending set never empties and it stays parked.
1453
+ const shown = this.showPermissionCard(pending);
1454
+ this.emitPermissionResolved(bridge.event.requestId, { reason: 'permission reply failed' });
1455
+ if (!shown)
1456
+ void this.rejectPermission(pending, 'permission UI unavailable');
1457
+ });
1458
+ return true;
1459
+ }
1460
+ async replyPermission(nativeId, body) {
1461
+ await this.http('POST', `/permission/${encodeURIComponent(nativeId)}/reply`, body);
1462
+ }
1463
+ /** OpenCode no longer waits on the ask: retire it, resolve its card, and release the barrier. */
1464
+ settlePermission(pending, resolution = {}) {
1465
+ if (this.pendingPermissions.get(pending.nativeId) !== pending)
1466
+ return;
1467
+ this.pendingPermissions.delete(pending.nativeId);
1468
+ if (pending.bridge)
1469
+ this.emitPermissionResolved(pending.bridge.event.requestId, resolution);
1470
+ if (this.pendingPermissions.size)
1471
+ return;
1472
+ this.notifyAgentInputReady();
1473
+ // A card that arrived after the turn ended cancelled its auto-end: re-arm it.
1474
+ if (this.turnEnded && !this.turnActive && !this.questionReply)
1475
+ this.scheduleAutoEnd();
1476
+ }
1477
+ /** Retires every ask without HTTP: OpenCode settles its own request on idle or abort. The
1478
+ * caller owns what follows (turn end or teardown), so the barrier release is not run here. */
1479
+ expirePermissions(reason) {
1480
+ for (const pending of [...this.pendingPermissions.values()]) {
1481
+ this.pendingPermissions.delete(pending.nativeId);
1482
+ if (pending.bridge)
1483
+ this.emitPermissionResolved(pending.bridge.event.requestId, { reason });
1484
+ }
1485
+ }
1486
+ emitPermissionResolved(requestId, resolution) {
1487
+ try {
1488
+ this.opts.onUiEvent?.({ type: 'permission.resolved', requestId, ...resolution });
1489
+ }
1490
+ catch { /* A failed consumer must not strand other pending requests. */ }
1491
+ }
1234
1492
  // ---- http ---------------------------------------------------------------
1235
1493
  async http(method, path, body, signal) {
1236
1494
  if (!this.baseUrl)
@@ -1239,9 +1497,9 @@ class OpencodeSession {
1239
1497
  // prompts go through `prompt_async` — nothing long-polls anymore.
1240
1498
  const res = await fetch(`${this.baseUrl}${path}`, {
1241
1499
  method,
1242
- signal,
1500
+ ...(signal !== undefined ? { signal } : {}),
1243
1501
  headers: body !== undefined ? { 'content-type': 'application/json' } : {},
1244
- body: body !== undefined ? JSON.stringify(body) : undefined,
1502
+ ...(body !== undefined ? { body: JSON.stringify(body) } : {}),
1245
1503
  });
1246
1504
  if (!res.ok) {
1247
1505
  const detail = await res.text().catch(() => '');