codex-multi-auth 2.19.0 → 2.19.1

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 (32) hide show
  1. package/.codex-plugin/plugin.json +1 -1
  2. package/README.md +2 -2
  3. package/dist/lib/codex-manager/dashboard-settings-data.js +2 -0
  4. package/dist/lib/codex-manager/formatters/subscription-status.d.ts +2 -2
  5. package/dist/lib/codex-manager/formatters/text-style.js +4 -1
  6. package/dist/lib/codex-manager/settings-hub/dashboard.d.ts +1 -1
  7. package/dist/lib/codex-manager/settings-hub/dashboard.js +4 -0
  8. package/dist/lib/codex-manager/settings-panels.d.ts +1 -0
  9. package/dist/lib/codex-manager/settings-panels.js +1 -0
  10. package/dist/lib/codex-manager/theme-settings-panel.d.ts +2 -1
  11. package/dist/lib/codex-manager/theme-settings-panel.js +39 -0
  12. package/dist/lib/dashboard-settings.d.ts +2 -0
  13. package/dist/lib/dashboard-settings.js +18 -0
  14. package/dist/lib/model-route-policy.d.ts +5 -5
  15. package/dist/lib/quota-readiness.d.ts +2 -2
  16. package/dist/lib/request/url-rewriting.js +3 -1
  17. package/dist/lib/runtime/account-model-catalog.d.ts +5 -5
  18. package/dist/lib/runtime/account-reset-credits.d.ts +2 -2
  19. package/dist/lib/runtime/model-discovery-status.d.ts +5 -5
  20. package/dist/lib/runtime/reset-credits.d.ts +7 -7
  21. package/dist/lib/runtime/resume-picker.js +1 -1
  22. package/dist/lib/runtime/workspace-model-scopes.d.ts +3 -3
  23. package/dist/lib/schemas.d.ts +65 -65
  24. package/dist/lib/ui/index.d.ts +1 -1
  25. package/dist/lib/ui/index.js +1 -1
  26. package/dist/lib/ui/runtime.d.ts +3 -1
  27. package/dist/lib/ui/runtime.js +11 -1
  28. package/dist/lib/ui/theme.d.ts +20 -1
  29. package/dist/lib/ui/theme.js +154 -30
  30. package/dist/lib/ui/ui-copy.d.ts +3 -2
  31. package/dist/lib/ui/ui-copy.js +3 -2
  32. package/package.json +25 -24
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-multi-auth",
3
- "version": "2.19.0",
3
+ "version": "2.19.1",
4
4
  "description": "Install and operate codex-multi-auth for the official @openai/codex CLI with multi-account OAuth rotation, switching, health checks, and recovery tools.",
5
5
  "interface": {
6
6
  "composerIcon": "./assets/codex-multi-auth-icon.svg"
package/README.md CHANGED
@@ -33,7 +33,7 @@ Using OpenCode rather than the Codex CLI? The sibling project [`oc-codex-multi-a
33
33
 
34
34
  ## Install
35
35
 
36
- Requirements: Node.js >= 18.17, and the official Codex CLI on `PATH` (`npm i -g @openai/codex`, Homebrew, or a release binary).
36
+ Requirements: Node.js >= 22.19, and the official Codex CLI on `PATH` (`npm i -g @openai/codex`, Homebrew, or a release binary).
37
37
 
38
38
  ```bash
39
39
  npm i -g codex-multi-auth
@@ -137,7 +137,7 @@ Common symptoms — wrong active account, OAuth callback port `1455` already bou
137
137
 
138
138
  ## Release notes
139
139
 
140
- - Current stable: [v2.19.0](docs/releases/v2.19.0.md) — `npm i -g codex-multi-auth`
140
+ - Current stable: [v2.19.1](docs/releases/v2.19.1.md) — `npm i -g codex-multi-auth`
141
141
  - Earlier stable lines: [v2.6.0](docs/releases/v2.6.0.md), [v2.5.0](docs/releases/v2.5.0.md)
142
142
  - Full release archive: [docs/README.md#release-history](docs/README.md#release-history)
143
143
 
@@ -22,6 +22,7 @@ export function cloneDashboardSettingsData(settings, deps) {
22
22
  menuSortQuickSwitchVisibleRow: settings.menuSortQuickSwitchVisibleRow ?? true,
23
23
  uiThemePreset: settings.uiThemePreset ?? "green",
24
24
  uiAccentColor: settings.uiAccentColor ?? "green",
25
+ uiColorMode: settings.uiColorMode ?? "auto",
25
26
  menuShowStatusBadge: settings.menuShowStatusBadge ?? true,
26
27
  menuShowCurrentBadge: settings.menuShowCurrentBadge ?? true,
27
28
  menuShowLastUsed: settings.menuShowLastUsed ?? true,
@@ -71,6 +72,7 @@ export function dashboardSettingsDataEqual(left, right, deps) {
71
72
  (right.menuSortQuickSwitchVisibleRow ?? true) &&
72
73
  (left.uiThemePreset ?? "green") === (right.uiThemePreset ?? "green") &&
73
74
  (left.uiAccentColor ?? "green") === (right.uiAccentColor ?? "green") &&
75
+ (left.uiColorMode ?? "auto") === (right.uiColorMode ?? "auto") &&
74
76
  (left.menuShowStatusBadge ?? true) ===
75
77
  (right.menuShowStatusBadge ?? true) &&
76
78
  (left.menuShowCurrentBadge ?? true) ===
@@ -7,8 +7,8 @@ export declare function subscriptionStatus(account: AccountMetadataV3, entry: Qu
7
7
  planLabel: string;
8
8
  selectedWorkspace: string;
9
9
  autoPrime: boolean | null;
10
- primingState: "failed" | "unknown" | "awaiting-first-use" | "timer-running" | "used" | "completed" | "not-applicable";
11
- primingFailure: "timed out" | "stream ended early" | "upstream failed" | "response too large" | "network error" | null;
10
+ primingState: "awaiting-first-use" | "completed" | "failed" | "not-applicable" | "timer-running" | "unknown" | "used";
11
+ primingFailure: "network error" | "response too large" | "stream ended early" | "timed out" | "upstream failed" | null;
12
12
  automaticBlock: string | null;
13
13
  freshness: string;
14
14
  observedAt: number | null;
@@ -8,7 +8,10 @@ export function stylePromptText(text, tone) {
8
8
  const ui = getUiRuntimeOptions();
9
9
  if (ui.v2Enabled) {
10
10
  if (tone === "muted") {
11
- return `${ui.theme.colors.dim}${paintUiText(ui, text, "muted")}${ui.theme.colors.reset}`;
11
+ // In light mode the muted foreground is already dark; stacking the
12
+ // dim attribute on top makes the text faint again on light themes.
13
+ const dim = ui.theme.colorMode === "light" ? "" : ui.theme.colors.dim;
14
+ return `${dim}${paintUiText(ui, text, "muted")}${ui.theme.colors.reset}`;
12
15
  }
13
16
  const mapped = tone === "accent" ? "primary" : tone;
14
17
  return paintUiText(ui, text, mapped);
@@ -1,6 +1,6 @@
1
1
  import { type DashboardDisplaySettings } from "../../dashboard-settings.js";
2
2
  export declare const BEHAVIOR_PANEL_KEYS: readonly ["actionAutoReturnMs", "actionPauseOnKey", "menuAutoFetchLimits", "menuShowFetchStatus", "menuQuotaTtlMs"];
3
- export declare const THEME_PANEL_KEYS: readonly ["uiThemePreset", "uiAccentColor"];
3
+ export declare const THEME_PANEL_KEYS: readonly ["uiThemePreset", "uiAccentColor", "uiColorMode"];
4
4
  export declare function applyUiThemeFromDashboardSettings(settings: DashboardDisplaySettings): void;
5
5
  export declare function promptDashboardDisplaySettings(initial: DashboardDisplaySettings): Promise<DashboardDisplaySettings | null>;
6
6
  export declare function configureDashboardDisplaySettings(currentSettings?: DashboardDisplaySettings): Promise<DashboardDisplaySettings>;
@@ -93,6 +93,7 @@ const ACCENT_COLOR_OPTIONS = [
93
93
  "blue",
94
94
  "yellow",
95
95
  ];
96
+ const COLOR_MODE_OPTIONS = ["auto", "dark", "light"];
96
97
  const ACCOUNT_LIST_PANEL_KEYS = [
97
98
  "menuShowStatusBadge",
98
99
  "menuShowCurrentBadge",
@@ -121,6 +122,7 @@ export const BEHAVIOR_PANEL_KEYS = [
121
122
  export const THEME_PANEL_KEYS = [
122
123
  "uiThemePreset",
123
124
  "uiAccentColor",
125
+ "uiColorMode",
124
126
  ];
125
127
  export function applyUiThemeFromDashboardSettings(settings) {
126
128
  const current = getUiRuntimeOptions();
@@ -130,6 +132,7 @@ export function applyUiThemeFromDashboardSettings(settings) {
130
132
  glyphMode: current.glyphMode,
131
133
  palette: settings.uiThemePreset ?? "green",
132
134
  accent: settings.uiAccentColor ?? "green",
135
+ colorMode: settings.uiColorMode ?? "auto",
133
136
  });
134
137
  }
135
138
  /* c8 ignore start - interactive prompt flows are covered by integration tests */
@@ -215,6 +218,7 @@ export async function promptThemeSettings(initial) {
215
218
  applyUiThemeFromDashboardSettings,
216
219
  THEME_PRESET_OPTIONS,
217
220
  ACCENT_COLOR_OPTIONS,
221
+ COLOR_MODE_OPTIONS,
218
222
  THEME_PANEL_KEYS,
219
223
  UI_COPY,
220
224
  });
@@ -50,6 +50,7 @@ export declare function promptThemeSettingsPanelEntry(params: {
50
50
  applyUiThemeFromDashboardSettings: ThemeSettingsPanelDeps["applyUiThemeFromDashboardSettings"];
51
51
  THEME_PRESET_OPTIONS: ThemeSettingsPanelDeps["THEME_PRESET_OPTIONS"];
52
52
  ACCENT_COLOR_OPTIONS: ThemeSettingsPanelDeps["ACCENT_COLOR_OPTIONS"];
53
+ COLOR_MODE_OPTIONS: ThemeSettingsPanelDeps["COLOR_MODE_OPTIONS"];
53
54
  THEME_PANEL_KEYS: ThemeSettingsPanelDeps["THEME_PANEL_KEYS"];
54
55
  UI_COPY: ThemeSettingsPanelDeps["UI_COPY"];
55
56
  }): Promise<DashboardDisplaySettings | null>;
@@ -66,6 +66,7 @@ export async function promptThemeSettingsPanelEntry(params) {
66
66
  applyUiThemeFromDashboardSettings: params.applyUiThemeFromDashboardSettings,
67
67
  THEME_PRESET_OPTIONS: params.THEME_PRESET_OPTIONS,
68
68
  ACCENT_COLOR_OPTIONS: params.ACCENT_COLOR_OPTIONS,
69
+ COLOR_MODE_OPTIONS: params.COLOR_MODE_OPTIONS,
69
70
  THEME_PANEL_KEYS: params.THEME_PANEL_KEYS,
70
71
  UI_COPY: params.UI_COPY,
71
72
  });
@@ -1,4 +1,4 @@
1
- import type { DashboardAccentColor, DashboardDisplaySettings, DashboardThemePreset } from "../dashboard-settings.js";
1
+ import type { DashboardAccentColor, DashboardColorMode, DashboardDisplaySettings, DashboardThemePreset } from "../dashboard-settings.js";
2
2
  import type { UI_COPY } from "../ui/ui-copy.js";
3
3
  export interface ThemeSettingsPanelDeps {
4
4
  cloneDashboardSettings: (settings: DashboardDisplaySettings) => DashboardDisplaySettings;
@@ -6,6 +6,7 @@ export interface ThemeSettingsPanelDeps {
6
6
  applyUiThemeFromDashboardSettings: (settings: DashboardDisplaySettings) => void;
7
7
  THEME_PRESET_OPTIONS: readonly DashboardThemePreset[];
8
8
  ACCENT_COLOR_OPTIONS: readonly DashboardAccentColor[];
9
+ COLOR_MODE_OPTIONS: readonly DashboardColorMode[];
9
10
  THEME_PANEL_KEYS: readonly (keyof DashboardDisplaySettings)[];
10
11
  UI_COPY: typeof UI_COPY;
11
12
  }
@@ -14,6 +14,7 @@ export async function promptThemeSettingsPanel(initial, deps) {
14
14
  const ui = getUiRuntimeOptions();
15
15
  const palette = draft.uiThemePreset ?? "green";
16
16
  const accent = draft.uiAccentColor ?? "green";
17
+ const colorMode = draft.uiColorMode ?? "auto";
17
18
  const paletteItems = deps.THEME_PRESET_OPTIONS.map((candidate, index) => {
18
19
  const color = palette === candidate ? "green" : "yellow";
19
20
  return {
@@ -33,6 +34,21 @@ export async function promptThemeSettingsPanel(initial, deps) {
33
34
  color,
34
35
  };
35
36
  });
37
+ const colorModeItems = deps.COLOR_MODE_OPTIONS.map((candidate) => {
38
+ const color = colorMode === candidate ? "green" : "yellow";
39
+ const key = candidate === "auto" ? "A" : candidate === "dark" ? "D" : "L";
40
+ const hint = candidate === "auto"
41
+ ? "Detect from COLORFGBG; dark when unknown."
42
+ : candidate === "dark"
43
+ ? "Pale text on a dark terminal background."
44
+ : "Dark text on a light terminal background.";
45
+ return {
46
+ label: `${colorMode === candidate ? "[x]" : "[ ]"} ${key}. ${candidate}`,
47
+ hint,
48
+ value: { type: "set-color-mode", colorMode: candidate },
49
+ color,
50
+ };
51
+ });
36
52
  const items = [
37
53
  {
38
54
  label: deps.UI_COPY.settings.baseTheme,
@@ -48,6 +64,13 @@ export async function promptThemeSettingsPanel(initial, deps) {
48
64
  },
49
65
  ...accentItems,
50
66
  { label: "", value: { type: "cancel" }, separator: true },
67
+ {
68
+ label: deps.UI_COPY.settings.terminalBackground,
69
+ value: { type: "cancel" },
70
+ kind: "heading",
71
+ },
72
+ ...colorModeItems,
73
+ { label: "", value: { type: "cancel" }, separator: true },
51
74
  {
52
75
  label: deps.UI_COPY.settings.resetDefault,
53
76
  value: { type: "reset" },
@@ -74,6 +97,10 @@ export async function promptThemeSettingsPanel(initial, deps) {
74
97
  if (value.type === "set-accent" && focus.type === "set-accent") {
75
98
  return value.accent === focus.accent;
76
99
  }
100
+ if (value.type === "set-color-mode" &&
101
+ focus.type === "set-color-mode") {
102
+ return value.colorMode === focus.colorMode;
103
+ }
77
104
  return true;
78
105
  });
79
106
  const result = await select(items, {
@@ -98,6 +125,12 @@ export async function promptThemeSettingsPanel(initial, deps) {
98
125
  return { type: "save" };
99
126
  if (lower === "r")
100
127
  return { type: "reset" };
128
+ if (lower === "a")
129
+ return { type: "set-color-mode", colorMode: "auto" };
130
+ if (lower === "d")
131
+ return { type: "set-color-mode", colorMode: "dark" };
132
+ if (lower === "l")
133
+ return { type: "set-color-mode", colorMode: "light" };
101
134
  if (raw === "1")
102
135
  return { type: "set-palette", palette: "green" };
103
136
  if (raw === "2")
@@ -123,6 +156,12 @@ export async function promptThemeSettingsPanel(initial, deps) {
123
156
  deps.applyUiThemeFromDashboardSettings(draft);
124
157
  continue;
125
158
  }
159
+ if (result.type === "set-color-mode") {
160
+ draft = { ...draft, uiColorMode: result.colorMode };
161
+ focus = result;
162
+ deps.applyUiThemeFromDashboardSettings(draft);
163
+ continue;
164
+ }
126
165
  draft = { ...draft, uiAccentColor: result.accent };
127
166
  focus = result;
128
167
  deps.applyUiThemeFromDashboardSettings(draft);
@@ -1,5 +1,6 @@
1
1
  export type DashboardThemePreset = "green" | "blue";
2
2
  export type DashboardAccentColor = "green" | "cyan" | "blue" | "yellow";
3
+ export type DashboardColorMode = "auto" | "dark" | "light";
3
4
  export type DashboardAccountSortMode = "manual" | "ready-first";
4
5
  type DashboardLayoutMode = "compact-details" | "expanded-rows";
5
6
  type DashboardFocusStyle = "row-invert";
@@ -18,6 +19,7 @@ export interface DashboardDisplaySettings {
18
19
  menuSortQuickSwitchVisibleRow?: boolean;
19
20
  uiThemePreset?: DashboardThemePreset;
20
21
  uiAccentColor?: DashboardAccentColor;
22
+ uiColorMode?: DashboardColorMode;
21
23
  menuShowStatusBadge?: boolean;
22
24
  menuShowCurrentBadge?: boolean;
23
25
  menuShowLastUsed?: boolean;
@@ -19,6 +19,7 @@ export const DEFAULT_DASHBOARD_DISPLAY_SETTINGS = {
19
19
  menuSortQuickSwitchVisibleRow: true,
20
20
  uiThemePreset: "green",
21
21
  uiAccentColor: "green",
22
+ uiColorMode: "auto",
22
23
  menuShowStatusBadge: true,
23
24
  menuShowCurrentBadge: true,
24
25
  menuShowLastUsed: true,
@@ -102,6 +103,22 @@ function normalizeAccentColor(value) {
102
103
  return "green";
103
104
  }
104
105
  }
106
+ /**
107
+ * Normalize an input value into a dashboard terminal-background mode.
108
+ *
109
+ * @param value - Input value to coerce into a color mode
110
+ * @returns `'dark'` or `'light'` if `value` matches one of those strings; otherwise `'auto'` (terminal detection)
111
+ */
112
+ function normalizeColorMode(value) {
113
+ switch (value) {
114
+ case "dark":
115
+ return "dark";
116
+ case "light":
117
+ return "light";
118
+ default:
119
+ return "auto";
120
+ }
121
+ }
105
122
  /**
106
123
  * Validate a dashboard layout mode, allowing only "expanded-rows".
107
124
  *
@@ -249,6 +266,7 @@ export function normalizeDashboardDisplaySettings(value) {
249
266
  menuSortQuickSwitchVisibleRow: normalizeBoolean(value.menuSortQuickSwitchVisibleRow, DEFAULT_DASHBOARD_DISPLAY_SETTINGS.menuSortQuickSwitchVisibleRow ?? true),
250
267
  uiThemePreset: normalizeThemePreset(value.uiThemePreset),
251
268
  uiAccentColor: normalizeAccentColor(value.uiAccentColor),
269
+ uiColorMode: normalizeColorMode(value.uiColorMode),
252
270
  menuShowStatusBadge: normalizeBoolean(value.menuShowStatusBadge, DEFAULT_DASHBOARD_DISPLAY_SETTINGS.menuShowStatusBadge ?? true),
253
271
  menuShowCurrentBadge: normalizeBoolean(value.menuShowCurrentBadge, DEFAULT_DASHBOARD_DISPLAY_SETTINGS.menuShowCurrentBadge ?? true),
254
272
  menuShowLastUsed: normalizeBoolean(value.menuShowLastUsed, DEFAULT_DASHBOARD_DISPLAY_SETTINGS.menuShowLastUsed ?? true),
@@ -37,15 +37,15 @@ export declare function resolveModelRoute(model: string, catalogs: RouteCatalog[
37
37
  export declare function buildVisibleModelUnion(catalogs: RouteCatalog[]): RouteModel[];
38
38
  /** Whitelist capability metadata; never persist model instructions or arbitrary fields. */
39
39
  export declare function modelEntitlements(model: RouteModel): {
40
+ model: string;
41
+ checkedAt?: number | undefined;
42
+ probes?: {
43
+ [k: string]: "downgraded" | "unsupported" | "unverified" | "verified";
44
+ } | undefined;
40
45
  serviceTiers: {
41
46
  id: string;
42
47
  name: string;
43
48
  }[];
44
49
  reasoningLevels: string[];
45
50
  accessPrograms: string[];
46
- probes?: {
47
- [k: string]: "unsupported" | "verified" | "unverified" | "downgraded";
48
- } | undefined;
49
- checkedAt?: number | undefined;
50
- model: string;
51
51
  };
@@ -12,9 +12,9 @@ export declare function buildQuotaEmailFallbackState(accounts: readonly QuotaCac
12
12
  export declare function hasSafeQuotaEmailFallback(emailFallbackState: ReadonlyMap<string, QuotaEmailFallbackState>, account: QuotaCacheAccountRef): boolean;
13
13
  export declare function quotaLeftPercentFromUsed(usedPercent: number | undefined): number | undefined;
14
14
  export declare function quotaUsedPercentIsExhausted(usedPercent: number | undefined): boolean;
15
- export declare function isQuotaCacheEntryExhausted(entry: Pick<QuotaCacheEntry, "primary" | "secondary"> & {
15
+ export declare function isQuotaCacheEntryExhausted(entry: (Pick<QuotaCacheEntry, "primary" | "secondary"> & {
16
16
  updatedAt?: number;
17
- } | null | undefined, now?: number): boolean;
17
+ }) | null | undefined, now?: number): boolean;
18
18
  /** Cache identity includes the credential record, so shared organization IDs cannot collide. */
19
19
  export declare function quotaWorkspaceKey(account: QuotaCacheAccountRef, workspaceId: string): string | undefined;
20
20
  /** Display the selected workspace; callers routing another scope must pass that exact workspace. */
@@ -121,7 +121,9 @@ function getSharedProxyDispatcher(proxyUrl) {
121
121
  if (existing) {
122
122
  return existing;
123
123
  }
124
- const dispatcher = new ProxyAgent(proxyUrl);
124
+ // undici 8 enables H2 on TLS ALPN; keep HTTP/1.1 so upstream protocol
125
+ // behavior matches the 6.x line this pin replaces.
126
+ const dispatcher = new ProxyAgent({ uri: proxyUrl, allowH2: false });
125
127
  sharedProxyDispatchers.set(proxyUrl, dispatcher);
126
128
  return dispatcher;
127
129
  }
@@ -46,17 +46,17 @@ export declare class AccountModelCatalog {
46
46
  checkedAt: number;
47
47
  models: string[];
48
48
  entitlements: {
49
+ model: string;
50
+ checkedAt?: number | undefined;
51
+ probes?: {
52
+ [k: string]: "downgraded" | "unsupported" | "unverified" | "verified";
53
+ } | undefined;
49
54
  serviceTiers: {
50
55
  id: string;
51
56
  name: string;
52
57
  }[];
53
58
  reasoningLevels: string[];
54
59
  accessPrograms: string[];
55
- probes?: {
56
- [k: string]: "unsupported" | "verified" | "unverified" | "downgraded";
57
- } | undefined;
58
- checkedAt?: number | undefined;
59
- model: string;
60
60
  }[];
61
61
  error: boolean;
62
62
  };
@@ -6,7 +6,7 @@ export declare function isResetTargetEnabled(account: AccountMetadataV3, target:
6
6
  export declare function createResetCreditService(manager?: AccountManager): ResetCreditService;
7
7
  export declare function loadResetCreditState(): Promise<{
8
8
  version: 1;
9
- policy: "manual" | "last-resort";
9
+ policy: "last-resort" | "manual";
10
10
  snapshots: Record<string, {
11
11
  updatedAt: number;
12
12
  availableCount: number | null;
@@ -32,7 +32,7 @@ export declare function loadResetCreditState(): Promise<{
32
32
  lastRedemption?: {
33
33
  key: string;
34
34
  at: number;
35
- outcome: "reset" | "nothingToReset" | "noCredit" | "alreadyRedeemed";
35
+ outcome: "alreadyRedeemed" | "noCredit" | "nothingToReset" | "reset";
36
36
  automatic: boolean;
37
37
  } | undefined;
38
38
  }>;
@@ -23,10 +23,10 @@ declare const schema: z.ZodObject<{
23
23
  model: z.ZodString;
24
24
  checkedAt: z.ZodOptional<z.ZodNumber>;
25
25
  probes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
26
+ downgraded: "downgraded";
26
27
  unsupported: "unsupported";
27
- verified: "verified";
28
28
  unverified: "unverified";
29
- downgraded: "downgraded";
29
+ verified: "verified";
30
30
  }>>>;
31
31
  serviceTiers: z.ZodArray<z.ZodObject<{
32
32
  id: z.ZodString;
@@ -38,8 +38,8 @@ declare const schema: z.ZodObject<{
38
38
  }, z.core.$strip>>;
39
39
  label: z.ZodString;
40
40
  kind: z.ZodEnum<{
41
- oauth: "oauth";
42
41
  api: "api";
42
+ oauth: "oauth";
43
43
  zdr: "zdr";
44
44
  }>;
45
45
  enabled: z.ZodBoolean;
@@ -51,10 +51,10 @@ declare const schema: z.ZodObject<{
51
51
  model: z.ZodString;
52
52
  checkedAt: z.ZodOptional<z.ZodNumber>;
53
53
  probes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
54
+ downgraded: "downgraded";
54
55
  unsupported: "unsupported";
55
- verified: "verified";
56
56
  unverified: "unverified";
57
- downgraded: "downgraded";
57
+ verified: "verified";
58
58
  }>>>;
59
59
  serviceTiers: z.ZodArray<z.ZodObject<{
60
60
  id: z.ZodString;
@@ -24,8 +24,8 @@ export type ResetSnapshot = z.infer<typeof snapshotSchema>;
24
24
  declare const stateSchema: z.ZodObject<{
25
25
  version: z.ZodLiteral<1>;
26
26
  policy: z.ZodDefault<z.ZodEnum<{
27
- manual: "manual";
28
27
  "last-resort": "last-resort";
28
+ manual: "manual";
29
29
  }>>;
30
30
  snapshots: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
31
31
  updatedAt: z.ZodNumber;
@@ -53,10 +53,10 @@ declare const stateSchema: z.ZodObject<{
53
53
  key: z.ZodString;
54
54
  at: z.ZodNumber;
55
55
  outcome: z.ZodEnum<{
56
- reset: "reset";
57
- nothingToReset: "nothingToReset";
58
- noCredit: "noCredit";
59
56
  alreadyRedeemed: "alreadyRedeemed";
57
+ noCredit: "noCredit";
58
+ nothingToReset: "nothingToReset";
59
+ reset: "reset";
60
60
  }>;
61
61
  automatic: z.ZodBoolean;
62
62
  }, z.core.$strip>>;
@@ -64,10 +64,10 @@ declare const stateSchema: z.ZodObject<{
64
64
  type State = z.infer<typeof stateSchema>;
65
65
  declare const outcomeSchema: z.ZodObject<{
66
66
  outcome: z.ZodEnum<{
67
- reset: "reset";
68
- nothingToReset: "nothingToReset";
69
- noCredit: "noCredit";
70
67
  alreadyRedeemed: "alreadyRedeemed";
68
+ noCredit: "noCredit";
69
+ nothingToReset: "nothingToReset";
70
+ reset: "reset";
71
71
  }>;
72
72
  }, z.core.$strip>;
73
73
  export type ResetOutcome = z.infer<typeof outcomeSchema>['outcome'];
@@ -104,7 +104,7 @@ function displayText(value) {
104
104
  // Session titles and directory names are untrusted terminal output.
105
105
  return String(value).replace(/[\x00-\x1f\x7f-\x9f]/g, " ").slice(0, 180);
106
106
  }
107
- export async function pickResumeThread(options, deps = { createCatalog: createResumeCatalog, select: (select) }) {
107
+ export async function pickResumeThread(options, deps = { createCatalog: createResumeCatalog, select: select }) {
108
108
  const catalog = deps.createCatalog(options);
109
109
  const pages = [];
110
110
  let pageIndex = 0;
@@ -2,13 +2,13 @@ import { type ManagedAccount } from "../accounts.js";
2
2
  export declare function modelScopeId(...parts: string[]): string;
3
3
  /** Request scopes are immutable views. Discovery must never switch a saved account. */
4
4
  export declare function workspaceModelScopes(account: ManagedAccount): {
5
+ accountId: string;
6
+ workspaceIndex: number;
7
+ enabled: boolean;
5
8
  id: string;
6
9
  accountIndex: number;
7
10
  routable: boolean;
8
11
  bound: boolean;
9
12
  selected: boolean;
10
13
  label: string;
11
- accountId: string;
12
- workspaceIndex: number;
13
- enabled: boolean;
14
14
  }[];