@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,111 @@
1
+ /**
2
+ * GitHub Copilot CLI's ACP dialect (#582) — the per-runner mapper `AGENT_PROTOCOL.md` §9 step 4
3
+ * asks for, over the shared `acp-ui-mapper.ts`.
4
+ *
5
+ * Every rule here was read off `@github/copilot` 1.0.88: the handshake and the auth error from a
6
+ * live `copilot --acp` probe, the streaming frames from the CLI's own ACP bridge inside its
7
+ * bundle. The verification record — with the commands and the code sites — is
8
+ * `.ai/runs/2026-09-27-copilot-cli-runner/copilot-acp-notes.md`, and `__fixtures__/copilot/`
9
+ * cites it frame by frame.
10
+ *
11
+ * Three things make Copilot differ from the plain ACP reading:
12
+ * - it announces a **started** tool as `pending` and never sends `in_progress`;
13
+ * - it tags a delegated agent's tool calls with the delegating `task` call's id, which is real
14
+ * parent attribution — so the nesting cell of the parity matrix needs no substitute;
15
+ * - it carries **no tool name** on the wire, only a rendered title and an ACP kind.
16
+ */
17
+ import { createAcpUiState, mapAcpFrame, } from './acp-ui-mapper.js';
18
+ /**
19
+ * Copilot's own `_meta` namespace on `session/update` frames. Its only member is `agentId`, set
20
+ * exactly when the tool call belongs to a delegated agent, and equal to the `toolCallId` of the
21
+ * `task` call that spawned it.
22
+ */
23
+ export const COPILOT_META_KEY = 'github.com/copilot';
24
+ /** What a user needs in order to run Copilot CLI. */
25
+ export const COPILOT_AUTH_HINT = 'GitHub Copilot CLI needs a Copilot-entitled login — run `copilot login`, or export COPILOT_GITHUB_TOKEN (GH_TOKEN and GITHUB_TOKEN are also read, in that order).';
26
+ /** The run-time line for a rejected credential. "authentication failed" is what
27
+ * `isRuntimeProviderAuthFailure` keys on, so the server raises `provider-auth-required`. */
28
+ export const COPILOT_AUTH_FAILURE_MESSAGE = 'Copilot CLI authentication failed — run `copilot login`, or set COPILOT_GITHUB_TOKEN (GH_TOKEN and GITHUB_TOKEN are read too, in that order).';
29
+ /**
30
+ * Copilot answers an unauthenticated `session/new` with JSON-RPC `-32000 "Authentication
31
+ * required"` (captured live; `newSession` throws `authRequired()` when the session has no
32
+ * credential). The wording patterns cover the same failure arriving as prose on another frame.
33
+ */
34
+ const AUTH_FAILURE_PATTERNS = [
35
+ /authentication required/i,
36
+ /not (?:logged in|authenticated)/i,
37
+ /\bcopilot login\b/i,
38
+ /no copilot (?:subscription|entitlement|access)/i,
39
+ ];
40
+ /** True for the Copilot auth failures cezar has seen on the wire (see the fixtures). */
41
+ export function isCopilotAuthFailure(text) {
42
+ return AUTH_FAILURE_PATTERNS.some((pattern) => pattern.test(text));
43
+ }
44
+ /**
45
+ * The tool's own name — a deliberate best-effort reconstruction.
46
+ *
47
+ * Copilot's ACP frames carry `title` (prose built by the CLI: "Editing src/app.ts") and the ACP
48
+ * `kind`, but never the tool name, and its `_meta` holds only `agentId`. Rather than guess a name
49
+ * from argument shapes that several tools share, only two are recovered — each keyed on an
50
+ * argument the CLI's own code proves is that tool's — and everything else reports the ACP kind.
51
+ * That costs nothing on screen: `upsertTool` prefers the wire `title` over anything derived from
52
+ * the name, so the name is used for `toolKindOf` and as a coarse label.
53
+ */
54
+ export function copilotToolName(update) {
55
+ const input = isRecord(update.rawInput) ? update.rawInput : undefined;
56
+ // `skill` takes a single `skill` argument (the CLI titles it "Using skill: <skill>").
57
+ if (input && typeof input.skill === 'string')
58
+ return 'skill';
59
+ // `task` is the delegation tool: ACP kind `other`, and the CLI's agent registry reads its
60
+ // `arguments.name ?? arguments.description` as the subagent's display name.
61
+ if (update.kind === 'other' && input && typeof input.description === 'string')
62
+ return 'task';
63
+ return typeof update.kind === 'string' && update.kind ? update.kind : 'tool';
64
+ }
65
+ /**
66
+ * Copilot maps `task` to the ACP kind `other`, which would render a delegation as an ordinary
67
+ * tool card. v2 has a real kind for it, and the parity matrix counts those items as sub-agents.
68
+ */
69
+ function copilotToolKind(name) {
70
+ return name === 'task' ? 'task' : undefined;
71
+ }
72
+ /**
73
+ * Copilot emits `status: "pending"` from its own `tool.execution_start` and never sends
74
+ * `in_progress`, so the ACP reading ("queued, not started") is the opposite of what happened.
75
+ * A later status on the same call always wins, so a completed tool never falls back to running.
76
+ */
77
+ function copilotToolStatus(update, previous) {
78
+ return update.status === 'pending' ? previous ?? 'running' : undefined;
79
+ }
80
+ /** The delegating `task` call's id, for a tool call a subagent made. */
81
+ export function copilotParentItem(update) {
82
+ const meta = isRecord(update._meta) ? update._meta : undefined;
83
+ const own = meta && isRecord(meta[COPILOT_META_KEY]) ? meta[COPILOT_META_KEY] : undefined;
84
+ return own && typeof own.agentId === 'string' && own.agentId ? own.agentId : undefined;
85
+ }
86
+ export const copilotDialect = {
87
+ backend: 'copilot',
88
+ toolNameOf: copilotToolName,
89
+ toolKindOf: copilotToolKind,
90
+ toolStatusOf: copilotToolStatus,
91
+ parentItemOf: copilotParentItem,
92
+ // Per-turn counts need no dialect hook: Copilot answers `session/prompt` with a top-level
93
+ // `usage` in exactly the ACP shape the shared mapper's `standardUsage` already reads
94
+ // (`{inputTokens, outputTokens, totalTokens, thoughtTokens?, cachedReadTokens?,
95
+ // cachedWriteTokens?}`). Its separate `usage_update` frame is a context-window gauge
96
+ // (`{used, size}`), not token counts, and is not mapped — see the notes' § Token usage.
97
+ errorMessage: (error) => {
98
+ const text = `${typeof error.message === 'string' ? error.message : ''} ${JSON.stringify(error.data ?? '')}`;
99
+ return isCopilotAuthFailure(text) ? COPILOT_AUTH_FAILURE_MESSAGE : undefined;
100
+ },
101
+ };
102
+ export function createCopilotUiState() {
103
+ return createAcpUiState();
104
+ }
105
+ export function mapCopilotFrame(frame, state) {
106
+ return mapAcpFrame(frame, state, copilotDialect);
107
+ }
108
+ function isRecord(value) {
109
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
110
+ }
111
+ //# sourceMappingURL=copilot-ui-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-ui-mapper.js","sourceRoot":"","sources":["../../src/core/copilot-ui-mapper.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ import { fileURLToPath } from 'node:url';
13
13
  import { dirname, resolve as resolvePath } from 'node:path';
14
14
  import { isSignalTerminationExit, prependSystemPrompt } from './agent-runner.js';
15
15
  import { buildChildEnv } from './agent-env.js';
16
+ import { disclaimedCommand } from './disclaim-spawn.js';
16
17
  import { readNdjson } from './ndjson.js';
17
18
  import { createCursorUiState, mapCursorMessage, mapCursorStreamEvent, } from './cursor-ui-mapper.js';
18
19
  export const DEFAULT_CURSOR_TIMEOUT_MS = 30 * 60_000;
@@ -94,10 +95,9 @@ export class CursorAgentRunner {
94
95
  let child;
95
96
  try {
96
97
  const isNodeScript = /\.[cm]?js$/.test(this.bin);
97
- child = nodeSpawn(isNodeScript ? process.execPath : this.bin, isNodeScript ? [this.bin, ...args] : args, {
98
- cwd: spec.cwd,
99
- env: buildChildEnv({ backend: this.backend, extraEnv: spec.env }),
100
- });
98
+ const env = buildChildEnv({ backend: this.backend, extraEnv: spec.env });
99
+ const [file, argv] = disclaimedCommand(isNodeScript ? process.execPath : this.bin, isNodeScript ? [this.bin, ...args] : args, env);
100
+ child = nodeSpawn(file, argv, { cwd: spec.cwd, env });
101
101
  }
102
102
  catch (err) {
103
103
  const message = err instanceof Error ? err.message : String(err);
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-agent-runner.js","sourceRoot":"","sources":["../../src/core/cursor-agent-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cursor-agent-runner.js","sourceRoot":"","sources":["../../src/core/cursor-agent-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare const DISCLAIM_EXEC_FLAG = "--cez-disclaim-exec";
2
+ export interface DisclaimOptions {
3
+ /** Defaults to `process.platform`. */
4
+ platform?: NodeJS.Platform;
5
+ /** Where `CEZ_DISCLAIM_EXEC` is read from; defaults to `process.env`. */
6
+ hostEnv?: NodeJS.ProcessEnv;
7
+ }
8
+ /** `[file, args]` to spawn so `program` runs as its own responsible process when it can. */
9
+ export declare function disclaimedCommand(program: string, args: readonly string[], childEnv: NodeJS.ProcessEnv | undefined, opts?: DisclaimOptions): [string, string[]];
@@ -0,0 +1,53 @@
1
+ /**
2
+ * macOS privacy prompts name the RESPONSIBLE process, and every process the desktop app starts
3
+ * inherits the app as its responsible process. Left alone, an agent that lists `~/Documents`
4
+ * raises "Cezar would like to access files in your Documents folder" — and an Allow there hands
5
+ * every agent, forever, what one of them asked for.
6
+ *
7
+ * The desktop shell exports `CEZ_DISCLAIM_EXEC`: its own executable, which, run as
8
+ * `<exe> --cez-disclaim-exec <program> <args…>`, replaces itself (same pid, same stdio) with
9
+ * `program` as its own responsible process. Agent backends are started through it, so the prompt
10
+ * names the agent (`claude`, `codex`, …) and a grant covers that agent only. The cockpit server
11
+ * itself stays the app's — the folder picker's prompts are still Cezar's, which they should be.
12
+ *
13
+ * Anywhere else — no desktop shell, not macOS, a program that does not resolve — the command is
14
+ * returned untouched, so a missing binary still fails the spawn with the usual ENOENT and hint.
15
+ */
16
+ import { accessSync, constants, statSync } from 'node:fs';
17
+ import { delimiter, isAbsolute, join } from 'node:path';
18
+ export const DISCLAIM_EXEC_FLAG = '--cez-disclaim-exec';
19
+ /** `[file, args]` to spawn so `program` runs as its own responsible process when it can. */
20
+ export function disclaimedCommand(program, args, childEnv, opts = {}) {
21
+ const platform = opts.platform ?? process.platform;
22
+ const trampoline = (opts.hostEnv ?? process.env).CEZ_DISCLAIM_EXEC;
23
+ if (platform !== 'darwin' || !trampoline || !isExecutable(trampoline))
24
+ return [program, [...args]];
25
+ const resolved = resolveProgram(program, childEnv?.PATH ?? process.env.PATH);
26
+ if (!resolved)
27
+ return [program, [...args]];
28
+ return [trampoline, [DISCLAIM_EXEC_FLAG, resolved, ...args]];
29
+ }
30
+ function resolveProgram(program, path) {
31
+ if (program.includes('/'))
32
+ return isAbsolute(program) && isExecutable(program) ? program : null;
33
+ for (const dir of (path ?? '').split(delimiter)) {
34
+ if (!dir)
35
+ continue;
36
+ const candidate = join(dir, program);
37
+ if (isExecutable(candidate))
38
+ return candidate;
39
+ }
40
+ return null;
41
+ }
42
+ function isExecutable(path) {
43
+ try {
44
+ if (!statSync(path).isFile())
45
+ return false;
46
+ accessSync(path, constants.X_OK);
47
+ return true;
48
+ }
49
+ catch {
50
+ return false;
51
+ }
52
+ }
53
+ //# sourceMappingURL=disclaim-spawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disclaim-spawn.js","sourceRoot":"","sources":["../../src/core/disclaim-spawn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAExD,MAAM,CAAC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AASxD,4FAA4F;AAC5F,MAAM,UAAU,iBAAiB,CAC/B,OAAe,EACf,IAAuB,EACvB,QAAuC,EACvC,IAAI,GAAoB,EAAE;IAE1B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACnD,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAC;IACnE,IAAI,QAAQ,KAAK,QAAQ,IAAI,CAAC,UAAU,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;QAAE,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACnG,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7E,IAAI,CAAC,QAAQ;QAAE,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,EAAE,CAAC,kBAAkB,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,cAAc,CAAC,OAAe,EAAE,IAAwB;IAC/D,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAChG,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACrC,IAAI,YAAY,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAChD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;YAAE,OAAO,KAAK,CAAC;QAC3C,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { type ChildProcessWithoutNullStreams } from 'node:child_process';
2
+ export interface JunieAcpMessage {
3
+ id?: number | string;
4
+ method?: string;
5
+ params?: Record<string, unknown>;
6
+ result?: unknown;
7
+ error?: {
8
+ code?: number;
9
+ message?: string;
10
+ data?: unknown;
11
+ } | unknown;
12
+ }
13
+ export declare function resolveJunieExecutable(override?: string): string;
14
+ export declare function buildJunieAcpEnv(extraEnv?: Record<string, string>): NodeJS.ProcessEnv;
15
+ /**
16
+ * Spawn `junie --acp=true -p <cwd>` — the real Agent Client Protocol (ACP)
17
+ * transport the CLI documents as "for IDE integrations" (`junie --help`,
18
+ * `Acp:` section). Verified live against `@jetbrains/junie` 26.9.22: JSON-RPC
19
+ * 2.0, newline-delimited, over stdin/stdout — the same shape as
20
+ * `codex app-server`. `-p <cwd>` matches the project directory to the run's
21
+ * working directory (junie also honors `EJ_RUNNER_PWD`, set by its own shim
22
+ * from the spawning process's cwd, so `cwd` alone is sufficient here).
23
+ */
24
+ export declare function spawnJunieAcp(bin: string, cwd: string, extraEnv?: Record<string, string>): ChildProcessWithoutNullStreams;
25
+ /** Minimal newline-JSON request correlator — identical contract to
26
+ * `CodexAppServerRpc`, kept as its own type so a junie-specific error
27
+ * vocabulary (`junieErrorText`) does not leak into the codex transport. */
28
+ export declare class JunieAcpRpc {
29
+ readonly child: ChildProcessWithoutNullStreams;
30
+ private nextId;
31
+ private readonly pending;
32
+ constructor(child: ChildProcessWithoutNullStreams);
33
+ allocateId(): number;
34
+ request(method: string, params: unknown): Promise<Record<string, unknown>>;
35
+ /** `session/cancel` is a NOTIFICATION on junie's wire, not a request —
36
+ * verified live: sending it with an `id` gets "Method not supported"
37
+ * (the request dispatcher has no such method), while the bare notification
38
+ * is accepted and the in-flight `session/prompt` resolves `cancelled`. */
39
+ notify(method: string, params: unknown): void;
40
+ /** Answer a server→client request (`session/request_permission`). */
41
+ respond(message: {
42
+ id: number | string;
43
+ result?: unknown;
44
+ error?: unknown;
45
+ }): void;
46
+ dispatchResponse(message: JunieAcpMessage): boolean;
47
+ rejectPending(message?: string): void;
48
+ private write;
49
+ }
50
+ /**
51
+ * Close stdin, then escalate SIGTERM→SIGKILL for a process that ignores EOF.
52
+ * Identical shape to `endCodexAppServer` — junie's shim installs its own
53
+ * signal handlers (`128 + signal` exit), so the caller needs to know a
54
+ * non-zero exit was its own doing, not a junie failure (#703 precedent).
55
+ */
56
+ export declare function endJunieAcp(child: ChildProcessWithoutNullStreams, onTimers?: (term: NodeJS.Timeout, kill: NodeJS.Timeout | undefined) => void, onSignal?: () => void): void;
57
+ export declare function waitForJunieAcpExit(child: ChildProcessWithoutNullStreams): Promise<number | null>;
58
+ export declare function junieSpawnError(error: unknown, bin: string): Error;
@@ -0,0 +1,179 @@
1
+ import { spawn as nodeSpawn } from 'node:child_process';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { dirname, resolve as resolvePath } from 'node:path';
4
+ import { trackChildExit } from './agent-runner.js';
5
+ import { buildChildEnv } from './agent-env.js';
6
+ import { EOF_KILL_GRACE_MS, EOF_TERM_GRACE_MS, KILL_GRACE_MS } from './claude-cli-runner.js';
7
+ export function resolveJunieExecutable(override) {
8
+ if (override)
9
+ return override;
10
+ if (process.env.CEZ_JUNIE_BIN)
11
+ return process.env.CEZ_JUNIE_BIN;
12
+ // CEZ_DRY_RUN=1 swaps in the bundled mock so the cockpit / store / GUI can
13
+ // be exercised without a logged-in junie or burning tokens — same posture
14
+ // as claude/pi (#M5 review: the spec always claimed this, the wiring was
15
+ // just missing).
16
+ return process.env.CEZ_DRY_RUN === '1' ? mockJuniePath() : 'junie';
17
+ }
18
+ /** Path to the bundled mock (`scripts/mock-junie-acp.mjs`), for CEZ_DRY_RUN=1. */
19
+ function mockJuniePath() {
20
+ const here = dirname(fileURLToPath(import.meta.url));
21
+ // here = <pkg>/dist/core (built) or <pkg>/src/core (tsx dev).
22
+ return resolvePath(here, '..', '..', 'scripts', 'mock-junie-acp.mjs');
23
+ }
24
+ export function buildJunieAcpEnv(extraEnv) {
25
+ return buildChildEnv({ backend: 'junie', extraEnv });
26
+ }
27
+ /**
28
+ * Spawn `junie --acp=true -p <cwd>` — the real Agent Client Protocol (ACP)
29
+ * transport the CLI documents as "for IDE integrations" (`junie --help`,
30
+ * `Acp:` section). Verified live against `@jetbrains/junie` 26.9.22: JSON-RPC
31
+ * 2.0, newline-delimited, over stdin/stdout — the same shape as
32
+ * `codex app-server`. `-p <cwd>` matches the project directory to the run's
33
+ * working directory (junie also honors `EJ_RUNNER_PWD`, set by its own shim
34
+ * from the spawning process's cwd, so `cwd` alone is sufficient here).
35
+ */
36
+ export function spawnJunieAcp(bin, cwd, extraEnv) {
37
+ try {
38
+ return nodeSpawn(bin, ['--acp=true', '-p', cwd], {
39
+ cwd,
40
+ env: buildJunieAcpEnv(extraEnv),
41
+ });
42
+ }
43
+ catch (error) {
44
+ throw junieSpawnError(error, bin);
45
+ }
46
+ }
47
+ /** Minimal newline-JSON request correlator — identical contract to
48
+ * `CodexAppServerRpc`, kept as its own type so a junie-specific error
49
+ * vocabulary (`junieErrorText`) does not leak into the codex transport. */
50
+ export class JunieAcpRpc {
51
+ child;
52
+ nextId = 1;
53
+ pending = new Map();
54
+ constructor(child) {
55
+ this.child = child;
56
+ // A write to a child that already exited reports EPIPE as an async 'error' event, not
57
+ // a throw, so the try/catch in `write` cannot see it. Unhandled, it crashes the host —
58
+ // and `discoverJunieModels` reaches `endJunieAcp` on every provider-status probe. The
59
+ // read/exit path owns settlement.
60
+ child.stdin.on('error', () => { });
61
+ }
62
+ allocateId() {
63
+ return this.nextId++;
64
+ }
65
+ request(method, params) {
66
+ const id = this.allocateId();
67
+ const promise = new Promise((resolve, reject) => {
68
+ this.pending.set(id, { resolve, reject });
69
+ });
70
+ this.write({ jsonrpc: '2.0', id, method, params });
71
+ return promise;
72
+ }
73
+ /** `session/cancel` is a NOTIFICATION on junie's wire, not a request —
74
+ * verified live: sending it with an `id` gets "Method not supported"
75
+ * (the request dispatcher has no such method), while the bare notification
76
+ * is accepted and the in-flight `session/prompt` resolves `cancelled`. */
77
+ notify(method, params) {
78
+ this.write({ jsonrpc: '2.0', method, params });
79
+ }
80
+ /** Answer a server→client request (`session/request_permission`). */
81
+ respond(message) {
82
+ this.write({ jsonrpc: '2.0', ...message });
83
+ }
84
+ dispatchResponse(message) {
85
+ if (typeof message.id !== 'number' || (message.result === undefined && message.error === undefined))
86
+ return false;
87
+ const pending = this.pending.get(message.id);
88
+ if (!pending)
89
+ return false;
90
+ this.pending.delete(message.id);
91
+ if (message.error)
92
+ pending.reject(new Error(junieErrorText(message.error)));
93
+ else
94
+ pending.resolve(message.result ?? {});
95
+ return true;
96
+ }
97
+ rejectPending(message = 'junie exited') {
98
+ for (const request of this.pending.values())
99
+ request.reject(new Error(message));
100
+ this.pending.clear();
101
+ }
102
+ write(message) {
103
+ if (this.child.stdin.destroyed)
104
+ return;
105
+ try {
106
+ this.child.stdin.write(`${JSON.stringify(message)}\n`);
107
+ }
108
+ catch {
109
+ // The read/exit path owns settlement when stdin disappears.
110
+ }
111
+ }
112
+ }
113
+ /**
114
+ * Close stdin, then escalate SIGTERM→SIGKILL for a process that ignores EOF.
115
+ * Identical shape to `endCodexAppServer` — junie's shim installs its own
116
+ * signal handlers (`128 + signal` exit), so the caller needs to know a
117
+ * non-zero exit was its own doing, not a junie failure (#703 precedent).
118
+ */
119
+ export function endJunieAcp(child, onTimers, onSignal) {
120
+ try {
121
+ child.stdin.end();
122
+ }
123
+ catch {
124
+ // already gone
125
+ }
126
+ const hasExited = trackChildExit(child);
127
+ let killTimer;
128
+ const termTimer = setTimeout(() => {
129
+ if (!hasExited()) {
130
+ onSignal?.();
131
+ child.kill('SIGTERM');
132
+ }
133
+ killTimer = setTimeout(() => {
134
+ if (!hasExited()) {
135
+ onSignal?.();
136
+ child.kill('SIGKILL');
137
+ }
138
+ }, EOF_KILL_GRACE_MS);
139
+ killTimer.unref?.();
140
+ onTimers?.(termTimer, killTimer);
141
+ }, EOF_TERM_GRACE_MS);
142
+ termTimer.unref?.();
143
+ onTimers?.(termTimer, killTimer);
144
+ }
145
+ export function waitForJunieAcpExit(child) {
146
+ if (child.exitCode != null)
147
+ return Promise.resolve(child.exitCode);
148
+ return new Promise((resolve) => {
149
+ let done = false;
150
+ const finish = (code) => {
151
+ if (done)
152
+ return;
153
+ done = true;
154
+ clearTimeout(safety);
155
+ resolve(code);
156
+ };
157
+ child.once('close', (code) => finish(code));
158
+ child.once('exit', (code) => finish(code));
159
+ child.once('error', () => finish(child.exitCode ?? null));
160
+ const safety = setTimeout(() => finish(child.exitCode ?? null), EOF_TERM_GRACE_MS + EOF_KILL_GRACE_MS + KILL_GRACE_MS + 5_000);
161
+ safety.unref?.();
162
+ });
163
+ }
164
+ export function junieSpawnError(error, bin) {
165
+ const code = error?.code;
166
+ if (code === 'ENOENT') {
167
+ // `.code` travels with the error so callers (the provider-status probe) can tell "not
168
+ // installed" apart from any other spawn failure without parsing this message.
169
+ return Object.assign(new Error(`\`${bin}\` not found on PATH — install Junie (https://junie.jetbrains.com/cli) and run \`junie\` once to log in`), { code: 'ENOENT' });
170
+ }
171
+ return error instanceof Error ? error : new Error(String(error));
172
+ }
173
+ function junieErrorText(error) {
174
+ if (error && typeof error === 'object' && 'message' in error) {
175
+ return String(error.message);
176
+ }
177
+ return typeof error === 'string' ? error : JSON.stringify(error);
178
+ }
179
+ //# sourceMappingURL=junie-acp-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"junie-acp-transport.js","sourceRoot":"","sources":["../../src/core/junie-acp-transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { discoverJunieModels } from './junie-model-catalog.ts';
2
+ /** Verify authentication and model access through a bounded, prompt-free ACP session. */
3
+ export declare function probeJunieAuthentication(options: {
4
+ cwd: string;
5
+ bin?: string;
6
+ spawn?: Parameters<typeof discoverJunieModels>[0]['spawn'];
7
+ timeoutMs?: number;
8
+ }): Promise<{
9
+ connected: boolean;
10
+ hint?: string;
11
+ notInstalled?: boolean;
12
+ }>;
@@ -0,0 +1,30 @@
1
+ import { discoverJunieModels } from './junie-model-catalog.js';
2
+ const AUTH_CHECK_LIMIT = 300;
3
+ /** Verify authentication and model access through a bounded, prompt-free ACP session. */
4
+ export async function probeJunieAuthentication(options) {
5
+ try {
6
+ const models = await discoverJunieModels(options);
7
+ if (models.length > 0)
8
+ return { connected: true };
9
+ return { connected: false, hint: 'Junie did not return any available models.' };
10
+ }
11
+ catch (error) {
12
+ // The binary itself is missing (spawn ENOENT) — distinct from "installed but the ACP
13
+ // handshake failed", which is a genuinely unknown auth state (#M1 review).
14
+ if (error?.code === 'ENOENT') {
15
+ return { connected: false, notInstalled: true, hint: safeDiagnostic(errorMessage(error)) };
16
+ }
17
+ return { connected: false, hint: `Junie model verification failed: ${safeDiagnostic(errorMessage(error))}` };
18
+ }
19
+ }
20
+ function errorMessage(error) {
21
+ return error instanceof Error ? error.message : String(error);
22
+ }
23
+ function safeDiagnostic(value) {
24
+ return value
25
+ .replace(/\u001B\[[0-?]*[ -/]*[@-~]/g, '')
26
+ .replace(/(?:bearer\s+)[^\s,;]+/gi, 'Bearer [redacted]')
27
+ .replace(/((?:api[-_ ]?key|token|secret)\s*[:=]\s*)[^\s,;]+/gi, '$1[redacted]')
28
+ .slice(0, AUTH_CHECK_LIMIT) || 'unknown ACP error';
29
+ }
30
+ //# sourceMappingURL=junie-auth-probe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"junie-auth-probe.js","sourceRoot":"","sources":["../../src/core/junie-auth-probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,OAK9C;IACC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAClD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,4CAA4C,EAAE,CAAC;IAClF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,qFAAqF;QACrF,2EAA2E;QAC3E,IAAK,KAA2C,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC7F,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,oCAAoC,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;IAC/G,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK;SACT,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC;SACzC,OAAO,CAAC,yBAAyB,EAAE,mBAAmB,CAAC;SACvD,OAAO,CAAC,qDAAqD,EAAE,cAAc,CAAC;SAC9E,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,IAAI,mBAAmB,CAAC;AACvD,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ChildProcessWithoutNullStreams } from 'node:child_process';
2
+ import type { ModelOption } from './runner-model-catalog.ts';
3
+ export interface JunieModelDiscoveryOptions {
4
+ cwd: string;
5
+ bin?: string;
6
+ timeoutMs?: number;
7
+ spawn?: (bin: string, cwd: string) => ChildProcessWithoutNullStreams;
8
+ }
9
+ /** Discover the authenticated Junie CLI's model choices from ACP's session config options. */
10
+ export declare function discoverJunieModels(options: JunieModelDiscoveryOptions): Promise<ModelOption[]>;