@iislee/opencodex 2.11.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/LICENSE +21 -0
- package/README.md +225 -0
- package/assets/architecture.png +0 -0
- package/assets/banner.png +0 -0
- package/assets/claude-code-models.gif +0 -0
- package/assets/codex-app-picker.png +0 -0
- package/bin/ocx.mjs +451 -0
- package/bin/package-main.mjs +9 -0
- package/gui/dist/assets/index-DTpMHS4F.js +67 -0
- package/gui/dist/assets/index-ZNVDE3C7.css +1 -0
- package/gui/dist/favicon.png +0 -0
- package/gui/dist/icons.svg +24 -0
- package/gui/dist/index.html +25 -0
- package/gui/dist/logo.png +0 -0
- package/gui/dist/provider-icons/alibaba-color.svg +1 -0
- package/gui/dist/provider-icons/antigravity-color.svg +1 -0
- package/gui/dist/provider-icons/antigravity.svg +1 -0
- package/gui/dist/provider-icons/claude-color.svg +1 -0
- package/gui/dist/provider-icons/claude.svg +1 -0
- package/gui/dist/provider-icons/cloudflare-ai-gateway-color.svg +1 -0
- package/gui/dist/provider-icons/copilot-color.svg +1 -0
- package/gui/dist/provider-icons/copilot.svg +1 -0
- package/gui/dist/provider-icons/cursor-color.svg +2 -0
- package/gui/dist/provider-icons/cursor.svg +2 -0
- package/gui/dist/provider-icons/deepseek-color.svg +1 -0
- package/gui/dist/provider-icons/discord.svg +1 -0
- package/gui/dist/provider-icons/firepass-color.svg +1 -0
- package/gui/dist/provider-icons/fireworks-color.svg +1 -0
- package/gui/dist/provider-icons/gemini-color.svg +1 -0
- package/gui/dist/provider-icons/gemini.svg +1 -0
- package/gui/dist/provider-icons/github-copilot-color.svg +1 -0
- package/gui/dist/provider-icons/gitlab-duo-color.svg +1 -0
- package/gui/dist/provider-icons/grok-color.svg +1 -0
- package/gui/dist/provider-icons/grok.svg +1 -0
- package/gui/dist/provider-icons/groq-color.svg +1 -0
- package/gui/dist/provider-icons/huggingface-color.svg +1 -0
- package/gui/dist/provider-icons/kimi-color.svg +1 -0
- package/gui/dist/provider-icons/kiro-color.svg +15 -0
- package/gui/dist/provider-icons/kiro.svg +14 -0
- package/gui/dist/provider-icons/lm-studio-color.svg +1 -0
- package/gui/dist/provider-icons/mistral-color.svg +1 -0
- package/gui/dist/provider-icons/moonshot-color.svg +1 -0
- package/gui/dist/provider-icons/nvidia-color.svg +1 -0
- package/gui/dist/provider-icons/ollama-color.svg +1 -0
- package/gui/dist/provider-icons/openai.svg +1 -0
- package/gui/dist/provider-icons/opencode.svg +1 -0
- package/gui/dist/provider-icons/openrouter-color.svg +1 -0
- package/gui/dist/provider-icons/pi.svg +21 -0
- package/gui/dist/provider-icons/qianfan-color.svg +1 -0
- package/gui/dist/provider-icons/qwen-portal-color.svg +1 -0
- package/gui/dist/provider-icons/telegram.svg +1 -0
- package/gui/dist/provider-icons/vercel-ai-gateway-color.svg +1 -0
- package/gui/dist/provider-icons/vllm-color.svg +1 -0
- package/gui/dist/provider-icons/xiaomi-color.svg +1 -0
- package/package.json +102 -0
- package/src/AGENTS.md +28 -0
- package/src/adapters/anthropic-image-guard.ts +251 -0
- package/src/adapters/anthropic-image-normalize.ts +518 -0
- package/src/adapters/anthropic.ts +1003 -0
- package/src/adapters/azure.ts +36 -0
- package/src/adapters/base.ts +72 -0
- package/src/adapters/client-fingerprint.ts +59 -0
- package/src/adapters/cursor/arg-codec.ts +38 -0
- package/src/adapters/cursor/arg-normalize.ts +104 -0
- package/src/adapters/cursor/cursor-errors.ts +165 -0
- package/src/adapters/cursor/discovery.ts +276 -0
- package/src/adapters/cursor/effort-map.ts +127 -0
- package/src/adapters/cursor/exec-policy.ts +88 -0
- package/src/adapters/cursor/framing.ts +211 -0
- package/src/adapters/cursor/gen/agent_pb.ts +15274 -0
- package/src/adapters/cursor/kv-store.ts +52 -0
- package/src/adapters/cursor/live-models.ts +153 -0
- package/src/adapters/cursor/live-smoke-gate.ts +41 -0
- package/src/adapters/cursor/live-transport.ts +1214 -0
- package/src/adapters/cursor/mcp-config.ts +42 -0
- package/src/adapters/cursor/mcp-manager.ts +333 -0
- package/src/adapters/cursor/message-mapper.ts +49 -0
- package/src/adapters/cursor/native-exec-common.ts +55 -0
- package/src/adapters/cursor/native-exec-desktop.ts +184 -0
- package/src/adapters/cursor/native-exec-fs.ts +329 -0
- package/src/adapters/cursor/native-exec-mcp.ts +153 -0
- package/src/adapters/cursor/native-exec-network.ts +43 -0
- package/src/adapters/cursor/native-exec-shell.ts +548 -0
- package/src/adapters/cursor/native-exec-tools.ts +118 -0
- package/src/adapters/cursor/native-exec.ts +576 -0
- package/src/adapters/cursor/protobuf-events.ts +563 -0
- package/src/adapters/cursor/protobuf-request.ts +714 -0
- package/src/adapters/cursor/request-builder.ts +255 -0
- package/src/adapters/cursor/thread-continuity.ts +67 -0
- package/src/adapters/cursor/tool-definitions.ts +505 -0
- package/src/adapters/cursor/transport-retry.ts +132 -0
- package/src/adapters/cursor/transport.ts +57 -0
- package/src/adapters/cursor/types.ts +52 -0
- package/src/adapters/cursor.ts +196 -0
- package/src/adapters/google-antigravity-replay.ts +303 -0
- package/src/adapters/google-antigravity-wire.ts +108 -0
- package/src/adapters/google-errors.ts +85 -0
- package/src/adapters/google-http.ts +100 -0
- package/src/adapters/google-tool-schema.ts +173 -0
- package/src/adapters/google-truncation.ts +13 -0
- package/src/adapters/google-wire-compiler.ts +232 -0
- package/src/adapters/google.ts +758 -0
- package/src/adapters/identity.ts +44 -0
- package/src/adapters/image.ts +23 -0
- package/src/adapters/kiro-constants.ts +16 -0
- package/src/adapters/kiro-errors.ts +197 -0
- package/src/adapters/kiro-events.ts +179 -0
- package/src/adapters/kiro-images.ts +129 -0
- package/src/adapters/kiro-retry.ts +312 -0
- package/src/adapters/kiro-thinking.ts +96 -0
- package/src/adapters/kiro-tool-fallback.ts +36 -0
- package/src/adapters/kiro-tools.ts +215 -0
- package/src/adapters/kiro-truncation.ts +33 -0
- package/src/adapters/kiro-wire.ts +129 -0
- package/src/adapters/kiro.ts +1898 -0
- package/src/adapters/mimo-free.ts +263 -0
- package/src/adapters/openai-chat.ts +1005 -0
- package/src/adapters/openai-responses.ts +1137 -0
- package/src/adapters/run-turn-queue.ts +114 -0
- package/src/adapters/tool-catalog-nudge.ts +71 -0
- package/src/adapters/upstream-http-error.ts +48 -0
- package/src/bridge.ts +1619 -0
- package/src/chat/inbound.ts +295 -0
- package/src/chat/outbound.ts +765 -0
- package/src/claude/agents-inject.ts +243 -0
- package/src/claude/alias.ts +149 -0
- package/src/claude/auth-detect.ts +229 -0
- package/src/claude/auth-mode-migration.ts +32 -0
- package/src/claude/auth-mode.ts +62 -0
- package/src/claude/context-windows.ts +189 -0
- package/src/claude/desktop-3p-guard.ts +35 -0
- package/src/claude/desktop-3p-paths.ts +84 -0
- package/src/claude/desktop-3p.ts +381 -0
- package/src/claude/desktop-health.ts +26 -0
- package/src/claude/desktop-profile.ts +263 -0
- package/src/claude/gateway-cache.ts +70 -0
- package/src/claude/inbound-debug.ts +163 -0
- package/src/claude/inbound.ts +509 -0
- package/src/claude/model-info.ts +151 -0
- package/src/claude/outbound.ts +872 -0
- package/src/cli/access.ts +108 -0
- package/src/cli/account-api.ts +268 -0
- package/src/cli/account-auth.ts +223 -0
- package/src/cli/account-extended.ts +350 -0
- package/src/cli/account.ts +275 -0
- package/src/cli/agent-driven.ts +70 -0
- package/src/cli/agent.ts +184 -0
- package/src/cli/catalog-prewarm.ts +27 -0
- package/src/cli/claude-desktop.ts +188 -0
- package/src/cli/claude.ts +286 -0
- package/src/cli/codex-shim-autorestore.ts +45 -0
- package/src/cli/combo.ts +119 -0
- package/src/cli/config-command.ts +145 -0
- package/src/cli/debug.ts +228 -0
- package/src/cli/doctor.ts +930 -0
- package/src/cli/export-command.ts +187 -0
- package/src/cli/help.ts +354 -0
- package/src/cli/index.ts +1113 -0
- package/src/cli/init.ts +224 -0
- package/src/cli/integrations.ts +142 -0
- package/src/cli/interactive-confirm.ts +133 -0
- package/src/cli/internal-dispatch.ts +20 -0
- package/src/cli/models-runtime.ts +212 -0
- package/src/cli/models.ts +336 -0
- package/src/cli/observe.ts +117 -0
- package/src/cli/opencode.ts +586 -0
- package/src/cli/pi.ts +188 -0
- package/src/cli/provider-runtime.ts +162 -0
- package/src/cli/provider.ts +463 -0
- package/src/cli/runtime-api.ts +325 -0
- package/src/cli/star-prompt.ts +155 -0
- package/src/cli/status-oauth.ts +78 -0
- package/src/cli/status.ts +321 -0
- package/src/cli/sync-cloud.ts +283 -0
- package/src/cli/system-command.ts +112 -0
- package/src/cli/tray-proxy.ts +52 -0
- package/src/cli/v2.ts +173 -0
- package/src/cli.ts +10 -0
- package/src/clients/config-export.ts +377 -0
- package/src/clients/effective-status.ts +385 -0
- package/src/clients/probes/agy.ts +55 -0
- package/src/clients/probes/cc-switch.ts +110 -0
- package/src/clients/probes/claude.ts +90 -0
- package/src/clients/probes/codex.ts +125 -0
- package/src/clients/probes/grok.ts +29 -0
- package/src/clients/probes/opencode.ts +109 -0
- package/src/clients/probes/paseo.ts +55 -0
- package/src/clients/probes/pi.ts +55 -0
- package/src/cloud/onedrive-auth.ts +666 -0
- package/src/cloud/onedrive-graph.ts +108 -0
- package/src/cloud/settings.ts +75 -0
- package/src/cloud/sync.ts +212 -0
- package/src/cloud/types.ts +56 -0
- package/src/cloud/vault.ts +89 -0
- package/src/codex/account-id.ts +34 -0
- package/src/codex/account-label.ts +34 -0
- package/src/codex/account-lifecycle.ts +55 -0
- package/src/codex/account-namespace-match.ts +63 -0
- package/src/codex/account-namespaces.ts +149 -0
- package/src/codex/account-pause.ts +20 -0
- package/src/codex/account-runtime-state.ts +31 -0
- package/src/codex/account-store.ts +517 -0
- package/src/codex/account-usability.ts +20 -0
- package/src/codex/app-server-processes.ts +756 -0
- package/src/codex/auth-api.ts +1540 -0
- package/src/codex/auth-collision.ts +107 -0
- package/src/codex/auth-context.ts +352 -0
- package/src/codex/autostart-health.ts +149 -0
- package/src/codex/catalog/aggregation.ts +378 -0
- package/src/codex/catalog/bundled.ts +251 -0
- package/src/codex/catalog/effort.ts +355 -0
- package/src/codex/catalog/metadata.ts +180 -0
- package/src/codex/catalog/parsing.ts +456 -0
- package/src/codex/catalog/provider-fetch.ts +902 -0
- package/src/codex/catalog/sync.ts +620 -0
- package/src/codex/catalog.ts +12 -0
- package/src/codex/data/upstream-models.json +830 -0
- package/src/codex/exec-invocation.ts +22 -0
- package/src/codex/features.ts +969 -0
- package/src/codex/history-migration-guardian.ts +102 -0
- package/src/codex/history-provider.ts +776 -0
- package/src/codex/home.ts +206 -0
- package/src/codex/inject.ts +799 -0
- package/src/codex/injected-marker.ts +72 -0
- package/src/codex/journal.ts +163 -0
- package/src/codex/main-account-cache.ts +32 -0
- package/src/codex/main-account.ts +40 -0
- package/src/codex/model-cache.ts +227 -0
- package/src/codex/paths.ts +65 -0
- package/src/codex/plugins-doctor.ts +242 -0
- package/src/codex/pool-rotation.ts +225 -0
- package/src/codex/project-config-warnings.ts +411 -0
- package/src/codex/quota.ts +411 -0
- package/src/codex/refresh.ts +53 -0
- package/src/codex/routing.ts +1477 -0
- package/src/codex/runtime.ts +538 -0
- package/src/codex/shim.ts +1189 -0
- package/src/codex/subagent-defaults.ts +550 -0
- package/src/codex/subagent-model-fallback.ts +469 -0
- package/src/codex/sync.ts +130 -0
- package/src/codex/warmup.ts +192 -0
- package/src/codex/websocket-registry.ts +100 -0
- package/src/combos/failover.ts +140 -0
- package/src/combos/index.ts +41 -0
- package/src/combos/request.ts +62 -0
- package/src/combos/resolve.ts +232 -0
- package/src/combos/types.ts +326 -0
- package/src/config.ts +2356 -0
- package/src/generated/jawcode-model-metadata.ts +104 -0
- package/src/github/star-state.ts +203 -0
- package/src/grok/inject.ts +545 -0
- package/src/grok/status.ts +121 -0
- package/src/grok/sync.ts +103 -0
- package/src/grok/usage-hook/report.mjs +348 -0
- package/src/grok/usage-hook.ts +278 -0
- package/src/images/artifacts.ts +516 -0
- package/src/images/fulfill-video.ts +163 -0
- package/src/images/fulfill.ts +149 -0
- package/src/images/index.ts +4 -0
- package/src/images/loop.ts +829 -0
- package/src/images/plan.ts +133 -0
- package/src/images/synthetic-tool.ts +133 -0
- package/src/images/types.ts +41 -0
- package/src/images/xai-client.ts +141 -0
- package/src/images/xai-video-client.ts +163 -0
- package/src/index.ts +22 -0
- package/src/lib/abort.ts +146 -0
- package/src/lib/admin-secrets.ts +25 -0
- package/src/lib/admission.ts +83 -0
- package/src/lib/app-owned-memory-stores.ts +173 -0
- package/src/lib/app-owned-memory.ts +265 -0
- package/src/lib/bounded-body.ts +202 -0
- package/src/lib/bun-binary-validator.d.mts +3 -0
- package/src/lib/bun-binary-validator.mjs +18 -0
- package/src/lib/bun-runtime.ts +71 -0
- package/src/lib/bun-stream-caps.ts +126 -0
- package/src/lib/config-ownership.ts +360 -0
- package/src/lib/crash-guard.ts +344 -0
- package/src/lib/debug-log-buffer.ts +83 -0
- package/src/lib/debug-settings.ts +108 -0
- package/src/lib/debug.ts +31 -0
- package/src/lib/destination-policy.ts +316 -0
- package/src/lib/errors.ts +364 -0
- package/src/lib/eventstream-decoder.ts +253 -0
- package/src/lib/gcp-adc.ts +341 -0
- package/src/lib/injection-debug-log.ts +58 -0
- package/src/lib/open-url.ts +25 -0
- package/src/lib/pinned-http.ts +151 -0
- package/src/lib/privacy.ts +20 -0
- package/src/lib/process-control.ts +165 -0
- package/src/lib/provider-outbound.ts +170 -0
- package/src/lib/provider-url.ts +14 -0
- package/src/lib/proxy-env.ts +18 -0
- package/src/lib/redact.ts +105 -0
- package/src/lib/retry-after.ts +55 -0
- package/src/lib/service-secrets.ts +25 -0
- package/src/lib/shadow-call.ts +30 -0
- package/src/lib/sidecar-tracker.ts +52 -0
- package/src/lib/sse-decoder.ts +323 -0
- package/src/lib/state-store-registrations.ts +109 -0
- package/src/lib/state-store-sweeper.ts +184 -0
- package/src/lib/test-home-guard.ts +90 -0
- package/src/lib/token-estimate.ts +69 -0
- package/src/lib/translator-budget.ts +356 -0
- package/src/lib/upstream-retry.ts +239 -0
- package/src/lib/win-exec.ts +115 -0
- package/src/lib/win-paths.ts +68 -0
- package/src/lib/windows-elevation.ts +705 -0
- package/src/lib/windows-secret-acl.ts +514 -0
- package/src/lib/winsw.ts +375 -0
- package/src/oauth/anthropic-routing.ts +594 -0
- package/src/oauth/anthropic.ts +177 -0
- package/src/oauth/callback-server.ts +294 -0
- package/src/oauth/chatgpt.ts +150 -0
- package/src/oauth/cursor.ts +211 -0
- package/src/oauth/github-copilot.ts +428 -0
- package/src/oauth/google-antigravity.ts +230 -0
- package/src/oauth/health.ts +399 -0
- package/src/oauth/index.ts +1174 -0
- package/src/oauth/key-providers.ts +108 -0
- package/src/oauth/kimi.ts +213 -0
- package/src/oauth/kiro-credentials.ts +726 -0
- package/src/oauth/kiro.ts +577 -0
- package/src/oauth/local-token-detect.ts +121 -0
- package/src/oauth/log.ts +48 -0
- package/src/oauth/login-cli.ts +163 -0
- package/src/oauth/pkce.ts +15 -0
- package/src/oauth/store.ts +630 -0
- package/src/oauth/token-guardian.ts +303 -0
- package/src/oauth/types.ts +62 -0
- package/src/oauth/xai.ts +241 -0
- package/src/pi/extensions.ts +72 -0
- package/src/pi/home.ts +42 -0
- package/src/pi/index.ts +40 -0
- package/src/pi/models.ts +278 -0
- package/src/pi/packages.ts +219 -0
- package/src/pi/settings.ts +365 -0
- package/src/pi/status.ts +68 -0
- package/src/pi/sync.ts +75 -0
- package/src/providers/alibaba-region-backup.ts +75 -0
- package/src/providers/alibaba-region-migration.ts +156 -0
- package/src/providers/alibaba-region-startup.ts +36 -0
- package/src/providers/antigravity-models.ts +205 -0
- package/src/providers/api-keys.ts +140 -0
- package/src/providers/base-url-choices.ts +64 -0
- package/src/providers/context-cap.ts +65 -0
- package/src/providers/derive.ts +339 -0
- package/src/providers/free-directory.ts +184 -0
- package/src/providers/github-copilot-transport.ts +56 -0
- package/src/providers/key-failover.ts +203 -0
- package/src/providers/kiro-models.ts +67 -0
- package/src/providers/label.ts +19 -0
- package/src/providers/model-discovery.ts +356 -0
- package/src/providers/openai-sidecar.ts +175 -0
- package/src/providers/openai-tier-startup.ts +27 -0
- package/src/providers/openai-tiers.ts +301 -0
- package/src/providers/openai-virtual-models.ts +82 -0
- package/src/providers/openrouter-routing.ts +102 -0
- package/src/providers/provider-id-rewrite.ts +150 -0
- package/src/providers/quota.ts +1260 -0
- package/src/providers/registry.ts +1600 -0
- package/src/providers/slug-codec.ts +67 -0
- package/src/providers/xai-transport.ts +141 -0
- package/src/reasoning-effort.ts +135 -0
- package/src/responses/compaction.ts +117 -0
- package/src/responses/parser.ts +656 -0
- package/src/responses/reasoning-envelope.ts +52 -0
- package/src/responses/schema.ts +159 -0
- package/src/responses/spill-store.ts +394 -0
- package/src/responses/state.ts +895 -0
- package/src/responses/tool-groups.ts +19 -0
- package/src/router.ts +425 -0
- package/src/server/adapter-resolve.ts +80 -0
- package/src/server/auth-cors.ts +530 -0
- package/src/server/chat-completions.ts +368 -0
- package/src/server/claude-messages.ts +914 -0
- package/src/server/effort-policy.ts +172 -0
- package/src/server/gui-static.ts +123 -0
- package/src/server/image-retry.ts +42 -0
- package/src/server/images.ts +476 -0
- package/src/server/index.ts +1126 -0
- package/src/server/lifecycle.ts +227 -0
- package/src/server/live.ts +598 -0
- package/src/server/management/agent-settings-routes.ts +1169 -0
- package/src/server/management/api-access.ts +141 -0
- package/src/server/management/api-key-usage.ts +167 -0
- package/src/server/management/body.ts +35 -0
- package/src/server/management/clients-routes.ts +63 -0
- package/src/server/management/cloud-sync-routes.ts +266 -0
- package/src/server/management/combo-routes.ts +220 -0
- package/src/server/management/config-routes.ts +422 -0
- package/src/server/management/context.ts +31 -0
- package/src/server/management/logs-usage-routes.ts +707 -0
- package/src/server/management/model-routes.ts +525 -0
- package/src/server/management/oauth-account-routes.ts +563 -0
- package/src/server/management/provider-routes.ts +556 -0
- package/src/server/management/shared.ts +277 -0
- package/src/server/management/sidebar-routes.ts +90 -0
- package/src/server/management/system-restart.ts +179 -0
- package/src/server/management/system-routes.ts +117 -0
- package/src/server/management/usage-summary-cache.ts +86 -0
- package/src/server/management-api.ts +215 -0
- package/src/server/management-auth.ts +267 -0
- package/src/server/memory-watchdog.ts +156 -0
- package/src/server/port-reclaim.ts +307 -0
- package/src/server/ports.ts +116 -0
- package/src/server/proxy-liveness.ts +201 -0
- package/src/server/relay-eager.ts +313 -0
- package/src/server/relay.ts +1049 -0
- package/src/server/request-decompress.ts +132 -0
- package/src/server/request-log-conversation.ts +168 -0
- package/src/server/request-log.ts +1046 -0
- package/src/server/responses/collaboration.ts +354 -0
- package/src/server/responses/compact.ts +384 -0
- package/src/server/responses/core.ts +2758 -0
- package/src/server/responses/encrypted-payload.ts +308 -0
- package/src/server/responses/fetch-helpers.ts +157 -0
- package/src/server/responses/passthrough-error.ts +78 -0
- package/src/server/responses/terminal-guard.ts +230 -0
- package/src/server/responses/upstream-error.ts +48 -0
- package/src/server/responses-image-gen-repair.ts +132 -0
- package/src/server/responses-item-id-repair.ts +224 -0
- package/src/server/responses.ts +9 -0
- package/src/server/search.ts +136 -0
- package/src/server/sse-payload-rewrite.ts +175 -0
- package/src/server/startup-action-control.ts +308 -0
- package/src/server/startup-health-cache.ts +113 -0
- package/src/server/system-env.ts +413 -0
- package/src/server/windows-tcp-drop.ts +184 -0
- package/src/server/windows-tray-control.ts +41 -0
- package/src/server/ws-bridge.ts +471 -0
- package/src/service.ts +2554 -0
- package/src/stall-timeout.ts +20 -0
- package/src/storage/cleanup-job.ts +57 -0
- package/src/storage/cleanup.ts +3085 -0
- package/src/storage/policy-job.ts +457 -0
- package/src/storage/policy-scheduler.ts +40 -0
- package/src/storage/policy-worker.ts +59 -0
- package/src/storage/policy.ts +527 -0
- package/src/storage/restore-job.ts +299 -0
- package/src/storage/restore-worker.ts +58 -0
- package/src/storage/scanner.ts +238 -0
- package/src/storage/storage-mutation-coordinator.ts +139 -0
- package/src/storage/worker-lifecycle.ts +215 -0
- package/src/tray/assets/opencodex-tray-offline.ico +0 -0
- package/src/tray/assets/opencodex-tray-online.ico +0 -0
- package/src/tray/assets/opencodex-tray-warning.ico +0 -0
- package/src/tray/assets/opencodex-tray.png +0 -0
- package/src/tray/windows-tray.ps1 +290 -0
- package/src/tray/windows.ts +730 -0
- package/src/types.ts +1237 -0
- package/src/update/badge.ts +72 -0
- package/src/update/index.ts +407 -0
- package/src/update/job.ts +1520 -0
- package/src/update/notify.ts +257 -0
- package/src/update/npm-invocation.d.mts +23 -0
- package/src/update/npm-invocation.mjs +94 -0
- package/src/update/tray-update-plan.d.mts +18 -0
- package/src/update/tray-update-plan.mjs +38 -0
- package/src/usage/cost.ts +0 -0
- package/src/usage/debug.ts +97 -0
- package/src/usage/expected-prices.ts +164 -0
- package/src/usage/log.ts +658 -0
- package/src/usage/summary.ts +585 -0
- package/src/usage/totals.ts +14 -0
- package/src/vision/anthropic-describe.ts +185 -0
- package/src/vision/describe.ts +125 -0
- package/src/vision/index.ts +467 -0
- package/src/web-search/anthropic-executor.ts +189 -0
- package/src/web-search/executor.ts +105 -0
- package/src/web-search/format-result.ts +89 -0
- package/src/web-search/index.ts +196 -0
- package/src/web-search/loop.ts +664 -0
- package/src/web-search/parse.ts +220 -0
- package/src/web-search/progress-stream.ts +342 -0
- package/src/web-search/synthetic-tool.ts +47 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { isValidCodexAccountId } from "./account-id";
|
|
2
|
+
|
|
3
|
+
/** Config-only sentinel for the Codex Desktop account; outside the pool-account id grammar. */
|
|
4
|
+
export const MAIN_CODEX_ACCOUNT_NAMESPACE_TARGET = "@main";
|
|
5
|
+
|
|
6
|
+
export const CODEX_ACCOUNT_NAMESPACE_COMBO_ALIAS_COLLISION_ERROR =
|
|
7
|
+
"combo alias must not use a configured Codex account namespace";
|
|
8
|
+
|
|
9
|
+
const CODEX_ACCOUNT_ID_NAMESPACE_COLLISION_ERROR =
|
|
10
|
+
"account id must not collide with a configured Codex account namespace";
|
|
11
|
+
|
|
12
|
+
/** Provider ids are compared case-insensitively at namespace admission boundaries. */
|
|
13
|
+
export function codexProviderNamespaceKey(value: string): string {
|
|
14
|
+
return value.toLowerCase();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function hasCodexAccountNamespace(
|
|
18
|
+
namespaces: unknown,
|
|
19
|
+
namespace: string,
|
|
20
|
+
): boolean {
|
|
21
|
+
return !!namespaces
|
|
22
|
+
&& typeof namespaces === "object"
|
|
23
|
+
&& !Array.isArray(namespaces)
|
|
24
|
+
&& Object.hasOwn(namespaces, namespace);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function codexAccountNamespaceProviderCollisionError(
|
|
28
|
+
namespaces: unknown,
|
|
29
|
+
providerName: string,
|
|
30
|
+
): string | undefined {
|
|
31
|
+
const normalizedProvider = codexProviderNamespaceKey(providerName);
|
|
32
|
+
const collides = !!namespaces
|
|
33
|
+
&& typeof namespaces === "object"
|
|
34
|
+
&& !Array.isArray(namespaces)
|
|
35
|
+
&& Object.keys(namespaces)
|
|
36
|
+
.some(namespace => codexProviderNamespaceKey(namespace) === normalizedProvider);
|
|
37
|
+
return collides
|
|
38
|
+
? "provider name must not collide with a configured Codex account namespace"
|
|
39
|
+
: undefined;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function codexAccountIdNamespaceCollisionError(
|
|
43
|
+
namespaces: unknown,
|
|
44
|
+
accountId: string,
|
|
45
|
+
): string | undefined {
|
|
46
|
+
return hasCodexAccountNamespace(namespaces, accountId)
|
|
47
|
+
? CODEX_ACCOUNT_ID_NAMESPACE_COLLISION_ERROR
|
|
48
|
+
: undefined;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function codexAccountNamespaceForModel(
|
|
52
|
+
namespaces: unknown,
|
|
53
|
+
modelId: string,
|
|
54
|
+
): string | undefined {
|
|
55
|
+
const slash = modelId.indexOf("/");
|
|
56
|
+
if (slash <= 0) return undefined;
|
|
57
|
+
const namespace = modelId.slice(0, slash);
|
|
58
|
+
return hasCodexAccountNamespace(namespaces, namespace) ? namespace : undefined;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function isValidCodexAccountNamespaceTarget(accountId: unknown): accountId is string {
|
|
62
|
+
return accountId === MAIN_CODEX_ACCOUNT_NAMESPACE_TARGET || isValidCodexAccountId(accountId);
|
|
63
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import type { CodexAccount, OcxConfig } from "../types";
|
|
2
|
+
import { COMBO_NAMESPACE } from "../combos/types";
|
|
3
|
+
import { OPENAI_CODEX_PROVIDER_ID } from "../providers/openai-tiers";
|
|
4
|
+
import {
|
|
5
|
+
CODEX_ACCOUNT_LOG_LABEL_RE,
|
|
6
|
+
createCodexAccountLogLabel,
|
|
7
|
+
fallbackCodexAccountLogLabel,
|
|
8
|
+
} from "./account-label";
|
|
9
|
+
import { isValidCodexAccountId, MAIN_CODEX_ACCOUNT_ID } from "./account-id";
|
|
10
|
+
import {
|
|
11
|
+
codexAccountIdNamespaceCollisionError,
|
|
12
|
+
codexProviderNamespaceKey,
|
|
13
|
+
MAIN_CODEX_ACCOUNT_NAMESPACE_TARGET,
|
|
14
|
+
} from "./account-namespace-match";
|
|
15
|
+
|
|
16
|
+
export { isValidCodexAccountNamespaceTarget } from "./account-namespace-match";
|
|
17
|
+
|
|
18
|
+
const RESERVED_NAMESPACE_KEYS = new Set([
|
|
19
|
+
"__proto__",
|
|
20
|
+
"prototype",
|
|
21
|
+
"constructor",
|
|
22
|
+
COMBO_NAMESPACE,
|
|
23
|
+
OPENAI_CODEX_PROVIDER_ID,
|
|
24
|
+
].map(codexProviderNamespaceKey));
|
|
25
|
+
const PUBLIC_ACCOUNT_SELECTOR_MAX_ATTEMPTS = 16;
|
|
26
|
+
|
|
27
|
+
function comboAliasNamespaces(config: Pick<OcxConfig, "combos">): string[] {
|
|
28
|
+
return Object.values(config.combos ?? {}).flatMap((combo) => {
|
|
29
|
+
const alias = typeof combo?.alias === "string" ? combo.alias.trim() : "";
|
|
30
|
+
const slash = alias.indexOf("/");
|
|
31
|
+
return slash > 0 ? [alias.slice(0, slash)] : [];
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function privateAccountSelectorCandidates(accountIds: Iterable<string>): Set<string> {
|
|
36
|
+
const candidates = new Set<string>();
|
|
37
|
+
for (const accountId of accountIds) {
|
|
38
|
+
candidates.add(accountId);
|
|
39
|
+
candidates.add(fallbackCodexAccountLogLabel(accountId));
|
|
40
|
+
}
|
|
41
|
+
return candidates;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function defaultPublicAccountSelector(
|
|
45
|
+
account: Pick<CodexAccount, "id" | "logLabel">,
|
|
46
|
+
allPrivateCandidates: ReadonlySet<string>,
|
|
47
|
+
): string {
|
|
48
|
+
const privateCandidates = new Set(allPrivateCandidates);
|
|
49
|
+
privateCandidates.add(account.id);
|
|
50
|
+
privateCandidates.add(fallbackCodexAccountLogLabel(account.id));
|
|
51
|
+
if (CODEX_ACCOUNT_LOG_LABEL_RE.test(account.logLabel ?? "")
|
|
52
|
+
&& !privateCandidates.has(account.logLabel!)) return account.logLabel!;
|
|
53
|
+
|
|
54
|
+
// Legacy or hand-edited rows may predate persisted random log labels. Allocate a fresh public
|
|
55
|
+
// selector rather than exposing the stable, id-derived fallback used only to redact old logs.
|
|
56
|
+
for (let attempt = 0; attempt < PUBLIC_ACCOUNT_SELECTOR_MAX_ATTEMPTS; attempt += 1) {
|
|
57
|
+
const selector = createCodexAccountLogLabel(privateCandidates);
|
|
58
|
+
if (!privateCandidates.has(selector)) return selector;
|
|
59
|
+
}
|
|
60
|
+
throw new Error("Unable to allocate a unique Codex account selector");
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function claimNamespace(requested: string, used: Set<string>): string {
|
|
64
|
+
let namespace = requested;
|
|
65
|
+
let suffix = 2;
|
|
66
|
+
while (used.has(namespace)) namespace = `${requested}-${suffix++}`;
|
|
67
|
+
used.add(namespace);
|
|
68
|
+
return namespace;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function occupiedNamespaces(config: Pick<OcxConfig, "combos" | "providers">): Set<string> {
|
|
72
|
+
return new Set([
|
|
73
|
+
...Object.keys(config.providers).map(codexProviderNamespaceKey),
|
|
74
|
+
...comboAliasNamespaces(config),
|
|
75
|
+
...RESERVED_NAMESPACE_KEYS,
|
|
76
|
+
]);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** Build an initial account-selector map without deriving public selectors from aliases or ids. */
|
|
80
|
+
export function defaultCodexAccountNamespaces(
|
|
81
|
+
config: Pick<OcxConfig, "codexAccounts" | "combos" | "providers">,
|
|
82
|
+
): Record<string, string> {
|
|
83
|
+
const namespaces: Record<string, string> = {};
|
|
84
|
+
const used = occupiedNamespaces(config);
|
|
85
|
+
const accounts = config.codexAccounts ?? [];
|
|
86
|
+
const privateCandidates = privateAccountSelectorCandidates(
|
|
87
|
+
accounts
|
|
88
|
+
.filter(account => account.id !== MAIN_CODEX_ACCOUNT_ID)
|
|
89
|
+
.map(account => account.id),
|
|
90
|
+
);
|
|
91
|
+
for (const candidate of privateCandidates) used.add(candidate);
|
|
92
|
+
|
|
93
|
+
namespaces[claimNamespace("main", used)] = MAIN_CODEX_ACCOUNT_NAMESPACE_TARGET;
|
|
94
|
+
for (const account of accounts) {
|
|
95
|
+
if (account.isMain || !isValidCodexAccountId(account.id)) continue;
|
|
96
|
+
const namespace = claimNamespace(defaultPublicAccountSelector(account, privateCandidates), used);
|
|
97
|
+
namespaces[namespace] = account.id;
|
|
98
|
+
}
|
|
99
|
+
return namespaces;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Add one account to a generated map without renaming or replacing explicit existing entries.
|
|
104
|
+
* The account-creation layer must reject a new id that already equals an existing selector key.
|
|
105
|
+
* A true result means the map was mutated in place; callers must persist the updated config.
|
|
106
|
+
*/
|
|
107
|
+
export function appendDefaultCodexAccountNamespace(
|
|
108
|
+
config: Pick<OcxConfig, "codexAccountNamespaces" | "codexAccounts" | "combos" | "providers">,
|
|
109
|
+
account: Pick<CodexAccount, "id" | "isMain" | "logLabel">,
|
|
110
|
+
): boolean {
|
|
111
|
+
const namespaces = config.codexAccountNamespaces;
|
|
112
|
+
if (account.isMain
|
|
113
|
+
|| !isValidCodexAccountId(account.id)
|
|
114
|
+
|| !namespaces
|
|
115
|
+
|| Object.keys(namespaces).length === 0
|
|
116
|
+
|| codexAccountIdNamespaceCollisionError(namespaces, account.id)
|
|
117
|
+
|| Object.values(namespaces).includes(account.id)) return false;
|
|
118
|
+
|
|
119
|
+
const used = occupiedNamespaces(config);
|
|
120
|
+
for (const namespace of Object.keys(namespaces)) used.add(namespace);
|
|
121
|
+
const privateCandidates = privateAccountSelectorCandidates([
|
|
122
|
+
...(config.codexAccounts ?? [])
|
|
123
|
+
.filter(existing => existing.id !== MAIN_CODEX_ACCOUNT_ID)
|
|
124
|
+
.map(existing => existing.id),
|
|
125
|
+
...Object.values(namespaces),
|
|
126
|
+
account.id,
|
|
127
|
+
]);
|
|
128
|
+
for (const candidate of privateCandidates) used.add(candidate);
|
|
129
|
+
const namespace = claimNamespace(defaultPublicAccountSelector(account, privateCandidates), used);
|
|
130
|
+
namespaces[namespace] = account.id;
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export function isMainCodexAccountTarget(accountId: string): boolean {
|
|
135
|
+
return accountId === MAIN_CODEX_ACCOUNT_NAMESPACE_TARGET || accountId === MAIN_CODEX_ACCOUNT_ID;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function normalizeCodexAccountNamespaceTarget(accountId: string): string {
|
|
139
|
+
return isMainCodexAccountTarget(accountId)
|
|
140
|
+
? MAIN_CODEX_ACCOUNT_ID
|
|
141
|
+
: accountId;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export function codexAccountNamespaceEntries(
|
|
145
|
+
config: Pick<OcxConfig, "codexAccountNamespaces">,
|
|
146
|
+
): Array<[string, string]> {
|
|
147
|
+
return Object.entries(config.codexAccountNamespaces ?? {})
|
|
148
|
+
.map(([namespace, accountId]) => [namespace, normalizeCodexAccountNamespaceTarget(accountId)]);
|
|
149
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { OcxConfig } from "../types";
|
|
2
|
+
|
|
3
|
+
/** Whether an account is administratively excluded from future pool selection. */
|
|
4
|
+
export function isCodexAccountPaused(config: OcxConfig, accountId: string): boolean {
|
|
5
|
+
return config.pausedCodexAccountIds?.includes(accountId) ?? false;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/** Persist the account's pool eligibility without changing credentials or runtime health. */
|
|
9
|
+
export function setCodexAccountPaused(config: OcxConfig, accountId: string, paused: boolean): void {
|
|
10
|
+
const pausedIds = new Set(config.pausedCodexAccountIds ?? []);
|
|
11
|
+
if (paused) pausedIds.add(accountId);
|
|
12
|
+
else pausedIds.delete(accountId);
|
|
13
|
+
|
|
14
|
+
if (pausedIds.size > 0) config.pausedCodexAccountIds = [...pausedIds];
|
|
15
|
+
else delete config.pausedCodexAccountIds;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function forgetCodexAccountPause(config: OcxConfig, accountId: string): void {
|
|
19
|
+
setCodexAccountPaused(config, accountId, false);
|
|
20
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { captureConfigGeneration, type GenerationContext } from "../lib/state-store-sweeper";
|
|
2
|
+
|
|
3
|
+
const reauthAccounts = new Set<string>();
|
|
4
|
+
let lastReconciledGeneration = 0;
|
|
5
|
+
let liveAccountIds = new Set<string>();
|
|
6
|
+
|
|
7
|
+
export function markAccountNeedsReauth(id: string, writerGeneration = captureConfigGeneration()): void {
|
|
8
|
+
if (writerGeneration < lastReconciledGeneration && !liveAccountIds.has(id)) return;
|
|
9
|
+
reauthAccounts.add(id);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function reconcileCodexReauthState(context: GenerationContext): number {
|
|
13
|
+
if (context.generation <= lastReconciledGeneration) return 0;
|
|
14
|
+
let removed = 0;
|
|
15
|
+
for (const id of reauthAccounts) {
|
|
16
|
+
if (context.codexAccountIds.has(id)) continue;
|
|
17
|
+
reauthAccounts.delete(id);
|
|
18
|
+
removed += 1;
|
|
19
|
+
}
|
|
20
|
+
liveAccountIds = new Set(context.codexAccountIds);
|
|
21
|
+
lastReconciledGeneration = context.generation;
|
|
22
|
+
return removed;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function isAccountNeedsReauth(id: string): boolean {
|
|
26
|
+
return reauthAccounts.has(id);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function clearAccountNeedsReauth(id: string): void {
|
|
30
|
+
reauthAccounts.delete(id);
|
|
31
|
+
}
|