@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,110 @@
1
+ import type { SavedState, TraceEvent } from "@bolt-foundry/gambit-core";
2
+ export type AvailableTestDeck = {
3
+ id: string;
4
+ label: string;
5
+ description?: string;
6
+ path: string;
7
+ };
8
+ export type AvailableGraderDeck = {
9
+ id: string;
10
+ label: string;
11
+ description?: string;
12
+ path: string;
13
+ };
14
+ export type NormalizedSchema = {
15
+ kind: "string" | "number" | "boolean" | "enum" | "object" | "array" | "unknown";
16
+ optional: boolean;
17
+ description?: string;
18
+ example?: unknown;
19
+ defaultValue?: unknown;
20
+ enumValues?: Array<unknown>;
21
+ fields?: Record<string, NormalizedSchema>;
22
+ items?: NormalizedSchema;
23
+ };
24
+ export type DeckToolDescription = {
25
+ name: string;
26
+ label?: string;
27
+ description?: string;
28
+ path?: string;
29
+ };
30
+ export type SchemaDescription = {
31
+ schema?: NormalizedSchema;
32
+ defaults?: unknown;
33
+ error?: string;
34
+ tools?: Array<DeckToolDescription>;
35
+ };
36
+ export type GradingRunRecord = {
37
+ id: string;
38
+ workspaceId?: string;
39
+ gradingRunId?: string;
40
+ graderId: string;
41
+ graderPath: string;
42
+ graderLabel?: string;
43
+ status: "running" | "completed" | "error";
44
+ runAt?: string;
45
+ referenceSample?: {
46
+ score: number;
47
+ reason: string;
48
+ evidence?: Array<string>;
49
+ artifactRevisionId?: string;
50
+ workspaceId?: string;
51
+ gradingRunId?: string;
52
+ };
53
+ input?: unknown;
54
+ result?: unknown;
55
+ error?: string;
56
+ };
57
+ export type GradingFlag = {
58
+ id: string;
59
+ refId: string;
60
+ runId?: string;
61
+ turnIndex?: number;
62
+ reason?: string;
63
+ createdAt: string;
64
+ };
65
+ export type SessionMeta = {
66
+ id: string;
67
+ deck?: string;
68
+ deckSlug?: string;
69
+ testBotName?: string;
70
+ createdAt?: string;
71
+ gradingRuns?: Array<GradingRunRecord>;
72
+ sessionDir?: string;
73
+ statePath?: string;
74
+ };
75
+ export type OutgoingMessage = {
76
+ type: "ready";
77
+ deck: string;
78
+ port: number;
79
+ schema?: NormalizedSchema;
80
+ defaults?: unknown;
81
+ schemaError?: string;
82
+ } | {
83
+ type: "pong";
84
+ } | {
85
+ type: "stream";
86
+ chunk: string;
87
+ runId?: string;
88
+ } | {
89
+ type: "result";
90
+ result: unknown;
91
+ runId?: string;
92
+ streamed: boolean;
93
+ } | {
94
+ type: "trace";
95
+ event: TraceEvent;
96
+ } | {
97
+ type: "state";
98
+ state: SavedState;
99
+ newMessages?: Array<{
100
+ index: number;
101
+ role: string;
102
+ messageRefId?: string;
103
+ content?: unknown;
104
+ }>;
105
+ } | {
106
+ type: "error";
107
+ message: string;
108
+ runId?: string;
109
+ };
110
+ //# sourceMappingURL=server_types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server_types.d.ts","sourceRoot":"","sources":["../../src/src/server_types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,33 @@
1
+ type HandleUiRoutesDeps = {
2
+ url: URL;
3
+ req: Request;
4
+ workspaceRouteBase: string;
5
+ activeWorkspaceId: string | null;
6
+ activeWorkspaceOnboarding: boolean;
7
+ resolvedDeckPath: string;
8
+ deckLabel?: string;
9
+ getWorkspaceIdFromQuery: (url: URL) => string | undefined;
10
+ activateWorkspaceDeck: (workspaceId?: string) => Promise<void>;
11
+ schemaPromise: Promise<unknown>;
12
+ deckLoadPromise: Promise<unknown>;
13
+ canServeReactBundle: () => Promise<boolean>;
14
+ simulatorReactHtml: (deckPath: string, deckLabel?: string, opts?: {
15
+ workspaceId?: string | null;
16
+ onboarding?: boolean;
17
+ }) => string;
18
+ toDeckLabel: (deckPath: string) => string;
19
+ readReactBundle: () => Promise<Uint8Array | null>;
20
+ shouldAdvertiseSourceMap: () => boolean;
21
+ readReactBundleSourceMap: () => Promise<Uint8Array | null>;
22
+ listSessions: () => unknown;
23
+ createWorkspaceSession: () => Promise<{
24
+ id: string;
25
+ rootDeckPath: string;
26
+ rootDir: string;
27
+ createdAt: string;
28
+ }>;
29
+ workspaceStateSchemaVersion: string;
30
+ };
31
+ export declare const handleUiRoutes: (deps: HandleUiRoutesDeps) => Promise<Response | null>;
32
+ export {};
33
+ //# sourceMappingURL=server_ui_routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server_ui_routes.d.ts","sourceRoot":"","sources":["../../src/src/server_ui_routes.ts"],"names":[],"mappings":"AAMA,KAAK,kBAAkB,GAAG;IACxB,GAAG,EAAE,GAAG,CAAC;IACT,GAAG,EAAE,OAAO,CAAC;IACb,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,yBAAyB,EAAE,OAAO,CAAC;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uBAAuB,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1D,qBAAqB,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,mBAAmB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,kBAAkB,EAAE,CAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,KACzD,MAAM,CAAC;IACZ,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C,eAAe,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAClD,wBAAwB,EAAE,MAAM,OAAO,CAAC;IACxC,wBAAwB,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAC3D,YAAY,EAAE,MAAM,OAAO,CAAC;IAC5B,sBAAsB,EAAE,MAAM,OAAO,CAAC;QACpC,EAAE,EAAE,MAAM,CAAC;QACX,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,2BAA2B,EAAE,MAAM,CAAC;CACrC,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,MAAM,kBAAkB,KACvB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAwMzB,CAAC"}
@@ -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.handleUiRoutes = void 0;
37
+ const dntShim = __importStar(require("../_dnt.shims.js"));
38
+ const workspace_contract_js_1 = require("./workspace_contract.js");
39
+ const handleUiRoutes = async (deps) => {
40
+ const { url, req, workspaceRouteBase, activeWorkspaceId, activeWorkspaceOnboarding, resolvedDeckPath, deckLabel, getWorkspaceIdFromQuery, activateWorkspaceDeck, schemaPromise, deckLoadPromise, canServeReactBundle, simulatorReactHtml, toDeckLabel, readReactBundle, shouldAdvertiseSourceMap, readReactBundleSourceMap, listSessions, createWorkspaceSession, workspaceStateSchemaVersion, } = deps;
41
+ if (url.pathname === "/" ||
42
+ url.pathname === workspaceRouteBase ||
43
+ url.pathname.startsWith(`${workspaceRouteBase}/`) ||
44
+ url.pathname.startsWith("/simulate") ||
45
+ url.pathname.startsWith("/debug") ||
46
+ url.pathname.startsWith("/build") ||
47
+ url.pathname.startsWith("/editor") ||
48
+ url.pathname.startsWith("/docs")) {
49
+ const hasBundle = await canServeReactBundle();
50
+ if (!hasBundle) {
51
+ return new Response("Simulator UI bundle missing. Run `deno task bundle:sim` (or start with `--bundle`).", { status: 500 });
52
+ }
53
+ await deckLoadPromise.catch(() => null);
54
+ const resolvedLabel = deckLabel ?? toDeckLabel(resolvedDeckPath);
55
+ return new Response(simulatorReactHtml(resolvedDeckPath, resolvedLabel, {
56
+ workspaceId: activeWorkspaceId ?? null,
57
+ onboarding: activeWorkspaceOnboarding,
58
+ }), {
59
+ headers: { "content-type": "text/html; charset=utf-8" },
60
+ });
61
+ }
62
+ if (url.pathname === "/schema") {
63
+ const sessionId = getWorkspaceIdFromQuery(url);
64
+ if (sessionId) {
65
+ await activateWorkspaceDeck(sessionId);
66
+ }
67
+ const descRaw = await schemaPromise;
68
+ const desc = descRaw && typeof descRaw === "object"
69
+ ? descRaw
70
+ : {};
71
+ const deck = await deckLoadPromise.catch(() => null);
72
+ const modelParams = deck && typeof deck === "object"
73
+ ? deck.modelParams
74
+ : undefined;
75
+ const startMode = deck &&
76
+ (deck.startMode === "assistant" || deck.startMode === "user")
77
+ ? deck.startMode
78
+ : "assistant";
79
+ return new Response(JSON.stringify({
80
+ deck: resolvedDeckPath,
81
+ startMode,
82
+ modelParams,
83
+ ...desc,
84
+ }), {
85
+ headers: { "content-type": "application/json; charset=utf-8" },
86
+ });
87
+ }
88
+ if (url.pathname === "/api/deck-source") {
89
+ if (req.method !== "GET") {
90
+ return new Response("Method not allowed", { status: 405 });
91
+ }
92
+ try {
93
+ const content = await dntShim.Deno.readTextFile(resolvedDeckPath);
94
+ return new Response(JSON.stringify({
95
+ path: resolvedDeckPath,
96
+ content,
97
+ }), { headers: { "content-type": "application/json; charset=utf-8" } });
98
+ }
99
+ catch (err) {
100
+ const message = err instanceof Error ? err.message : String(err);
101
+ return new Response(JSON.stringify({
102
+ path: resolvedDeckPath,
103
+ error: message,
104
+ }), {
105
+ status: 500,
106
+ headers: { "content-type": "application/json; charset=utf-8" },
107
+ });
108
+ }
109
+ }
110
+ if (url.pathname === "/ui/bundle.js") {
111
+ const data = await readReactBundle();
112
+ if (!data) {
113
+ return new Response("Bundle missing. Run `deno task bundle:sim` (or start with `--bundle`).", { status: 404 });
114
+ }
115
+ try {
116
+ const headers = new Headers({
117
+ "content-type": "application/javascript; charset=utf-8",
118
+ });
119
+ if (shouldAdvertiseSourceMap()) {
120
+ headers.set("SourceMap", "/ui/bundle.js.map");
121
+ }
122
+ return new Response(data, { headers });
123
+ }
124
+ catch (err) {
125
+ return new Response(`Failed to read bundle: ${err instanceof Error ? err.message : String(err)}`, { status: 500 });
126
+ }
127
+ }
128
+ if (url.pathname === "/ui/bundle.js.map") {
129
+ const data = await readReactBundleSourceMap();
130
+ if (!data) {
131
+ return new Response("Source map missing. Run `deno task bundle:sim:sourcemap` (or start with `--bundle --sourcemap`).", { status: 404 });
132
+ }
133
+ try {
134
+ return new Response(data, {
135
+ headers: {
136
+ "content-type": "application/json; charset=utf-8",
137
+ },
138
+ });
139
+ }
140
+ catch (err) {
141
+ return new Response(`Failed to read source map: ${err instanceof Error ? err.message : String(err)}`, { status: 500 });
142
+ }
143
+ }
144
+ if (url.pathname === workspace_contract_js_1.WORKSPACES_API_BASE) {
145
+ const workspaces = listSessions();
146
+ return new Response(JSON.stringify({ workspaces }), {
147
+ headers: { "content-type": "application/json; charset=utf-8" },
148
+ });
149
+ }
150
+ if (url.pathname === `${workspace_contract_js_1.WORKSPACE_API_BASE}/new`) {
151
+ if (req.method !== "POST") {
152
+ return new Response("Method not allowed", { status: 405 });
153
+ }
154
+ try {
155
+ const workspace = await createWorkspaceSession();
156
+ await activateWorkspaceDeck(workspace.id);
157
+ return new Response(JSON.stringify({
158
+ workspaceId: workspace.id,
159
+ deckPath: workspace.rootDeckPath,
160
+ workspaceDir: workspace.rootDir,
161
+ createdAt: workspace.createdAt,
162
+ workspaceSchemaVersion: workspaceStateSchemaVersion,
163
+ }), { headers: { "content-type": "application/json" } });
164
+ }
165
+ catch (err) {
166
+ return new Response(JSON.stringify({
167
+ error: err instanceof Error ? err.message : String(err),
168
+ }), { status: 500, headers: { "content-type": "application/json" } });
169
+ }
170
+ }
171
+ return null;
172
+ };
173
+ exports.handleUiRoutes = handleUiRoutes;
@@ -0,0 +1,22 @@
1
+ import type { SavedState, TraceEvent } from "@bolt-foundry/gambit-core";
2
+ export type SessionArtifactsConfig = {
3
+ rootDir: string;
4
+ sessionId?: string;
5
+ continueSession?: boolean;
6
+ resumeState?: boolean;
7
+ };
8
+ export type SessionArtifactsRun = {
9
+ state?: SavedState;
10
+ trace: (event: TraceEvent) => void;
11
+ onStateUpdate: (state: SavedState) => void;
12
+ finalize: () => void;
13
+ sessionId: string;
14
+ sessionDir: string;
15
+ };
16
+ export declare function withSessionArtifacts(args: {
17
+ config: SessionArtifactsConfig;
18
+ trace?: (event: TraceEvent) => void;
19
+ onStateUpdate?: (state: SavedState) => void;
20
+ state?: SavedState;
21
+ }): SessionArtifactsRun;
22
+ //# sourceMappingURL=session_artifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session_artifacts.d.ts","sourceRoot":"","sources":["../../src/src/session_artifacts.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAExE,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAI1B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACnC,aAAa,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAC3C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AA4KF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACpC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5C,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB,GAAG,mBAAmB,CA8ItB"}
@@ -0,0 +1,279 @@
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.withSessionArtifacts = withSessionArtifacts;
37
+ const dntShim = __importStar(require("../_dnt.shims.js"));
38
+ const path = __importStar(require("../deps/jsr.io/@std/path/1.1.4/mod.js"));
39
+ const mod_js_1 = require("../deps/jsr.io/@std/fs/1.0.23/mod.js");
40
+ function canonicalSessionEventType(type) {
41
+ if (type.startsWith("response.") || type.startsWith("gambit.")) {
42
+ return type;
43
+ }
44
+ return `gambit.${type}`;
45
+ }
46
+ function randomId(prefix) {
47
+ const suffix = crypto.randomUUID().replace(/-/g, "").slice(0, 24);
48
+ return `${prefix}-${suffix}`;
49
+ }
50
+ function parseFiniteInteger(value) {
51
+ if (typeof value !== "number" || !Number.isFinite(value))
52
+ return undefined;
53
+ if (!Number.isInteger(value))
54
+ return undefined;
55
+ return value;
56
+ }
57
+ function normalizeConfig(config) {
58
+ const rootDir = path.resolve(config.rootDir);
59
+ const sessionId = config.sessionId?.trim() || randomId("session");
60
+ const continueSession = Boolean(config.continueSession);
61
+ const resumeState = config.resumeState ?? true;
62
+ if (!rootDir) {
63
+ throw new Error("sessionArtifacts.rootDir is required.");
64
+ }
65
+ if (config.continueSession && !config.sessionId?.trim()) {
66
+ throw new Error("sessionArtifacts.sessionId is required when continueSession is true.");
67
+ }
68
+ return { rootDir, sessionId, continueSession, resumeState };
69
+ }
70
+ function prepare(configInput) {
71
+ const config = normalizeConfig(configInput);
72
+ const sessionDir = path.join(config.rootDir, config.sessionId);
73
+ const statePath = path.join(sessionDir, "state.json");
74
+ const eventsPath = path.join(sessionDir, "events.jsonl");
75
+ const lockPath = path.join(sessionDir, ".lock");
76
+ return { config, sessionDir, statePath, eventsPath, lockPath };
77
+ }
78
+ function ensureMonotonicOffsets(records, eventsPath) {
79
+ let expected = 0;
80
+ let highest = -1;
81
+ for (const record of records) {
82
+ if (record.offset !== expected) {
83
+ throw new Error(`Non-monotonic offset in ${eventsPath}: expected ${expected}, got ${record.offset}`);
84
+ }
85
+ highest = record.offset;
86
+ expected += 1;
87
+ }
88
+ return highest;
89
+ }
90
+ function readEvents(eventsPath) {
91
+ if (!(0, mod_js_1.existsSync)(eventsPath)) {
92
+ return { records: [], highestOffset: -1 };
93
+ }
94
+ const text = dntShim.Deno.readTextFileSync(eventsPath);
95
+ const records = [];
96
+ for (const line of text.split("\n")) {
97
+ if (!line.trim())
98
+ continue;
99
+ const parsed = JSON.parse(line);
100
+ const offset = parseFiniteInteger(parsed.offset);
101
+ const createdAt = typeof parsed.createdAt === "string"
102
+ ? parsed.createdAt
103
+ : null;
104
+ const type = parsed.type;
105
+ if (offset === undefined ||
106
+ createdAt === null ||
107
+ typeof type !== "string" ||
108
+ type.trim().length === 0) {
109
+ throw new Error(`Invalid event record in ${eventsPath}`);
110
+ }
111
+ records.push({
112
+ offset,
113
+ createdAt,
114
+ type,
115
+ _gambit: parsed._gambit &&
116
+ typeof parsed._gambit === "object" &&
117
+ !Array.isArray(parsed._gambit)
118
+ ? parsed._gambit
119
+ : undefined,
120
+ });
121
+ }
122
+ const highestOffset = records.length
123
+ ? ensureMonotonicOffsets(records, eventsPath)
124
+ : -1;
125
+ return { records, highestOffset };
126
+ }
127
+ function writeJsonAtomic(filePath, payload) {
128
+ const dir = path.dirname(filePath);
129
+ dntShim.Deno.mkdirSync(dir, { recursive: true });
130
+ const tmpPath = path.join(dir, `.tmp-${path.basename(filePath)}-${randomId("tmp")}`);
131
+ dntShim.Deno.writeTextFileSync(tmpPath, JSON.stringify(payload, null, 2));
132
+ dntShim.Deno.renameSync(tmpPath, filePath);
133
+ }
134
+ function appendJsonl(filePath, payload) {
135
+ dntShim.Deno.mkdirSync(path.dirname(filePath), { recursive: true });
136
+ const line = JSON.stringify(payload);
137
+ dntShim.Deno.writeTextFileSync(filePath, `${line}\n`, { append: true });
138
+ }
139
+ function archiveOrphanedEvents(eventsPath) {
140
+ const dir = path.dirname(eventsPath);
141
+ const stamp = new Date().toISOString().replaceAll(":", "-");
142
+ const archivedPath = path.join(dir, `events.orphaned.${stamp}.jsonl`);
143
+ dntShim.Deno.renameSync(eventsPath, archivedPath);
144
+ return archivedPath;
145
+ }
146
+ function writeStateSnapshot(args) {
147
+ const nextMeta = {
148
+ ...(args.state.meta ?? {}),
149
+ sessionId: args.sessionId,
150
+ sessionDir: args.sessionDir,
151
+ sessionStatePath: args.statePath,
152
+ sessionEventsPath: args.eventsPath,
153
+ lastAppliedOffset: args.offset,
154
+ lastAppliedEventSeq: args.offset,
155
+ };
156
+ const snapshot = {
157
+ ...args.state,
158
+ meta: nextMeta,
159
+ };
160
+ writeJsonAtomic(args.statePath, snapshot);
161
+ }
162
+ function withSessionArtifacts(args) {
163
+ const prepared = prepare(args.config);
164
+ const { config, sessionDir, statePath, eventsPath, lockPath, } = prepared;
165
+ dntShim.Deno.mkdirSync(sessionDir, { recursive: true });
166
+ if (!config.continueSession && ((0, mod_js_1.existsSync)(statePath) || (0, mod_js_1.existsSync)(eventsPath))) {
167
+ throw new Error(`Session artifact directory already exists at ${sessionDir}. Pass continueSession: true with the same sessionId to continue.`);
168
+ }
169
+ try {
170
+ dntShim.Deno.writeTextFileSync(lockPath, JSON.stringify({
171
+ pid: dntShim.Deno.pid,
172
+ acquiredAt: new Date().toISOString(),
173
+ }), { createNew: true });
174
+ }
175
+ catch (err) {
176
+ if (err instanceof dntShim.Deno.errors.AlreadyExists) {
177
+ throw new Error(`Session artifact directory is already active: ${sessionDir}`);
178
+ }
179
+ throw err;
180
+ }
181
+ let latestState = args.state;
182
+ let highestOffset = -1;
183
+ let lastStateOffset = -1;
184
+ try {
185
+ const loaded = readEvents(eventsPath);
186
+ highestOffset = loaded.highestOffset;
187
+ if (!latestState &&
188
+ config.continueSession &&
189
+ config.resumeState &&
190
+ (0, mod_js_1.existsSync)(statePath)) {
191
+ const parsed = JSON.parse(dntShim.Deno.readTextFileSync(statePath));
192
+ latestState = parsed;
193
+ }
194
+ if (!latestState &&
195
+ config.continueSession &&
196
+ config.resumeState &&
197
+ highestOffset >= 0) {
198
+ // Recovery path: preserve prior trace-only history, then start a fresh
199
+ // append-only log so retries can continue without corrupting snapshot
200
+ // boundaries.
201
+ archiveOrphanedEvents(eventsPath);
202
+ highestOffset = -1;
203
+ }
204
+ const meta = latestState?.meta;
205
+ lastStateOffset = parseFiniteInteger(meta?.lastAppliedOffset) ??
206
+ parseFiniteInteger(meta?.lastAppliedEventSeq) ??
207
+ -1;
208
+ }
209
+ catch (err) {
210
+ try {
211
+ dntShim.Deno.removeSync(lockPath);
212
+ }
213
+ catch {
214
+ // no-op
215
+ }
216
+ throw err;
217
+ }
218
+ const persistLatest = () => {
219
+ if (!latestState)
220
+ return;
221
+ writeStateSnapshot({
222
+ statePath,
223
+ state: latestState,
224
+ offset: lastStateOffset,
225
+ sessionId: config.sessionId,
226
+ sessionDir,
227
+ eventsPath,
228
+ });
229
+ };
230
+ const trace = (event) => {
231
+ highestOffset += 1;
232
+ const createdAt = new Date().toISOString();
233
+ const sourceType = typeof event?.type === "string" &&
234
+ event.type.trim().length > 0
235
+ ? event.type.trim()
236
+ : "gambit.session.event";
237
+ const payloadType = canonicalSessionEventType(sourceType);
238
+ const rawMeta = event?._gambit;
239
+ const meta = rawMeta && typeof rawMeta === "object" && !Array.isArray(rawMeta)
240
+ ? rawMeta
241
+ : {};
242
+ const record = {
243
+ ...event,
244
+ type: payloadType,
245
+ offset: highestOffset,
246
+ createdAt,
247
+ _gambit: {
248
+ ...meta,
249
+ ...(payloadType !== sourceType ? { source_type: sourceType } : {}),
250
+ domain: "session",
251
+ offset: highestOffset,
252
+ },
253
+ };
254
+ appendJsonl(eventsPath, record);
255
+ args.trace?.(event);
256
+ };
257
+ const onStateUpdate = (state) => {
258
+ latestState = state;
259
+ lastStateOffset = highestOffset;
260
+ persistLatest();
261
+ args.onStateUpdate?.(state);
262
+ };
263
+ const finalize = () => {
264
+ try {
265
+ dntShim.Deno.removeSync(lockPath);
266
+ }
267
+ catch {
268
+ // no-op
269
+ }
270
+ };
271
+ return {
272
+ state: latestState,
273
+ trace,
274
+ onStateUpdate,
275
+ finalize,
276
+ sessionId: config.sessionId,
277
+ sessionDir,
278
+ };
279
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/src/trace.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI5D,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAQ7E;AAED,wBAAgB,iBAAiB,IAAI,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAmI/D"}
1
+ {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/src/trace.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI5D,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAQ7E;AAED,wBAAgB,iBAAiB,IAAI,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CA+I/D"}