@iislee/opencodex 2.31.0 → 2.35.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.
- package/README.md +3 -3
- package/bin/ocx.mjs +99 -70
- package/gui/dist/assets/index-Be1sDpWw.css +1 -0
- package/gui/dist/assets/index-D4OKgUV4.js +114 -0
- package/gui/dist/index.html +2 -2
- package/package.json +3 -1
- package/src/adapters/anthropic.ts +104 -15
- package/src/adapters/base.ts +29 -1
- package/src/adapters/command-code.ts +42 -6
- package/src/adapters/cursor/call-id.ts +44 -0
- package/src/adapters/cursor/catalog.ts +541 -0
- package/src/adapters/cursor/checkpoint-store.ts +15 -10
- package/src/adapters/cursor/cursor-errors.ts +15 -0
- package/src/adapters/cursor/discovery.ts +69 -18
- package/src/adapters/cursor/effort-map.ts +79 -1
- package/src/adapters/cursor/envelope-echo.ts +290 -0
- package/src/adapters/cursor/live-models.ts +7 -2
- package/src/adapters/cursor/live-transport.ts +14 -0
- package/src/adapters/cursor/message-mapper.ts +4 -1
- package/src/adapters/cursor/native-exec-desktop.ts +23 -0
- package/src/adapters/cursor/native-exec-fs.ts +2 -2
- package/src/adapters/cursor/native-exec-network.ts +1 -1
- package/src/adapters/cursor/native-exec-shell.ts +5 -2
- package/src/adapters/cursor/native-exec.ts +20 -0
- package/src/adapters/cursor/protobuf-request.ts +68 -14
- package/src/adapters/cursor/request-builder.ts +40 -10
- package/src/adapters/cursor/tool-definitions.ts +14 -4
- package/src/adapters/cursor/tool-result-normalize.ts +28 -5
- package/src/adapters/cursor/types.ts +20 -0
- package/src/adapters/cursor.ts +209 -38
- package/src/adapters/exec-tool-result-normalize.ts +99 -0
- package/src/adapters/google-antigravity-replay.ts +173 -25
- package/src/adapters/google-antigravity-wire.ts +5 -0
- package/src/adapters/google-errors.ts +44 -12
- package/src/adapters/google.ts +136 -24
- package/src/adapters/image.ts +1 -1
- package/src/adapters/kiro-constants.ts +27 -0
- package/src/adapters/kiro-tools.ts +55 -16
- package/src/adapters/kiro.ts +182 -23
- package/src/adapters/openai-chat.ts +300 -242
- package/src/adapters/openai-responses.ts +353 -27
- package/src/adapters/run-turn-queue.ts +36 -1
- package/src/adapters/tool-catalog-nudge.ts +4 -3
- package/src/adapters/xai-tool-schema.ts +436 -0
- package/src/adapters/xai-web-search.ts +17 -16
- package/src/bridge.ts +90 -37
- package/src/chat/inbound.ts +14 -1
- package/src/chat/outbound.ts +15 -7
- package/src/claude/agents-inject.ts +8 -1
- package/src/claude/context-windows.ts +16 -9
- package/src/claude/outbound.ts +24 -11
- package/src/cli/access.ts +46 -3
- package/src/cli/account-api.ts +116 -19
- package/src/cli/account-extended.ts +262 -29
- package/src/cli/account-main.ts +12 -12
- package/src/cli/account.ts +69 -15
- package/src/cli/agent.ts +8 -1
- package/src/cli/alias.ts +66 -0
- package/src/cli/capabilities-command.ts +94 -0
- package/src/cli/capabilities.ts +496 -0
- package/src/cli/claude-desktop.ts +31 -11
- package/src/cli/claude.ts +26 -1
- package/src/cli/dispatch.ts +256 -28
- package/src/cli/doctor.ts +126 -14
- package/src/cli/help.ts +17 -6
- package/src/cli/index.ts +39 -9
- package/src/cli/init.ts +1 -0
- package/src/cli/inspect.ts +230 -0
- package/src/cli/models-runtime.ts +95 -0
- package/src/cli/models.ts +26 -10
- package/src/cli/observe.ts +31 -8
- package/src/cli/provider-runtime.ts +16 -2
- package/src/cli/provider.ts +2 -1
- package/src/cli/registry.ts +49 -10
- package/src/cli/runtime-api.ts +51 -7
- package/src/cli/status.ts +41 -1
- package/src/cli/storage.ts +234 -0
- package/src/cli/system-command.ts +16 -0
- package/src/cli/system-restart-client.ts +1 -1
- package/src/cli/usage-report.ts +184 -0
- package/src/cli/v2.ts +34 -10
- package/src/cli/version-skew.ts +46 -0
- package/src/clients/config-export.ts +85 -3
- package/src/clients/effective-status.ts +30 -2
- package/src/clients/probes/cline.ts +81 -0
- package/src/codex/account-label.ts +21 -0
- package/src/codex/account-pause.ts +2 -1
- package/src/codex/account-priority.ts +3 -2
- package/src/codex/app-server-processes.ts +83 -7
- package/src/codex/auth-api.ts +50 -10
- package/src/codex/auth-context.ts +21 -18
- package/src/codex/autostart-health.ts +16 -0
- package/src/codex/catalog/aggregation.ts +18 -0
- package/src/codex/catalog/effort.ts +18 -3
- package/src/codex/catalog/metadata.ts +27 -1
- package/src/codex/catalog/native-models.ts +5 -2
- package/src/codex/catalog/parsing.ts +72 -27
- package/src/codex/catalog/provider-fetch.ts +187 -31
- package/src/codex/catalog/sync.ts +131 -5
- package/src/codex/catalog.ts +1 -1
- package/src/codex/codex-write-lock.ts +3 -1
- package/src/codex/convergence-types.ts +1 -1
- package/src/codex/convergence.ts +27 -2
- package/src/codex/desired-state.ts +2 -2
- package/src/codex/desktop-app-restart.ts +355 -0
- package/src/codex/history-job.ts +32 -3
- package/src/codex/history-manifest.ts +112 -0
- package/src/codex/history-migration-guardian.ts +5 -5
- package/src/codex/history-provider.ts +825 -247
- package/src/codex/history-worker.ts +8 -5
- package/src/codex/inject-coordination.ts +83 -0
- package/src/codex/inject.ts +63 -22
- package/src/codex/injected-marker.ts +1 -1
- package/src/codex/internal/history-writer.ts +4 -3
- package/src/codex/log-guard/inspect.ts +22 -4
- package/src/codex/model-entitlements.ts +9 -2
- package/src/codex/native-profile-startup.ts +157 -27
- package/src/codex/native-residue.ts +26 -33
- package/src/codex/prompt-layers.ts +371 -25
- package/src/codex/prompt-text-probe.ts +238 -0
- package/src/codex/quota.ts +91 -10
- package/src/codex/routing.ts +9 -0
- package/src/codex/shim.ts +56 -3
- package/src/codex/subagent-model-fallback.ts +104 -25
- package/src/codex/transition-state.ts +116 -8
- package/src/combos/failover.ts +27 -0
- package/src/combos/types.ts +10 -0
- package/src/compatibility/index.ts +26 -0
- package/src/compatibility/manifest.ts +253 -0
- package/src/compatibility/openai-responses.ts +121 -0
- package/src/config/atomic-write.ts +219 -0
- package/src/config/paths.ts +40 -0
- package/src/config/process-state.ts +309 -0
- package/src/config/provider-validation.ts +177 -0
- package/src/config/rebase-provenance.ts +68 -0
- package/src/config.ts +206 -824
- package/src/generated/compatibility-version.json +373 -213
- package/src/images/loop.ts +5 -4
- package/src/images/plan.ts +5 -4
- package/src/integrations/ownership-policy.ts +160 -0
- package/src/integrations/ownership.ts +46 -2
- package/src/integrations/registry.ts +7 -0
- package/src/integrations/state.ts +79 -7
- package/src/integrations/writer.ts +26 -2
- package/src/lab/conformance/fixtures/protocol-v1-cases.json +1 -1
- package/src/lab/fabric/producer-child.ts +1 -1
- package/src/lib/admin-secrets.ts +24 -0
- package/src/lib/bounded-body.ts +14 -2
- package/src/lib/config-ownership.ts +20 -0
- package/src/lib/errors.ts +36 -3
- package/src/lib/package-tree-integrity.ts +101 -0
- package/src/lib/process-control.ts +2 -1
- package/src/lib/service-secrets.ts +15 -0
- package/src/lib/tool-argument-integers.ts +56 -5
- package/src/oauth/callback-server.ts +22 -2
- package/src/oauth/cline.ts +203 -0
- package/src/oauth/generic-account-failover.ts +231 -0
- package/src/oauth/health.ts +1 -1
- package/src/oauth/index.ts +65 -6
- package/src/oauth/key-providers.ts +10 -1
- package/src/oauth/kimi.ts +9 -1
- package/src/oauth/kiro.ts +45 -0
- package/src/oauth/local-token-detect.ts +2 -0
- package/src/oauth/open-browser-choice.ts +26 -0
- package/src/oauth/store.ts +14 -5
- package/src/oauth/types.ts +15 -0
- package/src/providers/auto-compact-budget.ts +65 -0
- package/src/providers/command-code-efforts.ts +38 -6
- package/src/providers/context-cap.ts +4 -3
- package/src/providers/default-aliases.ts +65 -0
- package/src/providers/derive.ts +28 -0
- package/src/providers/fastwire.ts +7 -1
- package/src/providers/label.ts +34 -1
- package/src/providers/model-presets.ts +119 -0
- package/src/providers/new-model-policy.ts +146 -0
- package/src/providers/provider-id-rewrite.ts +2 -1
- package/src/providers/quota.ts +65 -7
- package/src/providers/registry.ts +184 -69
- package/src/providers/slug-codec.ts +52 -0
- package/src/providers/xai-transport.ts +21 -0
- package/src/reasoning-effort.ts +19 -2
- package/src/responses/apply-patch-envelope.ts +63 -0
- package/src/responses/code-mode-helper-compat.ts +50 -0
- package/src/responses/custom-tool-compat.ts +157 -39
- package/src/responses/namespace-tool-compat.ts +84 -4
- package/src/responses/parser.ts +7 -2
- package/src/responses/reasoning-replay-cache.ts +81 -3
- package/src/responses/schema.ts +5 -1
- package/src/responses/state.ts +94 -4
- package/src/responses/thought-signature-replay.ts +17 -0
- package/src/responses/turn-termination.ts +107 -0
- package/src/router.ts +40 -2
- package/src/routing/analytics.ts +1 -0
- package/src/routing/quota.ts +10 -0
- package/src/server/auth-cors.ts +27 -7
- package/src/server/chat-completions.ts +24 -16
- package/src/server/chat-native-sse.ts +3 -3
- package/src/server/chat-native.ts +30 -11
- package/src/server/claude-messages.ts +1 -1
- package/src/server/index.ts +179 -32
- package/src/server/lifecycle.ts +52 -1
- package/src/server/local-management-read-client.ts +1 -1
- package/src/server/local-provider-reload-client.ts +1 -1
- package/src/server/management/agent-settings-routes.ts +45 -23
- package/src/server/management/codex-prompt-routes.ts +570 -0
- package/src/server/management/combo-routes.ts +2 -1
- package/src/server/management/config-routes.ts +59 -12
- package/src/server/management/context.ts +10 -1
- package/src/server/management/logs-usage-routes.ts +30 -24
- package/src/server/management/model-routes.ts +274 -4
- package/src/server/management/model-rows.ts +4 -0
- package/src/server/management/native-integration-routes.ts +2 -1
- package/src/server/management/oauth-account-routes.ts +10 -4
- package/src/server/management/provider-capability-config.ts +1 -1
- package/src/server/management/provider-routes.ts +81 -11
- package/src/server/management/route-registry.ts +332 -0
- package/src/server/management/routing-profile-routes.ts +2 -2
- package/src/server/management/system-restart.ts +1 -1
- package/src/server/management-api.ts +18 -16
- package/src/server/port-reclaim.ts +1 -1
- package/src/server/proxy-liveness.ts +29 -5
- package/src/server/relay-eager.ts +147 -20
- package/src/server/relay.ts +251 -19
- package/src/server/request-log-conversation.ts +51 -0
- package/src/server/request-log.ts +70 -16
- package/src/server/responses/codex-auth-error.ts +55 -0
- package/src/server/responses/collaboration.ts +37 -3
- package/src/server/responses/combo-stream-preflight.ts +178 -0
- package/src/server/responses/compact.ts +6 -21
- package/src/server/responses/core.ts +810 -208
- package/src/server/responses/empty-completion-guard.ts +63 -6
- package/src/server/responses/fetch-helpers.ts +17 -102
- package/src/server/responses/input-admission.ts +3 -1
- package/src/server/responses/passthrough-error.ts +33 -9
- package/src/server/responses/responses-field-backfill.ts +105 -13
- package/src/server/responses/ws-upstream.ts +75 -2
- package/src/server/responses-custom-tool-repair.ts +87 -6
- package/src/server/responses-terminal-repair.ts +25 -4
- package/src/server/responses-undeclared-tool-guard.ts +241 -18
- package/src/server/sse-frame-buffer.ts +31 -4
- package/src/server/ws-bridge.ts +14 -2
- package/src/service.ts +42 -4
- package/src/storage/policy-job.ts +14 -4
- package/src/storage/policy.ts +88 -23
- package/src/types/config.ts +66 -0
- package/src/types/provider.ts +69 -0
- package/src/types/request.ts +17 -4
- package/src/types/tools.ts +116 -11
- package/src/types.ts +3 -1
- package/src/update/index.ts +5 -4
- package/src/update/job.ts +3 -1
- package/src/update/transactional-install.mjs +8 -1
- package/src/usage/expected-prices.ts +43 -24
- package/src/usage/log.ts +63 -12
- package/src/usage/summary.ts +211 -8
- package/src/vision/describe.ts +18 -13
- package/src/web-search/exa-executor.ts +40 -9
- package/src/web-search/executor.ts +10 -3
- package/src/web-search/loop.ts +5 -4
- package/gui/dist/assets/index-BF38heuV.js +0 -104
- package/gui/dist/assets/index-DMiI18Kv.css +0 -1
package/src/providers/quota.ts
CHANGED
|
@@ -3,7 +3,9 @@ import {
|
|
|
3
3
|
effectiveCodexAuthAccountId,
|
|
4
4
|
fetchMainAccountInfoSnapshot,
|
|
5
5
|
listCodexAuthAccountsSnapshot,
|
|
6
|
+
withSparkVisibility,
|
|
6
7
|
} from "../codex/auth-api";
|
|
8
|
+
import type { StoredAccountQuota } from "../codex/quota";
|
|
7
9
|
import { isMainAccountIdentityGenerationLive } from "../codex/main-account-cache";
|
|
8
10
|
import { MAIN_CODEX_ACCOUNT_ID } from "../codex/main-account";
|
|
9
11
|
import { codexPlanKey } from "../codex/plan";
|
|
@@ -166,6 +168,27 @@ function quotaSignatureValue(quota: CodexCapacityQuota | null): unknown {
|
|
|
166
168
|
};
|
|
167
169
|
}
|
|
168
170
|
|
|
171
|
+
function providerQuotaFromCodexQuota(
|
|
172
|
+
quota: StoredAccountQuota | Omit<StoredAccountQuota, "updatedAt"> | null | undefined,
|
|
173
|
+
): CodexCapacityQuota | null {
|
|
174
|
+
if (!quota) return null;
|
|
175
|
+
// Every Codex-sourced provider report funnels through here — the pooled path via
|
|
176
|
+
// listCodexAuthAccountsSnapshot and the `direct` path via fetchMainAccountInfoSnapshot, which
|
|
177
|
+
// never touches the Codex Auth DTO. Applying the Spark preference at this one point is what
|
|
178
|
+
// stops the row surviving on /api/provider-quotas after the operator switched it off.
|
|
179
|
+
quota = withSparkVisibility(quota ?? null) ?? quota;
|
|
180
|
+
return {
|
|
181
|
+
...(quota.shortPercent !== undefined ? { fiveHourPercent: quota.shortPercent } : {}),
|
|
182
|
+
...(quota.shortResetAt !== undefined ? { fiveHourResetAt: quota.shortResetAt } : {}),
|
|
183
|
+
...(quota.weeklyPercent !== undefined ? { weeklyPercent: quota.weeklyPercent } : {}),
|
|
184
|
+
...(quota.weeklyResetAt !== undefined ? { weeklyResetAt: quota.weeklyResetAt } : {}),
|
|
185
|
+
...(quota.monthlyPercent !== undefined ? { monthlyPercent: quota.monthlyPercent } : {}),
|
|
186
|
+
...(quota.monthlyResetAt !== undefined ? { monthlyResetAt: quota.monthlyResetAt } : {}),
|
|
187
|
+
...(quota.customWindows !== undefined ? { customWindows: quota.customWindows } : {}),
|
|
188
|
+
updatedAt: "updatedAt" in quota ? quota.updatedAt : Date.now(),
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
|
|
169
192
|
/** Hash only presentation-relevant state; account ids and email addresses never enter the key. */
|
|
170
193
|
function cacheKeyWithAggregationState(
|
|
171
194
|
config: OcxConfig,
|
|
@@ -183,7 +206,7 @@ function cacheKeyWithAggregationState(
|
|
|
183
206
|
plan: codexPlanKey(account.plan) ?? null,
|
|
184
207
|
paused: account.paused,
|
|
185
208
|
needsReauth: account.needsReauth === true,
|
|
186
|
-
quota: quotaSignatureValue(account.quota
|
|
209
|
+
quota: quotaSignatureValue(providerQuotaFromCodexQuota(account.quota)),
|
|
187
210
|
}));
|
|
188
211
|
const canonicalRows = rows.map(row => JSON.stringify(row)).sort();
|
|
189
212
|
const digest = createHash("sha256").update(JSON.stringify(canonicalRows)).digest("hex").slice(0, 24);
|
|
@@ -1103,9 +1126,8 @@ async function fetchChatGptForwardQuota(
|
|
|
1103
1126
|
): Promise<ProviderQuotaReport | null> {
|
|
1104
1127
|
if (providerCodexAccountMode(provider, providerConfig) === "direct") {
|
|
1105
1128
|
const snapshot = await fetchMainAccountInfoSnapshot(forceRefresh);
|
|
1106
|
-
const quota = snapshot.info.quota
|
|
1107
|
-
|
|
1108
|
-
: null;
|
|
1129
|
+
const quota = providerQuotaFromCodexQuota(snapshot.info.quota);
|
|
1130
|
+
if (quota) quota.updatedAt = Date.now();
|
|
1109
1131
|
return quota
|
|
1110
1132
|
? tagNativeMainReport(report(provider, "chatgpt:wham", quota), snapshot.mainIdentityGeneration)
|
|
1111
1133
|
: null;
|
|
@@ -1113,10 +1135,14 @@ async function fetchChatGptForwardQuota(
|
|
|
1113
1135
|
const snapshot = await (prefetchedSnapshot ?? listCodexAuthAccountsSnapshot(config, forceRefresh));
|
|
1114
1136
|
const accounts = snapshot.accounts;
|
|
1115
1137
|
const activeId = effectiveCodexAuthAccountId(config);
|
|
1116
|
-
const capacityAccounts = accounts.map(account => ({
|
|
1138
|
+
const capacityAccounts = accounts.map(account => ({
|
|
1139
|
+
...account,
|
|
1140
|
+
active: account.id === activeId,
|
|
1141
|
+
quota: providerQuotaFromCodexQuota(account.quota),
|
|
1142
|
+
}));
|
|
1117
1143
|
const active = capacityAccounts.find(account => account.active)
|
|
1118
|
-
??
|
|
1119
|
-
??
|
|
1144
|
+
?? capacityAccounts.find(account => account.id === MAIN_CODEX_ACCOUNT_ID)
|
|
1145
|
+
?? capacityAccounts[0];
|
|
1120
1146
|
const now = Date.now();
|
|
1121
1147
|
const capacity = aggregateCodexPoolCapacity(capacityAccounts, now);
|
|
1122
1148
|
if (capacity.aggregation && capacity.quota) {
|
|
@@ -1467,6 +1493,24 @@ function parseClaudeBucket(value: unknown): { percent?: number; resetAt?: number
|
|
|
1467
1493
|
return { percent, resetAt };
|
|
1468
1494
|
}
|
|
1469
1495
|
|
|
1496
|
+
function parseClaudeLimit(value: unknown): { label: string; percent: number; resetAt?: number } | null {
|
|
1497
|
+
const rec = asRecord(value);
|
|
1498
|
+
if (!rec) return null;
|
|
1499
|
+
const percent = normalizePercent(rec.percent);
|
|
1500
|
+
if (percent === undefined) return null;
|
|
1501
|
+
const scope = asRecord(rec.scope);
|
|
1502
|
+
const model = asRecord(scope?.model);
|
|
1503
|
+
const rawLabel = String(model?.display_name ?? "").trim();
|
|
1504
|
+
if (!rawLabel) return null;
|
|
1505
|
+
const lowerLabel = rawLabel.toLowerCase();
|
|
1506
|
+
const label = lowerLabel.includes("fable") ? "Fable"
|
|
1507
|
+
: lowerLabel.includes("opus") ? "Opus"
|
|
1508
|
+
: lowerLabel.includes("sonnet") ? "Sonnet"
|
|
1509
|
+
: rawLabel;
|
|
1510
|
+
const resetAt = normalizeResetAt(rec.resets_at);
|
|
1511
|
+
return { label, percent, ...(resetAt !== undefined ? { resetAt } : {}) };
|
|
1512
|
+
}
|
|
1513
|
+
|
|
1470
1514
|
/** Claude's OAuth usage endpoint, probed with ONE account's own bearer token. */
|
|
1471
1515
|
const anthropicUsageInflight = new Map<string, Promise<ProviderQuota | null>>();
|
|
1472
1516
|
|
|
@@ -1490,11 +1534,25 @@ async function fetchAnthropicUsageQuota(accessToken: string): Promise<ProviderQu
|
|
|
1490
1534
|
if (!body) return null;
|
|
1491
1535
|
const fiveHour = parseClaudeBucket(body.five_hour);
|
|
1492
1536
|
const sevenDay = parseClaudeBucket(body.seven_day);
|
|
1537
|
+
const fable = parseClaudeBucket(body.seven_day_fable);
|
|
1493
1538
|
const opus = parseClaudeBucket(body.seven_day_opus);
|
|
1494
1539
|
const sonnet = parseClaudeBucket(body.seven_day_sonnet);
|
|
1495
1540
|
const customWindows: ProviderQuotaWindow[] = [];
|
|
1541
|
+
if (fable?.percent !== undefined) customWindows.push({ label: "Fable", percent: fable.percent, ...(fable.resetAt !== undefined ? { resetAt: fable.resetAt } : {}) });
|
|
1496
1542
|
if (opus?.percent !== undefined) customWindows.push({ label: "Opus", percent: opus.percent, ...(opus.resetAt !== undefined ? { resetAt: opus.resetAt } : {}) });
|
|
1497
1543
|
if (sonnet?.percent !== undefined) customWindows.push({ label: "Sonnet", percent: sonnet.percent, ...(sonnet.resetAt !== undefined ? { resetAt: sonnet.resetAt } : {}) });
|
|
1544
|
+
const knownLabels = new Set(customWindows.map(window => window.label.toLowerCase()));
|
|
1545
|
+
const limits = Array.isArray(body.limits) ? body.limits : [];
|
|
1546
|
+
for (const rawLimit of limits) {
|
|
1547
|
+
const limitRecord = asRecord(rawLimit);
|
|
1548
|
+
// `session` and `weekly_all` mirror the canonical five-hour and weekly
|
|
1549
|
+
// buckets above; only model-scoped weekly limits add a third window.
|
|
1550
|
+
if (String(limitRecord?.kind ?? "").trim().toLowerCase() !== "weekly_scoped") continue;
|
|
1551
|
+
const limit = parseClaudeLimit(rawLimit);
|
|
1552
|
+
if (!limit || knownLabels.has(limit.label.toLowerCase())) continue;
|
|
1553
|
+
knownLabels.add(limit.label.toLowerCase());
|
|
1554
|
+
customWindows.push(limit);
|
|
1555
|
+
}
|
|
1498
1556
|
const quota: ProviderQuota = {
|
|
1499
1557
|
// Claude's 5-hour window is a first-class rate limit, same as the Codex login 5h/weekly
|
|
1500
1558
|
// rows: report it in the canonical fields so the dashboard renders it with the standard
|