@playdrop/playdrop-cli 0.12.28 → 0.12.30

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "0.12.8",
3
- "build": 31,
3
+ "build": 33,
4
4
  "runtimeSdkVersion": "0.12.5",
5
5
  "runtimeSdkBuild": 2,
6
6
  "clients": {
package/dist/catalogue.js CHANGED
@@ -1279,9 +1279,7 @@ function buildAppTasks(rootDir, catalogues, options) {
1279
1279
  }
1280
1280
  let design;
1281
1281
  if (Object.prototype.hasOwnProperty.call(entry, 'design')) {
1282
- const parsedDesign = (0, types_1.normalizeAppVersionDesign)(entry.design, {
1283
- allowedPackRefs: usesPacks,
1284
- });
1282
+ const parsedDesign = (0, types_1.normalizeAppVersionDesign)(entry.design);
1285
1283
  if (!parsedDesign.ok) {
1286
1284
  errors.push(`[${label}] App "${rawName}" ${parsedDesign.error}`);
1287
1285
  continue;
@@ -26,7 +26,7 @@ export declare function createEmptyDevRuntimeAssetManifest(): DevRuntimeAssetMan
26
26
  export declare function buildLocalDevRuntimeAssetsUrl(appBaseUrl: string): string;
27
27
  export declare function buildLocalDevRuntimeAssetFileUrl(appBaseUrl: string, ownedAssetName: string, role: string): string;
28
28
  export declare function buildDevRuntimeAssetManifest(input: {
29
- client: ApiClient;
29
+ client?: Pick<ApiClient, 'resolveRuntimeAssets'>;
30
30
  apiBase: string;
31
31
  task: AppTask;
32
32
  creatorUsername: string;
@@ -181,6 +181,9 @@ async function buildDevRuntimeAssetManifest(input) {
181
181
  return (0, types_1.formatContentVersionRef)(parsedPackRef);
182
182
  });
183
183
  if (directDependencies.length > 0 || packDependencies.length > 0) {
184
+ if (!input.client) {
185
+ throw new Error('dev_runtime_asset_resolver_missing');
186
+ }
184
187
  const resolved = await input.client.resolveRuntimeAssets({
185
188
  assets: directDependencies,
186
189
  packs: packDependencies,
@@ -5,7 +5,7 @@ export type InitSummary = {
5
5
  directory: string;
6
6
  cataloguePath: string;
7
7
  readmeStatus: 'created' | 'updated';
8
- agentsStatus: 'created' | 'updated';
8
+ agentsStatus: 'created' | 'skipped';
9
9
  catalogueStatus: 'created' | 'skipped';
10
10
  gitStatus: 'initialized' | 'skipped' | 'declined';
11
11
  };
@@ -246,12 +246,17 @@ async function init(targetPath, options = {}) {
246
246
  const renderedReadme = ensureTrailingNewline(renderReadmeTemplate(readmeDownload, replacements));
247
247
  (0, node_fs_1.writeFileSync)(readmePath, renderedReadme, 'utf8');
248
248
  actions.push(readmeExisted ? 'Updated README.md' : 'Created README.md');
249
- const agentsDownload = await downloadBootstrapAsset(envConfig.webBase, normalized.agentsUri, 'AGENTS.md');
250
- if (!agentsDownload) {
251
- return null;
249
+ if (agentsExisted) {
250
+ actions.push('Skipped existing AGENTS.md');
251
+ }
252
+ else {
253
+ const agentsDownload = await downloadBootstrapAsset(envConfig.webBase, normalized.agentsUri, 'AGENTS.md');
254
+ if (!agentsDownload) {
255
+ return null;
256
+ }
257
+ (0, node_fs_1.writeFileSync)(agentsPath, agentsDownload, 'utf8');
258
+ actions.push('Created AGENTS.md');
252
259
  }
253
- (0, node_fs_1.writeFileSync)(agentsPath, agentsDownload, 'utf8');
254
- actions.push(agentsExisted ? 'Updated AGENTS.md' : 'Created AGENTS.md');
255
260
  if (!catalogueExisted) {
256
261
  (0, node_fs_1.writeFileSync)(cataloguePath, normalized.catalogue, 'utf8');
257
262
  actions.push('Created catalogue.json');
@@ -294,7 +299,7 @@ async function init(targetPath, options = {}) {
294
299
  directory: resolved,
295
300
  cataloguePath,
296
301
  readmeStatus: readmeExisted ? 'updated' : 'created',
297
- agentsStatus: agentsExisted ? 'updated' : 'created',
302
+ agentsStatus: agentsExisted ? 'skipped' : 'created',
298
303
  catalogueStatus: catalogueExisted ? 'skipped' : 'created',
299
304
  gitStatus,
300
305
  };
@@ -36,7 +36,16 @@ export type WorkerAppPublishResult = {
36
36
  warnings: string[];
37
37
  };
38
38
  export type WorkerPlaydropAssetRequirement = 'PACK' | 'ASSET_OR_PACK';
39
+ export declare function resolveWorkerPlaydropAssetRequirement(value: unknown): WorkerPlaydropAssetRequirement | null;
39
40
  export declare function assertTaskPlaytestEvidenceManifest(task: AppTask, options?: {
40
41
  requireOutcomeProof?: boolean;
41
42
  }): AgentTaskPlaytestProof | null;
43
+ export declare function assertWorkerAppLocalUploadPreflight(input: {
44
+ task: AppTask;
45
+ kind: 'NEW_GAME' | 'REMIX_GAME' | 'GAME_UPDATE';
46
+ executionTarget?: AgentExecutionTarget;
47
+ creatorUsername?: string | null;
48
+ playdropAssetRequirement?: WorkerPlaydropAssetRequirement | null;
49
+ creatorRequest?: string | null;
50
+ }): Promise<AgentTaskPlaytestProof | null>;
42
51
  export declare function publishWorkerAppProject(input: WorkerAppPublishInput): Promise<WorkerAppPublishResult>;
@@ -3,7 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.resolveUploadOwner = resolveUploadOwner;
4
4
  exports.resolveDefaultUploadCreator = resolveDefaultUploadCreator;
5
5
  exports.upload = upload;
6
+ exports.resolveWorkerPlaydropAssetRequirement = resolveWorkerPlaydropAssetRequirement;
6
7
  exports.assertTaskPlaytestEvidenceManifest = assertTaskPlaytestEvidenceManifest;
8
+ exports.assertWorkerAppLocalUploadPreflight = assertWorkerAppLocalUploadPreflight;
7
9
  exports.publishWorkerAppProject = publishWorkerAppProject;
8
10
  const node_crypto_1 = require("node:crypto");
9
11
  const node_fs_1 = require("node:fs");
@@ -495,7 +497,10 @@ function validateTagRefsForTarget(tagRegistry, target) {
495
497
  function collectTaskTagValidationTargets(task) {
496
498
  if (task.kind === 'app') {
497
499
  return [
498
- { tags: task.tags, targetKind: 'APP' },
500
+ {
501
+ tags: Array.from(new Set([...task.tags, ...Object.values(task.design ?? {})])),
502
+ targetKind: 'APP',
503
+ },
499
504
  ...task.ownedAssets.map((ownedAsset) => ({
500
505
  tags: ownedAsset.tags,
501
506
  targetKind: 'ASSET',
@@ -1204,6 +1209,19 @@ async function upload(pathOrName, options) {
1204
1209
  (0, uploadLog_1.printTaskSummary)(results, warnings, { action: 'upload', environment: env });
1205
1210
  (0, uploadLog_1.printPublishedAppNextSteps)(results);
1206
1211
  }
1212
+ function resolveWorkerPlaydropAssetRequirement(value) {
1213
+ const text = typeof value === 'string' ? value.toLowerCase() : '';
1214
+ if (!text.trim() || !/\bplay\s*drop\b|\bplaydrop\b/.test(text)) {
1215
+ return null;
1216
+ }
1217
+ if (/\basset\s*pack(s)?\b|\bpack(s)?\b/.test(text)) {
1218
+ return 'PACK';
1219
+ }
1220
+ if (/\basset(s)?\b|\bsprite(s)?\b|\bmodel(s)?\b|\bart\b|\bcharacter(s)?\b|\bprop(s)?\b/.test(text)) {
1221
+ return 'ASSET_OR_PACK';
1222
+ }
1223
+ return null;
1224
+ }
1207
1225
  const WORKER_SUPERVISOR_SOURCE_EXCLUDES = [
1208
1226
  'PLAYDROP_TASK.md',
1209
1227
  '.playdrop/',
@@ -1324,24 +1342,11 @@ function assertNoLaunchCheckConditionalSource(runtimeSource) {
1324
1342
  throw new Error(`agent_task_launch_check_conditional_disallowed: game source must not sniff validation or local route context. First match at ${environmentSniff.location}.`);
1325
1343
  }
1326
1344
  }
1327
- function hasProceduralAssetStrategy(task) {
1328
- const strategy = task.design?.assetStrategy;
1329
- return strategy?.value === 'procedural';
1330
- }
1331
1345
  function hasDeclaredRuntimeAssetDependency(task) {
1332
1346
  return task.uses.packs.length > 0
1333
1347
  || task.uses.assets.length > 0
1334
1348
  || task.ownedAssets.some((ownedAsset) => !isListingOwnedAsset(task, ownedAsset));
1335
1349
  }
1336
- function assertNewGameAssetStrategy(task) {
1337
- if (hasDeclaredRuntimeAssetDependency(task)) {
1338
- return;
1339
- }
1340
- if (hasProceduralAssetStrategy(task)) {
1341
- return;
1342
- }
1343
- throw new Error('agent_task_asset_strategy_missing: new game tasks must either declare true runtime assets/packs or set design.assetStrategy to { "value": "procedural", "note": "..." } for an honest procedural draft.');
1344
- }
1345
1350
  function isListingOwnedAsset(task, ownedAsset) {
1346
1351
  const primaryPath = ownedAsset.filePaths?.primary;
1347
1352
  if (!primaryPath) {
@@ -1590,7 +1595,6 @@ async function assertNewGameDeclaredAssetsAreUsedAtRuntime(input) {
1590
1595
  const runtimeSource = readRuntimeSourceText(input.task.projectDir);
1591
1596
  const source = runtimeSource.source;
1592
1597
  assertNoLaunchCheckConditionalSource(runtimeSource);
1593
- assertNewGameAssetStrategy(input.task);
1594
1598
  if (!hasDeclaredRuntimeAssetDependency(input.task)) {
1595
1599
  return;
1596
1600
  }
@@ -1608,8 +1612,7 @@ async function assertNewGameDeclaredAssetsAreUsedAtRuntime(input) {
1608
1612
  }
1609
1613
  const manifest = input.task.ownedAssets.length > 0
1610
1614
  ? await (0, devRuntimeAssets_1.buildDevRuntimeAssetManifest)({
1611
- client: input.client,
1612
- apiBase: input.apiBase,
1615
+ apiBase: 'http://127.0.0.1',
1613
1616
  task: {
1614
1617
  ...input.task,
1615
1618
  uses: { assets: [], packs: [] },
@@ -1807,6 +1810,35 @@ function readRuntimeSourceLastModifiedAt(rootDir) {
1807
1810
  walk(root);
1808
1811
  return latest > 0 ? new Date(latest).toISOString() : null;
1809
1812
  }
1813
+ async function assertWorkerAppLocalUploadPreflight(input) {
1814
+ if (input.kind === 'GAME_UPDATE') {
1815
+ return assertTaskPlaytestEvidenceManifest(input.task);
1816
+ }
1817
+ (0, listingPreflight_1.assertAgentGameHeroListingPreflight)(input.task);
1818
+ if (input.kind === 'NEW_GAME') {
1819
+ (0, listingPreflight_1.assertAgentNewGameArtDirectionPreflight)(input.task);
1820
+ }
1821
+ if (!appTaskSatisfiesPlaydropAssetRequirement(input.task, input.playdropAssetRequirement)) {
1822
+ throw new Error('agent_task_playdrop_asset_dependency_missing: the creator asked for PlayDrop assets, but catalogue.json does not declare a matching uses.assets, uses.packs, or ownedAssets dependency.');
1823
+ }
1824
+ await (0, ownedRuntimeImageValidation_1.assertOwnedRuntimeImagesAreValid)(input.task);
1825
+ assertRequestedPlaydropAssetsAreUsedAtRuntime({
1826
+ task: input.task,
1827
+ requirement: input.playdropAssetRequirement,
1828
+ creatorRequest: input.creatorRequest,
1829
+ });
1830
+ await assertNewGameDeclaredAssetsAreUsedAtRuntime({
1831
+ creatorUsername: input.creatorUsername?.trim() ?? '',
1832
+ task: input.task,
1833
+ });
1834
+ (0, listingPreflight_1.assertAgentGameScreenshotListingPreflight)(input.task);
1835
+ (0, listingPreflight_1.assertAgentGameCaptureReportPreflight)(input.task, {
1836
+ requireCaptureReport: input.executionTarget === 'FIRST_PARTY',
1837
+ });
1838
+ return assertTaskPlaytestEvidenceManifest(input.task, {
1839
+ requireOutcomeProof: input.kind === 'NEW_GAME',
1840
+ });
1841
+ }
1810
1842
  // Task upload path used by "playdrop task upload": same internal pipeline as
1811
1843
  // "playdrop project publish", but always as one PRIVATE draft version for the
1812
1844
  // task's creator, with browser launch checks on before the version is created.
@@ -1853,34 +1885,14 @@ async function publishWorkerAppProject(input) {
1853
1885
  throw new Error(`agent_task_remix_ref_mismatch:${catalogueRemixRef}:${expectedRemixRef}`);
1854
1886
  }
1855
1887
  }
1856
- if (input.kind === 'GAME_UPDATE') {
1857
- assertTaskPlaytestEvidenceManifest(task);
1858
- }
1859
- if (input.kind === 'NEW_GAME' || input.kind === 'REMIX_GAME') {
1860
- (0, listingPreflight_1.assertAgentGameHeroListingPreflight)(task);
1861
- }
1862
- if (input.kind === 'NEW_GAME') {
1863
- (0, listingPreflight_1.assertAgentNewGameArtDirectionPreflight)(task);
1864
- }
1865
- if (!appTaskSatisfiesPlaydropAssetRequirement(task, input.playdropAssetRequirement)) {
1866
- throw new Error('agent_task_playdrop_asset_dependency_missing: the creator asked for PlayDrop assets, but catalogue.json does not declare a matching uses.assets, uses.packs, or ownedAssets dependency.');
1867
- }
1868
- if (input.kind === 'NEW_GAME' || input.kind === 'REMIX_GAME') {
1869
- await (0, ownedRuntimeImageValidation_1.assertOwnedRuntimeImagesAreValid)(task);
1870
- }
1871
- assertRequestedPlaydropAssetsAreUsedAtRuntime({
1888
+ const playtestProof = await assertWorkerAppLocalUploadPreflight({
1872
1889
  task,
1873
- requirement: input.playdropAssetRequirement,
1890
+ kind: input.kind,
1891
+ executionTarget: input.executionTarget,
1892
+ creatorUsername,
1893
+ playdropAssetRequirement: input.playdropAssetRequirement,
1874
1894
  creatorRequest: input.creatorRequest,
1875
1895
  });
1876
- if (input.kind === 'NEW_GAME' || input.kind === 'REMIX_GAME') {
1877
- await assertNewGameDeclaredAssetsAreUsedAtRuntime({
1878
- client: input.client,
1879
- apiBase: input.apiBase,
1880
- creatorUsername,
1881
- task,
1882
- });
1883
- }
1884
1896
  await assertDeclared3dPlaydropPacksContainRuntimeModels({
1885
1897
  client: input.client,
1886
1898
  task,
@@ -1904,13 +1916,6 @@ async function publishWorkerAppProject(input) {
1904
1916
  taskId: input.taskId,
1905
1917
  taskToken,
1906
1918
  };
1907
- let playtestProof = null;
1908
- if (input.kind === 'NEW_GAME' || input.kind === 'REMIX_GAME') {
1909
- (0, listingPreflight_1.assertAgentGameScreenshotListingPreflight)(task);
1910
- playtestProof = assertTaskPlaytestEvidenceManifest(task, {
1911
- requireOutcomeProof: input.kind === 'NEW_GAME',
1912
- });
1913
- }
1914
1919
  const { upload: uploadResult, warnings } = await (0, apps_1.runAppPipeline)(input.client, task, {
1915
1920
  creatorUsername,
1916
1921
  apiBase: input.apiBase,
@@ -11,6 +11,7 @@ const taskUtils_1 = require("../taskUtils");
11
11
  const uploadLog_1 = require("../uploadLog");
12
12
  const listingPreflight_1 = require("../listingPreflight");
13
13
  const upload_content_1 = require("./upload-content");
14
+ const upload_1 = require("./upload");
14
15
  function buildLocalAssetSpecLookups(tasks) {
15
16
  const exactByRef = new Map();
16
17
  const uniqueByNameVersion = new Map();
@@ -192,7 +193,20 @@ async function validate(pathOrName, options = {}) {
192
193
  const entityId = task.name;
193
194
  try {
194
195
  if (task.kind === 'app') {
195
- (0, listingPreflight_1.assertProjectListingPreflight)(task);
196
+ const workerContext = (0, listingPreflight_1.readWorkerUploadPreflightContext)(task.projectDir);
197
+ if (workerContext) {
198
+ await (0, upload_1.assertWorkerAppLocalUploadPreflight)({
199
+ task,
200
+ kind: workerContext.kind,
201
+ executionTarget: workerContext.target,
202
+ creatorUsername: workerContext.creatorUsername,
203
+ creatorRequest: workerContext.creatorRequest,
204
+ playdropAssetRequirement: (0, upload_1.resolveWorkerPlaydropAssetRequirement)(workerContext.creatorRequest),
205
+ });
206
+ }
207
+ else {
208
+ (0, listingPreflight_1.assertProjectListingPreflight)(task);
209
+ }
196
210
  await (0, apps_1.validateAppTask)(task);
197
211
  (0, apps_1.collectAppValidationWarnings)(task, 'source').forEach((warning) => warnings.add(warning));
198
212
  }
@@ -642,23 +642,6 @@ async function appendWorkerTranscriptChunks(input) {
642
642
  });
643
643
  }
644
644
  }
645
- function resolvePlaydropAssetRequirementFromTaskRequest(value) {
646
- const text = typeof value === 'string' ? value.toLowerCase() : '';
647
- if (!text.trim()) {
648
- return null;
649
- }
650
- const mentionsPlaydrop = /\bplay\s*drop\b|\bplaydrop\b/.test(text);
651
- if (!mentionsPlaydrop) {
652
- return null;
653
- }
654
- if (/\basset\s*pack(s)?\b|\bpack(s)?\b/.test(text)) {
655
- return 'PACK';
656
- }
657
- if (/\basset(s)?\b|\bsprite(s)?\b|\bmodel(s)?\b|\bart\b|\bcharacter(s)?\b|\bprop(s)?\b/.test(text)) {
658
- return 'ASSET_OR_PACK';
659
- }
660
- return null;
661
- }
662
645
  function resolveTaskWorkspaceDir(startDir = node_process_1.default.cwd()) {
663
646
  return node_path_1.default.dirname(node_path_1.default.dirname(findWorkspaceTaskFile(startDir, 'task.json')));
664
647
  }
@@ -1382,21 +1365,7 @@ function assertWorkerClaimErrorRetryable(error) {
1382
1365
  }
1383
1366
  }
1384
1367
  function resolvePlaydropAssetRequirementFromText(value) {
1385
- const text = typeof value === 'string' ? value.toLowerCase() : '';
1386
- if (!text.trim()) {
1387
- return null;
1388
- }
1389
- const mentionsPlaydrop = /\bplay\s*drop\b|\bplaydrop\b/.test(text);
1390
- if (!mentionsPlaydrop) {
1391
- return null;
1392
- }
1393
- if (/\basset\s*pack(s)?\b|\bpack(s)?\b/.test(text)) {
1394
- return 'PACK';
1395
- }
1396
- if (/\basset(s)?\b|\bsprite(s)?\b|\bmodel(s)?\b|\bart\b|\bcharacter(s)?\b|\bprop(s)?\b/.test(text)) {
1397
- return 'ASSET_OR_PACK';
1398
- }
1399
- return null;
1368
+ return (0, upload_1.resolveWorkerPlaydropAssetRequirement)(value);
1400
1369
  }
1401
1370
  function readCodexAuthenticated(homeDir = node_os_1.default.homedir()) {
1402
1371
  try {
@@ -4688,7 +4657,7 @@ async function uploadTask(options = {}) {
4688
4657
  executionTarget: taskContext.target,
4689
4658
  expectedAppName: taskContext.outputAppName ?? undefined,
4690
4659
  remixSourceRef: taskContext.remixSourceRef ?? null,
4691
- playdropAssetRequirement: resolvePlaydropAssetRequirementFromTaskRequest(taskContext.creatorRequest),
4660
+ playdropAssetRequirement: (0, upload_1.resolveWorkerPlaydropAssetRequirement)(taskContext.creatorRequest),
4692
4661
  creatorRequest: taskContext.creatorRequest,
4693
4662
  projectDir,
4694
4663
  creatorUsername: taskContext.creatorUsername,
@@ -4,13 +4,23 @@ export type ListingMediaFile = {
4
4
  fileKey: string;
5
5
  sha256: string;
6
6
  };
7
+ export type WorkerUploadPreflightContext = {
8
+ kind: 'NEW_GAME' | 'REMIX_GAME' | 'GAME_UPDATE';
9
+ target: 'FIRST_PARTY' | 'PERSONAL';
10
+ creatorUsername: string;
11
+ creatorRequest: string;
12
+ };
7
13
  export declare function readMediaCaptureProof(input: {
8
14
  task: AppTask;
9
15
  preparedSessionFiles: ListingMediaFile[];
10
16
  }): RecordAppUploadMediaCaptureRequest;
17
+ export declare function readWorkerUploadPreflightContext(projectDir: string): WorkerUploadPreflightContext | null;
11
18
  export declare function assertAgentGameHeroListingPreflight(task: AppTask): void;
12
19
  export declare function assertAgentNewGameArtDirectionPreflight(task: AppTask): void;
13
20
  export declare function assertAgentGameScreenshotListingPreflight(task: AppTask): void;
21
+ export declare function assertAgentGameCaptureReportPreflight(task: AppTask, options: {
22
+ requireCaptureReport: boolean;
23
+ }): void;
14
24
  export declare function assertAgentGameListingPreflight(task: AppTask, options: {
15
25
  requireCaptureReport: boolean;
16
26
  }): void;
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.readMediaCaptureProof = readMediaCaptureProof;
4
+ exports.readWorkerUploadPreflightContext = readWorkerUploadPreflightContext;
4
5
  exports.assertAgentGameHeroListingPreflight = assertAgentGameHeroListingPreflight;
5
6
  exports.assertAgentNewGameArtDirectionPreflight = assertAgentNewGameArtDirectionPreflight;
6
7
  exports.assertAgentGameScreenshotListingPreflight = assertAgentGameScreenshotListingPreflight;
8
+ exports.assertAgentGameCaptureReportPreflight = assertAgentGameCaptureReportPreflight;
7
9
  exports.assertAgentGameListingPreflight = assertAgentGameListingPreflight;
8
10
  exports.assertProjectListingPreflight = assertProjectListingPreflight;
9
11
  const node_crypto_1 = require("node:crypto");
@@ -224,9 +226,23 @@ function listingMediaFiles(task) {
224
226
  sha256: (0, node_crypto_1.createHash)('sha256').update((0, node_fs_1.readFileSync)(path)).digest('hex'),
225
227
  }));
226
228
  }
227
- function readWorkerListingContext(projectDir) {
228
- const contextPath = (0, node_path_1.join)(projectDir, '.playdrop', 'task.json');
229
- if (!(0, node_fs_1.existsSync)(contextPath)) {
229
+ function findWorkerTaskContextPath(projectDir) {
230
+ let current = (0, node_path_1.resolve)(projectDir);
231
+ while (true) {
232
+ const candidate = (0, node_path_1.join)(current, '.playdrop', 'task.json');
233
+ if ((0, node_fs_1.existsSync)(candidate)) {
234
+ return candidate;
235
+ }
236
+ const parent = (0, node_path_1.dirname)(current);
237
+ if (parent === current) {
238
+ return null;
239
+ }
240
+ current = parent;
241
+ }
242
+ }
243
+ function readWorkerUploadPreflightContext(projectDir) {
244
+ const contextPath = findWorkerTaskContextPath(projectDir);
245
+ if (!contextPath) {
230
246
  return null;
231
247
  }
232
248
  let parsed;
@@ -237,13 +253,18 @@ function readWorkerListingContext(projectDir) {
237
253
  const reason = error instanceof Error ? error.message : String(error);
238
254
  throw new Error(`agent_task_context_invalid: ${contextPath} must be valid JSON. ${reason}`);
239
255
  }
240
- if (parsed?.kind !== 'NEW_GAME' && parsed?.kind !== 'REMIX_GAME') {
256
+ if (parsed?.kind !== 'NEW_GAME' && parsed?.kind !== 'REMIX_GAME' && parsed?.kind !== 'GAME_UPDATE') {
241
257
  return null;
242
258
  }
243
259
  if (parsed.target !== 'FIRST_PARTY' && parsed.target !== 'PERSONAL') {
244
260
  throw new Error(`agent_task_context_invalid: ${contextPath} has invalid target.`);
245
261
  }
246
- return { kind: parsed.kind, target: parsed.target };
262
+ return {
263
+ kind: parsed.kind,
264
+ target: parsed.target,
265
+ creatorUsername: typeof parsed.creatorUsername === 'string' ? parsed.creatorUsername.trim() : '',
266
+ creatorRequest: typeof parsed.creatorRequest === 'string' ? parsed.creatorRequest.trim() : '',
267
+ };
247
268
  }
248
269
  function assertAgentGameHeroListingPreflight(task) {
249
270
  assertHeroListingArt(task);
@@ -254,16 +275,19 @@ function assertAgentNewGameArtDirectionPreflight(task) {
254
275
  function assertAgentGameScreenshotListingPreflight(task) {
255
276
  assertListingScreenshots(task);
256
277
  }
257
- function assertAgentGameListingPreflight(task, options) {
258
- assertAgentGameHeroListingPreflight(task);
259
- assertAgentGameScreenshotListingPreflight(task);
278
+ function assertAgentGameCaptureReportPreflight(task, options) {
260
279
  if (options.requireCaptureReport || task.listing?.captureReportPath) {
261
280
  readMediaCaptureProof({ task, preparedSessionFiles: listingMediaFiles(task) });
262
281
  }
263
282
  }
283
+ function assertAgentGameListingPreflight(task, options) {
284
+ assertAgentGameHeroListingPreflight(task);
285
+ assertAgentGameScreenshotListingPreflight(task);
286
+ assertAgentGameCaptureReportPreflight(task, options);
287
+ }
264
288
  function assertProjectListingPreflight(task) {
265
- const context = readWorkerListingContext(task.projectDir);
266
- if (context) {
289
+ const context = readWorkerUploadPreflightContext(task.projectDir);
290
+ if (context?.kind === 'NEW_GAME' || context?.kind === 'REMIX_GAME') {
267
291
  assertAgentGameListingPreflight(task, { requireCaptureReport: context.target === 'FIRST_PARTY' });
268
292
  if (context.kind === 'NEW_GAME') {
269
293
  assertAgentNewGameArtDirectionPreflight(task);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "0.12.8",
3
- "build": 31,
3
+ "build": 33,
4
4
  "runtimeSdkVersion": "0.12.5",
5
5
  "runtimeSdkBuild": 2,
6
6
  "clients": {
@@ -19,18 +19,12 @@ export declare const REVIEW_STATE_VALUES: readonly ["NOT_REQUIRED", "QUEUED", "R
19
19
  export type ReviewState = (typeof REVIEW_STATE_VALUES)[number];
20
20
  export declare function isReviewState(value: unknown): value is ReviewState;
21
21
  export declare function parseReviewState(value: unknown): ReviewState | null;
22
- export declare const APP_VERSION_DESIGN_GROUP_VALUES: readonly ["genre", "coreGameplay", "render", "camera", "input", "progression", "artStyle", "coreAssets", "assetStrategy", "engine", "features", "references", "fantasy", "mascot", "setting", "palette", "uiMaterial"];
22
+ export declare const APP_VERSION_DESIGN_GROUP_VALUES: readonly ["genre", "coreGameplay", "perspective", "controls", "visualStyle", "progression", "feel"];
23
23
  export type AppVersionDesignGroup = (typeof APP_VERSION_DESIGN_GROUP_VALUES)[number];
24
- export type AppVersionDesignEntry = {
25
- value?: string;
26
- values?: string[];
27
- note?: string;
28
- };
29
- export type AppVersionDesign = Partial<Record<AppVersionDesignGroup, AppVersionDesignEntry>>;
30
- export declare const APP_VERSION_DESIGN_SHAPE_HELP = "Expected catalogue design shape: {\"genre\":{\"value\":\"arcade\"},\"coreGameplay\":{\"value\":\"short loop\"},\"render\":{\"value\":\"2d\"},\"camera\":{\"value\":\"fixed-screen\"},\"input\":{\"values\":[\"tap\",\"pointer\"]},\"progression\":{\"value\":\"waves\"},\"artStyle\":{\"value\":\"bright cartoon\"},\"assetStrategy\":{\"value\":\"procedural\",\"note\":\"honest procedural draft\"},\"engine\":{\"value\":\"plain-html\"},\"coreAssets\":{\"values\":[]},\"features\":{\"values\":[]},\"references\":{\"values\":[]},\"fantasy\":{\"value\":\"heroic potion shop\"},\"mascot\":{\"value\":\"round owl alchemist\",\"note\":\"expressive silhouette\"},\"setting\":{\"value\":\"moonlit market\"},\"palette\":{\"values\":[\"ink blue\",\"amber\",\"mint\"]},\"uiMaterial\":{\"value\":\"painted wood\"}}. Allowed groups: genre, coreGameplay, render, camera, input, progression, artStyle, coreAssets, assetStrategy, engine, features, references, fantasy, mascot, setting, palette, uiMaterial. Use value for one-value groups and values for many-value groups; palette accepts at most 6 values.";
31
- export type NormalizeAppVersionDesignOptions = {
32
- allowedPackRefs?: readonly string[];
33
- };
24
+ export type AppVersionDesign = Partial<Record<AppVersionDesignGroup, string>>;
25
+ export declare const APP_VERSION_DESIGN_TAG_GROUPS: Record<AppVersionDesignGroup, string>;
26
+ export declare const APP_VERSION_DESIGN_PERSPECTIVE_TAG_REFS: readonly ["perspective/2d-fixed-screen", "perspective/2d-side-view", "perspective/2d-top-down", "perspective/2d-isometric", "perspective/3d-first-person", "perspective/3d-third-person", "perspective/3d-top-down", "perspective/3d-isometric"];
27
+ export declare const APP_VERSION_DESIGN_SHAPE_HELP = "Expected optional catalogue design shape: {\"genre\":\"game-genre/puzzle\",\"coreGameplay\":\"core-gameplay/merge\",\"perspective\":\"perspective/2d-fixed-screen\",\"controls\":\"game-controls/drag\",\"visualStyle\":\"visual-style/stylized\",\"progression\":\"game-progression/levels\",\"feel\":\"game-feel/snappy\"}. Every field is optional and may be blank or null. Each nonempty value must be one tag ref from its matching tag group. Perspective must be one of: perspective/2d-fixed-screen, perspective/2d-side-view, perspective/2d-top-down, perspective/2d-isometric, perspective/3d-first-person, perspective/3d-third-person, perspective/3d-top-down, perspective/3d-isometric.";
34
28
  export type NormalizeAppVersionDesignResult = {
35
29
  ok: true;
36
30
  value: AppVersionDesign;
@@ -38,7 +32,7 @@ export type NormalizeAppVersionDesignResult = {
38
32
  ok: false;
39
33
  error: string;
40
34
  };
41
- export declare function normalizeAppVersionDesign(value: unknown, options?: NormalizeAppVersionDesignOptions): NormalizeAppVersionDesignResult;
35
+ export declare function normalizeAppVersionDesign(value: unknown): NormalizeAppVersionDesignResult;
42
36
  export declare const APP_AUTH_MODE_VALUES: readonly ["REQUIRED", "OPTIONAL", "NONE"];
43
37
  export type AppAuthMode = (typeof APP_AUTH_MODE_VALUES)[number];
44
38
  export declare const DEFAULT_APP_AUTH_MODE: AppAuthMode;
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EACV,iCAAiC,EACjC,iCAAiC,EAClC,MAAM,kBAAkB,CAAC;AAM1B,eAAO,MAAM,uBAAuB,iCAAkC,CAAC;AAEvE,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE,eAAO,MAAM,wBAAwB,EAAE,cAAyB,CAAC;AAEjE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAKxE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAMzE;AAED,eAAO,MAAM,6BAA6B,gCAAiC,CAAC;AAE5E,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,6BAA6B,CAAC,CAAC,MAAM,CAAC,CAAC;AAElF,eAAO,MAAM,8BAA8B,EAAE,oBAA+B,CAAC;AAE7E,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAKpF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,GAAG,IAAI,CAMrF;AAED,eAAO,MAAM,mBAAmB,+HAWtB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAKlE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CAMnE;AAED,eAAO,MAAM,+BAA+B,wNAkBlC,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,+BAA+B,CAAC,CAAC,MAAM,CAAC,CAAC;AAErF,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAa7F,eAAO,MAAM,6BAA6B,8jCAAg9B,CAAC;AAsB3/B,MAAM,MAAM,gCAAgC,GAAG;IAC7C,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,+BAA+B,GACvC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE,GACrC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAUjC,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,gCAAqC,GAC7C,+BAA+B,CAsEjC;AAED,eAAO,MAAM,oBAAoB,2CAA4C,CAAC;AAE9E,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,eAAO,MAAM,qBAAqB,EAAE,WAAwB,CAAC;AAE7D,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAKlE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CAMnE;AAED,eAAO,MAAM,0BAA0B,mDAAoD,CAAC;AAE5F,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,eAAO,MAAM,2BAA2B,EAAE,iBAAiC,CAAC;AAE5E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAK9E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAM/E;AAED,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAM7C,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAA+C,CAAC;AAEzE;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYrD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAI5D;AAMD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,oBAAoB,CAAC;IACjC,WAAW,EAAE,cAAc,CAAC;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,cAAc,EAAE,iBAAiB,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,cAAc,CAAC;IACxB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,iFAAiF;IACjF,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC,gBAAgB,EAAE,2BAA2B,EAAE,CAAC;IAGhD,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAG1B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;IACnC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,oBAAoB,CAAC;IACjC,WAAW,EAAE,cAAc,CAAC;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,cAAc,EAAE,iBAAiB,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,cAAc,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,CAAC,EAAE,2BAA2B,EAAE,CAAC;IACjD,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,cAAc,CAAC,EAAE,iBAAiB,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,OAAO,CAAC;IAMvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,gCAAgC,sDAAuD,CAAC;AACrG,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,gCAAgC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvF,eAAO,MAAM,6BAA6B,6CAA8C,CAAC;AACzF,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,6BAA6B,CAAC,CAAC,MAAM,CAAC,CAAC;AACjF,eAAO,MAAM,qCAAqC,0CAA2C,CAAC;AAC9F,MAAM,MAAM,0BAA0B,GAAG,CAAC,OAAO,qCAAqC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhG,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,0BAA0B,CAAC;IACnC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,gBAAgB,EAAE,UAAU,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,OAAO,CAAC;IACd,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,QAAQ,EAAE,WAAW,CAAC;IACtB,cAAc,EAAE,iBAAiB,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,2BAA2B,EAAE,CAAC;IAChD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,aAAa,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,gBAAgB,CAAC,EAAE,2BAA2B,EAAE,CAAC;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,cAAc,CAAC,EAAE,iBAAiB,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,6BAA6B,EAAE,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,iCAAiC,EAAE,CAAC;IACnD,YAAY,CAAC,EAAE,iCAAiC,EAAE,CAAC;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACzC,KAAK,CAAC,EAAE,0BAA0B,EAAE,CAAC;CACtC;AAED,MAAM,MAAM,6BAA6B,GACrC,MAAM,GACN;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC;AAEN,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,WAAW,EAAE,0BAA0B,CAAC;IACxC,YAAY,EAAE,0BAA0B,CAAC;CAC1C;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,kBAAkB,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,SAAS,CAAC,EAAE,6BAA6B,CAAC;CAC3C;AAED,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,kCAAkC;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,iCAAiC;IAChD,MAAM,EAAE,OAAO,CAAC,0BAA0B,EAAE,SAAS,CAAC,CAAC;IACvD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,kCAAkC;IACjD,OAAO,EAAE,qBAAqB,CAAC;CAChC;AAED,MAAM,WAAW,kCAAkC;IACjD,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,gBAAgB,EAAE,UAAU,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,mCAAmC;IAClD,OAAO,EAAE,qBAAqB,CAAC;CAChC;AAED,MAAM,WAAW,mCAAmC;IAClD,OAAO,EAAE,qBAAqB,CAAC;IAC/B,GAAG,EAAE,WAAW,CAAC;IACjB,gBAAgB,EAAE,6BAA6B,CAAC;IAChD,MAAM,EAAE,sBAAsB,EAAE,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,sBAAsB,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;CAClB"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"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"}
@@ -24,7 +24,9 @@ __export(version_exports, {
24
24
  APP_UPLOAD_LAUNCH_CHECK_STATUS_VALUES: () => APP_UPLOAD_LAUNCH_CHECK_STATUS_VALUES,
25
25
  APP_UPLOAD_SESSION_STATUS_VALUES: () => APP_UPLOAD_SESSION_STATUS_VALUES,
26
26
  APP_VERSION_DESIGN_GROUP_VALUES: () => APP_VERSION_DESIGN_GROUP_VALUES,
27
+ APP_VERSION_DESIGN_PERSPECTIVE_TAG_REFS: () => APP_VERSION_DESIGN_PERSPECTIVE_TAG_REFS,
27
28
  APP_VERSION_DESIGN_SHAPE_HELP: () => APP_VERSION_DESIGN_SHAPE_HELP,
29
+ APP_VERSION_DESIGN_TAG_GROUPS: () => APP_VERSION_DESIGN_TAG_GROUPS,
28
30
  APP_VERSION_VISIBILITY_VALUES: () => APP_VERSION_VISIBILITY_VALUES,
29
31
  DEFAULT_APP_AUTH_MODE: () => DEFAULT_APP_AUTH_MODE,
30
32
  DEFAULT_APP_CONTROLLER_MODE: () => DEFAULT_APP_CONTROLLER_MODE,
@@ -108,112 +110,68 @@ function parseReviewState(value) {
108
110
  const APP_VERSION_DESIGN_GROUP_VALUES = [
109
111
  "genre",
110
112
  "coreGameplay",
111
- "render",
112
- "camera",
113
- "input",
113
+ "perspective",
114
+ "controls",
115
+ "visualStyle",
114
116
  "progression",
115
- "artStyle",
116
- "coreAssets",
117
- "assetStrategy",
118
- "engine",
119
- "features",
120
- "references",
121
- "fantasy",
122
- "mascot",
123
- "setting",
124
- "palette",
125
- "uiMaterial"
117
+ "feel"
126
118
  ];
127
119
  const APP_VERSION_DESIGN_GROUPS = new Set(APP_VERSION_DESIGN_GROUP_VALUES);
128
- const APP_VERSION_DESIGN_NOTE_MAX_LENGTH = 140;
129
- const APP_VERSION_DESIGN_SHAPE_HELP = 'Expected catalogue design shape: {"genre":{"value":"arcade"},"coreGameplay":{"value":"short loop"},"render":{"value":"2d"},"camera":{"value":"fixed-screen"},"input":{"values":["tap","pointer"]},"progression":{"value":"waves"},"artStyle":{"value":"bright cartoon"},"assetStrategy":{"value":"procedural","note":"honest procedural draft"},"engine":{"value":"plain-html"},"coreAssets":{"values":[]},"features":{"values":[]},"references":{"values":[]},"fantasy":{"value":"heroic potion shop"},"mascot":{"value":"round owl alchemist","note":"expressive silhouette"},"setting":{"value":"moonlit market"},"palette":{"values":["ink blue","amber","mint"]},"uiMaterial":{"value":"painted wood"}}. Allowed groups: genre, coreGameplay, render, camera, input, progression, artStyle, coreAssets, assetStrategy, engine, features, references, fantasy, mascot, setting, palette, uiMaterial. Use value for one-value groups and values for many-value groups; palette accepts at most 6 values.';
130
- const APP_VERSION_DESIGN_RULES = {
131
- genre: { cardinality: "one" },
132
- coreGameplay: { cardinality: "one" },
133
- render: { cardinality: "one", values: ["2d", "3d"] },
134
- camera: { cardinality: "one", values: ["top-down", "side", "isometric", "third-person", "first-person", "fixed-screen"] },
135
- input: { cardinality: "many", values: ["one-thumb", "tap", "drag", "keyboard", "pointer", "virtual-stick", "gamepad"] },
136
- progression: { cardinality: "one", values: ["endless", "levels", "waves", "rounds", "story"] },
137
- artStyle: { cardinality: "one" },
138
- coreAssets: { cardinality: "many", maxValues: 2 },
139
- assetStrategy: { cardinality: "one", values: ["pack-first", "owned-assets", "mixed", "procedural"] },
140
- engine: { cardinality: "one", values: ["phaser-2d", "three-js", "plain-html"] },
141
- features: { cardinality: "many", values: ["multiplayer", "avatars", "achievements", "leaderboard", "saves", "ai-generation", "shop", "ads"] },
142
- references: { cardinality: "many", maxValues: 2 },
143
- fantasy: { cardinality: "one" },
144
- mascot: { cardinality: "one" },
145
- setting: { cardinality: "one" },
146
- palette: { cardinality: "many", maxValues: 6 },
147
- uiMaterial: { cardinality: "one" }
120
+ const APP_VERSION_DESIGN_TAG_GROUPS = {
121
+ genre: "game-genre",
122
+ coreGameplay: "core-gameplay",
123
+ perspective: "perspective",
124
+ controls: "game-controls",
125
+ visualStyle: "visual-style",
126
+ progression: "game-progression",
127
+ feel: "game-feel"
148
128
  };
129
+ const APP_VERSION_DESIGN_PERSPECTIVE_TAG_REFS = [
130
+ "perspective/2d-fixed-screen",
131
+ "perspective/2d-side-view",
132
+ "perspective/2d-top-down",
133
+ "perspective/2d-isometric",
134
+ "perspective/3d-first-person",
135
+ "perspective/3d-third-person",
136
+ "perspective/3d-top-down",
137
+ "perspective/3d-isometric"
138
+ ];
139
+ const APP_VERSION_DESIGN_PERSPECTIVE_TAG_REF_SET = new Set(APP_VERSION_DESIGN_PERSPECTIVE_TAG_REFS);
140
+ const APP_VERSION_DESIGN_SHAPE_HELP = 'Expected optional catalogue design shape: {"genre":"game-genre/puzzle","coreGameplay":"core-gameplay/merge","perspective":"perspective/2d-fixed-screen","controls":"game-controls/drag","visualStyle":"visual-style/stylized","progression":"game-progression/levels","feel":"game-feel/snappy"}. Every field is optional and may be blank or null. Each nonempty value must be one tag ref from its matching tag group. Perspective must be one of: perspective/2d-fixed-screen, perspective/2d-side-view, perspective/2d-top-down, perspective/2d-isometric, perspective/3d-first-person, perspective/3d-third-person, perspective/3d-top-down, perspective/3d-isometric.';
149
141
  function formatAppVersionDesignError(error) {
150
142
  return `${error}. ${APP_VERSION_DESIGN_SHAPE_HELP}`;
151
143
  }
152
- function normalizeDesignString(value) {
153
- return typeof value === "string" && value.trim() ? value.trim() : null;
154
- }
155
- function normalizeAppVersionDesign(value, options = {}) {
144
+ function normalizeAppVersionDesign(value) {
156
145
  if (!value || typeof value !== "object" || Array.isArray(value)) {
157
146
  return { ok: false, error: formatAppVersionDesignError("invalid_design") };
158
147
  }
159
148
  const record = value;
160
- const allowedPackRefs = new Set((options.allowedPackRefs ?? []).map((ref) => ref.trim()).filter(Boolean));
161
149
  const design = {};
162
- for (const [rawGroup, rawEntry] of Object.entries(record)) {
163
- if (!APP_VERSION_DESIGN_GROUPS.has(rawGroup)) {
164
- return { ok: false, error: formatAppVersionDesignError(`invalid_design_group:${rawGroup}`) };
165
- }
166
- const group = rawGroup;
167
- if (!rawEntry || typeof rawEntry !== "object" || Array.isArray(rawEntry)) {
168
- return { ok: false, error: formatAppVersionDesignError(`invalid_design_entry:${group}`) };
169
- }
170
- const entry = rawEntry;
171
- for (const key of Object.keys(entry)) {
172
- if (key !== "value" && key !== "values" && key !== "note") {
173
- return { ok: false, error: formatAppVersionDesignError(`invalid_design_entry_key:${group}:${key}`) };
174
- }
175
- }
176
- const hasValue = Object.prototype.hasOwnProperty.call(entry, "value");
177
- const hasValues = Object.prototype.hasOwnProperty.call(entry, "values");
178
- if (hasValue === hasValues) {
179
- return { ok: false, error: formatAppVersionDesignError(`invalid_design_value_shape:${group}`) };
180
- }
181
- const rule = APP_VERSION_DESIGN_RULES[group];
182
- const values = hasValue ? [normalizeDesignString(entry["value"])] : Array.isArray(entry["values"]) ? entry["values"].map((item) => normalizeDesignString(item)) : null;
183
- if (!values || values.some((item) => item === null)) {
184
- return { ok: false, error: formatAppVersionDesignError(`invalid_design_value:${group}`) };
185
- }
186
- const normalizedValues = Array.from(new Set(values));
187
- if (rule.cardinality === "one" && normalizedValues.length !== 1) {
188
- return { ok: false, error: formatAppVersionDesignError(`invalid_design_value_count:${group}`) };
150
+ for (const [rawField, rawValue] of Object.entries(record)) {
151
+ if (!APP_VERSION_DESIGN_GROUPS.has(rawField)) {
152
+ return { ok: false, error: formatAppVersionDesignError(`invalid_design_field:${rawField}`) };
189
153
  }
190
- if (rule.maxValues !== void 0 && normalizedValues.length > rule.maxValues) {
191
- return { ok: false, error: formatAppVersionDesignError(`invalid_design_value_count:${group}`) };
154
+ const field = rawField;
155
+ if (rawValue === null || typeof rawValue === "string" && !rawValue.trim()) {
156
+ continue;
192
157
  }
193
- if (rule.values) {
194
- const allowedValues = new Set(rule.values);
195
- const invalidValue = normalizedValues.find((item) => !allowedValues.has(item));
196
- if (invalidValue) {
197
- return { ok: false, error: formatAppVersionDesignError(`invalid_design_value:${group}:${invalidValue}`) };
198
- }
158
+ if (typeof rawValue !== "string") {
159
+ return { ok: false, error: formatAppVersionDesignError(`invalid_design_tag_ref:${field}`) };
199
160
  }
200
- if (group === "coreAssets") {
201
- const missingPackRef = normalizedValues.find((item) => !allowedPackRefs.has(item));
202
- if (missingPackRef) {
203
- return { ok: false, error: formatAppVersionDesignError(`design_core_asset_not_in_uses_packs:${missingPackRef}`) };
204
- }
161
+ const tagRef = rawValue.trim().toLowerCase();
162
+ const separatorIndex = tagRef.indexOf("/");
163
+ if (separatorIndex <= 0 || separatorIndex !== tagRef.lastIndexOf("/") || separatorIndex === tagRef.length - 1) {
164
+ return { ok: false, error: formatAppVersionDesignError(`invalid_design_tag_ref:${field}:${rawValue.trim()}`) };
205
165
  }
206
- const note = Object.prototype.hasOwnProperty.call(entry, "note") ? normalizeDesignString(entry["note"]) : null;
207
- if (Object.prototype.hasOwnProperty.call(entry, "note") && note === null) {
208
- return { ok: false, error: formatAppVersionDesignError(`invalid_design_note:${group}`) };
166
+ const expectedGroup = APP_VERSION_DESIGN_TAG_GROUPS[field];
167
+ const actualGroup = tagRef.slice(0, separatorIndex);
168
+ if (actualGroup !== expectedGroup) {
169
+ return { ok: false, error: formatAppVersionDesignError(`invalid_design_tag_group:${field}:${expectedGroup}:${actualGroup}`) };
209
170
  }
210
- if (note && note.length > APP_VERSION_DESIGN_NOTE_MAX_LENGTH) {
211
- return { ok: false, error: formatAppVersionDesignError(`design_note_too_long:${group}`) };
171
+ if (field === "perspective" && !APP_VERSION_DESIGN_PERSPECTIVE_TAG_REF_SET.has(tagRef)) {
172
+ return { ok: false, error: formatAppVersionDesignError(`invalid_design_tag_value:${field}:${tagRef}`) };
212
173
  }
213
- design[group] = {
214
- ...rule.cardinality === "one" ? { value: normalizedValues[0] } : { values: normalizedValues },
215
- ...note ? { note } : {}
216
- };
174
+ design[field] = tagRef;
217
175
  }
218
176
  return { ok: true, value: design };
219
177
  }
@@ -288,7 +246,9 @@ const APP_UPLOAD_LAUNCH_CHECK_STATUS_VALUES = ["NOT_RUN", "PASSED", "FAILED"];
288
246
  APP_UPLOAD_LAUNCH_CHECK_STATUS_VALUES,
289
247
  APP_UPLOAD_SESSION_STATUS_VALUES,
290
248
  APP_VERSION_DESIGN_GROUP_VALUES,
249
+ APP_VERSION_DESIGN_PERSPECTIVE_TAG_REFS,
291
250
  APP_VERSION_DESIGN_SHAPE_HELP,
251
+ APP_VERSION_DESIGN_TAG_GROUPS,
292
252
  APP_VERSION_VISIBILITY_VALUES,
293
253
  DEFAULT_APP_AUTH_MODE,
294
254
  DEFAULT_APP_CONTROLLER_MODE,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@playdrop/playdrop-cli",
3
- "version": "0.12.28",
3
+ "version": "0.12.30",
4
4
  "description": "Official Playdrop CLI for publishing browser games, creator apps, and AI-generated game assets on playdrop.ai",
5
5
  "homepage": "https://www.playdrop.ai",
6
6
  "repository": {