@open-mercato/cezar 0.9.3 → 0.10.0-pr892.1298

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 (253) hide show
  1. package/README.md +165 -36
  2. package/dist/agent-config/account-identity.d.ts +44 -0
  3. package/dist/agent-config/account-identity.js +128 -0
  4. package/dist/agent-config/account-identity.js.map +1 -0
  5. package/dist/agent-config/catalog.d.ts +8 -0
  6. package/dist/agent-config/catalog.js +18 -0
  7. package/dist/agent-config/catalog.js.map +1 -1
  8. package/dist/agent-config/model-settings/claude.d.ts +2 -0
  9. package/dist/agent-config/model-settings/claude.js +11 -0
  10. package/dist/agent-config/model-settings/claude.js.map +1 -0
  11. package/dist/agent-config/model-settings/codex.d.ts +2 -0
  12. package/dist/agent-config/model-settings/codex.js +16 -0
  13. package/dist/agent-config/model-settings/codex.js.map +1 -0
  14. package/dist/agent-config/model-settings/opencode.d.ts +2 -0
  15. package/dist/agent-config/model-settings/opencode.js +8 -0
  16. package/dist/agent-config/model-settings/opencode.js.map +1 -0
  17. package/dist/agent-config/model-settings/pi.d.ts +12 -0
  18. package/dist/agent-config/model-settings/pi.js +18 -0
  19. package/dist/agent-config/model-settings/pi.js.map +1 -0
  20. package/dist/agent-config/model-settings/shared.d.ts +9 -0
  21. package/dist/agent-config/model-settings/shared.js +93 -0
  22. package/dist/agent-config/model-settings/shared.js.map +1 -0
  23. package/dist/agent-config/model-settings/types.d.ts +9 -0
  24. package/dist/agent-config/model-settings/types.js +2 -0
  25. package/dist/agent-config/model-settings/types.js.map +1 -0
  26. package/dist/agent-config/models.d.ts +9 -0
  27. package/dist/agent-config/models.js +32 -0
  28. package/dist/agent-config/models.js.map +1 -0
  29. package/dist/agent-config/service.js +4 -4
  30. package/dist/agent-config/service.js.map +1 -1
  31. package/dist/automations/types.d.ts +4 -0
  32. package/dist/automations/types.js +2 -1
  33. package/dist/automations/types.js.map +1 -1
  34. package/dist/config.d.ts +10 -1
  35. package/dist/config.js +48 -5
  36. package/dist/config.js.map +1 -1
  37. package/dist/contract/agent-config.d.ts +2 -0
  38. package/dist/contract/agent-profiles.d.ts +347 -0
  39. package/dist/contract/automations.d.ts +24 -0
  40. package/dist/contract/events.d.ts +59 -0
  41. package/dist/contract/github.d.ts +88 -0
  42. package/dist/contract/health.d.ts +5 -1
  43. package/dist/contract/index.d.ts +1 -0
  44. package/dist/contract/index.js +981 -544
  45. package/dist/contract/projects.d.ts +33 -5
  46. package/dist/contract/runs.d.ts +247 -0
  47. package/dist/contract/skills.d.ts +7 -0
  48. package/dist/contract/workflows.d.ts +6 -0
  49. package/dist/contract/workspace.d.ts +137 -2
  50. package/dist/core/agent-env.js +41 -16
  51. package/dist/core/agent-env.js.map +1 -1
  52. package/dist/core/agent-model-policy.d.ts +10 -0
  53. package/dist/core/agent-model-policy.js +36 -0
  54. package/dist/core/agent-model-policy.js.map +1 -0
  55. package/dist/core/agent-profiles.d.ts +62 -0
  56. package/dist/core/agent-profiles.js +90 -0
  57. package/dist/core/agent-profiles.js.map +1 -0
  58. package/dist/core/agent-runner.d.ts +37 -6
  59. package/dist/core/agent-runner.js +35 -3
  60. package/dist/core/agent-runner.js.map +1 -1
  61. package/dist/core/backend-detect.d.ts +5 -5
  62. package/dist/core/backend-detect.js +44 -7
  63. package/dist/core/backend-detect.js.map +1 -1
  64. package/dist/core/claude-cli-runner.js +10 -5
  65. package/dist/core/claude-cli-runner.js.map +1 -1
  66. package/dist/core/codex-app-server-runner.js +13 -3
  67. package/dist/core/codex-app-server-runner.js.map +1 -1
  68. package/dist/core/codex-app-server-transport.js +7 -2
  69. package/dist/core/codex-app-server-transport.js.map +1 -1
  70. package/dist/core/model-identity.d.ts +23 -11
  71. package/dist/core/model-identity.js +41 -24
  72. package/dist/core/model-identity.js.map +1 -1
  73. package/dist/core/model-presets.d.ts +8 -2
  74. package/dist/core/model-presets.js +51 -8
  75. package/dist/core/model-presets.js.map +1 -1
  76. package/dist/core/opencode-model-catalog.d.ts +32 -0
  77. package/dist/core/opencode-model-catalog.js +153 -0
  78. package/dist/core/opencode-model-catalog.js.map +1 -0
  79. package/dist/core/opencode-server-runner.d.ts +2 -0
  80. package/dist/core/opencode-server-runner.js +42 -11
  81. package/dist/core/opencode-server-runner.js.map +1 -1
  82. package/dist/core/pi-runner.d.ts +24 -0
  83. package/dist/core/pi-runner.js +349 -0
  84. package/dist/core/pi-runner.js.map +1 -0
  85. package/dist/core/pi-ui-mapper.d.ts +34 -0
  86. package/dist/core/pi-ui-mapper.js +270 -0
  87. package/dist/core/pi-ui-mapper.js.map +1 -0
  88. package/dist/core/provider-auth.d.ts +95 -3
  89. package/dist/core/provider-auth.js +234 -15
  90. package/dist/core/provider-auth.js.map +1 -1
  91. package/dist/core/provider-availability.d.ts +1 -1
  92. package/dist/core/provider-availability.js +2 -1
  93. package/dist/core/provider-availability.js.map +1 -1
  94. package/dist/core/runner-factory.js +3 -0
  95. package/dist/core/runner-factory.js.map +1 -1
  96. package/dist/core/shell-env.d.ts +28 -0
  97. package/dist/core/shell-env.js +56 -0
  98. package/dist/core/shell-env.js.map +1 -0
  99. package/dist/core/ui-events.d.ts +1 -1
  100. package/dist/core/usage-limit.d.ts +42 -0
  101. package/dist/core/usage-limit.js +209 -0
  102. package/dist/core/usage-limit.js.map +1 -0
  103. package/dist/index.js +3 -2
  104. package/dist/index.js.map +1 -1
  105. package/dist/paths.d.ts +53 -5
  106. package/dist/paths.js +63 -9
  107. package/dist/paths.js.map +1 -1
  108. package/dist/planner.js +6 -0
  109. package/dist/planner.js.map +1 -1
  110. package/dist/release/snapshot.d.ts +13 -2
  111. package/dist/release/snapshot.js +25 -1
  112. package/dist/release/snapshot.js.map +1 -1
  113. package/dist/runs/agent-tmpdir.d.ts +41 -0
  114. package/dist/runs/agent-tmpdir.js +183 -0
  115. package/dist/runs/agent-tmpdir.js.map +1 -0
  116. package/dist/runs/auto-name.js +6 -1
  117. package/dist/runs/auto-name.js.map +1 -1
  118. package/dist/runs/event-history.d.ts +50 -0
  119. package/dist/runs/event-history.js +613 -0
  120. package/dist/runs/event-history.js.map +1 -0
  121. package/dist/runs/run-index.d.ts +19 -0
  122. package/dist/runs/run-index.js +43 -0
  123. package/dist/runs/run-index.js.map +1 -0
  124. package/dist/runs/store.d.ts +78 -19
  125. package/dist/runs/store.js +175 -43
  126. package/dist/runs/store.js.map +1 -1
  127. package/dist/server/forge/github.d.ts +169 -0
  128. package/dist/server/forge/github.js +511 -0
  129. package/dist/server/forge/github.js.map +1 -1
  130. package/dist/server/forge/index.d.ts +9 -0
  131. package/dist/server/forge/index.js +14 -0
  132. package/dist/server/forge/index.js.map +1 -1
  133. package/dist/server/github.d.ts +2 -2
  134. package/dist/server/github.js +1 -1
  135. package/dist/server/github.js.map +1 -1
  136. package/dist/server/open-in-app.d.ts +2 -1
  137. package/dist/server/open-in-app.js +3 -1
  138. package/dist/server/open-in-app.js.map +1 -1
  139. package/dist/server/open-in-terminal.d.ts +46 -1
  140. package/dist/server/open-in-terminal.js +72 -13
  141. package/dist/server/open-in-terminal.js.map +1 -1
  142. package/dist/server/provider-action-gate.js +3 -1
  143. package/dist/server/provider-action-gate.js.map +1 -1
  144. package/dist/server/server.d.ts +2199 -428
  145. package/dist/server/server.js +1171 -139
  146. package/dist/server/server.js.map +1 -1
  147. package/dist/server-install/engine.js +5 -18
  148. package/dist/server-install/engine.js.map +1 -1
  149. package/dist/server-install/steps.js +6 -2
  150. package/dist/server-install/steps.js.map +1 -1
  151. package/dist/skills.js +4 -0
  152. package/dist/skills.js.map +1 -1
  153. package/dist/workflows/run.d.ts +202 -2
  154. package/dist/workflows/run.js +782 -115
  155. package/dist/workflows/run.js.map +1 -1
  156. package/dist/workflows/types.d.ts +3 -0
  157. package/dist/workflows/types.js +11 -2
  158. package/dist/workflows/types.js.map +1 -1
  159. package/dist/workspace/agent-accounts.d.ts +153 -0
  160. package/dist/workspace/agent-accounts.js +304 -0
  161. package/dist/workspace/agent-accounts.js.map +1 -0
  162. package/dist/workspace/agent-profiles.d.ts +78 -0
  163. package/dist/workspace/agent-profiles.js +115 -0
  164. package/dist/workspace/agent-profiles.js.map +1 -0
  165. package/dist/workspace/config.d.ts +19 -1
  166. package/dist/workspace/config.js +56 -2
  167. package/dist/workspace/config.js.map +1 -1
  168. package/dist/workspace/projects-cli.js +54 -4
  169. package/dist/workspace/projects-cli.js.map +1 -1
  170. package/dist/workspace/projects.d.ts +19 -1
  171. package/dist/workspace/projects.js +34 -1
  172. package/dist/workspace/projects.js.map +1 -1
  173. package/dist/workspace/semaphore.d.ts +39 -0
  174. package/dist/workspace/semaphore.js +31 -0
  175. package/dist/workspace/semaphore.js.map +1 -1
  176. package/package.json +3 -3
  177. package/scripts/mock-claude.mjs +20 -0
  178. package/scripts/mock-pi-rpc.mjs +83 -0
  179. package/web/dist/assets/{alert-dialog-V9cigyAO.js → alert-dialog-Byp42_IG.js} +1 -1
  180. package/web/dist/assets/arrow-down-CGDbDYKD.js +1 -0
  181. package/web/dist/assets/arrow-left-ESCjr1Hq.js +1 -0
  182. package/web/dist/assets/centered-state-LfAW-igm.js +43 -0
  183. package/web/dist/assets/chevron-right-Du-P1IUd.js +1 -0
  184. package/web/dist/assets/{collapsible-BlF-7CeC.js → collapsible-CBiiqDJM.js} +1 -1
  185. package/web/dist/assets/{commit-list-D2mKElUx.js → commit-list-6PPve7PE.js} +1 -1
  186. package/web/dist/assets/{compare-variants-CFBY16Rc.js → compare-variants-BDnp6mXJ.js} +1 -1
  187. package/web/dist/assets/{diff-DE6u5dTe.js → diff-_jK0OWpF.js} +2 -2
  188. package/web/dist/assets/{diff-stat-B1j6L7C6.js → diff-stat-CIrTu4Ym.js} +1 -1
  189. package/web/dist/assets/{diff-view-Gb2kk3Le.js → diff-view-COA_5IyY.js} +1 -1
  190. package/web/dist/assets/dropdown-menu-BofYpFFw.js +1 -0
  191. package/web/dist/assets/editable-title-_J0zFDl-.js +1 -0
  192. package/web/dist/assets/{ellipsis-vertical-BbxtXb6s.js → ellipsis-vertical-BeMR-l62.js} +1 -1
  193. package/web/dist/assets/{file-j5O4NryU.js → file-DY996Pee.js} +1 -1
  194. package/web/dist/assets/{folder-w9Lwj9x9.js → folder-NO3Ec-TY.js} +1 -1
  195. package/web/dist/assets/git-toolbar-BqJeUWcD.js +1 -0
  196. package/web/dist/assets/github-C96HPV9E.js +1 -0
  197. package/web/dist/assets/{image-preview-CcFdkZXW.js → image-preview-D9cCDfKQ.js} +1 -1
  198. package/web/dist/assets/index-Bx-grqa9.css +2 -0
  199. package/web/dist/assets/index-DoVvGDfW.js +7 -0
  200. package/web/dist/assets/{markdown-q9lm7kQ2.js → markdown-DDzk11zj.js} +1 -1
  201. package/web/dist/assets/new-task-form-BNLLgC6P.js +1 -0
  202. package/web/dist/assets/pill-CVM1EmV4.js +1 -0
  203. package/web/dist/assets/{project-router-DudOmkHf.js → project-router-LRCtP48W.js} +1 -1
  204. package/web/dist/assets/prompt-templates-DFOvYgtW.js +15 -0
  205. package/web/dist/assets/{refresh-cw-_C2EGJK5.js → refresh-cw-D1ys6QY2.js} +1 -1
  206. package/web/dist/assets/repo-git-CzUnsgWY.js +1 -0
  207. package/web/dist/assets/{run-diff-BLoKEnTx.js → run-diff-BlnqwfSS.js} +2 -2
  208. package/web/dist/assets/run-header-Bn7cN0Z1.js +1 -0
  209. package/web/dist/assets/{search-x-BgxaJgro.js → search-x-D6FSpxId.js} +1 -1
  210. package/web/dist/assets/{skill-empty-hint-D5MOmycv.js → skill-empty-hint-iwpCcqgI.js} +1 -1
  211. package/web/dist/assets/skills-CezbOaol.js +1 -0
  212. package/web/dist/assets/{sparkles-ANSka5bH.js → sparkles-MrQrgCI9.js} +1 -1
  213. package/web/dist/assets/{square-terminal-qojq20cH.js → square-terminal-TTH64lO7.js} +1 -1
  214. package/web/dist/assets/tab-link-FYksz037.js +1 -0
  215. package/web/dist/assets/task-changes-ClWlnzBL.js +1 -0
  216. package/web/dist/assets/{task-commits-yXmDrCoE.js → task-commits-Crbrl86b.js} +1 -1
  217. package/web/dist/assets/{task-files-BDRmCCPN.js → task-files-uSCWyD0-.js} +2 -2
  218. package/web/dist/assets/task-thread-DPmamBA1.js +9 -0
  219. package/web/dist/assets/{textarea-DVO7pg8Y.js → textarea-B9Ahj4E4.js} +1 -1
  220. package/web/dist/assets/thread-loading-BH_ypQoy.js +1 -0
  221. package/web/dist/assets/{trash-2-DKcnmg6e.js → trash-2-D8S3V3fu.js} +1 -1
  222. package/web/dist/assets/{triangle-alert-CPUEVSZ3.js → triangle-alert-bB7p9n5E.js} +1 -1
  223. package/web/dist/assets/{upload-D5Jrq7QK.js → upload-Bd5oRLPV.js} +1 -1
  224. package/web/dist/assets/{use-desktop-CXae6uyk.js → use-desktop-BNvbRBeZ.js} +1 -1
  225. package/web/dist/assets/{use-submit-shortcut-RKJLKdsW.js → use-submit-shortcut-B-xhu4Bf.js} +1 -1
  226. package/web/dist/assets/utils-BhpbVMwN.js +64 -0
  227. package/web/dist/assets/{workflows-CGyTdyds.js → workflows-RmfbM9Vy.js} +3 -3
  228. package/web/dist/assets/{zoomable-image-hcqwUIlQ.js → zoomable-image-BCW6ZBV0.js} +1 -1
  229. package/web/dist/index.html +24 -23
  230. package/web/dist/assets/arrow-down-DflHdNlN.js +0 -1
  231. package/web/dist/assets/arrow-left-IIL4uR-C.js +0 -1
  232. package/web/dist/assets/centered-state-BkAJVLJE.js +0 -43
  233. package/web/dist/assets/chevron-right-CxAoD1eD.js +0 -1
  234. package/web/dist/assets/circle-check-CdwcIbkx.js +0 -1
  235. package/web/dist/assets/circle-x-Cnc43xJ2.js +0 -1
  236. package/web/dist/assets/dropdown-menu-Ns-rY6sm.js +0 -1
  237. package/web/dist/assets/editable-title-BGuiDxFT.js +0 -1
  238. package/web/dist/assets/git-pull-request-DlSop3Ch.js +0 -1
  239. package/web/dist/assets/git-toolbar-BdJ8XSxI.js +0 -1
  240. package/web/dist/assets/github-CCLn2OAU.js +0 -1
  241. package/web/dist/assets/index-BmHHLbwc.js +0 -6
  242. package/web/dist/assets/index-u8OAnq0r.css +0 -2
  243. package/web/dist/assets/new-task-form-BuYxAWN7.js +0 -1
  244. package/web/dist/assets/pill-t97MvPW_.js +0 -1
  245. package/web/dist/assets/prompt-templates-C5iO3Lda.js +0 -15
  246. package/web/dist/assets/repo-git-DqQzj33d.js +0 -1
  247. package/web/dist/assets/run-header-Dho4eurS.js +0 -1
  248. package/web/dist/assets/skills-B5g064CC.js +0 -1
  249. package/web/dist/assets/tab-link-CIcwFJtC.js +0 -1
  250. package/web/dist/assets/task-changes-yRfsEsnh.js +0 -1
  251. package/web/dist/assets/task-thread-C9AnIz4Z.js +0 -9
  252. package/web/dist/assets/thread-loading-DJDl701Z.js +0 -1
  253. package/web/dist/assets/utils-Wtkd5E6j.js +0 -64
@@ -1,8 +1,62 @@
1
1
  import { execFile } from 'node:child_process';
2
2
  import { randomUUID } from 'node:crypto';
3
- export const PROVIDER_IDS = ['claude', 'codex', 'opencode'];
3
+ import { AGENT_MODELS_LOCKED_ENV } from './agent-model-policy.js';
4
+ import { profileEnv } from './agent-profiles.js';
5
+ import { withEnvPrefix } from './shell-env.js';
6
+ export const PROVIDER_IDS = ['claude', 'codex', 'opencode', 'pi'];
7
+ /**
8
+ * The explicit environment lock delegates model and credential configuration
9
+ * to each native coding agent. In that mode Cezar must not second-guess the
10
+ * agent's own credentials through the provider checks introduced by #652.
11
+ *
12
+ * Config-file model locks intentionally do not disable the checks: this bypass
13
+ * is an operator-level process policy and only the exact documented `1` opts in.
14
+ */
15
+ export function providerAuthChecksDisabled(env = process.env) {
16
+ return env[AGENT_MODELS_LOCKED_ENV] === '1';
17
+ }
4
18
  const COMMAND_TIMEOUT_MS = 10_000;
5
- const CACHE_TTL_MS = 5_000;
19
+ /**
20
+ * How long a probe result stands before it is re-checked — deliberately ASYMMETRIC.
21
+ *
22
+ * Which login an agent is signed into is operating knowledge: it matters for every run, and it
23
+ * changes only when someone runs `claude auth login`. Re-probing it every few seconds cost a CLI
24
+ * shell-out per provider and per account on every page load, for an answer that had almost
25
+ * certainly not changed. So a CONNECTED answer is kept for minutes.
26
+ *
27
+ * A NOT-CONNECTED answer is re-checked sooner, for ONE reason: display self-healing. If you log in
28
+ * from a terminal, cezar cannot see it happen, so a card that says "disconnected" must eventually
29
+ * find out on its own. The window is a minute rather than seconds because reading is now
30
+ * stale-while-revalidate (see `status`): every expiry costs a background probe, and a cockpit
31
+ * polling this endpoint would turn a five-second window into a spawn every five seconds, forever,
32
+ * on any machine where one provider is logged out — which is most of them.
33
+ *
34
+ * What this window is NOT is a correctness mechanism for starting runs. `provider-action-gate.ts`
35
+ * refuses to start a run against a provider it believes disconnected, and it re-verifies before it
36
+ * refuses (`providerActionError` in `server.ts`) rather than trusting an aging negative. That
37
+ * inversion is what makes a long window safe here: the only reader that must not be wrong pays for
38
+ * its own certainty, on the rare path where it is about to say no.
39
+ *
40
+ * A stale CONNECTED answer needs no window at all: the run starts, and a credential that really has
41
+ * gone bad surfaces as a runtime auth failure, which is latched and overrides this cache on the spot
42
+ * (`withRuntimeFailures`).
43
+ *
44
+ * Anything cezar CAN observe invalidates explicitly instead of waiting for either window: opening a
45
+ * login (`POST /providers/connect`), repointing or removing an account (`forgetProfileStatus`), and
46
+ * a runtime rejection.
47
+ */
48
+ const CONNECTED_TTL_MS = 10 * 60_000;
49
+ const UNSETTLED_TTL_MS = 60_000;
50
+ /** The lifetime for a set of rows: minutes only when EVERY row is connected. A mixed answer takes
51
+ * the short window, because the not-connected row in it is the one that might self-heal.
52
+ *
53
+ * KNOWN COARSENESS: the window applies to the whole three-provider response, so one logged-out
54
+ * provider drags the two connected ones into re-probing with it. That is wasted work rather than a
55
+ * wrong answer, and it is now paid in the background; fixing it properly means per-provider
56
+ * timestamps and merging partial probe results. */
57
+ function cacheTtlFor(rows) {
58
+ return rows.every((row) => row.status === 'connected') ? CONNECTED_TTL_MS : UNSETTLED_TTL_MS;
59
+ }
6
60
  const UNKNOWN_HINT = 'Authentication could not be verified. Try again.';
7
61
  const TIMEOUT_HINT = 'Authentication check timed out. Try again.';
8
62
  const RUNTIME_AUTH_HINT = 'Authentication was rejected during a run. Reconnect, then try again.';
@@ -103,6 +157,19 @@ function parseOpenCodeStatus(result) {
103
157
  return null;
104
158
  return storedCount > 0 || environmentCount > 0 ? 'connected' : 'disconnected';
105
159
  }
160
+ function parsePiStatus(result) {
161
+ if (result.exitCode !== 0)
162
+ return null;
163
+ const lines = normalizedLines(result.stdout);
164
+ if (lines.some((line) => /^provider\s+model\s+context\s+max-out\s+thinking\s+images$/.test(line))) {
165
+ return 'connected';
166
+ }
167
+ if (lines.some((line) => line.includes('no models available'))
168
+ && lines.some((line) => line.includes('/login'))) {
169
+ return 'disconnected';
170
+ }
171
+ return null;
172
+ }
106
173
  const DESCRIPTORS = [
107
174
  {
108
175
  id: 'claude',
@@ -128,10 +195,26 @@ const DESCRIPTORS = [
128
195
  installHint: 'Install OpenCode, then run `opencode auth login`.',
129
196
  parse: parseOpenCodeStatus,
130
197
  },
198
+ {
199
+ id: 'pi',
200
+ executable: () => process.env.CEZ_PI_BIN ?? 'pi',
201
+ statusArgs: ['--list-models'],
202
+ loginArgs: ['/login'],
203
+ installHint: 'Install pi, then run `pi /login`.',
204
+ parse: parsePiStatus,
205
+ },
131
206
  ];
132
- function defaultRunProviderCommand(executable, args, timeoutMs) {
207
+ function defaultRunProviderCommand(executable, args, timeoutMs, env) {
133
208
  return new Promise((resolve) => {
134
- execFile(executable, args, { timeout: timeoutMs, windowsHide: true, maxBuffer: 256 * 1024 }, (error, stdout, stderr) => {
209
+ execFile(executable, args, {
210
+ timeout: timeoutMs,
211
+ windowsHide: true,
212
+ maxBuffer: 256 * 1024,
213
+ // Inherit, then override: an auth probe is a short read-only CLI call, not a spawned
214
+ // agent, so it does not go through `buildChildEnv`'s allowlist — the CLI still needs the
215
+ // host's PATH and HOME to run at all. `env` is only ever a profile's config-dir variable.
216
+ ...(env && Object.keys(env).length > 0 ? { env: { ...process.env, ...env } } : {}),
217
+ }, (error, stdout, stderr) => {
135
218
  const commandError = error;
136
219
  const code = commandError?.code;
137
220
  resolve({
@@ -151,6 +234,11 @@ function quoteExecutable(executable, platform) {
151
234
  }
152
235
  return `'${executable.replaceAll("'", "'\\''")}'`;
153
236
  }
237
+ /** The per-account cache key. ONE definition: a probe that wrote under a different spelling than
238
+ * a peek reads would silently make every peek a miss, and every page load pay for a CLI spawn. */
239
+ function profileCacheKey(provider, profileId) {
240
+ return `${provider}\u0000${profileId}`;
241
+ }
154
242
  function descriptorFor(provider) {
155
243
  const descriptor = DESCRIPTORS.find(({ id }) => id === provider);
156
244
  if (!descriptor)
@@ -167,29 +255,57 @@ export class ProviderAuthService {
167
255
  nextProbeGeneration = 0;
168
256
  completed;
169
257
  inFlight;
258
+ /** Per-account probe results, keyed by `profileCacheKey` (spec 2026-07-29-agent-profiles).
259
+ * Separate from `completed` because a second Claude login is a different answer to the same
260
+ * question, and sharing one slot would let whichever probe ran last speak for both. */
261
+ completedProfiles = new Map();
262
+ inFlightProfiles = new Map();
170
263
  constructor(options) {
171
264
  this.runCommand = options?.runCommand ?? defaultRunProviderCommand;
172
265
  this.now = options?.now ?? Date.now;
173
266
  this.platform = options?.platform ?? process.platform;
174
267
  this.createAuthFailureId = options?.createAuthFailureId ?? randomUUID;
175
268
  }
269
+ /**
270
+ * Every provider's authentication state — STALE-WHILE-REVALIDATE, the same policy the health
271
+ * snapshot uses.
272
+ *
273
+ * Once anything is known, a reader gets it immediately and an expired cache is refreshed BEHIND
274
+ * the answer instead of in front of it. Awaiting the refresh is what made `GET
275
+ * /providers/status` cost ~0.8s here (and ~3s on a slower box) every time the window lapsed:
276
+ * the endpoint is read by the cockpit on a poll, so "occasionally slow" means "slow in the UI,
277
+ * unpredictably". Only a genuinely cold cache waits, and after the boot warm there isn't one.
278
+ *
279
+ * `refresh: true` still blocks — it is what "Check again", `POST /providers/connect` and the
280
+ * action gate's verify-before-refuse use, and they are asking precisely because they need an
281
+ * answer that is true NOW.
282
+ */
176
283
  status(options) {
177
- if (process.env.CEZ_DRY_RUN === '1') {
284
+ if (process.env.CEZ_DRY_RUN === '1' || providerAuthChecksDisabled()) {
178
285
  return Promise.resolve({
179
286
  providers: PROVIDER_IDS.map((provider) => ({ provider, status: 'connected' })),
180
287
  });
181
288
  }
182
- if (this.inFlight) {
183
- return this.inFlight.visible;
289
+ if (options?.refresh) {
290
+ // Joining a probe already running satisfies "true now" and preserves the in-flight identity
291
+ // contract (one shared promise for concurrent callers).
292
+ return this.inFlight ? this.inFlight.visible : this.startFreshProbe().visible;
184
293
  }
185
- if (!options?.refresh && this.completed && this.now() - this.completed.timestamp < CACHE_TTL_MS) {
186
- return Promise.resolve(this.completed.response)
187
- .then((response) => this.withRuntimeFailures(response));
294
+ if (this.completed) {
295
+ // Checked BEFORE `inFlight` on purpose: a reader arriving during a background revalidation
296
+ // must be served from cache, not attached to the probe it was meant to avoid.
297
+ if (this.now() - this.completed.timestamp >= cacheTtlFor(this.completed.response.providers)) {
298
+ if (!this.inFlight)
299
+ void this.startFreshProbe().raw.catch(() => { });
300
+ }
301
+ return Promise.resolve(this.withRuntimeFailures(this.completed.response));
188
302
  }
303
+ if (this.inFlight)
304
+ return this.inFlight.visible;
189
305
  return this.startFreshProbe().visible;
190
306
  }
191
307
  reportRuntimeAuthFailure(provider) {
192
- if (process.env.CEZ_DRY_RUN === '1')
308
+ if (process.env.CEZ_DRY_RUN === '1' || providerAuthChecksDisabled())
193
309
  return null;
194
310
  const current = this.runtimeFailures.get(provider);
195
311
  const failure = {
@@ -216,9 +332,20 @@ export class ProviderAuthService {
216
332
  this.runtimeFailures.delete(provider);
217
333
  return true;
218
334
  }
219
- loginCommand(provider) {
335
+ /**
336
+ * The command that logs `provider` in, as a copyable one-liner.
337
+ *
338
+ * `configDir` points the login at a specific agent account (spec 2026-07-29-agent-profiles) —
339
+ * without it, "Connect" on a second Claude account would sign the user into the FIRST one and
340
+ * report success. Returns `null` when the dir cannot be embedded safely on this platform, and
341
+ * the caller must then refuse rather than fall back to the bare command: a login aimed at the
342
+ * wrong account is the failure this whole path exists to prevent.
343
+ */
344
+ loginCommand(provider, configDir) {
220
345
  const descriptor = descriptorFor(provider);
221
- return [quoteExecutable(descriptor.executable(), this.platform), ...descriptor.loginArgs].join(' ');
346
+ const command = [quoteExecutable(descriptor.executable(), this.platform), ...descriptor.loginArgs].join(' ');
347
+ const env = configDir ? profileEnv(provider, configDir) : {};
348
+ return withEnvPrefix(command, env, this.platform);
222
349
  }
223
350
  installHint(provider) {
224
351
  return descriptorFor(provider).installHint;
@@ -264,10 +391,102 @@ export class ProviderAuthService {
264
391
  });
265
392
  return probe;
266
393
  }
267
- async probe(descriptor) {
394
+ /**
395
+ * One NON-default agent account's authentication state (spec 2026-07-29-agent-profiles).
396
+ *
397
+ * Deliberately a separate entry point from `status()`, which keeps answering exactly one row
398
+ * per provider — the discovered default — so `GET /api/v1/providers/status` is byte-identical
399
+ * for anyone with no extra accounts. Per-account rows are carried by the agent-profiles route.
400
+ *
401
+ * Cached on the same asymmetric lifetime as `status()` (`cacheTtlFor`: minutes for a connected
402
+ * answer, a minute for anything else), keyed by `(provider, profileId)` so two Claude accounts never read
403
+ * each other's answer. The runtime-auth latch is deliberately NOT applied: it is a coarse
404
+ * per-provider signal and stamping it onto every account of that provider would mark an
405
+ * untouched account as broken.
406
+ */
407
+ async profileStatus(provider, profile) {
408
+ if (process.env.CEZ_DRY_RUN === '1') {
409
+ return { provider, status: 'connected', profileId: profile.id };
410
+ }
411
+ const key = profileCacheKey(provider, profile.id);
412
+ const cached = this.completedProfiles.get(key);
413
+ if (cached && this.now() - cached.timestamp < cacheTtlFor([cached.status]))
414
+ return cached.status;
415
+ const pending = this.inFlightProfiles.get(key);
416
+ if (pending)
417
+ return pending;
418
+ const probe = this.probe(descriptorFor(provider), profile.configDir)
419
+ .then((status) => {
420
+ const stamped = { ...status, profileId: profile.id };
421
+ this.completedProfiles.set(key, { status: stamped, timestamp: this.now() });
422
+ return stamped;
423
+ })
424
+ .finally(() => {
425
+ if (this.inFlightProfiles.get(key) === probe)
426
+ this.inFlightProfiles.delete(key);
427
+ });
428
+ this.inFlightProfiles.set(key, probe);
429
+ return probe;
430
+ }
431
+ /**
432
+ * Drop a cached per-account answer — used when an account's dir changes under us.
433
+ *
434
+ * TARGETED by default, because this cache is warmed at boot and is meant to survive: clearing
435
+ * every account because ONE was repointed would throw away knowledge that is still true and make
436
+ * the other accounts re-probe. Called with no argument it clears everything, which is what a
437
+ * shutdown or a whole-store reload wants.
438
+ */
439
+ forgetProfileStatus(provider, profileId) {
440
+ if (provider === undefined || profileId === undefined) {
441
+ this.completedProfiles.clear();
442
+ return;
443
+ }
444
+ this.completedProfiles.delete(profileCacheKey(provider, profileId));
445
+ }
446
+ /**
447
+ * The cached answer for one account, or `undefined` when nothing is known yet — WITHOUT
448
+ * spawning anything.
449
+ *
450
+ * Every probe shells out to an agent CLI, which costs hundreds of milliseconds per provider and
451
+ * per account. A route whose real job is "what exists" must not pay that: `GET /api/v1/health`
452
+ * already established this posture (it serves whatever the cache holds and never pays a `gh`
453
+ * shell-out), and this is the same rule for auth.
454
+ *
455
+ * The peeks deliberately ignore the TTLs below — they answer with the last thing known, however
456
+ * old. The short window exists to stop a stale NEGATIVE from blocking a run, and a peek blocks
457
+ * nothing: it fills in a dot on a settings page that offers Connect and a re-check right beside
458
+ * it. Applying the window here instead made the whole cache expire in five seconds on any machine
459
+ * where a single provider is logged out — which is most of them, since few people are signed into
460
+ * all three — and put the shell-out straight back on the page load this exists to protect.
461
+ * Callers that need a guaranteed-fresh answer call {@link status} or pass `refresh`.
462
+ */
463
+ peekProfileStatus(provider, profileId) {
464
+ if (process.env.CEZ_DRY_RUN === '1') {
465
+ return { provider, status: 'connected', profileId };
466
+ }
467
+ return this.completedProfiles.get(profileCacheKey(provider, profileId))?.status;
468
+ }
469
+ /** The cached default-profile rows, or `undefined` when the probe has never completed. Same
470
+ * no-spawn contract as {@link peekProfileStatus}. */
471
+ peekStatus() {
472
+ if (process.env.CEZ_DRY_RUN === '1') {
473
+ return { providers: PROVIDER_IDS.map((provider) => ({ provider, status: 'connected' })) };
474
+ }
475
+ if (!this.completed)
476
+ return undefined;
477
+ return this.withRuntimeFailures(this.completed.response);
478
+ }
479
+ async probe(descriptor, configDir) {
268
480
  let result;
481
+ // The default profile is probed with the SAME three-argument call it always was — no
482
+ // trailing `undefined`. `runCommand` is an injected seam, and handing every existing
483
+ // implementation an extra argument it never asked for would be a change in the zero-config
484
+ // path for no gain.
485
+ const env = configDir ? profileEnv(descriptor.id, configDir) : undefined;
269
486
  try {
270
- result = await this.runCommand(descriptor.executable(), descriptor.statusArgs, COMMAND_TIMEOUT_MS);
487
+ result = await (env === undefined
488
+ ? this.runCommand(descriptor.executable(), descriptor.statusArgs, COMMAND_TIMEOUT_MS)
489
+ : this.runCommand(descriptor.executable(), descriptor.statusArgs, COMMAND_TIMEOUT_MS, env));
271
490
  }
272
491
  catch {
273
492
  return { provider: descriptor.id, status: 'unknown', hint: UNKNOWN_HINT };
@@ -1 +1 @@
1
- {"version":3,"file":"provider-auth.js","sourceRoot":"","sources":["../../src/core/provider-auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-auth.js","sourceRoot":"","sources":["../../src/core/provider-auth.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import type { ProviderId, ProviderStatus, ProviderStatusResponse } from './provider-auth.ts';
1
+ import { type ProviderId, type ProviderStatus, type ProviderStatusResponse } from './provider-auth.ts';
2
2
  export declare function applyProviderEnablement(response: ProviderStatusResponse, disabledProviders: readonly ProviderId[]): ProviderStatusResponse;
3
3
  export declare function isProviderUsable(row: ProviderStatus): boolean;
@@ -1,5 +1,6 @@
1
+ import { providerAuthChecksDisabled, } from './provider-auth.js';
1
2
  export function applyProviderEnablement(response, disabledProviders) {
2
- const disabled = new Set(disabledProviders);
3
+ const disabled = new Set(providerAuthChecksDisabled() ? [] : disabledProviders);
3
4
  return {
4
5
  providers: response.providers.map((row) => ({
5
6
  ...row,
@@ -1 +1 @@
1
- {"version":3,"file":"provider-availability.js","sourceRoot":"","sources":["../../src/core/provider-availability.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,uBAAuB,CACrC,QAAgC,EAChC,iBAAwC;IAExC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC5C,OAAO;QACL,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC1C,GAAG,GAAG;YACN,OAAO,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;SACrC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAmB;IAClD,OAAO,GAAG,CAAC,OAAO,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC;AAC7D,CAAC"}
1
+ {"version":3,"file":"provider-availability.js","sourceRoot":"","sources":["../../src/core/provider-availability.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,GAI3B,MAAM,oBAAoB,CAAC;AAE5B,MAAM,UAAU,uBAAuB,CACrC,QAAgC,EAChC,iBAAwC;IAExC,MAAM,QAAQ,GAAG,IAAI,GAAG,CACtB,0BAA0B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,CACtD,CAAC;IACF,OAAO;QACL,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC1C,GAAG,GAAG;YACN,OAAO,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;SACrC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAmB;IAClD,OAAO,GAAG,CAAC,OAAO,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC;AAC7D,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { ClaudeCliRunner } from './claude-cli-runner.js';
2
2
  import { CodexAppServerRunner } from './codex-app-server-runner.js';
3
3
  import { OpencodeServerRunner } from './opencode-server-runner.js';
4
+ import { PiRunner } from './pi-runner.js';
4
5
  /**
5
6
  * The single place that maps a backend id onto a concrete runner. Everything
6
7
  * that used to `new ClaudeCliRunner()` (the planner and the workflow engine)
@@ -13,6 +14,8 @@ export function createRunner(backend) {
13
14
  return new CodexAppServerRunner();
14
15
  case 'opencode':
15
16
  return new OpencodeServerRunner();
17
+ case 'pi':
18
+ return new PiRunner();
16
19
  case 'claude':
17
20
  case 'claude-cli':
18
21
  default:
@@ -1 +1 @@
1
- {"version":3,"file":"runner-factory.js","sourceRoot":"","sources":["../../src/core/runner-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,OAA4C;IACvE,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO;YACV,OAAO,IAAI,oBAAoB,EAAE,CAAC;QACpC,KAAK,UAAU;YACb,OAAO,IAAI,oBAAoB,EAAE,CAAC;QACpC,KAAK,QAAQ,CAAC;QACd,KAAK,YAAY,CAAC;QAClB;YACE,OAAO,IAAI,eAAe,EAAE,CAAC;IACjC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"runner-factory.js","sourceRoot":"","sources":["../../src/core/runner-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,OAA4C;IACvE,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO;YACV,OAAO,IAAI,oBAAoB,EAAE,CAAC;QACpC,KAAK,UAAU;YACb,OAAO,IAAI,oBAAoB,EAAE,CAAC;QACpC,KAAK,IAAI;YACP,OAAO,IAAI,QAAQ,EAAE,CAAC;QACxB,KAAK,QAAQ,CAAC;QACd,KAAK,YAAY,CAAC;QAClB;YACE,OAAO,IAAI,eAAe,EAAE,CAAC;IACjC,CAAC;AACH,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Rendering environment assignments into a shell command line — the CLI-handoff half of agent
3
+ * profiles (spec 2026-07-29-agent-profiles).
4
+ *
5
+ * A run executed under a second account only resumes under that same account: `claude --resume
6
+ * <id>` reads `<CLAUDE_CONFIG_DIR>/sessions`, so a handoff without the variable does not fail
7
+ * loudly — it silently starts a fresh conversation. The variable therefore has to travel with
8
+ * every command cezar hands to a terminal, and it has to SURVIVE the command, because the window
9
+ * stays open and the user types the next `claude` in it themselves. Hence `export` / `set` rather
10
+ * than a one-shot `VAR=v cmd` prefix.
11
+ *
12
+ * There is no portable spelling: `VAR=v cmd` is meaningless to `cmd.exe`, and `set "VAR=v"` is
13
+ * meaningless to a POSIX shell. So this renders per platform, and — the load-bearing part —
14
+ * refuses rather than guesses. `null` means "this value cannot be embedded safely here", and
15
+ * every caller must then fail closed: opening a terminal on the WRONG account is worse than not
16
+ * opening one, because the user cannot see which account a shell is pointed at.
17
+ */
18
+ /** POSIX single-quoting — the `'\''` dance, so any character but a control one is inert. */
19
+ export declare function shellQuote(value: string): string;
20
+ /**
21
+ * Assignments that persist for the rest of the shell session, or `null` when any value cannot be
22
+ * embedded safely on `platform`. An empty `env` renders `''` — the zero-config path adds nothing.
23
+ *
24
+ * The result is a PREFIX ready to concatenate: it already ends with its own separator.
25
+ */
26
+ export declare function renderEnvPrefix(env: Record<string, string>, platform: NodeJS.Platform): string | null;
27
+ /** `renderEnvPrefix` applied to a command, or `null` when the env cannot be rendered safely. */
28
+ export declare function withEnvPrefix(command: string, env: Record<string, string>, platform: NodeJS.Platform): string | null;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Rendering environment assignments into a shell command line — the CLI-handoff half of agent
3
+ * profiles (spec 2026-07-29-agent-profiles).
4
+ *
5
+ * A run executed under a second account only resumes under that same account: `claude --resume
6
+ * <id>` reads `<CLAUDE_CONFIG_DIR>/sessions`, so a handoff without the variable does not fail
7
+ * loudly — it silently starts a fresh conversation. The variable therefore has to travel with
8
+ * every command cezar hands to a terminal, and it has to SURVIVE the command, because the window
9
+ * stays open and the user types the next `claude` in it themselves. Hence `export` / `set` rather
10
+ * than a one-shot `VAR=v cmd` prefix.
11
+ *
12
+ * There is no portable spelling: `VAR=v cmd` is meaningless to `cmd.exe`, and `set "VAR=v"` is
13
+ * meaningless to a POSIX shell. So this renders per platform, and — the load-bearing part —
14
+ * refuses rather than guesses. `null` means "this value cannot be embedded safely here", and
15
+ * every caller must then fail closed: opening a terminal on the WRONG account is worse than not
16
+ * opening one, because the user cannot see which account a shell is pointed at.
17
+ */
18
+ /** Values that cannot be embedded safely, per platform. Control characters are rejected
19
+ * everywhere (they would break the line-based launch script and are never a real path). */
20
+ const CONTROL_CHARS_RE = /[\u0000-\u001f\u007f]/;
21
+ /** `cmd.exe` has no escape inside a quoted `set` argument: `"` ends the quote and `%`/`!` expand.
22
+ * A path containing one is pathological, so refusing is honest rather than limiting. */
23
+ const WIN32_UNSAFE_RE = /["%!]/;
24
+ /** POSIX single-quoting — the `'\''` dance, so any character but a control one is inert. */
25
+ export function shellQuote(value) {
26
+ return `'${value.replaceAll("'", `'\\''`)}'`;
27
+ }
28
+ /**
29
+ * Assignments that persist for the rest of the shell session, or `null` when any value cannot be
30
+ * embedded safely on `platform`. An empty `env` renders `''` — the zero-config path adds nothing.
31
+ *
32
+ * The result is a PREFIX ready to concatenate: it already ends with its own separator.
33
+ */
34
+ export function renderEnvPrefix(env, platform) {
35
+ const entries = Object.entries(env);
36
+ if (entries.length === 0)
37
+ return '';
38
+ for (const [name, value] of entries) {
39
+ if (CONTROL_CHARS_RE.test(name) || CONTROL_CHARS_RE.test(value))
40
+ return null;
41
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name))
42
+ return null;
43
+ if (platform === 'win32' && (WIN32_UNSAFE_RE.test(name) || WIN32_UNSAFE_RE.test(value)))
44
+ return null;
45
+ }
46
+ if (platform === 'win32') {
47
+ return entries.map(([name, value]) => `set "${name}=${value}" && `).join('');
48
+ }
49
+ return entries.map(([name, value]) => `export ${name}=${shellQuote(value)}; `).join('');
50
+ }
51
+ /** `renderEnvPrefix` applied to a command, or `null` when the env cannot be rendered safely. */
52
+ export function withEnvPrefix(command, env, platform) {
53
+ const prefix = renderEnvPrefix(env, platform);
54
+ return prefix === null ? null : `${prefix}${command}`;
55
+ }
56
+ //# sourceMappingURL=shell-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-env.js","sourceRoot":"","sources":["../../src/core/shell-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;4FAC4F;AAC5F,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AACjD;yFACyF;AACzF,MAAM,eAAe,GAAG,OAAO,CAAC;AAEhC,4FAA4F;AAC5F,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,GAA2B,EAC3B,QAAyB;IAEzB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACpC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7E,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACxD,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IACvG,CAAC;IACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,QAAQ,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,UAAU,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,aAAa,CAC3B,OAAe,EACf,GAA2B,EAC3B,QAAyB;IAEzB,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC9C,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC;AACxD,CAAC"}
@@ -24,7 +24,7 @@
24
24
  /** The backend that produced a session — mirrors `RunnerId` in
25
25
  * `agent-runner.ts` (kept structurally identical; a type-level test
26
26
  * guards against drift so this module stays dependency-free). */
27
- export type UiBackend = 'claude' | 'codex' | 'opencode';
27
+ export type UiBackend = 'claude' | 'codex' | 'opencode' | 'pi';
28
28
  /**
29
29
  * Tool lifecycle status (ACP: pending/in_progress/completed/failed).
30
30
  * `running` ≡ ACP `in_progress` (opencode's word — reads better in code);
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Provider usage-limit detection (spec 2026-08-03-auto-resume-after-usage-limit).
3
+ *
4
+ * A subscription that runs out of its window does not fail like an agent bug does: the work is
5
+ * fine, the account is simply closed until a KNOWN instant. That instant is the whole feature —
6
+ * without it there is nothing to schedule, so this module answers exactly one question about a
7
+ * terminal error string: "is this a usage limit, and when does it lift?".
8
+ *
9
+ * The evidence differs per backend, so the shapes are recognized in order of how exact they are:
10
+ *
11
+ * 1. Claude Code's machine-readable envelope, `Claude AI usage limit reached|<epoch>` — the CLI
12
+ * puts it in an `is_error` result frame, which reaches cezar verbatim as the run's `error`.
13
+ * Exact, no locale, no parsing of prose. This is the one that matters in practice.
14
+ * 2. An explicit reset instant in the prose (`try again at 2026-08-03T18:00:00Z`) — how Codex and
15
+ * OpenCode phrase the same thing when they carry a timestamp at all.
16
+ * 3. A clock-only reset in prose (`resets 8:10pm (Europe/Warsaw)`) — how Claude Code phrases
17
+ * session windows in some interactive output.
18
+ * 4. A relative delay (`try again in 42 minutes`, `retry-after: 3600`).
19
+ *
20
+ * Nothing else counts. A limit message with no recoverable reset instant returns `null` on
21
+ * purpose: guessing a window would turn one interruption into a retry loop against a provider
22
+ * that is still refusing, and "we don't know when" is an honest answer the caller can surface.
23
+ */
24
+ export interface UsageLimitHit {
25
+ /** When the provider says the limit lifts. Never in the past — a stale instant clamps to now. */
26
+ resetAt: Date;
27
+ /** Which shape carried it — the lifecycle note quotes this so the schedule is auditable. */
28
+ evidence: 'claude-marker' | 'timestamp' | 'clock' | 'delay';
29
+ }
30
+ /**
31
+ * The furthest ahead a reset may sit and still be believed. Claude's weekly window is the real
32
+ * ceiling; anything beyond a week is a corrupt or unit-confused number, and parking a task on it
33
+ * would be indistinguishable from losing the task.
34
+ */
35
+ export declare const MAX_USAGE_LIMIT_WAIT_MS: number;
36
+ /**
37
+ * Read a usage limit out of a terminal error message, or `null` when it is not one (or carries no
38
+ * usable reset instant). `now` is injected so callers and tests share one clock.
39
+ *
40
+ * Never throws: this runs on the failure path of every run, where a second failure helps nobody.
41
+ */
42
+ export declare function parseUsageLimit(message: string | undefined, now?: number): UsageLimitHit | null;