@iislee/opencodex 2.11.0 → 2.35.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/README.md +117 -22
- package/bin/ocx.mjs +245 -88
- package/bin/package-main.mjs +1 -1
- package/gui/dist/assets/index-Be1sDpWw.css +1 -0
- package/gui/dist/assets/index-D4OKgUV4.js +114 -0
- package/gui/dist/index.html +2 -2
- package/gui/dist/provider-icons/alibaba-color.svg +1 -1
- package/gui/dist/provider-icons/antigravity-color.svg +1 -1
- package/gui/dist/provider-icons/claude-color.svg +1 -1
- package/gui/dist/provider-icons/cline-color.svg +16 -0
- package/gui/dist/provider-icons/cloudflare-ai-gateway-color.svg +1 -1
- package/gui/dist/provider-icons/commandcode-color.svg +1 -0
- package/gui/dist/provider-icons/copilot-color.svg +1 -1
- package/gui/dist/provider-icons/cursor-color.svg +1 -1
- package/gui/dist/provider-icons/deepseek-color.svg +1 -1
- package/gui/dist/provider-icons/firepass-color.svg +1 -1
- package/gui/dist/provider-icons/fireworks-color.svg +1 -1
- package/gui/dist/provider-icons/gemini-color.svg +1 -1
- package/gui/dist/provider-icons/github-copilot-color.svg +1 -1
- package/gui/dist/provider-icons/gitlab-duo-color.svg +1 -1
- package/gui/dist/provider-icons/grok.svg +1 -1
- package/gui/dist/provider-icons/groq-color.svg +1 -1
- package/gui/dist/provider-icons/huggingface-color.svg +1 -1
- package/gui/dist/provider-icons/kimi-color.svg +1 -1
- package/gui/dist/provider-icons/kiro-color.svg +2 -2
- package/gui/dist/provider-icons/lm-studio-color.svg +1 -1
- package/gui/dist/provider-icons/mistral-color.svg +1 -1
- package/gui/dist/provider-icons/moonshot-color.svg +1 -1
- package/gui/dist/provider-icons/nvidia-color.svg +1 -1
- package/gui/dist/provider-icons/ollama-color.svg +1 -1
- package/gui/dist/provider-icons/openai.svg +1 -1
- package/gui/dist/provider-icons/opencode.svg +2 -1
- package/gui/dist/provider-icons/openrouter-color.svg +1 -1
- package/gui/dist/provider-icons/pi.svg +2 -2
- package/gui/dist/provider-icons/qianfan-color.svg +1 -1
- package/gui/dist/provider-icons/qwen-portal-color.svg +1 -1
- package/gui/dist/provider-icons/vercel-ai-gateway-color.svg +1 -1
- package/gui/dist/provider-icons/vllm-color.svg +1 -1
- package/gui/dist/provider-icons/xiaomi-color.svg +1 -1
- package/package.json +21 -10
- package/src/adapters/anthropic-output-schema.ts +137 -0
- package/src/adapters/anthropic.ts +475 -62
- package/src/adapters/base.ts +82 -7
- package/src/adapters/client-fingerprint.ts +18 -12
- package/src/adapters/cline-pass-deepseek-v4-tool-replay.ts +69 -0
- package/src/adapters/command-code.ts +637 -0
- package/src/adapters/cursor/call-id.ts +44 -0
- package/src/adapters/cursor/catalog.ts +541 -0
- package/src/adapters/cursor/checkpoint-store.ts +308 -0
- package/src/adapters/cursor/cursor-errors.ts +144 -6
- package/src/adapters/cursor/discovery.ts +122 -14
- package/src/adapters/cursor/effort-map.ts +106 -4
- package/src/adapters/cursor/envelope-echo.ts +290 -0
- package/src/adapters/cursor/framing.ts +39 -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/live-models.ts +180 -59
- package/src/adapters/cursor/live-transport.ts +623 -170
- package/src/adapters/cursor/message-mapper.ts +4 -1
- package/src/adapters/cursor/native-exec-common.ts +23 -2
- package/src/adapters/cursor/native-exec-desktop.ts +23 -0
- package/src/adapters/cursor/native-exec-fs.ts +10 -7
- package/src/adapters/cursor/native-exec-network.ts +1 -1
- package/src/adapters/cursor/native-exec-shell.ts +5 -3
- package/src/adapters/cursor/native-exec.ts +121 -14
- package/src/adapters/cursor/protobuf-events.ts +829 -11
- package/src/adapters/cursor/protobuf-request.ts +447 -75
- package/src/adapters/cursor/request-builder.ts +271 -35
- package/src/adapters/cursor/tool-definitions.ts +252 -12
- package/src/adapters/cursor/tool-result-normalize.ts +115 -0
- package/src/adapters/cursor/transport.ts +22 -0
- package/src/adapters/cursor/types.ts +48 -1
- package/src/adapters/cursor.ts +336 -39
- package/src/adapters/exec-tool-result-normalize.ts +99 -0
- package/src/adapters/google-antigravity-replay.ts +713 -41
- package/src/adapters/google-antigravity-wire.ts +48 -10
- package/src/adapters/google-errors.ts +44 -12
- package/src/adapters/google-http.ts +38 -10
- package/src/adapters/google-tool-schema.ts +80 -15
- package/src/adapters/google-truncation.ts +11 -0
- package/src/adapters/google.ts +742 -86
- package/src/adapters/identity.ts +39 -6
- package/src/adapters/image.ts +1 -1
- package/src/adapters/kiro-constants.ts +27 -0
- package/src/adapters/kiro-errors.ts +11 -0
- package/src/adapters/kiro-events.ts +19 -1
- package/src/adapters/kiro-thinking.ts +18 -2
- package/src/adapters/kiro-tools.ts +65 -17
- package/src/adapters/kiro.ts +270 -73
- package/src/adapters/mimo-free.ts +17 -0
- package/src/adapters/openai-chat-url.ts +11 -0
- package/src/adapters/openai-chat.ts +1377 -344
- package/src/adapters/openai-responses-url.ts +16 -0
- package/src/adapters/openai-responses.ts +1164 -64
- package/src/adapters/registry.ts +175 -0
- package/src/adapters/responses-tool-schema.ts +67 -0
- package/src/adapters/run-turn-queue.ts +36 -1
- package/src/adapters/tool-call-id.ts +119 -0
- package/src/adapters/tool-catalog-nudge.ts +105 -21
- package/src/adapters/xai-tool-schema.ts +436 -0
- package/src/adapters/xai-web-search.ts +186 -0
- package/src/bridge.ts +512 -92
- package/src/chat/inbound.ts +57 -20
- package/src/chat/outbound.ts +97 -33
- package/src/claude/agents-inject.ts +40 -10
- package/src/claude/context-windows.ts +37 -14
- package/src/claude/desktop-3p.ts +243 -9
- package/src/claude/gateway-cache.ts +41 -4
- package/src/claude/inbound.ts +72 -3
- package/src/claude/model-info.ts +38 -15
- package/src/claude/outbound.ts +88 -21
- package/src/cli/access.ts +46 -3
- package/src/cli/account-api.ts +150 -19
- package/src/cli/account-auth.ts +33 -6
- package/src/cli/account-catalog-refresh.ts +14 -0
- package/src/cli/account-extended.ts +648 -28
- package/src/cli/account-main.ts +317 -0
- package/src/cli/account.ts +97 -19
- package/src/cli/agent.ts +53 -2
- package/src/cli/alias.ts +66 -0
- package/src/cli/capabilities-command.ts +94 -0
- package/src/cli/capabilities.ts +496 -0
- package/src/cli/claude-agent-startup-sync.ts +73 -0
- package/src/cli/claude-desktop.ts +60 -15
- package/src/cli/claude.ts +129 -35
- package/src/cli/codex-log-guard-doctor.ts +103 -0
- package/src/cli/codex-shim-autorestore.ts +2 -0
- package/src/cli/codex-shim-readiness.ts +76 -0
- package/src/cli/combo.ts +8 -0
- package/src/cli/config-command.ts +74 -10
- package/src/cli/dispatch.ts +821 -0
- package/src/cli/doctor.ts +440 -56
- package/src/cli/ensure-desired-integrations.ts +152 -0
- package/src/cli/export-command.ts +46 -20
- package/src/cli/help.ts +34 -274
- package/src/cli/index.ts +417 -528
- package/src/cli/init.ts +5 -17
- package/src/cli/inspect.ts +230 -0
- package/src/cli/integrations.ts +120 -2
- 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 +130 -2
- package/src/cli/models.ts +118 -16
- package/src/cli/observe.ts +123 -11
- package/src/cli/opencode.ts +4 -2
- package/src/cli/provider-runtime.ts +34 -3
- package/src/cli/provider.ts +25 -3
- package/src/cli/ready.ts +301 -0
- package/src/cli/registry.ts +476 -0
- package/src/cli/root.ts +86 -0
- package/src/cli/route-policy.ts +92 -0
- package/src/cli/runtime-api.ts +57 -10
- package/src/cli/star-prompt.ts +71 -15
- package/src/cli/status.ts +51 -4
- package/src/cli/storage.ts +234 -0
- package/src/cli/system-command.ts +16 -0
- package/src/cli/system-restart-client.ts +146 -0
- package/src/cli/tray-proxy.ts +153 -6
- package/src/cli/usage-report.ts +184 -0
- package/src/cli/v2.ts +137 -18
- package/src/cli/version-skew.ts +46 -0
- package/src/cli.ts +1 -1
- package/src/clients/config-export.ts +1442 -23
- package/src/clients/effective-status.ts +30 -2
- package/src/clients/probes/cline.ts +81 -0
- package/src/codex/account-label.ts +35 -1
- package/src/codex/account-lifecycle.ts +130 -13
- package/src/codex/account-namespaces.ts +49 -3
- package/src/codex/account-pause.ts +2 -1
- package/src/codex/account-priority.ts +84 -0
- package/src/codex/account-store.ts +29 -2
- package/src/codex/account-usability.ts +25 -2
- package/src/codex/admission.ts +256 -0
- package/src/codex/affinity-debug.ts +162 -0
- package/src/codex/app-server-processes.ts +570 -107
- package/src/codex/app-server-restart-service.ts +232 -0
- package/src/codex/auth-api.ts +893 -246
- package/src/codex/auth-collision.ts +5 -3
- package/src/codex/auth-context.ts +348 -32
- package/src/codex/autostart-health.ts +24 -1
- package/src/codex/catalog/account-models.ts +67 -0
- package/src/codex/catalog/aggregation.ts +86 -10
- package/src/codex/catalog/bundled.ts +331 -33
- package/src/codex/catalog/effort.ts +138 -32
- package/src/codex/catalog/filesystem-evidence.ts +302 -0
- package/src/codex/catalog/kinds.ts +2 -0
- package/src/codex/catalog/metadata.ts +555 -45
- package/src/codex/catalog/native-models.ts +75 -0
- package/src/codex/catalog/parsing.ts +269 -30
- package/src/codex/catalog/provider-fetch.ts +1626 -144
- package/src/codex/catalog/sync.ts +1576 -187
- 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 +6 -3
- package/src/codex/codex-write-lock.ts +386 -0
- package/src/codex/convergence-types.ts +614 -0
- package/src/codex/convergence.ts +676 -0
- package/src/codex/coordinator-doctor.ts +332 -0
- package/src/codex/custom-model-catalog-migration.ts +176 -0
- package/src/codex/desired-state.ts +230 -0
- package/src/codex/desktop-app-restart.ts +355 -0
- package/src/codex/features.ts +636 -39
- package/src/codex/generation.ts +202 -0
- package/src/codex/history-job.ts +436 -0
- package/src/codex/history-lock.ts +242 -0
- package/src/codex/history-manifest.ts +112 -0
- package/src/codex/history-migration-guardian.ts +30 -24
- package/src/codex/history-provider.ts +1016 -235
- package/src/codex/history-transition.ts +105 -0
- package/src/codex/history-worker.ts +223 -0
- package/src/codex/inject-coordination.ts +373 -0
- package/src/codex/inject.ts +1114 -152
- package/src/codex/injected-marker.ts +37 -3
- package/src/codex/integration-record.ts +266 -0
- package/src/codex/internal/catalog-writer.ts +203 -0
- package/src/codex/internal/history-writer.ts +81 -0
- package/src/codex/journal.ts +66 -4
- package/src/codex/log-guard/inspect.ts +524 -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 +24 -0
- package/src/codex/main-account.ts +29 -1
- package/src/codex/management-convergence.ts +167 -0
- package/src/codex/model-cache.ts +56 -10
- package/src/codex/model-entitlements.ts +360 -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 +622 -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 +675 -0
- package/src/codex/paths.ts +80 -1
- package/src/codex/plan-from-token.ts +140 -0
- package/src/codex/plan.ts +40 -0
- package/src/codex/plugins-doctor.ts +1 -1
- package/src/codex/pool-rotation.ts +74 -4
- package/src/codex/project-config-warnings.ts +20 -6
- package/src/codex/prompt-journal.ts +352 -0
- package/src/codex/prompt-layers.ts +1313 -0
- package/src/codex/prompt-lock.ts +143 -0
- package/src/codex/prompt-text-probe.ts +238 -0
- package/src/codex/quota-rejection.ts +298 -0
- package/src/codex/quota.ts +264 -21
- package/src/codex/refresh.ts +11 -2
- package/src/codex/reset-credit-recovery.ts +1044 -0
- package/src/codex/routing.ts +514 -94
- package/src/codex/runtime.ts +159 -38
- package/src/codex/shim.ts +1065 -31
- package/src/codex/subagent-model-fallback.ts +437 -43
- package/src/codex/sync.ts +191 -2
- package/src/codex/transition-state.ts +720 -0
- package/src/codex/upstream-host-health.ts +368 -0
- package/src/codex/user-identity.ts +557 -0
- package/src/codex/warmup.ts +187 -81
- package/src/codex/write-coordination.ts +114 -0
- package/src/combos/failover.ts +47 -0
- package/src/combos/index.ts +4 -0
- package/src/combos/request.ts +32 -0
- package/src/combos/types.ts +91 -9
- package/src/compatibility/index.ts +26 -0
- package/src/compatibility/manifest.ts +253 -0
- package/src/compatibility/openai-responses.ts +121 -0
- package/src/config/atomic-write.ts +219 -0
- package/src/config/paths.ts +40 -0
- package/src/config/process-state.ts +309 -0
- package/src/config/provider-name.ts +24 -0
- package/src/config/provider-validation.ts +177 -0
- package/src/config/rebase-provenance.ts +68 -0
- package/src/config.ts +1713 -709
- package/src/generated/compatibility-version.json +3324 -0
- package/src/generated/{jawcode-model-metadata.ts → model-metadata.ts} +19 -17
- package/src/grok/inject.ts +16 -5
- package/src/grok/inspect.ts +45 -0
- package/src/grok/sync.ts +2 -2
- package/src/images/loop.ts +157 -33
- package/src/images/plan.ts +24 -13
- 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-policy.ts +160 -0
- package/src/integrations/ownership.ts +155 -0
- package/src/integrations/registry.ts +166 -0
- package/src/integrations/serialize.ts +314 -0
- package/src/integrations/state.ts +433 -0
- package/src/integrations/store.ts +103 -0
- package/src/integrations/writer-lock.ts +98 -0
- package/src/integrations/writer.ts +715 -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/admin-secrets.ts +24 -0
- package/src/lib/app-owned-memory-stores.ts +22 -0
- package/src/lib/bounded-body.ts +167 -11
- package/src/lib/bun-runtime.ts +125 -12
- package/src/lib/bun-stream-caps.ts +13 -9
- package/src/lib/codex-restart-contract.ts +120 -0
- package/src/lib/config-ownership.ts +26 -2
- package/src/lib/destination-policy.ts +65 -1
- package/src/lib/errors.ts +80 -5
- package/src/lib/fabric-task-execution-authority.ts +7 -0
- package/src/lib/fabric-task-host.ts +29 -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/optional-shutdown-hooks.ts +57 -0
- package/src/lib/package-tree-integrity.ts +101 -0
- package/src/lib/pinned-http.ts +145 -26
- package/src/lib/process-control.ts +6 -2
- package/src/lib/provider-outbound.ts +49 -9
- package/src/lib/redact.ts +419 -3
- package/src/lib/self-launch-argv.ts +15 -0
- package/src/lib/server-resource-ownership.ts +71 -0
- package/src/lib/service-secrets.ts +15 -0
- package/src/lib/shadow-call.ts +35 -4
- package/src/lib/sse-decoder.ts +41 -0
- package/src/lib/state-store-registrations.ts +10 -2
- package/src/lib/system-restart-contract.ts +73 -0
- package/src/lib/token-estimate.ts +19 -2
- package/src/lib/tool-argument-integers.ts +253 -0
- package/src/lib/translator-budget.ts +44 -0
- package/src/lib/upstream-http-version.ts +57 -0
- package/src/lib/upstream-reachability.ts +95 -0
- package/src/lib/upstream-retry.ts +156 -3
- package/src/lib/windows-atomic-replace.ts +155 -0
- package/src/lib/windows-elevation.ts +70 -2
- package/src/lib/windows-secret-acl.ts +409 -69
- 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 +33 -5
- 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.ts +12 -1
- package/src/oauth/callback-server.ts +30 -4
- package/src/oauth/chatgpt.ts +12 -1
- package/src/oauth/cline.ts +203 -0
- package/src/oauth/command-code.ts +239 -0
- package/src/oauth/cursor.ts +46 -5
- package/src/oauth/generic-account-failover.ts +231 -0
- package/src/oauth/google-antigravity.ts +35 -3
- package/src/oauth/health.ts +20 -12
- package/src/oauth/index.ts +462 -71
- package/src/oauth/key-providers.ts +25 -0
- package/src/oauth/kimi.ts +25 -3
- package/src/oauth/kiro.ts +95 -6
- package/src/oauth/local-token-detect.ts +13 -2
- package/src/oauth/log.ts +3 -1
- package/src/oauth/login-cli.ts +88 -28
- package/src/oauth/nous.ts +798 -0
- package/src/oauth/open-browser-choice.ts +26 -0
- package/src/oauth/store.ts +133 -26
- package/src/oauth/token-guardian.ts +9 -3
- package/src/oauth/types.ts +15 -0
- package/src/pi/models.ts +2 -2
- package/src/providers/alibaba-region-migration.ts +1 -1
- package/src/providers/antigravity-models.ts +521 -31
- package/src/providers/auto-compact-budget.ts +65 -0
- package/src/providers/base-url-choices.ts +10 -0
- package/src/providers/codex-capacity.ts +292 -0
- package/src/providers/command-code-efforts.ts +176 -0
- package/src/providers/context-cap.ts +26 -8
- package/src/providers/cursor-pool.ts +72 -0
- package/src/providers/default-aliases.ts +65 -0
- package/src/providers/derive.ts +281 -6
- package/src/providers/fastwire.ts +507 -0
- package/src/providers/free-directory.ts +10 -7
- package/src/providers/google-vertex-location.ts +14 -0
- package/src/providers/key-failover.ts +71 -3
- package/src/providers/label.ts +35 -2
- package/src/providers/model-discovery-limits.ts +16 -0
- package/src/providers/model-discovery.ts +115 -22
- package/src/providers/model-presets.ts +119 -0
- package/src/providers/model-rename-migration.ts +255 -0
- package/src/providers/model-rename-startup.ts +28 -0
- package/src/providers/new-model-policy.ts +146 -0
- package/src/providers/openai-sidecar.ts +72 -4
- package/src/providers/openai-tier-startup.ts +31 -2
- package/src/providers/openai-tiers.ts +119 -4
- package/src/providers/openai-virtual-models.ts +1 -0
- package/src/providers/opencode-zen-rate-limit.ts +102 -0
- package/src/providers/provider-id-rewrite.ts +30 -0
- package/src/providers/quota.ts +1379 -40
- package/src/providers/registry.ts +1545 -112
- package/src/providers/request-pacing.ts +310 -0
- package/src/providers/service-tier.ts +277 -0
- package/src/providers/slug-codec.ts +94 -6
- 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 +32 -4
- package/src/reasoning-effort.ts +68 -3
- package/src/responses/apply-patch-envelope.ts +63 -0
- package/src/responses/code-mode-helper-compat.ts +50 -0
- package/src/responses/compaction.ts +26 -1
- package/src/responses/custom-tool-compat.ts +384 -0
- package/src/responses/hosted-tool-policy.ts +9 -0
- package/src/responses/namespace-tool-compat.ts +435 -0
- package/src/responses/parser.ts +225 -38
- package/src/responses/provider-continuation.ts +98 -0
- package/src/responses/provider-opaque-metadata.ts +73 -0
- package/src/responses/reasoning-envelope.ts +9 -1
- package/src/responses/reasoning-replay-cache.ts +504 -0
- package/src/responses/schema.ts +12 -2
- package/src/responses/spill-store.ts +75 -10
- package/src/responses/state.ts +659 -31
- package/src/responses/thought-signature-replay.ts +364 -0
- package/src/responses/tool-search-compat.ts +301 -0
- package/src/responses/truncated-stop-reason.ts +60 -0
- package/src/responses/turn-termination.ts +107 -0
- package/src/router.ts +405 -31
- package/src/routing/analytics.ts +379 -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 +155 -0
- package/src/routing/request-evidence.ts +45 -0
- package/src/routing/trace.ts +776 -0
- package/src/server/adapter-resolve.ts +2 -29
- package/src/server/auth-cors.ts +289 -48
- package/src/server/background-lifecycle.ts +182 -0
- package/src/server/chat-completions.ts +154 -72
- package/src/server/chat-native-sse.ts +331 -0
- package/src/server/chat-native.ts +445 -0
- package/src/server/claude-messages.ts +160 -44
- package/src/server/direct-local-http.ts +347 -0
- package/src/server/effort-policy.ts +18 -0
- package/src/server/github-copilot-responses-repair.ts +338 -0
- package/src/server/gui-static.ts +39 -10
- package/src/server/images.ts +94 -12
- package/src/server/index.ts +1021 -190
- package/src/server/lifecycle.ts +336 -14
- package/src/server/live.ts +136 -17
- 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 +433 -116
- package/src/server/management/api-key-usage.ts +31 -5
- package/src/server/management/body.ts +6 -0
- package/src/server/management/codex-prompt-routes.ts +570 -0
- package/src/server/management/combo-routes.ts +64 -25
- package/src/server/management/config-routes.ts +511 -51
- package/src/server/management/context.ts +89 -2
- 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 +127 -52
- package/src/server/management/model-routes.ts +461 -133
- package/src/server/management/model-rows.ts +167 -0
- package/src/server/management/native-integration-routes.ts +770 -0
- package/src/server/management/oauth-account-routes.ts +90 -8
- package/src/server/management/provider-capability-config.ts +48 -0
- package/src/server/management/provider-routes.ts +836 -159
- package/src/server/management/request-history-routes.ts +191 -0
- package/src/server/management/route-registry.ts +332 -0
- package/src/server/management/routing-analytics-routes.ts +74 -0
- package/src/server/management/routing-profile-routes.ts +380 -0
- package/src/server/management/shared.ts +27 -11
- package/src/server/management/sidebar-routes.ts +47 -31
- 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 +289 -33
- package/src/server/management/system-routes.ts +77 -0
- package/src/server/management/usage-summary-cache.ts +9 -1
- 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 +126 -23
- package/src/server/management-auth.ts +220 -5
- package/src/server/passive-route-linker.ts +66 -0
- package/src/server/port-reclaim.ts +1 -1
- package/src/server/ports.ts +41 -1
- package/src/server/proxy-liveness.ts +161 -10
- package/src/server/readiness.ts +99 -0
- package/src/server/relay-eager.ts +221 -54
- package/src/server/relay.ts +479 -87
- package/src/server/request-decompress.ts +113 -6
- package/src/server/request-log-conversation.ts +51 -0
- package/src/server/request-log.ts +298 -31
- 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/codex-auth-error.ts +55 -0
- package/src/server/responses/collaboration.ts +239 -36
- package/src/server/responses/combo-stream-preflight.ts +178 -0
- package/src/server/responses/compact.ts +444 -72
- package/src/server/responses/core.ts +3579 -436
- package/src/server/responses/empty-completion-guard.ts +333 -0
- package/src/server/responses/encrypted-payload.ts +62 -39
- package/src/server/responses/fetch-helpers.ts +89 -99
- package/src/server/responses/input-admission.ts +187 -0
- package/src/server/responses/pacing-overload.ts +13 -0
- package/src/server/responses/passthrough-error.ts +33 -9
- package/src/server/responses/policy-fallback.ts +178 -0
- package/src/server/responses/responses-field-backfill.ts +343 -0
- package/src/server/responses/terminal-guard.ts +26 -5
- package/src/server/responses/upstream-error.ts +5 -0
- package/src/server/responses/ws-upstream.ts +381 -0
- package/src/server/responses-custom-tool-repair.ts +363 -0
- package/src/server/responses-item-id-repair.ts +54 -6
- 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 +363 -0
- package/src/server/responses-tool-search-repair.ts +267 -0
- package/src/server/responses-undeclared-tool-guard.ts +376 -0
- package/src/server/responses.ts +18 -2
- package/src/server/search.ts +78 -13
- package/src/server/sse-frame-buffer.ts +319 -0
- package/src/server/sse-payload-rewrite.ts +110 -22
- package/src/server/startup-action-control.ts +8 -1
- package/src/server/startup-health-cache.ts +19 -1
- package/src/server/system-env.ts +80 -9
- package/src/server/ws-bridge.ts +53 -40
- package/src/service-manager-probe.ts +892 -0
- package/src/service.ts +1153 -94
- package/src/sidecar/auth.ts +92 -0
- package/src/sidecar/candidates.ts +83 -0
- package/src/storage/cleanup.ts +2 -2
- package/src/storage/policy-job.ts +14 -4
- package/src/storage/policy.ts +88 -23
- package/src/storage/scanner.ts +1 -1
- package/src/storage/worker-lifecycle.ts +14 -14
- package/src/tray/windows-tray.ps1 +83 -9
- package/src/tray/windows.ts +43 -16
- package/src/types/accounts.ts +37 -0
- package/src/types/config.ts +911 -0
- package/src/types/provider.ts +614 -0
- package/src/types/request.ts +397 -0
- package/src/types/tools.ts +236 -0
- package/src/types/wire.ts +80 -0
- package/src/types.ts +107 -1237
- package/src/update/index.ts +37 -23
- package/src/update/job.ts +445 -68
- package/src/update/notify.ts +12 -6
- package/src/update/npm-cache-preflight.d.mts +47 -0
- package/src/update/npm-cache-preflight.mjs +201 -0
- package/src/update/transactional-install.d.mts +22 -0
- package/src/update/transactional-install.mjs +266 -0
- package/src/usage/cost.ts +0 -0
- package/src/usage/expected-prices.ts +287 -16
- package/src/usage/log.ts +666 -50
- package/src/usage/summary.ts +388 -17
- 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 +10 -6
- package/src/vision/backends.ts +97 -0
- package/src/vision/describe.ts +27 -16
- package/src/vision/eligibility.ts +250 -0
- package/src/vision/index.ts +238 -24
- 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 +13 -7
- package/src/web-search/backends.ts +108 -0
- package/src/web-search/exa-executor.ts +119 -0
- package/src/web-search/executor.ts +21 -6
- package/src/web-search/gemini-executor.ts +141 -0
- package/src/web-search/index.ts +150 -15
- package/src/web-search/loop.ts +284 -54
- package/src/web-search/parse.ts +125 -30
- package/src/web-search/sources.ts +60 -0
- package/src/web-search/xai-executor.ts +219 -0
- package/gui/dist/assets/index-DTpMHS4F.js +0 -67
- package/gui/dist/assets/index-ZNVDE3C7.css +0 -1
- package/gui/dist/provider-icons/antigravity.svg +0 -1
- package/gui/dist/provider-icons/claude.svg +0 -1
- package/gui/dist/provider-icons/copilot.svg +0 -1
- package/gui/dist/provider-icons/cursor.svg +0 -2
- package/gui/dist/provider-icons/gemini.svg +0 -1
- package/gui/dist/provider-icons/grok-color.svg +0 -1
- package/gui/dist/provider-icons/kiro.svg +0 -14
- package/src/cli/internal-dispatch.ts +0 -20
package/src/cli/init.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as readline from "node:readline";
|
|
2
|
-
import {
|
|
2
|
+
import { existsSync, readFileSync, unlinkSync } from "node:fs";
|
|
3
3
|
import { injectCodexConfig } from "../codex/inject";
|
|
4
|
-
import { classifyOpenAiTierBackup, getConfigPath, getDefaultConfig, isValidProviderName, saveConfig } from "../config";
|
|
4
|
+
import { classifyOpenAiTierBackup, getConfigPath, getDefaultConfig, isValidProviderName, preserveOpenAiTierRollbackSnapshot, saveConfig } from "../config";
|
|
5
5
|
import { enrichProviderFromCatalog } from "../oauth/key-providers";
|
|
6
6
|
import { deriveInitProviders } from "../providers/derive";
|
|
7
7
|
import type { OcxConfig, OcxProviderConfig } from "../types";
|
|
@@ -80,21 +80,8 @@ export function cleanupOpenAiTierBackupAfterInit(configPath = getConfigPath()):
|
|
|
80
80
|
unlinkSync(backup);
|
|
81
81
|
return;
|
|
82
82
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
// silently overwrite another rollback snapshot; retry with a sequence suffix.
|
|
86
|
-
for (let attempt = 0; attempt < 16; attempt++) {
|
|
87
|
-
const preserved = `${configPath}.pre-openai-tiers-v1-rollback.${Date.now()}${attempt ? `-${attempt}` : ""}.bak`;
|
|
88
|
-
try {
|
|
89
|
-
copyFileSync(backup, preserved, fsConstants.COPYFILE_EXCL);
|
|
90
|
-
} catch (error) {
|
|
91
|
-
if ((error as NodeJS.ErrnoException).code === "EEXIST") continue;
|
|
92
|
-
throw error;
|
|
93
|
-
}
|
|
94
|
-
unlinkSync(backup);
|
|
95
|
-
console.warn(`⚠️ Kept your pre-migration config rollback snapshot at ${preserved}`);
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
83
|
+
const preserved = preserveOpenAiTierRollbackSnapshot(configPath);
|
|
84
|
+
console.warn(`⚠️ Kept your pre-migration config rollback snapshot at ${preserved}`);
|
|
98
85
|
} catch { /* cleanup is best-effort; never block init on backup housekeeping */ }
|
|
99
86
|
}
|
|
100
87
|
|
|
@@ -178,6 +165,7 @@ export async function runInit(): Promise<void> {
|
|
|
178
165
|
port,
|
|
179
166
|
providers: { [providerName]: providerConfig },
|
|
180
167
|
defaultProvider: providerName,
|
|
168
|
+
modelDiscovery: { newModelPolicy: "off" },
|
|
181
169
|
};
|
|
182
170
|
|
|
183
171
|
saveConfig(config);
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ocx system-surface` — the remaining routes that had no CLI caller at all (wp7).
|
|
3
|
+
*
|
|
4
|
+
* These are grouped by what an operator is trying to do, not by which server module owns them:
|
|
5
|
+
* inspecting effective configuration, reading the generated client-config snippet, toggling the
|
|
6
|
+
* native client integrations, checking request pacing and routing analytics, and reading the
|
|
7
|
+
* Codex system prompt.
|
|
8
|
+
*
|
|
9
|
+
* One route here is deliberately READ-ONLY forever. `POST /api/github/star` spends the operator's
|
|
10
|
+
* GitHub identity, and no CLI flag can carry that consent — the server requires a real dashboard
|
|
11
|
+
* session for it. So `star` reads status and says what it cannot do, rather than offering a
|
|
12
|
+
* `--yes` that would be a lie.
|
|
13
|
+
*/
|
|
14
|
+
import {
|
|
15
|
+
CliUsageError,
|
|
16
|
+
printData,
|
|
17
|
+
rejectArgs,
|
|
18
|
+
runCliAction,
|
|
19
|
+
runtimeRequest,
|
|
20
|
+
summaryLines,
|
|
21
|
+
takeFlag,
|
|
22
|
+
takeOption,
|
|
23
|
+
type RuntimeApiDeps,
|
|
24
|
+
} from "./runtime-api";
|
|
25
|
+
|
|
26
|
+
const USAGE = `Usage:
|
|
27
|
+
ocx inspect config [--json]
|
|
28
|
+
ocx inspect catalog [--json]
|
|
29
|
+
ocx inspect routing-analytics [--json]
|
|
30
|
+
ocx inspect pacing [--name <provider>] [--json]
|
|
31
|
+
ocx inspect key-providers [--json]
|
|
32
|
+
ocx inspect codex-prompt [--text] [--json]
|
|
33
|
+
ocx inspect client-config --client <id> [--json]
|
|
34
|
+
ocx inspect star [--json]
|
|
35
|
+
ocx inspect windows-tray [--json]
|
|
36
|
+
ocx integration native [list] [--json]
|
|
37
|
+
ocx integration native <claude|claude-desktop|codex|grok> <on|off> [--json]
|
|
38
|
+
ocx agent request-user-input [on|off] [--json]`;
|
|
39
|
+
|
|
40
|
+
/** A read that takes no arguments beyond `--json`. */
|
|
41
|
+
async function read(path: string, argv: string[], deps: RuntimeApiDeps): Promise<void> {
|
|
42
|
+
const args = [...argv];
|
|
43
|
+
const wantsJson = takeFlag(args, "--json");
|
|
44
|
+
rejectArgs(args, USAGE);
|
|
45
|
+
const result = await runtimeRequest(path, {}, deps);
|
|
46
|
+
printData(result, wantsJson, summaryLines(result));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const NATIVE_CLIENTS = ["claude", "claude-desktop", "codex", "grok"] as const;
|
|
50
|
+
|
|
51
|
+
interface NativeClientRow {
|
|
52
|
+
clientId?: string;
|
|
53
|
+
state?: string;
|
|
54
|
+
installed?: boolean;
|
|
55
|
+
desiredEnabled?: boolean;
|
|
56
|
+
configPath?: string;
|
|
57
|
+
disableBlocked?: unknown;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* The shared depth-1 flattener renders an array as "N item(s)", so a bare
|
|
62
|
+
* `integration native list` printed `clients: 4 item(s)` -- the per-client state the operator
|
|
63
|
+
* asked for was in the payload and discarded before the terminal. Same defect class wp4 fixed
|
|
64
|
+
* for the account and key tables.
|
|
65
|
+
*/
|
|
66
|
+
function nativeLines(payload: unknown): string[] {
|
|
67
|
+
const clients = (payload as { clients?: NativeClientRow[] } | null)?.clients;
|
|
68
|
+
if (!Array.isArray(clients) || clients.length === 0) return ["No native client integrations reported."];
|
|
69
|
+
const lines = ["CLIENT STATE INSTALLED DESIRED CONFIG"];
|
|
70
|
+
for (const row of clients) {
|
|
71
|
+
lines.push([
|
|
72
|
+
(row.clientId ?? "?").padEnd(16),
|
|
73
|
+
(row.state ?? "?").padEnd(10),
|
|
74
|
+
(row.installed === true ? "yes" : row.installed === false ? "no" : "?").padEnd(10),
|
|
75
|
+
(row.desiredEnabled === true ? "on" : row.desiredEnabled === false ? "off" : "?").padEnd(8),
|
|
76
|
+
row.configPath ?? "",
|
|
77
|
+
].join(" ").trimEnd());
|
|
78
|
+
// A blocked disable is the reason a toggle did not take effect, so it is never silent.
|
|
79
|
+
if (row.disableBlocked !== null && row.disableBlocked !== undefined) {
|
|
80
|
+
lines.push(` disable blocked: ${typeof row.disableBlocked === "string" ? row.disableBlocked : JSON.stringify(row.disableBlocked)}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return lines;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async function nativeIntegration(argv: string[], deps: RuntimeApiDeps): Promise<void> {
|
|
87
|
+
const action = argv[0] && !argv[0].startsWith("-") ? argv[0] : "list";
|
|
88
|
+
const rest = argv[0] && !argv[0].startsWith("-") ? argv.slice(1) : argv;
|
|
89
|
+
|
|
90
|
+
if (action === "list") {
|
|
91
|
+
const args = [...rest];
|
|
92
|
+
const wantsJson = takeFlag(args, "--json");
|
|
93
|
+
rejectArgs(args, USAGE);
|
|
94
|
+
const result = await runtimeRequest("/api/native-integrations", {}, deps);
|
|
95
|
+
printData(result, wantsJson, nativeLines(result));
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (!(NATIVE_CLIENTS as readonly string[]).includes(action)) {
|
|
100
|
+
throw new CliUsageError(`unknown native client ${action}; expected one of ${NATIVE_CLIENTS.join(", ")}`, USAGE);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const args = [...rest];
|
|
104
|
+
const wantsJson = takeFlag(args, "--json");
|
|
105
|
+
const state = args.shift();
|
|
106
|
+
rejectArgs(args, USAGE);
|
|
107
|
+
if (state !== "on" && state !== "off") {
|
|
108
|
+
throw new CliUsageError(`expected on or off after ${action}`, USAGE);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Toggling rewrites the client's own config file, which is why each client has its own route
|
|
112
|
+
// rather than one route with a client parameter.
|
|
113
|
+
const result = await runtimeRequest(`/api/native-integrations/${action}`, {
|
|
114
|
+
method: "PUT",
|
|
115
|
+
headers: { "content-type": "application/json" },
|
|
116
|
+
body: JSON.stringify({ enabled: state === "on" }),
|
|
117
|
+
}, deps);
|
|
118
|
+
printData(result, wantsJson, summaryLines(result));
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Exported unwrapped so `ocx agent request-user-input` can call it INSIDE its own
|
|
123
|
+
* `runCliAction`. Wrapping an already-wrapped handler reports one failure twice: the inner
|
|
124
|
+
* wrapper prints the error and returns a code, and the outer one prints again on the rethrow.
|
|
125
|
+
*/
|
|
126
|
+
export async function requestUserInputAction(argv: string[], deps: RuntimeApiDeps): Promise<void> {
|
|
127
|
+
const args = [...argv];
|
|
128
|
+
const wantsJson = takeFlag(args, "--json");
|
|
129
|
+
const state = args.shift();
|
|
130
|
+
rejectArgs(args, USAGE);
|
|
131
|
+
|
|
132
|
+
const path = "/api/codex-auth/features/default-mode-request-user-input";
|
|
133
|
+
// No argument means show. A read must not write the value it is reporting.
|
|
134
|
+
if (state === undefined) {
|
|
135
|
+
const result = await runtimeRequest(path, {}, deps);
|
|
136
|
+
printData(result, wantsJson, summaryLines(result));
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (state !== "on" && state !== "off") throw new CliUsageError("expected on or off", USAGE);
|
|
140
|
+
|
|
141
|
+
const result = await runtimeRequest(path, {
|
|
142
|
+
method: "PUT",
|
|
143
|
+
headers: { "content-type": "application/json" },
|
|
144
|
+
body: JSON.stringify({ enabled: state === "on" }),
|
|
145
|
+
}, deps);
|
|
146
|
+
printData(result, wantsJson, summaryLines(result));
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
async function clientConfig(argv: string[], deps: RuntimeApiDeps): Promise<void> {
|
|
150
|
+
const args = [...argv];
|
|
151
|
+
const wantsJson = takeFlag(args, "--json");
|
|
152
|
+
const client = takeOption(args, "--client");
|
|
153
|
+
rejectArgs(args, USAGE);
|
|
154
|
+
if (!client) throw new CliUsageError("--client is required", USAGE);
|
|
155
|
+
// The valid client list is not duplicated here: the route answers 400 naming every accepted id,
|
|
156
|
+
// which is more useful than a local list that can drift out of date.
|
|
157
|
+
const result = await runtimeRequest(`/api/client-config?client=${encodeURIComponent(client)}`, {}, deps);
|
|
158
|
+
printData(result, wantsJson, summaryLines(result));
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
async function pacing(argv: string[], deps: RuntimeApiDeps): Promise<void> {
|
|
162
|
+
const args = [...argv];
|
|
163
|
+
const wantsJson = takeFlag(args, "--json");
|
|
164
|
+
const name = takeOption(args, "--name");
|
|
165
|
+
rejectArgs(args, USAGE);
|
|
166
|
+
const suffix = name ? `?name=${encodeURIComponent(name)}` : "";
|
|
167
|
+
const result = await runtimeRequest(`/api/provider-request-pacing${suffix}`, {}, deps);
|
|
168
|
+
printData(result, wantsJson, summaryLines(result));
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
async function codexPrompt(argv: string[], deps: RuntimeApiDeps): Promise<void> {
|
|
172
|
+
const args = [...argv];
|
|
173
|
+
const wantsJson = takeFlag(args, "--json");
|
|
174
|
+
const asText = takeFlag(args, "--text");
|
|
175
|
+
rejectArgs(args, USAGE);
|
|
176
|
+
if (asText && wantsJson) throw new CliUsageError("--text and --json cannot be combined", USAGE);
|
|
177
|
+
if (asText) {
|
|
178
|
+
// The /text variant answers the prompt body itself, so it is printed verbatim rather than
|
|
179
|
+
// flattened through the summary renderer.
|
|
180
|
+
const result = await runtimeRequest<unknown>("/api/codex-prompt/text", {}, deps);
|
|
181
|
+
console.log(typeof result === "string" ? result : JSON.stringify(result, null, 2));
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const result = await runtimeRequest("/api/codex-prompt", {}, deps);
|
|
185
|
+
printData(result, wantsJson, summaryLines(result));
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
async function star(argv: string[], deps: RuntimeApiDeps): Promise<void> {
|
|
189
|
+
const args = [...argv];
|
|
190
|
+
const wantsJson = takeFlag(args, "--json");
|
|
191
|
+
rejectArgs(args, USAGE);
|
|
192
|
+
const result = await runtimeRequest<Record<string, unknown>>("/api/github/star", {}, deps);
|
|
193
|
+
if (wantsJson) {
|
|
194
|
+
printData(result, true);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
printData(result, false, summaryLines(result));
|
|
198
|
+
// Said plainly, because the natural next question is "then star it", and the answer is that no
|
|
199
|
+
// CLI invocation can: the POST requires a dashboard session precisely so an agent cannot spend
|
|
200
|
+
// the operator's identity on their behalf.
|
|
201
|
+
console.log("Starring is not available from the CLI: it uses your GitHub identity, so only you can do it from the dashboard.");
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
export async function handleInspectCommand(argv: string[], deps: RuntimeApiDeps = {}): Promise<number> {
|
|
205
|
+
return runCliAction(async () => {
|
|
206
|
+
const hasSub = argv[0] !== undefined && !argv[0].startsWith("-");
|
|
207
|
+
const sub = hasSub ? argv[0]! : "config";
|
|
208
|
+
const rest = hasSub ? argv.slice(1) : argv;
|
|
209
|
+
if (sub === "config") await read("/api/config", rest, deps);
|
|
210
|
+
else if (sub === "catalog") await read("/api/catalog", rest, deps);
|
|
211
|
+
else if (sub === "routing-analytics") await read("/api/routing-analytics", rest, deps);
|
|
212
|
+
else if (sub === "key-providers") await read("/api/key-providers", rest, deps);
|
|
213
|
+
else if (sub === "windows-tray") await read("/api/windows-tray", rest, deps);
|
|
214
|
+
else if (sub === "pacing") await pacing(rest, deps);
|
|
215
|
+
else if (sub === "client-config") await clientConfig(rest, deps);
|
|
216
|
+
else if (sub === "codex-prompt") await codexPrompt(rest, deps);
|
|
217
|
+
else if (sub === "star") await star(rest, deps);
|
|
218
|
+
else throw new CliUsageError(`unknown inspect command ${sub}`, USAGE);
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
export async function handleIntegrationCommand(argv: string[], deps: RuntimeApiDeps = {}): Promise<number> {
|
|
223
|
+
return runCliAction(async () => {
|
|
224
|
+
const [sub, ...rest] = argv;
|
|
225
|
+
if (sub === "native" || sub === undefined) await nativeIntegration(sub === undefined ? [] : rest, deps);
|
|
226
|
+
else throw new CliUsageError(`unknown integration command ${sub}`, USAGE);
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export const INSPECT_USAGE = USAGE;
|
package/src/cli/integrations.ts
CHANGED
|
@@ -18,7 +18,7 @@ const CLAUDE_USAGE = `Usage:
|
|
|
18
18
|
[--system-env <on|off>] [--fast-mode <on|off>] [--auto-context <on|off>]
|
|
19
19
|
[--compact-window <tokens|default>] [--inject-agents <on|off>]
|
|
20
20
|
[--small-fast-model <id|->] [--model-map <from=to,from=to|->]
|
|
21
|
-
[--blocked-skills <name,name|->] [--web-model <id|->] [--web-backend <openai|anthropic|->]
|
|
21
|
+
[--blocked-skills <name,name|->] [--web-model <id|->] [--web-backend <openai|anthropic|xai|gemini|exa|->]
|
|
22
22
|
[--vision-model <id|->] [--vision-backend <openai|anthropic|->] [--json]`;
|
|
23
23
|
|
|
24
24
|
const GROK_USAGE = `Usage:
|
|
@@ -27,6 +27,12 @@ const GROK_USAGE = `Usage:
|
|
|
27
27
|
ocx grok clear [--json]
|
|
28
28
|
ocx grok apply [--json]`;
|
|
29
29
|
|
|
30
|
+
const CLIENT_USAGE = `Usage:
|
|
31
|
+
ocx integration client [status] [--client <id>] [--json]
|
|
32
|
+
ocx integration client <enable|disable> --client <id> [--json]
|
|
33
|
+
ocx integration client history [--client <id>] [--json]
|
|
34
|
+
ocx integration client restore --op <opId> [--confirm-drift] [--json]`;
|
|
35
|
+
|
|
30
36
|
function parseMap(raw: string): Record<string, string> {
|
|
31
37
|
if (raw === "-") return {};
|
|
32
38
|
const map: Record<string, string> = {};
|
|
@@ -139,4 +145,116 @@ export async function handleGrokCommand(argv: string[], deps: RuntimeApiDeps = {
|
|
|
139
145
|
});
|
|
140
146
|
}
|
|
141
147
|
|
|
142
|
-
|
|
148
|
+
/**
|
|
149
|
+
* The headless half of the client-integration toggle.
|
|
150
|
+
*
|
|
151
|
+
* Every safety property lives behind the management API — ownership, the
|
|
152
|
+
* pre-write snapshot, the journal, the drift refusal — so this command is a
|
|
153
|
+
* thin caller and deliberately re-implements none of it. That is also why
|
|
154
|
+
* `restore` surfaces the drift refusal as an error telling the user to pass
|
|
155
|
+
* `--confirm-drift` rather than retrying on their behalf: replacing edits a
|
|
156
|
+
* user made after the snapshot is exactly the decision they have to make.
|
|
157
|
+
*/
|
|
158
|
+
export async function handleClientIntegrationCommand(
|
|
159
|
+
argv: string[],
|
|
160
|
+
deps: RuntimeApiDeps = {},
|
|
161
|
+
): Promise<number> {
|
|
162
|
+
return runCliAction(async () => {
|
|
163
|
+
const args = [...argv];
|
|
164
|
+
const action = (args.shift() ?? "status").toLowerCase();
|
|
165
|
+
const wantsJson = takeFlag(args, "--json");
|
|
166
|
+
|
|
167
|
+
if (action === "status" || action === "show" || action === "list") {
|
|
168
|
+
const client = takeOption(args, "--client");
|
|
169
|
+
rejectArgs(args, CLIENT_USAGE);
|
|
170
|
+
const path = client
|
|
171
|
+
? `/api/client-integrations/${encodeURIComponent(client)}`
|
|
172
|
+
: "/api/client-integrations";
|
|
173
|
+
const result = await runtimeRequest(path, {}, deps);
|
|
174
|
+
const rows = (result as { clients?: Array<Record<string, unknown>> }).clients;
|
|
175
|
+
printData(result, wantsJson, rows
|
|
176
|
+
? rows.map(row => `${String(row.clientId)}: ${String(row.state)}${row.installed ? "" : " (not installed)"}`)
|
|
177
|
+
: summaryLines(result));
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (action === "history" || action === "journal") {
|
|
182
|
+
const client = takeOption(args, "--client");
|
|
183
|
+
rejectArgs(args, CLIENT_USAGE);
|
|
184
|
+
const query = client ? `?client=${encodeURIComponent(client)}` : "";
|
|
185
|
+
const result = await runtimeRequest(`/api/client-integrations/journal${query}`, {}, deps);
|
|
186
|
+
const operations = (result as { operations?: Array<Record<string, unknown>> }).operations ?? [];
|
|
187
|
+
printData(result, wantsJson, operations.length === 0
|
|
188
|
+
? ["No integration operations recorded yet."]
|
|
189
|
+
: operations.map(row => {
|
|
190
|
+
// `snapshot` is resolved against the disk by the route, so "expired"
|
|
191
|
+
// here means the bytes are genuinely gone, not merely old.
|
|
192
|
+
const backup = row.snapshot === "expired" ? "backup expired" : `op ${String(row.opId)}`;
|
|
193
|
+
return `${String(row.at)} ${String(row.clientId)} ${String(row.kind)} (${backup})`;
|
|
194
|
+
}));
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
if (action === "restore") {
|
|
199
|
+
const opId = takeOption(args, "--op") ?? takeOption(args, "--op-id");
|
|
200
|
+
const confirmDrift = takeFlag(args, "--confirm-drift");
|
|
201
|
+
rejectArgs(args, CLIENT_USAGE);
|
|
202
|
+
if (!opId) throw new CliUsageError("--op <opId> is required", CLIENT_USAGE);
|
|
203
|
+
const result = await runtimeRequest("/api/client-integrations/restore", {
|
|
204
|
+
method: "POST",
|
|
205
|
+
body: JSON.stringify({ opId, confirmDrift }),
|
|
206
|
+
}, deps);
|
|
207
|
+
printData(result, wantsJson, [String((result as Record<string, unknown>).message ?? "Restored.")]);
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
if (action !== "enable" && action !== "disable") {
|
|
212
|
+
throw new CliUsageError(`unknown client integration command ${action}`, CLIENT_USAGE);
|
|
213
|
+
}
|
|
214
|
+
const client = takeOption(args, "--client");
|
|
215
|
+
rejectArgs(args, CLIENT_USAGE);
|
|
216
|
+
if (!client) throw new CliUsageError("--client <id> is required", CLIENT_USAGE);
|
|
217
|
+
const result = await runtimeRequest(`/api/client-integrations/${encodeURIComponent(client)}`, {
|
|
218
|
+
method: "PUT",
|
|
219
|
+
body: JSON.stringify({ enabled: action === "enable" }),
|
|
220
|
+
}, deps);
|
|
221
|
+
printData(result, wantsJson, [String((result as Record<string, unknown>).message ?? `${client} ${action}d.`)]);
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
export const INTEGRATION_USAGE = { claude: CLAUDE_USAGE, grok: GROK_USAGE, client: CLIENT_USAGE };
|
|
226
|
+
|
|
227
|
+
const ZCODE_USAGE = `Usage:
|
|
228
|
+
ocx zcode [status] [--json]
|
|
229
|
+
ocx zcode <enable|disable> [--json]
|
|
230
|
+
ocx zcode history [--json]
|
|
231
|
+
ocx zcode restore --op <opId> [--confirm-drift] [--json]`;
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Thin alias over the client-integration surface for ZCode (Z.ai's desktop
|
|
235
|
+
* client). ZCode is a GUI app with no launch surface to wrap, so unlike
|
|
236
|
+
* `ocx mcode` there is no exec step: connecting the managed provider block is
|
|
237
|
+
* the whole integration, and every safety property (ownership, snapshots,
|
|
238
|
+
* journal, drift refusal) stays behind the shared management API. ZCode reads
|
|
239
|
+
* its config at startup, so enable/disable print a restart reminder.
|
|
240
|
+
*/
|
|
241
|
+
export async function handleZcodeCommand(argv: string[], deps: RuntimeApiDeps = {}): Promise<number> {
|
|
242
|
+
const args = [...argv];
|
|
243
|
+
// Find the first non-flag token so `ocx zcode --json enable` still enables.
|
|
244
|
+
const verbIndex = args.findIndex(arg => !arg.startsWith("-"));
|
|
245
|
+
const action = (verbIndex === -1 ? "status" : args[verbIndex]).toLowerCase();
|
|
246
|
+
const known = ["status", "show", "list", "enable", "disable", "history", "journal", "restore"];
|
|
247
|
+
if (!known.includes(action)) {
|
|
248
|
+
console.error(`unknown zcode command ${action}`);
|
|
249
|
+
console.error(ZCODE_USAGE);
|
|
250
|
+
return 2;
|
|
251
|
+
}
|
|
252
|
+
const rest = verbIndex === -1 ? args : [...args.slice(0, verbIndex), ...args.slice(verbIndex + 1)];
|
|
253
|
+
// `restore` addresses an operation id, not a client, so nothing is injected.
|
|
254
|
+
const forwarded = action === "restore" ? [action, ...rest] : [action, ...rest, "--client", "zcode"];
|
|
255
|
+
const code = await handleClientIntegrationCommand(forwarded, deps);
|
|
256
|
+
if (code === 0 && (action === "enable" || action === "disable")) {
|
|
257
|
+
console.error("Restart ZCode to pick up the provider change.");
|
|
258
|
+
}
|
|
259
|
+
return code;
|
|
260
|
+
}
|