@bolt-foundry/gambit 0.8.6-rc.3 → 0.8.6-rc.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/CHANGELOG.md +20 -1
  2. package/esm/gambit/simulator-ui/dist/bundle.js +2435 -620
  3. package/esm/gambit/simulator-ui/dist/bundle.js.map +4 -4
  4. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/entrypoint.d.ts +7 -0
  5. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/entrypoint.d.ts.map +1 -0
  6. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/entrypoint.js +22 -0
  7. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/normalization_ast.d.ts +4 -0
  8. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/normalization_ast.d.ts.map +1 -0
  9. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/normalization_ast.js +456 -0
  10. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/output_type.d.ts +3 -0
  11. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/output_type.d.ts.map +1 -0
  12. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/output_type.js +1 -0
  13. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/param_type.d.ts +110 -0
  14. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/param_type.d.ts.map +1 -0
  15. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/param_type.js +1 -0
  16. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/parameters_type.d.ts +10 -0
  17. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/parameters_type.d.ts.map +1 -0
  18. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/parameters_type.js +1 -0
  19. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/query_text.d.ts +3 -0
  20. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/query_text.d.ts.map +1 -0
  21. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/query_text.js +96 -0
  22. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/raw_response_type.d.ts +91 -0
  23. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/raw_response_type.d.ts.map +1 -0
  24. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/raw_response_type.js +1 -0
  25. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/resolver_reader.d.ts +6 -0
  26. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/resolver_reader.d.ts.map +1 -0
  27. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/resolver_reader.js +610 -0
  28. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/normalization_ast.d.ts.map +1 -1
  29. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/normalization_ast.js +86 -0
  30. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/param_type.d.ts +18 -0
  31. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/param_type.d.ts.map +1 -1
  32. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/query_text.d.ts +1 -1
  33. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/query_text.d.ts.map +1 -1
  34. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/query_text.js +18 -0
  35. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/raw_response_type.d.ts +18 -0
  36. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/raw_response_type.d.ts.map +1 -1
  37. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/resolver_reader.d.ts.map +1 -1
  38. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/resolver_reader.js +120 -0
  39. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/normalization_ast.d.ts.map +1 -1
  40. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/normalization_ast.js +43 -0
  41. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/param_type.d.ts +9 -0
  42. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/param_type.d.ts.map +1 -1
  43. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/query_text.d.ts +1 -1
  44. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/query_text.d.ts.map +1 -1
  45. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/query_text.js +9 -0
  46. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/raw_response_type.d.ts +9 -0
  47. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/raw_response_type.d.ts.map +1 -1
  48. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/resolver_reader.d.ts.map +1 -1
  49. package/esm/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/resolver_reader.js +60 -0
  50. package/esm/simulator-ui/__generated__/__isograph/Query/EntrypointSimulatorTestPage/normalization_ast.d.ts.map +1 -1
  51. package/esm/simulator-ui/__generated__/__isograph/Query/EntrypointSimulatorTestPage/normalization_ast.js +43 -0
  52. package/esm/simulator-ui/__generated__/__isograph/Query/EntrypointSimulatorTestPage/query_text.d.ts +1 -1
  53. package/esm/simulator-ui/__generated__/__isograph/Query/EntrypointSimulatorTestPage/query_text.d.ts.map +1 -1
  54. package/esm/simulator-ui/__generated__/__isograph/Query/EntrypointSimulatorTestPage/query_text.js +9 -0
  55. package/esm/simulator-ui/__generated__/__isograph/Query/EntrypointSimulatorTestPage/raw_response_type.d.ts +9 -0
  56. package/esm/simulator-ui/__generated__/__isograph/Query/EntrypointSimulatorTestPage/raw_response_type.d.ts.map +1 -1
  57. package/esm/simulator-ui/__generated__/__isograph/Workspace/TestTab/param_type.d.ts +9 -0
  58. package/esm/simulator-ui/__generated__/__isograph/Workspace/TestTab/param_type.d.ts.map +1 -1
  59. package/esm/simulator-ui/__generated__/__isograph/Workspace/TestTab/resolver_reader.d.ts.map +1 -1
  60. package/esm/simulator-ui/__generated__/__isograph/Workspace/TestTab/resolver_reader.js +60 -0
  61. package/esm/simulator-ui/__generated__/__isograph/iso.d.ts +4 -0
  62. package/esm/simulator-ui/__generated__/__isograph/iso.d.ts.map +1 -1
  63. package/esm/simulator-ui/__generated__/__isograph/iso.js +3 -0
  64. package/esm/simulator-ui/__generated__/builtRoutes.d.ts +2 -0
  65. package/esm/simulator-ui/__generated__/builtRoutes.d.ts.map +1 -1
  66. package/esm/simulator-ui/__generated__/builtRoutes.js +3 -0
  67. package/esm/simulator-ui/isograph/components/Query/SimulatorTestPage.d.ts.map +1 -1
  68. package/esm/simulator-ui/isograph/components/Query/SimulatorTestPage.js +141 -4
  69. package/esm/simulator-ui/isograph/entrypoints/EntrypointSimulatorWorkspaceShell.d.ts.map +1 -1
  70. package/esm/simulator-ui/isograph/entrypoints/EntrypointSimulatorWorkspaceShell.js +3 -1
  71. package/esm/simulator-ui/mutations/GambitWorkspaceFeedbackSave.d.ts +93 -0
  72. package/esm/simulator-ui/mutations/GambitWorkspaceFeedbackSave.d.ts.map +1 -0
  73. package/esm/simulator-ui/mutations/GambitWorkspaceFeedbackSave.js +101 -0
  74. package/esm/simulator-ui/mutations/GambitWorkspaceFeedbackSaveMutation.d.ts +93 -0
  75. package/esm/simulator-ui/mutations/GambitWorkspaceFeedbackSaveMutation.d.ts.map +1 -0
  76. package/esm/simulator-ui/mutations/GambitWorkspaceFeedbackSaveMutation.js +7 -0
  77. package/esm/simulator-ui/mutations/GambitWorkspaceScenarioRunSend.d.ts +18 -0
  78. package/esm/simulator-ui/mutations/GambitWorkspaceScenarioRunSend.d.ts.map +1 -1
  79. package/esm/simulator-ui/mutations/GambitWorkspaceScenarioRunSend.js +18 -0
  80. package/esm/simulator-ui/mutations/GambitWorkspaceScenarioRunSendMutation.d.ts +18 -0
  81. package/esm/simulator-ui/mutations/GambitWorkspaceScenarioRunSendMutation.d.ts.map +1 -1
  82. package/esm/simulator-ui/mutations/GambitWorkspaceScenarioRunStart.d.ts +9 -0
  83. package/esm/simulator-ui/mutations/GambitWorkspaceScenarioRunStart.d.ts.map +1 -1
  84. package/esm/simulator-ui/mutations/GambitWorkspaceScenarioRunStart.js +9 -0
  85. package/esm/simulator-ui/mutations/GambitWorkspaceScenarioRunStartMutation.d.ts +9 -0
  86. package/esm/simulator-ui/mutations/GambitWorkspaceScenarioRunStartMutation.d.ts.map +1 -1
  87. package/esm/simulator-ui/src/AppIsoMinimal.d.ts +3 -0
  88. package/esm/simulator-ui/src/AppIsoMinimal.d.ts.map +1 -1
  89. package/esm/simulator-ui/src/AppIsoMinimal.js +7 -4
  90. package/esm/simulator-ui/src/AppShell.d.ts.map +1 -1
  91. package/esm/simulator-ui/src/AppShell.js +2 -2
  92. package/esm/simulator-ui/src/MinimalRouterRoot.js +4 -2
  93. package/esm/simulator-ui/src/RouterContext.d.ts.map +1 -1
  94. package/esm/simulator-ui/src/RouterContext.js +7 -3
  95. package/esm/simulator-ui/src/shared.d.ts.map +1 -1
  96. package/esm/simulator-ui/src/shared.js +3 -3
  97. package/esm/src/server/request_handler.d.ts +210 -0
  98. package/esm/src/server/request_handler.d.ts.map +1 -0
  99. package/esm/src/server/request_handler.js +416 -0
  100. package/esm/src/server/workspace/build.d.ts +57 -0
  101. package/esm/src/server/workspace/build.d.ts.map +1 -0
  102. package/esm/src/server/workspace/build.js +377 -0
  103. package/esm/src/server/workspace/conversation_sessions.d.ts +83 -0
  104. package/esm/src/server/workspace/conversation_sessions.d.ts.map +1 -0
  105. package/esm/src/server/workspace/conversation_sessions.js +163 -0
  106. package/esm/src/server/workspace/grading.d.ts +52 -0
  107. package/esm/src/server/workspace/grading.d.ts.map +1 -0
  108. package/esm/src/server/workspace/grading.js +488 -0
  109. package/esm/src/server/workspace/helpers.d.ts +46 -0
  110. package/esm/src/server/workspace/helpers.d.ts.map +1 -0
  111. package/esm/src/server/workspace/helpers.js +340 -0
  112. package/esm/src/server/workspace/read_model.d.ts +35 -0
  113. package/esm/src/server/workspace/read_model.d.ts.map +1 -0
  114. package/esm/src/server/workspace/read_model.js +121 -0
  115. package/esm/src/server/workspace/response_events.d.ts +28 -0
  116. package/esm/src/server/workspace/response_events.d.ts.map +1 -0
  117. package/esm/src/server/workspace/response_events.js +178 -0
  118. package/esm/src/server/workspace/run_deck.d.ts +23 -0
  119. package/esm/src/server/workspace/run_deck.d.ts.map +1 -0
  120. package/esm/src/server/workspace/run_deck.js +79 -0
  121. package/esm/src/server/workspace/scenario_history.d.ts +8 -0
  122. package/esm/src/server/workspace/scenario_history.d.ts.map +1 -0
  123. package/esm/src/server/workspace/scenario_history.js +269 -0
  124. package/esm/src/server/workspace/scenarios.d.ts +93 -0
  125. package/esm/src/server/workspace/scenarios.d.ts.map +1 -0
  126. package/esm/src/server/workspace/scenarios.js +1052 -0
  127. package/esm/src/server/workspace/schema.d.ts +35 -0
  128. package/esm/src/server/workspace/schema.d.ts.map +1 -0
  129. package/esm/src/server/workspace/schema.js +427 -0
  130. package/esm/src/server/workspace/sessions.d.ts +38 -0
  131. package/esm/src/server/workspace/sessions.d.ts.map +1 -0
  132. package/esm/src/server/workspace/sessions.js +232 -0
  133. package/esm/src/server/workspace/types.d.ts +128 -0
  134. package/esm/src/server/workspace/types.d.ts.map +1 -0
  135. package/esm/src/server/workspace/types.js +1 -0
  136. package/esm/src/server/workspace/verify.d.ts +52 -0
  137. package/esm/src/server/workspace/verify.d.ts.map +1 -0
  138. package/esm/src/server/workspace/verify.js +449 -0
  139. package/esm/src/server.d.ts +0 -3
  140. package/esm/src/server.d.ts.map +1 -1
  141. package/esm/src/server.js +324 -6732
  142. package/esm/src/server_isograph_environment.d.ts +12 -1
  143. package/esm/src/server_isograph_environment.d.ts.map +1 -1
  144. package/esm/src/server_legacy_api_routes.d.ts +137 -0
  145. package/esm/src/server_legacy_api_routes.d.ts.map +1 -0
  146. package/esm/src/server_legacy_api_routes.js +629 -0
  147. package/esm/src/server_openresponses.d.ts +6 -0
  148. package/esm/src/server_openresponses.d.ts.map +1 -0
  149. package/esm/src/server_openresponses.js +687 -0
  150. package/esm/src/server_session_store.d.ts +4 -0
  151. package/esm/src/server_session_store.d.ts.map +1 -1
  152. package/esm/src/server_session_store.js +196 -1
  153. package/esm/src/server_simulator_ui.d.ts +27 -0
  154. package/esm/src/server_simulator_ui.d.ts.map +1 -0
  155. package/esm/src/server_simulator_ui.js +501 -0
  156. package/esm/src/server_types.d.ts +22 -0
  157. package/esm/src/server_types.d.ts.map +1 -1
  158. package/esm/src/server_workspace_decks.d.ts +31 -0
  159. package/esm/src/server_workspace_decks.d.ts.map +1 -0
  160. package/esm/src/server_workspace_decks.js +98 -0
  161. package/esm/src/server_workspace_graphql.d.ts +17 -0
  162. package/esm/src/server_workspace_graphql.d.ts.map +1 -0
  163. package/esm/src/server_workspace_graphql.js +52 -0
  164. package/esm/src/server_workspace_runtime.d.ts +55 -0
  165. package/esm/src/server_workspace_runtime.d.ts.map +1 -0
  166. package/esm/src/server_workspace_runtime.js +358 -0
  167. package/esm/src/simulator_graphql.d.ts +14 -1
  168. package/esm/src/simulator_graphql.d.ts.map +1 -1
  169. package/esm/src/simulator_graphql.js +77 -0
  170. package/package.json +1 -1
  171. package/script/gambit/simulator-ui/dist/bundle.js +2435 -620
  172. package/script/gambit/simulator-ui/dist/bundle.js.map +4 -4
  173. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/entrypoint.d.ts +7 -0
  174. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/entrypoint.d.ts.map +1 -0
  175. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/entrypoint.js +27 -0
  176. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/normalization_ast.d.ts +4 -0
  177. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/normalization_ast.d.ts.map +1 -0
  178. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/normalization_ast.js +458 -0
  179. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/output_type.d.ts +3 -0
  180. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/output_type.d.ts.map +1 -0
  181. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/output_type.js +2 -0
  182. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/param_type.d.ts +110 -0
  183. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/param_type.d.ts.map +1 -0
  184. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/param_type.js +2 -0
  185. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/parameters_type.d.ts +10 -0
  186. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/parameters_type.d.ts.map +1 -0
  187. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/parameters_type.js +2 -0
  188. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/query_text.d.ts +3 -0
  189. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/query_text.d.ts.map +1 -0
  190. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/query_text.js +98 -0
  191. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/raw_response_type.d.ts +91 -0
  192. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/raw_response_type.d.ts.map +1 -0
  193. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/raw_response_type.js +2 -0
  194. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/resolver_reader.d.ts +6 -0
  195. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/resolver_reader.d.ts.map +1 -0
  196. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceFeedbackSave/resolver_reader.js +615 -0
  197. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/normalization_ast.d.ts.map +1 -1
  198. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/normalization_ast.js +86 -0
  199. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/param_type.d.ts +18 -0
  200. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/param_type.d.ts.map +1 -1
  201. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/query_text.d.ts +1 -1
  202. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/query_text.d.ts.map +1 -1
  203. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/query_text.js +18 -0
  204. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/raw_response_type.d.ts +18 -0
  205. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/raw_response_type.d.ts.map +1 -1
  206. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/resolver_reader.d.ts.map +1 -1
  207. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunSend/resolver_reader.js +120 -0
  208. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/normalization_ast.d.ts.map +1 -1
  209. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/normalization_ast.js +43 -0
  210. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/param_type.d.ts +9 -0
  211. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/param_type.d.ts.map +1 -1
  212. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/query_text.d.ts +1 -1
  213. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/query_text.d.ts.map +1 -1
  214. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/query_text.js +9 -0
  215. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/raw_response_type.d.ts +9 -0
  216. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/raw_response_type.d.ts.map +1 -1
  217. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/resolver_reader.d.ts.map +1 -1
  218. package/script/simulator-ui/__generated__/__isograph/Mutation/GambitWorkspaceScenarioRunStart/resolver_reader.js +60 -0
  219. package/script/simulator-ui/__generated__/__isograph/Query/EntrypointSimulatorTestPage/normalization_ast.d.ts.map +1 -1
  220. package/script/simulator-ui/__generated__/__isograph/Query/EntrypointSimulatorTestPage/normalization_ast.js +43 -0
  221. package/script/simulator-ui/__generated__/__isograph/Query/EntrypointSimulatorTestPage/query_text.d.ts +1 -1
  222. package/script/simulator-ui/__generated__/__isograph/Query/EntrypointSimulatorTestPage/query_text.d.ts.map +1 -1
  223. package/script/simulator-ui/__generated__/__isograph/Query/EntrypointSimulatorTestPage/query_text.js +9 -0
  224. package/script/simulator-ui/__generated__/__isograph/Query/EntrypointSimulatorTestPage/raw_response_type.d.ts +9 -0
  225. package/script/simulator-ui/__generated__/__isograph/Query/EntrypointSimulatorTestPage/raw_response_type.d.ts.map +1 -1
  226. package/script/simulator-ui/__generated__/__isograph/Workspace/TestTab/param_type.d.ts +9 -0
  227. package/script/simulator-ui/__generated__/__isograph/Workspace/TestTab/param_type.d.ts.map +1 -1
  228. package/script/simulator-ui/__generated__/__isograph/Workspace/TestTab/resolver_reader.d.ts.map +1 -1
  229. package/script/simulator-ui/__generated__/__isograph/Workspace/TestTab/resolver_reader.js +60 -0
  230. package/script/simulator-ui/__generated__/__isograph/iso.d.ts +4 -0
  231. package/script/simulator-ui/__generated__/__isograph/iso.d.ts.map +1 -1
  232. package/script/simulator-ui/__generated__/__isograph/iso.js +45 -42
  233. package/script/simulator-ui/__generated__/builtRoutes.d.ts +2 -0
  234. package/script/simulator-ui/__generated__/builtRoutes.d.ts.map +1 -1
  235. package/script/simulator-ui/__generated__/builtRoutes.js +18 -15
  236. package/script/simulator-ui/isograph/components/Query/SimulatorTestPage.d.ts.map +1 -1
  237. package/script/simulator-ui/isograph/components/Query/SimulatorTestPage.js +141 -4
  238. package/script/simulator-ui/isograph/entrypoints/EntrypointSimulatorWorkspaceShell.d.ts.map +1 -1
  239. package/script/simulator-ui/isograph/entrypoints/EntrypointSimulatorWorkspaceShell.js +3 -1
  240. package/script/simulator-ui/mutations/GambitWorkspaceFeedbackSave.d.ts +93 -0
  241. package/script/simulator-ui/mutations/GambitWorkspaceFeedbackSave.d.ts.map +1 -0
  242. package/script/simulator-ui/mutations/GambitWorkspaceFeedbackSave.js +104 -0
  243. package/script/simulator-ui/mutations/GambitWorkspaceFeedbackSaveMutation.d.ts +93 -0
  244. package/script/simulator-ui/mutations/GambitWorkspaceFeedbackSaveMutation.d.ts.map +1 -0
  245. package/script/simulator-ui/mutations/GambitWorkspaceFeedbackSaveMutation.js +13 -0
  246. package/script/simulator-ui/mutations/GambitWorkspaceScenarioRunSend.d.ts +18 -0
  247. package/script/simulator-ui/mutations/GambitWorkspaceScenarioRunSend.d.ts.map +1 -1
  248. package/script/simulator-ui/mutations/GambitWorkspaceScenarioRunSend.js +18 -0
  249. package/script/simulator-ui/mutations/GambitWorkspaceScenarioRunSendMutation.d.ts +18 -0
  250. package/script/simulator-ui/mutations/GambitWorkspaceScenarioRunSendMutation.d.ts.map +1 -1
  251. package/script/simulator-ui/mutations/GambitWorkspaceScenarioRunStart.d.ts +9 -0
  252. package/script/simulator-ui/mutations/GambitWorkspaceScenarioRunStart.d.ts.map +1 -1
  253. package/script/simulator-ui/mutations/GambitWorkspaceScenarioRunStart.js +9 -0
  254. package/script/simulator-ui/mutations/GambitWorkspaceScenarioRunStartMutation.d.ts +9 -0
  255. package/script/simulator-ui/mutations/GambitWorkspaceScenarioRunStartMutation.d.ts.map +1 -1
  256. package/script/simulator-ui/src/AppIsoMinimal.d.ts +3 -0
  257. package/script/simulator-ui/src/AppIsoMinimal.d.ts.map +1 -1
  258. package/script/simulator-ui/src/AppIsoMinimal.js +7 -4
  259. package/script/simulator-ui/src/AppShell.d.ts.map +1 -1
  260. package/script/simulator-ui/src/AppShell.js +1 -1
  261. package/script/simulator-ui/src/MinimalRouterRoot.js +4 -2
  262. package/script/simulator-ui/src/RouterContext.d.ts.map +1 -1
  263. package/script/simulator-ui/src/RouterContext.js +6 -2
  264. package/script/simulator-ui/src/shared.d.ts.map +1 -1
  265. package/script/simulator-ui/src/shared.js +3 -3
  266. package/script/src/server/request_handler.d.ts +210 -0
  267. package/script/src/server/request_handler.d.ts.map +1 -0
  268. package/script/src/server/request_handler.js +453 -0
  269. package/script/src/server/workspace/build.d.ts +57 -0
  270. package/script/src/server/workspace/build.d.ts.map +1 -0
  271. package/script/src/server/workspace/build.js +381 -0
  272. package/script/src/server/workspace/conversation_sessions.d.ts +83 -0
  273. package/script/src/server/workspace/conversation_sessions.d.ts.map +1 -0
  274. package/script/src/server/workspace/conversation_sessions.js +167 -0
  275. package/script/src/server/workspace/grading.d.ts +52 -0
  276. package/script/src/server/workspace/grading.d.ts.map +1 -0
  277. package/script/src/server/workspace/grading.js +492 -0
  278. package/script/src/server/workspace/helpers.d.ts +46 -0
  279. package/script/src/server/workspace/helpers.d.ts.map +1 -0
  280. package/script/src/server/workspace/helpers.js +353 -0
  281. package/script/src/server/workspace/read_model.d.ts +35 -0
  282. package/script/src/server/workspace/read_model.d.ts.map +1 -0
  283. package/script/src/server/workspace/read_model.js +125 -0
  284. package/script/src/server/workspace/response_events.d.ts +28 -0
  285. package/script/src/server/workspace/response_events.d.ts.map +1 -0
  286. package/script/src/server/workspace/response_events.js +182 -0
  287. package/script/src/server/workspace/run_deck.d.ts +23 -0
  288. package/script/src/server/workspace/run_deck.d.ts.map +1 -0
  289. package/script/src/server/workspace/run_deck.js +84 -0
  290. package/script/src/server/workspace/scenario_history.d.ts +8 -0
  291. package/script/src/server/workspace/scenario_history.d.ts.map +1 -0
  292. package/script/src/server/workspace/scenario_history.js +310 -0
  293. package/script/src/server/workspace/scenarios.d.ts +93 -0
  294. package/script/src/server/workspace/scenarios.d.ts.map +1 -0
  295. package/script/src/server/workspace/scenarios.js +1089 -0
  296. package/script/src/server/workspace/schema.d.ts +35 -0
  297. package/script/src/server/workspace/schema.d.ts.map +1 -0
  298. package/script/src/server/workspace/schema.js +478 -0
  299. package/script/src/server/workspace/sessions.d.ts +38 -0
  300. package/script/src/server/workspace/sessions.d.ts.map +1 -0
  301. package/script/src/server/workspace/sessions.js +269 -0
  302. package/script/src/server/workspace/types.d.ts +128 -0
  303. package/script/src/server/workspace/types.d.ts.map +1 -0
  304. package/script/src/server/workspace/types.js +2 -0
  305. package/script/src/server/workspace/verify.d.ts +52 -0
  306. package/script/src/server/workspace/verify.d.ts.map +1 -0
  307. package/script/src/server/workspace/verify.js +453 -0
  308. package/script/src/server.d.ts +0 -3
  309. package/script/src/server.d.ts.map +1 -1
  310. package/script/src/server.js +391 -6799
  311. package/script/src/server_isograph_environment.d.ts +12 -1
  312. package/script/src/server_isograph_environment.d.ts.map +1 -1
  313. package/script/src/server_legacy_api_routes.d.ts +137 -0
  314. package/script/src/server_legacy_api_routes.d.ts.map +1 -0
  315. package/script/src/server_legacy_api_routes.js +666 -0
  316. package/script/src/server_openresponses.d.ts +6 -0
  317. package/script/src/server_openresponses.d.ts.map +1 -0
  318. package/script/src/server_openresponses.js +690 -0
  319. package/script/src/server_session_store.d.ts +4 -0
  320. package/script/src/server_session_store.d.ts.map +1 -1
  321. package/script/src/server_session_store.js +196 -1
  322. package/script/src/server_simulator_ui.d.ts +27 -0
  323. package/script/src/server_simulator_ui.d.ts.map +1 -0
  324. package/script/src/server_simulator_ui.js +544 -0
  325. package/script/src/server_types.d.ts +22 -0
  326. package/script/src/server_types.d.ts.map +1 -1
  327. package/script/src/server_workspace_decks.d.ts +31 -0
  328. package/script/src/server_workspace_decks.d.ts.map +1 -0
  329. package/script/src/server_workspace_decks.js +142 -0
  330. package/script/src/server_workspace_graphql.d.ts +17 -0
  331. package/script/src/server_workspace_graphql.d.ts.map +1 -0
  332. package/script/src/server_workspace_graphql.js +56 -0
  333. package/script/src/server_workspace_runtime.d.ts +55 -0
  334. package/script/src/server_workspace_runtime.d.ts.map +1 -0
  335. package/script/src/server_workspace_runtime.js +395 -0
  336. package/script/src/simulator_graphql.d.ts +14 -1
  337. package/script/src/simulator_graphql.d.ts.map +1 -1
  338. package/script/src/simulator_graphql.js +77 -0
@@ -0,0 +1,377 @@
1
+ import { isRunCanceledError, runDeck } from "@bolt-foundry/gambit-core";
2
+ import { buildTestBotSnapshot } from "./helpers.js";
3
+ import { resolveWorkerSandboxForSignalAwareRun } from "./run_deck.js";
4
+ export const createWorkspaceBuildService = (deps) => {
5
+ const buildBotRuns = new Map();
6
+ const ensureWorkspaceStateForBuild = (workspaceId) => {
7
+ const state = deps.readSessionStateStrict(workspaceId, {
8
+ withTraces: true,
9
+ });
10
+ if (!state) {
11
+ throw new Error("Workspace not found");
12
+ }
13
+ return state;
14
+ };
15
+ const buildAuthorityMeta = (sessionState, workspaceId) => {
16
+ const sessionMeta = sessionState.meta && typeof sessionState.meta === "object"
17
+ ? sessionState.meta
18
+ : {};
19
+ const next = { workspaceId };
20
+ for (const key of [
21
+ "sessionId",
22
+ "sessionDir",
23
+ "sessionStatePath",
24
+ "sessionEventsPath",
25
+ "sessionBuildStatePath",
26
+ "sessionSqlitePath",
27
+ "workspaceSchemaVersion",
28
+ ]) {
29
+ const value = sessionMeta[key];
30
+ if (typeof value === "string" && value.trim().length > 0) {
31
+ next[key] = value;
32
+ }
33
+ }
34
+ return next;
35
+ };
36
+ const normalizeBuildAuthorityState = (args) => ({
37
+ ...args.state,
38
+ runId: args.runId,
39
+ meta: {
40
+ ...(args.state.meta ?? {}),
41
+ ...buildAuthorityMeta(args.sessionState, args.workspaceId),
42
+ },
43
+ });
44
+ const broadcastBuild = (workspaceId, payload) => {
45
+ const state = deps.readSessionState(workspaceId);
46
+ if (state) {
47
+ deps.appendWorkspaceEnvelope(state, "build", payload);
48
+ }
49
+ deps.appendDurableStreamEvent(deps.workspaceStreamId, payload);
50
+ };
51
+ const buildRunFromProjection = (workspaceId) => {
52
+ const projection = deps.readBuildState(workspaceId);
53
+ const run = projection?.run;
54
+ if (!run) {
55
+ return {
56
+ id: workspaceId,
57
+ status: "idle",
58
+ messages: [],
59
+ traces: [],
60
+ toolInserts: [],
61
+ };
62
+ }
63
+ return {
64
+ id: run.id || workspaceId,
65
+ status: run.status,
66
+ error: run.error,
67
+ startedAt: run.startedAt,
68
+ finishedAt: run.finishedAt,
69
+ messages: Array.isArray(run.messages) ? run.messages : [],
70
+ traces: Array.isArray(run.traces) ? run.traces : [],
71
+ toolInserts: Array.isArray(run.toolInserts) ? run.toolInserts : [],
72
+ };
73
+ };
74
+ const readWorkspaceBuildRunForGraphql = (workspaceId) => {
75
+ const active = buildBotRuns.get(workspaceId)?.run;
76
+ if (active) {
77
+ return {
78
+ ...active,
79
+ messages: Array.isArray(active.messages) ? [...active.messages] : [],
80
+ traces: Array.isArray(active.traces) ? [...active.traces] : [],
81
+ toolInserts: Array.isArray(active.toolInserts)
82
+ ? [...active.toolInserts]
83
+ : [],
84
+ };
85
+ }
86
+ return buildRunFromProjection(workspaceId);
87
+ };
88
+ const startWorkspaceBuildRun = (args) => {
89
+ const workspaceId = args.workspaceId;
90
+ const active = buildBotRuns.get(workspaceId);
91
+ if (active?.run.status === "running") {
92
+ throw new Error("Build run already in progress for this workspace.");
93
+ }
94
+ const sessionState = ensureWorkspaceStateForBuild(workspaceId);
95
+ const projection = deps.readBuildState(workspaceId);
96
+ const seedRun = projection?.run;
97
+ const runId = seedRun?.id && seedRun.id.trim().length > 0
98
+ ? seedRun.id
99
+ : deps.randomId("build");
100
+ const seededMessages = (() => {
101
+ if (projection?.state?.messages && Array.isArray(projection.state.messages)) {
102
+ return projection.state.messages;
103
+ }
104
+ return Array.isArray(seedRun?.messages)
105
+ ? seedRun.messages.map((message) => {
106
+ const role = message.role === "assistant" || message.role === "system" ||
107
+ message.role === "tool"
108
+ ? message.role
109
+ : "user";
110
+ return {
111
+ role,
112
+ content: message.content,
113
+ };
114
+ })
115
+ : [];
116
+ })();
117
+ const seedState = normalizeBuildAuthorityState({
118
+ state: projection?.state && typeof projection.state === "object"
119
+ ? projection.state
120
+ : {
121
+ runId,
122
+ messages: seededMessages,
123
+ messageRefs: [],
124
+ traces: Array.isArray(seedRun?.traces) ? [...seedRun.traces] : [],
125
+ items: [],
126
+ meta: {},
127
+ },
128
+ workspaceId,
129
+ runId,
130
+ sessionState,
131
+ });
132
+ const trimmedMessage = args.message.trim();
133
+ const run = {
134
+ id: runId,
135
+ status: "running",
136
+ startedAt: new Date().toISOString(),
137
+ error: undefined,
138
+ finishedAt: undefined,
139
+ messages: Array.isArray(seedRun?.messages) ? [...seedRun.messages] : [],
140
+ traces: Array.isArray(seedRun?.traces) ? [...seedRun.traces] : [],
141
+ toolInserts: Array.isArray(seedRun?.toolInserts)
142
+ ? [...seedRun.toolInserts]
143
+ : [],
144
+ };
145
+ if (trimmedMessage.length > 0) {
146
+ run.messages = [
147
+ ...run.messages,
148
+ { role: "user", content: trimmedMessage, messageSource: "manual" },
149
+ ];
150
+ deps.persistCanonicalUserInputEvent({
151
+ state: sessionState,
152
+ runId,
153
+ message: trimmedMessage,
154
+ source: "build",
155
+ });
156
+ }
157
+ const controller = new AbortController();
158
+ const entry = {
159
+ run,
160
+ state: seedState,
161
+ promise: null,
162
+ abort: controller,
163
+ };
164
+ buildBotRuns.set(workspaceId, entry);
165
+ const onStateUpdate = (next) => {
166
+ const buildState = normalizeBuildAuthorityState({
167
+ state: next,
168
+ workspaceId,
169
+ runId,
170
+ sessionState,
171
+ });
172
+ deps.persistOpenResponsesTracesFromState(buildState, runId);
173
+ entry.state = buildState;
174
+ const snapshot = buildTestBotSnapshot(buildState);
175
+ run.messages = snapshot.messages;
176
+ run.toolInserts = snapshot.toolInserts;
177
+ const nextTraces = Array.isArray(buildState.traces)
178
+ ? [...buildState.traces]
179
+ : [];
180
+ if (nextTraces.length > 0) {
181
+ run.traces = nextTraces;
182
+ }
183
+ else if (!Array.isArray(run.traces)) {
184
+ run.traces = [];
185
+ }
186
+ broadcastBuild(workspaceId, {
187
+ type: "buildBotStatus",
188
+ workspaceId,
189
+ run,
190
+ state: buildState,
191
+ });
192
+ };
193
+ const tracer = (trace) => {
194
+ const event = trace.ts ? trace : { ...trace, ts: Date.now() };
195
+ const currentTraces = Array.isArray(run.traces) ? run.traces : [];
196
+ run.traces = [...currentTraces, event];
197
+ deps.persistOpenResponsesTraceEvent(entry.state, event, runId);
198
+ broadcastBuild(workspaceId, {
199
+ type: "buildBotTrace",
200
+ workspaceId,
201
+ runId,
202
+ event,
203
+ });
204
+ };
205
+ const turn = run.messages.filter((message) => message.role === "user")
206
+ .length;
207
+ let hasStartedAssistantStreamMessage = false;
208
+ entry.promise = (async () => {
209
+ try {
210
+ broadcastBuild(workspaceId, {
211
+ type: "buildBotStatus",
212
+ workspaceId,
213
+ run,
214
+ state: entry.state ?? undefined,
215
+ });
216
+ await runDeck({
217
+ path: deps.buildAssistantDeckPath,
218
+ input: deps.initialContext,
219
+ inputProvided: deps.hasInitialContext,
220
+ modelProvider: deps.modelProvider,
221
+ defaultModel: deps.model,
222
+ modelOverride: deps.modelForce ??
223
+ (!deps.model && args.buildChatProvider
224
+ ? `${args.buildChatProvider}/default`
225
+ : undefined),
226
+ trace: tracer,
227
+ stream: true,
228
+ runId,
229
+ state: entry.state ?? undefined,
230
+ allowRootStringInput: true,
231
+ initialUserMessage: trimmedMessage.length > 0 ? trimmedMessage : "",
232
+ responsesMode: deps.responsesMode,
233
+ workerSandbox: resolveWorkerSandboxForSignalAwareRun({
234
+ workerSandbox: deps.workerSandbox,
235
+ signal: controller.signal,
236
+ }),
237
+ signal: controller.signal,
238
+ onStateUpdate,
239
+ onStreamText: (chunk) => {
240
+ if (typeof chunk === "string" && chunk.length > 0) {
241
+ if (!hasStartedAssistantStreamMessage) {
242
+ run.messages = [
243
+ ...run.messages,
244
+ {
245
+ role: "assistant",
246
+ content: chunk,
247
+ },
248
+ ];
249
+ hasStartedAssistantStreamMessage = true;
250
+ }
251
+ else {
252
+ const last = run.messages[run.messages.length - 1];
253
+ if (last?.role === "assistant") {
254
+ last.content += chunk;
255
+ }
256
+ else {
257
+ run.messages = [
258
+ ...run.messages,
259
+ {
260
+ role: "assistant",
261
+ content: chunk,
262
+ },
263
+ ];
264
+ }
265
+ }
266
+ }
267
+ broadcastBuild(workspaceId, {
268
+ type: "buildBotStream",
269
+ workspaceId,
270
+ runId,
271
+ role: "assistant",
272
+ chunk,
273
+ turn,
274
+ ts: Date.now(),
275
+ });
276
+ },
277
+ });
278
+ broadcastBuild(workspaceId, {
279
+ type: "buildBotStreamEnd",
280
+ workspaceId,
281
+ runId,
282
+ role: "assistant",
283
+ turn,
284
+ ts: Date.now(),
285
+ });
286
+ run.status = controller.signal.aborted ? "canceled" : "completed";
287
+ run.error = undefined;
288
+ }
289
+ catch (err) {
290
+ if (controller.signal.aborted || isRunCanceledError(err)) {
291
+ run.status = "canceled";
292
+ run.error = undefined;
293
+ }
294
+ else {
295
+ run.status = "error";
296
+ run.error = err instanceof Error ? err.message : String(err);
297
+ }
298
+ }
299
+ finally {
300
+ run.finishedAt = new Date().toISOString();
301
+ entry.abort = null;
302
+ entry.promise = null;
303
+ broadcastBuild(workspaceId, {
304
+ type: "buildBotStatus",
305
+ workspaceId,
306
+ run,
307
+ state: entry.state ?? undefined,
308
+ });
309
+ }
310
+ })();
311
+ return run;
312
+ };
313
+ const stopWorkspaceBuildRun = async (args) => {
314
+ const active = buildBotRuns.get(args.workspaceId);
315
+ if (!active || active.run.id !== args.runId) {
316
+ return buildRunFromProjection(args.workspaceId);
317
+ }
318
+ active.abort?.abort();
319
+ try {
320
+ await active.promise;
321
+ }
322
+ catch {
323
+ // Abort path can reject internally; projection is still authoritative.
324
+ }
325
+ return buildRunFromProjection(args.workspaceId);
326
+ };
327
+ const resetWorkspaceBuild = async (workspaceId) => {
328
+ const active = buildBotRuns.get(workspaceId);
329
+ active?.abort?.abort();
330
+ try {
331
+ await active?.promise;
332
+ }
333
+ catch {
334
+ // Ignore aborted in-flight run.
335
+ }
336
+ const run = {
337
+ id: deps.randomId("build"),
338
+ status: "idle",
339
+ messages: [],
340
+ traces: [],
341
+ toolInserts: [],
342
+ };
343
+ const sessionState = ensureWorkspaceStateForBuild(workspaceId);
344
+ const reset = normalizeBuildAuthorityState({
345
+ state: {
346
+ runId: run.id,
347
+ messages: [],
348
+ messageRefs: [],
349
+ traces: [],
350
+ items: [],
351
+ },
352
+ workspaceId,
353
+ runId: run.id,
354
+ sessionState,
355
+ });
356
+ deps.appendWorkspaceEnvelope(sessionState, "build", {
357
+ type: "buildBotStatus",
358
+ workspaceId,
359
+ run,
360
+ state: reset,
361
+ });
362
+ deps.appendDurableStreamEvent(deps.workspaceStreamId, {
363
+ type: "buildBotStatus",
364
+ workspaceId,
365
+ run,
366
+ });
367
+ return buildRunFromProjection(workspaceId);
368
+ };
369
+ return {
370
+ startWorkspaceBuildRun,
371
+ stopWorkspaceBuildRun,
372
+ resetWorkspaceBuild,
373
+ readWorkspaceBuildRunForGraphql,
374
+ buildRunFromProjection,
375
+ getLiveBuildRunEntry: (workspaceId) => buildBotRuns.get(workspaceId),
376
+ };
377
+ };
@@ -0,0 +1,83 @@
1
+ import type { BuildBotRunStatus, TestBotRunStatus, WorkspaceConversationSessionKindForGraphql, WorkspaceConversationSessionRecordForGraphql, WorkspaceGradeRunForGraphql, WorkspaceVerifyBatchRecordForGraphql } from "./types.js";
2
+ export declare const createWorkspaceConversationSessionService: (deps: {
3
+ readWorkspaceBuildRunForGraphql: (workspaceId: string) => BuildBotRunStatus;
4
+ startWorkspaceBuildRun: (args: {
5
+ workspaceId: string;
6
+ message: string;
7
+ }) => BuildBotRunStatus;
8
+ stopWorkspaceBuildRun: (args: {
9
+ workspaceId: string;
10
+ runId: string;
11
+ }) => Promise<BuildBotRunStatus>;
12
+ startWorkspaceScenarioRunForGraphql: (args: {
13
+ workspaceId: string;
14
+ runId?: string;
15
+ scenarioDeckId?: string | null;
16
+ scenarioInput?: unknown;
17
+ assistantInit?: unknown;
18
+ }) => Promise<TestBotRunStatus>;
19
+ sendWorkspaceScenarioRunForGraphql: (args: {
20
+ workspaceId: string;
21
+ runId: string;
22
+ message: string;
23
+ }) => Promise<TestBotRunStatus>;
24
+ stopWorkspaceScenarioRunForGraphql: (args: {
25
+ workspaceId: string;
26
+ runId: string;
27
+ }) => Promise<TestBotRunStatus>;
28
+ readWorkspaceScenarioRunsForGraphql: (workspaceId: string) => Array<TestBotRunStatus>;
29
+ readWorkspaceGradeRunsForGraphql: (workspaceId: string) => Array<WorkspaceGradeRunForGraphql>;
30
+ createWorkspaceGradeRunForGraphql: (args: {
31
+ workspaceId: string;
32
+ graderId: string;
33
+ scenarioRunId?: string | null;
34
+ }) => Promise<WorkspaceGradeRunForGraphql>;
35
+ readWorkspaceVerifyBatchesForGraphql: (workspaceId: string) => Array<WorkspaceVerifyBatchRecordForGraphql>;
36
+ createWorkspaceVerifyBatchRunForGraphql: (args: {
37
+ workspaceId: string;
38
+ scenarioDeckId?: string | null;
39
+ graderId: string;
40
+ scenarioRuns: number;
41
+ graderRepeatsPerScenario: number;
42
+ concurrency: number;
43
+ }) => Promise<WorkspaceVerifyBatchRecordForGraphql>;
44
+ defaultVerifyScenarioRuns: number;
45
+ defaultVerifyGraderRepeats: number;
46
+ defaultVerifyConcurrency: number;
47
+ }) => {
48
+ listWorkspaceConversationSessionsForGraphql: (args: {
49
+ workspaceId: string;
50
+ kind?: WorkspaceConversationSessionKindForGraphql | null;
51
+ }) => Promise<Array<WorkspaceConversationSessionRecordForGraphql>>;
52
+ readWorkspaceConversationSessionForGraphql: (args: {
53
+ workspaceId: string;
54
+ kind: WorkspaceConversationSessionKindForGraphql;
55
+ sessionId: string;
56
+ }) => Promise<WorkspaceConversationSessionRecordForGraphql | null>;
57
+ startWorkspaceConversationSessionForGraphql: (args: {
58
+ workspaceId: string;
59
+ kind: WorkspaceConversationSessionKindForGraphql;
60
+ sessionId?: string | null;
61
+ message?: string | null;
62
+ scenarioDeckId?: string | null;
63
+ scenarioInput?: unknown;
64
+ assistantInit?: unknown;
65
+ graderId?: string | null;
66
+ scenarioRunId?: string | null;
67
+ scenarioRuns?: number | null;
68
+ graderRepeatsPerScenario?: number | null;
69
+ concurrency?: number | null;
70
+ }) => Promise<WorkspaceConversationSessionRecordForGraphql>;
71
+ sendWorkspaceConversationSessionForGraphql: (args: {
72
+ workspaceId: string;
73
+ kind: WorkspaceConversationSessionKindForGraphql;
74
+ sessionId: string;
75
+ message: string;
76
+ }) => Promise<WorkspaceConversationSessionRecordForGraphql>;
77
+ stopWorkspaceConversationSessionForGraphql: (args: {
78
+ workspaceId: string;
79
+ kind: WorkspaceConversationSessionKindForGraphql;
80
+ sessionId: string;
81
+ }) => Promise<WorkspaceConversationSessionRecordForGraphql>;
82
+ };
83
+ //# sourceMappingURL=conversation_sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation_sessions.d.ts","sourceRoot":"","sources":["../../../../src/src/server/workspace/conversation_sessions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,163 @@
1
+ const toBuildConversationSessionForGraphql = (workspaceId, run) => ({
2
+ sessionId: run.id,
3
+ workspaceId,
4
+ kind: "build",
5
+ status: run.status,
6
+ error: run.error,
7
+ startedAt: run.startedAt,
8
+ finishedAt: run.finishedAt,
9
+ buildRun: run,
10
+ });
11
+ const toScenarioConversationSessionForGraphql = (workspaceId, run) => ({
12
+ sessionId: run.id,
13
+ workspaceId,
14
+ kind: "scenario",
15
+ status: run.status,
16
+ error: run.error,
17
+ startedAt: run.startedAt,
18
+ finishedAt: run.finishedAt,
19
+ scenarioRun: run,
20
+ });
21
+ const toGraderConversationSessionForGraphql = (workspaceId, run) => ({
22
+ sessionId: run.id,
23
+ workspaceId,
24
+ kind: "grader",
25
+ status: run.status,
26
+ error: run.error,
27
+ startedAt: run.runAt,
28
+ finishedAt: run.runAt,
29
+ gradeRun: run,
30
+ });
31
+ const toVerifyConversationSessionForGraphql = (workspaceId, batch) => ({
32
+ sessionId: batch.id,
33
+ workspaceId,
34
+ kind: "verify",
35
+ status: batch.status,
36
+ startedAt: batch.startedAt,
37
+ finishedAt: batch.finishedAt,
38
+ verifyBatch: batch,
39
+ });
40
+ export const createWorkspaceConversationSessionService = (deps) => {
41
+ const listWorkspaceConversationSessionsForGraphql = (args) => {
42
+ const sessions = [];
43
+ if (!args.kind || args.kind === "build") {
44
+ sessions.push(toBuildConversationSessionForGraphql(args.workspaceId, deps.readWorkspaceBuildRunForGraphql(args.workspaceId)));
45
+ }
46
+ if (!args.kind || args.kind === "scenario") {
47
+ for (const run of deps.readWorkspaceScenarioRunsForGraphql(args.workspaceId)) {
48
+ sessions.push(toScenarioConversationSessionForGraphql(args.workspaceId, run));
49
+ }
50
+ }
51
+ if (!args.kind || args.kind === "grader") {
52
+ for (const run of deps.readWorkspaceGradeRunsForGraphql(args.workspaceId)) {
53
+ sessions.push(toGraderConversationSessionForGraphql(args.workspaceId, run));
54
+ }
55
+ }
56
+ if (!args.kind || args.kind === "verify") {
57
+ for (const batch of deps.readWorkspaceVerifyBatchesForGraphql(args.workspaceId)) {
58
+ sessions.push(toVerifyConversationSessionForGraphql(args.workspaceId, batch));
59
+ }
60
+ }
61
+ sessions.sort((left, right) => {
62
+ const leftKey = left.finishedAt ?? left.startedAt ?? left.sessionId;
63
+ const rightKey = right.finishedAt ?? right.startedAt ?? right.sessionId;
64
+ return rightKey.localeCompare(leftKey);
65
+ });
66
+ return Promise.resolve(sessions);
67
+ };
68
+ const readWorkspaceConversationSessionForGraphql = async (args) => {
69
+ const sessions = await listWorkspaceConversationSessionsForGraphql({
70
+ workspaceId: args.workspaceId,
71
+ kind: args.kind,
72
+ });
73
+ return sessions.find((session) => session.sessionId === args.sessionId) ??
74
+ null;
75
+ };
76
+ const startWorkspaceConversationSessionForGraphql = async (args) => {
77
+ if (args.kind === "build") {
78
+ const run = await deps.startWorkspaceBuildRun({
79
+ workspaceId: args.workspaceId,
80
+ message: args.message ?? "",
81
+ });
82
+ return toBuildConversationSessionForGraphql(args.workspaceId, run);
83
+ }
84
+ if (args.kind === "scenario") {
85
+ const run = await deps.startWorkspaceScenarioRunForGraphql({
86
+ workspaceId: args.workspaceId,
87
+ runId: args.sessionId ?? undefined,
88
+ scenarioDeckId: args.scenarioDeckId ?? null,
89
+ scenarioInput: args.scenarioInput,
90
+ assistantInit: args.assistantInit,
91
+ });
92
+ return toScenarioConversationSessionForGraphql(args.workspaceId, run);
93
+ }
94
+ if (args.kind === "grader") {
95
+ if (!args.graderId)
96
+ throw new Error("graderId is required");
97
+ const run = await deps.createWorkspaceGradeRunForGraphql({
98
+ workspaceId: args.workspaceId,
99
+ graderId: args.graderId,
100
+ scenarioRunId: args.scenarioRunId ?? null,
101
+ });
102
+ return toGraderConversationSessionForGraphql(args.workspaceId, run);
103
+ }
104
+ if (!args.graderId)
105
+ throw new Error("graderId is required");
106
+ const batch = await deps.createWorkspaceVerifyBatchRunForGraphql({
107
+ workspaceId: args.workspaceId,
108
+ scenarioDeckId: args.scenarioDeckId ?? null,
109
+ graderId: args.graderId,
110
+ scenarioRuns: args.scenarioRuns ?? deps.defaultVerifyScenarioRuns,
111
+ graderRepeatsPerScenario: args.graderRepeatsPerScenario ??
112
+ deps.defaultVerifyGraderRepeats,
113
+ concurrency: args.concurrency ?? deps.defaultVerifyConcurrency,
114
+ });
115
+ return toVerifyConversationSessionForGraphql(args.workspaceId, batch);
116
+ };
117
+ const sendWorkspaceConversationSessionForGraphql = async (args) => {
118
+ if (args.kind === "build") {
119
+ const run = await deps.startWorkspaceBuildRun({
120
+ workspaceId: args.workspaceId,
121
+ message: args.message,
122
+ });
123
+ return toBuildConversationSessionForGraphql(args.workspaceId, run);
124
+ }
125
+ if (args.kind !== "scenario") {
126
+ throw new Error(`Send is unavailable for ${args.kind} sessions`);
127
+ }
128
+ const run = await deps.sendWorkspaceScenarioRunForGraphql({
129
+ workspaceId: args.workspaceId,
130
+ runId: args.sessionId,
131
+ message: args.message,
132
+ });
133
+ return toScenarioConversationSessionForGraphql(args.workspaceId, run);
134
+ };
135
+ const stopWorkspaceConversationSessionForGraphql = async (args) => {
136
+ if (args.kind === "build") {
137
+ const run = await deps.stopWorkspaceBuildRun({
138
+ workspaceId: args.workspaceId,
139
+ runId: args.sessionId,
140
+ });
141
+ return toBuildConversationSessionForGraphql(args.workspaceId, run);
142
+ }
143
+ if (args.kind !== "scenario") {
144
+ const existing = await readWorkspaceConversationSessionForGraphql(args);
145
+ if (!existing) {
146
+ throw new Error(`Conversation session ${args.sessionId} not found`);
147
+ }
148
+ return existing;
149
+ }
150
+ const run = await deps.stopWorkspaceScenarioRunForGraphql({
151
+ workspaceId: args.workspaceId,
152
+ runId: args.sessionId,
153
+ });
154
+ return toScenarioConversationSessionForGraphql(args.workspaceId, run);
155
+ };
156
+ return {
157
+ listWorkspaceConversationSessionsForGraphql,
158
+ readWorkspaceConversationSessionForGraphql,
159
+ startWorkspaceConversationSessionForGraphql,
160
+ sendWorkspaceConversationSessionForGraphql,
161
+ stopWorkspaceConversationSessionForGraphql,
162
+ };
163
+ };
@@ -0,0 +1,52 @@
1
+ import type { ModelProvider, SavedState } from "@bolt-foundry/gambit-core";
2
+ import type { GradingFlag, WorkspaceDeckState } from "../../server_types.js";
3
+ import type { WorkspaceGradeRunForGraphql } from "./types.js";
4
+ export declare const createWorkspaceGradingService: (deps: {
5
+ randomId: (prefix: string) => string;
6
+ modelProvider: ModelProvider;
7
+ responsesMode?: boolean;
8
+ workerSandbox?: boolean;
9
+ appendDurableStreamEvent: (streamId: string, payload: unknown) => void;
10
+ workspaceStreamId: string;
11
+ activateWorkspaceDeck: (workspaceId?: string | null, options?: {
12
+ forceReload?: boolean;
13
+ source?: string;
14
+ reloadAttemptId?: string;
15
+ }) => Promise<void>;
16
+ readWorkspaceDeckStateStrict: (workspaceId: string) => WorkspaceDeckState;
17
+ resolveGraderDeckFromState: (deckState: WorkspaceDeckState, graderId: string) => WorkspaceDeckState["graderDecks"][number] | undefined;
18
+ readSessionState: (workspaceId: string) => SavedState | undefined;
19
+ readSessionStateStrict: (workspaceId: string, options?: {
20
+ withTraces?: boolean;
21
+ }) => SavedState | undefined;
22
+ persistSessionState: (state: SavedState) => SavedState;
23
+ appendGradingLog: (state: SavedState, payload: Record<string, unknown>) => void;
24
+ readWorkspaceScenarioRunsForGraphql: (workspaceId: string) => Array<{
25
+ id: string;
26
+ messages: Array<{
27
+ role: string;
28
+ content: string;
29
+ messageRefId?: string;
30
+ }>;
31
+ }>;
32
+ }) => {
33
+ readWorkspaceGradeRunsForGraphql: (workspaceId: string) => Array<WorkspaceGradeRunForGraphql>;
34
+ readWorkspaceGradingFlagsForGraphql: (workspaceId: string) => Array<GradingFlag>;
35
+ createWorkspaceGradeRunForGraphql: (args: {
36
+ workspaceId: string;
37
+ graderId: string;
38
+ scenarioRunId?: string | null;
39
+ }) => Promise<WorkspaceGradeRunForGraphql>;
40
+ toggleWorkspaceGradeFlagForGraphql: (args: {
41
+ workspaceId: string;
42
+ refId: string;
43
+ runId: string;
44
+ turnIndex?: number | null;
45
+ }) => Promise<Array<GradingFlag>>;
46
+ updateWorkspaceGradeFlagReasonForGraphql: (args: {
47
+ workspaceId: string;
48
+ refId: string;
49
+ reason: string;
50
+ }) => Promise<Array<GradingFlag>>;
51
+ };
52
+ //# sourceMappingURL=grading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grading.d.ts","sourceRoot":"","sources":["../../../../src/src/server/workspace/grading.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,KAAK,EACV,WAAW,EAEX,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAQ9D,eAAO,MAAM,6BAA6B,GAAI,MAAM;IAClD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wBAAwB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,CACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,EAC3B,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,KACE,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,4BAA4B,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,kBAAkB,CAAC;IAC1E,0BAA0B,EAAE,CAC1B,SAAS,EAAE,kBAAkB,EAC7B,QAAQ,EAAE,MAAM,KACb,kBAAkB,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IAC3D,gBAAgB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;IAClE,sBAAsB,EAAE,CACtB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,KAC/B,UAAU,GAAG,SAAS,CAAC;IAC5B,mBAAmB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU,CAAC;IACvD,gBAAgB,EAAE,CAChB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,IAAI,CAAC;IACV,mCAAmC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,KAAK,CAAC;QAClE,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,KAAK,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,YAAY,CAAC,EAAE,MAAM,CAAC;SACvB,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ;oDA2QgB,MAAM,KAClB,KAAK,CAAC,2BAA2B,CAAC;uDATtB,MAAM,KAClB,KAAK,CAAC,WAAW,CAAC;8CA2BkC;QACrD,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,KAAG,OAAO,CAAC,2BAA2B,CAAC;+CAmKU;QAChD,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,KAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;qDA0CyB;QACtD,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,KAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;CA2ChC,CAAC"}