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

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 +38 -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 +10639 -4629
  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 +10639 -4629
  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/CHANGELOG.md CHANGED
@@ -1,14 +1,50 @@
1
1
  +++
2
2
  [release]
3
- since = "849762245925cce325c04da1d604088370ec3723"
3
+ since = "0fdcdf8641dccac78e6f3b0fc5916ce7acbd6de9"
4
4
  +++
5
5
 
6
6
  # Changelog
7
7
 
8
- ## Unreleased (v0.8.4)
8
+ ## Unreleased (v0.8.5)
9
9
 
10
10
  - TBD
11
11
 
12
+ ## v0.8.5-rc.5
13
+
14
+ - TBD
15
+
16
+ ## v0.8.5-rc.4
17
+
18
+ - chore(infra): run `deno task build_npm` for gambit during `bft precommit`
19
+ - fix(gambit): ignore dnt TS2345 diagnostics from vendored `@std/fs` and
20
+ `@std/toml` npm-compat sources
21
+
22
+ ## v0.8.5-rc.3
23
+
24
+ - fix(gambit-release): support nested core path and cut 0.8.5-rc.2
25
+ - refactor(gambit-core): remove built-in exec tool from runtime
26
+ - fix(gambit-core): partition worker sandbox by runtime host
27
+ - test(gambit-core): add unsupported worker sandbox coverage
28
+ - docs(gambit-core): document worker sandbox host contract
29
+ - ci(gambit-core): gate npm compatibility in core CI
30
+
31
+ ## v0.8.5-rc.2
32
+
33
+ - TBD
34
+
35
+ ## v0.8.5-rc.1
36
+
37
+ - feat(gambit): remove `gambit init`; onboarding now routes through
38
+ `gambit serve`
39
+ - feat(gambit): add `createDefaultedRuntime` and defaulted `runDeck` wrapper
40
+ with CLI-equivalent provider/model routing for library callers
41
+ - refactor(gambit): route CLI runtime/provider setup through shared
42
+ `default_runtime` construction path
43
+ - feat(demo-runner): migrate demo test-deck prompt generation to Gambit default
44
+ runtime wrapper (no hardwired OpenRouter provider)
45
+ - docs(gambit): add migration guidance for `runDeck` wrapper and `runDeckCore`
46
+ replacement mapping
47
+
12
48
  ## v0.8.3
13
49
 
14
50
  - fix(gambit): include CLI docs/reference files in binary builds
package/README.md CHANGED
@@ -22,15 +22,14 @@ npx @bolt-foundry/gambit demo
22
22
  Downloads example files (hello decks plus the `examples/` gallery) and sets
23
23
  environment variables.
24
24
 
25
- To scaffold a starter project that you can customize, run:
25
+ To start onboarding with the simulator, run:
26
26
 
27
27
  ```
28
- npx @bolt-foundry/gambit init my-project
28
+ npx @bolt-foundry/gambit serve gambit/hello.deck.md
29
+ open http://localhost:8000/debug
29
30
  ```
30
31
 
31
- This creates a structured skeleton (`decks/`, `actions/`, `graders/`, `tests/`,
32
- `schemas/`, `.gambit/`) with README guides so you can start authoring your own
33
- workflows immediately.
32
+ Use the Build tab to draft your own workspace decks and scenarios.
34
33
 
35
34
  Run an example in the terminal (`repl`):
36
35
 
@@ -100,10 +99,10 @@ Drop into a REPL (streams by default):
100
99
  npx @bolt-foundry/gambit repl <deck>
101
100
  ```
102
101
 
103
- Run a persona against a root deck (test bot):
102
+ Run a persona against a root deck (scenario):
104
103
 
105
104
  ```
106
- npx @bolt-foundry/gambit test-bot <root-deck> --test-deck <persona-deck>
105
+ npx @bolt-foundry/gambit scenario <root-deck> --test-deck <persona-deck>
107
106
  ```
108
107
 
109
108
  Grade a saved session:
@@ -124,6 +123,23 @@ Tracing and state: 
124
123
  `--verbose` to print events\
125
124
  `--state <file>` to persist a session.
126
125
 
126
+ ### Worker sandbox defaults
127
+
128
+ - Deck-executing CLI surfaces default to worker sandbox execution.
129
+ - Use `--no-worker-sandbox` (or `--legacy-exec`) to force legacy in-process
130
+ execution.
131
+ - `--worker-sandbox` explicitly forces worker execution on.
132
+ - `--sandbox` / `--no-sandbox` are deprecated aliases.
133
+ - `gambit.toml` equivalent:
134
+ ```toml
135
+ [execution]
136
+ worker_sandbox = false # same as --no-worker-sandbox
137
+ # legacy_exec = true # equivalent rollback toggle
138
+ ```
139
+
140
+ The npm launcher (`npx @bolt-foundry/gambit ...`) runs the Gambit CLI binary for
141
+ your platform, so these defaults and flags apply there as well.
142
+
127
143
  ## Using the Simulator
128
144
 
129
145
  The simulator is the local Debug UI that streams runs and renders traces.
@@ -173,6 +189,59 @@ Define `contextSchema`/`responseSchema` with Zod to validate IO, and implement\
173
189
  `ctx.spawnAndWait({ path, input })`. Emit structured trace events with\
174
190
  `ctx.log(...)`.
175
191
 
192
+ ### Runtime defaults for programmatic `runDeck`
193
+
194
+ `runDeck` from `@bolt-foundry/gambit` now uses CLI-equivalent provider/model
195
+ defaults (alias expansion, provider routing, fallback behavior).
196
+
197
+ Before (direct-provider setup in each caller):
198
+
199
+ ```ts
200
+ import { createOpenRouterProvider, runDeck } from "jsr:@bolt-foundry/gambit";
201
+
202
+ const provider = createOpenRouterProvider({
203
+ apiKey: Deno.env.get("OPENROUTER_API_KEY")!,
204
+ });
205
+ await runDeck({
206
+ path: "./root.deck.md",
207
+ input: { message: "hi" },
208
+ modelProvider: provider,
209
+ });
210
+ ```
211
+
212
+ After (defaulted wrapper):
213
+
214
+ ```ts
215
+ import { runDeck } from "jsr:@bolt-foundry/gambit";
216
+
217
+ await runDeck({
218
+ path: "./root.deck.md",
219
+ input: { message: "hi" },
220
+ });
221
+ ```
222
+
223
+ Per-runtime override (shared runtime object):
224
+
225
+ ```ts
226
+ import { createDefaultedRuntime, runDeck } from "jsr:@bolt-foundry/gambit";
227
+
228
+ const runtime = await createDefaultedRuntime({
229
+ fallbackProvider: "codex-cli",
230
+ });
231
+
232
+ await runDeck({
233
+ runtime,
234
+ path: "./root.deck.md",
235
+ input: { message: "hi" },
236
+ });
237
+ ```
238
+
239
+ Replacement mapping:
240
+
241
+ - Legacy direct core passthrough export: `runDeck` -> `runDeckCore`
242
+ - Defaulted wrapper export: `runDeck`
243
+ - Runtime builder: `createDefaultedRuntime`
244
+
176
245
  ---
177
246
 
178
247
  ## Author your first deck
@@ -226,7 +295,7 @@ npx @bolt-foundry/gambit run ./echo.deck.ts --context '{"text":"ping"}'
226
295
  +++
227
296
  label = "agent_with_time"
228
297
  modelParams = { model = "openai/gpt-4o-mini", temperature = 0 }
229
- [[actionDecks]]
298
+ [[actions]]
230
299
  name = "get_time"
231
300
  path = "./get_time.deck.ts"
232
301
  description = "Return the current ISO timestamp."
@@ -271,8 +340,8 @@ npx @bolt-foundry/gambit serve ./examples/respond_flow/decks/root.deck.ts --port
271
340
  Then:
272
341
 
273
342
  1. Open `http://localhost:8000/test`, pick the **Escalation persona**, and run
274
- it. Leave the “Use test deck input for init” toggle on to see persona data
275
- seed the init form automatically.
343
+ it. Leave the “Use scenario deck input for init” toggle on to see persona
344
+ data seed the init form automatically.
276
345
  2. Switch to the Debug tab to inspect the session—the child deck emits a
277
346
  `gambit_respond` payload that now shows up as a structured assistant turn.
278
347
  3. Head to the Calibrate tab and run the **Respond payload grader** to exercise
@@ -289,12 +358,6 @@ export OPENROUTER_API_KEY=...
289
358
  deno run -A jsr:@bolt-foundry/gambit/cli demo
290
359
  ```
291
360
 
292
- Starter project:
293
-
294
- ```
295
- deno run -A jsr:@bolt-foundry/gambit/cli init my-project
296
- ```
297
-
298
361
  Run a deck:
299
362
 
300
363
  ```
@@ -97,5 +97,22 @@ interface ImportMetaPonyfill extends ImportMetaPonyfillCommonjs, ImportMetaPonyf
97
97
  export declare let import_meta_ponyfill_commonjs: ImportMetaPonyfillCommonjs;
98
98
  export declare let import_meta_ponyfill_esmodule: ImportMetaPonyfillEsmodule;
99
99
  export declare let import_meta_ponyfill: ImportMetaPonyfill;
100
+ declare global {
101
+ interface ArrayConstructor {
102
+ fromAsync<T>(iterableOrArrayLike: AsyncIterable<T> | Iterable<T | Promise<T>> | ArrayLike<T | Promise<T>>): Promise<T[]>;
103
+ fromAsync<T, U>(iterableOrArrayLike: AsyncIterable<T> | Iterable<T> | ArrayLike<T>, mapFn: (value: Awaited<T>) => U, thisArg?: any): Promise<Awaited<U>[]>;
104
+ }
105
+ }
106
+ export {};
107
+ declare global {
108
+ interface Object {
109
+ /**
110
+ * Determines whether an object has a property with the specified name.
111
+ * @param o An object.
112
+ * @param v A property name.
113
+ */
114
+ hasOwn(o: object, v: PropertyKey): boolean;
115
+ }
116
+ }
100
117
  export {};
101
118
  //# sourceMappingURL=_dnt.polyfills.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"_dnt.polyfills.d.ts","sourceRoot":"","sources":["../src/_dnt.polyfills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAgC,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAGlE,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,UAAU;QAClB;;;;;;;;;;;;;;WAcG;QACH,GAAG,EAAE,MAAM,CAAC;QACZ;;;;;;;;;;;;WAYG;QACH,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,GAAG,MAAM,CAAC;QACtE;;;;;;;;WAQG;QACH,IAAI,EAAE,OAAO,CAAC;QAEd;;;;;;;;;;;;WAYG;QACH,QAAQ,EAAE,MAAM,CAAC;QAEjB;;;;;;;;;;;;WAYG;QACH,OAAO,EAAE,MAAM,CAAC;KACjB;CACF;AAED,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,KAAK,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;AACnD,UAAU,0BAA0B;IAClC,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;CACxD;AACD,UAAU,0BAA0B;IAClC,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC;CACtC;AACD,UAAU,kBACR,SAAQ,0BAA0B,EAAE,0BAA0B;CAC/D;AAiBD,eAAO,IAAI,6BAA6B,EA2BnC,0BAA0B,CAAC;AAMhC,eAAO,IAAI,6BAA6B,EA4DnC,0BAA0B,CAAC;AAMhC,eAAO,IAAI,oBAAoB,EAoB1B,kBAAkB,CAAC"}
1
+ {"version":3,"file":"_dnt.polyfills.d.ts","sourceRoot":"","sources":["../src/_dnt.polyfills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAgC,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAGlE,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,UAAU;QAClB;;;;;;;;;;;;;;WAcG;QACH,GAAG,EAAE,MAAM,CAAC;QACZ;;;;;;;;;;;;WAYG;QACH,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,GAAG,MAAM,CAAC;QACtE;;;;;;;;WAQG;QACH,IAAI,EAAE,OAAO,CAAC;QAEd;;;;;;;;;;;;WAYG;QACH,QAAQ,EAAE,MAAM,CAAC;QAEjB;;;;;;;;;;;;WAYG;QACH,OAAO,EAAE,MAAM,CAAC;KACjB;CACF;AAED,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,KAAK,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;AACnD,UAAU,0BAA0B;IAClC,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;CACxD;AACD,UAAU,0BAA0B;IAClC,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC;CACtC;AACD,UAAU,kBACR,SAAQ,0BAA0B,EAAE,0BAA0B;CAC/D;AAiBD,eAAO,IAAI,6BAA6B,EA2BnC,0BAA0B,CAAC;AAMhC,eAAO,IAAI,6BAA6B,EA4DnC,0BAA0B,CAAC;AAMhC,eAAO,IAAI,oBAAoB,EAoB1B,kBAAkB,CAAC;AAExB,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,gBAAgB;QACxB,SAAS,CAAC,CAAC,EACP,mBAAmB,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAC7F,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QAEhB,SAAS,CAAC,CAAC,EAAE,CAAC,EACV,mBAAmB,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAClE,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAC/B,OAAO,CAAC,EAAE,GAAG,GACd,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;KAC1B;CACF;AAoID,OAAO,EAAE,CAAC;AAeV,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd;;;;WAIG;QACH,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;KAC5C;CACF;AAED,OAAO,EAAE,CAAC"}
@@ -125,3 +125,125 @@ export let import_meta_ponyfill = ((...args) => {
125
125
  //@ts-ignore
126
126
  return import_meta_ponyfill(...args);
127
127
  });
128
+ // From https://github.com/es-shims/array-from-async/blob/4a5ff83947b861f35b380d5d4f20da2f07698638/index.mjs
129
+ // Tried to have dnt depend on the package instead, but it distributes as an
130
+ // ES module, so doesn't work with CommonJS.
131
+ //
132
+ // Code below:
133
+ //
134
+ // Copyright 2021 J. S. Choi
135
+ //
136
+ // Redistribution and use in source and binary forms, with or without
137
+ // modification, are permitted provided that the following conditions
138
+ // are met:
139
+ //
140
+ // 1. Redistributions of source code must retain the above copyright
141
+ // notice, this list of conditions and the following disclaimer.
142
+ //
143
+ // 2. Redistributions in binary form must reproduce the above copyright
144
+ // notice, this list of conditions and the following disclaimer in the
145
+ // documentation and/or other materials provided with the distribution.
146
+ //
147
+ // 3. Neither the name of the copyright holder nor the names of its
148
+ // contributors may be used to endorse or promote products derived from
149
+ // this software without specific prior written permission.
150
+ //
151
+ // **This software is provided by the copyright holders and contributors
152
+ // "as is" and any express or implied warranties, including, but not
153
+ // limited to, the implied warranties of merchantability and fitness for a
154
+ // particular purpose are disclaimed. In no event shall the copyright
155
+ // holder or contributors be liable for any direct, indirect, incidental,
156
+ // special, exemplary, or consequential damages (including, but not limited
157
+ // to, procurement of substitute goods or services; loss of use, data, or
158
+ // profits; or business interruption) however caused and on any theory of
159
+ // liability, whether in contract, strict liability, or tort (including
160
+ // negligence or otherwise) arising in any way out of the use of this
161
+ // software, even if advised of the possibility of such damage.**
162
+ const { MAX_SAFE_INTEGER } = Number;
163
+ const iteratorSymbol = Symbol.iterator;
164
+ const asyncIteratorSymbol = Symbol.asyncIterator;
165
+ const IntrinsicArray = Array;
166
+ const tooLongErrorMessage = 'Input is too long and exceeded Number.MAX_SAFE_INTEGER times.';
167
+ function isConstructor(obj) {
168
+ if (obj != null) {
169
+ const prox = new Proxy(obj, {
170
+ construct() {
171
+ return prox;
172
+ },
173
+ });
174
+ try {
175
+ new prox;
176
+ return true;
177
+ }
178
+ catch (err) {
179
+ return false;
180
+ }
181
+ }
182
+ else {
183
+ return false;
184
+ }
185
+ }
186
+ async function fromAsync(items, mapfn, thisArg) {
187
+ const itemsAreIterable = (asyncIteratorSymbol in items ||
188
+ iteratorSymbol in items);
189
+ if (itemsAreIterable) {
190
+ const result = isConstructor(this)
191
+ ? new this
192
+ : IntrinsicArray(0);
193
+ let i = 0;
194
+ for await (const v of items) {
195
+ if (i > MAX_SAFE_INTEGER) {
196
+ throw TypeError(tooLongErrorMessage);
197
+ }
198
+ else if (mapfn) {
199
+ result[i] = await mapfn.call(thisArg, v, i);
200
+ }
201
+ else {
202
+ result[i] = v;
203
+ }
204
+ i++;
205
+ }
206
+ result.length = i;
207
+ return result;
208
+ }
209
+ else {
210
+ // In this case, the items are assumed to be an arraylike object with
211
+ // a length property and integer properties for each element.
212
+ const { length } = items;
213
+ const result = isConstructor(this)
214
+ ? new this(length)
215
+ : IntrinsicArray(length);
216
+ let i = 0;
217
+ while (i < length) {
218
+ if (i > MAX_SAFE_INTEGER) {
219
+ throw TypeError(tooLongErrorMessage);
220
+ }
221
+ const v = await items[i];
222
+ if (mapfn) {
223
+ result[i] = await mapfn.call(thisArg, v, i);
224
+ }
225
+ else {
226
+ result[i] = v;
227
+ }
228
+ i++;
229
+ }
230
+ result.length = i;
231
+ return result;
232
+ }
233
+ }
234
+ if (!Array.fromAsync) {
235
+ Array.fromAsync = fromAsync;
236
+ }
237
+ if (!Object.hasOwn) {
238
+ Object.defineProperty(Object, "hasOwn", {
239
+ value: function (object, property) {
240
+ if (object == null) {
241
+ throw new TypeError("Cannot convert undefined or null to object");
242
+ }
243
+ return Object.prototype.hasOwnProperty.call(Object(object), property);
244
+ },
245
+ configurable: true,
246
+ enumerable: false,
247
+ writable: true,
248
+ });
249
+ }
@@ -0,0 +1,322 @@
1
+ /**
2
+ * Merges the two given records, recursively merging any nested records with the
3
+ * second collection overriding the first in case of conflict.
4
+ *
5
+ * For arrays, maps and sets, a merging strategy can be specified to either
6
+ * `replace` values, or `merge` them instead.
7
+ *
8
+ * @typeParam T Type of the first record
9
+ *
10
+ * @param record First record to merge.
11
+ * @param other Second record to merge.
12
+ * @param options Merging options.
13
+ *
14
+ * @returns A new record with the merged values.
15
+ *
16
+ * @example Merge objects
17
+ * ```ts
18
+ * import { deepMerge } from "@std/collections/deep-merge";
19
+ * import { assertEquals } from "@std/assert";
20
+ *
21
+ * const a = { foo: true };
22
+ * const b = { foo: { bar: true } };
23
+ *
24
+ * const result = deepMerge(a, b);
25
+ *
26
+ * const expected = { foo: { bar: true } };
27
+ *
28
+ * assertEquals(result, expected);
29
+ * ```
30
+ *
31
+ * @example Merge arrays
32
+ * ```ts
33
+ * import { deepMerge } from "@std/collections/deep-merge";
34
+ * import { assertEquals } from "@std/assert";
35
+ *
36
+ * const a = { foo: [1, 2] };
37
+ * const b = { foo: [3, 4] };
38
+ *
39
+ * const result = deepMerge(a, b);
40
+ *
41
+ * const expected = { foo: [1, 2, 3, 4] };
42
+ *
43
+ * assertEquals(result, expected);
44
+ * ```
45
+ *
46
+ * @example Merge maps
47
+ * ```ts
48
+ * import { deepMerge } from "@std/collections/deep-merge";
49
+ * import { assertEquals } from "@std/assert";
50
+ *
51
+ * const a = { foo: new Map([["a", 1]]) };
52
+ * const b = { foo: new Map([["b", 2]]) };
53
+ *
54
+ * const result = deepMerge(a, b);
55
+ *
56
+ * const expected = { foo: new Map([["a", 1], ["b", 2]]) };
57
+ *
58
+ * assertEquals(result, expected);
59
+ * ```
60
+ *
61
+ * @example Merge sets
62
+ * ```ts
63
+ * import { deepMerge } from "@std/collections/deep-merge";
64
+ * import { assertEquals } from "@std/assert";
65
+ *
66
+ * const a = { foo: new Set([1]) };
67
+ * const b = { foo: new Set([2]) };
68
+ *
69
+ * const result = deepMerge(a, b);
70
+ *
71
+ * const expected = { foo: new Set([1, 2]) };
72
+ *
73
+ * assertEquals(result, expected);
74
+ * ```
75
+ *
76
+ * @example Merge with custom options
77
+ * ```ts
78
+ * import { deepMerge } from "@std/collections/deep-merge";
79
+ * import { assertEquals } from "@std/assert";
80
+ *
81
+ * const a = { foo: [1, 2] };
82
+ * const b = { foo: [3, 4] };
83
+ *
84
+ * const result = deepMerge(a, b, { arrays: "replace" });
85
+ *
86
+ * const expected = { foo: [3, 4] };
87
+ *
88
+ * assertEquals(result, expected);
89
+ * ```
90
+ */
91
+ export declare function deepMerge<T extends Record<PropertyKey, unknown>>(record: Partial<Readonly<T>>, other: Partial<Readonly<T>>, options?: Readonly<DeepMergeOptions>): T;
92
+ /**
93
+ * Merges the two given records, recursively merging any nested records with the
94
+ * second collection overriding the first in case of conflict.
95
+ *
96
+ * For arrays, maps and sets, a merging strategy can be specified to either
97
+ * `replace` values, or `merge` them instead.
98
+ *
99
+ * @typeParam T Type of the first record
100
+ * @typeParam U Type of the second record
101
+ * @typeParam Options Merging options
102
+ *
103
+ * @param record First record to merge.
104
+ * @param other Second record to merge.
105
+ * @param options Merging options.
106
+ *
107
+ * @returns A new record with the merged values.
108
+ *
109
+ * @example Merge objects
110
+ * ```ts
111
+ * import { deepMerge } from "@std/collections/deep-merge";
112
+ * import { assertEquals } from "@std/assert";
113
+ *
114
+ * const a = { foo: true };
115
+ * const b = { foo: { bar: true } };
116
+ *
117
+ * const result = deepMerge(a, b);
118
+ *
119
+ * const expected = { foo: { bar: true } };
120
+ *
121
+ * assertEquals(result, expected);
122
+ * ```
123
+ *
124
+ * @example Merge arrays
125
+ * ```ts
126
+ * import { deepMerge } from "@std/collections/deep-merge";
127
+ * import { assertEquals } from "@std/assert";
128
+ *
129
+ * const a = { foo: [1, 2] };
130
+ * const b = { foo: [3, 4] };
131
+ *
132
+ * const result = deepMerge(a, b);
133
+ *
134
+ * const expected = { foo: [1, 2, 3, 4] };
135
+ *
136
+ * assertEquals(result, expected);
137
+ * ```
138
+ *
139
+ * @example Merge maps
140
+ * ```ts
141
+ * import { deepMerge } from "@std/collections/deep-merge";
142
+ * import { assertEquals } from "@std/assert";
143
+ *
144
+ * const a = { foo: new Map([["a", 1]]) };
145
+ * const b = { foo: new Map([["b", 2]]) };
146
+ *
147
+ * const result = deepMerge(a, b);
148
+ *
149
+ * const expected = { foo: new Map([["a", 1], ["b", 2]]) };
150
+ *
151
+ * assertEquals(result, expected);
152
+ * ```
153
+ *
154
+ * @example Merge sets
155
+ * ```ts
156
+ * import { deepMerge } from "@std/collections/deep-merge";
157
+ * import { assertEquals } from "@std/assert";
158
+ *
159
+ * const a = { foo: new Set([1]) };
160
+ * const b = { foo: new Set([2]) };
161
+ *
162
+ * const result = deepMerge(a, b);
163
+ *
164
+ * const expected = { foo: new Set([1, 2]) };
165
+ *
166
+ * assertEquals(result, expected);
167
+ * ```
168
+ *
169
+ * @example Merge with custom options
170
+ * ```ts
171
+ * import { deepMerge } from "@std/collections/deep-merge";
172
+ * import { assertEquals } from "@std/assert";
173
+ *
174
+ * const a = { foo: [1, 2] };
175
+ * const b = { foo: [3, 4] };
176
+ *
177
+ * const result = deepMerge(a, b, { arrays: "replace" });
178
+ *
179
+ * const expected = { foo: [3, 4] };
180
+ *
181
+ * assertEquals(result, expected);
182
+ * ```
183
+ */
184
+ export declare function deepMerge<T extends Record<PropertyKey, unknown>, U extends Record<PropertyKey, unknown>, Options extends DeepMergeOptions>(record: Readonly<T>, other: Readonly<U>, options?: Readonly<Options>): DeepMerge<T, U, Options>;
185
+ /** Merging strategy */
186
+ export type MergingStrategy = "replace" | "merge";
187
+ /** Options for {@linkcode deepMerge}. */
188
+ export type DeepMergeOptions = {
189
+ /**
190
+ * Merging strategy for arrays
191
+ *
192
+ * @default {"merge"}
193
+ */
194
+ arrays?: MergingStrategy;
195
+ /**
196
+ * Merging strategy for maps.
197
+ *
198
+ * @default {"merge"}
199
+ */
200
+ maps?: MergingStrategy;
201
+ /**
202
+ * Merging strategy for sets.
203
+ *
204
+ * @default {"merge"}
205
+ */
206
+ sets?: MergingStrategy;
207
+ };
208
+ /**
209
+ * How does recursive typing works ?
210
+ *
211
+ * Deep merging process is handled through `DeepMerge<T, U, Options>` type.
212
+ * If both T and U are Records, we recursively merge them,
213
+ * else we treat them as primitives.
214
+ *
215
+ * Merging process is handled through `Merge<T, U>` type, in which
216
+ * we remove all maps, sets, arrays and records so we can handle them
217
+ * separately depending on merging strategy:
218
+ *
219
+ * Merge<
220
+ * {foo: string},
221
+ * {bar: string, baz: Set<unknown>},
222
+ * > // "foo" and "bar" will be handled with `MergeRightOmitComplexes`
223
+ * // "baz" will be handled with `MergeAll*` type
224
+ *
225
+ * `MergeRightOmitComplexes<T, U>` will do the above: all T's
226
+ * exclusive keys will be kept, though common ones with U will have their
227
+ * typing overridden instead:
228
+ *
229
+ * MergeRightOmitComplexes<
230
+ * {foo: string, baz: number},
231
+ * {foo: boolean, bar: string}
232
+ * > // {baz: number, foo: boolean, bar: string}
233
+ * // "baz" was kept from T
234
+ * // "foo" was overridden by U's typing
235
+ * // "bar" was added from U
236
+ *
237
+ * For Maps, Arrays, Sets and Records, we use `MergeAll*<T, U>` utility
238
+ * types. They will extract relevant data structure from both T and U
239
+ * (providing that both have same data data structure, except for typing).
240
+ *
241
+ * From these, `*ValueType<T>` will extract values (and keys) types to be
242
+ * able to create a new data structure with an union typing from both
243
+ * data structure of T and U:
244
+ *
245
+ * MergeAllSets<
246
+ * {foo: Set<number>},
247
+ * {foo: Set<string>}
248
+ * > // `SetValueType` will extract "number" for T
249
+ * // `SetValueType` will extract "string" for U
250
+ * // `MergeAllSets` will infer type as Set<number|string>
251
+ * // Process is similar for Maps, Arrays, and Sets
252
+ *
253
+ * `DeepMerge<T, U, Options>` is taking a third argument to be handle to
254
+ * infer final typing depending on merging strategy:
255
+ *
256
+ * & (Options extends { sets: "replace" } ? PartialByType<U, Set<unknown>>
257
+ * : MergeAllSets<T, U>)
258
+ *
259
+ * In the above line, if "Options" have its merging strategy for Sets set to
260
+ * "replace", instead of performing merging of Sets type, it will take the
261
+ * typing from right operand (U) instead, effectively replacing the typing.
262
+ *
263
+ * An additional note, we use `ExpandRecursively<T>` utility type to expand
264
+ * the resulting typing and hide all the typing logic of deep merging so it is
265
+ * more user friendly.
266
+ */
267
+ /** Force intellisense to expand the typing to hide merging typings */
268
+ export type ExpandRecursively<T> = T extends Record<PropertyKey, unknown> ? T extends infer O ? {
269
+ [K in keyof O]: ExpandRecursively<O[K]>;
270
+ } : never : T;
271
+ /** Filter of keys matching a given type */
272
+ export type PartialByType<T, U> = {
273
+ [K in keyof T as T[K] extends U ? K : never]: T[K];
274
+ };
275
+ /** Get set values type */
276
+ export type SetValueType<T> = T extends Set<infer V> ? V : never;
277
+ /** Merge all sets types definitions from keys present in both objects */
278
+ export type MergeAllSets<T, U, X = PartialByType<T, Set<unknown>>, Y = PartialByType<U, Set<unknown>>, Z = {
279
+ [K in keyof X & keyof Y]: Set<SetValueType<X[K]> | SetValueType<Y[K]>>;
280
+ }> = Z;
281
+ /** Get array values type */
282
+ export type ArrayValueType<T> = T extends Array<infer V> ? V : never;
283
+ /** Merge all arrays types definitions from keys present in both objects */
284
+ export type MergeAllArrays<T, U, X = PartialByType<T, Array<unknown>>, Y = PartialByType<U, Array<unknown>>, Z = {
285
+ [K in keyof X & keyof Y]: Array<ArrayValueType<X[K]> | ArrayValueType<Y[K]>>;
286
+ }> = Z;
287
+ /** Get map values types */
288
+ export type MapKeyType<T> = T extends Map<infer K, unknown> ? K : never;
289
+ /** Get map values types */
290
+ export type MapValueType<T> = T extends Map<unknown, infer V> ? V : never;
291
+ /** Merge all maps types definitions from keys present in both objects */
292
+ export type MergeAllMaps<T, U, X = PartialByType<T, Map<unknown, unknown>>, Y = PartialByType<U, Map<unknown, unknown>>, Z = {
293
+ [K in keyof X & keyof Y]: Map<MapKeyType<X[K]> | MapKeyType<Y[K]>, MapValueType<X[K]> | MapValueType<Y[K]>>;
294
+ }> = Z;
295
+ /** Merge all records types definitions from keys present in both objects */
296
+ export type MergeAllRecords<T, U, Options, X = PartialByType<T, Record<PropertyKey, unknown>>, Y = PartialByType<U, Record<PropertyKey, unknown>>, Z = {
297
+ [K in keyof X & keyof Y]: DeepMerge<X[K], Y[K], Options>;
298
+ }> = Z;
299
+ /** Exclude map, sets and array from type */
300
+ export type OmitComplexes<T> = Omit<T, keyof PartialByType<T, Map<unknown, unknown> | Set<unknown> | Array<unknown> | Record<PropertyKey, unknown>>>;
301
+ /** Object with keys in either T or U but not in both */
302
+ export type ObjectXorKeys<T, U, X = Omit<T, keyof U> & Omit<U, keyof T>, Y = {
303
+ [K in keyof X]: X[K];
304
+ }> = Y;
305
+ /** Merge two objects, with left precedence */
306
+ export type MergeRightOmitComplexes<T, U, X = ObjectXorKeys<T, U> & OmitComplexes<{
307
+ [K in keyof U]: U[K];
308
+ }>> = X;
309
+ /** Merge two objects */
310
+ export type Merge<T, U, Options, X = MergeRightOmitComplexes<T, U> & MergeAllRecords<T, U, Options> & (Options extends {
311
+ sets: "replace";
312
+ } ? PartialByType<U, Set<unknown>> : MergeAllSets<T, U>) & (Options extends {
313
+ arrays: "replace";
314
+ } ? PartialByType<U, Array<unknown>> : MergeAllArrays<T, U>) & (Options extends {
315
+ maps: "replace";
316
+ } ? PartialByType<U, Map<unknown, unknown>> : MergeAllMaps<T, U>)> = ExpandRecursively<X>;
317
+ /** Merge deeply two objects */
318
+ export type DeepMerge<T, U, Options = Record<string, MergingStrategy>> = [
319
+ T,
320
+ U
321
+ ] extends [Record<PropertyKey, unknown>, Record<PropertyKey, unknown>] ? Merge<T, U, Options> : T | U;
322
+ //# sourceMappingURL=deep_merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep_merge.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/collections/1.1.5/deep_merge.ts"],"names":[],"mappings":"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"}