@dreamboard-games/cli 0.1.30-alpha.2 → 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.
Files changed (87) hide show
  1. package/dist/agent-verifier/agent-workspace-verifier.mjs +227 -0
  2. package/dist/agent-verifier/agent-workspace-verifier.mjs.map +1 -0
  3. package/dist/agent-verifier/chunk-3UKQVWLV.mjs +1744 -0
  4. package/dist/agent-verifier/chunk-3UKQVWLV.mjs.map +1 -0
  5. package/dist/agent-verifier/chunk-776W3UGV.mjs +167 -0
  6. package/dist/agent-verifier/chunk-776W3UGV.mjs.map +1 -0
  7. package/dist/agent-verifier/chunk-7WWGFAAU.mjs +729 -0
  8. package/dist/agent-verifier/chunk-7WWGFAAU.mjs.map +1 -0
  9. package/dist/agent-verifier/chunk-A64ZZUZV.mjs +261 -0
  10. package/dist/agent-verifier/chunk-A64ZZUZV.mjs.map +1 -0
  11. package/dist/agent-verifier/chunk-E7SSWJXJ.mjs +3137 -0
  12. package/dist/agent-verifier/chunk-E7SSWJXJ.mjs.map +1 -0
  13. package/dist/agent-verifier/chunk-F2DIOJJZ.mjs +302 -0
  14. package/dist/agent-verifier/chunk-F2DIOJJZ.mjs.map +1 -0
  15. package/dist/agent-verifier/chunk-G42BGGG2.mjs +70 -0
  16. package/dist/agent-verifier/chunk-G42BGGG2.mjs.map +1 -0
  17. package/dist/agent-verifier/chunk-H76MT5UR.mjs +57 -0
  18. package/dist/agent-verifier/chunk-H76MT5UR.mjs.map +1 -0
  19. package/dist/agent-verifier/chunk-HGMUAL33.mjs +39 -0
  20. package/dist/agent-verifier/chunk-HGMUAL33.mjs.map +1 -0
  21. package/dist/agent-verifier/chunk-IAYRNVUC.mjs +49 -0
  22. package/dist/agent-verifier/chunk-IAYRNVUC.mjs.map +1 -0
  23. package/dist/agent-verifier/chunk-JGT4P4UD.mjs +45 -0
  24. package/dist/agent-verifier/chunk-JGT4P4UD.mjs.map +1 -0
  25. package/dist/agent-verifier/chunk-LUZ7KE6H.mjs +79 -0
  26. package/dist/agent-verifier/chunk-LUZ7KE6H.mjs.map +1 -0
  27. package/dist/agent-verifier/chunk-NAK77WXW.mjs +767 -0
  28. package/dist/agent-verifier/chunk-NAK77WXW.mjs.map +1 -0
  29. package/dist/agent-verifier/chunk-O4YCPU7C.mjs +2913 -0
  30. package/dist/agent-verifier/chunk-O4YCPU7C.mjs.map +1 -0
  31. package/dist/agent-verifier/chunk-S34FRJHS.mjs +222 -0
  32. package/dist/agent-verifier/chunk-S34FRJHS.mjs.map +1 -0
  33. package/dist/agent-verifier/chunk-SH5JKYOB.mjs +226 -0
  34. package/dist/agent-verifier/chunk-SH5JKYOB.mjs.map +1 -0
  35. package/dist/agent-verifier/chunk-SKI2ESE5.mjs +44 -0
  36. package/dist/agent-verifier/chunk-SKI2ESE5.mjs.map +1 -0
  37. package/dist/agent-verifier/chunk-TAEQKBJB.mjs +107 -0
  38. package/dist/agent-verifier/chunk-TAEQKBJB.mjs.map +1 -0
  39. package/dist/agent-verifier/chunk-UIOLGH4A.mjs +150 -0
  40. package/dist/agent-verifier/chunk-UIOLGH4A.mjs.map +1 -0
  41. package/dist/agent-verifier/chunk-UIZNWRM6.mjs +2432 -0
  42. package/dist/agent-verifier/chunk-UIZNWRM6.mjs.map +1 -0
  43. package/dist/agent-verifier/chunk-VS573ERH.mjs +14523 -0
  44. package/dist/agent-verifier/chunk-VS573ERH.mjs.map +1 -0
  45. package/dist/agent-verifier/chunk-W3N3QJ4V.mjs +624 -0
  46. package/dist/agent-verifier/chunk-W3N3QJ4V.mjs.map +1 -0
  47. package/dist/agent-verifier/chunk-XGWCY624.mjs +185 -0
  48. package/dist/agent-verifier/chunk-XGWCY624.mjs.map +1 -0
  49. package/dist/agent-verifier/chunk-XQXDOBYB.mjs +382 -0
  50. package/dist/agent-verifier/chunk-XQXDOBYB.mjs.map +1 -0
  51. package/dist/agent-verifier/chunk-YE7UAO3T.mjs +129 -0
  52. package/dist/agent-verifier/chunk-YE7UAO3T.mjs.map +1 -0
  53. package/dist/agent-verifier/chunk-ZEELHSY3.mjs +20 -0
  54. package/dist/agent-verifier/chunk-ZEELHSY3.mjs.map +1 -0
  55. package/dist/agent-verifier/compile-TEQVA46V.mjs +312 -0
  56. package/dist/agent-verifier/compile-TEQVA46V.mjs.map +1 -0
  57. package/dist/agent-verifier/global-config-Y2NTSK4R.mjs +18 -0
  58. package/dist/agent-verifier/global-config-Y2NTSK4R.mjs.map +1 -0
  59. package/dist/agent-verifier/keychain-backend-SPQWGKZN.mjs +135 -0
  60. package/dist/agent-verifier/keychain-backend-SPQWGKZN.mjs.map +1 -0
  61. package/dist/agent-verifier/local-files-JFOQQZDL.mjs +45 -0
  62. package/dist/agent-verifier/local-files-JFOQQZDL.mjs.map +1 -0
  63. package/dist/agent-verifier/local-typecheck-XVGWI75X.mjs +10 -0
  64. package/dist/agent-verifier/local-typecheck-XVGWI75X.mjs.map +1 -0
  65. package/dist/agent-verifier/materialize-workspace-ZAVGQQSF.mjs +89 -0
  66. package/dist/agent-verifier/materialize-workspace-ZAVGQQSF.mjs.map +1 -0
  67. package/dist/agent-verifier/project-state-K576C2TE.mjs +33 -0
  68. package/dist/agent-verifier/project-state-K576C2TE.mjs.map +1 -0
  69. package/dist/agent-verifier/prompt-MJRJMOGQ.mjs +756 -0
  70. package/dist/agent-verifier/prompt-MJRJMOGQ.mjs.map +1 -0
  71. package/dist/agent-verifier/reducer-bundle-preflight-LXNJUBKL.mjs +20 -0
  72. package/dist/agent-verifier/reducer-bundle-preflight-LXNJUBKL.mjs.map +1 -0
  73. package/dist/agent-verifier/reducer-contract-preflight-TUMQ43JV.mjs +11 -0
  74. package/dist/agent-verifier/reducer-contract-preflight-TUMQ43JV.mjs.map +1 -0
  75. package/dist/agent-verifier/reducer-native-test-harness-CHX5MBL5.mjs +50 -0
  76. package/dist/agent-verifier/reducer-native-test-harness-CHX5MBL5.mjs.map +1 -0
  77. package/dist/agent-verifier/static-scaffold-R7SVDRQI.mjs +27 -0
  78. package/dist/agent-verifier/static-scaffold-R7SVDRQI.mjs.map +1 -0
  79. package/dist/agent-verifier/sync-THAI546U.mjs +588 -0
  80. package/dist/agent-verifier/sync-THAI546U.mjs.map +1 -0
  81. package/dist/agent-verifier/test-AFAQFKOB.mjs +353 -0
  82. package/dist/agent-verifier/test-AFAQFKOB.mjs.map +1 -0
  83. package/dist/agent-verifier/workspace-codegen-2ZMQRIKJ.mjs +10 -0
  84. package/dist/agent-verifier/workspace-codegen-2ZMQRIKJ.mjs.map +1 -0
  85. package/dist/agent-verifier/workspace-dependencies-NOOQBK6I.mjs +15 -0
  86. package/dist/agent-verifier/workspace-dependencies-NOOQBK6I.mjs.map +1 -0
  87. package/package.json +3 -2
@@ -0,0 +1,353 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ CONFIG_FLAG_ARGS,
4
+ defineCommand,
5
+ findProjectCompiledResultsForRevision,
6
+ getProjectCompiledResultSdk,
7
+ parseConfigFlags,
8
+ uploadInitialProjectionSdk
9
+ } from "./chunk-W3N3QJ4V.mjs";
10
+ import {
11
+ getProjectAuthoringState,
12
+ getProjectCompileState,
13
+ getProjectPendingAuthoringSync
14
+ } from "./chunk-YE7UAO3T.mjs";
15
+ import {
16
+ generateReducerNativeArtifacts,
17
+ isReducerNativeTestingWorkspace,
18
+ runReducerNativeScenarios
19
+ } from "./chunk-E7SSWJXJ.mjs";
20
+ import "./chunk-LUZ7KE6H.mjs";
21
+ import {
22
+ STALE_CONTRACT_ARTIFACT_CODE,
23
+ STALE_CONTRACT_ARTIFACT_EXIT_CODE,
24
+ isDreamboardApiError,
25
+ isStaleContractArtifactMessage
26
+ } from "./chunk-S34FRJHS.mjs";
27
+ import {
28
+ assertReleaseEnvironmentPortableDependencies,
29
+ configureClient,
30
+ consola,
31
+ resolveProjectContext
32
+ } from "./chunk-3UKQVWLV.mjs";
33
+ import "./chunk-SH5JKYOB.mjs";
34
+ import "./chunk-XGWCY624.mjs";
35
+ import "./chunk-F2DIOJJZ.mjs";
36
+ import {
37
+ IS_PUBLISHED_BUILD
38
+ } from "./chunk-776W3UGV.mjs";
39
+ import "./chunk-O4YCPU7C.mjs";
40
+ import "./chunk-VS573ERH.mjs";
41
+ import "./chunk-UIZNWRM6.mjs";
42
+ import "./chunk-NAK77WXW.mjs";
43
+ import "./chunk-TAEQKBJB.mjs";
44
+ import "./chunk-IAYRNVUC.mjs";
45
+ import "./chunk-H76MT5UR.mjs";
46
+ import "./chunk-SKI2ESE5.mjs";
47
+
48
+ // src/commands/test.ts
49
+ import { readFile } from "fs/promises";
50
+ import path from "path";
51
+
52
+ // src/services/testing/runtime-mode.ts
53
+ function isRemoteTestEnvironment(environment) {
54
+ return environment === "staging" || environment === "prod";
55
+ }
56
+ function shouldUseRemoteTestRuntime(environment) {
57
+ return IS_PUBLISHED_BUILD || isRemoteTestEnvironment(environment);
58
+ }
59
+
60
+ // src/services/workflows/resolve-latest-compiled-result.ts
61
+ async function resolveLatestCompiledResult(projectRoot, projectConfig) {
62
+ void projectRoot;
63
+ const authoring = getProjectAuthoringState(projectConfig);
64
+ if (getProjectPendingAuthoringSync(projectConfig)) {
65
+ throw new Error(
66
+ "Previous sync did not finish updating local scaffold files. Run 'dreamboard sync' again first."
67
+ );
68
+ }
69
+ if (authoring.revisionDigest) {
70
+ const compile = getProjectCompileState(projectConfig);
71
+ const latestSuccess = (await findProjectCompiledResultsForRevision({
72
+ projectId: projectConfig.projectId,
73
+ revisionDigest: authoring.revisionDigest
74
+ })).find((result) => result.success);
75
+ const matchingLocalSuccess = compile.latestSuccessful?.revisionDigest === authoring.revisionDigest ? compile.latestSuccessful : void 0;
76
+ const resolvedSuccess = latestSuccess ?? (matchingLocalSuccess?.resultId ? await getProjectCompiledResultSdk(
77
+ projectConfig.projectId,
78
+ matchingLocalSuccess.resultId
79
+ ) : void 0);
80
+ if (!resolvedSuccess?.success) {
81
+ throw new Error(
82
+ "No successful compile exists for the current authored revision. Run 'dreamboard compile' first."
83
+ );
84
+ }
85
+ const resultRevisionDigest = resolvedSuccess.revisionDigest;
86
+ if (resultRevisionDigest && resultRevisionDigest !== authoring.revisionDigest) {
87
+ consola.warn(
88
+ `Latest successful compile ${resolvedSuccess.id} belongs to ${resultRevisionDigest}, not ${authoring.revisionDigest}.`
89
+ );
90
+ }
91
+ consola.info(
92
+ `Project summary:
93
+ compiledResultId: ${resolvedSuccess.id}
94
+ revisionDigest: ${authoring.revisionDigest}`
95
+ );
96
+ return resolvedSuccess;
97
+ }
98
+ throw new Error(
99
+ "This workspace does not know its project revision yet. Run 'dreamboard sync' first."
100
+ );
101
+ }
102
+
103
+ // src/commands/test.ts
104
+ var REDUCER_NATIVE_TEST_WORKSPACE_ERROR = "dreamboard test now requires a reducer-native workspace with app/game.ts, shared/generated/ui-contract.ts, test/bases/*.base.ts, and test/scenarios/*.scenario.ts. Legacy test/base-scenarios.json workspaces are no longer supported.";
105
+ var NO_REDUCER_NATIVE_BASES_FOUND_ERROR = "No bases found under test/bases/*.base.ts";
106
+ var NO_REDUCER_NATIVE_SCENARIOS_FOUND_ERROR = "No scenarios found under test/scenarios/*.scenario.ts";
107
+ function isPreviewProjectionEndpointUnavailable(error) {
108
+ if (!isDreamboardApiError(error) || error.status !== 404) {
109
+ return false;
110
+ }
111
+ const endpoint = error.problem.instance ?? error.problem.context?.endpoint;
112
+ const message = error.problem.detail ?? error.problem.title;
113
+ return endpoint?.includes("/preview/initial-projection") === true && message?.toLowerCase() === "not found";
114
+ }
115
+ async function uploadGeneratedPreviewProjection(options) {
116
+ const previewBase = options.bases.find((base) => base.definition.id === "initial-turn") ?? options.bases[0];
117
+ if (!previewBase) {
118
+ return;
119
+ }
120
+ const projectionPath = path.join(
121
+ options.projectRoot,
122
+ "test",
123
+ "generated",
124
+ "bases",
125
+ previewBase.definition.id,
126
+ "player-1.projection.json"
127
+ );
128
+ const projectionJson = await readFile(projectionPath, "utf8");
129
+ try {
130
+ await uploadInitialProjectionSdk(options.gameId, projectionJson);
131
+ } catch (error) {
132
+ if (isPreviewProjectionEndpointUnavailable(error)) {
133
+ consola.warn(
134
+ "Skipping preview projection upload because the selected backend does not expose the preview projection endpoint."
135
+ );
136
+ return;
137
+ }
138
+ throw error;
139
+ }
140
+ }
141
+ function resolveRequestedRunner(value) {
142
+ if (value == null || value === "") {
143
+ return void 0;
144
+ }
145
+ if (value === "reducer" || value === "remote" || value === "browser") {
146
+ return value;
147
+ }
148
+ throw new Error(
149
+ `Unsupported test runner '${String(value)}'. Expected one of reducer, remote, browser.`
150
+ );
151
+ }
152
+ function isStaleContractArtifactResult(result) {
153
+ return result.errorCode === STALE_CONTRACT_ARTIFACT_CODE || (result.error ? isStaleContractArtifactMessage(result.error) : false);
154
+ }
155
+ function resolveTestRunExitCode(summary) {
156
+ if (summary.failed === 0) {
157
+ return 0;
158
+ }
159
+ return summary.results.some(
160
+ (result) => !result.success && isStaleContractArtifactResult(result)
161
+ ) ? STALE_CONTRACT_ARTIFACT_EXIT_CODE : 1;
162
+ }
163
+ async function assertReducerNativeTestingWorkspace(projectRoot) {
164
+ if (await isReducerNativeTestingWorkspace(projectRoot)) {
165
+ return;
166
+ }
167
+ throw new Error(REDUCER_NATIVE_TEST_WORKSPACE_ERROR);
168
+ }
169
+ async function resolveReducerNativeRuntimeIdentity(options) {
170
+ if (options.useRemoteRuntime || options.runner === "remote" || options.runner === "browser") {
171
+ const latestCompiledResult = await resolveLatestCompiledResult(
172
+ options.projectRoot,
173
+ options.projectConfig
174
+ );
175
+ return {
176
+ gameId: options.projectConfig.gameId,
177
+ compiledResultId: latestCompiledResult.id
178
+ };
179
+ }
180
+ return {
181
+ gameId: options.projectConfig.gameId,
182
+ compiledResultId: options.projectConfig.compile?.latestSuccessful?.resultId
183
+ };
184
+ }
185
+ var generateCommand = defineCommand({
186
+ meta: {
187
+ name: "generate",
188
+ description: "Generate reducer-native base artifacts for typed scenarios"
189
+ },
190
+ args: {
191
+ scenario: {
192
+ type: "string",
193
+ description: "Optional scenario file path under test/scenarios"
194
+ },
195
+ debug: {
196
+ type: "boolean",
197
+ description: "Print full reducer-native validation details",
198
+ default: false
199
+ },
200
+ "update-snapshots": {
201
+ type: "boolean",
202
+ description: "Refresh generated projection and scenario snapshots",
203
+ default: false
204
+ },
205
+ ...CONFIG_FLAG_ARGS
206
+ },
207
+ async run({ args }) {
208
+ const parsedFlags = parseConfigFlags(args);
209
+ const useRemoteRuntime = shouldUseRemoteTestRuntime(parsedFlags.env);
210
+ const { projectRoot, projectConfig, config } = await resolveProjectContext(
211
+ parsedFlags,
212
+ { requireAuth: useRemoteRuntime }
213
+ );
214
+ await assertReleaseEnvironmentPortableDependencies({
215
+ projectRoot,
216
+ projectConfig,
217
+ environment: config.environment
218
+ });
219
+ await assertReducerNativeTestingWorkspace(projectRoot);
220
+ const runtimeIdentity = await resolveReducerNativeRuntimeIdentity({
221
+ projectRoot,
222
+ projectConfig,
223
+ useRemoteRuntime
224
+ });
225
+ const { bases, scenarios } = await generateReducerNativeArtifacts({
226
+ projectRoot,
227
+ scenarioPath: args.scenario,
228
+ compiledResultId: runtimeIdentity.compiledResultId,
229
+ gameId: runtimeIdentity.gameId,
230
+ debug: Boolean(args.debug)
231
+ });
232
+ if (bases.length === 0) {
233
+ throw new Error(NO_REDUCER_NATIVE_BASES_FOUND_ERROR);
234
+ }
235
+ if (scenarios.length === 0) {
236
+ throw new Error(NO_REDUCER_NATIVE_SCENARIOS_FOUND_ERROR);
237
+ }
238
+ if (useRemoteRuntime && config.authToken) {
239
+ await configureClient(config);
240
+ await uploadGeneratedPreviewProjection({
241
+ projectRoot,
242
+ gameId: runtimeIdentity.gameId,
243
+ bases
244
+ });
245
+ } else {
246
+ consola.info(
247
+ "Skipping preview projection upload because this test generation is local-only."
248
+ );
249
+ }
250
+ consola.success(
251
+ `Generated ${bases.length} base state(s) for ${scenarios.length} scenario(s).`
252
+ );
253
+ }
254
+ });
255
+ var runCommand = defineCommand({
256
+ meta: {
257
+ name: "run",
258
+ description: "Run reducer-native scenarios from test/scenarios"
259
+ },
260
+ args: {
261
+ scenario: {
262
+ type: "string",
263
+ description: "Optional scenario file path under test/scenarios"
264
+ },
265
+ debug: {
266
+ type: "boolean",
267
+ description: "Print full reducer-native validation details",
268
+ default: false
269
+ },
270
+ "update-snapshots": {
271
+ type: "boolean",
272
+ description: "Refresh generated projection and scenario snapshots",
273
+ default: false
274
+ },
275
+ runner: {
276
+ type: "string",
277
+ valueHint: "reducer|remote|browser",
278
+ description: "Scenario runner: reducer (in-process, default), remote (live sessions against the configured backend), or browser (local web stack)."
279
+ },
280
+ ...CONFIG_FLAG_ARGS
281
+ },
282
+ async run({ args }) {
283
+ const parsedFlags = parseConfigFlags(args);
284
+ const useRemoteRuntime = shouldUseRemoteTestRuntime(parsedFlags.env);
285
+ const runner = resolveRequestedRunner(args.runner) ?? "reducer";
286
+ const { projectRoot, projectConfig, config } = await resolveProjectContext(
287
+ parsedFlags,
288
+ {
289
+ requireAuth: useRemoteRuntime || runner === "remote" || runner === "browser"
290
+ }
291
+ );
292
+ await assertReleaseEnvironmentPortableDependencies({
293
+ projectRoot,
294
+ projectConfig,
295
+ environment: config.environment
296
+ });
297
+ await assertReducerNativeTestingWorkspace(projectRoot);
298
+ const runtimeIdentity = await resolveReducerNativeRuntimeIdentity({
299
+ projectRoot,
300
+ projectConfig,
301
+ useRemoteRuntime,
302
+ runner
303
+ });
304
+ const summary = await runReducerNativeScenarios({
305
+ projectRoot,
306
+ projectConfig,
307
+ resolvedConfig: config,
308
+ runner,
309
+ scenarioPath: args.scenario,
310
+ compiledResultId: runtimeIdentity.compiledResultId,
311
+ gameId: runtimeIdentity.gameId,
312
+ debug: Boolean(args.debug),
313
+ updateSnapshots: Boolean(args["update-snapshots"])
314
+ });
315
+ for (const result of summary.results) {
316
+ if (result.success) {
317
+ consola.success(`PASS ${result.id}`);
318
+ } else if (result.errorCode === STALE_CONTRACT_ARTIFACT_CODE && result.error) {
319
+ consola.error(result.error);
320
+ } else {
321
+ consola.error(
322
+ `FAIL ${result.id}: ${result.error ?? "Scenario failed"}`
323
+ );
324
+ }
325
+ }
326
+ consola.info(
327
+ `Test summary: ${summary.passed} passed, ${summary.failed} failed.`
328
+ );
329
+ if (summary.failed > 0) {
330
+ process.exitCode = resolveTestRunExitCode(summary);
331
+ }
332
+ }
333
+ });
334
+ var test_default = defineCommand({
335
+ meta: {
336
+ name: "test",
337
+ description: "Reducer-native test runner with typed bases and scenarios"
338
+ },
339
+ subCommands: {
340
+ generate: generateCommand,
341
+ run: runCommand
342
+ }
343
+ });
344
+ export {
345
+ NO_REDUCER_NATIVE_BASES_FOUND_ERROR,
346
+ NO_REDUCER_NATIVE_SCENARIOS_FOUND_ERROR,
347
+ REDUCER_NATIVE_TEST_WORKSPACE_ERROR,
348
+ test_default as default,
349
+ isPreviewProjectionEndpointUnavailable,
350
+ resolveRequestedRunner,
351
+ resolveTestRunExitCode
352
+ };
353
+ //# sourceMappingURL=test-AFAQFKOB.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/commands/test.ts","../../src/services/testing/runtime-mode.ts","../../src/services/workflows/resolve-latest-compiled-result.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport consola from \"consola\";\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { CONFIG_FLAG_ARGS } from \"../command-args.js\";\nimport { configureClient, resolveProjectContext } from \"../config/resolve.js\";\nimport { parseConfigFlags } from \"../flags.js\";\nimport { uploadInitialProjectionSdk } from \"../services/api/index.js\";\nimport { assertReleaseEnvironmentPortableDependencies } from \"../services/project/dependency-portability.js\";\nimport {\n generateReducerNativeArtifacts,\n isReducerNativeTestingWorkspace,\n runReducerNativeScenarios,\n type ReducerNativeScenarioSummary,\n} from \"../services/testing/reducer-native-test-harness.js\";\nimport { shouldUseRemoteTestRuntime } from \"../services/testing/runtime-mode.js\";\nimport { resolveLatestCompiledResult } from \"../services/workflows/resolve-latest-compiled-result.js\";\nimport type { ProjectConfig } from \"../types.js\";\nimport {\n isDreamboardApiError,\n isStaleContractArtifactMessage,\n STALE_CONTRACT_ARTIFACT_CODE,\n STALE_CONTRACT_ARTIFACT_EXIT_CODE,\n} from \"../utils/errors.js\";\n\ntype RequestedTestRunner = \"reducer\" | \"remote\" | \"browser\";\n\nexport const REDUCER_NATIVE_TEST_WORKSPACE_ERROR =\n \"dreamboard test now requires a reducer-native workspace with app/game.ts, shared/generated/ui-contract.ts, test/bases/*.base.ts, and test/scenarios/*.scenario.ts. Legacy test/base-scenarios.json workspaces are no longer supported.\";\n\nexport const NO_REDUCER_NATIVE_BASES_FOUND_ERROR =\n \"No bases found under test/bases/*.base.ts\";\n\nexport const NO_REDUCER_NATIVE_SCENARIOS_FOUND_ERROR =\n \"No scenarios found under test/scenarios/*.scenario.ts\";\n\nexport function isPreviewProjectionEndpointUnavailable(\n error: unknown,\n): boolean {\n if (!isDreamboardApiError(error) || error.status !== 404) {\n return false;\n }\n\n const endpoint = error.problem.instance ?? error.problem.context?.endpoint;\n const message = error.problem.detail ?? error.problem.title;\n return (\n endpoint?.includes(\"/preview/initial-projection\") === true &&\n message?.toLowerCase() === \"not found\"\n );\n}\n\nasync function uploadGeneratedPreviewProjection(options: {\n projectRoot: string;\n gameId: string;\n bases: Array<{ definition: { id: string } }>;\n}): Promise<void> {\n const previewBase =\n options.bases.find((base) => base.definition.id === \"initial-turn\") ??\n options.bases[0];\n if (!previewBase) {\n return;\n }\n const projectionPath = path.join(\n options.projectRoot,\n \"test\",\n \"generated\",\n \"bases\",\n previewBase.definition.id,\n \"player-1.projection.json\",\n );\n const projectionJson = await readFile(projectionPath, \"utf8\");\n try {\n await uploadInitialProjectionSdk(options.gameId, projectionJson);\n } catch (error) {\n if (isPreviewProjectionEndpointUnavailable(error)) {\n consola.warn(\n \"Skipping preview projection upload because the selected backend does not expose the preview projection endpoint.\",\n );\n return;\n }\n throw error;\n }\n}\n\nexport function resolveRequestedRunner(\n value: unknown,\n): RequestedTestRunner | undefined {\n if (value == null || value === \"\") {\n return undefined;\n }\n if (value === \"reducer\" || value === \"remote\" || value === \"browser\") {\n return value;\n }\n throw new Error(\n `Unsupported test runner '${String(value)}'. Expected one of reducer, remote, browser.`,\n );\n}\n\nfunction isStaleContractArtifactResult(\n result: ReducerNativeScenarioSummary[\"results\"][number],\n): boolean {\n return (\n result.errorCode === STALE_CONTRACT_ARTIFACT_CODE ||\n (result.error ? isStaleContractArtifactMessage(result.error) : false)\n );\n}\n\nexport function resolveTestRunExitCode(\n summary: ReducerNativeScenarioSummary,\n): number {\n if (summary.failed === 0) {\n return 0;\n }\n return summary.results.some(\n (result) => !result.success && isStaleContractArtifactResult(result),\n )\n ? STALE_CONTRACT_ARTIFACT_EXIT_CODE\n : 1;\n}\n\nasync function assertReducerNativeTestingWorkspace(\n projectRoot: string,\n): Promise<void> {\n if (await isReducerNativeTestingWorkspace(projectRoot)) {\n return;\n }\n\n throw new Error(REDUCER_NATIVE_TEST_WORKSPACE_ERROR);\n}\n\nasync function resolveReducerNativeRuntimeIdentity(options: {\n projectRoot: string;\n projectConfig: ProjectConfig;\n useRemoteRuntime: boolean;\n runner?: RequestedTestRunner;\n}): Promise<{\n gameId: string;\n compiledResultId?: string;\n}> {\n if (\n options.useRemoteRuntime ||\n options.runner === \"remote\" ||\n options.runner === \"browser\"\n ) {\n const latestCompiledResult = await resolveLatestCompiledResult(\n options.projectRoot,\n options.projectConfig,\n );\n return {\n gameId: options.projectConfig.gameId,\n compiledResultId: latestCompiledResult.id,\n };\n }\n\n return {\n gameId: options.projectConfig.gameId,\n compiledResultId: options.projectConfig.compile?.latestSuccessful?.resultId,\n };\n}\n\nconst generateCommand = defineCommand({\n meta: {\n name: \"generate\",\n description: \"Generate reducer-native base artifacts for typed scenarios\",\n },\n args: {\n scenario: {\n type: \"string\",\n description: \"Optional scenario file path under test/scenarios\",\n },\n debug: {\n type: \"boolean\",\n description: \"Print full reducer-native validation details\",\n default: false,\n },\n \"update-snapshots\": {\n type: \"boolean\",\n description: \"Refresh generated projection and scenario snapshots\",\n default: false,\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedFlags = parseConfigFlags(args);\n const useRemoteRuntime = shouldUseRemoteTestRuntime(parsedFlags.env);\n const { projectRoot, projectConfig, config } = await resolveProjectContext(\n parsedFlags,\n { requireAuth: useRemoteRuntime },\n );\n await assertReleaseEnvironmentPortableDependencies({\n projectRoot,\n projectConfig,\n environment: config.environment,\n });\n\n await assertReducerNativeTestingWorkspace(projectRoot);\n\n const runtimeIdentity = await resolveReducerNativeRuntimeIdentity({\n projectRoot,\n projectConfig,\n useRemoteRuntime,\n });\n const { bases, scenarios } = await generateReducerNativeArtifacts({\n projectRoot,\n scenarioPath: args.scenario,\n compiledResultId: runtimeIdentity.compiledResultId,\n gameId: runtimeIdentity.gameId,\n debug: Boolean(args.debug),\n });\n\n if (bases.length === 0) {\n throw new Error(NO_REDUCER_NATIVE_BASES_FOUND_ERROR);\n }\n if (scenarios.length === 0) {\n throw new Error(NO_REDUCER_NATIVE_SCENARIOS_FOUND_ERROR);\n }\n\n if (useRemoteRuntime && config.authToken) {\n await configureClient(config);\n await uploadGeneratedPreviewProjection({\n projectRoot,\n gameId: runtimeIdentity.gameId,\n bases,\n });\n } else {\n consola.info(\n \"Skipping preview projection upload because this test generation is local-only.\",\n );\n }\n\n consola.success(\n `Generated ${bases.length} base state(s) for ${scenarios.length} scenario(s).`,\n );\n },\n});\n\nconst runCommand = defineCommand({\n meta: {\n name: \"run\",\n description: \"Run reducer-native scenarios from test/scenarios\",\n },\n args: {\n scenario: {\n type: \"string\",\n description: \"Optional scenario file path under test/scenarios\",\n },\n debug: {\n type: \"boolean\",\n description: \"Print full reducer-native validation details\",\n default: false,\n },\n \"update-snapshots\": {\n type: \"boolean\",\n description: \"Refresh generated projection and scenario snapshots\",\n default: false,\n },\n runner: {\n type: \"string\",\n valueHint: \"reducer|remote|browser\",\n description:\n \"Scenario runner: reducer (in-process, default), remote (live sessions against the configured backend), or browser (local web stack).\",\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedFlags = parseConfigFlags(args);\n const useRemoteRuntime = shouldUseRemoteTestRuntime(parsedFlags.env);\n const runner = resolveRequestedRunner(args.runner) ?? \"reducer\";\n const { projectRoot, projectConfig, config } = await resolveProjectContext(\n parsedFlags,\n {\n requireAuth:\n useRemoteRuntime || runner === \"remote\" || runner === \"browser\",\n },\n );\n await assertReleaseEnvironmentPortableDependencies({\n projectRoot,\n projectConfig,\n environment: config.environment,\n });\n\n await assertReducerNativeTestingWorkspace(projectRoot);\n\n const runtimeIdentity = await resolveReducerNativeRuntimeIdentity({\n projectRoot,\n projectConfig,\n useRemoteRuntime,\n runner,\n });\n const summary = await runReducerNativeScenarios({\n projectRoot,\n projectConfig,\n resolvedConfig: config,\n runner,\n scenarioPath: args.scenario,\n compiledResultId: runtimeIdentity.compiledResultId,\n gameId: runtimeIdentity.gameId,\n debug: Boolean(args.debug),\n updateSnapshots: Boolean(args[\"update-snapshots\"]),\n });\n\n for (const result of summary.results) {\n if (result.success) {\n consola.success(`PASS ${result.id}`);\n } else if (\n result.errorCode === STALE_CONTRACT_ARTIFACT_CODE &&\n result.error\n ) {\n consola.error(result.error);\n } else {\n consola.error(\n `FAIL ${result.id}: ${result.error ?? \"Scenario failed\"}`,\n );\n }\n }\n\n consola.info(\n `Test summary: ${summary.passed} passed, ${summary.failed} failed.`,\n );\n if (summary.failed > 0) {\n process.exitCode = resolveTestRunExitCode(summary);\n }\n },\n});\n\nexport default defineCommand({\n meta: {\n name: \"test\",\n description: \"Reducer-native test runner with typed bases and scenarios\",\n },\n subCommands: {\n generate: generateCommand,\n run: runCommand,\n },\n});\n","import { IS_PUBLISHED_BUILD } from \"../../build-target.js\";\n\nexport function isRemoteTestEnvironment(\n environment: string | undefined,\n): environment is \"staging\" | \"prod\" {\n return environment === \"staging\" || environment === \"prod\";\n}\n\nexport function shouldUseRemoteTestRuntime(\n environment: string | undefined,\n): boolean {\n return IS_PUBLISHED_BUILD || isRemoteTestEnvironment(environment);\n}\n","import consola from \"consola\";\nimport type { CompiledResult } from \"@dreamboard-games/api-client\";\nimport type { ProjectConfig } from \"../../types.js\";\nimport {\n findProjectCompiledResultsForRevision,\n getProjectCompiledResultSdk,\n} from \"../api/compiled-results-api.js\";\nimport {\n getProjectCompileState,\n getProjectAuthoringState,\n getProjectPendingAuthoringSync,\n} from \"../project/project-state.js\";\n\nexport async function resolveLatestCompiledResult(\n projectRoot: string,\n projectConfig: ProjectConfig,\n): Promise<CompiledResult> {\n void projectRoot;\n const authoring = getProjectAuthoringState(projectConfig);\n if (getProjectPendingAuthoringSync(projectConfig)) {\n throw new Error(\n \"Previous sync did not finish updating local scaffold files. Run 'dreamboard sync' again first.\",\n );\n }\n if (authoring.revisionDigest) {\n const compile = getProjectCompileState(projectConfig);\n const latestSuccess = (\n await findProjectCompiledResultsForRevision({\n projectId: projectConfig.projectId,\n revisionDigest: authoring.revisionDigest,\n })\n ).find((result) => result.success);\n const matchingLocalSuccess =\n compile.latestSuccessful?.revisionDigest === authoring.revisionDigest\n ? compile.latestSuccessful\n : undefined;\n const resolvedSuccess =\n latestSuccess ??\n (matchingLocalSuccess?.resultId\n ? await getProjectCompiledResultSdk(\n projectConfig.projectId,\n matchingLocalSuccess.resultId,\n )\n : undefined);\n\n if (!resolvedSuccess?.success) {\n throw new Error(\n \"No successful compile exists for the current authored revision. Run 'dreamboard compile' first.\",\n );\n }\n\n const resultRevisionDigest = (resolvedSuccess as { revisionDigest?: string })\n .revisionDigest;\n if (\n resultRevisionDigest &&\n resultRevisionDigest !== authoring.revisionDigest\n ) {\n consola.warn(\n `Latest successful compile ${resolvedSuccess.id} belongs to ${resultRevisionDigest}, not ${authoring.revisionDigest}.`,\n );\n }\n\n consola.info(\n `Project summary:\\n compiledResultId: ${resolvedSuccess.id}\\n revisionDigest: ${authoring.revisionDigest}`,\n );\n\n return resolvedSuccess;\n }\n\n throw new Error(\n \"This workspace does not know its project revision yet. Run 'dreamboard sync' first.\",\n );\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ applyWorkspaceCodegen
4
+ } from "./chunk-G42BGGG2.mjs";
5
+ import "./chunk-IAYRNVUC.mjs";
6
+ import "./chunk-SKI2ESE5.mjs";
7
+ export {
8
+ applyWorkspaceCodegen
9
+ };
10
+ //# sourceMappingURL=workspace-codegen-2ZMQRIKJ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ generatePnpmLockfile,
4
+ installWorkspaceDependencies,
5
+ reconcileWorkspaceDependencies
6
+ } from "./chunk-XQXDOBYB.mjs";
7
+ import "./chunk-ZEELHSY3.mjs";
8
+ import "./chunk-H76MT5UR.mjs";
9
+ import "./chunk-SKI2ESE5.mjs";
10
+ export {
11
+ generatePnpmLockfile,
12
+ installWorkspaceDependencies,
13
+ reconcileWorkspaceDependencies
14
+ };
15
+ //# sourceMappingURL=workspace-dependencies-NOOQBK6I.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dreamboard-games/cli",
3
- "version": "0.1.30-alpha.2",
3
+ "version": "0.1.30-alpha.3",
4
4
  "description": "Design board games with AI and turn ideas into playable digital prototypes.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -12,7 +12,8 @@
12
12
  "types": "./dist/internal.d.ts",
13
13
  "default": "./dist/internal.js"
14
14
  },
15
- "./package.json": "./package.json"
15
+ "./package.json": "./package.json",
16
+ "./agent-workspace-verifier": "./dist/agent-verifier/agent-workspace-verifier.mjs"
16
17
  },
17
18
  "files": [
18
19
  "dist",