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

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 (289) hide show
  1. package/CHANGELOG.md +34 -2
  2. package/README.md +79 -16
  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 +122 -0
  6. package/esm/deps/jsr.io/@std/collections/1.1.5/deep_merge.d.ts +322 -0
  7. package/esm/deps/jsr.io/@std/collections/1.1.5/deep_merge.d.ts.map +1 -0
  8. package/esm/deps/jsr.io/@std/collections/1.1.5/deep_merge.js +105 -0
  9. package/esm/deps/jsr.io/@std/fs/1.0.22/_create_walk_entry.d.ts +14 -0
  10. package/esm/deps/jsr.io/@std/fs/1.0.22/_create_walk_entry.d.ts.map +1 -0
  11. package/esm/deps/jsr.io/@std/fs/1.0.22/_create_walk_entry.js +34 -0
  12. package/esm/deps/jsr.io/@std/fs/1.0.22/_get_file_info_type.d.ts +13 -0
  13. package/esm/deps/jsr.io/@std/fs/1.0.22/_get_file_info_type.d.ts.map +1 -0
  14. package/esm/deps/jsr.io/@std/fs/1.0.22/_get_file_info_type.js +18 -0
  15. package/esm/deps/jsr.io/@std/fs/1.0.22/_is_same_path.d.ts +10 -0
  16. package/esm/deps/jsr.io/@std/fs/1.0.22/_is_same_path.d.ts.map +1 -0
  17. package/esm/deps/jsr.io/@std/fs/1.0.22/_is_same_path.js +17 -0
  18. package/esm/deps/jsr.io/@std/fs/1.0.22/_is_subdir.d.ts +12 -0
  19. package/esm/deps/jsr.io/@std/fs/1.0.22/_is_subdir.d.ts.map +1 -0
  20. package/esm/deps/jsr.io/@std/fs/1.0.22/_is_subdir.js +25 -0
  21. package/esm/deps/jsr.io/@std/fs/1.0.22/_to_path_string.d.ts +9 -0
  22. package/esm/deps/jsr.io/@std/fs/1.0.22/_to_path_string.d.ts.map +1 -0
  23. package/esm/deps/jsr.io/@std/fs/1.0.22/_to_path_string.js +13 -0
  24. package/esm/deps/jsr.io/@std/fs/1.0.22/copy.d.ts +117 -0
  25. package/esm/deps/jsr.io/@std/fs/1.0.22/copy.d.ts.map +1 -0
  26. package/esm/deps/jsr.io/@std/fs/1.0.22/copy.js +313 -0
  27. package/esm/deps/jsr.io/@std/fs/1.0.22/empty_dir.d.ts +48 -0
  28. package/esm/deps/jsr.io/@std/fs/1.0.22/empty_dir.d.ts.map +1 -0
  29. package/esm/deps/jsr.io/@std/fs/1.0.22/empty_dir.js +87 -0
  30. package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_dir.d.ts +49 -0
  31. package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_dir.d.ts.map +1 -0
  32. package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_dir.js +102 -0
  33. package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_file.d.ts +47 -0
  34. package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_file.d.ts.map +1 -0
  35. package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_file.js +90 -0
  36. package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_link.d.ts +49 -0
  37. package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_link.d.ts.map +1 -0
  38. package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_link.js +61 -0
  39. package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_symlink.d.ts +70 -0
  40. package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_symlink.d.ts.map +1 -0
  41. package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_symlink.js +156 -0
  42. package/esm/deps/jsr.io/@std/fs/1.0.22/eol.d.ts +52 -0
  43. package/esm/deps/jsr.io/@std/fs/1.0.22/eol.d.ts.map +1 -0
  44. package/esm/deps/jsr.io/@std/fs/1.0.22/eol.js +67 -0
  45. package/esm/deps/jsr.io/@std/fs/1.0.22/exists.d.ts +218 -0
  46. package/esm/deps/jsr.io/@std/fs/1.0.22/exists.d.ts.map +1 -0
  47. package/esm/deps/jsr.io/@std/fs/1.0.22/exists.js +271 -0
  48. package/esm/deps/jsr.io/@std/fs/1.0.22/expand_glob.d.ts +267 -0
  49. package/esm/deps/jsr.io/@std/fs/1.0.22/expand_glob.d.ts.map +1 -0
  50. package/esm/deps/jsr.io/@std/fs/1.0.22/expand_glob.js +442 -0
  51. package/esm/deps/jsr.io/@std/fs/1.0.22/mod.d.ts +29 -0
  52. package/esm/deps/jsr.io/@std/fs/1.0.22/mod.d.ts.map +1 -0
  53. package/esm/deps/jsr.io/@std/fs/1.0.22/mod.js +29 -0
  54. package/esm/deps/jsr.io/@std/fs/1.0.22/move.d.ts +86 -0
  55. package/esm/deps/jsr.io/@std/fs/1.0.22/move.d.ts.map +1 -0
  56. package/esm/deps/jsr.io/@std/fs/1.0.22/move.js +142 -0
  57. package/esm/deps/jsr.io/@std/fs/1.0.22/walk.d.ts +777 -0
  58. package/esm/deps/jsr.io/@std/fs/1.0.22/walk.d.ts.map +1 -0
  59. package/esm/deps/jsr.io/@std/fs/1.0.22/walk.js +846 -0
  60. package/esm/deps/jsr.io/@std/json/1.0.2/types.d.ts +5 -0
  61. package/esm/deps/jsr.io/@std/json/1.0.2/types.d.ts.map +1 -0
  62. package/esm/deps/jsr.io/@std/json/1.0.2/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/toml/1.0.11/_parser.d.ts +93 -0
  70. package/esm/deps/jsr.io/@std/toml/1.0.11/_parser.d.ts.map +1 -0
  71. package/esm/deps/jsr.io/@std/toml/1.0.11/_parser.js +753 -0
  72. package/esm/deps/jsr.io/@std/toml/1.0.11/mod.d.ts +109 -0
  73. package/esm/deps/jsr.io/@std/toml/1.0.11/mod.d.ts.map +1 -0
  74. package/esm/deps/jsr.io/@std/toml/1.0.11/mod.js +110 -0
  75. package/esm/deps/jsr.io/@std/toml/1.0.11/parse.d.ts +21 -0
  76. package/esm/deps/jsr.io/@std/toml/1.0.11/parse.d.ts.map +1 -0
  77. package/esm/deps/jsr.io/@std/toml/1.0.11/parse.js +25 -0
  78. package/esm/deps/jsr.io/@std/toml/1.0.11/stringify.d.ts +35 -0
  79. package/esm/deps/jsr.io/@std/toml/1.0.11/stringify.d.ts.map +1 -0
  80. package/esm/deps/jsr.io/@std/toml/1.0.11/stringify.js +283 -0
  81. package/esm/gambit/simulator-ui/dist/bundle.js +10647 -4637
  82. package/esm/gambit/simulator-ui/dist/bundle.js.map +4 -4
  83. package/esm/mod.d.ts +13 -3
  84. package/esm/mod.d.ts.map +1 -1
  85. package/esm/mod.js +8 -2
  86. package/esm/src/cli_utils.d.ts +1 -0
  87. package/esm/src/cli_utils.d.ts.map +1 -1
  88. package/esm/src/cli_utils.js +13 -1
  89. package/esm/src/default_runtime.d.ts +46 -0
  90. package/esm/src/default_runtime.d.ts.map +1 -0
  91. package/esm/src/default_runtime.js +415 -0
  92. package/esm/src/durable_streams.js +26 -1
  93. package/esm/src/model_matchers.d.ts +10 -0
  94. package/esm/src/model_matchers.d.ts.map +1 -0
  95. package/esm/src/model_matchers.js +26 -0
  96. package/esm/src/openai_compat.d.ts +12 -1
  97. package/esm/src/openai_compat.d.ts.map +1 -1
  98. package/esm/src/openai_compat.js +53 -1
  99. package/esm/src/project_config.d.ts +47 -0
  100. package/esm/src/project_config.d.ts.map +1 -0
  101. package/esm/src/project_config.js +134 -0
  102. package/esm/src/providers/codex.d.ts +37 -0
  103. package/esm/src/providers/codex.d.ts.map +1 -0
  104. package/esm/src/providers/codex.js +810 -0
  105. package/esm/src/providers/google.d.ts +3 -1
  106. package/esm/src/providers/google.d.ts.map +1 -1
  107. package/esm/src/providers/google.js +82 -6
  108. package/esm/src/providers/ollama.d.ts +3 -1
  109. package/esm/src/providers/ollama.d.ts.map +1 -1
  110. package/esm/src/providers/ollama.js +238 -15
  111. package/esm/src/providers/openrouter.d.ts +6 -2
  112. package/esm/src/providers/openrouter.d.ts.map +1 -1
  113. package/esm/src/providers/openrouter.js +260 -23
  114. package/esm/src/providers/router.d.ts +19 -0
  115. package/esm/src/providers/router.d.ts.map +1 -0
  116. package/esm/src/providers/router.js +93 -0
  117. package/esm/src/server.d.ts +9 -0
  118. package/esm/src/server.d.ts.map +1 -1
  119. package/esm/src/server.js +3186 -652
  120. package/esm/src/server_feedback_grading_routes.d.ts +32 -0
  121. package/esm/src/server_feedback_grading_routes.d.ts.map +1 -0
  122. package/esm/src/server_feedback_grading_routes.js +305 -0
  123. package/esm/src/server_helpers.d.ts +4 -0
  124. package/esm/src/server_helpers.d.ts.map +1 -0
  125. package/esm/src/server_helpers.js +46 -0
  126. package/esm/src/server_session_store.d.ts +87 -0
  127. package/esm/src/server_session_store.d.ts.map +1 -0
  128. package/esm/src/server_session_store.js +873 -0
  129. package/esm/src/server_types.d.ts +110 -0
  130. package/esm/src/server_types.d.ts.map +1 -0
  131. package/esm/src/server_types.js +1 -0
  132. package/esm/src/server_ui_routes.d.ts +33 -0
  133. package/esm/src/server_ui_routes.d.ts.map +1 -0
  134. package/esm/src/server_ui_routes.js +135 -0
  135. package/esm/src/session_artifacts.d.ts +22 -0
  136. package/esm/src/session_artifacts.d.ts.map +1 -0
  137. package/esm/src/session_artifacts.js +243 -0
  138. package/esm/src/trace.d.ts.map +1 -1
  139. package/esm/src/trace.js +6 -3
  140. package/esm/src/workspace.d.ts +19 -0
  141. package/esm/src/workspace.d.ts.map +1 -0
  142. package/esm/src/workspace.js +164 -0
  143. package/esm/src/workspace_contract.d.ts +76 -0
  144. package/esm/src/workspace_contract.d.ts.map +1 -0
  145. package/esm/src/workspace_contract.js +74 -0
  146. package/package.json +2 -2
  147. package/script/_dnt.polyfills.d.ts +17 -0
  148. package/script/_dnt.polyfills.d.ts.map +1 -1
  149. package/script/_dnt.polyfills.js +122 -0
  150. package/script/deps/jsr.io/@std/collections/1.1.5/deep_merge.d.ts +322 -0
  151. package/script/deps/jsr.io/@std/collections/1.1.5/deep_merge.d.ts.map +1 -0
  152. package/script/deps/jsr.io/@std/collections/1.1.5/deep_merge.js +108 -0
  153. package/script/deps/jsr.io/@std/fs/1.0.22/_create_walk_entry.d.ts +14 -0
  154. package/script/deps/jsr.io/@std/fs/1.0.22/_create_walk_entry.d.ts.map +1 -0
  155. package/script/deps/jsr.io/@std/fs/1.0.22/_create_walk_entry.js +71 -0
  156. package/script/deps/jsr.io/@std/fs/1.0.22/_get_file_info_type.d.ts +13 -0
  157. package/script/deps/jsr.io/@std/fs/1.0.22/_get_file_info_type.d.ts.map +1 -0
  158. package/script/deps/jsr.io/@std/fs/1.0.22/_get_file_info_type.js +21 -0
  159. package/script/deps/jsr.io/@std/fs/1.0.22/_is_same_path.d.ts +10 -0
  160. package/script/deps/jsr.io/@std/fs/1.0.22/_is_same_path.d.ts.map +1 -0
  161. package/script/deps/jsr.io/@std/fs/1.0.22/_is_same_path.js +20 -0
  162. package/script/deps/jsr.io/@std/fs/1.0.22/_is_subdir.d.ts +12 -0
  163. package/script/deps/jsr.io/@std/fs/1.0.22/_is_subdir.d.ts.map +1 -0
  164. package/script/deps/jsr.io/@std/fs/1.0.22/_is_subdir.js +28 -0
  165. package/script/deps/jsr.io/@std/fs/1.0.22/_to_path_string.d.ts +9 -0
  166. package/script/deps/jsr.io/@std/fs/1.0.22/_to_path_string.d.ts.map +1 -0
  167. package/script/deps/jsr.io/@std/fs/1.0.22/_to_path_string.js +16 -0
  168. package/script/deps/jsr.io/@std/fs/1.0.22/copy.d.ts +117 -0
  169. package/script/deps/jsr.io/@std/fs/1.0.22/copy.d.ts.map +1 -0
  170. package/script/deps/jsr.io/@std/fs/1.0.22/copy.js +350 -0
  171. package/script/deps/jsr.io/@std/fs/1.0.22/empty_dir.d.ts +48 -0
  172. package/script/deps/jsr.io/@std/fs/1.0.22/empty_dir.d.ts.map +1 -0
  173. package/script/deps/jsr.io/@std/fs/1.0.22/empty_dir.js +124 -0
  174. package/script/deps/jsr.io/@std/fs/1.0.22/ensure_dir.d.ts +49 -0
  175. package/script/deps/jsr.io/@std/fs/1.0.22/ensure_dir.d.ts.map +1 -0
  176. package/script/deps/jsr.io/@std/fs/1.0.22/ensure_dir.js +139 -0
  177. package/script/deps/jsr.io/@std/fs/1.0.22/ensure_file.d.ts +47 -0
  178. package/script/deps/jsr.io/@std/fs/1.0.22/ensure_file.d.ts.map +1 -0
  179. package/script/deps/jsr.io/@std/fs/1.0.22/ensure_file.js +127 -0
  180. package/script/deps/jsr.io/@std/fs/1.0.22/ensure_link.d.ts +49 -0
  181. package/script/deps/jsr.io/@std/fs/1.0.22/ensure_link.d.ts.map +1 -0
  182. package/script/deps/jsr.io/@std/fs/1.0.22/ensure_link.js +98 -0
  183. package/script/deps/jsr.io/@std/fs/1.0.22/ensure_symlink.d.ts +70 -0
  184. package/script/deps/jsr.io/@std/fs/1.0.22/ensure_symlink.d.ts.map +1 -0
  185. package/script/deps/jsr.io/@std/fs/1.0.22/ensure_symlink.js +193 -0
  186. package/script/deps/jsr.io/@std/fs/1.0.22/eol.d.ts +52 -0
  187. package/script/deps/jsr.io/@std/fs/1.0.22/eol.d.ts.map +1 -0
  188. package/script/deps/jsr.io/@std/fs/1.0.22/eol.js +105 -0
  189. package/script/deps/jsr.io/@std/fs/1.0.22/exists.d.ts +218 -0
  190. package/script/deps/jsr.io/@std/fs/1.0.22/exists.d.ts.map +1 -0
  191. package/script/deps/jsr.io/@std/fs/1.0.22/exists.js +308 -0
  192. package/script/deps/jsr.io/@std/fs/1.0.22/expand_glob.d.ts +267 -0
  193. package/script/deps/jsr.io/@std/fs/1.0.22/expand_glob.d.ts.map +1 -0
  194. package/script/deps/jsr.io/@std/fs/1.0.22/expand_glob.js +479 -0
  195. package/script/deps/jsr.io/@std/fs/1.0.22/mod.d.ts +29 -0
  196. package/script/deps/jsr.io/@std/fs/1.0.22/mod.d.ts.map +1 -0
  197. package/script/deps/jsr.io/@std/fs/1.0.22/mod.js +45 -0
  198. package/script/deps/jsr.io/@std/fs/1.0.22/move.d.ts +86 -0
  199. package/script/deps/jsr.io/@std/fs/1.0.22/move.d.ts.map +1 -0
  200. package/script/deps/jsr.io/@std/fs/1.0.22/move.js +179 -0
  201. package/script/deps/jsr.io/@std/fs/1.0.22/walk.d.ts +777 -0
  202. package/script/deps/jsr.io/@std/fs/1.0.22/walk.d.ts.map +1 -0
  203. package/script/deps/jsr.io/@std/fs/1.0.22/walk.js +883 -0
  204. package/script/deps/jsr.io/@std/json/1.0.2/types.d.ts +5 -0
  205. package/script/deps/jsr.io/@std/json/1.0.2/types.d.ts.map +1 -0
  206. package/script/deps/jsr.io/@std/json/1.0.2/types.js +4 -0
  207. package/script/deps/jsr.io/@std/jsonc/1.0.2/mod.d.ts +20 -0
  208. package/script/deps/jsr.io/@std/jsonc/1.0.2/mod.d.ts.map +1 -0
  209. package/script/deps/jsr.io/@std/jsonc/1.0.2/mod.js +37 -0
  210. package/script/deps/jsr.io/@std/jsonc/1.0.2/parse.d.ts +21 -0
  211. package/script/deps/jsr.io/@std/jsonc/1.0.2/parse.d.ts.map +1 -0
  212. package/script/deps/jsr.io/@std/jsonc/1.0.2/parse.js +323 -0
  213. package/script/deps/jsr.io/@std/toml/1.0.11/_parser.d.ts +93 -0
  214. package/script/deps/jsr.io/@std/toml/1.0.11/_parser.d.ts.map +1 -0
  215. package/script/deps/jsr.io/@std/toml/1.0.11/_parser.js +781 -0
  216. package/script/deps/jsr.io/@std/toml/1.0.11/mod.d.ts +109 -0
  217. package/script/deps/jsr.io/@std/toml/1.0.11/mod.d.ts.map +1 -0
  218. package/script/deps/jsr.io/@std/toml/1.0.11/mod.js +126 -0
  219. package/script/deps/jsr.io/@std/toml/1.0.11/parse.d.ts +21 -0
  220. package/script/deps/jsr.io/@std/toml/1.0.11/parse.d.ts.map +1 -0
  221. package/script/deps/jsr.io/@std/toml/1.0.11/parse.js +28 -0
  222. package/script/deps/jsr.io/@std/toml/1.0.11/stringify.d.ts +35 -0
  223. package/script/deps/jsr.io/@std/toml/1.0.11/stringify.d.ts.map +1 -0
  224. package/script/deps/jsr.io/@std/toml/1.0.11/stringify.js +286 -0
  225. package/script/gambit/simulator-ui/dist/bundle.js +10647 -4637
  226. package/script/gambit/simulator-ui/dist/bundle.js.map +4 -4
  227. package/script/mod.d.ts +13 -3
  228. package/script/mod.d.ts.map +1 -1
  229. package/script/mod.js +14 -5
  230. package/script/src/cli_utils.d.ts +1 -0
  231. package/script/src/cli_utils.d.ts.map +1 -1
  232. package/script/src/cli_utils.js +14 -1
  233. package/script/src/default_runtime.d.ts +46 -0
  234. package/script/src/default_runtime.d.ts.map +1 -0
  235. package/script/src/default_runtime.js +452 -0
  236. package/script/src/durable_streams.js +26 -1
  237. package/script/src/model_matchers.d.ts +10 -0
  238. package/script/src/model_matchers.d.ts.map +1 -0
  239. package/script/src/model_matchers.js +29 -0
  240. package/script/src/openai_compat.d.ts +12 -1
  241. package/script/src/openai_compat.d.ts.map +1 -1
  242. package/script/src/openai_compat.js +85 -0
  243. package/script/src/project_config.d.ts +47 -0
  244. package/script/src/project_config.d.ts.map +1 -0
  245. package/script/src/project_config.js +173 -0
  246. package/script/src/providers/codex.d.ts +37 -0
  247. package/script/src/providers/codex.d.ts.map +1 -0
  248. package/script/src/providers/codex.js +850 -0
  249. package/script/src/providers/google.d.ts +3 -1
  250. package/script/src/providers/google.d.ts.map +1 -1
  251. package/script/src/providers/google.js +82 -6
  252. package/script/src/providers/ollama.d.ts +3 -1
  253. package/script/src/providers/ollama.d.ts.map +1 -1
  254. package/script/src/providers/ollama.js +238 -15
  255. package/script/src/providers/openrouter.d.ts +6 -2
  256. package/script/src/providers/openrouter.d.ts.map +1 -1
  257. package/script/src/providers/openrouter.js +260 -23
  258. package/script/src/providers/router.d.ts +19 -0
  259. package/script/src/providers/router.d.ts.map +1 -0
  260. package/script/src/providers/router.js +96 -0
  261. package/script/src/server.d.ts +9 -0
  262. package/script/src/server.d.ts.map +1 -1
  263. package/script/src/server.js +3193 -659
  264. package/script/src/server_feedback_grading_routes.d.ts +32 -0
  265. package/script/src/server_feedback_grading_routes.d.ts.map +1 -0
  266. package/script/src/server_feedback_grading_routes.js +343 -0
  267. package/script/src/server_helpers.d.ts +4 -0
  268. package/script/src/server_helpers.d.ts.map +1 -0
  269. package/script/src/server_helpers.js +84 -0
  270. package/script/src/server_session_store.d.ts +87 -0
  271. package/script/src/server_session_store.d.ts.map +1 -0
  272. package/script/src/server_session_store.js +910 -0
  273. package/script/src/server_types.d.ts +110 -0
  274. package/script/src/server_types.d.ts.map +1 -0
  275. package/script/src/server_types.js +2 -0
  276. package/script/src/server_ui_routes.d.ts +33 -0
  277. package/script/src/server_ui_routes.d.ts.map +1 -0
  278. package/script/src/server_ui_routes.js +172 -0
  279. package/script/src/session_artifacts.d.ts +22 -0
  280. package/script/src/session_artifacts.d.ts.map +1 -0
  281. package/script/src/session_artifacts.js +279 -0
  282. package/script/src/trace.d.ts.map +1 -1
  283. package/script/src/trace.js +6 -3
  284. package/script/src/workspace.d.ts +19 -0
  285. package/script/src/workspace.d.ts.map +1 -0
  286. package/script/src/workspace.js +201 -0
  287. package/script/src/workspace_contract.d.ts +76 -0
  288. package/script/src/workspace_contract.d.ts.map +1 -0
  289. package/script/src/workspace_contract.js +82 -0
package/script/mod.d.ts CHANGED
@@ -26,12 +26,22 @@ 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. */
@@ -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,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"}
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/script/mod.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.startWebSocketSimulator = exports.createGoogleProvider = exports.createOllamaProvider = exports.createOpenRouterProvider = exports.renderDeck = exports.chatCompletionsWithDeck = exports.runDeck = exports.isGambitEndSignal = exports.defineDeck = exports.defineCard = void 0;
3
+ exports.startWebSocketSimulator = exports.createGoogleProvider = exports.createOllamaProvider = exports.createOpenRouterProvider = exports.renderDeck = exports.chatCompletionsWithDeck = exports.runDeckCore = exports.runDeck = exports.createDefaultedRuntime = exports.isRunCanceledError = exports.isGambitEndSignal = exports.defineDeck = exports.defineCard = void 0;
4
4
  /**
5
5
  * Gambit exports for authoring and running decks/cards with runtime helpers.
6
6
  *
@@ -16,15 +16,24 @@ Object.defineProperty(exports, "defineDeck", { enumerable: true, get: function (
16
16
  /** Check if a value is an explicit end-of-run signal. */
17
17
  var gambit_core_3 = require("@bolt-foundry/gambit-core");
18
18
  Object.defineProperty(exports, "isGambitEndSignal", { enumerable: true, get: function () { return gambit_core_3.isGambitEndSignal; } });
19
- /** Run a deck and return its execution result. */
19
+ /** Check whether an error represents runtime cancellation. */
20
20
  var gambit_core_4 = require("@bolt-foundry/gambit-core");
21
- Object.defineProperty(exports, "runDeck", { enumerable: true, get: function () { return gambit_core_4.runDeck; } });
21
+ Object.defineProperty(exports, "isRunCanceledError", { enumerable: true, get: function () { return gambit_core_4.isRunCanceledError; } });
22
+ /** Build a runtime with CLI-equivalent provider defaults and routing. */
23
+ var default_runtime_js_1 = require("./src/default_runtime.js");
24
+ Object.defineProperty(exports, "createDefaultedRuntime", { enumerable: true, get: function () { return default_runtime_js_1.createDefaultedRuntime; } });
25
+ /** Run a deck with default provider/model/runtime behavior. */
26
+ var default_runtime_js_2 = require("./src/default_runtime.js");
27
+ Object.defineProperty(exports, "runDeck", { enumerable: true, get: function () { return default_runtime_js_2.runDeck; } });
28
+ /** Run a deck directly through gambit-core without gambit defaults. */
29
+ var gambit_core_5 = require("@bolt-foundry/gambit-core");
30
+ Object.defineProperty(exports, "runDeckCore", { enumerable: true, get: function () { return gambit_core_5.runDeck; } });
22
31
  /** OpenAI Chat Completions compatibility helper for a deck. */
23
32
  var openai_compat_js_1 = require("./src/openai_compat.js");
24
33
  Object.defineProperty(exports, "chatCompletionsWithDeck", { enumerable: true, get: function () { return openai_compat_js_1.chatCompletionsWithDeck; } });
25
34
  /** Render a deck to a human-readable outline or debug view. */
26
- var gambit_core_5 = require("@bolt-foundry/gambit-core");
27
- Object.defineProperty(exports, "renderDeck", { enumerable: true, get: function () { return gambit_core_5.renderDeck; } });
35
+ var gambit_core_6 = require("@bolt-foundry/gambit-core");
36
+ Object.defineProperty(exports, "renderDeck", { enumerable: true, get: function () { return gambit_core_6.renderDeck; } });
28
37
  /** Provider factory for OpenRouter-backed model calls. */
29
38
  var openrouter_js_1 = require("./src/providers/openrouter.js");
30
39
  Object.defineProperty(exports, "createOpenRouterProvider", { enumerable: true, get: function () { return openrouter_js_1.createOpenRouterProvider; } });
@@ -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":"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,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,CAuB/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"}
@@ -36,6 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.parsePortValue = parsePortValue;
37
37
  exports.normalizeFlagList = normalizeFlagList;
38
38
  exports.slugifyDeckPath = slugifyDeckPath;
39
+ exports.resolveProjectRoot = resolveProjectRoot;
39
40
  exports.defaultSessionRoot = defaultSessionRoot;
40
41
  exports.defaultTestBotStatePath = defaultTestBotStatePath;
41
42
  exports.enrichStateMeta = enrichStateMeta;
@@ -89,12 +90,24 @@ function findProjectRoot(startDir) {
89
90
  }
90
91
  return undefined;
91
92
  }
93
+ function resolveProjectRoot(startDir) {
94
+ return findProjectRoot(startDir);
95
+ }
92
96
  function defaultSessionRoot(deckPath) {
93
97
  const resolvedDeckPath = path.resolve(deckPath);
98
+ const marker = `${path.SEPARATOR}.gambit${path.SEPARATOR}workspaces${path.SEPARATOR}`;
99
+ const markerIndex = resolvedDeckPath.lastIndexOf(marker);
100
+ if (markerIndex >= 0) {
101
+ const suffix = resolvedDeckPath.slice(markerIndex + marker.length);
102
+ const markerSegments = suffix.split(path.SEPARATOR).filter(Boolean);
103
+ if (markerSegments.length >= 2 && markerSegments[1] === "deck") {
104
+ return path.resolve(resolvedDeckPath.slice(0, markerIndex + marker.length));
105
+ }
106
+ }
94
107
  const deckDir = path.dirname(resolvedDeckPath);
95
108
  const projectRoot = findProjectRoot(deckDir);
96
109
  const baseDir = projectRoot ?? deckDir;
97
- return path.join(baseDir, ".gambit", "sessions");
110
+ return path.join(baseDir, ".gambit", "workspaces");
98
111
  }
99
112
  function defaultTestBotStatePath(deckPath) {
100
113
  const slug = slugifyDeckPath(deckPath);
@@ -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,452 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.createDefaultedRuntime = createDefaultedRuntime;
37
+ exports.runDeck = runDeck;
38
+ const dntShim = __importStar(require("../_dnt.shims.js"));
39
+ const gambit_core_1 = require("@bolt-foundry/gambit-core");
40
+ const model_matchers_js_1 = require("./model_matchers.js");
41
+ const session_artifacts_js_1 = require("./session_artifacts.js");
42
+ const project_config_js_1 = require("./project_config.js");
43
+ const codex_js_1 = require("./providers/codex.js");
44
+ const google_js_1 = require("./providers/google.js");
45
+ const ollama_js_1 = require("./providers/ollama.js");
46
+ const openrouter_js_1 = require("./providers/openrouter.js");
47
+ const router_js_1 = require("./providers/router.js");
48
+ const DEFAULT_OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1";
49
+ function mergeParams(aliasParams, baseParams) {
50
+ if (aliasParams && baseParams) {
51
+ return { ...aliasParams, ...baseParams };
52
+ }
53
+ return baseParams ?? aliasParams;
54
+ }
55
+ function parseFallbackProviderFromConfig(fallbackProviderRaw, logger) {
56
+ if (typeof fallbackProviderRaw !== "string") {
57
+ return undefined;
58
+ }
59
+ const normalized = fallbackProviderRaw.trim().toLowerCase();
60
+ if (normalized === "none") {
61
+ return null;
62
+ }
63
+ if (normalized === "codex") {
64
+ throw new Error('[gambit] providers.fallback "codex" is no longer supported. Use "codex-cli" or "none".');
65
+ }
66
+ if (normalized === "openrouter" || normalized === "ollama" ||
67
+ normalized === "google" || normalized === "codex-cli") {
68
+ return normalized;
69
+ }
70
+ if (normalized.length > 0) {
71
+ logger.warn(`[gambit] Unknown providers.fallback "${fallbackProviderRaw}" in gambit.toml; using default fallback.`);
72
+ }
73
+ return undefined;
74
+ }
75
+ function resolveConfiguredFallbackProvider(opts) {
76
+ if (opts.runtimeOverride !== undefined) {
77
+ return opts.runtimeOverride;
78
+ }
79
+ return parseFallbackProviderFromConfig(opts.projectConfig?.providers?.fallback, opts.logger);
80
+ }
81
+ function resolveDefaultResponsesMode() {
82
+ const chatFallback = dntShim.Deno.env.get("GAMBIT_CHAT_FALLBACK") === "1";
83
+ return !chatFallback && dntShim.Deno.env.get("GAMBIT_RESPONSES_MODE") !== "0";
84
+ }
85
+ function resolveSessionArtifactsConfig(opts) {
86
+ if (opts.runConfig === false)
87
+ return undefined;
88
+ if (!opts.runtimeConfig && !opts.runConfig)
89
+ return undefined;
90
+ const merged = {
91
+ ...(opts.runtimeConfig ?? {}),
92
+ ...(opts.runConfig ?? {}),
93
+ };
94
+ if (typeof merged.rootDir !== "string" || !merged.rootDir.trim()) {
95
+ throw new Error("sessionArtifacts.rootDir is required when persistence is enabled.");
96
+ }
97
+ return {
98
+ rootDir: merged.rootDir,
99
+ sessionId: merged.sessionId,
100
+ continueSession: merged.continueSession,
101
+ };
102
+ }
103
+ function buildDefaultModelProvider(opts) {
104
+ const openRouterApiKey = dntShim.Deno.env.get("OPENROUTER_API_KEY")?.trim();
105
+ const googleApiKey = (dntShim.Deno.env.get("GOOGLE_API_KEY") ??
106
+ dntShim.Deno.env.get("GEMINI_API_KEY"))?.trim();
107
+ const openRouterBaseURL = dntShim.Deno.env.get("OPENROUTER_BASE_URL") ??
108
+ DEFAULT_OPENROUTER_BASE_URL;
109
+ const ollamaBaseURL = dntShim.Deno.env.get("OLLAMA_BASE_URL") ?? undefined;
110
+ const googleBaseURL = dntShim.Deno.env.get("GOOGLE_BASE_URL") ??
111
+ dntShim.Deno.env.get("GEMINI_BASE_URL") ??
112
+ undefined;
113
+ const openRouterProvider = openRouterApiKey
114
+ ? (0, openrouter_js_1.createOpenRouterProvider)({
115
+ apiKey: openRouterApiKey,
116
+ baseURL: openRouterBaseURL ?? undefined,
117
+ enableResponses: opts.responsesMode &&
118
+ dntShim.Deno.env.get("GAMBIT_OPENROUTER_RESPONSES") !== "0",
119
+ })
120
+ : null;
121
+ const ollamaProvider = (0, ollama_js_1.createOllamaProvider)({
122
+ apiKey: dntShim.Deno.env.get("OLLAMA_API_KEY")?.trim() || undefined,
123
+ baseURL: ollamaBaseURL,
124
+ });
125
+ const googleProvider = googleApiKey
126
+ ? (0, google_js_1.createGoogleProvider)({
127
+ apiKey: googleApiKey,
128
+ baseURL: googleBaseURL,
129
+ })
130
+ : null;
131
+ const codexProvider = (0, codex_js_1.createCodexProvider)();
132
+ const providerRouter = (0, router_js_1.createProviderRouter)({
133
+ providers: {
134
+ openrouter: openRouterProvider,
135
+ ollama: ollamaProvider,
136
+ google: googleProvider,
137
+ "codex-cli": codexProvider,
138
+ },
139
+ defaultProvider: opts.configuredFallbackProvider,
140
+ fallbackToDefaultOnMissing: ["google"],
141
+ });
142
+ const providerMatchers = (0, model_matchers_js_1.createProviderMatchers)(opts.effectiveFallbackProvider);
143
+ const ollamaTagsCache = {
144
+ promise: null,
145
+ };
146
+ const getOllamaTags = async () => {
147
+ if (!ollamaTagsCache.promise) {
148
+ ollamaTagsCache.promise = (0, ollama_js_1.fetchOllamaTags)(ollamaBaseURL);
149
+ }
150
+ return await ollamaTagsCache.promise;
151
+ };
152
+ const providerCapabilities = [
153
+ {
154
+ name: "ollama",
155
+ matches: providerMatchers.matchesOllama,
156
+ isAvailable: async (model, capabilityOpts) => {
157
+ const trimmed = model.slice(ollama_js_1.OLLAMA_PREFIX.length);
158
+ if (!trimmed) {
159
+ return { available: false, reason: "missing Ollama model name" };
160
+ }
161
+ if (capabilityOpts.allowPull) {
162
+ try {
163
+ await (0, ollama_js_1.ensureOllamaModel)(trimmed, ollamaBaseURL);
164
+ return { available: true };
165
+ }
166
+ catch (err) {
167
+ return {
168
+ available: false,
169
+ reason: err instanceof Error ? err.message : String(err),
170
+ };
171
+ }
172
+ }
173
+ try {
174
+ const tags = await getOllamaTags();
175
+ if (tags.has(trimmed)) {
176
+ return { available: true };
177
+ }
178
+ return {
179
+ available: false,
180
+ reason: `Ollama model "${trimmed}" not installed`,
181
+ };
182
+ }
183
+ catch (err) {
184
+ return {
185
+ available: false,
186
+ reason: err instanceof Error ? err.message : String(err),
187
+ };
188
+ }
189
+ },
190
+ },
191
+ {
192
+ name: "google",
193
+ matches: providerMatchers.matchesGoogle,
194
+ isAvailable: (_model, _capabilityOpts) => Promise.resolve(googleApiKey
195
+ ? { available: true }
196
+ : (opts.effectiveFallbackProvider === "openrouter" &&
197
+ openRouterApiKey)
198
+ ? { available: true }
199
+ : {
200
+ available: false,
201
+ reason: "GOOGLE_API_KEY or GEMINI_API_KEY is not set",
202
+ }),
203
+ },
204
+ {
205
+ name: "openrouter",
206
+ matches: providerMatchers.matchesOpenRouter,
207
+ isAvailable: (_model, _capabilityOpts) => Promise.resolve(openRouterApiKey ? { available: true } : {
208
+ available: false,
209
+ reason: "OPENROUTER_API_KEY is not set",
210
+ }),
211
+ },
212
+ {
213
+ name: "codex-cli",
214
+ matches: providerMatchers.matchesCodex,
215
+ isAvailable: (model, _capabilityOpts) => {
216
+ if (model === "codex" || model.startsWith("codex/")) {
217
+ return Promise.resolve({
218
+ available: false,
219
+ reason: 'legacy codex prefix is unsupported; use "codex-cli/default" or "codex-cli/<model>"',
220
+ });
221
+ }
222
+ const stripped = model.startsWith(codex_js_1.CODEX_PREFIX)
223
+ ? model.slice(codex_js_1.CODEX_PREFIX.length)
224
+ : model;
225
+ if (!stripped.trim()) {
226
+ return Promise.resolve({
227
+ available: false,
228
+ reason: "missing Codex model name",
229
+ });
230
+ }
231
+ return Promise.resolve({ available: true });
232
+ },
233
+ },
234
+ ];
235
+ const warnedMissingAliases = new Set();
236
+ const expandModelCandidates = (model, params) => {
237
+ if (!model)
238
+ return { candidates: [], allowPull: false };
239
+ const baseParams = params;
240
+ const entries = Array.isArray(model) ? model : [model];
241
+ const allowPull = !Array.isArray(model);
242
+ const candidates = [];
243
+ for (const entry of entries) {
244
+ if (typeof entry !== "string" || !entry.trim())
245
+ continue;
246
+ const resolution = opts.modelAliasResolver(entry);
247
+ if (resolution.missingAlias && !warnedMissingAliases.has(entry)) {
248
+ opts.logger.warn(`[gambit] Model alias "${entry}" is not defined in gambit.toml; using literal value.`);
249
+ warnedMissingAliases.add(entry);
250
+ }
251
+ if (resolution.applied) {
252
+ const resolvedModel = resolution.model;
253
+ const mergedParams = mergeParams(resolution.params, baseParams);
254
+ if (Array.isArray(resolvedModel)) {
255
+ for (const candidate of resolvedModel) {
256
+ if (!candidate.trim())
257
+ continue;
258
+ candidates.push({
259
+ model: candidate,
260
+ params: mergedParams,
261
+ });
262
+ }
263
+ }
264
+ else if (resolvedModel) {
265
+ candidates.push({
266
+ model: resolvedModel,
267
+ params: mergedParams,
268
+ });
269
+ }
270
+ }
271
+ else {
272
+ candidates.push({
273
+ model: entry,
274
+ params: baseParams,
275
+ });
276
+ }
277
+ }
278
+ const allowPullForSingle = allowPull && candidates.length <= 1;
279
+ return { candidates, allowPull: allowPullForSingle };
280
+ };
281
+ const resolveModelSelection = async (model, params, deckPath) => {
282
+ const { candidates, allowPull } = expandModelCandidates(model, params);
283
+ if (candidates.length === 0) {
284
+ throw new Error(deckPath
285
+ ? `No model configured for deck ${deckPath}`
286
+ : "No model configured.");
287
+ }
288
+ const failures = [];
289
+ for (const candidate of candidates) {
290
+ const capability = providerCapabilities.find((entry) => entry.matches(candidate.model));
291
+ const availability = capability
292
+ ? await capability.isAvailable(candidate.model, { allowPull })
293
+ : {
294
+ available: false,
295
+ reason: "no provider registered for model",
296
+ };
297
+ if (availability.available) {
298
+ return {
299
+ model: candidate.model,
300
+ params: candidate.params,
301
+ };
302
+ }
303
+ const label = capability ? capability.name : "unknown";
304
+ const reason = availability.reason ? `: ${availability.reason}` : "";
305
+ failures.push(`${candidate.model} (${label}${reason})`);
306
+ }
307
+ const suffix = failures.length ? ` Tried: ${failures.join(", ")}.` : "";
308
+ throw new Error(deckPath
309
+ ? `No available model found for deck ${deckPath}.${suffix}`
310
+ : `No available model found.${suffix}`);
311
+ };
312
+ const shouldResolveModel = (model) => {
313
+ if (Array.isArray(model))
314
+ return true;
315
+ const resolution = opts.modelAliasResolver(model);
316
+ return Boolean(resolution.applied || resolution.missingAlias);
317
+ };
318
+ return {
319
+ resolveModel: async (input) => await resolveModelSelection(input.model, input.params, input.deckPath),
320
+ responses: async (input) => {
321
+ const applied = shouldResolveModel(input.request.model)
322
+ ? await resolveModelSelection(input.request.model, input.request.params, input.deckPath)
323
+ : { model: input.request.model, params: input.request.params };
324
+ const request = {
325
+ ...input.request,
326
+ model: applied.model ?? input.request.model,
327
+ params: applied.params,
328
+ };
329
+ if (typeof request.model !== "string" || !request.model) {
330
+ throw new Error("Model is required.");
331
+ }
332
+ const selection = providerRouter.resolve({ model: request.model });
333
+ const responses = selection.provider.responses;
334
+ if (!responses) {
335
+ throw new Error(`${selection.providerKey} provider does not support responses.`);
336
+ }
337
+ return await responses({
338
+ ...input,
339
+ request: {
340
+ ...request,
341
+ model: selection.model,
342
+ },
343
+ });
344
+ },
345
+ chat: async (input) => {
346
+ const applied = shouldResolveModel(input.model)
347
+ ? await resolveModelSelection(input.model, input.params, input.deckPath)
348
+ : { model: input.model, params: input.params };
349
+ const request = {
350
+ ...input,
351
+ model: applied.model ?? input.model,
352
+ params: applied.params,
353
+ };
354
+ if (typeof request.model !== "string" || !request.model) {
355
+ throw new Error("Model is required.");
356
+ }
357
+ const selection = providerRouter.resolve({ model: request.model });
358
+ return await selection.provider.chat({
359
+ ...request,
360
+ model: selection.model,
361
+ });
362
+ },
363
+ };
364
+ }
365
+ async function createDefaultedRuntime(opts = {}) {
366
+ const logger = opts.logger ?? console;
367
+ const projectConfig = opts.projectConfig === undefined
368
+ ? await (0, project_config_js_1.loadProjectConfig)(opts.configHint)
369
+ : opts.projectConfig;
370
+ const modelAliasResolver = (0, project_config_js_1.createModelAliasResolver)(projectConfig?.config);
371
+ const configuredFallbackProvider = resolveConfiguredFallbackProvider({
372
+ runtimeOverride: opts.fallbackProvider,
373
+ projectConfig: projectConfig?.config,
374
+ logger,
375
+ });
376
+ const effectiveFallbackProvider = configuredFallbackProvider === undefined
377
+ ? "openrouter"
378
+ : configuredFallbackProvider;
379
+ const responsesMode = opts.responsesMode ?? resolveDefaultResponsesMode();
380
+ const modelProvider = opts.modelProvider ??
381
+ buildDefaultModelProvider({
382
+ modelAliasResolver,
383
+ configuredFallbackProvider,
384
+ effectiveFallbackProvider,
385
+ responsesMode,
386
+ logger,
387
+ });
388
+ const defaultModel = opts.defaultModel;
389
+ const modelOverride = opts.modelOverride;
390
+ const runtimeSessionArtifacts = opts.sessionArtifacts;
391
+ const resolveRunOptions = (runOpts) => {
392
+ const { sessionArtifacts: _sessionArtifacts, ...coreRunOpts } = runOpts;
393
+ return {
394
+ ...coreRunOpts,
395
+ modelProvider: runOpts.modelProvider ?? modelProvider,
396
+ defaultModel: runOpts.defaultModel ?? defaultModel,
397
+ modelOverride: runOpts.modelOverride ?? modelOverride,
398
+ responsesMode: runOpts.responsesMode ?? responsesMode,
399
+ };
400
+ };
401
+ return {
402
+ projectConfig,
403
+ modelAliasResolver,
404
+ configuredFallbackProvider,
405
+ effectiveFallbackProvider,
406
+ modelProvider,
407
+ defaultModel,
408
+ modelOverride,
409
+ responsesMode,
410
+ sessionArtifacts: runtimeSessionArtifacts,
411
+ resolveRunOptions,
412
+ runDeck: async (runOpts) => {
413
+ const resolved = resolveRunOptions(runOpts);
414
+ const effectiveSessionArtifacts = resolveSessionArtifactsConfig({
415
+ runtimeConfig: runtimeSessionArtifacts,
416
+ runConfig: runOpts.sessionArtifacts,
417
+ });
418
+ if (!effectiveSessionArtifacts) {
419
+ return await (0, gambit_core_1.runDeck)(resolved);
420
+ }
421
+ const artifacts = (0, session_artifacts_js_1.withSessionArtifacts)({
422
+ config: effectiveSessionArtifacts,
423
+ trace: resolved.trace,
424
+ onStateUpdate: resolved.onStateUpdate,
425
+ state: resolved.state,
426
+ });
427
+ try {
428
+ return await (0, gambit_core_1.runDeck)({
429
+ ...resolved,
430
+ state: artifacts.state,
431
+ trace: artifacts.trace,
432
+ onStateUpdate: artifacts.onStateUpdate,
433
+ });
434
+ }
435
+ finally {
436
+ artifacts.finalize();
437
+ }
438
+ },
439
+ };
440
+ }
441
+ async function runDeck(opts) {
442
+ if (opts.runtime && opts.runtimeOptions) {
443
+ throw new Error("runDeck received both runtime and runtimeOptions. Pass only one.");
444
+ }
445
+ const runtime = opts.runtime ??
446
+ await createDefaultedRuntime({
447
+ ...opts.runtimeOptions,
448
+ configHint: opts.runtimeOptions?.configHint ?? opts.path,
449
+ });
450
+ const { runtime: _runtime, runtimeOptions: _runtimeOptions, ...runOpts } = opts;
451
+ return await runtime.runDeck(runOpts);
452
+ }
@@ -132,5 +132,30 @@ async function handleDurableStreamRequest(request) {
132
132
  });
133
133
  }
134
134
  function formatSseEvent(event) {
135
- return `id: ${event.offset}\ndata: ${JSON.stringify(event)}\n\n`;
135
+ const payload = normalizeSsePayload(event.data);
136
+ const type = payload.type;
137
+ return `id: ${event.offset}\nevent: ${type}\ndata: ${JSON.stringify(payload)}\n\n`;
138
+ }
139
+ function normalizeSsePayload(value) {
140
+ if (value && typeof value === "object" && !Array.isArray(value)) {
141
+ const record = value;
142
+ const rawType = typeof record.type === "string"
143
+ ? record.type.trim()
144
+ : "gambit.event";
145
+ const type = sanitizeSseEventType(rawType);
146
+ return {
147
+ ...record,
148
+ type,
149
+ };
150
+ }
151
+ return {
152
+ type: "gambit.event",
153
+ value,
154
+ };
155
+ }
156
+ function sanitizeSseEventType(value) {
157
+ if (!value)
158
+ return "gambit.event";
159
+ const normalized = value.replace(/[^A-Za-z0-9_.-]/g, "_");
160
+ return normalized.length > 0 ? normalized : "gambit.event";
136
161
  }