@playdrop/playdrop-cli 0.12.26 → 0.12.27

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": 24,
3
+ "build": 28,
4
4
  "runtimeSdkVersion": "0.12.5",
5
5
  "runtimeSdkBuild": 2,
6
6
  "clients": {
@@ -226,8 +226,41 @@ function appendIncludedProjectFile(rootDir, includePath, excludedRelativeFiles,
226
226
  results.push(record);
227
227
  fileByRelativePath.set(record.relativePath, record);
228
228
  }
229
+ function appendIncludedProjectDirectory(rootDir, includeDirectory, excludedRelativeFiles, fileByRelativePath, results, enforceReservedBundleNames) {
230
+ const normalizedDirectory = (0, node_path_1.normalize)(includeDirectory).split(node_path_1.sep).join('/').replace(/\/+$/, '');
231
+ if (!normalizedDirectory || normalizedDirectory === '.' || normalizedDirectory.startsWith('..')) {
232
+ throw new Error(`[apps][build] Invalid include directory path "${includeDirectory}".`);
233
+ }
234
+ const absoluteDirectory = (0, node_path_1.resolve)(rootDir, normalizedDirectory);
235
+ if (!isPathWithinRoot(rootDir, absoluteDirectory)) {
236
+ throw new Error(`[apps][build] Included directory "${includeDirectory}" escapes the project root.`);
237
+ }
238
+ if (!(0, node_fs_1.existsSync)(absoluteDirectory) || !(0, node_fs_1.statSync)(absoluteDirectory).isDirectory()) {
239
+ return;
240
+ }
241
+ const stack = [absoluteDirectory];
242
+ while (stack.length > 0) {
243
+ const current = stack.pop();
244
+ for (const entry of readProjectDirEntries(current)) {
245
+ const absolutePath = (0, node_path_1.join)(current, entry.name);
246
+ const relativePath = normalizeRelativePath(rootDir, absolutePath);
247
+ if (isExcludedRelativePath(entry.isDirectory() ? `${relativePath}/` : relativePath, excludedRelativeFiles)) {
248
+ continue;
249
+ }
250
+ if (entry.isDirectory()) {
251
+ stack.push(absolutePath);
252
+ continue;
253
+ }
254
+ if (!entry.isFile()) {
255
+ continue;
256
+ }
257
+ appendIncludedProjectFile(rootDir, relativePath, excludedRelativeFiles, fileByRelativePath, results, enforceReservedBundleNames);
258
+ }
259
+ }
260
+ }
229
261
  function collectProjectFiles(rootDir, rules, options) {
230
262
  const includeRelativeFiles = options?.includeRelativeFiles ?? [];
263
+ const includeRelativeDirectories = options?.includeRelativeDirectories ?? [];
231
264
  const excludeRelativeFiles = new Set(Array.from(options?.excludeRelativeFiles ?? [])
232
265
  .map((filePath) => (0, node_path_1.normalize)(filePath).split(node_path_1.sep).join('/'))
233
266
  .filter((filePath) => filePath.length > 0 && filePath !== '.'));
@@ -285,6 +318,9 @@ function collectProjectFiles(rootDir, rules, options) {
285
318
  for (const includePath of includeRelativeFiles) {
286
319
  appendIncludedProjectFile(rootDir, includePath, excludeRelativeFiles, fileByRelativePath, results, enforceReservedBundleNames);
287
320
  }
321
+ for (const includeDirectory of includeRelativeDirectories) {
322
+ appendIncludedProjectDirectory(rootDir, includeDirectory, excludeRelativeFiles, fileByRelativePath, results, enforceReservedBundleNames);
323
+ }
288
324
  results.sort((a, b) => a.relativePath.localeCompare(b.relativePath));
289
325
  return results;
290
326
  }
@@ -496,6 +532,11 @@ function createZipArchive(entries) {
496
532
  function createSourceArchive(task) {
497
533
  const rules = buildIgnoreRules(task.projectDir);
498
534
  const includeFiles = ['README.md', 'AGENTS.md'];
535
+ for (const heroPath of [task.listing?.heroPortraitPath, task.listing?.heroLandscapePath]) {
536
+ if (heroPath) {
537
+ includeFiles.push(normalizeRelativePath(task.projectDir, heroPath));
538
+ }
539
+ }
499
540
  const excludedFiles = task.sourceArchiveExcludeRelativeFiles ?? [];
500
541
  if (task.catalogueAbsolutePath && (0, node_fs_1.existsSync)(task.catalogueAbsolutePath)) {
501
542
  const relativeCataloguePath = normalizeRelativePath(task.projectDir, task.catalogueAbsolutePath) || 'catalogue.json';
@@ -509,6 +550,7 @@ function createSourceArchive(task) {
509
550
  }
510
551
  const entries = collectProjectFiles(task.projectDir, rules, {
511
552
  includeRelativeFiles: includeFiles,
553
+ includeRelativeDirectories: ['assets/art-direction'],
512
554
  excludeRelativeFiles: excludedFiles,
513
555
  });
514
556
  const buffer = createZipArchive(entries);
@@ -519,6 +561,7 @@ function createSourceArchive(task) {
519
561
  }
520
562
  const entries = collectProjectFiles(task.projectDir, rules, {
521
563
  includeRelativeFiles: includeFiles,
564
+ includeRelativeDirectories: ['assets/art-direction'],
522
565
  excludeRelativeFiles: excludedFiles,
523
566
  });
524
567
  const buffer = createZipArchive(entries);
@@ -1,5 +1,5 @@
1
1
  import type { ApiClient } from '@playdrop/api-client';
2
- import type { UserResponse } from '@playdrop/types';
2
+ import type { AgentTaskPlaytestProof, UserResponse } from '@playdrop/types';
3
3
  import type { AppTask } from '../catalogue';
4
4
  import type { TaskCaptureSession } from '../appUrls';
5
5
  import { collectAppValidationWarnings, validateAppTask, runFormatScript } from './validate';
@@ -23,6 +23,7 @@ export type AppPipelineOptions = {
23
23
  loadCheckTimeoutMs?: number;
24
24
  ensureRegisteredAppShell?: boolean;
25
25
  agentTaskId?: number;
26
+ playtestProof?: AgentTaskPlaytestProof;
26
27
  mediaCaptureRequired?: boolean;
27
28
  captureSession?: TaskCaptureSession | null;
28
29
  };
@@ -64,6 +64,7 @@ async function runAppPipeline(client, task, options) {
64
64
  runStagedUploadLoadCheck: options?.runStagedUploadLoadCheck,
65
65
  loadCheckTimeoutMs: options?.loadCheckTimeoutMs,
66
66
  agentTaskId: options?.agentTaskId,
67
+ playtestProof: options?.playtestProof,
67
68
  mediaCaptureRequired: options?.mediaCaptureRequired,
68
69
  captureSession: options?.captureSession,
69
70
  };
@@ -1,5 +1,5 @@
1
1
  import type { ApiClient } from '@playdrop/api-client';
2
- import type { UserResponse } from '@playdrop/types';
2
+ import type { AgentTaskPlaytestProof, UserResponse } from '@playdrop/types';
3
3
  import type { AppTask } from '../catalogue';
4
4
  import type { TaskCaptureSession } from '../appUrls';
5
5
  import type { AppBuildArtifacts } from './build';
@@ -21,6 +21,7 @@ export type AppUploadOptions = {
21
21
  runStagedUploadLoadCheck?: boolean;
22
22
  loadCheckTimeoutMs?: number;
23
23
  agentTaskId?: number;
24
+ playtestProof?: AgentTaskPlaytestProof;
24
25
  mediaCaptureRequired?: boolean;
25
26
  captureSession?: TaskCaptureSession | null;
26
27
  };
@@ -232,6 +232,7 @@ async function uploadAppVersion(client, task, artifacts, options) {
232
232
  const initializeRequest = {
233
233
  version: task.version,
234
234
  agentTaskId: options?.agentTaskId,
235
+ playtestProof: options?.playtestProof,
235
236
  releaseNotes: task.releaseNotes,
236
237
  visibility: task.versionVisibility,
237
238
  setAsCurrent: task.versionVisibility === 'PRIVATE' ? false : undefined,
@@ -1,5 +1,6 @@
1
1
  import type { ApiClient } from '@playdrop/api-client';
2
- import type { AgentExecutionTarget, UserResponse } from '@playdrop/types';
2
+ import type { AgentExecutionTarget, AgentTaskPlaytestProof, UserResponse } from '@playdrop/types';
3
+ import { type AppTask } from '../catalogue';
3
4
  export type UploadCommandOptions = {
4
5
  env?: string;
5
6
  skipReview?: boolean;
@@ -33,4 +34,7 @@ export type WorkerAppPublishResult = {
33
34
  warnings: string[];
34
35
  };
35
36
  export type WorkerPlaydropAssetRequirement = 'PACK' | 'ASSET_OR_PACK';
37
+ export declare function assertTaskPlaytestEvidenceManifest(task: AppTask, options?: {
38
+ requireOutcomeProof?: boolean;
39
+ }): AgentTaskPlaytestProof | null;
36
40
  export declare function publishWorkerAppProject(input: WorkerAppPublishInput): Promise<WorkerAppPublishResult>;
@@ -34,7 +34,9 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.upload = upload;
37
+ exports.assertTaskPlaytestEvidenceManifest = assertTaskPlaytestEvidenceManifest;
37
38
  exports.publishWorkerAppProject = publishWorkerAppProject;
39
+ const node_crypto_1 = require("node:crypto");
38
40
  const node_fs_1 = require("node:fs");
39
41
  const node_path_1 = require("node:path");
40
42
  const semver_1 = require("semver");
@@ -2039,7 +2041,7 @@ function readPlaytestEvidenceManifest(task) {
2039
2041
  throw new Error(formatPlaytestEvidenceManifestError(`playtest-evidence.json must be valid JSON. ${reason}`));
2040
2042
  }
2041
2043
  }
2042
- const PLAYTEST_EVIDENCE_MANIFEST_HELP = 'Expected shape: {"version":1,"entries":[{"environment":"local","url":"http://localhost:8080/...","surface":"desktop","checkedAt":"2026-07-05T00:00:00.000Z","captures":["assets/marketing/playdrop/screenshots/landscape/gameplay.png"],"actions":["start game","verify input works","reach loop progression or loss"],"statesObserved":["ready","input works","loop progressed"],"consoleErrors":[]}]} Include at least one non-final entry whose checkedAt is after the last source code change. The uploader appends the final published-route entry automatically.';
2044
+ const PLAYTEST_EVIDENCE_MANIFEST_HELP = 'Expected shape: {"version":1,"entries":[{"environment":"local","url":"http://localhost:8080/...","surface":"desktop","checkedAt":"2026-07-05T00:00:00.000Z","captures":["evidence/input.png","evidence/win.png","evidence/loss.png"],"actions":["press ArrowRight","complete the final round","allow health to reach zero"],"statesObserved":["player moved right","victory overlay","defeat overlay"],"consoleErrors":[]}],"proof":{"primaryInput":{"action":"press ArrowRight","observed":"player moved right","capture":"evidence/input.png"},"win":{"action":"complete the final round","observed":"victory overlay appeared","capture":"evidence/win.png"},"loss":{"action":"allow health to reach zero","observed":"defeat overlay appeared","capture":"evidence/loss.png"}}}. NEW_GAME proof requires three distinct captures from a current non-final entry. The uploader appends hashes and the final published-route entry automatically.';
2043
2045
  function formatMissingPlaytestEvidenceManifestError(message) {
2044
2046
  return `agent_task_playtest_manifest_missing: ${message} ${PLAYTEST_EVIDENCE_MANIFEST_HELP}`;
2045
2047
  }
@@ -2071,8 +2073,51 @@ function assertPlaytestCapturePaths(task, captures) {
2071
2073
  }
2072
2074
  }
2073
2075
  }
2074
- function assertTaskPlaytestEvidenceManifest(task) {
2076
+ function assertExactObjectKeys(record, allowedKeys, field) {
2077
+ const allowed = new Set(allowedKeys);
2078
+ const unexpected = Object.keys(record).find((key) => !allowed.has(key));
2079
+ if (unexpected) {
2080
+ throw new Error(formatPlaytestEvidenceManifestError(`${field} contains unsupported key "${unexpected}".`));
2081
+ }
2082
+ }
2083
+ function buildRequiredTaskPlaytestProof(task, manifest, currentSelfPlaytestCaptures) {
2084
+ if (!manifest.proof || typeof manifest.proof !== 'object' || Array.isArray(manifest.proof)) {
2085
+ throw new Error(formatPlaytestEvidenceManifestError('playtest-evidence.json proof must demonstrate primaryInput, win, and loss for NEW_GAME tasks.'));
2086
+ }
2087
+ const rawProof = manifest.proof;
2088
+ assertExactObjectKeys(rawProof, ['primaryInput', 'win', 'loss'], 'proof');
2089
+ const proof = { version: 1 };
2090
+ for (const momentName of ['primaryInput', 'win', 'loss']) {
2091
+ const rawMoment = rawProof[momentName];
2092
+ if (!rawMoment || typeof rawMoment !== 'object' || Array.isArray(rawMoment)) {
2093
+ throw new Error(formatPlaytestEvidenceManifestError(`proof.${momentName} must include action, observed, and capture.`));
2094
+ }
2095
+ const moment = rawMoment;
2096
+ assertExactObjectKeys(moment, ['action', 'observed', 'capture'], `proof.${momentName}`);
2097
+ const action = typeof moment.action === 'string' ? moment.action.trim() : '';
2098
+ const observed = typeof moment.observed === 'string' ? moment.observed.trim() : '';
2099
+ const capture = typeof moment.capture === 'string' ? moment.capture.trim() : '';
2100
+ if (!action || !observed || !capture) {
2101
+ throw new Error(formatPlaytestEvidenceManifestError(`proof.${momentName} must include non-empty action, observed, and capture strings.`));
2102
+ }
2103
+ if (!currentSelfPlaytestCaptures.has(capture)) {
2104
+ throw new Error(formatPlaytestEvidenceManifestError(`proof.${momentName}.capture must be listed by a current non-final playtest entry.`));
2105
+ }
2106
+ const capturePath = (0, node_path_1.resolve)(task.projectDir, capture);
2107
+ const captureSha256 = (0, node_crypto_1.createHash)('sha256').update((0, node_fs_1.readFileSync)(capturePath)).digest('hex');
2108
+ proof[momentName] = { action, observed, capture, captureSha256 };
2109
+ }
2110
+ const parsed = (0, types_1.normalizeAgentTaskPlaytestProof)(proof);
2111
+ if (!parsed.ok) {
2112
+ throw new Error(formatPlaytestEvidenceManifestError(parsed.error));
2113
+ }
2114
+ return parsed.value;
2115
+ }
2116
+ function assertTaskPlaytestEvidenceManifest(task, options = {}) {
2075
2117
  const manifest = readPlaytestEvidenceManifest(task);
2118
+ if (manifest.version !== 1) {
2119
+ throw new Error(formatPlaytestEvidenceManifestError('playtest-evidence.json version must be 1.'));
2120
+ }
2076
2121
  const entries = Array.isArray(manifest.entries) ? manifest.entries : [];
2077
2122
  if (entries.length === 0) {
2078
2123
  throw new Error(formatPlaytestEvidenceManifestError('playtest-evidence.json entries must include a non-final self-playtest before upload.'));
@@ -2080,6 +2125,7 @@ function assertTaskPlaytestEvidenceManifest(task) {
2080
2125
  const sourceLastModifiedAt = readRuntimeSourceLastModifiedAt(task.projectDir);
2081
2126
  const latestSourceMs = sourceLastModifiedAt ? Date.parse(sourceLastModifiedAt) : null;
2082
2127
  let hasCurrentSelfPlaytest = false;
2128
+ const currentSelfPlaytestCaptures = new Set();
2083
2129
  entries.forEach((entry, index) => {
2084
2130
  if (!entry || typeof entry !== 'object' || Array.isArray(entry)) {
2085
2131
  throw new Error(formatPlaytestEvidenceManifestError(`entries[${index}] must be an object.`));
@@ -2104,11 +2150,15 @@ function assertTaskPlaytestEvidenceManifest(task) {
2104
2150
  assertPlaytestCapturePaths(task, captures);
2105
2151
  if (!isFinalGateEntry && (latestSourceMs === null || checkedAtMs >= latestSourceMs)) {
2106
2152
  hasCurrentSelfPlaytest = true;
2153
+ captures.forEach((capture) => currentSelfPlaytestCaptures.add(capture));
2107
2154
  }
2108
2155
  });
2109
2156
  if (!hasCurrentSelfPlaytest) {
2110
2157
  throw new Error(formatPlaytestEvidenceManifestError(`playtest-evidence.json must include a non-final self-playtest checkedAt after the last source change${sourceLastModifiedAt ? ` (${sourceLastModifiedAt})` : ''}.`));
2111
2158
  }
2159
+ return options.requireOutcomeProof
2160
+ ? buildRequiredTaskPlaytestProof(task, manifest, currentSelfPlaytestCaptures)
2161
+ : null;
2112
2162
  }
2113
2163
  function readRuntimeSourceLastModifiedAt(rootDir) {
2114
2164
  const root = (0, node_path_1.resolve)(rootDir);
@@ -2185,6 +2235,9 @@ async function publishWorkerAppProject(input) {
2185
2235
  if (input.kind === 'NEW_GAME' || input.kind === 'REMIX_GAME') {
2186
2236
  (0, listingPreflight_1.assertAgentGameHeroListingPreflight)(task);
2187
2237
  }
2238
+ if (input.kind === 'NEW_GAME') {
2239
+ (0, listingPreflight_1.assertAgentNewGameArtDirectionPreflight)(task);
2240
+ }
2188
2241
  if (!appTaskSatisfiesPlaydropAssetRequirement(task, input.playdropAssetRequirement)) {
2189
2242
  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.');
2190
2243
  }
@@ -2231,9 +2284,12 @@ async function publishWorkerAppProject(input) {
2231
2284
  taskId: input.taskId,
2232
2285
  taskToken,
2233
2286
  };
2287
+ let playtestProof = null;
2234
2288
  if (input.kind === 'NEW_GAME' || input.kind === 'REMIX_GAME') {
2235
2289
  (0, listingPreflight_1.assertAgentGameScreenshotListingPreflight)(task);
2236
- assertTaskPlaytestEvidenceManifest(task);
2290
+ playtestProof = assertTaskPlaytestEvidenceManifest(task, {
2291
+ requireOutcomeProof: input.kind === 'NEW_GAME',
2292
+ });
2237
2293
  }
2238
2294
  const { upload: uploadResult, warnings } = await (0, apps_1.runAppPipeline)(input.client, task, {
2239
2295
  creatorUsername,
@@ -2245,6 +2301,7 @@ async function publishWorkerAppProject(input) {
2245
2301
  runStagedUploadLoadCheck: true,
2246
2302
  ensureRegisteredAppShell: true,
2247
2303
  agentTaskId: input.taskId,
2304
+ playtestProof: playtestProof ?? undefined,
2248
2305
  mediaCaptureRequired: input.executionTarget === 'FIRST_PARTY',
2249
2306
  captureSession,
2250
2307
  });
@@ -9,6 +9,7 @@ export declare function readMediaCaptureProof(input: {
9
9
  preparedSessionFiles: ListingMediaFile[];
10
10
  }): RecordAppUploadMediaCaptureRequest;
11
11
  export declare function assertAgentGameHeroListingPreflight(task: AppTask): void;
12
+ export declare function assertAgentNewGameArtDirectionPreflight(task: AppTask): void;
12
13
  export declare function assertAgentGameScreenshotListingPreflight(task: AppTask): void;
13
14
  export declare function assertAgentGameListingPreflight(task: AppTask, options: {
14
15
  requireCaptureReport: boolean;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.readMediaCaptureProof = readMediaCaptureProof;
4
4
  exports.assertAgentGameHeroListingPreflight = assertAgentGameHeroListingPreflight;
5
+ exports.assertAgentNewGameArtDirectionPreflight = assertAgentNewGameArtDirectionPreflight;
5
6
  exports.assertAgentGameScreenshotListingPreflight = assertAgentGameScreenshotListingPreflight;
6
7
  exports.assertAgentGameListingPreflight = assertAgentGameListingPreflight;
7
8
  exports.assertProjectListingPreflight = assertProjectListingPreflight;
@@ -89,6 +90,16 @@ function assertHeroListingArt(task) {
89
90
  throw new Error(`agent_task_listing_hero_art_invalid: listing.heroLandscape must be a landscape PNG at least ${MIN_HERO_LANDSCAPE_WIDTH}x${MIN_HERO_LANDSCAPE_HEIGHT}.`);
90
91
  }
91
92
  }
93
+ function assertArtDirectionBoard(task) {
94
+ const boardPath = (0, node_path_1.join)(task.projectDir, 'assets', 'art-direction', 'board.png');
95
+ if (!(0, node_fs_1.existsSync)(boardPath) || !(0, node_fs_1.statSync)(boardPath).isFile()) {
96
+ throw new Error('agent_task_art_direction_board_missing: new game tasks must include assets/art-direction/board.png.');
97
+ }
98
+ const board = readPngDimensions(boardPath);
99
+ if (board.width <= board.height) {
100
+ throw new Error('agent_task_art_direction_board_invalid: assets/art-direction/board.png must be a landscape PNG.');
101
+ }
102
+ }
92
103
  function assertScreenshotPath(task, filePath, field) {
93
104
  const relativePath = (0, node_path_1.relative)((0, node_path_1.resolve)(task.projectDir), (0, node_path_1.resolve)(filePath)).replace(/\\/g, '/');
94
105
  const requiredPrefix = field === 'listing.screenshotsPortrait'
@@ -237,6 +248,9 @@ function readWorkerListingContext(projectDir) {
237
248
  function assertAgentGameHeroListingPreflight(task) {
238
249
  assertHeroListingArt(task);
239
250
  }
251
+ function assertAgentNewGameArtDirectionPreflight(task) {
252
+ assertArtDirectionBoard(task);
253
+ }
240
254
  function assertAgentGameScreenshotListingPreflight(task) {
241
255
  assertListingScreenshots(task);
242
256
  }
@@ -251,6 +265,9 @@ function assertProjectListingPreflight(task) {
251
265
  const context = readWorkerListingContext(task.projectDir);
252
266
  if (context) {
253
267
  assertAgentGameListingPreflight(task, { requireCaptureReport: context.target === 'FIRST_PARTY' });
268
+ if (context.kind === 'NEW_GAME') {
269
+ assertAgentNewGameArtDirectionPreflight(task);
270
+ }
254
271
  return;
255
272
  }
256
273
  if (task.listing?.captureReportPath) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "0.12.8",
3
- "build": 24,
3
+ "build": 28,
4
4
  "runtimeSdkVersion": "0.12.5",
5
5
  "runtimeSdkBuild": 2,
6
6
  "clients": {
@@ -0,0 +1,23 @@
1
+ export declare const AGENT_TASK_PLAYTEST_PROOF_MOMENT_VALUES: readonly ["primaryInput", "win", "loss"];
2
+ export type AgentTaskPlaytestProofMomentName = (typeof AGENT_TASK_PLAYTEST_PROOF_MOMENT_VALUES)[number];
3
+ export type AgentTaskPlaytestProofMoment = {
4
+ action: string;
5
+ observed: string;
6
+ capture: string;
7
+ captureSha256: string;
8
+ };
9
+ export type AgentTaskPlaytestProof = {
10
+ version: 1;
11
+ primaryInput: AgentTaskPlaytestProofMoment;
12
+ win: AgentTaskPlaytestProofMoment;
13
+ loss: AgentTaskPlaytestProofMoment;
14
+ };
15
+ export type NormalizeAgentTaskPlaytestProofResult = {
16
+ ok: true;
17
+ value: AgentTaskPlaytestProof;
18
+ } | {
19
+ ok: false;
20
+ error: string;
21
+ };
22
+ export declare function normalizeAgentTaskPlaytestProof(value: unknown): NormalizeAgentTaskPlaytestProofResult;
23
+ //# sourceMappingURL=agent-task-playtest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-task-playtest.d.ts","sourceRoot":"","sources":["../src/agent-task-playtest.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uCAAuC,0CAA2C,CAAC;AAEhG,MAAM,MAAM,gCAAgC,GAAG,CAAC,OAAO,uCAAuC,CAAC,CAAC,MAAM,CAAC,CAAC;AAExG,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,CAAC,CAAC;IACX,YAAY,EAAE,4BAA4B,CAAC;IAC3C,GAAG,EAAE,4BAA4B,CAAC;IAClC,IAAI,EAAE,4BAA4B,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,qCAAqC,GAC7C;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,sBAAsB,CAAA;CAAE,GAC3C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAoBjC,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,qCAAqC,CAoCrG"}
@@ -0,0 +1,84 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var agent_task_playtest_exports = {};
19
+ __export(agent_task_playtest_exports, {
20
+ AGENT_TASK_PLAYTEST_PROOF_MOMENT_VALUES: () => AGENT_TASK_PLAYTEST_PROOF_MOMENT_VALUES,
21
+ normalizeAgentTaskPlaytestProof: () => normalizeAgentTaskPlaytestProof
22
+ });
23
+ module.exports = __toCommonJS(agent_task_playtest_exports);
24
+ const AGENT_TASK_PLAYTEST_PROOF_MOMENT_VALUES = ["primaryInput", "win", "loss"];
25
+ const PROOF_KEYS = /* @__PURE__ */ new Set(["version", ...AGENT_TASK_PLAYTEST_PROOF_MOMENT_VALUES]);
26
+ const MOMENT_KEYS = /* @__PURE__ */ new Set(["action", "observed", "capture", "captureSha256"]);
27
+ const SHA256_HEX = /^[0-9a-f]{64}$/;
28
+ function normalizeRequiredString(value, maxLength) {
29
+ if (typeof value !== "string")
30
+ return null;
31
+ const normalized = value.trim();
32
+ return normalized && normalized.length <= maxLength ? normalized : null;
33
+ }
34
+ function normalizeCapturePath(value) {
35
+ const normalized = normalizeRequiredString(value, 500);
36
+ if (!normalized || normalized.startsWith("/") || normalized.includes("\\"))
37
+ return null;
38
+ const segments = normalized.split("/");
39
+ if (segments.some((segment) => !segment || segment === "." || segment === ".."))
40
+ return null;
41
+ return normalized;
42
+ }
43
+ function normalizeAgentTaskPlaytestProof(value) {
44
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
45
+ return { ok: false, error: "agent_task_playtest_proof_invalid" };
46
+ }
47
+ const record = value;
48
+ const unexpectedKey = Object.keys(record).find((key) => !PROOF_KEYS.has(key));
49
+ if (unexpectedKey) {
50
+ return { ok: false, error: `agent_task_playtest_proof_invalid_key:${unexpectedKey}` };
51
+ }
52
+ if (record["version"] !== 1) {
53
+ return { ok: false, error: "agent_task_playtest_proof_invalid_version" };
54
+ }
55
+ const proof = { version: 1 };
56
+ for (const momentName of AGENT_TASK_PLAYTEST_PROOF_MOMENT_VALUES) {
57
+ const rawMoment = record[momentName];
58
+ if (!rawMoment || typeof rawMoment !== "object" || Array.isArray(rawMoment)) {
59
+ return { ok: false, error: `agent_task_playtest_proof_missing:${momentName}` };
60
+ }
61
+ const moment = rawMoment;
62
+ const unexpectedMomentKey = Object.keys(moment).find((key) => !MOMENT_KEYS.has(key));
63
+ if (unexpectedMomentKey) {
64
+ return { ok: false, error: `agent_task_playtest_proof_invalid_key:${momentName}:${unexpectedMomentKey}` };
65
+ }
66
+ const action = normalizeRequiredString(moment["action"], 500);
67
+ const observed = normalizeRequiredString(moment["observed"], 500);
68
+ const capture = normalizeCapturePath(moment["capture"]);
69
+ const captureSha256 = typeof moment["captureSha256"] === "string" ? moment["captureSha256"].trim().toLowerCase() : "";
70
+ if (!action || !observed || !capture || !SHA256_HEX.test(captureSha256)) {
71
+ return { ok: false, error: `agent_task_playtest_proof_invalid:${momentName}` };
72
+ }
73
+ proof[momentName] = { action, observed, capture, captureSha256 };
74
+ }
75
+ if (new Set(AGENT_TASK_PLAYTEST_PROOF_MOMENT_VALUES.map((moment) => proof[moment].capture)).size !== 3) {
76
+ return { ok: false, error: "agent_task_playtest_proof_captures_not_distinct" };
77
+ }
78
+ return { ok: true, value: proof };
79
+ }
80
+ // Annotate the CommonJS export names for ESM import in node:
81
+ 0 && (module.exports = {
82
+ AGENT_TASK_PLAYTEST_PROOF_MOMENT_VALUES,
83
+ normalizeAgentTaskPlaytestProof
84
+ });
@@ -12,4 +12,5 @@ export * from './owned-assets.js';
12
12
  export * from './graph.js';
13
13
  export * from './creator-public-image.js';
14
14
  export * from './instrument-evidence.js';
15
+ export * from './agent-task-playtest.js';
15
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,UAAU,CAAC;AAGzB,mBAAmB,eAAe,CAAC;AAGnC,cAAc,UAAU,CAAC;AACzB,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,cAAc,CAAC;AAG7B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,UAAU,CAAC;AAGzB,mBAAmB,eAAe,CAAC;AAGnC,cAAc,UAAU,CAAC;AACzB,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,cAAc,CAAC;AAG7B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC"}
@@ -27,6 +27,7 @@ __reExport(dist_exports, require("./owned-assets.js"), module.exports);
27
27
  __reExport(dist_exports, require("./graph.js"), module.exports);
28
28
  __reExport(dist_exports, require("./creator-public-image.js"), module.exports);
29
29
  __reExport(dist_exports, require("./instrument-evidence.js"), module.exports);
30
+ __reExport(dist_exports, require("./agent-task-playtest.js"), module.exports);
30
31
  // Annotate the CommonJS export names for ESM import in node:
31
32
  0 && (module.exports = {
32
33
  ...require("./api.js"),
@@ -41,5 +42,6 @@ __reExport(dist_exports, require("./instrument-evidence.js"), module.exports);
41
42
  ...require("./owned-assets.js"),
42
43
  ...require("./graph.js"),
43
44
  ...require("./creator-public-image.js"),
44
- ...require("./instrument-evidence.js")
45
+ ...require("./instrument-evidence.js"),
46
+ ...require("./agent-task-playtest.js")
45
47
  });
@@ -3,6 +3,7 @@ import type { AssetCategory, AssetFormat, AssetVisibility } from './asset.js';
3
3
  import type { AppMetadataAssetSpecSupport } from './asset-spec.js';
4
4
  import type { AppResponse, AppRuntimeAssetSummary } from './api.js';
5
5
  import type { ContentLicense, ContentPermissions } from './content-license.js';
6
+ import type { AgentTaskPlaytestProof } from './agent-task-playtest.js';
6
7
  import type { AppAchievementCatalogueDefinition, AppLeaderboardCatalogueDefinition } from './player-meta.js';
7
8
  export declare const APP_HOSTING_MODE_VALUES: readonly ["HOSTED", "EXTERNAL"];
8
9
  export type AppHostingMode = (typeof APP_HOSTING_MODE_VALUES)[number];
@@ -18,7 +19,7 @@ export declare const REVIEW_STATE_VALUES: readonly ["NOT_REQUIRED", "QUEUED", "R
18
19
  export type ReviewState = (typeof REVIEW_STATE_VALUES)[number];
19
20
  export declare function isReviewState(value: unknown): value is ReviewState;
20
21
  export declare function parseReviewState(value: unknown): ReviewState | null;
21
- export declare const APP_VERSION_DESIGN_GROUP_VALUES: readonly ["genre", "coreGameplay", "render", "camera", "input", "progression", "artStyle", "coreAssets", "assetStrategy", "engine", "features", "references"];
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
23
  export type AppVersionDesignGroup = (typeof APP_VERSION_DESIGN_GROUP_VALUES)[number];
23
24
  export type AppVersionDesignEntry = {
24
25
  value?: string;
@@ -26,7 +27,7 @@ export type AppVersionDesignEntry = {
26
27
  note?: string;
27
28
  };
28
29
  export type AppVersionDesign = Partial<Record<AppVersionDesignGroup, AppVersionDesignEntry>>;
29
- 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\":[]}}. Allowed groups: genre, coreGameplay, render, camera, input, progression, artStyle, coreAssets, assetStrategy, engine, features, references. Use value for one-value groups and values for many-value groups.";
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.";
30
31
  export type NormalizeAppVersionDesignOptions = {
31
32
  allowedPackRefs?: readonly string[];
32
33
  };
@@ -264,6 +265,7 @@ export interface AppUploadOwnedAssetEntry {
264
265
  export interface InitializeAppUploadRequest {
265
266
  version: string;
266
267
  agentTaskId?: number;
268
+ playtestProof?: AgentTaskPlaytestProof;
267
269
  releaseNotes?: string;
268
270
  visibility?: AppVersionVisibility;
269
271
  license?: ContentLicense;
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"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"}
@@ -117,11 +117,16 @@ const APP_VERSION_DESIGN_GROUP_VALUES = [
117
117
  "assetStrategy",
118
118
  "engine",
119
119
  "features",
120
- "references"
120
+ "references",
121
+ "fantasy",
122
+ "mascot",
123
+ "setting",
124
+ "palette",
125
+ "uiMaterial"
121
126
  ];
122
127
  const APP_VERSION_DESIGN_GROUPS = new Set(APP_VERSION_DESIGN_GROUP_VALUES);
123
128
  const APP_VERSION_DESIGN_NOTE_MAX_LENGTH = 140;
124
- 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":[]}}. Allowed groups: genre, coreGameplay, render, camera, input, progression, artStyle, coreAssets, assetStrategy, engine, features, references. Use value for one-value groups and values for many-value groups.';
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.';
125
130
  const APP_VERSION_DESIGN_RULES = {
126
131
  genre: { cardinality: "one" },
127
132
  coreGameplay: { cardinality: "one" },
@@ -134,7 +139,12 @@ const APP_VERSION_DESIGN_RULES = {
134
139
  assetStrategy: { cardinality: "one", values: ["pack-first", "owned-assets", "mixed", "procedural"] },
135
140
  engine: { cardinality: "one", values: ["phaser-2d", "three-js", "plain-html"] },
136
141
  features: { cardinality: "many", values: ["multiplayer", "avatars", "achievements", "leaderboard", "saves", "ai-generation", "shop", "ads"] },
137
- references: { cardinality: "many", maxValues: 2 }
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" }
138
148
  };
139
149
  function formatAppVersionDesignError(error) {
140
150
  return `${error}. ${APP_VERSION_DESIGN_SHAPE_HELP}`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@playdrop/playdrop-cli",
3
- "version": "0.12.26",
3
+ "version": "0.12.27",
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": {