oc-codex-multi-auth 6.0.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 (248) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +162 -0
  3. package/assets/opencode-logo-ornate-dark.svg +18 -0
  4. package/assets/readme-hero.svg +31 -0
  5. package/config/README.md +96 -0
  6. package/config/minimal-opencode.json +13 -0
  7. package/config/opencode-legacy.json +871 -0
  8. package/config/opencode-modern.json +358 -0
  9. package/dist/index.d.ts +45 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +5008 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/lib/accounts/rate-limits.d.ts +22 -0
  14. package/dist/lib/accounts/rate-limits.d.ts.map +1 -0
  15. package/dist/lib/accounts/rate-limits.js +63 -0
  16. package/dist/lib/accounts/rate-limits.js.map +1 -0
  17. package/dist/lib/accounts.d.ts +134 -0
  18. package/dist/lib/accounts.d.ts.map +1 -0
  19. package/dist/lib/accounts.js +795 -0
  20. package/dist/lib/accounts.js.map +1 -0
  21. package/dist/lib/audit.d.ts +45 -0
  22. package/dist/lib/audit.d.ts.map +1 -0
  23. package/dist/lib/audit.js +154 -0
  24. package/dist/lib/audit.js.map +1 -0
  25. package/dist/lib/auth/auth.d.ts +51 -0
  26. package/dist/lib/auth/auth.d.ts.map +1 -0
  27. package/dist/lib/auth/auth.js +191 -0
  28. package/dist/lib/auth/auth.js.map +1 -0
  29. package/dist/lib/auth/browser.d.ts +17 -0
  30. package/dist/lib/auth/browser.d.ts.map +1 -0
  31. package/dist/lib/auth/browser.js +90 -0
  32. package/dist/lib/auth/browser.js.map +1 -0
  33. package/dist/lib/auth/device-code.d.ts +28 -0
  34. package/dist/lib/auth/device-code.d.ts.map +1 -0
  35. package/dist/lib/auth/device-code.js +215 -0
  36. package/dist/lib/auth/device-code.js.map +1 -0
  37. package/dist/lib/auth/login-runner.d.ts +55 -0
  38. package/dist/lib/auth/login-runner.d.ts.map +1 -0
  39. package/dist/lib/auth/login-runner.js +631 -0
  40. package/dist/lib/auth/login-runner.js.map +1 -0
  41. package/dist/lib/auth/server.d.ts +10 -0
  42. package/dist/lib/auth/server.d.ts.map +1 -0
  43. package/dist/lib/auth/server.js +98 -0
  44. package/dist/lib/auth/server.js.map +1 -0
  45. package/dist/lib/auth/token-utils.d.ts +60 -0
  46. package/dist/lib/auth/token-utils.d.ts.map +1 -0
  47. package/dist/lib/auth/token-utils.js +416 -0
  48. package/dist/lib/auth/token-utils.js.map +1 -0
  49. package/dist/lib/auth-rate-limit.d.ts +20 -0
  50. package/dist/lib/auth-rate-limit.d.ts.map +1 -0
  51. package/dist/lib/auth-rate-limit.js +91 -0
  52. package/dist/lib/auth-rate-limit.js.map +1 -0
  53. package/dist/lib/auto-update-checker.d.ts +10 -0
  54. package/dist/lib/auto-update-checker.d.ts.map +1 -0
  55. package/dist/lib/auto-update-checker.js +129 -0
  56. package/dist/lib/auto-update-checker.js.map +1 -0
  57. package/dist/lib/circuit-breaker.d.ts +34 -0
  58. package/dist/lib/circuit-breaker.d.ts.map +1 -0
  59. package/dist/lib/circuit-breaker.js +124 -0
  60. package/dist/lib/circuit-breaker.js.map +1 -0
  61. package/dist/lib/cli.d.ts +46 -0
  62. package/dist/lib/cli.d.ts.map +1 -0
  63. package/dist/lib/cli.js +192 -0
  64. package/dist/lib/cli.js.map +1 -0
  65. package/dist/lib/config.d.ts +42 -0
  66. package/dist/lib/config.d.ts.map +1 -0
  67. package/dist/lib/config.js +314 -0
  68. package/dist/lib/config.js.map +1 -0
  69. package/dist/lib/constants.d.ts +90 -0
  70. package/dist/lib/constants.d.ts.map +1 -0
  71. package/dist/lib/constants.js +90 -0
  72. package/dist/lib/constants.js.map +1 -0
  73. package/dist/lib/context-overflow.d.ts +27 -0
  74. package/dist/lib/context-overflow.d.ts.map +1 -0
  75. package/dist/lib/context-overflow.js +124 -0
  76. package/dist/lib/context-overflow.js.map +1 -0
  77. package/dist/lib/errors.d.ts +113 -0
  78. package/dist/lib/errors.d.ts.map +1 -0
  79. package/dist/lib/errors.js +103 -0
  80. package/dist/lib/errors.js.map +1 -0
  81. package/dist/lib/health.d.ts +33 -0
  82. package/dist/lib/health.d.ts.map +1 -0
  83. package/dist/lib/health.js +70 -0
  84. package/dist/lib/health.js.map +1 -0
  85. package/dist/lib/index.d.ts +20 -0
  86. package/dist/lib/index.d.ts.map +1 -0
  87. package/dist/lib/index.js +20 -0
  88. package/dist/lib/index.js.map +1 -0
  89. package/dist/lib/logger.d.ts +40 -0
  90. package/dist/lib/logger.d.ts.map +1 -0
  91. package/dist/lib/logger.js +337 -0
  92. package/dist/lib/logger.js.map +1 -0
  93. package/dist/lib/oauth-success.html +712 -0
  94. package/dist/lib/parallel-probe.d.ts +28 -0
  95. package/dist/lib/parallel-probe.d.ts.map +1 -0
  96. package/dist/lib/parallel-probe.js +97 -0
  97. package/dist/lib/parallel-probe.js.map +1 -0
  98. package/dist/lib/proactive-refresh.d.ts +67 -0
  99. package/dist/lib/proactive-refresh.d.ts.map +1 -0
  100. package/dist/lib/proactive-refresh.js +161 -0
  101. package/dist/lib/proactive-refresh.js.map +1 -0
  102. package/dist/lib/prompts/codex-opencode-bridge.d.ts +20 -0
  103. package/dist/lib/prompts/codex-opencode-bridge.d.ts.map +1 -0
  104. package/dist/lib/prompts/codex-opencode-bridge.js +126 -0
  105. package/dist/lib/prompts/codex-opencode-bridge.js.map +1 -0
  106. package/dist/lib/prompts/codex.d.ts +41 -0
  107. package/dist/lib/prompts/codex.d.ts.map +1 -0
  108. package/dist/lib/prompts/codex.js +400 -0
  109. package/dist/lib/prompts/codex.js.map +1 -0
  110. package/dist/lib/prompts/opencode-codex.d.ts +25 -0
  111. package/dist/lib/prompts/opencode-codex.d.ts.map +1 -0
  112. package/dist/lib/prompts/opencode-codex.js +223 -0
  113. package/dist/lib/prompts/opencode-codex.js.map +1 -0
  114. package/dist/lib/recovery/constants.d.ts +12 -0
  115. package/dist/lib/recovery/constants.d.ts.map +1 -0
  116. package/dist/lib/recovery/constants.js +25 -0
  117. package/dist/lib/recovery/constants.js.map +1 -0
  118. package/dist/lib/recovery/index.d.ts +12 -0
  119. package/dist/lib/recovery/index.d.ts.map +1 -0
  120. package/dist/lib/recovery/index.js +12 -0
  121. package/dist/lib/recovery/index.js.map +1 -0
  122. package/dist/lib/recovery/storage.d.ts +24 -0
  123. package/dist/lib/recovery/storage.d.ts.map +1 -0
  124. package/dist/lib/recovery/storage.js +362 -0
  125. package/dist/lib/recovery/storage.js.map +1 -0
  126. package/dist/lib/recovery/types.d.ts +116 -0
  127. package/dist/lib/recovery/types.d.ts.map +1 -0
  128. package/dist/lib/recovery/types.js +7 -0
  129. package/dist/lib/recovery/types.js.map +1 -0
  130. package/dist/lib/recovery.d.ts +31 -0
  131. package/dist/lib/recovery.d.ts.map +1 -0
  132. package/dist/lib/recovery.js +313 -0
  133. package/dist/lib/recovery.js.map +1 -0
  134. package/dist/lib/refresh-queue.d.ts +131 -0
  135. package/dist/lib/refresh-queue.d.ts.map +1 -0
  136. package/dist/lib/refresh-queue.js +297 -0
  137. package/dist/lib/refresh-queue.js.map +1 -0
  138. package/dist/lib/request/fetch-helpers.d.ts +142 -0
  139. package/dist/lib/request/fetch-helpers.d.ts.map +1 -0
  140. package/dist/lib/request/fetch-helpers.js +749 -0
  141. package/dist/lib/request/fetch-helpers.js.map +1 -0
  142. package/dist/lib/request/helpers/input-utils.d.ts +7 -0
  143. package/dist/lib/request/helpers/input-utils.d.ts.map +1 -0
  144. package/dist/lib/request/helpers/input-utils.js +214 -0
  145. package/dist/lib/request/helpers/input-utils.js.map +1 -0
  146. package/dist/lib/request/helpers/model-map.d.ts +22 -0
  147. package/dist/lib/request/helpers/model-map.d.ts.map +1 -0
  148. package/dist/lib/request/helpers/model-map.js +183 -0
  149. package/dist/lib/request/helpers/model-map.js.map +1 -0
  150. package/dist/lib/request/helpers/tool-utils.d.ts +29 -0
  151. package/dist/lib/request/helpers/tool-utils.d.ts.map +1 -0
  152. package/dist/lib/request/helpers/tool-utils.js +117 -0
  153. package/dist/lib/request/helpers/tool-utils.js.map +1 -0
  154. package/dist/lib/request/rate-limit-backoff.d.ts +17 -0
  155. package/dist/lib/request/rate-limit-backoff.d.ts.map +1 -0
  156. package/dist/lib/request/rate-limit-backoff.js +83 -0
  157. package/dist/lib/request/rate-limit-backoff.js.map +1 -0
  158. package/dist/lib/request/request-transformer.d.ts +107 -0
  159. package/dist/lib/request/request-transformer.d.ts.map +1 -0
  160. package/dist/lib/request/request-transformer.js +930 -0
  161. package/dist/lib/request/request-transformer.js.map +1 -0
  162. package/dist/lib/request/response-handler.d.ts +23 -0
  163. package/dist/lib/request/response-handler.d.ts.map +1 -0
  164. package/dist/lib/request/response-handler.js +245 -0
  165. package/dist/lib/request/response-handler.js.map +1 -0
  166. package/dist/lib/request/retry-budget.d.ts +19 -0
  167. package/dist/lib/request/retry-budget.d.ts.map +1 -0
  168. package/dist/lib/request/retry-budget.js +99 -0
  169. package/dist/lib/request/retry-budget.js.map +1 -0
  170. package/dist/lib/rotation.d.ts +130 -0
  171. package/dist/lib/rotation.d.ts.map +1 -0
  172. package/dist/lib/rotation.js +301 -0
  173. package/dist/lib/rotation.js.map +1 -0
  174. package/dist/lib/runtime-contracts.d.ts +16 -0
  175. package/dist/lib/runtime-contracts.d.ts.map +1 -0
  176. package/dist/lib/runtime-contracts.js +24 -0
  177. package/dist/lib/runtime-contracts.js.map +1 -0
  178. package/dist/lib/schemas.d.ts +457 -0
  179. package/dist/lib/schemas.d.ts.map +1 -0
  180. package/dist/lib/schemas.js +283 -0
  181. package/dist/lib/schemas.js.map +1 -0
  182. package/dist/lib/shutdown.d.ts +7 -0
  183. package/dist/lib/shutdown.d.ts.map +1 -0
  184. package/dist/lib/shutdown.js +43 -0
  185. package/dist/lib/shutdown.js.map +1 -0
  186. package/dist/lib/storage/migrations.d.ts +65 -0
  187. package/dist/lib/storage/migrations.d.ts.map +1 -0
  188. package/dist/lib/storage/migrations.js +44 -0
  189. package/dist/lib/storage/migrations.js.map +1 -0
  190. package/dist/lib/storage/paths.d.ts +16 -0
  191. package/dist/lib/storage/paths.d.ts.map +1 -0
  192. package/dist/lib/storage/paths.js +92 -0
  193. package/dist/lib/storage/paths.js.map +1 -0
  194. package/dist/lib/storage.d.ts +157 -0
  195. package/dist/lib/storage.d.ts.map +1 -0
  196. package/dist/lib/storage.js +1169 -0
  197. package/dist/lib/storage.js.map +1 -0
  198. package/dist/lib/table-formatter.d.ts +32 -0
  199. package/dist/lib/table-formatter.d.ts.map +1 -0
  200. package/dist/lib/table-formatter.js +44 -0
  201. package/dist/lib/table-formatter.js.map +1 -0
  202. package/dist/lib/types.d.ts +131 -0
  203. package/dist/lib/types.d.ts.map +1 -0
  204. package/dist/lib/types.js +2 -0
  205. package/dist/lib/types.js.map +1 -0
  206. package/dist/lib/ui/ansi.d.ts +22 -0
  207. package/dist/lib/ui/ansi.d.ts.map +1 -0
  208. package/dist/lib/ui/ansi.js +38 -0
  209. package/dist/lib/ui/ansi.js.map +1 -0
  210. package/dist/lib/ui/auth-menu.d.ts +39 -0
  211. package/dist/lib/ui/auth-menu.d.ts.map +1 -0
  212. package/dist/lib/ui/auth-menu.js +186 -0
  213. package/dist/lib/ui/auth-menu.js.map +1 -0
  214. package/dist/lib/ui/beginner.d.ts +62 -0
  215. package/dist/lib/ui/beginner.d.ts.map +1 -0
  216. package/dist/lib/ui/beginner.js +259 -0
  217. package/dist/lib/ui/beginner.js.map +1 -0
  218. package/dist/lib/ui/confirm.d.ts +2 -0
  219. package/dist/lib/ui/confirm.d.ts.map +1 -0
  220. package/dist/lib/ui/confirm.js +21 -0
  221. package/dist/lib/ui/confirm.js.map +1 -0
  222. package/dist/lib/ui/format.d.ts +9 -0
  223. package/dist/lib/ui/format.d.ts.map +1 -0
  224. package/dist/lib/ui/format.js +49 -0
  225. package/dist/lib/ui/format.js.map +1 -0
  226. package/dist/lib/ui/runtime.d.ts +11 -0
  227. package/dist/lib/ui/runtime.d.ts.map +1 -0
  228. package/dist/lib/ui/runtime.js +31 -0
  229. package/dist/lib/ui/runtime.js.map +1 -0
  230. package/dist/lib/ui/select.d.ts +20 -0
  231. package/dist/lib/ui/select.d.ts.map +1 -0
  232. package/dist/lib/ui/select.js +343 -0
  233. package/dist/lib/ui/select.js.map +1 -0
  234. package/dist/lib/ui/theme.d.ts +34 -0
  235. package/dist/lib/ui/theme.d.ts.map +1 -0
  236. package/dist/lib/ui/theme.js +84 -0
  237. package/dist/lib/ui/theme.js.map +1 -0
  238. package/dist/lib/utils.d.ts +29 -0
  239. package/dist/lib/utils.d.ts.map +1 -0
  240. package/dist/lib/utils.js +54 -0
  241. package/dist/lib/utils.js.map +1 -0
  242. package/package.json +113 -0
  243. package/scripts/audit-dev-allowlist.js +114 -0
  244. package/scripts/copy-oauth-success.js +37 -0
  245. package/scripts/install-oc-codex-multi-auth-core.js +381 -0
  246. package/scripts/install-oc-codex-multi-auth.js +15 -0
  247. package/scripts/test-all-models.sh +260 -0
  248. package/scripts/validate-model-map.sh +97 -0
@@ -0,0 +1,62 @@
1
+ export type BeginnerDiagnosticSeverity = "ok" | "warning" | "error";
2
+ export interface BeginnerAccountSnapshot {
3
+ index: number;
4
+ label: string;
5
+ accountLabel?: string;
6
+ enabled: boolean;
7
+ isActive: boolean;
8
+ rateLimitedUntil: number | null;
9
+ coolingDownUntil: number | null;
10
+ }
11
+ export interface BeginnerRuntimeSnapshot {
12
+ totalRequests: number;
13
+ failedRequests: number;
14
+ rateLimitedResponses: number;
15
+ authRefreshFailures: number;
16
+ serverErrors: number;
17
+ networkErrors: number;
18
+ lastErrorCategory: string | null;
19
+ promptCacheEnabledRequests: number;
20
+ promptCacheMissingRequests: number;
21
+ lastPromptCacheKey: string | null;
22
+ }
23
+ export interface BeginnerChecklistItem {
24
+ id: string;
25
+ done: boolean;
26
+ label: string;
27
+ detail: string;
28
+ command?: string;
29
+ }
30
+ export interface BeginnerDiagnosticFinding {
31
+ severity: BeginnerDiagnosticSeverity;
32
+ code: string;
33
+ summary: string;
34
+ action: string;
35
+ }
36
+ export interface BeginnerAccountSummary {
37
+ total: number;
38
+ active: number;
39
+ enabled: number;
40
+ disabled: number;
41
+ rateLimited: number;
42
+ coolingDown: number;
43
+ blocked: number;
44
+ healthy: number;
45
+ unlabeled: number;
46
+ }
47
+ export declare function formatPromptCacheKey(value: string | null | undefined): string;
48
+ export declare function formatPromptCacheSnapshot(runtime: Pick<BeginnerRuntimeSnapshot, "promptCacheEnabledRequests" | "promptCacheMissingRequests" | "lastPromptCacheKey">): string;
49
+ export declare function summarizeBeginnerAccounts(accounts: BeginnerAccountSnapshot[], now: number): BeginnerAccountSummary;
50
+ export declare function buildBeginnerChecklist(accounts: BeginnerAccountSnapshot[], now: number): BeginnerChecklistItem[];
51
+ export declare function explainRuntimeErrorCategory(category: string | null): string | null;
52
+ export declare function buildBeginnerDoctorFindings(input: {
53
+ accounts: BeginnerAccountSnapshot[];
54
+ now: number;
55
+ runtime: BeginnerRuntimeSnapshot;
56
+ }): BeginnerDiagnosticFinding[];
57
+ export declare function recommendBeginnerNextAction(input: {
58
+ accounts: BeginnerAccountSnapshot[];
59
+ now: number;
60
+ runtime: BeginnerRuntimeSnapshot;
61
+ }): string;
62
+ //# sourceMappingURL=beginner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beginner.d.ts","sourceRoot":"","sources":["../../../lib/ui/beginner.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,0BAA0B,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpE,MAAM,WAAW,uBAAuB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,uBAAuB;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,0BAA0B,EAAE,MAAM,CAAC;IACnC,0BAA0B,EAAE,MAAM,CAAC;IACnC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACzC,QAAQ,EAAE,0BAA0B,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAK7E;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,IAAI,CACtD,uBAAuB,EACvB,4BAA4B,GAAG,4BAA4B,GAAG,oBAAoB,CAClF,GAAG,MAAM,CAET;AAED,wBAAgB,yBAAyB,CACxC,QAAQ,EAAE,uBAAuB,EAAE,EACnC,GAAG,EAAE,MAAM,GACT,sBAAsB,CAyCxB;AAED,wBAAgB,sBAAsB,CACrC,QAAQ,EAAE,uBAAuB,EAAE,EACnC,GAAG,EAAE,MAAM,GACT,qBAAqB,EAAE,CAuDzB;AAOD,wBAAgB,2BAA2B,CAC1C,QAAQ,EAAE,MAAM,GAAG,IAAI,GACrB,MAAM,GAAG,IAAI,CAgBf;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IAClD,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,uBAAuB,CAAC;CACjC,GAAG,yBAAyB,EAAE,CAqH9B;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IAClD,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,uBAAuB,CAAC;CACjC,GAAG,MAAM,CAqBT"}
@@ -0,0 +1,259 @@
1
+ import { createHash } from "node:crypto";
2
+ export function formatPromptCacheKey(value) {
3
+ const normalized = value?.trim();
4
+ if (!normalized)
5
+ return "none";
6
+ const fingerprint = createHash("sha256").update(normalized).digest("hex").slice(0, 12);
7
+ return `masked-${fingerprint}`;
8
+ }
9
+ export function formatPromptCacheSnapshot(runtime) {
10
+ return `enabled=${runtime.promptCacheEnabledRequests}, missing=${runtime.promptCacheMissingRequests}, lastKey=${formatPromptCacheKey(runtime.lastPromptCacheKey)}`;
11
+ }
12
+ export function summarizeBeginnerAccounts(accounts, now) {
13
+ let active = 0;
14
+ let enabled = 0;
15
+ let disabled = 0;
16
+ let rateLimited = 0;
17
+ let coolingDown = 0;
18
+ let blocked = 0;
19
+ let healthy = 0;
20
+ let unlabeled = 0;
21
+ for (const account of accounts) {
22
+ if (account.isActive)
23
+ active += 1;
24
+ if (account.enabled)
25
+ enabled += 1;
26
+ else
27
+ disabled += 1;
28
+ if ((account.accountLabel ?? "").trim().length === 0)
29
+ unlabeled += 1;
30
+ const isRateLimited = typeof account.rateLimitedUntil === "number" &&
31
+ account.rateLimitedUntil > now;
32
+ const isCoolingDown = typeof account.coolingDownUntil === "number" &&
33
+ account.coolingDownUntil > now;
34
+ if (isRateLimited)
35
+ rateLimited += 1;
36
+ if (isCoolingDown)
37
+ coolingDown += 1;
38
+ const isBlocked = !account.enabled || isRateLimited || isCoolingDown;
39
+ if (isBlocked)
40
+ blocked += 1;
41
+ else
42
+ healthy += 1;
43
+ }
44
+ return {
45
+ total: accounts.length,
46
+ active,
47
+ enabled,
48
+ disabled,
49
+ rateLimited,
50
+ coolingDown,
51
+ blocked,
52
+ healthy,
53
+ unlabeled,
54
+ };
55
+ }
56
+ export function buildBeginnerChecklist(accounts, now) {
57
+ const summary = summarizeBeginnerAccounts(accounts, now);
58
+ return [
59
+ {
60
+ id: "add-account",
61
+ done: summary.total > 0,
62
+ label: "Add at least one account",
63
+ detail: summary.total > 0
64
+ ? `${summary.total} account(s) found`
65
+ : "No accounts are configured yet",
66
+ command: "opencode auth login",
67
+ },
68
+ {
69
+ id: "set-active",
70
+ done: summary.total > 0 && summary.active > 0,
71
+ label: "Set an active account",
72
+ detail: summary.total > 0
73
+ ? summary.active > 0
74
+ ? "Active account is set"
75
+ : "No active account is selected"
76
+ : "Requires at least one account",
77
+ command: "codex-switch index=2",
78
+ },
79
+ {
80
+ id: "healthy-account",
81
+ done: summary.healthy > 0,
82
+ label: "Verify account health",
83
+ detail: summary.healthy > 0
84
+ ? `${summary.healthy} healthy account(s) available`
85
+ : "All accounts are blocked or disabled",
86
+ command: "codex-health",
87
+ },
88
+ {
89
+ id: "labels",
90
+ done: summary.total <= 1 || summary.unlabeled === 0,
91
+ label: "Label accounts for clarity",
92
+ detail: summary.total <= 1
93
+ ? "Single account setup"
94
+ : summary.unlabeled === 0
95
+ ? "All accounts already have labels"
96
+ : `${summary.unlabeled} account(s) still unlabeled`,
97
+ command: "codex-label index=2 label=\"Work\"",
98
+ },
99
+ {
100
+ id: "learn-commands",
101
+ done: false,
102
+ label: "Learn daily commands",
103
+ detail: "Use help to understand list/status/dashboard flows",
104
+ command: "codex-help",
105
+ },
106
+ ];
107
+ }
108
+ function getFailureRate(runtime) {
109
+ if (runtime.totalRequests <= 0)
110
+ return 0;
111
+ return runtime.failedRequests / runtime.totalRequests;
112
+ }
113
+ export function explainRuntimeErrorCategory(category) {
114
+ if (!category)
115
+ return null;
116
+ switch (category) {
117
+ case "network":
118
+ return "Network failures detected. Check connectivity or VPN/proxy rules.";
119
+ case "server":
120
+ return "Server-side 5xx failures detected. Try again or switch accounts.";
121
+ case "rate-limit":
122
+ return "Rate-limit responses detected. Wait for reset or switch accounts.";
123
+ case "auth-refresh":
124
+ return "Token refresh failures detected. Re-authenticate the affected account.";
125
+ case "auth-missing":
126
+ return "Missing authentication. Login is required before requests can succeed.";
127
+ default:
128
+ return `Recent errors were grouped as "${category}". Run codex-doctor for guidance.`;
129
+ }
130
+ }
131
+ export function buildBeginnerDoctorFindings(input) {
132
+ const summary = summarizeBeginnerAccounts(input.accounts, input.now);
133
+ const findings = [];
134
+ if (summary.total === 0) {
135
+ findings.push({
136
+ severity: "error",
137
+ code: "no-accounts",
138
+ summary: "No accounts are configured.",
139
+ action: "Run `opencode auth login` to add your first account.",
140
+ });
141
+ return findings;
142
+ }
143
+ if (summary.healthy === 0) {
144
+ findings.push({
145
+ severity: "error",
146
+ code: "no-healthy-account",
147
+ summary: "No healthy account is available for requests.",
148
+ action: "Run `codex-health`, then switch or re-login affected accounts.",
149
+ });
150
+ }
151
+ if (summary.disabled > 0) {
152
+ findings.push({
153
+ severity: "warning",
154
+ code: "disabled-accounts",
155
+ summary: `${summary.disabled} account(s) are disabled.`,
156
+ action: "Enable or replace disabled accounts to improve failover.",
157
+ });
158
+ }
159
+ if (summary.rateLimited > 0) {
160
+ findings.push({
161
+ severity: "warning",
162
+ code: "rate-limited-accounts",
163
+ summary: `${summary.rateLimited} account(s) are currently rate-limited.`,
164
+ action: "Use `codex-switch` to move to an available account or wait for reset.",
165
+ });
166
+ }
167
+ if (summary.coolingDown > 0) {
168
+ findings.push({
169
+ severity: "warning",
170
+ code: "cooling-down-accounts",
171
+ summary: `${summary.coolingDown} account(s) are cooling down after failures.`,
172
+ action: "Wait for cooldown expiry or rotate to another healthy account.",
173
+ });
174
+ }
175
+ if (input.runtime.authRefreshFailures > 0) {
176
+ findings.push({
177
+ severity: "warning",
178
+ code: "auth-refresh-failures",
179
+ summary: `Auth refresh failed ${input.runtime.authRefreshFailures} time(s).`,
180
+ action: "Run `codex-refresh` and `codex-health`; re-login if failures continue.",
181
+ });
182
+ }
183
+ if (input.runtime.totalRequests > 0) {
184
+ if (input.runtime.promptCacheEnabledRequests === 0) {
185
+ findings.push({
186
+ severity: "warning",
187
+ code: "prompt-cache-missing",
188
+ summary: "Recent requests did not include a prompt cache key.",
189
+ action: "Use a session-backed OpenCode flow that forwards `prompt_cache_key` so Codex prompt caching can engage.",
190
+ });
191
+ }
192
+ else if (input.runtime.promptCacheMissingRequests > 0) {
193
+ findings.push({
194
+ severity: "warning",
195
+ code: "prompt-cache-inconsistent",
196
+ summary: "Prompt cache keys were present for some recent requests but missing for others.",
197
+ action: "Keep requests on a stable session/thread path so `prompt_cache_key` stays consistent across turns.",
198
+ });
199
+ }
200
+ }
201
+ const failureRate = getFailureRate(input.runtime);
202
+ if (input.runtime.totalRequests >= 6 && failureRate >= 0.5) {
203
+ findings.push({
204
+ severity: "error",
205
+ code: "high-failure-rate",
206
+ summary: `High failure rate: ${(failureRate * 100).toFixed(0)}% over ${input.runtime.totalRequests} requests.`,
207
+ action: "Run `codex-doctor`, then inspect `codex-dashboard` and rotate accounts.",
208
+ });
209
+ }
210
+ else if (input.runtime.totalRequests >= 3 && failureRate >= 0.25) {
211
+ findings.push({
212
+ severity: "warning",
213
+ code: "elevated-failure-rate",
214
+ summary: `Elevated failure rate: ${(failureRate * 100).toFixed(0)}%.`,
215
+ action: "Check recent errors in `codex-metrics` and verify account health.",
216
+ });
217
+ }
218
+ const errorHint = explainRuntimeErrorCategory(input.runtime.lastErrorCategory);
219
+ if (errorHint) {
220
+ findings.push({
221
+ severity: "warning",
222
+ code: "recent-error-category",
223
+ summary: `Recent error category: ${input.runtime.lastErrorCategory}.`,
224
+ action: errorHint,
225
+ });
226
+ }
227
+ if (findings.length === 0) {
228
+ findings.push({
229
+ severity: "ok",
230
+ code: "healthy",
231
+ summary: "No critical issues detected.",
232
+ action: "Keep using `codex-dashboard` and `codex-metrics` for monitoring.",
233
+ });
234
+ }
235
+ return findings;
236
+ }
237
+ export function recommendBeginnerNextAction(input) {
238
+ const summary = summarizeBeginnerAccounts(input.accounts, input.now);
239
+ if (summary.total === 0) {
240
+ return "Run `opencode auth login` to add your first account.";
241
+ }
242
+ if (summary.healthy === 0) {
243
+ return "Run `codex-health`, then re-login or switch to a healthy account.";
244
+ }
245
+ if (summary.rateLimited > 0) {
246
+ return "Use `codex-switch index=2` to move away from rate-limited accounts.";
247
+ }
248
+ if (summary.coolingDown > 0) {
249
+ return "Wait for cooldown expiry or switch to another account with `codex-switch`.";
250
+ }
251
+ if (input.runtime.authRefreshFailures > 0) {
252
+ return "Run `codex-refresh` to refresh tokens and verify account health.";
253
+ }
254
+ if (summary.total > 1 && summary.unlabeled > 0) {
255
+ return "Label accounts with `codex-label index=2 label=\"Work\"` for easier switching.";
256
+ }
257
+ return "Open `codex-dashboard` for live health and retry visibility.";
258
+ }
259
+ //# sourceMappingURL=beginner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beginner.js","sourceRoot":"","sources":["../../../lib/ui/beginner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAsDzC,MAAM,UAAU,oBAAoB,CAAC,KAAgC;IACpE,MAAM,UAAU,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IACjC,IAAI,CAAC,UAAU;QAAE,OAAO,MAAM,CAAC;IAC/B,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvF,OAAO,UAAU,WAAW,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAGzC;IACA,OAAO,WAAW,OAAO,CAAC,0BAA0B,aAAa,OAAO,CAAC,0BAA0B,aAAa,oBAAoB,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;AACpK,CAAC;AAED,MAAM,UAAU,yBAAyB,CACxC,QAAmC,EACnC,GAAW;IAEX,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,QAAQ;YAAE,MAAM,IAAI,CAAC,CAAC;QAClC,IAAI,OAAO,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,CAAC;;YAC7B,QAAQ,IAAI,CAAC,CAAC;QACnB,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS,IAAI,CAAC,CAAC;QAErE,MAAM,aAAa,GAClB,OAAO,OAAO,CAAC,gBAAgB,KAAK,QAAQ;YAC5C,OAAO,CAAC,gBAAgB,GAAG,GAAG,CAAC;QAChC,MAAM,aAAa,GAClB,OAAO,OAAO,CAAC,gBAAgB,KAAK,QAAQ;YAC5C,OAAO,CAAC,gBAAgB,GAAG,GAAG,CAAC;QAChC,IAAI,aAAa;YAAE,WAAW,IAAI,CAAC,CAAC;QACpC,IAAI,aAAa;YAAE,WAAW,IAAI,CAAC,CAAC;QAEpC,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,aAAa,IAAI,aAAa,CAAC;QACrE,IAAI,SAAS;YAAE,OAAO,IAAI,CAAC,CAAC;;YACvB,OAAO,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,OAAO;QACN,KAAK,EAAE,QAAQ,CAAC,MAAM;QACtB,MAAM;QACN,OAAO;QACP,QAAQ;QACR,WAAW;QACX,WAAW;QACX,OAAO;QACP,OAAO;QACP,SAAS;KACT,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CACrC,QAAmC,EACnC,GAAW;IAEX,MAAM,OAAO,GAAG,yBAAyB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACzD,OAAO;QACN;YACC,EAAE,EAAE,aAAa;YACjB,IAAI,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC;YACvB,KAAK,EAAE,0BAA0B;YACjC,MAAM,EACL,OAAO,CAAC,KAAK,GAAG,CAAC;gBAChB,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,mBAAmB;gBACrC,CAAC,CAAC,gCAAgC;YACpC,OAAO,EAAE,qBAAqB;SAC9B;QACD;YACC,EAAE,EAAE,YAAY;YAChB,IAAI,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAC7C,KAAK,EAAE,uBAAuB;YAC9B,MAAM,EACL,OAAO,CAAC,KAAK,GAAG,CAAC;gBAChB,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;oBACnB,CAAC,CAAC,uBAAuB;oBACzB,CAAC,CAAC,+BAA+B;gBAClC,CAAC,CAAC,+BAA+B;YACnC,OAAO,EAAE,sBAAsB;SAC/B;QACD;YACC,EAAE,EAAE,iBAAiB;YACrB,IAAI,EAAE,OAAO,CAAC,OAAO,GAAG,CAAC;YACzB,KAAK,EAAE,uBAAuB;YAC9B,MAAM,EACL,OAAO,CAAC,OAAO,GAAG,CAAC;gBAClB,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,+BAA+B;gBACnD,CAAC,CAAC,sCAAsC;YAC1C,OAAO,EAAE,cAAc;SACvB;QACD;YACC,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,OAAO,CAAC,SAAS,KAAK,CAAC;YACnD,KAAK,EAAE,4BAA4B;YACnC,MAAM,EACL,OAAO,CAAC,KAAK,IAAI,CAAC;gBACjB,CAAC,CAAC,sBAAsB;gBACxB,CAAC,CAAC,OAAO,CAAC,SAAS,KAAK,CAAC;oBACxB,CAAC,CAAC,kCAAkC;oBACpC,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,6BAA6B;YACtD,OAAO,EAAE,oCAAoC;SAC7C;QACD;YACC,EAAE,EAAE,gBAAgB;YACpB,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,sBAAsB;YAC7B,MAAM,EAAE,oDAAoD;YAC5D,OAAO,EAAE,YAAY;SACrB;KACD,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,OAAgC;IACvD,IAAI,OAAO,CAAC,aAAa,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACzC,OAAO,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,2BAA2B,CAC1C,QAAuB;IAEvB,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,QAAQ,QAAQ,EAAE,CAAC;QAClB,KAAK,SAAS;YACb,OAAO,mEAAmE,CAAC;QAC5E,KAAK,QAAQ;YACZ,OAAO,kEAAkE,CAAC;QAC3E,KAAK,YAAY;YAChB,OAAO,mEAAmE,CAAC;QAC5E,KAAK,cAAc;YAClB,OAAO,wEAAwE,CAAC;QACjF,KAAK,cAAc;YAClB,OAAO,wEAAwE,CAAC;QACjF;YACC,OAAO,kCAAkC,QAAQ,mCAAmC,CAAC;IACvF,CAAC;AACF,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAI3C;IACA,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAgC,EAAE,CAAC;IAEjD,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC;YACb,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,6BAA6B;YACtC,MAAM,EAAE,sDAAsD;SAC9D,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC;YACb,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,+CAA+C;YACxD,MAAM,EAAE,gEAAgE;SACxE,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QAC1B,QAAQ,CAAC,IAAI,CAAC;YACb,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,GAAG,OAAO,CAAC,QAAQ,2BAA2B;YACvD,MAAM,EAAE,0DAA0D;SAClE,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC;YACb,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,yCAAyC;YACxE,MAAM,EAAE,uEAAuE;SAC/E,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC;YACb,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,8CAA8C;YAC7E,MAAM,EAAE,gEAAgE;SACxE,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,mBAAmB,GAAG,CAAC,EAAE,CAAC;QAC3C,QAAQ,CAAC,IAAI,CAAC;YACb,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,uBAAuB,KAAK,CAAC,OAAO,CAAC,mBAAmB,WAAW;YAC5E,MAAM,EAAE,wEAAwE;SAChF,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,OAAO,CAAC,0BAA0B,KAAK,CAAC,EAAE,CAAC;YACpD,QAAQ,CAAC,IAAI,CAAC;gBACb,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,sBAAsB;gBAC5B,OAAO,EAAE,qDAAqD;gBAC9D,MAAM,EACL,yGAAyG;aAC1G,CAAC,CAAC;QACJ,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,0BAA0B,GAAG,CAAC,EAAE,CAAC;YACzD,QAAQ,CAAC,IAAI,CAAC;gBACb,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,2BAA2B;gBACjC,OAAO,EACN,iFAAiF;gBAClF,MAAM,EACL,oGAAoG;aACrG,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,IAAI,WAAW,IAAI,GAAG,EAAE,CAAC;QAC5D,QAAQ,CAAC,IAAI,CAAC;YACb,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,sBAAsB,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,OAAO,CAAC,aAAa,YAAY;YAC9G,MAAM,EAAE,yEAAyE;SACjF,CAAC,CAAC;IACJ,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;QACpE,QAAQ,CAAC,IAAI,CAAC;YACb,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,0BAA0B,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;YACrE,MAAM,EAAE,mEAAmE;SAC3E,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,2BAA2B,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC/E,IAAI,SAAS,EAAE,CAAC;QACf,QAAQ,CAAC,IAAI,CAAC;YACb,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,0BAA0B,KAAK,CAAC,OAAO,CAAC,iBAAiB,GAAG;YACrE,MAAM,EAAE,SAAS;SACjB,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC;YACb,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,8BAA8B;YACvC,MAAM,EAAE,kEAAkE;SAC1E,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAI3C;IACA,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACrE,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,sDAAsD,CAAC;IAC/D,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,mEAAmE,CAAC;IAC5E,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,qEAAqE,CAAC;IAC9E,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,4EAA4E,CAAC;IACrF,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,mBAAmB,GAAG,CAAC,EAAE,CAAC;QAC3C,OAAO,kEAAkE,CAAC;IAC3E,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,OAAO,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,gFAAgF,CAAC;IACzF,CAAC;IACD,OAAO,8DAA8D,CAAC;AACvE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function confirm(message: string, defaultYes?: boolean): Promise<boolean>;
2
+ //# sourceMappingURL=confirm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm.d.ts","sourceRoot":"","sources":["../../../lib/ui/confirm.ts"],"names":[],"mappings":"AAGA,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAkBnF"}
@@ -0,0 +1,21 @@
1
+ import { select } from "./select.js";
2
+ import { getUiRuntimeOptions } from "./runtime.js";
3
+ export async function confirm(message, defaultYes = false) {
4
+ const ui = getUiRuntimeOptions();
5
+ const items = defaultYes
6
+ ? [
7
+ { label: "Yes", value: true },
8
+ { label: "No", value: false },
9
+ ]
10
+ : [
11
+ { label: "No", value: false },
12
+ { label: "Yes", value: true },
13
+ ];
14
+ const result = await select(items, {
15
+ message,
16
+ variant: ui.v2Enabled ? "codex" : "legacy",
17
+ theme: ui.theme,
18
+ });
19
+ return result ?? false;
20
+ }
21
+ //# sourceMappingURL=confirm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm.js","sourceRoot":"","sources":["../../../lib/ui/confirm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAe,EAAE,UAAU,GAAG,KAAK;IAChE,MAAM,EAAE,GAAG,mBAAmB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,UAAU;QACvB,CAAC,CAAC;YACA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;YAC7B,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;SAC7B;QACF,CAAC,CAAC;YACA,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;YAC7B,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;SAC7B,CAAC;IAEJ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE;QAClC,OAAO;QACP,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;QAC1C,KAAK,EAAE,EAAE,CAAC,KAAK;KACf,CAAC,CAAC;IACH,OAAO,MAAM,IAAI,KAAK,CAAC;AACxB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { UiRuntimeOptions } from "./runtime.js";
2
+ export type UiTextTone = "heading" | "accent" | "muted" | "success" | "warning" | "danger" | "normal";
3
+ export declare function paintUiText(ui: UiRuntimeOptions, text: string, tone?: UiTextTone): string;
4
+ export declare function formatUiHeader(ui: UiRuntimeOptions, title: string): string[];
5
+ export declare function formatUiSection(ui: UiRuntimeOptions, title: string): string[];
6
+ export declare function formatUiItem(ui: UiRuntimeOptions, text: string, tone?: UiTextTone): string;
7
+ export declare function formatUiKeyValue(ui: UiRuntimeOptions, key: string, value: string, valueTone?: UiTextTone): string;
8
+ export declare function formatUiBadge(ui: UiRuntimeOptions, label: string, tone?: Exclude<UiTextTone, "normal" | "heading">): string;
9
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../lib/ui/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,MAAM,UAAU,GACnB,SAAS,GACT,QAAQ,GACR,OAAO,GACP,SAAS,GACT,SAAS,GACT,QAAQ,GACR,QAAQ,CAAC;AAYZ,wBAAgB,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,UAAqB,GAAG,MAAM,CAKnG;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAO5E;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAG7E;AAED,wBAAgB,YAAY,CAC3B,EAAE,EAAE,gBAAgB,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,UAAqB,GACzB,MAAM,CAIR;AAED,wBAAgB,gBAAgB,CAC/B,EAAE,EAAE,gBAAgB,EACpB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,UAAqB,GAC9B,MAAM,CAKR;AAED,wBAAgB,aAAa,CAC5B,EAAE,EAAE,gBAAgB,EACpB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,GAAG,SAAS,CAAY,GACxD,MAAM,CAGR"}
@@ -0,0 +1,49 @@
1
+ const TONE_TO_COLOR = {
2
+ heading: "heading",
3
+ accent: "accent",
4
+ muted: "muted",
5
+ success: "success",
6
+ warning: "warning",
7
+ danger: "danger",
8
+ normal: null,
9
+ };
10
+ export function paintUiText(ui, text, tone = "normal") {
11
+ if (!ui.v2Enabled)
12
+ return text;
13
+ const colorKey = TONE_TO_COLOR[tone];
14
+ if (!colorKey)
15
+ return text;
16
+ return `${ui.theme.colors[colorKey]}${text}${ui.theme.colors.reset}`;
17
+ }
18
+ export function formatUiHeader(ui, title) {
19
+ if (!ui.v2Enabled)
20
+ return [title];
21
+ const divider = "-".repeat(Math.max(8, title.length));
22
+ return [
23
+ paintUiText(ui, title, "heading"),
24
+ paintUiText(ui, divider, "muted"),
25
+ ];
26
+ }
27
+ export function formatUiSection(ui, title) {
28
+ if (!ui.v2Enabled)
29
+ return [title];
30
+ return [paintUiText(ui, title, "accent")];
31
+ }
32
+ export function formatUiItem(ui, text, tone = "normal") {
33
+ if (!ui.v2Enabled)
34
+ return `- ${text}`;
35
+ const bullet = paintUiText(ui, ui.theme.glyphs.bullet, "muted");
36
+ return `${bullet} ${paintUiText(ui, text, tone)}`;
37
+ }
38
+ export function formatUiKeyValue(ui, key, value, valueTone = "normal") {
39
+ if (!ui.v2Enabled)
40
+ return `${key}: ${value}`;
41
+ const keyText = paintUiText(ui, `${key}:`, "muted");
42
+ const valueText = paintUiText(ui, value, valueTone);
43
+ return `${keyText} ${valueText}`;
44
+ }
45
+ export function formatUiBadge(ui, label, tone = "accent") {
46
+ const text = `[${label}]`;
47
+ return paintUiText(ui, text, tone);
48
+ }
49
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../lib/ui/format.ts"],"names":[],"mappings":"AAWA,MAAM,aAAa,GAAyE;IAC3F,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,IAAI;CACZ,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,EAAoB,EAAE,IAAY,EAAE,OAAmB,QAAQ;IAC1F,IAAI,CAAC,EAAE,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAoB,EAAE,KAAa;IACjE,IAAI,CAAC,EAAE,CAAC,SAAS;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,OAAO;QACN,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC;QACjC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC;KACjC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAoB,EAAE,KAAa;IAClE,IAAI,CAAC,EAAE,CAAC,SAAS;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAClC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,YAAY,CAC3B,EAAoB,EACpB,IAAY,EACZ,OAAmB,QAAQ;IAE3B,IAAI,CAAC,EAAE,CAAC,SAAS;QAAE,OAAO,KAAK,IAAI,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChE,OAAO,GAAG,MAAM,IAAI,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC/B,EAAoB,EACpB,GAAW,EACX,KAAa,EACb,YAAwB,QAAQ;IAEhC,IAAI,CAAC,EAAE,CAAC,SAAS;QAAE,OAAO,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACpD,OAAO,GAAG,OAAO,IAAI,SAAS,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,aAAa,CAC5B,EAAoB,EACpB,KAAa,EACb,OAAkD,QAAQ;IAE1D,MAAM,IAAI,GAAG,IAAI,KAAK,GAAG,CAAC;IAC1B,OAAO,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type UiColorProfile, type UiGlyphMode, type UiTheme } from "./theme.js";
2
+ export interface UiRuntimeOptions {
3
+ v2Enabled: boolean;
4
+ colorProfile: UiColorProfile;
5
+ glyphMode: UiGlyphMode;
6
+ theme: UiTheme;
7
+ }
8
+ export declare function setUiRuntimeOptions(options: Partial<Omit<UiRuntimeOptions, "theme">>): UiRuntimeOptions;
9
+ export declare function getUiRuntimeOptions(): UiRuntimeOptions;
10
+ export declare function resetUiRuntimeOptions(): UiRuntimeOptions;
11
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../lib/ui/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,cAAc,CAAC;IAC7B,SAAS,EAAE,WAAW,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;CACf;AAcD,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,GAC/C,gBAAgB,CAWlB;AAED,wBAAgB,mBAAmB,IAAI,gBAAgB,CAEtD;AAED,wBAAgB,qBAAqB,IAAI,gBAAgB,CAGxD"}
@@ -0,0 +1,31 @@
1
+ import { createUiTheme, } from "./theme.js";
2
+ const DEFAULT_OPTIONS = {
3
+ v2Enabled: true,
4
+ colorProfile: "truecolor",
5
+ glyphMode: "ascii",
6
+ theme: createUiTheme({
7
+ profile: "truecolor",
8
+ glyphMode: "ascii",
9
+ }),
10
+ };
11
+ let runtimeOptions = { ...DEFAULT_OPTIONS };
12
+ export function setUiRuntimeOptions(options) {
13
+ const v2Enabled = options.v2Enabled ?? runtimeOptions.v2Enabled;
14
+ const colorProfile = options.colorProfile ?? runtimeOptions.colorProfile;
15
+ const glyphMode = options.glyphMode ?? runtimeOptions.glyphMode;
16
+ runtimeOptions = {
17
+ v2Enabled,
18
+ colorProfile,
19
+ glyphMode,
20
+ theme: createUiTheme({ profile: colorProfile, glyphMode }),
21
+ };
22
+ return runtimeOptions;
23
+ }
24
+ export function getUiRuntimeOptions() {
25
+ return runtimeOptions;
26
+ }
27
+ export function resetUiRuntimeOptions() {
28
+ runtimeOptions = { ...DEFAULT_OPTIONS };
29
+ return runtimeOptions;
30
+ }
31
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../lib/ui/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,GAIb,MAAM,YAAY,CAAC;AASpB,MAAM,eAAe,GAAqB;IACzC,SAAS,EAAE,IAAI;IACf,YAAY,EAAE,WAAW;IACzB,SAAS,EAAE,OAAO;IAClB,KAAK,EAAE,aAAa,CAAC;QACpB,OAAO,EAAE,WAAW;QACpB,SAAS,EAAE,OAAO;KAClB,CAAC;CACF,CAAC;AAEF,IAAI,cAAc,GAAqB,EAAE,GAAG,eAAe,EAAE,CAAC;AAE9D,MAAM,UAAU,mBAAmB,CAClC,OAAiD;IAEjD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,cAAc,CAAC,SAAS,CAAC;IAChE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,cAAc,CAAC,YAAY,CAAC;IACzE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,cAAc,CAAC,SAAS,CAAC;IAChE,cAAc,GAAG;QAChB,SAAS;QACT,YAAY;QACZ,SAAS;QACT,KAAK,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;KAC1D,CAAC;IACF,OAAO,cAAc,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,mBAAmB;IAClC,OAAO,cAAc,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,qBAAqB;IACpC,cAAc,GAAG,EAAE,GAAG,eAAe,EAAE,CAAC;IACxC,OAAO,cAAc,CAAC;AACvB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { UiTheme } from "./theme.js";
2
+ export interface MenuItem<T = string> {
3
+ label: string;
4
+ value: T;
5
+ hint?: string;
6
+ disabled?: boolean;
7
+ separator?: boolean;
8
+ kind?: "heading";
9
+ color?: "red" | "green" | "yellow" | "cyan";
10
+ }
11
+ export interface SelectOptions {
12
+ message: string;
13
+ subtitle?: string;
14
+ help?: string;
15
+ clearScreen?: boolean;
16
+ variant?: "legacy" | "codex";
17
+ theme?: UiTheme;
18
+ }
19
+ export declare function select<T>(items: MenuItem<T>[], options: SelectOptions): Promise<T | null>;
20
+ //# sourceMappingURL=select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../lib/ui/select.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,MAAM;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,CAAC;IACT,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC5C;AAED,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAoED,wBAAsB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAqU/F"}