@bitkyc08/opencodex 2.63.0 → 2.64.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/AGENTS_INSTALL.md +4 -3
- package/README.md +46 -33
- package/assets/download-linux.svg +10 -0
- package/assets/download-macos.svg +10 -0
- package/assets/download-windows.svg +10 -0
- package/bin/ocx.mjs +12 -4
- package/gui/dist/assets/App-CpuDF3ci.js +50 -0
- package/gui/dist/assets/App-I5AnaSLh.css +1 -0
- package/gui/dist/assets/{Tray-CncKDBTp.js → Tray-B4uEIa1O.js} +1 -1
- package/gui/dist/assets/index-DiBRuK-d.css +1 -0
- package/gui/dist/assets/index-SggB6t3z.js +86 -0
- package/gui/dist/assets/usage-companion-chart-DLbKOJml.js +1 -0
- package/gui/dist/index.html +2 -2
- package/native/remote-workspace-helper/src/protocol.rs +5 -0
- package/package.json +4 -1
- package/src/adapters/anthropic.ts +66 -7
- package/src/adapters/codebuddy/adapter.ts +112 -16
- package/src/adapters/codebuddy/mcp-server.ts +180 -0
- package/src/adapters/codebuddy/scaffold-guard.ts +25 -8
- package/src/adapters/codebuddy/tool-bridge.ts +597 -0
- package/src/adapters/coding-agent/protocol.ts +123 -10
- package/src/adapters/coding-agent/turn.ts +324 -2
- package/src/adapters/command-code-restored-schema.ts +112 -0
- package/src/adapters/command-code-tool-text.ts +589 -0
- package/src/adapters/command-code.ts +80 -6
- package/src/adapters/cursor/catalog.ts +12 -0
- package/src/adapters/cursor/current-request.ts +46 -0
- package/src/adapters/cursor/discovery.ts +1 -1
- package/src/adapters/cursor/effort-map.ts +4 -0
- package/src/adapters/cursor/native-exec.ts +15 -0
- package/src/adapters/cursor/protobuf-events.ts +40 -12
- package/src/adapters/cursor/protobuf-request.ts +83 -18
- package/src/adapters/cursor/request-builder.ts +5 -4
- package/src/adapters/cursor/tool-guidance.ts +1 -1
- package/src/adapters/devin/live-models.ts +7 -0
- package/src/adapters/inline-think-tags.ts +251 -0
- package/src/adapters/kiro/adapter.ts +1 -0
- package/src/adapters/kiro/stream.ts +5 -3
- package/src/adapters/kiro/usage.ts +4 -3
- package/src/adapters/mimo-free.ts +37 -18
- package/src/adapters/openai-chat/messages.ts +5 -5
- package/src/adapters/openai-chat/tool-schema.ts +124 -2
- package/src/adapters/openai-chat.ts +13 -3
- package/src/adapters/openai-responses/passthrough.ts +15 -2
- package/src/adapters/openai-responses/reasoning.ts +14 -1
- package/src/adapters/openai-responses/request-strips.ts +29 -3
- package/src/adapters/openai-responses/tool-output-recovery.ts +9 -3
- package/src/adapters/qoder/adapter.ts +15 -12
- package/src/adapters/qoder/scaffold-guard.ts +45 -13
- package/src/bridge/internal.ts +20 -0
- package/src/bridge/sse.ts +14 -5
- package/src/claude/agents-inject.ts +2 -1
- package/src/claude/desktop-applied-marker.ts +44 -0
- package/src/claude/desktop-profile.ts +22 -12
- package/src/claude/inbound.ts +8 -3
- package/src/cli/access.ts +22 -5
- package/src/cli/account-api.ts +6 -0
- package/src/cli/account-auth.ts +5 -2
- package/src/cli/account.ts +5 -6
- package/src/cli/aside-profiles.ts +61 -1
- package/src/cli/claude-desktop.ts +3 -2
- package/src/cli/claude.ts +3 -1
- package/src/cli/codex-cli-update.ts +2 -2
- package/src/cli/codex-shim-autorestore.ts +3 -0
- package/src/cli/dispatch.ts +12 -4
- package/src/cli/index.ts +98 -10
- package/src/cli/registry.ts +1 -1
- package/src/cli/resolve.ts +113 -1
- package/src/cli/root.ts +5 -0
- package/src/cli/stop-approval.ts +186 -0
- package/src/cli/stop-report.ts +1 -1
- package/src/cli/system-restart-client.ts +19 -4
- package/src/client/hub-client.ts +25 -18
- package/src/clients/config-export.ts +12 -4
- package/src/codex/account-auto-switch.ts +59 -0
- package/src/codex/account-lifecycle.ts +7 -0
- package/src/codex/account-priority.ts +10 -0
- package/src/codex/account-usability.ts +9 -0
- package/src/codex/auth-api/account-list.ts +5 -0
- package/src/codex/auth-api/login-flow.ts +15 -5
- package/src/codex/auth-api/login-state.ts +5 -16
- package/src/codex/auth-api/pool-mode-gate.ts +30 -7
- package/src/codex/auth-api/routes.ts +39 -3
- package/src/codex/auth-context.ts +145 -17
- package/src/codex/catalog/build-entries.ts +2 -1
- package/src/codex/catalog/effort.ts +8 -2
- package/src/codex/catalog/metadata.ts +33 -7
- package/src/codex/catalog/native-models.ts +102 -5
- package/src/codex/catalog/parsing.ts +2 -0
- package/src/codex/catalog/provider-models.ts +19 -6
- package/src/codex/cli-installation-targets.ts +44 -40
- package/src/codex/codex-write-lock.ts +32 -2
- package/src/codex/inject/multi-agent-v2.ts +90 -0
- package/src/codex/inject/plan.ts +365 -0
- package/src/codex/inject.ts +237 -362
- package/src/codex/log-guard/maintenance.ts +30 -13
- package/src/codex/project-config-warnings.ts +47 -7
- package/src/codex/prompt-layers/encoding.ts +41 -0
- package/src/codex/prompt-layers/toml-read.ts +1 -1
- package/src/codex/prompt-layers.ts +17 -13
- package/src/codex/prompt-text-probe.ts +20 -10
- package/src/codex/quota-observation-freshness.ts +34 -0
- package/src/codex/quota-rejection.ts +8 -4
- package/src/codex/quota.ts +4 -2
- package/src/codex/routing/selection.ts +32 -9
- package/src/codex/routing.ts +53 -11
- package/src/codex/subagent-model-fallback.ts +4 -3
- package/src/codex/sync.ts +11 -0
- package/src/codex/windows-installation-files.ts +33 -11
- package/src/codex/write-coordination.ts +4 -0
- package/src/combos/request.ts +6 -2
- package/src/companion/settings.ts +6 -1
- package/src/config/atomic-write.ts +12 -1
- package/src/config/derived-registries.ts +29 -0
- package/src/config/diagnostics.ts +17 -0
- package/src/config/live-reconcile.ts +11 -2
- package/src/config/load-degrade.ts +9 -2
- package/src/config/persist-unlocked.ts +4 -3
- package/src/config/persisted-mutation.ts +94 -0
- package/src/config/provider-validation.ts +1 -1
- package/src/config/proxy-env.ts +62 -12
- package/src/config/rebase-provenance.ts +80 -1
- package/src/config/schema/config-schema.ts +5 -0
- package/src/config/schema/leaf-validators.ts +50 -1
- package/src/config/subagent-models.ts +41 -15
- package/src/config.ts +18 -95
- package/src/generated/compatibility-version.json +330 -218
- package/src/generated/model-metadata.ts +8 -5
- package/src/github/star-state.ts +46 -6
- package/src/grok/inject.ts +74 -40
- package/src/grok/status.ts +11 -4
- package/src/integrations/cursor-effort-table.ts +50 -13
- package/src/integrations/raycast-detect.ts +19 -4
- package/src/integrations/serialize.ts +11 -1
- package/src/lib/bounded-body.ts +30 -0
- package/src/lib/crash-guard.ts +52 -4
- package/src/lib/local-aside-sync-contract.ts +41 -0
- package/src/lib/package-tree-integrity.ts +181 -9
- package/src/lib/proxy-env.ts +18 -1
- package/src/lib/request-failure-attribution.ts +1 -0
- package/src/lib/request-failure-model.ts +3 -0
- package/src/lib/service-secrets.ts +99 -2
- package/src/lib/socks5-fetch.ts +43 -14
- package/src/lib/token-estimate.ts +17 -2
- package/src/oauth/command-code.ts +3 -2
- package/src/oauth/generic-account-failover.ts +29 -1
- package/src/oauth/index.ts +24 -16
- package/src/oauth/login-flow-state.ts +5 -5
- package/src/oauth/meta-muse-device.ts +49 -7
- package/src/oauth/store.ts +74 -9
- package/src/providers/alibaba-region-backup.ts +16 -1
- package/src/providers/anthropic-fast.ts +89 -0
- package/src/providers/anthropic-reset-grant-ledger.ts +288 -0
- package/src/providers/anthropic-reset-grants.ts +329 -0
- package/src/providers/claude-cli-identity.ts +12 -0
- package/src/providers/command-code-efforts.ts +184 -102
- package/src/providers/derive.ts +11 -3
- package/src/providers/fastwire.ts +16 -3
- package/src/providers/label.ts +8 -3
- package/src/providers/model-rename-fields.ts +1 -0
- package/src/providers/openai-virtual-models.ts +1 -0
- package/src/providers/quota/vendor-probes-oauth.ts +2 -1
- package/src/providers/reasoning-metadata.ts +38 -15
- package/src/providers/registry/entries-core.ts +95 -7
- package/src/providers/registry/entries-extended.ts +21 -10
- package/src/providers/registry/model-ids.ts +1 -0
- package/src/providers/registry/model-seeds.ts +31 -3
- package/src/providers/registry/types.ts +3 -1
- package/src/providers/resolved-model-policy-merge.ts +38 -8
- package/src/providers/resolved-model-policy.ts +4 -2
- package/src/providers/service-tier.ts +3 -1
- package/src/reasoning-effort.ts +6 -5
- package/src/responses/code-mode-helper-compat.ts +14 -4
- package/src/responses/code-mode-shell-input.ts +54 -0
- package/src/responses/custom-tool-compat.ts +173 -5
- package/src/responses/parser.ts +38 -2
- package/src/responses/reasoning-replay-cache.ts +26 -0
- package/src/router.ts +11 -1
- package/src/routing/history/indexer.ts +7 -2
- package/src/routing/history/schema.ts +3 -1
- package/src/server/adapter-resolve.ts +2 -2
- package/src/server/auth-cors.ts +3 -0
- package/src/server/chat-completions.ts +14 -1
- package/src/server/chat-native.ts +17 -0
- package/src/server/claude-messages.ts +4 -3
- package/src/server/direct-local-http.ts +45 -19
- package/src/server/gui-session.ts +6 -15
- package/src/server/index/package-tree-guard.ts +53 -0
- package/src/server/index/serve-options.ts +17 -3
- package/src/server/index/startup-warnings.ts +17 -0
- package/src/server/index.ts +15 -17
- package/src/server/lifecycle.ts +8 -0
- package/src/server/live.ts +54 -4
- package/src/server/management/agent-settings-routes.ts +44 -8
- package/src/server/management/anthropic-reset-grant-routes.ts +252 -0
- package/src/server/management/codex-prompt-routes.ts +5 -1
- package/src/server/management/config-routes.ts +14 -4
- package/src/server/management/oauth-account-routes.ts +17 -1
- package/src/server/management/provider-overwrite-carry.ts +164 -0
- package/src/server/management/provider-routes.ts +36 -6
- package/src/server/management/remote-workspace-routes.ts +2 -2
- package/src/server/management/route-registry.ts +2 -0
- package/src/server/management/shadow-call-validation.ts +39 -0
- package/src/server/management/system-restart.ts +72 -6
- package/src/server/management-api.ts +16 -2
- package/src/server/management-auth.ts +52 -8
- package/src/server/proxy-liveness.ts +110 -4
- package/src/server/request-log.ts +26 -9
- package/src/server/request-metrics.ts +5 -0
- package/src/server/responses/adapter-continuation.ts +6 -3
- package/src/server/responses/adapter-dispatch.ts +65 -1
- package/src/server/responses/compact.ts +31 -1
- package/src/server/responses/compaction-routing.ts +28 -3
- package/src/server/responses/core-codex-account.ts +85 -26
- package/src/server/responses/core-combo-failure.ts +16 -15
- package/src/server/responses/core-normalize.ts +5 -1
- package/src/server/responses/core-opaque-recovery.ts +50 -2
- package/src/server/responses/core-options.ts +2 -0
- package/src/server/responses/core-replay.ts +7 -0
- package/src/server/responses/core.ts +1 -1
- package/src/server/responses/encrypted-payload.ts +23 -9
- package/src/server/responses/passthrough-delivery.ts +55 -35
- package/src/server/responses/passthrough-dispatch.ts +12 -13
- package/src/server/responses/policy-fallback.ts +12 -1
- package/src/server/responses/request-prepare.ts +46 -7
- package/src/server/responses/request-spend.ts +31 -15
- package/src/server/responses/run-turn-execution.ts +6 -5
- package/src/server/responses/shadow-target-availability.ts +61 -0
- package/src/server/responses-custom-tool-repair.ts +2 -0
- package/src/service/claim.ts +185 -0
- package/src/service/cli.ts +10 -1
- package/src/service/guarded-manager-target.ts +151 -0
- package/src/service/guards.ts +47 -48
- package/src/service/managing-cli.ts +170 -0
- package/src/service/orchestration.ts +3 -1
- package/src/service/state.ts +4 -0
- package/src/service/systemd.ts +16 -1
- package/src/service.ts +1 -1
- package/src/types/config.ts +8 -0
- package/src/types/provider.ts +16 -0
- package/src/types/request.ts +10 -0
- package/src/types/tools.ts +9 -1
- package/src/types/wire.ts +68 -4
- package/src/types.ts +1 -0
- package/src/update/job.ts +10 -16
- package/src/update/npm-invocation.mjs +17 -16
- package/src/update/transactional-install.d.mts +22 -1
- package/src/update/transactional-install.mjs +176 -19
- package/src/update/update-failure-guidance.d.mts +8 -0
- package/src/update/update-failure-guidance.mjs +47 -0
- package/src/usage/expected-prices.ts +54 -12
- package/src/usage/log.ts +117 -3
- package/src/usage/telemetry-contract.ts +1 -0
- package/src/usage/timeline.ts +34 -6
- package/src/usage/user-cost-overlay-reconciler.ts +3 -3
- package/src/vision/reasoning.ts +2 -4
- package/src/web-search/xai-executor.ts +14 -4
- package/gui/dist/assets/App-BqrsSrIR.js +0 -50
- package/gui/dist/assets/index-C6SJrh0N.js +0 -86
- package/gui/dist/assets/index-DdDunwDb.css +0 -1
- package/gui/dist/assets/usage-companion-chart-CzAAAB1o.js +0 -1
- package/src/adapters/kiro-thinking.ts +0 -112
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/** Conservative JSON Schema subset for text that would become a client-executable tool call. */
|
|
2
|
+
const ANNOTATIONS = new Set(["$schema", "$id", "title", "description", "default", "examples", "deprecated", "readOnly", "writeOnly"]);
|
|
3
|
+
const CONSTRAINTS = new Set([
|
|
4
|
+
"type", "enum", "const", "minimum", "maximum", "exclusiveMinimum", "exclusiveMaximum", "multipleOf",
|
|
5
|
+
"minLength", "maxLength", "minItems", "maxItems", "uniqueItems", "items",
|
|
6
|
+
"minProperties", "maxProperties", "properties", "required", "additionalProperties",
|
|
7
|
+
"anyOf", "oneOf", "allOf",
|
|
8
|
+
]);
|
|
9
|
+
|
|
10
|
+
function same(left: unknown, right: unknown): boolean {
|
|
11
|
+
if (Object.is(left, right)) return true;
|
|
12
|
+
if (!left || !right || typeof left !== "object" || typeof right !== "object") return false;
|
|
13
|
+
if (Array.isArray(left) !== Array.isArray(right)) return false;
|
|
14
|
+
const keys = Object.keys(left);
|
|
15
|
+
return keys.length === Object.keys(right).length && keys.every(key =>
|
|
16
|
+
Object.hasOwn(right, key) && same((left as Record<string, unknown>)[key], (right as Record<string, unknown>)[key]));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function matchesType(value: unknown, type: string): boolean {
|
|
20
|
+
switch (type) {
|
|
21
|
+
case "string": return typeof value === "string";
|
|
22
|
+
case "integer": return typeof value === "number" && Number.isSafeInteger(value);
|
|
23
|
+
case "number": return typeof value === "number" && Number.isFinite(value);
|
|
24
|
+
case "boolean": return typeof value === "boolean";
|
|
25
|
+
case "null": return value === null;
|
|
26
|
+
case "object": return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
27
|
+
case "array": return Array.isArray(value);
|
|
28
|
+
default: return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function validBound(value: unknown, bound: unknown, compare: (actual: number, limit: number) => boolean): boolean {
|
|
33
|
+
return bound === undefined || (typeof bound === "number" && typeof value === "number" && compare(value, bound));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function supportedSchema(schema: unknown, depth: number): boolean {
|
|
37
|
+
if (depth > 16) return false;
|
|
38
|
+
if (typeof schema === "boolean") return true;
|
|
39
|
+
if (!schema || typeof schema !== "object" || Array.isArray(schema)) return false;
|
|
40
|
+
const rule = schema as Record<string, unknown>;
|
|
41
|
+
if (Object.keys(rule).some(key => !ANNOTATIONS.has(key) && !CONSTRAINTS.has(key))) return false;
|
|
42
|
+
if (rule.properties !== undefined) {
|
|
43
|
+
if (!rule.properties || typeof rule.properties !== "object" || Array.isArray(rule.properties)) return false;
|
|
44
|
+
if (!Object.values(rule.properties).every(child => supportedSchema(child, depth + 1))) return false;
|
|
45
|
+
}
|
|
46
|
+
for (const keyword of ["items", "additionalProperties"] as const) {
|
|
47
|
+
if (rule[keyword] !== undefined && !supportedSchema(rule[keyword], depth + 1)) return false;
|
|
48
|
+
}
|
|
49
|
+
for (const keyword of ["anyOf", "oneOf", "allOf"] as const) {
|
|
50
|
+
if (rule[keyword] !== undefined && (!Array.isArray(rule[keyword]) ||
|
|
51
|
+
rule[keyword].length === 0 || !rule[keyword].every(child => supportedSchema(child, depth + 1)))) return false;
|
|
52
|
+
}
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Unknown assertion keywords, malformed schemas and deep recursion fail closed. */
|
|
57
|
+
export function validatesRestoredValue(value: unknown, schema: unknown): boolean {
|
|
58
|
+
return supportedSchema(schema, 0) && validateNode(value, schema, 0);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function validateNode(value: unknown, schema: unknown, depth: number): boolean {
|
|
62
|
+
if (depth > 16) return false;
|
|
63
|
+
if (typeof schema === "boolean") return schema;
|
|
64
|
+
if (!schema || typeof schema !== "object" || Array.isArray(schema)) return false;
|
|
65
|
+
const rule = schema as Record<string, unknown>;
|
|
66
|
+
if (rule.type !== undefined) {
|
|
67
|
+
const types = typeof rule.type === "string" ? [rule.type] : rule.type;
|
|
68
|
+
if (!Array.isArray(types) || types.length === 0 || !types.every(type => typeof type === "string") ||
|
|
69
|
+
!types.some(type => matchesType(value, type))) return false;
|
|
70
|
+
}
|
|
71
|
+
if (rule.enum !== undefined && (!Array.isArray(rule.enum) || !rule.enum.some(option => same(value, option)))) return false;
|
|
72
|
+
if (Object.hasOwn(rule, "const") && !same(value, rule.const)) return false;
|
|
73
|
+
for (const [keyword, compare] of [
|
|
74
|
+
["minimum", (a: number, b: number) => a >= b],
|
|
75
|
+
["maximum", (a: number, b: number) => a <= b],
|
|
76
|
+
["exclusiveMinimum", (a: number, b: number) => a > b],
|
|
77
|
+
["exclusiveMaximum", (a: number, b: number) => a < b],
|
|
78
|
+
] as const) if (!validBound(value, rule[keyword], compare)) return false;
|
|
79
|
+
if (rule.multipleOf !== undefined &&
|
|
80
|
+
(typeof value !== "number" || typeof rule.multipleOf !== "number" || rule.multipleOf <= 0 ||
|
|
81
|
+
!Number.isInteger(value / rule.multipleOf))) return false;
|
|
82
|
+
if (rule.minLength !== undefined && !validBound(typeof value === "string" ? [...value].length : undefined, rule.minLength, (a, b) => a >= b)) return false;
|
|
83
|
+
if (rule.maxLength !== undefined && !validBound(typeof value === "string" ? [...value].length : undefined, rule.maxLength, (a, b) => a <= b)) return false;
|
|
84
|
+
if (rule.minItems !== undefined && !validBound(Array.isArray(value) ? value.length : undefined, rule.minItems, (a, b) => a >= b)) return false;
|
|
85
|
+
if (rule.maxItems !== undefined && !validBound(Array.isArray(value) ? value.length : undefined, rule.maxItems, (a, b) => a <= b)) return false;
|
|
86
|
+
if (rule.uniqueItems !== undefined) {
|
|
87
|
+
if (typeof rule.uniqueItems !== "boolean" || !Array.isArray(value)) return false;
|
|
88
|
+
if (rule.uniqueItems && value.some((item, index) => value.slice(index + 1).some(other => same(item, other)))) return false;
|
|
89
|
+
}
|
|
90
|
+
if (rule.items !== undefined && (!Array.isArray(value) || !value.every(item => validateNode(item, rule.items, depth + 1)))) return false;
|
|
91
|
+
const object = value !== null && typeof value === "object" && !Array.isArray(value) ? value as Record<string, unknown> : undefined;
|
|
92
|
+
if (rule.minProperties !== undefined && !validBound(object ? Object.keys(object).length : undefined, rule.minProperties, (a, b) => a >= b)) return false;
|
|
93
|
+
if (rule.maxProperties !== undefined && !validBound(object ? Object.keys(object).length : undefined, rule.maxProperties, (a, b) => a <= b)) return false;
|
|
94
|
+
if (rule.required !== undefined && (!object || !Array.isArray(rule.required) ||
|
|
95
|
+
!rule.required.every(key => typeof key === "string" && Object.hasOwn(object, key)))) return false;
|
|
96
|
+
if (rule.properties !== undefined && (!object || !rule.properties || typeof rule.properties !== "object" || Array.isArray(rule.properties))) return false;
|
|
97
|
+
const properties = rule.properties as Record<string, unknown> | undefined;
|
|
98
|
+
if (object) for (const [key, item] of Object.entries(object)) {
|
|
99
|
+
if (properties && Object.hasOwn(properties, key)) {
|
|
100
|
+
if (!validateNode(item, properties[key], depth + 1)) return false;
|
|
101
|
+
} else if (rule.additionalProperties !== undefined && !validateNode(item, rule.additionalProperties, depth + 1)) return false;
|
|
102
|
+
}
|
|
103
|
+
if (rule.additionalProperties !== undefined && !object) return false;
|
|
104
|
+
for (const keyword of ["anyOf", "oneOf", "allOf"] as const) {
|
|
105
|
+
const branches = rule[keyword];
|
|
106
|
+
if (branches === undefined) continue;
|
|
107
|
+
if (!Array.isArray(branches) || branches.length === 0) return false;
|
|
108
|
+
const matches = branches.filter(branch => validateNode(value, branch, depth + 1)).length;
|
|
109
|
+
if (keyword === "anyOf" && matches < 1 || keyword === "oneOf" && matches !== 1 || keyword === "allOf" && matches !== branches.length) return false;
|
|
110
|
+
}
|
|
111
|
+
return true;
|
|
112
|
+
}
|