@playdrop/playdrop-cli 0.6.4 → 0.6.6

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 (78) hide show
  1. package/config/client-meta.json +7 -7
  2. package/dist/appUrls.d.ts +8 -0
  3. package/dist/appUrls.js +27 -0
  4. package/dist/apps/index.d.ts +11 -0
  5. package/dist/apps/index.js +45 -1
  6. package/dist/apps/launchCheck.d.ts +30 -0
  7. package/dist/apps/launchCheck.js +272 -0
  8. package/dist/apps/registration.d.ts +12 -0
  9. package/dist/apps/registration.js +49 -0
  10. package/dist/apps/upload.d.ts +5 -0
  11. package/dist/apps/upload.js +17 -0
  12. package/dist/apps/validate.js +41 -3
  13. package/dist/captureRuntime.d.ts +13 -0
  14. package/dist/captureRuntime.js +99 -21
  15. package/dist/commands/capture.js +52 -39
  16. package/dist/commands/create.js +17 -3
  17. package/dist/commands/devServer.js +10 -2
  18. package/dist/commands/upload.js +16 -5
  19. package/dist/commands/validate.js +58 -1
  20. package/node_modules/@playdrop/api-client/dist/client.d.ts +3 -1
  21. package/node_modules/@playdrop/api-client/dist/client.d.ts.map +1 -1
  22. package/node_modules/@playdrop/api-client/dist/domains/apps.d.ts +3 -1
  23. package/node_modules/@playdrop/api-client/dist/domains/apps.d.ts.map +1 -1
  24. package/node_modules/@playdrop/api-client/dist/domains/apps.js +21 -0
  25. package/node_modules/@playdrop/config/client-meta.json +7 -7
  26. package/node_modules/@playdrop/config/dist/tsconfig.tsbuildinfo +1 -1
  27. package/node_modules/@playdrop/types/dist/version.d.ts +37 -1
  28. package/node_modules/@playdrop/types/dist/version.d.ts.map +1 -1
  29. package/node_modules/@playdrop/types/dist/version.js +1 -0
  30. package/package.json +1 -1
  31. package/node_modules/@playdrop/boxel-core/dist/test/entity-utils.test.d.ts +0 -1
  32. package/node_modules/@playdrop/boxel-core/dist/test/entity-utils.test.js +0 -92
  33. package/node_modules/@playdrop/boxel-core/dist/test/entity-utils.test.js.map +0 -1
  34. package/node_modules/@playdrop/boxel-core/dist/test/greedy-mesher.test.d.ts +0 -1
  35. package/node_modules/@playdrop/boxel-core/dist/test/greedy-mesher.test.js +0 -48
  36. package/node_modules/@playdrop/boxel-core/dist/test/greedy-mesher.test.js.map +0 -1
  37. package/node_modules/@playdrop/boxel-core/dist/test/humanoid/humanoid-builders.test.d.ts +0 -1
  38. package/node_modules/@playdrop/boxel-core/dist/test/humanoid/humanoid-builders.test.js +0 -270
  39. package/node_modules/@playdrop/boxel-core/dist/test/humanoid/humanoid-builders.test.js.map +0 -1
  40. package/node_modules/@playdrop/boxel-core/dist/test/index.test.d.ts +0 -1
  41. package/node_modules/@playdrop/boxel-core/dist/test/index.test.js +0 -48
  42. package/node_modules/@playdrop/boxel-core/dist/test/index.test.js.map +0 -1
  43. package/node_modules/@playdrop/boxel-core/dist/test/layer-mode.test.d.ts +0 -1
  44. package/node_modules/@playdrop/boxel-core/dist/test/layer-mode.test.js +0 -67
  45. package/node_modules/@playdrop/boxel-core/dist/test/layer-mode.test.js.map +0 -1
  46. package/node_modules/@playdrop/boxel-core/dist/test/materials.test.d.ts +0 -1
  47. package/node_modules/@playdrop/boxel-core/dist/test/materials.test.js +0 -55
  48. package/node_modules/@playdrop/boxel-core/dist/test/materials.test.js.map +0 -1
  49. package/node_modules/@playdrop/boxel-core/dist/test/palette-tools.test.d.ts +0 -1
  50. package/node_modules/@playdrop/boxel-core/dist/test/palette-tools.test.js +0 -124
  51. package/node_modules/@playdrop/boxel-core/dist/test/palette-tools.test.js.map +0 -1
  52. package/node_modules/@playdrop/boxel-core/dist/test/serialization.test.d.ts +0 -1
  53. package/node_modules/@playdrop/boxel-core/dist/test/serialization.test.js +0 -35
  54. package/node_modules/@playdrop/boxel-core/dist/test/serialization.test.js.map +0 -1
  55. package/node_modules/@playdrop/boxel-core/dist/test/textures.test.d.ts +0 -1
  56. package/node_modules/@playdrop/boxel-core/dist/test/textures.test.js +0 -120
  57. package/node_modules/@playdrop/boxel-core/dist/test/textures.test.js.map +0 -1
  58. package/node_modules/@playdrop/boxel-core/dist/test/types.test.d.ts +0 -1
  59. package/node_modules/@playdrop/boxel-core/dist/test/types.test.js +0 -32
  60. package/node_modules/@playdrop/boxel-core/dist/test/types.test.js.map +0 -1
  61. package/node_modules/@playdrop/boxel-core/dist/test/upscale.test.d.ts +0 -1
  62. package/node_modules/@playdrop/boxel-core/dist/test/upscale.test.js +0 -100
  63. package/node_modules/@playdrop/boxel-core/dist/test/upscale.test.js.map +0 -1
  64. package/node_modules/@playdrop/boxel-core/dist/test/validation.test.d.ts +0 -1
  65. package/node_modules/@playdrop/boxel-core/dist/test/validation.test.js +0 -61
  66. package/node_modules/@playdrop/boxel-core/dist/test/validation.test.js.map +0 -1
  67. package/node_modules/@playdrop/boxel-core/dist/test/voxels.test.d.ts +0 -1
  68. package/node_modules/@playdrop/boxel-core/dist/test/voxels.test.js +0 -51
  69. package/node_modules/@playdrop/boxel-core/dist/test/voxels.test.js.map +0 -1
  70. package/node_modules/@playdrop/config/dist/src/creator-docs.d.ts +0 -24
  71. package/node_modules/@playdrop/config/dist/src/creator-docs.d.ts.map +0 -1
  72. package/node_modules/@playdrop/config/dist/src/creator-docs.js +0 -253
  73. package/node_modules/@playdrop/config/dist/src/creator-faq.d.ts +0 -17
  74. package/node_modules/@playdrop/config/dist/src/creator-faq.d.ts.map +0 -1
  75. package/node_modules/@playdrop/config/dist/src/creator-faq.js +0 -141
  76. package/node_modules/@playdrop/config/dist/test/creator-docs.test.d.ts +0 -2
  77. package/node_modules/@playdrop/config/dist/test/creator-docs.test.d.ts.map +0 -1
  78. package/node_modules/@playdrop/config/dist/test/creator-docs.test.js +0 -36
@@ -1,61 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const strict_1 = __importDefault(require("node:assert/strict"));
7
- const promises_1 = require("node:fs/promises");
8
- const node_path_1 = __importDefault(require("node:path"));
9
- const node_test_1 = __importDefault(require("node:test"));
10
- const src_1 = require("../src");
11
- const FIXTURES_DIR = node_path_1.default.resolve(process.cwd(), 'test/fixtures');
12
- const loadEntity = async (file) => {
13
- const raw = await (0, promises_1.readFile)(node_path_1.default.join(FIXTURES_DIR, file), 'utf8');
14
- return JSON.parse(raw);
15
- };
16
- (0, node_test_1.default)('validateBoxel returns parsed boxel for valid fixture', async () => {
17
- const candidate = await loadEntity('box_grass.json');
18
- const { boxel, issues } = (0, src_1.validateBoxel)(candidate);
19
- strict_1.default.ok(boxel, 'expected boxel to validate');
20
- strict_1.default.equal(issues.length, 0);
21
- strict_1.default.equal(boxel?.patterns.length, 3);
22
- });
23
- (0, node_test_1.default)('assertBoxel throws with aggregated issues for invalid payloads', () => {
24
- const invalid = {
25
- id: '',
26
- geometry: {
27
- id: 123,
28
- root: {
29
- id: 'root',
30
- position: [0, 0],
31
- children: 'not-an-array',
32
- },
33
- },
34
- primitives: [{ id: 1, kind: 'plain_box', size: [1] }],
35
- patterns: [],
36
- materials: [],
37
- textures: [],
38
- animations: [],
39
- };
40
- try {
41
- (0, src_1.assertBoxel)(invalid);
42
- strict_1.default.fail('Expected validation to throw');
43
- }
44
- catch (error) {
45
- strict_1.default.ok(error instanceof src_1.BoxelValidationError);
46
- strict_1.default.ok(error.issues.length >= 3, 'should surface multiple issues');
47
- const paths = error.issues.map(issue => issue.path);
48
- strict_1.default.ok(paths.some(path => path.includes('boxel.id')));
49
- }
50
- });
51
- (0, node_test_1.default)('collectBoxelValidationIssues mirrors validateBoxel diagnostics', async () => {
52
- const invalid = await loadEntity('box_grass.json');
53
- // remove primitive reference to trigger issues
54
- if (typeof invalid === 'object' && invalid && 'geometry' in invalid) {
55
- invalid.geometry.root.mesh = 'missing';
56
- }
57
- const issues = (0, src_1.collectBoxelValidationIssues)(invalid);
58
- strict_1.default.ok(issues.length >= 1);
59
- strict_1.default.ok(issues[0].path.includes('boxel.geometry'));
60
- });
61
- //# sourceMappingURL=validation.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validation.test.js","sourceRoot":"","sources":["../../test/validation.test.ts"],"names":[],"mappings":"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"}
@@ -1,51 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const strict_1 = __importDefault(require("node:assert/strict"));
7
- const node_test_1 = __importDefault(require("node:test"));
8
- const src_1 = require("../src");
9
- const size = [2, 2, 2];
10
- (0, node_test_1.default)('createFilledVoxelData produces expected volume', () => {
11
- const voxels = (0, src_1.createFilledVoxelData)(size, 3);
12
- strict_1.default.equal(voxels.length, 8);
13
- strict_1.default.ok(voxels.every(value => value === 3));
14
- });
15
- (0, node_test_1.default)('validateVoxelData guards voxel arrays', () => {
16
- const valid = (0, src_1.createFilledVoxelData)(size, 0);
17
- strict_1.default.equal((0, src_1.validateVoxelData)(valid, size), true);
18
- const invalid = valid.slice(0, 3);
19
- strict_1.default.equal((0, src_1.validateVoxelData)(invalid, size), false);
20
- });
21
- (0, node_test_1.default)('setVoxelAt respects bounds', () => {
22
- const voxels = (0, src_1.createFilledVoxelData)(size, 0);
23
- (0, src_1.setVoxelAt)(voxels, size, { x: 1, y: 1, z: 1 }, 5);
24
- strict_1.default.equal(voxels[(0, src_1.getVoxelIndex)(size, { x: 1, y: 1, z: 1 })], 5);
25
- (0, src_1.setVoxelAt)(voxels, size, { x: 3, y: 0, z: 0 }, 7);
26
- strict_1.default.equal(voxels.includes(7), false);
27
- });
28
- (0, node_test_1.default)('forEachVoxel iterates through every cell', () => {
29
- const voxels = (0, src_1.createFilledVoxelData)(size, 0);
30
- let count = 0;
31
- const indices = [];
32
- const voxelBox = {
33
- id: 'voxel_box',
34
- kind: 'voxel_box',
35
- size,
36
- palette: ['material_default'],
37
- voxels,
38
- };
39
- (0, src_1.forEachVoxel)(voxelBox, info => {
40
- count += 1;
41
- indices.push(info);
42
- });
43
- strict_1.default.equal(count, 8);
44
- strict_1.default.equal(indices[0].index, 0);
45
- });
46
- (0, node_test_1.default)('clampSizeAxis enforces expected range', () => {
47
- strict_1.default.equal((0, src_1.clampSizeAxis)(0), 1);
48
- strict_1.default.equal((0, src_1.clampSizeAxis)(10.8), 10);
49
- strict_1.default.equal((0, src_1.clampSizeAxis)(128), 64);
50
- });
51
- //# sourceMappingURL=voxels.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"voxels.test.js","sourceRoot":"","sources":["../../test/voxels.test.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- export interface CreatorGuideCommand {
2
- label?: string;
3
- value: string;
4
- }
5
- export interface CreatorGuideOption {
6
- id: string;
7
- title: string;
8
- prompt: string;
9
- commands: CreatorGuideCommand[];
10
- notes?: string[];
11
- }
12
- export interface CreatorGuideGroup {
13
- id: string;
14
- title: string;
15
- options: CreatorGuideOption[];
16
- }
17
- export interface CreatorGettingStartedContent {
18
- title: string;
19
- description: string;
20
- intro: string;
21
- groups: CreatorGuideGroup[];
22
- }
23
- export declare const CREATOR_GETTING_STARTED_CONTENT: CreatorGettingStartedContent;
24
- //# sourceMappingURL=creator-docs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"creator-docs.d.ts","sourceRoot":"","sources":["../../src/creator-docs.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAED,eAAO,MAAM,+BAA+B,EAAE,4BAyP7C,CAAC"}
@@ -1,253 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CREATOR_GETTING_STARTED_CONTENT = void 0;
4
- exports.CREATOR_GETTING_STARTED_CONTENT = {
5
- title: 'Getting Started',
6
- description: 'Creator onboarding prompts for installing Playdrop, publishing work, and leveling up games with the Playdrop platform.',
7
- intro: 'Pick the prompt that matches what you want to do. Each option gives you the exact creator prompt plus a sample command flow the agent can run.',
8
- groups: [
9
- {
10
- id: 'install',
11
- title: 'Install',
12
- options: [
13
- {
14
- id: 'install-one-shot-create-and-publish',
15
- title: 'One shot including install and publishing',
16
- prompt: `let's create a classic minesweeper game on playdrop ai and publish it.`,
17
- commands: [
18
- { label: 'Install the Playdrop skill', value: 'npx skills add https://github.com/playdrop-ai/playdrop-skills --skill playdrop' },
19
- { label: 'Install the CLI', value: 'npm install -g @playdrop/playdrop-cli' },
20
- { label: 'Log in', value: 'playdrop auth login' },
21
- { label: 'Initialize the workspace', value: 'playdrop project init .' },
22
- { label: 'Create the starter app', value: 'playdrop project create app minesweeper --template playdrop/template/typescript_template' },
23
- { label: 'Run local development', value: 'playdrop project dev minesweeper' },
24
- { label: 'Validate the workspace', value: 'playdrop project validate .' },
25
- { label: 'Publish to Playdrop', value: 'playdrop project publish .' },
26
- ],
27
- notes: [
28
- 'The agent should implement the actual Minesweeper gameplay inside the created app before validate and publish.',
29
- ],
30
- },
31
- {
32
- id: 'install-publish-existing-game',
33
- title: 'Install and publish existing game as is',
34
- prompt: `let's install playdrop ai and publish our game to it.`,
35
- commands: [
36
- { label: 'Install the Playdrop skill', value: 'npx skills add https://github.com/playdrop-ai/playdrop-skills --skill playdrop' },
37
- { label: 'Install the CLI', value: 'npm install -g @playdrop/playdrop-cli' },
38
- { label: 'Log in', value: 'playdrop auth login' },
39
- { label: 'Initialize the workspace', value: 'playdrop project init .' },
40
- { label: 'Inspect the existing game entry points', value: "rg --files . | rg 'index\\\\.html$|main\\\\.html$|package\\\\.json$|vite\\\\.config|webpack|src/'" },
41
- { label: 'Validate the workspace', value: 'playdrop project validate .' },
42
- { label: 'Run the game locally in Playdrop', value: 'playdrop project dev . --app your-game' },
43
- { label: 'Publish the workspace', value: 'playdrop project publish .' },
44
- ],
45
- notes: [
46
- 'The agent should update catalogue.json so the existing game points at the right HTML entry file before validate and publish.',
47
- ],
48
- },
49
- {
50
- id: 'install-register-external-game',
51
- title: 'Install and register external game',
52
- prompt: `let's install playdrop ai and register our existing web game on playdrop. the game is already live at <https public game url> and should stay hosted there. create the minimal playdrop workspace, configure the game as externally hosted, add strong listing media, validate it, and publish it.`,
53
- commands: [
54
- { label: 'Install the Playdrop skill', value: 'npx skills add https://github.com/playdrop-ai/playdrop-skills --skill playdrop' },
55
- { label: 'Install the CLI', value: 'npm install -g @playdrop/playdrop-cli' },
56
- { label: 'Log in', value: 'playdrop auth login' },
57
- { label: 'Initialize the workspace', value: 'playdrop project init .' },
58
- { label: 'Read the publishing reference', value: 'playdrop documentation read publishing' },
59
- { label: 'Create listing media folders', value: 'mkdir -p listing/screenshots/landscape listing/screenshots/portrait listing/videos/landscape listing/videos/portrait' },
60
- { label: 'Inspect the live game before listing it', value: 'playdrop project capture remote <https-public-game-url> --screenshot output/playdrop/external-game-check.png' },
61
- { label: 'Open the catalogue fields to define', value: 'rg -n "hostingMode|externalUrl|icon|heroLandscape|heroPortrait|screenshotsLandscape|screenshotsPortrait|videosLandscape|videosPortrait" catalogue.json' },
62
- { label: 'Validate the workspace', value: 'playdrop project validate .' },
63
- { label: 'Publish the listing', value: 'playdrop project publish .' },
64
- ],
65
- notes: [
66
- 'The agent should create a minimal app entry with hostingMode set to EXTERNAL and externalUrl set to the public HTTPS game URL.',
67
- 'This flow is for distribution and listing on Playdrop, not for importing or rebuilding the game source locally.',
68
- 'Even when the code stays hosted elsewhere, the listing still needs good metadata, screenshots, hero art, icon, and optional video.',
69
- ],
70
- },
71
- {
72
- id: 'install-and-idea-generation',
73
- title: 'Install and game idea',
74
- prompt: `let's install playdrop ai then give me your top 5 game ideas we can make together to publish there`,
75
- commands: [
76
- { label: 'Install the Playdrop skill', value: 'npx skills add https://github.com/playdrop-ai/playdrop-skills --skill playdrop' },
77
- { label: 'Install the CLI', value: 'npm install -g @playdrop/playdrop-cli' },
78
- { label: 'Log in', value: 'playdrop auth login' },
79
- { label: 'Browse public games', value: 'playdrop browse --kind app --app-type game' },
80
- { label: 'Browse public demos', value: 'playdrop browse --kind app --app-type demo' },
81
- { label: 'Browse packs', value: 'playdrop browse --kind asset-pack' },
82
- { label: 'Browse templates', value: 'playdrop browse --kind app --app-type template' },
83
- ],
84
- notes: [
85
- 'The agent should use what it finds to propose five concrete ideas that fit Playdrop instead of generic game jam ideas.',
86
- ],
87
- },
88
- ],
89
- },
90
- {
91
- id: 'level-up-your-game',
92
- title: 'Level Up Your Game',
93
- options: [
94
- {
95
- id: 'local-testing',
96
- title: 'Local testing',
97
- prompt: `run our game locally using playdrop and show me a screenshot of the gameplay on all supported surfaces, then give me the url to copy past in chrome to test it myself`,
98
- commands: [
99
- { label: 'Start the local runtime', value: 'playdrop project dev . --app your-game' },
100
- { label: 'Capture desktop', value: 'playdrop project capture . --app your-game --surface desktop --screenshot output/playdrop/desktop.png' },
101
- { label: 'Capture mobile landscape', value: 'playdrop project capture . --app your-game --surface mobile-landscape --screenshot output/playdrop/mobile-landscape.png' },
102
- { label: 'Capture mobile portrait', value: 'playdrop project capture . --app your-game --surface mobile-portrait --screenshot output/playdrop/mobile-portrait.png' },
103
- ],
104
- notes: [
105
- 'The agent should return the local dev URL printed by the dev command after the runtime starts.',
106
- ],
107
- },
108
- {
109
- id: 'upgrade-art',
110
- title: 'Upgrade art',
111
- prompt: `browse and search playdrop existing games, demos, assets packs and assets and propose specific assets we could use to upgrade our game art. could be visual, music or sfx. also provide ideas of ai generation we could try to add new art to the game.`,
112
- commands: [
113
- { label: 'Browse demos', value: 'playdrop browse --kind app --app-type demo' },
114
- { label: 'Browse asset packs', value: 'playdrop browse --kind asset-pack' },
115
- { label: 'Search visual assets', value: 'playdrop search "pixel art" --kind asset --asset-category image' },
116
- { label: 'Search music assets', value: 'playdrop search "music" --kind asset --asset-category audio --asset-subcategory music' },
117
- { label: 'Search SFX assets', value: 'playdrop search "sfx" --kind asset --asset-category audio --asset-subcategory sfx' },
118
- { label: 'Try image generation', value: 'playdrop ai create image "retro minesweeper tileset with playful UI icons" --asset-name retro-minesweeper-art --asset-display-name "Retro Minesweeper Art"' },
119
- { label: 'Try music generation', value: 'playdrop ai create music "light arcade puzzle soundtrack with looping melody" --asset-name minesweeper-theme --asset-display-name "Minesweeper Theme" --instrumental' },
120
- ],
121
- },
122
- {
123
- id: 'surfaces-and-inputs',
124
- title: 'Support more surfaces and inputs',
125
- prompt: `what surfaces (desktop, mobile landscape, mobile portrait) do we currently support for our game with what inputs (keyboard, mouse, touch, virtual gamepad, physical controllers) ? which one could we add and how can we use playdrop for it (including downloading games and demos to reuse) ?`,
126
- commands: [
127
- { label: 'Inspect supported surfaces and input code', value: 'rg -n "surfaceTargets|keydown|keyup|pointer|touch|gamepad|getGamepads|virtual gamepad" .' },
128
- { label: 'Capture desktop', value: 'playdrop project capture . --app your-game --surface desktop --screenshot output/playdrop/surface-desktop.png' },
129
- { label: 'Capture mobile landscape', value: 'playdrop project capture . --app your-game --surface mobile-landscape --screenshot output/playdrop/surface-mobile-landscape.png' },
130
- { label: 'Capture mobile portrait', value: 'playdrop project capture . --app your-game --surface mobile-portrait --screenshot output/playdrop/surface-mobile-portrait.png' },
131
- { label: 'Browse reusable demos', value: 'playdrop browse --kind app --app-type demo' },
132
- { label: 'Download a reusable example by remixing it', value: 'playdrop project create app input-reference --remix app:<creator>/<name>@<version>' },
133
- ],
134
- },
135
- {
136
- id: 'achievements-and-leaderboards',
137
- title: 'Add achievements and leaderboards',
138
- prompt: `let's add achievements and leaderboards to the game using playdrop`,
139
- commands: [
140
- { label: 'Read the runtime reference', value: 'playdrop documentation read runtime' },
141
- { label: 'Inspect the codebase', value: 'rg -n "achievement|leaderboard" .' },
142
- { label: 'Run the game locally', value: 'playdrop project dev . --app your-game' },
143
- { label: 'Validate the workspace', value: 'playdrop project validate .' },
144
- { label: 'Publish the update', value: 'playdrop project publish .' },
145
- ],
146
- notes: [
147
- 'The agent should update both catalogue.json and the app code so the runtime metadata and the UI stay aligned.',
148
- ],
149
- },
150
- {
151
- id: 'realtime-multiplayer',
152
- title: 'Add realtime multiplayer',
153
- prompt: `let's add real time multiplayer to the game using playdrop. find a few example games and demos that are close to what we need then download their code to create ours mixing their best ideas together`,
154
- commands: [
155
- { label: 'Search multiplayer games', value: 'playdrop search "multiplayer" --kind app --app-type game' },
156
- { label: 'Search multiplayer demos', value: 'playdrop search "multiplayer" --kind app --app-type demo' },
157
- { label: 'Browse demos', value: 'playdrop browse --kind app --app-type demo' },
158
- { label: 'Download a reference app by remixing it', value: 'playdrop project create app multiplayer-reference --remix app:<creator>/<name>@<version>' },
159
- { label: 'Read the runtime reference', value: 'playdrop documentation read runtime' },
160
- { label: 'Run the game locally', value: 'playdrop project dev . --app your-game' },
161
- ],
162
- },
163
- {
164
- id: 'monetization',
165
- title: 'Add monetization',
166
- prompt: `let's add monetization to our game using playdrop`,
167
- commands: [
168
- { label: 'Read the runtime reference', value: 'playdrop documentation read runtime' },
169
- { label: 'Inspect the codebase', value: 'rg -n "shop|purchase|iap|receipt" .' },
170
- { label: 'Run the game locally', value: 'playdrop project dev . --app your-game' },
171
- { label: 'Validate the workspace', value: 'playdrop project validate .' },
172
- { label: 'Publish the update', value: 'playdrop project publish .' },
173
- ],
174
- },
175
- {
176
- id: 'other-enhancements',
177
- title: 'Propose other enhancements',
178
- prompt: `browse the playdrop capabilities and top games then suggest new ideas we could incorportate to our game.`,
179
- commands: [
180
- { label: 'Browse public games', value: 'playdrop browse --kind app --app-type game' },
181
- { label: 'Browse public demos', value: 'playdrop browse --kind app --app-type demo' },
182
- { label: 'Browse asset packs', value: 'playdrop browse --kind asset-pack' },
183
- { label: 'Browse the docs index', value: 'playdrop documentation browse' },
184
- { label: 'Browse recent AI jobs', value: 'playdrop ai jobs browse' },
185
- ],
186
- notes: [
187
- 'The agent should return a ranked shortlist with the highest-impact enhancements first.',
188
- ],
189
- },
190
- {
191
- id: 'monitor-and-respond-to-comments',
192
- title: 'Monitor and respond to comments',
193
- prompt: `look at number of play, like and comments for the game on playdrop. evaluate each comment and propose next step. if some report issues try to reproduce the issue and propose a fix. if the issue is already fixed or feedback it not specific enough answer to those users directly. if praising the game answer with a like or a short thank you message. if proposing new ideas please evaluate them based on how good they are and feasibility then share your recommendation here`,
194
- commands: [
195
- { label: 'Inspect game metrics', value: 'playdrop detail your-creator/app/your-game --json' },
196
- { label: 'Review the full comment thread', value: 'playdrop comments browse your-creator/app/your-game' },
197
- { label: 'Run the game locally', value: 'playdrop project dev . --app your-game' },
198
- { label: 'Capture a reproduction screenshot', value: 'playdrop project capture . --app your-game --surface desktop --screenshot output/playdrop/comment-repro.png' },
199
- { label: 'Reply to a bug report', value: 'playdrop comments add your-creator/app/your-game --reply-to <commentId> --body "Thanks for the report. I reproduced the issue locally and I am preparing a fix."' },
200
- { label: 'Reply to a resolved issue', value: 'playdrop comments add your-creator/app/your-game --reply-to <commentId> --body "Thanks for reporting this. The latest update should have fixed it. Please try again and let me know if you still hit it."' },
201
- { label: 'Reply to praise', value: 'playdrop comments add your-creator/app/your-game --reply-to <commentId> --body "Thanks for playing. Glad you enjoyed it."' },
202
- ],
203
- notes: [
204
- 'Use a direct reply when feedback is not specific enough or when the issue is already fixed.',
205
- 'The CLI supports browsing and replying to comments. If you also want to leave a like, do that in the Playdrop web app.',
206
- 'For idea requests, the agent should evaluate impact and feasibility before recommending whether to build them.',
207
- ],
208
- },
209
- {
210
- id: 'enhance-game-listing',
211
- title: 'Enhance game listing',
212
- prompt: `let's make a better gameplay video and screenshot for the game. gameplay video should be based on one or more video recording of key moments of gameplay (good exciting moment not just technical proof of work) that you can bundle together with key messages on top using a tool like Remotion if available. screenshots should also show great moment or situation and showcase the diversity of the game (and focus on gameplay, not in between UI and popup). finally use key screenshot to generate a great marketing hero image using playdrop ai image generation and then use that hero art to generate a great icon with playdrop ai image generation`,
213
- commands: [
214
- { label: 'Run the game locally', value: 'playdrop project dev . --app your-game' },
215
- { label: 'Capture a strong desktop gameplay shot', value: 'playdrop project capture . --app your-game --surface desktop --screenshot output/playdrop/listing-shot-desktop.png' },
216
- { label: 'Capture a strong mobile landscape gameplay shot', value: 'playdrop project capture . --app your-game --surface mobile-landscape --screenshot output/playdrop/listing-shot-mobile-landscape.png' },
217
- { label: 'Capture a strong mobile portrait gameplay shot', value: 'playdrop project capture . --app your-game --surface mobile-portrait --screenshot output/playdrop/listing-shot-mobile-portrait.png' },
218
- { label: 'Generate a marketing hero image from the best screenshot', value: 'playdrop ai create image "marketing hero art for our game inspired by the attached gameplay screenshot, cinematic, readable, polished, store-ready" --image1 output/playdrop/listing-shot-desktop.png --asset-name your-game-hero-art --asset-display-name "Your Game Hero Art" --ratio 16:9' },
219
- { label: 'Generate a square icon from the hero art', value: 'playdrop ai create image "store icon for our game inspired by the attached hero art, bold silhouette, simple, highly legible at small size" --image1 output/playdrop/listing-shot-desktop.png --asset-name your-game-icon-art --asset-display-name "Your Game Icon Art" --ratio 1:1' },
220
- { label: 'Generate a short marketing video concept clip', value: 'playdrop ai create video "short high energy gameplay marketing clip for our game with readable key beats and a strong finish" --ratio 16:9 --duration 4s --asset-name your-game-video-concept --asset-display-name "Your Game Video Concept"' },
221
- { label: 'Open the listing fields to update', value: 'rg -n "icon|heroLandscape|heroPortrait|screenshotsLandscape|screenshotsPortrait|videosLandscape|videosPortrait" catalogue.json' },
222
- { label: 'Validate the updated listing media', value: 'playdrop project validate .' },
223
- { label: 'Publish the refreshed listing', value: 'playdrop project publish .' },
224
- ],
225
- notes: [
226
- 'The agent should pick screenshots that show actual gameplay variety, not menus, loading states, or popups.',
227
- 'If Remotion is available in the workspace, use it to assemble recorded gameplay clips into a stronger listing video before publish.',
228
- 'After generating hero or icon art, the agent still needs to place the exported files into the listing paths referenced by catalogue.json.',
229
- ],
230
- },
231
- {
232
- id: 'keep-up-with-playdrop-latest-improvement',
233
- title: 'Keep up with Playdrop latest improvement',
234
- prompt: `update playdrop ai skill and cli, then check the changelog and see if there is anything we should update for our game to keep up with best practices or new capabilities we should consider integrating to our game`,
235
- commands: [
236
- { label: 'Update the Playdrop skill', value: 'npx skills add https://github.com/playdrop-ai/playdrop-skills --skill playdrop' },
237
- { label: 'Update the Playdrop CLI', value: 'playdrop update' },
238
- { label: 'Confirm the installed CLI version', value: 'playdrop version' },
239
- { label: 'Read the public changelog', value: 'playdrop changelog' },
240
- { label: 'Browse the current reference docs', value: 'playdrop documentation browse' },
241
- { label: 'Read the runtime reference', value: 'playdrop documentation read runtime' },
242
- { label: 'Read the publishing reference', value: 'playdrop documentation read publishing' },
243
- { label: 'Inspect the game for current Playdrop integrations', value: 'rg -n "playdrop|sdk|leaderboard|achievement|shop|purchase|room|multiplayer|catalogue" .' },
244
- ],
245
- notes: [
246
- 'The agent should compare the changelog against the current game implementation and return a short list of concrete upgrades, not a generic summary.',
247
- 'Prioritize anything that improves compatibility, listing quality, supported surfaces, or new Playdrop capabilities the game is not using yet.',
248
- ],
249
- },
250
- ],
251
- },
252
- ],
253
- };
@@ -1,17 +0,0 @@
1
- export interface CreatorFaqLink {
2
- href: string;
3
- label: string;
4
- }
5
- export interface CreatorFaqItem {
6
- question: string;
7
- answer: string;
8
- links?: CreatorFaqLink[];
9
- }
10
- export interface CreatorFaqSection {
11
- id: string;
12
- title: string;
13
- description: string;
14
- items: CreatorFaqItem[];
15
- }
16
- export declare const CREATOR_FAQ_SECTIONS: CreatorFaqSection[];
17
- //# sourceMappingURL=creator-faq.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"creator-faq.d.ts","sourceRoot":"","sources":["../../src/creator-faq.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,eAAO,MAAM,oBAAoB,EAAE,iBAAiB,EAuJnD,CAAC"}
@@ -1,141 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CREATOR_FAQ_SECTIONS = void 0;
4
- exports.CREATOR_FAQ_SECTIONS = [
5
- {
6
- id: 'platform',
7
- title: 'Platform model',
8
- description: 'What Playdrop is for creators and what kind of work belongs here.',
9
- items: [
10
- {
11
- question: 'What is PlayDrop for creators?',
12
- answer: 'PlayDrop is both a catalogue platform and a runtime platform. You can publish apps, assets, and packs into the catalogue, then use Playdrop runtime services such as identity, saves, multiplayer, monetization, AI generation, and player meta inside hosted apps.',
13
- links: [
14
- { href: '/getting-started', label: 'Getting Started' },
15
- { href: '/docs/catalogue', label: 'Catalogue docs' },
16
- { href: '/docs/runtime', label: 'Runtime docs' },
17
- ],
18
- },
19
- {
20
- question: 'What can I publish?',
21
- answer: 'Creators can publish apps, reusable assets, and asset packs. The catalogue model is versioned, supports remixing, and connects publishing with discovery and social signals.',
22
- links: [
23
- { href: '/docs/catalogue#apps-assets-and-packs', label: 'Apps, assets, and packs' },
24
- { href: '/docs/publishing#catalogue-json', label: 'Catalogue JSON' },
25
- ],
26
- },
27
- {
28
- question: 'Do I need to think about players first?',
29
- answer: 'Not for onboarding. The creator workflow matters first: set up the tools, choose the right content model, run locally, validate, and publish. Player-facing launch behavior is mostly obvious once the content exists.',
30
- },
31
- ],
32
- },
33
- {
34
- id: 'tooling',
35
- title: 'Tooling and agents',
36
- description: 'How the CLI, the public skill, and AI coding agents fit together.',
37
- items: [
38
- {
39
- question: 'Do I need the PlayDrop skill, the CLI, or both?',
40
- answer: 'Use both. The CLI performs the real workflows such as auth, create, remix, dev, validate, publish, browse, and comments. The public PlayDrop skill gives your coding agent the platform-specific workflow and vocabulary so it uses the CLI and runtime correctly.',
41
- links: [
42
- { href: '/getting-started', label: 'Getting Started' },
43
- { href: '/docs/cli#install-and-auth', label: 'CLI install and auth' },
44
- ],
45
- },
46
- {
47
- question: 'How should AI agents fit into the workflow?',
48
- answer: 'Let the agent do the setup and implementation work, but keep the human request small and outcome-focused. A good creator prompt tells the agent to install the PlayDrop tooling, authenticate, inspect the workspace, and then choose the correct create, remix, or publish flow.',
49
- links: [
50
- { href: '/getting-started', label: 'Creator onboarding' },
51
- ],
52
- },
53
- {
54
- question: 'Can I log in without browser auth?',
55
- answer: 'Yes. The CLI supports browser login by default and also supports API key login with playdrop auth login --key <api-key>. Direct username and password login is also supported when you need it.',
56
- links: [
57
- { href: '/docs/cli#install-and-auth', label: 'Auth workflows' },
58
- ],
59
- },
60
- ],
61
- },
62
- {
63
- id: 'publishing',
64
- title: 'Publishing and catalogue operations',
65
- description: 'How workspace content, publishing, versioning, and catalogue discovery fit together.',
66
- items: [
67
- {
68
- question: 'What is the relationship between my workspace and the catalogue?',
69
- answer: 'Your workspace is the local source of truth while you are building. catalogue.json describes the publishable apps, assets, and packs in that workspace. Validation checks the local contract, and publish pushes the current workspace state into the PlayDrop catalogue.',
70
- links: [
71
- { href: '/docs/publishing#catalogue-json', label: 'Catalogue JSON' },
72
- { href: '/docs/publishing#versioning-and-lifecycle', label: 'Versioning and lifecycle' },
73
- ],
74
- },
75
- {
76
- question: 'How do versions and remixing work?',
77
- answer: 'Every catalogue object is versioned. Apps publish semantic versions, assets publish revisions, and packs publish versions. Remix flows let you scaffold local content from an exact published app, asset, or pack version instead of starting from scratch.',
78
- links: [
79
- { href: '/docs/catalogue#discovery-and-social-signals', label: 'Discovery and social' },
80
- { href: '/docs/cli#create-dev-and-publish', label: 'Create, dev, and publish' },
81
- ],
82
- },
83
- {
84
- question: 'Does the platform include comments and discovery signals?',
85
- answer: 'Yes. The creator platform includes browse and search surfaces plus comments, likes, saves, remixes, versions, and related catalogue metadata. Those signals help explain why catalogue quality and listing quality matter.',
86
- links: [
87
- { href: '/docs/catalogue#discovery-and-social-signals', label: 'Discovery and social' },
88
- ],
89
- },
90
- ],
91
- },
92
- {
93
- id: 'runtime',
94
- title: 'Runtime and app features',
95
- description: 'What hosted apps get from PlayDrop at runtime.',
96
- items: [
97
- {
98
- question: 'What runtime features does the SDK actually provide?',
99
- answer: 'The runtime covers lifecycle, player identity, saves, room-based multiplayer, monetization, runtime asset access, AI generation jobs, shared runtime libraries, achievements, and leaderboards. Public docs now follow those surfaces directly instead of hiding them behind generic SDK language.',
100
- links: [
101
- { href: '/docs/runtime', label: 'Runtime overview' },
102
- { href: '/docs/runtime#meta', label: 'Achievements and leaderboards' },
103
- ],
104
- },
105
- {
106
- question: 'How do assets, packs, and runtime asset loading relate?',
107
- answer: 'Assets and packs live in the catalogue as creator content, but hosted apps can also inspect, search, load, and in some cases create or update content through the runtime asset APIs. That is why the catalogue docs and runtime docs need to be read together.',
108
- links: [
109
- { href: '/docs/catalogue', label: 'Catalogue docs' },
110
- { href: '/docs/runtime#assets-at-runtime', label: 'Assets at runtime' },
111
- ],
112
- },
113
- {
114
- question: 'What does PlayDrop own versus what my game still owns?',
115
- answer: 'PlayDrop owns the platform surfaces: host lifecycle, creator and player identity, storage hooks, room primitives, catalogue integration, commerce hooks, AI generation jobs, and player meta primitives. Your game still owns its core gameplay rules, content design, progression design, and any custom backend behavior that is outside the PlayDrop platform contract.',
116
- links: [
117
- { href: '/docs/runtime#lifecycle', label: 'Runtime lifecycle' },
118
- { href: '/docs/runtime#multiplayer', label: 'Multiplayer' },
119
- ],
120
- },
121
- ],
122
- },
123
- {
124
- id: 'players',
125
- title: 'Player questions',
126
- description: 'Only the small set of player-facing questions that help reduce confusion for creators.',
127
- items: [
128
- {
129
- question: 'Can players try content without setup?',
130
- answer: 'Usually yes. Public catalogue content is browser-first, and creators do not need to design a separate install flow for basic launch and discovery.',
131
- },
132
- {
133
- question: 'Does every player need a PlayDrop account before an app can run?',
134
- answer: 'No. Hosted apps can choose whether auth is required, optional, or disabled. That is part of the app contract, not a universal platform rule.',
135
- links: [
136
- { href: '/docs/runtime#identity', label: 'Identity and auth modes' },
137
- ],
138
- },
139
- ],
140
- },
141
- ];
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=creator-docs.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"creator-docs.test.d.ts","sourceRoot":"","sources":["../../test/creator-docs.test.ts"],"names":[],"mappings":""}
@@ -1,36 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const node_test_1 = __importDefault(require("node:test"));
7
- const strict_1 = __importDefault(require("node:assert/strict"));
8
- const index_1 = require("../src/index");
9
- (0, node_test_1.default)('creator getting started content is grouped into prompt options with commands', () => {
10
- strict_1.default.equal(index_1.CREATOR_GETTING_STARTED_CONTENT.groups.length > 0, true);
11
- for (const group of index_1.CREATOR_GETTING_STARTED_CONTENT.groups) {
12
- strict_1.default.equal(group.title.trim().length > 0, true);
13
- strict_1.default.equal(group.options.length > 0, true);
14
- for (const option of group.options) {
15
- strict_1.default.equal(option.title.trim().length > 0, true);
16
- strict_1.default.equal(option.prompt.trim().length > 0, true);
17
- strict_1.default.equal(option.commands.length > 0, true);
18
- }
19
- }
20
- });
21
- (0, node_test_1.default)('creator getting started content includes auth and publish workflows', () => {
22
- const combined = JSON.stringify(index_1.CREATOR_GETTING_STARTED_CONTENT);
23
- strict_1.default.match(combined, /playdrop auth login/);
24
- strict_1.default.match(combined, /playdrop project publish/);
25
- });
26
- (0, node_test_1.default)('creator faq content is grouped into sections with answers', () => {
27
- strict_1.default.equal(index_1.CREATOR_FAQ_SECTIONS.length > 0, true);
28
- for (const section of index_1.CREATOR_FAQ_SECTIONS) {
29
- strict_1.default.equal(section.title.trim().length > 0, true);
30
- strict_1.default.equal(section.items.length > 0, true);
31
- for (const item of section.items) {
32
- strict_1.default.equal(item.question.trim().length > 0, true);
33
- strict_1.default.equal(item.answer.trim().length > 0, true);
34
- }
35
- }
36
- });