@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,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Align Grok and Claude Desktop files with the durable switches during `ocx ensure`.
|
|
3
|
+
*
|
|
4
|
+
* handleEnsure used to load config once, then health-probe / model-sync / spawn,
|
|
5
|
+
* and only afterwards mutate ~/.grok/config.toml and the Desktop library from
|
|
6
|
+
* that snapshot. An OFF→ON flip in that window stripped a freshly enabled fence
|
|
7
|
+
* or deleted a freshly applied Desktop profile; ON→OFF rewrote the files the
|
|
8
|
+
* user had just turned off. Re-read persisted desired state immediately before
|
|
9
|
+
* each external-file mutation, and use that current config for sync inputs.
|
|
10
|
+
*/
|
|
11
|
+
import { loadConfig } from "../config";
|
|
12
|
+
import { stripGrokConfig, type GrokInjectResult } from "../grok/inject";
|
|
13
|
+
import { removeDesktop3pStandardPivot } from "../claude/desktop-3p";
|
|
14
|
+
import {
|
|
15
|
+
claudeDesktopIntegrationEnabled,
|
|
16
|
+
shouldSyncGrokOnStart,
|
|
17
|
+
} from "../codex/desired-state";
|
|
18
|
+
import type { OcxConfig } from "../types";
|
|
19
|
+
|
|
20
|
+
export function grokSyncFailureMessage(err: unknown): string {
|
|
21
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
22
|
+
return `Grok Build config sync failed: ${detail}. `
|
|
23
|
+
+ "~/.grok/config.toml may still point at a previous proxy port — "
|
|
24
|
+
+ "run 'ocx ensure' (or apply from the dashboard's Grok page) to repoint it.";
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface EnsureDesiredIntegrationsDeps {
|
|
28
|
+
loadConfig: () => OcxConfig;
|
|
29
|
+
stripGrokConfig: typeof stripGrokConfig;
|
|
30
|
+
syncGrokConfig: (
|
|
31
|
+
port: number,
|
|
32
|
+
config: OcxConfig,
|
|
33
|
+
opts?: { hostname?: string },
|
|
34
|
+
) => Promise<GrokInjectResult>;
|
|
35
|
+
removeDesktop3pStandardPivot: typeof removeDesktop3pStandardPivot;
|
|
36
|
+
log?: (message: string) => void;
|
|
37
|
+
error?: (message: string) => void;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async function defaultSyncGrokConfig(
|
|
41
|
+
port: number,
|
|
42
|
+
config: OcxConfig,
|
|
43
|
+
opts: { hostname?: string } = {},
|
|
44
|
+
): Promise<GrokInjectResult> {
|
|
45
|
+
const { syncGrokConfig } = await import("../grok/sync");
|
|
46
|
+
return syncGrokConfig(port, config, opts);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const productionDeps: EnsureDesiredIntegrationsDeps = {
|
|
50
|
+
loadConfig,
|
|
51
|
+
stripGrokConfig,
|
|
52
|
+
syncGrokConfig: defaultSyncGrokConfig,
|
|
53
|
+
removeDesktop3pStandardPivot,
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
function io(deps: EnsureDesiredIntegrationsDeps): {
|
|
57
|
+
log: (message: string) => void;
|
|
58
|
+
error: (message: string) => void;
|
|
59
|
+
} {
|
|
60
|
+
return {
|
|
61
|
+
log: deps.log ?? (message => console.log(message)),
|
|
62
|
+
error: deps.error ?? (message => console.error(message)),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Keep ~/.grok/config.toml aligned with the durable Grok switch.
|
|
68
|
+
*
|
|
69
|
+
* `handleStart` already gates inject on `shouldSyncGrokOnStart`. `ocx ensure`
|
|
70
|
+
* used to call `syncGrokConfig` unconditionally, so a dashboard/update/restart
|
|
71
|
+
* path that lands in ensure rewrote the fence while the switch stayed OFF.
|
|
72
|
+
* When the switch is OFF, strip any leftover managed block instead of injecting.
|
|
73
|
+
*/
|
|
74
|
+
export async function ensureGrokFenceMatchesDesired(
|
|
75
|
+
port: number,
|
|
76
|
+
opts: { hostname?: string } = {},
|
|
77
|
+
deps: EnsureDesiredIntegrationsDeps = productionDeps,
|
|
78
|
+
): Promise<void> {
|
|
79
|
+
const config = deps.loadConfig();
|
|
80
|
+
const { log, error } = io(deps);
|
|
81
|
+
if (!shouldSyncGrokOnStart(config)) {
|
|
82
|
+
try {
|
|
83
|
+
const grok = deps.stripGrokConfig();
|
|
84
|
+
if (grok.changed) log(` ↩️ ${grok.message}`);
|
|
85
|
+
else if (!grok.ok) error(`⚠️ ${grok.message}`);
|
|
86
|
+
} catch (err) {
|
|
87
|
+
error(`⚠️ ${grokSyncFailureMessage(err)}`);
|
|
88
|
+
}
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
const hostname = opts.hostname ?? config.hostname;
|
|
93
|
+
const g = await deps.syncGrokConfig(
|
|
94
|
+
port,
|
|
95
|
+
config,
|
|
96
|
+
hostname !== undefined ? { hostname } : {},
|
|
97
|
+
);
|
|
98
|
+
if (g.changed) log(" + Grok Build config updated (~/.grok/config.toml)");
|
|
99
|
+
else if (!g.ok) error(`⚠️ ${g.message}`);
|
|
100
|
+
} catch (err) {
|
|
101
|
+
error(`⚠️ ${grokSyncFailureMessage(err)}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* When Claude Desktop is durably OFF, clear any leftover owned gateway profile.
|
|
107
|
+
* ensure/update used to leave Claude-3p residue in place after a failed disable
|
|
108
|
+
* (drifted fingerprint), so the Integrations card kept looking applied/stale.
|
|
109
|
+
*/
|
|
110
|
+
export function ensureClaudeDesktopMatchesDesired(
|
|
111
|
+
deps: EnsureDesiredIntegrationsDeps = productionDeps,
|
|
112
|
+
): void {
|
|
113
|
+
const config = deps.loadConfig();
|
|
114
|
+
const { log, error } = io(deps);
|
|
115
|
+
if (claudeDesktopIntegrationEnabled(config)) return;
|
|
116
|
+
try {
|
|
117
|
+
const removed = deps.removeDesktop3pStandardPivot({
|
|
118
|
+
appliedFingerprint: config.claudeCode?.desktopProfile?.appliedFingerprint ?? null,
|
|
119
|
+
});
|
|
120
|
+
if (removed.ok && removed.changed) {
|
|
121
|
+
log(" ↩️ Claude Desktop integration residue removed.");
|
|
122
|
+
} else if (!removed.ok) {
|
|
123
|
+
error(`⚠️ Claude Desktop cleanup skipped: ${removed.reason ?? removed.kind}.`);
|
|
124
|
+
}
|
|
125
|
+
} catch (err) {
|
|
126
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
127
|
+
error(`⚠️ Claude Desktop cleanup failed: ${detail}.`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export type EnsureDesiredIntegrationsBranch =
|
|
132
|
+
| { kind: "live"; hostname?: string }
|
|
133
|
+
| { kind: "spawned" };
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Reconcile the two external integration files after either ensure race window.
|
|
137
|
+
* Only the live proxy's observed bind host crosses this boundary; persisted
|
|
138
|
+
* config is deliberately loaded inside each mutation helper.
|
|
139
|
+
*/
|
|
140
|
+
export async function reconcileEnsureDesiredIntegrations(
|
|
141
|
+
port: number,
|
|
142
|
+
branch: EnsureDesiredIntegrationsBranch,
|
|
143
|
+
deps: EnsureDesiredIntegrationsDeps = productionDeps,
|
|
144
|
+
): Promise<void> {
|
|
145
|
+
const liveHost = branch.kind === "live" ? branch.hostname : undefined;
|
|
146
|
+
await ensureGrokFenceMatchesDesired(
|
|
147
|
+
port,
|
|
148
|
+
liveHost ? { hostname: liveHost } : {},
|
|
149
|
+
deps,
|
|
150
|
+
);
|
|
151
|
+
ensureClaudeDesktopMatchesDesired(deps);
|
|
152
|
+
}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ocx export --client <id>` — print a client config for the live proxy.
|
|
3
|
+
*
|
|
4
|
+
* Eight clients, four formats: OpenCode and Pi are JSON; OMP, Hermes, Gajae and
|
|
5
|
+
* MiniMax Code are YAML; OpenClaw is JSON5; Kimi is TOML.
|
|
6
|
+
*
|
|
7
|
+
* Two consumers, one payload (devlog 260731_client_config_export/020):
|
|
8
|
+
*
|
|
9
|
+
* - **Agent** (`--json`): stdout is exactly the client config as JSON and nothing else,
|
|
10
|
+
* so `ocx export --client pi --json > models.json` is safe to pipe. This is JSON for
|
|
11
|
+
* every client, including the YAML/JSON5/TOML ones — the flag is about machine
|
|
12
|
+
* readability, not the client's native format. Every diagnostic — including the
|
|
13
|
+
* `--out` write note — goes to stderr.
|
|
14
|
+
* - **Human** (no flag) and `--out`: the client's NATIVE serialization leads, then the
|
|
15
|
+
* destination path, the merge warning, the env export line, and the model/degraded
|
|
16
|
+
* counts.
|
|
17
|
+
*
|
|
18
|
+
* The command never writes the user's real config path. `--out` is an explicit target and
|
|
19
|
+
* refuses to clobber an existing file without `--force`, because the common mistake
|
|
20
|
+
* (`--out ~/.config/opencode/opencode.json`) would silently destroy other providers.
|
|
21
|
+
*
|
|
22
|
+
* Serialization itself belongs to src/clients/config-export.ts; this module only resolves
|
|
23
|
+
* the base URL, filters the catalog, and renders. No secret is ever serialized: the config
|
|
24
|
+
* carries the client's documented env reference — or, for Kimi, which cannot hold one, a
|
|
25
|
+
* loopback placeholder — and the real key stays in the environment.
|
|
26
|
+
*/
|
|
27
|
+
import { writeFileSync } from "node:fs";
|
|
28
|
+
import { loadConfig } from "../config";
|
|
29
|
+
import {
|
|
30
|
+
EXPORT_CLIENTS,
|
|
31
|
+
EXPORT_CLIENT_IDS,
|
|
32
|
+
buildClientConfigText,
|
|
33
|
+
isExportClientId,
|
|
34
|
+
opencodeProxyBaseUrl,
|
|
35
|
+
type ExportClientId,
|
|
36
|
+
type ExportModel,
|
|
37
|
+
} from "../clients/config-export";
|
|
38
|
+
import { opencodeCatalogFromProxyRows, type OpencodeProxyModelRow } from "./opencode";
|
|
39
|
+
import type { OcxConfig } from "../types";
|
|
40
|
+
import {
|
|
41
|
+
CliUsageError,
|
|
42
|
+
RuntimeApiError,
|
|
43
|
+
printData,
|
|
44
|
+
rejectArgs,
|
|
45
|
+
runCliAction,
|
|
46
|
+
runtimeBaseUrl,
|
|
47
|
+
runtimeRequest,
|
|
48
|
+
takeFlag,
|
|
49
|
+
takeOption,
|
|
50
|
+
type RuntimeApiDeps,
|
|
51
|
+
} from "./runtime-api";
|
|
52
|
+
|
|
53
|
+
const USAGE = `Usage:
|
|
54
|
+
ocx export --client <${EXPORT_CLIENT_IDS.join("|")}> [--json] [--out <path>] [--force]`;
|
|
55
|
+
|
|
56
|
+
export interface ExportCommandDeps extends RuntimeApiDeps {
|
|
57
|
+
/** Live config seam; tests inject a fixture instead of reading the user's config. */
|
|
58
|
+
configImpl?: () => OcxConfig;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* `/api/models` row plus the modality list Pi consumes. The launcher's row type predates
|
|
63
|
+
* the Pi exporter and stops at the fields OpenCode needs.
|
|
64
|
+
*/
|
|
65
|
+
type ExportProxyModelRow = OpencodeProxyModelRow & {
|
|
66
|
+
inputModalities?: string[];
|
|
67
|
+
reasoningEfforts?: string[];
|
|
68
|
+
defaultReasoningEffort?: string;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
/** Same authoritativeness rule the serializers apply, for the degraded-count line. */
|
|
72
|
+
function hasContextLimit(model: ExportModel): boolean {
|
|
73
|
+
return typeof model.contextWindow === "number"
|
|
74
|
+
&& Number.isFinite(model.contextWindow)
|
|
75
|
+
&& model.contextWindow > 0;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Export rows from proxy `/api/models` rows.
|
|
80
|
+
*
|
|
81
|
+
* `opencodeCatalogFromProxyRows` owns the visibility rules (drop `disabled`, drop dupes,
|
|
82
|
+
* drop native under Codex Direct) — the export core does none of that, so a row filtered
|
|
83
|
+
* here is the only thing keeping a disabled model out of a client's picker. Modalities are
|
|
84
|
+
* re-joined by `namespaced` because the launcher's catalog type does not carry them.
|
|
85
|
+
*/
|
|
86
|
+
export function exportModelsFromProxyRows(
|
|
87
|
+
rows: readonly ExportProxyModelRow[],
|
|
88
|
+
config: OcxConfig,
|
|
89
|
+
): ExportModel[] {
|
|
90
|
+
const metadata = new Map<string, Pick<ExportModel, "inputModalities" | "reasoningEfforts" | "defaultReasoningEffort">>();
|
|
91
|
+
for (const row of rows) {
|
|
92
|
+
const namespaced = row.namespaced?.trim();
|
|
93
|
+
if (!namespaced || metadata.has(namespaced)) continue;
|
|
94
|
+
metadata.set(namespaced, {
|
|
95
|
+
...(Array.isArray(row.inputModalities) && row.inputModalities.length > 0
|
|
96
|
+
? { inputModalities: [...row.inputModalities] }
|
|
97
|
+
: {}),
|
|
98
|
+
...(Array.isArray(row.reasoningEfforts) && row.reasoningEfforts.length > 0
|
|
99
|
+
? { reasoningEfforts: [...row.reasoningEfforts] }
|
|
100
|
+
: {}),
|
|
101
|
+
...(typeof row.defaultReasoningEffort === "string" && row.defaultReasoningEffort.length > 0
|
|
102
|
+
? { defaultReasoningEffort: row.defaultReasoningEffort }
|
|
103
|
+
: {}),
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
return opencodeCatalogFromProxyRows(rows, config).map(entry => {
|
|
107
|
+
const model: ExportModel = {
|
|
108
|
+
namespaced: entry.namespaced,
|
|
109
|
+
provider: entry.provider ?? (entry.native ? "openai" : "routed"),
|
|
110
|
+
id: entry.id ?? entry.namespaced,
|
|
111
|
+
};
|
|
112
|
+
if (entry.native) model.native = true;
|
|
113
|
+
if (entry.displayName) model.displayName = entry.displayName;
|
|
114
|
+
if (entry.contextWindow !== undefined) model.contextWindow = entry.contextWindow;
|
|
115
|
+
Object.assign(model, metadata.get(entry.namespaced));
|
|
116
|
+
return model;
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* `http://host:port/v1` for the proxy that is actually listening.
|
|
122
|
+
*
|
|
123
|
+
* `runtimeBaseUrl` is the identity-checked `findLiveProxy` probe the launcher uses, and it
|
|
124
|
+
* already throws the "Start it with: ocx start" error when nothing answers — so a config
|
|
125
|
+
* with an empty models block can never be emitted.
|
|
126
|
+
*
|
|
127
|
+
* Resolved ONCE and handed back to `runtimeRequest` as `baseUrl`, so the catalog and the
|
|
128
|
+
* exported endpoint can never come from two different probes.
|
|
129
|
+
*/
|
|
130
|
+
function proxyV1BaseUrl(root: string): string {
|
|
131
|
+
const url = new URL(root);
|
|
132
|
+
const port = url.port ? Number(url.port) : url.protocol === "https:" ? 443 : 80;
|
|
133
|
+
return opencodeProxyBaseUrl(port, url.hostname);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function parseClient(args: string[]): ExportClientId {
|
|
137
|
+
const raw = takeOption(args, "--client");
|
|
138
|
+
if (raw === undefined) {
|
|
139
|
+
throw new CliUsageError(`--client is required (${EXPORT_CLIENT_IDS.join(", ")})`, USAGE);
|
|
140
|
+
}
|
|
141
|
+
const client = raw.trim().toLowerCase();
|
|
142
|
+
if (!isExportClientId(client)) {
|
|
143
|
+
throw new CliUsageError(`--client must be one of: ${EXPORT_CLIENT_IDS.join(", ")}`, USAGE);
|
|
144
|
+
}
|
|
145
|
+
return client;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Write the config, refusing to replace an existing file without `--force`.
|
|
150
|
+
*
|
|
151
|
+
* The `wx` flag does the refusal in the kernel rather than after an `existsSync` check, so
|
|
152
|
+
* a file created between the two can never be truncated. Nothing is printed before this
|
|
153
|
+
* runs: a refusal leaves both the target bytes and stdout untouched.
|
|
154
|
+
*/
|
|
155
|
+
function writeExport(path: string, text: string, force: boolean): void {
|
|
156
|
+
try {
|
|
157
|
+
writeFileSync(path, text, force ? { encoding: "utf8" } : { encoding: "utf8", flag: "wx" });
|
|
158
|
+
} catch (error) {
|
|
159
|
+
if ((error as NodeJS.ErrnoException).code === "EEXIST") {
|
|
160
|
+
throw new CliUsageError(
|
|
161
|
+
`${path} already exists. Re-run with --force to replace it, or print the config and merge it yourself.`,
|
|
162
|
+
USAGE,
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
throw error;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export async function handleExportCommand(argv: string[], deps: ExportCommandDeps = {}): Promise<number> {
|
|
170
|
+
return runCliAction(async () => {
|
|
171
|
+
const args = [...argv];
|
|
172
|
+
const client = parseClient(args);
|
|
173
|
+
const wantsJson = takeFlag(args, "--json");
|
|
174
|
+
const force = takeFlag(args, "--force");
|
|
175
|
+
const out = takeOption(args, "--out");
|
|
176
|
+
rejectArgs(args, USAGE);
|
|
177
|
+
|
|
178
|
+
const spec = EXPORT_CLIENTS[client];
|
|
179
|
+
const config = (deps.configImpl ?? loadConfig)();
|
|
180
|
+
const root = await runtimeBaseUrl(deps);
|
|
181
|
+
const rows = await runtimeRequest<ExportProxyModelRow[]>("/api/models", {}, { ...deps, baseUrl: root });
|
|
182
|
+
if (!Array.isArray(rows)) {
|
|
183
|
+
throw new RuntimeApiError("Management API returned an unexpected /api/models payload.", 502, rows);
|
|
184
|
+
}
|
|
185
|
+
const models = exportModelsFromProxyRows(rows, config);
|
|
186
|
+
// The text is the client's OWN format — YAML, TOML and JSON5 clients would
|
|
187
|
+
// otherwise receive a JSON rendering their parser reads differently.
|
|
188
|
+
const built = buildClientConfigText(client, { baseUrl: proxyV1BaseUrl(root), models, config });
|
|
189
|
+
const clientConfig = built.document;
|
|
190
|
+
const text = built.text;
|
|
191
|
+
|
|
192
|
+
// Every serializer already ends with exactly one newline.
|
|
193
|
+
if (out !== undefined) writeExport(out, text, force);
|
|
194
|
+
// stderr, so `--json` stdout stays a standalone JSON document.
|
|
195
|
+
if (out !== undefined && wantsJson) console.error(`Wrote ${out}`);
|
|
196
|
+
|
|
197
|
+
const degraded = models.filter(model => !hasContextLimit(model)).length;
|
|
198
|
+
// `--json` keeps emitting the DOCUMENT at the top level as JSON for scripts;
|
|
199
|
+
// `--out` is the path that writes the selected client's native format.
|
|
200
|
+
// Format metadata rides in the human lines below.
|
|
201
|
+
printData(clientConfig, wantsJson, [
|
|
202
|
+
text.trimEnd(),
|
|
203
|
+
"",
|
|
204
|
+
...(out !== undefined ? [`Wrote ${out}`] : []),
|
|
205
|
+
`Destination: ${spec.destination(process.env)}`,
|
|
206
|
+
"Merge this provider block into that file; do not replace it.",
|
|
207
|
+
`Before launching: ${spec.exportHint}`,
|
|
208
|
+
`${models.length} model${models.length === 1 ? "" : "s"}; ${degraded} omit context limits (the client applies its own defaults).`,
|
|
209
|
+
]);
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
export const EXPORT_USAGE = USAGE;
|
package/src/cli/help.ts
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { findCommand } from "./registry";
|
|
5
|
+
|
|
6
|
+
const repoRoot = dirname(fileURLToPath(new URL("../../package.json", import.meta.url)));
|
|
7
|
+
|
|
8
|
+
function packageVersion(): string {
|
|
9
|
+
const raw = readFileSync(join(repoRoot, "package.json"), "utf8");
|
|
10
|
+
const parsed = JSON.parse(raw) as { version?: unknown };
|
|
11
|
+
return typeof parsed.version === "string" ? parsed.version : "unknown";
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function printVersion(): void {
|
|
15
|
+
console.log(`opencodex ${packageVersion()}`);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function printUsage(): void {
|
|
19
|
+
console.log(`opencodex (ocx) — Universal provider proxy for Codex
|
|
20
|
+
|
|
21
|
+
Usage:
|
|
22
|
+
ocx setup Interactive setup (alias: init)
|
|
23
|
+
ocx start [--port <port>] Start the proxy server (auto-syncs models to Codex)
|
|
24
|
+
ocx stop Stop the proxy AND restore native Codex (plain codex works again)
|
|
25
|
+
ocx restore Restore native Codex without stopping (alias: eject)
|
|
26
|
+
ocx restore back Re-point codex at the running proxy (undo restore)
|
|
27
|
+
ocx recover-history --legacy-openai
|
|
28
|
+
Explicitly recover pre-backup syncResumeHistory rows
|
|
29
|
+
ocx uninstall Remove service/shim/config and restore native Codex (alias: remove)
|
|
30
|
+
ocx service [sub] Run as a background service (default: install/update/start)
|
|
31
|
+
ocx codex-shim <sub> Auto-start proxy when \`codex\` launches (install|status|uninstall|remove)
|
|
32
|
+
ocx tray <sub> Windows status tray (install|start|stop|status|uninstall)
|
|
33
|
+
ocx ensure Ensure the proxy is running and Codex config/cache are current
|
|
34
|
+
ocx sync [--restart-codex] Fetch models from providers and inject into Codex config
|
|
35
|
+
ocx sync-cache [--restart-codex]
|
|
36
|
+
Refresh Codex's model cache from the active catalog
|
|
37
|
+
ocx status Check proxy server status
|
|
38
|
+
ocx doctor Diagnose environment/network issues (WSL, proxy, ChatGPT reachability)
|
|
39
|
+
ocx doctor --reclaim-response-temps
|
|
40
|
+
Reclaim abandoned response-state temp files (works without a running proxy)
|
|
41
|
+
ocx doctor --recover-zero-byte-coordinator --yes
|
|
42
|
+
Back up a proven zero-byte Codex coordinator after stopping the proxy
|
|
43
|
+
ocx debug <scope> provider/usage/injection/claude on|off|status|reset
|
|
44
|
+
ocx login <provider> OAuth or API-key provider login
|
|
45
|
+
ocx logout <provider> Remove a stored OAuth login
|
|
46
|
+
ocx gui Open the opencodex dashboard
|
|
47
|
+
ocx update [--tag <tag>] Update opencodex (keeps preview installs on @preview)
|
|
48
|
+
ocx restart Stop and restart the proxy
|
|
49
|
+
ocx v2 <sub> multi_agent_v2 surface (status|on|off|mode|keep-native-v1|threads|mode-hint)
|
|
50
|
+
ocx health [--json] Check proxy health (exit 0=healthy, 1=not)
|
|
51
|
+
ocx ready [--json] [--wait [--timeout <s>]] Check post-sync readiness (exit 0 only when ready)
|
|
52
|
+
ocx provider <sub> Providers, connectivity, quota, and selected models
|
|
53
|
+
ocx account <sub> Accounts, login/reauth, key pools, and quota controls
|
|
54
|
+
ocx models <sub> Live/custom models, visibility, context, and shadow calls
|
|
55
|
+
ocx combo <sub> Combo failover/round-robin routing
|
|
56
|
+
ocx agent <sub> Subagents, roles, injection, effort caps, and sidecars
|
|
57
|
+
ocx observe <sub> Logs, usage, storage, memory, and debug data
|
|
58
|
+
ocx route <sub> Routing features (combo, policy)
|
|
59
|
+
ocx logs [filters] Alias of ocx observe logs
|
|
60
|
+
ocx usage [--range <7d|30d|all>] Alias of ocx observe usage
|
|
61
|
+
ocx storage [--json] Alias of ocx observe storage
|
|
62
|
+
ocx memory [--json] Alias of ocx observe memory
|
|
63
|
+
ocx api-key <sub> Alias of ocx access key
|
|
64
|
+
ocx access <sub> External API keys and endpoint information
|
|
65
|
+
ocx export --client <id> Print a client config wired to the running proxy (11 clients)
|
|
66
|
+
ocx integration client <sub> Enable, disable, inspect or roll back a client integration
|
|
67
|
+
ocx grok <sub> Grok Build model selection and apply
|
|
68
|
+
ocx system <sub> Runtime settings, startup, sync, and updates
|
|
69
|
+
ocx config <sub> Validated configuration show/get/set/import/export
|
|
70
|
+
ocx lab <sub> Read-only Compatibility Lab projection inspection
|
|
71
|
+
ocx claude [args...] Launch Claude Code wired to the proxy (model discovery on)
|
|
72
|
+
ocx claude desktop [sub] Manage and apply Claude Desktop's four-family profile
|
|
73
|
+
ocx opencode [args...] Launch opencode wired to the proxy (runtime provider config)
|
|
74
|
+
ocx mcode [args...] Launch MiniMax Code through its managed provider
|
|
75
|
+
ocx mmx text <sub> [args] Launch MiniMax CLI text through the proxy
|
|
76
|
+
ocx zcode [sub] Connect ZCode to the proxy (managed provider)
|
|
77
|
+
ocx help [command] Show help
|
|
78
|
+
ocx --version | -v Print version
|
|
79
|
+
|
|
80
|
+
Examples:
|
|
81
|
+
ocx init Set up provider and inject into Codex
|
|
82
|
+
ocx start Start on default port (10100)
|
|
83
|
+
ocx start --port 8080 Start on custom port
|
|
84
|
+
ocx help service Show service command help
|
|
85
|
+
ocx sync Sync available models to Codex`);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function hasHelpFlag(values: string[]): boolean {
|
|
89
|
+
return values.some(value => value === "--help" || value === "-h" || value === "help");
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export function printSubcommandUsage(name: string | undefined): void {
|
|
93
|
+
const entry = name ? findCommand(name) : undefined;
|
|
94
|
+
if (!entry) {
|
|
95
|
+
console.error(`Unknown command: ${name ?? ""}`.trim());
|
|
96
|
+
printUsage();
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
console.log(`Usage: ${entry.usage}\n\n${entry.summary}`);
|
|
100
|
+
if (entry.details?.length) console.log(`\n${entry.details.join("\n")}`);
|
|
101
|
+
}
|