@bitkyc08/opencodex 2.59.0 → 2.61.0-preview.20260922

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 (374) hide show
  1. package/AGENTS_INSTALL.md +64 -0
  2. package/README.md +28 -1
  3. package/bin/ocx.mjs +382 -209
  4. package/gui/dist/assets/App-E64Rzjap.js +50 -0
  5. package/gui/dist/assets/Tray-_nfzD8k4.js +1 -0
  6. package/gui/dist/assets/index-DpdfZWMK.js +86 -0
  7. package/gui/dist/assets/index-_bpvxJu0.css +1 -0
  8. package/gui/dist/assets/usage-companion-chart-DtoK7T6h.js +1 -0
  9. package/gui/dist/favicon.png +0 -0
  10. package/gui/dist/index.html +2 -2
  11. package/gui/dist/provider-icons/stepfun-color.svg +1 -0
  12. package/package.json +8 -1
  13. package/src/adapters/anthropic-image-codec.ts +16 -2
  14. package/src/adapters/anthropic-image-normalize.ts +49 -2
  15. package/src/adapters/anthropic.ts +20 -1
  16. package/src/adapters/base.ts +23 -0
  17. package/src/adapters/coding-agent/protocol.ts +36 -6
  18. package/src/adapters/coding-agent/turn.ts +32 -4
  19. package/src/adapters/command-code.ts +52 -4
  20. package/src/adapters/cursor/catalog.ts +51 -7
  21. package/src/adapters/cursor/checkpoint-store.ts +3 -0
  22. package/src/adapters/cursor/discovery.ts +11 -8
  23. package/src/adapters/cursor/live-transport.ts +26 -9
  24. package/src/adapters/cursor/protobuf-request.ts +6 -3
  25. package/src/adapters/cursor/request-builder.ts +20 -4
  26. package/src/adapters/cursor/transport.ts +19 -0
  27. package/src/adapters/cursor.ts +14 -3
  28. package/src/adapters/declaration-carrier.ts +45 -0
  29. package/src/adapters/devin/cloud-direct/chat.ts +3 -1
  30. package/src/adapters/devin/cloud-direct/stated-reset-retry.ts +42 -5
  31. package/src/adapters/devin.ts +125 -36
  32. package/src/adapters/google-antigravity-replay.ts +1 -1
  33. package/src/adapters/google-antigravity-wire.ts +34 -7
  34. package/src/adapters/google-errors.ts +7 -1
  35. package/src/adapters/google-http.ts +49 -10
  36. package/src/adapters/google-tool-schema.ts +595 -31
  37. package/src/adapters/google-wire-compiler.ts +93 -10
  38. package/src/adapters/google-wire-shape.ts +461 -0
  39. package/src/adapters/google.ts +66 -11
  40. package/src/adapters/image.ts +4 -1
  41. package/src/adapters/input-media-guard.ts +21 -9
  42. package/src/adapters/kiro/usage.ts +3 -2
  43. package/src/adapters/kiro-tool-fallback.ts +1 -1
  44. package/src/adapters/ollama-native.ts +6 -0
  45. package/src/adapters/openai-chat/developer-role.ts +61 -0
  46. package/src/adapters/openai-chat/messages.ts +46 -27
  47. package/src/adapters/openai-chat/parallel-tool-calls.ts +32 -0
  48. package/src/adapters/openai-chat/passthrough.ts +33 -9
  49. package/src/adapters/openai-chat/reasoning-wire.ts +89 -0
  50. package/src/adapters/openai-chat-images.ts +3 -1
  51. package/src/adapters/openai-chat.ts +23 -58
  52. package/src/adapters/openai-responses/image-gen.ts +8 -6
  53. package/src/adapters/openai-responses/passthrough.ts +17 -3
  54. package/src/adapters/openai-responses/reasoning.ts +7 -0
  55. package/src/adapters/opencode-go-additional-tools.ts +12 -2
  56. package/src/adapters/registry.ts +3 -2
  57. package/src/adapters/run-turn-queue.ts +178 -29
  58. package/src/adapters/xai-web-search.ts +16 -1
  59. package/src/bridge/errors.ts +8 -2
  60. package/src/bridge/response-json.ts +9 -1
  61. package/src/bridge/sse.ts +13 -151
  62. package/src/chat/inbound.ts +141 -5
  63. package/src/claude/desktop-3p.ts +7 -1
  64. package/src/claude/desktop-first-party.ts +183 -0
  65. package/src/claude/desktop-gateway-state.ts +41 -0
  66. package/src/claude/inbound-content-options.ts +6 -0
  67. package/src/claude/inbound.ts +32 -6
  68. package/src/claude/intercept/connect-proxy.ts +179 -0
  69. package/src/claude/intercept/listener.ts +122 -0
  70. package/src/claude/intercept/local-ca.ts +298 -0
  71. package/src/claude/intercept/runtime.ts +98 -0
  72. package/src/claude/intercept/settings.ts +189 -0
  73. package/src/cli/access.ts +87 -0
  74. package/src/cli/account-auth.ts +19 -0
  75. package/src/cli/account-extended.ts +4 -4
  76. package/src/cli/capabilities.ts +31 -0
  77. package/src/cli/claude-desktop.ts +206 -16
  78. package/src/cli/codex-shim-autorestore.ts +3 -0
  79. package/src/cli/companion.ts +56 -0
  80. package/src/cli/dispatch.ts +46 -7
  81. package/src/cli/doctor.ts +28 -9
  82. package/src/cli/ensure-desired-integrations.ts +43 -5
  83. package/src/cli/help.ts +7 -9
  84. package/src/cli/hub.ts +3 -2
  85. package/src/cli/index.ts +203 -59
  86. package/src/cli/init.ts +8 -0
  87. package/src/cli/integrations.ts +7 -1
  88. package/src/cli/opencode.ts +2 -2
  89. package/src/cli/provider.ts +13 -1
  90. package/src/cli/registry.ts +41 -2
  91. package/src/cli/resolve.ts +230 -0
  92. package/src/cli/root.ts +24 -1
  93. package/src/cli/start-ownership-publication.ts +56 -0
  94. package/src/cli/status-probes.ts +2 -18
  95. package/src/cli/status.ts +62 -0
  96. package/src/cli/stop-report.ts +143 -0
  97. package/src/cli/uninstall-plan.ts +9 -0
  98. package/src/client/machine-api.ts +2 -2
  99. package/src/client/machine-listener.ts +4 -7
  100. package/src/client/runtime.ts +26 -2
  101. package/src/clients/aside-profiles.ts +4 -0
  102. package/src/clients/config-export/zcode-store.ts +157 -0
  103. package/src/clients/config-export.ts +36 -0
  104. package/src/codex/account-store.ts +65 -0
  105. package/src/codex/app-server-processes.ts +72 -40
  106. package/src/codex/auth-api/account-list.ts +19 -11
  107. package/src/codex/auth-api/login-flow.ts +6 -1
  108. package/src/codex/auth-api/pool-quota-probe.ts +30 -7
  109. package/src/codex/autostart-health.ts +28 -0
  110. package/src/codex/catalog/build-entries.ts +2 -2
  111. package/src/codex/catalog/effort.ts +3 -3
  112. package/src/codex/catalog/gather-capture.ts +21 -2
  113. package/src/codex/catalog/model-hints.ts +29 -28
  114. package/src/codex/catalog/parsing.ts +7 -0
  115. package/src/codex/catalog/provider-models.ts +43 -17
  116. package/src/codex/catalog/retained-sync.ts +24 -28
  117. package/src/codex/catalog/routed-gather.ts +19 -0
  118. package/src/codex/context-compat.ts +5 -2
  119. package/src/codex/convergence.ts +2 -2
  120. package/src/codex/desired-state.ts +4 -1
  121. package/src/codex/history-job.ts +6 -6
  122. package/src/codex/history-provider.ts +31 -166
  123. package/src/codex/history-rollout-read.ts +174 -0
  124. package/src/codex/inject/config-toml.ts +41 -6
  125. package/src/codex/inject/paginated-openai-compat.ts +90 -0
  126. package/src/codex/inject.ts +18 -15
  127. package/src/codex/injected-marker.ts +18 -0
  128. package/src/codex/internal/catalog-writer.ts +33 -1
  129. package/src/codex/main-account.ts +6 -0
  130. package/src/codex/model-cache.ts +99 -6
  131. package/src/codex/model-entitlement-admission.ts +59 -0
  132. package/src/codex/model-entitlements.ts +116 -54
  133. package/src/codex/native-main-admission.ts +83 -0
  134. package/src/codex/observed-model-denials.ts +101 -8
  135. package/src/codex/prompt-text-probe.ts +9 -6
  136. package/src/codex/routing/health-store.ts +39 -0
  137. package/src/codex/routing/selection.ts +37 -1
  138. package/src/codex/routing.ts +12 -42
  139. package/src/codex/shim-templates.ts +29 -3
  140. package/src/codex/shim.ts +1 -1
  141. package/src/codex/subagent-model-fallback.ts +22 -4
  142. package/src/combos/failover.ts +3 -0
  143. package/src/companion/settings.ts +132 -0
  144. package/src/config/admitted-identity.ts +222 -0
  145. package/src/config/atomic-write.ts +117 -5
  146. package/src/config/diagnostics.ts +22 -1
  147. package/src/config/feature-flags.ts +5 -0
  148. package/src/config/load-degrade.ts +52 -7
  149. package/src/config/process-state.ts +1 -1
  150. package/src/config/proxy-env.ts +8 -2
  151. package/src/config/schema/compaction-triggers.ts +11 -0
  152. package/src/config/schema/config-schema.ts +31 -1
  153. package/src/config/schema/leaf-validators.ts +59 -0
  154. package/src/config.ts +3 -3
  155. package/src/generated/compatibility-version.json +604 -280
  156. package/src/grok/reset-coupons.ts +38 -19
  157. package/src/images/loop.ts +6 -1
  158. package/src/integrations/aside-profile-context.ts +37 -3
  159. package/src/integrations/aside-profile-journal.ts +68 -3
  160. package/src/integrations/aside-profiles.ts +128 -3
  161. package/src/integrations/config-io.ts +44 -10
  162. package/src/integrations/merge.ts +120 -13
  163. package/src/integrations/mutation-plan.ts +921 -0
  164. package/src/integrations/registry.ts +38 -0
  165. package/src/integrations/state.ts +78 -45
  166. package/src/integrations/target.ts +208 -0
  167. package/src/integrations/writer.ts +134 -110
  168. package/src/lab/conformance/fixture-provider.ts +5 -0
  169. package/src/lab/live/transport.ts +4 -0
  170. package/src/lab/live/types.ts +5 -0
  171. package/src/lab/subject/behavior-fingerprint.ts +1 -1
  172. package/src/lib/admin-secrets.ts +9 -1
  173. package/src/lib/browser-launch-notice.ts +59 -0
  174. package/src/lib/bun-runtime.ts +6 -2
  175. package/src/lib/debug-log-buffer.ts +6 -1
  176. package/src/lib/debug.ts +63 -0
  177. package/src/lib/errors.ts +79 -0
  178. package/src/lib/http-response-semantics.ts +57 -0
  179. package/src/lib/lab-live-pinned-sender.ts +26 -12
  180. package/src/lib/open-url.ts +51 -7
  181. package/src/lib/package-tree-integrity.ts +2 -1
  182. package/src/lib/package-version.ts +8 -0
  183. package/src/lib/pinned-http.ts +142 -2
  184. package/src/lib/plain-data.ts +103 -0
  185. package/src/lib/process-control.ts +13 -5
  186. package/src/lib/provider-egress.ts +310 -0
  187. package/src/lib/provider-outbound.ts +109 -16
  188. package/src/lib/proxy-env.ts +82 -7
  189. package/src/lib/request-execution-budget.ts +72 -0
  190. package/src/lib/request-failure-attribution.ts +183 -0
  191. package/src/lib/request-failure-model.ts +236 -0
  192. package/src/lib/request-resend-gate.ts +138 -0
  193. package/src/lib/socks5-fetch.ts +136 -26
  194. package/src/lib/spend-ledger-owner.ts +364 -0
  195. package/src/lib/spend-reservation-ledger.ts +218 -27
  196. package/src/lib/standalone.ts +16 -0
  197. package/src/lib/upstream-retry.ts +167 -16
  198. package/src/lib/windows-system-proxy.ts +16 -11
  199. package/src/lib/winsw.ts +2 -2
  200. package/src/oauth/callback-server.ts +4 -3
  201. package/src/oauth/generic-account-failover.ts +1 -0
  202. package/src/oauth/health.ts +12 -1
  203. package/src/oauth/index.ts +27 -108
  204. package/src/oauth/login-cli.ts +80 -29
  205. package/src/oauth/login-flow-state.ts +127 -0
  206. package/src/providers/api-key-resolve.ts +133 -0
  207. package/src/providers/api-key-selection.ts +5 -1
  208. package/src/providers/derive.ts +34 -17
  209. package/src/providers/devin-cli-authmode-migration.ts +14 -10
  210. package/src/providers/key-failover.ts +97 -19
  211. package/src/providers/key-store.ts +34 -110
  212. package/src/providers/model-rename-fields.ts +147 -0
  213. package/src/providers/model-rename-migration.ts +179 -38
  214. package/src/providers/model-rename-startup.ts +7 -5
  215. package/src/providers/openai-virtual-models.ts +42 -2
  216. package/src/providers/quota/antigravity.ts +22 -2
  217. package/src/providers/quota/vendor-probes-key.ts +38 -23
  218. package/src/providers/reasoning-metadata.ts +43 -18
  219. package/src/providers/registry/entries-core.ts +47 -20
  220. package/src/providers/registry/entries-extended.ts +63 -4
  221. package/src/providers/registry/model-ids.ts +168 -0
  222. package/src/providers/registry/model-seeds.ts +56 -10
  223. package/src/providers/registry/types.ts +2 -0
  224. package/src/providers/resolved-model-policy-merge.ts +167 -0
  225. package/src/providers/resolved-model-policy.ts +406 -0
  226. package/src/providers/stale-vision-classification-migration.ts +137 -0
  227. package/src/providers/xai-transport.ts +12 -1
  228. package/src/reasoning-effort.ts +8 -0
  229. package/src/responses/apply-patch-envelope.ts +0 -12
  230. package/src/responses/freeform-wrapper-scan.ts +279 -0
  231. package/src/responses/function-call-compat.ts +38 -1
  232. package/src/responses/inline-document.ts +65 -0
  233. package/src/responses/input-media.ts +42 -8
  234. package/src/responses/legacy-dotted-tool-name-repair.ts +134 -0
  235. package/src/responses/muse-tool-name-alias.ts +19 -0
  236. package/src/responses/parser-content.ts +8 -2
  237. package/src/responses/parser-tools.ts +3 -0
  238. package/src/responses/parser.ts +3 -1
  239. package/src/responses/progressive-freeform-input.ts +130 -0
  240. package/src/responses/reasoning-envelope.ts +30 -0
  241. package/src/responses/schema.ts +3 -0
  242. package/src/responses/state.ts +5 -12
  243. package/src/responses/tool-name-aliases.ts +15 -1
  244. package/src/router.ts +108 -117
  245. package/src/routing/compatibility/behavior.ts +9 -0
  246. package/src/routing/compatibility/subject.ts +16 -1
  247. package/src/server/adapter-resolve.ts +9 -0
  248. package/src/server/admission-model-scope.ts +219 -0
  249. package/src/server/audio-live.ts +9 -3
  250. package/src/server/audio-upstream.ts +18 -0
  251. package/src/server/auth-cors.ts +29 -0
  252. package/src/server/chat-completions.ts +60 -4
  253. package/src/server/chat-native.ts +19 -4
  254. package/src/server/claude-messages.ts +61 -20
  255. package/src/server/effort-row.ts +11 -3
  256. package/src/server/grok-responses-control-frame.ts +160 -1
  257. package/src/server/grok-responses-snapshot-repair.ts +113 -11
  258. package/src/server/gui-freshness.ts +103 -0
  259. package/src/server/gui-static.ts +7 -9
  260. package/src/server/images.ts +59 -6
  261. package/src/server/index/claude-intercept-lifecycle.ts +49 -0
  262. package/src/server/index/serve-options.ts +142 -39
  263. package/src/server/index/spend-ledger-lifecycle.ts +92 -0
  264. package/src/server/index/startup-warnings.ts +24 -0
  265. package/src/server/index/websocket-handler.ts +6 -1
  266. package/src/server/index.ts +34 -38
  267. package/src/server/lifecycle.ts +4 -4
  268. package/src/server/live-call-bindings.ts +6 -0
  269. package/src/server/live.ts +88 -3
  270. package/src/server/management/agent-settings-routes.ts +121 -36
  271. package/src/server/management/aside-profile-routes.ts +266 -7
  272. package/src/server/management/companion-routes.ts +77 -0
  273. package/src/server/management/config-routes.ts +18 -2
  274. package/src/server/management/context.ts +3 -0
  275. package/src/server/management/integration-routes.ts +287 -5
  276. package/src/server/management/logs-usage-routes.ts +19 -0
  277. package/src/server/management/metrics-routes.ts +20 -0
  278. package/src/server/management/model-rows.ts +224 -12
  279. package/src/server/management/native-integration-routes.ts +103 -6
  280. package/src/server/management/oauth-account-routes.ts +45 -7
  281. package/src/server/management/route-registry.ts +20 -0
  282. package/src/server/management/shared.ts +28 -4
  283. package/src/server/management/system-restart.ts +7 -2
  284. package/src/server/management/system-routes.ts +2 -0
  285. package/src/server/management/usage-aggregate-cache.ts +4 -0
  286. package/src/server/management/usage-timeline-routes.ts +44 -0
  287. package/src/server/management-api.ts +10 -9
  288. package/src/server/management-auth.ts +15 -1
  289. package/src/server/proxy-liveness.ts +75 -0
  290. package/src/server/readiness.ts +29 -10
  291. package/src/server/relay-eager.ts +24 -2
  292. package/src/server/relay.ts +138 -12
  293. package/src/server/request-log-failure-attribution.ts +99 -0
  294. package/src/server/request-log.ts +169 -2
  295. package/src/server/request-metrics.ts +298 -0
  296. package/src/server/responses/adapter-continuation.ts +3 -3
  297. package/src/server/responses/adapter-dispatch.ts +11 -6
  298. package/src/server/responses/codex-ws-wire.ts +34 -8
  299. package/src/server/responses/combo-stream-preflight.ts +168 -6
  300. package/src/server/responses/compact.ts +43 -10
  301. package/src/server/responses/compaction-routing.ts +111 -0
  302. package/src/server/responses/core-codex-account.ts +8 -3
  303. package/src/server/responses/core-combo.ts +7 -7
  304. package/src/server/responses/core-normalize.ts +6 -12
  305. package/src/server/responses/core-opaque-recovery.ts +91 -0
  306. package/src/server/responses/core-options.ts +4 -0
  307. package/src/server/responses/encrypted-payload.ts +20 -2
  308. package/src/server/responses/fetch-helpers.ts +124 -8
  309. package/src/server/responses/input-admission.ts +10 -0
  310. package/src/server/responses/passthrough-delivery.ts +45 -15
  311. package/src/server/responses/passthrough-dispatch.ts +215 -44
  312. package/src/server/responses/passthrough-error.ts +27 -8
  313. package/src/server/responses/policy-fallback.ts +5 -13
  314. package/src/server/responses/request-prepare.ts +109 -18
  315. package/src/server/responses/request-send-budget.ts +17 -1
  316. package/src/server/responses/request-sidecar-auth.ts +1 -1
  317. package/src/server/responses/request-transport.ts +26 -6
  318. package/src/server/responses/reset-replay.ts +108 -0
  319. package/src/server/responses/run-turn-execution.ts +25 -3
  320. package/src/server/responses/sidecar-execution.ts +17 -2
  321. package/src/server/responses/ws-upstream.ts +14 -27
  322. package/src/server/responses-custom-tool-repair.ts +27 -54
  323. package/src/server/responses-request-tool-scope.ts +214 -0
  324. package/src/server/responses-undeclared-tool-guard.ts +35 -2
  325. package/src/server/search.ts +25 -1
  326. package/src/server/sse-payload-rewrite.ts +1 -1
  327. package/src/server/usage-ledger-retention.ts +73 -0
  328. package/src/service/cli.ts +48 -2
  329. package/src/service/health.ts +3 -2
  330. package/src/service/install-state-contract.d.mts +27 -0
  331. package/src/service/install-state-contract.mjs +34 -0
  332. package/src/service/launchd.ts +1 -1
  333. package/src/service/orchestration.ts +2 -4
  334. package/src/service/ownership-compatibility.ts +164 -0
  335. package/src/service/ownership-mutation-lease.d.mts +32 -0
  336. package/src/service/ownership-mutation-lease.mjs +211 -0
  337. package/src/service/repair.ts +45 -1
  338. package/src/service/state-lock.ts +269 -0
  339. package/src/service/state-record.d.mts +36 -0
  340. package/src/service/state-record.mjs +138 -0
  341. package/src/service/state.ts +582 -68
  342. package/src/service/windows-taskxml.ts +11 -10
  343. package/src/service.ts +7 -3
  344. package/src/tray/windows-tray.ps1 +156 -4
  345. package/src/types/config.ts +48 -3
  346. package/src/types/provider.ts +91 -0
  347. package/src/types/request.ts +30 -2
  348. package/src/types/tools.ts +33 -0
  349. package/src/types.ts +4 -0
  350. package/src/update/index.ts +207 -63
  351. package/src/update/job.ts +9 -5
  352. package/src/update/ownership-transaction.ts +47 -0
  353. package/src/update/restart-ownership.ts +54 -0
  354. package/src/update/runtime-ownership.d.mts +40 -0
  355. package/src/update/runtime-ownership.mjs +122 -0
  356. package/src/usage/attempt-delivery.ts +198 -0
  357. package/src/usage/cache-diagnostic.ts +305 -0
  358. package/src/usage/failure-fingerprint.ts +118 -0
  359. package/src/usage/failure-projection-cache.ts +174 -0
  360. package/src/usage/failure-projection.ts +174 -0
  361. package/src/usage/ledger-retention.ts +165 -0
  362. package/src/usage/log.ts +126 -79
  363. package/src/usage/request-outcome.ts +150 -0
  364. package/src/usage/retention-contract.ts +28 -0
  365. package/src/usage/summary.ts +2 -2
  366. package/src/usage/telemetry-contract.ts +237 -0
  367. package/src/usage/timeline.ts +236 -0
  368. package/src/vision/eligibility.ts +88 -9
  369. package/src/vision/plan.ts +34 -10
  370. package/src/web-search/alpha-search.ts +21 -1
  371. package/src/web-search/executor.ts +41 -2
  372. package/src/web-search/loop.ts +6 -1
  373. package/gui/dist/assets/index-C5IebErG.js +0 -136
  374. package/gui/dist/assets/index-OESInAjC.css +0 -1
@@ -177,6 +177,15 @@ export const META_MUSE_REASONING_EFFORTS = ["minimal", "low", "medium", "high",
177
177
  export const META_MUSE_REASONING_EFFORT_MAP: Record<string, string> = Object.fromEntries(
178
178
  META_MUSE_REASONING_EFFORTS.map(effort => [effort, effort]),
179
179
  );
180
+ /*
181
+ * Muse Code credentials have a separate capability contract. Meta's authenticated
182
+ * /muse-code/models roster advertises max for both 1.3 models, and the Responses API
183
+ * accepts it when the request identifies the Muse client surface.
184
+ */
185
+ export const META_MUSE_CODE_REASONING_EFFORTS = [...META_MUSE_REASONING_EFFORTS, "max"];
186
+ export const META_MUSE_CODE_REASONING_EFFORT_MAP: Record<string, string> = Object.fromEntries(
187
+ META_MUSE_CODE_REASONING_EFFORTS.map(effort => [effort, effort]),
188
+ );
180
189
  /** Both Muse Spark 1.3 tiers publish a 1,048,576-token window (dev.meta.ai/docs/models). */
181
190
  export const META_MUSE_CONTEXT_WINDOW = 1_048_576;
182
191
  export const META_MUSE_MODELS = ["muse-spark-1.3", "muse-spark-1.3-contributor"];
@@ -633,11 +642,26 @@ export const ALIBABA_TOKEN_PLAN_PRESERVE_REASONING = [
633
642
  export const KIMI_K3_STANDARD_CONTEXT_WINDOW = 262_144;
634
643
  export const KIMI_K3_1M_CONTEXT_WINDOW = 1_048_576;
635
644
  export const KIMI_CODING_K3_MODELS = ["k3", "k3[1m]"];
645
+ // 260921 Kimi K2.8: `kimi-for-coding` is the stable subscription alias Moonshot re-points
646
+ // at each coding release. Live GET /coding/v1/models lists only kimi-for-coding[-highspeed],
647
+ // k3, k3-256k — the k2.x ids are retired from the subscription endpoint. Since K2.8 Preview
648
+ // the alias serves an adjustable low/high/max thinking ladder (same wire map as k3) and a
649
+ // 1M context ceiling. Verified live 260921: 350K-token request accepted; upstream rejects
650
+ // with "model token limit: 1048576" beyond that.
651
+ // Evidence: https://www.kimi.com/code/docs/en/kimi-code/models.html
652
+ export const KIMI_CODING_K28_MODELS = ["kimi-for-coding"];
653
+ export const KIMI_CODING_LIVE_MODELS = [...KIMI_CODING_K3_MODELS, ...KIMI_CODING_K28_MODELS];
654
+ export const KIMI_CODING_ADJUSTABLE_THINKING_MODELS = [...KIMI_CODING_LIVE_MODELS];
636
655
  export const KIMI_LEGACY_API_MODELS = ["kimi-k2.7-code", "kimi-k2.7-code-highspeed", "kimi-k2.6", "kimi-k2.5"];
637
656
  export const KIMI_API_MODELS = ["kimi-k3", ...KIMI_LEGACY_API_MODELS];
638
- export const KIMI_CODING_MODELS = [...KIMI_CODING_K3_MODELS, ...KIMI_LEGACY_API_MODELS, "kimi-for-coding"];
639
- export const KIMI_THINKING_MODELS = KIMI_CODING_MODELS;
640
- export const KIMI_CODING_NO_REASONING_MODELS = KIMI_CODING_MODELS.filter(id => !KIMI_CODING_K3_MODELS.includes(id));
657
+ // Every kimi coding preset record - picker, context windows, locked-parameter lists -
658
+ // derives from the live ids only. seeding a retired id in a metadata list would re-arm
659
+ // the model-rename migration on every boot (#5066): the list holds the retired id but
660
+ // not the live alias, so the residue guard cannot skip it. The retired ids survive only
661
+ // in KIMI_LEGACY_API_MODELS (moonshot platform API records); model-rename-migration
662
+ // repairs saved rows still naming them.
663
+ export const KIMI_THINKING_MODELS = KIMI_CODING_LIVE_MODELS;
664
+ export const KIMI_CODING_NO_REASONING_MODELS = KIMI_CODING_LIVE_MODELS.filter(id => !KIMI_CODING_ADJUSTABLE_THINKING_MODELS.includes(id));
641
665
  export const KIMI_API_NO_REASONING_MODELS = KIMI_API_MODELS.filter(id => id !== "kimi-k3");
642
666
  export const KIMI_CODING_K3_REASONING_EFFORTS = ["low", "high", "max"];
643
667
  export const KIMI_CODING_K3_REASONING_EFFORT_MAP: Record<string, string> = {
@@ -649,19 +673,19 @@ export const KIMI_CODING_K3_REASONING_EFFORT_MAP: Record<string, string> = {
649
673
  max: "max",
650
674
  };
651
675
  export const KIMI_CODING_REASONING_EFFORTS = Object.fromEntries(
652
- KIMI_CODING_MODELS.map(id => [id, KIMI_CODING_K3_MODELS.includes(id) ? KIMI_CODING_K3_REASONING_EFFORTS : []]),
676
+ KIMI_CODING_LIVE_MODELS.map(id => [id, KIMI_CODING_ADJUSTABLE_THINKING_MODELS.includes(id) ? KIMI_CODING_K3_REASONING_EFFORTS : []]),
653
677
  );
654
678
  export const KIMI_CODING_DEFAULT_REASONING_EFFORTS = Object.fromEntries(
655
- KIMI_CODING_K3_MODELS.map(id => [id, "max"]),
679
+ KIMI_CODING_ADJUSTABLE_THINKING_MODELS.map(id => [id, "max"]),
656
680
  );
657
681
  export const KIMI_CODING_REASONING_EFFORT_MAPS = Object.fromEntries(
658
- KIMI_CODING_K3_MODELS.map(id => [id, KIMI_CODING_K3_REASONING_EFFORT_MAP]),
682
+ KIMI_CODING_ADJUSTABLE_THINKING_MODELS.map(id => [id, KIMI_CODING_K3_REASONING_EFFORT_MAP]),
659
683
  );
660
684
  export const KIMI_API_REASONING_EFFORTS = Object.fromEntries(
661
685
  KIMI_API_MODELS.map(id => [id, id === "kimi-k3" ? ["max"] : []]),
662
686
  );
663
- export const KIMI_LOCKED_PARAMETER_MODELS = KIMI_CODING_MODELS;
664
- export const KIMI_AUTO_TOOL_CHOICE_ONLY_MODELS = ["kimi-k2.7-code", "kimi-k2.7-code-highspeed", "kimi-for-coding"];
687
+ export const KIMI_LOCKED_PARAMETER_MODELS = KIMI_CODING_LIVE_MODELS;
688
+ export const KIMI_AUTO_TOOL_CHOICE_ONLY_MODELS = ["kimi-for-coding"];
665
689
  export const KIMI_API_MODEL_CONTEXT_WINDOWS: Record<string, number> = Object.fromEntries(
666
690
  KIMI_API_MODELS.map(id => [id, id === "kimi-k3" ? KIMI_K3_1M_CONTEXT_WINDOW : 262_144]),
667
691
  );
@@ -749,10 +773,10 @@ export const NVIDIA_NIM_NO_VISION_MODELS = [
749
773
  "poolside/laguna-xs-2.1", "z-ai/glm-5.3", "z-ai/glm-5.2",
750
774
  ];
751
775
  export const KIMI_CODING_MODEL_CONTEXT_WINDOWS: Record<string, number> = Object.fromEntries(
752
- KIMI_CODING_MODELS.map(id => [id, id === "k3[1m]" ? KIMI_K3_1M_CONTEXT_WINDOW : KIMI_K3_STANDARD_CONTEXT_WINDOW]),
776
+ KIMI_CODING_LIVE_MODELS.map(id => [id, (id === "k3[1m]" || KIMI_CODING_K28_MODELS.includes(id)) ? KIMI_K3_1M_CONTEXT_WINDOW : KIMI_K3_STANDARD_CONTEXT_WINDOW]),
753
777
  );
754
778
  export const KIMI_CODING_MODEL_INPUT_MODALITIES = Object.fromEntries(
755
- KIMI_CODING_K3_MODELS.map(id => [id, ["text", "image"]]),
779
+ KIMI_CODING_ADJUSTABLE_THINKING_MODELS.map(id => [id, ["text", "image"]]),
756
780
  );
757
781
  export const NEURALWATT_REASONING_HISTORY_MODELS = [
758
782
  "glm-5.3", "glm-5.3-short", "glm-5.3-flash",
@@ -1017,3 +1041,25 @@ export const OPPER_TEXT_ONLY_MODELS = ["deepseek-v4-pro", "kimi-k3"];
1017
1041
  export const OPPER_MODEL_INPUT_MODALITIES: Record<string, string[]> = Object.fromEntries(
1018
1042
  OPPER_MODELS.map(id => [id, OPPER_TEXT_ONLY_MODELS.includes(id) ? ["text"] : ["text", "image"]]),
1019
1043
  );
1044
+
1045
+ export const STEPFUN_MODELS = [
1046
+ "step-5-preview",
1047
+ "step-3.5-flash",
1048
+ "step-3.7-flash",
1049
+ ];
1050
+
1051
+ export const STEPFUN_MODEL_CONTEXT_WINDOWS: Record<string, number> = {
1052
+ "step-5-preview": 1_000_000,
1053
+ "step-3.5-flash": 256_000,
1054
+ "step-3.7-flash": 256_000,
1055
+ };
1056
+
1057
+ export const STEPFUN_MODEL_INPUT_MODALITIES: Record<string, string[]> = {
1058
+ "step-5-preview": ["text", "image"],
1059
+ "step-3.5-flash": ["text"],
1060
+ "step-3.7-flash": ["text", "image"],
1061
+ };
1062
+
1063
+ export const STEPFUN_NO_VISION_MODELS = ["step-3.5-flash"];
1064
+
1065
+ export const STEPFUN_REASONING_EFFORTS = ["low", "medium", "high"];
@@ -264,6 +264,8 @@ export interface ProviderRegistryEntry {
264
264
  modelServiceTierCapabilityBaseUrlGuard?: (baseUrl: string) => boolean;
265
265
  /** Registry default for plaintext reasoning replay; see `OcxProviderConfig.preserveResponsesReasoningContent`. Registry-only like `supportsServiceTier`. */
266
266
  preserveResponsesReasoningContent?: boolean;
267
+ /** Registry default for dropping replayed reasoning items for Responses upstreams that reject them. */
268
+ dropResponsesReasoningItems?: boolean;
267
269
  /** Registry defaults for per-model Codex reasoning propagation; explicit user keys win during enrichment. */
268
270
  modelSupportsReasoningSummaries?: Record<string, boolean>;
269
271
  /** Registry defaults for per-model Codex Responses verbosity support. */
@@ -0,0 +1,167 @@
1
+ import type { OcxProviderConfig } from "../types";
2
+ import { MODEL_ADAPTER_OVERRIDE_ALLOWED } from "../types";
3
+ import type { InboundWire, ModelWireDefault, ProviderRegistryEntry } from "./registry/types";
4
+
5
+ export type StaticPolicySource =
6
+ | "operator" | "operator-capability" | "captured-auth"
7
+ | "registry" | "hard-pin" | "provider-default" | "unknown";
8
+
9
+ export function detachedClone<T>(value: T): T {
10
+ if (Array.isArray(value)) return value.map(item => detachedClone(item)) as T;
11
+ if (value && typeof value === "object") {
12
+ return Object.fromEntries(Object.entries(value as Record<string, unknown>)
13
+ .map(([key, nested]) => [key, detachedClone(nested)])) as T;
14
+ }
15
+ return value;
16
+ }
17
+
18
+ export function recursivelyFreeze<T>(value: T): T {
19
+ if (!value || typeof value !== "object" || Object.isFrozen(value)) return value;
20
+ for (const nested of Object.values(value as Record<string, unknown>)) recursivelyFreeze(nested);
21
+ return Object.freeze(value);
22
+ }
23
+
24
+ export function scalar<T>(operator: T | undefined, registry: T | undefined): [T | undefined, StaticPolicySource] {
25
+ if (operator !== undefined) return [detachedClone(operator), "operator"];
26
+ if (registry !== undefined) return [detachedClone(registry), "registry"];
27
+ return [undefined, "unknown"];
28
+ }
29
+
30
+ export function mapFill<T>(
31
+ registry: Readonly<Record<string, T>> | undefined,
32
+ operator: Readonly<Record<string, T>> | undefined,
33
+ ): [Record<string, T> | undefined, StaticPolicySource] {
34
+ if (!registry && !operator) return [undefined, "unknown"];
35
+ return [detachedClone({ ...(registry ?? {}), ...(operator ?? {}) }), operator ? "operator" : "registry"];
36
+ }
37
+
38
+ export function nestedMapFill(
39
+ registry: Readonly<Record<string, Record<string, string>>> | undefined,
40
+ operator: Readonly<Record<string, Record<string, string>>> | undefined,
41
+ ): [Record<string, Record<string, string>> | undefined, StaticPolicySource] {
42
+ if (!registry && !operator) return [undefined, "unknown"];
43
+ const merged: Record<string, Record<string, string>> = {};
44
+ for (const [key, value] of Object.entries(registry ?? {})) merged[key] = { ...value };
45
+ for (const [key, value] of Object.entries(operator ?? {})) {
46
+ merged[key] = { ...(merged[key] ?? {}), ...value };
47
+ }
48
+ return [merged, operator ? "operator" : "registry"];
49
+ }
50
+
51
+ export function positiveCapMap(
52
+ registry: Readonly<Record<string, number>> | undefined,
53
+ operator: Readonly<Record<string, number>> | undefined,
54
+ ): [Record<string, number> | undefined, StaticPolicySource] {
55
+ if (!registry && !operator) return [undefined, "unknown"];
56
+ const merged = { ...(registry ?? {}) };
57
+ for (const [key, value] of Object.entries(operator ?? {})) {
58
+ merged[key] = typeof merged[key] === "number" ? Math.min(merged[key]!, value) : value;
59
+ }
60
+ return [merged, operator ? "operator" : "registry"];
61
+ }
62
+
63
+ export function stableUnion(
64
+ registry: readonly string[] | undefined,
65
+ operator: readonly string[] | undefined,
66
+ ): [string[] | undefined, StaticPolicySource] {
67
+ if (!registry && !operator) return [undefined, "unknown"];
68
+ return [[...new Set([...(registry ?? []), ...(operator ?? [])])], operator ? "operator" : "registry"];
69
+ }
70
+
71
+ export function staticHeaders(
72
+ registry: Readonly<Record<string, string>> | undefined,
73
+ operator: Readonly<Record<string, string>> | undefined,
74
+ ): [Record<string, string> | undefined, StaticPolicySource] {
75
+ if (!registry && !operator) return [undefined, "unknown"];
76
+ if (!registry) return [{ ...(operator ?? {}) }, "operator"];
77
+ if (!operator) return [{ ...registry }, "registry"];
78
+ const claimed = new Set(Object.keys(operator).map(name => name.toLowerCase()));
79
+ const merged: Record<string, string> = { ...operator };
80
+ for (const [name, value] of Object.entries(registry)) {
81
+ if (!claimed.has(name.toLowerCase())) merged[name] = value;
82
+ }
83
+ return [merged, "operator"];
84
+ }
85
+
86
+ export function resolvedBaseUrl(
87
+ entry: Readonly<ProviderRegistryEntry> | undefined,
88
+ provider: Readonly<OcxProviderConfig>,
89
+ ): [string, StaticPolicySource] {
90
+ if (!entry) return [provider.baseUrl, "operator"];
91
+ const configured = typeof provider.baseUrl === "string" ? provider.baseUrl.trim() : "";
92
+ const configuredIsResolved = configured.length > 0 && !/\{[^}]*\}/.test(configured);
93
+ if (entry.allowBaseUrlOverride && !configuredIsResolved) {
94
+ throw new Error(`Invalid baseUrl for provider "${entry.id}": expected a nonblank URL without unresolved placeholders`);
95
+ }
96
+ return (/\{[^}]*\}/.test(entry.baseUrl) || entry.allowBaseUrlOverride) && configuredIsResolved
97
+ ? [configured, "operator"]
98
+ : [entry.baseUrl, "registry"];
99
+ }
100
+
101
+ export function sameStringArray(left: readonly string[] | undefined, right: readonly string[]): boolean {
102
+ return left?.length === right.length && left.every((value, index) => value === right[index]);
103
+ }
104
+
105
+ /** Legacy config-map lookup: exact id, colon family, then case-folded exact id. */
106
+ export function legacyModelValue<T>(record: Readonly<Record<string, T>> | undefined, modelId: string): T | undefined {
107
+ if (!record) return undefined;
108
+ if (Object.hasOwn(record, modelId)) return record[modelId];
109
+ const colon = modelId.indexOf(":");
110
+ if (colon > 0 && Object.hasOwn(record, modelId.slice(0, colon))) return record[modelId.slice(0, colon)];
111
+ const folded = modelId.toLowerCase();
112
+ return Object.entries(record).find(([key]) => key.toLowerCase() === folded)?.[1];
113
+ }
114
+
115
+ /** Provenance from the same merged-key walk as legacyModelValue. */
116
+ export function legacyModelSource<T>(
117
+ operator: Readonly<Record<string, T>> | undefined,
118
+ registry: Readonly<Record<string, T>> | undefined,
119
+ modelId: string,
120
+ ): StaticPolicySource {
121
+ const merged = { ...(registry ?? {}), ...(operator ?? {}) };
122
+ let winningKey: string | undefined;
123
+ if (Object.hasOwn(merged, modelId)) winningKey = modelId;
124
+ const colon = modelId.indexOf(":");
125
+ if (winningKey === undefined && colon > 0 && Object.hasOwn(merged, modelId.slice(0, colon))) {
126
+ winningKey = modelId.slice(0, colon);
127
+ }
128
+ if (winningKey === undefined) {
129
+ const folded = modelId.toLowerCase();
130
+ winningKey = Object.keys(merged).find(key => key.toLowerCase() === folded);
131
+ }
132
+ if (winningKey === undefined) return "unknown";
133
+ return Object.hasOwn(operator ?? {}, winningKey) ? "operator" : "registry";
134
+ }
135
+
136
+ export function anthropicFamilyContextWindow(
137
+ record: Readonly<Record<string, number>> | undefined,
138
+ id: string,
139
+ ): number | undefined {
140
+ if (!record || !id.toLowerCase().startsWith("claude-")) return undefined;
141
+ let candidate = id;
142
+ while (true) {
143
+ const cut = candidate.lastIndexOf("-");
144
+ if (cut <= 0 || !/^\d+$/.test(candidate.slice(cut + 1))) return undefined;
145
+ candidate = candidate.slice(0, cut);
146
+ const value = record[candidate]
147
+ ?? Object.entries(record).find(([key]) => key.toLowerCase() === candidate.toLowerCase())?.[1];
148
+ if (typeof value === "number" && value > 0) return value;
149
+ }
150
+ }
151
+
152
+ export function wireDefault(
153
+ declared: ModelWireDefault | undefined,
154
+ provider: Readonly<OcxProviderConfig>,
155
+ entry: Readonly<ProviderRegistryEntry> | undefined,
156
+ inbound: InboundWire,
157
+ effectiveAuthMode: OcxProviderConfig["authMode"] | undefined,
158
+ ): string | undefined {
159
+ if (declared === undefined || !MODEL_ADAPTER_OVERRIDE_ALLOWED.has(provider.adapter)) return undefined;
160
+ if (typeof declared !== "string") {
161
+ if (!declared.inbound.includes(inbound)) return undefined;
162
+ const authMode = effectiveAuthMode ?? provider.authMode ?? entry?.authKind;
163
+ if (declared.authModes && authMode && !declared.authModes.includes(authMode)) return undefined;
164
+ }
165
+ const wire = typeof declared === "string" ? declared : declared.wire;
166
+ return MODEL_ADAPTER_OVERRIDE_ALLOWED.has(wire) ? wire : undefined;
167
+ }