@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,346 @@
1
+ // ../sdk/lib/build/callbacks.js
2
+ var UndeclaredApiUseError = class extends Error {
3
+ resourceIdentifier;
4
+ api;
5
+ constructor(resourceIdentifier, api) {
6
+ super(`Resource "${resourceIdentifier}" attempted to call callback "${api}" but did not declare it in its bundle's "uses" array. Add "${api}" to the bundle's uses to allow this call.`);
7
+ this.name = "UndeclaredApiUseError";
8
+ this.resourceIdentifier = resourceIdentifier;
9
+ this.api = api;
10
+ }
11
+ };
12
+
13
+ // ../sdk/lib/build/tick-validation.js
14
+ var MAX_EFFECTIVE_TICK_INTERVAL_MS = 7 * 24 * 60 * 60 * 1e3;
15
+
16
+ // cli/runtime/guarded-callbacks.ts
17
+ var API_USE_TO_CALLBACK = {
18
+ generateText: "generateText",
19
+ extractText: "extractText",
20
+ generateSpeech: "generateSpeech",
21
+ writeBlob: "writeBlob"
22
+ };
23
+ function createGuardedCallbacks(callbacks, uses, resourceIdentifier) {
24
+ const declared = new Set(uses ?? []);
25
+ const guarded = { ...callbacks };
26
+ for (const [api, key] of Object.entries(API_USE_TO_CALLBACK)) {
27
+ if (declared.has(api)) continue;
28
+ if (callbacks[key] === void 0) continue;
29
+ guarded[key] = async () => {
30
+ throw new UndeclaredApiUseError(resourceIdentifier, api);
31
+ };
32
+ }
33
+ return guarded;
34
+ }
35
+
36
+ // cli/runtime/capability-scope.ts
37
+ function resolveCapabilityScope(definition) {
38
+ return definition.scope ?? "team";
39
+ }
40
+
41
+ // cli/runtime/context-merge.ts
42
+ var UNSAFE_KEYS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
43
+ function isPlainObject(value) {
44
+ if (value === null || typeof value !== "object") return false;
45
+ if (Array.isArray(value)) return false;
46
+ const proto = Object.getPrototypeOf(value);
47
+ if (proto === null || proto === Object.prototype) return true;
48
+ return Object.getPrototypeOf(proto) === null;
49
+ }
50
+ function deepMergeContext(base, patch) {
51
+ const result = { ...base };
52
+ for (const key of Object.keys(patch)) {
53
+ if (UNSAFE_KEYS.has(key)) continue;
54
+ const baseValue = result[key];
55
+ const patchValue = patch[key];
56
+ result[key] = isPlainObject(baseValue) && isPlainObject(patchValue) ? deepMergeContext(baseValue, patchValue) : patchValue;
57
+ }
58
+ return result;
59
+ }
60
+ function segmentsOf(path) {
61
+ return typeof path === "string" ? path.split(".") : [...path];
62
+ }
63
+ function deletePath(base, path) {
64
+ const segments = segmentsOf(path);
65
+ if (segments.length === 0 || segments.some((segment) => UNSAFE_KEYS.has(segment))) {
66
+ return base;
67
+ }
68
+ const [head, ...rest] = segments;
69
+ if (!Object.prototype.hasOwnProperty.call(base, head)) return base;
70
+ if (rest.length === 0) {
71
+ const result = { ...base };
72
+ delete result[head];
73
+ return result;
74
+ }
75
+ const child = base[head];
76
+ if (!isPlainObject(child)) return base;
77
+ const prunedChild = deletePath(child, rest);
78
+ if (prunedChild === child) return base;
79
+ return { ...base, [head]: prunedChild };
80
+ }
81
+ function applyContextUpdate(base, patch, deletes) {
82
+ const merged = deepMergeContext(base, patch);
83
+ if (!deletes || deletes.length === 0) return merged;
84
+ return deletes.reduce((context, path) => deletePath(context, path), merged);
85
+ }
86
+
87
+ // cli/runtime/context-projection.ts
88
+ function declaredCapabilityIds(args) {
89
+ const capabilities = args.capabilities;
90
+ const declared = /* @__PURE__ */ new Set();
91
+ for (const identifier of [...args.reads ?? [], ...args.writes ?? []]) {
92
+ const definition = capabilities?.get(identifier);
93
+ if (definition && !isDeliverableToSurfaces(definition)) continue;
94
+ declared.add(identifier);
95
+ }
96
+ return declared;
97
+ }
98
+ function isDeliverableToSurfaces(definition) {
99
+ return (definition.scope ?? "team") !== "private";
100
+ }
101
+ function projectContext(context, declared) {
102
+ const projected = {};
103
+ for (const identifier of Object.keys(context)) {
104
+ if (declared.has(identifier)) {
105
+ projected[identifier] = context[identifier];
106
+ }
107
+ }
108
+ return projected;
109
+ }
110
+
111
+ // cli/runtime/tick-validation.ts
112
+ var MIN_EFFECTIVE_TICK_INTERVAL_MS = 3e4;
113
+ var MAX_EFFECTIVE_TICK_INTERVAL_MS2 = 7 * 24 * 60 * 60 * 1e3;
114
+ function validateTickControllerResult2(result, options) {
115
+ const { intervalMs, nextTickAt } = result;
116
+ if (nextTickAt !== void 0 && (typeof nextTickAt !== "number" || !Number.isFinite(nextTickAt))) {
117
+ return `Tick controller nextTickAt must be a finite timestamp in milliseconds; got ${describe(nextTickAt)}. See the tick controller guide.`;
118
+ }
119
+ const now = options?.now ?? Date.now();
120
+ const effectiveMs = nextTickAt !== void 0 ? nextTickAt - now : intervalMs ?? NaN;
121
+ if (nextTickAt !== void 0 && effectiveMs <= 0) {
122
+ return null;
123
+ }
124
+ if ((nextTickAt === void 0 || intervalMs !== void 0) && (typeof intervalMs !== "number" || !Number.isFinite(intervalMs) || !Number.isInteger(intervalMs) || intervalMs < 1)) {
125
+ return `Tick intervalMs must be a finite, positive, whole number of milliseconds; got ${describe(intervalMs)}. Build interval-based results with intervalTick(intervalMs). See the tick controller guide.`;
126
+ }
127
+ if (effectiveMs < MIN_EFFECTIVE_TICK_INTERVAL_MS) {
128
+ return `Effective tick cadence of ${duration(effectiveMs)} is below the 30-second minimum (${MIN_EFFECTIVE_TICK_INTERVAL_MS} ms). Use intervalTick(intervalMs) with at least ${MIN_EFFECTIVE_TICK_INTERVAL_MS}, or schedule nextTickAt further out. See the tick controller guide.`;
129
+ }
130
+ if (effectiveMs > MAX_EFFECTIVE_TICK_INTERVAL_MS2) {
131
+ return `Effective tick cadence of ${duration(effectiveMs)} exceeds the 7-day maximum (${MAX_EFFECTIVE_TICK_INTERVAL_MS2} ms). For longer gaps, set enabled: false and drive ticks by another means. See the tick controller guide.`;
132
+ }
133
+ return null;
134
+ }
135
+ function describe(value) {
136
+ if (value === void 0) return "undefined";
137
+ if (typeof value === "number") {
138
+ if (Number.isNaN(value)) return "NaN";
139
+ if (!Number.isFinite(value)) return value > 0 ? "Infinity" : "-Infinity";
140
+ return String(value);
141
+ }
142
+ return typeof value;
143
+ }
144
+ function duration(ms) {
145
+ const rounded = Number.isInteger(ms) ? String(ms) : ms.toFixed(1);
146
+ const seconds = ms / 1e3;
147
+ const human = seconds >= 86400 ? `${round(seconds / 86400)} days` : seconds >= 3600 ? `${round(seconds / 3600)} hours` : seconds >= 1 ? `${round(seconds)} seconds` : "under a second";
148
+ return `${rounded} ms (${human})`;
149
+ }
150
+ function round(value) {
151
+ return Number.isInteger(value) ? String(value) : value.toFixed(1);
152
+ }
153
+
154
+ // cli/execution/engine-state.ts
155
+ var ENGINE_STATE_KEY = "$engineState";
156
+ var SHARED_ENGINE_STATE_KEY = "$sharedEngineState";
157
+ var RESERVED_KEYS = /* @__PURE__ */ new Set([ENGINE_STATE_KEY, SHARED_ENGINE_STATE_KEY]);
158
+ function isReservedKey(key) {
159
+ return RESERVED_KEYS.has(key);
160
+ }
161
+ function assertJsonSerialisable(label, value) {
162
+ const seen = /* @__PURE__ */ new Set();
163
+ const visit = (node, path) => {
164
+ if (node === null || typeof node === "string" || typeof node === "boolean") return;
165
+ if (typeof node === "number") {
166
+ if (Number.isFinite(node)) return;
167
+ throw new Error(`${label} state at ${path} is ${node}, which JSON cannot hold`);
168
+ }
169
+ if (typeof node !== "object") {
170
+ throw new Error(
171
+ `${label} state at ${path} is a ${typeof node}, which JSON cannot hold`
172
+ );
173
+ }
174
+ if (seen.has(node)) {
175
+ throw new Error(`${label} state at ${path} refers back to itself`);
176
+ }
177
+ seen.add(node);
178
+ if (Array.isArray(node)) {
179
+ node.forEach((item, i) => visit(item, `${path}[${i}]`));
180
+ } else {
181
+ const tag = Object.prototype.toString.call(node);
182
+ const prototype = Object.getPrototypeOf(node);
183
+ if (tag !== "[object Object]" || prototype !== null && prototype.constructor?.name !== "Object") {
184
+ throw new Error(
185
+ `${label} state at ${path} is a ${tag.slice(8, -1)}, not a plain object. Engine state must be JSON-serialisable.`
186
+ );
187
+ }
188
+ for (const [key, child] of Object.entries(node)) {
189
+ if (child === void 0) {
190
+ throw new Error(
191
+ `${label} state at ${path}.${key} is undefined, which JSON drops. Use null.`
192
+ );
193
+ }
194
+ visit(child, `${path}.${key}`);
195
+ }
196
+ }
197
+ seen.delete(node);
198
+ };
199
+ visit(value, "state");
200
+ }
201
+
202
+ // cli/execution/logic-result.ts
203
+ function isRecord(value) {
204
+ return typeof value === "object" && value !== null && !Array.isArray(value);
205
+ }
206
+ function readCapabilities(label, result, allowed = ["capabilities", "deletes"]) {
207
+ if (!isRecord(result)) {
208
+ throw new Error(`${label} must return an object of the form { capabilities: { ... } }`);
209
+ }
210
+ const unknownKeys = Object.keys(result).filter((key) => !allowed.includes(key));
211
+ if (unknownKeys.length > 0) {
212
+ const keys = unknownKeys.map((key) => `"${key}"`).join(", ");
213
+ throw new Error(
214
+ `${label} returned unknown top-level key${unknownKeys.length === 1 ? "" : "s"} ${keys}. Return capability writes under "capabilities", e.g. { capabilities: { ${unknownKeys[0]}: { ... } } }`
215
+ );
216
+ }
217
+ const capabilities = result.capabilities;
218
+ if (capabilities === void 0 || capabilities === null) {
219
+ return {};
220
+ }
221
+ if (!isRecord(capabilities)) {
222
+ throw new Error(`${label} returned "capabilities" that is not an object`);
223
+ }
224
+ const reserved = Object.keys(capabilities).find(isReservedKey);
225
+ if (reserved !== void 0) {
226
+ throw new Error(
227
+ `${label} returned "${reserved}" under "capabilities", which is not a capability`
228
+ );
229
+ }
230
+ return capabilities;
231
+ }
232
+ function readDeletes(label, result) {
233
+ if (!isRecord(result)) return [];
234
+ const deletes = result.deletes;
235
+ if (deletes === void 0 || deletes === null) return [];
236
+ if (!Array.isArray(deletes)) {
237
+ throw new Error(`${label} returned "deletes" that is not an array of paths`);
238
+ }
239
+ return deletes.map((path, i) => {
240
+ if (typeof path === "string" && path.length > 0) return path;
241
+ if (Array.isArray(path) && path.length > 0 && path.every((segment) => typeof segment === "string" && segment.length > 0)) {
242
+ return [...path];
243
+ }
244
+ throw new Error(
245
+ `${label} returned "deletes[${i}]" that is not a path: give a non-empty string of segments joined by ".", or a non-empty array of segments`
246
+ );
247
+ });
248
+ }
249
+ function readEngineResult(label, result, phase = "init") {
250
+ const allowed = phase === "tick" ? ["capabilities", "deletes", "state", "complete"] : ["capabilities", "deletes", "state"];
251
+ const capabilities = readCapabilities(label, result, allowed);
252
+ const deletes = readDeletes(label, result);
253
+ const { state, complete } = result;
254
+ if (complete !== void 0 && typeof complete !== "boolean") {
255
+ throw new Error(`${label} returned "complete" that is not a boolean`);
256
+ }
257
+ return { capabilities, deletes, state, complete: complete === true };
258
+ }
259
+ function readAggregateResult(label, result, teamCount, phase = "init") {
260
+ if (!isRecord(result)) {
261
+ throw new Error(
262
+ `${label} must return { shared: { capabilities }, teams: [{ capabilities }] }`
263
+ );
264
+ }
265
+ const unknownKeys = Object.keys(result).filter((key) => key !== "shared" && key !== "teams");
266
+ if (unknownKeys.length > 0) {
267
+ throw new Error(
268
+ `${label} returned unknown top-level key${unknownKeys.length === 1 ? "" : "s"} ${unknownKeys.map((key) => `"${key}"`).join(", ")}. Return { shared: { capabilities }, teams: [{ capabilities }] }`
269
+ );
270
+ }
271
+ if (!Array.isArray(result.teams) || result.teams.length !== teamCount) {
272
+ throw new Error(
273
+ `${label} must return one entry in "teams" per team passed to it (${teamCount})`
274
+ );
275
+ }
276
+ return {
277
+ shared: result.shared === void 0 ? { capabilities: {}, deletes: [], state: void 0, complete: false } : readEngineResult(`${label} "shared"`, result.shared, phase),
278
+ teams: result.teams.map(
279
+ (team, i) => readEngineResult(`${label} "teams[${i}]"`, team, phase)
280
+ )
281
+ };
282
+ }
283
+ var TICK_CONTROLLER_KEYS = ["enabled", "intervalMs", "nextTickAt", "complete"];
284
+ function readTickControllerResult(label, result) {
285
+ if (!isRecord(result)) {
286
+ throw new Error(`${label} must return an object of the form { enabled, intervalMs? }`);
287
+ }
288
+ const unknownKeys = Object.keys(result).filter((key) => !TICK_CONTROLLER_KEYS.includes(key));
289
+ if (unknownKeys.length > 0) {
290
+ throw new Error(
291
+ `${label} returned unknown key${unknownKeys.length === 1 ? "" : "s"} ${unknownKeys.map((key) => `"${key}"`).join(", ")}. A tick controller result holds only ${TICK_CONTROLLER_KEYS.map((key) => `"${key}"`).join(", ")}`
292
+ );
293
+ }
294
+ if (typeof result.enabled !== "boolean") {
295
+ throw new Error(`${label} returned "enabled" that is not a boolean`);
296
+ }
297
+ if (result.complete !== void 0 && typeof result.complete !== "boolean") {
298
+ throw new Error(`${label} returned "complete" that is not a boolean`);
299
+ }
300
+ return result;
301
+ }
302
+
303
+ // cli/runtime/manifest-version.ts
304
+ var MANIFEST_VERSION = 3;
305
+ var SUPPORTED_FEATURES = [];
306
+ function unsupportedFeatures(manifest) {
307
+ return (manifest.requires ?? []).filter((feature) => !SUPPORTED_FEATURES.includes(feature));
308
+ }
309
+ var SUPPORTED_SERVICES = [
310
+ "generateText",
311
+ "extractText",
312
+ "generateSpeech",
313
+ "writeBlob"
314
+ ];
315
+ function unsupportedServices(resources, supported = SUPPORTED_SERVICES) {
316
+ const missing = /* @__PURE__ */ new Map();
317
+ for (const resource of resources) {
318
+ for (const service of resource.definition.uses ?? []) {
319
+ if (supported.includes(service)) continue;
320
+ const declaring = missing.get(service) ?? [];
321
+ if (!declaring.includes(resource.definition.identifier)) {
322
+ declaring.push(resource.definition.identifier);
323
+ }
324
+ missing.set(service, declaring);
325
+ }
326
+ }
327
+ return [...missing].map(([service, declaring]) => ({ service, resources: declaring }));
328
+ }
329
+ export {
330
+ MANIFEST_VERSION,
331
+ SUPPORTED_FEATURES,
332
+ SUPPORTED_SERVICES,
333
+ applyContextUpdate,
334
+ assertJsonSerialisable,
335
+ createGuardedCallbacks,
336
+ declaredCapabilityIds,
337
+ deepMergeContext,
338
+ projectContext,
339
+ readAggregateResult,
340
+ readEngineResult,
341
+ readTickControllerResult,
342
+ resolveCapabilityScope,
343
+ unsupportedFeatures,
344
+ unsupportedServices,
345
+ validateTickControllerResult2 as validateTickControllerResult
346
+ };