@desplega.ai/agent-swarm 1.156.0 → 1.158.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 (263) hide show
  1. package/dist/{acp-adapter-c1msptrw.js → acp-adapter-xaq4n6pc.js} +1 -1
  2. package/dist/{actions-wd41qtdc.js → actions-p9hz5yat.js} +15 -15
  3. package/dist/{app-tz2qrnah.js → app-g26wdcz6.js} +4 -4
  4. package/dist/{artifact-td4q4dch.js → artifact-3v5t9jtg.js} +1 -1
  5. package/dist/{assistant-c3q1zj2t.js → assistant-wydfqkb3.js} +16 -16
  6. package/dist/{boot-reembed-0be1krkm.js → boot-reembed-g5ckg9yb.js} +6 -6
  7. package/dist/{boot-reembed-r00j03f3.js → boot-reembed-se8zmdcp.js} +5 -5
  8. package/dist/{boot-scrub-logs-9j4hd0vw.js → boot-scrub-logs-wfxqan61.js} +3 -3
  9. package/dist/{seed-pricing-ncgxz1r2.js → boot-seeds-s3q01xj3.js} +10 -10
  10. package/dist/{claude-adapter-112w28qc.js → claude-adapter-tv2x4f36.js} +7 -7
  11. package/dist/{claude-managed-adapter-ea2aga6w.js → claude-managed-adapter-41b2s7fd.js} +2 -2
  12. package/dist/{claude-sdk-session-k7pb5kfz.js → claude-sdk-session-t442qz6f.js} +8 -8
  13. package/dist/{cli-e781c6f9.js → cli-0xjkj1j7.js} +1 -0
  14. package/dist/{cli-58rgvkt4.js → cli-1hkrch3k.js} +2 -2
  15. package/dist/{cli-mx3bzbv8.js → cli-20cj37vt.js} +1968 -44
  16. package/dist/{cli-h0wdadsx.js → cli-4198qc9v.js} +7 -3
  17. package/dist/{cli-24w39x6n.js → cli-47m6dkd3.js} +362 -126
  18. package/dist/{cli-90x9ewbz.js → cli-53sz8gkz.js} +1 -1
  19. package/dist/{cli-005pze6s.js → cli-5d10vd2m.js} +1 -1
  20. package/dist/{cli-08n8jxcw.js → cli-65hjmev5.js} +57 -17
  21. package/dist/{cli-scwq51gn.js → cli-68w09sjw.js} +7 -1
  22. package/dist/{cli-7j2098n5.js → cli-7gtvvpbh.js} +4 -4
  23. package/dist/{cli-b05d7szr.js → cli-7s3syk22.js} +18 -11
  24. package/dist/{cli-9w4ex8vh.js → cli-8qmme6vd.js} +2 -2
  25. package/dist/{cli-28wkjpdp.js → cli-987hg0aa.js} +2 -2
  26. package/dist/{cli-7pgcpcrg.js → cli-9httdpyq.js} +1 -1
  27. package/dist/{cli-jk26c1sz.js → cli-aky8tctm.js} +26 -93
  28. package/dist/{cli-865swy5p.js → cli-c07r9a2m.js} +3 -2
  29. package/dist/{cli-nyqza443.js → cli-fgqxwrpv.js} +291 -12
  30. package/dist/{cli-9pyah9c4.js → cli-ftfvggzx.js} +633 -166
  31. package/dist/{cli-ytxs7mn1.js → cli-g8djp6qe.js} +17 -0
  32. package/dist/{cli-avkd6mqv.js → cli-h967nb6r.js} +551 -0
  33. package/dist/{cli-y8bfxjtw.js → cli-j55n64b6.js} +23 -22
  34. package/dist/{cli-7vj52450.js → cli-j57qkrpq.js} +86 -28
  35. package/dist/{cli-tjmghmm5.js → cli-q67y4wzm.js} +6 -3
  36. package/dist/{cli-n6zq3kbd.js → cli-rj19hc34.js} +1 -1
  37. package/dist/{cli-tp0d7vzb.js → cli-rjehvrts.js} +4 -4
  38. package/dist/{cli-s8hpxeg4.js → cli-rqz8qbw7.js} +245 -75
  39. package/dist/{cli-p37sg0a9.js → cli-s8eet254.js} +1 -1
  40. package/dist/cli-t1ze64h3.js +811 -0
  41. package/dist/{cli-hc2fkhdv.js → cli-ws6rqycm.js} +3 -2
  42. package/dist/{cli-t1cd3mhp.js → cli-wscdvcqz.js} +13 -5
  43. package/dist/{cli-xa4j64zh.js → cli-x24pshtq.js} +5 -5
  44. package/dist/{cli-nbp6m6gp.js → cli-xberxa1r.js} +51 -26
  45. package/dist/{cli-szcyv1mm.js → cli-xhaeg2nc.js} +1 -1
  46. package/dist/cli.js +30 -16
  47. package/dist/{codex-adapter-g4tj1f2g.js → codex-adapter-cnm8wk11.js} +5 -5
  48. package/dist/{codex-session-runner-ad8ha7zt.js → codex-session-runner-gfg547zj.js} +5 -5
  49. package/dist/{commands-z3gd8ppc.js → commands-e3bn0p75.js} +3 -3
  50. package/dist/{db-bezm97r9.js → db-03v9kzr2.js} +17 -3
  51. package/dist/{dispatcher-a97hc33y.js → dispatcher-nrmg8yht.js} +14 -14
  52. package/dist/{dsh-adapter-1dwg97zv.js → dsh-adapter-k03nfqa6.js} +2 -2
  53. package/dist/{handlers-wtdy1x02.js → handlers-aqcedbyb.js} +17 -17
  54. package/dist/{hook-7edgmzng.js → hook-7vkskkre.js} +19 -11
  55. package/dist/{hook-fvs58a5b.js → hook-ybvmrmhq.js} +4 -4
  56. package/dist/{http-phnf93hp.js → http-2eqa8t24.js} +432 -195
  57. package/dist/{index-7x131mmf.js → index-1yks3qcr.js} +14 -14
  58. package/dist/{index-1fktvwxc.js → index-a3vn96n8.js} +31 -28
  59. package/dist/{index-yp8rasxk.js → index-c6zsv1bd.js} +5 -5
  60. package/dist/{index-50jxgw0d.js → index-chgdkq36.js} +14 -14
  61. package/dist/{index-7jwk7nsm.js → index-x71bvq0p.js} +15 -15
  62. package/dist/{keepalive-nnz07ebd.js → keepalive-vtkf5n99.js} +5 -5
  63. package/dist/{lead-mg7qcgww.js → lead-h3sp357x.js} +26 -26
  64. package/dist/{maintenance-ywmnqrpx.js → maintenance-jzeqtk3q.js} +6 -6
  65. package/dist/{oauth-refresh-sweep-c63sqfs1.js → oauth-refresh-sweep-qp3dzmdp.js} +4 -4
  66. package/dist/{onboard-2zj8sqkq.js → onboard-tmsp0qbz.js} +278 -81
  67. package/dist/{opencode-adapter-z64xjzec.js → opencode-adapter-x6x2da1z.js} +3 -3
  68. package/dist/{otel-impl-jgdfm26f.js → otel-impl-9mz73q65.js} +416 -301
  69. package/dist/{pi-mono-adapter-2b7mw16r.js → pi-mono-adapter-m6dvv0dz.js} +2 -2
  70. package/dist/{pricing-refresh-3whntb69.js → pricing-refresh-v1cbr9te.js} +5 -5
  71. package/dist/{rbac-roles-3zptcc3p.js → rbac-roles-c9wqz83x.js} +4 -4
  72. package/dist/{render-v2-dbvpyysc.js → render-v2-gryrh9h8.js} +4 -4
  73. package/dist/{setup-qwx0j8z9.js → setup-q9720bt6.js} +2 -2
  74. package/dist/{virtual-modules-8qheft18.js → virtual-modules-3htpgn8x.js} +1 -1
  75. package/dist/{work-objects-sjbcmvep.js → work-objects-b76x7deb.js} +17 -17
  76. package/dist/{worker-xezqdkb7.js → worker-6vrxbv41.js} +26 -26
  77. package/openapi.json +1626 -629
  78. package/package.json +3 -2
  79. package/src/apps/catalog.generated.json +229 -0
  80. package/src/apps/page-validator.ts +71 -16
  81. package/src/apps/row-store.ts +66 -11
  82. package/src/apps/sync.ts +59 -17
  83. package/src/artifact-sdk/browser-sdk.ts +436 -2
  84. package/src/be/approval-sweeps.ts +109 -0
  85. package/src/be/boot-seeds.ts +40 -0
  86. package/src/be/chunking.ts +1 -1
  87. package/src/be/db/agents.ts +20 -0
  88. package/src/be/db/approvals.ts +78 -0
  89. package/src/be/db/tasks/read.ts +197 -39
  90. package/src/be/db/tasks/write.ts +41 -9
  91. package/src/be/db-client.ts +107 -48
  92. package/src/be/db.ts +219 -76
  93. package/src/be/events.ts +33 -1
  94. package/src/be/memory/graph-expansion.ts +10 -3
  95. package/src/be/memory/providers/sqlite-store.ts +55 -13
  96. package/src/be/memory/raters/retrieval.ts +5 -2
  97. package/src/be/memory/reranker.ts +26 -2
  98. package/src/be/memory/types.ts +2 -0
  99. package/src/be/migrations/166_approval_request_auto_cancellation.sql +9 -0
  100. package/src/be/migrations/171_memory_retrieval_relevance.sql +8 -0
  101. package/src/be/migrations/175_workflow_runs_list_index.sql +11 -0
  102. package/src/be/migrations/177_events_event_agent_created_index.sql +11 -0
  103. package/src/be/models-catalog.ts +2 -0
  104. package/src/be/modelsdev-cache.json +1857 -0
  105. package/src/be/modelsdev-cache.ts +14 -1
  106. package/src/be/pricing-normalize.ts +2 -0
  107. package/src/be/scripts/typecheck.ts +1 -0
  108. package/src/be/seed-pricing.ts +3 -1
  109. package/src/be/seed-skills/bundled-files.generated.json +1 -1
  110. package/src/be/steering.ts +53 -3
  111. package/src/be/swarm-config-guard.ts +3 -0
  112. package/src/be/task-citations.ts +29 -0
  113. package/src/cli.tsx +14 -1
  114. package/src/commands/onboard/compose-generator.ts +8 -3
  115. package/src/commands/onboard/container-engine.ts +220 -0
  116. package/src/commands/onboard/manifest.ts +1 -0
  117. package/src/commands/onboard/steps/health-check.tsx +4 -1
  118. package/src/commands/onboard/steps/prereq-check.tsx +50 -54
  119. package/src/commands/onboard/steps/start.tsx +31 -16
  120. package/src/commands/onboard/types.ts +7 -2
  121. package/src/commands/onboard.tsx +39 -4
  122. package/src/commands/profile-sync.ts +79 -26
  123. package/src/commands/runner.ts +8 -1
  124. package/src/extensions/catalog.generated.json +17 -0
  125. package/src/extensions/contract-types.generated.ts +1 -1
  126. package/src/heartbeat/heartbeat.ts +263 -103
  127. package/src/hooks/hook.ts +21 -12
  128. package/src/http/agents.ts +35 -0
  129. package/src/http/approval-requests.ts +136 -64
  130. package/src/http/apps.ts +14 -3
  131. package/src/http/config.ts +15 -1
  132. package/src/http/events.ts +62 -2
  133. package/src/http/index.ts +6 -4
  134. package/src/http/memory.ts +21 -7
  135. package/src/http/schedules.ts +1 -1
  136. package/src/http/session-data.ts +9 -4
  137. package/src/http/sessions.ts +25 -18
  138. package/src/http/stats.ts +19 -7
  139. package/src/http/status.ts +11 -1
  140. package/src/http/tasks.ts +40 -8
  141. package/src/http/webhooks.ts +67 -46
  142. package/src/http/workflows.ts +15 -20
  143. package/src/linear/outbound.ts +37 -15
  144. package/src/otel-impl.ts +151 -1
  145. package/src/otel.ts +14 -3
  146. package/src/prompts/memories.ts +19 -2
  147. package/src/providers/claude-managed-models.ts +8 -0
  148. package/src/providers/codex-agents-md.ts +140 -17
  149. package/src/providers/modelsdev-reasoning.json +551 -0
  150. package/src/rbac/legacy-policy.ts +16 -0
  151. package/src/rbac/permissions.ts +4 -0
  152. package/src/scheduler/deferred-task-waits.ts +28 -0
  153. package/src/scheduler/schedule-task.ts +3 -0
  154. package/src/scheduler/scheduler.ts +14 -0
  155. package/src/scripts-runtime/sdk-allowlist.ts +1 -0
  156. package/src/scripts-runtime/swarm-sdk.ts +9 -0
  157. package/src/scripts-runtime/types/stdlib.d.ts +1 -0
  158. package/src/scripts-runtime/types/swarm-extension.d.ts +1 -0
  159. package/src/scripts-runtime/types/swarm-sdk.d.ts +1 -0
  160. package/src/server.ts +12 -7
  161. package/src/slack/app.ts +35 -4
  162. package/src/slack/connection-state.ts +17 -0
  163. package/src/tasks/context-key.ts +1 -0
  164. package/src/tasks/worker-follow-up.ts +6 -2
  165. package/src/tests/agent-task-activity.test.ts +74 -0
  166. package/src/tests/agents-list-model-display.test.ts +6 -1
  167. package/src/tests/approval-auto-cancellation-migration.test.ts +104 -0
  168. package/src/tests/approval-requests.test.ts +395 -0
  169. package/src/tests/approval-sweeps-config.test.ts +47 -0
  170. package/src/tests/approval-sweeps.test.ts +508 -0
  171. package/src/tests/apps-kibo-blocks.test.ts +77 -0
  172. package/src/tests/apps-spike.test.ts +56 -1
  173. package/src/tests/apps-sync-engine.test.ts +20 -9
  174. package/src/tests/boot-seeds.test.ts +170 -0
  175. package/src/tests/cancel-approval-request-tool.test.ts +115 -0
  176. package/src/tests/claude-managed-adapter.test.ts +6 -0
  177. package/src/tests/codex-adapter.test.ts +126 -1
  178. package/src/tests/config-key-filter.test.ts +80 -0
  179. package/src/tests/context-window.test.ts +1 -0
  180. package/src/tests/db-client-busy-retry.test.ts +96 -0
  181. package/src/tests/db-client.test.ts +60 -1
  182. package/src/tests/db-task-read-contract.test.ts +10 -0
  183. package/src/tests/db-task-write-contract.test.ts +9 -0
  184. package/src/tests/deferred-schedule-reaper.test.ts +193 -0
  185. package/src/tests/docs-index-footprint.test.js +3 -3
  186. package/src/tests/events-http.test.ts +103 -0
  187. package/src/tests/extensions-catalog.test.ts +22 -17
  188. package/src/tests/extensions-pre-task.test.ts +107 -0
  189. package/src/tests/fixtures/kibo-blocks-definition.json.txt +105 -0
  190. package/src/tests/follow-up-config-inheritance.test.ts +260 -0
  191. package/src/tests/heartbeat-orphan-resume.test.ts +84 -0
  192. package/src/tests/heartbeat-reboot-live.test.ts +95 -0
  193. package/src/tests/heartbeat-stall-cas.test.ts +80 -0
  194. package/src/tests/heartbeat.test.ts +99 -3
  195. package/src/tests/hook-mcp-config.test.ts +29 -0
  196. package/src/tests/http-api-integration.test.ts +16 -2
  197. package/src/tests/kv-storage.test.ts +62 -0
  198. package/src/tests/linear-outbound-sync.test.ts +120 -5
  199. package/src/tests/list-endpoint-slimming.test.ts +91 -0
  200. package/src/tests/memory-graph-organic-route.test.ts +155 -0
  201. package/src/tests/memory-http-recall-gating.test.ts +14 -4
  202. package/src/tests/memory-hybrid.test.ts +161 -1
  203. package/src/tests/memory-prompt-recall-crowdout.test.ts +297 -0
  204. package/src/tests/memory.test.ts +22 -0
  205. package/src/tests/onboard-container-engine.test.ts +240 -0
  206. package/src/tests/otel-event-loop-and-logs.test.ts +99 -0
  207. package/src/tests/pricing-routes.test.ts +14 -0
  208. package/src/tests/profile-sync-warning.test.ts +8 -4
  209. package/src/tests/promote-draft-task-route.test.ts +19 -0
  210. package/src/tests/provider-registration.test.ts +296 -42
  211. package/src/tests/rbac-engine.test.ts +30 -0
  212. package/src/tests/reasoning-effort.test.ts +8 -0
  213. package/src/tests/script-connections.test.ts +7 -0
  214. package/src/tests/sdk-allowlist.test.ts +39 -0
  215. package/src/tests/session-costs-model-key-normalize.test.ts +1 -0
  216. package/src/tests/sessions-detail-batch.test.ts +250 -0
  217. package/src/tests/sessions.test.ts +118 -0
  218. package/src/tests/slack-config.test.ts +22 -0
  219. package/src/tests/sonnet-5-5-registry.test.ts +44 -0
  220. package/src/tests/status.test.ts +36 -1
  221. package/src/tests/swarm-diff.test.ts +316 -10
  222. package/src/tests/task-completion-idempotency.test.ts +2 -1
  223. package/src/tests/tasks-requested-by-filter.test.ts +3 -1
  224. package/src/tests/tool-annotations.test.ts +1 -1
  225. package/src/tests/ui-list-slim-projections.test.ts +158 -0
  226. package/src/tests/webhooks-task-blocked.test.ts +127 -0
  227. package/src/tests/workflow-approval-recovery.test.ts +203 -0
  228. package/src/tests/workflow-hitl-routing.test.ts +22 -1
  229. package/src/tests/workflow-hitl-slack-card.test.ts +52 -0
  230. package/src/tests/workflow-http-v2.test.ts +99 -8
  231. package/src/tests/workflow-retry-validation.test.ts +56 -0
  232. package/src/tests/workflow-tla-races.test.ts +389 -0
  233. package/src/tests/workflow-validation-port-routing.test.ts +113 -1
  234. package/src/tools/cancel-approval-request.ts +57 -0
  235. package/src/tools/memory-search.ts +1 -0
  236. package/src/tools/request-human-input.ts +4 -2
  237. package/src/tools/schedules/list-schedules.ts +4 -2
  238. package/src/tools/send-task.ts +4 -0
  239. package/src/tools/templates.ts +19 -0
  240. package/src/tools/tool-config.ts +2 -1
  241. package/src/tools/workflows/list-workflow-runs.ts +1 -0
  242. package/src/types.ts +38 -0
  243. package/src/utils/context-window.ts +1 -0
  244. package/src/workflows/approval-cancel.ts +152 -0
  245. package/src/workflows/approval-notifications.ts +84 -0
  246. package/src/workflows/checkpoint.ts +10 -5
  247. package/src/workflows/definition.ts +21 -0
  248. package/src/workflows/engine.ts +152 -21
  249. package/src/workflows/executors/human-in-the-loop.ts +1 -1
  250. package/src/workflows/recovery.ts +100 -45
  251. package/src/workflows/resume.ts +49 -18
  252. package/src/workflows/retry-poller.ts +71 -21
  253. package/templates/extensions/README.md +1 -0
  254. package/templates/extensions/github-sender-allowlist/README.md +18 -0
  255. package/templates/extensions/github-sender-allowlist/hooks.ts +55 -0
  256. package/templates/extensions/github-sender-allowlist/manifest.json +8 -0
  257. package/templates/skills/apps/content.md +20 -1
  258. package/templates/skills/code-quality/content.md +26 -1
  259. package/templates/skills/pages/content.md +16 -4
  260. package/templates/skills/pages/files/examples/multiplayer-board.html +3 -12
  261. package/templates/skills/scheduling/content.md +1 -1
  262. package/dist/cli-2daksqps.js +0 -378
  263. package/dist/rbac-roles-3zw68x72.js +0 -37
@@ -1,9 +1,9 @@
1
- import {
2
- createSwarmEventHandler
3
- } from "./cli-hsxj0yar.js";
4
1
  import {
5
2
  resolveCodexPrompt
6
3
  } from "./cli-r94z9p1z.js";
4
+ import {
5
+ createSwarmEventHandler
6
+ } from "./cli-hsxj0yar.js";
7
7
  import {
8
8
  readPkgVersion
9
9
  } from "./cli-2djtr51b.js";
@@ -13,20 +13,20 @@ import {
13
13
  import {
14
14
  CTX_MODE_NUDGE_EVERY
15
15
  } from "./cli-zm7njwzd.js";
16
+ import {
17
+ summarizeSession
18
+ } from "./cli-cw9zck8j.js";
16
19
  import {
17
20
  CONTEXT_FORMULA,
18
21
  clampContextPercent,
19
22
  computeContextUsedUnified
20
- } from "./cli-e781c6f9.js";
21
- import {
22
- summarizeSession
23
- } from "./cli-cw9zck8j.js";
23
+ } from "./cli-0xjkj1j7.js";
24
24
  import {
25
25
  SessionErrorTracker
26
26
  } from "./cli-npssxgaz.js";
27
27
  import {
28
28
  applyReasoningEffort
29
- } from "./cli-avkd6mqv.js";
29
+ } from "./cli-h967nb6r.js";
30
30
  import {
31
31
  buildRatingsFromLlm,
32
32
  fetchRetrievalsForTask,
@@ -52,7 +52,7 @@ import {
52
52
  import {
53
53
  init_package,
54
54
  package_default
55
- } from "./cli-865swy5p.js";
55
+ } from "./cli-c07r9a2m.js";
56
56
  import {
57
57
  init_secret_scrubber,
58
58
  scrubSecrets
@@ -67,47 +67,114 @@ import { join as join2 } from "node:path";
67
67
  init_secret_scrubber();
68
68
 
69
69
  // src/providers/codex-agents-md.ts
70
- import { join } from "node:path";
70
+ import { lstat, mkdir, readlink, realpath, symlink, unlink } from "node:fs/promises";
71
+ import { homedir } from "node:os";
72
+ import { dirname, join, resolve, sep } from "node:path";
71
73
  var BLOCK_OPEN = "<swarm_system_prompt>";
72
74
  var BLOCK_CLOSE = "</swarm_system_prompt>";
73
75
  var BLOCK_REGEX = /<swarm_system_prompt>[\s\S]*?<\/swarm_system_prompt>\n?/;
76
+ var DEFAULT_STATE_DIR = join(homedir(), ".cache", "agent-swarm", "codex-agents-md");
74
77
  var NOOP_HANDLE = {
75
78
  cleanup: async () => {}
76
79
  };
77
- async function writeCodexAgentsMd(cwd, systemPrompt) {
80
+ async function readIfExists(path) {
81
+ const file = Bun.file(path);
82
+ return await file.exists() ? await file.text() : null;
83
+ }
84
+ function recordPathFor(stateDir, realCwd) {
85
+ const key = new Bun.CryptoHasher("sha256").update(realCwd).digest("hex");
86
+ return join(stateDir, `${key}.json`);
87
+ }
88
+ async function readRecord(recordPath, realCwd) {
89
+ try {
90
+ const record = JSON.parse(await Bun.file(recordPath).text());
91
+ if (record.cwd === realCwd && typeof record.linkTarget === "string") {
92
+ return { cwd: record.cwd, linkTarget: record.linkTarget };
93
+ }
94
+ } catch {}
95
+ return null;
96
+ }
97
+ async function inTreeTarget(realCwd, agentsMdPath, linkTarget) {
98
+ const target = await realpath(resolve(dirname(agentsMdPath), linkTarget)).catch(() => null);
99
+ const prefix = realCwd.endsWith(sep) ? realCwd : `${realCwd}${sep}`;
100
+ if (target === null || !target.startsWith(prefix)) {
101
+ return null;
102
+ }
103
+ const stat = await lstat(target).catch(() => null);
104
+ return stat?.isFile() ? target : null;
105
+ }
106
+ async function restoreSymlink(agentsMdPath, realCwd, linkTarget) {
107
+ const stat = await lstat(agentsMdPath).catch(() => null);
108
+ const current = stat?.isFile() ? await Bun.file(agentsMdPath).text() : null;
109
+ await unlink(agentsMdPath).catch(() => {});
110
+ await symlink(linkTarget, agentsMdPath);
111
+ if (current === null) {
112
+ return;
113
+ }
114
+ const target = await inTreeTarget(realCwd, agentsMdPath, linkTarget);
115
+ if (target === null) {
116
+ return;
117
+ }
118
+ const stripped = current.replace(BLOCK_REGEX, "");
119
+ if (stripped !== await Bun.file(target).text()) {
120
+ await Bun.write(target, stripped);
121
+ }
122
+ }
123
+ async function writeCodexAgentsMd(cwd, systemPrompt, options = {}) {
78
124
  if (!cwd || !systemPrompt) {
79
125
  return NOOP_HANDLE;
80
126
  }
81
127
  const agentsMdPath = join(cwd, "AGENTS.md");
82
128
  const claudeMdPath = join(cwd, "CLAUDE.md");
129
+ const stateDir = options.stateDir ?? DEFAULT_STATE_DIR;
130
+ const realCwd = await realpath(cwd).catch(() => resolve(cwd));
131
+ const recordPath = recordPathFor(stateDir, realCwd);
83
132
  const block = `${BLOCK_OPEN}
84
133
  ${systemPrompt}
85
134
  ${BLOCK_CLOSE}`;
86
- const agentsMdFile = Bun.file(agentsMdPath);
87
- const existingAgentsMdExists = await agentsMdFile.exists();
135
+ let stat = await lstat(agentsMdPath).catch(() => null);
136
+ const record = await readRecord(recordPath, realCwd);
137
+ if (record) {
138
+ if (stat?.isFile() && BLOCK_REGEX.test(await Bun.file(agentsMdPath).text())) {
139
+ await restoreSymlink(agentsMdPath, realCwd, record.linkTarget);
140
+ stat = await lstat(agentsMdPath);
141
+ }
142
+ await unlink(recordPath).catch(() => {});
143
+ }
144
+ if (stat?.isSymbolicLink()) {
145
+ const linkTarget = await readlink(agentsMdPath);
146
+ const target = await inTreeTarget(realCwd, agentsMdPath, linkTarget);
147
+ const targetContent = target !== null ? await Bun.file(target).text() : "";
148
+ await mkdir(stateDir, { recursive: true });
149
+ await Bun.write(recordPath, JSON.stringify({ cwd: realCwd, linkTarget }));
150
+ await unlink(agentsMdPath);
151
+ await Bun.write(agentsMdPath, `${block}
152
+ ${targetContent.replace(BLOCK_REGEX, "")}`);
153
+ return {
154
+ async cleanup() {
155
+ try {
156
+ await restoreSymlink(agentsMdPath, realCwd, linkTarget);
157
+ await unlink(recordPath).catch(() => {});
158
+ } catch {}
159
+ }
160
+ };
161
+ }
88
162
  let createdFresh = false;
89
163
  let newContent;
90
- if (!existingAgentsMdExists) {
91
- const claudeMdFile = Bun.file(claudeMdPath);
92
- const claudeMdExists = await claudeMdFile.exists();
93
- if (claudeMdExists) {
94
- const claudeContent = await claudeMdFile.text();
95
- newContent = `${block}
164
+ if (!stat) {
165
+ const claudeContent = await readIfExists(claudeMdPath);
166
+ newContent = claudeContent !== null ? `${block}
96
167
 
97
- ${claudeContent}`;
98
- } else {
99
- newContent = `${block}
168
+ ${claudeContent}` : `${block}
100
169
  `;
101
- }
102
170
  createdFresh = true;
103
171
  } else {
104
- const existingContent = await agentsMdFile.text();
172
+ const existingContent = await Bun.file(agentsMdPath).text();
105
173
  if (BLOCK_REGEX.test(existingContent)) {
106
174
  newContent = existingContent.replace(BLOCK_REGEX, `${block}
107
175
  `);
108
176
  } else {
109
177
  newContent = `${block}
110
-
111
178
  ${existingContent}`;
112
179
  }
113
180
  }
@@ -244,14 +311,14 @@ class CodexAppServer {
244
311
  if (this.closePromise)
245
312
  return Promise.reject(new Error("Codex app-server closed"));
246
313
  const id = this.nextId++;
247
- return new Promise((resolve, reject) => {
314
+ return new Promise((resolve2, reject) => {
248
315
  const timer = setTimeout(() => {
249
316
  this.pending.delete(id);
250
317
  reject(new Error(`Codex app-server ${method} timed out after ${this.requestTimeoutMs}ms`));
251
318
  }, this.requestTimeoutMs);
252
319
  this.pending.set(id, {
253
320
  method,
254
- resolve,
321
+ resolve: resolve2,
255
322
  reject,
256
323
  timer
257
324
  });
@@ -147639,6 +147706,36 @@ var modelsdev_cache_default = {
147639
147706
  name: "Anthropic",
147640
147707
  doc: "https://docs.anthropic.com/en/docs/about-claude/models",
147641
147708
  models: {
147709
+ "claude-sonnet-5-5": {
147710
+ id: "claude-sonnet-5-5",
147711
+ name: "Claude Sonnet 5.5",
147712
+ reasoning: true,
147713
+ reasoning_options: [
147714
+ {
147715
+ type: "effort",
147716
+ values: [
147717
+ "low",
147718
+ "medium",
147719
+ "high",
147720
+ "xhigh",
147721
+ "max"
147722
+ ]
147723
+ }
147724
+ ],
147725
+ knowledge: "2026-06",
147726
+ release_date: "2026-09-28",
147727
+ last_updated: "2026-09-28",
147728
+ cost: {
147729
+ input: 2,
147730
+ output: 10,
147731
+ cache_read: 0.2,
147732
+ cache_write: 2.5
147733
+ },
147734
+ limit: {
147735
+ context: 1e6,
147736
+ output: 128000
147737
+ }
147738
+ },
147642
147739
  "claude-opus-5-5": {
147643
147740
  id: "claude-opus-5-5",
147644
147741
  name: "Claude Opus 5.5",
@@ -272277,6 +272374,1718 @@ var modelsdev_cache_default = {
272277
272374
  input: 0,
272278
272375
  output: 0
272279
272376
  }
272377
+ },
272378
+ "stealth/space-bunny-alpha": {
272379
+ id: "stealth/space-bunny-alpha",
272380
+ name: "Space Bunny Alpha",
272381
+ description: "Multimodal reasoning model for visual analysis, planning, and tool use",
272382
+ family: "alpha",
272383
+ attachment: true,
272384
+ reasoning: true,
272385
+ reasoning_options: [
272386
+ {
272387
+ type: "effort",
272388
+ values: [
272389
+ "low",
272390
+ "medium",
272391
+ "high",
272392
+ "xhigh",
272393
+ "max"
272394
+ ]
272395
+ }
272396
+ ],
272397
+ tool_call: true,
272398
+ structured_output: false,
272399
+ temperature: true,
272400
+ release_date: "2026-09-23",
272401
+ last_updated: "2026-09-23",
272402
+ modalities: {
272403
+ input: [
272404
+ "text",
272405
+ "image",
272406
+ "video"
272407
+ ],
272408
+ output: [
272409
+ "text"
272410
+ ]
272411
+ },
272412
+ open_weights: false,
272413
+ limit: {
272414
+ context: 1e6,
272415
+ output: 524288
272416
+ },
272417
+ cost: {
272418
+ input: 0,
272419
+ output: 0
272420
+ }
272421
+ },
272422
+ "prism-ml/ternary-bonsai-2-27b": {
272423
+ id: "prism-ml/ternary-bonsai-2-27b",
272424
+ name: "Ternary Bonsai 2 27B",
272425
+ description: "Multimodal reasoning model for visual analysis, planning, and tool use",
272426
+ attachment: true,
272427
+ reasoning: true,
272428
+ reasoning_options: [
272429
+ {
272430
+ type: "toggle"
272431
+ },
272432
+ {
272433
+ type: "effort",
272434
+ values: [
272435
+ "medium",
272436
+ "xhigh"
272437
+ ]
272438
+ }
272439
+ ],
272440
+ tool_call: true,
272441
+ structured_output: true,
272442
+ temperature: true,
272443
+ release_date: "2026-09-18",
272444
+ last_updated: "2026-09-18",
272445
+ modalities: {
272446
+ input: [
272447
+ "text",
272448
+ "image"
272449
+ ],
272450
+ output: [
272451
+ "text"
272452
+ ]
272453
+ },
272454
+ open_weights: true,
272455
+ limit: {
272456
+ context: 262144,
272457
+ output: 32768
272458
+ },
272459
+ cost: {
272460
+ input: 0.075,
272461
+ output: 0.5
272462
+ }
272463
+ },
272464
+ "anthropic/claude-opus-5.5": {
272465
+ id: "anthropic/claude-opus-5.5",
272466
+ name: "Claude Opus 5.5",
272467
+ description: "Flagship Claude model for deep reasoning, coding, and long-horizon agents",
272468
+ family: "claude-opus",
272469
+ attachment: true,
272470
+ reasoning: true,
272471
+ reasoning_options: [
272472
+ {
272473
+ type: "effort",
272474
+ values: [
272475
+ "low",
272476
+ "medium",
272477
+ "high",
272478
+ "xhigh",
272479
+ "max"
272480
+ ]
272481
+ }
272482
+ ],
272483
+ tool_call: true,
272484
+ structured_output: true,
272485
+ temperature: true,
272486
+ knowledge: "2026-06",
272487
+ release_date: "2026-09-22",
272488
+ last_updated: "2026-09-22",
272489
+ modalities: {
272490
+ input: [
272491
+ "text",
272492
+ "image",
272493
+ "pdf"
272494
+ ],
272495
+ output: [
272496
+ "text"
272497
+ ]
272498
+ },
272499
+ open_weights: false,
272500
+ limit: {
272501
+ context: 1e6,
272502
+ output: 128000
272503
+ },
272504
+ cost: {
272505
+ input: 4,
272506
+ output: 20,
272507
+ cache_read: 0.2,
272508
+ cache_write: 5
272509
+ }
272510
+ },
272511
+ "cohere/command-a-plus": {
272512
+ id: "cohere/command-a-plus",
272513
+ name: "Command A+",
272514
+ description: "Cohere command model for multilingual enterprise agents, tools, and chat",
272515
+ family: "command-a",
272516
+ attachment: true,
272517
+ reasoning: true,
272518
+ reasoning_options: [
272519
+ {
272520
+ type: "toggle"
272521
+ }
272522
+ ],
272523
+ tool_call: true,
272524
+ structured_output: true,
272525
+ temperature: true,
272526
+ release_date: "2026-09-22",
272527
+ last_updated: "2026-09-22",
272528
+ modalities: {
272529
+ input: [
272530
+ "text",
272531
+ "image"
272532
+ ],
272533
+ output: [
272534
+ "text"
272535
+ ]
272536
+ },
272537
+ open_weights: false,
272538
+ limit: {
272539
+ context: 192000,
272540
+ output: 64000
272541
+ },
272542
+ cost: {
272543
+ input: 0.3,
272544
+ output: 1.5,
272545
+ cache_read: 0.15
272546
+ }
272547
+ },
272548
+ "deepseek/deepseek-v4.1-flash": {
272549
+ id: "deepseek/deepseek-v4.1-flash",
272550
+ name: "DeepSeek V4.1 Flash",
272551
+ description: "Fast DeepSeek model for efficient chat, coding help, and agent loops",
272552
+ family: "deepseek-flash",
272553
+ attachment: true,
272554
+ reasoning: true,
272555
+ reasoning_options: [
272556
+ {
272557
+ type: "toggle"
272558
+ },
272559
+ {
272560
+ type: "effort",
272561
+ values: [
272562
+ "low",
272563
+ "high",
272564
+ "max"
272565
+ ]
272566
+ }
272567
+ ],
272568
+ tool_call: true,
272569
+ structured_output: true,
272570
+ temperature: true,
272571
+ knowledge: "2025-05",
272572
+ release_date: "2026-09-10",
272573
+ last_updated: "2026-09-10",
272574
+ modalities: {
272575
+ input: [
272576
+ "text",
272577
+ "image"
272578
+ ],
272579
+ output: [
272580
+ "text"
272581
+ ]
272582
+ },
272583
+ open_weights: true,
272584
+ limit: {
272585
+ context: 1048576,
272586
+ output: 384000
272587
+ },
272588
+ cost: {
272589
+ input: 0.035,
272590
+ output: 0.29,
272591
+ cache_read: 0.001
272592
+ }
272593
+ },
272594
+ "unbiased/pareto": {
272595
+ id: "unbiased/pareto",
272596
+ name: "Pareto",
272597
+ description: "Blended multimodal model that runs multiple language models in parallel and returns a synthesized answer",
272598
+ attachment: true,
272599
+ reasoning: false,
272600
+ tool_call: true,
272601
+ structured_output: false,
272602
+ temperature: true,
272603
+ release_date: "2026-09-17",
272604
+ last_updated: "2026-09-17",
272605
+ modalities: {
272606
+ input: [
272607
+ "text",
272608
+ "image"
272609
+ ],
272610
+ output: [
272611
+ "text"
272612
+ ]
272613
+ },
272614
+ open_weights: false,
272615
+ limit: {
272616
+ context: 262144,
272617
+ output: 131072
272618
+ },
272619
+ cost: {
272620
+ input: 2.5,
272621
+ output: 7.5,
272622
+ cache_read: 0.25
272623
+ }
272624
+ },
272625
+ "perceptron/perceptron-mk1.5": {
272626
+ id: "perceptron/perceptron-mk1.5",
272627
+ name: "Perceptron Mk1.5",
272628
+ description: "Multimodal reasoning model for visual analysis, planning, and tool use",
272629
+ attachment: true,
272630
+ reasoning: true,
272631
+ reasoning_options: [
272632
+ {
272633
+ type: "effort",
272634
+ values: [
272635
+ "none",
272636
+ "minimal",
272637
+ "low",
272638
+ "medium",
272639
+ "high"
272640
+ ]
272641
+ }
272642
+ ],
272643
+ tool_call: true,
272644
+ structured_output: true,
272645
+ temperature: true,
272646
+ release_date: "2026-09-25",
272647
+ last_updated: "2026-09-25",
272648
+ modalities: {
272649
+ input: [
272650
+ "text",
272651
+ "image",
272652
+ "video",
272653
+ "audio"
272654
+ ],
272655
+ output: [
272656
+ "text"
272657
+ ]
272658
+ },
272659
+ open_weights: false,
272660
+ limit: {
272661
+ context: 36864,
272662
+ output: 8192
272663
+ },
272664
+ cost: {
272665
+ input: 0.15,
272666
+ output: 1.5
272667
+ }
272668
+ },
272669
+ "z-ai/glm-5.3-prime": {
272670
+ id: "z-ai/glm-5.3-prime",
272671
+ name: "GLM 5.3 Prime",
272672
+ description: "Flagship GLM model for hybrid reasoning, coding, and agentic engineering",
272673
+ family: "glm",
272674
+ attachment: false,
272675
+ reasoning: true,
272676
+ reasoning_options: [
272677
+ {
272678
+ type: "effort",
272679
+ values: [
272680
+ "low",
272681
+ "high",
272682
+ "max"
272683
+ ]
272684
+ }
272685
+ ],
272686
+ tool_call: true,
272687
+ structured_output: false,
272688
+ temperature: true,
272689
+ release_date: "2026-09-23",
272690
+ last_updated: "2026-09-23",
272691
+ modalities: {
272692
+ input: [
272693
+ "text"
272694
+ ],
272695
+ output: [
272696
+ "text"
272697
+ ]
272698
+ },
272699
+ open_weights: false,
272700
+ limit: {
272701
+ context: 1e6,
272702
+ output: 131072
272703
+ },
272704
+ cost: {
272705
+ input: 2.8,
272706
+ output: 8.8,
272707
+ cache_read: 0.56
272708
+ }
272709
+ },
272710
+ "z-ai/glm-5.3-flashx": {
272711
+ id: "z-ai/glm-5.3-flashx",
272712
+ name: "GLM 5.3 FlashX",
272713
+ description: "GLM vision model for visual reasoning, documents, and multimodal agents",
272714
+ family: "glm",
272715
+ attachment: true,
272716
+ reasoning: true,
272717
+ reasoning_options: [
272718
+ {
272719
+ type: "effort",
272720
+ values: [
272721
+ "low",
272722
+ "high",
272723
+ "max"
272724
+ ]
272725
+ }
272726
+ ],
272727
+ tool_call: true,
272728
+ structured_output: false,
272729
+ temperature: true,
272730
+ release_date: "2026-09-18",
272731
+ last_updated: "2026-09-18",
272732
+ modalities: {
272733
+ input: [
272734
+ "text",
272735
+ "image",
272736
+ "video"
272737
+ ],
272738
+ output: [
272739
+ "text"
272740
+ ]
272741
+ },
272742
+ open_weights: false,
272743
+ limit: {
272744
+ context: 1048576,
272745
+ output: 131072
272746
+ },
272747
+ cost: {
272748
+ input: 0.37,
272749
+ output: 1.25,
272750
+ cache_read: 0.09
272751
+ }
272752
+ },
272753
+ "inference-net/schematron-v2-small": {
272754
+ id: "inference-net/schematron-v2-small",
272755
+ name: "Schematron V2 Small",
272756
+ description: "Efficient model for low-latency assistance, extraction, and routine automation",
272757
+ attachment: false,
272758
+ reasoning: false,
272759
+ tool_call: false,
272760
+ structured_output: true,
272761
+ temperature: true,
272762
+ release_date: "2026-09-12",
272763
+ last_updated: "2026-09-12",
272764
+ modalities: {
272765
+ input: [
272766
+ "text"
272767
+ ],
272768
+ output: [
272769
+ "text"
272770
+ ]
272771
+ },
272772
+ open_weights: true,
272773
+ limit: {
272774
+ context: 128000,
272775
+ output: 4096
272776
+ },
272777
+ cost: {
272778
+ input: 0.05,
272779
+ output: 0.23,
272780
+ cache_read: 0.05
272781
+ }
272782
+ },
272783
+ "inference-net/schematron-v2-turbo": {
272784
+ id: "inference-net/schematron-v2-turbo",
272785
+ name: "Schematron V2 Turbo",
272786
+ description: "Efficient model for low-latency assistance, extraction, and routine automation",
272787
+ attachment: false,
272788
+ reasoning: false,
272789
+ tool_call: false,
272790
+ structured_output: true,
272791
+ temperature: true,
272792
+ release_date: "2026-09-12",
272793
+ last_updated: "2026-09-12",
272794
+ modalities: {
272795
+ input: [
272796
+ "text"
272797
+ ],
272798
+ output: [
272799
+ "text"
272800
+ ]
272801
+ },
272802
+ open_weights: true,
272803
+ limit: {
272804
+ context: 128000,
272805
+ output: 8192
272806
+ },
272807
+ cost: {
272808
+ input: 0.03,
272809
+ output: 0.15,
272810
+ cache_read: 0.03
272811
+ }
272812
+ },
272813
+ "~openai/gpt-terra-latest": {
272814
+ id: "~openai/gpt-terra-latest",
272815
+ name: "GPT Terra Latest",
272816
+ description: "GPT model for general reasoning, writing, coding, and tool-assisted tasks",
272817
+ family: "gpt-terra",
272818
+ attachment: true,
272819
+ reasoning: true,
272820
+ reasoning_options: [
272821
+ {
272822
+ type: "effort",
272823
+ values: [
272824
+ "none",
272825
+ "low",
272826
+ "medium",
272827
+ "high",
272828
+ "xhigh",
272829
+ "max"
272830
+ ]
272831
+ }
272832
+ ],
272833
+ tool_call: true,
272834
+ structured_output: true,
272835
+ temperature: false,
272836
+ knowledge: "2026-02-16",
272837
+ release_date: "2026-09-11",
272838
+ last_updated: "2026-09-11",
272839
+ modalities: {
272840
+ input: [
272841
+ "pdf",
272842
+ "image",
272843
+ "text"
272844
+ ],
272845
+ output: [
272846
+ "text"
272847
+ ]
272848
+ },
272849
+ open_weights: false,
272850
+ limit: {
272851
+ context: 1050000,
272852
+ output: 128000
272853
+ },
272854
+ cost: {
272855
+ input: 2,
272856
+ output: 12,
272857
+ cache_read: 0.2,
272858
+ cache_write: 2.5,
272859
+ tiers: [
272860
+ {
272861
+ input: 4,
272862
+ output: 18,
272863
+ cache_read: 0.4,
272864
+ cache_write: 5,
272865
+ tier: {
272866
+ type: "context",
272867
+ size: 272000
272868
+ }
272869
+ }
272870
+ ],
272871
+ context_over_200k: {
272872
+ input: 4,
272873
+ output: 18,
272874
+ cache_read: 0.4,
272875
+ cache_write: 5
272876
+ }
272877
+ }
272878
+ },
272879
+ "~openai/gpt-luna-latest": {
272880
+ id: "~openai/gpt-luna-latest",
272881
+ name: "GPT Luna Latest",
272882
+ description: "GPT model for general reasoning, writing, coding, and tool-assisted tasks",
272883
+ family: "gpt-luna",
272884
+ attachment: true,
272885
+ reasoning: true,
272886
+ reasoning_options: [
272887
+ {
272888
+ type: "effort",
272889
+ values: [
272890
+ "none",
272891
+ "low",
272892
+ "medium",
272893
+ "high",
272894
+ "xhigh",
272895
+ "max"
272896
+ ]
272897
+ }
272898
+ ],
272899
+ tool_call: true,
272900
+ structured_output: true,
272901
+ temperature: false,
272902
+ knowledge: "2026-02-16",
272903
+ release_date: "2026-09-11",
272904
+ last_updated: "2026-09-11",
272905
+ modalities: {
272906
+ input: [
272907
+ "pdf",
272908
+ "image",
272909
+ "text"
272910
+ ],
272911
+ output: [
272912
+ "text"
272913
+ ]
272914
+ },
272915
+ open_weights: false,
272916
+ limit: {
272917
+ context: 1050000,
272918
+ output: 128000
272919
+ },
272920
+ cost: {
272921
+ input: 0.1,
272922
+ output: 0.5,
272923
+ cache_read: 0.01,
272924
+ cache_write: 0.125,
272925
+ tiers: [
272926
+ {
272927
+ input: 0.2,
272928
+ output: 0.75,
272929
+ cache_read: 0.02,
272930
+ cache_write: 0.25,
272931
+ tier: {
272932
+ type: "context",
272933
+ size: 272000
272934
+ }
272935
+ }
272936
+ ],
272937
+ context_over_200k: {
272938
+ input: 0.2,
272939
+ output: 0.75,
272940
+ cache_read: 0.02,
272941
+ cache_write: 0.25
272942
+ }
272943
+ }
272944
+ },
272945
+ "~openai/gpt-sol-latest": {
272946
+ id: "~openai/gpt-sol-latest",
272947
+ name: "GPT Sol Latest",
272948
+ description: "GPT model for general reasoning, writing, coding, and tool-assisted tasks",
272949
+ family: "gpt-sol",
272950
+ attachment: true,
272951
+ reasoning: true,
272952
+ reasoning_options: [
272953
+ {
272954
+ type: "effort",
272955
+ values: [
272956
+ "none",
272957
+ "low",
272958
+ "medium",
272959
+ "high",
272960
+ "xhigh",
272961
+ "max"
272962
+ ]
272963
+ }
272964
+ ],
272965
+ tool_call: true,
272966
+ structured_output: true,
272967
+ temperature: false,
272968
+ knowledge: "2026-02-16",
272969
+ release_date: "2026-09-11",
272970
+ last_updated: "2026-09-11",
272971
+ modalities: {
272972
+ input: [
272973
+ "pdf",
272974
+ "image",
272975
+ "text"
272976
+ ],
272977
+ output: [
272978
+ "text"
272979
+ ]
272980
+ },
272981
+ open_weights: false,
272982
+ limit: {
272983
+ context: 1050000,
272984
+ output: 128000
272985
+ },
272986
+ cost: {
272987
+ input: 2,
272988
+ output: 10,
272989
+ cache_read: 0.2,
272990
+ cache_write: 2.5,
272991
+ tiers: [
272992
+ {
272993
+ input: 4,
272994
+ output: 15,
272995
+ cache_read: 0.4,
272996
+ cache_write: 5,
272997
+ tier: {
272998
+ type: "context",
272999
+ size: 272000
273000
+ }
273001
+ }
273002
+ ],
273003
+ context_over_200k: {
273004
+ input: 4,
273005
+ output: 15,
273006
+ cache_read: 0.4,
273007
+ cache_write: 5
273008
+ }
273009
+ }
273010
+ },
273011
+ "~openai/gpt-astra-latest": {
273012
+ id: "~openai/gpt-astra-latest",
273013
+ name: "GPT Astra Latest",
273014
+ description: "GPT model for general reasoning, writing, coding, and tool-assisted tasks",
273015
+ family: "gpt-astra",
273016
+ attachment: true,
273017
+ reasoning: true,
273018
+ reasoning_options: [
273019
+ {
273020
+ type: "effort",
273021
+ values: [
273022
+ "low",
273023
+ "medium",
273024
+ "high",
273025
+ "xhigh",
273026
+ "max"
273027
+ ]
273028
+ }
273029
+ ],
273030
+ tool_call: true,
273031
+ structured_output: true,
273032
+ temperature: false,
273033
+ release_date: "2026-09-11",
273034
+ last_updated: "2026-09-11",
273035
+ modalities: {
273036
+ input: [
273037
+ "pdf",
273038
+ "image",
273039
+ "text"
273040
+ ],
273041
+ output: [
273042
+ "text"
273043
+ ]
273044
+ },
273045
+ open_weights: false,
273046
+ limit: {
273047
+ context: 1050000,
273048
+ output: 128000
273049
+ },
273050
+ cost: {
273051
+ input: 10,
273052
+ output: 50,
273053
+ cache_read: 1,
273054
+ cache_write: 12.5,
273055
+ tiers: [
273056
+ {
273057
+ input: 20,
273058
+ output: 75,
273059
+ cache_read: 2,
273060
+ cache_write: 25,
273061
+ tier: {
273062
+ type: "context",
273063
+ size: 272000
273064
+ }
273065
+ }
273066
+ ],
273067
+ context_over_200k: {
273068
+ input: 20,
273069
+ output: 75,
273070
+ cache_read: 2,
273071
+ cache_write: 25
273072
+ }
273073
+ }
273074
+ },
273075
+ "x-ai/grok-4.7": {
273076
+ id: "x-ai/grok-4.7",
273077
+ name: "Grok 4.7",
273078
+ description: "Grok model for agentic tool use, reasoning, coding, and live assistance",
273079
+ family: "grok",
273080
+ attachment: true,
273081
+ reasoning: true,
273082
+ reasoning_options: [
273083
+ {
273084
+ type: "effort",
273085
+ values: [
273086
+ "low",
273087
+ "medium",
273088
+ "high",
273089
+ "xhigh"
273090
+ ]
273091
+ }
273092
+ ],
273093
+ tool_call: true,
273094
+ structured_output: true,
273095
+ temperature: true,
273096
+ knowledge: "2026-05",
273097
+ release_date: "2026-09-21",
273098
+ last_updated: "2026-09-21",
273099
+ modalities: {
273100
+ input: [
273101
+ "text",
273102
+ "image",
273103
+ "pdf"
273104
+ ],
273105
+ output: [
273106
+ "text"
273107
+ ]
273108
+ },
273109
+ open_weights: false,
273110
+ limit: {
273111
+ context: 500000,
273112
+ output: 450000
273113
+ },
273114
+ cost: {
273115
+ input: 1.6,
273116
+ output: 4.8,
273117
+ cache_read: 0.4,
273118
+ tiers: [
273119
+ {
273120
+ input: 3.2,
273121
+ output: 9.6,
273122
+ cache_read: 0.8,
273123
+ tier: {
273124
+ type: "context",
273125
+ size: 200000
273126
+ }
273127
+ }
273128
+ ],
273129
+ context_over_200k: {
273130
+ input: 3.2,
273131
+ output: 9.6,
273132
+ cache_read: 0.8
273133
+ }
273134
+ }
273135
+ },
273136
+ "upstage/solar-mini4": {
273137
+ id: "upstage/solar-mini4",
273138
+ name: "Solar Mini 4",
273139
+ description: "Efficient model for low-latency assistance, extraction, and routine automation",
273140
+ family: "solar",
273141
+ attachment: false,
273142
+ reasoning: true,
273143
+ reasoning_options: [
273144
+ {
273145
+ type: "effort",
273146
+ values: [
273147
+ "none",
273148
+ "minimal",
273149
+ "low",
273150
+ "medium",
273151
+ "high",
273152
+ "xhigh",
273153
+ "max"
273154
+ ]
273155
+ }
273156
+ ],
273157
+ tool_call: true,
273158
+ structured_output: true,
273159
+ temperature: true,
273160
+ release_date: "2026-09-23",
273161
+ last_updated: "2026-09-23",
273162
+ modalities: {
273163
+ input: [
273164
+ "text"
273165
+ ],
273166
+ output: [
273167
+ "text"
273168
+ ]
273169
+ },
273170
+ open_weights: false,
273171
+ limit: {
273172
+ context: 524288,
273173
+ output: 131072
273174
+ },
273175
+ cost: {
273176
+ input: 0.05,
273177
+ output: 0.2,
273178
+ cache_read: 0.005
273179
+ }
273180
+ },
273181
+ "~deepseek/deepseek-flash-latest": {
273182
+ id: "~deepseek/deepseek-flash-latest",
273183
+ name: "DeepSeek Flash Latest",
273184
+ description: "Fast DeepSeek model for efficient chat, coding help, and agent loops",
273185
+ family: "deepseek-flash",
273186
+ attachment: true,
273187
+ reasoning: true,
273188
+ reasoning_options: [
273189
+ {
273190
+ type: "toggle"
273191
+ },
273192
+ {
273193
+ type: "effort",
273194
+ values: [
273195
+ "low",
273196
+ "high",
273197
+ "max"
273198
+ ]
273199
+ }
273200
+ ],
273201
+ tool_call: true,
273202
+ structured_output: true,
273203
+ temperature: true,
273204
+ release_date: "2026-09-14",
273205
+ last_updated: "2026-09-14",
273206
+ modalities: {
273207
+ input: [
273208
+ "text",
273209
+ "image"
273210
+ ],
273211
+ output: [
273212
+ "text"
273213
+ ]
273214
+ },
273215
+ open_weights: false,
273216
+ limit: {
273217
+ context: 1048576,
273218
+ output: 384000
273219
+ },
273220
+ cost: {
273221
+ input: 0.035,
273222
+ output: 0.29,
273223
+ cache_read: 0.001
273224
+ }
273225
+ },
273226
+ "~deepseek/deepseek-pro-latest": {
273227
+ id: "~deepseek/deepseek-pro-latest",
273228
+ name: "DeepSeek Pro Latest",
273229
+ description: "Flagship DeepSeek model for coding, reasoning, and agentic work",
273230
+ family: "deepseek",
273231
+ attachment: false,
273232
+ reasoning: true,
273233
+ reasoning_options: [
273234
+ {
273235
+ type: "toggle"
273236
+ },
273237
+ {
273238
+ type: "effort",
273239
+ values: [
273240
+ "low",
273241
+ "high",
273242
+ "max"
273243
+ ]
273244
+ }
273245
+ ],
273246
+ tool_call: true,
273247
+ structured_output: true,
273248
+ temperature: true,
273249
+ release_date: "2026-09-14",
273250
+ last_updated: "2026-09-14",
273251
+ modalities: {
273252
+ input: [
273253
+ "text"
273254
+ ],
273255
+ output: [
273256
+ "text"
273257
+ ]
273258
+ },
273259
+ open_weights: false,
273260
+ limit: {
273261
+ context: 1048576,
273262
+ output: 943718
273263
+ },
273264
+ cost: {
273265
+ input: 0.128,
273266
+ output: 1.9584,
273267
+ cache_read: 0.08832
273268
+ }
273269
+ },
273270
+ "fireworks/ember-1": {
273271
+ id: "fireworks/ember-1",
273272
+ name: "Ember-1",
273273
+ description: "Multimodal reasoning model for visual analysis, planning, and tool use",
273274
+ attachment: true,
273275
+ reasoning: true,
273276
+ reasoning_options: [
273277
+ {
273278
+ type: "toggle"
273279
+ },
273280
+ {
273281
+ type: "effort",
273282
+ values: [
273283
+ "low",
273284
+ "high",
273285
+ "max"
273286
+ ]
273287
+ }
273288
+ ],
273289
+ tool_call: true,
273290
+ structured_output: true,
273291
+ temperature: true,
273292
+ release_date: "2026-09-24",
273293
+ last_updated: "2026-09-24",
273294
+ modalities: {
273295
+ input: [
273296
+ "text",
273297
+ "image"
273298
+ ],
273299
+ output: [
273300
+ "text"
273301
+ ]
273302
+ },
273303
+ open_weights: false,
273304
+ limit: {
273305
+ context: 1048576,
273306
+ output: 943718
273307
+ },
273308
+ cost: {
273309
+ input: 3,
273310
+ output: 15,
273311
+ cache_read: 0.3
273312
+ }
273313
+ },
273314
+ "sakana/fugu-max": {
273315
+ id: "sakana/fugu-max",
273316
+ name: "Fugu Max",
273317
+ description: "Multi-agent model for routing expert agents across complex analytical tasks",
273318
+ family: "fugu",
273319
+ attachment: true,
273320
+ reasoning: true,
273321
+ reasoning_options: [
273322
+ {
273323
+ type: "effort",
273324
+ values: [
273325
+ "high",
273326
+ "xhigh",
273327
+ "max"
273328
+ ]
273329
+ }
273330
+ ],
273331
+ tool_call: true,
273332
+ structured_output: true,
273333
+ temperature: false,
273334
+ release_date: "2026-09-11",
273335
+ last_updated: "2026-09-11",
273336
+ modalities: {
273337
+ input: [
273338
+ "text",
273339
+ "image",
273340
+ "pdf"
273341
+ ],
273342
+ output: [
273343
+ "text"
273344
+ ]
273345
+ },
273346
+ open_weights: false,
273347
+ limit: {
273348
+ context: 1e6,
273349
+ output: 128000
273350
+ },
273351
+ cost: {
273352
+ input: 2,
273353
+ output: 6,
273354
+ cache_read: 0.25
273355
+ }
273356
+ },
273357
+ "sakana/fugu-ultra-v2": {
273358
+ id: "sakana/fugu-ultra-v2",
273359
+ name: "Fugu Ultra v2",
273360
+ description: "Quality-first multi-agent model for hard research, analysis, and competitions",
273361
+ family: "fugu",
273362
+ attachment: true,
273363
+ reasoning: true,
273364
+ reasoning_options: [
273365
+ {
273366
+ type: "effort",
273367
+ values: [
273368
+ "high",
273369
+ "xhigh",
273370
+ "max"
273371
+ ]
273372
+ }
273373
+ ],
273374
+ tool_call: true,
273375
+ structured_output: true,
273376
+ temperature: false,
273377
+ knowledge: "2026-08-28",
273378
+ release_date: "2026-09-11",
273379
+ last_updated: "2026-09-11",
273380
+ modalities: {
273381
+ input: [
273382
+ "text",
273383
+ "image",
273384
+ "pdf"
273385
+ ],
273386
+ output: [
273387
+ "text"
273388
+ ]
273389
+ },
273390
+ open_weights: false,
273391
+ limit: {
273392
+ context: 1e6,
273393
+ output: 128000
273394
+ },
273395
+ cost: {
273396
+ input: 5,
273397
+ output: 30,
273398
+ cache_read: 0.5,
273399
+ tiers: [
273400
+ {
273401
+ input: 10,
273402
+ output: 45,
273403
+ cache_read: 1,
273404
+ tier: {
273405
+ type: "context",
273406
+ size: 272000
273407
+ }
273408
+ }
273409
+ ],
273410
+ context_over_200k: {
273411
+ input: 10,
273412
+ output: 45,
273413
+ cache_read: 1
273414
+ }
273415
+ }
273416
+ },
273417
+ "inclusionai/ling-3.0-flash-vl": {
273418
+ id: "inclusionai/ling-3.0-flash-vl",
273419
+ name: "Ling 3.0 Flash VL",
273420
+ description: "Multimodal reasoning model for visual analysis, planning, and tool use",
273421
+ family: "ling",
273422
+ attachment: true,
273423
+ reasoning: true,
273424
+ reasoning_options: [
273425
+ {
273426
+ type: "toggle"
273427
+ }
273428
+ ],
273429
+ tool_call: true,
273430
+ structured_output: true,
273431
+ temperature: true,
273432
+ release_date: "2026-09-10",
273433
+ last_updated: "2026-09-10",
273434
+ modalities: {
273435
+ input: [
273436
+ "text",
273437
+ "image",
273438
+ "video"
273439
+ ],
273440
+ output: [
273441
+ "text"
273442
+ ]
273443
+ },
273444
+ open_weights: true,
273445
+ limit: {
273446
+ context: 262144,
273447
+ output: 32768
273448
+ },
273449
+ cost: {
273450
+ input: 0.021,
273451
+ output: 0.0616,
273452
+ cache_read: 0.0042
273453
+ }
273454
+ },
273455
+ "xiaomi/mimo-v2.6-pro": {
273456
+ id: "xiaomi/mimo-v2.6-pro",
273457
+ name: "MiMo-V2.6-Pro",
273458
+ description: "MiMo pro model for strong multimodal reasoning and agent execution",
273459
+ family: "mimo",
273460
+ attachment: true,
273461
+ reasoning: true,
273462
+ reasoning_options: [
273463
+ {
273464
+ type: "toggle"
273465
+ }
273466
+ ],
273467
+ tool_call: true,
273468
+ structured_output: true,
273469
+ temperature: true,
273470
+ release_date: "2026-09-22",
273471
+ last_updated: "2026-09-22",
273472
+ modalities: {
273473
+ input: [
273474
+ "text",
273475
+ "image",
273476
+ "audio",
273477
+ "video"
273478
+ ],
273479
+ output: [
273480
+ "text"
273481
+ ]
273482
+ },
273483
+ open_weights: true,
273484
+ limit: {
273485
+ context: 1050000,
273486
+ output: 131072
273487
+ },
273488
+ cost: {
273489
+ input: 0.435,
273490
+ output: 0.87,
273491
+ cache_read: 0.0036
273492
+ }
273493
+ },
273494
+ "xiaomi/mimo-v2.6-pro-ultraspeed": {
273495
+ id: "xiaomi/mimo-v2.6-pro-ultraspeed",
273496
+ name: "MiMo-V2.6-Pro-UltraSpeed",
273497
+ description: "MiMo pro model for strong multimodal reasoning and agent execution",
273498
+ family: "mimo",
273499
+ attachment: true,
273500
+ reasoning: true,
273501
+ reasoning_options: [
273502
+ {
273503
+ type: "toggle"
273504
+ }
273505
+ ],
273506
+ tool_call: true,
273507
+ structured_output: true,
273508
+ temperature: true,
273509
+ release_date: "2026-09-21",
273510
+ last_updated: "2026-09-21",
273511
+ modalities: {
273512
+ input: [
273513
+ "text",
273514
+ "image",
273515
+ "audio",
273516
+ "video"
273517
+ ],
273518
+ output: [
273519
+ "text"
273520
+ ]
273521
+ },
273522
+ open_weights: true,
273523
+ limit: {
273524
+ context: 1048576,
273525
+ output: 131072
273526
+ },
273527
+ cost: {
273528
+ input: 4.35,
273529
+ output: 8.7,
273530
+ cache_read: 0.036
273531
+ }
273532
+ },
273533
+ "xiaomi/mimo-v2.6-flash": {
273534
+ id: "xiaomi/mimo-v2.6-flash",
273535
+ name: "MiMo-V2.6-Flash",
273536
+ description: "MiMo flash model for fast multimodal assistance and agent workflows",
273537
+ family: "mimo",
273538
+ attachment: true,
273539
+ reasoning: true,
273540
+ reasoning_options: [
273541
+ {
273542
+ type: "toggle"
273543
+ }
273544
+ ],
273545
+ tool_call: true,
273546
+ structured_output: true,
273547
+ temperature: true,
273548
+ release_date: "2026-09-22",
273549
+ last_updated: "2026-09-22",
273550
+ modalities: {
273551
+ input: [
273552
+ "text",
273553
+ "image",
273554
+ "audio",
273555
+ "video"
273556
+ ],
273557
+ output: [
273558
+ "text"
273559
+ ]
273560
+ },
273561
+ open_weights: true,
273562
+ limit: {
273563
+ context: 1048576,
273564
+ output: 131072
273565
+ },
273566
+ cost: {
273567
+ input: 0.14,
273568
+ output: 0.28,
273569
+ cache_read: 0.0028
273570
+ }
273571
+ },
273572
+ "inception/mercury-2.5": {
273573
+ id: "inception/mercury-2.5",
273574
+ name: "Mercury 2.5",
273575
+ description: "Reasoning model for deliberate analysis, multi-step problem solving, and tool use",
273576
+ family: "mercury",
273577
+ attachment: false,
273578
+ reasoning: true,
273579
+ reasoning_options: [
273580
+ {
273581
+ type: "effort",
273582
+ values: [
273583
+ "none",
273584
+ "low",
273585
+ "medium",
273586
+ "high"
273587
+ ]
273588
+ }
273589
+ ],
273590
+ tool_call: true,
273591
+ structured_output: true,
273592
+ temperature: true,
273593
+ release_date: "2026-09-08",
273594
+ last_updated: "2026-09-08",
273595
+ modalities: {
273596
+ input: [
273597
+ "text"
273598
+ ],
273599
+ output: [
273600
+ "text"
273601
+ ]
273602
+ },
273603
+ open_weights: false,
273604
+ limit: {
273605
+ context: 260000,
273606
+ output: 65536
273607
+ },
273608
+ cost: {
273609
+ input: 0.04,
273610
+ output: 0.15,
273611
+ cache_read: 0.004
273612
+ }
273613
+ },
273614
+ "aion-labs/aion-3.5": {
273615
+ id: "aion-labs/aion-3.5",
273616
+ name: "Aion 3.5",
273617
+ description: "Reasoning model for deliberate analysis, multi-step problem solving, and tool use",
273618
+ attachment: false,
273619
+ reasoning: true,
273620
+ reasoning_options: [
273621
+ {
273622
+ type: "effort",
273623
+ values: [
273624
+ "low",
273625
+ "high",
273626
+ "max"
273627
+ ]
273628
+ }
273629
+ ],
273630
+ tool_call: true,
273631
+ structured_output: false,
273632
+ temperature: true,
273633
+ release_date: "2026-09-23",
273634
+ last_updated: "2026-09-23",
273635
+ modalities: {
273636
+ input: [
273637
+ "text"
273638
+ ],
273639
+ output: [
273640
+ "text"
273641
+ ]
273642
+ },
273643
+ open_weights: false,
273644
+ limit: {
273645
+ context: 262144,
273646
+ output: 32768
273647
+ },
273648
+ cost: {
273649
+ input: 3,
273650
+ output: 6,
273651
+ cache_read: 0.75
273652
+ }
273653
+ },
273654
+ "aion-labs/aion-3.5-mini": {
273655
+ id: "aion-labs/aion-3.5-mini",
273656
+ name: "Aion 3.5 Mini",
273657
+ description: "Efficient model for low-latency assistance, extraction, and routine automation",
273658
+ attachment: false,
273659
+ reasoning: true,
273660
+ reasoning_options: [
273661
+ {
273662
+ type: "effort",
273663
+ values: [
273664
+ "low",
273665
+ "high",
273666
+ "max"
273667
+ ]
273668
+ }
273669
+ ],
273670
+ tool_call: true,
273671
+ structured_output: false,
273672
+ temperature: true,
273673
+ release_date: "2026-09-23",
273674
+ last_updated: "2026-09-23",
273675
+ modalities: {
273676
+ input: [
273677
+ "text"
273678
+ ],
273679
+ output: [
273680
+ "text"
273681
+ ]
273682
+ },
273683
+ open_weights: false,
273684
+ limit: {
273685
+ context: 262144,
273686
+ output: 32768
273687
+ },
273688
+ cost: {
273689
+ input: 0.7,
273690
+ output: 1.4,
273691
+ cache_read: 0.18
273692
+ }
273693
+ },
273694
+ "qwen/qwen3.8-omni-flash": {
273695
+ id: "qwen/qwen3.8-omni-flash",
273696
+ name: "Qwen3.8 Omni Flash",
273697
+ description: "Qwen omni model for text, vision, audio, and multimodal agent tasks",
273698
+ family: "qwen",
273699
+ attachment: true,
273700
+ reasoning: true,
273701
+ reasoning_options: [
273702
+ {
273703
+ type: "toggle"
273704
+ },
273705
+ {
273706
+ type: "budget_tokens"
273707
+ }
273708
+ ],
273709
+ tool_call: true,
273710
+ structured_output: true,
273711
+ temperature: true,
273712
+ release_date: "2026-09-17",
273713
+ last_updated: "2026-09-17",
273714
+ modalities: {
273715
+ input: [
273716
+ "text",
273717
+ "image",
273718
+ "audio",
273719
+ "video"
273720
+ ],
273721
+ output: [
273722
+ "text"
273723
+ ]
273724
+ },
273725
+ open_weights: false,
273726
+ limit: {
273727
+ context: 1e6,
273728
+ output: 131072
273729
+ },
273730
+ cost: {
273731
+ input: 0.15,
273732
+ output: 0.47,
273733
+ cache_read: 0.016
273734
+ }
273735
+ },
273736
+ "qwen/qwen3.8-max-prime": {
273737
+ id: "qwen/qwen3.8-max-prime",
273738
+ name: "Qwen 3.8 Max Prime",
273739
+ description: "Qwen vision-language model for visual reasoning, documents, and agent tasks",
273740
+ family: "qwen3.8-max",
273741
+ attachment: true,
273742
+ reasoning: true,
273743
+ reasoning_options: [
273744
+ {
273745
+ type: "effort",
273746
+ values: [
273747
+ "minimal",
273748
+ "low",
273749
+ "medium",
273750
+ "high",
273751
+ "xhigh"
273752
+ ]
273753
+ }
273754
+ ],
273755
+ tool_call: true,
273756
+ structured_output: true,
273757
+ temperature: true,
273758
+ release_date: "2026-09-23",
273759
+ last_updated: "2026-09-23",
273760
+ modalities: {
273761
+ input: [
273762
+ "text",
273763
+ "image",
273764
+ "video"
273765
+ ],
273766
+ output: [
273767
+ "text"
273768
+ ]
273769
+ },
273770
+ open_weights: false,
273771
+ limit: {
273772
+ context: 1e6,
273773
+ output: 131072
273774
+ },
273775
+ cost: {
273776
+ input: 4,
273777
+ output: 12,
273778
+ cache_read: 0.5
273779
+ }
273780
+ },
273781
+ "qwen/qwen3.8-27b:free": {
273782
+ id: "qwen/qwen3.8-27b:free",
273783
+ name: "Qwen3.8 27B (free)",
273784
+ description: "Qwen vision-language model for visual reasoning, documents, and agent tasks",
273785
+ family: "qwen",
273786
+ attachment: true,
273787
+ reasoning: true,
273788
+ reasoning_options: [
273789
+ {
273790
+ type: "toggle"
273791
+ },
273792
+ {
273793
+ type: "effort",
273794
+ values: [
273795
+ "low",
273796
+ "medium",
273797
+ "xhigh"
273798
+ ]
273799
+ }
273800
+ ],
273801
+ tool_call: true,
273802
+ structured_output: true,
273803
+ temperature: true,
273804
+ release_date: "2026-08-14",
273805
+ last_updated: "2026-08-14",
273806
+ modalities: {
273807
+ input: [
273808
+ "text",
273809
+ "image",
273810
+ "video"
273811
+ ],
273812
+ output: [
273813
+ "text"
273814
+ ]
273815
+ },
273816
+ open_weights: true,
273817
+ limit: {
273818
+ context: 262144,
273819
+ output: 235929
273820
+ },
273821
+ cost: {
273822
+ input: 0,
273823
+ output: 0
273824
+ }
273825
+ },
273826
+ "openai/gpt-6-sol-pro": {
273827
+ id: "openai/gpt-6-sol-pro",
273828
+ name: "GPT-6 Sol Pro",
273829
+ description: "Frontier GPT model for professional reasoning, coding, and multimodal work",
273830
+ family: "gpt",
273831
+ attachment: true,
273832
+ reasoning: true,
273833
+ reasoning_options: [
273834
+ {
273835
+ type: "effort",
273836
+ values: [
273837
+ "none",
273838
+ "low",
273839
+ "medium",
273840
+ "high",
273841
+ "xhigh",
273842
+ "max"
273843
+ ]
273844
+ }
273845
+ ],
273846
+ tool_call: true,
273847
+ structured_output: true,
273848
+ temperature: false,
273849
+ release_date: "2026-09-22",
273850
+ last_updated: "2026-09-22",
273851
+ modalities: {
273852
+ input: [
273853
+ "pdf",
273854
+ "image",
273855
+ "text"
273856
+ ],
273857
+ output: [
273858
+ "text"
273859
+ ]
273860
+ },
273861
+ open_weights: false,
273862
+ limit: {
273863
+ context: 1050000,
273864
+ output: 128000
273865
+ },
273866
+ cost: {
273867
+ input: 2,
273868
+ output: 10,
273869
+ cache_read: 0.2,
273870
+ cache_write: 2.5,
273871
+ tiers: [
273872
+ {
273873
+ input: 4,
273874
+ output: 15,
273875
+ cache_read: 0.4,
273876
+ cache_write: 5,
273877
+ tier: {
273878
+ type: "context",
273879
+ size: 272000
273880
+ }
273881
+ }
273882
+ ],
273883
+ context_over_200k: {
273884
+ input: 4,
273885
+ output: 15,
273886
+ cache_read: 0.4,
273887
+ cache_write: 5
273888
+ }
273889
+ }
273890
+ },
273891
+ "openai/gpt-6-luna": {
273892
+ id: "openai/gpt-6-luna",
273893
+ name: "GPT-6 Luna",
273894
+ description: "GPT model for general reasoning, writing, coding, and tool-assisted tasks",
273895
+ family: "gpt-luna",
273896
+ attachment: true,
273897
+ reasoning: true,
273898
+ reasoning_options: [
273899
+ {
273900
+ type: "effort",
273901
+ values: [
273902
+ "none",
273903
+ "low",
273904
+ "medium",
273905
+ "high",
273906
+ "xhigh",
273907
+ "max"
273908
+ ]
273909
+ }
273910
+ ],
273911
+ tool_call: true,
273912
+ structured_output: true,
273913
+ temperature: false,
273914
+ knowledge: "2026-05-18",
273915
+ release_date: "2026-09-22",
273916
+ last_updated: "2026-09-22",
273917
+ modalities: {
273918
+ input: [
273919
+ "text",
273920
+ "image",
273921
+ "pdf"
273922
+ ],
273923
+ output: [
273924
+ "text"
273925
+ ]
273926
+ },
273927
+ open_weights: false,
273928
+ limit: {
273929
+ context: 1050000,
273930
+ input: 922000,
273931
+ output: 128000
273932
+ },
273933
+ cost: {
273934
+ input: 0.1,
273935
+ output: 0.5,
273936
+ cache_read: 0.01,
273937
+ cache_write: 0.125,
273938
+ tiers: [
273939
+ {
273940
+ input: 0.2,
273941
+ output: 0.75,
273942
+ cache_read: 0.02,
273943
+ cache_write: 0.25,
273944
+ tier: {
273945
+ type: "context",
273946
+ size: 272000
273947
+ }
273948
+ }
273949
+ ],
273950
+ context_over_200k: {
273951
+ input: 0.2,
273952
+ output: 0.75,
273953
+ cache_read: 0.02,
273954
+ cache_write: 0.25
273955
+ }
273956
+ }
273957
+ },
273958
+ "openai/gpt-6-luna-pro": {
273959
+ id: "openai/gpt-6-luna-pro",
273960
+ name: "GPT-6 Luna Pro",
273961
+ description: "Frontier GPT model for professional reasoning, coding, and multimodal work",
273962
+ family: "gpt",
273963
+ attachment: true,
273964
+ reasoning: true,
273965
+ reasoning_options: [
273966
+ {
273967
+ type: "effort",
273968
+ values: [
273969
+ "none",
273970
+ "low",
273971
+ "medium",
273972
+ "high",
273973
+ "xhigh",
273974
+ "max"
273975
+ ]
273976
+ }
273977
+ ],
273978
+ tool_call: true,
273979
+ structured_output: true,
273980
+ temperature: false,
273981
+ release_date: "2026-09-22",
273982
+ last_updated: "2026-09-22",
273983
+ modalities: {
273984
+ input: [
273985
+ "pdf",
273986
+ "image",
273987
+ "text"
273988
+ ],
273989
+ output: [
273990
+ "text"
273991
+ ]
273992
+ },
273993
+ open_weights: false,
273994
+ limit: {
273995
+ context: 1050000,
273996
+ output: 128000
273997
+ },
273998
+ cost: {
273999
+ input: 0.1,
274000
+ output: 0.5,
274001
+ cache_read: 0.01,
274002
+ cache_write: 0.125,
274003
+ tiers: [
274004
+ {
274005
+ input: 0.2,
274006
+ output: 0.75,
274007
+ cache_read: 0.02,
274008
+ cache_write: 0.25,
274009
+ tier: {
274010
+ type: "context",
274011
+ size: 272000
274012
+ }
274013
+ }
274014
+ ],
274015
+ context_over_200k: {
274016
+ input: 0.2,
274017
+ output: 0.75,
274018
+ cache_read: 0.02,
274019
+ cache_write: 0.25
274020
+ }
274021
+ }
274022
+ },
274023
+ "openai/gpt-6-sol": {
274024
+ id: "openai/gpt-6-sol",
274025
+ name: "GPT-6 Sol",
274026
+ description: "GPT model for general reasoning, writing, coding, and tool-assisted tasks",
274027
+ family: "gpt-sol",
274028
+ attachment: true,
274029
+ reasoning: true,
274030
+ reasoning_options: [
274031
+ {
274032
+ type: "effort",
274033
+ values: [
274034
+ "none",
274035
+ "low",
274036
+ "medium",
274037
+ "high",
274038
+ "xhigh",
274039
+ "max"
274040
+ ]
274041
+ }
274042
+ ],
274043
+ tool_call: true,
274044
+ structured_output: true,
274045
+ temperature: false,
274046
+ knowledge: "2026-04-20",
274047
+ release_date: "2026-09-22",
274048
+ last_updated: "2026-09-22",
274049
+ modalities: {
274050
+ input: [
274051
+ "text",
274052
+ "image",
274053
+ "pdf"
274054
+ ],
274055
+ output: [
274056
+ "text"
274057
+ ]
274058
+ },
274059
+ open_weights: false,
274060
+ limit: {
274061
+ context: 1050000,
274062
+ input: 922000,
274063
+ output: 128000
274064
+ },
274065
+ cost: {
274066
+ input: 2,
274067
+ output: 10,
274068
+ cache_read: 0.2,
274069
+ cache_write: 2.5,
274070
+ tiers: [
274071
+ {
274072
+ input: 4,
274073
+ output: 15,
274074
+ cache_read: 0.4,
274075
+ cache_write: 5,
274076
+ tier: {
274077
+ type: "context",
274078
+ size: 272000
274079
+ }
274080
+ }
274081
+ ],
274082
+ context_over_200k: {
274083
+ input: 4,
274084
+ output: 15,
274085
+ cache_read: 0.4,
274086
+ cache_write: 5
274087
+ }
274088
+ }
272280
274089
  }
272281
274090
  }
272282
274091
  },
@@ -286011,6 +287820,121 @@ var modelsdev_cache_default = {
286011
287820
  cache_write: 0.25
286012
287821
  }
286013
287822
  }
287823
+ },
287824
+ "gpt-daybreak-blue-latest": {
287825
+ id: "gpt-daybreak-blue-latest",
287826
+ name: "Daybreak Blue",
287827
+ description: "Alias for flagship general-purpose models with safeguards for defensive cybersecurity work",
287828
+ family: "gpt-sol",
287829
+ attachment: true,
287830
+ reasoning: true,
287831
+ reasoning_options: [
287832
+ {
287833
+ type: "effort",
287834
+ values: [
287835
+ "none",
287836
+ "low",
287837
+ "medium",
287838
+ "high",
287839
+ "xhigh",
287840
+ "max"
287841
+ ]
287842
+ }
287843
+ ],
287844
+ tool_call: true,
287845
+ structured_output: true,
287846
+ temperature: false,
287847
+ knowledge: "2026-02-16",
287848
+ release_date: "2026-08-07",
287849
+ last_updated: "2026-08-07",
287850
+ modalities: {
287851
+ input: [
287852
+ "text",
287853
+ "image",
287854
+ "pdf"
287855
+ ],
287856
+ output: [
287857
+ "text"
287858
+ ]
287859
+ },
287860
+ open_weights: false,
287861
+ limit: {
287862
+ context: 1050000,
287863
+ input: 922000,
287864
+ output: 128000
287865
+ },
287866
+ cost: {
287867
+ input: 4,
287868
+ output: 20,
287869
+ cache_read: 0.4,
287870
+ cache_write: 5,
287871
+ tiers: [
287872
+ {
287873
+ input: 8,
287874
+ output: 30,
287875
+ cache_read: 0.8,
287876
+ cache_write: 10,
287877
+ tier: {
287878
+ type: "context",
287879
+ size: 272000
287880
+ }
287881
+ }
287882
+ ],
287883
+ context_over_200k: {
287884
+ input: 8,
287885
+ output: 30,
287886
+ cache_read: 0.8,
287887
+ cache_write: 10
287888
+ }
287889
+ }
287890
+ },
287891
+ "gpt-daybreak-red-latest": {
287892
+ id: "gpt-daybreak-red-latest",
287893
+ name: "Daybreak Red",
287894
+ description: "Alias for advanced cybersecurity models for authorized vulnerability research and security testing",
287895
+ family: "gpt",
287896
+ attachment: true,
287897
+ reasoning: true,
287898
+ reasoning_options: [
287899
+ {
287900
+ type: "effort",
287901
+ values: [
287902
+ "none",
287903
+ "low",
287904
+ "medium",
287905
+ "high",
287906
+ "xhigh",
287907
+ "max"
287908
+ ]
287909
+ }
287910
+ ],
287911
+ tool_call: true,
287912
+ structured_output: true,
287913
+ temperature: false,
287914
+ knowledge: "2026-02-16",
287915
+ release_date: "2026-08-07",
287916
+ last_updated: "2026-08-07",
287917
+ modalities: {
287918
+ input: [
287919
+ "text",
287920
+ "image"
287921
+ ],
287922
+ output: [
287923
+ "text"
287924
+ ]
287925
+ },
287926
+ open_weights: false,
287927
+ limit: {
287928
+ context: 400000,
287929
+ input: 272000,
287930
+ output: 128000
287931
+ },
287932
+ cost: {
287933
+ input: 12.5,
287934
+ output: 75,
287935
+ cache_read: 1.25,
287936
+ cache_write: 15.625
287937
+ }
286014
287938
  }
286015
287939
  }
286016
287940
  },
@@ -332122,13 +334046,13 @@ function checkCodexCredentials(env, opts = {}) {
332122
334046
  }
332123
334047
  async function resolveCodexAuthMode(config, emit, deps = {}) {
332124
334048
  const fsModule = await import("node:fs/promises");
332125
- const homedir = deps.homedir ?? codexUserHome;
334049
+ const homedir2 = deps.homedir ?? codexUserHome;
332126
334050
  const fs = deps.fs ?? {
332127
334051
  readFile: (path, encoding) => fsModule.readFile(path, encoding),
332128
334052
  mkdir: (path, opts) => fsModule.mkdir(path, opts),
332129
334053
  writeFile: (path, data, opts) => fsModule.writeFile(path, data, opts)
332130
334054
  };
332131
- const authJsonPath = join2(homedir(), ".codex", "auth.json");
334055
+ const authJsonPath = join2(homedir2(), ".codex", "auth.json");
332132
334056
  const readAuthMode = async () => {
332133
334057
  try {
332134
334058
  const raw = await fs.readFile(authJsonPath, "utf-8");
@@ -332164,7 +334088,7 @@ async function resolveCodexAuthMode(config, emit, deps = {}) {
332164
334088
  const authJson = credentialsToAuthJson(oauthCreds, {
332165
334089
  includeRefreshToken: !isPoolSlot
332166
334090
  });
332167
- await fs.mkdir(join2(homedir(), ".codex"), { recursive: true, mode: 448 });
334091
+ await fs.mkdir(join2(homedir2(), ".codex"), { recursive: true, mode: 448 });
332168
334092
  await fs.writeFile(authJsonPath, JSON.stringify(authJson, null, 2), { mode: 384 });
332169
334093
  const verb = currentMode === null ? "Restored" : currentMode === "chatgpt" ? "Revalidated" : "Upgraded api-key auth.json to";
332170
334094
  emit({
@@ -332458,8 +334382,8 @@ class AppServerCodexThread {
332458
334382
  const events = async function* () {
332459
334383
  while (!finished || pending.length > 0) {
332460
334384
  if (pending.length === 0) {
332461
- await new Promise((resolve) => {
332462
- wake = resolve;
334385
+ await new Promise((resolve2) => {
334386
+ wake = resolve2;
332463
334387
  });
332464
334388
  continue;
332465
334389
  }
@@ -332471,7 +334395,7 @@ class AppServerCodexThread {
332471
334395
  return { events: events() };
332472
334396
  }
332473
334397
  async steer(input) {
332474
- const turnId = this.activeTurnId ?? await new Promise((resolve, reject) => this.turnWaiters.push({ resolve, reject }));
334398
+ const turnId = this.activeTurnId ?? await new Promise((resolve2, reject) => this.turnWaiters.push({ resolve: resolve2, reject }));
332475
334399
  await this.client.request("turn/steer", {
332476
334400
  threadId: this.id,
332477
334401
  expectedTurnId: turnId,
@@ -332620,8 +334544,8 @@ class CodexSession {
332620
334544
  this.logFileHandle = Bun.file(config.logFile).writer();
332621
334545
  const reasoningApplication = applyReasoningEffort("codex", resolvedModel, config.reasoningEffort);
332622
334546
  this.appliedReasoningEffort = reasoningApplication.kind === "codex-config" ? config.reasoningEffort ?? null : null;
332623
- this.completionPromise = new Promise((resolve) => {
332624
- this.resolveCompletion = resolve;
334547
+ this.completionPromise = new Promise((resolve2) => {
334548
+ this.resolveCompletion = resolve2;
332625
334549
  });
332626
334550
  if (config.taskId && config.apiUrl && config.apiKey) {
332627
334551
  this.listeners.push(createCodexSwarmEventHandler({
@@ -332678,7 +334602,7 @@ class CodexSession {
332678
334602
  return { delivered: false, reason: "Codex session has completed" };
332679
334603
  }
332680
334604
  if (mode === "queue") {
332681
- return new Promise((resolve) => this.queuedPrompts.push({ text, resolve }));
334605
+ return new Promise((resolve2) => this.queuedPrompts.push({ text, resolve: resolve2 }));
332682
334606
  }
332683
334607
  try {
332684
334608
  await this.thread.steer(text);
@@ -333425,8 +335349,8 @@ class CodexSubprocessSession {
333425
335349
  try {
333426
335350
  await Promise.race([
333427
335351
  this.completionPromise,
333428
- new Promise((resolve) => {
333429
- timer = setTimeout(resolve, 2000);
335352
+ new Promise((resolve2) => {
335353
+ timer = setTimeout(resolve2, 2000);
333430
335354
  })
333431
335355
  ]);
333432
335356
  } finally {
@@ -333441,18 +335365,18 @@ class CodexSubprocessSession {
333441
335365
  if (this.finished)
333442
335366
  return { delivered: false, reason: "Codex session has completed" };
333443
335367
  const id = ++this.nextControlId;
333444
- return new Promise((resolve) => {
335368
+ return new Promise((resolve2) => {
333445
335369
  const timer = delivery.mode === "queue" ? undefined : setTimeout(() => {
333446
335370
  this.pendingSteering.delete(id);
333447
- resolve({ delivered: false, reason: "Codex steering request timed out" });
335371
+ resolve2({ delivered: false, reason: "Codex steering request timed out" });
333448
335372
  }, 35000);
333449
- this.pendingSteering.set(id, { resolve, timer });
335373
+ this.pendingSteering.set(id, { resolve: resolve2, timer });
333450
335374
  try {
333451
335375
  this.writeControl({ kind: "steer", id, delivery });
333452
335376
  } catch (error) {
333453
335377
  clearTimeout(timer);
333454
335378
  this.pendingSteering.delete(id);
333455
- resolve({ delivered: false, reason: scrubSecrets(String(error)) });
335379
+ resolve2({ delivered: false, reason: scrubSecrets(String(error)) });
333456
335380
  }
333457
335381
  });
333458
335382
  }
@@ -333462,9 +335386,9 @@ class CodexSubprocessSession {
333462
335386
  }
333463
335387
  finishSteering() {
333464
335388
  this.finished = true;
333465
- for (const { resolve, timer } of this.pendingSteering.values()) {
335389
+ for (const { resolve: resolve2, timer } of this.pendingSteering.values()) {
333466
335390
  clearTimeout(timer);
333467
- resolve({ delivered: false, reason: "Codex session has completed" });
335391
+ resolve2({ delivered: false, reason: "Codex session has completed" });
333468
335392
  }
333469
335393
  this.pendingSteering.clear();
333470
335394
  }