codex-multi-auth 2.16.0 → 2.17.2
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 +9 -9
- package/LICENSE +21 -21
- package/README.md +487 -463
- package/assets/codex-multi-auth-icon.svg +39 -39
- package/assets/readme-hero.svg +31 -31
- package/config/README.md +31 -31
- package/config/codex-legacy.json +1221 -1221
- package/config/codex-modern.json +423 -423
- package/config/minimal-codex.json +15 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -3
- package/dist/lib/account-policy.d.ts +4 -0
- package/dist/lib/account-policy.d.ts.map +1 -1
- package/dist/lib/account-policy.js +8 -0
- package/dist/lib/accounts/rate-limits.d.ts.map +1 -1
- package/dist/lib/accounts/rate-limits.js +2 -0
- package/dist/lib/accounts.d.ts +15 -3
- package/dist/lib/accounts.d.ts.map +1 -1
- package/dist/lib/accounts.js +231 -30
- package/dist/lib/api-route-store.d.ts +24 -0
- package/dist/lib/api-route-store.d.ts.map +1 -0
- package/dist/lib/api-route-store.js +145 -0
- package/dist/lib/auth/account-access.d.ts +115 -0
- package/dist/lib/auth/account-access.d.ts.map +1 -0
- package/dist/lib/auth/account-access.js +214 -0
- package/dist/lib/auth/token-utils.d.ts +54 -1
- package/dist/lib/auth/token-utils.d.ts.map +1 -1
- package/dist/lib/auth/token-utils.js +92 -7
- package/dist/lib/cli.d.ts +1 -1
- package/dist/lib/cli.d.ts.map +1 -1
- package/dist/lib/cli.js +4 -0
- package/dist/lib/codex-cli/state.d.ts +7 -0
- package/dist/lib/codex-cli/state.d.ts.map +1 -1
- package/dist/lib/codex-cli/state.js +18 -0
- package/dist/lib/codex-cli/writer.d.ts.map +1 -1
- package/dist/lib/codex-cli/writer.js +60 -8
- package/dist/lib/codex-manager/account-manager-commands.d.ts.map +1 -1
- package/dist/lib/codex-manager/account-manager-commands.js +1 -0
- package/dist/lib/codex-manager/account-pool-write.d.ts +3 -1
- package/dist/lib/codex-manager/account-pool-write.d.ts.map +1 -1
- package/dist/lib/codex-manager/account-pool-write.js +4 -0
- package/dist/lib/codex-manager/api-login-menu.d.ts +14 -0
- package/dist/lib/codex-manager/api-login-menu.d.ts.map +1 -0
- package/dist/lib/codex-manager/api-login-menu.js +224 -0
- package/dist/lib/codex-manager/commands/account.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/account.js +27 -0
- package/dist/lib/codex-manager/commands/best.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/best.js +6 -2
- package/dist/lib/codex-manager/commands/check.d.ts +7 -1
- package/dist/lib/codex-manager/commands/check.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/check.js +24 -3
- package/dist/lib/codex-manager/commands/forecast.d.ts +1 -1
- package/dist/lib/codex-manager/commands/forecast.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/forecast.js +7 -3
- package/dist/lib/codex-manager/commands/report.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/report.js +5 -1
- package/dist/lib/codex-manager/commands/resets.d.ts +2 -0
- package/dist/lib/codex-manager/commands/resets.d.ts.map +1 -0
- package/dist/lib/codex-manager/commands/resets.js +67 -0
- package/dist/lib/codex-manager/commands/rotation.d.ts +2 -2
- package/dist/lib/codex-manager/commands/rotation.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/rotation.js +63 -12
- package/dist/lib/codex-manager/commands/status.d.ts +12 -1
- package/dist/lib/codex-manager/commands/status.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/status.js +166 -22
- package/dist/lib/codex-manager/commands/uninstall.js +1 -1
- package/dist/lib/codex-manager/formatters/quota-formatters.d.ts.map +1 -1
- package/dist/lib/codex-manager/formatters/quota-formatters.js +3 -2
- package/dist/lib/codex-manager/health-check.d.ts +3 -0
- package/dist/lib/codex-manager/health-check.d.ts.map +1 -1
- package/dist/lib/codex-manager/health-check.js +57 -7
- package/dist/lib/codex-manager/help.d.ts.map +1 -1
- package/dist/lib/codex-manager/help.js +4 -2
- package/dist/lib/codex-manager/login-flow.d.ts.map +1 -1
- package/dist/lib/codex-manager/login-flow.js +69 -7
- package/dist/lib/codex-manager/login-menu-data.d.ts.map +1 -1
- package/dist/lib/codex-manager/login-menu-data.js +21 -8
- package/dist/lib/codex-manager/login-oauth.d.ts +3 -0
- package/dist/lib/codex-manager/login-oauth.d.ts.map +1 -1
- package/dist/lib/codex-manager/login-oauth.js +6 -1
- package/dist/lib/codex-manager/login-workspace-choice.d.ts +11 -0
- package/dist/lib/codex-manager/login-workspace-choice.d.ts.map +1 -0
- package/dist/lib/codex-manager/login-workspace-choice.js +37 -0
- package/dist/lib/codex-manager/persist-selected-account.d.ts.map +1 -1
- package/dist/lib/codex-manager/persist-selected-account.js +2 -1
- package/dist/lib/codex-manager/quota-cache-helpers.d.ts +7 -1
- package/dist/lib/codex-manager/quota-cache-helpers.d.ts.map +1 -1
- package/dist/lib/codex-manager/quota-cache-helpers.js +34 -19
- package/dist/lib/codex-manager/repair-commands.d.ts +13 -0
- package/dist/lib/codex-manager/repair-commands.d.ts.map +1 -1
- package/dist/lib/codex-manager/repair-commands.js +144 -9
- package/dist/lib/codex-manager.d.ts.map +1 -1
- package/dist/lib/codex-manager.js +25 -6
- package/dist/lib/concurrency.d.ts +3 -0
- package/dist/lib/concurrency.d.ts.map +1 -0
- package/dist/lib/concurrency.js +31 -0
- package/dist/lib/context-budget-response.js +8 -8
- package/dist/lib/context-overflow.js +10 -10
- package/dist/lib/model-route-policy.d.ts +52 -0
- package/dist/lib/model-route-policy.d.ts.map +1 -0
- package/dist/lib/model-route-policy.js +159 -0
- package/dist/lib/oauth-success.html +125 -125
- package/dist/lib/policy/runtime-policy.d.ts +1 -0
- package/dist/lib/policy/runtime-policy.d.ts.map +1 -1
- package/dist/lib/policy/runtime-policy.js +3 -0
- package/dist/lib/preemptive-quota-scheduler.d.ts +2 -0
- package/dist/lib/preemptive-quota-scheduler.d.ts.map +1 -1
- package/dist/lib/preemptive-quota-scheduler.js +4 -0
- package/dist/lib/prompts/codex-host-bridge.js +138 -138
- package/dist/lib/prompts/codex.js +79 -79
- package/dist/lib/quota-cache.d.ts +7 -3
- package/dist/lib/quota-cache.d.ts.map +1 -1
- package/dist/lib/quota-cache.js +91 -59
- package/dist/lib/quota-probe.d.ts +5 -0
- package/dist/lib/quota-probe.d.ts.map +1 -1
- package/dist/lib/quota-probe.js +26 -2
- package/dist/lib/quota-readiness.d.ts +7 -2
- package/dist/lib/quota-readiness.d.ts.map +1 -1
- package/dist/lib/quota-readiness.js +25 -4
- package/dist/lib/request/client-cancellation.d.ts +5 -0
- package/dist/lib/request/client-cancellation.d.ts.map +1 -0
- package/dist/lib/request/client-cancellation.js +7 -0
- package/dist/lib/request/response-outcome.d.ts +25 -0
- package/dist/lib/request/response-outcome.d.ts.map +1 -0
- package/dist/lib/request/response-outcome.js +49 -0
- package/dist/lib/request/stream-failover-runtime.d.ts +2 -1
- package/dist/lib/request/stream-failover-runtime.d.ts.map +1 -1
- package/dist/lib/request/stream-failover-runtime.js +29 -10
- package/dist/lib/runtime/account-check.d.ts.map +1 -1
- package/dist/lib/runtime/account-check.js +2 -8
- package/dist/lib/runtime/account-model-catalog.d.ts +64 -0
- package/dist/lib/runtime/account-model-catalog.d.ts.map +1 -0
- package/dist/lib/runtime/account-model-catalog.js +154 -0
- package/dist/lib/runtime/account-pool.d.ts +3 -1
- package/dist/lib/runtime/account-pool.d.ts.map +1 -1
- package/dist/lib/runtime/account-pool.js +4 -0
- package/dist/lib/runtime/account-reset-credits.d.ts +42 -0
- package/dist/lib/runtime/account-reset-credits.d.ts.map +1 -0
- package/dist/lib/runtime/account-reset-credits.js +82 -0
- package/dist/lib/runtime/api-model-capabilities.d.ts +30 -0
- package/dist/lib/runtime/api-model-capabilities.d.ts.map +1 -0
- package/dist/lib/runtime/api-model-capabilities.js +434 -0
- package/dist/lib/runtime/api-model-runtime.d.ts +42 -0
- package/dist/lib/runtime/api-model-runtime.d.ts.map +1 -0
- package/dist/lib/runtime/api-model-runtime.js +358 -0
- package/dist/lib/runtime/app-bind.d.ts +19 -1
- package/dist/lib/runtime/app-bind.d.ts.map +1 -1
- package/dist/lib/runtime/app-bind.js +89 -11
- package/dist/lib/runtime/automatic-account-checks.d.ts +35 -0
- package/dist/lib/runtime/automatic-account-checks.d.ts.map +1 -0
- package/dist/lib/runtime/automatic-account-checks.js +140 -0
- package/dist/lib/runtime/automatic-subscription-checks.d.ts +7 -0
- package/dist/lib/runtime/automatic-subscription-checks.d.ts.map +1 -0
- package/dist/lib/runtime/automatic-subscription-checks.js +54 -0
- package/dist/lib/runtime/catalog-capabilities.d.ts +8 -0
- package/dist/lib/runtime/catalog-capabilities.d.ts.map +1 -0
- package/dist/lib/runtime/catalog-capabilities.js +61 -0
- package/dist/lib/runtime/inference-activity.d.ts +15 -0
- package/dist/lib/runtime/inference-activity.d.ts.map +1 -0
- package/dist/lib/runtime/inference-activity.js +95 -0
- package/dist/lib/runtime/model-discovery-status.d.ts +100 -0
- package/dist/lib/runtime/model-discovery-status.d.ts.map +1 -0
- package/dist/lib/runtime/model-discovery-status.js +387 -0
- package/dist/lib/runtime/native-account-storage.d.ts +11 -0
- package/dist/lib/runtime/native-account-storage.d.ts.map +1 -0
- package/dist/lib/runtime/native-account-storage.js +50 -0
- package/dist/lib/runtime/native-account-sync.d.ts +19 -0
- package/dist/lib/runtime/native-account-sync.d.ts.map +1 -0
- package/dist/lib/runtime/native-account-sync.js +62 -0
- package/dist/lib/runtime/native-binding-lock.d.ts +3 -0
- package/dist/lib/runtime/native-binding-lock.d.ts.map +1 -0
- package/dist/lib/runtime/native-binding-lock.js +5 -0
- package/dist/lib/runtime/native-client-auth.d.ts +3 -0
- package/dist/lib/runtime/native-client-auth.d.ts.map +1 -0
- package/dist/lib/runtime/native-client-auth.js +42 -0
- package/dist/lib/runtime/native-provider-config.d.ts +4 -0
- package/dist/lib/runtime/native-provider-config.d.ts.map +1 -0
- package/dist/lib/runtime/native-provider-config.js +52 -0
- package/dist/lib/runtime/native-rate-limits.d.ts +18 -0
- package/dist/lib/runtime/native-rate-limits.d.ts.map +1 -0
- package/dist/lib/runtime/native-rate-limits.js +135 -0
- package/dist/lib/runtime/reset-credit-routing.d.ts +41 -0
- package/dist/lib/runtime/reset-credit-routing.d.ts.map +1 -0
- package/dist/lib/runtime/reset-credit-routing.js +66 -0
- package/dist/lib/runtime/reset-credits.d.ts +101 -0
- package/dist/lib/runtime/reset-credits.d.ts.map +1 -0
- package/dist/lib/runtime/reset-credits.js +162 -0
- package/dist/lib/runtime/response-output-history.d.ts +17 -0
- package/dist/lib/runtime/response-output-history.d.ts.map +1 -0
- package/dist/lib/runtime/response-output-history.js +85 -0
- package/dist/lib/runtime/responses-websocket.d.ts +31 -0
- package/dist/lib/runtime/responses-websocket.d.ts.map +1 -0
- package/dist/lib/runtime/responses-websocket.js +636 -0
- package/dist/lib/runtime/resume-picker.d.ts +41 -0
- package/dist/lib/runtime/resume-picker.d.ts.map +1 -0
- package/dist/lib/runtime/resume-picker.js +169 -0
- package/dist/lib/runtime/rotation-account-selection.d.ts +6 -0
- package/dist/lib/runtime/rotation-account-selection.d.ts.map +1 -1
- package/dist/lib/runtime/rotation-account-selection.js +63 -0
- package/dist/lib/runtime/rotation-proxy-state.d.ts +33 -0
- package/dist/lib/runtime/rotation-proxy-state.d.ts.map +1 -1
- package/dist/lib/runtime/rotation-server-types.d.ts +18 -0
- package/dist/lib/runtime/rotation-server-types.d.ts.map +1 -1
- package/dist/lib/runtime/runtime-capability-failures.d.ts +14 -0
- package/dist/lib/runtime/runtime-capability-failures.d.ts.map +1 -0
- package/dist/lib/runtime/runtime-capability-failures.js +76 -0
- package/dist/lib/runtime/runtime-observability.d.ts +7 -0
- package/dist/lib/runtime/runtime-observability.d.ts.map +1 -1
- package/dist/lib/runtime/runtime-observability.js +42 -2
- package/dist/lib/runtime/subscription-first-use.d.ts +10 -0
- package/dist/lib/runtime/subscription-first-use.d.ts.map +1 -0
- package/dist/lib/runtime/subscription-first-use.js +64 -0
- package/dist/lib/runtime/subscription-quota-event.d.ts +6 -0
- package/dist/lib/runtime/subscription-quota-event.d.ts.map +1 -0
- package/dist/lib/runtime/subscription-quota-event.js +31 -0
- package/dist/lib/runtime/subscription-quota-order.d.ts +17 -0
- package/dist/lib/runtime/subscription-quota-order.d.ts.map +1 -0
- package/dist/lib/runtime/subscription-quota-order.js +31 -0
- package/dist/lib/runtime/workspace-model-scopes.d.ts +15 -0
- package/dist/lib/runtime/workspace-model-scopes.d.ts.map +1 -0
- package/dist/lib/runtime/workspace-model-scopes.js +34 -0
- package/dist/lib/runtime-constants.d.ts +3 -0
- package/dist/lib/runtime-constants.d.ts.map +1 -1
- package/dist/lib/runtime-constants.js +5 -0
- package/dist/lib/runtime-paths.d.ts.map +1 -1
- package/dist/lib/runtime-paths.js +4 -1
- package/dist/lib/runtime-rotation-proxy.d.ts.map +1 -1
- package/dist/lib/runtime-rotation-proxy.js +852 -42
- package/dist/lib/schemas.d.ts +20 -0
- package/dist/lib/schemas.d.ts.map +1 -1
- package/dist/lib/schemas.js +3 -0
- package/dist/lib/storage/credential-sidecars.d.ts +13 -0
- package/dist/lib/storage/credential-sidecars.d.ts.map +1 -0
- package/dist/lib/storage/credential-sidecars.js +52 -0
- package/dist/lib/storage/file-lock.d.ts +9 -0
- package/dist/lib/storage/file-lock.d.ts.map +1 -0
- package/dist/lib/storage/file-lock.js +186 -0
- package/dist/lib/storage/flagged-storage.d.ts.map +1 -1
- package/dist/lib/storage/flagged-storage.js +12 -0
- package/dist/lib/storage/path-state.d.ts +2 -0
- package/dist/lib/storage/path-state.d.ts.map +1 -1
- package/dist/lib/storage/path-state.js +9 -0
- package/dist/lib/storage/paths.js +4 -4
- package/dist/lib/storage/pending-auth.d.ts +18 -0
- package/dist/lib/storage/pending-auth.d.ts.map +1 -0
- package/dist/lib/storage/pending-auth.js +155 -0
- package/dist/lib/storage/public-types.d.ts +13 -0
- package/dist/lib/storage/public-types.d.ts.map +1 -1
- package/dist/lib/storage/record-identity.d.ts +16 -0
- package/dist/lib/storage/record-identity.d.ts.map +1 -0
- package/dist/lib/storage/record-identity.js +16 -0
- package/dist/lib/storage/snapshot-merge.d.ts +16 -0
- package/dist/lib/storage/snapshot-merge.d.ts.map +1 -0
- package/dist/lib/storage/snapshot-merge.js +206 -0
- package/dist/lib/storage/transactions.d.ts.map +1 -1
- package/dist/lib/storage/transactions.js +5 -4
- package/dist/lib/storage.d.ts +6 -0
- package/dist/lib/storage.d.ts.map +1 -1
- package/dist/lib/storage.js +77 -7
- package/dist/lib/ui/auth-menu-builder.d.ts +2 -0
- package/dist/lib/ui/auth-menu-builder.d.ts.map +1 -1
- package/dist/lib/ui/auth-menu-builder.js +1 -0
- package/dist/lib/ui/auth-menu.d.ts.map +1 -1
- package/dist/lib/ui/auth-menu.js +1 -0
- package/dist/lib/ui/check-progress.d.ts +8 -0
- package/dist/lib/ui/check-progress.d.ts.map +1 -0
- package/dist/lib/ui/check-progress.js +30 -0
- package/dist/lib/ui/format.d.ts +3 -1
- package/dist/lib/ui/format.d.ts.map +1 -1
- package/dist/lib/ui/format.js +8 -0
- package/dist/lib/ui/ui-copy.d.ts +2 -2
- package/dist/lib/ui/ui-copy.js +2 -2
- package/dist/lib/usage/pricing.js +2 -2
- package/dist/lib/usage/usage-extraction.d.ts +3 -1
- package/dist/lib/usage/usage-extraction.d.ts.map +1 -1
- package/dist/lib/usage/usage-extraction.js +46 -9
- package/node_modules/@codex-ai/plugin/dist/index.d.ts +2 -2
- package/node_modules/@codex-ai/plugin/dist/index.js +2 -2
- package/node_modules/@codex-ai/plugin/dist/tool.d.ts +42 -42
- package/node_modules/@codex-ai/plugin/dist/tool.js +29 -29
- package/node_modules/@codex-ai/plugin/package.json +9 -9
- package/node_modules/@codex-ai/sdk/dist/index.d.ts +4 -4
- package/node_modules/@codex-ai/sdk/dist/index.js +2 -2
- package/node_modules/@codex-ai/sdk/package.json +8 -8
- package/package.json +200 -197
- package/scripts/codex-app-launcher.js +653 -653
- package/scripts/codex-app-router.js +373 -366
- package/scripts/codex-bin-resolver.js +313 -281
- package/scripts/codex-multi-auth.js +59 -59
- package/scripts/codex-routing.js +62 -61
- package/scripts/codex.js +6642 -6564
- package/scripts/install-codex-auth-utils.js +213 -213
- package/scripts/mcodex.js +367 -367
- package/scripts/postinstall.js +114 -114
- package/scripts/preuninstall.js +265 -265
- package/vendor/codex-ai-plugin/dist/index.d.ts +2 -2
- package/vendor/codex-ai-plugin/dist/index.js +2 -2
- package/vendor/codex-ai-plugin/dist/tool.d.ts +42 -42
- package/vendor/codex-ai-plugin/dist/tool.js +29 -29
- package/vendor/codex-ai-plugin/package.json +9 -9
- package/vendor/codex-ai-sdk/dist/index.d.ts +4 -4
- package/vendor/codex-ai-sdk/dist/index.js +2 -2
- package/vendor/codex-ai-sdk/package.json +8 -8
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/** Model selection is the explicit routing signal; never infer a privacy route from prompt text. */
|
|
2
|
+
export type ModelRouteKind = "oauth" | "api" | "zdr";
|
|
3
|
+
export type RouteModel = Record<string, unknown> & {
|
|
4
|
+
slug: string;
|
|
5
|
+
};
|
|
6
|
+
export interface RouteCatalog {
|
|
7
|
+
id: string;
|
|
8
|
+
kind: ModelRouteKind;
|
|
9
|
+
priority: number;
|
|
10
|
+
enabled: boolean;
|
|
11
|
+
models: RouteModel[];
|
|
12
|
+
/** API credentials expose nothing until the user chooses an allowlist. */
|
|
13
|
+
visibleModels: string[] | null;
|
|
14
|
+
}
|
|
15
|
+
export interface ResolvedModelRoute {
|
|
16
|
+
kind: ModelRouteKind;
|
|
17
|
+
upstreamModel: string;
|
|
18
|
+
candidates: RouteCatalog[];
|
|
19
|
+
serviceTier?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function parseModelRoute(model: string): {
|
|
22
|
+
kind: ModelRouteKind;
|
|
23
|
+
upstreamModel: string;
|
|
24
|
+
serviceTier?: string;
|
|
25
|
+
};
|
|
26
|
+
export declare function modelServiceTiers(model: RouteModel): Array<{
|
|
27
|
+
id: string;
|
|
28
|
+
name: string;
|
|
29
|
+
description: string;
|
|
30
|
+
}>;
|
|
31
|
+
export declare function canonicalServiceTier(tier: string): string;
|
|
32
|
+
export declare function supportsModelSettings(model: RouteModel, reasoningEffort?: string, serviceTier?: string): boolean;
|
|
33
|
+
export declare function resolveModelRoute(model: string, catalogs: RouteCatalog[], settings?: {
|
|
34
|
+
reasoningEffort?: string;
|
|
35
|
+
serviceTier?: string;
|
|
36
|
+
}): ResolvedModelRoute;
|
|
37
|
+
export declare function buildVisibleModelUnion(catalogs: RouteCatalog[]): RouteModel[];
|
|
38
|
+
/** Whitelist capability metadata; never persist model instructions or arbitrary fields. */
|
|
39
|
+
export declare function modelEntitlements(model: RouteModel): {
|
|
40
|
+
serviceTiers: {
|
|
41
|
+
id: string;
|
|
42
|
+
name: string;
|
|
43
|
+
}[];
|
|
44
|
+
reasoningLevels: string[];
|
|
45
|
+
accessPrograms: string[];
|
|
46
|
+
probes?: {
|
|
47
|
+
[k: string]: "unsupported" | "verified" | "unverified" | "downgraded";
|
|
48
|
+
} | undefined;
|
|
49
|
+
checkedAt?: number | undefined;
|
|
50
|
+
model: string;
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=model-route-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-route-policy.d.ts","sourceRoot":"","sources":["../../lib/model-route-policy.ts"],"names":[],"mappings":"AAEA,oGAAoG;AACpG,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;AACrD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AACpE,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,0EAA0E;IAC1E,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAC/B;AACD,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,cAAc,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AACD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG;IAC/C,IAAI,EAAE,cAAc,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,CAwBA;AACD,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,UAAU,GACf,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAY1D;AACD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AACD,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,UAAU,EACjB,eAAe,CAAC,EAAE,MAAM,EACxB,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAcT;AAeD,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,YAAY,EAAE,EACxB,QAAQ,GAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/D,kBAAkB,CAuBpB;AACD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,UAAU,EAAE,CAyC7E;AAED,2FAA2F;AAC3F,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU;;;;;;;;;;;;EAiDlD"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { mergeCatalogModel, mergeCatalogModels } from "./runtime/catalog-capabilities.js";
|
|
2
|
+
import { isRecord } from "./utils.js";
|
|
3
|
+
export function parseModelRoute(model) {
|
|
4
|
+
if (!model || model.length > 256 || /[\u0000-\u0020\u007f]/.test(model))
|
|
5
|
+
throw new Error("Invalid route model");
|
|
6
|
+
let kind = "oauth";
|
|
7
|
+
for (const candidate of ["api", "zdr"])
|
|
8
|
+
if (model.startsWith(`${candidate}/`)) {
|
|
9
|
+
kind = candidate;
|
|
10
|
+
model = model.slice(candidate.length + 1);
|
|
11
|
+
break;
|
|
12
|
+
}
|
|
13
|
+
let serviceTier;
|
|
14
|
+
if (model.startsWith("speed/")) {
|
|
15
|
+
const match = /^speed\/([A-Za-z0-9._-]{1,64})\/(.+)$/.exec(model);
|
|
16
|
+
if (!match?.[1] || !match[2])
|
|
17
|
+
throw new Error("Invalid speed route");
|
|
18
|
+
serviceTier = match[1];
|
|
19
|
+
model = match[2];
|
|
20
|
+
}
|
|
21
|
+
if (!model || /^(api|zdr|speed)\//.test(model))
|
|
22
|
+
throw new Error("Invalid route model");
|
|
23
|
+
return {
|
|
24
|
+
kind,
|
|
25
|
+
upstreamModel: model,
|
|
26
|
+
...(serviceTier ? { serviceTier } : {}),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export function modelServiceTiers(model) {
|
|
30
|
+
if (!Array.isArray(model.service_tiers))
|
|
31
|
+
return [];
|
|
32
|
+
return model.service_tiers.filter((tier) => isRecord(tier) &&
|
|
33
|
+
typeof tier.id === "string" &&
|
|
34
|
+
/^[A-Za-z0-9._-]{1,64}$/.test(tier.id) &&
|
|
35
|
+
typeof tier.name === "string" &&
|
|
36
|
+
tier.name.length <= 100 &&
|
|
37
|
+
!/[\x00-\x1f\x7f]/.test(tier.name) &&
|
|
38
|
+
typeof tier.description === "string");
|
|
39
|
+
}
|
|
40
|
+
export function canonicalServiceTier(tier) {
|
|
41
|
+
return tier === "priority" ? "fast" : tier;
|
|
42
|
+
}
|
|
43
|
+
export function supportsModelSettings(model, reasoningEffort, serviceTier) {
|
|
44
|
+
return ((!reasoningEffort ||
|
|
45
|
+
Array.isArray(model.supported_reasoning_levels) &&
|
|
46
|
+
model.supported_reasoning_levels.some((l) => isRecord(l) && l.effort === reasoningEffort)) &&
|
|
47
|
+
(!serviceTier ||
|
|
48
|
+
serviceTier === "default" ||
|
|
49
|
+
serviceTier === "auto" ||
|
|
50
|
+
modelServiceTiers(model).some((t) => canonicalServiceTier(t.id) === canonicalServiceTier(serviceTier))));
|
|
51
|
+
}
|
|
52
|
+
function visible(catalog, model) {
|
|
53
|
+
if ((isRecord(model.capability_probe_status) &&
|
|
54
|
+
model.capability_probe_status.responses === "unsupported") ||
|
|
55
|
+
!catalog.enabled ||
|
|
56
|
+
!model.slug ||
|
|
57
|
+
/^(api|zdr|speed)\//.test(model.slug))
|
|
58
|
+
return false;
|
|
59
|
+
return (catalog.kind === "oauth" ||
|
|
60
|
+
catalog.visibleModels?.includes(model.slug) === true);
|
|
61
|
+
}
|
|
62
|
+
export function resolveModelRoute(model, catalogs, settings = {}) {
|
|
63
|
+
const parsed = parseModelRoute(model);
|
|
64
|
+
if (parsed.serviceTier &&
|
|
65
|
+
settings.serviceTier &&
|
|
66
|
+
canonicalServiceTier(parsed.serviceTier) !==
|
|
67
|
+
canonicalServiceTier(settings.serviceTier))
|
|
68
|
+
throw new Error("Conflicting speed selection");
|
|
69
|
+
const serviceTier = parsed.serviceTier ?? settings.serviceTier;
|
|
70
|
+
const candidates = catalogs
|
|
71
|
+
.filter((c) => c.kind === parsed.kind &&
|
|
72
|
+
c.models.some((m) => m.slug === parsed.upstreamModel &&
|
|
73
|
+
visible(c, m) &&
|
|
74
|
+
supportsModelSettings(m, settings.reasoningEffort, serviceTier)))
|
|
75
|
+
.sort((a, b) => a.priority - b.priority || a.id.localeCompare(b.id));
|
|
76
|
+
return { ...parsed, ...(serviceTier ? { serviceTier } : {}), candidates };
|
|
77
|
+
}
|
|
78
|
+
export function buildVisibleModelUnion(catalogs) {
|
|
79
|
+
const models = new Map();
|
|
80
|
+
const sources = new Map();
|
|
81
|
+
for (const catalog of [...catalogs].sort((a, b) => a.priority - b.priority)) {
|
|
82
|
+
for (const model of catalog.models) {
|
|
83
|
+
if (!visible(catalog, model))
|
|
84
|
+
continue;
|
|
85
|
+
const prefix = catalog.kind === "oauth" ? "" : `${catalog.kind}/`;
|
|
86
|
+
const name = `${catalog.kind === "oauth" ? "" : `${catalog.kind.toUpperCase()} · `}${typeof model.display_name === "string" ? model.display_name : model.slug}`;
|
|
87
|
+
const slug = prefix + model.slug;
|
|
88
|
+
const group = sources.get(slug) ?? [];
|
|
89
|
+
group.push({ ...model, ...(Array.isArray(model.service_tiers) ? { service_tiers: modelServiceTiers(model) } : {}) });
|
|
90
|
+
sources.set(slug, group);
|
|
91
|
+
const existing = models.get(slug);
|
|
92
|
+
const entry = (existing ? mergeCatalogModel(existing, model) : undefined) ??
|
|
93
|
+
(catalog.kind === "oauth"
|
|
94
|
+
? { ...model }
|
|
95
|
+
: { ...model, slug, display_name: name });
|
|
96
|
+
models.set(slug, entry);
|
|
97
|
+
const programs = new Map();
|
|
98
|
+
for (const source of [entry.available_access_programs, model.available_access_programs]) {
|
|
99
|
+
if (!isRecord(source))
|
|
100
|
+
continue;
|
|
101
|
+
for (const [category, values] of Object.entries(source)) {
|
|
102
|
+
if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,79}$/.test(category) || !Array.isArray(values))
|
|
103
|
+
continue;
|
|
104
|
+
const merged = programs.get(category) ?? new Set();
|
|
105
|
+
for (const value of values)
|
|
106
|
+
if (typeof value === "string" && /^[A-Za-z0-9][A-Za-z0-9._-]{0,79}$/.test(value))
|
|
107
|
+
merged.add(value);
|
|
108
|
+
programs.set(category, merged);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (programs.size)
|
|
112
|
+
entry.available_access_programs = Object.fromEntries([...programs].map(([category, values]) => [category, [...values]]));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
for (const [slug, group] of sources) {
|
|
116
|
+
const entry = models.get(slug), merged = mergeCatalogModels(group);
|
|
117
|
+
if (!entry || !merged)
|
|
118
|
+
continue;
|
|
119
|
+
entry.supported_reasoning_levels = merged.supported_reasoning_levels;
|
|
120
|
+
if (merged.default_service_tier !== undefined)
|
|
121
|
+
entry.default_service_tier = merged.default_service_tier === "fast" ? "priority" : merged.default_service_tier;
|
|
122
|
+
if (Array.isArray(merged.service_tiers))
|
|
123
|
+
entry.service_tiers = modelServiceTiers(merged).map(tier => ({ ...tier, id: canonicalServiceTier(tier.id) === "fast" ? "priority" : tier.id }));
|
|
124
|
+
}
|
|
125
|
+
return [...models.values()];
|
|
126
|
+
}
|
|
127
|
+
/** Whitelist capability metadata; never persist model instructions or arbitrary fields. */
|
|
128
|
+
export function modelEntitlements(model) {
|
|
129
|
+
const safe = (v) => typeof v === "string" && /^[A-Za-z0-9._-]{1,80}$/.test(v);
|
|
130
|
+
return {
|
|
131
|
+
model: model.slug,
|
|
132
|
+
...(typeof model.capability_checked_at === "number"
|
|
133
|
+
? { checkedAt: model.capability_checked_at }
|
|
134
|
+
: {}),
|
|
135
|
+
...(isRecord(model.capability_probe_status)
|
|
136
|
+
? {
|
|
137
|
+
probes: Object.fromEntries(Object.entries(model.capability_probe_status).filter((entry) => /^(responses|fast|ultrafast|effort:(none|minimal|low|medium|high|xhigh|max|ultra))$/.test(entry[0]) &&
|
|
138
|
+
[
|
|
139
|
+
"verified",
|
|
140
|
+
"unsupported",
|
|
141
|
+
"unverified",
|
|
142
|
+
"downgraded",
|
|
143
|
+
].includes(String(entry[1])))),
|
|
144
|
+
}
|
|
145
|
+
: {}),
|
|
146
|
+
serviceTiers: modelServiceTiers(model).map((t) => ({
|
|
147
|
+
id: t.id,
|
|
148
|
+
name: t.name,
|
|
149
|
+
})),
|
|
150
|
+
reasoningLevels: Array.isArray(model.supported_reasoning_levels)
|
|
151
|
+
? model.supported_reasoning_levels.flatMap((v) => isRecord(v) && safe(v.effort) ? [v.effort] : [])
|
|
152
|
+
: [],
|
|
153
|
+
accessPrograms: isRecord(model.available_access_programs)
|
|
154
|
+
? Object.entries(model.available_access_programs).flatMap(([category, values]) => safe(category) && Array.isArray(values)
|
|
155
|
+
? values.filter(safe).map((v) => `${category}:${v}`)
|
|
156
|
+
: [])
|
|
157
|
+
: [],
|
|
158
|
+
};
|
|
159
|
+
}
|
|
@@ -1,126 +1,126 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
-
<title>Codex Sign-In Complete</title>
|
|
7
|
-
<style>
|
|
8
|
-
:root {
|
|
9
|
-
color-scheme: dark;
|
|
10
|
-
--bg: #0b0b0b;
|
|
11
|
-
--panel: #111111;
|
|
12
|
-
--text: #f2f2f2;
|
|
13
|
-
--muted: #a3a3a3;
|
|
14
|
-
--line: #232323;
|
|
15
|
-
--ok: #7cf0a6;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
* {
|
|
19
|
-
box-sizing: border-box;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
body {
|
|
23
|
-
margin: 0;
|
|
24
|
-
min-height: 100vh;
|
|
25
|
-
display: grid;
|
|
26
|
-
place-items: center;
|
|
27
|
-
background: var(--bg);
|
|
28
|
-
color: var(--text);
|
|
29
|
-
font-family: "Geist Mono", "GeistMono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
30
|
-
padding: 24px;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
main {
|
|
34
|
-
width: min(520px, 100%);
|
|
35
|
-
background: var(--panel);
|
|
36
|
-
border: 1px solid var(--line);
|
|
37
|
-
border-radius: 12px;
|
|
38
|
-
padding: 20px;
|
|
39
|
-
display: grid;
|
|
40
|
-
gap: 14px;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
h1 {
|
|
44
|
-
margin: 0;
|
|
45
|
-
font-size: 20px;
|
|
46
|
-
font-weight: 600;
|
|
47
|
-
letter-spacing: -0.02em;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
p {
|
|
51
|
-
margin: 0;
|
|
52
|
-
color: var(--muted);
|
|
53
|
-
font-size: 14px;
|
|
54
|
-
line-height: 1.5;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
.status {
|
|
58
|
-
display: inline-flex;
|
|
59
|
-
align-items: center;
|
|
60
|
-
gap: 8px;
|
|
61
|
-
color: var(--ok);
|
|
62
|
-
font-size: 13px;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.dot {
|
|
66
|
-
width: 8px;
|
|
67
|
-
height: 8px;
|
|
68
|
-
border-radius: 50%;
|
|
69
|
-
background: currentColor;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
dl {
|
|
73
|
-
margin: 0;
|
|
74
|
-
display: grid;
|
|
75
|
-
grid-template-columns: 120px 1fr;
|
|
76
|
-
gap: 8px 12px;
|
|
77
|
-
font-size: 13px;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
dt {
|
|
81
|
-
color: var(--muted);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
dd {
|
|
85
|
-
margin: 0;
|
|
86
|
-
color: var(--text);
|
|
87
|
-
word-break: break-word;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
code {
|
|
91
|
-
background: #171717;
|
|
92
|
-
border: 1px solid var(--line);
|
|
93
|
-
border-radius: 6px;
|
|
94
|
-
padding: 2px 6px;
|
|
95
|
-
font-family: inherit;
|
|
96
|
-
font-size: 12px;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
@media (max-width: 520px) {
|
|
100
|
-
dl {
|
|
101
|
-
grid-template-columns: 1fr;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
</style>
|
|
105
|
-
</head>
|
|
106
|
-
<body>
|
|
107
|
-
<main role="main" aria-label="OAuth callback received">
|
|
108
|
-
<h1>Sign-in complete</h1>
|
|
109
|
-
<p>Return to your terminal to finish Codex login.</p>
|
|
110
|
-
|
|
111
|
-
<div class="status" aria-live="polite">
|
|
112
|
-
<span class="dot" aria-hidden="true"></span>
|
|
113
|
-
Callback received
|
|
114
|
-
</div>
|
|
115
|
-
|
|
116
|
-
<dl>
|
|
117
|
-
<dt>Endpoint</dt>
|
|
118
|
-
<dd><code>localhost:1455</code></dd>
|
|
119
|
-
<dt>Flow</dt>
|
|
120
|
-
<dd>OAuth callback captured</dd>
|
|
121
|
-
<dt>Next</dt>
|
|
122
|
-
<dd>Close this tab and continue in terminal</dd>
|
|
123
|
-
</dl>
|
|
124
|
-
</main>
|
|
125
|
-
</body>
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<title>Codex Sign-In Complete</title>
|
|
7
|
+
<style>
|
|
8
|
+
:root {
|
|
9
|
+
color-scheme: dark;
|
|
10
|
+
--bg: #0b0b0b;
|
|
11
|
+
--panel: #111111;
|
|
12
|
+
--text: #f2f2f2;
|
|
13
|
+
--muted: #a3a3a3;
|
|
14
|
+
--line: #232323;
|
|
15
|
+
--ok: #7cf0a6;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
* {
|
|
19
|
+
box-sizing: border-box;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
body {
|
|
23
|
+
margin: 0;
|
|
24
|
+
min-height: 100vh;
|
|
25
|
+
display: grid;
|
|
26
|
+
place-items: center;
|
|
27
|
+
background: var(--bg);
|
|
28
|
+
color: var(--text);
|
|
29
|
+
font-family: "Geist Mono", "GeistMono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
30
|
+
padding: 24px;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
main {
|
|
34
|
+
width: min(520px, 100%);
|
|
35
|
+
background: var(--panel);
|
|
36
|
+
border: 1px solid var(--line);
|
|
37
|
+
border-radius: 12px;
|
|
38
|
+
padding: 20px;
|
|
39
|
+
display: grid;
|
|
40
|
+
gap: 14px;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
h1 {
|
|
44
|
+
margin: 0;
|
|
45
|
+
font-size: 20px;
|
|
46
|
+
font-weight: 600;
|
|
47
|
+
letter-spacing: -0.02em;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
p {
|
|
51
|
+
margin: 0;
|
|
52
|
+
color: var(--muted);
|
|
53
|
+
font-size: 14px;
|
|
54
|
+
line-height: 1.5;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.status {
|
|
58
|
+
display: inline-flex;
|
|
59
|
+
align-items: center;
|
|
60
|
+
gap: 8px;
|
|
61
|
+
color: var(--ok);
|
|
62
|
+
font-size: 13px;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.dot {
|
|
66
|
+
width: 8px;
|
|
67
|
+
height: 8px;
|
|
68
|
+
border-radius: 50%;
|
|
69
|
+
background: currentColor;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
dl {
|
|
73
|
+
margin: 0;
|
|
74
|
+
display: grid;
|
|
75
|
+
grid-template-columns: 120px 1fr;
|
|
76
|
+
gap: 8px 12px;
|
|
77
|
+
font-size: 13px;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
dt {
|
|
81
|
+
color: var(--muted);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
dd {
|
|
85
|
+
margin: 0;
|
|
86
|
+
color: var(--text);
|
|
87
|
+
word-break: break-word;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
code {
|
|
91
|
+
background: #171717;
|
|
92
|
+
border: 1px solid var(--line);
|
|
93
|
+
border-radius: 6px;
|
|
94
|
+
padding: 2px 6px;
|
|
95
|
+
font-family: inherit;
|
|
96
|
+
font-size: 12px;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@media (max-width: 520px) {
|
|
100
|
+
dl {
|
|
101
|
+
grid-template-columns: 1fr;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
</style>
|
|
105
|
+
</head>
|
|
106
|
+
<body>
|
|
107
|
+
<main role="main" aria-label="OAuth callback received">
|
|
108
|
+
<h1>Sign-in complete</h1>
|
|
109
|
+
<p>Return to your terminal to finish Codex login.</p>
|
|
110
|
+
|
|
111
|
+
<div class="status" aria-live="polite">
|
|
112
|
+
<span class="dot" aria-hidden="true"></span>
|
|
113
|
+
Callback received
|
|
114
|
+
</div>
|
|
115
|
+
|
|
116
|
+
<dl>
|
|
117
|
+
<dt>Endpoint</dt>
|
|
118
|
+
<dd><code>localhost:1455</code></dd>
|
|
119
|
+
<dt>Flow</dt>
|
|
120
|
+
<dd>OAuth callback captured</dd>
|
|
121
|
+
<dt>Next</dt>
|
|
122
|
+
<dd>Close this tab and continue in terminal</dd>
|
|
123
|
+
</dl>
|
|
124
|
+
</main>
|
|
125
|
+
</body>
|
|
126
126
|
</html>
|
|
@@ -24,6 +24,7 @@ export interface RuntimePolicyDecision {
|
|
|
24
24
|
blockedAccountIndexes: Set<number>;
|
|
25
25
|
blockedAccountReasons?: Record<number, string>;
|
|
26
26
|
scoreBoostByAccount: Record<number, number>;
|
|
27
|
+
priorityByAccount?: Record<number, number>;
|
|
27
28
|
budgetEvaluations: BudgetGuardEvaluation[];
|
|
28
29
|
}
|
|
29
30
|
export interface RuntimePolicyState {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-policy.d.ts","sourceRoot":"","sources":["../../../lib/policy/runtime-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE,OAAO,EAGN,KAAK,kBAAkB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAKN,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEN,KAAK,4BAA4B,EACjC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,oBAAoB,EAGpB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,iBAAiB,EAAE,qBAAqB,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,kBAAkB;IAClC,eAAe,EAAE,kBAAkB,CAAC;IACpC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,OAAO,EAAE,4BAA4B,CAAC;CACtC;AAED,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,WAAW,EAAE,MAAM,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACvC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,wBAAsB,sBAAsB,CAC3C,QAAQ,SAAgB,GACtB,OAAO,CAAC,kBAAkB,CAAC,CAO7B;AA6DD,wBAAsB,qBAAqB,CAAC,KAAK,EAAE;IAClD,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,gBAAgB,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC;CACb,GAAG,OAAO,CAAC,qBAAqB,CAAC,
|
|
1
|
+
{"version":3,"file":"runtime-policy.d.ts","sourceRoot":"","sources":["../../../lib/policy/runtime-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -72,6 +72,7 @@ export async function evaluateRuntimePolicy(input) {
|
|
|
72
72
|
const blockedAccountIndexes = new Set();
|
|
73
73
|
const blockedAccountReasons = {};
|
|
74
74
|
const scoreBoostByAccount = {};
|
|
75
|
+
const priorityByAccount = {};
|
|
75
76
|
const profile = input.state.project.profile;
|
|
76
77
|
if (profile?.modelDenylist.length && matchesModel(profile.modelDenylist, input.model)) {
|
|
77
78
|
reasons.push("routing profile denies requested model");
|
|
@@ -101,6 +102,7 @@ export async function evaluateRuntimePolicy(input) {
|
|
|
101
102
|
refreshToken: account.refreshToken ?? undefined,
|
|
102
103
|
}, account.index);
|
|
103
104
|
const accountPolicy = input.state.accountPolicies.accounts[accountKey];
|
|
105
|
+
priorityByAccount[account.index] = accountPolicy?.priority ?? 1;
|
|
104
106
|
let boost = 0;
|
|
105
107
|
if (accountPolicy?.paused) {
|
|
106
108
|
blockedAccountIndexes.add(account.index);
|
|
@@ -155,6 +157,7 @@ export async function evaluateRuntimePolicy(input) {
|
|
|
155
157
|
blockedAccountIndexes,
|
|
156
158
|
blockedAccountReasons,
|
|
157
159
|
scoreBoostByAccount,
|
|
160
|
+
priorityByAccount,
|
|
158
161
|
budgetEvaluations,
|
|
159
162
|
};
|
|
160
163
|
}
|
|
@@ -58,6 +58,8 @@ export declare class PreemptiveQuotaScheduler {
|
|
|
58
58
|
* silent clear-all; use `clearAll()` when that is the intent.
|
|
59
59
|
*/
|
|
60
60
|
clearByPrefix(prefix: string): void;
|
|
61
|
+
/** Forget one verified recovered model; preserve sibling quota buckets. */
|
|
62
|
+
clear(key: string): void;
|
|
61
63
|
/** Forget every cached quota observation. */
|
|
62
64
|
clearAll(): void;
|
|
63
65
|
prune(now?: number): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preemptive-quota-scheduler.d.ts","sourceRoot":"","sources":["../../lib/preemptive-quota-scheduler.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,oBAAoB,CAAC;IAC9B,SAAS,EAAE,oBAAoB,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,GAAG,uBAAuB,CAAC;CAChD;AAED,MAAM,WAAW,qBAAqB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAC1C,kCAAkC,CAAC,EAAE,MAAM,CAAC;IAC5C,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AA6GD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,sBAAsB,GAAG,IAAI,CAqB5H;AAED,qBAAa,wBAAwB;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6C;IACvE,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,gCAAgC,CAAS;IACjD,OAAO,CAAC,kCAAkC,CAAS;IACnD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAK;gBAEZ,OAAO,GAAE,qBAA0B;IAQ/C,SAAS,CAAC,OAAO,GAAE,qBAA0B,GAAG,IAAI;IA2CpD,OAAO,CAAC,UAAU;IAMlB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAM3D,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,IAAI;IA8B1E,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,qBAAqB;IAkEjE;;;;;;;;OAQG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAOnC,6CAA6C;IAC7C,QAAQ,IAAI,IAAI;IAIhB,KAAK,CAAC,GAAG,SAAa,GAAG,MAAM;CAW/B"}
|
|
1
|
+
{"version":3,"file":"preemptive-quota-scheduler.d.ts","sourceRoot":"","sources":["../../lib/preemptive-quota-scheduler.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,oBAAoB,CAAC;IAC9B,SAAS,EAAE,oBAAoB,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,GAAG,uBAAuB,CAAC;CAChD;AAED,MAAM,WAAW,qBAAqB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAC1C,kCAAkC,CAAC,EAAE,MAAM,CAAC;IAC5C,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AA6GD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,sBAAsB,GAAG,IAAI,CAqB5H;AAED,qBAAa,wBAAwB;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6C;IACvE,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,gCAAgC,CAAS;IACjD,OAAO,CAAC,kCAAkC,CAAS;IACnD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAK;gBAEZ,OAAO,GAAE,qBAA0B;IAQ/C,SAAS,CAAC,OAAO,GAAE,qBAA0B,GAAG,IAAI;IA2CpD,OAAO,CAAC,UAAU;IAMlB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAM3D,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,IAAI;IA8B1E,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,qBAAqB;IAkEjE;;;;;;;;OAQG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAOnC,2EAA2E;IAC3E,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIxB,6CAA6C;IAC7C,QAAQ,IAAI,IAAI;IAIhB,KAAK,CAAC,GAAG,SAAa,GAAG,MAAM;CAW/B"}
|
|
@@ -281,6 +281,10 @@ export class PreemptiveQuotaScheduler {
|
|
|
281
281
|
this.snapshots.delete(key);
|
|
282
282
|
}
|
|
283
283
|
}
|
|
284
|
+
/** Forget one verified recovered model; preserve sibling quota buckets. */
|
|
285
|
+
clear(key) {
|
|
286
|
+
this.snapshots.delete(key);
|
|
287
|
+
}
|
|
284
288
|
/** Forget every cached quota observation. */
|
|
285
289
|
clearAll() {
|
|
286
290
|
this.snapshots.clear();
|