@bolt-foundry/gambit 0.8.3 → 0.8.5-rc.10

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 (291) hide show
  1. package/CHANGELOG.md +74 -2
  2. package/README.md +87 -23
  3. package/esm/_dnt.polyfills.d.ts +17 -0
  4. package/esm/_dnt.polyfills.d.ts.map +1 -1
  5. package/esm/_dnt.polyfills.js +123 -0
  6. package/esm/deps/jsr.io/@std/collections/1.1.6/deep_merge.d.ts +322 -0
  7. package/esm/deps/jsr.io/@std/collections/1.1.6/deep_merge.d.ts.map +1 -0
  8. package/esm/deps/jsr.io/@std/collections/1.1.6/deep_merge.js +105 -0
  9. package/esm/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.d.ts +14 -0
  10. package/esm/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.d.ts.map +1 -0
  11. package/esm/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.js +34 -0
  12. package/esm/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.d.ts +13 -0
  13. package/esm/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.d.ts.map +1 -0
  14. package/esm/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.js +18 -0
  15. package/esm/deps/jsr.io/@std/fs/1.0.23/_is_same_path.d.ts +10 -0
  16. package/esm/deps/jsr.io/@std/fs/1.0.23/_is_same_path.d.ts.map +1 -0
  17. package/esm/deps/jsr.io/@std/fs/1.0.23/_is_same_path.js +17 -0
  18. package/esm/deps/jsr.io/@std/fs/1.0.23/_is_subdir.d.ts +12 -0
  19. package/esm/deps/jsr.io/@std/fs/1.0.23/_is_subdir.d.ts.map +1 -0
  20. package/esm/deps/jsr.io/@std/fs/1.0.23/_is_subdir.js +25 -0
  21. package/esm/deps/jsr.io/@std/fs/1.0.23/_to_path_string.d.ts +9 -0
  22. package/esm/deps/jsr.io/@std/fs/1.0.23/_to_path_string.d.ts.map +1 -0
  23. package/esm/deps/jsr.io/@std/fs/1.0.23/_to_path_string.js +13 -0
  24. package/esm/deps/jsr.io/@std/fs/1.0.23/copy.d.ts +117 -0
  25. package/esm/deps/jsr.io/@std/fs/1.0.23/copy.d.ts.map +1 -0
  26. package/esm/deps/jsr.io/@std/fs/1.0.23/copy.js +313 -0
  27. package/esm/deps/jsr.io/@std/fs/1.0.23/empty_dir.d.ts +48 -0
  28. package/esm/deps/jsr.io/@std/fs/1.0.23/empty_dir.d.ts.map +1 -0
  29. package/esm/deps/jsr.io/@std/fs/1.0.23/empty_dir.js +87 -0
  30. package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_dir.d.ts +49 -0
  31. package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_dir.d.ts.map +1 -0
  32. package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_dir.js +102 -0
  33. package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_file.d.ts +47 -0
  34. package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_file.d.ts.map +1 -0
  35. package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_file.js +90 -0
  36. package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_link.d.ts +49 -0
  37. package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_link.d.ts.map +1 -0
  38. package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_link.js +61 -0
  39. package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.d.ts +70 -0
  40. package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.d.ts.map +1 -0
  41. package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.js +156 -0
  42. package/esm/deps/jsr.io/@std/fs/1.0.23/eol.d.ts +52 -0
  43. package/esm/deps/jsr.io/@std/fs/1.0.23/eol.d.ts.map +1 -0
  44. package/esm/deps/jsr.io/@std/fs/1.0.23/eol.js +67 -0
  45. package/esm/deps/jsr.io/@std/fs/1.0.23/exists.d.ts +218 -0
  46. package/esm/deps/jsr.io/@std/fs/1.0.23/exists.d.ts.map +1 -0
  47. package/esm/deps/jsr.io/@std/fs/1.0.23/exists.js +271 -0
  48. package/esm/deps/jsr.io/@std/fs/1.0.23/expand_glob.d.ts +267 -0
  49. package/esm/deps/jsr.io/@std/fs/1.0.23/expand_glob.d.ts.map +1 -0
  50. package/esm/deps/jsr.io/@std/fs/1.0.23/expand_glob.js +442 -0
  51. package/esm/deps/jsr.io/@std/fs/1.0.23/mod.d.ts +29 -0
  52. package/esm/deps/jsr.io/@std/fs/1.0.23/mod.d.ts.map +1 -0
  53. package/esm/deps/jsr.io/@std/fs/1.0.23/mod.js +29 -0
  54. package/esm/deps/jsr.io/@std/fs/1.0.23/move.d.ts +86 -0
  55. package/esm/deps/jsr.io/@std/fs/1.0.23/move.d.ts.map +1 -0
  56. package/esm/deps/jsr.io/@std/fs/1.0.23/move.js +142 -0
  57. package/esm/deps/jsr.io/@std/fs/1.0.23/walk.d.ts +777 -0
  58. package/esm/deps/jsr.io/@std/fs/1.0.23/walk.d.ts.map +1 -0
  59. package/esm/deps/jsr.io/@std/fs/1.0.23/walk.js +846 -0
  60. package/esm/deps/jsr.io/@std/json/1.0.3/types.d.ts +7 -0
  61. package/esm/deps/jsr.io/@std/json/1.0.3/types.d.ts.map +1 -0
  62. package/esm/deps/jsr.io/@std/json/1.0.3/types.js +3 -0
  63. package/esm/deps/jsr.io/@std/jsonc/1.0.2/mod.d.ts +20 -0
  64. package/esm/deps/jsr.io/@std/jsonc/1.0.2/mod.d.ts.map +1 -0
  65. package/esm/deps/jsr.io/@std/jsonc/1.0.2/mod.js +21 -0
  66. package/esm/deps/jsr.io/@std/jsonc/1.0.2/parse.d.ts +21 -0
  67. package/esm/deps/jsr.io/@std/jsonc/1.0.2/parse.d.ts.map +1 -0
  68. package/esm/deps/jsr.io/@std/jsonc/1.0.2/parse.js +320 -0
  69. package/esm/deps/jsr.io/@std/path/1.1.4/constants.d.ts +1 -1
  70. package/esm/deps/jsr.io/@std/toml/1.0.11/_parser.d.ts +93 -0
  71. package/esm/deps/jsr.io/@std/toml/1.0.11/_parser.d.ts.map +1 -0
  72. package/esm/deps/jsr.io/@std/toml/1.0.11/_parser.js +753 -0
  73. package/esm/deps/jsr.io/@std/toml/1.0.11/mod.d.ts +109 -0
  74. package/esm/deps/jsr.io/@std/toml/1.0.11/mod.d.ts.map +1 -0
  75. package/esm/deps/jsr.io/@std/toml/1.0.11/mod.js +110 -0
  76. package/esm/deps/jsr.io/@std/toml/1.0.11/parse.d.ts +21 -0
  77. package/esm/deps/jsr.io/@std/toml/1.0.11/parse.d.ts.map +1 -0
  78. package/esm/deps/jsr.io/@std/toml/1.0.11/parse.js +25 -0
  79. package/esm/deps/jsr.io/@std/toml/1.0.11/stringify.d.ts +35 -0
  80. package/esm/deps/jsr.io/@std/toml/1.0.11/stringify.d.ts.map +1 -0
  81. package/esm/deps/jsr.io/@std/toml/1.0.11/stringify.js +283 -0
  82. package/esm/gambit/simulator-ui/dist/bundle.js +11454 -4639
  83. package/esm/gambit/simulator-ui/dist/bundle.js.map +4 -4
  84. package/esm/mod.d.ts +13 -3
  85. package/esm/mod.d.ts.map +1 -1
  86. package/esm/mod.js +8 -2
  87. package/esm/src/cli_utils.d.ts +1 -0
  88. package/esm/src/cli_utils.d.ts.map +1 -1
  89. package/esm/src/cli_utils.js +13 -1
  90. package/esm/src/default_runtime.d.ts +46 -0
  91. package/esm/src/default_runtime.d.ts.map +1 -0
  92. package/esm/src/default_runtime.js +415 -0
  93. package/esm/src/durable_streams.js +26 -1
  94. package/esm/src/model_matchers.d.ts +10 -0
  95. package/esm/src/model_matchers.d.ts.map +1 -0
  96. package/esm/src/model_matchers.js +26 -0
  97. package/esm/src/openai_compat.d.ts +12 -1
  98. package/esm/src/openai_compat.d.ts.map +1 -1
  99. package/esm/src/openai_compat.js +53 -1
  100. package/esm/src/project_config.d.ts +47 -0
  101. package/esm/src/project_config.d.ts.map +1 -0
  102. package/esm/src/project_config.js +134 -0
  103. package/esm/src/providers/codex.d.ts +37 -0
  104. package/esm/src/providers/codex.d.ts.map +1 -0
  105. package/esm/src/providers/codex.js +810 -0
  106. package/esm/src/providers/google.d.ts +3 -1
  107. package/esm/src/providers/google.d.ts.map +1 -1
  108. package/esm/src/providers/google.js +82 -6
  109. package/esm/src/providers/ollama.d.ts +3 -1
  110. package/esm/src/providers/ollama.d.ts.map +1 -1
  111. package/esm/src/providers/ollama.js +295 -15
  112. package/esm/src/providers/openrouter.d.ts +6 -2
  113. package/esm/src/providers/openrouter.d.ts.map +1 -1
  114. package/esm/src/providers/openrouter.js +317 -23
  115. package/esm/src/providers/router.d.ts +19 -0
  116. package/esm/src/providers/router.d.ts.map +1 -0
  117. package/esm/src/providers/router.js +93 -0
  118. package/esm/src/server.d.ts +9 -0
  119. package/esm/src/server.d.ts.map +1 -1
  120. package/esm/src/server.js +3314 -659
  121. package/esm/src/server_feedback_grading_routes.d.ts +32 -0
  122. package/esm/src/server_feedback_grading_routes.d.ts.map +1 -0
  123. package/esm/src/server_feedback_grading_routes.js +305 -0
  124. package/esm/src/server_helpers.d.ts +4 -0
  125. package/esm/src/server_helpers.d.ts.map +1 -0
  126. package/esm/src/server_helpers.js +46 -0
  127. package/esm/src/server_session_store.d.ts +87 -0
  128. package/esm/src/server_session_store.d.ts.map +1 -0
  129. package/esm/src/server_session_store.js +873 -0
  130. package/esm/src/server_types.d.ts +110 -0
  131. package/esm/src/server_types.d.ts.map +1 -0
  132. package/esm/src/server_types.js +1 -0
  133. package/esm/src/server_ui_routes.d.ts +33 -0
  134. package/esm/src/server_ui_routes.d.ts.map +1 -0
  135. package/esm/src/server_ui_routes.js +136 -0
  136. package/esm/src/session_artifacts.d.ts +22 -0
  137. package/esm/src/session_artifacts.d.ts.map +1 -0
  138. package/esm/src/session_artifacts.js +243 -0
  139. package/esm/src/trace.d.ts.map +1 -1
  140. package/esm/src/trace.js +6 -3
  141. package/esm/src/workspace.d.ts +19 -0
  142. package/esm/src/workspace.d.ts.map +1 -0
  143. package/esm/src/workspace.js +162 -0
  144. package/esm/src/workspace_contract.d.ts +78 -0
  145. package/esm/src/workspace_contract.d.ts.map +1 -0
  146. package/esm/src/workspace_contract.js +76 -0
  147. package/package.json +2 -2
  148. package/script/_dnt.polyfills.d.ts +17 -0
  149. package/script/_dnt.polyfills.d.ts.map +1 -1
  150. package/script/_dnt.polyfills.js +123 -0
  151. package/script/deps/jsr.io/@std/collections/1.1.6/deep_merge.d.ts +322 -0
  152. package/script/deps/jsr.io/@std/collections/1.1.6/deep_merge.d.ts.map +1 -0
  153. package/script/deps/jsr.io/@std/collections/1.1.6/deep_merge.js +108 -0
  154. package/script/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.d.ts +14 -0
  155. package/script/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.d.ts.map +1 -0
  156. package/script/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.js +71 -0
  157. package/script/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.d.ts +13 -0
  158. package/script/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.d.ts.map +1 -0
  159. package/script/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.js +21 -0
  160. package/script/deps/jsr.io/@std/fs/1.0.23/_is_same_path.d.ts +10 -0
  161. package/script/deps/jsr.io/@std/fs/1.0.23/_is_same_path.d.ts.map +1 -0
  162. package/script/deps/jsr.io/@std/fs/1.0.23/_is_same_path.js +20 -0
  163. package/script/deps/jsr.io/@std/fs/1.0.23/_is_subdir.d.ts +12 -0
  164. package/script/deps/jsr.io/@std/fs/1.0.23/_is_subdir.d.ts.map +1 -0
  165. package/script/deps/jsr.io/@std/fs/1.0.23/_is_subdir.js +28 -0
  166. package/script/deps/jsr.io/@std/fs/1.0.23/_to_path_string.d.ts +9 -0
  167. package/script/deps/jsr.io/@std/fs/1.0.23/_to_path_string.d.ts.map +1 -0
  168. package/script/deps/jsr.io/@std/fs/1.0.23/_to_path_string.js +16 -0
  169. package/script/deps/jsr.io/@std/fs/1.0.23/copy.d.ts +117 -0
  170. package/script/deps/jsr.io/@std/fs/1.0.23/copy.d.ts.map +1 -0
  171. package/script/deps/jsr.io/@std/fs/1.0.23/copy.js +350 -0
  172. package/script/deps/jsr.io/@std/fs/1.0.23/empty_dir.d.ts +48 -0
  173. package/script/deps/jsr.io/@std/fs/1.0.23/empty_dir.d.ts.map +1 -0
  174. package/script/deps/jsr.io/@std/fs/1.0.23/empty_dir.js +124 -0
  175. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_dir.d.ts +49 -0
  176. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_dir.d.ts.map +1 -0
  177. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_dir.js +139 -0
  178. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_file.d.ts +47 -0
  179. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_file.d.ts.map +1 -0
  180. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_file.js +127 -0
  181. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_link.d.ts +49 -0
  182. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_link.d.ts.map +1 -0
  183. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_link.js +98 -0
  184. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.d.ts +70 -0
  185. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.d.ts.map +1 -0
  186. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.js +193 -0
  187. package/script/deps/jsr.io/@std/fs/1.0.23/eol.d.ts +52 -0
  188. package/script/deps/jsr.io/@std/fs/1.0.23/eol.d.ts.map +1 -0
  189. package/script/deps/jsr.io/@std/fs/1.0.23/eol.js +105 -0
  190. package/script/deps/jsr.io/@std/fs/1.0.23/exists.d.ts +218 -0
  191. package/script/deps/jsr.io/@std/fs/1.0.23/exists.d.ts.map +1 -0
  192. package/script/deps/jsr.io/@std/fs/1.0.23/exists.js +308 -0
  193. package/script/deps/jsr.io/@std/fs/1.0.23/expand_glob.d.ts +267 -0
  194. package/script/deps/jsr.io/@std/fs/1.0.23/expand_glob.d.ts.map +1 -0
  195. package/script/deps/jsr.io/@std/fs/1.0.23/expand_glob.js +479 -0
  196. package/script/deps/jsr.io/@std/fs/1.0.23/mod.d.ts +29 -0
  197. package/script/deps/jsr.io/@std/fs/1.0.23/mod.d.ts.map +1 -0
  198. package/script/deps/jsr.io/@std/fs/1.0.23/mod.js +45 -0
  199. package/script/deps/jsr.io/@std/fs/1.0.23/move.d.ts +86 -0
  200. package/script/deps/jsr.io/@std/fs/1.0.23/move.d.ts.map +1 -0
  201. package/script/deps/jsr.io/@std/fs/1.0.23/move.js +179 -0
  202. package/script/deps/jsr.io/@std/fs/1.0.23/walk.d.ts +777 -0
  203. package/script/deps/jsr.io/@std/fs/1.0.23/walk.d.ts.map +1 -0
  204. package/script/deps/jsr.io/@std/fs/1.0.23/walk.js +883 -0
  205. package/script/deps/jsr.io/@std/json/1.0.3/types.d.ts +7 -0
  206. package/script/deps/jsr.io/@std/json/1.0.3/types.d.ts.map +1 -0
  207. package/script/deps/jsr.io/@std/json/1.0.3/types.js +4 -0
  208. package/script/deps/jsr.io/@std/jsonc/1.0.2/mod.d.ts +20 -0
  209. package/script/deps/jsr.io/@std/jsonc/1.0.2/mod.d.ts.map +1 -0
  210. package/script/deps/jsr.io/@std/jsonc/1.0.2/mod.js +37 -0
  211. package/script/deps/jsr.io/@std/jsonc/1.0.2/parse.d.ts +21 -0
  212. package/script/deps/jsr.io/@std/jsonc/1.0.2/parse.d.ts.map +1 -0
  213. package/script/deps/jsr.io/@std/jsonc/1.0.2/parse.js +323 -0
  214. package/script/deps/jsr.io/@std/path/1.1.4/constants.d.ts +1 -1
  215. package/script/deps/jsr.io/@std/toml/1.0.11/_parser.d.ts +93 -0
  216. package/script/deps/jsr.io/@std/toml/1.0.11/_parser.d.ts.map +1 -0
  217. package/script/deps/jsr.io/@std/toml/1.0.11/_parser.js +781 -0
  218. package/script/deps/jsr.io/@std/toml/1.0.11/mod.d.ts +109 -0
  219. package/script/deps/jsr.io/@std/toml/1.0.11/mod.d.ts.map +1 -0
  220. package/script/deps/jsr.io/@std/toml/1.0.11/mod.js +126 -0
  221. package/script/deps/jsr.io/@std/toml/1.0.11/parse.d.ts +21 -0
  222. package/script/deps/jsr.io/@std/toml/1.0.11/parse.d.ts.map +1 -0
  223. package/script/deps/jsr.io/@std/toml/1.0.11/parse.js +28 -0
  224. package/script/deps/jsr.io/@std/toml/1.0.11/stringify.d.ts +35 -0
  225. package/script/deps/jsr.io/@std/toml/1.0.11/stringify.d.ts.map +1 -0
  226. package/script/deps/jsr.io/@std/toml/1.0.11/stringify.js +286 -0
  227. package/script/gambit/simulator-ui/dist/bundle.js +11454 -4639
  228. package/script/gambit/simulator-ui/dist/bundle.js.map +4 -4
  229. package/script/mod.d.ts +13 -3
  230. package/script/mod.d.ts.map +1 -1
  231. package/script/mod.js +14 -5
  232. package/script/src/cli_utils.d.ts +1 -0
  233. package/script/src/cli_utils.d.ts.map +1 -1
  234. package/script/src/cli_utils.js +14 -1
  235. package/script/src/default_runtime.d.ts +46 -0
  236. package/script/src/default_runtime.d.ts.map +1 -0
  237. package/script/src/default_runtime.js +452 -0
  238. package/script/src/durable_streams.js +26 -1
  239. package/script/src/model_matchers.d.ts +10 -0
  240. package/script/src/model_matchers.d.ts.map +1 -0
  241. package/script/src/model_matchers.js +29 -0
  242. package/script/src/openai_compat.d.ts +12 -1
  243. package/script/src/openai_compat.d.ts.map +1 -1
  244. package/script/src/openai_compat.js +85 -0
  245. package/script/src/project_config.d.ts +47 -0
  246. package/script/src/project_config.d.ts.map +1 -0
  247. package/script/src/project_config.js +173 -0
  248. package/script/src/providers/codex.d.ts +37 -0
  249. package/script/src/providers/codex.d.ts.map +1 -0
  250. package/script/src/providers/codex.js +850 -0
  251. package/script/src/providers/google.d.ts +3 -1
  252. package/script/src/providers/google.d.ts.map +1 -1
  253. package/script/src/providers/google.js +82 -6
  254. package/script/src/providers/ollama.d.ts +3 -1
  255. package/script/src/providers/ollama.d.ts.map +1 -1
  256. package/script/src/providers/ollama.js +295 -15
  257. package/script/src/providers/openrouter.d.ts +6 -2
  258. package/script/src/providers/openrouter.d.ts.map +1 -1
  259. package/script/src/providers/openrouter.js +317 -23
  260. package/script/src/providers/router.d.ts +19 -0
  261. package/script/src/providers/router.d.ts.map +1 -0
  262. package/script/src/providers/router.js +96 -0
  263. package/script/src/server.d.ts +9 -0
  264. package/script/src/server.d.ts.map +1 -1
  265. package/script/src/server.js +3321 -666
  266. package/script/src/server_feedback_grading_routes.d.ts +32 -0
  267. package/script/src/server_feedback_grading_routes.d.ts.map +1 -0
  268. package/script/src/server_feedback_grading_routes.js +343 -0
  269. package/script/src/server_helpers.d.ts +4 -0
  270. package/script/src/server_helpers.d.ts.map +1 -0
  271. package/script/src/server_helpers.js +84 -0
  272. package/script/src/server_session_store.d.ts +87 -0
  273. package/script/src/server_session_store.d.ts.map +1 -0
  274. package/script/src/server_session_store.js +910 -0
  275. package/script/src/server_types.d.ts +110 -0
  276. package/script/src/server_types.d.ts.map +1 -0
  277. package/script/src/server_types.js +2 -0
  278. package/script/src/server_ui_routes.d.ts +33 -0
  279. package/script/src/server_ui_routes.d.ts.map +1 -0
  280. package/script/src/server_ui_routes.js +173 -0
  281. package/script/src/session_artifacts.d.ts +22 -0
  282. package/script/src/session_artifacts.d.ts.map +1 -0
  283. package/script/src/session_artifacts.js +279 -0
  284. package/script/src/trace.d.ts.map +1 -1
  285. package/script/src/trace.js +6 -3
  286. package/script/src/workspace.d.ts +19 -0
  287. package/script/src/workspace.d.ts.map +1 -0
  288. package/script/src/workspace.js +199 -0
  289. package/script/src/workspace_contract.d.ts +78 -0
  290. package/script/src/workspace_contract.d.ts.map +1 -0
  291. package/script/src/workspace_contract.js +84 -0
@@ -1 +1 @@
1
- {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../../src/src/providers/openrouter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAKV,aAAa,EAOd,MAAM,2BAA2B,CAAC;AAOnC,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAE/C,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE;QACJ,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;SAC/C,CAAC;KACH,CAAC;IACF,SAAS,EAAE;QACT,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KAC/C,CAAC;CACH,CAAC;AA8eF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,GAAG,aAAa,CA8MhB"}
1
+ {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../../src/src/providers/openrouter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAKV,aAAa,EAOd,MAAM,2BAA2B,CAAC;AAOnC,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAE/C,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE;QACJ,WAAW,EAAE;YACX,MAAM,EAAE,CACN,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE;gBAAE,MAAM,CAAC,EAAE,WAAW,CAAA;aAAE,KAC/B,OAAO,CAAC,OAAO,CAAC,CAAC;SACvB,CAAC;KACH,CAAC;IACF,SAAS,EAAE;QACT,MAAM,EAAE,CACN,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,WAAW,CAAA;SAAE,KAC/B,OAAO,CAAC,OAAO,CAAC,CAAC;KACvB,CAAC;CACH,CAAC;AA2yBF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,GAAG,aAAa,CAwOhB"}
@@ -37,6 +37,30 @@ function safeJson(input) {
37
37
  }
38
38
  return {};
39
39
  }
40
+ function toJsonValue(value) {
41
+ if (value === null || typeof value === "string" || typeof value === "boolean") {
42
+ return value;
43
+ }
44
+ if (typeof value === "number") {
45
+ return Number.isFinite(value) ? value : String(value);
46
+ }
47
+ if (Array.isArray(value)) {
48
+ return value.map((entry) => toJsonValue(entry));
49
+ }
50
+ if (value && typeof value === "object") {
51
+ const out = {};
52
+ for (const [key, entry] of Object.entries(value)) {
53
+ if (entry === undefined)
54
+ continue;
55
+ out[key] = toJsonValue(entry);
56
+ }
57
+ return out;
58
+ }
59
+ return String(value);
60
+ }
61
+ function isExtensionResponseItem(item) {
62
+ return item.type.includes(":");
63
+ }
40
64
  function isAsyncIterable(value) {
41
65
  return Boolean(value &&
42
66
  typeof value === "object" &&
@@ -45,11 +69,16 @@ function isAsyncIterable(value) {
45
69
  function mapUsage(usage) {
46
70
  if (!usage)
47
71
  return undefined;
48
- return {
72
+ const reasoningTokens = usage.output_tokens_details?.reasoning_tokens ?? undefined;
73
+ const out = {
49
74
  promptTokens: usage.input_tokens ?? 0,
50
75
  completionTokens: usage.output_tokens ?? 0,
51
76
  totalTokens: usage.total_tokens ?? 0,
52
77
  };
78
+ if (typeof reasoningTokens === "number") {
79
+ out.reasoningTokens = reasoningTokens;
80
+ }
81
+ return out;
53
82
  }
54
83
  function mapStatus(status) {
55
84
  if (!status)
@@ -60,6 +89,25 @@ function mapStatus(status) {
60
89
  return "in_progress";
61
90
  return "failed";
62
91
  }
92
+ function mapReasoning(reasoning) {
93
+ if (!reasoning)
94
+ return undefined;
95
+ const out = {};
96
+ if (reasoning.effort !== undefined)
97
+ out.effort = reasoning.effort;
98
+ if (reasoning.summary !== undefined)
99
+ out.summary = reasoning.summary;
100
+ return Object.keys(out).length > 0 ? out : undefined;
101
+ }
102
+ function stripUndefined(input) {
103
+ const out = { ...input };
104
+ for (const [key, value] of Object.entries(out)) {
105
+ if (value === undefined) {
106
+ delete out[key];
107
+ }
108
+ }
109
+ return out;
110
+ }
63
111
  function mapError(error) {
64
112
  if (!error)
65
113
  return undefined;
@@ -140,20 +188,45 @@ function appendSyntheticTools(tools, input) {
140
188
  function mapToolChoice(toolChoice) {
141
189
  if (!toolChoice)
142
190
  return undefined;
143
- if (toolChoice === "auto" || toolChoice === "required")
191
+ if (toolChoice === "none" || toolChoice === "auto" ||
192
+ toolChoice === "required") {
144
193
  return toolChoice;
194
+ }
195
+ if (toolChoice.type === "allowed_tools") {
196
+ return {
197
+ type: "allowed_tools",
198
+ tools: toolChoice.tools,
199
+ mode: toolChoice.mode ?? "auto",
200
+ };
201
+ }
145
202
  return { type: "function", name: toolChoice.function.name };
146
203
  }
204
+ function mapResponseContentPart(part) {
205
+ if (!part || typeof part !== "object")
206
+ return null;
207
+ if (typeof part.text !== "string")
208
+ return null;
209
+ if (part.type === "output_text") {
210
+ return { type: "output_text", text: part.text };
211
+ }
212
+ if (part.type === "summary_text") {
213
+ return { type: "summary_text", text: part.text };
214
+ }
215
+ if (part.type === "reasoning_text") {
216
+ return { type: "reasoning_text", text: part.text };
217
+ }
218
+ if (part.type === "input_text") {
219
+ return { type: "input_text", text: part.text };
220
+ }
221
+ return null;
222
+ }
147
223
  function mapOpenAIOutputItem(item) {
148
224
  const itemType = item.type;
149
225
  if (itemType === "message") {
150
226
  const message = item;
151
- const content = [];
152
- for (const part of message.content ?? []) {
153
- if (part.type === "output_text") {
154
- content.push({ type: "output_text", text: part.text });
155
- }
156
- }
227
+ const content = (message.content ?? [])
228
+ .map((part) => mapResponseContentPart(part))
229
+ .filter((part) => Boolean(part));
157
230
  if (content.length === 0)
158
231
  return null;
159
232
  return {
@@ -173,6 +246,48 @@ function mapOpenAIOutputItem(item) {
173
246
  id: call.id,
174
247
  };
175
248
  }
249
+ if (itemType === "reasoning") {
250
+ const reasoning = item;
251
+ const content = (reasoning.content ?? [])
252
+ .map((part) => mapResponseContentPart(part))
253
+ .filter((part) => Boolean(part));
254
+ const summary = (reasoning.summary ?? [])
255
+ .map((part) => mapResponseContentPart(part))
256
+ .filter((part) => Boolean(part));
257
+ return {
258
+ type: "reasoning",
259
+ id: reasoning.id,
260
+ content: content.length > 0 ? content : undefined,
261
+ summary,
262
+ encrypted_content: reasoning.encrypted_content,
263
+ };
264
+ }
265
+ if (typeof itemType === "string" && itemType.includes(":")) {
266
+ const raw = item;
267
+ const payloadEntries = Object.entries(raw).filter(([key, value]) => {
268
+ if (key === "type" || key === "id")
269
+ return false;
270
+ if (value === undefined)
271
+ return false;
272
+ return true;
273
+ });
274
+ let data;
275
+ if (payloadEntries.length === 1 && payloadEntries[0][0] === "data") {
276
+ data = toJsonValue(payloadEntries[0][1]);
277
+ }
278
+ else {
279
+ const payloadObject = {};
280
+ for (const [key, value] of payloadEntries) {
281
+ payloadObject[key] = toJsonValue(value);
282
+ }
283
+ data = payloadObject;
284
+ }
285
+ return {
286
+ type: itemType,
287
+ id: typeof raw.id === "string" ? raw.id : undefined,
288
+ data,
289
+ };
290
+ }
176
291
  return null;
177
292
  }
178
293
  function normalizeOpenAIResponse(response) {
@@ -183,11 +298,23 @@ function normalizeOpenAIResponse(response) {
183
298
  id: response.id,
184
299
  object: "response",
185
300
  model: response.model,
301
+ created_at: response.created_at,
186
302
  created: response.created_at,
303
+ completed_at: response.completed_at ??
304
+ null,
305
+ previous_response_id: response.previous_response_id ?? null,
306
+ instructions: response.instructions ?? null,
307
+ reasoning: response
308
+ .reasoning ?? null,
187
309
  status: mapStatus(response.status ?? undefined),
188
310
  output: outputItems,
189
311
  usage: mapUsage(response.usage),
190
- error: mapError(response.error),
312
+ error: mapError(response.error) ?? null,
313
+ metadata: response.metadata,
314
+ max_output_tokens: response.max_output_tokens ?? null,
315
+ max_tool_calls: response.max_tool_calls ?? null,
316
+ parallel_tool_calls: response.parallel_tool_calls,
317
+ store: response.store,
191
318
  };
192
319
  }
193
320
  function toOpenAIInputItems(items) {
@@ -209,6 +336,18 @@ function toOpenAIInputItems(items) {
209
336
  text: part.text,
210
337
  };
211
338
  }
339
+ if (part.type === "summary_text") {
340
+ return {
341
+ type: "summary_text",
342
+ text: part.text,
343
+ };
344
+ }
345
+ if (part.type === "reasoning_text") {
346
+ return {
347
+ type: "reasoning_text",
348
+ text: part.text,
349
+ };
350
+ }
212
351
  return null;
213
352
  })
214
353
  .filter((part) => Boolean(part));
@@ -239,6 +378,29 @@ function toOpenAIInputItems(items) {
239
378
  output: item.output,
240
379
  id: item.id,
241
380
  });
381
+ continue;
382
+ }
383
+ if (item.type === "reasoning") {
384
+ mapped.push({
385
+ type: "reasoning",
386
+ id: item.id,
387
+ content: (item.content ?? []).map((part) => ({
388
+ type: part.type,
389
+ text: part.text,
390
+ })),
391
+ summary: item.summary.map((part) => ({
392
+ type: part.type,
393
+ text: part.text,
394
+ })),
395
+ encrypted_content: item.encrypted_content ?? null,
396
+ });
397
+ }
398
+ if (isExtensionResponseItem(item)) {
399
+ mapped.push({
400
+ type: item.type,
401
+ id: item.id,
402
+ data: item.data,
403
+ });
242
404
  }
243
405
  }
244
406
  return mapped;
@@ -323,13 +485,31 @@ function responseItemsToChat(items) {
323
485
  toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
324
486
  };
325
487
  }
326
- async function createResponse(client, request, onStreamEvent) {
488
+ async function createResponse(client, request, signal, onStreamEvent) {
327
489
  const baseParams = {
328
490
  model: normalizeOpenRouterModel(request.model),
329
491
  input: toOpenAIInputItems(request.input),
330
492
  instructions: request.instructions,
331
493
  tools: undefined,
332
494
  tool_choice: mapToolChoice(request.tool_choice),
495
+ previous_response_id: request.previous_response_id,
496
+ reasoning: mapReasoning(request.reasoning),
497
+ parallel_tool_calls: request.parallel_tool_calls,
498
+ max_tool_calls: request.max_tool_calls,
499
+ store: request.store,
500
+ include: request.include,
501
+ text: request.text,
502
+ stream_options: request.stream_options,
503
+ background: request.background,
504
+ truncation: request.truncation,
505
+ service_tier: request.service_tier,
506
+ top_logprobs: request.top_logprobs,
507
+ safety_identifier: request.safety_identifier,
508
+ prompt_cache_key: request.prompt_cache_key,
509
+ temperature: request.temperature,
510
+ top_p: request.top_p,
511
+ frequency_penalty: request.frequency_penalty,
512
+ presence_penalty: request.presence_penalty,
333
513
  stream: request.stream,
334
514
  max_output_tokens: request.max_output_tokens,
335
515
  metadata: request.metadata,
@@ -339,11 +519,11 @@ async function createResponse(client, request, onStreamEvent) {
339
519
  if (mappedTools.length > 0) {
340
520
  baseParams.tools = mappedTools;
341
521
  }
342
- const params = { ...(request.params ?? {}), ...baseParams };
522
+ const params = { ...(request.params ?? {}), ...stripUndefined(baseParams) };
343
523
  const debugResponses = dntShim.Deno.env.get("GAMBIT_DEBUG_RESPONSES") === "1";
344
524
  let responseOrStream;
345
525
  try {
346
- responseOrStream = await client.responses.create(params);
526
+ responseOrStream = await client.responses.create(params, signal ? { signal } : undefined);
347
527
  }
348
528
  catch (err) {
349
529
  if (debugResponses) {
@@ -367,7 +547,12 @@ async function createResponse(client, request, onStreamEvent) {
367
547
  switch (event.type) {
368
548
  case "response.created": {
369
549
  const mapped = normalizeOpenAIResponse(event.response);
370
- onStreamEvent?.({ type: "response.created", response: mapped });
550
+ onStreamEvent?.({
551
+ type: "response.created",
552
+ response: mapped,
553
+ sequence_number: event
554
+ .sequence_number,
555
+ });
371
556
  break;
372
557
  }
373
558
  case "response.output_text.delta":
@@ -376,6 +561,10 @@ async function createResponse(client, request, onStreamEvent) {
376
561
  output_index: event.output_index,
377
562
  delta: event.delta,
378
563
  item_id: event.item_id,
564
+ content_index: event.content_index,
565
+ sequence_number: event
566
+ .sequence_number,
567
+ logprobs: event.logprobs,
379
568
  });
380
569
  break;
381
570
  case "response.output_text.done":
@@ -384,6 +573,9 @@ async function createResponse(client, request, onStreamEvent) {
384
573
  output_index: event.output_index,
385
574
  text: event.text,
386
575
  item_id: event.item_id,
576
+ content_index: event.content_index,
577
+ sequence_number: event
578
+ .sequence_number,
387
579
  });
388
580
  break;
389
581
  case "response.output_item.added": {
@@ -393,6 +585,8 @@ async function createResponse(client, request, onStreamEvent) {
393
585
  type: "response.output_item.added",
394
586
  output_index: event.output_index,
395
587
  item,
588
+ sequence_number: event
589
+ .sequence_number,
396
590
  });
397
591
  }
398
592
  break;
@@ -404,13 +598,102 @@ async function createResponse(client, request, onStreamEvent) {
404
598
  type: "response.output_item.done",
405
599
  output_index: event.output_index,
406
600
  item,
601
+ sequence_number: event
602
+ .sequence_number,
407
603
  });
408
604
  }
409
605
  break;
410
606
  }
607
+ case "response.reasoning.delta":
608
+ if (typeof event.delta === "string") {
609
+ onStreamEvent?.({
610
+ type: "response.reasoning.delta",
611
+ output_index: event.output_index,
612
+ item_id: event.item_id,
613
+ content_index: event.content_index,
614
+ delta: event.delta,
615
+ sequence_number: event
616
+ .sequence_number,
617
+ obfuscation: event.obfuscation,
618
+ });
619
+ }
620
+ break;
621
+ case "response.reasoning.done":
622
+ onStreamEvent?.({
623
+ type: "response.reasoning.done",
624
+ output_index: event.output_index,
625
+ item_id: event.item_id,
626
+ content_index: event.content_index,
627
+ text: event.text,
628
+ sequence_number: event
629
+ .sequence_number,
630
+ });
631
+ break;
632
+ case "response.reasoning_summary_text.delta":
633
+ if (typeof event.delta === "string") {
634
+ onStreamEvent?.({
635
+ type: "response.reasoning_summary_text.delta",
636
+ output_index: event.output_index,
637
+ item_id: event.item_id,
638
+ summary_index: event.summary_index,
639
+ delta: event.delta,
640
+ sequence_number: event
641
+ .sequence_number,
642
+ obfuscation: event.obfuscation,
643
+ });
644
+ }
645
+ break;
646
+ case "response.reasoning_summary_text.done":
647
+ onStreamEvent?.({
648
+ type: "response.reasoning_summary_text.done",
649
+ output_index: event.output_index,
650
+ item_id: event.item_id,
651
+ summary_index: event.summary_index,
652
+ text: event.text,
653
+ sequence_number: event
654
+ .sequence_number,
655
+ });
656
+ break;
657
+ case "response.reasoning_summary_part.added":
658
+ if (event.part && typeof event.part === "object" &&
659
+ "type" in event.part &&
660
+ "text" in event.part &&
661
+ typeof event.part.text === "string") {
662
+ onStreamEvent?.({
663
+ type: "response.reasoning_summary_part.added",
664
+ output_index: event.output_index,
665
+ item_id: event.item_id,
666
+ summary_index: event.summary_index,
667
+ part: event.part,
668
+ sequence_number: event
669
+ .sequence_number,
670
+ });
671
+ }
672
+ break;
673
+ case "response.reasoning_summary_part.done":
674
+ if (event.part && typeof event.part === "object" &&
675
+ "type" in event.part &&
676
+ "text" in event.part &&
677
+ typeof event.part.text === "string") {
678
+ onStreamEvent?.({
679
+ type: "response.reasoning_summary_part.done",
680
+ output_index: event.output_index,
681
+ item_id: event.item_id,
682
+ summary_index: event.summary_index,
683
+ part: event.part,
684
+ sequence_number: event
685
+ .sequence_number,
686
+ });
687
+ }
688
+ break;
411
689
  case "response.completed": {
412
690
  completed = normalizeOpenAIResponse(event.response);
413
- onStreamEvent?.({ type: "response.completed", response: completed });
691
+ onStreamEvent?.({
692
+ type: "response.completed",
693
+ response: completed,
694
+ sequence_number: event
695
+ .sequence_number,
696
+ });
414
697
  break;
415
698
  }
416
699
  case "response.failed": {
@@ -418,6 +701,8 @@ async function createResponse(client, request, onStreamEvent) {
418
701
  onStreamEvent?.({
419
702
  type: "response.failed",
420
703
  error: error ?? {},
704
+ sequence_number: event
705
+ .sequence_number,
421
706
  });
422
707
  break;
423
708
  }
@@ -444,7 +729,7 @@ export function createOpenRouterProvider(opts) {
444
729
  }));
445
730
  return {
446
731
  async responses(input) {
447
- return await createResponse(client, input.request, input.onStreamEvent);
732
+ return await createResponse(client, input.request, input.signal, input.onStreamEvent);
448
733
  },
449
734
  async chat(input) {
450
735
  const params = input.params ?? {};
@@ -455,7 +740,7 @@ export function createOpenRouterProvider(opts) {
455
740
  tools: input.tools,
456
741
  stream: input.stream,
457
742
  params,
458
- }, (event) => {
743
+ }, input.signal, (event) => {
459
744
  if (event.type === "response.output_text.delta") {
460
745
  input.onStreamText?.(event.delta);
461
746
  }
@@ -481,7 +766,7 @@ export function createOpenRouterProvider(opts) {
481
766
  tool_choice: "auto",
482
767
  stream: true,
483
768
  ...params,
484
- });
769
+ }, input.signal ? { signal: input.signal } : undefined);
485
770
  let finishReason = null;
486
771
  const contentParts = [];
487
772
  const toolCallMap = new Map();
@@ -566,7 +851,7 @@ export function createOpenRouterProvider(opts) {
566
851
  tool_choice: "auto",
567
852
  stream: false,
568
853
  ...params,
569
- });
854
+ }, input.signal ? { signal: input.signal } : undefined);
570
855
  const choice = response.choices[0];
571
856
  const message = choice.message;
572
857
  const normalizedMessage = normalizeMessage(message);
@@ -580,11 +865,20 @@ export function createOpenRouterProvider(opts) {
580
865
  finishReason: (choice.finish_reason ?? "stop"),
581
866
  toolCalls,
582
867
  usage: response.usage
583
- ? {
584
- promptTokens: response.usage.prompt_tokens ?? 0,
585
- completionTokens: response.usage.completion_tokens ?? 0,
586
- totalTokens: response.usage.total_tokens ?? 0,
587
- }
868
+ ? (() => {
869
+ const usage = {
870
+ promptTokens: response.usage.prompt_tokens ?? 0,
871
+ completionTokens: response.usage.completion_tokens ?? 0,
872
+ totalTokens: response.usage.total_tokens ?? 0,
873
+ };
874
+ const details = response.usage;
875
+ const value = details.completion_tokens_details
876
+ ?.reasoning_tokens ??
877
+ details.output_tokens_details?.reasoning_tokens;
878
+ return typeof value === "number"
879
+ ? { ...usage, reasoningTokens: value }
880
+ : usage;
881
+ })()
588
882
  : undefined,
589
883
  };
590
884
  },
@@ -0,0 +1,19 @@
1
+ import type { ModelProvider } from "@bolt-foundry/gambit-core";
2
+ export type ProviderKey = "openrouter" | "ollama" | "google" | "codex-cli";
3
+ export type ProviderRouter = {
4
+ resolve: (input: {
5
+ model: string;
6
+ }) => {
7
+ providerKey: ProviderKey;
8
+ provider: ModelProvider;
9
+ model: string;
10
+ };
11
+ };
12
+ type ProviderSet = Partial<Record<ProviderKey, ModelProvider | null>>;
13
+ export declare function createProviderRouter(opts: {
14
+ providers: ProviderSet;
15
+ defaultProvider?: ProviderKey | null;
16
+ fallbackToDefaultOnMissing?: Array<ProviderKey>;
17
+ }): ProviderRouter;
18
+ export {};
19
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/src/providers/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE3E,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK;QACrC,WAAW,EAAE,WAAW,CAAC;QACzB,QAAQ,EAAE,aAAa,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH,CAAC;AAEF,KAAK,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC;AAsDtE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,SAAS,EAAE,WAAW,CAAC;IACvB,eAAe,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACrC,0BAA0B,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;CACjD,GAAG,cAAc,CA8DjB"}
@@ -0,0 +1,93 @@
1
+ const PROVIDER_PREFIXES = {
2
+ openrouter: "openrouter/",
3
+ ollama: "ollama/",
4
+ google: "google/",
5
+ "codex-cli": "codex-cli/",
6
+ };
7
+ function parsePrefixedModel(model) {
8
+ if (model.trim() === "codex-cli") {
9
+ return {
10
+ providerKey: "codex-cli",
11
+ strippedModel: "default",
12
+ rawModel: model,
13
+ };
14
+ }
15
+ for (const [providerKey, prefix] of Object.entries(PROVIDER_PREFIXES)) {
16
+ if (model.startsWith(prefix)) {
17
+ return {
18
+ providerKey: providerKey,
19
+ strippedModel: model.slice(prefix.length),
20
+ rawModel: model,
21
+ };
22
+ }
23
+ }
24
+ if (model === "codex" || model.startsWith("codex/")) {
25
+ return {
26
+ strippedModel: model,
27
+ rawModel: model,
28
+ legacyCodex: true,
29
+ };
30
+ }
31
+ return { strippedModel: model, rawModel: model };
32
+ }
33
+ function missingProviderMessage(providerKey) {
34
+ switch (providerKey) {
35
+ case "openrouter":
36
+ return "OPENROUTER_API_KEY is required for openrouter/ models.";
37
+ case "ollama":
38
+ return "Ollama provider is not configured. Set OLLAMA_BASE_URL or OLLAMA_API_KEY.";
39
+ case "google":
40
+ return "Google provider is not configured. Set GOOGLE_API_KEY or GEMINI_API_KEY.";
41
+ case "codex-cli":
42
+ return "Codex CLI provider is not configured.";
43
+ }
44
+ }
45
+ export function createProviderRouter(opts) {
46
+ const defaultProvider = opts.defaultProvider === null
47
+ ? null
48
+ : (opts.defaultProvider ?? "openrouter");
49
+ const fallbackOnMissing = new Set(opts.fallbackToDefaultOnMissing ?? ["google"]);
50
+ return {
51
+ resolve({ model }) {
52
+ const { providerKey, strippedModel, rawModel, legacyCodex } = parsePrefixedModel(model);
53
+ if (legacyCodex) {
54
+ throw new Error('Legacy Codex model prefix "codex" is no longer supported. Use "codex-cli/default" or "codex-cli/<model>".');
55
+ }
56
+ if (providerKey) {
57
+ const provider = opts.providers[providerKey];
58
+ if (!provider) {
59
+ if (fallbackOnMissing.has(providerKey) &&
60
+ defaultProvider !== null &&
61
+ defaultProvider !== providerKey) {
62
+ const fallbackProvider = opts.providers[defaultProvider];
63
+ if (fallbackProvider) {
64
+ return {
65
+ providerKey: defaultProvider,
66
+ provider: fallbackProvider,
67
+ model: rawModel,
68
+ };
69
+ }
70
+ }
71
+ throw new Error(missingProviderMessage(providerKey));
72
+ }
73
+ return {
74
+ providerKey,
75
+ provider,
76
+ model: strippedModel,
77
+ };
78
+ }
79
+ if (defaultProvider === null) {
80
+ throw new Error("No fallback provider configured. Use a provider prefix or set providers.fallback in gambit.toml.");
81
+ }
82
+ const provider = opts.providers[defaultProvider];
83
+ if (!provider) {
84
+ throw new Error("OPENROUTER_API_KEY is required when no provider prefix is specified.");
85
+ }
86
+ return {
87
+ providerKey: defaultProvider,
88
+ provider,
89
+ model,
90
+ };
91
+ },
92
+ };
93
+ }
@@ -14,10 +14,19 @@ export declare function startWebSocketSimulator(opts: {
14
14
  verbose?: boolean;
15
15
  signal?: AbortSignal;
16
16
  sessionDir?: string;
17
+ workspace?: {
18
+ id: string;
19
+ rootDeckPath: string;
20
+ rootDir: string;
21
+ onboarding?: boolean;
22
+ scaffoldEnabled?: boolean;
23
+ scaffoldRoot?: string;
24
+ };
17
25
  autoBundle?: boolean;
18
26
  forceBundle?: boolean;
19
27
  sourceMap?: boolean;
20
28
  bundlePlatform?: "deno" | "browser";
21
29
  responsesMode?: boolean;
30
+ workerSandbox?: boolean;
22
31
  }): ReturnType<typeof dntShim.Deno.serve>;
23
32
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAY5C,OAAO,KAAK,EAGV,aAAa,EAEd,MAAM,2BAA2B,CAAC;AA2mBnC;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CA2tFxC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAmD5C,OAAO,KAAK,EAMV,aAAa,EAOd,MAAM,2BAA2B,CAAC;AA0hCnC;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CA4lKxC"}