@playdrop/playdrop-cli 0.5.1 → 0.5.3
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.
- package/config/client-meta.json +7 -7
- package/dist/apps/build.js +49 -6
- package/dist/apps/index.d.ts +2 -0
- package/dist/apps/index.js +2 -0
- package/dist/apps/upload.d.ts +2 -0
- package/dist/apps/upload.js +132 -28
- package/dist/assetSpecs.d.ts +16 -0
- package/dist/assetSpecs.js +263 -0
- package/dist/assets/model-artifacts.js +3 -0
- package/dist/catalogue.d.ts +57 -3
- package/dist/catalogue.js +342 -16
- package/dist/clientInfo.js +19 -3
- package/dist/commands/ads.d.ts +8 -0
- package/dist/commands/ads.js +124 -0
- package/dist/commands/boosts.d.ts +25 -0
- package/dist/commands/boosts.js +209 -0
- package/dist/commands/browse.d.ts +6 -1
- package/dist/commands/browse.js +365 -124
- package/dist/commands/captureListing.d.ts +53 -0
- package/dist/commands/captureListing.js +804 -0
- package/dist/commands/captureRemote.js +33 -0
- package/dist/commands/create.d.ts +1 -0
- package/dist/commands/create.js +183 -3
- package/dist/commands/credits.d.ts +6 -0
- package/dist/commands/credits.js +47 -1
- package/dist/commands/detail.js +38 -4
- package/dist/commands/devServer.js +10 -5
- package/dist/commands/generation.d.ts +2 -0
- package/dist/commands/generation.js +1 -0
- package/dist/commands/search.d.ts +5 -0
- package/dist/commands/search.js +139 -17
- package/dist/commands/tags.d.ts +7 -0
- package/dist/commands/tags.js +63 -0
- package/dist/commands/upload-content.d.ts +13 -3
- package/dist/commands/upload-content.js +86 -20
- package/dist/commands/upload.d.ts +2 -0
- package/dist/commands/upload.js +187 -11
- package/dist/commands/validate.js +163 -2
- package/dist/commands/versionsBrowse.js +128 -91
- package/dist/index.js +145 -3
- package/dist/refs.d.ts +2 -2
- package/dist/refs.js +13 -1
- package/dist/taskSelection.js +6 -3
- package/dist/taskUtils.d.ts +2 -2
- package/dist/taskUtils.js +1 -0
- package/dist/uploadLog.d.ts +1 -1
- package/dist/uploadLog.js +2 -2
- package/node_modules/@playdrop/ai-client/package.json +1 -1
- package/node_modules/@playdrop/api-client/dist/client.d.ts +131 -10
- package/node_modules/@playdrop/api-client/dist/client.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/client.js +6 -0
- package/node_modules/@playdrop/api-client/dist/domains/admin.d.ts +9 -1
- package/node_modules/@playdrop/api-client/dist/domains/admin.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/admin.js +45 -0
- package/node_modules/@playdrop/api-client/dist/domains/apps.d.ts +3 -0
- package/node_modules/@playdrop/api-client/dist/domains/apps.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/apps.js +27 -0
- package/node_modules/@playdrop/api-client/dist/domains/asset-packs.d.ts +2 -0
- package/node_modules/@playdrop/api-client/dist/domains/asset-packs.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/asset-packs.js +16 -0
- package/node_modules/@playdrop/api-client/dist/domains/assets.d.ts +44 -2
- package/node_modules/@playdrop/api-client/dist/domains/assets.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/assets.js +260 -3
- package/node_modules/@playdrop/api-client/dist/domains/payments.d.ts +17 -1
- package/node_modules/@playdrop/api-client/dist/domains/payments.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/payments.js +173 -0
- package/node_modules/@playdrop/api-client/dist/domains/search.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/search.js +39 -11
- package/node_modules/@playdrop/api-client/dist/domains/tags.d.ts +34 -0
- package/node_modules/@playdrop/api-client/dist/domains/tags.d.ts.map +1 -0
- package/node_modules/@playdrop/api-client/dist/domains/tags.js +111 -0
- package/node_modules/@playdrop/api-client/dist/index.d.ts +61 -1
- package/node_modules/@playdrop/api-client/dist/index.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/index.js +50 -0
- package/node_modules/@playdrop/api-client/package.json +1 -1
- package/node_modules/@playdrop/boxel-core/dist/test/entity-utils.test.d.ts +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/entity-utils.test.js +92 -0
- package/node_modules/@playdrop/boxel-core/dist/test/entity-utils.test.js.map +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/greedy-mesher.test.d.ts +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/greedy-mesher.test.js +48 -0
- package/node_modules/@playdrop/boxel-core/dist/test/greedy-mesher.test.js.map +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/humanoid/humanoid-builders.test.d.ts +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/humanoid/humanoid-builders.test.js +270 -0
- package/node_modules/@playdrop/boxel-core/dist/test/humanoid/humanoid-builders.test.js.map +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/index.test.d.ts +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/index.test.js +48 -0
- package/node_modules/@playdrop/boxel-core/dist/test/index.test.js.map +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/layer-mode.test.d.ts +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/layer-mode.test.js +67 -0
- package/node_modules/@playdrop/boxel-core/dist/test/layer-mode.test.js.map +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/materials.test.d.ts +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/materials.test.js +55 -0
- package/node_modules/@playdrop/boxel-core/dist/test/materials.test.js.map +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/palette-tools.test.d.ts +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/palette-tools.test.js +124 -0
- package/node_modules/@playdrop/boxel-core/dist/test/palette-tools.test.js.map +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/serialization.test.d.ts +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/serialization.test.js +35 -0
- package/node_modules/@playdrop/boxel-core/dist/test/serialization.test.js.map +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/textures.test.d.ts +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/textures.test.js +120 -0
- package/node_modules/@playdrop/boxel-core/dist/test/textures.test.js.map +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/types.test.d.ts +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/types.test.js +32 -0
- package/node_modules/@playdrop/boxel-core/dist/test/types.test.js.map +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/upscale.test.d.ts +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/upscale.test.js +100 -0
- package/node_modules/@playdrop/boxel-core/dist/test/upscale.test.js.map +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/validation.test.d.ts +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/validation.test.js +61 -0
- package/node_modules/@playdrop/boxel-core/dist/test/validation.test.js.map +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/voxels.test.d.ts +1 -0
- package/node_modules/@playdrop/boxel-core/dist/test/voxels.test.js +51 -0
- package/node_modules/@playdrop/boxel-core/dist/test/voxels.test.js.map +1 -0
- package/node_modules/@playdrop/boxel-core/package.json +1 -1
- package/node_modules/@playdrop/boxel-three/package.json +1 -1
- package/node_modules/@playdrop/config/client-meta.json +7 -7
- package/node_modules/@playdrop/config/dist/src/constants.d.ts +11 -0
- package/node_modules/@playdrop/config/dist/src/constants.d.ts.map +1 -1
- package/node_modules/@playdrop/config/dist/src/constants.js +12 -1
- package/node_modules/@playdrop/config/dist/src/creator-docs.d.ts +24 -0
- package/node_modules/@playdrop/config/dist/src/creator-docs.d.ts.map +1 -0
- package/node_modules/@playdrop/config/dist/src/creator-docs.js +253 -0
- package/node_modules/@playdrop/config/dist/src/creator-faq.d.ts +17 -0
- package/node_modules/@playdrop/config/dist/src/creator-faq.d.ts.map +1 -0
- package/node_modules/@playdrop/config/dist/src/creator-faq.js +141 -0
- package/node_modules/@playdrop/config/dist/test/creator-docs.test.d.ts +2 -0
- package/node_modules/@playdrop/config/dist/test/creator-docs.test.d.ts.map +1 -0
- package/node_modules/@playdrop/config/dist/test/creator-docs.test.js +36 -0
- package/node_modules/@playdrop/config/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@playdrop/config/package.json +1 -1
- package/node_modules/@playdrop/types/dist/api.d.ts +346 -6
- package/node_modules/@playdrop/types/dist/api.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/api.js +52 -1
- package/node_modules/@playdrop/types/dist/asset-pack.d.ts +7 -1
- package/node_modules/@playdrop/types/dist/asset-pack.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/asset-spec-contract-meta-schema.json +86 -0
- package/node_modules/@playdrop/types/dist/asset-spec.d.ts +163 -0
- package/node_modules/@playdrop/types/dist/asset-spec.d.ts.map +1 -0
- package/node_modules/@playdrop/types/dist/asset-spec.js +101 -0
- package/node_modules/@playdrop/types/dist/asset.d.ts +23 -6
- package/node_modules/@playdrop/types/dist/asset.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/asset.js +4 -1
- package/node_modules/@playdrop/types/dist/graph.d.ts +4 -2
- package/node_modules/@playdrop/types/dist/graph.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/graph.js +9 -2
- package/node_modules/@playdrop/types/dist/index.d.ts +1 -0
- package/node_modules/@playdrop/types/dist/index.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/index.js +1 -0
- package/node_modules/@playdrop/types/dist/version.d.ts +13 -0
- package/node_modules/@playdrop/types/dist/version.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/version.js +21 -0
- package/node_modules/@playdrop/types/package.json +6 -1
- package/node_modules/@playdrop/vox-three/package.json +1 -1
- package/package.json +3 -1
|
@@ -0,0 +1,61 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.test.js","sourceRoot":"","sources":["../../test/validation.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,51 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voxels.test.js","sourceRoot":"","sources":["../../test/voxels.test.ts"],"names":[],"mappings":";;;;;AAAA,gEAAwC;AACxC,0DAA6B;AAC7B,gCASgB;AAEhB,MAAM,IAAI,GAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEjD,IAAA,mBAAI,EAAC,gDAAgD,EAAE,GAAG,EAAE;IAC1D,MAAM,MAAM,GAAG,IAAA,2BAAqB,EAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC/B,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,uCAAuC,EAAE,GAAG,EAAE;IACjD,MAAM,KAAK,GAAG,IAAA,2BAAqB,EAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7C,gBAAM,CAAC,KAAK,CAAC,IAAA,uBAAiB,EAAC,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,gBAAM,CAAC,KAAK,CAAC,IAAA,uBAAiB,EAAC,OAAO,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,4BAA4B,EAAE,GAAG,EAAE;IACtC,MAAM,MAAM,GAAG,IAAA,2BAAqB,EAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,IAAA,gBAAU,EAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAClD,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAA,mBAAa,EAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnE,IAAA,gBAAU,EAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAClD,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,0CAA0C,EAAE,GAAG,EAAE;IACpD,MAAM,MAAM,GAAG,IAAA,2BAAqB,EAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAa;QACzB,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,WAAW;QACjB,IAAI;QACJ,OAAO,EAAE,CAAC,kBAAkB,CAAC;QAC7B,MAAM;KACP,CAAC;IACF,IAAA,kBAAY,EAAC,QAAQ,EAAE,IAAI,CAAC,EAAE;QAC5B,KAAK,IAAI,CAAC,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IACH,gBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACvB,gBAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,uCAAuC,EAAE,GAAG,EAAE;IACjD,gBAAM,CAAC,KAAK,CAAC,IAAA,mBAAa,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,gBAAM,CAAC,KAAK,CAAC,IAAA,mBAAa,EAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACtC,gBAAM,CAAC,KAAK,CAAC,IAAA,mBAAa,EAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACvC,CAAC,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.5.
|
|
3
|
-
"build":
|
|
2
|
+
"version": "0.5.3",
|
|
3
|
+
"build": 1,
|
|
4
4
|
"platforms": {
|
|
5
5
|
"ios": {
|
|
6
6
|
"minimumVersion": "16.0"
|
|
@@ -26,19 +26,19 @@
|
|
|
26
26
|
},
|
|
27
27
|
"clients": {
|
|
28
28
|
"web": {
|
|
29
|
-
"minimumVersion": "0.5.
|
|
30
|
-
"minimumBuild":
|
|
29
|
+
"minimumVersion": "0.5.3",
|
|
30
|
+
"minimumBuild": 1
|
|
31
31
|
},
|
|
32
32
|
"admin": {
|
|
33
|
-
"minimumVersion": "0.5.
|
|
34
|
-
"minimumBuild":
|
|
33
|
+
"minimumVersion": "0.5.3",
|
|
34
|
+
"minimumBuild": 1
|
|
35
35
|
},
|
|
36
36
|
"apple": {
|
|
37
37
|
"minimumVersion": "0.3.10",
|
|
38
38
|
"minimumBuild": 1
|
|
39
39
|
},
|
|
40
40
|
"cli": {
|
|
41
|
-
"minimumVersion": "0.5.
|
|
41
|
+
"minimumVersion": "0.5.3"
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
}
|
|
@@ -11,4 +11,15 @@ export declare const ENGAGEMENT_HEADER_NAMES: {
|
|
|
11
11
|
readonly sessionId: "x-playdrop-session-id";
|
|
12
12
|
};
|
|
13
13
|
export type EngagementHeaderKey = keyof typeof ENGAGEMENT_HEADER_NAMES;
|
|
14
|
+
export declare const MAX_APP_SOURCE_BYTES: number;
|
|
15
|
+
export declare const MAX_APP_ECS_BYTES: number;
|
|
16
|
+
export declare const MAX_APP_SERVER_BYTES: number;
|
|
17
|
+
export declare const MAX_VERSION_BUNDLE_BYTES: number;
|
|
18
|
+
export declare const MAX_VERSION_ICON_BYTES: number;
|
|
19
|
+
export declare const MAX_VERSION_HERO_BYTES: number;
|
|
20
|
+
export declare const MAX_VERSION_SCREENSHOT_BYTES: number;
|
|
21
|
+
export declare const MAX_VERSION_VIDEO_BYTES: number;
|
|
22
|
+
export declare const MAX_VERSION_TOTAL_BYTES: number;
|
|
23
|
+
export declare const VALID_IMAGE_CONTENT_TYPES: readonly ["image/png"];
|
|
24
|
+
export declare const VALID_VIDEO_CONTENT_TYPES: readonly ["video/mp4"];
|
|
14
25
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB;;;;;;CAMtB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,mBAAmB,CAAC;AAE/D,eAAO,MAAM,uBAAuB;;;CAG1B,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB;;;;;;CAMtB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,mBAAmB,CAAC;AAE/D,eAAO,MAAM,uBAAuB;;;CAG1B,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,uBAAuB,CAAC;AAEvE,eAAO,MAAM,oBAAoB,QAAmB,CAAC;AACrD,eAAO,MAAM,iBAAiB,QAAa,CAAC;AAC5C,eAAO,MAAM,oBAAoB,QAAc,CAAC;AAChD,eAAO,MAAM,wBAAwB,QAAmB,CAAC;AACzD,eAAO,MAAM,sBAAsB,QAAa,CAAC;AACjD,eAAO,MAAM,sBAAsB,QAAkB,CAAC;AACtD,eAAO,MAAM,4BAA4B,QAAkB,CAAC;AAC5D,eAAO,MAAM,uBAAuB,QAAmB,CAAC;AACxD,eAAO,MAAM,uBAAuB,QAAoB,CAAC;AAEzD,eAAO,MAAM,yBAAyB,wBAAyB,CAAC;AAChE,eAAO,MAAM,yBAAyB,wBAAyB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ENGAGEMENT_HEADER_NAMES = exports.CLIENT_HEADER_NAMES = void 0;
|
|
3
|
+
exports.VALID_VIDEO_CONTENT_TYPES = exports.VALID_IMAGE_CONTENT_TYPES = exports.MAX_VERSION_TOTAL_BYTES = exports.MAX_VERSION_VIDEO_BYTES = exports.MAX_VERSION_SCREENSHOT_BYTES = exports.MAX_VERSION_HERO_BYTES = exports.MAX_VERSION_ICON_BYTES = exports.MAX_VERSION_BUNDLE_BYTES = exports.MAX_APP_SERVER_BYTES = exports.MAX_APP_ECS_BYTES = exports.MAX_APP_SOURCE_BYTES = exports.ENGAGEMENT_HEADER_NAMES = exports.CLIENT_HEADER_NAMES = void 0;
|
|
4
4
|
exports.CLIENT_HEADER_NAMES = {
|
|
5
5
|
client: 'x-playdrop-client',
|
|
6
6
|
clientVersion: 'x-playdrop-client-version',
|
|
@@ -12,3 +12,14 @@ exports.ENGAGEMENT_HEADER_NAMES = {
|
|
|
12
12
|
anonymousId: 'x-playdrop-anon-id',
|
|
13
13
|
sessionId: 'x-playdrop-session-id',
|
|
14
14
|
};
|
|
15
|
+
exports.MAX_APP_SOURCE_BYTES = 50 * 1024 * 1024;
|
|
16
|
+
exports.MAX_APP_ECS_BYTES = 512 * 1024;
|
|
17
|
+
exports.MAX_APP_SERVER_BYTES = 1024 * 1024;
|
|
18
|
+
exports.MAX_VERSION_BUNDLE_BYTES = 50 * 1024 * 1024;
|
|
19
|
+
exports.MAX_VERSION_ICON_BYTES = 512 * 1024;
|
|
20
|
+
exports.MAX_VERSION_HERO_BYTES = 2 * 1024 * 1024;
|
|
21
|
+
exports.MAX_VERSION_SCREENSHOT_BYTES = 2 * 1024 * 1024;
|
|
22
|
+
exports.MAX_VERSION_VIDEO_BYTES = 50 * 1024 * 1024;
|
|
23
|
+
exports.MAX_VERSION_TOTAL_BYTES = 200 * 1024 * 1024;
|
|
24
|
+
exports.VALID_IMAGE_CONTENT_TYPES = ['image/png'];
|
|
25
|
+
exports.VALID_VIDEO_CONTENT_TYPES = ['video/mp4'];
|
|
@@ -0,0 +1,24 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,253 @@
|
|
|
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
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|