@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.
- package/LICENSE +93 -0
- package/README.md +38 -2
- package/dist/bundling/logic-exports.d.ts +34 -0
- package/dist/bundling/node-builtins.d.ts +21 -0
- package/dist/bundling/transpiler.d.ts +7 -0
- package/dist/cli.js +27404 -0
- package/dist/client/dev-server.d.ts +59 -0
- package/dist/client/index.d.ts +28 -0
- package/dist/client/stub-services.d.ts +32 -0
- package/dist/client/test-session.d.ts +195 -0
- package/dist/client.js +16920 -0
- package/dist/core/asset-reference-translator.d.ts +46 -0
- package/dist/core/clock.d.ts +57 -0
- package/dist/core/faults.d.ts +65 -0
- package/dist/core/game-settings.d.ts +65 -0
- package/dist/core/history.d.ts +89 -0
- package/dist/core/listen-with-fallback.d.ts +30 -0
- package/dist/core/mutation-queue.d.ts +61 -0
- package/dist/core/package-scenario.d.ts +89 -0
- package/dist/core/participant-registry.d.ts +109 -0
- package/dist/core/pending-changes.d.ts +14 -0
- package/dist/core/protocol.d.ts +83 -0
- package/dist/core/scenario-drafts.d.ts +32 -0
- package/dist/core/session-endpoints.d.ts +108 -0
- package/dist/core/session-gates.d.ts +75 -0
- package/dist/core/session-host.d.ts +94 -0
- package/dist/core/session-refusals.d.ts +56 -0
- package/dist/core/session-rewind.d.ts +32 -0
- package/dist/core/session-roster.d.ts +128 -0
- package/dist/core/session-surfaces.d.ts +32 -0
- package/dist/core/session-ticks.d.ts +18 -0
- package/dist/core/session-timers.d.ts +84 -0
- package/dist/core/session-writes.d.ts +40 -0
- package/dist/core/session.d.ts +385 -0
- package/dist/core/settings-locks.d.ts +22 -0
- package/dist/core/team-names.d.ts +52 -0
- package/dist/core/team-state-store.d.ts +218 -0
- package/dist/core/tick-timer.d.ts +75 -0
- package/dist/dev/blob-links.d.ts +10 -0
- package/dist/dev/console/assets/index-DgFglsnA.js +204 -0
- package/dist/dev/console/index.html +12 -0
- package/dist/dev/console-path.d.ts +19 -0
- package/dist/dev/lockfile.d.ts +124 -0
- package/dist/dev/package-watcher.d.ts +21 -0
- package/dist/dev/routes.d.ts +67 -0
- package/dist/dev/shell.d.ts +260 -0
- package/dist/dev/surfaces.d.ts +41 -0
- package/dist/dev/tools-identity.d.ts +23 -0
- package/dist/dev/view/batch.d.ts +172 -0
- package/dist/dev/view/commands.d.ts +75 -0
- package/dist/dev/view/route.d.ts +58 -0
- package/dist/dev/view/view.d.ts +78 -0
- package/dist/dev/view/viewer.d.ts +32 -0
- package/dist/discovery/config.d.ts +9 -0
- package/dist/discovery/manifest-paths.d.ts +21 -0
- package/dist/discovery/removed-fields.d.ts +90 -0
- package/dist/docs/api/deck.md +386 -0
- package/dist/docs/api/index.md +67 -0
- package/dist/docs/api/sdk-commands.md +286 -0
- package/dist/docs/api/sdk-e2e.md +433 -0
- package/dist/docs/api/sdk-projection.md +207 -0
- package/dist/docs/api/sdk-testing.md +214 -0
- package/dist/docs/api/sdk-tools-client.md +560 -0
- package/dist/docs/api/sdk-ui-testing.md +231 -0
- package/dist/docs/api/sdk-ui.md +1269 -0
- package/dist/docs/api/sdk.md +2140 -0
- package/dist/docs/changelog-0.x.md +1156 -0
- package/dist/docs/changelog.md +241 -0
- package/dist/docs/cli-and-dev-server.md +217 -0
- package/dist/docs/cli-error-codes.md +156 -0
- package/dist/docs/cli-reference.md +2489 -0
- package/dist/docs/cli-simulation-testing.md +222 -0
- package/dist/docs/concepts/index.md +46 -0
- package/dist/docs/concepts/terminology.md +322 -0
- package/dist/docs/environment-variables.md +102 -0
- package/dist/docs/getting-started.md +145 -0
- package/dist/docs/guides/ai-facilitation.md +220 -0
- package/dist/docs/guides/capabilities.md +460 -0
- package/dist/docs/guides/endpoints.md +335 -0
- package/dist/docs/guides/engine-testing.md +477 -0
- package/dist/docs/guides/engine.md +527 -0
- package/dist/docs/guides/file-handling.md +405 -0
- package/dist/docs/guides/games.md +176 -0
- package/dist/docs/guides/global-settings.md +94 -0
- package/dist/docs/guides/guide.md +123 -0
- package/dist/docs/guides/hooks.md +183 -0
- package/dist/docs/guides/index.md +51 -0
- package/dist/docs/guides/internationalization.md +288 -0
- package/dist/docs/guides/llm-integration.md +635 -0
- package/dist/docs/guides/multi-team-games.md +586 -0
- package/dist/docs/guides/patterns.md +391 -0
- package/dist/docs/guides/presentation.md +196 -0
- package/dist/docs/guides/production-constraints.md +130 -0
- package/dist/docs/guides/scenario-editor.md +143 -0
- package/dist/docs/guides/scenarios.md +515 -0
- package/dist/docs/guides/session.md +972 -0
- package/dist/docs/guides/settings.md +458 -0
- package/dist/docs/guides/setup.md +193 -0
- package/dist/docs/guides/speech-generation.md +233 -0
- package/dist/docs/guides/starter-game.md +164 -0
- package/dist/docs/guides/testing.md +577 -0
- package/dist/docs/guides/tick-controller.md +569 -0
- package/dist/docs/guides/type-safety.md +516 -0
- package/dist/docs/guides/ui.md +1389 -0
- package/dist/docs/guides/upgrading.md +636 -0
- package/dist/docs/guides/validators.md +217 -0
- package/dist/docs/guides/waiting-room.md +244 -0
- package/dist/docs/index.md +41 -0
- package/dist/docs/recipes/act-on-the-session-from-an-endpoint.md +95 -0
- package/dist/docs/recipes/adapt-a-game-for-walkthroughs.md +133 -0
- package/dist/docs/recipes/adapt-ui-for-observers.md +74 -0
- package/dist/docs/recipes/call-endpoint-from-ui.md +109 -0
- package/dist/docs/recipes/check-a-package-from-a-script.md +117 -0
- package/dist/docs/recipes/create-capability.md +66 -0
- package/dist/docs/recipes/create-endpoint.md +127 -0
- package/dist/docs/recipes/create-engine.md +111 -0
- package/dist/docs/recipes/create-game.md +70 -0
- package/dist/docs/recipes/create-guide.md +75 -0
- package/dist/docs/recipes/create-hook.md +80 -0
- package/dist/docs/recipes/create-presentation.md +142 -0
- package/dist/docs/recipes/create-scenario-editor.md +102 -0
- package/dist/docs/recipes/create-scenario.md +98 -0
- package/dist/docs/recipes/create-session-ui.md +116 -0
- package/dist/docs/recipes/create-settings.md +88 -0
- package/dist/docs/recipes/create-setup.md +115 -0
- package/dist/docs/recipes/create-tick-controller.md +65 -0
- package/dist/docs/recipes/create-user-interface.md +96 -0
- package/dist/docs/recipes/create-validator.md +67 -0
- package/dist/docs/recipes/create-waiting-room-ui.md +109 -0
- package/dist/docs/recipes/declare-api-uses.md +67 -0
- package/dist/docs/recipes/design-state-for-concurrent-writes.md +96 -0
- package/dist/docs/recipes/distribute-package.md +80 -0
- package/dist/docs/recipes/e2e-testing.md +116 -0
- package/dist/docs/recipes/end-game-on-condition.md +154 -0
- package/dist/docs/recipes/fix-duplicate-packages.md +101 -0
- package/dist/docs/recipes/index.md +86 -0
- package/dist/docs/recipes/make-an-endpoint-external.md +101 -0
- package/dist/docs/recipes/negotiate-across-teams.md +164 -0
- package/dist/docs/recipes/observe-other-teams-state.md +119 -0
- package/dist/docs/recipes/publish-a-package.md +139 -0
- package/dist/docs/recipes/remember-a-viewers-choice.md +55 -0
- package/dist/docs/recipes/review-a-past-day.md +73 -0
- package/dist/docs/recipes/share-assets-across-scenarios.md +120 -0
- package/dist/docs/recipes/share-logic-between-engine-and-ui.md +130 -0
- package/dist/docs/recipes/show-all-teams-participants.md +109 -0
- package/dist/docs/recipes/start-from-an-empty-package.md +169 -0
- package/dist/docs/recipes/take-a-file-in-an-endpoint.md +82 -0
- package/dist/docs/recipes/test-a-multi-role-game.md +51 -0
- package/dist/docs/recipes/test-user-interface.md +95 -0
- package/dist/docs/recipes/test-with-engine.md +115 -0
- package/dist/docs/recipes/upload-and-display-files.md +148 -0
- package/dist/docs/recipes/use-request-play.md +65 -0
- package/dist/docs/recipes/use-request-tick.md +75 -0
- package/dist/docs/troubleshooting.md +816 -0
- package/dist/execution/blob-inputs.d.ts +57 -0
- package/dist/execution/bundle-reload.d.ts +42 -0
- package/dist/execution/config-resolver.d.ts +127 -0
- package/dist/execution/configuration-builder.d.ts +66 -0
- package/dist/execution/context-composition.d.ts +161 -0
- package/dist/execution/endpoint-actions.d.ts +9 -0
- package/dist/execution/endpoint-payloads.d.ts +32 -0
- package/dist/execution/endpoint-runner.d.ts +129 -0
- package/dist/execution/engine-state.d.ts +40 -0
- package/dist/execution/executor-callbacks.d.ts +56 -0
- package/dist/execution/executor.d.ts +436 -0
- package/dist/execution/gates.d.ts +45 -0
- package/dist/execution/hook-chain.d.ts +25 -0
- package/dist/execution/logic-calls.d.ts +190 -0
- package/dist/execution/logic-failure.d.ts +84 -0
- package/dist/execution/logic-loader.d.ts +54 -0
- package/dist/execution/logic-result.d.ts +76 -0
- package/dist/execution/tick-controller-call.d.ts +32 -0
- package/dist/execution/types.d.ts +48 -0
- package/dist/generation/ts-type.d.ts +39 -0
- package/dist/guide/locale.d.ts +12 -0
- package/dist/guide/video-registry.d.ts +42 -0
- package/dist/help-examples.d.ts +125 -0
- package/dist/host/adapter.d.ts +67 -0
- package/dist/host/host-channel.d.ts +222 -0
- package/dist/host/index.d.ts +20 -0
- package/dist/host/protocol.d.ts +783 -0
- package/dist/host/surfaces.d.ts +42 -0
- package/dist/host/theme.d.ts +55 -0
- package/dist/host.js +583 -0
- package/dist/prompts/index.d.ts +7 -0
- package/dist/prompts/schema-builder.d.ts +29 -0
- package/dist/prompts/types.d.ts +108 -0
- package/dist/prompts/validators.d.ts +32 -0
- package/dist/runtime/capability-scope.d.ts +6 -0
- package/dist/runtime/context-merge.d.ts +29 -0
- package/dist/runtime/context-projection.d.ts +41 -0
- package/dist/runtime/guarded-callbacks.d.ts +15 -0
- package/dist/runtime/index.d.ts +27 -0
- package/dist/runtime/manifest-version.d.ts +55 -0
- package/dist/runtime/tick-validation.d.ts +25 -0
- package/dist/runtime.js +346 -0
- package/dist/schema.json +1546 -0
- package/dist/server/vite-plugin.d.ts +46 -0
- package/dist/services/tts/client.d.ts +51 -0
- package/dist/services/tts/elevenlabs.d.ts +24 -0
- package/dist/services/tts/types.d.ts +44 -0
- package/dist/storage/asset-resolver.d.ts +49 -0
- package/dist/storage/blob-store.d.ts +41 -0
- package/dist/templates/endpoint/logic.test.ts.liquid +61 -0
- package/dist/templates/endpoint/logic.ts.liquid +25 -0
- package/dist/templates/engine/init.json.liquid +7 -0
- package/dist/templates/engine/logic-aggregate.test.ts.liquid +90 -0
- package/dist/templates/engine/logic-aggregate.ts.liquid +46 -0
- package/dist/templates/engine/logic.test.ts.liquid +61 -0
- package/dist/templates/engine/logic.ts.liquid +32 -0
- package/dist/templates/engine/run.json.liquid +7 -0
- package/dist/templates/guide/01-at-a-glance.md.liquid +19 -0
- package/dist/templates/guide/02-preparation.md.liquid +18 -0
- package/dist/templates/guide/03-running-the-session.md.liquid +37 -0
- package/dist/templates/hook/logic.test.ts.liquid +46 -0
- package/dist/templates/hook/logic.ts.liquid +12 -0
- package/dist/templates/package/CLAUDE.md.template +338 -0
- package/dist/templates/package/DESIGN.md.liquid +144 -0
- package/dist/templates/package/README.md.liquid +143 -0
- package/dist/templates/package/claude/rules/workflow-create-capability.md +26 -0
- package/dist/templates/package/claude/rules/workflow-create-endpoint.md +35 -0
- package/dist/templates/package/claude/rules/workflow-create-engine.md +35 -0
- package/dist/templates/package/claude/rules/workflow-create-guide.md +40 -0
- package/dist/templates/package/claude/rules/workflow-create-presentation.md +37 -0
- package/dist/templates/package/claude/rules/workflow-create-user-interface.md +31 -0
- package/dist/templates/package/claude/rules/workflow-publish-package.md +54 -0
- package/dist/templates/package/claude/rules/workflow-test-engine-or-ui.md +30 -0
- package/dist/templates/package/claude/rules/workflow-update-sdk-version.md +43 -0
- package/dist/templates/package/claude/settings.json.template +16 -0
- package/dist/templates/package/gitignore.template +15 -0
- package/dist/templates/package/global-setup.ts.template +21 -0
- package/dist/templates/package/globals.d.ts.template +2 -0
- package/dist/templates/package/oxfmtrc.json.template +14 -0
- package/dist/templates/package/oxlintrc.json.template +238 -0
- package/dist/templates/package/package.json.liquid +65 -0
- package/dist/templates/package/playwright.config.ts.liquid +19 -0
- package/dist/templates/package/pnpm-workspace.yaml.template +27 -0
- package/dist/templates/package/test-setup.ts.liquid +7 -0
- package/dist/templates/package/tsconfig.json.liquid +15 -0
- package/dist/templates/package/vite.config.ts.liquid +19 -0
- package/dist/templates/package/vitest.config.ts.liquid +25 -0
- package/dist/templates/package/vitest.engine.config.ts.liquid +12 -0
- package/dist/templates/presentation/index.html.liquid +20 -0
- package/dist/templates/presentation/src/App.tsx.liquid +49 -0
- package/dist/templates/presentation/src/Slides.tsx.liquid +81 -0
- package/dist/templates/presentation/src/i18n.ts.liquid +54 -0
- package/dist/templates/presentation/src/main.tsx.liquid +14 -0
- package/dist/templates/scenario_editor/src/App.test.tsx.liquid +30 -0
- package/dist/templates/scenario_editor/src/App.tsx.liquid +95 -0
- package/dist/templates/scenario_editor/src/i18n.ts.liquid +44 -0
- package/dist/templates/session/src/App.test.tsx.liquid +60 -0
- package/dist/templates/session/src/App.tsx.liquid +128 -0
- package/dist/templates/session/src/i18n.ts.liquid +53 -0
- package/dist/templates/session/src/main.tsx.liquid +48 -0
- package/dist/templates/session/src/theme.ts.liquid +46 -0
- package/dist/templates/settings-editor/index.html.liquid +12 -0
- package/dist/templates/settings-editor/src/main.tsx.liquid +48 -0
- package/dist/templates/settings-editor/src/theme.ts.liquid +24 -0
- package/dist/templates/setup/src/App.test.tsx.liquid +39 -0
- package/dist/templates/setup/src/App.tsx.liquid +102 -0
- package/dist/templates/setup/src/i18n.ts.liquid +47 -0
- package/dist/templates/starter-game/capabilities/briefing/capability.sdk.json +18 -0
- package/dist/templates/starter-game/capabilities/plan/capability.sdk.json +17 -0
- package/dist/templates/starter-game/capabilities/results/capability.sdk.json +61 -0
- package/dist/templates/starter-game/capabilities/roles/capability.sdk.json +17 -0
- package/dist/templates/starter-game/capabilities/weather/capability.sdk.json +23 -0
- package/dist/templates/starter-game/engine/defaults.ts +81 -0
- package/dist/templates/starter-game/engine/engine.sdk.json +12 -0
- package/dist/templates/starter-game/engine/logic.test.ts +221 -0
- package/dist/templates/starter-game/engine/logic.ts +149 -0
- package/dist/templates/starter-game/engine/test-helpers.ts +74 -0
- package/dist/templates/starter-game/engine/types.ts +139 -0
- package/dist/templates/starter-game/guide/content/en/01-at-a-glance.md +51 -0
- package/dist/templates/starter-game/guide/content/en/02-preparation.md +35 -0
- package/dist/templates/starter-game/guide/content/en/03-running-the-day.md +58 -0
- package/dist/templates/starter-game/guide/guide.sdk.json +10 -0
- package/dist/templates/starter-game/guide/guide.test.ts +108 -0
- package/dist/templates/starter-game/hooks/assignproducts/defaults.ts +37 -0
- package/dist/templates/starter-game/hooks/assignproducts/hook.sdk.json +13 -0
- package/dist/templates/starter-game/hooks/assignproducts/logic/logic.test.ts +77 -0
- package/dist/templates/starter-game/hooks/assignproducts/logic/logic.ts +47 -0
- package/dist/templates/starter-game/hooks/assignproducts/types.ts +55 -0
- package/dist/templates/starter-game/package.json +68 -0
- package/dist/templates/starter-game/playwright.config.ts +19 -0
- package/dist/templates/starter-game/scenarios/heatwave/scenario.sdk.json +20 -0
- package/dist/templates/starter-game/scenarios/ordinary_week/scenario.sdk.json +12 -0
- package/dist/templates/starter-game/seriousgaming.sdk.json +23 -0
- package/dist/templates/starter-game/session/defaults.ts +80 -0
- package/dist/templates/starter-game/session/index.html +12 -0
- package/dist/templates/starter-game/session/session.sdk.json +11 -0
- package/dist/templates/starter-game/session/src/App.test.tsx +307 -0
- package/dist/templates/starter-game/session/src/App.tsx +309 -0
- package/dist/templates/starter-game/session/src/Section.tsx +37 -0
- package/dist/templates/starter-game/session/src/TeamDoor.tsx +96 -0
- package/dist/templates/starter-game/session/src/format.ts +8 -0
- package/dist/templates/starter-game/session/src/i18n.ts +51 -0
- package/dist/templates/starter-game/session/src/main.tsx +48 -0
- package/dist/templates/starter-game/session/src/theme.ts +45 -0
- package/dist/templates/starter-game/session/types.ts +135 -0
- package/dist/templates/starter-game/settings/engine/settings.sdk.json +50 -0
- package/dist/templates/starter-game/settings/menu/settings.sdk.json +78 -0
- package/dist/templates/starter-game/settings/session/settings.sdk.json +23 -0
- package/dist/templates/starter-game/settings/ui/settings.sdk.json +25 -0
- package/dist/templates/starter-game/test-setup.ts +7 -0
- package/dist/templates/starter-game/testing/e2e/game.spec.ts +139 -0
- package/dist/templates/starter-game/testing/e2e/global-setup.ts +21 -0
- package/dist/templates/starter-game/testing/engine/game.engine.test.ts +171 -0
- package/dist/templates/starter-game/tsconfig.json +19 -0
- package/dist/templates/starter-game/ui/defaults.ts +60 -0
- package/dist/templates/starter-game/ui/index.html +12 -0
- package/dist/templates/starter-game/ui/src/App.test.tsx +138 -0
- package/dist/templates/starter-game/ui/src/App.tsx +175 -0
- package/dist/templates/starter-game/ui/src/DayBar.test.tsx +78 -0
- package/dist/templates/starter-game/ui/src/DayBar.tsx +72 -0
- package/dist/templates/starter-game/ui/src/HistoryPanel.test.tsx +74 -0
- package/dist/templates/starter-game/ui/src/HistoryPanel.tsx +120 -0
- package/dist/templates/starter-game/ui/src/MakeRow.tsx +129 -0
- package/dist/templates/starter-game/ui/src/Section.tsx +37 -0
- package/dist/templates/starter-game/ui/src/ThemeToggle.tsx +49 -0
- package/dist/templates/starter-game/ui/src/TodayPanel.test.tsx +179 -0
- package/dist/templates/starter-game/ui/src/TodayPanel.tsx +92 -0
- package/dist/templates/starter-game/ui/src/YesterdayPanel.tsx +142 -0
- package/dist/templates/starter-game/ui/src/format.ts +12 -0
- package/dist/templates/starter-game/ui/src/i18n.ts +95 -0
- package/dist/templates/starter-game/ui/src/main.tsx +48 -0
- package/dist/templates/starter-game/ui/src/menu.ts +18 -0
- package/dist/templates/starter-game/ui/src/test-helpers.ts +58 -0
- package/dist/templates/starter-game/ui/src/theme.ts +45 -0
- package/dist/templates/starter-game/ui/src/writes.ts +43 -0
- package/dist/templates/starter-game/ui/types.ts +137 -0
- package/dist/templates/starter-game/ui/ui.sdk.json +11 -0
- package/dist/templates/starter-game/validators/capacity/defaults.ts +37 -0
- package/dist/templates/starter-game/validators/capacity/logic/logic.test.ts +96 -0
- package/dist/templates/starter-game/validators/capacity/logic/logic.ts +45 -0
- package/dist/templates/starter-game/validators/capacity/types.ts +55 -0
- package/dist/templates/starter-game/validators/capacity/validator.sdk.json +11 -0
- package/dist/templates/starter-game/vite.config.ts +19 -0
- package/dist/templates/starter-game/vitest.config.ts +15 -0
- package/dist/templates/starter-game/vitest.engine.config.ts +19 -0
- package/dist/templates/starter-game/waiting_room/defaults.ts +40 -0
- package/dist/templates/starter-game/waiting_room/index.html +12 -0
- package/dist/templates/starter-game/waiting_room/src/App.test.tsx +102 -0
- package/dist/templates/starter-game/waiting_room/src/App.tsx +194 -0
- package/dist/templates/starter-game/waiting_room/src/i18n.ts +33 -0
- package/dist/templates/starter-game/waiting_room/src/main.tsx +48 -0
- package/dist/templates/starter-game/waiting_room/src/theme.ts +45 -0
- package/dist/templates/starter-game/waiting_room/types.ts +59 -0
- package/dist/templates/starter-game/waiting_room/waiting_room.sdk.json +10 -0
- package/dist/templates/tick-controller/logic.ts.liquid +8 -0
- package/dist/templates/ui/index.html.liquid +12 -0
- package/dist/templates/ui/src/App.test.tsx.liquid +41 -0
- package/dist/templates/ui/src/App.tsx.liquid +103 -0
- package/dist/templates/ui/src/i18n.ts.liquid +47 -0
- package/dist/templates/ui/src/main.tsx.liquid +48 -0
- package/dist/templates/ui/src/theme.ts.liquid +46 -0
- package/dist/templates/validator/logic.test.ts.liquid +42 -0
- package/dist/templates/validator/logic.ts.liquid +21 -0
- package/dist/templates/waiting-room/index.html.liquid +12 -0
- package/dist/templates/waiting-room/src/App.test.tsx.liquid +57 -0
- package/dist/templates/waiting-room/src/App.tsx.liquid +118 -0
- package/dist/templates/waiting-room/src/i18n.ts.liquid +44 -0
- package/dist/templates/waiting-room/src/main.tsx.liquid +48 -0
- package/dist/templates/waiting-room/src/theme.ts.liquid +46 -0
- package/dist/templating/resource-metadata.d.ts +131 -0
- package/dist/types.d.ts +14 -0
- package/dist/utils/atomic-write.d.ts +40 -0
- package/dist/utils/cli-error.d.ts +64 -0
- package/dist/utils/document-parser-client.d.ts +20 -0
- package/dist/utils/env-loader.d.ts +40 -0
- package/dist/utils/error-codes.d.ts +339 -0
- package/dist/utils/errors.d.ts +19 -0
- package/dist/utils/global-settings.d.ts +65 -0
- package/dist/utils/llm-client.d.ts +34 -0
- package/dist/utils/logger.d.ts +36 -0
- package/dist/utils/output.d.ts +109 -0
- package/dist/utils/platform.d.ts +14 -0
- package/dist/utils/prompt.d.ts +36 -0
- package/dist/utils/real-path.d.ts +6 -0
- package/dist/utils/schema-properties.d.ts +35 -0
- package/dist/validation/ajv.d.ts +17 -0
- package/dist/validation/facilitator-guide-validator.d.ts +27 -0
- package/dist/validation/findings.d.ts +40 -0
- package/dist/validation/game-constraints.d.ts +10 -0
- package/dist/validation/game-validator.d.ts +34 -0
- package/dist/validation/package-validation.d.ts +41 -0
- package/dist/validation/package-validator.d.ts +19 -0
- package/dist/validation/resource-validator.d.ts +79 -0
- package/dist/validation/schema-defaults-validator.d.ts +29 -0
- package/dist/validation/schema-validation.d.ts +115 -0
- package/dist/validation/semver.d.ts +9 -0
- package/package.json +123 -3
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TeamStateStore - single owner of the dev server's per-session team state.
|
|
3
|
+
*
|
|
4
|
+
* The dev server juggles seven interdependent structures: the session tick, the
|
|
5
|
+
* per-team contexts, per-team tick counters, per-team stable indexes, per-team
|
|
6
|
+
* undo histories, the session-wide undo history, and the executor's own context.
|
|
7
|
+
* The load-bearing invariant is that the executor's context always mirrors team
|
|
8
|
+
* 0 (`executor.context === teamContexts[0]`); before this class that was
|
|
9
|
+
* hand-maintained at half a dozen call sites, and the stable-index↔array-position
|
|
10
|
+
* translation existed in as many variants.
|
|
11
|
+
*
|
|
12
|
+
* Everything the dev server needs to read or mutate that state now goes through
|
|
13
|
+
* one object. Mutators that touch team contexts keep the executor in step
|
|
14
|
+
* internally, and {@link withTeamContext} encapsulates the swap-run-restore
|
|
15
|
+
* dance a per-team operation performs, so callers never re-sync by hand.
|
|
16
|
+
*/
|
|
17
|
+
import type { PastStateEntry } from '@seriousgaming/sdk';
|
|
18
|
+
import type { GameContext } from '../execution/types';
|
|
19
|
+
import { HistoryManager, type ContextSnapshot } from './history';
|
|
20
|
+
/** One team's committed state at a single past tick, before display names. */
|
|
21
|
+
interface PastTickView {
|
|
22
|
+
tick: number;
|
|
23
|
+
context: Record<string, unknown>;
|
|
24
|
+
recordedAt: number;
|
|
25
|
+
complete: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The slice of the executor the store keeps in lockstep with team 0. The real
|
|
29
|
+
* {@link GameExecutor} satisfies it; tests can supply a stub.
|
|
30
|
+
*/
|
|
31
|
+
export interface ExecutorContextSync {
|
|
32
|
+
getContext(): GameContext;
|
|
33
|
+
setContext(context: GameContext): void;
|
|
34
|
+
/** Capabilities kept out of the tick's history (§7.6); none when absent. */
|
|
35
|
+
getSessionLifetimeCapabilityIds?(): string[];
|
|
36
|
+
/**
|
|
37
|
+
* Defaults of capabilities added while the session ran, composed under
|
|
38
|
+
* every board that lacks them; none when absent.
|
|
39
|
+
*/
|
|
40
|
+
getAddedCapabilityDefaults?(): Map<string, Record<string, unknown>>;
|
|
41
|
+
}
|
|
42
|
+
export declare class TeamStateStore {
|
|
43
|
+
private readonly executor;
|
|
44
|
+
private currentTick;
|
|
45
|
+
private teamCount;
|
|
46
|
+
private independentMode;
|
|
47
|
+
private teamContexts;
|
|
48
|
+
private teamTicks;
|
|
49
|
+
/**
|
|
50
|
+
* Whether each team's tick controller has signalled completion. Completion
|
|
51
|
+
* is per-team because independent teams keep their own tick controller
|
|
52
|
+
* state (SPECIFICATION.md §9.4a); a lockstep or single-team session simply
|
|
53
|
+
* moves every entry together, so the session-wide notion collapses to
|
|
54
|
+
* {@link isSessionComplete}.
|
|
55
|
+
*/
|
|
56
|
+
private teamComplete;
|
|
57
|
+
/**
|
|
58
|
+
* Stable team index for each array position, kept sorted ascending so every
|
|
59
|
+
* surfaced teams array is ordered by index. Indexes are assigned at team
|
|
60
|
+
* creation and never reassigned: a removal leaves a gap in the sequence, a
|
|
61
|
+
* later add takes the lowest unused index. Team ids are `team-${index + 1}`
|
|
62
|
+
* and never renumber.
|
|
63
|
+
*/
|
|
64
|
+
private teamIndexes;
|
|
65
|
+
private teamHistories;
|
|
66
|
+
private readonly sessionHistory;
|
|
67
|
+
constructor(executor: ExecutorContextSync);
|
|
68
|
+
getCurrentTick(): number;
|
|
69
|
+
setCurrentTick(tick: number): void;
|
|
70
|
+
getTeamCount(): number;
|
|
71
|
+
setTeamCount(count: number): void;
|
|
72
|
+
getIsIndependentMode(): boolean;
|
|
73
|
+
setIsIndependentMode(independent: boolean): void;
|
|
74
|
+
/** The live team-context array. Callers treat it as read-only. */
|
|
75
|
+
getTeamContexts(): GameContext[];
|
|
76
|
+
/**
|
|
77
|
+
* Replace every team context, keeping the executor in step with team 0.
|
|
78
|
+
*
|
|
79
|
+
* The one place a board is built, so it is where a capability added while
|
|
80
|
+
* the session ran is seeded: every write, undo and reset reaches the
|
|
81
|
+
* boards through here, including an undo to a snapshot recorded before
|
|
82
|
+
* the capability existed (#640).
|
|
83
|
+
*/
|
|
84
|
+
setTeamContexts(contexts: GameContext[]): void;
|
|
85
|
+
/** Replace a single team's context, keeping the executor in step. */
|
|
86
|
+
setTeamContext(position: number, context: GameContext): void;
|
|
87
|
+
/**
|
|
88
|
+
* Run a per-team operation with the executor's context swapped to the team
|
|
89
|
+
* at `position`, write the result back, then restore the executor to team
|
|
90
|
+
* 0. This is the one place the swap-run-restore dance lives, so a per-team
|
|
91
|
+
* tick or hook dispatch never leaks a non-team-0 context into the executor.
|
|
92
|
+
*/
|
|
93
|
+
withTeamContext(position: number, run: () => Promise<GameContext>): Promise<GameContext>;
|
|
94
|
+
/**
|
|
95
|
+
* Run a read-only per-team operation with the executor swapped to the team
|
|
96
|
+
* at `position`, then restore team 0. Unlike {@link withTeamContext} the
|
|
97
|
+
* result is not a context, so nothing is written back. Used to evaluate a
|
|
98
|
+
* team's tick controller against that team's own state.
|
|
99
|
+
*/
|
|
100
|
+
readWithTeamContext<T>(position: number, run: () => Promise<T>): Promise<T>;
|
|
101
|
+
private withoutSessionLifetime;
|
|
102
|
+
private syncExecutorToTeamZero;
|
|
103
|
+
getTeamTicks(): number[];
|
|
104
|
+
setTeamTick(position: number, tick: number): void;
|
|
105
|
+
setTeamTicks(ticks: number[]): void;
|
|
106
|
+
/** The furthest-advanced team tick, or 0 when there are no teams. */
|
|
107
|
+
maxTeamTick(): number;
|
|
108
|
+
getTeamComplete(): boolean[];
|
|
109
|
+
setTeamComplete(position: number, complete: boolean): void;
|
|
110
|
+
setTeamCompletes(flags: boolean[]): void;
|
|
111
|
+
/** Whether the team at array position `position` has completed. */
|
|
112
|
+
isTeamComplete(position: number): boolean;
|
|
113
|
+
/** Move every team's flag together: a lockstep or single-team completion. */
|
|
114
|
+
setAllTeamsComplete(complete: boolean): void;
|
|
115
|
+
/**
|
|
116
|
+
* Whether the whole session is done, which is true only once every team
|
|
117
|
+
* is. A game that is complete for one team of several is not complete: the
|
|
118
|
+
* others still tick.
|
|
119
|
+
*/
|
|
120
|
+
isSessionComplete(): boolean;
|
|
121
|
+
/**
|
|
122
|
+
* Whether each team can tick no more, which is what `complete` reports
|
|
123
|
+
* (§9.0, §20.1): it signalled completion (§11.1) or played the tick limit
|
|
124
|
+
* (§9.6). The stored flags stay the signal alone, because undo and past
|
|
125
|
+
* state read the signal, not the limit.
|
|
126
|
+
*/
|
|
127
|
+
teamsFinished(limit: number | null): boolean[];
|
|
128
|
+
/** Whether no team can tick again: every team is finished. */
|
|
129
|
+
isSessionFinished(limit: number | null): boolean;
|
|
130
|
+
getTeamIndexes(): number[];
|
|
131
|
+
setTeamIndexes(indexes: number[]): void;
|
|
132
|
+
/** Stable index for the team at array position `position`. */
|
|
133
|
+
teamIndexAt(position: number): number;
|
|
134
|
+
/** Team id for the team at array position `position`. */
|
|
135
|
+
teamIdAt(position: number): string;
|
|
136
|
+
/** Array position of the team with stable index `index`, or -1. */
|
|
137
|
+
positionOf(index: number): number;
|
|
138
|
+
/** The lowest stable index not currently in use (refills removal gaps). */
|
|
139
|
+
lowestUnusedTeamIndex(): number;
|
|
140
|
+
/**
|
|
141
|
+
* The stable indexes, falling back to array position when the index array
|
|
142
|
+
* is out of step with the team count (older snapshots, pre-init state).
|
|
143
|
+
*/
|
|
144
|
+
resolvedTeamIndexes(): number[];
|
|
145
|
+
/** The session-wide undo history, which a shared-state undo rewinds. */
|
|
146
|
+
getSessionHistory(): HistoryManager;
|
|
147
|
+
getTeamHistory(position: number): HistoryManager;
|
|
148
|
+
getTeamHistories(): HistoryManager[];
|
|
149
|
+
setTeamHistories(histories: HistoryManager[]): void;
|
|
150
|
+
/** Undoable state of each team's history, in position order. */
|
|
151
|
+
teamCanUndo(): boolean[];
|
|
152
|
+
/**
|
|
153
|
+
* Push a session-history snapshot. Stamps the current stable indexes
|
|
154
|
+
* alongside team contexts so a later restore can map positions back.
|
|
155
|
+
*/
|
|
156
|
+
historyPush(context: GameContext, tick: number, teamContexts?: GameContext[]): void;
|
|
157
|
+
historyUndo(): ContextSnapshot | null;
|
|
158
|
+
historyClear(): void;
|
|
159
|
+
/**
|
|
160
|
+
* Record the round every team just closed into its own history.
|
|
161
|
+
*
|
|
162
|
+
* Takes the pre-`Run` contexts rather than reading live state, because by
|
|
163
|
+
* the time a lockstep tick calls this the store already holds the engine's
|
|
164
|
+
* result: the boards to record are the ones the tick was handed.
|
|
165
|
+
*
|
|
166
|
+
* Every team or none. A session-history push that grows only some team
|
|
167
|
+
* histories breaks the lockstep a session-wide undo relies on, since that
|
|
168
|
+
* undoes every team once (#285).
|
|
169
|
+
*/
|
|
170
|
+
pushAllTeamHistories(contexts: GameContext[], tick: number): void;
|
|
171
|
+
/** Step every team's history back one round, for a session-wide undo. */
|
|
172
|
+
undoAllTeamHistories(): void;
|
|
173
|
+
/**
|
|
174
|
+
* Compose a committed past tick's team view, the basis every `getPastState`
|
|
175
|
+
* row is built from (§19.2). Reads snapshot history only, never live state,
|
|
176
|
+
* and returns `null` for every tick that is not a reviewable closed round so
|
|
177
|
+
* the callback's null rule collapses to one place:
|
|
178
|
+
*
|
|
179
|
+
* - a negative, non-integer, or out-of-range tick;
|
|
180
|
+
* - a tick the team has not reached, its current head included: a team at
|
|
181
|
+
* tick `N` recorded rounds up to `N - 1` and holds the rest live;
|
|
182
|
+
* - an undone or reset tick, which the history's cursor excludes;
|
|
183
|
+
* - an unknown or removed `teamIndex`, at any team count.
|
|
184
|
+
*
|
|
185
|
+
* The snapshot's own `context` already carries the shared store as it stood
|
|
186
|
+
* at that tick (facilitator shared writes land in the team contexts as they
|
|
187
|
+
* are made, and a snapshot is taken at the close of the round), so the
|
|
188
|
+
* point-in-time view needs no re-composition with the current store.
|
|
189
|
+
*/
|
|
190
|
+
pastTickView(tick: number, teamIndex?: number): PastTickView | null;
|
|
191
|
+
/**
|
|
192
|
+
* Compose committed past state for the UI `getPastState` callback: one row
|
|
193
|
+
* per (tick, team) the query reaches, ascending by tick then by team index.
|
|
194
|
+
*
|
|
195
|
+
* Built on {@link pastTickView} per tick per team rather than by walking
|
|
196
|
+
* the snapshot array, so every null rule the single reader encodes — not
|
|
197
|
+
* yet reached, undone, reset, out of range — is inherited here rather than
|
|
198
|
+
* reimplemented. Teams in an independent session are at different ticks,
|
|
199
|
+
* which is reason enough: one range is a different set of rounds per team.
|
|
200
|
+
*
|
|
201
|
+
* Unreachable (tick, team) pairs are omitted rather than collapsing the
|
|
202
|
+
* call, so the result is dense and an empty array means the query reaches
|
|
203
|
+
* nothing reviewable. `toTick` is effectively clamped to the last
|
|
204
|
+
* reviewable tick, because anything a team has not closed is skipped.
|
|
205
|
+
*
|
|
206
|
+
* Each entry carries the team's `index` and its display name as it reads
|
|
207
|
+
* now, from `nameOf`: the store holds no names, which are the session's
|
|
208
|
+
* (a rename included). `teamIndexes` is already resolved by the caller,
|
|
209
|
+
* which is the only layer that knows whether the asking surface has an own
|
|
210
|
+
* team.
|
|
211
|
+
*/
|
|
212
|
+
getPastStateView(range: {
|
|
213
|
+
fromTick: number;
|
|
214
|
+
toTick?: number;
|
|
215
|
+
capabilityIds?: string[];
|
|
216
|
+
}, teamIndexes: number[], nameOf: (index: number) => string): PastStateEntry[];
|
|
217
|
+
}
|
|
218
|
+
export {};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One automatic tick schedule (§11.2–§11.4).
|
|
3
|
+
*
|
|
4
|
+
* A session holds one per team in independent mode and one for the cohort
|
|
5
|
+
* otherwise. Everything here is bookkeeping over a {@link Clock}: the session
|
|
6
|
+
* decides when to ask the tick controller, and this decides when that answer
|
|
7
|
+
* says the next tick is due.
|
|
8
|
+
*/
|
|
9
|
+
import type { TickControllerResult, TimerState } from '@seriousgaming/sdk';
|
|
10
|
+
import type { Clock } from './clock';
|
|
11
|
+
export declare const IDLE_TIMER: TimerState;
|
|
12
|
+
/** When a result says the next tick is due, and whether that had to be clamped. */
|
|
13
|
+
export interface Schedule {
|
|
14
|
+
delayMs: number;
|
|
15
|
+
/** The display interval: the result's own when valid, the clamped one otherwise. */
|
|
16
|
+
intervalMs: number;
|
|
17
|
+
usedNextTickAt: boolean;
|
|
18
|
+
/** Why the result could not be honoured as returned, or null. */
|
|
19
|
+
clamped: string | null;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Where a tick controller result puts the next tick (§11.2, §11.8, §11.9).
|
|
23
|
+
*
|
|
24
|
+
* An out-of-range or malformed result is clamped to the nearest bound and the
|
|
25
|
+
* reason returned, never honoured and never turned into a disabled timer. A
|
|
26
|
+
* `nextTickAt` already past is due now, which the floor does not apply to
|
|
27
|
+
* (§11.3).
|
|
28
|
+
*/
|
|
29
|
+
export declare function scheduleFor(result: TickControllerResult, now: number): Schedule;
|
|
30
|
+
export type ResumeOutcome = 'resumed' | 're-evaluate' | 'idle';
|
|
31
|
+
export declare class TickTimer {
|
|
32
|
+
private readonly clock;
|
|
33
|
+
private readonly fire;
|
|
34
|
+
private pending;
|
|
35
|
+
private dueAt;
|
|
36
|
+
private intervalMs;
|
|
37
|
+
private enabled;
|
|
38
|
+
private paused;
|
|
39
|
+
private usedNextTickAt;
|
|
40
|
+
private pausedAt;
|
|
41
|
+
private remainingMs;
|
|
42
|
+
private pausedMs;
|
|
43
|
+
private scheduleStartedAt;
|
|
44
|
+
private extendedMs;
|
|
45
|
+
/** The answer the current schedule was built from, to tell a re-evaluation that changed nothing. */
|
|
46
|
+
private answer;
|
|
47
|
+
constructor(clock: Clock, fire: () => void);
|
|
48
|
+
/**
|
|
49
|
+
* Apply a tick controller's answer (§11.1). A disabled timer, a completed
|
|
50
|
+
* game or a spent tick limit schedules nothing. Returns the clamp reason
|
|
51
|
+
* when the result had to be clamped, for the caller to report.
|
|
52
|
+
*
|
|
53
|
+
* A re-evaluation (§11.1a) that returns the answer the schedule was built
|
|
54
|
+
* from keeps that schedule, extension and paused remainder included;
|
|
55
|
+
* only a tick, or a different answer, starts a new window.
|
|
56
|
+
*/
|
|
57
|
+
apply(result: TickControllerResult | null, canTick: boolean, reevaluation?: boolean): string | null;
|
|
58
|
+
pause(): void;
|
|
59
|
+
/**
|
|
60
|
+
* Resume (§11.4). Interval mode continues from the time that was left;
|
|
61
|
+
* scheduled mode tells the caller to re-evaluate, because the target may
|
|
62
|
+
* have passed during the pause and the missed tick is not fired.
|
|
63
|
+
*/
|
|
64
|
+
resume(): ResumeOutcome;
|
|
65
|
+
/**
|
|
66
|
+
* Move the scheduled tick by `ms` (§12.5): only this window, clamped at
|
|
67
|
+
* now, and never bounded by §11.8. Returns why it was refused, or null.
|
|
68
|
+
*/
|
|
69
|
+
extend(ms: number): string | null;
|
|
70
|
+
/** Stop everything, as when the team is removed or the session stops. */
|
|
71
|
+
cancel(): void;
|
|
72
|
+
state(): TimerState;
|
|
73
|
+
private arm;
|
|
74
|
+
private cancelPending;
|
|
75
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every `blob:` reference in an endpoint's response, resolved to a URL (§6.12).
|
|
3
|
+
*
|
|
4
|
+
* A game surface turns a reference into something it can fetch with
|
|
5
|
+
* `getAssetUrl`. A caller outside the game has no such callback, so a report an
|
|
6
|
+
* endpoint wrote with `writeBlob` reached it as an id it could do nothing with.
|
|
7
|
+
* The transport answering the call is the one that knows where blobs are
|
|
8
|
+
* served, so it resolves them here rather than in the session.
|
|
9
|
+
*/
|
|
10
|
+
export declare function blobLinks(response: unknown, urlFor: (blobId: string) => string): Record<string, string>;
|