@open-mercato/cezar 0.13.0 → 0.14.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 (294) hide show
  1. package/README.md +3 -2
  2. package/dist/agent-config/catalog.d.ts +4 -0
  3. package/dist/agent-config/catalog.js +85 -3
  4. package/dist/agent-config/catalog.js.map +1 -1
  5. package/dist/agent-config/model-settings/copilot.d.ts +15 -0
  6. package/dist/agent-config/model-settings/copilot.js +25 -0
  7. package/dist/agent-config/model-settings/copilot.js.map +1 -0
  8. package/dist/agent-config/model-settings/junie.d.ts +12 -0
  9. package/dist/agent-config/model-settings/junie.js +18 -0
  10. package/dist/agent-config/model-settings/junie.js.map +1 -0
  11. package/dist/agent-config/models.js +4 -0
  12. package/dist/agent-config/models.js.map +1 -1
  13. package/dist/automations/prompts.d.ts +2 -2
  14. package/dist/automations/prompts.js +1 -1
  15. package/dist/automations/types.d.ts +12 -0
  16. package/dist/config.d.ts +4 -0
  17. package/dist/config.js +2 -0
  18. package/dist/config.js.map +1 -1
  19. package/dist/contract/agent-config.d.ts +4 -0
  20. package/dist/contract/agent-profiles.d.ts +30 -0
  21. package/dist/contract/automations.d.ts +32 -0
  22. package/dist/contract/dashboard-insights.d.ts +186 -0
  23. package/dist/contract/dashboard.d.ts +88 -0
  24. package/dist/contract/dispatch.d.ts +6 -0
  25. package/dist/contract/health.d.ts +8 -0
  26. package/dist/contract/index.d.ts +2 -0
  27. package/dist/contract/index.js +249 -72
  28. package/dist/contract/runs.d.ts +144 -0
  29. package/dist/contract/self-update.d.ts +111 -2
  30. package/dist/contract/skills.d.ts +19 -0
  31. package/dist/contract/star-count.d.ts +18 -0
  32. package/dist/contract/workflows.d.ts +12 -0
  33. package/dist/contract/workspace.d.ts +42 -2
  34. package/dist/core/acp-client.d.ts +99 -0
  35. package/dist/core/acp-client.js +198 -0
  36. package/dist/core/acp-client.js.map +1 -0
  37. package/dist/core/acp-ui-mapper.d.ts +95 -0
  38. package/dist/core/acp-ui-mapper.js +444 -0
  39. package/dist/core/acp-ui-mapper.js.map +1 -0
  40. package/dist/core/agent-env.js +10 -0
  41. package/dist/core/agent-env.js.map +1 -1
  42. package/dist/core/agent-profiles.d.ts +10 -0
  43. package/dist/core/agent-profiles.js +16 -0
  44. package/dist/core/agent-profiles.js.map +1 -1
  45. package/dist/core/agent-runner.d.ts +5 -3
  46. package/dist/core/agent-runner.js +5 -3
  47. package/dist/core/agent-runner.js.map +1 -1
  48. package/dist/core/backend-detect.d.ts +3 -3
  49. package/dist/core/backend-detect.js +61 -2
  50. package/dist/core/backend-detect.js.map +1 -1
  51. package/dist/core/claude-cli-runner.d.ts +5 -2
  52. package/dist/core/claude-cli-runner.js +11 -6
  53. package/dist/core/claude-cli-runner.js.map +1 -1
  54. package/dist/core/claude-ui-mapper.d.ts +14 -0
  55. package/dist/core/claude-ui-mapper.js +102 -11
  56. package/dist/core/claude-ui-mapper.js.map +1 -1
  57. package/dist/core/codex-app-server-transport.js +8 -4
  58. package/dist/core/codex-app-server-transport.js.map +1 -1
  59. package/dist/core/copilot-acp-runner.d.ts +60 -0
  60. package/dist/core/copilot-acp-runner.js +528 -0
  61. package/dist/core/copilot-acp-runner.js.map +1 -0
  62. package/dist/core/copilot-ui-mapper.d.ts +47 -0
  63. package/dist/core/copilot-ui-mapper.js +111 -0
  64. package/dist/core/copilot-ui-mapper.js.map +1 -0
  65. package/dist/core/cursor-agent-runner.js +4 -4
  66. package/dist/core/cursor-agent-runner.js.map +1 -1
  67. package/dist/core/disclaim-spawn.d.ts +9 -0
  68. package/dist/core/disclaim-spawn.js +53 -0
  69. package/dist/core/disclaim-spawn.js.map +1 -0
  70. package/dist/core/junie-acp-transport.d.ts +58 -0
  71. package/dist/core/junie-acp-transport.js +179 -0
  72. package/dist/core/junie-acp-transport.js.map +1 -0
  73. package/dist/core/junie-auth-probe.d.ts +12 -0
  74. package/dist/core/junie-auth-probe.js +30 -0
  75. package/dist/core/junie-auth-probe.js.map +1 -0
  76. package/dist/core/junie-model-catalog.d.ts +10 -0
  77. package/dist/core/junie-model-catalog.js +104 -0
  78. package/dist/core/junie-model-catalog.js.map +1 -0
  79. package/dist/core/junie-runner.d.ts +45 -0
  80. package/dist/core/junie-runner.js +533 -0
  81. package/dist/core/junie-runner.js.map +1 -0
  82. package/dist/core/junie-ui-mapper.d.ts +132 -0
  83. package/dist/core/junie-ui-mapper.js +459 -0
  84. package/dist/core/junie-ui-mapper.js.map +1 -0
  85. package/dist/core/model-identity.js +17 -0
  86. package/dist/core/model-identity.js.map +1 -1
  87. package/dist/core/model-presets.js +10 -0
  88. package/dist/core/model-presets.js.map +1 -1
  89. package/dist/core/opencode-server-runner.js +4 -4
  90. package/dist/core/opencode-server-runner.js.map +1 -1
  91. package/dist/core/pi-runner.js +4 -4
  92. package/dist/core/pi-runner.js.map +1 -1
  93. package/dist/core/provider-auth.d.ts +16 -2
  94. package/dist/core/provider-auth.js +113 -7
  95. package/dist/core/provider-auth.js.map +1 -1
  96. package/dist/core/runner-factory.js +6 -0
  97. package/dist/core/runner-factory.js.map +1 -1
  98. package/dist/core/runner-model-catalog.js +12 -8
  99. package/dist/core/runner-model-catalog.js.map +1 -1
  100. package/dist/core/tool-display.js +6 -1
  101. package/dist/core/tool-display.js.map +1 -1
  102. package/dist/core/ui-events.d.ts +6 -2
  103. package/dist/git-diff-base.js +23 -2
  104. package/dist/git-diff-base.js.map +1 -1
  105. package/dist/git-worktree.d.ts +21 -2
  106. package/dist/git-worktree.js +68 -5
  107. package/dist/git-worktree.js.map +1 -1
  108. package/dist/index.js +14 -4
  109. package/dist/index.js.map +1 -1
  110. package/dist/paths.js +2 -0
  111. package/dist/paths.js.map +1 -1
  112. package/dist/runs/event-history.js +3 -0
  113. package/dist/runs/event-history.js.map +1 -1
  114. package/dist/runs/store.d.ts +42 -3
  115. package/dist/runs/store.js +112 -6
  116. package/dist/runs/store.js.map +1 -1
  117. package/dist/self-update/checkouts.d.ts +53 -0
  118. package/dist/self-update/checkouts.js +268 -0
  119. package/dist/self-update/checkouts.js.map +1 -0
  120. package/dist/self-update/cli.d.ts +5 -3
  121. package/dist/self-update/cli.js +75 -8
  122. package/dist/self-update/cli.js.map +1 -1
  123. package/dist/self-update/layout.d.ts +33 -1
  124. package/dist/self-update/layout.js +102 -3
  125. package/dist/self-update/layout.js.map +1 -1
  126. package/dist/self-update/pulls.d.ts +40 -0
  127. package/dist/self-update/pulls.js +127 -0
  128. package/dist/self-update/pulls.js.map +1 -0
  129. package/dist/self-update/service.d.ts +26 -3
  130. package/dist/self-update/service.js +85 -9
  131. package/dist/self-update/service.js.map +1 -1
  132. package/dist/server/dashboard.d.ts +107 -0
  133. package/dist/server/dashboard.js +2 -1
  134. package/dist/server/dashboard.js.map +1 -1
  135. package/dist/server/forge/github.js +4 -1
  136. package/dist/server/forge/github.js.map +1 -1
  137. package/dist/server/fs-browse.d.ts +3 -1
  138. package/dist/server/fs-browse.js +27 -5
  139. package/dist/server/fs-browse.js.map +1 -1
  140. package/dist/server/open-in-app.js +2 -0
  141. package/dist/server/open-in-app.js.map +1 -1
  142. package/dist/server/provider-action-gate.js +5 -1
  143. package/dist/server/provider-action-gate.js.map +1 -1
  144. package/dist/server/server.d.ts +880 -511
  145. package/dist/server/server.js +40 -5
  146. package/dist/server/server.js.map +1 -1
  147. package/dist/server/star-count.d.ts +67 -0
  148. package/dist/server/star-count.js +186 -0
  149. package/dist/server/star-count.js.map +1 -0
  150. package/dist/skills-banner.d.ts +19 -0
  151. package/dist/skills-banner.js +24 -0
  152. package/dist/skills-banner.js.map +1 -1
  153. package/dist/workflows/run.d.ts +0 -2
  154. package/dist/workflows/run.js +45 -29
  155. package/dist/workflows/run.js.map +1 -1
  156. package/dist/workflows/types.d.ts +6 -0
  157. package/dist/workspace/agent-accounts.d.ts +9 -1
  158. package/dist/workspace/agent-accounts.js +2 -0
  159. package/dist/workspace/agent-accounts.js.map +1 -1
  160. package/dist/workspace/agent-profiles.d.ts +2 -2
  161. package/dist/workspace/agent-profiles.js +25 -6
  162. package/dist/workspace/agent-profiles.js.map +1 -1
  163. package/dist/workspace/config.d.ts +9 -1
  164. package/dist/workspace/config.js +10 -3
  165. package/dist/workspace/config.js.map +1 -1
  166. package/dist/workspace/dashboard-insights.d.ts +42 -0
  167. package/dist/workspace/dashboard-insights.js +220 -0
  168. package/dist/workspace/dashboard-insights.js.map +1 -0
  169. package/dist/workspace/dashboard.d.ts +71 -1
  170. package/dist/workspace/dashboard.js +14 -1
  171. package/dist/workspace/dashboard.js.map +1 -1
  172. package/dist/workspace/semaphore.d.ts +3 -0
  173. package/dist/workspace/semaphore.js +8 -1
  174. package/dist/workspace/semaphore.js.map +1 -1
  175. package/package.json +3 -3
  176. package/scripts/mock-claude.mjs +34 -1
  177. package/scripts/mock-copilot-acp.mjs +190 -0
  178. package/scripts/mock-junie-acp.mjs +208 -0
  179. package/web/dist/assets/agent-task-pickers-BeQi-UTm.js +1 -0
  180. package/web/dist/assets/alert-dialog-CnRAuqwb.js +1 -0
  181. package/web/dist/assets/arrow-down-Da0kNRNH.js +1 -0
  182. package/web/dist/assets/arrow-left-BIZHhBIP.js +1 -0
  183. package/web/dist/assets/automation-format-CfPmkcsg.js +1 -0
  184. package/web/dist/assets/automations-route-AMJbFP53.js +1 -0
  185. package/web/dist/assets/centered-state-3r2Kaar_.js +1 -0
  186. package/web/dist/assets/chevron-left-DLAUPC66.js +1 -0
  187. package/web/dist/assets/chevron-right-KVZcXiPL.js +1 -0
  188. package/web/dist/assets/{circle-x-C9UoMP1V.js → circle-x-C0Jm5Ppb.js} +1 -1
  189. package/web/dist/assets/collapsible-DG_SIWqU.js +1 -0
  190. package/web/dist/assets/command-Dfln3D4A.js +1 -0
  191. package/web/dist/assets/{commit-list-BSfPsVsu.js → commit-list-_RA72yB_.js} +1 -1
  192. package/web/dist/assets/compare-variants-D6Ji6od4.js +1 -0
  193. package/web/dist/assets/dashboard-B3-tPimG.js +44 -0
  194. package/web/dist/assets/dialog-CiDREdUK.js +1 -0
  195. package/web/dist/assets/{diff-I0xowULh.js → diff-CxdyRumG.js} +2 -2
  196. package/web/dist/assets/diff-controls-DqJMMV4z.js +1 -0
  197. package/web/dist/assets/{diff-stat-yKn7joEr.js → diff-stat-Hupj4hxh.js} +1 -1
  198. package/web/dist/assets/{diff-view-DjvMeW1M.js → diff-view-BBYT5k6c.js} +1 -1
  199. package/web/dist/assets/dist-BqMwqJFX.js +1 -0
  200. package/web/dist/assets/dist-DpiX6WjA.js +1 -0
  201. package/web/dist/assets/{download-BcgZ2yk4.js → download-BR7EN9gW.js} +1 -1
  202. package/web/dist/assets/dropdown-menu-Ci4HFML0.js +1 -0
  203. package/web/dist/assets/editable-title-DDtUgRKZ.js +1 -0
  204. package/web/dist/assets/{ellipsis-vertical-g4O4NlLV.js → ellipsis-vertical-DBklom4U.js} +1 -1
  205. package/web/dist/assets/facet-filter-CfI4QvOd.js +1 -0
  206. package/web/dist/assets/{file-wXNeZwi7.js → file-CZb7cKNH.js} +1 -1
  207. package/web/dist/assets/{file-text-DV1gE2L6.js → file-text-Dm6CrEGW.js} +1 -1
  208. package/web/dist/assets/{folder-wjVId5un.js → folder-zQj-FYOo.js} +1 -1
  209. package/web/dist/assets/{git-pull-request-BBEDdTLK.js → git-pull-request-AhwzJc7s.js} +1 -1
  210. package/web/dist/assets/git-toolbar-j7gKkhGL.js +1 -0
  211. package/web/dist/assets/github-De-DFy8s.js +1 -0
  212. package/web/dist/assets/{image-preview-u1f-wzxC.js → image-preview-Dd3NVB7N.js} +1 -1
  213. package/web/dist/assets/index-HS1hr5Sz.js +12 -0
  214. package/web/dist/assets/index-YwgrLyBj.css +2 -0
  215. package/web/dist/assets/loader-circle-sk4vKJKp.js +1 -0
  216. package/web/dist/assets/{markdown-Bnm47qUl.js → markdown-DjNR-1p8.js} +2 -2
  217. package/web/dist/assets/new-task-form-vLs2G1_z.js +1 -0
  218. package/web/dist/assets/picker-pill-VW-M1ZiV.js +1 -0
  219. package/web/dist/assets/{pill-7dm3vWF7.js → pill-CPl6sysj.js} +1 -1
  220. package/web/dist/assets/popover-CNGONAql.js +1 -0
  221. package/web/dist/assets/project-router-dCZQu1wQ.js +1 -0
  222. package/web/dist/assets/{prompt-templates-BMZ5q5H_.js → prompt-templates-jNjVTAws.js} +1 -1
  223. package/web/dist/assets/{refresh-cw-C69euZ2H.js → refresh-cw-BfkEydKA.js} +1 -1
  224. package/web/dist/assets/repo-git-BZWZ6_pR.js +1 -0
  225. package/web/dist/assets/{run-diff-CoNVGn23.js → run-diff-u_roDsAJ.js} +2 -2
  226. package/web/dist/assets/run-header-Br1yJR0m.js +1 -0
  227. package/web/dist/assets/{search-x-BNLFOxI6.js → search-x-CT0NTqK1.js} +1 -1
  228. package/web/dist/assets/segmented-IDD4ucht.js +1 -0
  229. package/web/dist/assets/skills-Dsi5YdLG.js +1 -0
  230. package/web/dist/assets/{sparkles-ChorK-gZ.js → sparkles-CvOeAoyJ.js} +1 -1
  231. package/web/dist/assets/{square-terminal-C7KCPznz.js → square-terminal-eSs8YYZe.js} +1 -1
  232. package/web/dist/assets/{tab-link-E5O2Cesc.js → tab-link-CPF6ORha.js} +1 -1
  233. package/web/dist/assets/task-changes-DIT9Y1rh.js +1 -0
  234. package/web/dist/assets/task-commits-B4VvdiHH.js +1 -0
  235. package/web/dist/assets/task-files-BMm9C0DW.js +2 -0
  236. package/web/dist/assets/task-thread-RXabJAt0.js +9 -0
  237. package/web/dist/assets/{textarea-DLAfWPb0.js → textarea-DtBqPhIs.js} +1 -1
  238. package/web/dist/assets/thread-loading-Dnxb6Ar-.js +1 -0
  239. package/web/dist/assets/toaster-CfRVb8vH.js +43 -0
  240. package/web/dist/assets/token-metrics-DldVlr6m.js +1 -0
  241. package/web/dist/assets/tooltip-_O50N3pt.js +1 -0
  242. package/web/dist/assets/tracker-J0fdcH1G.js +4 -0
  243. package/web/dist/assets/{trash-2-_vwSMdPG.js → trash-2-CUH7GOVh.js} +1 -1
  244. package/web/dist/assets/{triangle-alert-fBRUkB46.js → triangle-alert-D5K_zyD3.js} +1 -1
  245. package/web/dist/assets/{upload-B4OIpdyq.js → upload-D7_n-9cl.js} +1 -1
  246. package/web/dist/assets/{use-now-sqAvRMna.js → use-now-3lElDuTi.js} +1 -1
  247. package/web/dist/assets/utils-BXvEm7Ve.js +64 -0
  248. package/web/dist/assets/workflows-D-dx9c_0.js +7 -0
  249. package/web/dist/assets/x-kLybIvX4.js +1 -0
  250. package/web/dist/assets/{zoomable-image-X81SApIg.js → zoomable-image-CnyQ9wyw.js} +1 -1
  251. package/web/dist/index.html +38 -36
  252. package/web/dist/assets/agent-task-pickers-DQ1qvgrD.js +0 -1
  253. package/web/dist/assets/alert-dialog-B_2uU4Bg.js +0 -1
  254. package/web/dist/assets/arrow-down-DieVZxSE.js +0 -1
  255. package/web/dist/assets/arrow-left-C8M0efjn.js +0 -1
  256. package/web/dist/assets/automation-format-CzinzpHK.js +0 -1
  257. package/web/dist/assets/automations-route-DYHUjV9R.js +0 -1
  258. package/web/dist/assets/centered-state-DJLgwvA4.js +0 -43
  259. package/web/dist/assets/chevron-left-BhXrOEE3.js +0 -1
  260. package/web/dist/assets/chevron-right-B3Ta8VKK.js +0 -1
  261. package/web/dist/assets/collapsible-BcKvItwg.js +0 -1
  262. package/web/dist/assets/command-BvGGv2_u.js +0 -1
  263. package/web/dist/assets/compare-variants-DBvMYMs3.js +0 -1
  264. package/web/dist/assets/dashboard-CGaFh4RV.js +0 -44
  265. package/web/dist/assets/dialog-B6NgKh0-.js +0 -1
  266. package/web/dist/assets/diff-controls-DskkZqmD.js +0 -1
  267. package/web/dist/assets/dist-BvXEdcbG.js +0 -1
  268. package/web/dist/assets/dist-CTksUkKh.js +0 -1
  269. package/web/dist/assets/dropdown-menu-B7HeKCfN.js +0 -1
  270. package/web/dist/assets/editable-title-BHbHmSIK.js +0 -1
  271. package/web/dist/assets/facet-filter-DZ3wfvN9.js +0 -1
  272. package/web/dist/assets/git-toolbar-EZuX4Cuz.js +0 -1
  273. package/web/dist/assets/github-zcLRxv77.js +0 -1
  274. package/web/dist/assets/index-BrZhA4_u.css +0 -2
  275. package/web/dist/assets/index-CSNFuBvj.js +0 -12
  276. package/web/dist/assets/loader-circle-Cwgo6onL.js +0 -1
  277. package/web/dist/assets/new-task-form-CQODCzBP.js +0 -1
  278. package/web/dist/assets/picker-pill-DNB9ETjS.js +0 -1
  279. package/web/dist/assets/popover-BRq6QnwI.js +0 -1
  280. package/web/dist/assets/project-router-I8Pbsrxy.js +0 -1
  281. package/web/dist/assets/repo-git-G436Abni.js +0 -1
  282. package/web/dist/assets/run-header-CxdaA86t.js +0 -1
  283. package/web/dist/assets/skills-C_kBDesq.js +0 -1
  284. package/web/dist/assets/task-changes-Bhw4Ysvg.js +0 -1
  285. package/web/dist/assets/task-commits-DBuGXuGm.js +0 -1
  286. package/web/dist/assets/task-files-CYDbeffM.js +0 -2
  287. package/web/dist/assets/task-thread-RuxHMJgN.js +0 -9
  288. package/web/dist/assets/thread-loading-BAuVAbcA.js +0 -1
  289. package/web/dist/assets/token-metrics-rVl4kXe_.js +0 -1
  290. package/web/dist/assets/tooltip-Bdl8mQG8.js +0 -1
  291. package/web/dist/assets/tracker-DJ8JW59-.js +0 -4
  292. package/web/dist/assets/utils-DoBmOlX3.js +0 -64
  293. package/web/dist/assets/workflows-C54D7mlm.js +0 -7
  294. package/web/dist/assets/x-HXr9KZBr.js +0 -1
@@ -0,0 +1,533 @@
1
+ import { isSignalTerminationExit, prependSystemPrompt, trackChildExit } from './agent-runner.js';
2
+ import { AUTO_END_DELAY_MS, DEFAULT_RUN_TIMEOUT_MS, KILL_GRACE_MS } from './claude-cli-runner.js';
3
+ import { readNdjson } from './ndjson.js';
4
+ import { V1TextCoalescer } from './v1-text-coalescer.js';
5
+ import { endJunieAcp, junieSpawnError, resolveJunieExecutable, spawnJunieAcp, waitForJunieAcpExit, JunieAcpRpc, } from './junie-acp-transport.js';
6
+ import { createJunieUiState, junieSessionStarted, junieStopReason, junieTurnCompleted, junieTurnStarted, junieUsageFromResponse, mapJunieSessionUpdate, } from './junie-ui-mapper.js';
7
+ /**
8
+ * `AgentRunner` over `junie --acp=true` — the real Agent Client Protocol (ACP)
9
+ * transport junie documents as "for IDE integrations" (`junie --help`, `Acp:`
10
+ * section), verified live against `@jetbrains/junie` 26.9.22 with an
11
+ * authenticated session (see `junie-ui-mapper.ts`'s module doc for exactly
12
+ * what was captured on the wire vs. mapped from the public ACP schema).
13
+ * JSON-RPC 2.0, newline-delimited, over stdin/stdout — the same shape as
14
+ * `codex app-server`, so this runner mirrors `CodexAppServerRunner`'s
15
+ * process/session split.
16
+ *
17
+ * Auth = junie's own login (`junie` once, browser or `--auth=<token>`) or a
18
+ * configured BYOK provider key, both stored under `~/.junie/`. ACP requires an
19
+ * explicit `authenticate` call even when a valid credential is already cached
20
+ * on disk (confirmed live: `session/prompt` refuses with "Authentication is
21
+ * required" until `authenticate` has run in THIS process) — the runner sends
22
+ * it once during bootstrap, best-effort: a real auth failure still surfaces
23
+ * clearly from the first `session/prompt` error.
24
+ *
25
+ * Zero-config full-auto: `session/set_config_option(brave_mode, 'on')` right
26
+ * after `session/new`, matching codex's `danger-full-access`/`never` and
27
+ * opencode's auto-approve-everything default (#430's documented posture —
28
+ * `auto` means full shell access, not a sandbox). junie has no per-tool
29
+ * allowlist on this transport, so `spec.allowedTools`/`bashAllowlist` are
30
+ * ignored, same as codex. A `session/request_permission` request (junie's ACP
31
+ * approval channel) is answered with the first "allow" option regardless —
32
+ * never observed firing live with brave_mode on, but implemented per protocol
33
+ * for robustness rather than left to hang the turn.
34
+ */
35
+ export class JunieRunner {
36
+ backend = 'junie';
37
+ bin;
38
+ timeoutMs;
39
+ lastSession = null;
40
+ constructor(opts = {}) {
41
+ this.bin = resolveJunieExecutable(opts.bin);
42
+ this.timeoutMs = opts.timeoutMs ?? DEFAULT_RUN_TIMEOUT_MS;
43
+ }
44
+ run(spec, onEvent) {
45
+ return this.startSession(spec, onEvent, { autoEndAfterFirstTurn: true }).result;
46
+ }
47
+ async interrupt() {
48
+ this.lastSession?.interrupt();
49
+ }
50
+ startSession(spec, onEvent, opts = {}) {
51
+ const session = new JunieSession(this.bin, this.timeoutMs, spec, onEvent, opts);
52
+ this.lastSession = session;
53
+ return session;
54
+ }
55
+ }
56
+ /** One live `junie --acp=true` process driving a single session. */
57
+ class JunieSession {
58
+ bin;
59
+ spec;
60
+ onEvent;
61
+ opts;
62
+ result;
63
+ child;
64
+ rpc;
65
+ stdinOpen = true;
66
+ sessionId;
67
+ toolCalls = [];
68
+ textChunks = [];
69
+ lastMessageId;
70
+ textCoalescer = new V1TextCoalescer((text) => {
71
+ this.textChunks.push(text);
72
+ this.emit({ type: 'text', text });
73
+ });
74
+ tokensUsed = 0;
75
+ busy = false;
76
+ queue = [];
77
+ /** The turn currently in flight, if any — awaited (never rejected) by the
78
+ * result IIFE before it settles, so a turn whose request was rejected by
79
+ * our own `rejectPending()` (the child already exited) still gets to emit
80
+ * its `note`/`turn-end` BEFORE the terminal `done` (#703 ordering: `done`
81
+ * must stay the true last event, not something a still-pending catch
82
+ * handler emits after it). */
83
+ activeTurn = Promise.resolve();
84
+ ready;
85
+ autoEndTimer;
86
+ eofTermTimer;
87
+ eofKillTimer;
88
+ hardKillTimer;
89
+ spawnFailed = null;
90
+ timedOut = false;
91
+ /** Set the moment WE signal the child (EOF watchdog, cancel, kill switch) —
92
+ * junie handles the signal and exits `128 + signal`, so without this the
93
+ * runner would read its own teardown as a junie failure (#703 precedent). */
94
+ terminatedByCezar = false;
95
+ hasExited;
96
+ uiState = createJunieUiState();
97
+ constructor(bin, timeoutMs, spec, onEvent, opts) {
98
+ this.bin = bin;
99
+ this.spec = spec;
100
+ this.onEvent = onEvent;
101
+ this.opts = opts;
102
+ try {
103
+ this.child = spawnJunieAcp(bin, spec.cwd, spec.env);
104
+ this.rpc = new JunieAcpRpc(this.child);
105
+ }
106
+ catch (err) {
107
+ throw junieSpawnError(err, bin);
108
+ }
109
+ this.hasExited = trackChildExit(this.child);
110
+ this.child.on('error', (err) => {
111
+ this.spawnFailed = junieSpawnError(err, bin);
112
+ });
113
+ const stderrChunks = [];
114
+ this.child.stderr.setEncoding('utf8');
115
+ this.child.stderr.on('data', (chunk) => stderrChunks.push(chunk));
116
+ const limitMs = spec.timeoutMs ?? timeoutMs;
117
+ let killTimer;
118
+ let deadline;
119
+ if (limitMs > 0) {
120
+ deadline = setTimeout(() => {
121
+ this.timedOut = true;
122
+ this.interrupt();
123
+ this.child.stdout.destroy();
124
+ killTimer = setTimeout(() => {
125
+ if (!this.hasExited()) {
126
+ this.terminatedByCezar = true;
127
+ this.child.kill('SIGKILL');
128
+ }
129
+ }, KILL_GRACE_MS);
130
+ killTimer.unref?.();
131
+ }, limitMs);
132
+ deadline.unref?.();
133
+ }
134
+ this.ready = this.bootstrap();
135
+ this.result = (async () => {
136
+ let sessionError;
137
+ try {
138
+ const readLoop = async () => {
139
+ for await (const line of readNdjson(this.child.stdout)) {
140
+ if (this.timedOut)
141
+ break;
142
+ let msg;
143
+ try {
144
+ msg = JSON.parse(line);
145
+ }
146
+ catch {
147
+ continue; // e.g. "[Junie] Applying staged update..." plain-text lines
148
+ }
149
+ this.dispatch(msg);
150
+ }
151
+ };
152
+ await Promise.all([this.ready, readLoop()]);
153
+ }
154
+ catch (err) {
155
+ if (!this.timedOut) {
156
+ sessionError = err;
157
+ this.end();
158
+ }
159
+ }
160
+ finally {
161
+ if (deadline)
162
+ clearTimeout(deadline);
163
+ if (killTimer)
164
+ clearTimeout(killTimer);
165
+ if (this.autoEndTimer)
166
+ clearTimeout(this.autoEndTimer);
167
+ this.stdinOpen = false;
168
+ }
169
+ const exitCode = await waitForJunieAcpExit(this.child);
170
+ if (this.eofTermTimer)
171
+ clearTimeout(this.eofTermTimer);
172
+ if (this.eofKillTimer)
173
+ clearTimeout(this.eofKillTimer);
174
+ if (this.hardKillTimer)
175
+ clearTimeout(this.hardKillTimer);
176
+ this.rpc.rejectPending();
177
+ // Let a turn `rejectPending` just settled (a still-pending `session/prompt`
178
+ // when the child exited) emit its own `note`/`turn-end` BEFORE the
179
+ // terminal `done` below — never throws, see `activeTurn`'s doc comment.
180
+ await this.activeTurn;
181
+ if (this.spawnFailed)
182
+ throw this.spawnFailed;
183
+ if (sessionError)
184
+ throw sessionError;
185
+ this.textCoalescer.flush();
186
+ const text = this.textChunks.join('\n').trim();
187
+ const base = {
188
+ text,
189
+ toolCalls: this.toolCalls,
190
+ tokensUsed: this.tokensUsed,
191
+ sessionId: this.sessionId ?? spec.sessionId,
192
+ };
193
+ if (this.timedOut) {
194
+ const mins = Math.round((limitMs / 60_000) * 10) / 10;
195
+ this.emit({ type: 'error', message: `junie timed out after ${mins}m and was killed` });
196
+ this.emit({ type: 'done' });
197
+ return base;
198
+ }
199
+ if (this.terminatedByCezar && isSignalTerminationExit(exitCode)) {
200
+ this.emit({
201
+ type: 'note',
202
+ message: `junie did not exit on its own after close; terminated by cezar (code ${exitCode})`,
203
+ });
204
+ this.emit({ type: 'done' });
205
+ return base;
206
+ }
207
+ if (exitCode !== 0 && exitCode !== null) {
208
+ const stderr = stderrChunks.join('').trim();
209
+ const detail = stderr ? ` — ${stderr.split('\n').slice(-3).join(' | ')}` : '';
210
+ const message = `junie exited with code ${exitCode}${detail}`;
211
+ this.emit({ type: 'error', message });
212
+ throw new Error(message);
213
+ }
214
+ this.emit({ type: 'done' });
215
+ return base;
216
+ })();
217
+ }
218
+ get open() {
219
+ return this.stdinOpen;
220
+ }
221
+ get pid() {
222
+ return this.child.pid;
223
+ }
224
+ sendMessage(content) {
225
+ if (!this.stdinOpen)
226
+ return false;
227
+ if (this.autoEndTimer) {
228
+ clearTimeout(this.autoEndTimer);
229
+ this.autoEndTimer = undefined;
230
+ }
231
+ const blocks = toJuniePrompt(content);
232
+ if (blocks.length === 0)
233
+ return true;
234
+ this.queue.push(blocks);
235
+ void this.ready.then(() => this.drainQueue()).catch(() => undefined);
236
+ return true;
237
+ }
238
+ end() {
239
+ if (!this.stdinOpen)
240
+ return;
241
+ this.stdinOpen = false;
242
+ try {
243
+ endJunieAcp(this.child, (term, kill) => {
244
+ this.eofTermTimer = term;
245
+ this.eofKillTimer = kill;
246
+ }, () => {
247
+ this.terminatedByCezar = true;
248
+ });
249
+ }
250
+ catch {
251
+ // already gone
252
+ }
253
+ }
254
+ /** Hard stop (the `AgentSession` contract: `end()` is graceful, `interrupt()`
255
+ * is not) — `session/cancel` (a NOTIFICATION, confirmed live) best-effort,
256
+ * then SIGTERM immediately rather than waiting for the turn to wind down. */
257
+ interrupt() {
258
+ this.stdinOpen = false;
259
+ if (this.sessionId) {
260
+ try {
261
+ this.rpc.notify('session/cancel', { sessionId: this.sessionId });
262
+ }
263
+ catch {
264
+ // best-effort
265
+ }
266
+ }
267
+ if (!this.hasExited()) {
268
+ this.terminatedByCezar = true;
269
+ this.child.kill('SIGTERM');
270
+ }
271
+ }
272
+ hardStop() {
273
+ this.interrupt();
274
+ if (this.hardKillTimer || this.hasExited())
275
+ return;
276
+ this.hardKillTimer = setTimeout(() => {
277
+ if (!this.hasExited()) {
278
+ this.terminatedByCezar = true;
279
+ this.child.kill('SIGKILL');
280
+ }
281
+ }, KILL_GRACE_MS);
282
+ this.hardKillTimer.unref?.();
283
+ }
284
+ // ---- protocol -----------------------------------------------------------
285
+ async bootstrap() {
286
+ const initResult = await this.rpc.request('initialize', {
287
+ protocolVersion: 1,
288
+ clientCapabilities: {},
289
+ });
290
+ // ACP requires an explicit `authenticate` even with a credential already
291
+ // cached on disk (confirmed live). Best-effort: a real auth problem still
292
+ // surfaces clearly from the first `session/prompt` error below.
293
+ const methodId = firstAuthMethodId(initResult);
294
+ if (methodId) {
295
+ await this.rpc.request('authenticate', { methodId }).catch(() => undefined);
296
+ }
297
+ const session = this.spec.resume && this.spec.sessionId
298
+ ? await this.rpc.request('session/load', { sessionId: this.spec.sessionId, cwd: this.spec.cwd, mcpServers: [] })
299
+ : await this.rpc.request('session/new', { cwd: this.spec.cwd, mcpServers: [] });
300
+ this.sessionId = stringField(session, 'sessionId') ?? this.spec.sessionId;
301
+ if (this.sessionId) {
302
+ this.emit({ type: 'session', sessionId: this.sessionId });
303
+ const sessionId = this.sessionId;
304
+ this.emitUi((state) => junieSessionStarted(sessionId, state));
305
+ // Zero-config full-auto (#430's documented posture): best-effort — a
306
+ // future protocol revision that drops this configId must not abort the
307
+ // whole session over an internal nicety.
308
+ await this.rpc
309
+ .request('session/set_config_option', { sessionId, configId: 'brave_mode', value: 'on' })
310
+ .catch(() => undefined);
311
+ // Junie's model ids are opaque, junie-catalog strings (e.g.
312
+ // `v1:12:jetbrains-ai:claude-sonnet-5`), never `provider/model` — a bad
313
+ // id fails loud here rather than being swallowed (AGENT_PROTOCOL.md §9).
314
+ if (this.spec.model) {
315
+ await this.rpc.request('session/set_config_option', {
316
+ sessionId,
317
+ configId: 'model',
318
+ value: this.spec.model,
319
+ });
320
+ }
321
+ }
322
+ else {
323
+ // `session/new`/`session/load` resolved without a `sessionId` — `drainQueue()` below
324
+ // refuses to send anything while `this.sessionId` is unset, and nothing ever re-drains,
325
+ // so a silent hang (the run sits until the wall-clock timeout) is the alternative to
326
+ // failing loud here.
327
+ throw new Error('junie: session/new did not return a sessionId');
328
+ }
329
+ const first = prependSystemPrompt(this.spec.systemPrompt, this.spec.userPrompt);
330
+ this.queue.push(toJuniePrompt([...(this.spec.images ?? []), { type: 'text', text: first }]));
331
+ this.drainQueue();
332
+ }
333
+ drainQueue() {
334
+ if (this.busy || this.queue.length === 0 || !this.sessionId)
335
+ return;
336
+ const prompt = this.queue.shift();
337
+ if (!prompt)
338
+ return;
339
+ this.busy = true;
340
+ const turn = this.runTurn(prompt).finally(() => {
341
+ this.busy = false;
342
+ this.drainQueue();
343
+ });
344
+ this.activeTurn = turn;
345
+ }
346
+ async runTurn(prompt) {
347
+ const sessionId = this.sessionId;
348
+ if (!sessionId)
349
+ return;
350
+ this.emitUi((state) => junieTurnStarted(state));
351
+ try {
352
+ const result = await this.rpc.request('session/prompt', { sessionId, prompt });
353
+ const stopReason = junieStopReason(result.stopReason);
354
+ const usage = junieUsageFromResponse(result.usage);
355
+ this.textCoalescer.flush();
356
+ if (usage) {
357
+ this.tokensUsed += usage.total;
358
+ this.emit({ type: 'token-usage', tokensUsed: this.tokensUsed });
359
+ }
360
+ this.emitUi((state) => junieTurnCompleted(stopReason, usage, state));
361
+ this.emit({ type: 'turn-end' });
362
+ }
363
+ catch (err) {
364
+ this.textCoalescer.flush();
365
+ const detail = err instanceof Error ? err.message : String(err);
366
+ // Our own teardown (stdin closed, signalled, or timed out) rejects every
367
+ // in-flight request via `rejectPending` as part of ordinary shutdown —
368
+ // that is not a junie failure (#703 precedent), so it stays a note.
369
+ if (!this.stdinOpen || this.terminatedByCezar || this.timedOut) {
370
+ this.emit({ type: 'note', message: `junie: turn failed: ${detail}` });
371
+ }
372
+ else {
373
+ this.emit({ type: 'error', message: `junie: turn failed: ${detail}` });
374
+ }
375
+ this.emit({ type: 'turn-end' });
376
+ }
377
+ // Scheduled on BOTH the success and failure paths — a failed turn still
378
+ // ends the single-turn workflow-step session, exactly like every other
379
+ // runner's autoEndAfterFirstTurn wiring.
380
+ if (this.opts.autoEndAfterFirstTurn && this.stdinOpen && !this.autoEndTimer) {
381
+ this.autoEndTimer = setTimeout(() => this.end(), AUTO_END_DELAY_MS);
382
+ this.autoEndTimer.unref?.();
383
+ }
384
+ }
385
+ dispatch(msg) {
386
+ if (this.rpc.dispatchResponse(msg))
387
+ return;
388
+ if (msg.method === 'session/request_permission' && (typeof msg.id === 'number' || typeof msg.id === 'string')) {
389
+ this.handlePermissionRequest(msg.id, msg.params ?? {});
390
+ return;
391
+ }
392
+ if (msg.method === 'session/update') {
393
+ this.handleSessionUpdate(msg.params ?? {});
394
+ }
395
+ }
396
+ /** junie's ACP approval channel — never observed firing live with
397
+ * `brave_mode: 'on'` (see the mapper's module doc), but answered per
398
+ * protocol rather than left to hang the turn: grant it, matching cezar's
399
+ * zero-config full-auto posture on every other backend (#430). Prefer
400
+ * `allow_once` over `allow_always` whatever order the agent lists them in —
401
+ * per-run full-auto must not persist a grant that outlives the run. */
402
+ handlePermissionRequest(id, params) {
403
+ const options = (Array.isArray(params.options) ? params.options : []).filter(isRecord);
404
+ const allow = options.find((option) => option.kind === 'allow_once') ??
405
+ options.find((option) => option.kind === 'allow_always');
406
+ const optionId = allow ? stringField(allow, 'optionId') : undefined;
407
+ if (!optionId) {
408
+ this.rpc.respond({ id, error: { code: -32602, message: 'no allow option offered' } });
409
+ return;
410
+ }
411
+ this.rpc.respond({ id, result: { outcome: { outcome: 'selected', optionId } } });
412
+ }
413
+ handleSessionUpdate(params) {
414
+ const update = isRecord(params.update) ? params.update : undefined;
415
+ if (!update)
416
+ return;
417
+ // v1: independent minimal tracking off the same raw frames (v2's mapper
418
+ // owns its own item lifecycle state — see `junie-ui-mapper.ts`'s module
419
+ // doc for why the two tracks are not derived from one another).
420
+ const kind = typeof update.sessionUpdate === 'string' ? update.sessionUpdate : undefined;
421
+ if (kind === 'agent_message_chunk') {
422
+ const messageId = stringField(update, 'messageId');
423
+ const text = messageChunkText(update.content);
424
+ if (messageId && this.lastMessageId && this.lastMessageId !== messageId) {
425
+ this.textCoalescer.complete(this.lastMessageId);
426
+ }
427
+ if (text)
428
+ this.textCoalescer.append(messageId, text);
429
+ this.lastMessageId = messageId ?? this.lastMessageId;
430
+ }
431
+ else if (kind === 'tool_call') {
432
+ if (this.lastMessageId) {
433
+ this.textCoalescer.complete(this.lastMessageId);
434
+ this.lastMessageId = undefined;
435
+ }
436
+ const id = stringField(update, 'toolCallId');
437
+ // The real tool name junie sends (v2's mapper uses the same field, see `junie-ui-mapper.ts`'s
438
+ // `toolItemFrom`) — the ACP `kind` category (`read`/`edit`/`execute`/`other`) is only a
439
+ // fallback for the rare frame with no title, so v1 consumers stop seeing `other` for most calls.
440
+ const name = stringField(update, 'title') ?? (typeof update.kind === 'string' ? update.kind : 'other');
441
+ if (id) {
442
+ this.toolCalls.push({ id, name, input: update.rawInput ?? { title: update.title } });
443
+ this.emit({ type: 'tool-call', id, tool: name, input: update.rawInput ?? { title: update.title } });
444
+ }
445
+ }
446
+ else if (kind === 'tool_call_update') {
447
+ const id = stringField(update, 'toolCallId');
448
+ const status = typeof update.status === 'string' ? update.status : undefined;
449
+ if (id && (status === 'completed' || status === 'failed')) {
450
+ this.emit({
451
+ type: 'tool-result',
452
+ toolCallId: id,
453
+ result: toolUpdateResultText(update),
454
+ isError: status === 'failed',
455
+ });
456
+ }
457
+ }
458
+ this.emitUi((state) => mapJunieSessionUpdate(update, state));
459
+ }
460
+ emit(event) {
461
+ this.onEvent?.(event);
462
+ }
463
+ /** The mapper never throws, but a defect in it must still never disturb
464
+ * the v1 stream — hence the belt-and-braces try. */
465
+ emitUi(map) {
466
+ try {
467
+ const mapped = map(this.uiState);
468
+ this.uiState = mapped.state;
469
+ if (this.opts.onUiEvent) {
470
+ for (const event of mapped.events)
471
+ this.opts.onUiEvent(event);
472
+ }
473
+ }
474
+ catch {
475
+ // v2 mapping is best-effort; v1 consumers stay unaffected.
476
+ }
477
+ }
478
+ }
479
+ // ---- helpers --------------------------------------------------------------
480
+ function toJuniePrompt(content) {
481
+ return content.map((block) => block.type === 'text'
482
+ ? { type: 'text', text: block.text }
483
+ : { type: 'image', data: block.source.data, mimeType: block.source.media_type });
484
+ }
485
+ function messageChunkText(content) {
486
+ if (!isRecord(content) || content.type !== 'text')
487
+ return undefined;
488
+ return typeof content.text === 'string' ? content.text : undefined;
489
+ }
490
+ /** `content:[{type:'diff',...}|{type:'content',content:{type:'text',text}}]`
491
+ * → the human-readable result text for the v1 `tool-result` event, falling
492
+ * back to `rawOutput.output` (execute) and finally the raw item as JSON. */
493
+ function toolUpdateResultText(update) {
494
+ const parts = [];
495
+ if (Array.isArray(update.content)) {
496
+ for (const entry of update.content) {
497
+ if (isRecord(entry) && entry.type === 'content') {
498
+ const text = messageChunkText(entry.content);
499
+ if (text)
500
+ parts.push(text);
501
+ }
502
+ }
503
+ }
504
+ if (parts.length > 0)
505
+ return parts.join('\n');
506
+ const rawOutput = isRecord(update.rawOutput) ? update.rawOutput : undefined;
507
+ if (rawOutput && typeof rawOutput.output === 'string' && rawOutput.output !== '')
508
+ return rawOutput.output;
509
+ return safeStringify(update);
510
+ }
511
+ function firstAuthMethodId(initResult) {
512
+ const methods = initResult.authMethods;
513
+ if (!Array.isArray(methods) || methods.length === 0)
514
+ return undefined;
515
+ const first = methods[0];
516
+ return isRecord(first) ? stringField(first, 'id') : undefined;
517
+ }
518
+ function isRecord(value) {
519
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
520
+ }
521
+ function stringField(obj, key) {
522
+ const v = obj[key];
523
+ return typeof v === 'string' ? v : undefined;
524
+ }
525
+ function safeStringify(value) {
526
+ try {
527
+ return JSON.stringify(value);
528
+ }
529
+ catch {
530
+ return String(value);
531
+ }
532
+ }
533
+ //# sourceMappingURL=junie-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"junie-runner.js","sourceRoot":"","sources":["../../src/core/junie-runner.ts"],"names":[],"mappings":"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"}