@dreamboard-games/cli 0.1.30-alpha.0 → 0.1.30-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +179 -22
  2. package/dist/{chunk-TSJVWTJO.js → chunk-N7XPNNUI.js} +14 -12
  3. package/dist/chunk-N7XPNNUI.js.map +1 -0
  4. package/dist/chunk-SEGVTWSK.js +44 -0
  5. package/dist/{chunk-3XNJT3RK.js → chunk-TAQKH67O.js} +21279 -35845
  6. package/dist/chunk-TAQKH67O.js.map +1 -0
  7. package/dist/{global-config-UKSWNDTX.js → global-config-S4ZIPECE.js} +3 -3
  8. package/dist/index.js +955 -230
  9. package/dist/index.js.map +1 -1
  10. package/dist/internal.js +3 -4
  11. package/dist/{agent-verifier/keychain-backend-TNOPQV3Z.mjs → keychain-backend-HDF4TZDL.js} +2 -1
  12. package/dist/{agent-verifier/prompt-3BAINGAQ.mjs → prompt-NDV3AE5L.js} +2 -1
  13. package/package.json +6 -6
  14. package/skills/dreamboard/references/building-your-first-game.md +510 -0
  15. package/skills/dreamboard/references/cli.md +104 -0
  16. package/skills/dreamboard/references/game-interface.md +548 -0
  17. package/skills/dreamboard/references/manifest-authoring.md +597 -0
  18. package/skills/dreamboard/references/quickstart.md +66 -0
  19. package/skills/dreamboard/references/reducer.md +864 -0
  20. package/skills/dreamboard/references/rule-authoring.md +147 -0
  21. package/skills/dreamboard/references/testing.md +249 -0
  22. package/skills/dreamboard/scripts/events-extract.mjs +218 -0
  23. package/dist/agent-verifier/agent-workspace-verifier.mjs +0 -227
  24. package/dist/agent-verifier/chunk-2E5P5NWG.mjs +0 -835
  25. package/dist/agent-verifier/chunk-2GBBP27W.mjs +0 -301
  26. package/dist/agent-verifier/chunk-2NZNKIND.mjs +0 -166
  27. package/dist/agent-verifier/chunk-2QMNAVV4.mjs +0 -14522
  28. package/dist/agent-verifier/chunk-2SZHMP6F.mjs +0 -264
  29. package/dist/agent-verifier/chunk-54TAYXUD.mjs +0 -12
  30. package/dist/agent-verifier/chunk-6A5HRJMQ.mjs +0 -3174
  31. package/dist/agent-verifier/chunk-6UUJEYDV.mjs +0 -213
  32. package/dist/agent-verifier/chunk-7653FPGJ.mjs +0 -381
  33. package/dist/agent-verifier/chunk-BVVNBJM4.mjs +0 -221
  34. package/dist/agent-verifier/chunk-CEDUHGNH.mjs +0 -74
  35. package/dist/agent-verifier/chunk-CEQ2VJWN.mjs +0 -149
  36. package/dist/agent-verifier/chunk-CFU5EWIC.mjs +0 -69
  37. package/dist/agent-verifier/chunk-DTMJCPS4.mjs +0 -730
  38. package/dist/agent-verifier/chunk-EIQWDQWJ.mjs +0 -186
  39. package/dist/agent-verifier/chunk-EOQIV6PS.mjs +0 -649
  40. package/dist/agent-verifier/chunk-HBNDKQT5.mjs +0 -8381
  41. package/dist/agent-verifier/chunk-HJFQDSTU.mjs +0 -225
  42. package/dist/agent-verifier/chunk-LI3ZR3BI.mjs +0 -41
  43. package/dist/agent-verifier/chunk-LM3OZLZG.mjs +0 -48
  44. package/dist/agent-verifier/chunk-MINCYHXN.mjs +0 -106
  45. package/dist/agent-verifier/chunk-MRCUP5SW.mjs +0 -128
  46. package/dist/agent-verifier/chunk-PM3SVG6R.mjs +0 -38
  47. package/dist/agent-verifier/chunk-RBDDIIPM.mjs +0 -19
  48. package/dist/agent-verifier/chunk-RJBLBYHX.mjs +0 -1681
  49. package/dist/agent-verifier/chunk-SHUMAVAP.mjs +0 -59
  50. package/dist/agent-verifier/chunk-SYPLYRGB.mjs +0 -2812
  51. package/dist/agent-verifier/chunk-U6OJN7XS.mjs +0 -8092
  52. package/dist/agent-verifier/chunk-VYJTHSYR.mjs +0 -44
  53. package/dist/agent-verifier/chunk-XYDL7GY6.mjs +0 -10
  54. package/dist/agent-verifier/compile-WNCQQVOF.mjs +0 -313
  55. package/dist/agent-verifier/global-config-WX3ZZIVU.mjs +0 -17
  56. package/dist/agent-verifier/local-files-MTPLP62S.mjs +0 -46
  57. package/dist/agent-verifier/local-typecheck-QFYYAZOK.mjs +0 -9
  58. package/dist/agent-verifier/materialize-workspace-EWGZIVOY.mjs +0 -90
  59. package/dist/agent-verifier/project-state-7GR6BQTQ.mjs +0 -32
  60. package/dist/agent-verifier/reducer-bundle-preflight-C73LEXI2.mjs +0 -23
  61. package/dist/agent-verifier/reducer-contract-preflight-22X7DSZW.mjs +0 -10
  62. package/dist/agent-verifier/reducer-native-test-harness-GMWBUISX.mjs +0 -53
  63. package/dist/agent-verifier/static-scaffold-4YEQME5N.mjs +0 -28
  64. package/dist/agent-verifier/sync-LOQAH4RC.mjs +0 -594
  65. package/dist/agent-verifier/test-YOJERVHN.mjs +0 -356
  66. package/dist/agent-verifier/testing-5K2BJYF2.mjs +0 -674
  67. package/dist/agent-verifier/workspace-codegen-JDZJRSDV.mjs +0 -11
  68. package/dist/agent-verifier/workspace-dependencies-HZ6VVS4G.mjs +0 -14
  69. package/dist/chunk-2H7UOFLK.js +0 -11
  70. package/dist/chunk-3XNJT3RK.js.map +0 -1
  71. package/dist/chunk-7FOO4AJI.js +0 -50
  72. package/dist/chunk-7FOO4AJI.js.map +0 -1
  73. package/dist/chunk-TSJVWTJO.js.map +0 -1
  74. package/dist/internal.d.ts +0 -311
  75. package/dist/keychain-backend-JHTXAKWC.js +0 -135
  76. package/dist/prompt-GMZABCJC.js +0 -756
  77. package/dist/runtime-packages/ui-host-runtime/src/actor-principal.ts +0 -71
  78. package/dist/runtime-packages/ui-host-runtime/src/browser-interaction.ts +0 -139
  79. package/dist/runtime-packages/ui-host-runtime/src/components/host-controls.tsx +0 -374
  80. package/dist/runtime-packages/ui-host-runtime/src/components/host-feedback-toaster.tsx +0 -266
  81. package/dist/runtime-packages/ui-host-runtime/src/components/host-feedback.tsx +0 -212
  82. package/dist/runtime-packages/ui-host-runtime/src/components/host-primitives.tsx +0 -271
  83. package/dist/runtime-packages/ui-host-runtime/src/components/host-session-metadata.tsx +0 -135
  84. package/dist/runtime-packages/ui-host-runtime/src/components/index.ts +0 -5
  85. package/dist/runtime-packages/ui-host-runtime/src/components/perf-overlay.tsx +0 -194
  86. package/dist/runtime-packages/ui-host-runtime/src/gameplay-authority-transport.ts +0 -626
  87. package/dist/runtime-packages/ui-host-runtime/src/host-controls.tsx +0 -1
  88. package/dist/runtime-packages/ui-host-runtime/src/host-feedback.tsx +0 -1
  89. package/dist/runtime-packages/ui-host-runtime/src/host-session-transport.ts +0 -294
  90. package/dist/runtime-packages/ui-host-runtime/src/index.ts +0 -3
  91. package/dist/runtime-packages/ui-host-runtime/src/logger.ts +0 -11
  92. package/dist/runtime-packages/ui-host-runtime/src/perf.ts +0 -324
  93. package/dist/runtime-packages/ui-host-runtime/src/plugin-bridge.ts +0 -195
  94. package/dist/runtime-packages/ui-host-runtime/src/plugin-health-check.ts +0 -138
  95. package/dist/runtime-packages/ui-host-runtime/src/plugin-messages.ts +0 -159
  96. package/dist/runtime-packages/ui-host-runtime/src/plugin-session-gateway.ts +0 -551
  97. package/dist/runtime-packages/ui-host-runtime/src/runtime/index.ts +0 -13
  98. package/dist/runtime-packages/ui-host-runtime/src/screenshot/projection-to-snapshot.ts +0 -122
  99. package/dist/runtime-packages/ui-host-runtime/src/screenshot/static-store-api.ts +0 -26
  100. package/dist/runtime-packages/ui-host-runtime/src/session-ingress-controller.ts +0 -583
  101. package/dist/runtime-packages/ui-host-runtime/src/session-ingress.ts +0 -219
  102. package/dist/runtime-packages/ui-host-runtime/src/session-live-runtime.ts +0 -117
  103. package/dist/runtime-packages/ui-host-runtime/src/session-model.ts +0 -431
  104. package/dist/runtime-packages/ui-host-runtime/src/session-projection.ts +0 -211
  105. package/dist/runtime-packages/ui-host-runtime/src/session-recovery.ts +0 -80
  106. package/dist/runtime-packages/ui-host-runtime/src/session-state-reducer.ts +0 -1034
  107. package/dist/runtime-packages/ui-host-runtime/src/sse-manager.ts +0 -416
  108. package/dist/runtime-packages/ui-host-runtime/src/unified-session-store.ts +0 -184
  109. package/dist/testing-KLSV6CPJ.js +0 -674
  110. package/dist/testing-KLSV6CPJ.js.map +0 -1
  111. /package/dist/{chunk-2H7UOFLK.js.map → chunk-SEGVTWSK.js.map} +0 -0
  112. /package/dist/{global-config-UKSWNDTX.js.map → global-config-S4ZIPECE.js.map} +0 -0
  113. /package/dist/{keychain-backend-JHTXAKWC.js.map → keychain-backend-HDF4TZDL.js.map} +0 -0
  114. /package/dist/{prompt-GMZABCJC.js.map → prompt-NDV3AE5L.js.map} +0 -0
@@ -1,356 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- generateReducerNativeArtifacts,
4
- isReducerNativeTestingWorkspace,
5
- runReducerNativeScenarios
6
- } from "./chunk-6A5HRJMQ.mjs";
7
- import "./chunk-HBNDKQT5.mjs";
8
- import "./chunk-CEDUHGNH.mjs";
9
- import {
10
- CONFIG_FLAG_ARGS,
11
- findProjectCompiledResultsForRevision,
12
- getProjectCompiledResultSdk,
13
- parseConfigFlags,
14
- uploadInitialProjectionSdk
15
- } from "./chunk-EOQIV6PS.mjs";
16
- import {
17
- STALE_CONTRACT_ARTIFACT_CODE,
18
- STALE_CONTRACT_ARTIFACT_EXIT_CODE,
19
- isDreamboardApiError,
20
- isStaleContractArtifactMessage
21
- } from "./chunk-BVVNBJM4.mjs";
22
- import {
23
- getProjectAuthoringState,
24
- getProjectCompileState,
25
- getProjectPendingAuthoringSync
26
- } from "./chunk-MRCUP5SW.mjs";
27
- import "./chunk-LI3ZR3BI.mjs";
28
- import {
29
- assertReleaseEnvironmentPortableDependencies,
30
- configureClient,
31
- consola,
32
- resolveProjectContext
33
- } from "./chunk-RJBLBYHX.mjs";
34
- import "./chunk-HJFQDSTU.mjs";
35
- import "./chunk-EIQWDQWJ.mjs";
36
- import "./chunk-2GBBP27W.mjs";
37
- import {
38
- IS_PUBLISHED_BUILD
39
- } from "./chunk-2NZNKIND.mjs";
40
- import "./chunk-SYPLYRGB.mjs";
41
- import "./chunk-2QMNAVV4.mjs";
42
- import "./chunk-6UUJEYDV.mjs";
43
- import "./chunk-2E5P5NWG.mjs";
44
- import "./chunk-MINCYHXN.mjs";
45
- import "./chunk-U6OJN7XS.mjs";
46
- import "./chunk-54TAYXUD.mjs";
47
- import "./chunk-LM3OZLZG.mjs";
48
- import "./chunk-SHUMAVAP.mjs";
49
- import "./chunk-XYDL7GY6.mjs";
50
-
51
- // src/commands/test.ts
52
- import { defineCommand } from "citty";
53
- import { readFile } from "fs/promises";
54
- import path from "path";
55
-
56
- // src/services/testing/runtime-mode.ts
57
- function isRemoteTestEnvironment(environment) {
58
- return environment === "staging" || environment === "prod";
59
- }
60
- function shouldUseRemoteTestRuntime(environment) {
61
- return IS_PUBLISHED_BUILD || isRemoteTestEnvironment(environment);
62
- }
63
-
64
- // src/services/workflows/resolve-latest-compiled-result.ts
65
- async function resolveLatestCompiledResult(projectRoot, projectConfig) {
66
- void projectRoot;
67
- const authoring = getProjectAuthoringState(projectConfig);
68
- if (getProjectPendingAuthoringSync(projectConfig)) {
69
- throw new Error(
70
- "Previous sync did not finish updating local scaffold files. Run 'dreamboard sync' again first."
71
- );
72
- }
73
- if (authoring.revisionDigest) {
74
- const compile = getProjectCompileState(projectConfig);
75
- const latestSuccess = (await findProjectCompiledResultsForRevision({
76
- projectId: projectConfig.projectId,
77
- revisionDigest: authoring.revisionDigest
78
- })).find((result) => result.success);
79
- const matchingLocalSuccess = compile.latestSuccessful?.revisionDigest === authoring.revisionDigest ? compile.latestSuccessful : void 0;
80
- const resolvedSuccess = latestSuccess ?? (matchingLocalSuccess?.resultId ? await getProjectCompiledResultSdk(
81
- projectConfig.projectId,
82
- matchingLocalSuccess.resultId
83
- ) : void 0);
84
- if (!resolvedSuccess?.success) {
85
- throw new Error(
86
- "No successful compile exists for the current authored revision. Run 'dreamboard compile' first."
87
- );
88
- }
89
- const resultRevisionDigest = resolvedSuccess.revisionDigest;
90
- if (resultRevisionDigest && resultRevisionDigest !== authoring.revisionDigest) {
91
- consola.warn(
92
- `Latest successful compile ${resolvedSuccess.id} belongs to ${resultRevisionDigest}, not ${authoring.revisionDigest}.`
93
- );
94
- }
95
- consola.info(
96
- `Project summary:
97
- compiledResultId: ${resolvedSuccess.id}
98
- revisionDigest: ${authoring.revisionDigest}`
99
- );
100
- return resolvedSuccess;
101
- }
102
- throw new Error(
103
- "This workspace does not know its project revision yet. Run 'dreamboard sync' first."
104
- );
105
- }
106
-
107
- // src/commands/test.ts
108
- 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.";
109
- var NO_REDUCER_NATIVE_BASES_FOUND_ERROR = "No bases found under test/bases/*.base.ts";
110
- var NO_REDUCER_NATIVE_SCENARIOS_FOUND_ERROR = "No scenarios found under test/scenarios/*.scenario.ts";
111
- function isPreviewProjectionEndpointUnavailable(error) {
112
- if (!isDreamboardApiError(error) || error.status !== 404) {
113
- return false;
114
- }
115
- const endpoint = error.problem.instance ?? error.problem.context?.endpoint;
116
- const message = error.problem.detail ?? error.problem.title;
117
- return endpoint?.includes("/preview/initial-projection") === true && message?.toLowerCase() === "not found";
118
- }
119
- async function uploadGeneratedPreviewProjection(options) {
120
- const previewBase = options.bases.find((base) => base.definition.id === "initial-turn") ?? options.bases[0];
121
- if (!previewBase) {
122
- return;
123
- }
124
- const projectionPath = path.join(
125
- options.projectRoot,
126
- "test",
127
- "generated",
128
- "bases",
129
- previewBase.definition.id,
130
- "player-1.projection.json"
131
- );
132
- const projectionJson = await readFile(projectionPath, "utf8");
133
- try {
134
- await uploadInitialProjectionSdk(options.gameId, projectionJson);
135
- } catch (error) {
136
- if (isPreviewProjectionEndpointUnavailable(error)) {
137
- consola.warn(
138
- "Skipping preview projection upload because the selected backend does not expose the preview projection endpoint."
139
- );
140
- return;
141
- }
142
- throw error;
143
- }
144
- }
145
- function resolveRequestedRunner(value) {
146
- if (value == null || value === "") {
147
- return void 0;
148
- }
149
- if (value === "reducer" || value === "remote" || value === "browser") {
150
- return value;
151
- }
152
- throw new Error(
153
- `Unsupported test runner '${String(value)}'. Expected one of reducer, remote, browser.`
154
- );
155
- }
156
- function isStaleContractArtifactResult(result) {
157
- return result.errorCode === STALE_CONTRACT_ARTIFACT_CODE || (result.error ? isStaleContractArtifactMessage(result.error) : false);
158
- }
159
- function resolveTestRunExitCode(summary) {
160
- if (summary.failed === 0) {
161
- return 0;
162
- }
163
- return summary.results.some(
164
- (result) => !result.success && isStaleContractArtifactResult(result)
165
- ) ? STALE_CONTRACT_ARTIFACT_EXIT_CODE : 1;
166
- }
167
- async function assertReducerNativeTestingWorkspace(projectRoot) {
168
- if (await isReducerNativeTestingWorkspace(projectRoot)) {
169
- return;
170
- }
171
- throw new Error(REDUCER_NATIVE_TEST_WORKSPACE_ERROR);
172
- }
173
- async function resolveReducerNativeRuntimeIdentity(options) {
174
- if (options.useRemoteRuntime || options.runner === "remote" || options.runner === "browser") {
175
- const latestCompiledResult = await resolveLatestCompiledResult(
176
- options.projectRoot,
177
- options.projectConfig
178
- );
179
- return {
180
- gameId: options.projectConfig.gameId,
181
- compiledResultId: latestCompiledResult.id
182
- };
183
- }
184
- return {
185
- gameId: options.projectConfig.gameId,
186
- compiledResultId: options.projectConfig.compile?.latestSuccessful?.resultId
187
- };
188
- }
189
- var generateCommand = defineCommand({
190
- meta: {
191
- name: "generate",
192
- description: "Generate reducer-native base artifacts for typed scenarios"
193
- },
194
- args: {
195
- scenario: {
196
- type: "string",
197
- description: "Optional scenario file path under test/scenarios"
198
- },
199
- debug: {
200
- type: "boolean",
201
- description: "Print full reducer-native validation details",
202
- default: false
203
- },
204
- "update-snapshots": {
205
- type: "boolean",
206
- description: "Refresh generated projection and scenario snapshots",
207
- default: false
208
- },
209
- ...CONFIG_FLAG_ARGS
210
- },
211
- async run({ args }) {
212
- const parsedFlags = parseConfigFlags(args);
213
- const useRemoteRuntime = shouldUseRemoteTestRuntime(parsedFlags.env);
214
- const { projectRoot, projectConfig, config } = await resolveProjectContext(
215
- parsedFlags,
216
- { requireAuth: useRemoteRuntime }
217
- );
218
- await assertReleaseEnvironmentPortableDependencies({
219
- projectRoot,
220
- projectConfig,
221
- environment: config.environment
222
- });
223
- await assertReducerNativeTestingWorkspace(projectRoot);
224
- const runtimeIdentity = await resolveReducerNativeRuntimeIdentity({
225
- projectRoot,
226
- projectConfig,
227
- useRemoteRuntime
228
- });
229
- const { bases, scenarios } = await generateReducerNativeArtifacts({
230
- projectRoot,
231
- scenarioPath: args.scenario,
232
- compiledResultId: runtimeIdentity.compiledResultId,
233
- gameId: runtimeIdentity.gameId,
234
- debug: Boolean(args.debug)
235
- });
236
- if (bases.length === 0) {
237
- throw new Error(NO_REDUCER_NATIVE_BASES_FOUND_ERROR);
238
- }
239
- if (scenarios.length === 0) {
240
- throw new Error(NO_REDUCER_NATIVE_SCENARIOS_FOUND_ERROR);
241
- }
242
- if (useRemoteRuntime && config.authToken) {
243
- await configureClient(config);
244
- await uploadGeneratedPreviewProjection({
245
- projectRoot,
246
- gameId: runtimeIdentity.gameId,
247
- bases
248
- });
249
- } else {
250
- consola.info(
251
- "Skipping preview projection upload because this test generation is local-only."
252
- );
253
- }
254
- consola.success(
255
- `Generated ${bases.length} base state(s) for ${scenarios.length} scenario(s).`
256
- );
257
- }
258
- });
259
- var runCommand = defineCommand({
260
- meta: {
261
- name: "run",
262
- description: "Run reducer-native scenarios from test/scenarios"
263
- },
264
- args: {
265
- scenario: {
266
- type: "string",
267
- description: "Optional scenario file path under test/scenarios"
268
- },
269
- debug: {
270
- type: "boolean",
271
- description: "Print full reducer-native validation details",
272
- default: false
273
- },
274
- "update-snapshots": {
275
- type: "boolean",
276
- description: "Refresh generated projection and scenario snapshots",
277
- default: false
278
- },
279
- runner: {
280
- type: "string",
281
- valueHint: "reducer|remote|browser",
282
- description: "Scenario runner: reducer (in-process, default), remote (live sessions against the configured backend), or browser (local web stack)."
283
- },
284
- ...CONFIG_FLAG_ARGS
285
- },
286
- async run({ args }) {
287
- const parsedFlags = parseConfigFlags(args);
288
- const useRemoteRuntime = shouldUseRemoteTestRuntime(parsedFlags.env);
289
- const runner = resolveRequestedRunner(args.runner) ?? "reducer";
290
- const { projectRoot, projectConfig, config } = await resolveProjectContext(
291
- parsedFlags,
292
- {
293
- requireAuth: useRemoteRuntime || runner === "remote" || runner === "browser"
294
- }
295
- );
296
- await assertReleaseEnvironmentPortableDependencies({
297
- projectRoot,
298
- projectConfig,
299
- environment: config.environment
300
- });
301
- await assertReducerNativeTestingWorkspace(projectRoot);
302
- const runtimeIdentity = await resolveReducerNativeRuntimeIdentity({
303
- projectRoot,
304
- projectConfig,
305
- useRemoteRuntime,
306
- runner
307
- });
308
- const summary = await runReducerNativeScenarios({
309
- projectRoot,
310
- projectConfig,
311
- resolvedConfig: config,
312
- runner,
313
- scenarioPath: args.scenario,
314
- compiledResultId: runtimeIdentity.compiledResultId,
315
- gameId: runtimeIdentity.gameId,
316
- debug: Boolean(args.debug),
317
- updateSnapshots: Boolean(args["update-snapshots"])
318
- });
319
- for (const result of summary.results) {
320
- if (result.success) {
321
- consola.success(`PASS ${result.id}`);
322
- } else if (result.errorCode === STALE_CONTRACT_ARTIFACT_CODE && result.error) {
323
- consola.error(result.error);
324
- } else {
325
- consola.error(
326
- `FAIL ${result.id}: ${result.error ?? "Scenario failed"}`
327
- );
328
- }
329
- }
330
- consola.info(
331
- `Test summary: ${summary.passed} passed, ${summary.failed} failed.`
332
- );
333
- if (summary.failed > 0) {
334
- process.exitCode = resolveTestRunExitCode(summary);
335
- }
336
- }
337
- });
338
- var test_default = defineCommand({
339
- meta: {
340
- name: "test",
341
- description: "Reducer-native test runner with typed bases and scenarios"
342
- },
343
- subCommands: {
344
- generate: generateCommand,
345
- run: runCommand
346
- }
347
- });
348
- export {
349
- NO_REDUCER_NATIVE_BASES_FOUND_ERROR,
350
- NO_REDUCER_NATIVE_SCENARIOS_FOUND_ERROR,
351
- REDUCER_NATIVE_TEST_WORKSPACE_ERROR,
352
- test_default as default,
353
- isPreviewProjectionEndpointUnavailable,
354
- resolveRequestedRunner,
355
- resolveTestRunExitCode
356
- };