@seriousgaming/sdk-tools 0.0.0-stage → 1.0.0-alpha.2

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 (391) hide show
  1. package/LICENSE +93 -0
  2. package/README.md +38 -2
  3. package/dist/bundling/logic-exports.d.ts +34 -0
  4. package/dist/bundling/node-builtins.d.ts +21 -0
  5. package/dist/bundling/transpiler.d.ts +7 -0
  6. package/dist/cli.js +27404 -0
  7. package/dist/client/dev-server.d.ts +59 -0
  8. package/dist/client/index.d.ts +28 -0
  9. package/dist/client/stub-services.d.ts +32 -0
  10. package/dist/client/test-session.d.ts +195 -0
  11. package/dist/client.js +16920 -0
  12. package/dist/core/asset-reference-translator.d.ts +46 -0
  13. package/dist/core/clock.d.ts +57 -0
  14. package/dist/core/faults.d.ts +65 -0
  15. package/dist/core/game-settings.d.ts +65 -0
  16. package/dist/core/history.d.ts +89 -0
  17. package/dist/core/listen-with-fallback.d.ts +30 -0
  18. package/dist/core/mutation-queue.d.ts +61 -0
  19. package/dist/core/package-scenario.d.ts +89 -0
  20. package/dist/core/participant-registry.d.ts +109 -0
  21. package/dist/core/pending-changes.d.ts +14 -0
  22. package/dist/core/protocol.d.ts +83 -0
  23. package/dist/core/scenario-drafts.d.ts +32 -0
  24. package/dist/core/session-endpoints.d.ts +108 -0
  25. package/dist/core/session-gates.d.ts +75 -0
  26. package/dist/core/session-host.d.ts +94 -0
  27. package/dist/core/session-refusals.d.ts +56 -0
  28. package/dist/core/session-rewind.d.ts +32 -0
  29. package/dist/core/session-roster.d.ts +128 -0
  30. package/dist/core/session-surfaces.d.ts +32 -0
  31. package/dist/core/session-ticks.d.ts +18 -0
  32. package/dist/core/session-timers.d.ts +84 -0
  33. package/dist/core/session-writes.d.ts +40 -0
  34. package/dist/core/session.d.ts +385 -0
  35. package/dist/core/settings-locks.d.ts +22 -0
  36. package/dist/core/team-names.d.ts +52 -0
  37. package/dist/core/team-state-store.d.ts +218 -0
  38. package/dist/core/tick-timer.d.ts +75 -0
  39. package/dist/dev/blob-links.d.ts +10 -0
  40. package/dist/dev/console/assets/index-DgFglsnA.js +204 -0
  41. package/dist/dev/console/index.html +12 -0
  42. package/dist/dev/console-path.d.ts +19 -0
  43. package/dist/dev/lockfile.d.ts +124 -0
  44. package/dist/dev/package-watcher.d.ts +21 -0
  45. package/dist/dev/routes.d.ts +67 -0
  46. package/dist/dev/shell.d.ts +260 -0
  47. package/dist/dev/surfaces.d.ts +41 -0
  48. package/dist/dev/tools-identity.d.ts +23 -0
  49. package/dist/dev/view/batch.d.ts +172 -0
  50. package/dist/dev/view/commands.d.ts +75 -0
  51. package/dist/dev/view/route.d.ts +58 -0
  52. package/dist/dev/view/view.d.ts +78 -0
  53. package/dist/dev/view/viewer.d.ts +32 -0
  54. package/dist/discovery/config.d.ts +9 -0
  55. package/dist/discovery/manifest-paths.d.ts +21 -0
  56. package/dist/discovery/removed-fields.d.ts +90 -0
  57. package/dist/docs/api/deck.md +386 -0
  58. package/dist/docs/api/index.md +67 -0
  59. package/dist/docs/api/sdk-commands.md +286 -0
  60. package/dist/docs/api/sdk-e2e.md +433 -0
  61. package/dist/docs/api/sdk-projection.md +207 -0
  62. package/dist/docs/api/sdk-testing.md +214 -0
  63. package/dist/docs/api/sdk-tools-client.md +560 -0
  64. package/dist/docs/api/sdk-ui-testing.md +231 -0
  65. package/dist/docs/api/sdk-ui.md +1269 -0
  66. package/dist/docs/api/sdk.md +2140 -0
  67. package/dist/docs/changelog-0.x.md +1156 -0
  68. package/dist/docs/changelog.md +241 -0
  69. package/dist/docs/cli-and-dev-server.md +217 -0
  70. package/dist/docs/cli-error-codes.md +156 -0
  71. package/dist/docs/cli-reference.md +2489 -0
  72. package/dist/docs/cli-simulation-testing.md +222 -0
  73. package/dist/docs/concepts/index.md +46 -0
  74. package/dist/docs/concepts/terminology.md +322 -0
  75. package/dist/docs/environment-variables.md +102 -0
  76. package/dist/docs/getting-started.md +145 -0
  77. package/dist/docs/guides/ai-facilitation.md +220 -0
  78. package/dist/docs/guides/capabilities.md +460 -0
  79. package/dist/docs/guides/endpoints.md +335 -0
  80. package/dist/docs/guides/engine-testing.md +477 -0
  81. package/dist/docs/guides/engine.md +527 -0
  82. package/dist/docs/guides/file-handling.md +405 -0
  83. package/dist/docs/guides/games.md +176 -0
  84. package/dist/docs/guides/global-settings.md +94 -0
  85. package/dist/docs/guides/guide.md +123 -0
  86. package/dist/docs/guides/hooks.md +183 -0
  87. package/dist/docs/guides/index.md +51 -0
  88. package/dist/docs/guides/internationalization.md +288 -0
  89. package/dist/docs/guides/llm-integration.md +635 -0
  90. package/dist/docs/guides/multi-team-games.md +586 -0
  91. package/dist/docs/guides/patterns.md +391 -0
  92. package/dist/docs/guides/presentation.md +196 -0
  93. package/dist/docs/guides/production-constraints.md +130 -0
  94. package/dist/docs/guides/scenario-editor.md +143 -0
  95. package/dist/docs/guides/scenarios.md +515 -0
  96. package/dist/docs/guides/session.md +972 -0
  97. package/dist/docs/guides/settings.md +458 -0
  98. package/dist/docs/guides/setup.md +193 -0
  99. package/dist/docs/guides/speech-generation.md +233 -0
  100. package/dist/docs/guides/starter-game.md +164 -0
  101. package/dist/docs/guides/testing.md +577 -0
  102. package/dist/docs/guides/tick-controller.md +569 -0
  103. package/dist/docs/guides/type-safety.md +516 -0
  104. package/dist/docs/guides/ui.md +1389 -0
  105. package/dist/docs/guides/upgrading.md +636 -0
  106. package/dist/docs/guides/validators.md +217 -0
  107. package/dist/docs/guides/waiting-room.md +244 -0
  108. package/dist/docs/index.md +41 -0
  109. package/dist/docs/recipes/act-on-the-session-from-an-endpoint.md +95 -0
  110. package/dist/docs/recipes/adapt-a-game-for-walkthroughs.md +133 -0
  111. package/dist/docs/recipes/adapt-ui-for-observers.md +74 -0
  112. package/dist/docs/recipes/call-endpoint-from-ui.md +109 -0
  113. package/dist/docs/recipes/check-a-package-from-a-script.md +117 -0
  114. package/dist/docs/recipes/create-capability.md +66 -0
  115. package/dist/docs/recipes/create-endpoint.md +127 -0
  116. package/dist/docs/recipes/create-engine.md +111 -0
  117. package/dist/docs/recipes/create-game.md +70 -0
  118. package/dist/docs/recipes/create-guide.md +75 -0
  119. package/dist/docs/recipes/create-hook.md +80 -0
  120. package/dist/docs/recipes/create-presentation.md +142 -0
  121. package/dist/docs/recipes/create-scenario-editor.md +102 -0
  122. package/dist/docs/recipes/create-scenario.md +98 -0
  123. package/dist/docs/recipes/create-session-ui.md +116 -0
  124. package/dist/docs/recipes/create-settings.md +88 -0
  125. package/dist/docs/recipes/create-setup.md +115 -0
  126. package/dist/docs/recipes/create-tick-controller.md +65 -0
  127. package/dist/docs/recipes/create-user-interface.md +96 -0
  128. package/dist/docs/recipes/create-validator.md +67 -0
  129. package/dist/docs/recipes/create-waiting-room-ui.md +109 -0
  130. package/dist/docs/recipes/declare-api-uses.md +67 -0
  131. package/dist/docs/recipes/design-state-for-concurrent-writes.md +96 -0
  132. package/dist/docs/recipes/distribute-package.md +80 -0
  133. package/dist/docs/recipes/e2e-testing.md +116 -0
  134. package/dist/docs/recipes/end-game-on-condition.md +154 -0
  135. package/dist/docs/recipes/fix-duplicate-packages.md +101 -0
  136. package/dist/docs/recipes/index.md +86 -0
  137. package/dist/docs/recipes/make-an-endpoint-external.md +101 -0
  138. package/dist/docs/recipes/negotiate-across-teams.md +164 -0
  139. package/dist/docs/recipes/observe-other-teams-state.md +119 -0
  140. package/dist/docs/recipes/publish-a-package.md +139 -0
  141. package/dist/docs/recipes/remember-a-viewers-choice.md +55 -0
  142. package/dist/docs/recipes/review-a-past-day.md +73 -0
  143. package/dist/docs/recipes/share-assets-across-scenarios.md +120 -0
  144. package/dist/docs/recipes/share-logic-between-engine-and-ui.md +130 -0
  145. package/dist/docs/recipes/show-all-teams-participants.md +109 -0
  146. package/dist/docs/recipes/start-from-an-empty-package.md +169 -0
  147. package/dist/docs/recipes/take-a-file-in-an-endpoint.md +82 -0
  148. package/dist/docs/recipes/test-a-multi-role-game.md +51 -0
  149. package/dist/docs/recipes/test-user-interface.md +95 -0
  150. package/dist/docs/recipes/test-with-engine.md +115 -0
  151. package/dist/docs/recipes/upload-and-display-files.md +148 -0
  152. package/dist/docs/recipes/use-request-play.md +65 -0
  153. package/dist/docs/recipes/use-request-tick.md +75 -0
  154. package/dist/docs/troubleshooting.md +816 -0
  155. package/dist/execution/blob-inputs.d.ts +57 -0
  156. package/dist/execution/bundle-reload.d.ts +42 -0
  157. package/dist/execution/config-resolver.d.ts +127 -0
  158. package/dist/execution/configuration-builder.d.ts +66 -0
  159. package/dist/execution/context-composition.d.ts +161 -0
  160. package/dist/execution/endpoint-actions.d.ts +9 -0
  161. package/dist/execution/endpoint-payloads.d.ts +32 -0
  162. package/dist/execution/endpoint-runner.d.ts +129 -0
  163. package/dist/execution/engine-state.d.ts +40 -0
  164. package/dist/execution/executor-callbacks.d.ts +56 -0
  165. package/dist/execution/executor.d.ts +436 -0
  166. package/dist/execution/gates.d.ts +45 -0
  167. package/dist/execution/hook-chain.d.ts +25 -0
  168. package/dist/execution/logic-calls.d.ts +190 -0
  169. package/dist/execution/logic-failure.d.ts +84 -0
  170. package/dist/execution/logic-loader.d.ts +54 -0
  171. package/dist/execution/logic-result.d.ts +76 -0
  172. package/dist/execution/tick-controller-call.d.ts +32 -0
  173. package/dist/execution/types.d.ts +48 -0
  174. package/dist/generation/ts-type.d.ts +39 -0
  175. package/dist/guide/locale.d.ts +12 -0
  176. package/dist/guide/video-registry.d.ts +42 -0
  177. package/dist/help-examples.d.ts +125 -0
  178. package/dist/host/adapter.d.ts +67 -0
  179. package/dist/host/host-channel.d.ts +222 -0
  180. package/dist/host/index.d.ts +20 -0
  181. package/dist/host/protocol.d.ts +783 -0
  182. package/dist/host/surfaces.d.ts +42 -0
  183. package/dist/host/theme.d.ts +55 -0
  184. package/dist/host.js +583 -0
  185. package/dist/prompts/index.d.ts +7 -0
  186. package/dist/prompts/schema-builder.d.ts +29 -0
  187. package/dist/prompts/types.d.ts +108 -0
  188. package/dist/prompts/validators.d.ts +32 -0
  189. package/dist/runtime/capability-scope.d.ts +6 -0
  190. package/dist/runtime/context-merge.d.ts +29 -0
  191. package/dist/runtime/context-projection.d.ts +41 -0
  192. package/dist/runtime/guarded-callbacks.d.ts +15 -0
  193. package/dist/runtime/index.d.ts +27 -0
  194. package/dist/runtime/manifest-version.d.ts +55 -0
  195. package/dist/runtime/tick-validation.d.ts +25 -0
  196. package/dist/runtime.js +346 -0
  197. package/dist/schema.json +1546 -0
  198. package/dist/server/vite-plugin.d.ts +46 -0
  199. package/dist/services/tts/client.d.ts +51 -0
  200. package/dist/services/tts/elevenlabs.d.ts +24 -0
  201. package/dist/services/tts/types.d.ts +44 -0
  202. package/dist/storage/asset-resolver.d.ts +49 -0
  203. package/dist/storage/blob-store.d.ts +41 -0
  204. package/dist/templates/endpoint/logic.test.ts.liquid +61 -0
  205. package/dist/templates/endpoint/logic.ts.liquid +25 -0
  206. package/dist/templates/engine/init.json.liquid +7 -0
  207. package/dist/templates/engine/logic-aggregate.test.ts.liquid +90 -0
  208. package/dist/templates/engine/logic-aggregate.ts.liquid +46 -0
  209. package/dist/templates/engine/logic.test.ts.liquid +61 -0
  210. package/dist/templates/engine/logic.ts.liquid +32 -0
  211. package/dist/templates/engine/run.json.liquid +7 -0
  212. package/dist/templates/guide/01-at-a-glance.md.liquid +19 -0
  213. package/dist/templates/guide/02-preparation.md.liquid +18 -0
  214. package/dist/templates/guide/03-running-the-session.md.liquid +37 -0
  215. package/dist/templates/hook/logic.test.ts.liquid +46 -0
  216. package/dist/templates/hook/logic.ts.liquid +12 -0
  217. package/dist/templates/package/CLAUDE.md.template +338 -0
  218. package/dist/templates/package/DESIGN.md.liquid +144 -0
  219. package/dist/templates/package/README.md.liquid +143 -0
  220. package/dist/templates/package/claude/rules/workflow-create-capability.md +26 -0
  221. package/dist/templates/package/claude/rules/workflow-create-endpoint.md +35 -0
  222. package/dist/templates/package/claude/rules/workflow-create-engine.md +35 -0
  223. package/dist/templates/package/claude/rules/workflow-create-guide.md +40 -0
  224. package/dist/templates/package/claude/rules/workflow-create-presentation.md +37 -0
  225. package/dist/templates/package/claude/rules/workflow-create-user-interface.md +31 -0
  226. package/dist/templates/package/claude/rules/workflow-publish-package.md +54 -0
  227. package/dist/templates/package/claude/rules/workflow-test-engine-or-ui.md +30 -0
  228. package/dist/templates/package/claude/rules/workflow-update-sdk-version.md +43 -0
  229. package/dist/templates/package/claude/settings.json.template +16 -0
  230. package/dist/templates/package/gitignore.template +15 -0
  231. package/dist/templates/package/global-setup.ts.template +21 -0
  232. package/dist/templates/package/globals.d.ts.template +2 -0
  233. package/dist/templates/package/oxfmtrc.json.template +14 -0
  234. package/dist/templates/package/oxlintrc.json.template +238 -0
  235. package/dist/templates/package/package.json.liquid +65 -0
  236. package/dist/templates/package/playwright.config.ts.liquid +19 -0
  237. package/dist/templates/package/pnpm-workspace.yaml.template +27 -0
  238. package/dist/templates/package/test-setup.ts.liquid +7 -0
  239. package/dist/templates/package/tsconfig.json.liquid +15 -0
  240. package/dist/templates/package/vite.config.ts.liquid +19 -0
  241. package/dist/templates/package/vitest.config.ts.liquid +25 -0
  242. package/dist/templates/package/vitest.engine.config.ts.liquid +12 -0
  243. package/dist/templates/presentation/index.html.liquid +20 -0
  244. package/dist/templates/presentation/src/App.tsx.liquid +49 -0
  245. package/dist/templates/presentation/src/Slides.tsx.liquid +81 -0
  246. package/dist/templates/presentation/src/i18n.ts.liquid +54 -0
  247. package/dist/templates/presentation/src/main.tsx.liquid +14 -0
  248. package/dist/templates/scenario_editor/src/App.test.tsx.liquid +30 -0
  249. package/dist/templates/scenario_editor/src/App.tsx.liquid +95 -0
  250. package/dist/templates/scenario_editor/src/i18n.ts.liquid +44 -0
  251. package/dist/templates/session/src/App.test.tsx.liquid +60 -0
  252. package/dist/templates/session/src/App.tsx.liquid +128 -0
  253. package/dist/templates/session/src/i18n.ts.liquid +53 -0
  254. package/dist/templates/session/src/main.tsx.liquid +48 -0
  255. package/dist/templates/session/src/theme.ts.liquid +46 -0
  256. package/dist/templates/settings-editor/index.html.liquid +12 -0
  257. package/dist/templates/settings-editor/src/main.tsx.liquid +48 -0
  258. package/dist/templates/settings-editor/src/theme.ts.liquid +24 -0
  259. package/dist/templates/setup/src/App.test.tsx.liquid +39 -0
  260. package/dist/templates/setup/src/App.tsx.liquid +102 -0
  261. package/dist/templates/setup/src/i18n.ts.liquid +47 -0
  262. package/dist/templates/starter-game/capabilities/briefing/capability.sdk.json +18 -0
  263. package/dist/templates/starter-game/capabilities/plan/capability.sdk.json +17 -0
  264. package/dist/templates/starter-game/capabilities/results/capability.sdk.json +61 -0
  265. package/dist/templates/starter-game/capabilities/roles/capability.sdk.json +17 -0
  266. package/dist/templates/starter-game/capabilities/weather/capability.sdk.json +23 -0
  267. package/dist/templates/starter-game/engine/defaults.ts +81 -0
  268. package/dist/templates/starter-game/engine/engine.sdk.json +12 -0
  269. package/dist/templates/starter-game/engine/logic.test.ts +221 -0
  270. package/dist/templates/starter-game/engine/logic.ts +149 -0
  271. package/dist/templates/starter-game/engine/test-helpers.ts +74 -0
  272. package/dist/templates/starter-game/engine/types.ts +139 -0
  273. package/dist/templates/starter-game/guide/content/en/01-at-a-glance.md +51 -0
  274. package/dist/templates/starter-game/guide/content/en/02-preparation.md +35 -0
  275. package/dist/templates/starter-game/guide/content/en/03-running-the-day.md +58 -0
  276. package/dist/templates/starter-game/guide/guide.sdk.json +10 -0
  277. package/dist/templates/starter-game/guide/guide.test.ts +108 -0
  278. package/dist/templates/starter-game/hooks/assignproducts/defaults.ts +37 -0
  279. package/dist/templates/starter-game/hooks/assignproducts/hook.sdk.json +13 -0
  280. package/dist/templates/starter-game/hooks/assignproducts/logic/logic.test.ts +77 -0
  281. package/dist/templates/starter-game/hooks/assignproducts/logic/logic.ts +47 -0
  282. package/dist/templates/starter-game/hooks/assignproducts/types.ts +55 -0
  283. package/dist/templates/starter-game/package.json +68 -0
  284. package/dist/templates/starter-game/playwright.config.ts +19 -0
  285. package/dist/templates/starter-game/scenarios/heatwave/scenario.sdk.json +20 -0
  286. package/dist/templates/starter-game/scenarios/ordinary_week/scenario.sdk.json +12 -0
  287. package/dist/templates/starter-game/seriousgaming.sdk.json +23 -0
  288. package/dist/templates/starter-game/session/defaults.ts +80 -0
  289. package/dist/templates/starter-game/session/index.html +12 -0
  290. package/dist/templates/starter-game/session/session.sdk.json +11 -0
  291. package/dist/templates/starter-game/session/src/App.test.tsx +307 -0
  292. package/dist/templates/starter-game/session/src/App.tsx +309 -0
  293. package/dist/templates/starter-game/session/src/Section.tsx +37 -0
  294. package/dist/templates/starter-game/session/src/TeamDoor.tsx +96 -0
  295. package/dist/templates/starter-game/session/src/format.ts +8 -0
  296. package/dist/templates/starter-game/session/src/i18n.ts +51 -0
  297. package/dist/templates/starter-game/session/src/main.tsx +48 -0
  298. package/dist/templates/starter-game/session/src/theme.ts +45 -0
  299. package/dist/templates/starter-game/session/types.ts +135 -0
  300. package/dist/templates/starter-game/settings/engine/settings.sdk.json +50 -0
  301. package/dist/templates/starter-game/settings/menu/settings.sdk.json +78 -0
  302. package/dist/templates/starter-game/settings/session/settings.sdk.json +23 -0
  303. package/dist/templates/starter-game/settings/ui/settings.sdk.json +25 -0
  304. package/dist/templates/starter-game/test-setup.ts +7 -0
  305. package/dist/templates/starter-game/testing/e2e/game.spec.ts +139 -0
  306. package/dist/templates/starter-game/testing/e2e/global-setup.ts +21 -0
  307. package/dist/templates/starter-game/testing/engine/game.engine.test.ts +171 -0
  308. package/dist/templates/starter-game/tsconfig.json +19 -0
  309. package/dist/templates/starter-game/ui/defaults.ts +60 -0
  310. package/dist/templates/starter-game/ui/index.html +12 -0
  311. package/dist/templates/starter-game/ui/src/App.test.tsx +138 -0
  312. package/dist/templates/starter-game/ui/src/App.tsx +175 -0
  313. package/dist/templates/starter-game/ui/src/DayBar.test.tsx +78 -0
  314. package/dist/templates/starter-game/ui/src/DayBar.tsx +72 -0
  315. package/dist/templates/starter-game/ui/src/HistoryPanel.test.tsx +74 -0
  316. package/dist/templates/starter-game/ui/src/HistoryPanel.tsx +120 -0
  317. package/dist/templates/starter-game/ui/src/MakeRow.tsx +129 -0
  318. package/dist/templates/starter-game/ui/src/Section.tsx +37 -0
  319. package/dist/templates/starter-game/ui/src/ThemeToggle.tsx +49 -0
  320. package/dist/templates/starter-game/ui/src/TodayPanel.test.tsx +179 -0
  321. package/dist/templates/starter-game/ui/src/TodayPanel.tsx +92 -0
  322. package/dist/templates/starter-game/ui/src/YesterdayPanel.tsx +142 -0
  323. package/dist/templates/starter-game/ui/src/format.ts +12 -0
  324. package/dist/templates/starter-game/ui/src/i18n.ts +95 -0
  325. package/dist/templates/starter-game/ui/src/main.tsx +48 -0
  326. package/dist/templates/starter-game/ui/src/menu.ts +18 -0
  327. package/dist/templates/starter-game/ui/src/test-helpers.ts +58 -0
  328. package/dist/templates/starter-game/ui/src/theme.ts +45 -0
  329. package/dist/templates/starter-game/ui/src/writes.ts +43 -0
  330. package/dist/templates/starter-game/ui/types.ts +137 -0
  331. package/dist/templates/starter-game/ui/ui.sdk.json +11 -0
  332. package/dist/templates/starter-game/validators/capacity/defaults.ts +37 -0
  333. package/dist/templates/starter-game/validators/capacity/logic/logic.test.ts +96 -0
  334. package/dist/templates/starter-game/validators/capacity/logic/logic.ts +45 -0
  335. package/dist/templates/starter-game/validators/capacity/types.ts +55 -0
  336. package/dist/templates/starter-game/validators/capacity/validator.sdk.json +11 -0
  337. package/dist/templates/starter-game/vite.config.ts +19 -0
  338. package/dist/templates/starter-game/vitest.config.ts +15 -0
  339. package/dist/templates/starter-game/vitest.engine.config.ts +19 -0
  340. package/dist/templates/starter-game/waiting_room/defaults.ts +40 -0
  341. package/dist/templates/starter-game/waiting_room/index.html +12 -0
  342. package/dist/templates/starter-game/waiting_room/src/App.test.tsx +102 -0
  343. package/dist/templates/starter-game/waiting_room/src/App.tsx +194 -0
  344. package/dist/templates/starter-game/waiting_room/src/i18n.ts +33 -0
  345. package/dist/templates/starter-game/waiting_room/src/main.tsx +48 -0
  346. package/dist/templates/starter-game/waiting_room/src/theme.ts +45 -0
  347. package/dist/templates/starter-game/waiting_room/types.ts +59 -0
  348. package/dist/templates/starter-game/waiting_room/waiting_room.sdk.json +10 -0
  349. package/dist/templates/tick-controller/logic.ts.liquid +8 -0
  350. package/dist/templates/ui/index.html.liquid +12 -0
  351. package/dist/templates/ui/src/App.test.tsx.liquid +41 -0
  352. package/dist/templates/ui/src/App.tsx.liquid +103 -0
  353. package/dist/templates/ui/src/i18n.ts.liquid +47 -0
  354. package/dist/templates/ui/src/main.tsx.liquid +48 -0
  355. package/dist/templates/ui/src/theme.ts.liquid +46 -0
  356. package/dist/templates/validator/logic.test.ts.liquid +42 -0
  357. package/dist/templates/validator/logic.ts.liquid +21 -0
  358. package/dist/templates/waiting-room/index.html.liquid +12 -0
  359. package/dist/templates/waiting-room/src/App.test.tsx.liquid +57 -0
  360. package/dist/templates/waiting-room/src/App.tsx.liquid +118 -0
  361. package/dist/templates/waiting-room/src/i18n.ts.liquid +44 -0
  362. package/dist/templates/waiting-room/src/main.tsx.liquid +48 -0
  363. package/dist/templates/waiting-room/src/theme.ts.liquid +46 -0
  364. package/dist/templating/resource-metadata.d.ts +131 -0
  365. package/dist/types.d.ts +14 -0
  366. package/dist/utils/atomic-write.d.ts +40 -0
  367. package/dist/utils/cli-error.d.ts +64 -0
  368. package/dist/utils/document-parser-client.d.ts +20 -0
  369. package/dist/utils/env-loader.d.ts +40 -0
  370. package/dist/utils/error-codes.d.ts +339 -0
  371. package/dist/utils/errors.d.ts +19 -0
  372. package/dist/utils/global-settings.d.ts +65 -0
  373. package/dist/utils/llm-client.d.ts +34 -0
  374. package/dist/utils/logger.d.ts +36 -0
  375. package/dist/utils/output.d.ts +109 -0
  376. package/dist/utils/platform.d.ts +14 -0
  377. package/dist/utils/prompt.d.ts +36 -0
  378. package/dist/utils/real-path.d.ts +6 -0
  379. package/dist/utils/schema-properties.d.ts +35 -0
  380. package/dist/validation/ajv.d.ts +17 -0
  381. package/dist/validation/facilitator-guide-validator.d.ts +27 -0
  382. package/dist/validation/findings.d.ts +40 -0
  383. package/dist/validation/game-constraints.d.ts +10 -0
  384. package/dist/validation/game-validator.d.ts +34 -0
  385. package/dist/validation/package-validation.d.ts +41 -0
  386. package/dist/validation/package-validator.d.ts +19 -0
  387. package/dist/validation/resource-validator.d.ts +79 -0
  388. package/dist/validation/schema-defaults-validator.d.ts +29 -0
  389. package/dist/validation/schema-validation.d.ts +115 -0
  390. package/dist/validation/semver.d.ts +9 -0
  391. package/package.json +123 -3
@@ -0,0 +1,560 @@
1
+ <!-- Generated by `pnpm docs:generate` from the exports of `@seriousgaming/sdk-tools/client`. Edit those, not this file. -->
2
+
3
+ # `@seriousgaming/sdk-tools/client`
4
+
5
+ Programmatic API for testing a game in-process.
6
+
7
+ `createTestSession` runs the session the dev server runs (hooks, validators,
8
+ endpoints, participants, undo, per-team ticks and timers) with no server
9
+ around it. `startDevServer` runs the server too, isolated from any dev
10
+ server already running for the package, for browser tests and recordings.
11
+
12
+ @example
13
+
14
+ ```ts
15
+ import { createTestSession } from '@seriousgaming/sdk-tools/client';
16
+ import { fileURLToPath } from 'url';
17
+
18
+ const session = await createTestSession({
19
+ packagePath: fileURLToPath(new URL('../..', import.meta.url)),
20
+ });
21
+
22
+ await session.send({ type: 'tick' });
23
+ ```
24
+
25
+ Every export of `@seriousgaming/sdk-tools/client`, with the declaration it is published with. Anything tagged `@internal` is left out: it ships in the declarations, but is not part of the supported API and may change without a major release. For how the pieces fit together, see the [API reference](./index.md) and the guides it links to.
26
+
27
+ ## Functions
28
+
29
+ ### createStubServices
30
+
31
+ The stubbed service callbacks: `generateText`, `generateSpeech` and `extractText`. Blob storage stays real, because it is local.
32
+
33
+ ```ts
34
+ function createStubServices(
35
+ packagePath: string
36
+ ): Required<Pick<SignatureCallbacks, 'generateText' | 'generateSpeech' | 'extractText'>>;
37
+ ```
38
+
39
+ ### createTestSession
40
+
41
+ Start a session on a package.
42
+
43
+ ```ts
44
+ function createTestSession<Context = UntypedContext, Shared = UntypedContext>(
45
+ options: TestSessionOptions
46
+ ): Promise<TestSession<Context, Shared>>;
47
+ ```
48
+
49
+ ### startDevServer
50
+
51
+ Start an isolated dev server for the package and resolve once it answers.
52
+
53
+ ```ts
54
+ function startDevServer(options: DevServerOptions): Promise<DevServer>;
55
+ ```
56
+
57
+ ### stubGenerateText
58
+
59
+ What a stubbed `generateText` answers for `request`: `[stub <hash>] <excerpt>`, an eight-digit hex hash of the whole request, then the first 60 characters of its prompt (the `prompt`, or the last `user` message's text) with whitespace collapsed, ending in `...` when it was cut. A request with a `jsonSchema` is answered with JSON that satisfies it.
60
+
61
+ ```ts
62
+ function stubGenerateText(request: LLMGenerateOptions | string): LLMResponse;
63
+ ```
64
+
65
+ ## Classes
66
+
67
+ ### FakeClock
68
+
69
+ A clock a test drives by hand.
70
+
71
+ ```ts
72
+ class FakeClock implements Clock {
73
+ private current;
74
+ private nextId;
75
+ private scheduled;
76
+ constructor(startAt?: number);
77
+ now(): number;
78
+ schedule(fn: () => void, ms: number): Cancellable;
79
+ get pending(): number;
80
+ get nextDueAt(): number | null;
81
+ advance(ms: number): void;
82
+ set(timestamp: number): void;
83
+ clear(): void;
84
+ }
85
+ ```
86
+
87
+ ## Interfaces
88
+
89
+ ### Clock
90
+
91
+ ```ts
92
+ interface Clock {
93
+ now(): number;
94
+ schedule(fn: () => void, ms: number): Cancellable;
95
+ }
96
+ ```
97
+
98
+ ### DevServer
99
+
100
+ ```ts
101
+ interface DevServer {
102
+ url: string;
103
+ assetUrl: string;
104
+ stop(): Promise<void>;
105
+ }
106
+ ```
107
+
108
+ ### DevServerOptions
109
+
110
+ ```ts
111
+ interface DevServerOptions {
112
+ packagePath: string;
113
+ port?: number;
114
+ teams?: number;
115
+ participants?: ParticipantCounts;
116
+ scenarioId?: string | null;
117
+ locale?: string;
118
+ clock?: Clock;
119
+ callbacks?: Partial<SignatureCallbacks>;
120
+ reinitOnChange?: boolean;
121
+ }
122
+ ```
123
+
124
+ ### SetDataOptions
125
+
126
+ ```ts
127
+ interface SetDataOptions {
128
+ deletes?: DeletePath[];
129
+ as?: 'participant' | 'system';
130
+ participantId?: string;
131
+ ui?: string;
132
+ }
133
+ ```
134
+
135
+ ### SetSharedDataOptions
136
+
137
+ ```ts
138
+ interface SetSharedDataOptions {
139
+ deletes?: DeletePath[];
140
+ ui?: string;
141
+ }
142
+ ```
143
+
144
+ ### SignatureCallbacks
145
+
146
+ Every callback a runtime may offer logic: the engine, hooks, tick controllers and endpoints.
147
+
148
+ ```ts
149
+ interface SignatureCallbacks {
150
+ generateText: LLMGenerateFunction;
151
+ readAsset: (reference: string) => Promise<ReadAssetResponse>;
152
+ getPastState: <T = Record<string, unknown>>(
153
+ query: PastStateQuery<T>
154
+ ) => Promise<PastStateEntry<T>[]>;
155
+ extractText?: ExtractTextFunction;
156
+ generateSpeech?: GenerateSpeechFunction;
157
+ writeBlob?: (
158
+ data: Uint8Array | ArrayBuffer,
159
+ options: {
160
+ name: string;
161
+ mimeType: string;
162
+ retention?: 'settings' | 'game';
163
+ }
164
+ ) => Promise<string>;
165
+ }
166
+ ```
167
+
168
+ ### StateProjection
169
+
170
+ ```ts
171
+ interface StateProjection {
172
+ projectionVersion: number;
173
+ game: {
174
+ identifier: string;
175
+ name: string;
176
+ scenarioId: string | null;
177
+ };
178
+ session: {
179
+ completedTicks: number;
180
+ mode: SessionMode;
181
+ waitingRoomOpen: boolean;
182
+ complete: boolean;
183
+ seed: string;
184
+ sessionKey: string;
185
+ locale: string;
186
+ runKind: RunKind;
187
+ maxTicks: number | null;
188
+ teamBounds: {
189
+ min?: number;
190
+ max: number;
191
+ };
192
+ inSetup: boolean;
193
+ pending?: PendingChanges;
194
+ };
195
+ teams: ProjectedTeam[];
196
+ shared: Record<string, Record<string, unknown>>;
197
+ sharedState?: unknown;
198
+ timer: TimerState | null;
199
+ settings: ResolvedSettings;
200
+ settingsWithoutSession: ResolvedSettings;
201
+ scenarioDrafts?: ScenarioDraft[];
202
+ faults: ArmedFault[];
203
+ }
204
+ ```
205
+
206
+ ### TestSession
207
+
208
+ A session to test against.
209
+
210
+ ```ts
211
+ interface TestSession<Context = UntypedContext, Shared = UntypedContext> {
212
+ send(command: MutationCommand): Promise<MutationResult>;
213
+ send(command: QueryCommand): Promise<QueryResult>;
214
+ send(command: Command): Promise<MutationResult | QueryResult>;
215
+ state(): TestSessionState<Context, Shared>;
216
+ team(index: number): TestSessionTeam<Context>;
217
+ readonly shared: {
218
+ readonly context: Shared;
219
+ };
220
+ tick(options?: { team?: number }): Promise<MutationResult>;
221
+ requestTick(
222
+ team: number,
223
+ options?: {
224
+ participantId?: string;
225
+ }
226
+ ): Promise<MutationResult>;
227
+ setData(
228
+ team: number,
229
+ patch: ContextPatch<Context>,
230
+ options?: SetDataOptions
231
+ ): Promise<MutationResult>;
232
+ setSharedData(
233
+ patch: ContextPatch<Shared>,
234
+ options?: SetSharedDataOptions
235
+ ): Promise<MutationResult>;
236
+ settled(): Promise<void>;
237
+ close(): Promise<void>;
238
+ }
239
+ ```
240
+
241
+ ### TestSessionOptions
242
+
243
+ ```ts
244
+ interface TestSessionOptions {
245
+ packagePath: string;
246
+ teams?: number;
247
+ participants?: ParticipantCounts;
248
+ scenarioId?: string | null;
249
+ locale?: string;
250
+ callbacks?: Partial<SignatureCallbacks>;
251
+ services?: TestServices;
252
+ clock?: Clock;
253
+ play?: boolean;
254
+ platform?: {
255
+ apiKey?: string;
256
+ apiHost?: string;
257
+ };
258
+ }
259
+ ```
260
+
261
+ ### TestSessionTeam
262
+
263
+ One team as `TestSession.state` reports it, its context typed.
264
+
265
+ ```ts
266
+ interface TestSessionTeam<Context = UntypedContext> extends Omit<ProjectedTeam, 'context'> {
267
+ context: Context;
268
+ }
269
+ ```
270
+
271
+ ## Types
272
+
273
+ ### Command
274
+
275
+ ```ts
276
+ type Command = MutationCommand | QueryCommand;
277
+ ```
278
+
279
+ ### ContextPatch
280
+
281
+ A write to some of a context's capabilities, each merged one level deep as a surface's `setData` is: name the variables that change.
282
+
283
+ ```ts
284
+ type ContextPatch<Context> = {
285
+ [K in keyof Context]?: Partial<Context[K]>;
286
+ };
287
+ ```
288
+
289
+ ### DeletePath
290
+
291
+ A path to remove, as a surface's `deletes` names one.
292
+
293
+ ```ts
294
+ type DeletePath = string | string[];
295
+ ```
296
+
297
+ ### MutationCommand
298
+
299
+ Every state-changing operation. Each one goes through the session's single queue, in submission order.
300
+
301
+ ```ts
302
+ type MutationCommand =
303
+ | ({
304
+ type: 'tick';
305
+ } & TeamScope &
306
+ Actor)
307
+ | ({
308
+ type: 'undo';
309
+ } & TeamScope)
310
+ | ({
311
+ type: 'reset';
312
+ } & TeamScope)
313
+ | {
314
+ type: 'play';
315
+ }
316
+ | {
317
+ type: 'reconfigure';
318
+ }
319
+ | {
320
+ type: 'reinitialise';
321
+ teams?: number;
322
+ scenarioId?: string | null;
323
+ locale?: string;
324
+ participants?: number | number[];
325
+ }
326
+ | ({
327
+ type: 'updateContext';
328
+ payload: Record<string, unknown>;
329
+ deletes?: (string | string[])[];
330
+ uiIdentifier?: string;
331
+ sessionUiIdentifier?: string;
332
+ } & TeamScope &
333
+ Actor)
334
+ | {
335
+ type: 'updateSharedContext';
336
+ uiIdentifier?: string;
337
+ endpointIdentifier?: string;
338
+ payload: Record<string, unknown>;
339
+ deletes?: (string | string[])[];
340
+ }
341
+ | {
342
+ type: 'updateSettings';
343
+ uiIdentifier?: string;
344
+ payload: Record<string, unknown>;
345
+ }
346
+ | {
347
+ type: 'editScenario';
348
+ scenarioId: string | null;
349
+ }
350
+ | {
351
+ type: 'updateScenarioDraft';
352
+ uiIdentifier?: string;
353
+ scenarioId: string | null;
354
+ payload: Record<string, unknown>;
355
+ }
356
+ | {
357
+ type: 'addTeam';
358
+ name?: string;
359
+ participants?: number;
360
+ }
361
+ | {
362
+ type: 'removeTeam';
363
+ teamIndex: number;
364
+ }
365
+ | {
366
+ type: 'renameTeam';
367
+ teamId: string;
368
+ name: string;
369
+ }
370
+ | ({
371
+ type: 'renameOwnTeam';
372
+ name: string;
373
+ } & Actor)
374
+ | {
375
+ type: 'addParticipant';
376
+ teamId: string;
377
+ name?: string;
378
+ }
379
+ | {
380
+ type: 'renameParticipant';
381
+ participantId: string;
382
+ name: string;
383
+ }
384
+ | {
385
+ type: 'moveParticipant';
386
+ participantId: string;
387
+ teamId: string;
388
+ }
389
+ | {
390
+ type: 'setWaitingRoom';
391
+ open: boolean;
392
+ }
393
+ | {
394
+ type: 'resetWalkthrough';
395
+ }
396
+ | {
397
+ type: 'selectScenario';
398
+ scenarioId: string | null;
399
+ }
400
+ | {
401
+ type: 'setLocale';
402
+ locale: string;
403
+ }
404
+ | ({
405
+ type: 'pauseTimer';
406
+ } & TeamScope)
407
+ | ({
408
+ type: 'resumeTimer';
409
+ } & TeamScope)
410
+ | ({
411
+ type: 'extendTick';
412
+ byMs: number;
413
+ } & TeamScope)
414
+ | {
415
+ type: 'advanceClock';
416
+ byMs: number;
417
+ }
418
+ | {
419
+ type: 'armFault';
420
+ fault: FaultKind;
421
+ times?: number;
422
+ reason?: string;
423
+ }
424
+ | {
425
+ type: 'disarmFault';
426
+ fault: FaultKind;
427
+ };
428
+ ```
429
+
430
+ ### MutationResult
431
+
432
+ What a mutation settled as.
433
+
434
+ ```ts
435
+ type MutationResult =
436
+ | {
437
+ ok: true;
438
+ committedAtTick?: number;
439
+ }
440
+ | {
441
+ ok: false;
442
+ outcome: MutationOutcome;
443
+ };
444
+ ```
445
+
446
+ ### ParticipantCounts
447
+
448
+ How many participants to seed each team with: one count for every team, or one per team in stable index order.
449
+
450
+ ```ts
451
+ type ParticipantCounts = number | number[];
452
+ ```
453
+
454
+ ### QueryCommand
455
+
456
+ Every read. None of these enters the queue: a read is never blocked behind a mutation, so a tick in flight must not delay one.
457
+
458
+ ```ts
459
+ type QueryCommand =
460
+ | {
461
+ type: 'getState';
462
+ }
463
+ | ({
464
+ type: 'callEndpoint';
465
+ endpointIdentifier: string;
466
+ request: unknown;
467
+ uiIdentifier?: string;
468
+ external?: boolean;
469
+ principal?: {
470
+ kind: string;
471
+ id: string;
472
+ name?: string;
473
+ };
474
+ scenarioId?: string | null;
475
+ } & TeamScope &
476
+ Actor)
477
+ | ({
478
+ type: 'getPastState';
479
+ query: PastStateQuery;
480
+ uiIdentifier?: string;
481
+ } & Actor)
482
+ | ({
483
+ type: 'getAllTeamsParticipants';
484
+ uiIdentifier?: string;
485
+ } & Actor)
486
+ | {
487
+ type: 'getEndpointAudit';
488
+ }
489
+ | {
490
+ type: 'listEndpoints';
491
+ external?: boolean;
492
+ };
493
+ ```
494
+
495
+ ### QueryResult
496
+
497
+ What a query answered with.
498
+
499
+ ```ts
500
+ type QueryResult =
501
+ | {
502
+ type: 'state';
503
+ state: StateProjection;
504
+ }
505
+ | {
506
+ type: 'endpoint';
507
+ response: unknown;
508
+ blobs?: Record<string, string>;
509
+ }
510
+ | {
511
+ type: 'endpointFailure';
512
+ failure: EndpointFailure;
513
+ }
514
+ | {
515
+ type: 'pastState';
516
+ entries: PastStateEntry[];
517
+ }
518
+ | {
519
+ type: 'participants';
520
+ participants: unknown[];
521
+ }
522
+ | {
523
+ type: 'endpointAudit';
524
+ entries: EndpointAuditEntry[];
525
+ }
526
+ | {
527
+ type: 'endpoints';
528
+ endpoints: EndpointListing[];
529
+ };
530
+ ```
531
+
532
+ ### TestServices
533
+
534
+ Where a test session's service callbacks go (`TestSessionOptions.services`).
535
+
536
+ ```ts
537
+ type TestServices = 'stub' | 'platform';
538
+ ```
539
+
540
+ ### TestSessionState
541
+
542
+ The session's observable state, with each team's context and the shared store typed.
543
+
544
+ ```ts
545
+ type TestSessionState<Context = UntypedContext, Shared = UntypedContext> = Omit<
546
+ StateProjection,
547
+ 'teams' | 'shared'
548
+ > & {
549
+ teams: TestSessionTeam<Context>[];
550
+ shared: Shared;
551
+ };
552
+ ```
553
+
554
+ ### UntypedContext
555
+
556
+ A capability context as the projection carries it, before a game's types narrow it.
557
+
558
+ ```ts
559
+ type UntypedContext = Record<string, Record<string, unknown>>;
560
+ ```