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.
- package/.codex-plugin/plugin.json +1 -1
- package/README.md +2 -2
- package/dist/lib/codex-manager/dashboard-settings-data.js +2 -0
- package/dist/lib/codex-manager/formatters/subscription-status.d.ts +2 -2
- package/dist/lib/codex-manager/formatters/text-style.js +4 -1
- package/dist/lib/codex-manager/settings-hub/dashboard.d.ts +1 -1
- package/dist/lib/codex-manager/settings-hub/dashboard.js +4 -0
- package/dist/lib/codex-manager/settings-panels.d.ts +1 -0
- package/dist/lib/codex-manager/settings-panels.js +1 -0
- package/dist/lib/codex-manager/theme-settings-panel.d.ts +2 -1
- package/dist/lib/codex-manager/theme-settings-panel.js +39 -0
- package/dist/lib/dashboard-settings.d.ts +2 -0
- package/dist/lib/dashboard-settings.js +18 -0
- package/dist/lib/model-route-policy.d.ts +5 -5
- package/dist/lib/quota-readiness.d.ts +2 -2
- package/dist/lib/request/url-rewriting.js +3 -1
- package/dist/lib/runtime/account-model-catalog.d.ts +5 -5
- package/dist/lib/runtime/account-reset-credits.d.ts +2 -2
- package/dist/lib/runtime/model-discovery-status.d.ts +5 -5
- package/dist/lib/runtime/reset-credits.d.ts +7 -7
- package/dist/lib/runtime/resume-picker.js +1 -1
- package/dist/lib/runtime/workspace-model-scopes.d.ts +3 -3
- package/dist/lib/schemas.d.ts +65 -65
- package/dist/lib/ui/index.d.ts +1 -1
- package/dist/lib/ui/index.js +1 -1
- package/dist/lib/ui/runtime.d.ts +3 -1
- package/dist/lib/ui/runtime.js +11 -1
- package/dist/lib/ui/theme.d.ts +20 -1
- package/dist/lib/ui/theme.js +154 -30
- package/dist/lib/ui/ui-copy.d.ts +3 -2
- package/dist/lib/ui/ui-copy.js +3 -2
- package/package.json +25 -24
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codex-multi-auth",
|
|
3
|
-
"version": "2.19.
|
|
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 >=
|
|
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.
|
|
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: "
|
|
11
|
-
primingFailure: "
|
|
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
|
-
|
|
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
|
-
|
|
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: "
|
|
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: "
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
}[];
|