@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
@@ -1,9 +1,11 @@
1
1
  /**
2
- * `cezar install | update | versions | use` — the terminal side of the managed install. No
3
- * server, no repo: only `~/.cezar` and the npm registry. The cockpit's dialog drives the same
4
- * service; this is what a headless box or a shell-only user gets.
2
+ * `cezar install | update | versions | use | link | unlink` — the terminal side of the managed
3
+ * install. No server, no repo: only `~/.cezar` and the npm registry. The cockpit's dialog drives
4
+ * the same service; this is what a headless box or a shell-only user gets.
5
5
  */
6
- import { activate, findInstalled, listInstalled } from './layout.js';
6
+ import { resolve } from 'node:path';
7
+ import { branchOf, cezarPackageRoot, discoverCheckouts } from './checkouts.js';
8
+ import { activate, activeId, findInstalled, linkCheckout, listInstalled, listLinks, removeInstalled } from './layout.js';
7
9
  import { ensurePathHook, isOnPath, writeLaunchers } from './launcher.js';
8
10
  import { installFromRegistry } from './installer.js';
9
11
  import { distTagFor, RegistryCache } from './registry.js';
@@ -18,6 +20,10 @@ export async function runSelfUpdateCommand(command, args, opts) {
18
20
  return versionsCommand();
19
21
  case 'use':
20
22
  return useCommand(args[0]);
23
+ case 'link':
24
+ return linkCommand(args[0], opts.use === true);
25
+ case 'unlink':
26
+ return unlinkCommand(args[0]);
21
27
  default:
22
28
  return 1;
23
29
  }
@@ -56,13 +62,21 @@ async function installCommand(opts) {
56
62
  async function updateCommand(opts) {
57
63
  const { service } = opts;
58
64
  const requested = opts.channel;
59
- if (requested !== undefined && requested !== 'stable' && requested !== 'nightly') {
60
- console.error(` --channel must be stable or nightly (got ${requested})`);
65
+ if (requested !== undefined && requested !== 'stable' && requested !== 'nightly' && requested !== 'development') {
66
+ console.error(` --channel must be stable, nightly or development (got ${requested})`);
61
67
  return 1;
62
68
  }
63
69
  if (requested)
64
70
  await service.setChannel(requested);
65
71
  const channel = await service.channel();
72
+ if (channel === 'development' && !opts.version) {
73
+ // Development follows no dist-tag: there is no "newest" to update to.
74
+ console.log('\n channel development — nothing to update to. Pick a build by hand:');
75
+ console.log(' cezar link [<worktree>] --use run a cezar worktree');
76
+ console.log(' cezar update --version <version> install a release or a PR preview (e.g. 0.13.0-pr1169.1234)');
77
+ console.log(' cezar update --channel stable go back to releases\n');
78
+ return 0;
79
+ }
66
80
  const status = await service.status({ refresh: true });
67
81
  if (!status.checkedAt) {
68
82
  console.error(' ✗ the npm registry did not answer — offline?');
@@ -99,12 +113,20 @@ async function updateCommand(opts) {
99
113
  async function versionsCommand() {
100
114
  const installed = listInstalled();
101
115
  if (installed.length === 0) {
102
- console.log('\n no managed versions — run: cezar install\n');
116
+ console.log('\n no managed versions — run: cezar install (or `cezar link` in a built cezar checkout)\n');
103
117
  return 0;
104
118
  }
105
119
  console.log('');
106
120
  for (const entry of installed) {
107
- console.log(` ${entry.active ? '*' : ' '} ${entry.id.padEnd(36)} ${entry.source.padEnd(9)} ${entry.installedAt.slice(0, 19).replace('T', ' ')}`);
121
+ const where = entry.source === 'link' && entry.checkout ? ` → ${entry.checkout}` : '';
122
+ console.log(` ${entry.active ? '*' : ' '} ${entry.id.padEnd(36)} ${entry.source.padEnd(9)} ${entry.installedAt.slice(0, 19).replace('T', ' ')}${where}`);
123
+ }
124
+ const unlinked = (await discoverCheckouts().catch(() => [])).filter((checkout) => !checkout.linked);
125
+ if (unlinked.length > 0) {
126
+ console.log('\n cezar worktrees (not linked yet — `cezar link <dir>` or pick one in the cockpit):');
127
+ for (const checkout of unlinked) {
128
+ console.log(` ${checkout.branch.padEnd(34)} ${checkout.built ? 'built ' : 'not built'} ${checkout.worktree}`);
129
+ }
108
130
  }
109
131
  const registry = await new RegistryCache('@open-mercato/cezar').get();
110
132
  if (registry) {
@@ -127,4 +149,49 @@ async function useCommand(id) {
127
149
  console.log(` ✓ now using ${match.id}`);
128
150
  return 0;
129
151
  }
152
+ async function linkCommand(dir, use) {
153
+ const target = resolve(dir ?? process.cwd());
154
+ const packageRoot = cezarPackageRoot(target);
155
+ if (!packageRoot) {
156
+ console.error(` ✗ ${target} is not a cezar checkout (no @open-mercato/cezar package.json there or in packages/cezar)`);
157
+ return 1;
158
+ }
159
+ try {
160
+ const branch = await branchOf(target);
161
+ const result = linkCheckout(packageRoot, branch);
162
+ console.log(`\n ✓ linked ${result.id} → ${packageRoot}`);
163
+ if (use) {
164
+ activate(result.id);
165
+ console.log(` ✓ now using ${result.id}`);
166
+ console.log(' the desktop app picks it up on its next start (Cmd+Q, reopen) — a running cockpit keeps its version');
167
+ }
168
+ else {
169
+ console.log(` switch with: cezar use ${result.id} · desktop: Cezar ▸ Versions · cockpit: the version chip`);
170
+ }
171
+ console.log(' rebuild the checkout (npm run build) and restart to run new code — the link needs no refresh\n');
172
+ return 0;
173
+ }
174
+ catch (error) {
175
+ console.error(` ✗ ${error instanceof Error ? error.message : String(error)}`);
176
+ return 1;
177
+ }
178
+ }
179
+ async function unlinkCommand(id) {
180
+ if (!id) {
181
+ console.error(' usage: cezar unlink <id> (see: cezar versions)');
182
+ return 1;
183
+ }
184
+ const match = listLinks().find((entry) => entry.id === id || entry.checkout === resolve(id));
185
+ if (!match) {
186
+ console.error(` ✗ ${id} is not a linked checkout — see: cezar versions`);
187
+ return 1;
188
+ }
189
+ if (match.id === activeId()) {
190
+ console.error(` ✗ ${match.id} is the active version — \`cezar use <another id>\` first`);
191
+ return 1;
192
+ }
193
+ removeInstalled(match.id);
194
+ console.log(` ✓ unlinked ${match.id} (${match.checkout ?? 'checkout'} is untouched)`);
195
+ return 0;
196
+ }
130
197
  //# sourceMappingURL=cli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/self-update/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/self-update/cli.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,14 @@
9
9
  * ~/.cezar/bin/cezar, cez launchers that exec `current`'s entry
10
10
  *
11
11
  * `<id>` is the version string, plus `+local` for a build installed from a checkout so it never
12
- * collides with the registry release it was cut from. Everything is under `cezarHomeDir()` so
12
+ * collides with the registry release it was cut from.
13
+ *
14
+ * A LINKED checkout (`cezar link`, source `link`) is the development variant: instead of a copy,
15
+ * `versions/<version>+<branch>/node_modules/@open-mercato/cezar` is a symlink (a junction on
16
+ * Windows) to a worktree's `packages/cezar`. Node runs the entry through its realpath, so the
17
+ * checkout's own `node_modules` resolve, and every rebuild of that worktree is live on the next
18
+ * restart. Anything that reads `current` — the launchers, the desktop shell — runs it unchanged.
19
+ * Removing a link removes the link, never the checkout. Everything is under `cezarHomeDir()` so
13
20
  * `CEZ_HOME` keeps tests off the real home. Delete the whole directory and `cezar install`
14
21
  * rebuilds it — state, never configuration.
15
22
  */
@@ -36,10 +43,13 @@ export declare function currentEntry(env?: NodeJS.ProcessEnv): string;
36
43
  declare const manifestSchema: z.ZodObject<{
37
44
  version: z.ZodString;
38
45
  source: z.ZodEnum<{
46
+ link: "link";
39
47
  local: "local";
40
48
  registry: "registry";
41
49
  }>;
42
50
  installedAt: z.ZodString;
51
+ checkout: z.ZodOptional<z.ZodString>;
52
+ branch: z.ZodOptional<z.ZodString>;
43
53
  }, z.core.$loose>;
44
54
  export type InstallManifest = z.infer<typeof manifestSchema>;
45
55
  export declare function readManifest(id: string, env?: NodeJS.ProcessEnv): InstallManifest | null;
@@ -60,6 +70,28 @@ export declare function findInstalled(target: string, env?: NodeJS.ProcessEnv):
60
70
  export declare function activeId(env?: NodeJS.ProcessEnv): string | null;
61
71
  export declare function activate(id: string, env?: NodeJS.ProcessEnv): void;
62
72
  export declare function removeInstalled(id: string, env?: NodeJS.ProcessEnv): void;
73
+ /** Build metadata for a branch name: `cez/cb28888e` → `cez-cb28888e`. */
74
+ export declare function branchSlug(branch: string): string;
75
+ /** The id a linked checkout gets: `<version>+<branch slug>` — semver build metadata, so it
76
+ * orders as its version everywhere and still reads as the branch in every version list. */
77
+ export declare function linkId(version: string, branch: string): string;
78
+ export interface LinkResult {
79
+ id: string;
80
+ version: string;
81
+ entry: string;
82
+ }
83
+ /**
84
+ * Register a built checkout's package root (the directory holding `@open-mercato/cezar`'s
85
+ * package.json and `dist/index.js`) as a version: a link, not a copy. Re-linking the same
86
+ * checkout replaces its previous entry (the version or branch may have moved since); a
87
+ * DIFFERENT checkout that would get the same id gets a path-derived suffix instead.
88
+ */
89
+ export declare function linkCheckout(packageRoot: string, branch: string, env?: NodeJS.ProcessEnv, preferredId?: string): LinkResult;
90
+ /** Every linked checkout, dangling ones included (a worktree that was removed) — `listInstalled`
91
+ * hides those, but they still need finding to be pruned or replaced. */
92
+ export declare function listLinks(env?: NodeJS.ProcessEnv): InstalledEntry[];
93
+ /** The id a checkout gets when `base` already belongs to another checkout or install. */
94
+ export declare function suffixedLinkId(base: string, packageRoot: string): string;
63
95
  /**
64
96
  * How the running entry file was installed. Decides what the dialog offers:
65
97
  * managed → `~/.cezar/versions/…` — self-update works
@@ -9,11 +9,18 @@
9
9
  * ~/.cezar/bin/cezar, cez launchers that exec `current`'s entry
10
10
  *
11
11
  * `<id>` is the version string, plus `+local` for a build installed from a checkout so it never
12
- * collides with the registry release it was cut from. Everything is under `cezarHomeDir()` so
12
+ * collides with the registry release it was cut from.
13
+ *
14
+ * A LINKED checkout (`cezar link`, source `link`) is the development variant: instead of a copy,
15
+ * `versions/<version>+<branch>/node_modules/@open-mercato/cezar` is a symlink (a junction on
16
+ * Windows) to a worktree's `packages/cezar`. Node runs the entry through its realpath, so the
17
+ * checkout's own `node_modules` resolve, and every rebuild of that worktree is live on the next
18
+ * restart. Anything that reads `current` — the launchers, the desktop shell — runs it unchanged.
19
+ * Removing a link removes the link, never the checkout. Everything is under `cezarHomeDir()` so
13
20
  * `CEZ_HOME` keeps tests off the real home. Delete the whole directory and `cezar install`
14
21
  * rebuilds it — state, never configuration.
15
22
  */
16
- import { existsSync, mkdirSync, readdirSync, readFileSync, readlinkSync, renameSync, rmdirSync, rmSync, symlinkSync, unlinkSync, writeFileSync } from 'node:fs';
23
+ import { existsSync, mkdirSync, readdirSync, readFileSync, readlinkSync, realpathSync, renameSync, rmdirSync, rmSync, symlinkSync, unlinkSync, writeFileSync } from 'node:fs';
17
24
  import { basename, dirname, join, resolve, sep } from 'node:path';
18
25
  import { z } from 'zod';
19
26
  import { cezarHomeDir } from '../paths.js';
@@ -53,8 +60,11 @@ export function currentEntry(env = process.env) {
53
60
  const manifestSchema = z
54
61
  .object({
55
62
  version: z.string(),
56
- source: z.enum(['registry', 'local']),
63
+ source: z.enum(['registry', 'local', 'link']),
57
64
  installedAt: z.string(),
65
+ /** `link` only: the linked package root (`<worktree>/packages/cezar`) and its branch. */
66
+ checkout: z.string().optional(),
67
+ branch: z.string().optional(),
58
68
  })
59
69
  .passthrough();
60
70
  export function readManifest(id, env = process.env) {
@@ -157,8 +167,97 @@ export function activate(id, env = process.env) {
157
167
  export function removeInstalled(id, env = process.env) {
158
168
  if (id === activeId(env))
159
169
  throw new Error(`version ${id} is active — switch first`);
170
+ // `rmSync` never follows symlinks, so a linked checkout loses its link, not its files.
160
171
  rmSync(versionDir(id, env), { recursive: true, force: true });
161
172
  }
173
+ /** Build metadata for a branch name: `cez/cb28888e` → `cez-cb28888e`. */
174
+ export function branchSlug(branch) {
175
+ return branch
176
+ .replace(/[^0-9A-Za-z-]+/g, '-')
177
+ .replace(/-{2,}/g, '-')
178
+ .replace(/^-+|-+$/g, '')
179
+ .slice(0, 40);
180
+ }
181
+ /** The id a linked checkout gets: `<version>+<branch slug>` — semver build metadata, so it
182
+ * orders as its version everywhere and still reads as the branch in every version list. */
183
+ export function linkId(version, branch) {
184
+ const slug = branchSlug(branch) || 'checkout';
185
+ return assertSafeId(`${version}+${slug}`);
186
+ }
187
+ /**
188
+ * Register a built checkout's package root (the directory holding `@open-mercato/cezar`'s
189
+ * package.json and `dist/index.js`) as a version: a link, not a copy. Re-linking the same
190
+ * checkout replaces its previous entry (the version or branch may have moved since); a
191
+ * DIFFERENT checkout that would get the same id gets a path-derived suffix instead.
192
+ */
193
+ export function linkCheckout(packageRoot, branch, env = process.env, preferredId) {
194
+ let root = resolve(packageRoot);
195
+ try {
196
+ root = realpathSync(root);
197
+ }
198
+ catch {
199
+ // Missing: the package.json read below says so.
200
+ }
201
+ let pkg = null;
202
+ try {
203
+ pkg = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8'));
204
+ }
205
+ catch {
206
+ pkg = null;
207
+ }
208
+ if (!pkg || pkg.name !== PACKAGE_NAME || typeof pkg.version !== 'string')
209
+ throw new Error(`${root} is not a ${PACKAGE_NAME} package`);
210
+ if (!existsSync(join(root, 'dist', 'index.js')))
211
+ throw new Error(`${root} is not built — run \`npm run build\` in the checkout first`);
212
+ const version = pkg.version;
213
+ const installed = listLinks(env);
214
+ for (const entry of installed) {
215
+ if (entry.checkout === root && entry.id !== activeId(env))
216
+ removeInstalled(entry.id, env);
217
+ }
218
+ // Discovery may already have told this checkout apart from a sibling on the same slug
219
+ // (`preferredId`, the suffixed form): link it under the id the picker showed.
220
+ const base = linkId(version, branch);
221
+ const suffixed = suffixedLinkId(base, root);
222
+ let id = preferredId === suffixed ? suffixed : base;
223
+ const clash = readManifest(id, env);
224
+ if (clash && clash.checkout !== root)
225
+ id = suffixed;
226
+ const scopeDir = join(versionDir(id, env), 'node_modules', ...PACKAGE_NAME.split('/').slice(0, -1));
227
+ const link = join(scopeDir, PACKAGE_NAME.split('/').pop());
228
+ mkdirSync(scopeDir, { recursive: true });
229
+ removeLink(link);
230
+ symlinkSync(root, link, process.platform === 'win32' ? 'junction' : 'dir');
231
+ writeManifest(id, { version, source: 'link', installedAt: new Date().toISOString(), checkout: root, branch }, env);
232
+ return { id, version, entry: versionEntry(id, env) };
233
+ }
234
+ /** Every linked checkout, dangling ones included (a worktree that was removed) — `listInstalled`
235
+ * hides those, but they still need finding to be pruned or replaced. */
236
+ export function listLinks(env = process.env) {
237
+ const dir = versionsDir(env);
238
+ if (!existsSync(dir))
239
+ return [];
240
+ const active = activeId(env);
241
+ const out = [];
242
+ for (const name of readdirSync(dir)) {
243
+ if (name === CURRENT_LINK || name.startsWith('.'))
244
+ continue;
245
+ const manifest = readManifest(name, env);
246
+ if (manifest?.source === 'link')
247
+ out.push({ ...manifest, id: name, active: name === active });
248
+ }
249
+ return out;
250
+ }
251
+ /** The id a checkout gets when `base` already belongs to another checkout or install. */
252
+ export function suffixedLinkId(base, packageRoot) {
253
+ return assertSafeId(`${base}.${shortHash(packageRoot)}`);
254
+ }
255
+ function shortHash(value) {
256
+ let hash = 5381;
257
+ for (let i = 0; i < value.length; i++)
258
+ hash = ((hash << 5) + hash + value.charCodeAt(i)) >>> 0;
259
+ return hash.toString(36).slice(0, 6);
260
+ }
162
261
  /**
163
262
  * How the running entry file was installed. Decides what the dialog offers:
164
263
  * managed → `~/.cezar/versions/…` — self-update works
@@ -1 +1 @@
1
- {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/self-update/layout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/self-update/layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * cezar's own open pull requests, for the development channel's "PR builds" picker. CI publishes
3
+ * a preview of every green same-repo PR under the npm dist-tag `pr-<N>` (spec
4
+ * 2026-07-18-npm-preview-publish) and drops the tag when the PR closes — but tags older than that
5
+ * cleanup job linger, so the tag list alone is not "open PRs". GitHub says which are open; the
6
+ * registry says which have a build.
7
+ *
8
+ * `gh` first (it carries the user's auth), the public REST API second (`GITHUB_TOKEN` when set).
9
+ * Never throws: no `gh`, offline or rate-limited is an empty list with a reason.
10
+ */
11
+ /** The repository cezar's own releases and previews are cut from. */
12
+ export declare const CEZAR_REPO = "open-mercato/cezar";
13
+ export interface OpenPull {
14
+ number: number;
15
+ title: string;
16
+ author: string | null;
17
+ branch: string;
18
+ draft: boolean;
19
+ updatedAt: string;
20
+ url: string;
21
+ }
22
+ export interface OpenPulls {
23
+ available: boolean;
24
+ reason?: string;
25
+ items: OpenPull[];
26
+ }
27
+ export declare function fetchOpenPulls(repo: string, opts?: {
28
+ env?: NodeJS.ProcessEnv;
29
+ fetchImpl?: typeof fetch;
30
+ gh?: (repo: string) => Promise<OpenPull[]>;
31
+ }): Promise<OpenPulls>;
32
+ /** A short-lived memo, so reopening the dialog does not cost a GitHub round trip each time. */
33
+ export declare class OpenPullsCache {
34
+ private readonly load;
35
+ private value;
36
+ private at;
37
+ private inFlight;
38
+ constructor(load: () => Promise<OpenPulls>);
39
+ get(refresh?: boolean): Promise<OpenPulls>;
40
+ }
@@ -0,0 +1,127 @@
1
+ /**
2
+ * cezar's own open pull requests, for the development channel's "PR builds" picker. CI publishes
3
+ * a preview of every green same-repo PR under the npm dist-tag `pr-<N>` (spec
4
+ * 2026-07-18-npm-preview-publish) and drops the tag when the PR closes — but tags older than that
5
+ * cleanup job linger, so the tag list alone is not "open PRs". GitHub says which are open; the
6
+ * registry says which have a build.
7
+ *
8
+ * `gh` first (it carries the user's auth), the public REST API second (`GITHUB_TOKEN` when set).
9
+ * Never throws: no `gh`, offline or rate-limited is an empty list with a reason.
10
+ */
11
+ import { execFile } from 'node:child_process';
12
+ import { promisify } from 'node:util';
13
+ import { z } from 'zod';
14
+ const exec = promisify(execFile);
15
+ /** The repository cezar's own releases and previews are cut from. */
16
+ export const CEZAR_REPO = 'open-mercato/cezar';
17
+ const TIMEOUT_MS = 15_000;
18
+ const CACHE_TTL_MS = 2 * 60_000;
19
+ const LIMIT = 100;
20
+ const ghRowSchema = z.object({
21
+ number: z.number().int(),
22
+ title: z.string(),
23
+ author: z.object({ login: z.string() }).nullish(),
24
+ headRefName: z.string(),
25
+ isDraft: z.boolean().catch(false),
26
+ updatedAt: z.string(),
27
+ url: z.string(),
28
+ });
29
+ const restRowSchema = z.object({
30
+ number: z.number().int(),
31
+ title: z.string(),
32
+ user: z.object({ login: z.string() }).nullish(),
33
+ head: z.object({ ref: z.string() }),
34
+ draft: z.boolean().catch(false),
35
+ updated_at: z.string(),
36
+ html_url: z.string(),
37
+ });
38
+ async function viaGh(repo) {
39
+ const { stdout } = await exec('gh', ['pr', 'list', '--repo', repo, '--state', 'open', '--limit', String(LIMIT), '--json', 'number,title,author,headRefName,isDraft,updatedAt,url'], { timeout: TIMEOUT_MS, maxBuffer: 8 * 1024 * 1024 });
40
+ return z
41
+ .array(ghRowSchema)
42
+ .parse(JSON.parse(stdout))
43
+ .map((row) => ({
44
+ number: row.number,
45
+ title: row.title,
46
+ author: row.author?.login ?? null,
47
+ branch: row.headRefName,
48
+ draft: row.isDraft,
49
+ updatedAt: row.updatedAt,
50
+ url: row.url,
51
+ }));
52
+ }
53
+ async function viaRest(repo, env, fetchImpl) {
54
+ const headers = { accept: 'application/vnd.github+json' };
55
+ if (env.GITHUB_TOKEN)
56
+ headers.authorization = `Bearer ${env.GITHUB_TOKEN}`;
57
+ const res = await fetchImpl(`https://api.github.com/repos/${repo}/pulls?state=open&per_page=${LIMIT}&sort=updated&direction=desc`, {
58
+ headers,
59
+ signal: AbortSignal.timeout(TIMEOUT_MS),
60
+ });
61
+ if (!res.ok)
62
+ throw new Error(`GitHub answered ${res.status}`);
63
+ return z
64
+ .array(restRowSchema)
65
+ .parse(await res.json())
66
+ .map((row) => ({
67
+ number: row.number,
68
+ title: row.title,
69
+ author: row.user?.login ?? null,
70
+ branch: row.head.ref,
71
+ draft: row.draft,
72
+ updatedAt: row.updated_at,
73
+ url: row.html_url,
74
+ }));
75
+ }
76
+ export async function fetchOpenPulls(repo, opts = {}) {
77
+ const env = opts.env ?? process.env;
78
+ if (env.CEZ_DRY_RUN === '1')
79
+ return { available: false, reason: 'Dry run: GitHub is not asked.', items: [] };
80
+ let ghError;
81
+ try {
82
+ return { available: true, items: sortByUpdated(await (opts.gh ?? viaGh)(repo)) };
83
+ }
84
+ catch (error) {
85
+ ghError = error instanceof Error ? error.message.split('\n')[0] : String(error);
86
+ }
87
+ try {
88
+ return { available: true, items: sortByUpdated(await viaRest(repo, env, opts.fetchImpl ?? fetch)) };
89
+ }
90
+ catch (error) {
91
+ const rest = error instanceof Error ? error.message : String(error);
92
+ return { available: false, reason: `Could not list pull requests (gh: ${ghError}; GitHub API: ${rest}).`, items: [] };
93
+ }
94
+ }
95
+ function sortByUpdated(items) {
96
+ return [...items].sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
97
+ }
98
+ /** A short-lived memo, so reopening the dialog does not cost a GitHub round trip each time. */
99
+ export class OpenPullsCache {
100
+ load;
101
+ value = null;
102
+ at = 0;
103
+ inFlight = null;
104
+ constructor(load) {
105
+ this.load = load;
106
+ }
107
+ async get(refresh = false) {
108
+ if (!refresh && this.value && Date.now() - this.at < CACHE_TTL_MS)
109
+ return this.value;
110
+ if (this.inFlight)
111
+ return this.inFlight;
112
+ this.inFlight = this.load()
113
+ .then((value) => {
114
+ // Keep the last good list over a failed refresh.
115
+ if (value.available || !this.value) {
116
+ this.value = value;
117
+ this.at = Date.now();
118
+ }
119
+ return this.value;
120
+ })
121
+ .finally(() => {
122
+ this.inFlight = null;
123
+ });
124
+ return this.inFlight;
125
+ }
126
+ }
127
+ //# sourceMappingURL=pulls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pulls.js","sourceRoot":"","sources":["../../src/self-update/pulls.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,10 @@
4
4
  * a process runs at a time. Applying an update = install (npm) → activate (`current` link) →
5
5
  * restart (re-exec, or exit for a supervisor to relaunch — see `restart.ts`).
6
6
  */
7
- import type { SelfUpdateJob, SelfUpdateStatus, UpdateChannel } from '../contract/index.js';
7
+ import type { SelfUpdateDevelopment, SelfUpdateJob, SelfUpdateStatus, UpdateChannel } from '../contract/index.js';
8
+ import { buildCheckout } from './checkouts.ts';
8
9
  import { type InstallKind } from './layout.ts';
10
+ import { type OpenPulls } from './pulls.ts';
9
11
  import { RegistryCache } from './registry.ts';
10
12
  export interface SelfUpdateDeps {
11
13
  pkgName: string;
@@ -24,6 +26,10 @@ export interface SelfUpdateDeps {
24
26
  readOnly?: boolean;
25
27
  env?: NodeJS.ProcessEnv;
26
28
  registry?: RegistryCache;
29
+ /** cezar's open pull requests, for the development channel. Defaults to GitHub. */
30
+ pulls?: () => Promise<OpenPulls>;
31
+ /** Builds an unbuilt or stale checkout before it is linked. Defaults to npm in the worktree. */
32
+ buildCheckout?: typeof buildCheckout;
27
33
  }
28
34
  export declare class SelfUpdateBusyError extends Error {
29
35
  constructor();
@@ -34,6 +40,7 @@ export declare class SelfUpdateService {
34
40
  private readonly registry;
35
41
  private readonly env;
36
42
  private job;
43
+ private readonly pulls;
37
44
  constructor(deps: SelfUpdateDeps);
38
45
  /** The configured channel: workspace config wins, then `CEZ_UPDATE_CHANNEL`, then stable. */
39
46
  channel(): Promise<UpdateChannel>;
@@ -46,6 +53,15 @@ export declare class SelfUpdateService {
46
53
  status(opts?: {
47
54
  refresh?: boolean;
48
55
  }): Promise<SelfUpdateStatus>;
56
+ /**
57
+ * What the development channel picks from: cezar's own worktrees and the open pull requests
58
+ * with a published preview build. Worktrees only on a local cockpit — linking a checkout runs
59
+ * whatever is in it, a local-machine gesture a hosted cockpit neither offers nor accepts (see
60
+ * `linkDiscovered`), and never worth a git call there.
61
+ */
62
+ development(opts?: {
63
+ refresh?: boolean;
64
+ }): Promise<SelfUpdateDevelopment>;
49
65
  /**
50
66
  * Whether a HOSTED cockpit may apply `target` — hosted updates are forward-only, and "forward"
51
67
  * has to mean forward in TIME, not merely in semver order. cezar's nightlies are versioned
@@ -64,10 +80,17 @@ export declare class SelfUpdateService {
64
80
  reason?: string;
65
81
  };
66
82
  /**
67
- * Install `target` (a registry version, or an already-installed id such as `0.11.1+local`),
68
- * activate it and restart. Returns as soon as the job is started; progress is on `status()`.
83
+ * Install `target` (a registry version, an already-installed id such as `0.11.1+local`, or the
84
+ * id of a built cezar checkout `status()` lists — linked on the spot), activate it and restart.
85
+ * Returns as soon as the job is started; progress is on `status()`.
69
86
  */
70
87
  apply(target: string): SelfUpdateJob;
88
+ /** A checkout `status()` offers under `target`: build it when it is unbuilt or older than its
89
+ * last commit, link it and return its id. Null when no checkout answers to that id — the
90
+ * target is then an installed entry or a registry version. A hosted cockpit never builds or
91
+ * links here (`trimPaths`); at most it activates a link the host itself created, and only one
92
+ * `forwardOnlyRefusal` lets through. */
93
+ private linkDiscovered;
71
94
  /** `cezar install` from a checkout or the npx cache: pack the running package into the managed
72
95
  * layout and activate it. Headless — the CLI prints the log. */
73
96
  installSelf(onLog: (line: string) => void): Promise<{