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

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 +36 -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 +27368 -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 +16884 -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 +209 -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 +236 -0
  69. package/dist/docs/cli-and-dev-server.md +217 -0
  70. package/dist/docs/cli-error-codes.md +154 -0
  71. package/dist/docs/cli-reference.md +2488 -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 +575 -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 +335 -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 +122 -3
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Interactive prompts for building JSON schema properties
3
+ * Used for capability variables and engine/hook configuration
4
+ */
5
+ import type { PropertySchema, PromptPropertyOptions, PromptPropertiesOptions, EditPropertyResult, ReviewPropertiesOptions, ReviewPropertiesResult } from './types.js';
6
+ /**
7
+ * Prompts user to create a single property (variable, setting or schema property)
8
+ * Returns the property name and schema definition, or null if cancelled
9
+ */
10
+ export declare function promptForSchemaProperty(options: PromptPropertyOptions): Promise<{
11
+ name: string;
12
+ schema: PropertySchema;
13
+ } | null>;
14
+ /**
15
+ * Prompts user to create multiple properties iteratively
16
+ * Handles the full loop: add property -> ask for another -> repeat
17
+ */
18
+ export declare function promptForSchemaProperties(options?: PromptPropertiesOptions): Promise<Record<string, PropertySchema>>;
19
+ /**
20
+ * Prompts user to edit an existing property
21
+ * Shows current values as defaults
22
+ */
23
+ export declare function editSchemaProperty(name: string, currentSchema: PropertySchema): Promise<EditPropertyResult>;
24
+ /**
25
+ * Reviews and edits multiple existing properties
26
+ * For each property: Keep / Edit / Delete
27
+ * Optionally allows adding new properties
28
+ */
29
+ export declare function reviewSchemaProperties(existingProperties: Record<string, PropertySchema>, options?: ReviewPropertiesOptions): Promise<ReviewPropertiesResult>;
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Type definitions for JSON schema property building
3
+ */
4
+ /**
5
+ * Represents a JSON Schema property definition
6
+ * Used for capability variables and engine/hook configuration fields
7
+ */
8
+ export interface PropertySchema {
9
+ type: 'number' | 'string' | 'boolean';
10
+ description: string;
11
+ default?: number | string | boolean;
12
+ minimum?: number;
13
+ maximum?: number;
14
+ }
15
+ /**
16
+ * Default values and constraints for number properties
17
+ */
18
+ export interface NumberPropertyDefaults {
19
+ default: number;
20
+ minimum?: number;
21
+ maximum?: number;
22
+ }
23
+ /**
24
+ * Default value for string properties
25
+ */
26
+ export interface StringPropertyDefaults {
27
+ default: string;
28
+ }
29
+ /**
30
+ * Default value for boolean properties
31
+ */
32
+ export interface BooleanPropertyDefaults {
33
+ default: boolean;
34
+ }
35
+ /**
36
+ * Context for property prompts
37
+ * - 'variable': For capability variables
38
+ * - 'setting': For a settings resource's settingsSchema
39
+ * - 'property': For any other schema, such as an endpoint's request or response
40
+ */
41
+ export type PropertyContext = 'variable' | 'setting' | 'property';
42
+ /**
43
+ * Options for prompting for a single property
44
+ */
45
+ export interface PromptPropertyOptions {
46
+ /** Names of existing properties (for duplicate validation) */
47
+ existingNames: string[];
48
+ /** Context for display messages */
49
+ context?: PropertyContext;
50
+ /** Whether to allow empty/cancel */
51
+ allowEmpty?: boolean;
52
+ }
53
+ /**
54
+ * Options for prompting for multiple properties
55
+ */
56
+ export interface PromptPropertiesOptions {
57
+ /** Context for display messages */
58
+ context?: PropertyContext;
59
+ /** Existing properties to build upon */
60
+ existingProperties?: Record<string, PropertySchema>;
61
+ /** Minimum number of properties required */
62
+ minProperties?: number;
63
+ }
64
+ /**
65
+ * Options for editing a property
66
+ */
67
+ export interface EditPropertyOptions {
68
+ /** Whether to allow deletion */
69
+ allowDelete?: boolean;
70
+ }
71
+ /**
72
+ * Result from editing a property
73
+ */
74
+ export interface EditPropertyResult {
75
+ action: 'keep' | 'edit';
76
+ /** The property as edited, or unchanged when kept */
77
+ schema: PropertySchema;
78
+ /** The fields that changed; empty when kept */
79
+ changes: string[];
80
+ }
81
+ /**
82
+ * Options for reviewing multiple properties
83
+ */
84
+ export interface ReviewPropertiesOptions {
85
+ /** Whether to allow deletion */
86
+ allowDelete?: boolean;
87
+ /** Whether to allow adding new properties */
88
+ allowAdd?: boolean;
89
+ /** Context for display messages */
90
+ context?: PropertyContext;
91
+ }
92
+ /**
93
+ * Result from reviewing multiple properties
94
+ */
95
+ export interface ReviewPropertiesResult {
96
+ /** Updated properties schema */
97
+ properties: Record<string, PropertySchema>;
98
+ /** Summary of changes made */
99
+ changes: {
100
+ kept: string[];
101
+ modified: Array<{
102
+ name: string;
103
+ changes: string;
104
+ }>;
105
+ deleted: string[];
106
+ added: string[];
107
+ };
108
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Validation utilities for JSON schema property building
3
+ */
4
+ /**
5
+ * PascalCase regex pattern
6
+ * Must start with uppercase letter, followed by letters/numbers only
7
+ */
8
+ export declare const PASCAL_CASE_PATTERN: RegExp;
9
+ /**
10
+ * Validates a property name (must be PascalCase and not a duplicate)
11
+ * @param name - The property name to validate
12
+ * @param existingNames - Array of existing property names
13
+ * @returns true if valid, or an error message string
14
+ */
15
+ export declare function validatePropertyName(name: string, existingNames: string[]): true | string;
16
+ /**
17
+ * Validates a number value input string
18
+ * @param value - The string value to validate
19
+ * @param constraints - Optional min/max constraints
20
+ * @returns true if valid, or an error message string
21
+ */
22
+ export declare function validateNumberValue(value: string, constraints?: {
23
+ min?: number;
24
+ max?: number;
25
+ }): true | string;
26
+ /**
27
+ * Validates that maximum is greater than or equal to minimum
28
+ * @param maximum - The maximum value string
29
+ * @param minimum - The minimum value (already parsed)
30
+ * @returns true if valid, or an error message string
31
+ */
32
+ export declare function validateMaximumValue(maximum: string, minimum?: number): true | string;
@@ -0,0 +1,6 @@
1
+ import type { CapabilityDefinition } from '@seriousgaming/sdk';
2
+ export type CapabilityScope = NonNullable<CapabilityDefinition['scope']>;
3
+ type ScopeFields = Pick<CapabilityDefinition, 'identifier' | 'scope'>;
4
+ /** A capability's effective scope: `team` unless it declares another. */
5
+ export declare function resolveCapabilityScope(definition: ScopeFields): CapabilityScope;
6
+ export {};
@@ -0,0 +1,29 @@
1
+ /**
2
+ * The §9.5 context deep-merge a runtime applies to every context update.
3
+ *
4
+ * The UI wrappers in `@seriousgaming/sdk/ui` apply the same
5
+ * merge to their optimistic local copy, from a private module of their own.
6
+ * Both must apply identical semantics or a UI sending a minimal patch sees its
7
+ * local view diverge from the host's until the next snapshot, so
8
+ * `context-merge.parity.test.ts` holds the two to one table of cases:
9
+ *
10
+ * - Plain objects are merged recursively
11
+ * - Arrays, scalars, `null`, and non-plain objects replace the base value
12
+ * - `__proto__`, `constructor`, and `prototype` keys are ignored (payloads
13
+ * cross an untrusted iframe boundary)
14
+ *
15
+ * A deep merge cannot express key deletion, so an update carries deletions
16
+ * beside the patch rather than inside it (see {@link ContextDeletePath} and
17
+ * {@link applyContextUpdate}).
18
+ */
19
+ import type { ContextDeletePath } from '@seriousgaming/sdk';
20
+ export declare function deepMergeContext<T extends Record<string, unknown>>(base: T, patch: Record<string, unknown>): T;
21
+ /**
22
+ * Apply one context update: merge the patch, then remove the deleted paths.
23
+ *
24
+ * Deletions are applied after the merge so a single update can replace an
25
+ * entry — write the new key, drop the old — without the order of the two
26
+ * mattering to the caller. Every runtime applying an update MUST use this
27
+ * order (SPECIFICATION.md §9.5).
28
+ */
29
+ export declare function applyContextUpdate<T extends Record<string, unknown>>(base: T, patch: Record<string, unknown>, deletes?: readonly ContextDeletePath[]): T;
@@ -0,0 +1,41 @@
1
+ import type { CapabilityDefinition } from '@seriousgaming/sdk';
2
+ /**
3
+ * The §7.4 projection shared by the host runtime and anything that composes a
4
+ * context for a UI surface. A surface receives exactly the capabilities it
5
+ * declared, and never one whose scope puts it out of reach of every surface.
6
+ *
7
+ * Both halves matter for different reasons. The declaration half is a payload
8
+ * bound: a surface that renders eight capabilities has no use for the other
9
+ * eight, and in a large cohort those eight ride every push to every
10
+ * participant (§12.4.2). The scope half is a boundary: a `private` capability
11
+ * is withheld here as well as rejected at build time, so a gap in validation
12
+ * cannot leak engine state to a frame.
13
+ */
14
+ /** The scope fields the projection needs from a capability definition. */
15
+ type ScopeFields = Pick<CapabilityDefinition, 'identifier' | 'scope'>;
16
+ /**
17
+ * The capability identifiers a surface is entitled to receive: its `reads` and
18
+ * its `writes`, minus anything whose scope withholds it from every surface.
19
+ *
20
+ * `writes` are included because a surface that writes a value almost always
21
+ * displays it, and because the generated `Context` type is the union of both
22
+ * (`collectCapabilityScope`). Delivering reads alone would contradict the type
23
+ * the author is holding: `data.price` would be typed as present and arrive
24
+ * `undefined` for every write-only decision field. It also has to be present
25
+ * for the wrapper's optimistic merge to have a base to merge into.
26
+ */
27
+ export declare function declaredCapabilityIds(args: {
28
+ reads?: readonly string[];
29
+ writes?: readonly string[];
30
+ capabilities?: ReadonlyMap<string, ScopeFields>;
31
+ }): Set<string>;
32
+ /**
33
+ * Project a context onto the capabilities a surface declared.
34
+ *
35
+ * Keys absent from `declared` are omitted rather than blanked: a surface
36
+ * cannot tell 'withheld' from 'defaulted' if it receives an empty object, and
37
+ * omission is what makes the payload smaller. A key the context does not carry
38
+ * is not invented.
39
+ */
40
+ export declare function projectContext<T extends Record<string, unknown>>(context: T, declared: ReadonlySet<string>): Record<string, unknown>;
41
+ export {};
@@ -0,0 +1,15 @@
1
+ import { type ApiUse, type SignatureCallbacks } from '@seriousgaming/sdk';
2
+ /**
3
+ * Wrap a callbacks object so each API listed in the `ApiUse` enum is only
4
+ * invocable when the corresponding name appears in `uses`. Undeclared APIs
5
+ * are replaced by a function that throws {@link UndeclaredApiUseError} when
6
+ * called.
7
+ *
8
+ * Callbacks that fall outside the `ApiUse` enum (e.g. `readAsset`) are passed
9
+ * through unchanged — they are runtime plumbing rather than externally-visible
10
+ * APIs.
11
+ *
12
+ * Returns the same shape as the input, so wrapped callbacks can be handed
13
+ * directly to engine / hook / tick-controller logic without further plumbing.
14
+ */
15
+ export declare function createGuardedCallbacks<T extends Partial<SignatureCallbacks>>(callbacks: T, uses: readonly ApiUse[] | undefined, resourceIdentifier: string): T;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Runtime helpers: the pieces of a Serious Gaming runtime that sit beside the
3
+ * specification rather than inside a game.
4
+ *
5
+ * Reachable as `@seriousgaming/sdk-tools/runtime`.
6
+ *
7
+ * Platform-facing. Game authors never import from here: everything a game
8
+ * needs is in `@seriousgaming/sdk`. These are what the dev
9
+ * server's executor, session and build step are made of: the `uses` guard
10
+ * (§6.11), capability scope (§6.1), the §9.5 context merge, the §7.4 surface
11
+ * projection, the §11.8 to §11.9 tick-result check, the checks on what logic
12
+ * returns (§7.4, §10.2, §11.12), and the manifest version and optional
13
+ * features this runtime serves. The shapes may change in a minor
14
+ * release.
15
+ */
16
+ export { createGuardedCallbacks } from './guarded-callbacks.js';
17
+ export { resolveCapabilityScope } from './capability-scope.js';
18
+ export type { CapabilityScope } from './capability-scope.js';
19
+ export { applyContextUpdate, deepMergeContext } from './context-merge.js';
20
+ export { declaredCapabilityIds, projectContext } from './context-projection.js';
21
+ export { validateTickControllerResult } from './tick-validation.js';
22
+ export { assertJsonSerialisable } from '../execution/engine-state.js';
23
+ export { readAggregateResult, readEngineResult, readTickControllerResult, } from '../execution/logic-result.js';
24
+ export type { EngineResultRead } from '../execution/logic-result.js';
25
+ export type { ValidateTickResultOptions } from './tick-validation.js';
26
+ export { MANIFEST_VERSION, SUPPORTED_FEATURES, SUPPORTED_SERVICES, unsupportedFeatures, unsupportedServices, } from './manifest-version.js';
27
+ export type { ServiceDeclaration } from './manifest-version.js';
@@ -0,0 +1,55 @@
1
+ import type { ApiUse } from '@seriousgaming/sdk';
2
+ /**
3
+ * Format version of the built package manifest (`dist/seriousgaming.json`).
4
+ *
5
+ * Version 2 carries one of each thing a game holds one of — `game`, `engine`,
6
+ * `userInterface` and so on — rather than a single-element array plus a
7
+ * reference back to it (#435).
8
+ *
9
+ * Version 3 leaves the manifest's shape alone and changes what the logic in
10
+ * it returns: engine, hook and endpoint results name their writes under
11
+ * `capabilities` (#592). The version is how a runtime hosting packages built
12
+ * before that tells which shape to read.
13
+ *
14
+ * The field is optional in the schema so that manifests built before it
15
+ * existed still validate. Those manifests are version 1: a runtime treats an
16
+ * absent value as 1 rather than as an error, because published artefacts are
17
+ * archived and must stay runnable.
18
+ */
19
+ export declare const MANIFEST_VERSION = 3;
20
+ /**
21
+ * The optional features this runtime supports, by the names a manifest's
22
+ * `requires` lists them under.
23
+ *
24
+ * Empty in 1.0: the list exists so that a feature can arrive within manifest
25
+ * version 3 without a new one, and a game that depends on it says so rather
26
+ * than running half-working on a runtime that lacks it.
27
+ */
28
+ export declare const SUPPORTED_FEATURES: readonly string[];
29
+ /** The entries of a manifest's `requires` that {@link SUPPORTED_FEATURES} does not list. */
30
+ export declare function unsupportedFeatures(manifest: {
31
+ requires?: readonly string[];
32
+ }): string[];
33
+ /**
34
+ * The services this runtime provides, by the `ApiUse` names a resource's
35
+ * `uses` declares them under (§6.11). Every one: the dev server backs each
36
+ * with a client, and a call that cannot reach its provider rejects with that
37
+ * client's typed error rather than the service being absent.
38
+ */
39
+ export declare const SUPPORTED_SERVICES: readonly ApiUse[];
40
+ /** A resource declaring services, as {@link unsupportedServices} reads it. */
41
+ export interface ServiceDeclaration {
42
+ definition: {
43
+ identifier: string;
44
+ uses?: readonly ApiUse[];
45
+ };
46
+ }
47
+ /**
48
+ * The services the given resources declare that `supported` does not list,
49
+ * each with the identifiers of the resources declaring it, in first-declared
50
+ * order. A runtime refuses the package when this is not empty (§6.11, §2.6).
51
+ */
52
+ export declare function unsupportedServices(resources: readonly ServiceDeclaration[], supported?: readonly ApiUse[]): Array<{
53
+ service: ApiUse;
54
+ resources: string[];
55
+ }>;
@@ -0,0 +1,25 @@
1
+ import type { TickControllerResult } from '@seriousgaming/sdk';
2
+ /**
3
+ * Options for {@link validateTickControllerResult}.
4
+ */
5
+ export interface ValidateTickResultOptions {
6
+ /**
7
+ * Override for "now" in ms since epoch, used to evaluate the effective
8
+ * cadence of a scheduled (`nextTickAt`) result. Defaults to `Date.now()`.
9
+ */
10
+ now?: number;
11
+ }
12
+ /**
13
+ * Validate a runtime `TickControllerResult` against the §11.8–§11.9 contract.
14
+ *
15
+ * Returns `null` when the result is valid, or a human-readable error message
16
+ * that names the limit, cites SPECIFICATION.md §11, and points at the helper to
17
+ * use (never at an exported symbol). The message is suitable for surfacing to
18
+ * authors at authoring time, in the dev server, or in the build step.
19
+ *
20
+ * The dev server and the build step share this one definition. The SDK's
21
+ * `intervalTick()` / `scheduledTick()` builders validate with a private copy
22
+ * of their own, held to this one by `tick-validation.parity.test.ts`, so the
23
+ * builders and the runtime agree on what 'valid' means.
24
+ */
25
+ export declare function validateTickControllerResult(result: Pick<TickControllerResult, 'intervalMs' | 'nextTickAt'>, options?: ValidateTickResultOptions): string | null;