@playdrop/playdrop-cli 0.9.6 → 0.10.1

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 (73) hide show
  1. package/config/client-meta.json +2 -2
  2. package/dist/apiClient.d.ts +10 -0
  3. package/dist/apiClient.js +55 -2
  4. package/dist/appUrls.d.ts +1 -0
  5. package/dist/appUrls.js +9 -0
  6. package/dist/apps/build.js +39 -28
  7. package/dist/apps/index.d.ts +1 -0
  8. package/dist/apps/index.js +2 -0
  9. package/dist/apps/launchCheck.d.ts +2 -0
  10. package/dist/apps/launchCheck.js +31 -6
  11. package/dist/apps/registration.d.ts +1 -0
  12. package/dist/apps/registration.js +1 -0
  13. package/dist/apps/upload.d.ts +1 -0
  14. package/dist/apps/upload.js +4 -17
  15. package/dist/captureRuntime.d.ts +14 -0
  16. package/dist/captureRuntime.js +329 -0
  17. package/dist/catalogue.d.ts +4 -2
  18. package/dist/catalogue.js +50 -7
  19. package/dist/commandContext.js +61 -4
  20. package/dist/commands/capture.d.ts +1 -0
  21. package/dist/commands/capture.js +30 -13
  22. package/dist/commands/captureRemote.d.ts +2 -0
  23. package/dist/commands/captureRemote.js +90 -0
  24. package/dist/commands/create.d.ts +0 -1
  25. package/dist/commands/create.js +2 -151
  26. package/dist/commands/creations.d.ts +0 -13
  27. package/dist/commands/creations.js +0 -141
  28. package/dist/commands/dev.d.ts +2 -1
  29. package/dist/commands/dev.js +23 -6
  30. package/dist/commands/devServer.js +3 -1
  31. package/dist/commands/generation.d.ts +1 -0
  32. package/dist/commands/generation.js +274 -0
  33. package/dist/commands/review.d.ts +46 -0
  34. package/dist/commands/review.js +353 -0
  35. package/dist/commands/upload.d.ts +27 -1
  36. package/dist/commands/upload.js +962 -21
  37. package/dist/commands/validate.js +5 -0
  38. package/dist/commands/worker/runtime.d.ts +81 -0
  39. package/dist/commands/worker/runtime.js +458 -0
  40. package/dist/commands/worker.d.ts +158 -0
  41. package/dist/commands/worker.js +2626 -0
  42. package/dist/config.d.ts +2 -0
  43. package/dist/config.js +23 -0
  44. package/dist/index.js +116 -30
  45. package/dist/shellProbe.d.ts +1 -1
  46. package/dist/shellProbe.js +3 -3
  47. package/dist/workspaceAuth.d.ts +3 -0
  48. package/dist/workspaceAuth.js +14 -0
  49. package/node_modules/@playdrop/api-client/dist/client.d.ts +36 -15
  50. package/node_modules/@playdrop/api-client/dist/client.d.ts.map +1 -1
  51. package/node_modules/@playdrop/api-client/dist/client.js +2 -2
  52. package/node_modules/@playdrop/api-client/dist/domains/admin.d.ts +5 -2
  53. package/node_modules/@playdrop/api-client/dist/domains/admin.d.ts.map +1 -1
  54. package/node_modules/@playdrop/api-client/dist/domains/admin.js +51 -3
  55. package/node_modules/@playdrop/api-client/dist/domains/agent-tasks.d.ts +75 -0
  56. package/node_modules/@playdrop/api-client/dist/domains/agent-tasks.d.ts.map +1 -0
  57. package/node_modules/@playdrop/api-client/dist/domains/agent-tasks.js +478 -0
  58. package/node_modules/@playdrop/api-client/dist/index.d.ts +36 -15
  59. package/node_modules/@playdrop/api-client/dist/index.d.ts.map +1 -1
  60. package/node_modules/@playdrop/api-client/dist/index.js +153 -42
  61. package/node_modules/@playdrop/config/client-meta.json +2 -2
  62. package/node_modules/@playdrop/types/dist/api.d.ts +662 -75
  63. package/node_modules/@playdrop/types/dist/api.d.ts.map +1 -1
  64. package/node_modules/@playdrop/types/dist/api.js +100 -9
  65. package/node_modules/@playdrop/types/dist/app.d.ts +2 -0
  66. package/node_modules/@playdrop/types/dist/app.d.ts.map +1 -1
  67. package/node_modules/@playdrop/types/dist/app.js +3 -0
  68. package/node_modules/@playdrop/types/dist/version.d.ts +1 -0
  69. package/node_modules/@playdrop/types/dist/version.d.ts.map +1 -1
  70. package/package.json +2 -1
  71. package/node_modules/@playdrop/api-client/dist/domains/game-ideas.d.ts +0 -46
  72. package/node_modules/@playdrop/api-client/dist/domains/game-ideas.d.ts.map +0 -1
  73. package/node_modules/@playdrop/api-client/dist/domains/game-ideas.js +0 -177
package/dist/config.d.ts CHANGED
@@ -15,6 +15,7 @@ export interface CliConfig {
15
15
  token?: string;
16
16
  env?: string;
17
17
  currentUsername?: string;
18
+ workerKey?: string;
18
19
  }
19
20
  export declare function loadConfig(): CliConfig;
20
21
  export declare function saveConfig(cfg: CliConfig): void;
@@ -32,6 +33,7 @@ export declare function saveAccountSession(input: {
32
33
  token: string;
33
34
  updatedAt?: string;
34
35
  }): CliConfig;
36
+ export declare function getOrCreateWorkerKey(): string;
35
37
  export declare function migrateLegacySession(input: {
36
38
  username: string;
37
39
  env: string;
package/dist/config.js CHANGED
@@ -12,9 +12,11 @@ exports.getCurrentAccountSession = getCurrentAccountSession;
12
12
  exports.findAccountSession = findAccountSession;
13
13
  exports.listAccountSessionsForUsername = listAccountSessionsForUsername;
14
14
  exports.saveAccountSession = saveAccountSession;
15
+ exports.getOrCreateWorkerKey = getOrCreateWorkerKey;
15
16
  exports.migrateLegacySession = migrateLegacySession;
16
17
  exports.setCurrentAccount = setCurrentAccount;
17
18
  exports.removeAccountSession = removeAccountSession;
19
+ const crypto_1 = require("crypto");
18
20
  const fs_1 = require("fs");
19
21
  const path_1 = require("path");
20
22
  const os_1 = __importDefault(require("os"));
@@ -52,11 +54,13 @@ function readRawConfig() {
52
54
  return {};
53
55
  }
54
56
  }
57
+ const WORKER_KEY_PATTERN = /^wk_[0-9a-f]{16}$/;
55
58
  function stripDerivedFields(cfg) {
56
59
  const next = {
57
60
  version: typeof cfg.version === 'number' ? cfg.version : undefined,
58
61
  currentAccount: cfg.currentAccount ?? undefined,
59
62
  accounts: cfg.accounts ? clonePersistedConfig({ accounts: cfg.accounts }).accounts : undefined,
63
+ workerKey: typeof cfg.workerKey === 'string' && cfg.workerKey.trim().length > 0 ? cfg.workerKey.trim() : undefined,
60
64
  };
61
65
  if (!next.accounts || Object.keys(next.accounts).length === 0) {
62
66
  if (typeof cfg.token === 'string' && cfg.token.trim().length > 0) {
@@ -180,10 +184,27 @@ function saveAccountSession(input) {
180
184
  },
181
185
  },
182
186
  },
187
+ workerKey: cfg.workerKey,
183
188
  };
184
189
  saveConfig(next);
185
190
  return loadConfig();
186
191
  }
192
+ function assertValidWorkerKey(workerKey) {
193
+ if (!WORKER_KEY_PATTERN.test(workerKey)) {
194
+ throw new Error(`invalid_stored_worker_key:${workerKey}`);
195
+ }
196
+ return workerKey;
197
+ }
198
+ function getOrCreateWorkerKey() {
199
+ const cfg = loadConfig();
200
+ const legacyWorkerKey = typeof cfg.workerKey === 'string' ? cfg.workerKey.trim() : '';
201
+ if (legacyWorkerKey) {
202
+ return assertValidWorkerKey(legacyWorkerKey);
203
+ }
204
+ const workerKey = `wk_${(0, crypto_1.randomBytes)(8).toString('hex')}`;
205
+ saveConfig({ ...cfg, workerKey });
206
+ return workerKey;
207
+ }
187
208
  function migrateLegacySession(input) {
188
209
  return saveAccountSession(input);
189
210
  }
@@ -199,6 +220,7 @@ function setCurrentAccount(input) {
199
220
  version: CONFIG_VERSION,
200
221
  currentAccount: { username: session.username, env: session.env },
201
222
  accounts: cfg.accounts ?? {},
223
+ workerKey: cfg.workerKey,
202
224
  };
203
225
  saveConfig(next);
204
226
  return loadConfig();
@@ -233,6 +255,7 @@ function removeAccountSession(input = {}) {
233
255
  version: CONFIG_VERSION,
234
256
  currentAccount: nextCurrent,
235
257
  accounts,
258
+ workerKey: cfg.workerKey,
236
259
  };
237
260
  if (!nextCurrent && typeof cfg.token === 'string' && typeof cfg.env === 'string' && (!cfg.accounts || Object.keys(cfg.accounts).length === 0)) {
238
261
  clearConfig();
package/dist/index.js CHANGED
@@ -35,6 +35,7 @@ const devServer_1 = require("./commands/devServer");
35
35
  const captureListing_1 = require("./commands/captureListing");
36
36
  const captureRemote_1 = require("./commands/captureRemote");
37
37
  const marketing_1 = require("./commands/marketing");
38
+ const review_1 = require("./commands/review");
38
39
  const validate_1 = require("./commands/validate");
39
40
  const build_1 = require("./commands/build");
40
41
  const format_1 = require("./commands/format");
@@ -44,7 +45,15 @@ const feedback_1 = require("./commands/feedback");
44
45
  const changelog_1 = require("./commands/changelog");
45
46
  const publicPages_1 = require("./commands/publicPages");
46
47
  const upgrade_1 = require("./commands/upgrade");
48
+ const worker_1 = require("./commands/worker");
47
49
  const messages_1 = require("./messages");
50
+ // Restricted shim: inside a worker task workspace only task-scoped commands,
51
+ // local validation/run helpers, safe read-only lookups, and AI generation are
52
+ // permitted. Worker lease credentials are never exposed to the agent process.
53
+ if (process.env.PLAYDROP_WORKER_CONTEXT === '1' && !(0, worker_1.isWorkerContextCommandAllowed)(process.argv.slice(2))) {
54
+ console.error(worker_1.WORKER_CONTEXT_COMMAND_NOT_ALLOWED_MESSAGE);
55
+ process.exit(1);
56
+ }
48
57
  function printRemovedCommandHint(command) {
49
58
  const replacements = {
50
59
  list: 'playdrop browse',
@@ -158,6 +167,105 @@ function registerUseAccountCommand(parent) {
158
167
  registerLoginCommand(program);
159
168
  registerLogoutCommand(program);
160
169
  registerWhoamiCommand(program);
170
+ const worker = program.command('worker').description('Run a PlayDrop agent worker on this machine');
171
+ worker
172
+ .command('start')
173
+ .description('Start the PlayDrop worker and poll for agent tasks')
174
+ .option('--env <env>', 'Resolve this command against one logged-in environment')
175
+ .option('--once', 'Process at most one task then exit')
176
+ .option('--name <name>', 'Worker display name override')
177
+ .action(async (opts) => {
178
+ await (0, worker_1.startWorker)({
179
+ env: opts.env,
180
+ once: opts.once,
181
+ name: opts.name,
182
+ });
183
+ });
184
+ const task = program.command('task').description('Report agent task progress from a worker workspace');
185
+ task
186
+ .command('report')
187
+ .description('Post progress for the active agent task')
188
+ .option('--phase <phase>', 'Task phase')
189
+ .option('--pct <number>', 'Percent complete, 0 to 100')
190
+ .requiredOption('-m, --message <message>', 'Progress message')
191
+ .option('--env <env>', 'Environment override')
192
+ .option('--kind <kind>', 'progress')
193
+ .action(async (opts) => {
194
+ await (0, worker_1.reportTask)(opts);
195
+ });
196
+ task
197
+ .command('report-catalogue')
198
+ .description('Post a catalogue.json preview for the active agent task')
199
+ .requiredOption('--file <path>', 'Path to catalogue.json')
200
+ .requiredOption('-m, --message <message>', 'Preview message')
201
+ .option('--env <env>', 'Environment override')
202
+ .action(async (opts) => {
203
+ await (0, worker_1.reportCatalogueTask)(opts);
204
+ });
205
+ task
206
+ .command('upload')
207
+ .description('Upload the active agent task project as a private draft')
208
+ .option('--env <env>', 'Environment override')
209
+ .action(async (opts) => {
210
+ await (0, worker_1.uploadTask)(opts);
211
+ });
212
+ task
213
+ .command('done')
214
+ .description('Mark the active agent task done after upload')
215
+ .option('--env <env>', 'Environment override')
216
+ .action(async (opts) => {
217
+ await (0, worker_1.completeTask)(opts);
218
+ });
219
+ task
220
+ .command('submit-review')
221
+ .description('Submit the active game review task result')
222
+ .requiredOption('--state <state>', 'Terminal review state')
223
+ .requiredOption('--message-file <path>', 'Internal assessment file')
224
+ .option('--creator-feedback-file <path>', 'Creator feedback file')
225
+ .requiredOption('--evidence-dir <path>', 'Review evidence directory')
226
+ .option('--env <env>', 'Environment override')
227
+ .action(async (opts) => {
228
+ await (0, worker_1.submitReviewTask)(opts);
229
+ });
230
+ task
231
+ .command('fail')
232
+ .description('Fail the active agent task')
233
+ .requiredOption('-m, --message <message>', 'Failure message')
234
+ .option('--env <env>', 'Environment override')
235
+ .action(async (opts) => {
236
+ await (0, worker_1.failTask)(opts);
237
+ });
238
+ const review = program.command('review').description('Review helper commands for PlayDrop worker tasks');
239
+ review
240
+ .command('validate-result')
241
+ .description('Validate a canonical game review result')
242
+ .requiredOption('--state <state>', 'Terminal review state')
243
+ .requiredOption('--message-file <path>', 'Internal assessment file')
244
+ .option('--creator-feedback-file <path>', 'Creator feedback file')
245
+ .requiredOption('--evidence-dir <path>', 'Review evidence directory')
246
+ .action(async (opts) => {
247
+ await (0, review_1.validateReviewResultCommand)(opts);
248
+ });
249
+ review
250
+ .command('compose-evidence')
251
+ .description('Compose review screenshots into one evidence image')
252
+ .requiredOption('--core <path>', 'Core gameplay screenshot')
253
+ .requiredOption('--win <path>', 'Win or progression screenshot')
254
+ .requiredOption('--loss <path>', 'Loss or failure screenshot')
255
+ .requiredOption('--out <path>', 'Output PNG path')
256
+ .action(async (opts) => {
257
+ await (0, review_1.composeReviewEvidence)(opts);
258
+ });
259
+ review
260
+ .command('rating-card')
261
+ .description('Render a review rating card PNG')
262
+ .requiredOption('--review-message-file <path>', 'Internal assessment file')
263
+ .requiredOption('--out <path>', 'Output PNG path')
264
+ .option('--punchline <text>', 'Override punchline text')
265
+ .option('--title <text>', 'Card title')
266
+ .action(async (opts) => {
267
+ await (0, review_1.createReviewRatingCard)(opts);
268
+ });
161
269
  const auth = program.command('auth').description('Authentication commands');
162
270
  registerLoginCommand(auth);
163
271
  registerLogoutCommand(auth);
@@ -505,32 +613,6 @@ creations
505
613
  .action(async (opts) => {
506
614
  await (0, creations_1.browseCreations)(opts);
507
615
  });
508
- const creationIdeas = creations.command('ideas').description('Manage game ideas');
509
- creationIdeas
510
- .command('browse')
511
- .description('Browse your game ideas')
512
- .option('--state <state>', 'idea, started, shipped, or all')
513
- .option('--limit <number>', 'Maximum number of results to return')
514
- .option('--offset <number>', 'Result offset')
515
- .option('--json', 'Output JSON')
516
- .action(async (opts) => {
517
- await (0, creations_1.browseCreationIdeas)(opts);
518
- });
519
- creationIdeas
520
- .command('start <idOrSlug>')
521
- .description('Mark a game idea as started')
522
- .option('--json', 'Output JSON')
523
- .action(async (idOrSlug, opts) => {
524
- await (0, creations_1.startCreationIdea)(idOrSlug, opts);
525
- });
526
- creationIdeas
527
- .command('ship <idOrSlug>')
528
- .description('Mark a game idea as shipped')
529
- .requiredOption('--app <creator/name>', 'Created app ref')
530
- .option('--json', 'Output JSON')
531
- .action(async (idOrSlug, opts) => {
532
- await (0, creations_1.shipCreationIdea)(idOrSlug, opts);
533
- });
534
616
  const creationApps = creations.command('apps').description('Manage app creations');
535
617
  creationApps
536
618
  .command('update <name>')
@@ -721,6 +803,7 @@ ai
721
803
  .option('--texture', 'Enable texturing')
722
804
  .option('--timeout <seconds>', 'Wait timeout in seconds')
723
805
  .option('--poll <milliseconds>', 'Polling interval in milliseconds')
806
+ .option('--output <path>', 'Write generated image bytes to a local file (image only)')
724
807
  .option('--json', 'Output JSON')
725
808
  .action(async (type, prompt, opts) => {
726
809
  await (0, generation_1.generate)(type, prompt, {
@@ -748,6 +831,7 @@ ai
748
831
  texture: opts.texture,
749
832
  timeoutSeconds: opts.timeout,
750
833
  pollIntervalMs: opts.poll,
834
+ output: opts.output,
751
835
  json: opts.json,
752
836
  });
753
837
  });
@@ -800,7 +884,6 @@ projectCreate
800
884
  .description('Create a new app from a template or exact remix version')
801
885
  .option('--template <ref>', 'Template ref')
802
886
  .option('--remix <ref>', 'Canonical app version ref')
803
- .option('--game-idea <idOrSlug>', 'Game idea id or slug to infer the source and mark started')
804
887
  .action(async (name, opts) => {
805
888
  await (0, create_1.create)(name, opts);
806
889
  });
@@ -828,10 +911,11 @@ project
828
911
  .command('dev [target]')
829
912
  .description('Run an app locally')
830
913
  .option('--app <name>', 'App name when the target is a workspace')
914
+ .option('--port <number>', 'Local dev router port')
831
915
  .option('--dev-auth <mode>', 'prompt, anonymous, viewer, or player')
832
916
  .option('--player <slot>', '1, 2, 3, or 4 when --dev-auth player is selected')
833
917
  .action(async (target, opts = {}) => {
834
- await (0, dev_1.dev)(target, undefined, opts.app, {
918
+ await (0, dev_1.dev)(target, opts.port, opts.app, {
835
919
  devAuth: opts.devAuth,
836
920
  player: opts.player,
837
921
  });
@@ -853,6 +937,7 @@ const projectCapture = project.command('capture').description('Run a Playwright
853
937
  projectCapture
854
938
  .argument('[target]')
855
939
  .option('--app <name>', 'App name when the target is a workspace')
940
+ .option('--port <number>', 'Local dev router port')
856
941
  .option('--timeout <seconds>', 'Capture timeout in seconds')
857
942
  .option('--log-level <level>', 'debug, info, warn, or error')
858
943
  .option('--screenshot <path>', 'Screenshot output path')
@@ -867,6 +952,7 @@ projectCapture
867
952
  await (0, capture_1.capture)(target, {
868
953
  timeoutSeconds,
869
954
  appName: opts.app,
955
+ port: opts.port,
870
956
  logLevel: opts.logLevel,
871
957
  screenshotPath: opts.screenshot,
872
958
  surfaceTarget: opts.surface,
@@ -909,6 +995,8 @@ projectCapture
909
995
  .option('--screenshot <path>', 'Screenshot output path')
910
996
  .option('--log <path>', 'Log output path')
911
997
  .option('--expected-url <url>', 'Expected final URL after redirects')
998
+ .option('--actions <path>', 'JSON action file with click, press, and wait steps before screenshot')
999
+ .option('--viewport <size>', 'Viewport size as WIDTHxHEIGHT')
912
1000
  .option('--username <username>', 'Login username')
913
1001
  .option('--password <password>', 'Login password')
914
1002
  .option('--login-url <url>', 'Explicit login URL')
@@ -992,7 +1080,6 @@ project
992
1080
  .option('--env <env>', 'Resolve this command against one logged-in environment')
993
1081
  .option('--skip-ecs', 'Skip ecs.json and server.js during publish')
994
1082
  .option('--clear-tags', 'Confirm clearing existing live tags when this publish removes them')
995
- .option('--game-idea <idOrSlug>', 'Game idea id or slug to mark shipped')
996
1083
  .addOption(new commander_1.Option('--skip-review', 'Mark uploaded app versions as NOT_REQUIRED review. Admin-only.').hideHelp())
997
1084
  .action(async (target, opts) => {
998
1085
  await (0, upload_1.upload)(target ?? '.', {
@@ -1000,7 +1087,6 @@ project
1000
1087
  skipEcs: opts.skipEcs,
1001
1088
  skipReview: opts.skipReview,
1002
1089
  clearTags: opts.clearTags,
1003
- gameIdea: opts.gameIdea,
1004
1090
  });
1005
1091
  });
1006
1092
  const documentation = program.command('documentation').description('Public Playdrop documentation');
@@ -3,4 +3,4 @@ export interface ShellProbeResult {
3
3
  output: string;
4
4
  }
5
5
  export declare function buildCommandPathProbe(command: string, platform?: NodeJS.Platform): string;
6
- export declare function runShell(command: string, platform?: NodeJS.Platform): ShellProbeResult;
6
+ export declare function runShell(command: string, platform?: NodeJS.Platform, timeoutMs?: number): ShellProbeResult;
@@ -6,10 +6,10 @@ const node_child_process_1 = require("node:child_process");
6
6
  function buildCommandPathProbe(command, platform = process.platform) {
7
7
  return platform === 'win32' ? `where ${command}` : `command -v ${command}`;
8
8
  }
9
- function runShell(command, platform = process.platform) {
9
+ function runShell(command, platform = process.platform, timeoutMs = 30000) {
10
10
  const result = platform === 'win32'
11
- ? (0, node_child_process_1.spawnSync)('cmd.exe', ['/d', '/s', '/c', command], { encoding: 'utf8', timeout: 10000 })
12
- : (0, node_child_process_1.spawnSync)('/bin/zsh', ['-lc', command], { encoding: 'utf8', timeout: 10000 });
11
+ ? (0, node_child_process_1.spawnSync)('cmd.exe', ['/d', '/s', '/c', command], { encoding: 'utf8', timeout: timeoutMs })
12
+ : (0, node_child_process_1.spawnSync)('/bin/zsh', ['-lc', command], { encoding: 'utf8', timeout: timeoutMs });
13
13
  return {
14
14
  exitCode: result.status ?? 1,
15
15
  output: `${result.stdout ?? ''}${result.stderr ?? ''}`.trim(),
@@ -1,6 +1,9 @@
1
1
  export interface WorkspaceAuthConfig {
2
2
  ownerUsername: string;
3
3
  env?: string;
4
+ taskToken?: string;
5
+ taskId?: number;
6
+ taskAttempt?: number;
4
7
  }
5
8
  export interface ResolvedWorkspaceAuthConfig {
6
9
  path: string;
@@ -27,6 +27,17 @@ function normalizeEnv(value) {
27
27
  const normalized = value.trim();
28
28
  return normalized.length > 0 ? normalized : undefined;
29
29
  }
30
+ function normalizeTaskToken(value) {
31
+ if (typeof value !== 'string') {
32
+ return undefined;
33
+ }
34
+ const normalized = value.trim();
35
+ return normalized.length > 0 ? normalized : undefined;
36
+ }
37
+ function normalizePositiveInteger(value) {
38
+ const parsed = typeof value === 'number' ? value : Number.parseInt(String(value ?? ''), 10);
39
+ return Number.isInteger(parsed) && parsed > 0 ? parsed : undefined;
40
+ }
30
41
  function readWorkspaceAuthConfig(filePath) {
31
42
  let parsed;
32
43
  try {
@@ -46,6 +57,9 @@ function readWorkspaceAuthConfig(filePath) {
46
57
  return {
47
58
  ownerUsername,
48
59
  env: normalizeEnv(parsed.env),
60
+ taskToken: normalizeTaskToken(parsed.taskToken),
61
+ taskId: normalizePositiveInteger(parsed.taskId),
62
+ taskAttempt: normalizePositiveInteger(parsed.taskAttempt),
49
63
  };
50
64
  }
51
65
  function findWorkspaceAuthConfig(startPath) {
@@ -1,5 +1,5 @@
1
- import type { AppleOAuthHandoffExchangeRequest, AppleOAuthHandoffExchangeResponse, AppleOAuthLinkStartRequest, AppleOAuthLinkStartResponse, ApplePushDeviceRequest, ApplePushDeviceStatusResponse, FirebasePushDeviceRequest, FirebasePushDeviceStatusResponse, ApiKeyLoginRequest, CliApiKeyStatusResponse, CliLoginApproveRequest, CliLoginApproveResponse, CliLoginPollRequest, CliLoginPollResponse, CliLoginStartResponse, CliLoginStatusResponse, CliWebLaunchStartRequest, CliWebLaunchStartResponse, CompleteXSignupRequest, CompleteXSignupResponse, DeleteMyAccountRequest, DeleteMyAccountResponse, LoginRequest, LoginResponse, LogoutResponse, PrivacyExportResponse, RegisterRequest, RegisterResponse, StarterProfileAssetsResponse, CreateAppRequest, CreateAppResponse, UpdateAppRequest, AdminUpdateAppRequest, UpdateAppResponse, AppsListResponse, AppBrowseRequest, AppDetailRequest, AppDetailResponse, AppMoreCollectionKey, AppMoreCollectionPage, AppMoreCollectionRequest, AppMoreCollectionsRequest, AppMoreCollectionsResponse, CreatorAppsBrowseRequest, AppRuntimeAssetsResponse, ContentLicense, InitializeAppUploadRequest, InitializeAppUploadResponse, UploadAppSessionFileResponse, UploadAppSessionOwnedAssetResponse, FinalizeAppUploadResponse, AppUploadLaunchCheckPreviewResponse, AbortAppUploadResponse, RecordAppUploadLaunchCheckRequest, RecordAppUploadLaunchCheckResponse, MyAppsResponse, BootstrapResponse, SetProfileAssetRequest, SetProfileAssetResponse, MeResponse, UserDetailResponse, UsersListResponse, CreateUserRequest, CreateUserResponse, UpdateAdminUserRequest, RemixScaffoldResponse, TemplateScaffoldResponse, HomeResponse, HomeCollectionPageResponse, FetchHomeOptions, DeleteAppResponse, AppType, AppAccessTokenResponse, DevAppAccessTokenResponse, DevPlayerResetResponse, AppLogEntryRequest, AppLogEntryResponse, ClaimFreeCreditRewardResponse, SubmitFeedbackRequest, SubmitFeedbackResponse, FeedbackListResponse, AdminFeedbackListResponse, AdminFeedbackResponse, UpdateAdminFeedbackRequest, UpdateAdminFeedbackResponse, DeleteFeedbackResponse, FeedbackCategory, FeedbackClient, FeedbackStatus, ShopResponse, AppleCreditPackFulfillmentRequest, AdInterstitialShowResponse, AdLoadResponse, AdShowRequest, AdRewardedShowResponse, AssetPurchaseRequest, BoostActivationRequest, BoostBalanceResponse, BoostHistoryResponse, BoostPurchaseRequest, BoostPurchaseResponse, BoostReportQuery, BoostReportResponse, BoostStatusResponse, AdLoadRequest, CreditPackCheckoutSessionRequest, PurchaseResponse, CreditPackCheckoutSessionResponse, CreditPackCheckoutStatusResponse, CreatorEarningsResponse, GoogleCreditPackFulfillmentRequest, MobileCreditPackFulfillmentResponse, TransactionsResponse, CreditPacksResponse, CreditPackResponse, PaymentProvider, PaymentStatus, AdminPaymentsListResponse, AdminPaymentDetailResponse, AdminRefundPaymentRequest, IapPurchaseRequest, IapPurchaseResponse, IapReceiptsResponse, IapReceiptListParams, IapReceiptResponse, AdminCreditTransactionsResponse, AiGenerationsResponse, AiGenerationDetailResponse, OwnedProfileAssetsResponse, SavedItemKind, CreateContentReportRequest, CreateCreatorReportRequest, CreateCommentReportRequest, CreatorBlockMutationResponse, LikedItemMutationResponse, DislikedItemMutationResponse, ModerationReportResponse, SavedItemMutationResponse, LibraryCategory, LibrarySort, LibraryResponse, TrackEngagementEventRequest, TrackEngagementEventResponse, CreatorFollowMutationResponse, ContentCommentsResponse, CreateContentCommentRequest, CreateContentCommentResponse, FollowingSort, FollowingCreatorsResponse, FollowingFeedSection, FollowingFeedResponse, DeleteContentCommentResponse, NotificationStatus, NotificationsResponse, NotificationReadResponse, EmailPreferencesResponse, UpdateUserCommunicationPreferencesRequest, PublicEmailPreferencesResponse, PublicEmailPreferencesUpdateRequest, EmailUnsubscribeResponse, AdminCreatorEngagementRulesResponse, AdminCreatorEngagementExecutionsResponse, AdminCreatorEngagementUserResponse, AdminCreatorEngagementRulePreviewRequest, AdminCreatorEngagementRulePreviewResponse, CreatorEngagementRuleExecutionStatus, PushSubscriptionMutationResponse, AdminUserResponse, DeleteAdminUserResponse, BatchCreateUsersResponse, UpsertWebPushSubscriptionRequest, UpdateProfileRequest, UpdateProfileResponse, WebPushConfigResponse, WebPushSubscriptionStatusResponse, ChangePasswordRequest, ChangePasswordResponse, UpgradeToCreatorResponse, AppleLinkRequest, AppleLinkResponse, AppleNativeChallengeResponse, ApplePendingSignupResponse, AppleSignInRequest, AppleSignInResponse, UnlinkXResponse, UnlinkGoogleResponse, GooglePendingSignupResponse, XPendingSignupResponse, GoogleOneTapExchangeRequest, GoogleOneTapExchangeResponse, UsernameAvailableResponse, CompleteAppleSignupRequest, CompleteAppleSignupResponse, CompleteGoogleSignupRequest, CompleteGoogleSignupResponse, GoogleAppleLinkRequest, GoogleAppleLinkResponse, GoogleAppleSignInRequest, GoogleAppleSignInResponse, AdminAppPlayerMetaResponse, AdminAppPlayerMetaUserResponse, AdminAppVersionReviewsListResponse, AdminClaimNextAppVersionReviewResponse, AdminMutateAchievementStateRequest, AdminMutateAchievementStateResponse, AdminMutateLeaderboardScoreRequest, AdminMutateLeaderboardScoreResponse, AdminRetirePlayerMetaDefinitionResponse, AdminUpdateAppVersionReviewRequest, AdminUpdateAppVersionReviewResponse, CreateCliApiKeyResponse, GetAchievementResponse, GetLeaderboardResponse, ListAchievementsResponse, ListLeaderboardsResponse, MyAchievementsResponse, MyLeaderboardsResponse, SetAchievementProgressRequest, SetAchievementProgressResponse, SubmitLeaderboardScoreRequest, SubmitLeaderboardScoreResponse, UnlockAchievementResponse, ReviewState, AppVersionVisibility, AppVersionsListResponse, AppVersionDetailResponse, AppSourceBundleResponse, UpdateVersionResponse, DeleteVersionResponse, AdminAppsListResponse, AdminGameCollectionCandidatesResponse, AdminGameCollectionResponse, AdminGameCollectionsResponse, AdminUpdateAppResponse, CreateAdminGameCollectionRequest, DeleteAdminGameCollectionResponse, UpdateAdminGameCollectionGamesRequest, UpdateAdminGameCollectionRequest, AssetBrowseKind, AssetCategory, AssetFormat, AssetVisibility, AssetSourceKind, AssetListSort, AssetListResponse, AssetCategoriesResponse, AssetDetailResponse, AssetVersionsListResponse, CreateAssetVersionResponse, DeleteOwnedCustomAssetResponse, CreateAssetSpecVersionResponse, ListOwnedCustomAssetsResponse, LoadOwnedCustomAssetResponse, MutateOwnedCustomAssetRequest, MutateOwnedCustomAssetResponse, UpdateAssetRequest, UpdateAssetResponse, UpdateAssetVersionRequest, UpdateAssetVersionResponse, UpdateAssetSpecVersionResponse, DeleteAssetVersionResponse, DeleteAssetResponse, DeleteAssetSpecVersionResponse, DeleteAssetSpecResponse, AssetSourceBundleResponse, AssetPackListSort, AssetSpecAssetsListResponse, AssetSpecAppsListResponse, AssetSpecDetailResponse, AssetSpecListSort, AssetSpecListResponse, AssetSpecVersionResponseEnvelope, AssetSpecVersionsListResponse, AssetPackSourceBundleResponse, AssetPackListResponse, AssetPackDetailResponse, AssetPackVersionsListResponse, InitializeAssetPackUploadRequest, InitializeAssetPackUploadResponse, UploadAssetPackSessionAssetResponse, UploadAssetPackSessionMediaResponse, FinalizeAssetPackUploadResponse, AbortAssetPackUploadResponse, UpdateAssetPackRequest, UpdateAssetPackResponse, UpdateAssetPackVersionRequest, UpdateAssetPackVersionResponse, DeleteAssetPackVersionResponse, DeleteAssetPackResponse, BatchUpsertNodeRelationsRequest, BatchUpsertNodeRelationsResponse, ContentRemixRelationsResponse, SearchRequest, SearchResponse, SearchSuggestRequest, SearchSuggestResponse, AdminTagGroupResponse, AdminTagGroupsResponse, AdminTagResponse, CreateTagGroupRequest, CreateTagRequest, TagDirectoryResponse, TagDetailResponse, TagGroupDetailResponse, TagGroupSort, TagListResponse, UpdateTagGroupRequest, UpdateTagRequest, FreeCreditsResponse, InvitePreviewResponse, MyInviteCodeResponse, CreateGameIdeaResponse, GameIdeaDetailResponse, GameIdeaStatusResponse, GameIdeasListRequest, GameIdeasListResponse, RemixCandidatesResponse, ShipGameIdeaRequest, ShipGameIdeaResponse, StartGameIdeaRequest, StartGameIdeaResponse, UpdateGameIdeaRequest, UpdateGameIdeaResponse } from '@playdrop/types';
2
- import { type CreateGameIdeaOptions } from './domains/game-ideas.js';
1
+ import type { AppleOAuthHandoffExchangeRequest, AppleOAuthHandoffExchangeResponse, AppleOAuthLinkStartRequest, AppleOAuthLinkStartResponse, ApplePushDeviceRequest, ApplePushDeviceStatusResponse, FirebasePushDeviceRequest, FirebasePushDeviceStatusResponse, ApiKeyLoginRequest, CliApiKeyStatusResponse, CliLoginApproveRequest, CliLoginApproveResponse, CliLoginPollRequest, CliLoginPollResponse, CliLoginStartResponse, CliLoginStatusResponse, CliWebLaunchStartRequest, CliWebLaunchStartResponse, CompleteXSignupRequest, CompleteXSignupResponse, DeleteMyAccountRequest, DeleteMyAccountResponse, LoginRequest, LoginResponse, LogoutResponse, PrivacyExportResponse, RegisterRequest, RegisterResponse, StarterProfileAssetsResponse, CreateAppRequest, CreateAppResponse, UpdateAppRequest, AdminUpdateAppRequest, UpdateAppResponse, AppsListResponse, AppBrowseRequest, AppDetailRequest, AppDetailResponse, AppMoreCollectionKey, AppMoreCollectionPage, AppMoreCollectionRequest, AppMoreCollectionsRequest, AppMoreCollectionsResponse, CreatorAppsBrowseRequest, AppRuntimeAssetsResponse, ContentLicense, InitializeAppUploadRequest, InitializeAppUploadResponse, UploadAppSessionFileResponse, UploadAppSessionOwnedAssetResponse, FinalizeAppUploadResponse, AppUploadLaunchCheckPreviewResponse, AbortAppUploadResponse, RecordAppUploadLaunchCheckRequest, RecordAppUploadLaunchCheckResponse, MyAppsResponse, BootstrapResponse, SetProfileAssetRequest, SetProfileAssetResponse, MeResponse, UserDetailResponse, UsersListResponse, CreateUserRequest, CreateUserResponse, UpdateAdminUserRequest, RemixScaffoldResponse, TemplateScaffoldResponse, HomeResponse, HomeCollectionPageResponse, FetchHomeOptions, DeleteAppResponse, AppType, AppAccessTokenResponse, DevAppAccessTokenResponse, DevPlayerResetResponse, AppLogEntryRequest, AppLogEntryResponse, ClaimFreeCreditRewardResponse, SubmitFeedbackRequest, SubmitFeedbackResponse, FeedbackListResponse, AdminFeedbackListResponse, AdminFeedbackResponse, UpdateAdminFeedbackRequest, UpdateAdminFeedbackResponse, DeleteFeedbackResponse, FeedbackCategory, FeedbackClient, FeedbackStatus, ShopResponse, AppleCreditPackFulfillmentRequest, AdInterstitialShowResponse, AdLoadResponse, AdShowRequest, AdRewardedShowResponse, AssetPurchaseRequest, BoostActivationRequest, BoostBalanceResponse, BoostHistoryResponse, BoostPurchaseRequest, BoostPurchaseResponse, BoostReportQuery, BoostReportResponse, BoostStatusResponse, AdLoadRequest, CreditPackCheckoutSessionRequest, PurchaseResponse, CreditPackCheckoutSessionResponse, CreditPackCheckoutStatusResponse, CreatorEarningsResponse, GoogleCreditPackFulfillmentRequest, MobileCreditPackFulfillmentResponse, TransactionsResponse, CreditPacksResponse, CreditPackResponse, PaymentProvider, PaymentStatus, AdminPaymentsListResponse, AdminPaymentDetailResponse, AdminPlatformAnalyticsRequest, AdminPlatformAnalyticsResponse, AdminRefundPaymentRequest, IapPurchaseRequest, IapPurchaseResponse, IapReceiptsResponse, IapReceiptListParams, IapReceiptResponse, AdminCreditTransactionsResponse, AiGenerationsResponse, AiGenerationDetailResponse, OwnedProfileAssetsResponse, SavedItemKind, CreateContentReportRequest, CreateCreatorReportRequest, CreateCommentReportRequest, CreatorBlockMutationResponse, LikedItemMutationResponse, DislikedItemMutationResponse, ModerationReportResponse, SavedItemMutationResponse, LibraryCategory, LibrarySort, LibraryResponse, TrackEngagementEventRequest, TrackEngagementEventResponse, CreatorFollowMutationResponse, ContentCommentsResponse, CreateContentCommentRequest, CreateContentCommentResponse, FollowingSort, FollowingCreatorsResponse, FollowingFeedSection, FollowingFeedResponse, DeleteContentCommentResponse, NotificationStatus, NotificationsResponse, NotificationReadResponse, EmailPreferencesResponse, UpdateUserCommunicationPreferencesRequest, PublicEmailPreferencesResponse, PublicEmailPreferencesUpdateRequest, EmailUnsubscribeResponse, AdminCreatorEngagementRulesResponse, AdminCreatorEngagementExecutionsResponse, AdminCreatorEngagementUserResponse, AdminCreatorEngagementRulePreviewRequest, AdminCreatorEngagementRulePreviewResponse, CreatorEngagementRuleExecutionStatus, PushSubscriptionMutationResponse, AdminUserResponse, DeleteAdminUserResponse, BatchCreateUsersResponse, UpsertWebPushSubscriptionRequest, UpdateProfileRequest, UpdateProfileResponse, WebPushConfigResponse, WebPushSubscriptionStatusResponse, ChangePasswordRequest, ChangePasswordResponse, UpgradeToCreatorResponse, AppleLinkRequest, AppleLinkResponse, AppleNativeChallengeResponse, ApplePendingSignupResponse, AppleSignInRequest, AppleSignInResponse, UnlinkXResponse, UnlinkGoogleResponse, GooglePendingSignupResponse, XPendingSignupResponse, GoogleOneTapExchangeRequest, GoogleOneTapExchangeResponse, UsernameAvailableResponse, CompleteAppleSignupRequest, CompleteAppleSignupResponse, CompleteGoogleSignupRequest, CompleteGoogleSignupResponse, GoogleAppleLinkRequest, GoogleAppleLinkResponse, GoogleAppleSignInRequest, GoogleAppleSignInResponse, AdminAppPlayerMetaResponse, AdminAppPlayerMetaUserResponse, AdminAppVersionReviewsListResponse, AdminEnqueueNextAppVersionReviewTaskResponse, AdminMutateAchievementStateRequest, AdminMutateAchievementStateResponse, AdminMutateLeaderboardScoreRequest, AdminMutateLeaderboardScoreResponse, AdminRetirePlayerMetaDefinitionResponse, AdminUpdateAppVersionReviewRequest, AdminUpdateAppVersionReviewResponse, CreateCliApiKeyResponse, GetAchievementResponse, GetLeaderboardResponse, ListAchievementsResponse, ListLeaderboardsResponse, MyAchievementsResponse, MyLeaderboardsResponse, SetAchievementProgressRequest, SetAchievementProgressResponse, SubmitLeaderboardScoreRequest, SubmitLeaderboardScoreResponse, UnlockAchievementResponse, ReviewState, AppVersionVisibility, AppVersionsListResponse, AppVersionDetailResponse, AppSourceBundleResponse, UpdateVersionResponse, DeleteVersionResponse, AdminAppsListResponse, AdminGameCollectionCandidatesResponse, AdminGameCollectionResponse, AdminGameCollectionsResponse, AdminUpdateAppResponse, CreateAdminGameCollectionRequest, DeleteAdminGameCollectionResponse, UpdateAdminGameCollectionGamesRequest, UpdateAdminGameCollectionRequest, AssetBrowseKind, AssetCategory, AssetFormat, AssetVisibility, AssetSourceKind, AssetListSort, AssetListResponse, AssetCategoriesResponse, AssetDetailResponse, AssetVersionsListResponse, CreateAssetVersionResponse, DeleteOwnedCustomAssetResponse, CreateAssetSpecVersionResponse, ListOwnedCustomAssetsResponse, LoadOwnedCustomAssetResponse, MutateOwnedCustomAssetRequest, MutateOwnedCustomAssetResponse, UpdateAssetRequest, UpdateAssetResponse, UpdateAssetVersionRequest, UpdateAssetVersionResponse, UpdateAssetSpecVersionResponse, DeleteAssetVersionResponse, DeleteAssetResponse, DeleteAssetSpecVersionResponse, DeleteAssetSpecResponse, AssetSourceBundleResponse, AssetPackListSort, AssetSpecAssetsListResponse, AssetSpecAppsListResponse, AssetSpecDetailResponse, AssetSpecListSort, AssetSpecListResponse, AssetSpecVersionResponseEnvelope, AssetSpecVersionsListResponse, AssetPackSourceBundleResponse, AssetPackListResponse, AssetPackDetailResponse, AssetPackVersionsListResponse, InitializeAssetPackUploadRequest, InitializeAssetPackUploadResponse, UploadAssetPackSessionAssetResponse, UploadAssetPackSessionMediaResponse, FinalizeAssetPackUploadResponse, AbortAssetPackUploadResponse, UpdateAssetPackRequest, UpdateAssetPackResponse, UpdateAssetPackVersionRequest, UpdateAssetPackVersionResponse, DeleteAssetPackVersionResponse, DeleteAssetPackResponse, BatchUpsertNodeRelationsRequest, BatchUpsertNodeRelationsResponse, ContentRemixRelationsResponse, SearchRequest, SearchResponse, SearchSuggestRequest, SearchSuggestResponse, AdminTagGroupResponse, AdminTagGroupsResponse, AdminTagResponse, CreateTagGroupRequest, CreateTagRequest, TagDirectoryResponse, TagDetailResponse, TagGroupDetailResponse, TagGroupSort, TagListResponse, UpdateTagGroupRequest, UpdateTagRequest, AdminAgentTaskDetailResponse, AdminAgentTaskTranscriptResponse, AdminAgentTasksResponse, AdminAgentWorkersStatusResponse, AgentTaskAvailabilityResponse, AgentTaskAttachmentUploadResponse, AgentTaskDetailResponse, AgentTaskEventsResponse, AgentTaskKind, AgentTaskNewGameSuggestionsResponse, AgentTasksResponse, AppAgentTaskResponse, CancelAgentTaskResponse, ClearAgentTaskResponse, CreateAppAgentTaskRequest, CreateAppAgentTaskResponse, CreateNewGameAgentTaskRequest, CreateNewGameAgentTaskResponse, CreatorGamesListResponse, CreatorGameStatusResponse, CreatorGameVersionsResponse, MeAgentWorkersResponse, RetryAgentTaskResponse, WorkerClaimAgentTaskRequest, WorkerClaimAgentTaskResponse, WorkerCompleteAgentTaskRequest, WorkerCreateAgentTaskEventRequest, WorkerCreateAgentTaskEventResponse, WorkerCreateAgentTaskTranscriptChunkRequest, WorkerCreateAgentTaskTranscriptChunkResponse, WorkerFailAgentTaskRequest, WorkerHeartbeatAgentTaskRequest, WorkerHeartbeatAgentTaskResponse, WorkerRecordAgentTaskRunTelemetryRequest, WorkerRecordAgentTaskRunTelemetryResponse, WorkerPresenceRequest, WorkerPresenceResponse, WorkerSubmitAgentTaskReviewRequest, WorkerSubmitAgentTaskReviewResponse, FreeCreditsResponse, InvitePreviewResponse, MyInviteCodeResponse } from '@playdrop/types';
2
+ import { type AdminAgentTaskTranscriptOptions, type ListCreatorGamesOptions, type ListAgentTasksOptions } from './domains/agent-tasks.js';
3
3
  export interface HttpMethod {
4
4
  GET: 'GET';
5
5
  POST: 'POST';
@@ -132,18 +132,37 @@ export interface ApiClient {
132
132
  fetchInvitePreview(inviteCode: string): Promise<InvitePreviewResponse>;
133
133
  fetchMyInviteCode(): Promise<MyInviteCodeResponse>;
134
134
  submitMyInviteCode(inviteCode: string): Promise<MyInviteCodeResponse>;
135
- createGameIdea(options: CreateGameIdeaOptions): Promise<CreateGameIdeaResponse>;
136
- listGameIdeas(options?: GameIdeasListRequest): Promise<GameIdeasListResponse>;
137
- getGameIdea(idOrSlug: string): Promise<GameIdeaDetailResponse>;
138
- getGameIdeaStatus(idOrSlug: string): Promise<GameIdeaStatusResponse>;
139
- updateGameIdea(idOrSlug: string, body: UpdateGameIdeaRequest): Promise<UpdateGameIdeaResponse>;
140
- startGameIdea(idOrSlug: string, body?: StartGameIdeaRequest): Promise<StartGameIdeaResponse>;
141
- shipGameIdea(idOrSlug: string, body: ShipGameIdeaRequest): Promise<ShipGameIdeaResponse>;
142
- fetchRemixCandidates(options?: {
143
- q?: string;
144
- limit?: number;
145
- offset?: number;
146
- }): Promise<RemixCandidatesResponse>;
135
+ uploadAgentTaskAttachment(file: Blob, description?: string, filename?: string): Promise<AgentTaskAttachmentUploadResponse>;
136
+ createNewGameAgentTask(body: CreateNewGameAgentTaskRequest): Promise<CreateNewGameAgentTaskResponse>;
137
+ createAppAgentTask(appName: string, body: CreateAppAgentTaskRequest): Promise<CreateAppAgentTaskResponse>;
138
+ getAppAgentTask(appName: string): Promise<AppAgentTaskResponse>;
139
+ getAppAgentTaskAvailability(appName: string): Promise<AgentTaskAvailabilityResponse>;
140
+ getAgentTaskAvailability(kind: AgentTaskKind): Promise<AgentTaskAvailabilityResponse>;
141
+ listNewGameSuggestions(): Promise<AgentTaskNewGameSuggestionsResponse>;
142
+ listAgentTasks(options?: ListAgentTasksOptions): Promise<AgentTasksResponse>;
143
+ listCreatorGames(options?: ListCreatorGamesOptions): Promise<CreatorGamesListResponse>;
144
+ getCreatorGameStatus(gameRef: string): Promise<CreatorGameStatusResponse>;
145
+ listCreatorGameVersions(gameRef: string): Promise<CreatorGameVersionsResponse>;
146
+ getAgentTask(taskId: number): Promise<AgentTaskDetailResponse>;
147
+ listAgentTaskEvents(taskId: number): Promise<AgentTaskEventsResponse>;
148
+ enableAgentTaskReadyNotification(taskId: number): Promise<AgentTaskDetailResponse>;
149
+ cancelAgentTask(taskId: number): Promise<CancelAgentTaskResponse>;
150
+ clearAgentTask(taskId: number): Promise<ClearAgentTaskResponse>;
151
+ retryAgentTask(taskId: number): Promise<RetryAgentTaskResponse>;
152
+ listMyAgentWorkers(): Promise<MeAgentWorkersResponse>;
153
+ workerPresence(body: WorkerPresenceRequest): Promise<WorkerPresenceResponse>;
154
+ workerClaimAgentTask(body: WorkerClaimAgentTaskRequest): Promise<WorkerClaimAgentTaskResponse>;
155
+ workerHeartbeatAgentTask(taskId: number, body: WorkerHeartbeatAgentTaskRequest): Promise<WorkerHeartbeatAgentTaskResponse>;
156
+ workerCreateAgentTaskEvent(taskId: number, body: WorkerCreateAgentTaskEventRequest): Promise<WorkerCreateAgentTaskEventResponse>;
157
+ workerAppendAgentTaskTranscriptChunks(taskId: number, body: WorkerCreateAgentTaskTranscriptChunkRequest): Promise<WorkerCreateAgentTaskTranscriptChunkResponse>;
158
+ workerRecordAgentTaskRunTelemetry(taskId: number, body: WorkerRecordAgentTaskRunTelemetryRequest): Promise<WorkerRecordAgentTaskRunTelemetryResponse>;
159
+ workerCompleteAgentTask(taskId: number, body: WorkerCompleteAgentTaskRequest): Promise<AgentTaskDetailResponse>;
160
+ workerSubmitAgentTaskReview(taskId: number, body: WorkerSubmitAgentTaskReviewRequest): Promise<WorkerSubmitAgentTaskReviewResponse>;
161
+ workerFailAgentTask(taskId: number, body: WorkerFailAgentTaskRequest): Promise<AgentTaskDetailResponse>;
162
+ adminListAgentTasks(options?: ListAgentTasksOptions): Promise<AdminAgentTasksResponse>;
163
+ adminGetAgentTask(taskId: number): Promise<AdminAgentTaskDetailResponse>;
164
+ adminGetAgentTaskTranscript(taskId: number, options?: AdminAgentTaskTranscriptOptions): Promise<AdminAgentTaskTranscriptResponse>;
165
+ adminGetAgentWorkersStatus(): Promise<AdminAgentWorkersStatusResponse>;
147
166
  checkUsernameAvailable(username: string): Promise<UsernameAvailableResponse>;
148
167
  completeGoogleSignup(request: CompleteGoogleSignupRequest): Promise<CompleteGoogleSignupResponse>;
149
168
  completeXSignup(request: CompleteXSignupRequest): Promise<CompleteXSignupResponse>;
@@ -496,6 +515,7 @@ export interface ApiClient {
496
515
  updateAdminUser(userId: number, request: UpdateAdminUserRequest): Promise<AdminUserResponse>;
497
516
  deleteAdminUser(userId: number): Promise<DeleteAdminUserResponse>;
498
517
  fetchAdminApps(): Promise<AdminAppsListResponse>;
518
+ fetchAdminPlatformAnalytics(options?: AdminPlatformAnalyticsRequest): Promise<AdminPlatformAnalyticsResponse>;
499
519
  updateAdminApp(id: number, request: AdminUpdateAppRequest): Promise<AdminUpdateAppResponse>;
500
520
  deleteAdminApp(id: number): Promise<DeleteAppResponse>;
501
521
  fetchAdminGameCollections(): Promise<AdminGameCollectionsResponse>;
@@ -511,10 +531,11 @@ export interface ApiClient {
511
531
  deleteAdminGameCollection(id: number): Promise<DeleteAdminGameCollectionResponse>;
512
532
  fetchAdminAppVersionReviews(options?: {
513
533
  state?: ReviewState;
534
+ visibility?: AppVersionVisibility;
514
535
  limit?: number;
515
536
  offset?: number;
516
537
  }): Promise<AdminAppVersionReviewsListResponse>;
517
- claimNextAdminAppVersionReview(): Promise<AdminClaimNextAppVersionReviewResponse>;
538
+ enqueueNextAdminAppVersionReviewTask(): Promise<AdminEnqueueNextAppVersionReviewTaskResponse>;
518
539
  updateAdminAppVersionReview(versionId: number, request: AdminUpdateAppVersionReviewRequest): Promise<AdminUpdateAppVersionReviewResponse>;
519
540
  fetchAdminAppPlayerMeta(appId: number): Promise<AdminAppPlayerMetaResponse>;
520
541
  fetchAdminAppPlayerMetaUser(appId: number, userId: number): Promise<AdminAppPlayerMetaUserResponse>;