@iislee/opencodex 2.11.0 → 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.
Files changed (675) hide show
  1. package/AGENTS_INSTALL.md +109 -0
  2. package/README.md +114 -19
  3. package/bin/ocx.mjs +164 -36
  4. package/bin/package-main.mjs +1 -1
  5. package/gui/dist/assets/index-BF38heuV.js +104 -0
  6. package/gui/dist/assets/index-DMiI18Kv.css +1 -0
  7. package/gui/dist/index.html +2 -2
  8. package/gui/dist/provider-icons/alibaba-color.svg +1 -1
  9. package/gui/dist/provider-icons/antigravity-color.svg +1 -1
  10. package/gui/dist/provider-icons/claude-color.svg +1 -1
  11. package/gui/dist/provider-icons/cline-color.svg +16 -0
  12. package/gui/dist/provider-icons/cloudflare-ai-gateway-color.svg +1 -1
  13. package/gui/dist/provider-icons/commandcode-color.svg +1 -0
  14. package/gui/dist/provider-icons/copilot-color.svg +1 -1
  15. package/gui/dist/provider-icons/cursor-color.svg +1 -1
  16. package/gui/dist/provider-icons/deepseek-color.svg +1 -1
  17. package/gui/dist/provider-icons/firepass-color.svg +1 -1
  18. package/gui/dist/provider-icons/fireworks-color.svg +1 -1
  19. package/gui/dist/provider-icons/gemini-color.svg +1 -1
  20. package/gui/dist/provider-icons/github-copilot-color.svg +1 -1
  21. package/gui/dist/provider-icons/gitlab-duo-color.svg +1 -1
  22. package/gui/dist/provider-icons/grok.svg +1 -1
  23. package/gui/dist/provider-icons/groq-color.svg +1 -1
  24. package/gui/dist/provider-icons/huggingface-color.svg +1 -1
  25. package/gui/dist/provider-icons/kimi-color.svg +1 -1
  26. package/gui/dist/provider-icons/kiro-color.svg +2 -2
  27. package/gui/dist/provider-icons/lm-studio-color.svg +1 -1
  28. package/gui/dist/provider-icons/mistral-color.svg +1 -1
  29. package/gui/dist/provider-icons/moonshot-color.svg +1 -1
  30. package/gui/dist/provider-icons/nvidia-color.svg +1 -1
  31. package/gui/dist/provider-icons/ollama-color.svg +1 -1
  32. package/gui/dist/provider-icons/openai.svg +1 -1
  33. package/gui/dist/provider-icons/opencode.svg +2 -1
  34. package/gui/dist/provider-icons/openrouter-color.svg +1 -1
  35. package/gui/dist/provider-icons/pi.svg +2 -2
  36. package/gui/dist/provider-icons/qianfan-color.svg +1 -1
  37. package/gui/dist/provider-icons/qwen-portal-color.svg +1 -1
  38. package/gui/dist/provider-icons/vercel-ai-gateway-color.svg +1 -1
  39. package/gui/dist/provider-icons/vllm-color.svg +1 -1
  40. package/gui/dist/provider-icons/xiaomi-color.svg +1 -1
  41. package/package.json +19 -10
  42. package/src/adapters/anthropic-output-schema.ts +137 -0
  43. package/src/adapters/anthropic.ts +376 -52
  44. package/src/adapters/base.ts +54 -7
  45. package/src/adapters/client-fingerprint.ts +18 -12
  46. package/src/adapters/cline-pass-deepseek-v4-tool-replay.ts +69 -0
  47. package/src/adapters/command-code.ts +601 -0
  48. package/src/adapters/cursor/checkpoint-store.ts +303 -0
  49. package/src/adapters/cursor/cursor-errors.ts +129 -6
  50. package/src/adapters/cursor/discovery.ts +61 -4
  51. package/src/adapters/cursor/effort-map.ts +27 -3
  52. package/src/adapters/cursor/framing.ts +39 -0
  53. package/src/adapters/cursor/h2-pool.ts +123 -0
  54. package/src/adapters/cursor/http1-bidi.ts +361 -0
  55. package/src/adapters/cursor/images.ts +704 -0
  56. package/src/adapters/cursor/live-models.ts +174 -58
  57. package/src/adapters/cursor/live-transport.ts +609 -170
  58. package/src/adapters/cursor/native-exec-common.ts +23 -2
  59. package/src/adapters/cursor/native-exec-fs.ts +10 -7
  60. package/src/adapters/cursor/native-exec-network.ts +1 -1
  61. package/src/adapters/cursor/native-exec-shell.ts +0 -1
  62. package/src/adapters/cursor/native-exec.ts +101 -14
  63. package/src/adapters/cursor/protobuf-events.ts +829 -11
  64. package/src/adapters/cursor/protobuf-request.ts +383 -65
  65. package/src/adapters/cursor/request-builder.ts +237 -31
  66. package/src/adapters/cursor/tool-definitions.ts +242 -12
  67. package/src/adapters/cursor/tool-result-normalize.ts +92 -0
  68. package/src/adapters/cursor/transport.ts +22 -0
  69. package/src/adapters/cursor/types.ts +28 -1
  70. package/src/adapters/cursor.ts +133 -7
  71. package/src/adapters/google-antigravity-replay.ts +558 -34
  72. package/src/adapters/google-antigravity-wire.ts +43 -10
  73. package/src/adapters/google-http.ts +38 -10
  74. package/src/adapters/google-tool-schema.ts +80 -15
  75. package/src/adapters/google-truncation.ts +11 -0
  76. package/src/adapters/google.ts +618 -74
  77. package/src/adapters/identity.ts +39 -6
  78. package/src/adapters/kiro-errors.ts +11 -0
  79. package/src/adapters/kiro-events.ts +19 -1
  80. package/src/adapters/kiro-thinking.ts +18 -2
  81. package/src/adapters/kiro-tools.ts +10 -1
  82. package/src/adapters/kiro.ts +92 -54
  83. package/src/adapters/mimo-free.ts +17 -0
  84. package/src/adapters/openai-chat-url.ts +11 -0
  85. package/src/adapters/openai-chat.ts +1311 -336
  86. package/src/adapters/openai-responses-url.ts +16 -0
  87. package/src/adapters/openai-responses.ts +830 -56
  88. package/src/adapters/registry.ts +175 -0
  89. package/src/adapters/responses-tool-schema.ts +67 -0
  90. package/src/adapters/tool-call-id.ts +119 -0
  91. package/src/adapters/tool-catalog-nudge.ts +104 -21
  92. package/src/adapters/xai-web-search.ts +185 -0
  93. package/src/bridge.ts +428 -61
  94. package/src/chat/inbound.ts +43 -19
  95. package/src/chat/outbound.ts +82 -26
  96. package/src/claude/agents-inject.ts +32 -9
  97. package/src/claude/context-windows.ts +21 -5
  98. package/src/claude/desktop-3p.ts +243 -9
  99. package/src/claude/gateway-cache.ts +41 -4
  100. package/src/claude/inbound.ts +72 -3
  101. package/src/claude/model-info.ts +38 -15
  102. package/src/claude/outbound.ts +70 -16
  103. package/src/cli/account-api.ts +35 -1
  104. package/src/cli/account-auth.ts +33 -6
  105. package/src/cli/account-catalog-refresh.ts +14 -0
  106. package/src/cli/account-extended.ts +389 -2
  107. package/src/cli/account-main.ts +317 -0
  108. package/src/cli/account.ts +30 -6
  109. package/src/cli/agent.ts +45 -1
  110. package/src/cli/claude-agent-startup-sync.ts +73 -0
  111. package/src/cli/claude-desktop.ts +29 -4
  112. package/src/cli/claude.ts +103 -34
  113. package/src/cli/codex-log-guard-doctor.ts +103 -0
  114. package/src/cli/codex-shim-autorestore.ts +2 -0
  115. package/src/cli/codex-shim-readiness.ts +76 -0
  116. package/src/cli/combo.ts +8 -0
  117. package/src/cli/config-command.ts +74 -10
  118. package/src/cli/dispatch.ts +593 -0
  119. package/src/cli/doctor.ts +315 -43
  120. package/src/cli/ensure-desired-integrations.ts +152 -0
  121. package/src/cli/export-command.ts +46 -20
  122. package/src/cli/help.ts +20 -271
  123. package/src/cli/index.ts +378 -519
  124. package/src/cli/init.ts +4 -17
  125. package/src/cli/integrations.ts +120 -2
  126. package/src/cli/lab.ts +607 -0
  127. package/src/cli/launcher-context.ts +77 -0
  128. package/src/cli/minimax.ts +497 -0
  129. package/src/cli/models-runtime.ts +35 -2
  130. package/src/cli/models.ts +100 -14
  131. package/src/cli/observe.ts +92 -3
  132. package/src/cli/opencode.ts +4 -2
  133. package/src/cli/provider-runtime.ts +18 -1
  134. package/src/cli/provider.ts +24 -3
  135. package/src/cli/ready.ts +301 -0
  136. package/src/cli/registry.ts +437 -0
  137. package/src/cli/root.ts +86 -0
  138. package/src/cli/route-policy.ts +92 -0
  139. package/src/cli/runtime-api.ts +6 -3
  140. package/src/cli/star-prompt.ts +71 -15
  141. package/src/cli/status.ts +10 -3
  142. package/src/cli/system-restart-client.ts +146 -0
  143. package/src/cli/tray-proxy.ts +153 -6
  144. package/src/cli/v2.ts +105 -10
  145. package/src/cli.ts +1 -1
  146. package/src/clients/config-export.ts +1358 -21
  147. package/src/codex/account-label.ts +14 -1
  148. package/src/codex/account-lifecycle.ts +130 -13
  149. package/src/codex/account-namespaces.ts +49 -3
  150. package/src/codex/account-priority.ts +83 -0
  151. package/src/codex/account-store.ts +29 -2
  152. package/src/codex/account-usability.ts +25 -2
  153. package/src/codex/admission.ts +256 -0
  154. package/src/codex/affinity-debug.ts +162 -0
  155. package/src/codex/app-server-processes.ts +493 -106
  156. package/src/codex/app-server-restart-service.ts +232 -0
  157. package/src/codex/auth-api.ts +849 -242
  158. package/src/codex/auth-collision.ts +5 -3
  159. package/src/codex/auth-context.ts +345 -32
  160. package/src/codex/autostart-health.ts +8 -1
  161. package/src/codex/catalog/account-models.ts +67 -0
  162. package/src/codex/catalog/aggregation.ts +68 -10
  163. package/src/codex/catalog/bundled.ts +331 -33
  164. package/src/codex/catalog/effort.ts +121 -30
  165. package/src/codex/catalog/filesystem-evidence.ts +302 -0
  166. package/src/codex/catalog/kinds.ts +2 -0
  167. package/src/codex/catalog/metadata.ts +529 -45
  168. package/src/codex/catalog/native-models.ts +72 -0
  169. package/src/codex/catalog/parsing.ts +224 -30
  170. package/src/codex/catalog/provider-fetch.ts +1460 -134
  171. package/src/codex/catalog/sync.ts +1449 -186
  172. package/src/codex/catalog-admission.ts +199 -0
  173. package/src/codex/catalog-refresh-status.ts +105 -0
  174. package/src/codex/catalog-write-serialization.ts +242 -0
  175. package/src/codex/catalog.ts +6 -3
  176. package/src/codex/codex-write-lock.ts +384 -0
  177. package/src/codex/convergence-types.ts +614 -0
  178. package/src/codex/convergence.ts +651 -0
  179. package/src/codex/coordinator-doctor.ts +332 -0
  180. package/src/codex/custom-model-catalog-migration.ts +176 -0
  181. package/src/codex/desired-state.ts +230 -0
  182. package/src/codex/features.ts +636 -39
  183. package/src/codex/generation.ts +202 -0
  184. package/src/codex/history-job.ts +407 -0
  185. package/src/codex/history-lock.ts +242 -0
  186. package/src/codex/history-migration-guardian.ts +26 -20
  187. package/src/codex/history-provider.ts +231 -28
  188. package/src/codex/history-transition.ts +105 -0
  189. package/src/codex/history-worker.ts +220 -0
  190. package/src/codex/inject-coordination.ts +290 -0
  191. package/src/codex/inject.ts +1073 -152
  192. package/src/codex/injected-marker.ts +37 -3
  193. package/src/codex/integration-record.ts +266 -0
  194. package/src/codex/internal/catalog-writer.ts +203 -0
  195. package/src/codex/internal/history-writer.ts +80 -0
  196. package/src/codex/journal.ts +66 -4
  197. package/src/codex/log-guard/inspect.ts +506 -0
  198. package/src/codex/log-guard/lock.ts +150 -0
  199. package/src/codex/log-guard/maintenance.ts +403 -0
  200. package/src/codex/log-guard/path-safety.ts +88 -0
  201. package/src/codex/log-guard/policy.ts +44 -0
  202. package/src/codex/log-guard/processes.ts +205 -0
  203. package/src/codex/log-guard/protection.ts +489 -0
  204. package/src/codex/log-guard/sqlite-errors.ts +9 -0
  205. package/src/codex/main-account-cache.ts +24 -0
  206. package/src/codex/main-account.ts +29 -1
  207. package/src/codex/management-convergence.ts +167 -0
  208. package/src/codex/model-cache.ts +56 -10
  209. package/src/codex/model-entitlements.ts +353 -0
  210. package/src/codex/native-main-admission.ts +47 -0
  211. package/src/codex/native-main-auth-temp.ts +187 -0
  212. package/src/codex/native-main-claim.ts +178 -0
  213. package/src/codex/native-main-lock-file.ts +162 -0
  214. package/src/codex/native-main-owner.ts +329 -0
  215. package/src/codex/native-profile-api.ts +247 -0
  216. package/src/codex/native-profile-manager.ts +1531 -0
  217. package/src/codex/native-profile-processes.ts +121 -0
  218. package/src/codex/native-profile-recovery.ts +99 -0
  219. package/src/codex/native-profile-stage-store.ts +387 -0
  220. package/src/codex/native-profile-startup.ts +492 -0
  221. package/src/codex/native-profile-store.ts +855 -0
  222. package/src/codex/native-profile-types.ts +120 -0
  223. package/src/codex/native-residue.ts +682 -0
  224. package/src/codex/paths.ts +80 -1
  225. package/src/codex/plan-from-token.ts +140 -0
  226. package/src/codex/plan.ts +40 -0
  227. package/src/codex/plugins-doctor.ts +1 -1
  228. package/src/codex/pool-rotation.ts +74 -4
  229. package/src/codex/project-config-warnings.ts +20 -6
  230. package/src/codex/prompt-journal.ts +352 -0
  231. package/src/codex/prompt-layers.ts +967 -0
  232. package/src/codex/prompt-lock.ts +143 -0
  233. package/src/codex/quota-rejection.ts +298 -0
  234. package/src/codex/quota.ts +175 -13
  235. package/src/codex/refresh.ts +11 -2
  236. package/src/codex/reset-credit-recovery.ts +1044 -0
  237. package/src/codex/routing.ts +505 -94
  238. package/src/codex/runtime.ts +159 -38
  239. package/src/codex/shim.ts +1009 -28
  240. package/src/codex/subagent-model-fallback.ts +350 -35
  241. package/src/codex/sync.ts +191 -2
  242. package/src/codex/transition-state.ts +612 -0
  243. package/src/codex/upstream-host-health.ts +368 -0
  244. package/src/codex/user-identity.ts +557 -0
  245. package/src/codex/warmup.ts +187 -81
  246. package/src/codex/write-coordination.ts +114 -0
  247. package/src/combos/failover.ts +20 -0
  248. package/src/combos/index.ts +4 -0
  249. package/src/combos/request.ts +32 -0
  250. package/src/combos/types.ts +81 -9
  251. package/src/config/provider-name.ts +24 -0
  252. package/src/config.ts +1762 -140
  253. package/src/generated/compatibility-version.json +3164 -0
  254. package/src/generated/{jawcode-model-metadata.ts → model-metadata.ts} +19 -17
  255. package/src/grok/inject.ts +16 -5
  256. package/src/grok/inspect.ts +45 -0
  257. package/src/grok/sync.ts +2 -2
  258. package/src/images/loop.ts +152 -29
  259. package/src/images/plan.ts +23 -13
  260. package/src/integrations/config-io.ts +269 -0
  261. package/src/integrations/journal.ts +315 -0
  262. package/src/integrations/merge.ts +135 -0
  263. package/src/integrations/mutation-flight.ts +71 -0
  264. package/src/integrations/native/ownership-preflight.ts +202 -0
  265. package/src/integrations/omp-yaml-source.ts +358 -0
  266. package/src/integrations/owned-refresh.ts +74 -0
  267. package/src/integrations/ownership.ts +111 -0
  268. package/src/integrations/registry.ts +159 -0
  269. package/src/integrations/serialize.ts +314 -0
  270. package/src/integrations/state.ts +361 -0
  271. package/src/integrations/store.ts +103 -0
  272. package/src/integrations/writer-lock.ts +98 -0
  273. package/src/integrations/writer.ts +691 -0
  274. package/src/lab/artifacts/sanitize.ts +586 -0
  275. package/src/lab/artifacts/secure-fs.ts +475 -0
  276. package/src/lab/artifacts/store.ts +310 -0
  277. package/src/lab/automation/budgets.ts +78 -0
  278. package/src/lab/automation/config-persistence.ts +256 -0
  279. package/src/lab/automation/constants.ts +39 -0
  280. package/src/lab/automation/cooldown.ts +103 -0
  281. package/src/lab/automation/dispatch.ts +211 -0
  282. package/src/lab/automation/index.ts +13 -0
  283. package/src/lab/automation/orchestrator.ts +499 -0
  284. package/src/lab/automation/persistence.ts +512 -0
  285. package/src/lab/automation/planner.ts +371 -0
  286. package/src/lab/automation/policy.ts +136 -0
  287. package/src/lab/automation/queue.ts +191 -0
  288. package/src/lab/automation/recovery.ts +24 -0
  289. package/src/lab/automation/route-context.ts +21 -0
  290. package/src/lab/automation/run-key.ts +44 -0
  291. package/src/lab/automation/runs-query.ts +34 -0
  292. package/src/lab/automation/types.ts +160 -0
  293. package/src/lab/conformance/assertion.ts +325 -0
  294. package/src/lab/conformance/digest.ts +22 -0
  295. package/src/lab/conformance/executor.ts +741 -0
  296. package/src/lab/conformance/fixture-provider.ts +27 -0
  297. package/src/lab/conformance/fixtures/live-v1-cases.json +175 -0
  298. package/src/lab/conformance/fixtures/protocol-v1-cases.json +461 -0
  299. package/src/lab/conformance/harness-budget.ts +47 -0
  300. package/src/lab/conformance/index.ts +5 -0
  301. package/src/lab/conformance/jcs.ts +64 -0
  302. package/src/lab/conformance/json-pointer.ts +39 -0
  303. package/src/lab/conformance/manifest.ts +180 -0
  304. package/src/lab/conformance/mcp-stub.ts +179 -0
  305. package/src/lab/conformance/negative-controls.ts +164 -0
  306. package/src/lab/conformance/observation.ts +355 -0
  307. package/src/lab/conformance/runner.ts +68 -0
  308. package/src/lab/conformance/sse-normalize.ts +59 -0
  309. package/src/lab/conformance/suite-manifest.ts +78 -0
  310. package/src/lab/conformance/types.ts +214 -0
  311. package/src/lab/constants.ts +126 -0
  312. package/src/lab/digest.ts +64 -0
  313. package/src/lab/events/errors.ts +9 -0
  314. package/src/lab/events/limits.ts +117 -0
  315. package/src/lab/events/types.ts +229 -0
  316. package/src/lab/events/validate.ts +781 -0
  317. package/src/lab/fabric/constants.ts +40 -0
  318. package/src/lab/fabric/executor.ts +492 -0
  319. package/src/lab/fabric/index.ts +80 -0
  320. package/src/lab/fabric/manifest.ts +222 -0
  321. package/src/lab/fabric/observe.ts +489 -0
  322. package/src/lab/fabric/patch.ts +79 -0
  323. package/src/lab/fabric/producer-child.ts +139 -0
  324. package/src/lab/fabric/producer-isolate.ts +276 -0
  325. package/src/lab/fabric/producer-protocol.ts +61 -0
  326. package/src/lab/fabric/scratch.ts +439 -0
  327. package/src/lab/fabric/subject.ts +106 -0
  328. package/src/lab/fabric/types.ts +134 -0
  329. package/src/lab/fabric/verifier.ts +98 -0
  330. package/src/lab/index.ts +54 -0
  331. package/src/lab/ledger/artifact-refs.ts +127 -0
  332. package/src/lab/ledger/invalidation.ts +136 -0
  333. package/src/lab/ledger/purge.ts +310 -0
  334. package/src/lab/ledger/store.ts +532 -0
  335. package/src/lab/live/credential-lease.ts +53 -0
  336. package/src/lab/live/destination.ts +155 -0
  337. package/src/lab/live/executor.ts +336 -0
  338. package/src/lab/live/inert-tools.ts +56 -0
  339. package/src/lab/live/manifest.ts +85 -0
  340. package/src/lab/live/mcp-loopback.ts +57 -0
  341. package/src/lab/live/runner.ts +19 -0
  342. package/src/lab/live/sandbox.ts +61 -0
  343. package/src/lab/live/suite-manifest.ts +41 -0
  344. package/src/lab/live/transport.ts +118 -0
  345. package/src/lab/live/types.ts +197 -0
  346. package/src/lab/observe/from-conformance.ts +301 -0
  347. package/src/lab/observe/from-live.ts +117 -0
  348. package/src/lab/paths.ts +153 -0
  349. package/src/lab/projection/rebuild.ts +495 -0
  350. package/src/lab/projection/schema.ts +135 -0
  351. package/src/lab/projection/verdicts.ts +474 -0
  352. package/src/lab/projection/verification.ts +412 -0
  353. package/src/lab/public/bundle.ts +217 -0
  354. package/src/lab/public/community-authority.ts +175 -0
  355. package/src/lab/public/community-files.ts +29 -0
  356. package/src/lab/public/community.ts +479 -0
  357. package/src/lab/public/file-safety.ts +155 -0
  358. package/src/lab/public/ids.ts +26 -0
  359. package/src/lab/public/index.ts +16 -0
  360. package/src/lab/public/mutation-lock.ts +424 -0
  361. package/src/lab/public/operator.ts +353 -0
  362. package/src/lab/public/origin-purge.ts +79 -0
  363. package/src/lab/public/origin.ts +203 -0
  364. package/src/lab/public/privacy.ts +143 -0
  365. package/src/lab/public/private-file.ts +261 -0
  366. package/src/lab/public/project.ts +124 -0
  367. package/src/lab/public/purge-test-fault.ts +21 -0
  368. package/src/lab/public/purge.ts +223 -0
  369. package/src/lab/public/registry.ts +44 -0
  370. package/src/lab/public/revocation.ts +252 -0
  371. package/src/lab/public/signature.ts +243 -0
  372. package/src/lab/public/storage.ts +105 -0
  373. package/src/lab/public/strict-json.ts +206 -0
  374. package/src/lab/public/time.ts +26 -0
  375. package/src/lab/public/types.ts +172 -0
  376. package/src/lab/public/validate.ts +391 -0
  377. package/src/lab/query/catalog.ts +101 -0
  378. package/src/lab/query/connection.ts +107 -0
  379. package/src/lab/query/constants.ts +4 -0
  380. package/src/lab/query/cursor.ts +132 -0
  381. package/src/lab/query/dto-map.ts +277 -0
  382. package/src/lab/query/errors.ts +22 -0
  383. package/src/lab/query/freshness.ts +53 -0
  384. package/src/lab/query/index.ts +45 -0
  385. package/src/lab/query/latest-observation.ts +59 -0
  386. package/src/lab/query/passive-production.ts +159 -0
  387. package/src/lab/query/queries.ts +444 -0
  388. package/src/lab/query/types.ts +266 -0
  389. package/src/lab/subject/behavior-fingerprint.ts +77 -0
  390. package/src/lab/subject/installation-salt.ts +112 -0
  391. package/src/lab/subject/protocol-subject.ts +80 -0
  392. package/src/lab/subject/route-subject.ts +74 -0
  393. package/src/lib/app-owned-memory-stores.ts +22 -0
  394. package/src/lib/bounded-body.ts +153 -9
  395. package/src/lib/bun-runtime.ts +125 -12
  396. package/src/lib/bun-stream-caps.ts +13 -9
  397. package/src/lib/codex-restart-contract.ts +120 -0
  398. package/src/lib/config-ownership.ts +6 -2
  399. package/src/lib/destination-policy.ts +65 -1
  400. package/src/lib/errors.ts +44 -2
  401. package/src/lib/fabric-task-execution-authority.ts +7 -0
  402. package/src/lib/fabric-task-host.ts +29 -0
  403. package/src/lib/lab-activation.ts +223 -0
  404. package/src/lib/lab-live-execution-authority.ts +13 -0
  405. package/src/lib/lab-live-host.ts +30 -0
  406. package/src/lib/lab-live-pinned-sender.ts +56 -0
  407. package/src/lib/lab-live-route-production.ts +130 -0
  408. package/src/lib/lab-passive-linker-registration.ts +26 -0
  409. package/src/lib/local-management-attestation.ts +51 -0
  410. package/src/lib/local-management-capability.ts +100 -0
  411. package/src/lib/local-provider-reload-contract.ts +100 -0
  412. package/src/lib/optional-shutdown-hooks.ts +57 -0
  413. package/src/lib/pinned-http.ts +145 -26
  414. package/src/lib/process-control.ts +4 -1
  415. package/src/lib/provider-outbound.ts +49 -9
  416. package/src/lib/redact.ts +419 -3
  417. package/src/lib/self-launch-argv.ts +15 -0
  418. package/src/lib/server-resource-ownership.ts +71 -0
  419. package/src/lib/shadow-call.ts +35 -4
  420. package/src/lib/sse-decoder.ts +41 -0
  421. package/src/lib/state-store-registrations.ts +10 -2
  422. package/src/lib/system-restart-contract.ts +73 -0
  423. package/src/lib/token-estimate.ts +19 -2
  424. package/src/lib/tool-argument-integers.ts +202 -0
  425. package/src/lib/translator-budget.ts +44 -0
  426. package/src/lib/upstream-http-version.ts +57 -0
  427. package/src/lib/upstream-reachability.ts +95 -0
  428. package/src/lib/upstream-retry.ts +156 -3
  429. package/src/lib/windows-atomic-replace.ts +155 -0
  430. package/src/lib/windows-elevation.ts +70 -2
  431. package/src/lib/windows-secret-acl.ts +409 -69
  432. package/src/lib/windows-service-wrappers.ts +72 -0
  433. package/src/lib/windows-text.ts +106 -0
  434. package/src/lib/windows-user-principal.ts +341 -0
  435. package/src/lib/winsw.ts +33 -5
  436. package/src/oauth/account-import/google-antigravity-adapter.ts +74 -0
  437. package/src/oauth/account-import/index.ts +15 -0
  438. package/src/oauth/account-import/parser.ts +83 -0
  439. package/src/oauth/account-import/registry.ts +18 -0
  440. package/src/oauth/account-import/service.ts +75 -0
  441. package/src/oauth/account-import/types.ts +91 -0
  442. package/src/oauth/anthropic.ts +12 -1
  443. package/src/oauth/callback-server.ts +8 -2
  444. package/src/oauth/chatgpt.ts +12 -1
  445. package/src/oauth/command-code.ts +239 -0
  446. package/src/oauth/cursor.ts +46 -5
  447. package/src/oauth/google-antigravity.ts +35 -3
  448. package/src/oauth/health.ts +20 -12
  449. package/src/oauth/index.ts +398 -66
  450. package/src/oauth/key-providers.ts +16 -0
  451. package/src/oauth/kimi.ts +16 -2
  452. package/src/oauth/kiro.ts +50 -6
  453. package/src/oauth/local-token-detect.ts +11 -2
  454. package/src/oauth/log.ts +3 -1
  455. package/src/oauth/login-cli.ts +88 -28
  456. package/src/oauth/nous.ts +798 -0
  457. package/src/oauth/store.ts +119 -21
  458. package/src/oauth/token-guardian.ts +9 -3
  459. package/src/pi/models.ts +2 -2
  460. package/src/providers/alibaba-region-migration.ts +1 -1
  461. package/src/providers/antigravity-models.ts +521 -31
  462. package/src/providers/base-url-choices.ts +10 -0
  463. package/src/providers/codex-capacity.ts +292 -0
  464. package/src/providers/command-code-efforts.ts +144 -0
  465. package/src/providers/context-cap.ts +22 -5
  466. package/src/providers/cursor-pool.ts +72 -0
  467. package/src/providers/derive.ts +253 -6
  468. package/src/providers/fastwire.ts +501 -0
  469. package/src/providers/free-directory.ts +10 -7
  470. package/src/providers/google-vertex-location.ts +14 -0
  471. package/src/providers/key-failover.ts +71 -3
  472. package/src/providers/label.ts +1 -1
  473. package/src/providers/model-discovery-limits.ts +16 -0
  474. package/src/providers/model-discovery.ts +115 -22
  475. package/src/providers/model-rename-migration.ts +255 -0
  476. package/src/providers/model-rename-startup.ts +28 -0
  477. package/src/providers/openai-sidecar.ts +72 -4
  478. package/src/providers/openai-tier-startup.ts +31 -2
  479. package/src/providers/openai-tiers.ts +119 -4
  480. package/src/providers/openai-virtual-models.ts +1 -0
  481. package/src/providers/opencode-zen-rate-limit.ts +102 -0
  482. package/src/providers/provider-id-rewrite.ts +29 -0
  483. package/src/providers/quota.ts +1319 -38
  484. package/src/providers/registry.ts +1429 -111
  485. package/src/providers/request-pacing.ts +310 -0
  486. package/src/providers/service-tier.ts +277 -0
  487. package/src/providers/slug-codec.ts +42 -6
  488. package/src/providers/static-model-discovery.ts +86 -0
  489. package/src/providers/xai-responses-opt-in.ts +15 -0
  490. package/src/providers/xai-transport.ts +11 -4
  491. package/src/reasoning-effort.ts +49 -1
  492. package/src/responses/compaction.ts +26 -1
  493. package/src/responses/custom-tool-compat.ts +266 -0
  494. package/src/responses/hosted-tool-policy.ts +9 -0
  495. package/src/responses/namespace-tool-compat.ts +355 -0
  496. package/src/responses/parser.ts +220 -38
  497. package/src/responses/provider-continuation.ts +98 -0
  498. package/src/responses/provider-opaque-metadata.ts +73 -0
  499. package/src/responses/reasoning-envelope.ts +9 -1
  500. package/src/responses/reasoning-replay-cache.ts +426 -0
  501. package/src/responses/schema.ts +7 -1
  502. package/src/responses/spill-store.ts +75 -10
  503. package/src/responses/state.ts +565 -27
  504. package/src/responses/thought-signature-replay.ts +347 -0
  505. package/src/responses/tool-search-compat.ts +301 -0
  506. package/src/responses/truncated-stop-reason.ts +60 -0
  507. package/src/router.ts +366 -30
  508. package/src/routing/analytics.ts +378 -0
  509. package/src/routing/capability.ts +244 -0
  510. package/src/routing/compatibility/assemble.ts +73 -0
  511. package/src/routing/compatibility/behavior.ts +278 -0
  512. package/src/routing/compatibility/catalog.ts +99 -0
  513. package/src/routing/compatibility/endpoint.ts +52 -0
  514. package/src/routing/compatibility/lab-evidence-provider.ts +130 -0
  515. package/src/routing/compatibility/policy.ts +181 -0
  516. package/src/routing/compatibility/provider-slot.ts +56 -0
  517. package/src/routing/compatibility/reader.ts +110 -0
  518. package/src/routing/compatibility/subject.ts +191 -0
  519. package/src/routing/compatibility/types.ts +64 -0
  520. package/src/routing/compatibility/version.ts +104 -0
  521. package/src/routing/cost.ts +77 -0
  522. package/src/routing/evaluator.ts +495 -0
  523. package/src/routing/health.ts +412 -0
  524. package/src/routing/history/cursor.ts +43 -0
  525. package/src/routing/history/indexer.ts +605 -0
  526. package/src/routing/history/schema.ts +72 -0
  527. package/src/routing/profile-namespace.ts +15 -0
  528. package/src/routing/profile.ts +547 -0
  529. package/src/routing/quota.ts +145 -0
  530. package/src/routing/request-evidence.ts +45 -0
  531. package/src/routing/trace.ts +776 -0
  532. package/src/server/adapter-resolve.ts +2 -29
  533. package/src/server/auth-cors.ts +267 -46
  534. package/src/server/background-lifecycle.ts +182 -0
  535. package/src/server/chat-completions.ts +130 -56
  536. package/src/server/chat-native-sse.ts +331 -0
  537. package/src/server/chat-native.ts +426 -0
  538. package/src/server/claude-messages.ts +159 -43
  539. package/src/server/direct-local-http.ts +347 -0
  540. package/src/server/effort-policy.ts +18 -0
  541. package/src/server/github-copilot-responses-repair.ts +338 -0
  542. package/src/server/gui-static.ts +39 -10
  543. package/src/server/images.ts +94 -12
  544. package/src/server/index.ts +865 -181
  545. package/src/server/lifecycle.ts +284 -13
  546. package/src/server/live.ts +136 -17
  547. package/src/server/local-management-read-client.ts +90 -0
  548. package/src/server/local-provider-reload-client.ts +137 -0
  549. package/src/server/management/agent-settings-routes.ts +398 -103
  550. package/src/server/management/api-key-usage.ts +31 -5
  551. package/src/server/management/body.ts +6 -0
  552. package/src/server/management/combo-routes.ts +62 -24
  553. package/src/server/management/config-routes.ts +464 -51
  554. package/src/server/management/context.ts +80 -2
  555. package/src/server/management/integration-routes.ts +498 -0
  556. package/src/server/management/lab-automation-routes.ts +206 -0
  557. package/src/server/management/lab-routes.ts +563 -0
  558. package/src/server/management/logs-usage-routes.ts +101 -32
  559. package/src/server/management/model-routes.ts +189 -131
  560. package/src/server/management/model-rows.ts +163 -0
  561. package/src/server/management/native-integration-routes.ts +769 -0
  562. package/src/server/management/oauth-account-routes.ts +80 -4
  563. package/src/server/management/provider-capability-config.ts +48 -0
  564. package/src/server/management/provider-routes.ts +764 -157
  565. package/src/server/management/request-history-routes.ts +191 -0
  566. package/src/server/management/routing-analytics-routes.ts +74 -0
  567. package/src/server/management/routing-profile-routes.ts +380 -0
  568. package/src/server/management/shared.ts +27 -11
  569. package/src/server/management/sidebar-routes.ts +47 -31
  570. package/src/server/management/storage-log-guard-routes.ts +186 -0
  571. package/src/server/management/sync-response.ts +69 -0
  572. package/src/server/management/system-restart.ts +288 -32
  573. package/src/server/management/system-routes.ts +77 -0
  574. package/src/server/management/usage-summary-cache.ts +9 -1
  575. package/src/server/management/vision-sidecar-options.ts +167 -0
  576. package/src/server/management/web-search-sidecar-options.ts +120 -0
  577. package/src/server/management-api.ts +115 -14
  578. package/src/server/management-auth.ts +220 -5
  579. package/src/server/passive-route-linker.ts +66 -0
  580. package/src/server/ports.ts +41 -1
  581. package/src/server/proxy-liveness.ts +132 -5
  582. package/src/server/readiness.ts +99 -0
  583. package/src/server/relay-eager.ts +82 -42
  584. package/src/server/relay.ts +236 -76
  585. package/src/server/request-decompress.ts +113 -6
  586. package/src/server/request-log.ts +235 -22
  587. package/src/server/responses/agent-task-recovery-cache.ts +143 -0
  588. package/src/server/responses/agent-task-recovery.ts +465 -0
  589. package/src/server/responses/collaboration.ts +204 -35
  590. package/src/server/responses/compact.ts +442 -55
  591. package/src/server/responses/core.ts +2872 -331
  592. package/src/server/responses/empty-completion-guard.ts +276 -0
  593. package/src/server/responses/encrypted-payload.ts +62 -39
  594. package/src/server/responses/fetch-helpers.ts +79 -4
  595. package/src/server/responses/input-admission.ts +185 -0
  596. package/src/server/responses/pacing-overload.ts +13 -0
  597. package/src/server/responses/policy-fallback.ts +178 -0
  598. package/src/server/responses/responses-field-backfill.ts +251 -0
  599. package/src/server/responses/terminal-guard.ts +26 -5
  600. package/src/server/responses/upstream-error.ts +5 -0
  601. package/src/server/responses/ws-upstream.ts +308 -0
  602. package/src/server/responses-custom-tool-repair.ts +282 -0
  603. package/src/server/responses-item-id-repair.ts +54 -6
  604. package/src/server/responses-json-events.ts +90 -0
  605. package/src/server/responses-model-rewrite.ts +29 -0
  606. package/src/server/responses-reasoning-summary-rewrite.ts +178 -0
  607. package/src/server/responses-snapshot-repair.ts +621 -0
  608. package/src/server/responses-terminal-repair.ts +342 -0
  609. package/src/server/responses-tool-search-repair.ts +267 -0
  610. package/src/server/responses-undeclared-tool-guard.ts +153 -0
  611. package/src/server/responses.ts +18 -2
  612. package/src/server/search.ts +78 -13
  613. package/src/server/sse-frame-buffer.ts +292 -0
  614. package/src/server/sse-payload-rewrite.ts +110 -22
  615. package/src/server/startup-action-control.ts +8 -1
  616. package/src/server/startup-health-cache.ts +19 -1
  617. package/src/server/system-env.ts +80 -9
  618. package/src/server/ws-bridge.ts +39 -38
  619. package/src/service-manager-probe.ts +892 -0
  620. package/src/service.ts +1111 -90
  621. package/src/sidecar/auth.ts +92 -0
  622. package/src/sidecar/candidates.ts +83 -0
  623. package/src/storage/cleanup.ts +2 -2
  624. package/src/storage/scanner.ts +1 -1
  625. package/src/storage/worker-lifecycle.ts +14 -14
  626. package/src/tray/windows-tray.ps1 +83 -9
  627. package/src/tray/windows.ts +43 -16
  628. package/src/types/accounts.ts +37 -0
  629. package/src/types/config.ts +845 -0
  630. package/src/types/provider.ts +545 -0
  631. package/src/types/request.ts +384 -0
  632. package/src/types/tools.ts +131 -0
  633. package/src/types/wire.ts +80 -0
  634. package/src/types.ts +104 -1236
  635. package/src/update/index.ts +32 -19
  636. package/src/update/job.ts +442 -67
  637. package/src/update/notify.ts +12 -6
  638. package/src/update/npm-cache-preflight.d.mts +47 -0
  639. package/src/update/npm-cache-preflight.mjs +201 -0
  640. package/src/update/transactional-install.d.mts +22 -0
  641. package/src/update/transactional-install.mjs +259 -0
  642. package/src/usage/cost.ts +0 -0
  643. package/src/usage/expected-prices.ts +268 -16
  644. package/src/usage/log.ts +606 -41
  645. package/src/usage/summary.ts +177 -9
  646. package/src/usage/user-cost-overlay-reconciler.ts +313 -0
  647. package/src/usage/user-cost-overlays.ts +314 -0
  648. package/src/vision/anthropic-describe.ts +10 -6
  649. package/src/vision/backends.ts +97 -0
  650. package/src/vision/describe.ts +9 -3
  651. package/src/vision/eligibility.ts +250 -0
  652. package/src/vision/index.ts +238 -24
  653. package/src/vision/reasoning.ts +55 -0
  654. package/src/vision/routed-describe.ts +175 -0
  655. package/src/vision/timeout-bounds.ts +9 -0
  656. package/src/web-search/anthropic-executor.ts +13 -7
  657. package/src/web-search/backends.ts +108 -0
  658. package/src/web-search/exa-executor.ts +88 -0
  659. package/src/web-search/executor.ts +11 -3
  660. package/src/web-search/gemini-executor.ts +141 -0
  661. package/src/web-search/index.ts +150 -15
  662. package/src/web-search/loop.ts +279 -50
  663. package/src/web-search/parse.ts +125 -30
  664. package/src/web-search/sources.ts +60 -0
  665. package/src/web-search/xai-executor.ts +219 -0
  666. package/gui/dist/assets/index-DTpMHS4F.js +0 -67
  667. package/gui/dist/assets/index-ZNVDE3C7.css +0 -1
  668. package/gui/dist/provider-icons/antigravity.svg +0 -1
  669. package/gui/dist/provider-icons/claude.svg +0 -1
  670. package/gui/dist/provider-icons/copilot.svg +0 -1
  671. package/gui/dist/provider-icons/cursor.svg +0 -2
  672. package/gui/dist/provider-icons/gemini.svg +0 -1
  673. package/gui/dist/provider-icons/grok-color.svg +0 -1
  674. package/gui/dist/provider-icons/kiro.svg +0 -14
  675. package/src/cli/internal-dispatch.ts +0 -20
@@ -1,13 +1,19 @@
1
1
  /**
2
- * `ocx export --client <opencode|pi>` — print a client config for the live proxy.
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.
3
6
  *
4
7
  * Two consumers, one payload (devlog 260731_client_config_export/020):
5
8
  *
6
- * - **Agent** (`--json`): stdout is exactly the client config JSON and nothing else, so
7
- * `ocx export --client pi --json > models.json` is safe to pipe. Every diagnostic
8
- * including the `--out` write note goes to stderr.
9
- * - **Human** (no flag): the JSON leads, then the destination path, the merge warning,
10
- * the env export line, and the model/degraded counts.
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 onesthe 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.
11
17
  *
12
18
  * The command never writes the user's real config path. `--out` is an explicit target and
13
19
  * refuses to clobber an existing file without `--force`, because the common mistake
@@ -15,14 +21,15 @@
15
21
  *
16
22
  * Serialization itself belongs to src/clients/config-export.ts; this module only resolves
17
23
  * the base URL, filters the catalog, and renders. No secret is ever serialized: the config
18
- * carries the client's documented env reference and the real key stays in the environment.
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.
19
26
  */
20
27
  import { writeFileSync } from "node:fs";
21
28
  import { loadConfig } from "../config";
22
29
  import {
23
30
  EXPORT_CLIENTS,
24
31
  EXPORT_CLIENT_IDS,
25
- buildClientConfig,
32
+ buildClientConfigText,
26
33
  isExportClientId,
27
34
  opencodeProxyBaseUrl,
28
35
  type ExportClientId,
@@ -55,7 +62,11 @@ export interface ExportCommandDeps extends RuntimeApiDeps {
55
62
  * `/api/models` row plus the modality list Pi consumes. The launcher's row type predates
56
63
  * the Pi exporter and stops at the fields OpenCode needs.
57
64
  */
58
- type ExportProxyModelRow = OpencodeProxyModelRow & { inputModalities?: string[] };
65
+ type ExportProxyModelRow = OpencodeProxyModelRow & {
66
+ inputModalities?: string[];
67
+ reasoningEfforts?: string[];
68
+ defaultReasoningEffort?: string;
69
+ };
59
70
 
60
71
  /** Same authoritativeness rule the serializers apply, for the degraded-count line. */
61
72
  function hasContextLimit(model: ExportModel): boolean {
@@ -76,12 +87,21 @@ export function exportModelsFromProxyRows(
76
87
  rows: readonly ExportProxyModelRow[],
77
88
  config: OcxConfig,
78
89
  ): ExportModel[] {
79
- const modalities = new Map<string, string[]>();
90
+ const metadata = new Map<string, Pick<ExportModel, "inputModalities" | "reasoningEfforts" | "defaultReasoningEffort">>();
80
91
  for (const row of rows) {
81
92
  const namespaced = row.namespaced?.trim();
82
- if (namespaced && Array.isArray(row.inputModalities) && row.inputModalities.length > 0) {
83
- if (!modalities.has(namespaced)) modalities.set(namespaced, [...row.inputModalities]);
84
- }
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
+ });
85
105
  }
86
106
  return opencodeCatalogFromProxyRows(rows, config).map(entry => {
87
107
  const model: ExportModel = {
@@ -92,8 +112,7 @@ export function exportModelsFromProxyRows(
92
112
  if (entry.native) model.native = true;
93
113
  if (entry.displayName) model.displayName = entry.displayName;
94
114
  if (entry.contextWindow !== undefined) model.contextWindow = entry.contextWindow;
95
- const input = modalities.get(entry.namespaced);
96
- if (input) model.inputModalities = input;
115
+ Object.assign(model, metadata.get(entry.namespaced));
97
116
  return model;
98
117
  });
99
118
  }
@@ -164,16 +183,23 @@ export async function handleExportCommand(argv: string[], deps: ExportCommandDep
164
183
  throw new RuntimeApiError("Management API returned an unexpected /api/models payload.", 502, rows);
165
184
  }
166
185
  const models = exportModelsFromProxyRows(rows, config);
167
- const clientConfig = buildClientConfig(client, { baseUrl: proxyV1BaseUrl(root), models, config });
168
- const text = JSON.stringify(clientConfig, null, 2);
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;
169
191
 
170
- if (out !== undefined) writeExport(out, `${text}\n`, force);
171
- // stderr, so `--json` stdout stays byte-exact for a redirect.
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.
172
195
  if (out !== undefined && wantsJson) console.error(`Wrote ${out}`);
173
196
 
174
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.
175
201
  printData(clientConfig, wantsJson, [
176
- text,
202
+ text.trimEnd(),
177
203
  "",
178
204
  ...(out !== undefined ? [`Wrote ${out}`] : []),
179
205
  `Destination: ${spec.destination(process.env)}`,
package/src/cli/help.ts CHANGED
@@ -1,277 +1,10 @@
1
1
  import { readFileSync } from "node:fs";
2
2
  import { dirname, join } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
+ import { findCommand } from "./registry";
4
5
 
5
6
  const repoRoot = dirname(fileURLToPath(new URL("../../package.json", import.meta.url)));
6
7
 
7
- type HelpEntry = {
8
- usage: string;
9
- summary: string;
10
- details?: string[];
11
- };
12
-
13
- const helpEntries: Record<string, HelpEntry> = {
14
- init: { usage: "ocx init", summary: "Interactive setup for providers and Codex config injection." },
15
- setup: { usage: "ocx setup", summary: "Interactive setup for providers and Codex config injection (alias of init)." },
16
- start: { usage: "ocx start [--port <port>]", summary: "Start the proxy server and sync models to Codex." },
17
- stop: { usage: "ocx stop", summary: "Stop the proxy and restore native Codex config." },
18
- restore: {
19
- usage: "ocx restore [back]",
20
- summary: "Restore native Codex config without stopping the proxy; `restore back` re-points codex at the running proxy.",
21
- },
22
- eject: {
23
- usage: "ocx eject [back]",
24
- summary: "Restore native Codex config without stopping the proxy; `eject back` re-points codex at the running proxy.",
25
- },
26
- "recover-history": {
27
- usage: "ocx recover-history --legacy-openai",
28
- summary: "Explicitly recover pre-backup syncResumeHistory rows.",
29
- },
30
- uninstall: {
31
- usage: "ocx uninstall",
32
- summary: "Remove service/shim/config and restore native Codex.",
33
- details: [
34
- "Alias: ocx remove",
35
- "Config cleanup requires ownership metadata created by a fresh install; legacy or shared directories are left in place.",
36
- ],
37
- },
38
- remove: {
39
- usage: "ocx remove",
40
- summary: "Remove service/shim/config and restore native Codex.",
41
- details: [
42
- "Alias of: ocx uninstall",
43
- "Config cleanup requires ownership metadata created by a fresh install; legacy or shared directories are left in place.",
44
- ],
45
- },
46
- service: {
47
- usage: "ocx service [install|start|stop|status|uninstall|remove]",
48
- summary: "Run as a background service.",
49
- details: [
50
- "With no subcommand, installs/updates and starts the background service.",
51
- "Use `ocx service status` to see diagnostics and log paths.",
52
- ],
53
- },
54
- "codex-shim": {
55
- usage: "ocx codex-shim <install|status|uninstall|remove>",
56
- summary: "Auto-start the proxy when `codex` launches.",
57
- details: ["Use `remove` as an alias for `uninstall`."],
58
- },
59
- tray: {
60
- usage: "ocx tray <install|start|stop|status|uninstall|remove> [--json] [--no-start]",
61
- summary: "Install and control the Windows status tray icon.",
62
- details: [
63
- "The tray starts at Windows login and provides one-click proxy controls.",
64
- "Tray start/stop controls the icon only; use its menu to start or stop the proxy.",
65
- "--no-start (install only) installs the tray without launching it immediately.",
66
- ],
67
- },
68
- ensure: { usage: "ocx ensure", summary: "Ensure the proxy is running and Codex config/cache are current." },
69
- sync: {
70
- usage: "ocx sync [--restart-codex]",
71
- summary: "Fetch provider models and inject them into Codex config.",
72
- details: [
73
- "After writing the catalog, warns if long-lived Codex app-server processes are still running.",
74
- "--restart-codex sends SIGTERM only to matching app-server / code-mode-host processes (may interrupt active turns).",
75
- ],
76
- },
77
- "sync-cloud": {
78
- usage: "ocx sync-cloud <login|logout|status|set-client-id|push|pull> ...",
79
- summary: "OneDrive cloud backup/restore for ~/.opencodex (Microsoft login).",
80
- details: [
81
- "Requires a Microsoft public-client app ID (Azure portal, once).",
82
- "login: device-code Microsoft sign-in for OneDrive.",
83
- "push [--passphrase <p>] [--include-usage]: upload config + optional encrypted auth vault.",
84
- "pull --yes [--passphrase <p>]: download and apply (overwrites local).",
85
- "Auth/tokens never leave the machine unencrypted — vault uses AES-256-GCM.",
86
- "Does not replace `ocx sync` (Codex model catalog).",
87
- ],
88
- },
89
- "sync-cache": {
90
- usage: "ocx sync-cache [--restart-codex]",
91
- summary: "Refresh Codex's model cache from the active catalog.",
92
- details: [
93
- "Warns when Codex app-server processes still hold an in-memory model list.",
94
- "--restart-codex sends SIGTERM only to matching app-server / code-mode-host processes (may interrupt active turns).",
95
- ],
96
- },
97
- status: { usage: "ocx status", summary: "Check proxy server status." },
98
- doctor: { usage: "ocx doctor", summary: "Diagnose environment/network issues (paths, WSL /mnt, proxy env, ChatGPT reachability)." },
99
- debug: {
100
- usage: "ocx debug <provider|usage|injection|claude> <on|off|status|reset|logs [-f]>",
101
- summary: "Show or toggle runtime provider, usage, injection, and Claude debug capture.",
102
- details: [
103
- "Provider: ocx debug provider on | off | status | reset | logs [-f]",
104
- "Usage JSONL: ocx debug usage on | off | status | reset | logs [-f]",
105
- "Env default: OCX_DEBUG=1 (legacy OCX_DEBUG_FRAMES still works)",
106
- ],
107
- },
108
- login: { usage: "ocx login <provider>", summary: "OAuth or API-key login for a provider." },
109
- logout: { usage: "ocx logout <provider>", summary: "Remove a stored provider login." },
110
- gui: { usage: "ocx gui", summary: "Open the opencodex dashboard." },
111
- update: {
112
- usage: "ocx update [--tag latest|preview]",
113
- summary: "Update opencodex. Preview installs stay on the preview tag unless overridden.",
114
- },
115
- provider: {
116
- usage: "ocx provider <list|add|edit|test|remove|show|set-default|selected|quota|presets|account-mode>",
117
- summary: "Non-interactive provider management.",
118
- details: [
119
- "Subcommands: list, add/edit/test/remove/show, set-default, selected, quota, presets, account-mode",
120
- "Registry providers are auto-configured by name. Custom providers need --adapter and --base-url.",
121
- "Run `ocx provider --help` for full usage and examples.",
122
- ],
123
- },
124
- account: {
125
- usage: "ocx account <list|current|use|refresh|auto-switch|login|reauth|code|cancel|remove|add-key|reset-credits> ...",
126
- summary: "List and switch provider accounts and API-key pools (GUI parity).",
127
- details: [
128
- "list [provider] Codex account pool, OAuth accounts and API keys (identifiers shown masked as the API returns them).",
129
- "current <provider> Show the active account or key.",
130
- "use <provider> <id> Switch the active credential; 'main' selects the Codex App login.",
131
- "refresh <provider> Force-refresh Codex or provider quota reports.",
132
- "auto-switch <provider> <on|off|status|threshold N> Control the Codex pool threshold.",
133
- "remove <provider> <id> --yes Remove a stored account or key after an existence check.",
134
- "add-key <provider> [--label <label>] Add a key read only from piped stdin.",
135
- "login/reauth/code/cancel Run browser or manual-code auth from a headless shell.",
136
- "reset-credits <id|main> [--consume --yes] Inspect or consume Codex reset credits.",
137
- "Codex pool selection applies to the next request after clearing existing affinity; in-flight requests keep their captured account.",
138
- ],
139
- },
140
- models: {
141
- usage: "ocx models <list|live|add|edit|remove|enable|disable|provider|selected|context|shadow> ...",
142
- summary: "List models and manage custom (manually registered) models.",
143
- details: [
144
- "List available models from static config with no subcommand (liveModels may add more at runtime).",
145
- "add: register a model the provider catalog does not advertise yet.",
146
- " --display-name <name> Human label (no slashes).",
147
- " --context-window <tokens> e.g. 200000.",
148
- " --modalities text,image Comma-separated (text|image|audio).",
149
- "remove: delete a custom model by UUID or <provider>/<modelId>.",
150
- "list-custom: show all custom models.",
151
- "Changes apply immediately to a running proxy (catalog sync).",
152
- ],
153
- },
154
- model: {
155
- usage: "ocx model <subcommand>",
156
- summary: "Alias of ocx models.",
157
- },
158
- combo: {
159
- usage: "ocx combo <list|show|set|remove> ...",
160
- summary: "Manage combo failover and round-robin virtual models.",
161
- details: ["Alias hierarchy: ocx route combo ...", "Use --targets provider/model[:weight],provider/model[:weight]."],
162
- },
163
- route: {
164
- usage: "ocx route combo <list|show|set|remove> ...",
165
- summary: "Manage routing features; combo is currently the supported routing resource.",
166
- },
167
- agent: {
168
- usage: "ocx agent <status|injection|effort|subagents|fallback|sidecar> ...",
169
- summary: "Manage headless multi-agent, roster, effort, injection, and sidecar settings.",
170
- },
171
- observe: {
172
- usage: "ocx observe <logs|usage|storage|memory|debug|claude-inbound|injection> ...",
173
- summary: "Inspect proxy requests, usage, storage, memory, and debug data.",
174
- },
175
- logs: { usage: "ocx logs [filters] [--follow] [--json|--jsonl]", summary: "Alias of ocx observe logs." },
176
- usage: { usage: "ocx usage [--range <7d|30d|all>] [--surface <all|codex|claude|grok>] [--json]", summary: "Alias of ocx observe usage." },
177
- storage: { usage: "ocx storage [--json]", summary: "Alias of ocx observe storage." },
178
- memory: { usage: "ocx memory [--json]", summary: "Alias of ocx observe memory." },
179
- access: {
180
- usage: "ocx access <key|endpoints|models|test> ...",
181
- summary: "Manage OpenCodex admission API keys and inspect external endpoints.",
182
- },
183
- "api-key": { usage: "ocx api-key <list|create|remove> ...", summary: "Alias of ocx access key." },
184
- export: {
185
- usage: "ocx export --client <opencode|pi> [--json] [--out <path>] [--force]",
186
- summary: "Print a client config (opencode, Pi) wired to the running proxy.",
187
- details: [
188
- "--json prints only the config JSON on stdout, so it is safe to redirect to a file.",
189
- "--out <path> writes the config there and refuses to replace an existing file without --force.",
190
- "The config never contains a key; it references the client's env var, which you export before launching.",
191
- "The destination path is printed for merging by hand — ocx never writes your real client config.",
192
- ],
193
- },
194
- grok: { usage: "ocx grok <status|exclude|include|set|clear|apply> ...", summary: "Manage and apply the Grok Build model fence." },
195
- integration: { usage: "ocx integration <claude|grok> ...", summary: "Manage supported client integrations." },
196
- system: {
197
- usage: "ocx system <status|settings|startup|diagnostics|sync|update> ...",
198
- summary: "Manage headless runtime settings, startup, sync, diagnostics, and updates.",
199
- },
200
- config: {
201
- usage: "ocx config <show|get|set|unset|validate|export|import> ...",
202
- summary: "Inspect and safely modify validated OpenCodex configuration.",
203
- details: ["Secrets are masked by show/get. Import requires --yes and validates before writing."],
204
- },
205
- claude: {
206
- usage: "ocx claude [claude args...]",
207
- summary: "Launch Claude Code wired to the proxy (env injection + gateway model discovery).",
208
- details: [
209
- "Ensures the proxy is running, then execs `claude` with ANTHROPIC_BASE_URL/ANTHROPIC_AUTH_TOKEN,",
210
- "CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1 and model slots from config.claudeCode.",
211
- "Routed models appear in the native /model picker with stable claude-opus-4-8-2026MMDD slot aliases (Claude Code >= 2.1.129).",
212
- "Older versions: pick models via ANTHROPIC_MODEL or /model <id> directly (any string passes through).",
213
- "User-exported ANTHROPIC_* variables always take precedence.",
214
- "",
215
- "Claude Desktop profile:",
216
- " ocx claude desktop [apply] Save and apply the four-family profile",
217
- " ocx claude desktop show [--json] Show routes, families, and defaults",
218
- " ocx claude desktop move <route> <family> [--default]",
219
- " ocx claude desktop default <family> <route|none>",
220
- " ocx claude desktop export <path|-> Export versioned JSON (`-` = stdout)",
221
- " ocx claude desktop import <path> [--apply] Validate and import JSON",
222
- "Families: opus, fable, sonnet, haiku. New routes start in opus.",
223
- "`none` is valid only when that family is empty.",
224
- "Legacy apply flags remain supported: --static, --hybrid, --discovery-only.",
225
- "",
226
- "Claude Code settings: ocx claude config <status|set> ...",
227
- ],
228
- },
229
- pi: {
230
- usage: "ocx pi [status|apply|remove|settings|packages|pi-args...]",
231
- summary: "Manage Pi models/settings/packages, or launch Pi wired to the proxy.",
232
- details: [
233
- "Management: status, apply (providers.opencodex), remove, settings, packages.",
234
- "Launch: any other args are forwarded to the real `pi` binary after a best-effort apply.",
235
- "Only providers.opencodex is written; other Pi providers and settings keys are preserved.",
236
- "Package install/remove shells out to `pi install` / `pi remove` (full system access).",
237
- ],
238
- },
239
- opencode: {
240
- usage: "ocx opencode [opencode args...]",
241
- summary: "Launch opencode wired to the proxy (runtime provider config).",
242
- details: [
243
- "Ensures the proxy is running, then execs `opencode` with the generated `provider.opencodex`",
244
- "block injected through OpenCode's inline runtime layer (`OPENCODE_CONFIG_CONTENT`). Any",
245
- "existing inline config in the environment is preserved and only `provider.opencodex` is",
246
- "overwritten for this launch.",
247
- "Global/project opencode.json may be read to warn about an existing provider.opencodex",
248
- "override; on-disk files are never modified.",
249
- "Routed models appear in the model picker as opencodex/<provider>/<model>.",
250
- "Stop using `ocx opencode` and plain `opencode` behaves exactly as before.",
251
- ],
252
- },
253
- restart: {
254
- usage: "ocx restart",
255
- summary: "Stop the proxy and restart it (background). Equivalent to stop + ensure.",
256
- },
257
- v2: {
258
- usage: "ocx v2 <status|on|off|mode <v1|default|v2>|threads <n>>",
259
- summary: "Toggle the Codex multi_agent_v2 feature (multi-agent surface).",
260
- details: [
261
- "status Show flag, multi-agent mode, and thread limit.",
262
- "on | off Enable/disable multi_agent_v2 (catalog resyncs).",
263
- "mode <v1|default|v2> Force all models to one surface, or respect upstream pins.",
264
- "threads <n> Set max_concurrent_threads_per_session (integer >= 1).",
265
- "Flips preserve the active thread limit while moving between v1/v2 modes.",
266
- ],
267
- },
268
- health: {
269
- usage: "ocx health [--json]",
270
- summary: "Check proxy health. Exits 0 if healthy, 1 otherwise.",
271
- details: ["Use --json for structured output: {ok, pid, port}."],
272
- },
273
- };
274
-
275
8
  function packageVersion(): string {
276
9
  const raw = readFileSync(join(repoRoot, "package.json"), "utf8");
277
10
  const parsed = JSON.parse(raw) as { version?: unknown };
@@ -304,29 +37,45 @@ Usage:
304
37
  ocx sync-cloud <sub> OneDrive cloud backup/restore (Microsoft login)
305
38
  ocx status Check proxy server status
306
39
  ocx doctor Diagnose environment/network issues (WSL, proxy, ChatGPT reachability)
40
+ ocx doctor --reclaim-response-temps
41
+ Reclaim abandoned response-state temp files (works without a running proxy)
42
+ ocx doctor --recover-zero-byte-coordinator --yes
43
+ Back up a proven zero-byte Codex coordinator after stopping the proxy
307
44
  ocx debug <scope> provider/usage/injection/claude on|off|status|reset
308
45
  ocx login <provider> OAuth or API-key provider login
309
46
  ocx logout <provider> Remove a stored OAuth login
310
47
  ocx gui Open the opencodex dashboard
311
48
  ocx update [--tag <tag>] Update opencodex (keeps preview installs on @preview)
312
49
  ocx restart Stop and restart the proxy
313
- ocx v2 <sub> multi_agent_v2 surface (status|on|off|mode|threads)
50
+ ocx v2 <sub> multi_agent_v2 surface (status|on|off|mode|keep-native-v1|threads|mode-hint)
314
51
  ocx health [--json] Check proxy health (exit 0=healthy, 1=not)
52
+ ocx ready [--json] [--wait [--timeout <s>]] Check post-sync readiness (exit 0 only when ready)
315
53
  ocx provider <sub> Providers, connectivity, quota, and selected models
316
54
  ocx account <sub> Accounts, login/reauth, key pools, and quota controls
317
55
  ocx models <sub> Live/custom models, visibility, context, and shadow calls
318
56
  ocx combo <sub> Combo failover/round-robin routing
319
57
  ocx agent <sub> Subagents, injection, effort caps, and sidecars
320
58
  ocx observe <sub> Logs, usage, storage, memory, and debug data
59
+ ocx route <sub> Routing features (combo, policy)
60
+ ocx logs [filters] Alias of ocx observe logs
61
+ ocx usage [--range <7d|30d|all>] Alias of ocx observe usage
62
+ ocx storage [--json] Alias of ocx observe storage
63
+ ocx memory [--json] Alias of ocx observe memory
64
+ ocx api-key <sub> Alias of ocx access key
321
65
  ocx access <sub> External API keys and endpoint information
322
- ocx export --client <id> Print an opencode/Pi config wired to the running proxy
66
+ ocx export --client <id> Print a client config wired to the running proxy (11 clients)
67
+ ocx integration client <sub> Enable, disable, inspect or roll back a client integration
323
68
  ocx grok <sub> Grok Build model selection and apply
324
69
  ocx system <sub> Runtime settings, startup, sync, and updates
325
70
  ocx config <sub> Validated configuration show/get/set/import/export
71
+ ocx lab <sub> Read-only Compatibility Lab projection inspection
326
72
  ocx claude [args...] Launch Claude Code wired to the proxy (model discovery on)
327
73
  ocx claude desktop [sub] Manage and apply Claude Desktop's four-family profile
328
74
  ocx opencode [args...] Launch opencode wired to the proxy (runtime provider config)
329
75
  ocx pi [args|subcommand] Manage or launch Pi (models, settings, packages)
76
+ ocx mcode [args...] Launch MiniMax Code through its managed provider
77
+ ocx mmx text <sub> [args] Launch MiniMax CLI text through the proxy
78
+ ocx zcode [sub] Connect ZCode to the proxy (managed provider)
330
79
  ocx help [command] Show help
331
80
  ocx --version | -v Print version
332
81
 
@@ -343,7 +92,7 @@ export function hasHelpFlag(values: string[]): boolean {
343
92
  }
344
93
 
345
94
  export function printSubcommandUsage(name: string | undefined): void {
346
- const entry = name ? helpEntries[name] : undefined;
95
+ const entry = name ? findCommand(name) : undefined;
347
96
  if (!entry) {
348
97
  console.error(`Unknown command: ${name ?? ""}`.trim());
349
98
  printUsage();