@bolt-foundry/gambit 0.8.1 → 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 (293) hide show
  1. package/CHANGELOG.md +150 -2
  2. package/README.md +109 -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 +12670 -5471
  83. package/esm/gambit/simulator-ui/dist/bundle.js.map +4 -4
  84. package/esm/gambit/simulator-ui/dist/favicon.ico +0 -0
  85. package/esm/mod.d.ts +21 -7
  86. package/esm/mod.d.ts.map +1 -1
  87. package/esm/mod.js +14 -4
  88. package/esm/src/cli_utils.d.ts +1 -0
  89. package/esm/src/cli_utils.d.ts.map +1 -1
  90. package/esm/src/cli_utils.js +52 -4
  91. package/esm/src/default_runtime.d.ts +46 -0
  92. package/esm/src/default_runtime.d.ts.map +1 -0
  93. package/esm/src/default_runtime.js +415 -0
  94. package/esm/src/durable_streams.js +26 -1
  95. package/esm/src/model_matchers.d.ts +10 -0
  96. package/esm/src/model_matchers.d.ts.map +1 -0
  97. package/esm/src/model_matchers.js +26 -0
  98. package/esm/src/openai_compat.d.ts +74 -0
  99. package/esm/src/openai_compat.d.ts.map +1 -0
  100. package/esm/src/openai_compat.js +329 -0
  101. package/esm/src/project_config.d.ts +47 -0
  102. package/esm/src/project_config.d.ts.map +1 -0
  103. package/esm/src/project_config.js +134 -0
  104. package/esm/src/providers/codex.d.ts +37 -0
  105. package/esm/src/providers/codex.d.ts.map +1 -0
  106. package/esm/src/providers/codex.js +810 -0
  107. package/esm/src/providers/google.d.ts +18 -0
  108. package/esm/src/providers/google.d.ts.map +1 -0
  109. package/esm/src/providers/google.js +428 -0
  110. package/esm/src/providers/ollama.d.ts +19 -0
  111. package/esm/src/providers/ollama.d.ts.map +1 -0
  112. package/esm/src/providers/ollama.js +789 -0
  113. package/esm/src/providers/openrouter.d.ts +26 -0
  114. package/esm/src/providers/openrouter.d.ts.map +1 -0
  115. package/esm/src/providers/openrouter.js +886 -0
  116. package/esm/src/providers/router.d.ts +19 -0
  117. package/esm/src/providers/router.d.ts.map +1 -0
  118. package/esm/src/providers/router.js +93 -0
  119. package/esm/src/server.d.ts +11 -0
  120. package/esm/src/server.d.ts.map +1 -1
  121. package/esm/src/server.js +3927 -689
  122. package/esm/src/server_feedback_grading_routes.d.ts +32 -0
  123. package/esm/src/server_feedback_grading_routes.d.ts.map +1 -0
  124. package/esm/src/server_feedback_grading_routes.js +305 -0
  125. package/esm/src/server_helpers.d.ts +4 -0
  126. package/esm/src/server_helpers.d.ts.map +1 -0
  127. package/esm/src/server_helpers.js +46 -0
  128. package/esm/src/server_session_store.d.ts +87 -0
  129. package/esm/src/server_session_store.d.ts.map +1 -0
  130. package/esm/src/server_session_store.js +873 -0
  131. package/esm/src/server_types.d.ts +110 -0
  132. package/esm/src/server_types.d.ts.map +1 -0
  133. package/esm/src/server_types.js +1 -0
  134. package/esm/src/server_ui_routes.d.ts +33 -0
  135. package/esm/src/server_ui_routes.d.ts.map +1 -0
  136. package/esm/src/server_ui_routes.js +136 -0
  137. package/esm/src/session_artifacts.d.ts +22 -0
  138. package/esm/src/session_artifacts.d.ts.map +1 -0
  139. package/esm/src/session_artifacts.js +243 -0
  140. package/esm/src/trace.d.ts.map +1 -1
  141. package/esm/src/trace.js +8 -5
  142. package/esm/src/workspace.d.ts +19 -0
  143. package/esm/src/workspace.d.ts.map +1 -0
  144. package/esm/src/workspace.js +162 -0
  145. package/esm/src/workspace_contract.d.ts +78 -0
  146. package/esm/src/workspace_contract.d.ts.map +1 -0
  147. package/esm/src/workspace_contract.js +76 -0
  148. package/package.json +3 -2
  149. package/script/_dnt.polyfills.d.ts +17 -0
  150. package/script/_dnt.polyfills.d.ts.map +1 -1
  151. package/script/_dnt.polyfills.js +123 -0
  152. package/script/deps/jsr.io/@std/collections/1.1.6/deep_merge.d.ts +322 -0
  153. package/script/deps/jsr.io/@std/collections/1.1.6/deep_merge.d.ts.map +1 -0
  154. package/script/deps/jsr.io/@std/collections/1.1.6/deep_merge.js +108 -0
  155. package/script/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.d.ts +14 -0
  156. package/script/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.d.ts.map +1 -0
  157. package/script/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.js +71 -0
  158. package/script/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.d.ts +13 -0
  159. package/script/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.d.ts.map +1 -0
  160. package/script/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.js +21 -0
  161. package/script/deps/jsr.io/@std/fs/1.0.23/_is_same_path.d.ts +10 -0
  162. package/script/deps/jsr.io/@std/fs/1.0.23/_is_same_path.d.ts.map +1 -0
  163. package/script/deps/jsr.io/@std/fs/1.0.23/_is_same_path.js +20 -0
  164. package/script/deps/jsr.io/@std/fs/1.0.23/_is_subdir.d.ts +12 -0
  165. package/script/deps/jsr.io/@std/fs/1.0.23/_is_subdir.d.ts.map +1 -0
  166. package/script/deps/jsr.io/@std/fs/1.0.23/_is_subdir.js +28 -0
  167. package/script/deps/jsr.io/@std/fs/1.0.23/_to_path_string.d.ts +9 -0
  168. package/script/deps/jsr.io/@std/fs/1.0.23/_to_path_string.d.ts.map +1 -0
  169. package/script/deps/jsr.io/@std/fs/1.0.23/_to_path_string.js +16 -0
  170. package/script/deps/jsr.io/@std/fs/1.0.23/copy.d.ts +117 -0
  171. package/script/deps/jsr.io/@std/fs/1.0.23/copy.d.ts.map +1 -0
  172. package/script/deps/jsr.io/@std/fs/1.0.23/copy.js +350 -0
  173. package/script/deps/jsr.io/@std/fs/1.0.23/empty_dir.d.ts +48 -0
  174. package/script/deps/jsr.io/@std/fs/1.0.23/empty_dir.d.ts.map +1 -0
  175. package/script/deps/jsr.io/@std/fs/1.0.23/empty_dir.js +124 -0
  176. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_dir.d.ts +49 -0
  177. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_dir.d.ts.map +1 -0
  178. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_dir.js +139 -0
  179. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_file.d.ts +47 -0
  180. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_file.d.ts.map +1 -0
  181. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_file.js +127 -0
  182. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_link.d.ts +49 -0
  183. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_link.d.ts.map +1 -0
  184. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_link.js +98 -0
  185. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.d.ts +70 -0
  186. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.d.ts.map +1 -0
  187. package/script/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.js +193 -0
  188. package/script/deps/jsr.io/@std/fs/1.0.23/eol.d.ts +52 -0
  189. package/script/deps/jsr.io/@std/fs/1.0.23/eol.d.ts.map +1 -0
  190. package/script/deps/jsr.io/@std/fs/1.0.23/eol.js +105 -0
  191. package/script/deps/jsr.io/@std/fs/1.0.23/exists.d.ts +218 -0
  192. package/script/deps/jsr.io/@std/fs/1.0.23/exists.d.ts.map +1 -0
  193. package/script/deps/jsr.io/@std/fs/1.0.23/exists.js +308 -0
  194. package/script/deps/jsr.io/@std/fs/1.0.23/expand_glob.d.ts +267 -0
  195. package/script/deps/jsr.io/@std/fs/1.0.23/expand_glob.d.ts.map +1 -0
  196. package/script/deps/jsr.io/@std/fs/1.0.23/expand_glob.js +479 -0
  197. package/script/deps/jsr.io/@std/fs/1.0.23/mod.d.ts +29 -0
  198. package/script/deps/jsr.io/@std/fs/1.0.23/mod.d.ts.map +1 -0
  199. package/script/deps/jsr.io/@std/fs/1.0.23/mod.js +45 -0
  200. package/script/deps/jsr.io/@std/fs/1.0.23/move.d.ts +86 -0
  201. package/script/deps/jsr.io/@std/fs/1.0.23/move.d.ts.map +1 -0
  202. package/script/deps/jsr.io/@std/fs/1.0.23/move.js +179 -0
  203. package/script/deps/jsr.io/@std/fs/1.0.23/walk.d.ts +777 -0
  204. package/script/deps/jsr.io/@std/fs/1.0.23/walk.d.ts.map +1 -0
  205. package/script/deps/jsr.io/@std/fs/1.0.23/walk.js +883 -0
  206. package/script/deps/jsr.io/@std/json/1.0.3/types.d.ts +7 -0
  207. package/script/deps/jsr.io/@std/json/1.0.3/types.d.ts.map +1 -0
  208. package/script/deps/jsr.io/@std/json/1.0.3/types.js +4 -0
  209. package/script/deps/jsr.io/@std/jsonc/1.0.2/mod.d.ts +20 -0
  210. package/script/deps/jsr.io/@std/jsonc/1.0.2/mod.d.ts.map +1 -0
  211. package/script/deps/jsr.io/@std/jsonc/1.0.2/mod.js +37 -0
  212. package/script/deps/jsr.io/@std/jsonc/1.0.2/parse.d.ts +21 -0
  213. package/script/deps/jsr.io/@std/jsonc/1.0.2/parse.d.ts.map +1 -0
  214. package/script/deps/jsr.io/@std/jsonc/1.0.2/parse.js +323 -0
  215. package/script/deps/jsr.io/@std/path/1.1.4/constants.d.ts +1 -1
  216. package/script/deps/jsr.io/@std/toml/1.0.11/_parser.d.ts +93 -0
  217. package/script/deps/jsr.io/@std/toml/1.0.11/_parser.d.ts.map +1 -0
  218. package/script/deps/jsr.io/@std/toml/1.0.11/_parser.js +781 -0
  219. package/script/deps/jsr.io/@std/toml/1.0.11/mod.d.ts +109 -0
  220. package/script/deps/jsr.io/@std/toml/1.0.11/mod.d.ts.map +1 -0
  221. package/script/deps/jsr.io/@std/toml/1.0.11/mod.js +126 -0
  222. package/script/deps/jsr.io/@std/toml/1.0.11/parse.d.ts +21 -0
  223. package/script/deps/jsr.io/@std/toml/1.0.11/parse.d.ts.map +1 -0
  224. package/script/deps/jsr.io/@std/toml/1.0.11/parse.js +28 -0
  225. package/script/deps/jsr.io/@std/toml/1.0.11/stringify.d.ts +35 -0
  226. package/script/deps/jsr.io/@std/toml/1.0.11/stringify.d.ts.map +1 -0
  227. package/script/deps/jsr.io/@std/toml/1.0.11/stringify.js +286 -0
  228. package/script/gambit/simulator-ui/dist/bundle.js +12670 -5471
  229. package/script/gambit/simulator-ui/dist/bundle.js.map +4 -4
  230. package/script/gambit/simulator-ui/dist/favicon.ico +0 -0
  231. package/script/mod.d.ts +21 -7
  232. package/script/mod.d.ts.map +1 -1
  233. package/script/mod.js +22 -7
  234. package/script/src/cli_utils.d.ts +1 -0
  235. package/script/src/cli_utils.d.ts.map +1 -1
  236. package/script/src/cli_utils.js +52 -3
  237. package/script/src/default_runtime.d.ts +46 -0
  238. package/script/src/default_runtime.d.ts.map +1 -0
  239. package/script/src/default_runtime.js +452 -0
  240. package/script/src/durable_streams.js +26 -1
  241. package/script/src/model_matchers.d.ts +10 -0
  242. package/script/src/model_matchers.d.ts.map +1 -0
  243. package/script/src/model_matchers.js +29 -0
  244. package/script/src/openai_compat.d.ts +74 -0
  245. package/script/src/openai_compat.d.ts.map +1 -0
  246. package/script/src/openai_compat.js +366 -0
  247. package/script/src/project_config.d.ts +47 -0
  248. package/script/src/project_config.d.ts.map +1 -0
  249. package/script/src/project_config.js +173 -0
  250. package/script/src/providers/codex.d.ts +37 -0
  251. package/script/src/providers/codex.d.ts.map +1 -0
  252. package/script/src/providers/codex.js +850 -0
  253. package/script/src/providers/google.d.ts +18 -0
  254. package/script/src/providers/google.d.ts.map +1 -0
  255. package/script/src/providers/google.js +435 -0
  256. package/script/src/providers/ollama.d.ts +19 -0
  257. package/script/src/providers/ollama.d.ts.map +1 -0
  258. package/script/src/providers/ollama.js +831 -0
  259. package/script/src/providers/openrouter.d.ts +26 -0
  260. package/script/src/providers/openrouter.d.ts.map +1 -0
  261. package/script/src/providers/openrouter.js +926 -0
  262. package/script/src/providers/router.d.ts +19 -0
  263. package/script/src/providers/router.d.ts.map +1 -0
  264. package/script/src/providers/router.js +96 -0
  265. package/script/src/server.d.ts +11 -0
  266. package/script/src/server.d.ts.map +1 -1
  267. package/script/src/server.js +3931 -693
  268. package/script/src/server_feedback_grading_routes.d.ts +32 -0
  269. package/script/src/server_feedback_grading_routes.d.ts.map +1 -0
  270. package/script/src/server_feedback_grading_routes.js +343 -0
  271. package/script/src/server_helpers.d.ts +4 -0
  272. package/script/src/server_helpers.d.ts.map +1 -0
  273. package/script/src/server_helpers.js +84 -0
  274. package/script/src/server_session_store.d.ts +87 -0
  275. package/script/src/server_session_store.d.ts.map +1 -0
  276. package/script/src/server_session_store.js +910 -0
  277. package/script/src/server_types.d.ts +110 -0
  278. package/script/src/server_types.d.ts.map +1 -0
  279. package/script/src/server_types.js +2 -0
  280. package/script/src/server_ui_routes.d.ts +33 -0
  281. package/script/src/server_ui_routes.d.ts.map +1 -0
  282. package/script/src/server_ui_routes.js +173 -0
  283. package/script/src/session_artifacts.d.ts +22 -0
  284. package/script/src/session_artifacts.d.ts.map +1 -0
  285. package/script/src/session_artifacts.js +279 -0
  286. package/script/src/trace.d.ts.map +1 -1
  287. package/script/src/trace.js +8 -5
  288. package/script/src/workspace.d.ts +19 -0
  289. package/script/src/workspace.d.ts.map +1 -0
  290. package/script/src/workspace.js +199 -0
  291. package/script/src/workspace_contract.d.ts +78 -0
  292. package/script/src/workspace_contract.d.ts.map +1 -0
  293. package/script/src/workspace_contract.js +84 -0
package/esm/mod.d.ts CHANGED
@@ -26,20 +26,30 @@ export type { Guardrails } from "@bolt-foundry/gambit-core";
26
26
  export type { JSONValue } from "@bolt-foundry/gambit-core";
27
27
  /** Model provider interface for LLM backends. */
28
28
  export type { ModelProvider } from "@bolt-foundry/gambit-core";
29
- /** Test deck definition shape. */
29
+ /** Scenario deck definition shape. */
30
30
  export type { TestDeckDefinition } from "@bolt-foundry/gambit-core";
31
31
  /** Check if a value is an explicit end-of-run signal. */
32
32
  export { isGambitEndSignal } from "@bolt-foundry/gambit-core";
33
- /** Run a deck and return its execution result. */
34
- export { runDeck } from "@bolt-foundry/gambit-core";
33
+ /** Check whether an error represents runtime cancellation. */
34
+ export { isRunCanceledError } from "@bolt-foundry/gambit-core";
35
+ /** Build a runtime with CLI-equivalent provider defaults and routing. */
36
+ export { createDefaultedRuntime } from "./src/default_runtime.js";
37
+ /** Runtime defaults/options for the `runDeck` wrapper. */
38
+ export type { CreateDefaultedRuntimeOptions, DefaultedRuntime, DefaultedRuntimeRunOptions, RunDeckWithDefaultsOptions, } from "./src/default_runtime.js";
39
+ /** Session artifact persistence config for default runtime runs. */
40
+ export type { SessionArtifactsConfig } from "./src/session_artifacts.js";
41
+ /** Run a deck with default provider/model/runtime behavior. */
42
+ export { runDeck } from "./src/default_runtime.js";
43
+ /** Run a deck directly through gambit-core without gambit defaults. */
44
+ export { runDeck as runDeckCore } from "@bolt-foundry/gambit-core";
35
45
  /** Signal for explicitly ending a Gambit run. */
36
46
  export type { GambitEndSignal } from "@bolt-foundry/gambit-core";
37
47
  /** OpenAI Chat Completions compatibility helper for a deck. */
38
- export { chatCompletionsWithDeck } from "@bolt-foundry/gambit-core";
48
+ export { chatCompletionsWithDeck } from "./src/openai_compat.js";
39
49
  /** OpenAI-compatible request payload. */
40
- export type { ChatCompletionsRequest } from "@bolt-foundry/gambit-core";
50
+ export type { ChatCompletionsRequest } from "./src/openai_compat.js";
41
51
  /** OpenAI-compatible response payload. */
42
- export type { ChatCompletionsResponse } from "@bolt-foundry/gambit-core";
52
+ export type { ChatCompletionsResponse } from "./src/openai_compat.js";
43
53
  /** Render a deck to a human-readable outline or debug view. */
44
54
  export { renderDeck } from "@bolt-foundry/gambit-core";
45
55
  /** Options for deck rendering. */
@@ -47,7 +57,11 @@ export type { RenderDeckOptions } from "@bolt-foundry/gambit-core";
47
57
  /** Result data from rendering a deck. */
48
58
  export type { RenderDeckResult } from "@bolt-foundry/gambit-core";
49
59
  /** Provider factory for OpenRouter-backed model calls. */
50
- export { createOpenRouterProvider } from "@bolt-foundry/gambit-core";
60
+ export { createOpenRouterProvider } from "./src/providers/openrouter.js";
61
+ /** Provider factory for Ollama-backed model calls. */
62
+ export { createOllamaProvider } from "./src/providers/ollama.js";
63
+ /** Provider factory for Google Gemini-backed model calls. */
64
+ export { createGoogleProvider } from "./src/providers/google.js";
51
65
  /** Start the WebSocket simulator server for the Gambit UI. */
52
66
  export { startWebSocketSimulator } from "./src/server.js";
53
67
  //# sourceMappingURL=mod.d.ts.map
package/esm/mod.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,yEAAyE;AACzE,OAAO,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,oDAAoD;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,oCAAoC;AACpC,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,6BAA6B;AAC7B,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,6BAA6B;AAC7B,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,iCAAiC;AACjC,YAAY,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,yCAAyC;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,oCAAoC;AACpC,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,uCAAuC;AACvC,YAAY,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,2DAA2D;AAC3D,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,iDAAiD;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,kCAAkC;AAClC,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,yDAAyD;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,kDAAkD;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,iDAAiD;AACjD,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,+DAA+D;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,yCAAyC;AACzC,YAAY,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,0CAA0C;AAC1C,YAAY,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,+DAA+D;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,kCAAkC;AAClC,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,yCAAyC;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,0DAA0D;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,8DAA8D;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,yEAAyE;AACzE,OAAO,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,oDAAoD;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,oCAAoC;AACpC,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,6BAA6B;AAC7B,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,6BAA6B;AAC7B,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,iCAAiC;AACjC,YAAY,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,yCAAyC;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,oCAAoC;AACpC,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,uCAAuC;AACvC,YAAY,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,2DAA2D;AAC3D,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,iDAAiD;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,sCAAsC;AACtC,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,yDAAyD;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,8DAA8D;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,yEAAyE;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,0DAA0D;AAC1D,YAAY,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,oEAAoE;AACpE,YAAY,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACzE,+DAA+D;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,uEAAuE;AACvE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACnE,iDAAiD;AACjD,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,+DAA+D;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,yCAAyC;AACzC,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,0CAA0C;AAC1C,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,+DAA+D;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,kCAAkC;AAClC,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,yCAAyC;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,0DAA0D;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,sDAAsD;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,6DAA6D;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,8DAA8D;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC"}
package/esm/mod.js CHANGED
@@ -10,13 +10,23 @@ export { defineCard } from "@bolt-foundry/gambit-core";
10
10
  export { defineDeck } from "@bolt-foundry/gambit-core";
11
11
  /** Check if a value is an explicit end-of-run signal. */
12
12
  export { isGambitEndSignal } from "@bolt-foundry/gambit-core";
13
- /** Run a deck and return its execution result. */
14
- export { runDeck } from "@bolt-foundry/gambit-core";
13
+ /** Check whether an error represents runtime cancellation. */
14
+ export { isRunCanceledError } from "@bolt-foundry/gambit-core";
15
+ /** Build a runtime with CLI-equivalent provider defaults and routing. */
16
+ export { createDefaultedRuntime } from "./src/default_runtime.js";
17
+ /** Run a deck with default provider/model/runtime behavior. */
18
+ export { runDeck } from "./src/default_runtime.js";
19
+ /** Run a deck directly through gambit-core without gambit defaults. */
20
+ export { runDeck as runDeckCore } from "@bolt-foundry/gambit-core";
15
21
  /** OpenAI Chat Completions compatibility helper for a deck. */
16
- export { chatCompletionsWithDeck } from "@bolt-foundry/gambit-core";
22
+ export { chatCompletionsWithDeck } from "./src/openai_compat.js";
17
23
  /** Render a deck to a human-readable outline or debug view. */
18
24
  export { renderDeck } from "@bolt-foundry/gambit-core";
19
25
  /** Provider factory for OpenRouter-backed model calls. */
20
- export { createOpenRouterProvider } from "@bolt-foundry/gambit-core";
26
+ export { createOpenRouterProvider } from "./src/providers/openrouter.js";
27
+ /** Provider factory for Ollama-backed model calls. */
28
+ export { createOllamaProvider } from "./src/providers/ollama.js";
29
+ /** Provider factory for Google Gemini-backed model calls. */
30
+ export { createGoogleProvider } from "./src/providers/google.js";
21
31
  /** Start the WebSocket simulator server for the Gambit UI. */
22
32
  export { startWebSocketSimulator } from "./src/server.js";
@@ -3,6 +3,7 @@ import type { SavedState } from "@bolt-foundry/gambit-core";
3
3
  export declare function parsePortValue(value: unknown, label?: string): number | undefined;
4
4
  export declare function normalizeFlagList(value: string | Array<string> | undefined): Array<string>;
5
5
  export declare function slugifyDeckPath(deckPath: string): string;
6
+ export declare function resolveProjectRoot(startDir: string): string | undefined;
6
7
  export declare function defaultSessionRoot(deckPath: string): string;
7
8
  export declare function defaultTestBotStatePath(deckPath: string): string;
8
9
  export declare function enrichStateMeta(state: SavedState, deckPath: string): SavedState;
@@ -1 +1 @@
1
- {"version":3,"file":"cli_utils.d.ts","sourceRoot":"","sources":["../../src/src/cli_utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,KAAK,SAAS,GACb,MAAM,GAAG,SAAS,CAOpB;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,GACxC,KAAK,CAAC,MAAM,CAAC,CAGf;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQxD;AAuBD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM3D;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQhE;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,MAAM,GACf,UAAU,CAOZ;AAED,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAOlD;AAED,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAOlD;AAED,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAOnD;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,GAC5B,MAAM,GAAG,SAAS,CAUpB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,OAAO,CAe/D"}
1
+ {"version":3,"file":"cli_utils.d.ts","sourceRoot":"","sources":["../../src/src/cli_utils.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,KAAK,SAAS,GACb,MAAM,GAAG,SAAS,CAOpB;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,GACxC,KAAK,CAAC,MAAM,CAAC,CAGf;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQxD;AAuBD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEvE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAkB3D;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQhE;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,MAAM,GACf,UAAU,CAOZ;AAED,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAOlD;AAED,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAOlD;AAED,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAOnD;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,GAC5B,MAAM,GAAG,SAAS,CAUpB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,OAAO,CAuB/D"}
@@ -1,6 +1,6 @@
1
1
  import * as dntShim from "../_dnt.shims.js";
2
2
  import * as path from "../deps/jsr.io/@std/path/1.1.4/mod.js";
3
- import { GAMBIT_TOOL_INIT } from "@bolt-foundry/gambit-core";
3
+ import { GAMBIT_TOOL_CONTEXT, GAMBIT_TOOL_INIT, } from "@bolt-foundry/gambit-core";
4
4
  export function parsePortValue(value, label = "port") {
5
5
  if (value === undefined || value === null || value === "")
6
6
  return undefined;
@@ -43,12 +43,24 @@ function findProjectRoot(startDir) {
43
43
  }
44
44
  return undefined;
45
45
  }
46
+ export function resolveProjectRoot(startDir) {
47
+ return findProjectRoot(startDir);
48
+ }
46
49
  export function defaultSessionRoot(deckPath) {
47
50
  const resolvedDeckPath = path.resolve(deckPath);
51
+ const marker = `${path.SEPARATOR}.gambit${path.SEPARATOR}workspaces${path.SEPARATOR}`;
52
+ const markerIndex = resolvedDeckPath.lastIndexOf(marker);
53
+ if (markerIndex >= 0) {
54
+ const suffix = resolvedDeckPath.slice(markerIndex + marker.length);
55
+ const markerSegments = suffix.split(path.SEPARATOR).filter(Boolean);
56
+ if (markerSegments.length >= 2 && markerSegments[1] === "deck") {
57
+ return path.resolve(resolvedDeckPath.slice(0, markerIndex + marker.length));
58
+ }
59
+ }
48
60
  const deckDir = path.dirname(resolvedDeckPath);
49
61
  const projectRoot = findProjectRoot(deckDir);
50
62
  const baseDir = projectRoot ?? deckDir;
51
- return path.join(baseDir, ".gambit", "sessions");
63
+ return path.join(baseDir, ".gambit", "workspaces");
52
64
  }
53
65
  export function defaultTestBotStatePath(deckPath) {
54
66
  const slug = slugifyDeckPath(deckPath);
@@ -106,11 +118,20 @@ export function findLastAssistantMessage(messages) {
106
118
  return undefined;
107
119
  }
108
120
  export function extractContextInput(state) {
109
- if (!state?.messages)
121
+ if (!state)
110
122
  return undefined;
123
+ if (state.format === "responses" && Array.isArray(state.items)) {
124
+ return extractContextInputFromItems(state.items);
125
+ }
126
+ if (!state.messages)
127
+ return undefined;
128
+ const contextToolNames = new Set([
129
+ GAMBIT_TOOL_CONTEXT,
130
+ GAMBIT_TOOL_INIT,
131
+ ]);
111
132
  for (let i = state.messages.length - 1; i >= 0; i--) {
112
133
  const msg = state.messages[i];
113
- if (msg.role === "tool" && msg.name === GAMBIT_TOOL_INIT) {
134
+ if (msg.role === "tool" && contextToolNames.has(msg.name ?? "")) {
114
135
  const content = msg.content;
115
136
  if (typeof content !== "string")
116
137
  return undefined;
@@ -124,3 +145,30 @@ export function extractContextInput(state) {
124
145
  }
125
146
  return undefined;
126
147
  }
148
+ function extractContextInputFromItems(items) {
149
+ const contextToolNames = new Set([
150
+ GAMBIT_TOOL_CONTEXT,
151
+ GAMBIT_TOOL_INIT,
152
+ ]);
153
+ const callNameById = new Map();
154
+ for (const item of items) {
155
+ if (item.type === "function_call") {
156
+ callNameById.set(item.call_id, item.name);
157
+ }
158
+ }
159
+ for (let i = items.length - 1; i >= 0; i--) {
160
+ const item = items[i];
161
+ if (item.type !== "function_call_output")
162
+ continue;
163
+ const name = callNameById.get(item.call_id);
164
+ if (!name || !contextToolNames.has(name))
165
+ continue;
166
+ try {
167
+ return JSON.parse(item.output);
168
+ }
169
+ catch {
170
+ return item.output;
171
+ }
172
+ }
173
+ return undefined;
174
+ }
@@ -0,0 +1,46 @@
1
+ import { runDeck as runDeckCore } from "@bolt-foundry/gambit-core";
2
+ import type { ModelProvider } from "@bolt-foundry/gambit-core";
3
+ import { type SessionArtifactsConfig } from "./session_artifacts.js";
4
+ import { type LoadedProjectConfig, type ModelAliasResolver } from "./project_config.js";
5
+ import { type ProviderKey } from "./providers/router.js";
6
+ type WarnLogger = Pick<Console, "warn">;
7
+ type CoreRunDeckOptions = Parameters<typeof runDeckCore>[0];
8
+ export type DefaultedRuntimeRunOptions = Omit<CoreRunDeckOptions, "modelProvider" | "defaultModel" | "modelOverride" | "responsesMode"> & {
9
+ modelProvider?: ModelProvider;
10
+ defaultModel?: string;
11
+ modelOverride?: string;
12
+ responsesMode?: boolean;
13
+ sessionArtifacts?: SessionArtifactsConfig | false;
14
+ };
15
+ export type CreateDefaultedRuntimeOptions = {
16
+ configHint?: string;
17
+ projectConfig?: LoadedProjectConfig | null;
18
+ modelProvider?: ModelProvider;
19
+ defaultModel?: string;
20
+ modelOverride?: string;
21
+ responsesMode?: boolean;
22
+ fallbackProvider?: ProviderKey | null;
23
+ logger?: WarnLogger;
24
+ sessionArtifacts?: SessionArtifactsConfig;
25
+ };
26
+ export type DefaultedRuntime = {
27
+ projectConfig: LoadedProjectConfig | null;
28
+ modelAliasResolver: ModelAliasResolver;
29
+ configuredFallbackProvider: ProviderKey | null | undefined;
30
+ effectiveFallbackProvider: ProviderKey | null;
31
+ modelProvider: ModelProvider;
32
+ defaultModel?: string;
33
+ modelOverride?: string;
34
+ responsesMode: boolean;
35
+ sessionArtifacts?: SessionArtifactsConfig;
36
+ resolveRunOptions: (opts: DefaultedRuntimeRunOptions) => CoreRunDeckOptions;
37
+ runDeck: (opts: DefaultedRuntimeRunOptions) => Promise<unknown>;
38
+ };
39
+ export type RunDeckWithDefaultsOptions = DefaultedRuntimeRunOptions & {
40
+ runtime?: DefaultedRuntime;
41
+ runtimeOptions?: CreateDefaultedRuntimeOptions;
42
+ };
43
+ export declare function createDefaultedRuntime(opts?: CreateDefaultedRuntimeOptions): Promise<DefaultedRuntime>;
44
+ export declare function runDeck(opts: RunDeckWithDefaultsOptions): Promise<unknown>;
45
+ export {};
46
+ //# sourceMappingURL=default_runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default_runtime.d.ts","sourceRoot":"","sources":["../../src/src/default_runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAGV,aAAa,EAId,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,KAAK,sBAAsB,EAE5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAGL,KAAK,mBAAmB,EAExB,KAAK,kBAAkB,EACxB,MAAM,qBAAqB,CAAC;AAU7B,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAI/E,KAAK,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAoBxC,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5D,MAAM,MAAM,0BAA0B,GAClC,IAAI,CACJ,kBAAkB,EAChB,eAAe,GACf,cAAc,GACd,eAAe,GACf,eAAe,CAClB,GACC;IACA,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,sBAAsB,GAAG,KAAK,CAAC;CACnD,CAAC;AAEJ,MAAM,MAAM,6BAA6B,GAAG;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC3C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACtC,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,aAAa,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC1C,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,0BAA0B,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3D,yBAAyB,EAAE,WAAW,GAAG,IAAI,CAAC;IAC9C,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,iBAAiB,EAAE,CAAC,IAAI,EAAE,0BAA0B,KAAK,kBAAkB,CAAC;IAC5E,OAAO,EAAE,CAAC,IAAI,EAAE,0BAA0B,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACjE,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,0BAA0B,GAAG;IACpE,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,cAAc,CAAC,EAAE,6BAA6B,CAAC;CAChD,CAAC;AAgZF,wBAAsB,sBAAsB,CAC1C,IAAI,GAAE,6BAAkC,GACvC,OAAO,CAAC,gBAAgB,CAAC,CA8E3B;AAED,wBAAsB,OAAO,CAC3B,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,OAAO,CAAC,CAclB"}
@@ -0,0 +1,415 @@
1
+ import * as dntShim from "../_dnt.shims.js";
2
+ import { runDeck as runDeckCore } from "@bolt-foundry/gambit-core";
3
+ import { createProviderMatchers } from "./model_matchers.js";
4
+ import { withSessionArtifacts, } from "./session_artifacts.js";
5
+ import { createModelAliasResolver, loadProjectConfig, } from "./project_config.js";
6
+ import { CODEX_PREFIX, createCodexProvider } from "./providers/codex.js";
7
+ import { createGoogleProvider } from "./providers/google.js";
8
+ import { createOllamaProvider, ensureOllamaModel, fetchOllamaTags, OLLAMA_PREFIX, } from "./providers/ollama.js";
9
+ import { createOpenRouterProvider } from "./providers/openrouter.js";
10
+ import { createProviderRouter } from "./providers/router.js";
11
+ const DEFAULT_OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1";
12
+ function mergeParams(aliasParams, baseParams) {
13
+ if (aliasParams && baseParams) {
14
+ return { ...aliasParams, ...baseParams };
15
+ }
16
+ return baseParams ?? aliasParams;
17
+ }
18
+ function parseFallbackProviderFromConfig(fallbackProviderRaw, logger) {
19
+ if (typeof fallbackProviderRaw !== "string") {
20
+ return undefined;
21
+ }
22
+ const normalized = fallbackProviderRaw.trim().toLowerCase();
23
+ if (normalized === "none") {
24
+ return null;
25
+ }
26
+ if (normalized === "codex") {
27
+ throw new Error('[gambit] providers.fallback "codex" is no longer supported. Use "codex-cli" or "none".');
28
+ }
29
+ if (normalized === "openrouter" || normalized === "ollama" ||
30
+ normalized === "google" || normalized === "codex-cli") {
31
+ return normalized;
32
+ }
33
+ if (normalized.length > 0) {
34
+ logger.warn(`[gambit] Unknown providers.fallback "${fallbackProviderRaw}" in gambit.toml; using default fallback.`);
35
+ }
36
+ return undefined;
37
+ }
38
+ function resolveConfiguredFallbackProvider(opts) {
39
+ if (opts.runtimeOverride !== undefined) {
40
+ return opts.runtimeOverride;
41
+ }
42
+ return parseFallbackProviderFromConfig(opts.projectConfig?.providers?.fallback, opts.logger);
43
+ }
44
+ function resolveDefaultResponsesMode() {
45
+ const chatFallback = dntShim.Deno.env.get("GAMBIT_CHAT_FALLBACK") === "1";
46
+ return !chatFallback && dntShim.Deno.env.get("GAMBIT_RESPONSES_MODE") !== "0";
47
+ }
48
+ function resolveSessionArtifactsConfig(opts) {
49
+ if (opts.runConfig === false)
50
+ return undefined;
51
+ if (!opts.runtimeConfig && !opts.runConfig)
52
+ return undefined;
53
+ const merged = {
54
+ ...(opts.runtimeConfig ?? {}),
55
+ ...(opts.runConfig ?? {}),
56
+ };
57
+ if (typeof merged.rootDir !== "string" || !merged.rootDir.trim()) {
58
+ throw new Error("sessionArtifacts.rootDir is required when persistence is enabled.");
59
+ }
60
+ return {
61
+ rootDir: merged.rootDir,
62
+ sessionId: merged.sessionId,
63
+ continueSession: merged.continueSession,
64
+ };
65
+ }
66
+ function buildDefaultModelProvider(opts) {
67
+ const openRouterApiKey = dntShim.Deno.env.get("OPENROUTER_API_KEY")?.trim();
68
+ const googleApiKey = (dntShim.Deno.env.get("GOOGLE_API_KEY") ??
69
+ dntShim.Deno.env.get("GEMINI_API_KEY"))?.trim();
70
+ const openRouterBaseURL = dntShim.Deno.env.get("OPENROUTER_BASE_URL") ??
71
+ DEFAULT_OPENROUTER_BASE_URL;
72
+ const ollamaBaseURL = dntShim.Deno.env.get("OLLAMA_BASE_URL") ?? undefined;
73
+ const googleBaseURL = dntShim.Deno.env.get("GOOGLE_BASE_URL") ??
74
+ dntShim.Deno.env.get("GEMINI_BASE_URL") ??
75
+ undefined;
76
+ const openRouterProvider = openRouterApiKey
77
+ ? createOpenRouterProvider({
78
+ apiKey: openRouterApiKey,
79
+ baseURL: openRouterBaseURL ?? undefined,
80
+ enableResponses: opts.responsesMode &&
81
+ dntShim.Deno.env.get("GAMBIT_OPENROUTER_RESPONSES") !== "0",
82
+ })
83
+ : null;
84
+ const ollamaProvider = createOllamaProvider({
85
+ apiKey: dntShim.Deno.env.get("OLLAMA_API_KEY")?.trim() || undefined,
86
+ baseURL: ollamaBaseURL,
87
+ });
88
+ const googleProvider = googleApiKey
89
+ ? createGoogleProvider({
90
+ apiKey: googleApiKey,
91
+ baseURL: googleBaseURL,
92
+ })
93
+ : null;
94
+ const codexProvider = createCodexProvider();
95
+ const providerRouter = createProviderRouter({
96
+ providers: {
97
+ openrouter: openRouterProvider,
98
+ ollama: ollamaProvider,
99
+ google: googleProvider,
100
+ "codex-cli": codexProvider,
101
+ },
102
+ defaultProvider: opts.configuredFallbackProvider,
103
+ fallbackToDefaultOnMissing: ["google"],
104
+ });
105
+ const providerMatchers = createProviderMatchers(opts.effectiveFallbackProvider);
106
+ const ollamaTagsCache = {
107
+ promise: null,
108
+ };
109
+ const getOllamaTags = async () => {
110
+ if (!ollamaTagsCache.promise) {
111
+ ollamaTagsCache.promise = fetchOllamaTags(ollamaBaseURL);
112
+ }
113
+ return await ollamaTagsCache.promise;
114
+ };
115
+ const providerCapabilities = [
116
+ {
117
+ name: "ollama",
118
+ matches: providerMatchers.matchesOllama,
119
+ isAvailable: async (model, capabilityOpts) => {
120
+ const trimmed = model.slice(OLLAMA_PREFIX.length);
121
+ if (!trimmed) {
122
+ return { available: false, reason: "missing Ollama model name" };
123
+ }
124
+ if (capabilityOpts.allowPull) {
125
+ try {
126
+ await ensureOllamaModel(trimmed, ollamaBaseURL);
127
+ return { available: true };
128
+ }
129
+ catch (err) {
130
+ return {
131
+ available: false,
132
+ reason: err instanceof Error ? err.message : String(err),
133
+ };
134
+ }
135
+ }
136
+ try {
137
+ const tags = await getOllamaTags();
138
+ if (tags.has(trimmed)) {
139
+ return { available: true };
140
+ }
141
+ return {
142
+ available: false,
143
+ reason: `Ollama model "${trimmed}" not installed`,
144
+ };
145
+ }
146
+ catch (err) {
147
+ return {
148
+ available: false,
149
+ reason: err instanceof Error ? err.message : String(err),
150
+ };
151
+ }
152
+ },
153
+ },
154
+ {
155
+ name: "google",
156
+ matches: providerMatchers.matchesGoogle,
157
+ isAvailable: (_model, _capabilityOpts) => Promise.resolve(googleApiKey
158
+ ? { available: true }
159
+ : (opts.effectiveFallbackProvider === "openrouter" &&
160
+ openRouterApiKey)
161
+ ? { available: true }
162
+ : {
163
+ available: false,
164
+ reason: "GOOGLE_API_KEY or GEMINI_API_KEY is not set",
165
+ }),
166
+ },
167
+ {
168
+ name: "openrouter",
169
+ matches: providerMatchers.matchesOpenRouter,
170
+ isAvailable: (_model, _capabilityOpts) => Promise.resolve(openRouterApiKey ? { available: true } : {
171
+ available: false,
172
+ reason: "OPENROUTER_API_KEY is not set",
173
+ }),
174
+ },
175
+ {
176
+ name: "codex-cli",
177
+ matches: providerMatchers.matchesCodex,
178
+ isAvailable: (model, _capabilityOpts) => {
179
+ if (model === "codex" || model.startsWith("codex/")) {
180
+ return Promise.resolve({
181
+ available: false,
182
+ reason: 'legacy codex prefix is unsupported; use "codex-cli/default" or "codex-cli/<model>"',
183
+ });
184
+ }
185
+ const stripped = model.startsWith(CODEX_PREFIX)
186
+ ? model.slice(CODEX_PREFIX.length)
187
+ : model;
188
+ if (!stripped.trim()) {
189
+ return Promise.resolve({
190
+ available: false,
191
+ reason: "missing Codex model name",
192
+ });
193
+ }
194
+ return Promise.resolve({ available: true });
195
+ },
196
+ },
197
+ ];
198
+ const warnedMissingAliases = new Set();
199
+ const expandModelCandidates = (model, params) => {
200
+ if (!model)
201
+ return { candidates: [], allowPull: false };
202
+ const baseParams = params;
203
+ const entries = Array.isArray(model) ? model : [model];
204
+ const allowPull = !Array.isArray(model);
205
+ const candidates = [];
206
+ for (const entry of entries) {
207
+ if (typeof entry !== "string" || !entry.trim())
208
+ continue;
209
+ const resolution = opts.modelAliasResolver(entry);
210
+ if (resolution.missingAlias && !warnedMissingAliases.has(entry)) {
211
+ opts.logger.warn(`[gambit] Model alias "${entry}" is not defined in gambit.toml; using literal value.`);
212
+ warnedMissingAliases.add(entry);
213
+ }
214
+ if (resolution.applied) {
215
+ const resolvedModel = resolution.model;
216
+ const mergedParams = mergeParams(resolution.params, baseParams);
217
+ if (Array.isArray(resolvedModel)) {
218
+ for (const candidate of resolvedModel) {
219
+ if (!candidate.trim())
220
+ continue;
221
+ candidates.push({
222
+ model: candidate,
223
+ params: mergedParams,
224
+ });
225
+ }
226
+ }
227
+ else if (resolvedModel) {
228
+ candidates.push({
229
+ model: resolvedModel,
230
+ params: mergedParams,
231
+ });
232
+ }
233
+ }
234
+ else {
235
+ candidates.push({
236
+ model: entry,
237
+ params: baseParams,
238
+ });
239
+ }
240
+ }
241
+ const allowPullForSingle = allowPull && candidates.length <= 1;
242
+ return { candidates, allowPull: allowPullForSingle };
243
+ };
244
+ const resolveModelSelection = async (model, params, deckPath) => {
245
+ const { candidates, allowPull } = expandModelCandidates(model, params);
246
+ if (candidates.length === 0) {
247
+ throw new Error(deckPath
248
+ ? `No model configured for deck ${deckPath}`
249
+ : "No model configured.");
250
+ }
251
+ const failures = [];
252
+ for (const candidate of candidates) {
253
+ const capability = providerCapabilities.find((entry) => entry.matches(candidate.model));
254
+ const availability = capability
255
+ ? await capability.isAvailable(candidate.model, { allowPull })
256
+ : {
257
+ available: false,
258
+ reason: "no provider registered for model",
259
+ };
260
+ if (availability.available) {
261
+ return {
262
+ model: candidate.model,
263
+ params: candidate.params,
264
+ };
265
+ }
266
+ const label = capability ? capability.name : "unknown";
267
+ const reason = availability.reason ? `: ${availability.reason}` : "";
268
+ failures.push(`${candidate.model} (${label}${reason})`);
269
+ }
270
+ const suffix = failures.length ? ` Tried: ${failures.join(", ")}.` : "";
271
+ throw new Error(deckPath
272
+ ? `No available model found for deck ${deckPath}.${suffix}`
273
+ : `No available model found.${suffix}`);
274
+ };
275
+ const shouldResolveModel = (model) => {
276
+ if (Array.isArray(model))
277
+ return true;
278
+ const resolution = opts.modelAliasResolver(model);
279
+ return Boolean(resolution.applied || resolution.missingAlias);
280
+ };
281
+ return {
282
+ resolveModel: async (input) => await resolveModelSelection(input.model, input.params, input.deckPath),
283
+ responses: async (input) => {
284
+ const applied = shouldResolveModel(input.request.model)
285
+ ? await resolveModelSelection(input.request.model, input.request.params, input.deckPath)
286
+ : { model: input.request.model, params: input.request.params };
287
+ const request = {
288
+ ...input.request,
289
+ model: applied.model ?? input.request.model,
290
+ params: applied.params,
291
+ };
292
+ if (typeof request.model !== "string" || !request.model) {
293
+ throw new Error("Model is required.");
294
+ }
295
+ const selection = providerRouter.resolve({ model: request.model });
296
+ const responses = selection.provider.responses;
297
+ if (!responses) {
298
+ throw new Error(`${selection.providerKey} provider does not support responses.`);
299
+ }
300
+ return await responses({
301
+ ...input,
302
+ request: {
303
+ ...request,
304
+ model: selection.model,
305
+ },
306
+ });
307
+ },
308
+ chat: async (input) => {
309
+ const applied = shouldResolveModel(input.model)
310
+ ? await resolveModelSelection(input.model, input.params, input.deckPath)
311
+ : { model: input.model, params: input.params };
312
+ const request = {
313
+ ...input,
314
+ model: applied.model ?? input.model,
315
+ params: applied.params,
316
+ };
317
+ if (typeof request.model !== "string" || !request.model) {
318
+ throw new Error("Model is required.");
319
+ }
320
+ const selection = providerRouter.resolve({ model: request.model });
321
+ return await selection.provider.chat({
322
+ ...request,
323
+ model: selection.model,
324
+ });
325
+ },
326
+ };
327
+ }
328
+ export async function createDefaultedRuntime(opts = {}) {
329
+ const logger = opts.logger ?? console;
330
+ const projectConfig = opts.projectConfig === undefined
331
+ ? await loadProjectConfig(opts.configHint)
332
+ : opts.projectConfig;
333
+ const modelAliasResolver = createModelAliasResolver(projectConfig?.config);
334
+ const configuredFallbackProvider = resolveConfiguredFallbackProvider({
335
+ runtimeOverride: opts.fallbackProvider,
336
+ projectConfig: projectConfig?.config,
337
+ logger,
338
+ });
339
+ const effectiveFallbackProvider = configuredFallbackProvider === undefined
340
+ ? "openrouter"
341
+ : configuredFallbackProvider;
342
+ const responsesMode = opts.responsesMode ?? resolveDefaultResponsesMode();
343
+ const modelProvider = opts.modelProvider ??
344
+ buildDefaultModelProvider({
345
+ modelAliasResolver,
346
+ configuredFallbackProvider,
347
+ effectiveFallbackProvider,
348
+ responsesMode,
349
+ logger,
350
+ });
351
+ const defaultModel = opts.defaultModel;
352
+ const modelOverride = opts.modelOverride;
353
+ const runtimeSessionArtifacts = opts.sessionArtifacts;
354
+ const resolveRunOptions = (runOpts) => {
355
+ const { sessionArtifacts: _sessionArtifacts, ...coreRunOpts } = runOpts;
356
+ return {
357
+ ...coreRunOpts,
358
+ modelProvider: runOpts.modelProvider ?? modelProvider,
359
+ defaultModel: runOpts.defaultModel ?? defaultModel,
360
+ modelOverride: runOpts.modelOverride ?? modelOverride,
361
+ responsesMode: runOpts.responsesMode ?? responsesMode,
362
+ };
363
+ };
364
+ return {
365
+ projectConfig,
366
+ modelAliasResolver,
367
+ configuredFallbackProvider,
368
+ effectiveFallbackProvider,
369
+ modelProvider,
370
+ defaultModel,
371
+ modelOverride,
372
+ responsesMode,
373
+ sessionArtifacts: runtimeSessionArtifacts,
374
+ resolveRunOptions,
375
+ runDeck: async (runOpts) => {
376
+ const resolved = resolveRunOptions(runOpts);
377
+ const effectiveSessionArtifacts = resolveSessionArtifactsConfig({
378
+ runtimeConfig: runtimeSessionArtifacts,
379
+ runConfig: runOpts.sessionArtifacts,
380
+ });
381
+ if (!effectiveSessionArtifacts) {
382
+ return await runDeckCore(resolved);
383
+ }
384
+ const artifacts = withSessionArtifacts({
385
+ config: effectiveSessionArtifacts,
386
+ trace: resolved.trace,
387
+ onStateUpdate: resolved.onStateUpdate,
388
+ state: resolved.state,
389
+ });
390
+ try {
391
+ return await runDeckCore({
392
+ ...resolved,
393
+ state: artifacts.state,
394
+ trace: artifacts.trace,
395
+ onStateUpdate: artifacts.onStateUpdate,
396
+ });
397
+ }
398
+ finally {
399
+ artifacts.finalize();
400
+ }
401
+ },
402
+ };
403
+ }
404
+ export async function runDeck(opts) {
405
+ if (opts.runtime && opts.runtimeOptions) {
406
+ throw new Error("runDeck received both runtime and runtimeOptions. Pass only one.");
407
+ }
408
+ const runtime = opts.runtime ??
409
+ await createDefaultedRuntime({
410
+ ...opts.runtimeOptions,
411
+ configHint: opts.runtimeOptions?.configHint ?? opts.path,
412
+ });
413
+ const { runtime: _runtime, runtimeOptions: _runtimeOptions, ...runOpts } = opts;
414
+ return await runtime.runDeck(runOpts);
415
+ }