@yansigit/opencodex 2.31.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 +109 -0
- package/LICENSE +21 -0
- package/README.md +303 -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 +587 -0
- package/bin/package-main.mjs +9 -0
- package/gui/dist/assets/index-BNJ7r4Gd.js +102 -0
- package/gui/dist/assets/index-CGoDO3uO.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/claude-color.svg +1 -0
- package/gui/dist/provider-icons/cline-color.svg +16 -0
- package/gui/dist/provider-icons/cloudflare-ai-gateway-color.svg +1 -0
- package/gui/dist/provider-icons/commandcode-color.svg +1 -0
- package/gui/dist/provider-icons/copilot-color.svg +1 -0
- package/gui/dist/provider-icons/cursor-color.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/github-copilot-color.svg +1 -0
- package/gui/dist/provider-icons/gitlab-duo-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/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 +2 -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 +108 -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-output-schema.ts +137 -0
- package/src/adapters/anthropic.ts +1327 -0
- package/src/adapters/azure.ts +36 -0
- package/src/adapters/base.ts +121 -0
- package/src/adapters/client-fingerprint.ts +65 -0
- package/src/adapters/cline-pass-deepseek-v4-tool-replay.ts +69 -0
- package/src/adapters/command-code.ts +601 -0
- package/src/adapters/cursor/arg-codec.ts +38 -0
- package/src/adapters/cursor/arg-normalize.ts +104 -0
- package/src/adapters/cursor/checkpoint-store.ts +303 -0
- package/src/adapters/cursor/cursor-errors.ts +288 -0
- package/src/adapters/cursor/discovery.ts +333 -0
- package/src/adapters/cursor/effort-map.ts +151 -0
- package/src/adapters/cursor/exec-policy.ts +88 -0
- package/src/adapters/cursor/framing.ts +250 -0
- package/src/adapters/cursor/gen/agent_pb.ts +15274 -0
- package/src/adapters/cursor/h2-pool.ts +123 -0
- package/src/adapters/cursor/http1-bidi.ts +361 -0
- package/src/adapters/cursor/images.ts +704 -0
- package/src/adapters/cursor/kv-store.ts +52 -0
- package/src/adapters/cursor/live-models.ts +269 -0
- package/src/adapters/cursor/live-smoke-gate.ts +41 -0
- package/src/adapters/cursor/live-transport.ts +1653 -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 +76 -0
- package/src/adapters/cursor/native-exec-desktop.ts +184 -0
- package/src/adapters/cursor/native-exec-fs.ts +332 -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 +547 -0
- package/src/adapters/cursor/native-exec-tools.ts +118 -0
- package/src/adapters/cursor/native-exec.ts +663 -0
- package/src/adapters/cursor/protobuf-events.ts +1381 -0
- package/src/adapters/cursor/protobuf-request.ts +1032 -0
- package/src/adapters/cursor/request-builder.ts +461 -0
- package/src/adapters/cursor/thread-continuity.ts +67 -0
- package/src/adapters/cursor/tool-definitions.ts +735 -0
- package/src/adapters/cursor/tool-result-normalize.ts +92 -0
- package/src/adapters/cursor/transport-retry.ts +132 -0
- package/src/adapters/cursor/transport.ts +79 -0
- package/src/adapters/cursor/types.ts +79 -0
- package/src/adapters/cursor.ts +322 -0
- package/src/adapters/google-antigravity-hosts.ts +48 -0
- package/src/adapters/google-antigravity-replay.ts +827 -0
- package/src/adapters/google-antigravity-tools.ts +105 -0
- package/src/adapters/google-antigravity-wire.ts +141 -0
- package/src/adapters/google-errors.ts +92 -0
- package/src/adapters/google-http.ts +460 -0
- package/src/adapters/google-tool-schema.ts +238 -0
- package/src/adapters/google-truncation.ts +24 -0
- package/src/adapters/google-wire-compiler.ts +232 -0
- package/src/adapters/google.ts +1377 -0
- package/src/adapters/identity.ts +77 -0
- package/src/adapters/image.ts +23 -0
- package/src/adapters/kiro-constants.ts +16 -0
- package/src/adapters/kiro-errors.ts +208 -0
- package/src/adapters/kiro-events.ts +197 -0
- package/src/adapters/kiro-images.ts +129 -0
- package/src/adapters/kiro-retry.ts +312 -0
- package/src/adapters/kiro-thinking.ts +112 -0
- package/src/adapters/kiro-tool-fallback.ts +36 -0
- package/src/adapters/kiro-tools.ts +224 -0
- package/src/adapters/kiro-truncation.ts +33 -0
- package/src/adapters/kiro-wire.ts +129 -0
- package/src/adapters/kiro.ts +1936 -0
- package/src/adapters/mimo-free.ts +280 -0
- package/src/adapters/openai-chat-url.ts +11 -0
- package/src/adapters/openai-chat.ts +1980 -0
- package/src/adapters/openai-responses-url.ts +16 -0
- package/src/adapters/openai-responses.ts +1911 -0
- package/src/adapters/registry.ts +175 -0
- package/src/adapters/responses-tool-schema.ts +67 -0
- package/src/adapters/run-turn-queue.ts +114 -0
- package/src/adapters/tool-call-id.ts +119 -0
- package/src/adapters/tool-catalog-nudge.ts +154 -0
- package/src/adapters/upstream-http-error.ts +48 -0
- package/src/adapters/xai-web-search.ts +185 -0
- package/src/bridge.ts +1986 -0
- package/src/chat/inbound.ts +319 -0
- package/src/chat/outbound.ts +821 -0
- package/src/claude/agents-inject.ts +266 -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 +205 -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 +615 -0
- package/src/claude/desktop-health.ts +26 -0
- package/src/claude/desktop-profile.ts +263 -0
- package/src/claude/gateway-cache.ts +107 -0
- package/src/claude/inbound-debug.ts +163 -0
- package/src/claude/inbound.ts +578 -0
- package/src/claude/model-info.ts +174 -0
- package/src/claude/outbound.ts +926 -0
- package/src/cli/access.ts +108 -0
- package/src/cli/account-api.ts +302 -0
- package/src/cli/account-auth.ts +250 -0
- package/src/cli/account-catalog-refresh.ts +14 -0
- package/src/cli/account-extended.ts +737 -0
- package/src/cli/account-main.ts +317 -0
- package/src/cli/account.ts +299 -0
- package/src/cli/agent-driven.ts +70 -0
- package/src/cli/agent.ts +290 -0
- package/src/cli/catalog-prewarm.ts +27 -0
- package/src/cli/claude-agent-startup-sync.ts +73 -0
- package/src/cli/claude-desktop.ts +213 -0
- package/src/cli/claude.ts +355 -0
- package/src/cli/codex-log-guard-doctor.ts +103 -0
- package/src/cli/codex-shim-autorestore.ts +47 -0
- package/src/cli/codex-shim-readiness.ts +76 -0
- package/src/cli/combo.ts +127 -0
- package/src/cli/config-command.ts +209 -0
- package/src/cli/debug.ts +228 -0
- package/src/cli/dispatch.ts +585 -0
- package/src/cli/doctor.ts +1202 -0
- package/src/cli/ensure-desired-integrations.ts +152 -0
- package/src/cli/export-command.ts +213 -0
- package/src/cli/help.ts +101 -0
- package/src/cli/index.ts +973 -0
- package/src/cli/init.ts +211 -0
- package/src/cli/integrations.ts +260 -0
- package/src/cli/interactive-confirm.ts +133 -0
- package/src/cli/lab.ts +607 -0
- package/src/cli/launcher-context.ts +77 -0
- package/src/cli/minimax.ts +497 -0
- package/src/cli/models-runtime.ts +245 -0
- package/src/cli/models.ts +422 -0
- package/src/cli/observe.ts +206 -0
- package/src/cli/opencode.ts +588 -0
- package/src/cli/provider-replit.ts +232 -0
- package/src/cli/provider-runtime.ts +179 -0
- package/src/cli/provider.ts +492 -0
- package/src/cli/ready.ts +301 -0
- package/src/cli/registry.ts +422 -0
- package/src/cli/replit-gateway-key-input.ts +138 -0
- package/src/cli/root.ts +86 -0
- package/src/cli/route-policy.ts +92 -0
- package/src/cli/runtime-api.ts +328 -0
- package/src/cli/star-prompt.ts +211 -0
- package/src/cli/status-oauth.ts +78 -0
- package/src/cli/status.ts +328 -0
- package/src/cli/system-command.ts +112 -0
- package/src/cli/system-restart-client.ts +146 -0
- package/src/cli/tray-proxy.ts +199 -0
- package/src/cli/v2.ts +268 -0
- package/src/cli.ts +10 -0
- package/src/clients/config-export.ts +1704 -0
- package/src/codex/account-id.ts +34 -0
- package/src/codex/account-label.ts +47 -0
- package/src/codex/account-lifecycle.ts +172 -0
- package/src/codex/account-namespace-match.ts +63 -0
- package/src/codex/account-namespaces.ts +195 -0
- package/src/codex/account-pause.ts +20 -0
- package/src/codex/account-priority.ts +83 -0
- package/src/codex/account-runtime-state.ts +31 -0
- package/src/codex/account-store.ts +544 -0
- package/src/codex/account-usability.ts +43 -0
- package/src/codex/admission.ts +256 -0
- package/src/codex/affinity-debug.ts +162 -0
- package/src/codex/agent-roles-sync.ts +225 -0
- package/src/codex/agent-roles.ts +238 -0
- package/src/codex/app-server-processes.ts +1143 -0
- package/src/codex/app-server-restart-service.ts +232 -0
- package/src/codex/auth-api.ts +2147 -0
- package/src/codex/auth-collision.ts +109 -0
- package/src/codex/auth-context.ts +665 -0
- package/src/codex/autostart-health.ts +156 -0
- package/src/codex/catalog/account-models.ts +67 -0
- package/src/codex/catalog/aggregation.ts +436 -0
- package/src/codex/catalog/bundled.ts +549 -0
- package/src/codex/catalog/effort.ts +446 -0
- package/src/codex/catalog/filesystem-evidence.ts +302 -0
- package/src/codex/catalog/kinds.ts +2 -0
- package/src/codex/catalog/metadata.ts +664 -0
- package/src/codex/catalog/native-models.ts +72 -0
- package/src/codex/catalog/parsing.ts +650 -0
- package/src/codex/catalog/provider-fetch.ts +2064 -0
- package/src/codex/catalog/sync.ts +1883 -0
- package/src/codex/catalog-admission.ts +199 -0
- package/src/codex/catalog-refresh-status.ts +105 -0
- package/src/codex/catalog-write-serialization.ts +242 -0
- package/src/codex/catalog.ts +14 -0
- package/src/codex/codex-write-lock.ts +384 -0
- package/src/codex/convergence-types.ts +614 -0
- package/src/codex/convergence.ts +651 -0
- package/src/codex/coordinator-doctor.ts +332 -0
- package/src/codex/custom-model-catalog-migration.ts +176 -0
- package/src/codex/data/upstream-models.json +830 -0
- package/src/codex/desired-state.ts +230 -0
- package/src/codex/exec-invocation.ts +22 -0
- package/src/codex/features.ts +1566 -0
- package/src/codex/generation.ts +202 -0
- package/src/codex/history-job.ts +407 -0
- package/src/codex/history-lock.ts +242 -0
- package/src/codex/history-migration-guardian.ts +108 -0
- package/src/codex/history-provider.ts +979 -0
- package/src/codex/history-transition.ts +105 -0
- package/src/codex/history-worker.ts +220 -0
- package/src/codex/home.ts +206 -0
- package/src/codex/inject-coordination.ts +290 -0
- package/src/codex/inject.ts +1733 -0
- package/src/codex/injected-marker.ts +106 -0
- 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 +225 -0
- package/src/codex/log-guard/inspect.ts +506 -0
- package/src/codex/log-guard/lock.ts +150 -0
- package/src/codex/log-guard/maintenance.ts +403 -0
- package/src/codex/log-guard/path-safety.ts +88 -0
- package/src/codex/log-guard/policy.ts +44 -0
- package/src/codex/log-guard/processes.ts +205 -0
- package/src/codex/log-guard/protection.ts +489 -0
- package/src/codex/log-guard/sqlite-errors.ts +9 -0
- package/src/codex/main-account-cache.ts +56 -0
- package/src/codex/main-account.ts +68 -0
- package/src/codex/management-convergence.ts +167 -0
- package/src/codex/model-cache.ts +273 -0
- package/src/codex/model-entitlements.ts +353 -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 +178 -0
- package/src/codex/native-main-lock-file.ts +162 -0
- package/src/codex/native-main-owner.ts +329 -0
- package/src/codex/native-profile-api.ts +247 -0
- package/src/codex/native-profile-manager.ts +1531 -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 +492 -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 +682 -0
- package/src/codex/paths.ts +144 -0
- package/src/codex/plan-from-token.ts +140 -0
- package/src/codex/plan.ts +40 -0
- package/src/codex/plugins-doctor.ts +242 -0
- package/src/codex/pool-rotation.ts +295 -0
- package/src/codex/project-config-warnings.ts +425 -0
- package/src/codex/prompt-journal.ts +352 -0
- package/src/codex/prompt-layers.ts +967 -0
- package/src/codex/prompt-lock.ts +143 -0
- package/src/codex/quota-rejection.ts +298 -0
- package/src/codex/quota.ts +573 -0
- package/src/codex/refresh.ts +62 -0
- package/src/codex/reset-credit-recovery.ts +1044 -0
- package/src/codex/routing.ts +1888 -0
- package/src/codex/runtime.ts +659 -0
- package/src/codex/shim.ts +2170 -0
- package/src/codex/subagent-defaults.ts +550 -0
- package/src/codex/subagent-model-fallback.ts +784 -0
- package/src/codex/sync.ts +319 -0
- package/src/codex/transition-state.ts +612 -0
- package/src/codex/upstream-host-health.ts +368 -0
- package/src/codex/user-identity.ts +557 -0
- package/src/codex/warmup.ts +298 -0
- package/src/codex/websocket-registry.ts +100 -0
- package/src/codex/write-coordination.ts +114 -0
- package/src/combos/failover.ts +160 -0
- package/src/combos/index.ts +45 -0
- package/src/combos/request.ts +94 -0
- package/src/combos/resolve.ts +232 -0
- package/src/combos/types.ts +398 -0
- package/src/config/provider-name.ts +24 -0
- package/src/config.ts +4041 -0
- package/src/fork/register.ts +3 -0
- package/src/generated/compatibility-version.json +3116 -0
- package/src/generated/model-metadata.ts +106 -0
- package/src/github/star-state.ts +203 -0
- package/src/grok/inject.ts +530 -0
- package/src/grok/inspect.ts +45 -0
- package/src/grok/status.ts +121 -0
- package/src/grok/sync.ts +66 -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 +955 -0
- package/src/images/plan.ts +143 -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/integrations/config-io.ts +269 -0
- package/src/integrations/journal.ts +315 -0
- package/src/integrations/merge.ts +135 -0
- package/src/integrations/mutation-flight.ts +71 -0
- package/src/integrations/native/ownership-preflight.ts +202 -0
- package/src/integrations/omp-yaml-source.ts +358 -0
- package/src/integrations/owned-refresh.ts +74 -0
- package/src/integrations/ownership.ts +111 -0
- package/src/integrations/registry.ts +159 -0
- package/src/integrations/serialize.ts +314 -0
- package/src/integrations/state.ts +361 -0
- package/src/integrations/store.ts +103 -0
- package/src/integrations/writer-lock.ts +98 -0
- package/src/integrations/writer.ts +691 -0
- package/src/lab/artifacts/sanitize.ts +586 -0
- package/src/lab/artifacts/secure-fs.ts +475 -0
- package/src/lab/artifacts/store.ts +310 -0
- package/src/lab/automation/budgets.ts +78 -0
- package/src/lab/automation/config-persistence.ts +256 -0
- package/src/lab/automation/constants.ts +39 -0
- package/src/lab/automation/cooldown.ts +103 -0
- package/src/lab/automation/dispatch.ts +211 -0
- package/src/lab/automation/index.ts +13 -0
- package/src/lab/automation/orchestrator.ts +499 -0
- package/src/lab/automation/persistence.ts +512 -0
- package/src/lab/automation/planner.ts +371 -0
- package/src/lab/automation/policy.ts +136 -0
- package/src/lab/automation/queue.ts +191 -0
- package/src/lab/automation/recovery.ts +24 -0
- package/src/lab/automation/route-context.ts +21 -0
- package/src/lab/automation/run-key.ts +44 -0
- package/src/lab/automation/runs-query.ts +34 -0
- package/src/lab/automation/types.ts +160 -0
- package/src/lab/conformance/assertion.ts +325 -0
- package/src/lab/conformance/digest.ts +22 -0
- package/src/lab/conformance/executor.ts +741 -0
- package/src/lab/conformance/fixture-provider.ts +27 -0
- package/src/lab/conformance/fixtures/live-v1-cases.json +175 -0
- package/src/lab/conformance/fixtures/protocol-v1-cases.json +461 -0
- package/src/lab/conformance/harness-budget.ts +47 -0
- package/src/lab/conformance/index.ts +5 -0
- package/src/lab/conformance/jcs.ts +64 -0
- package/src/lab/conformance/json-pointer.ts +39 -0
- package/src/lab/conformance/manifest.ts +180 -0
- package/src/lab/conformance/mcp-stub.ts +179 -0
- package/src/lab/conformance/negative-controls.ts +164 -0
- package/src/lab/conformance/observation.ts +355 -0
- package/src/lab/conformance/runner.ts +68 -0
- package/src/lab/conformance/sse-normalize.ts +59 -0
- package/src/lab/conformance/suite-manifest.ts +78 -0
- package/src/lab/conformance/types.ts +214 -0
- package/src/lab/constants.ts +126 -0
- package/src/lab/digest.ts +64 -0
- package/src/lab/events/errors.ts +9 -0
- package/src/lab/events/limits.ts +117 -0
- package/src/lab/events/types.ts +229 -0
- package/src/lab/events/validate.ts +781 -0
- package/src/lab/fabric/constants.ts +40 -0
- package/src/lab/fabric/executor.ts +492 -0
- package/src/lab/fabric/index.ts +80 -0
- package/src/lab/fabric/manifest.ts +222 -0
- package/src/lab/fabric/observe.ts +489 -0
- package/src/lab/fabric/patch.ts +79 -0
- package/src/lab/fabric/producer-child.ts +139 -0
- package/src/lab/fabric/producer-isolate.ts +276 -0
- package/src/lab/fabric/producer-protocol.ts +61 -0
- package/src/lab/fabric/scratch.ts +439 -0
- package/src/lab/fabric/subject.ts +106 -0
- package/src/lab/fabric/types.ts +134 -0
- package/src/lab/fabric/verifier.ts +98 -0
- package/src/lab/index.ts +54 -0
- package/src/lab/ledger/artifact-refs.ts +127 -0
- package/src/lab/ledger/invalidation.ts +136 -0
- package/src/lab/ledger/purge.ts +310 -0
- package/src/lab/ledger/store.ts +532 -0
- package/src/lab/live/credential-lease.ts +53 -0
- package/src/lab/live/destination.ts +155 -0
- package/src/lab/live/executor.ts +336 -0
- package/src/lab/live/inert-tools.ts +56 -0
- package/src/lab/live/manifest.ts +85 -0
- package/src/lab/live/mcp-loopback.ts +57 -0
- package/src/lab/live/runner.ts +19 -0
- package/src/lab/live/sandbox.ts +61 -0
- package/src/lab/live/suite-manifest.ts +41 -0
- package/src/lab/live/transport.ts +118 -0
- package/src/lab/live/types.ts +197 -0
- package/src/lab/observe/from-conformance.ts +301 -0
- package/src/lab/observe/from-live.ts +117 -0
- package/src/lab/paths.ts +153 -0
- package/src/lab/projection/rebuild.ts +495 -0
- package/src/lab/projection/schema.ts +135 -0
- package/src/lab/projection/verdicts.ts +474 -0
- package/src/lab/projection/verification.ts +412 -0
- package/src/lab/public/bundle.ts +217 -0
- package/src/lab/public/community-authority.ts +175 -0
- package/src/lab/public/community-files.ts +29 -0
- package/src/lab/public/community.ts +479 -0
- package/src/lab/public/file-safety.ts +155 -0
- package/src/lab/public/ids.ts +26 -0
- package/src/lab/public/index.ts +16 -0
- package/src/lab/public/mutation-lock.ts +424 -0
- package/src/lab/public/operator.ts +353 -0
- package/src/lab/public/origin-purge.ts +79 -0
- package/src/lab/public/origin.ts +203 -0
- package/src/lab/public/privacy.ts +143 -0
- package/src/lab/public/private-file.ts +261 -0
- package/src/lab/public/project.ts +124 -0
- package/src/lab/public/purge-test-fault.ts +21 -0
- package/src/lab/public/purge.ts +223 -0
- package/src/lab/public/registry.ts +44 -0
- package/src/lab/public/revocation.ts +252 -0
- package/src/lab/public/signature.ts +243 -0
- package/src/lab/public/storage.ts +105 -0
- package/src/lab/public/strict-json.ts +206 -0
- package/src/lab/public/time.ts +26 -0
- package/src/lab/public/types.ts +172 -0
- package/src/lab/public/validate.ts +391 -0
- package/src/lab/query/catalog.ts +101 -0
- package/src/lab/query/connection.ts +107 -0
- package/src/lab/query/constants.ts +4 -0
- package/src/lab/query/cursor.ts +132 -0
- package/src/lab/query/dto-map.ts +277 -0
- package/src/lab/query/errors.ts +22 -0
- package/src/lab/query/freshness.ts +53 -0
- package/src/lab/query/index.ts +45 -0
- package/src/lab/query/latest-observation.ts +59 -0
- package/src/lab/query/passive-production.ts +159 -0
- package/src/lab/query/queries.ts +444 -0
- package/src/lab/query/types.ts +266 -0
- package/src/lab/subject/behavior-fingerprint.ts +77 -0
- package/src/lab/subject/installation-salt.ts +112 -0
- package/src/lab/subject/protocol-subject.ts +80 -0
- package/src/lab/subject/route-subject.ts +74 -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 +195 -0
- package/src/lib/app-owned-memory.ts +265 -0
- package/src/lib/bounded-body.ts +346 -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 +184 -0
- package/src/lib/bun-stream-caps.ts +130 -0
- package/src/lib/codex-restart-contract.ts +120 -0
- package/src/lib/config-ownership.ts +364 -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 +380 -0
- package/src/lib/errors.ts +406 -0
- package/src/lib/eventstream-decoder.ts +253 -0
- package/src/lib/fabric-task-execution-authority.ts +7 -0
- package/src/lib/fabric-task-host.ts +29 -0
- package/src/lib/gcp-adc.ts +341 -0
- package/src/lib/injection-debug-log.ts +58 -0
- package/src/lib/lab-activation.ts +223 -0
- package/src/lib/lab-live-execution-authority.ts +13 -0
- package/src/lib/lab-live-host.ts +30 -0
- package/src/lib/lab-live-pinned-sender.ts +56 -0
- package/src/lib/lab-live-route-production.ts +130 -0
- package/src/lib/lab-passive-linker-registration.ts +26 -0
- package/src/lib/local-management-attestation.ts +51 -0
- package/src/lib/local-management-capability.ts +100 -0
- package/src/lib/local-provider-reload-contract.ts +100 -0
- package/src/lib/open-url.ts +25 -0
- package/src/lib/optional-shutdown-hooks.ts +57 -0
- package/src/lib/pinned-http.ts +270 -0
- package/src/lib/privacy.ts +20 -0
- package/src/lib/process-control.ts +168 -0
- package/src/lib/provider-outbound.ts +210 -0
- package/src/lib/provider-url.ts +14 -0
- package/src/lib/proxy-env.ts +18 -0
- package/src/lib/redact.ts +521 -0
- package/src/lib/retry-after.ts +55 -0
- package/src/lib/self-launch-argv.ts +15 -0
- package/src/lib/server-resource-ownership.ts +71 -0
- package/src/lib/service-secrets.ts +25 -0
- package/src/lib/shadow-call.ts +61 -0
- package/src/lib/sidecar-tracker.ts +52 -0
- package/src/lib/sse-decoder.ts +364 -0
- package/src/lib/state-store-registrations.ts +119 -0
- package/src/lib/state-store-sweeper.ts +184 -0
- package/src/lib/system-restart-contract.ts +73 -0
- package/src/lib/test-home-guard.ts +90 -0
- package/src/lib/token-estimate.ts +86 -0
- package/src/lib/tool-argument-integers.ts +202 -0
- package/src/lib/translator-budget.ts +400 -0
- package/src/lib/upstream-http-version.ts +57 -0
- package/src/lib/upstream-reachability.ts +95 -0
- package/src/lib/upstream-retry.ts +392 -0
- package/src/lib/win-exec.ts +115 -0
- package/src/lib/win-paths.ts +68 -0
- package/src/lib/windows-atomic-replace.ts +156 -0
- package/src/lib/windows-elevation.ts +773 -0
- package/src/lib/windows-secret-acl.ts +854 -0
- package/src/lib/windows-service-wrappers.ts +72 -0
- package/src/lib/windows-text.ts +106 -0
- package/src/lib/windows-user-principal.ts +341 -0
- package/src/lib/winsw.ts +403 -0
- package/src/oauth/account-import/google-antigravity-adapter.ts +74 -0
- package/src/oauth/account-import/index.ts +15 -0
- package/src/oauth/account-import/parser.ts +83 -0
- package/src/oauth/account-import/registry.ts +18 -0
- package/src/oauth/account-import/service.ts +75 -0
- package/src/oauth/account-import/types.ts +91 -0
- package/src/oauth/anthropic-routing.ts +594 -0
- package/src/oauth/anthropic.ts +188 -0
- package/src/oauth/antigravity-routing.ts +151 -0
- package/src/oauth/callback-server.ts +300 -0
- package/src/oauth/chatgpt.ts +161 -0
- package/src/oauth/command-code.ts +239 -0
- package/src/oauth/cursor.ts +252 -0
- package/src/oauth/github-copilot.ts +428 -0
- package/src/oauth/google-antigravity.ts +262 -0
- package/src/oauth/health.ts +407 -0
- package/src/oauth/index.ts +1504 -0
- package/src/oauth/key-providers.ts +124 -0
- package/src/oauth/kimi.ts +227 -0
- package/src/oauth/kiro-credentials.ts +726 -0
- package/src/oauth/kiro.ts +621 -0
- package/src/oauth/local-token-detect.ts +130 -0
- package/src/oauth/log.ts +50 -0
- package/src/oauth/login-cli.ts +223 -0
- package/src/oauth/nous.ts +798 -0
- package/src/oauth/pkce.ts +15 -0
- package/src/oauth/store.ts +728 -0
- package/src/oauth/token-guardian.ts +309 -0
- package/src/oauth/types.ts +62 -0
- package/src/oauth/xai.ts +241 -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 +695 -0
- package/src/providers/antigravity-quota.ts +216 -0
- package/src/providers/api-keys.ts +140 -0
- package/src/providers/base-url-choices.ts +74 -0
- package/src/providers/codex-capacity.ts +292 -0
- package/src/providers/command-code-efforts.ts +144 -0
- package/src/providers/context-cap.ts +82 -0
- package/src/providers/cursor-pool.ts +72 -0
- package/src/providers/derive.ts +586 -0
- package/src/providers/fastwire.ts +501 -0
- package/src/providers/free-directory.ts +187 -0
- package/src/providers/github-copilot-transport.ts +56 -0
- package/src/providers/google-vertex-location.ts +14 -0
- package/src/providers/key-failover.ts +271 -0
- package/src/providers/kiro-models.ts +67 -0
- package/src/providers/label.ts +19 -0
- package/src/providers/model-discovery-limits.ts +16 -0
- package/src/providers/model-discovery.ts +449 -0
- package/src/providers/model-rename-migration.ts +255 -0
- package/src/providers/model-rename-startup.ts +28 -0
- package/src/providers/openai-sidecar.ts +243 -0
- package/src/providers/openai-tier-startup.ts +56 -0
- package/src/providers/openai-tiers.ts +423 -0
- package/src/providers/openai-virtual-models.ts +83 -0
- package/src/providers/opencode-zen-rate-limit.ts +102 -0
- package/src/providers/openrouter-routing.ts +102 -0
- package/src/providers/provider-id-rewrite.ts +185 -0
- package/src/providers/quota.ts +2345 -0
- package/src/providers/registry.ts +2918 -0
- package/src/providers/replit/constants.ts +27 -0
- package/src/providers/replit/derive.ts +85 -0
- package/src/providers/replit/headers.ts +28 -0
- package/src/providers/replit/origin.ts +55 -0
- package/src/providers/replit/pair-install-response.ts +72 -0
- package/src/providers/replit/probe.ts +199 -0
- package/src/providers/replit/setup.ts +350 -0
- package/src/providers/request-pacing.ts +310 -0
- package/src/providers/service-tier.ts +277 -0
- package/src/providers/slug-codec.ts +103 -0
- package/src/providers/static-model-discovery.ts +86 -0
- package/src/providers/xai-responses-opt-in.ts +15 -0
- package/src/providers/xai-transport.ts +148 -0
- package/src/reasoning-effort.ts +183 -0
- package/src/responses/compaction.ts +142 -0
- package/src/responses/custom-tool-compat.ts +266 -0
- package/src/responses/hosted-tool-policy.ts +9 -0
- package/src/responses/namespace-tool-compat.ts +355 -0
- package/src/responses/parser.ts +838 -0
- package/src/responses/provider-continuation.ts +98 -0
- package/src/responses/provider-opaque-metadata.ts +73 -0
- package/src/responses/reasoning-envelope.ts +60 -0
- package/src/responses/reasoning-replay-cache.ts +426 -0
- package/src/responses/schema.ts +165 -0
- package/src/responses/spill-store.ts +459 -0
- package/src/responses/state.ts +1433 -0
- package/src/responses/thought-signature-replay.ts +347 -0
- package/src/responses/tool-groups.ts +19 -0
- package/src/responses/tool-search-compat.ts +301 -0
- package/src/responses/truncated-stop-reason.ts +60 -0
- package/src/router.ts +761 -0
- package/src/routing/analytics.ts +378 -0
- package/src/routing/capability.ts +244 -0
- package/src/routing/compatibility/assemble.ts +73 -0
- package/src/routing/compatibility/behavior.ts +278 -0
- package/src/routing/compatibility/catalog.ts +99 -0
- package/src/routing/compatibility/endpoint.ts +52 -0
- package/src/routing/compatibility/lab-evidence-provider.ts +130 -0
- package/src/routing/compatibility/policy.ts +181 -0
- package/src/routing/compatibility/provider-slot.ts +56 -0
- package/src/routing/compatibility/reader.ts +110 -0
- package/src/routing/compatibility/subject.ts +191 -0
- package/src/routing/compatibility/types.ts +64 -0
- package/src/routing/compatibility/version.ts +104 -0
- package/src/routing/cost.ts +77 -0
- package/src/routing/evaluator.ts +495 -0
- package/src/routing/health.ts +412 -0
- package/src/routing/history/cursor.ts +43 -0
- package/src/routing/history/indexer.ts +605 -0
- package/src/routing/history/schema.ts +72 -0
- package/src/routing/profile-namespace.ts +15 -0
- package/src/routing/profile.ts +547 -0
- package/src/routing/quota.ts +145 -0
- package/src/routing/request-evidence.ts +45 -0
- package/src/routing/trace.ts +776 -0
- package/src/server/adapter-resolve.ts +53 -0
- package/src/server/auth-cors.ts +751 -0
- package/src/server/background-lifecycle.ts +182 -0
- package/src/server/chat-completions.ts +442 -0
- package/src/server/chat-native-sse.ts +331 -0
- package/src/server/chat-native.ts +426 -0
- package/src/server/claude-messages.ts +1030 -0
- package/src/server/direct-local-http.ts +347 -0
- package/src/server/effort-policy.ts +190 -0
- package/src/server/github-copilot-responses-repair.ts +338 -0
- package/src/server/gui-static.ts +152 -0
- package/src/server/image-retry.ts +42 -0
- package/src/server/images.ts +568 -0
- package/src/server/index.ts +1813 -0
- package/src/server/lifecycle.ts +498 -0
- package/src/server/live.ts +717 -0
- package/src/server/local-management-read-client.ts +90 -0
- package/src/server/local-provider-reload-client.ts +137 -0
- package/src/server/management/agent-settings-routes.ts +1433 -0
- package/src/server/management/api-access.ts +141 -0
- package/src/server/management/api-key-usage.ts +193 -0
- package/src/server/management/body.ts +41 -0
- package/src/server/management/combo-routes.ts +263 -0
- package/src/server/management/config-routes.ts +835 -0
- package/src/server/management/context.ts +113 -0
- package/src/server/management/integration-routes.ts +498 -0
- package/src/server/management/lab-automation-routes.ts +206 -0
- package/src/server/management/lab-routes.ts +563 -0
- package/src/server/management/logs-usage-routes.ts +586 -0
- package/src/server/management/model-routes.ts +560 -0
- package/src/server/management/model-rows.ts +163 -0
- package/src/server/management/native-integration-routes.ts +769 -0
- package/src/server/management/oauth-account-routes.ts +637 -0
- package/src/server/management/provider-capability-config.ts +48 -0
- package/src/server/management/provider-routes.ts +1033 -0
- package/src/server/management/replit-provider-routes.ts +86 -0
- 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 +385 -0
- package/src/server/management/shared.ts +286 -0
- package/src/server/management/sidebar-routes.ts +106 -0
- package/src/server/management/storage-log-guard-routes.ts +186 -0
- package/src/server/management/sync-response.ts +69 -0
- package/src/server/management/system-restart.ts +435 -0
- package/src/server/management/system-routes.ts +194 -0
- package/src/server/management/usage-summary-cache.ts +94 -0
- package/src/server/management/vision-sidecar-options.ts +167 -0
- package/src/server/management/web-search-sidecar-options.ts +120 -0
- package/src/server/management-api.ts +314 -0
- package/src/server/management-auth.ts +482 -0
- package/src/server/memory-watchdog.ts +156 -0
- package/src/server/passive-route-linker.ts +66 -0
- package/src/server/port-reclaim.ts +307 -0
- package/src/server/ports.ts +156 -0
- package/src/server/proxy-liveness.ts +328 -0
- package/src/server/readiness.ts +99 -0
- package/src/server/relay-eager.ts +353 -0
- package/src/server/relay.ts +1209 -0
- package/src/server/request-decompress.ts +239 -0
- package/src/server/request-log-conversation.ts +168 -0
- package/src/server/request-log.ts +1259 -0
- package/src/server/responses/agent-task-recovery-cache.ts +143 -0
- package/src/server/responses/agent-task-recovery.ts +465 -0
- package/src/server/responses/collaboration.ts +551 -0
- package/src/server/responses/compact.ts +771 -0
- package/src/server/responses/core.ts +5389 -0
- package/src/server/responses/empty-completion-guard.ts +276 -0
- package/src/server/responses/encrypted-payload.ts +331 -0
- package/src/server/responses/fetch-helpers.ts +232 -0
- package/src/server/responses/input-admission.ts +185 -0
- package/src/server/responses/pacing-overload.ts +13 -0
- package/src/server/responses/passthrough-error.ts +78 -0
- package/src/server/responses/policy-fallback.ts +178 -0
- package/src/server/responses/responses-field-backfill.ts +251 -0
- package/src/server/responses/terminal-guard.ts +251 -0
- package/src/server/responses/upstream-error.ts +53 -0
- package/src/server/responses/ws-upstream.ts +308 -0
- package/src/server/responses-custom-tool-repair.ts +282 -0
- package/src/server/responses-image-gen-repair.ts +132 -0
- package/src/server/responses-item-id-repair.ts +272 -0
- package/src/server/responses-json-events.ts +90 -0
- package/src/server/responses-model-rewrite.ts +29 -0
- package/src/server/responses-reasoning-summary-rewrite.ts +178 -0
- package/src/server/responses-snapshot-repair.ts +621 -0
- package/src/server/responses-terminal-repair.ts +342 -0
- package/src/server/responses-tool-search-repair.ts +267 -0
- package/src/server/responses-undeclared-tool-guard.ts +153 -0
- package/src/server/responses.ts +25 -0
- package/src/server/search.ts +201 -0
- package/src/server/sse-frame-buffer.ts +292 -0
- package/src/server/sse-payload-rewrite.ts +263 -0
- package/src/server/startup-action-control.ts +315 -0
- package/src/server/startup-health-cache.ts +131 -0
- package/src/server/system-env.ts +484 -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 +472 -0
- package/src/service-manager-probe.ts +892 -0
- package/src/service.ts +3575 -0
- package/src/sidecar/auth.ts +92 -0
- package/src/sidecar/candidates.ts +83 -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 +364 -0
- package/src/tray/windows.ts +757 -0
- package/src/types/accounts.ts +37 -0
- package/src/types/config.ts +876 -0
- package/src/types/provider.ts +545 -0
- package/src/types/request.ts +384 -0
- package/src/types/tools.ts +131 -0
- package/src/types/wire.ts +80 -0
- package/src/types.ts +106 -0
- package/src/update/badge.ts +72 -0
- package/src/update/index.ts +415 -0
- package/src/update/job.ts +1887 -0
- package/src/update/notify.ts +263 -0
- package/src/update/npm-cache-preflight.d.mts +47 -0
- package/src/update/npm-cache-preflight.mjs +201 -0
- package/src/update/npm-invocation.d.mts +23 -0
- package/src/update/npm-invocation.mjs +94 -0
- package/src/update/transactional-install.d.mts +22 -0
- package/src/update/transactional-install.mjs +259 -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 +625 -0
- package/src/usage/debug.ts +97 -0
- package/src/usage/expected-prices.ts +416 -0
- package/src/usage/log.ts +1223 -0
- package/src/usage/summary.ts +753 -0
- package/src/usage/totals.ts +14 -0
- package/src/usage/user-cost-overlay-reconciler.ts +313 -0
- package/src/usage/user-cost-overlays.ts +314 -0
- package/src/vision/anthropic-describe.ts +189 -0
- package/src/vision/backends.ts +97 -0
- package/src/vision/describe.ts +131 -0
- package/src/vision/eligibility.ts +250 -0
- package/src/vision/index.ts +681 -0
- package/src/vision/reasoning.ts +55 -0
- package/src/vision/routed-describe.ts +175 -0
- package/src/vision/timeout-bounds.ts +9 -0
- package/src/web-search/anthropic-executor.ts +195 -0
- package/src/web-search/backends.ts +108 -0
- package/src/web-search/exa-executor.ts +88 -0
- package/src/web-search/executor.ts +113 -0
- package/src/web-search/format-result.ts +89 -0
- package/src/web-search/gemini-executor.ts +141 -0
- package/src/web-search/index.ts +331 -0
- package/src/web-search/loop.ts +896 -0
- package/src/web-search/parse.ts +315 -0
- package/src/web-search/progress-stream.ts +342 -0
- package/src/web-search/sources.ts +60 -0
- package/src/web-search/synthetic-tool.ts +47 -0
- package/src/web-search/xai-executor.ts +219 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
export interface TrayProxyLive { port: number }
|
|
2
|
+
|
|
3
|
+
export interface TrayProxyServiceState {
|
|
4
|
+
installed: boolean;
|
|
5
|
+
startable: boolean;
|
|
6
|
+
summary: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface TrayProxyStartIo {
|
|
10
|
+
findLive: () => Promise<TrayProxyLive | null>;
|
|
11
|
+
/** Normal Start is idempotent; restart fallback refuses a target that reappeared. */
|
|
12
|
+
existingIsSuccess?: boolean;
|
|
13
|
+
diagnoseService: () => TrayProxyServiceState;
|
|
14
|
+
startService: () => void | Promise<void>;
|
|
15
|
+
startDirect: () => void | Promise<void>;
|
|
16
|
+
waitForProxy: () => Promise<TrayProxyLive | null>;
|
|
17
|
+
info: (message: string) => void;
|
|
18
|
+
error: (message: string) => void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface ProxyRestartLive {
|
|
22
|
+
pid: number | null;
|
|
23
|
+
port: number;
|
|
24
|
+
hostname?: string;
|
|
25
|
+
source: "runtime" | "config";
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export type ProxyRestartRequestOutcome =
|
|
29
|
+
| { accepted: true }
|
|
30
|
+
| { accepted: false; uncertain: boolean; error?: unknown };
|
|
31
|
+
|
|
32
|
+
export type ProxyRestartResult =
|
|
33
|
+
| { ok: true; mode: "started" }
|
|
34
|
+
| { ok: true; mode: "skipped" }
|
|
35
|
+
| { ok: true; mode: "restarted"; live: ProxyRestartLive }
|
|
36
|
+
| { ok: false; phase: "start" | "identity" | "request" | "replacement"; error?: unknown };
|
|
37
|
+
|
|
38
|
+
export type ProxyRestartDiscovery =
|
|
39
|
+
| { status: "live"; live: ProxyRestartLive }
|
|
40
|
+
| { status: "absent" }
|
|
41
|
+
| { status: "uncertain"; error?: unknown };
|
|
42
|
+
|
|
43
|
+
export interface ProxyRestartDiscoveryIo {
|
|
44
|
+
findLive: () => Promise<ProxyRestartLive | null>;
|
|
45
|
+
waitBetweenChecks?: () => Promise<void>;
|
|
46
|
+
expired?: () => boolean;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface ProxyRestartIo {
|
|
50
|
+
findLive: () => Promise<ProxyRestartDiscovery>;
|
|
51
|
+
startWhenStopped: () => boolean | "skipped" | Promise<boolean | "skipped">;
|
|
52
|
+
requestInPlaceRestart: (
|
|
53
|
+
previous: ProxyRestartLive,
|
|
54
|
+
) => ProxyRestartRequestOutcome | Promise<ProxyRestartRequestOutcome>;
|
|
55
|
+
waitForReplacement: (previous: ProxyRestartLive) => Promise<ProxyRestartLive | null>;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Confirm absence twice before restart is allowed to select a start-only path.
|
|
60
|
+
* A live target appearing during confirmation is uncertainty, not success: the
|
|
61
|
+
* caller must not claim it restarted a process it never asked to restart.
|
|
62
|
+
*/
|
|
63
|
+
export async function discoverStableProxyForRestart(
|
|
64
|
+
io: ProxyRestartDiscoveryIo,
|
|
65
|
+
): Promise<ProxyRestartDiscovery> {
|
|
66
|
+
let first: ProxyRestartLive | null;
|
|
67
|
+
try {
|
|
68
|
+
first = await io.findLive();
|
|
69
|
+
} catch (error) {
|
|
70
|
+
return { status: "uncertain", error };
|
|
71
|
+
}
|
|
72
|
+
if (first) return { status: "live", live: first };
|
|
73
|
+
if (io.expired?.()) {
|
|
74
|
+
return { status: "uncertain", error: new Error("restart_discovery_deadline_expired") };
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
await (io.waitBetweenChecks ?? (() => Bun.sleep(100)))();
|
|
78
|
+
let second: ProxyRestartLive | null;
|
|
79
|
+
try {
|
|
80
|
+
second = await io.findLive();
|
|
81
|
+
} catch (error) {
|
|
82
|
+
return { status: "uncertain", error };
|
|
83
|
+
}
|
|
84
|
+
if (second) {
|
|
85
|
+
return {
|
|
86
|
+
status: "uncertain",
|
|
87
|
+
error: new Error("restart_target_appeared_during_absence_confirmation"),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
if (io.expired?.()) {
|
|
91
|
+
return { status: "uncertain", error: new Error("restart_discovery_deadline_expired") };
|
|
92
|
+
}
|
|
93
|
+
return { status: "absent" };
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export function isProxyReplacement(
|
|
97
|
+
previous: ProxyRestartLive,
|
|
98
|
+
candidate: ProxyRestartLive | null,
|
|
99
|
+
): candidate is ProxyRestartLive & { pid: number } {
|
|
100
|
+
return previous.pid !== null
|
|
101
|
+
&& candidate?.pid !== null
|
|
102
|
+
&& candidate?.pid !== undefined
|
|
103
|
+
&& candidate.source === "runtime"
|
|
104
|
+
&& candidate.port === previous.port
|
|
105
|
+
&& candidate.pid !== previous.pid;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** Side-effect coordinator for the tray's fixed proxy-start action. */
|
|
109
|
+
export async function runTrayProxyStart(io: TrayProxyStartIo): Promise<boolean> {
|
|
110
|
+
const live = await io.findLive();
|
|
111
|
+
if (live) {
|
|
112
|
+
if (io.existingIsSuccess === false) {
|
|
113
|
+
io.error("Proxy appeared while restart was confirming absence; no start was attempted.");
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
io.info(`Proxy already running on port ${live.port}.`);
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const service = io.diagnoseService();
|
|
121
|
+
if (service.installed && !service.startable) {
|
|
122
|
+
io.error(`Cannot start from the tray because the installed service is not viable: ${service.summary}`);
|
|
123
|
+
io.error("Repair or remove the service before starting a direct proxy.");
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (service.startable) await io.startService();
|
|
128
|
+
else await io.startDirect();
|
|
129
|
+
|
|
130
|
+
const started = await io.waitForProxy();
|
|
131
|
+
if (!started) {
|
|
132
|
+
io.error("Proxy did not become healthy after the tray start action.");
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
io.info(`Proxy running on port ${started.port}.`);
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Shared restart transaction for both `ocx restart` and the Windows tray.
|
|
141
|
+
*
|
|
142
|
+
* A live proxy restarts itself through POST /api/system/restart. That lifecycle owns
|
|
143
|
+
* drain, supervisor handoff, exact replacement identity, and managed-routing
|
|
144
|
+
* preservation. Re-implementing restart as `stop` + `start` here races a late service
|
|
145
|
+
* child and lets ordinary /api/stop restore native routing between the two halves.
|
|
146
|
+
* When no proxy is live there is nothing to recycle, so restart degrades to the
|
|
147
|
+
* caller's normal start path.
|
|
148
|
+
*/
|
|
149
|
+
export async function runProxyRestart(io: ProxyRestartIo): Promise<ProxyRestartResult> {
|
|
150
|
+
let discovery: ProxyRestartDiscovery;
|
|
151
|
+
try {
|
|
152
|
+
discovery = await io.findLive();
|
|
153
|
+
} catch (error) {
|
|
154
|
+
return { ok: false, phase: "request", error };
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if (discovery.status === "uncertain") {
|
|
158
|
+
return { ok: false, phase: "request", error: discovery.error };
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (discovery.status === "absent") {
|
|
162
|
+
try {
|
|
163
|
+
const started = await io.startWhenStopped();
|
|
164
|
+
if (started === "skipped") return { ok: true, mode: "skipped" };
|
|
165
|
+
return started ? { ok: true, mode: "started" } : { ok: false, phase: "start" };
|
|
166
|
+
} catch (error) {
|
|
167
|
+
return { ok: false, phase: "start", error };
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
const previous = discovery.live;
|
|
172
|
+
|
|
173
|
+
if (previous.pid === null || previous.source !== "runtime") {
|
|
174
|
+
return { ok: false, phase: "identity" };
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
let request: ProxyRestartRequestOutcome;
|
|
178
|
+
try {
|
|
179
|
+
request = await io.requestInPlaceRestart(previous);
|
|
180
|
+
} catch (error) {
|
|
181
|
+
// The request may have reached the proxy before the response connection failed.
|
|
182
|
+
// Keep observing the original identity; never replay or fall back to stop/start.
|
|
183
|
+
request = { accepted: false, uncertain: true, error };
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if (!request.accepted && !request.uncertain) {
|
|
187
|
+
return { ok: false, phase: "request", error: request.error };
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
try {
|
|
191
|
+
const replacement = await io.waitForReplacement(previous);
|
|
192
|
+
if (replacement) return { ok: true, mode: "restarted", live: replacement };
|
|
193
|
+
return request.accepted
|
|
194
|
+
? { ok: false, phase: "replacement" }
|
|
195
|
+
: { ok: false, phase: "request", error: request.error };
|
|
196
|
+
} catch (error) {
|
|
197
|
+
return { ok: false, phase: "replacement", error };
|
|
198
|
+
}
|
|
199
|
+
}
|
package/src/cli/v2.ts
ADDED
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ocx v2 status|on|off` — toggle/report the codex `multi_agent_v2` feature that
|
|
3
|
+
* controls the multi-agent surface (v1 vs v2 collab mode).
|
|
4
|
+
*
|
|
5
|
+
* Contract:
|
|
6
|
+
* - config.toml writes go through the official `codex features enable|disable`
|
|
7
|
+
* CLI only (format-preserving TOML edit stays upstream-owned).
|
|
8
|
+
* - after a successful flip the catalog is RESYNCED so model metadata stays fresh.
|
|
9
|
+
* - flips preserve the active thread limit while moving it between the v1/v2
|
|
10
|
+
* config keys, with byte-for-byte rollback when the feature command fails.
|
|
11
|
+
* - nothing in the catalog build path calls this module; no auto-flip exists.
|
|
12
|
+
*/
|
|
13
|
+
import { execFileSync } from "node:child_process";
|
|
14
|
+
import { dirname } from "node:path";
|
|
15
|
+
import { activeCodexConfigPath, getAgentsEnabled, getAgentsMaxDepth, getLogicalMaxThreads, getMultiAgentModeHintText, getSubagentDeveloperInstructions, hasAgentsMaxThreads, isMultiAgentV2Enabled, setMultiAgentModeHintText, transitionMultiAgentV2 } from "../codex/features";
|
|
16
|
+
|
|
17
|
+
import { commandInvocation, type SpawnInvocation } from "../lib/win-exec";
|
|
18
|
+
import { loadConfig, saveConfig } from "../config";
|
|
19
|
+
import { resolveAndPersistCodexRuntime, type ResolveCodexRuntimeDeps } from "../codex/runtime";
|
|
20
|
+
|
|
21
|
+
export interface V2CliDeps {
|
|
22
|
+
execFile?: (file: string, args: string[], options?: SpawnInvocation["options"]) => void;
|
|
23
|
+
isEnabled?: typeof isMultiAgentV2Enabled;
|
|
24
|
+
hasMaxThreads?: typeof hasAgentsMaxThreads;
|
|
25
|
+
sync?: (port?: number) => Promise<unknown>;
|
|
26
|
+
log?: Pick<Console, "log" | "error">;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export type CodexFeaturesInvocationDeps =
|
|
30
|
+
& Parameters<typeof commandInvocation>[3]
|
|
31
|
+
& Pick<ResolveCodexRuntimeDeps, "existsSync" | "execFileSync" | "configDir" | "readFileSync">;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Shared invocation for `codex features enable|disable <feature>` — the single
|
|
35
|
+
* source of truth for the CLI and the management API fallback. Windows npm installs
|
|
36
|
+
* expose `codex` as a `.cmd` shim, which needs the win-exec launcher
|
|
37
|
+
* (devlog 260715_cross_platform_audit/020). Upstream `codex features` validates
|
|
38
|
+
* the key against the installed build's feature registry, so an old Codex will
|
|
39
|
+
* fail loudly instead of silently writing an unknown flag.
|
|
40
|
+
*/
|
|
41
|
+
export function codexFeaturesInvocation(
|
|
42
|
+
action: "enable" | "disable",
|
|
43
|
+
feature: string = "multi_agent_v2",
|
|
44
|
+
platform: NodeJS.Platform = process.platform,
|
|
45
|
+
deps: CodexFeaturesInvocationDeps = {},
|
|
46
|
+
): SpawnInvocation {
|
|
47
|
+
const command = resolveAndPersistCodexRuntime({
|
|
48
|
+
env: deps.env ?? process.env,
|
|
49
|
+
platform,
|
|
50
|
+
existsSync: deps.existsSync,
|
|
51
|
+
execFileSync: deps.execFileSync,
|
|
52
|
+
configDir: deps.configDir,
|
|
53
|
+
readFileSync: deps.readFileSync,
|
|
54
|
+
}).runtime.command || "codex";
|
|
55
|
+
return commandInvocation(command, ["features", action, feature], platform, deps);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Run `codex features <action> <feature>` synchronously - the management API
|
|
60
|
+
* fallback when no deps toggle is injected. Shares the invocation builder and
|
|
61
|
+
* the bounded timeout/stdio options so every production toggle path behaves
|
|
62
|
+
* identically.
|
|
63
|
+
*/
|
|
64
|
+
export function runCodexFeaturesCommand(
|
|
65
|
+
action: "enable" | "disable",
|
|
66
|
+
feature: string = "multi_agent_v2",
|
|
67
|
+
): void {
|
|
68
|
+
const inv = codexFeaturesInvocation(action, feature);
|
|
69
|
+
execFileSync(inv.file, inv.args,
|
|
70
|
+
{
|
|
71
|
+
stdio: ["ignore", "pipe", "pipe"], timeout: 15_000, windowsHide: true, encoding: "utf8",
|
|
72
|
+
// The reader resolves $CODEX_HOME at call time (including the WSL Windows-home
|
|
73
|
+
// detection); force the same home on the child so it never toggles a different
|
|
74
|
+
// config than the one the postcondition re-reads.
|
|
75
|
+
env: { ...process.env, CODEX_HOME: dirname(activeCodexConfigPath()) },
|
|
76
|
+
...inv.options,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function runCodexFeatures(action: "enable" | "disable", deps: V2CliDeps): void {
|
|
81
|
+
if (deps.execFile) {
|
|
82
|
+
const inv = codexFeaturesInvocation(action);
|
|
83
|
+
deps.execFile(inv.file, inv.args, inv.options);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
runCodexFeaturesCommand(action);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function v2StatusLine(enabled: boolean): string {
|
|
90
|
+
return enabled
|
|
91
|
+
? "multi_agent_v2: ON — v2 multi-agent surface active"
|
|
92
|
+
: "multi_agent_v2: OFF — v1 multi-agent surface (default install)";
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export function multiAgentModeLine(mode: string): string {
|
|
96
|
+
switch (mode) {
|
|
97
|
+
case "v1": return "multi_agent_mode: v1 — ALL models forced to v1 surface (upstream pins overridden)";
|
|
98
|
+
case "v2": return "multi_agent_mode: v2 — ALL models forced to v2 surface (upstream pins overridden)";
|
|
99
|
+
default: return "multi_agent_mode: default — upstream model pins respected (sol/terra=v2, luna=v1, rest=codex flag)";
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export async function cmdV2(args: string[], deps: V2CliDeps = {}, findPort?: () => Promise<number | undefined>): Promise<number> {
|
|
104
|
+
const log = deps.log ?? console;
|
|
105
|
+
const isEnabled = deps.isEnabled ?? isMultiAgentV2Enabled;
|
|
106
|
+
const hasMaxThreads = deps.hasMaxThreads ?? hasAgentsMaxThreads;
|
|
107
|
+
const verb = (args[0] ?? "status").trim().toLowerCase();
|
|
108
|
+
|
|
109
|
+
if (verb === "status") {
|
|
110
|
+
log.log(v2StatusLine(isEnabled()));
|
|
111
|
+
const cfg = loadConfig();
|
|
112
|
+
log.log(multiAgentModeLine(cfg.multiAgentMode ?? "default"));
|
|
113
|
+
log.log(cfg.keepNativeChatGptOnV1 === true
|
|
114
|
+
? "keep_native_chatgpt_on_v1: ON — ChatGPT-native rows stay v1 when mode is v2"
|
|
115
|
+
: "keep_native_chatgpt_on_v1: OFF");
|
|
116
|
+
const threads = getLogicalMaxThreads();
|
|
117
|
+
log.log(`max_threads: ${threads ?? "(unset — codex default)"}`);
|
|
118
|
+
const v2Active = isEnabled();
|
|
119
|
+
const agentsEnabled = getAgentsEnabled();
|
|
120
|
+
log.log(`agents.enabled: ${agentsEnabled === null ? "(unset — upstream default true)" : agentsEnabled}`);
|
|
121
|
+
const maxDepth = getAgentsMaxDepth();
|
|
122
|
+
// max_depth is V1-only upstream; say so whenever V2 is active so the number
|
|
123
|
+
// cannot be misread as an effective V2 limit.
|
|
124
|
+
log.log(`agents.max_depth: ${maxDepth ?? "(unset — upstream default 1)"}${v2Active ? " (V1-only — ignored while multi_agent_v2 is enabled)" : ""}`);
|
|
125
|
+
const instructions = getSubagentDeveloperInstructions();
|
|
126
|
+
log.log(`subagent_developer_instructions: ${instructions === null ? "(unset — children inherit)" : instructions === "" ? '"" (clears inherited instructions)' : JSON.stringify(instructions)}`);
|
|
127
|
+
const modeHint = getMultiAgentModeHintText();
|
|
128
|
+
log.log(`multi_agent_mode_hint_text: ${modeHint === null ? "(unset — effort-derived policy: ultra=proactive, else explicit)" : JSON.stringify(modeHint)}`);
|
|
129
|
+
if (isEnabled() && hasMaxThreads()) {
|
|
130
|
+
log.log("WARNING: [agents] max_threads is set — codex refuses to start while multi_agent_v2 is enabled. Remove it from config.toml (concurrency lives in features.multi_agent_v2.max_concurrent_threads_per_session).");
|
|
131
|
+
}
|
|
132
|
+
return 0;
|
|
133
|
+
}
|
|
134
|
+
if (verb === "mode-hint") {
|
|
135
|
+
const value = args[1];
|
|
136
|
+
if (value === undefined) {
|
|
137
|
+
log.error("v2 mode-hint: pass the hint text, or --clear to unset it.");
|
|
138
|
+
return 1;
|
|
139
|
+
}
|
|
140
|
+
if (value === "--clear") {
|
|
141
|
+
const result = setMultiAgentModeHintText(null);
|
|
142
|
+
if (!result.ok) {
|
|
143
|
+
log.error(`v2 mode-hint: ${result.error}`);
|
|
144
|
+
return 1;
|
|
145
|
+
}
|
|
146
|
+
log.log(result.changed
|
|
147
|
+
? "multi_agent_mode_hint_text cleared — effort-derived policy resumes (new sessions)."
|
|
148
|
+
: "multi_agent_mode_hint_text already unset — nothing to do.");
|
|
149
|
+
return 0;
|
|
150
|
+
}
|
|
151
|
+
// `--clear` is the only reserved token; hints are otherwise arbitrary
|
|
152
|
+
// nonblank text and may legitimately begin with a hyphen.
|
|
153
|
+
if (value.trim().length === 0) {
|
|
154
|
+
log.error("v2 mode-hint: pass the hint text, or --clear to unset it.");
|
|
155
|
+
return 1;
|
|
156
|
+
}
|
|
157
|
+
const result = setMultiAgentModeHintText(value);
|
|
158
|
+
if (!result.ok) {
|
|
159
|
+
log.error(`v2 mode-hint: ${result.error}`);
|
|
160
|
+
return 1;
|
|
161
|
+
}
|
|
162
|
+
log.log(result.changed
|
|
163
|
+
? `multi_agent_mode_hint_text set (new sessions).`
|
|
164
|
+
: "multi_agent_mode_hint_text already set — nothing to do.");
|
|
165
|
+
return 0;
|
|
166
|
+
}
|
|
167
|
+
if (verb === "threads") {
|
|
168
|
+
const value = Number((args[1] ?? "").trim());
|
|
169
|
+
if (!Number.isInteger(value) || value < 1) {
|
|
170
|
+
log.error("v2 threads: pass an integer >= 1 (features.multi_agent_v2.max_concurrent_threads_per_session)");
|
|
171
|
+
return 1;
|
|
172
|
+
}
|
|
173
|
+
const enabled = isEnabled();
|
|
174
|
+
const result = transitionMultiAgentV2(enabled, next => runCodexFeatures(next ? "enable" : "disable", deps), { threadLimit: value });
|
|
175
|
+
if (!result.ok) { log.error(`v2 threads: ${result.error}`); return 1; }
|
|
176
|
+
log.log(result.changed
|
|
177
|
+
? `max_threads = ${value} (${enabled ? "v2" : "v1"}) — applies to new sessions.`
|
|
178
|
+
: `max_threads already ${value} — nothing to do.`);
|
|
179
|
+
return 0;
|
|
180
|
+
}
|
|
181
|
+
if (verb === "mode") {
|
|
182
|
+
const modeArg = (args[1] ?? "").trim().toLowerCase();
|
|
183
|
+
if (modeArg !== "v1" && modeArg !== "default" && modeArg !== "v2") {
|
|
184
|
+
log.error("v2 mode: expected v1|default|v2");
|
|
185
|
+
return 1;
|
|
186
|
+
}
|
|
187
|
+
const cfg = loadConfig();
|
|
188
|
+
if (modeArg !== "default") {
|
|
189
|
+
const target = modeArg === "v2";
|
|
190
|
+
const transition = transitionMultiAgentV2(target, enabled => runCodexFeatures(enabled ? "enable" : "disable", deps));
|
|
191
|
+
if (!transition.ok) {
|
|
192
|
+
log.error(`multi-agent mode transition failed: ${transition.error}`);
|
|
193
|
+
return 1;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
if (modeArg === "default") delete cfg.multiAgentMode;
|
|
197
|
+
else cfg.multiAgentMode = modeArg as "v1" | "v2";
|
|
198
|
+
saveConfig(cfg);
|
|
199
|
+
try {
|
|
200
|
+
const sync = deps.sync ?? (await import("../codex/sync")).syncModelsToCodex;
|
|
201
|
+
await sync(findPort ? await findPort() : undefined);
|
|
202
|
+
} catch (err) {
|
|
203
|
+
log.error(`catalog resync failed: ${err instanceof Error ? err.message : String(err)} — run 'ocx sync' manually.`);
|
|
204
|
+
return 1;
|
|
205
|
+
}
|
|
206
|
+
log.log(multiAgentModeLine(modeArg));
|
|
207
|
+
log.log("Applies to NEW sessions; running sessions keep their pinned multi-agent version.");
|
|
208
|
+
return 0;
|
|
209
|
+
}
|
|
210
|
+
if (verb === "keep-native-v1") {
|
|
211
|
+
const flag = (args[1] ?? "").trim().toLowerCase();
|
|
212
|
+
if (flag !== "on" && flag !== "off") {
|
|
213
|
+
log.error("v2 keep-native-v1: expected on|off");
|
|
214
|
+
return 1;
|
|
215
|
+
}
|
|
216
|
+
const cfg = loadConfig();
|
|
217
|
+
const next = flag === "on";
|
|
218
|
+
const already = cfg.keepNativeChatGptOnV1 === true === next;
|
|
219
|
+
if (next) cfg.keepNativeChatGptOnV1 = true;
|
|
220
|
+
else delete cfg.keepNativeChatGptOnV1;
|
|
221
|
+
saveConfig(cfg);
|
|
222
|
+
try {
|
|
223
|
+
const sync = deps.sync ?? (await import("../codex/sync")).syncModelsToCodex;
|
|
224
|
+
await sync(findPort ? await findPort() : undefined);
|
|
225
|
+
} catch (err) {
|
|
226
|
+
log.error(`catalog resync failed: ${err instanceof Error ? err.message : String(err)} — run 'ocx sync' manually.`);
|
|
227
|
+
return 1;
|
|
228
|
+
}
|
|
229
|
+
if (already) {
|
|
230
|
+
log.log(next
|
|
231
|
+
? "keep_native_chatgpt_on_v1 already ON — catalog re-synced."
|
|
232
|
+
: "keep_native_chatgpt_on_v1 already OFF — catalog re-synced.");
|
|
233
|
+
return 0;
|
|
234
|
+
}
|
|
235
|
+
log.log(next
|
|
236
|
+
? "keep_native_chatgpt_on_v1: ON — ChatGPT-native rows stay v1 when mode is v2 (new sessions)."
|
|
237
|
+
: "keep_native_chatgpt_on_v1: OFF — ChatGPT-native rows follow v1/base/v2 (new sessions).");
|
|
238
|
+
return 0;
|
|
239
|
+
}
|
|
240
|
+
if (verb !== "on" && verb !== "off") {
|
|
241
|
+
log.error(`v2: unknown verb '${verb}' (expected status|on|off|mode <v1|default|v2>|keep-native-v1 <on|off>|threads <n>|mode-hint <text|--clear>)`);
|
|
242
|
+
return 1;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
const want = verb === "on";
|
|
246
|
+
const transition = transitionMultiAgentV2(want, enabled => runCodexFeatures(enabled ? "enable" : "disable", deps));
|
|
247
|
+
if (!transition.ok) {
|
|
248
|
+
log.error(`codex features ${want ? "enable" : "disable"} multi_agent_v2 failed: ${transition.error}`);
|
|
249
|
+
return 1;
|
|
250
|
+
}
|
|
251
|
+
if (!transition.changed) {
|
|
252
|
+
log.log(`multi_agent_v2 already ${want ? "ON" : "OFF"} — nothing to do.`);
|
|
253
|
+
return 0;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Resync catalog so multi-agent surface metadata stays fresh in both the
|
|
257
|
+
// on-disk catalog and models_cache.json after the toggle flip.
|
|
258
|
+
try {
|
|
259
|
+
const sync = deps.sync ?? (await import("../codex/sync")).syncModelsToCodex;
|
|
260
|
+
await sync(findPort ? await findPort() : undefined);
|
|
261
|
+
} catch (err) {
|
|
262
|
+
log.error(`catalog resync failed (flag IS flipped): ${err instanceof Error ? err.message : String(err)} — run 'ocx sync' manually.`);
|
|
263
|
+
return 1;
|
|
264
|
+
}
|
|
265
|
+
log.log(v2StatusLine(want));
|
|
266
|
+
log.log("Applies to NEW sessions; running sessions keep their pinned multi-agent version. Restart the Codex app (or wait out its picker cache) to see the ladder change.");
|
|
267
|
+
return 0;
|
|
268
|
+
}
|
package/src/cli.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
// Compatibility stub for the pre-restructure entrypoint path.
|
|
3
|
+
//
|
|
4
|
+
// Before the src/ restructure the CLI lived at src/cli.ts, and durable launchers
|
|
5
|
+
// (codex shim wrappers, installed service definitions) baked that absolute path
|
|
6
|
+
// into their command lines. Users who upgrade in place with a bare
|
|
7
|
+
// `npm install -g @yansigit/opencodex` (instead of `ocx update`, which repairs the
|
|
8
|
+
// shim/service) would otherwise be stranded on a dead path. Keep this stub for at
|
|
9
|
+
// least one release cycle after the restructure ships.
|
|
10
|
+
import "./cli/index.ts";
|