@bitkyc08/opencodex 2.10.0 → 2.10.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/AGENTS_INSTALL.md +77 -0
- package/README.md +4 -10
- package/bin/ocx.mjs +71 -18
- package/gui/dist/assets/index-Cd6_PBKn.css +1 -0
- package/gui/dist/assets/index-ChZQsmBY.js +70 -0
- package/gui/dist/index.html +2 -2
- package/gui/dist/provider-icons/alibaba-color.svg +1 -1
- package/gui/dist/provider-icons/antigravity-color.svg +1 -1
- package/gui/dist/provider-icons/claude-color.svg +1 -1
- package/gui/dist/provider-icons/cline-color.svg +16 -0
- package/gui/dist/provider-icons/cloudflare-ai-gateway-color.svg +1 -1
- package/gui/dist/provider-icons/copilot-color.svg +1 -1
- package/gui/dist/provider-icons/cursor-color.svg +1 -1
- package/gui/dist/provider-icons/deepseek-color.svg +1 -1
- package/gui/dist/provider-icons/firepass-color.svg +1 -1
- package/gui/dist/provider-icons/fireworks-color.svg +1 -1
- package/gui/dist/provider-icons/gemini-color.svg +1 -1
- package/gui/dist/provider-icons/github-copilot-color.svg +1 -1
- package/gui/dist/provider-icons/gitlab-duo-color.svg +1 -1
- package/gui/dist/provider-icons/grok.svg +1 -1
- package/gui/dist/provider-icons/groq-color.svg +1 -1
- package/gui/dist/provider-icons/huggingface-color.svg +1 -1
- package/gui/dist/provider-icons/kimi-color.svg +1 -1
- package/gui/dist/provider-icons/kiro-color.svg +2 -2
- package/gui/dist/provider-icons/lm-studio-color.svg +1 -1
- package/gui/dist/provider-icons/mistral-color.svg +1 -1
- package/gui/dist/provider-icons/moonshot-color.svg +1 -1
- package/gui/dist/provider-icons/nvidia-color.svg +1 -1
- package/gui/dist/provider-icons/ollama-color.svg +1 -1
- package/gui/dist/provider-icons/openai.svg +1 -1
- package/gui/dist/provider-icons/opencode.svg +2 -1
- package/gui/dist/provider-icons/openrouter-color.svg +1 -1
- package/gui/dist/provider-icons/pi.svg +2 -2
- package/gui/dist/provider-icons/qianfan-color.svg +1 -1
- package/gui/dist/provider-icons/qwen-portal-color.svg +1 -1
- package/gui/dist/provider-icons/vercel-ai-gateway-color.svg +1 -1
- package/gui/dist/provider-icons/vllm-color.svg +1 -1
- package/gui/dist/provider-icons/xiaomi-color.svg +1 -1
- package/package.json +8 -4
- package/src/adapters/anthropic.ts +208 -14
- package/src/adapters/base.ts +16 -5
- package/src/adapters/cursor/effort-map.ts +3 -2
- package/src/adapters/cursor/framing.ts +39 -0
- package/src/adapters/cursor/live-transport.ts +105 -95
- package/src/adapters/cursor/native-exec.ts +32 -6
- package/src/adapters/cursor/protobuf-request.ts +20 -15
- package/src/adapters/cursor/request-builder.ts +21 -7
- package/src/adapters/cursor/types.ts +7 -0
- package/src/adapters/google-antigravity-replay.ts +237 -21
- package/src/adapters/google-truncation.ts +11 -0
- package/src/adapters/google.ts +50 -9
- package/src/adapters/identity.ts +39 -6
- package/src/adapters/kiro-errors.ts +11 -0
- package/src/adapters/kiro-events.ts +19 -1
- package/src/adapters/kiro-thinking.ts +10 -2
- package/src/adapters/kiro-tools.ts +10 -1
- package/src/adapters/kiro.ts +37 -11
- package/src/adapters/openai-chat.ts +284 -83
- package/src/adapters/openai-responses.ts +182 -24
- package/src/bridge.ts +177 -7
- package/src/chat/outbound.ts +78 -23
- package/src/claude/agents-inject.ts +27 -5
- package/src/claude/inbound.ts +11 -1
- package/src/claude/model-info.ts +13 -10
- package/src/claude/outbound.ts +17 -0
- package/src/cli/account-api.ts +24 -0
- package/src/cli/account-auth.ts +31 -6
- package/src/cli/account-main.ts +317 -0
- package/src/cli/account.ts +5 -0
- package/src/cli/claude.ts +2 -1
- package/src/cli/doctor.ts +93 -22
- package/src/cli/export-command.ts +26 -12
- package/src/cli/help.ts +8 -6
- package/src/cli/index.ts +56 -22
- package/src/cli/integrations.ts +84 -1
- package/src/cli/observe.ts +54 -1
- package/src/cli/opencode.ts +2 -1
- package/src/cli/provider-runtime.ts +18 -1
- package/src/cli/route-policy.ts +92 -0
- package/src/cli/runtime-api.ts +6 -3
- package/src/cli/star-prompt.ts +71 -15
- package/src/cli/status.ts +1 -1
- package/src/cli/v2.ts +36 -9
- package/src/clients/config-export.ts +687 -10
- package/src/codex/account-lifecycle.ts +30 -5
- package/src/codex/account-usability.ts +22 -2
- package/src/codex/admission.ts +255 -0
- package/src/codex/auth-api.ts +427 -140
- package/src/codex/auth-context.ts +155 -30
- package/src/codex/autostart-health.ts +8 -1
- package/src/codex/catalog/account-models.ts +62 -0
- package/src/codex/catalog/aggregation.ts +14 -1
- package/src/codex/catalog/bundled.ts +282 -32
- package/src/codex/catalog/filesystem-evidence.ts +302 -0
- package/src/codex/catalog/metadata.ts +51 -6
- package/src/codex/catalog/parsing.ts +6 -3
- package/src/codex/catalog/provider-fetch.ts +576 -41
- package/src/codex/catalog/sync.ts +505 -66
- package/src/codex/catalog-admission.ts +197 -0
- package/src/codex/catalog-write-serialization.ts +241 -0
- package/src/codex/catalog.ts +2 -1
- package/src/codex/codex-write-lock.ts +372 -0
- package/src/codex/convergence-types.ts +593 -0
- package/src/codex/convergence.ts +441 -0
- package/src/codex/desired-state.ts +177 -0
- package/src/codex/features.ts +52 -8
- package/src/codex/generation.ts +202 -0
- package/src/codex/history-job.ts +257 -0
- package/src/codex/history-lock.ts +241 -0
- package/src/codex/history-migration-guardian.ts +18 -5
- package/src/codex/history-provider.ts +9 -2
- package/src/codex/history-transition.ts +105 -0
- package/src/codex/history-worker.ts +176 -0
- package/src/codex/inject-coordination.ts +245 -0
- package/src/codex/inject.ts +605 -124
- package/src/codex/integration-record.ts +266 -0
- package/src/codex/internal/catalog-writer.ts +203 -0
- package/src/codex/internal/history-writer.ts +80 -0
- package/src/codex/journal.ts +10 -1
- package/src/codex/main-account-cache.ts +24 -0
- package/src/codex/management-convergence.ts +114 -0
- package/src/codex/native-main-admission.ts +47 -0
- package/src/codex/native-main-auth-temp.ts +187 -0
- package/src/codex/native-main-claim.ts +167 -0
- package/src/codex/native-main-lock-file.ts +158 -0
- package/src/codex/native-main-owner.ts +315 -0
- package/src/codex/native-profile-api.ts +247 -0
- package/src/codex/native-profile-manager.ts +1512 -0
- package/src/codex/native-profile-processes.ts +121 -0
- package/src/codex/native-profile-recovery.ts +99 -0
- package/src/codex/native-profile-stage-store.ts +387 -0
- package/src/codex/native-profile-startup.ts +340 -0
- package/src/codex/native-profile-store.ts +855 -0
- package/src/codex/native-profile-types.ts +120 -0
- package/src/codex/native-residue.ts +557 -0
- package/src/codex/project-config-warnings.ts +18 -4
- package/src/codex/prompt-journal.ts +311 -0
- package/src/codex/prompt-layers.ts +967 -0
- package/src/codex/prompt-lock.ts +143 -0
- package/src/codex/quota-rejection.ts +224 -0
- package/src/codex/quota.ts +86 -3
- package/src/codex/routing.ts +299 -62
- package/src/codex/runtime.ts +159 -38
- package/src/codex/shim.ts +39 -13
- package/src/codex/subagent-model-fallback.ts +73 -12
- package/src/codex/transition-state.ts +604 -0
- package/src/codex/upstream-host-health.ts +70 -0
- package/src/codex/user-identity.ts +266 -0
- package/src/codex/write-coordination.ts +114 -0
- package/src/config.ts +562 -26
- package/src/generated/jawcode-model-metadata.ts +2 -2
- package/src/grok/inject.ts +15 -4
- package/src/grok/inspect.ts +45 -0
- package/src/images/loop.ts +113 -20
- package/src/integrations/config-io.ts +151 -0
- package/src/integrations/journal.ts +315 -0
- package/src/integrations/merge.ts +135 -0
- package/src/integrations/native/ownership-preflight.ts +165 -0
- package/src/integrations/ownership.ts +111 -0
- package/src/integrations/registry.ts +101 -0
- package/src/integrations/serialize.ts +235 -0
- package/src/integrations/state.ts +290 -0
- package/src/integrations/store.ts +103 -0
- package/src/integrations/writer.ts +492 -0
- package/src/lib/bounded-body.ts +46 -8
- package/src/lib/bun-runtime.ts +110 -1
- package/src/lib/bun-stream-caps.ts +2 -1
- package/src/lib/redact.ts +407 -2
- package/src/lib/shadow-call.ts +24 -0
- package/src/lib/translator-budget.ts +10 -0
- package/src/lib/upstream-reachability.ts +91 -0
- package/src/lib/upstream-retry.ts +154 -2
- package/src/lib/windows-secret-acl.ts +212 -11
- package/src/lib/winsw.ts +9 -3
- package/src/oauth/index.ts +61 -3
- package/src/oauth/key-providers.ts +4 -0
- package/src/oauth/kiro.ts +50 -6
- package/src/oauth/store.ts +31 -6
- package/src/oauth/token-guardian.ts +9 -3
- package/src/providers/codex-capacity.ts +288 -0
- package/src/providers/derive.ts +33 -1
- package/src/providers/free-directory.ts +3 -1
- package/src/providers/key-failover.ts +71 -3
- package/src/providers/openai-sidecar.ts +64 -4
- package/src/providers/openai-virtual-models.ts +1 -0
- package/src/providers/quota.ts +334 -26
- package/src/providers/registry.ts +284 -16
- package/src/providers/xai-transport.ts +11 -4
- package/src/responses/compaction.ts +8 -1
- package/src/responses/hosted-tool-policy.ts +9 -0
- package/src/responses/parser.ts +44 -2
- package/src/responses/reasoning-envelope.ts +9 -1
- package/src/responses/reasoning-replay-cache.ts +105 -0
- package/src/responses/spill-store.ts +45 -8
- package/src/responses/state.ts +161 -17
- package/src/router.ts +302 -16
- package/src/routing/analytics.ts +377 -0
- package/src/routing/capability.ts +204 -0
- package/src/routing/cost.ts +77 -0
- package/src/routing/evaluator.ts +444 -0
- package/src/routing/health.ts +401 -0
- package/src/routing/history/cursor.ts +43 -0
- package/src/routing/history/indexer.ts +590 -0
- package/src/routing/history/schema.ts +72 -0
- package/src/routing/profile.ts +423 -0
- package/src/routing/quota.ts +124 -0
- package/src/routing/request-evidence.ts +45 -0
- package/src/routing/trace.ts +686 -0
- package/src/server/auth-cors.ts +46 -6
- package/src/server/chat-completions.ts +28 -13
- package/src/server/claude-messages.ts +23 -15
- package/src/server/gui-static.ts +39 -10
- package/src/server/images.ts +10 -1
- package/src/server/index.ts +238 -52
- package/src/server/lifecycle.ts +228 -9
- package/src/server/live.ts +14 -3
- package/src/server/management/agent-settings-routes.ts +64 -14
- package/src/server/management/combo-routes.ts +5 -5
- package/src/server/management/config-routes.ts +1 -1
- package/src/server/management/context.ts +42 -2
- package/src/server/management/integration-routes.ts +538 -0
- package/src/server/management/logs-usage-routes.ts +1 -1
- package/src/server/management/model-routes.ts +32 -113
- package/src/server/management/model-rows.ts +117 -0
- package/src/server/management/native-integration-routes.ts +587 -0
- package/src/server/management/oauth-account-routes.ts +1 -1
- package/src/server/management/provider-routes.ts +218 -117
- package/src/server/management/request-history-routes.ts +191 -0
- package/src/server/management/routing-analytics-routes.ts +74 -0
- package/src/server/management/routing-profile-routes.ts +177 -0
- package/src/server/management/shared.ts +2 -2
- package/src/server/management/sidebar-routes.ts +47 -31
- package/src/server/management/sync-response.ts +69 -0
- package/src/server/management/system-restart.ts +276 -24
- package/src/server/management/system-routes.ts +4 -0
- package/src/server/management-api.ts +84 -9
- package/src/server/management-auth.ts +43 -5
- package/src/server/relay-eager.ts +82 -42
- package/src/server/relay.ts +120 -6
- package/src/server/request-log.ts +26 -6
- package/src/server/responses/collaboration.ts +63 -8
- package/src/server/responses/compact.ts +272 -41
- package/src/server/responses/core.ts +730 -132
- package/src/server/responses/fetch-helpers.ts +15 -1
- package/src/server/responses-item-id-repair.ts +32 -3
- package/src/server/responses-json-events.ts +52 -0
- package/src/server/responses-snapshot-repair.ts +621 -0
- package/src/server/search.ts +51 -6
- package/src/server/sse-payload-rewrite.ts +89 -12
- package/src/server/startup-health-cache.ts +7 -1
- package/src/server/ws-bridge.ts +11 -17
- package/src/service-manager-probe.ts +297 -0
- package/src/service.ts +222 -32
- package/src/tray/windows-tray.ps1 +9 -0
- package/src/tray/windows.ts +15 -7
- package/src/types.ts +194 -14
- package/src/update/index.ts +13 -13
- package/src/update/job.ts +24 -21
- package/src/update/notify.ts +7 -3
- package/src/usage/cost.ts +0 -0
- package/src/usage/expected-prices.ts +129 -10
- package/src/usage/log.ts +50 -15
- package/src/usage/summary.ts +4 -4
- package/src/vision/index.ts +6 -1
- package/src/web-search/loop.ts +161 -34
- package/gui/dist/assets/index-OY43ubAq.css +0 -1
- package/gui/dist/assets/index-YwNnKZcL.js +0 -67
- package/gui/dist/provider-icons/antigravity.svg +0 -1
- package/gui/dist/provider-icons/claude.svg +0 -1
- package/gui/dist/provider-icons/copilot.svg +0 -1
- package/gui/dist/provider-icons/cursor.svg +0 -2
- package/gui/dist/provider-icons/gemini.svg +0 -1
- package/gui/dist/provider-icons/grok-color.svg +0 -1
- package/gui/dist/provider-icons/kiro.svg +0 -14
package/src/adapters/kiro.ts
CHANGED
|
@@ -39,7 +39,7 @@ import { extractKiroImages, normalizeKiroImages, type KiroImage } from "./kiro-i
|
|
|
39
39
|
import { sniffImageDimensions } from "./anthropic-image-guard";
|
|
40
40
|
import { fetchKiroWithRetry, noteKiroTransientThrottle } from "./kiro-retry";
|
|
41
41
|
import { convertKiroToolContext } from "./kiro-tools";
|
|
42
|
-
import {
|
|
42
|
+
import { identifyRoutedModel } from "./identity";
|
|
43
43
|
import { buildNonOpenAIToolCatalogNudgeFromNames } from "./tool-catalog-nudge";
|
|
44
44
|
import {
|
|
45
45
|
KIRO_COMPLETION_INSTRUCTIONS,
|
|
@@ -99,7 +99,11 @@ interface KiroUserInputMessage {
|
|
|
99
99
|
}
|
|
100
100
|
interface KiroHistoryEntry {
|
|
101
101
|
userInputMessage?: KiroUserInputMessage;
|
|
102
|
-
assistantResponseMessage?: {
|
|
102
|
+
assistantResponseMessage?: {
|
|
103
|
+
content: string;
|
|
104
|
+
toolUses?: KiroToolUse[];
|
|
105
|
+
reasoningContent?: { redactedContent: string };
|
|
106
|
+
};
|
|
103
107
|
}
|
|
104
108
|
|
|
105
109
|
function kiroToolWireNames(tools: readonly unknown[]): string[] {
|
|
@@ -326,7 +330,7 @@ function validateKiroCapabilities(parsed: OcxParsedRequest): void {
|
|
|
326
330
|
|
|
327
331
|
type KiroTurn =
|
|
328
332
|
| { kind: "user"; content: string; images: KiroImage[]; toolResults: KiroToolResult[] }
|
|
329
|
-
| { kind: "assistant"; content: string; toolUses: KiroToolUse[] };
|
|
333
|
+
| { kind: "assistant"; content: string; toolUses: KiroToolUse[]; redactedReasoning?: string };
|
|
330
334
|
|
|
331
335
|
function appendTurnText(target: string, next: string): string {
|
|
332
336
|
if (!next) return target;
|
|
@@ -381,9 +385,21 @@ function validateKiroConversationState(history: KiroHistoryEntry[], currentMessa
|
|
|
381
385
|
function boundedInjectedInstruction(text: string, used: { value: number }): string | undefined {
|
|
382
386
|
const remaining = MAX_KIRO_INJECTED_INSTRUCTION_CHARS - used.value;
|
|
383
387
|
if (remaining <= 0 || !text) return undefined;
|
|
384
|
-
|
|
388
|
+
let result = text.length <= remaining ? text : text.slice(0, remaining);
|
|
389
|
+
// Never end the slice on a lone high surrogate: encoding it substitutes
|
|
390
|
+
// U+FFFD into the injected instruction. One step back keeps a valid pair
|
|
391
|
+
// out instead of a broken half.
|
|
392
|
+
if (result.length > 0) {
|
|
393
|
+
const last = result.charCodeAt(result.length - 1);
|
|
394
|
+
if (last >= 0xd800 && last <= 0xdbff) result = result.slice(0, -1);
|
|
395
|
+
}
|
|
385
396
|
used.value += result.length;
|
|
386
|
-
return result;
|
|
397
|
+
return result.length > 0 ? result : undefined;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
/** Test-only: exercise the surrogate-safe instruction bound directly. */
|
|
401
|
+
export function boundedInjectedInstructionForTests(text: string, used: { value: number }): string | undefined {
|
|
402
|
+
return boundedInjectedInstruction(text, used);
|
|
387
403
|
}
|
|
388
404
|
|
|
389
405
|
function kiroCompletionTool(): Record<string, unknown> {
|
|
@@ -431,9 +447,10 @@ export function buildKiroPayload(
|
|
|
431
447
|
const nameMap = toolContext.nameMap;
|
|
432
448
|
const systemParts: string[] = [];
|
|
433
449
|
const injectedChars = { value: 0 };
|
|
434
|
-
//
|
|
435
|
-
|
|
436
|
-
|
|
450
|
+
// Name the Kiro model id actually sent on the wire without leaking the proxy identity upstream.
|
|
451
|
+
if (parsed.context.systemPrompt?.length) {
|
|
452
|
+
systemParts.push(identifyRoutedModel(parsed.context.systemPrompt.join("\n\n"), modelId));
|
|
453
|
+
}
|
|
437
454
|
for (const addition of toolContext.systemAdditions) {
|
|
438
455
|
const boundedAddition = boundedInjectedInstruction(addition, injectedChars);
|
|
439
456
|
if (boundedAddition) systemParts.push(boundedAddition);
|
|
@@ -458,13 +475,15 @@ export function buildKiroPayload(
|
|
|
458
475
|
turns.push({ kind: "user", content, images: [...images], toolResults: [...toolResults] });
|
|
459
476
|
}
|
|
460
477
|
};
|
|
461
|
-
const pushAssistant = (content: string, toolUses: KiroToolUse[]): void => {
|
|
478
|
+
const pushAssistant = (content: string, toolUses: KiroToolUse[], redactedReasoning?: string): void => {
|
|
462
479
|
const last = turns.at(-1);
|
|
463
480
|
if (last?.kind === "assistant") {
|
|
464
481
|
last.content = appendTurnText(last.content, content);
|
|
465
482
|
last.toolUses.push(...toolUses);
|
|
483
|
+
// Merged turns keep the newest blob: it covers the reasoning up to the merged turn's end.
|
|
484
|
+
if (redactedReasoning) last.redactedReasoning = redactedReasoning;
|
|
466
485
|
} else {
|
|
467
|
-
turns.push({ kind: "assistant", content, toolUses: [...toolUses] });
|
|
486
|
+
turns.push({ kind: "assistant", content, toolUses: [...toolUses], ...(redactedReasoning ? { redactedReasoning } : {}) });
|
|
468
487
|
}
|
|
469
488
|
};
|
|
470
489
|
|
|
@@ -494,7 +513,7 @@ export function buildKiroPayload(
|
|
|
494
513
|
const hasReasoning = aMsg.content.some(part => part.type === "thinking" && part.thinking.trim());
|
|
495
514
|
if (hasReasoning) continue;
|
|
496
515
|
}
|
|
497
|
-
pushAssistant(text, toolUses);
|
|
516
|
+
pushAssistant(text, toolUses, aMsg.kiroRedactedReasoning);
|
|
498
517
|
} else if (msg.role === "toolResult") {
|
|
499
518
|
const tr = msg as OcxToolResultMessage;
|
|
500
519
|
if (tr.containsEncryptedContent) {
|
|
@@ -548,6 +567,7 @@ export function buildKiroPayload(
|
|
|
548
567
|
assistantResponseMessage: {
|
|
549
568
|
content: turn.content,
|
|
550
569
|
...(turn.toolUses.length > 0 ? { toolUses: turn.toolUses } : {}),
|
|
570
|
+
...(turn.redactedReasoning ? { reasoningContent: { redactedContent: turn.redactedReasoning } } : {}),
|
|
551
571
|
},
|
|
552
572
|
}
|
|
553
573
|
: {
|
|
@@ -1170,6 +1190,12 @@ async function* parseKiroAttemptEvents(
|
|
|
1170
1190
|
if (ev.data) {
|
|
1171
1191
|
yield* emitRetained(stage({ type: "reasoning_raw_delta", text: ev.data }));
|
|
1172
1192
|
}
|
|
1193
|
+
if (ev.redactedContent) {
|
|
1194
|
+
yield* emitRetained(stage({ type: "kiro_redacted_reasoning", data: ev.redactedContent }));
|
|
1195
|
+
}
|
|
1196
|
+
break;
|
|
1197
|
+
case "context_usage":
|
|
1198
|
+
if (ev.contextUsagePercentage > 0) contextUsagePercentage = ev.contextUsagePercentage;
|
|
1173
1199
|
break;
|
|
1174
1200
|
case "tool": {
|
|
1175
1201
|
for (const contentEvent of thinking.flush()) {
|