@dreamboard-games/cli 0.1.30-alpha.1 → 0.1.30-alpha.3
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/README.md +179 -22
- package/dist/agent-verifier/agent-workspace-verifier.mjs +30 -30
- package/dist/agent-verifier/agent-workspace-verifier.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-JH22JNYD.mjs → chunk-3UKQVWLV.mjs} +82 -19
- package/dist/agent-verifier/chunk-3UKQVWLV.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-4WD3YU2E.mjs → chunk-776W3UGV.mjs} +4 -3
- package/dist/agent-verifier/chunk-776W3UGV.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-CJEEA6NJ.mjs → chunk-7WWGFAAU.mjs} +9 -10
- package/dist/agent-verifier/chunk-7WWGFAAU.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-2SZHMP6F.mjs → chunk-A64ZZUZV.mjs} +6 -9
- package/dist/agent-verifier/chunk-A64ZZUZV.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-6A5HRJMQ.mjs → chunk-E7SSWJXJ.mjs} +62 -99
- package/dist/agent-verifier/chunk-E7SSWJXJ.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-2GBBP27W.mjs → chunk-F2DIOJJZ.mjs} +1 -0
- package/dist/agent-verifier/chunk-F2DIOJJZ.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-CFU5EWIC.mjs → chunk-G42BGGG2.mjs} +7 -6
- package/dist/agent-verifier/chunk-G42BGGG2.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-SHUMAVAP.mjs → chunk-H76MT5UR.mjs} +7 -9
- package/dist/agent-verifier/chunk-H76MT5UR.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-7E65UQLY.mjs → chunk-HGMUAL33.mjs} +3 -2
- package/dist/agent-verifier/chunk-HGMUAL33.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-LM3OZLZG.mjs → chunk-IAYRNVUC.mjs} +1 -0
- package/dist/agent-verifier/chunk-IAYRNVUC.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-VYJTHSYR.mjs → chunk-JGT4P4UD.mjs} +2 -1
- package/dist/agent-verifier/chunk-JGT4P4UD.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-CEDUHGNH.mjs → chunk-LUZ7KE6H.mjs} +8 -3
- package/dist/agent-verifier/chunk-LUZ7KE6H.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-2E5P5NWG.mjs → chunk-NAK77WXW.mjs} +58 -126
- package/dist/agent-verifier/chunk-NAK77WXW.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-SYPLYRGB.mjs → chunk-O4YCPU7C.mjs} +116 -15
- package/dist/agent-verifier/chunk-O4YCPU7C.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-BVVNBJM4.mjs → chunk-S34FRJHS.mjs} +2 -1
- package/dist/agent-verifier/chunk-S34FRJHS.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-HJFQDSTU.mjs → chunk-SH5JKYOB.mjs} +6 -5
- package/dist/agent-verifier/chunk-SH5JKYOB.mjs.map +1 -0
- package/dist/agent-verifier/chunk-SKI2ESE5.mjs +44 -0
- package/dist/agent-verifier/{chunk-MINCYHXN.mjs → chunk-TAEQKBJB.mjs} +1 -0
- package/dist/agent-verifier/chunk-TAEQKBJB.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-CEQ2VJWN.mjs → chunk-UIOLGH4A.mjs} +2 -1
- package/dist/agent-verifier/chunk-UIOLGH4A.mjs.map +1 -0
- package/dist/agent-verifier/chunk-UIZNWRM6.mjs +2432 -0
- package/dist/agent-verifier/chunk-UIZNWRM6.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-2QMNAVV4.mjs → chunk-VS573ERH.mjs} +2 -1
- package/dist/agent-verifier/chunk-VS573ERH.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-EOQIV6PS.mjs → chunk-W3N3QJ4V.mjs} +75 -100
- package/dist/agent-verifier/chunk-W3N3QJ4V.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-EIQWDQWJ.mjs → chunk-XGWCY624.mjs} +11 -12
- package/dist/agent-verifier/chunk-XGWCY624.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-7653FPGJ.mjs → chunk-XQXDOBYB.mjs} +3 -2
- package/dist/agent-verifier/chunk-XQXDOBYB.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-MRCUP5SW.mjs → chunk-YE7UAO3T.mjs} +1 -0
- package/dist/agent-verifier/chunk-YE7UAO3T.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-RBDDIIPM.mjs → chunk-ZEELHSY3.mjs} +1 -0
- package/dist/agent-verifier/chunk-ZEELHSY3.mjs.map +1 -0
- package/dist/agent-verifier/{compile-5QSPIOUT.mjs → compile-TEQVA46V.mjs} +24 -25
- package/dist/agent-verifier/compile-TEQVA46V.mjs.map +1 -0
- package/dist/agent-verifier/{global-config-WX3ZZIVU.mjs → global-config-Y2NTSK4R.mjs} +6 -5
- package/dist/{keychain-backend-JHTXAKWC.js → agent-verifier/keychain-backend-SPQWGKZN.mjs} +2 -2
- package/dist/agent-verifier/keychain-backend-SPQWGKZN.mjs.map +1 -0
- package/dist/agent-verifier/{local-files-MTPLP62S.mjs → local-files-JFOQQZDL.mjs} +10 -11
- package/dist/agent-verifier/local-files-JFOQQZDL.mjs.map +1 -0
- package/dist/agent-verifier/local-typecheck-XVGWI75X.mjs +10 -0
- package/dist/agent-verifier/local-typecheck-XVGWI75X.mjs.map +1 -0
- package/dist/agent-verifier/{materialize-workspace-FKALAE2T.mjs → materialize-workspace-ZAVGQQSF.mjs} +17 -18
- package/dist/agent-verifier/materialize-workspace-ZAVGQQSF.mjs.map +1 -0
- package/dist/agent-verifier/{project-state-7GR6BQTQ.mjs → project-state-K576C2TE.mjs} +3 -2
- package/dist/agent-verifier/project-state-K576C2TE.mjs.map +1 -0
- package/dist/{prompt-GMZABCJC.js → agent-verifier/prompt-MJRJMOGQ.mjs} +2 -2
- package/dist/agent-verifier/prompt-MJRJMOGQ.mjs.map +1 -0
- package/dist/agent-verifier/{reducer-bundle-preflight-C73LEXI2.mjs → reducer-bundle-preflight-LXNJUBKL.mjs} +6 -9
- package/dist/agent-verifier/reducer-bundle-preflight-LXNJUBKL.mjs.map +1 -0
- package/dist/agent-verifier/reducer-contract-preflight-TUMQ43JV.mjs +11 -0
- package/dist/agent-verifier/reducer-contract-preflight-TUMQ43JV.mjs.map +1 -0
- package/dist/agent-verifier/{reducer-native-test-harness-GMWBUISX.mjs → reducer-native-test-harness-CHX5MBL5.mjs} +14 -17
- package/dist/agent-verifier/reducer-native-test-harness-CHX5MBL5.mjs.map +1 -0
- package/dist/agent-verifier/static-scaffold-R7SVDRQI.mjs +27 -0
- package/dist/agent-verifier/static-scaffold-R7SVDRQI.mjs.map +1 -0
- package/dist/agent-verifier/{sync-3DUQH32H.mjs → sync-THAI546U.mjs} +31 -37
- package/dist/agent-verifier/sync-THAI546U.mjs.map +1 -0
- package/dist/agent-verifier/{test-P4U5INTD.mjs → test-AFAQFKOB.mjs} +28 -31
- package/dist/agent-verifier/test-AFAQFKOB.mjs.map +1 -0
- package/dist/agent-verifier/workspace-codegen-2ZMQRIKJ.mjs +10 -0
- package/dist/agent-verifier/workspace-codegen-2ZMQRIKJ.mjs.map +1 -0
- package/dist/agent-verifier/{workspace-dependencies-HZ6VVS4G.mjs → workspace-dependencies-NOOQBK6I.mjs} +5 -4
- package/dist/agent-verifier/workspace-dependencies-NOOQBK6I.mjs.map +1 -0
- package/dist/{chunk-C6UAT6EH.js → chunk-N7XPNNUI.js} +9 -12
- package/dist/chunk-N7XPNNUI.js.map +1 -0
- package/dist/chunk-SEGVTWSK.js +44 -0
- package/dist/chunk-SEGVTWSK.js.map +1 -0
- package/dist/{chunk-RS7UXJZV.js → chunk-TAQKH67O.js} +21300 -35881
- package/dist/chunk-TAQKH67O.js.map +1 -0
- package/dist/{global-config-AGFBDFYD.js → global-config-S4ZIPECE.js} +3 -3
- package/dist/global-config-S4ZIPECE.js.map +1 -0
- package/dist/index.js +415 -37
- package/dist/index.js.map +1 -1
- package/dist/internal.js +3 -4
- package/dist/{agent-verifier/keychain-backend-TNOPQV3Z.mjs → keychain-backend-HDF4TZDL.js} +2 -1
- package/dist/{agent-verifier/prompt-3BAINGAQ.mjs → prompt-NDV3AE5L.js} +2 -1
- package/package.json +8 -7
- package/skills/dreamboard/references/building-your-first-game.md +510 -0
- package/skills/dreamboard/references/cli.md +104 -0
- package/skills/dreamboard/references/game-interface.md +548 -0
- package/skills/dreamboard/references/manifest-authoring.md +597 -0
- package/skills/dreamboard/references/quickstart.md +66 -0
- package/skills/dreamboard/references/reducer.md +864 -0
- package/skills/dreamboard/references/rule-authoring.md +147 -0
- package/skills/dreamboard/references/testing.md +249 -0
- package/skills/dreamboard/scripts/events-extract.mjs +218 -0
- package/dist/agent-verifier/chunk-54TAYXUD.mjs +0 -12
- package/dist/agent-verifier/chunk-6UUJEYDV.mjs +0 -213
- package/dist/agent-verifier/chunk-HBNDKQT5.mjs +0 -8381
- package/dist/agent-verifier/chunk-LI3ZR3BI.mjs +0 -41
- package/dist/agent-verifier/chunk-U6OJN7XS.mjs +0 -8092
- package/dist/agent-verifier/chunk-XYDL7GY6.mjs +0 -10
- package/dist/agent-verifier/local-typecheck-QFYYAZOK.mjs +0 -9
- package/dist/agent-verifier/reducer-contract-preflight-22X7DSZW.mjs +0 -10
- package/dist/agent-verifier/static-scaffold-AJMZZQWS.mjs +0 -28
- package/dist/agent-verifier/testing-5K2BJYF2.mjs +0 -674
- package/dist/agent-verifier/workspace-codegen-JDZJRSDV.mjs +0 -11
- package/dist/chunk-2H7UOFLK.js +0 -11
- package/dist/chunk-7FOO4AJI.js +0 -50
- package/dist/chunk-7FOO4AJI.js.map +0 -1
- package/dist/chunk-C6UAT6EH.js.map +0 -1
- package/dist/chunk-RS7UXJZV.js.map +0 -1
- package/dist/internal.d.ts +0 -311
- package/dist/runtime-packages/ui-host-runtime/src/actor-principal.ts +0 -71
- package/dist/runtime-packages/ui-host-runtime/src/browser-interaction.ts +0 -139
- package/dist/runtime-packages/ui-host-runtime/src/components/host-controls.tsx +0 -374
- package/dist/runtime-packages/ui-host-runtime/src/components/host-feedback-toaster.tsx +0 -266
- package/dist/runtime-packages/ui-host-runtime/src/components/host-feedback.tsx +0 -212
- package/dist/runtime-packages/ui-host-runtime/src/components/host-primitives.tsx +0 -271
- package/dist/runtime-packages/ui-host-runtime/src/components/host-session-metadata.tsx +0 -135
- package/dist/runtime-packages/ui-host-runtime/src/components/index.ts +0 -5
- package/dist/runtime-packages/ui-host-runtime/src/components/perf-overlay.tsx +0 -194
- package/dist/runtime-packages/ui-host-runtime/src/gameplay-authority-transport.ts +0 -626
- package/dist/runtime-packages/ui-host-runtime/src/host-controls.tsx +0 -1
- package/dist/runtime-packages/ui-host-runtime/src/host-feedback.tsx +0 -1
- package/dist/runtime-packages/ui-host-runtime/src/host-session-transport.ts +0 -294
- package/dist/runtime-packages/ui-host-runtime/src/index.ts +0 -3
- package/dist/runtime-packages/ui-host-runtime/src/logger.ts +0 -11
- package/dist/runtime-packages/ui-host-runtime/src/perf.ts +0 -324
- package/dist/runtime-packages/ui-host-runtime/src/plugin-bridge.ts +0 -195
- package/dist/runtime-packages/ui-host-runtime/src/plugin-health-check.ts +0 -138
- package/dist/runtime-packages/ui-host-runtime/src/plugin-messages.ts +0 -159
- package/dist/runtime-packages/ui-host-runtime/src/plugin-session-gateway.ts +0 -551
- package/dist/runtime-packages/ui-host-runtime/src/runtime/index.ts +0 -13
- package/dist/runtime-packages/ui-host-runtime/src/screenshot/projection-to-snapshot.ts +0 -122
- package/dist/runtime-packages/ui-host-runtime/src/screenshot/static-store-api.ts +0 -26
- package/dist/runtime-packages/ui-host-runtime/src/session-ingress-controller.ts +0 -583
- package/dist/runtime-packages/ui-host-runtime/src/session-ingress.ts +0 -219
- package/dist/runtime-packages/ui-host-runtime/src/session-live-runtime.ts +0 -117
- package/dist/runtime-packages/ui-host-runtime/src/session-model.ts +0 -431
- package/dist/runtime-packages/ui-host-runtime/src/session-projection.ts +0 -211
- package/dist/runtime-packages/ui-host-runtime/src/session-recovery.ts +0 -80
- package/dist/runtime-packages/ui-host-runtime/src/session-state-reducer.ts +0 -1034
- package/dist/runtime-packages/ui-host-runtime/src/sse-manager.ts +0 -416
- package/dist/runtime-packages/ui-host-runtime/src/unified-session-store.ts +0 -184
- package/dist/testing-KLSV6CPJ.js +0 -674
- package/dist/testing-KLSV6CPJ.js.map +0 -1
- /package/dist/{chunk-2H7UOFLK.js.map → agent-verifier/chunk-SKI2ESE5.mjs.map} +0 -0
- /package/dist/{global-config-AGFBDFYD.js.map → agent-verifier/global-config-Y2NTSK4R.mjs.map} +0 -0
- /package/dist/{keychain-backend-JHTXAKWC.js.map → keychain-backend-HDF4TZDL.js.map} +0 -0
- /package/dist/{prompt-GMZABCJC.js.map → prompt-NDV3AE5L.js.map} +0 -0
package/README.md
CHANGED
|
@@ -1,50 +1,207 @@
|
|
|
1
|
-
#
|
|
1
|
+
# dreamboard
|
|
2
2
|
|
|
3
|
-
Dreamboard CLI
|
|
3
|
+
Dreamboard CLI for working with Dreamboard games from your own editor/tooling.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
-
|
|
5
|
+
Dreamboard is built to take you from napkin sketch to playable prototype without the paper cuts:
|
|
6
|
+
|
|
7
|
+
- Describe the game you want to make.
|
|
8
|
+
- Generate the rules, components, and scaffolding.
|
|
9
|
+
- Playtest instantly with a frictionless lobby and live iteration loops.
|
|
10
|
+
|
|
11
|
+
The platform’s core promise is the same one described on the landing page: digital prototyping for everyone, with AI helping you move from idea to playable faster.
|
|
8
12
|
|
|
9
13
|
## Install
|
|
10
14
|
|
|
15
|
+
Published npm package:
|
|
16
|
+
|
|
11
17
|
```bash
|
|
12
18
|
npm install -g dreamboard
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
The published CLI targets Node 20+.
|
|
22
|
+
|
|
23
|
+
## Why Dreamboard
|
|
24
|
+
|
|
25
|
+
- `Describe`: start from theme, mechanics, and player experience instead of boilerplate setup.
|
|
26
|
+
- `Generate`: Dreamboard handles the sandbox primitives like turns, hands, and structured scaffolding.
|
|
27
|
+
- `Playtest`: share a live prototype instead of printing fresh paper every time a rule changes.
|
|
28
|
+
- `Iterate live`: keep testing momentum by changing values and flows without resetting the whole process.
|
|
29
|
+
|
|
30
|
+
## Authentication
|
|
31
|
+
|
|
32
|
+
Use browser login:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
13
35
|
dreamboard login
|
|
14
36
|
```
|
|
15
37
|
|
|
16
|
-
|
|
38
|
+
The published CLI stores your refreshable session in:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
~/.dreamboard/config.json
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
That stored session includes the refresh token the CLI needs to renew access automatically. Direct JWT injection is intentionally not part of the published CLI flow.
|
|
45
|
+
|
|
46
|
+
## Source Checkout Setup
|
|
47
|
+
|
|
48
|
+
For local source-checkout development, install workspace dependencies with pnpm and keep Bun available for local embedded-harness workflows:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
pnpm install
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Playwright (for `dreamboard run`):
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npx playwright install
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Commands
|
|
61
|
+
|
|
62
|
+
Create a new game:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
dreamboard new my-game --description "A trick-taking card game"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Clone an existing game:
|
|
17
69
|
|
|
18
70
|
```bash
|
|
19
|
-
dreamboard
|
|
20
|
-
cd my-game
|
|
71
|
+
dreamboard clone my-game
|
|
21
72
|
```
|
|
22
73
|
|
|
23
|
-
|
|
74
|
+
Sync local authored changes and regenerate scaffolded files:
|
|
24
75
|
|
|
25
76
|
```bash
|
|
26
77
|
dreamboard sync
|
|
78
|
+
dreamboard sync --update-sdk
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
If the remote has advanced unexpectedly, reconcile authored changes explicitly with:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
dreamboard pull
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Compile the current authored head:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
27
90
|
dreamboard compile
|
|
28
|
-
dreamboard
|
|
91
|
+
dreamboard compile --skip-local-check
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Inspect local vs remote state:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
dreamboard status
|
|
98
|
+
dreamboard status --json
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Run the game locally (server-compiled UI):
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
dreamboard run
|
|
105
|
+
dreamboard run --players 4
|
|
106
|
+
dreamboard run --seed 1337
|
|
107
|
+
dreamboard run --new-session
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
If no successful compile exists for the current authored state yet, `dreamboard run` will ask you to run `dreamboard compile` first.
|
|
111
|
+
By default, the CLI uses `manifest.json`'s `playerConfig.minPlayers` to decide how many seats to create.
|
|
112
|
+
|
|
113
|
+
`dreamboard run` now defaults to a wait-and-observe loop when no scenario is provided:
|
|
114
|
+
|
|
115
|
+
1. Reuse the previous active session (`--resume` defaults to true) unless `--new-session` is set.
|
|
116
|
+
2. Subscribe to session SSE events.
|
|
117
|
+
3. Exit when `YOUR_TURN` (default `--until`) or `GAME_ENDED` is received.
|
|
118
|
+
4. Persist artifacts in `.dreamboard/run/`:
|
|
119
|
+
- `session.json`
|
|
120
|
+
- `events.ndjson`
|
|
121
|
+
- `latest-your-turn.json`
|
|
122
|
+
- `last-run-summary.json`
|
|
123
|
+
|
|
124
|
+
`dreamboard run` is deterministic-by-default for new sessions: if `--seed` is not provided, it uses `1337`.
|
|
125
|
+
|
|
126
|
+
Useful flags:
|
|
127
|
+
|
|
128
|
+
- `--until YOUR_TURN|GAME_ENDED|ANY`
|
|
129
|
+
- `--observe-events turns|all` (default `turns`; persist `YOUR_TURN` and `ACTION_REJECTED` messages)
|
|
130
|
+
- `--seed <int>` (deterministic RNG seed for new sessions, default `1337`)
|
|
131
|
+
- `--timeout-ms <ms>`
|
|
132
|
+
- `--max-events <count>`
|
|
133
|
+
- `--screenshot` (capture one Playwright screenshot for the selected run session)
|
|
134
|
+
- `--output <path>`
|
|
135
|
+
- `--delay <ms>`
|
|
136
|
+
- `--width <px>`
|
|
137
|
+
- `--height <px>`
|
|
138
|
+
- `--scenario-driver api|ui` (default `api`)
|
|
139
|
+
|
|
140
|
+
Playwright launch is now optional:
|
|
141
|
+
|
|
142
|
+
1. It is launched when `--scenario-driver ui` is used.
|
|
143
|
+
2. It is launched when `--screenshot` is used.
|
|
144
|
+
3. Default API scenarios (`--scenario` with `--scenario-driver api`) do not require Playwright.
|
|
145
|
+
4. Pure observe runs (`dreamboard run` without scenario/screenshot) do not require a browser session.
|
|
146
|
+
|
|
147
|
+
## Scenario Files
|
|
148
|
+
|
|
149
|
+
`dreamboard run --scenario <file>` supports scenario JSON (API driver by default):
|
|
150
|
+
|
|
151
|
+
```json
|
|
152
|
+
{
|
|
153
|
+
"steps": [
|
|
154
|
+
{
|
|
155
|
+
"playerId": "player-1",
|
|
156
|
+
"actionType": "playCard",
|
|
157
|
+
"parameters": { "cardId": "hearts-7" },
|
|
158
|
+
"turns": 1
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"playerId": "player-1",
|
|
162
|
+
"actionType": "endTurn",
|
|
163
|
+
"parameters": {},
|
|
164
|
+
"turns": 1
|
|
165
|
+
}
|
|
166
|
+
]
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
`playerId` is required on every scenario step. The CLI executes all steps in order per invocation:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
dreamboard run
|
|
174
|
+
dreamboard run --scenario path/to/scenario.json
|
|
175
|
+
dreamboard run --scenario path/to/scenario.json --scenario-driver ui
|
|
29
176
|
```
|
|
30
177
|
|
|
31
|
-
|
|
178
|
+
If there is no current `.dreamboard/run/latest-your-turn.json` for the active session (for example with `--new-session`), `dreamboard run --scenario ...` first observes SSE until it receives the initial `YOUR_TURN`, then starts executing scenario steps.
|
|
179
|
+
|
|
180
|
+
API-driven scenarios are strict per step: after each `submitAction`, the CLI waits for either `ACTION_EXECUTED` or `ACTION_REJECTED`. On rejection, it stops immediately with `stopReason=scenario_rejected`.
|
|
181
|
+
|
|
182
|
+
Screenshots are saved to `.dreamboard/screenshots/` by default. The CLI captures the same session selected by `--resume` / `--new-session`.
|
|
32
183
|
|
|
33
|
-
|
|
184
|
+
To capture a screenshot during observe or scenario runs:
|
|
34
185
|
|
|
35
186
|
```bash
|
|
36
|
-
dreamboard
|
|
37
|
-
dreamboard
|
|
38
|
-
dreamboard
|
|
187
|
+
dreamboard run --screenshot
|
|
188
|
+
dreamboard run --scenario path/to/scenario.json --screenshot
|
|
189
|
+
dreamboard run --screenshot --output ./shot.png --delay 1500 --width 1440 --height 900
|
|
39
190
|
```
|
|
40
191
|
|
|
41
|
-
|
|
192
|
+
## Notes
|
|
42
193
|
|
|
43
|
-
-
|
|
44
|
-
- `
|
|
45
|
-
-
|
|
46
|
-
-
|
|
194
|
+
- Project state lives in `.dreamboard/project.json`.
|
|
195
|
+
- Snapshots for `status` are stored in `.dreamboard/snapshot.json`.
|
|
196
|
+
- Published/public CLI installs target Node 20+ and support remote workflows.
|
|
197
|
+
- Published/public CLI builds are production-only; they do not support environment overrides or direct JWT injection.
|
|
198
|
+
- Local embedded-harness testing remains Bun-only and requires a source checkout with local backend support.
|
|
199
|
+
- Internal source-checkout builds may expose extra auth and environment helpers, but those are not part of the published CLI contract.
|
|
47
200
|
|
|
48
|
-
##
|
|
201
|
+
## Skill Source
|
|
49
202
|
|
|
50
|
-
|
|
203
|
+
- Public skill source lives under `skills/dreamboard/`.
|
|
204
|
+
- `skills/dreamboard/references/*.md` are generated from `docs/` via `pnpm run sync:skill-docs`.
|
|
205
|
+
- `dreamboard new` installs the bundled skill into `.agents/skills/dreamboard/` in the generated game project.
|
|
206
|
+
- The Node helper script for run-artifact inspection is `.agents/skills/dreamboard/scripts/events-extract.mjs`.
|
|
207
|
+
- Public GitHub repo for the CLI is [dreamboard-games/dreamboard-cli](https://github.com/dreamboard-games/dreamboard-cli).
|
|
@@ -3,16 +3,16 @@ import {
|
|
|
3
3
|
assertCompilerPortableDependencies,
|
|
4
4
|
consola,
|
|
5
5
|
resolveProjectContext
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-3UKQVWLV.mjs";
|
|
7
|
+
import "./chunk-SH5JKYOB.mjs";
|
|
8
|
+
import "./chunk-776W3UGV.mjs";
|
|
9
|
+
import "./chunk-NAK77WXW.mjs";
|
|
10
|
+
import "./chunk-TAEQKBJB.mjs";
|
|
11
|
+
import "./chunk-IAYRNVUC.mjs";
|
|
12
|
+
import "./chunk-H76MT5UR.mjs";
|
|
13
|
+
import "./chunk-SKI2ESE5.mjs";
|
|
14
14
|
|
|
15
|
-
// src/agent-workspace-verifier.ts
|
|
15
|
+
// src/agent-verifier/agent-workspace-verifier.ts
|
|
16
16
|
import { readFile } from "fs/promises";
|
|
17
17
|
main().catch((error) => {
|
|
18
18
|
console.error(error instanceof Error ? error.message : String(error));
|
|
@@ -39,15 +39,17 @@ function printHelp() {
|
|
|
39
39
|
|
|
40
40
|
Usage:
|
|
41
41
|
agent-workspace-verifier materialize-prepared-workspace --input <path>
|
|
42
|
-
agent-workspace-verifier preflight [--env local|
|
|
43
|
-
agent-workspace-verifier verify [--env local|
|
|
44
|
-
agent-workspace-verifier fin [--env local|
|
|
42
|
+
agent-workspace-verifier preflight [--env local|staging|prod]
|
|
43
|
+
agent-workspace-verifier verify [--env local|staging|prod]
|
|
44
|
+
agent-workspace-verifier fin [--env local|staging|prod]
|
|
45
45
|
`);
|
|
46
46
|
}
|
|
47
47
|
async function materializePreparedWorkspace(args) {
|
|
48
48
|
const inputPath = readRequiredOption(args, "--input");
|
|
49
|
-
const
|
|
50
|
-
const
|
|
49
|
+
const { materializeWorkspaceProject } = await import("./materialize-workspace-ZAVGQQSF.mjs");
|
|
50
|
+
const input = JSON.parse(
|
|
51
|
+
await readFile(inputPath, "utf8")
|
|
52
|
+
);
|
|
51
53
|
await materializeWorkspaceProject({
|
|
52
54
|
...input,
|
|
53
55
|
agentManaged: true,
|
|
@@ -80,9 +82,9 @@ async function verifyAgentWorkspace(rawMode, args) {
|
|
|
80
82
|
}
|
|
81
83
|
async function runFullBackendConnectedVerification(parsedFlags) {
|
|
82
84
|
const [{ default: cmdSync }, { default: cmdCompile }, { default: cmdTest }] = await Promise.all([
|
|
83
|
-
import("./sync-
|
|
84
|
-
import("./compile-
|
|
85
|
-
import("./test-
|
|
85
|
+
import("./sync-THAI546U.mjs"),
|
|
86
|
+
import("./compile-TEQVA46V.mjs"),
|
|
87
|
+
import("./test-AFAQFKOB.mjs")
|
|
86
88
|
]);
|
|
87
89
|
await runCommandDefinition(cmdSync, { ...parsedFlags, force: true });
|
|
88
90
|
await runCommandDefinition(cmdCompile, parsedFlags);
|
|
@@ -90,10 +92,7 @@ async function runFullBackendConnectedVerification(parsedFlags) {
|
|
|
90
92
|
resolveTestSubCommand(cmdTest, "generate"),
|
|
91
93
|
parsedFlags
|
|
92
94
|
);
|
|
93
|
-
await runCommandDefinition(
|
|
94
|
-
resolveTestSubCommand(cmdTest, "run"),
|
|
95
|
-
parsedFlags
|
|
96
|
-
);
|
|
95
|
+
await runCommandDefinition(resolveTestSubCommand(cmdTest, "run"), parsedFlags);
|
|
97
96
|
}
|
|
98
97
|
async function runCommandDefinition(command, args) {
|
|
99
98
|
if (!command.run) {
|
|
@@ -149,12 +148,12 @@ async function runCloudLocalVerification(projectRoot, projectConfig, config) {
|
|
|
149
148
|
{ assertReducerContractPreflight },
|
|
150
149
|
{ getProjectLocalMaintainerRegistry }
|
|
151
150
|
] = await Promise.all([
|
|
152
|
-
import("./static-scaffold-
|
|
153
|
-
import("./local-files-
|
|
154
|
-
import("./workspace-codegen-
|
|
155
|
-
import("./workspace-dependencies-
|
|
156
|
-
import("./reducer-contract-preflight-
|
|
157
|
-
import("./project-state-
|
|
151
|
+
import("./static-scaffold-R7SVDRQI.mjs"),
|
|
152
|
+
import("./local-files-JFOQQZDL.mjs"),
|
|
153
|
+
import("./workspace-codegen-2ZMQRIKJ.mjs"),
|
|
154
|
+
import("./workspace-dependencies-NOOQBK6I.mjs"),
|
|
155
|
+
import("./reducer-contract-preflight-TUMQ43JV.mjs"),
|
|
156
|
+
import("./project-state-K576C2TE.mjs")
|
|
158
157
|
]);
|
|
159
158
|
consola.start("Refreshing static scaffold...");
|
|
160
159
|
await scaffoldStaticWorkspace(projectRoot, "update", {
|
|
@@ -168,8 +167,8 @@ async function runCloudLocalVerification(projectRoot, projectConfig, config) {
|
|
|
168
167
|
consola.start("Validating reducer contract...");
|
|
169
168
|
await assertReducerContractPreflight(projectRoot);
|
|
170
169
|
const [{ runLocalTypecheck }, { assertReducerBundleSmoke }] = await Promise.all([
|
|
171
|
-
import("./local-typecheck-
|
|
172
|
-
import("./reducer-bundle-preflight-
|
|
170
|
+
import("./local-typecheck-XVGWI75X.mjs"),
|
|
171
|
+
import("./reducer-bundle-preflight-LXNJUBKL.mjs")
|
|
173
172
|
]);
|
|
174
173
|
consola.start("Running local typecheck...");
|
|
175
174
|
const typecheckResult = await runLocalTypecheck(projectRoot);
|
|
@@ -187,7 +186,7 @@ async function runCloudLocalVerification(projectRoot, projectConfig, config) {
|
|
|
187
186
|
generateReducerNativeArtifacts,
|
|
188
187
|
isReducerNativeTestingWorkspace,
|
|
189
188
|
runReducerNativeScenarios
|
|
190
|
-
} = await import("./reducer-native-test-harness-
|
|
189
|
+
} = await import("./reducer-native-test-harness-CHX5MBL5.mjs");
|
|
191
190
|
if (await isReducerNativeTestingWorkspace(projectRoot)) {
|
|
192
191
|
const { bases } = await generateReducerNativeArtifacts({
|
|
193
192
|
projectRoot,
|
|
@@ -225,3 +224,4 @@ function readRequiredOption(args, name) {
|
|
|
225
224
|
}
|
|
226
225
|
return value;
|
|
227
226
|
}
|
|
227
|
+
//# sourceMappingURL=agent-workspace-verifier.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/agent-verifier/agent-workspace-verifier.ts"],"sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport consola from \"consola\";\nimport type { CommandDef } from \"citty\";\nimport type { ConfigFlags } from \"../flags.js\";\nimport type { ProjectConfig, ResolvedConfig } from \"../types.js\";\nimport { resolveProjectContext } from \"../config/resolve.js\";\nimport { assertCompilerPortableDependencies } from \"../services/project/dependency-portability.js\";\n\ntype VerificationMode = \"preflight\" | \"verify\" | \"fin\" | \"cloud-local\";\n\nmain().catch((error) => {\n console.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n});\n\nasync function main() {\n const [command, ...args] = process.argv.slice(2);\n if (command === \"--help\" || command === \"help\") {\n printHelp();\n return;\n }\n if (command === \"materialize-prepared-workspace\") {\n if (args.includes(\"--help\")) {\n printHelp();\n return;\n }\n await materializePreparedWorkspace(args);\n return;\n }\n await verifyAgentWorkspace(command ?? \"verify\", args);\n}\n\nfunction printHelp() {\n console.log(`Dreamboard agent workspace verifier\n\nUsage:\n agent-workspace-verifier materialize-prepared-workspace --input <path>\n agent-workspace-verifier preflight [--env local|staging|prod]\n agent-workspace-verifier verify [--env local|staging|prod]\n agent-workspace-verifier fin [--env local|staging|prod]\n`);\n}\n\nasync function materializePreparedWorkspace(args: string[]) {\n const inputPath = readRequiredOption(args, \"--input\");\n const { materializeWorkspaceProject } = await import(\n \"../services/project/materialize-workspace.js\"\n );\n const input = JSON.parse(\n await readFile(inputPath, \"utf8\"),\n ) as Parameters<typeof materializeWorkspaceProject>[0];\n await materializeWorkspaceProject({\n ...input,\n agentManaged: true,\n workspacePrepared: true,\n allowCreateGame: false,\n installDependencies: false,\n });\n consola.success(`Prepared workspace in ${input.targetDir}`);\n}\n\nasync function verifyAgentWorkspace(rawMode: string, args: string[]) {\n const requestedMode = parseVerificationMode(rawMode);\n const parsedFlags = parseConfigArgs(args);\n const { projectRoot, projectConfig, config } =\n await resolveProjectContext(parsedFlags);\n await assertCompilerPortableDependencies({ projectRoot, projectConfig });\n\n if (requestedMode === \"preflight\") {\n consola.success(\"Agent workspace preflight passed.\");\n return;\n }\n\n if (process.env.DREAMBOARD_AGENT_FINAL_SYNC_VERIFY === \"1\") {\n await runFullBackendConnectedVerification(parsedFlags);\n return;\n }\n\n if (\n requestedMode === \"cloud-local\" ||\n requestedMode === \"verify\" ||\n requestedMode === \"fin\"\n ) {\n await runCloudLocalVerification(projectRoot, projectConfig, config);\n return;\n }\n\n throw new Error(\n \"Agent workspaces now run cloud-local verification directly. Use `fin` only through the generated wrapper.\",\n );\n}\n\nasync function runFullBackendConnectedVerification(\n parsedFlags: ConfigFlags,\n): Promise<void> {\n const [{ default: cmdSync }, { default: cmdCompile }, { default: cmdTest }] =\n await Promise.all([\n import(\"../commands/sync.js\"),\n import(\"../commands/compile.js\"),\n import(\"../commands/test.js\"),\n ]);\n await runCommandDefinition(cmdSync, { ...parsedFlags, force: true });\n await runCommandDefinition(cmdCompile, parsedFlags);\n await runCommandDefinition(\n resolveTestSubCommand(cmdTest, \"generate\"),\n parsedFlags,\n );\n await runCommandDefinition(resolveTestSubCommand(cmdTest, \"run\"), parsedFlags);\n}\n\nasync function runCommandDefinition(\n command: CommandDef<any>,\n args: Record<string, unknown>,\n) {\n if (!command.run) {\n throw new Error(\"Verifier command is missing a runnable step.\");\n }\n await command.run({ args, rawArgs: [], cmd: command } as any);\n}\n\nfunction resolveTestSubCommand(\n cmdTest: CommandDef<any>,\n name: \"generate\" | \"run\",\n): CommandDef<any> {\n const subCommands = cmdTest.subCommands as\n | Record<string, CommandDef<any>>\n | undefined;\n const command = subCommands?.[name];\n if (!command) {\n throw new Error(`Verifier command is missing test ${name}.`);\n }\n return command;\n}\n\nfunction parseVerificationMode(value: unknown): VerificationMode {\n if (\n value === \"preflight\" ||\n value === \"verify\" ||\n value === \"fin\" ||\n value === \"cloud-local\"\n ) {\n return value;\n }\n throw new Error(\n `Expected mode to be one of preflight, verify, fin, or cloud-local. Received: ${String(value)}`,\n );\n}\n\nfunction parseConfigArgs(args: string[]): ConfigFlags {\n const flags: ConfigFlags = {};\n for (let index = 0; index < args.length; index += 1) {\n const arg = args[index];\n if (arg === \"--env\") {\n const value = args[++index];\n if (value === \"local\" || value === \"staging\" || value === \"prod\") {\n flags.env = value;\n continue;\n }\n throw new Error(`Invalid --env value: ${String(value)}`);\n }\n if (arg === \"--token\") {\n flags.token = args[++index];\n continue;\n }\n if (arg === \"--skip-install\") {\n continue;\n }\n throw new Error(`Unknown verifier argument: ${arg}`);\n }\n return flags;\n}\n\nasync function runCloudLocalVerification(\n projectRoot: string,\n projectConfig: ProjectConfig,\n config: ResolvedConfig,\n): Promise<void> {\n const [\n { scaffoldStaticWorkspace },\n { loadManifest },\n { applyWorkspaceCodegen },\n { reconcileWorkspaceDependencies },\n { assertReducerContractPreflight },\n { getProjectLocalMaintainerRegistry },\n ] = await Promise.all([\n import(\"../services/project/static-scaffold.js\"),\n import(\"../services/project/local-files.js\"),\n import(\"../services/project/workspace-codegen.js\"),\n import(\"../services/project/workspace-dependencies.js\"),\n import(\"../services/project/reducer-contract-preflight.js\"),\n import(\"../services/project/project-state.js\"),\n ]);\n\n consola.start(\"Refreshing static scaffold...\");\n await scaffoldStaticWorkspace(projectRoot, \"update\", {\n localMaintainerRegistry: getProjectLocalMaintainerRegistry(projectConfig),\n });\n\n consola.start(\"Applying workspace codegen...\");\n const manifest = await loadManifest(projectRoot);\n await applyWorkspaceCodegen({ projectRoot, manifest });\n\n consola.start(\"Reconciling workspace dependencies...\");\n await reconcileWorkspaceDependencies(projectRoot);\n\n consola.start(\"Validating reducer contract...\");\n await assertReducerContractPreflight(projectRoot);\n\n const [{ runLocalTypecheck }, { assertReducerBundleSmoke }] =\n await Promise.all([\n import(\"../services/project/local-typecheck.js\"),\n import(\"../services/project/reducer-bundle-preflight.js\"),\n ]);\n\n consola.start(\"Running local typecheck...\");\n const typecheckResult = await runLocalTypecheck(projectRoot);\n if (typecheckResult.skipped) {\n if (typecheckResult.output) consola.warn(typecheckResult.output);\n } else if (!typecheckResult.success) {\n if (typecheckResult.output) consola.error(typecheckResult.output);\n throw new Error(\n \"Local typecheck failed. Fix the diagnostics before syncing.\",\n );\n }\n\n consola.start(\"Smoke-testing reducer bundle...\");\n await assertReducerBundleSmoke({ projectRoot, manifest });\n\n const {\n generateReducerNativeArtifacts,\n isReducerNativeTestingWorkspace,\n runReducerNativeScenarios,\n } = await import(\n \"../services/testing/reducer-native-test-harness.js\"\n );\n\n if (await isReducerNativeTestingWorkspace(projectRoot)) {\n const { bases } = await generateReducerNativeArtifacts({\n projectRoot,\n gameId: projectConfig.gameId,\n compiledResultId: projectConfig.compile?.latestSuccessful?.resultId,\n });\n const summary = await runReducerNativeScenarios({\n projectRoot,\n projectConfig,\n resolvedConfig: config,\n runner: \"reducer\",\n gameId: projectConfig.gameId,\n compiledResultId: projectConfig.compile?.latestSuccessful?.resultId,\n });\n if (summary.failed > 0) {\n const failures = summary.results\n .filter((result) => !result.success)\n .map((result) =>\n result.error\n ? `FAIL ${result.id}: ${result.error}`\n : `FAIL ${result.id}`,\n );\n throw new Error(\n [\n `Reducer-native verification failed: ${summary.failed} failed, ${summary.passed} passed.`,\n ...failures,\n ].join(\"\\n\"),\n );\n }\n consola.success(`Generated ${bases.length} reducer-native base state(s).`);\n }\n\n consola.success(\"Agent workspace cloud-local verification passed.\");\n}\n\nfunction readRequiredOption(args: string[], name: string): string {\n const index = args.indexOf(name);\n const value = index >= 0 ? args[index + 1] : undefined;\n if (!value) {\n throw new Error(`${name} is required.`);\n }\n return value;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -3,25 +3,25 @@ import {
|
|
|
3
3
|
getStoredSession,
|
|
4
4
|
loadGlobalConfig,
|
|
5
5
|
setCredentials
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-SH5JKYOB.mjs";
|
|
7
7
|
import {
|
|
8
8
|
IS_PUBLISHED_BUILD,
|
|
9
9
|
PUBLISHED_ENVIRONMENT,
|
|
10
10
|
findProjectRoot,
|
|
11
11
|
loadProjectConfig
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-776W3UGV.mjs";
|
|
13
13
|
import {
|
|
14
14
|
client
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-NAK77WXW.mjs";
|
|
16
16
|
import {
|
|
17
17
|
readJsonFile,
|
|
18
18
|
readTextFileIfExists
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-IAYRNVUC.mjs";
|
|
20
20
|
import {
|
|
21
21
|
DEFAULT_API_BASE_URL,
|
|
22
22
|
DEFAULT_WEB_BASE_URL,
|
|
23
23
|
ENVIRONMENT_CONFIGS
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-H76MT5UR.mjs";
|
|
25
25
|
|
|
26
26
|
// ../../node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/core.mjs
|
|
27
27
|
var LogLevels = {
|
|
@@ -1105,7 +1105,7 @@ function createConsola2(options = {}) {
|
|
|
1105
1105
|
defaults: { level },
|
|
1106
1106
|
stdout: process.stdout,
|
|
1107
1107
|
stderr: process.stderr,
|
|
1108
|
-
prompt: (...args) => import("./prompt-
|
|
1108
|
+
prompt: (...args) => import("./prompt-MJRJMOGQ.mjs").then((m) => m.prompt(...args)),
|
|
1109
1109
|
reporters: options.reporters || [
|
|
1110
1110
|
options.fancy ?? !(T || R) ? new FancyReporter() : new BasicReporter()
|
|
1111
1111
|
],
|
|
@@ -1142,8 +1142,9 @@ function assertConfigured(config) {
|
|
|
1142
1142
|
throw new Error(
|
|
1143
1143
|
[
|
|
1144
1144
|
"Clerk OAuth CLI is not configured for this environment.",
|
|
1145
|
-
"
|
|
1146
|
-
"
|
|
1145
|
+
"The CLI expects first-party environments to be configured in its built-in registry.",
|
|
1146
|
+
"If this environment has no registered public Clerk OAuth client, create one and release a CLI with its client id.",
|
|
1147
|
+
"For emergency overrides, set the environment-specific DREAMBOARD_<ENV>_CLERK_OAUTH_* variables or DREAMBOARD_CLERK_OAUTH_*.",
|
|
1147
1148
|
"For local harness auth, use `pnpm auth:local` or the auto-bootstrapped local harness flows instead."
|
|
1148
1149
|
].join(" ")
|
|
1149
1150
|
);
|
|
@@ -1290,6 +1291,7 @@ function resolveConfig(globalConfig, flags, project, credentials) {
|
|
|
1290
1291
|
const resolvedWebBaseUrl = IS_PUBLISHED_BUILD ? publishedEnvConfig?.webBaseUrl ?? DEFAULT_WEB_BASE_URL : hasExplicitEnvironmentOverride ? projectLocalBaseUrl(project?.webBaseUrl, environment) || envConfig?.webBaseUrl || DEFAULT_WEB_BASE_URL : project?.webBaseUrl || envConfig?.webBaseUrl || DEFAULT_WEB_BASE_URL;
|
|
1291
1292
|
const webBaseUrl = valueOrUndefined(process.env.DREAMBOARD_WEB_BASE_URL) ?? resolvedWebBaseUrl;
|
|
1292
1293
|
const snapshot = buildCredentialSnapshot(flags, credentials, environment);
|
|
1294
|
+
const oauthConfig = resolveEnvironmentOAuthConfig(environment, envConfig);
|
|
1293
1295
|
return {
|
|
1294
1296
|
environment,
|
|
1295
1297
|
apiBaseUrl,
|
|
@@ -1297,14 +1299,31 @@ function resolveConfig(globalConfig, flags, project, credentials) {
|
|
|
1297
1299
|
authToken: snapshot.accessToken,
|
|
1298
1300
|
refreshToken: snapshot.refreshToken,
|
|
1299
1301
|
tokenExpiresAt: snapshot.tokenExpiresAt,
|
|
1300
|
-
clerkOAuthIssuer: snapshot.clerkOAuthIssuer ??
|
|
1301
|
-
clerkOAuthClientId: snapshot.clerkOAuthClientId ??
|
|
1302
|
-
clerkOAuthTokenUrl: snapshot.clerkOAuthTokenUrl ??
|
|
1303
|
-
clerkOAuthScope:
|
|
1302
|
+
clerkOAuthIssuer: snapshot.clerkOAuthIssuer ?? oauthConfig.issuer,
|
|
1303
|
+
clerkOAuthClientId: snapshot.clerkOAuthClientId ?? oauthConfig.clientId,
|
|
1304
|
+
clerkOAuthTokenUrl: snapshot.clerkOAuthTokenUrl ?? oauthConfig.tokenUrl,
|
|
1305
|
+
clerkOAuthScope: oauthConfig.scope,
|
|
1304
1306
|
authTokenSource: snapshot.authTokenSource,
|
|
1305
1307
|
refreshTokenSource: snapshot.refreshTokenSource
|
|
1306
1308
|
};
|
|
1307
1309
|
}
|
|
1310
|
+
function resolveEnvironmentOAuthConfig(environment, envConfig) {
|
|
1311
|
+
const prefix = environment.toUpperCase();
|
|
1312
|
+
return {
|
|
1313
|
+
issuer: valueOrUndefined(
|
|
1314
|
+
process.env[`DREAMBOARD_${prefix}_CLERK_OAUTH_ISSUER`]
|
|
1315
|
+
) ?? valueOrUndefined(process.env.DREAMBOARD_CLERK_OAUTH_ISSUER) ?? envConfig?.clerkOAuthIssuer,
|
|
1316
|
+
clientId: valueOrUndefined(
|
|
1317
|
+
process.env[`DREAMBOARD_${prefix}_CLERK_OAUTH_CLIENT_ID`]
|
|
1318
|
+
) ?? valueOrUndefined(process.env.DREAMBOARD_CLERK_OAUTH_CLIENT_ID) ?? envConfig?.clerkOAuthClientId,
|
|
1319
|
+
tokenUrl: valueOrUndefined(
|
|
1320
|
+
process.env[`DREAMBOARD_${prefix}_CLERK_OAUTH_TOKEN_URL`]
|
|
1321
|
+
) ?? valueOrUndefined(process.env.DREAMBOARD_CLERK_OAUTH_TOKEN_URL) ?? envConfig?.clerkOAuthTokenUrl,
|
|
1322
|
+
scope: valueOrUndefined(
|
|
1323
|
+
process.env[`DREAMBOARD_${prefix}_CLERK_OAUTH_SCOPE`]
|
|
1324
|
+
) ?? valueOrUndefined(process.env.DREAMBOARD_CLERK_OAUTH_SCOPE) ?? envConfig?.clerkOAuthScope
|
|
1325
|
+
};
|
|
1326
|
+
}
|
|
1308
1327
|
function buildCredentialSnapshot(flags, storedCredentials, environment) {
|
|
1309
1328
|
const flagToken = valueOrUndefined(flags.token);
|
|
1310
1329
|
const agentEnvToken = valueOrUndefined(process.env.DREAMBOARD_AGENT_TOKEN);
|
|
@@ -1548,6 +1567,10 @@ async function buildSourceDependencyProfile(options) {
|
|
|
1548
1567
|
}
|
|
1549
1568
|
async function assertCompilerPortableDependencies(options) {
|
|
1550
1569
|
const packageJson = await readProjectPackageJson(options.projectRoot);
|
|
1570
|
+
const legacyProblems = collectLegacyDreamboardSpecifiers(packageJson);
|
|
1571
|
+
if (legacyProblems.length > 0) {
|
|
1572
|
+
throwLegacyDreamboardPackageError(legacyProblems);
|
|
1573
|
+
}
|
|
1551
1574
|
const problems = collectUnportableDreamboardSpecifiers(packageJson);
|
|
1552
1575
|
if (problems.length > 0) {
|
|
1553
1576
|
const details = problems.map(
|
|
@@ -1557,7 +1580,7 @@ async function assertCompilerPortableDependencies(options) {
|
|
|
1557
1580
|
[
|
|
1558
1581
|
"Compiler-bound workspaces must install Dreamboard packages from a registry.",
|
|
1559
1582
|
`Found unportable Dreamboard dependency specifier(s): ${details}.`,
|
|
1560
|
-
"Run `dreamboard sync` from a workspace that uses registry-pinned @dreamboard/* and dreamboard versions before compiling."
|
|
1583
|
+
"Run `dreamboard sync` from a workspace that uses registry-pinned @dreamboard-games/* and dreamboard versions before compiling."
|
|
1561
1584
|
].join(" ")
|
|
1562
1585
|
);
|
|
1563
1586
|
}
|
|
@@ -1573,6 +1596,11 @@ async function assertCompilerPortableDependencies(options) {
|
|
|
1573
1596
|
return profile;
|
|
1574
1597
|
}
|
|
1575
1598
|
async function assertReleaseEnvironmentPortableDependencies(options) {
|
|
1599
|
+
const packageJson = await readProjectPackageJson(options.projectRoot);
|
|
1600
|
+
const legacyProblems = collectLegacyDreamboardSpecifiers(packageJson);
|
|
1601
|
+
if (legacyProblems.length > 0) {
|
|
1602
|
+
throwLegacyDreamboardPackageError(legacyProblems);
|
|
1603
|
+
}
|
|
1576
1604
|
const profile = await buildSourceDependencyProfile(options);
|
|
1577
1605
|
if (!isReleaseEnvironment(options.environment)) {
|
|
1578
1606
|
return profile;
|
|
@@ -1606,7 +1634,7 @@ function collectDreamboardPackageSpecifiers(packageJson) {
|
|
|
1606
1634
|
const dependencies = packageJson[field];
|
|
1607
1635
|
if (!dependencies) continue;
|
|
1608
1636
|
for (const [packageName, specifier] of Object.entries(dependencies)) {
|
|
1609
|
-
if (
|
|
1637
|
+
if (isPortableDreamboardPackage(packageName)) {
|
|
1610
1638
|
packages[packageName] = specifier;
|
|
1611
1639
|
}
|
|
1612
1640
|
}
|
|
@@ -1614,7 +1642,7 @@ function collectDreamboardPackageSpecifiers(packageJson) {
|
|
|
1614
1642
|
const overrides = packageJson.pnpm?.overrides;
|
|
1615
1643
|
if (overrides) {
|
|
1616
1644
|
for (const [packageName, specifier] of Object.entries(overrides)) {
|
|
1617
|
-
if (
|
|
1645
|
+
if (isPortableDreamboardPackage(packageName) && typeof specifier === "string" && packages[packageName] === void 0) {
|
|
1618
1646
|
packages[packageName] = specifier;
|
|
1619
1647
|
}
|
|
1620
1648
|
}
|
|
@@ -1627,7 +1655,7 @@ function collectUnportableDreamboardSpecifiers(packageJson) {
|
|
|
1627
1655
|
const dependencies = packageJson[field];
|
|
1628
1656
|
if (!dependencies) continue;
|
|
1629
1657
|
for (const [packageName, specifier] of Object.entries(dependencies)) {
|
|
1630
|
-
if (
|
|
1658
|
+
if (isPortableDreamboardPackage(packageName) && UNPORTABLE_SPECIFIER_PATTERN.test(specifier)) {
|
|
1631
1659
|
problems.push({ location: field, packageName, specifier });
|
|
1632
1660
|
}
|
|
1633
1661
|
}
|
|
@@ -1635,7 +1663,7 @@ function collectUnportableDreamboardSpecifiers(packageJson) {
|
|
|
1635
1663
|
const overrides = packageJson.pnpm?.overrides;
|
|
1636
1664
|
if (overrides) {
|
|
1637
1665
|
for (const [packageName, specifier] of Object.entries(overrides)) {
|
|
1638
|
-
if (
|
|
1666
|
+
if (isPortableDreamboardPackage(packageName) && typeof specifier === "string" && UNPORTABLE_SPECIFIER_PATTERN.test(specifier)) {
|
|
1639
1667
|
problems.push({
|
|
1640
1668
|
location: "pnpm.overrides",
|
|
1641
1669
|
packageName,
|
|
@@ -1646,8 +1674,42 @@ function collectUnportableDreamboardSpecifiers(packageJson) {
|
|
|
1646
1674
|
}
|
|
1647
1675
|
return problems;
|
|
1648
1676
|
}
|
|
1649
|
-
function
|
|
1650
|
-
|
|
1677
|
+
function collectLegacyDreamboardSpecifiers(packageJson) {
|
|
1678
|
+
const problems = [];
|
|
1679
|
+
for (const field of DEPENDENCY_FIELDS) {
|
|
1680
|
+
const dependencies = packageJson[field];
|
|
1681
|
+
if (!dependencies) continue;
|
|
1682
|
+
for (const packageName of Object.keys(dependencies)) {
|
|
1683
|
+
if (isLegacyDreamboardPackage(packageName)) {
|
|
1684
|
+
problems.push({ location: field, packageName });
|
|
1685
|
+
}
|
|
1686
|
+
}
|
|
1687
|
+
}
|
|
1688
|
+
const overrides = packageJson.pnpm?.overrides;
|
|
1689
|
+
if (overrides) {
|
|
1690
|
+
for (const packageName of Object.keys(overrides)) {
|
|
1691
|
+
if (isLegacyDreamboardPackage(packageName)) {
|
|
1692
|
+
problems.push({ location: "pnpm.overrides", packageName });
|
|
1693
|
+
}
|
|
1694
|
+
}
|
|
1695
|
+
}
|
|
1696
|
+
return problems;
|
|
1697
|
+
}
|
|
1698
|
+
function throwLegacyDreamboardPackageError(problems) {
|
|
1699
|
+
const details = problems.map((problem) => `${problem.location} ${problem.packageName}`).join("; ");
|
|
1700
|
+
throw new Error(
|
|
1701
|
+
[
|
|
1702
|
+
"Legacy @dreamboard/* package dependencies are no longer supported in compiler-bound workspaces.",
|
|
1703
|
+
`Found ${details}.`,
|
|
1704
|
+
"Repin to the public @dreamboard-games/* packages and rerun the command."
|
|
1705
|
+
].join(" ")
|
|
1706
|
+
);
|
|
1707
|
+
}
|
|
1708
|
+
function isPortableDreamboardPackage(packageName) {
|
|
1709
|
+
return packageName === "dreamboard" || packageName.startsWith("@dreamboard-games/");
|
|
1710
|
+
}
|
|
1711
|
+
function isLegacyDreamboardPackage(packageName) {
|
|
1712
|
+
return packageName.startsWith("@dreamboard/");
|
|
1651
1713
|
}
|
|
1652
1714
|
function isReleaseEnvironment(environment) {
|
|
1653
1715
|
return environment === "staging" || environment === "prod";
|
|
@@ -1679,3 +1741,4 @@ export {
|
|
|
1679
1741
|
assertCompilerPortableDependencies,
|
|
1680
1742
|
assertReleaseEnvironmentPortableDependencies
|
|
1681
1743
|
};
|
|
1744
|
+
//# sourceMappingURL=chunk-3UKQVWLV.mjs.map
|