@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
@@ -0,0 +1,366 @@
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.logger = void 0;
37
+ exports.chatCompletionsWithDeck = chatCompletionsWithDeck;
38
+ const dntShim = __importStar(require("../_dnt.shims.js"));
39
+ const path = __importStar(require("../deps/jsr.io/@std/path/1.1.4/mod.js"));
40
+ const gambit_core_1 = require("@bolt-foundry/gambit-core");
41
+ exports.logger = console;
42
+ function randomId(prefix) {
43
+ const suffix = crypto.randomUUID().replace(/-/g, "").slice(0, 24);
44
+ return `${prefix}-${suffix}`;
45
+ }
46
+ function normalizeContent(content) {
47
+ if (content === null)
48
+ return null;
49
+ if (typeof content === "string")
50
+ return content;
51
+ if (!Array.isArray(content))
52
+ return String(content);
53
+ return content
54
+ .map((c) => (typeof c === "string" ? c : (c.text ?? "")))
55
+ .join("");
56
+ }
57
+ function normalizeMessages(input) {
58
+ return input.map((m) => ({
59
+ role: m.role,
60
+ content: normalizeContent(m.content),
61
+ name: m.name,
62
+ tool_call_id: m.tool_call_id,
63
+ tool_calls: m.tool_calls && m.tool_calls.length > 0
64
+ ? m.tool_calls
65
+ : undefined,
66
+ }));
67
+ }
68
+ function providerParamsFromRequest(req) {
69
+ const out = {};
70
+ if (req.temperature !== undefined)
71
+ out.temperature = req.temperature;
72
+ if (req.top_p !== undefined)
73
+ out.top_p = req.top_p;
74
+ if (req.frequency_penalty !== undefined) {
75
+ out.frequency_penalty = req.frequency_penalty;
76
+ }
77
+ if (req.presence_penalty !== undefined) {
78
+ out.presence_penalty = req.presence_penalty;
79
+ }
80
+ if (req.max_tokens !== undefined)
81
+ out.max_tokens = req.max_tokens;
82
+ return Object.keys(out).length ? out : undefined;
83
+ }
84
+ function mergeToolDefs(gambitTools, externalTools) {
85
+ if (!externalTools?.length)
86
+ return gambitTools;
87
+ return [...gambitTools, ...externalTools];
88
+ }
89
+ function toolName(tool) {
90
+ return tool.function?.name ?? "";
91
+ }
92
+ function resolveContextSchema(deck) {
93
+ return deck.contextSchema ?? deck.inputSchema;
94
+ }
95
+ function resolveResponseSchema(deck) {
96
+ return deck.responseSchema ?? deck.outputSchema;
97
+ }
98
+ function assertNoToolNameCollisions(args) {
99
+ if (!args.externalTools?.length)
100
+ return;
101
+ const gambit = new Set(args.gambitTools.map(toolName));
102
+ for (const t of args.externalTools) {
103
+ const name = toolName(t);
104
+ if (!name)
105
+ continue;
106
+ if (name.startsWith(gambit_core_1.RESERVED_TOOL_PREFIX)) {
107
+ throw new Error(`External tool name ${name} is reserved (prefix ${gambit_core_1.RESERVED_TOOL_PREFIX})`);
108
+ }
109
+ if (gambit.has(name)) {
110
+ throw new Error(`Tool name collision for ${name} between Gambit deck actions and external tools`);
111
+ }
112
+ }
113
+ }
114
+ async function buildGambitActionTools(deck) {
115
+ const tools = [];
116
+ const toolNameSet = new Set();
117
+ const actionPathByName = new Map();
118
+ for (const action of deck.actionDecks) {
119
+ const child = await (0, gambit_core_1.loadDeck)(action.path, deck.path);
120
+ const contextSchema = resolveContextSchema(child);
121
+ const responseSchema = resolveResponseSchema(child);
122
+ if (!contextSchema || !responseSchema) {
123
+ throw new Error(`Deck ${child.path} must declare contextSchema and responseSchema (non-root)`);
124
+ }
125
+ (0, gambit_core_1.assertZodSchema)(contextSchema, "contextSchema");
126
+ (0, gambit_core_1.assertZodSchema)(responseSchema, "responseSchema");
127
+ const params = (0, gambit_core_1.toJsonSchema)(contextSchema);
128
+ tools.push({
129
+ type: "function",
130
+ function: {
131
+ name: action.name,
132
+ description: action.description,
133
+ parameters: params,
134
+ },
135
+ });
136
+ toolNameSet.add(action.name);
137
+ actionPathByName.set(action.name, action.path);
138
+ }
139
+ return { tools, toolNameSet, actionPathByName };
140
+ }
141
+ function deckSystemPrompt(deck) {
142
+ const parts = [];
143
+ const prompt = deck.body ?? deck.prompt;
144
+ if (prompt)
145
+ parts.push(prompt.trim());
146
+ for (const card of deck.cards) {
147
+ if (card.body)
148
+ parts.push(card.body.trim());
149
+ }
150
+ return parts.join("\n\n").trim();
151
+ }
152
+ function shouldPrependDeckSystem(messages, systemPrompt) {
153
+ if (!systemPrompt)
154
+ return false;
155
+ if (!messages.length)
156
+ return true;
157
+ const hasExact = messages.some((m) => m.role === "system" && m.content === systemPrompt);
158
+ return !hasExact;
159
+ }
160
+ function warnIfSystemMismatch(args) {
161
+ if (!args.systemPrompt)
162
+ return;
163
+ const existing = args.provided.find((m) => m.role === "system");
164
+ if (!existing)
165
+ return;
166
+ if (existing.content === args.systemPrompt)
167
+ return;
168
+ exports.logger.warn(`[gambit] chatCompletionsWithDeck: request includes a system message that does not match the deck prompt (${args.deckPath})`);
169
+ }
170
+ function toolResultContent(result) {
171
+ if (typeof result === "string")
172
+ return result;
173
+ try {
174
+ return JSON.stringify(result);
175
+ }
176
+ catch {
177
+ return String(result);
178
+ }
179
+ }
180
+ function normalizeError(err) {
181
+ return { message: err instanceof Error ? err.message : String(err) };
182
+ }
183
+ async function chatCompletionsWithDeck(args) {
184
+ const executeDeckTools = args.executeDeckTools ?? true;
185
+ const guardrails = { ...gambit_core_1.DEFAULT_GUARDRAILS, ...args.guardrails };
186
+ const runId = randomId("run");
187
+ const deck = await (0, gambit_core_1.loadDeck)(args.deckPath);
188
+ const rootPermissions = (0, gambit_core_1.resolveEffectivePermissions)({
189
+ baseDir: path.dirname(deck.path),
190
+ parent: args.parentPermissions,
191
+ workspace: args.workspacePermissions
192
+ ? {
193
+ baseDir: args.workspacePermissionsBaseDir ?? path.dirname(deck.path),
194
+ permissions: args.workspacePermissions,
195
+ }
196
+ : undefined,
197
+ declaration: deck.permissions
198
+ ? {
199
+ baseDir: path.dirname(deck.path),
200
+ permissions: deck.permissions,
201
+ }
202
+ : undefined,
203
+ session: args.sessionPermissions
204
+ ? {
205
+ baseDir: args.sessionPermissionsBaseDir ?? dntShim.Deno.cwd(),
206
+ permissions: args.sessionPermissions,
207
+ }
208
+ : undefined,
209
+ });
210
+ args.trace?.({
211
+ type: "openai_compat.permissions",
212
+ permissions: rootPermissions.trace,
213
+ });
214
+ const systemPrompt = deckSystemPrompt(deck);
215
+ const providedMessages = normalizeMessages(args.request.messages);
216
+ const messages = [];
217
+ warnIfSystemMismatch({
218
+ provided: providedMessages,
219
+ systemPrompt,
220
+ deckPath: deck.path,
221
+ });
222
+ if (shouldPrependDeckSystem(providedMessages, systemPrompt)) {
223
+ messages.push({ role: "system", content: systemPrompt });
224
+ }
225
+ messages.push(...providedMessages);
226
+ const gambit = await buildGambitActionTools(deck);
227
+ assertNoToolNameCollisions({
228
+ gambitTools: gambit.tools,
229
+ externalTools: args.request.tools,
230
+ });
231
+ const tools = mergeToolDefs(gambit.tools, args.request.tools);
232
+ const start = performance.now();
233
+ let passes = 0;
234
+ while (passes < guardrails.maxPasses) {
235
+ passes++;
236
+ if (performance.now() - start > guardrails.timeoutMs) {
237
+ throw new Error("Timeout exceeded");
238
+ }
239
+ const model = args.request.model ?? args.defaultModel ??
240
+ (() => {
241
+ throw new Error("No model provided");
242
+ })();
243
+ const result = await args.modelProvider.chat({
244
+ model,
245
+ messages,
246
+ tools: tools.length ? tools : undefined,
247
+ stream: Boolean(args.request.stream),
248
+ deckPath: deck.path,
249
+ onStreamText: args.onStreamText,
250
+ params: providerParamsFromRequest(args.request),
251
+ });
252
+ messages.push(result.message);
253
+ if (result.toolCalls && result.toolCalls.length > 0) {
254
+ const gambitCalls = result.toolCalls.filter((c) => gambit.toolNameSet.has(c.name));
255
+ const externalCalls = result.toolCalls.filter((c) => !gambit.toolNameSet.has(c.name));
256
+ if (!executeDeckTools || externalCalls.length > 0) {
257
+ return {
258
+ id: randomId("chatcmpl"),
259
+ object: "chat.completion",
260
+ created: Math.floor(Date.now() / 1000),
261
+ model,
262
+ choices: [{
263
+ index: 0,
264
+ message: result.message,
265
+ finish_reason: "tool_calls",
266
+ logprobs: null,
267
+ }],
268
+ usage: result.usage
269
+ ? {
270
+ prompt_tokens: result.usage.promptTokens,
271
+ completion_tokens: result.usage.completionTokens,
272
+ total_tokens: result.usage.totalTokens,
273
+ }
274
+ : undefined,
275
+ gambit: { deckPath: deck.path, messages, runId },
276
+ };
277
+ }
278
+ // Execute only deck-defined tool calls.
279
+ for (const call of gambitCalls) {
280
+ const actionPath = gambit.actionPathByName.get(call.name);
281
+ if (!actionPath)
282
+ continue;
283
+ try {
284
+ const actionRef = deck.actionDecks.find((entry) => entry.name === call.name);
285
+ const actionPermissions = (0, gambit_core_1.resolveEffectivePermissions)({
286
+ baseDir: path.dirname(deck.path),
287
+ parent: rootPermissions.effective,
288
+ reference: actionRef?.permissions
289
+ ? {
290
+ baseDir: path.dirname(deck.path),
291
+ permissions: actionRef.permissions,
292
+ }
293
+ : undefined,
294
+ });
295
+ args.trace?.({
296
+ type: "openai_compat.action.permissions",
297
+ permissions: actionPermissions.trace,
298
+ });
299
+ const childResult = await (0, gambit_core_1.runDeck)({
300
+ path: actionPath,
301
+ input: call.args,
302
+ modelProvider: args.modelProvider,
303
+ isRoot: false,
304
+ guardrails,
305
+ depth: 1,
306
+ parentActionCallId: call.id,
307
+ runId,
308
+ defaultModel: model,
309
+ modelOverride: undefined,
310
+ trace: undefined,
311
+ stream: Boolean(args.request.stream),
312
+ onStreamText: args.onStreamText,
313
+ inputProvided: true,
314
+ parentPermissions: rootPermissions.effective,
315
+ referencePermissions: actionRef?.permissions,
316
+ referencePermissionsBaseDir: path.dirname(deck.path),
317
+ workspacePermissions: args.workspacePermissions,
318
+ workspacePermissionsBaseDir: args.workspacePermissionsBaseDir,
319
+ sessionPermissions: args.sessionPermissions,
320
+ sessionPermissionsBaseDir: args.sessionPermissionsBaseDir,
321
+ workerSandbox: args.workerSandbox,
322
+ });
323
+ messages.push({
324
+ role: "tool",
325
+ name: call.name,
326
+ tool_call_id: call.id,
327
+ content: toolResultContent(childResult),
328
+ });
329
+ }
330
+ catch (err) {
331
+ messages.push({
332
+ role: "tool",
333
+ name: call.name,
334
+ tool_call_id: call.id,
335
+ content: JSON.stringify({ error: normalizeError(err) }),
336
+ });
337
+ }
338
+ }
339
+ continue;
340
+ }
341
+ if (result.finishReason === "tool_calls") {
342
+ throw new Error("Model requested tool_calls but provided none");
343
+ }
344
+ return {
345
+ id: randomId("chatcmpl"),
346
+ object: "chat.completion",
347
+ created: Math.floor(Date.now() / 1000),
348
+ model,
349
+ choices: [{
350
+ index: 0,
351
+ message: result.message,
352
+ finish_reason: result.finishReason,
353
+ logprobs: null,
354
+ }],
355
+ usage: result.usage
356
+ ? {
357
+ prompt_tokens: result.usage.promptTokens,
358
+ completion_tokens: result.usage.completionTokens,
359
+ total_tokens: result.usage.totalTokens,
360
+ }
361
+ : undefined,
362
+ gambit: { deckPath: deck.path, messages, runId },
363
+ };
364
+ }
365
+ throw new Error("Max passes exceeded without completing");
366
+ }
@@ -0,0 +1,47 @@
1
+ import type { PermissionDeclarationInput } from "@bolt-foundry/gambit-core";
2
+ export type WorkspaceConfig = {
3
+ decks?: string;
4
+ actions?: string;
5
+ graders?: string;
6
+ tests?: string;
7
+ schemas?: string;
8
+ permissions?: PermissionDeclarationInput;
9
+ };
10
+ export type ModelAliasConfig = {
11
+ model?: string | Array<string>;
12
+ description?: string;
13
+ params?: Record<string, unknown>;
14
+ };
15
+ export type GambitConfig = {
16
+ workspace?: WorkspaceConfig;
17
+ execution?: {
18
+ workerSandbox?: boolean;
19
+ worker_sandbox?: boolean;
20
+ legacyExec?: boolean;
21
+ legacy_exec?: boolean;
22
+ };
23
+ models?: {
24
+ aliases?: Record<string, ModelAliasConfig>;
25
+ };
26
+ providers?: {
27
+ fallback?: string;
28
+ };
29
+ };
30
+ export type LoadedProjectConfig = {
31
+ root: string;
32
+ path: string;
33
+ config: GambitConfig;
34
+ };
35
+ export declare function loadProjectConfig(startPath?: string): Promise<LoadedProjectConfig | null>;
36
+ export type ModelAliasResolution = {
37
+ model?: string | Array<string>;
38
+ params?: Record<string, unknown>;
39
+ alias?: string;
40
+ applied: boolean;
41
+ missingAlias?: boolean;
42
+ };
43
+ export type ModelAliasResolver = (model?: string) => ModelAliasResolution;
44
+ export declare function createModelAliasResolver(config?: GambitConfig | null): ModelAliasResolver;
45
+ export declare function resolveWorkspacePermissions(config?: GambitConfig | null): PermissionDeclarationInput | undefined;
46
+ export declare function resolveWorkerSandboxSetting(config?: GambitConfig | null): boolean | undefined;
47
+ //# sourceMappingURL=project_config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project_config.d.ts","sourceRoot":"","sources":["../../src/src/project_config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,0BAA0B,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,SAAS,CAAC,EAAE;QACV,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;KAC5C,CAAC;IACF,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAsCF,wBAAsB,iBAAiB,CACrC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAiBrC;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,oBAAoB,CAAC;AAE1E,wBAAgB,wBAAwB,CACtC,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,GAC3B,kBAAkB,CA8CpB;AAED,wBAAgB,2BAA2B,CACzC,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,GAC3B,0BAA0B,GAAG,SAAS,CAIxC;AAOD,wBAAgB,2BAA2B,CACzC,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,GAC3B,OAAO,GAAG,SAAS,CAsBrB"}
@@ -0,0 +1,173 @@
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.loadProjectConfig = loadProjectConfig;
37
+ exports.createModelAliasResolver = createModelAliasResolver;
38
+ exports.resolveWorkspacePermissions = resolveWorkspacePermissions;
39
+ exports.resolveWorkerSandboxSetting = resolveWorkerSandboxSetting;
40
+ const dntShim = __importStar(require("../_dnt.shims.js"));
41
+ const mod_js_1 = require("../deps/jsr.io/@std/toml/1.0.11/mod.js");
42
+ const path = __importStar(require("../deps/jsr.io/@std/path/1.1.4/mod.js"));
43
+ const CONFIG_FILENAME = "gambit.toml";
44
+ const configCache = new Map();
45
+ function isPlainObject(value) {
46
+ return Boolean(value && typeof value === "object" && !Array.isArray(value));
47
+ }
48
+ function resolveStartDir(target) {
49
+ if (!target)
50
+ return dntShim.Deno.cwd();
51
+ const resolved = path.resolve(target);
52
+ try {
53
+ const info = dntShim.Deno.statSync(resolved);
54
+ if (info.isDirectory)
55
+ return resolved;
56
+ return path.dirname(resolved);
57
+ }
58
+ catch {
59
+ return path.dirname(resolved);
60
+ }
61
+ }
62
+ function findConfigPath(startDir) {
63
+ let current = startDir;
64
+ while (true) {
65
+ const candidate = path.join(current, CONFIG_FILENAME);
66
+ try {
67
+ const info = dntShim.Deno.statSync(candidate);
68
+ if (info.isFile)
69
+ return candidate;
70
+ }
71
+ catch {
72
+ // ignore and continue walking up the tree
73
+ }
74
+ const parent = path.dirname(current);
75
+ if (parent === current)
76
+ break;
77
+ current = parent;
78
+ }
79
+ return null;
80
+ }
81
+ async function loadProjectConfig(startPath) {
82
+ const startDir = resolveStartDir(startPath);
83
+ const configPath = findConfigPath(startDir);
84
+ if (!configPath)
85
+ return null;
86
+ const cached = configCache.get(configPath);
87
+ if (cached !== undefined) {
88
+ return cached;
89
+ }
90
+ const text = await dntShim.Deno.readTextFile(configPath);
91
+ const parsed = (0, mod_js_1.parse)(text);
92
+ const loaded = {
93
+ root: path.dirname(configPath),
94
+ path: configPath,
95
+ config: parsed ?? {},
96
+ };
97
+ configCache.set(configPath, loaded);
98
+ return loaded;
99
+ }
100
+ function createModelAliasResolver(config) {
101
+ const resolved = new Map();
102
+ const aliases = config?.models?.aliases;
103
+ if (isPlainObject(aliases)) {
104
+ for (const [name, raw] of Object.entries(aliases)) {
105
+ if (!isPlainObject(raw))
106
+ continue;
107
+ let model;
108
+ if (typeof raw.model === "string") {
109
+ const trimmed = raw.model.trim();
110
+ if (trimmed)
111
+ model = trimmed;
112
+ }
113
+ else if (Array.isArray(raw.model)) {
114
+ const entries = raw.model
115
+ .map((entry) => (typeof entry === "string" ? entry.trim() : ""))
116
+ .filter(Boolean);
117
+ if (entries.length > 0)
118
+ model = entries;
119
+ }
120
+ if (!model)
121
+ continue;
122
+ const params = isPlainObject(raw.params)
123
+ ? structuredClone(raw.params)
124
+ : undefined;
125
+ resolved.set(name, { model, params });
126
+ }
127
+ }
128
+ const hasAliases = resolved.size > 0;
129
+ return (model) => {
130
+ if (!model) {
131
+ return { model, applied: false };
132
+ }
133
+ const entry = resolved.get(model);
134
+ if (entry) {
135
+ return {
136
+ model: entry.model,
137
+ params: entry.params ? structuredClone(entry.params) : undefined,
138
+ alias: model,
139
+ applied: true,
140
+ };
141
+ }
142
+ const missingAlias = hasAliases && !model.includes("/");
143
+ return { model, applied: false, missingAlias };
144
+ };
145
+ }
146
+ function resolveWorkspacePermissions(config) {
147
+ const raw = config?.workspace?.permissions;
148
+ if (!isPlainObject(raw))
149
+ return undefined;
150
+ return raw;
151
+ }
152
+ function resolveBooleanField(value) {
153
+ if (typeof value === "boolean")
154
+ return value;
155
+ return undefined;
156
+ }
157
+ function resolveWorkerSandboxSetting(config) {
158
+ const execution = config?.execution;
159
+ if (!isPlainObject(execution))
160
+ return undefined;
161
+ const workerSandbox = resolveBooleanField(execution.workerSandbox ?? execution.worker_sandbox);
162
+ const legacyExec = resolveBooleanField(execution.legacyExec ?? execution.legacy_exec);
163
+ if (workerSandbox !== undefined && legacyExec !== undefined) {
164
+ if (workerSandbox === legacyExec) {
165
+ throw new Error("gambit.toml execution config is conflicting: worker_sandbox and legacy_exec must be opposites when both are set.");
166
+ }
167
+ }
168
+ if (workerSandbox !== undefined)
169
+ return workerSandbox;
170
+ if (legacyExec !== undefined)
171
+ return !legacyExec;
172
+ return undefined;
173
+ }
@@ -0,0 +1,37 @@
1
+ import type { JSONValue, ModelMessage, ModelProvider, SavedState } from "@bolt-foundry/gambit-core";
2
+ export declare const CODEX_PREFIX = "codex-cli/";
3
+ type CommandOutput = {
4
+ success: boolean;
5
+ code: number;
6
+ stdout: Uint8Array;
7
+ stderr: Uint8Array;
8
+ };
9
+ type CommandRunner = (input: {
10
+ args: Array<string>;
11
+ cwd: string;
12
+ signal?: AbortSignal;
13
+ onStdoutLine?: (line: string) => void;
14
+ }) => Promise<CommandOutput>;
15
+ export declare function createCodexProvider(opts?: {
16
+ runCommand?: CommandRunner;
17
+ }): ModelProvider;
18
+ export declare function parseCodexArgsForTest(input: {
19
+ model: string;
20
+ state?: SavedState;
21
+ messages: Array<ModelMessage>;
22
+ params?: Record<string, unknown>;
23
+ cwd?: string;
24
+ deckPath?: string;
25
+ }): Array<string>;
26
+ export declare function parseCodexStdoutForTest(stdout: string): {
27
+ threadId?: string;
28
+ assistantText: string;
29
+ usage?: {
30
+ promptTokens: number;
31
+ completionTokens: number;
32
+ totalTokens: number;
33
+ };
34
+ };
35
+ export declare function safeJsonForTest(text: string): Record<string, JSONValue>;
36
+ export {};
37
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/src/providers/codex.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,SAAS,EACT,YAAY,EACZ,aAAa,EAIb,UAAU,EACX,MAAM,2BAA2B,CAAC;AAEnC,eAAO,MAAM,YAAY,eAAe,CAAC;AAiCzC,KAAK,aAAa,GAAG;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE;IAC3B,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AA0oB7B,wBAAgB,mBAAmB,CAAC,IAAI,CAAC,EAAE;IACzC,UAAU,CAAC,EAAE,aAAa,CAAC;CAC5B,GAAG,aAAa,CAmNhB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,KAAK,CAAC,MAAM,CAAC,CA2BhB;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,CAEA;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAEvE"}