@playdrop/playdrop-cli 0.18.0 → 0.18.8
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 +2 -2
- package/dist/commands/devServer.d.ts +2 -1
- package/dist/commands/devServer.js +48 -1
- package/dist/commands/worker/game-source-git.d.ts +1 -0
- package/dist/commands/worker/game-source-git.js +32 -0
- package/dist/commands/worker/instrument-evidence.d.ts +1 -0
- package/dist/commands/worker/instrument-evidence.js +5 -4
- package/dist/commands/worker.js +26 -9
- package/node_modules/@playdrop/api-client/dist/acquisition.d.ts +56 -0
- package/node_modules/@playdrop/api-client/dist/acquisition.d.ts.map +1 -0
- package/node_modules/@playdrop/api-client/dist/acquisition.js +319 -0
- package/node_modules/@playdrop/api-client/dist/attribution.d.ts +3 -0
- package/node_modules/@playdrop/api-client/dist/attribution.d.ts.map +1 -0
- package/node_modules/@playdrop/api-client/dist/attribution.js +30 -0
- package/node_modules/@playdrop/api-client/dist/browser-request.d.ts +23 -0
- package/node_modules/@playdrop/api-client/dist/browser-request.d.ts.map +1 -0
- package/node_modules/@playdrop/api-client/dist/browser-request.js +127 -0
- package/node_modules/@playdrop/api-client/dist/chat.d.ts +25 -0
- package/node_modules/@playdrop/api-client/dist/chat.d.ts.map +1 -0
- package/node_modules/@playdrop/api-client/dist/chat.js +60 -0
- package/node_modules/@playdrop/api-client/dist/creator-studio-assets.d.ts +9 -0
- package/node_modules/@playdrop/api-client/dist/creator-studio-assets.d.ts.map +1 -0
- package/node_modules/@playdrop/api-client/dist/creator-studio-assets.js +68 -0
- package/node_modules/@playdrop/api-client/dist/creator-studio-marketing.d.ts +5 -0
- package/node_modules/@playdrop/api-client/dist/creator-studio-marketing.d.ts.map +1 -0
- package/node_modules/@playdrop/api-client/dist/creator-studio-marketing.js +81 -0
- package/node_modules/@playdrop/api-client/dist/creator-studio-shell.d.ts +23 -0
- package/node_modules/@playdrop/api-client/dist/creator-studio-shell.d.ts.map +1 -0
- package/node_modules/@playdrop/api-client/dist/creator-studio-shell.js +100 -0
- package/node_modules/@playdrop/api-client/dist/creator-studio.d.ts +21 -0
- package/node_modules/@playdrop/api-client/dist/creator-studio.d.ts.map +1 -0
- package/node_modules/@playdrop/api-client/dist/creator-studio.js +191 -0
- package/node_modules/@playdrop/api-client/dist/index.d.ts +1 -1
- package/node_modules/@playdrop/api-client/dist/index.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/web-push.d.ts +6 -0
- package/node_modules/@playdrop/api-client/dist/web-push.d.ts.map +1 -0
- package/node_modules/@playdrop/api-client/dist/web-push.js +66 -0
- package/node_modules/@playdrop/api-client/package.json +49 -0
- package/node_modules/@playdrop/config/client-meta.json +2 -2
- package/node_modules/@playdrop/config/dist/test/validateClientEnvironment.test.js +2 -2
- package/node_modules/@playdrop/config/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@playdrop/game-source-git/dist/src/git.d.ts +1 -0
- package/node_modules/@playdrop/game-source-git/dist/src/git.d.ts.map +1 -1
- package/node_modules/@playdrop/game-source-git/dist/src/git.js +12 -2
- package/node_modules/@playdrop/game-source-git/dist/src/repository.js +2 -2
- package/node_modules/@playdrop/game-source-git/dist/test/core.test.js +16 -0
- package/node_modules/@playdrop/game-source-git/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@playdrop/types/dist/agent-task-classification.d.ts +47 -113
- package/node_modules/@playdrop/types/dist/agent-task-classification.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/agent-task-classification.js +25 -43
- package/node_modules/@playdrop/types/dist/api.d.ts +2 -2
- package/node_modules/@playdrop/types/dist/api.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/api.js +0 -1
- package/node_modules/@playdrop/types/dist/instrument-evidence.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/instrument-evidence.js +14 -1
- package/node_modules/@playdrop/types/dist/version.d.ts +10 -0
- package/node_modules/@playdrop/types/dist/version.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/version.js +18 -0
- package/package.json +1 -1
package/config/client-meta.json
CHANGED
|
@@ -44,7 +44,8 @@ export declare function buildLocalDevAppUrl(input: {
|
|
|
44
44
|
}): string;
|
|
45
45
|
export declare function terminateChildProcessTree(child: ChildProcess | null, timeoutMs?: number): Promise<void>;
|
|
46
46
|
export declare function ensureDevRouterRunning(port?: number): Promise<void>;
|
|
47
|
-
export declare function
|
|
47
|
+
export declare function stopLegacyWorkerDevRouters(ports: readonly number[]): Promise<number>;
|
|
48
|
+
export declare function startOwnedDevRouter(port: number, ownerPid?: number): Promise<ChildProcess>;
|
|
48
49
|
export declare function resolveDevRouterWorkingDirectory(cliEntrypoint: string): string;
|
|
49
50
|
export declare function updateMountedDevRuntimeAssetManifest(input: {
|
|
50
51
|
creatorUsername: string;
|
|
@@ -8,6 +8,7 @@ exports.parseMountConflictError = parseMountConflictError;
|
|
|
8
8
|
exports.buildLocalDevAppUrl = buildLocalDevAppUrl;
|
|
9
9
|
exports.terminateChildProcessTree = terminateChildProcessTree;
|
|
10
10
|
exports.ensureDevRouterRunning = ensureDevRouterRunning;
|
|
11
|
+
exports.stopLegacyWorkerDevRouters = stopLegacyWorkerDevRouters;
|
|
11
12
|
exports.startOwnedDevRouter = startOwnedDevRouter;
|
|
12
13
|
exports.resolveDevRouterWorkingDirectory = resolveDevRouterWorkingDirectory;
|
|
13
14
|
exports.updateMountedDevRuntimeAssetManifest = updateMountedDevRuntimeAssetManifest;
|
|
@@ -546,9 +547,47 @@ async function ensureDevRouterRunning(port = exports.DEV_ROUTER_PORT) {
|
|
|
546
547
|
}
|
|
547
548
|
await startOwnedDevRouter(port);
|
|
548
549
|
}
|
|
550
|
+
// Managed Mac workers call this with their reserved slots before advertising
|
|
551
|
+
// readiness. The previous supervisor has drained, so its detached routers can
|
|
552
|
+
// be retired without touching another application's listener.
|
|
553
|
+
async function stopLegacyWorkerDevRouters(ports) {
|
|
554
|
+
const routers = new Set();
|
|
555
|
+
for (const port of ports) {
|
|
556
|
+
const listeners = (0, node_child_process_1.spawnSync)("/usr/sbin/lsof", ["-nP", "-a", `-iTCP:${port}`, "-sTCP:LISTEN", "-Fp"], { encoding: "utf8" });
|
|
557
|
+
if (listeners.status === 1 && !listeners.stdout.trim() && !listeners.stderr.trim())
|
|
558
|
+
continue;
|
|
559
|
+
if (listeners.error || listeners.status !== 0)
|
|
560
|
+
throw new Error(`worker_dev_router_inspection_failed:port_${port}`);
|
|
561
|
+
for (const line of listeners.stdout.trim().split("\n")) {
|
|
562
|
+
if (!line.startsWith("p"))
|
|
563
|
+
continue;
|
|
564
|
+
const pid = Number(line.slice(1));
|
|
565
|
+
const processInfo = (0, node_child_process_1.spawnSync)("/bin/ps", ["-p", String(pid), "-o", "uid=,pgid=,command="], { encoding: "utf8" });
|
|
566
|
+
const match = /^\s*(\d+)\s+(\d+)\s+(.+)$/u.exec(processInfo.stdout.trim());
|
|
567
|
+
if (!Number.isSafeInteger(pid) || pid <= 0 || pid === process.pid || !match ||
|
|
568
|
+
Number(match[1]) !== process.getuid?.() ||
|
|
569
|
+
Number(match[2]) !== pid ||
|
|
570
|
+
!/\sproject\s+_dev-router\s+serve(?:\s|$)/u.test(match[3]))
|
|
571
|
+
throw new Error(`worker_dev_router_port_occupied:port_${port}`);
|
|
572
|
+
routers.add(pid);
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
await Promise.all([...routers].map(async (pid) => {
|
|
576
|
+
signalProcess(pid, "SIGTERM", true);
|
|
577
|
+
if (!await waitForProcessGroupExit(pid, 2000)) {
|
|
578
|
+
signalProcess(pid, "SIGKILL", true);
|
|
579
|
+
if (!await waitForProcessGroupExit(pid, 2000))
|
|
580
|
+
throw new Error(`worker_dev_router_stop_failed:pid_${pid}`);
|
|
581
|
+
}
|
|
582
|
+
}));
|
|
583
|
+
return routers.size;
|
|
584
|
+
}
|
|
549
585
|
// Publication checks retain this handle and stop only their own router.
|
|
550
586
|
// Ordinary project dev intentionally keeps its shared router running.
|
|
551
|
-
async function startOwnedDevRouter(port) {
|
|
587
|
+
async function startOwnedDevRouter(port, ownerPid) {
|
|
588
|
+
if (ownerPid !== undefined && (!Number.isSafeInteger(ownerPid) || ownerPid <= 0)) {
|
|
589
|
+
throw new Error("invalid_dev_router_owner_pid");
|
|
590
|
+
}
|
|
552
591
|
if (await fetchRouterHealth(port))
|
|
553
592
|
throw new Error(`publishing_dev_router_port_in_use:${port}`);
|
|
554
593
|
const cliEntrypoint = getCliEntrypointPath();
|
|
@@ -561,6 +600,7 @@ async function startOwnedDevRouter(port) {
|
|
|
561
600
|
env: {
|
|
562
601
|
...childEnv,
|
|
563
602
|
PLAYDROP_DEV_ROUTER_PORT: String(port),
|
|
603
|
+
...(ownerPid === undefined ? {} : { PLAYDROP_DEV_ROUTER_OWNER_PID: String(ownerPid) }),
|
|
564
604
|
},
|
|
565
605
|
});
|
|
566
606
|
child.unref();
|
|
@@ -1189,6 +1229,13 @@ async function listenDevRouterServer(server, port = exports.DEV_ROUTER_PORT) {
|
|
|
1189
1229
|
async function runDevRouterServer(port = Number(process.env.PLAYDROP_DEV_ROUTER_PORT) || exports.DEV_ROUTER_PORT) {
|
|
1190
1230
|
const server = createDevRouterServer(port);
|
|
1191
1231
|
await listenDevRouterServer(server, port);
|
|
1232
|
+
const ownerPid = Number(process.env.PLAYDROP_DEV_ROUTER_OWNER_PID);
|
|
1233
|
+
if (Number.isSafeInteger(ownerPid) && ownerPid > 0) {
|
|
1234
|
+
setInterval(() => {
|
|
1235
|
+
if (!isPidAlive(ownerPid))
|
|
1236
|
+
process.exit(0);
|
|
1237
|
+
}, 1000).unref();
|
|
1238
|
+
}
|
|
1192
1239
|
await new Promise(() => {
|
|
1193
1240
|
// Keep the router alive until the process exits.
|
|
1194
1241
|
});
|
|
@@ -66,6 +66,7 @@ export declare function setupGameSourceWorkspace(input: {
|
|
|
66
66
|
leaseToken: string;
|
|
67
67
|
}): Promise<GameSourceWorkspace>;
|
|
68
68
|
export declare function fingerprintGameSourcePublication(projectDir: string, includeServerOutput?: boolean): Promise<string>;
|
|
69
|
+
export declare function preflightGameSourceWorkspace(projectDir: string): Promise<void>;
|
|
69
70
|
export declare function checkpointFailedGameSourceWorkspace(input: {
|
|
70
71
|
workspace: GameSourceWorkspace;
|
|
71
72
|
taskId: number;
|
|
@@ -7,6 +7,7 @@ exports.emitGameSourceWorkerEvent = emitGameSourceWorkerEvent;
|
|
|
7
7
|
exports.materializeCurrentLock = materializeCurrentLock;
|
|
8
8
|
exports.setupGameSourceWorkspace = setupGameSourceWorkspace;
|
|
9
9
|
exports.fingerprintGameSourcePublication = fingerprintGameSourcePublication;
|
|
10
|
+
exports.preflightGameSourceWorkspace = preflightGameSourceWorkspace;
|
|
10
11
|
exports.checkpointFailedGameSourceWorkspace = checkpointFailedGameSourceWorkspace;
|
|
11
12
|
exports.reconcileGameSourceWorkspace = reconcileGameSourceWorkspace;
|
|
12
13
|
exports.finalizeGameSourceRepository = finalizeGameSourceRepository;
|
|
@@ -557,6 +558,37 @@ async function stageGameSourceCommit(input) {
|
|
|
557
558
|
}
|
|
558
559
|
return { lock, materials };
|
|
559
560
|
}
|
|
561
|
+
// Mirror the files left by staging without changing the index, source files,
|
|
562
|
+
// managed ignore block, or task refs. In particular, tracked build directories
|
|
563
|
+
// skipped by walkFiles survive `git add -u` and would fail the outgoing scan.
|
|
564
|
+
async function preflightGameSourceWorkspace(projectDir) {
|
|
565
|
+
const candidates = new Map();
|
|
566
|
+
const tracked = (await git.run(["ls-files", "--stage", "-z"], projectDir)).toString("utf8");
|
|
567
|
+
for (const entry of tracked.split("\0").filter(Boolean)) {
|
|
568
|
+
const tab = entry.indexOf("\t");
|
|
569
|
+
const filePath = entry.slice(tab + 1);
|
|
570
|
+
if (entry.startsWith("160000 "))
|
|
571
|
+
throw new Error(`game_source_gitlink_rejected:${filePath}`);
|
|
572
|
+
const absolute = node_path_1.default.join(projectDir, filePath);
|
|
573
|
+
if ((0, node_fs_1.existsSync)(absolute))
|
|
574
|
+
candidates.set(filePath, await (0, promises_1.readFile)(absolute));
|
|
575
|
+
}
|
|
576
|
+
for (const absolute of await walkFiles(projectDir)) {
|
|
577
|
+
const relative = normalizeRelativePath(projectDir, absolute);
|
|
578
|
+
const content = await (0, promises_1.readFile)(absolute);
|
|
579
|
+
if ((0, game_source_git_1.classifyGameSourceFile)(relative, content) === "git")
|
|
580
|
+
candidates.set(relative, content);
|
|
581
|
+
else
|
|
582
|
+
candidates.delete(relative);
|
|
583
|
+
}
|
|
584
|
+
const ignorePath = node_path_1.default.join(projectDir, ".gitignore");
|
|
585
|
+
const existingIgnore = (0, node_fs_1.existsSync)(ignorePath) ? await (0, promises_1.readFile)(ignorePath, "utf8") : "";
|
|
586
|
+
candidates.set(".gitignore", Buffer.from((0, game_source_git_1.updateManagedGitignore)(existingIgnore)));
|
|
587
|
+
// Reconciliation regenerates this file from the material inventory.
|
|
588
|
+
candidates.delete(game_source_git_1.GAME_SOURCE_LOCK_PATH);
|
|
589
|
+
for (const [filePath, content] of candidates)
|
|
590
|
+
(0, game_source_git_1.validateGameSourceGitBlob)(filePath, content);
|
|
591
|
+
}
|
|
560
592
|
async function checkpointFailedGameSourceWorkspace(input) {
|
|
561
593
|
const branch = (await git.run(["symbolic-ref", "--short", "HEAD"], input.workspace.projectDir))
|
|
562
594
|
.toString("utf8")
|
|
@@ -4,6 +4,7 @@ export declare function createWorkerInstrumentScreenshotCollector(workspaceDir:
|
|
|
4
4
|
push: (chunk: string) => number;
|
|
5
5
|
finish: () => number;
|
|
6
6
|
};
|
|
7
|
+
export declare function resolveInstrumentEvidenceDir(workspaceDir: string, evidenceDir: string): string;
|
|
7
8
|
export declare function saveInstrumentEvidenceCapture(input: {
|
|
8
9
|
workspaceDir: string;
|
|
9
10
|
evidenceDir: string;
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.INSTRUMENT_EVIDENCE_MANIFEST_FILE = void 0;
|
|
7
7
|
exports.createWorkerInstrumentScreenshotCollector = createWorkerInstrumentScreenshotCollector;
|
|
8
|
+
exports.resolveInstrumentEvidenceDir = resolveInstrumentEvidenceDir;
|
|
8
9
|
exports.saveInstrumentEvidenceCapture = saveInstrumentEvidenceCapture;
|
|
9
10
|
exports.readAndValidateInstrumentEvidenceManifest = readAndValidateInstrumentEvidenceManifest;
|
|
10
11
|
const types_1 = require("@playdrop/types");
|
|
@@ -142,9 +143,9 @@ function normalizeGroupId(value) {
|
|
|
142
143
|
}
|
|
143
144
|
return normalized;
|
|
144
145
|
}
|
|
145
|
-
function
|
|
146
|
+
function resolveInstrumentEvidenceDir(workspaceDir, evidenceDir) {
|
|
146
147
|
const resolvedWorkspace = node_path_1.default.resolve(workspaceDir);
|
|
147
|
-
const resolvedEvidenceDir = node_path_1.default.resolve(evidenceDir);
|
|
148
|
+
const resolvedEvidenceDir = node_path_1.default.resolve(resolvedWorkspace, evidenceDir);
|
|
148
149
|
if (!isPathInside(resolvedWorkspace, resolvedEvidenceDir)) {
|
|
149
150
|
throw new Error("instrument_evidence_dir_outside_workspace");
|
|
150
151
|
}
|
|
@@ -169,7 +170,7 @@ async function saveInstrumentEvidenceCapture(input) {
|
|
|
169
170
|
if (!screenshot) {
|
|
170
171
|
throw new Error(`instrument_screenshot_not_found:${screenshotId}`);
|
|
171
172
|
}
|
|
172
|
-
const evidenceDir =
|
|
173
|
+
const evidenceDir = resolveInstrumentEvidenceDir(input.workspaceDir, input.evidenceDir);
|
|
173
174
|
(0, node_fs_1.mkdirSync)(evidenceDir, { recursive: true });
|
|
174
175
|
const existing = readManifestIfPresent(evidenceDir);
|
|
175
176
|
if (existing && existing.groupId !== groupId) {
|
|
@@ -242,7 +243,7 @@ function normalizeCapture(value, name) {
|
|
|
242
243
|
};
|
|
243
244
|
}
|
|
244
245
|
function readAndValidateInstrumentEvidenceManifest(input) {
|
|
245
|
-
const evidenceDir =
|
|
246
|
+
const evidenceDir = resolveInstrumentEvidenceDir(input.workspaceDir, input.evidenceDir);
|
|
246
247
|
const parsed = readManifestIfPresent(evidenceDir);
|
|
247
248
|
if (!parsed || parsed.version !== 1) {
|
|
248
249
|
throw new Error("missing_instrument_evidence_manifest");
|
package/dist/commands/worker.js
CHANGED
|
@@ -145,6 +145,7 @@ const taskSelection_1 = require("../taskSelection");
|
|
|
145
145
|
const review_1 = require("./review");
|
|
146
146
|
const upload_1 = require("./upload");
|
|
147
147
|
const staticHtml_1 = require("../apps/staticHtml");
|
|
148
|
+
const devServer_1 = require("./devServer");
|
|
148
149
|
const runtime_1 = require("./worker/runtime");
|
|
149
150
|
const instrument_evidence_1 = require("./worker/instrument-evidence");
|
|
150
151
|
const provider_telemetry_1 = require("./worker/provider-telemetry");
|
|
@@ -5626,6 +5627,11 @@ async function startWorker(options = {}) {
|
|
|
5626
5627
|
const activeTerminators = new Map();
|
|
5627
5628
|
const activeDevPorts = new Set();
|
|
5628
5629
|
const workerDevPortBase = (0, runtime_1.readPositiveEnvInt)("PLAYDROP_WORKER_DEV_PORT_BASE", DEFAULT_WORKER_DEV_PORT_BASE);
|
|
5630
|
+
if (target === "FIRST_PARTY" && node_process_1.default.platform === "darwin" && node_process_1.default.env.PLAYDROP_WORKER_WRAPPER_CONTRACT_VERSION) {
|
|
5631
|
+
const stopped = await (0, devServer_1.stopLegacyWorkerDevRouters)(Array.from({ length: maxParallelTasks }, (_, index) => workerDevPortBase + index));
|
|
5632
|
+
if (stopped)
|
|
5633
|
+
console.log(`Stopped ${stopped} detached dev routers before worker readiness.`);
|
|
5634
|
+
}
|
|
5629
5635
|
let sessionExpired = false;
|
|
5630
5636
|
let shuttingDown = false;
|
|
5631
5637
|
let quiescingForUpdate = false;
|
|
@@ -5804,6 +5810,7 @@ async function startWorker(options = {}) {
|
|
|
5804
5810
|
let agentResult = null;
|
|
5805
5811
|
let telemetryReported = false;
|
|
5806
5812
|
let gameServerDevLease = null;
|
|
5813
|
+
let devRouter = null;
|
|
5807
5814
|
let gameSourceWorkspace = null;
|
|
5808
5815
|
let gameSourceCommandServer = null;
|
|
5809
5816
|
let gameSourcePublication = null;
|
|
@@ -6282,6 +6289,9 @@ async function startWorker(options = {}) {
|
|
|
6282
6289
|
reasoningEffort = codexModel?.reasoningEffort ?? claudeModel?.effort ?? grokModel?.reasoningEffort ?? null;
|
|
6283
6290
|
const cleanRoom = task.kind === "STATIC_GAME";
|
|
6284
6291
|
if (task.kind === "NEW_GAME" || task.kind === "REMIX_GAME" || task.kind === "GAME_UPDATE") {
|
|
6292
|
+
// This port belongs to this task until cleanup. Keeping the router
|
|
6293
|
+
// in the supervisor lifecycle prevents an old CLI surviving upgrades.
|
|
6294
|
+
devRouter = await (0, devServer_1.startOwnedDevRouter)(devPort, node_process_1.default.pid);
|
|
6285
6295
|
const managedRedisAdminUrl = node_process_1.default.env.PLAYDROP_WORKER_GAME_SERVER_REDIS_ADMIN_URL?.trim() ?? "";
|
|
6286
6296
|
const managedMongoAdminUrl = node_process_1.default.env.PLAYDROP_WORKER_GAME_SERVER_MONGO_ADMIN_URL?.trim() ?? "";
|
|
6287
6297
|
const redisAdminUrl = managedRedisAdminUrl || node_process_1.default.env.PLAYDROP_DEV_REDIS_URL?.trim() || "";
|
|
@@ -7211,6 +7221,8 @@ async function startWorker(options = {}) {
|
|
|
7211
7221
|
clearInterval(eventDrainTimer);
|
|
7212
7222
|
}
|
|
7213
7223
|
activeTerminators.delete(task.id);
|
|
7224
|
+
if (devRouter)
|
|
7225
|
+
await (0, devServer_1.terminateChildProcessTree)(devRouter);
|
|
7214
7226
|
await gameServerDevLease?.cleanup();
|
|
7215
7227
|
if (completedGameSourceGeneration && gameSourcePublication && gameSourceWorkspace) {
|
|
7216
7228
|
const publication = gameSourcePublication;
|
|
@@ -7735,6 +7747,8 @@ async function uploadTask(options = {}) {
|
|
|
7735
7747
|
token: ctx.token,
|
|
7736
7748
|
user: ctx.user,
|
|
7737
7749
|
});
|
|
7750
|
+
if (taskContext.gameSourceGit)
|
|
7751
|
+
await (0, game_source_git_1.preflightGameSourceWorkspace)(projectDir);
|
|
7738
7752
|
for (const warning of result.warnings) {
|
|
7739
7753
|
console.error(`Preflight warning: ${warning}`);
|
|
7740
7754
|
}
|
|
@@ -8049,7 +8063,7 @@ function readReviewEvidenceFiles(evidenceDir, workspaceDir = resolveTaskWorkspac
|
|
|
8049
8063
|
if (!normalizedDir) {
|
|
8050
8064
|
throw new Error("invalid_review_evidence_dir");
|
|
8051
8065
|
}
|
|
8052
|
-
const resolvedDir =
|
|
8066
|
+
const resolvedDir = (0, instrument_evidence_1.resolveInstrumentEvidenceDir)(workspaceDir, normalizedDir);
|
|
8053
8067
|
if (!(0, node_fs_1.existsSync)(resolvedDir)) {
|
|
8054
8068
|
throw new Error("invalid_review_evidence_dir");
|
|
8055
8069
|
}
|
|
@@ -8086,12 +8100,12 @@ function resolveReviewFilePath(filePath, code) {
|
|
|
8086
8100
|
}
|
|
8087
8101
|
return resolved;
|
|
8088
8102
|
}
|
|
8089
|
-
function resolveReviewEvidenceDir(evidenceDir) {
|
|
8103
|
+
function resolveReviewEvidenceDir(evidenceDir, workspaceDir) {
|
|
8090
8104
|
const normalizedDir = typeof evidenceDir === "string" ? evidenceDir.trim() : "";
|
|
8091
8105
|
if (!normalizedDir) {
|
|
8092
8106
|
throw new Error("invalid_review_evidence_dir");
|
|
8093
8107
|
}
|
|
8094
|
-
const resolved =
|
|
8108
|
+
const resolved = (0, instrument_evidence_1.resolveInstrumentEvidenceDir)(workspaceDir, normalizedDir);
|
|
8095
8109
|
if (!(0, node_fs_1.existsSync)(resolved)) {
|
|
8096
8110
|
throw new Error("invalid_review_evidence_dir");
|
|
8097
8111
|
}
|
|
@@ -8106,7 +8120,7 @@ async function submitReviewTask(options) {
|
|
|
8106
8120
|
const state = (0, review_1.normalizeTerminalReviewState)(options.state);
|
|
8107
8121
|
const reviewMessageFile = resolveReviewFilePath(options.messageFile, "invalid_review_message_file");
|
|
8108
8122
|
const creatorFeedbackFile = resolveReviewFilePath(options.creatorFeedbackFile, "invalid_creator_feedback_file");
|
|
8109
|
-
const evidenceDir = resolveReviewEvidenceDir(options.evidenceDir);
|
|
8123
|
+
const evidenceDir = resolveReviewEvidenceDir(options.evidenceDir, workspaceDir);
|
|
8110
8124
|
const reviewMessage = readRequiredTextFile(reviewMessageFile, "invalid_review_message_file");
|
|
8111
8125
|
const creatorFeedback = readOptionalTextFile(creatorFeedbackFile);
|
|
8112
8126
|
const platformFeedback = readPlatformFeedbackFile(options.platformFeedbackFile, workspaceDir);
|
|
@@ -8169,7 +8183,8 @@ async function submitEvalTask(options) {
|
|
|
8169
8183
|
const evidenceFiles = [];
|
|
8170
8184
|
const groupIds = new Set();
|
|
8171
8185
|
for (const evidenceDir of evidenceDirs) {
|
|
8172
|
-
const
|
|
8186
|
+
const resolvedEvidenceDir = (0, instrument_evidence_1.resolveInstrumentEvidenceDir)(workspaceDir, evidenceDir);
|
|
8187
|
+
const manifest = (0, instrument_evidence_1.readAndValidateInstrumentEvidenceManifest)({ workspaceDir, evidenceDir: resolvedEvidenceDir });
|
|
8173
8188
|
if (groupIds.has(manifest.groupId)) {
|
|
8174
8189
|
throw new Error(`duplicate_instrument_evidence_group:${manifest.groupId}`);
|
|
8175
8190
|
}
|
|
@@ -8180,7 +8195,7 @@ async function submitEvalTask(options) {
|
|
|
8180
8195
|
if (!capture) {
|
|
8181
8196
|
continue;
|
|
8182
8197
|
}
|
|
8183
|
-
const filePath = node_path_1.default.join(
|
|
8198
|
+
const filePath = node_path_1.default.join(resolvedEvidenceDir, capture.fileName);
|
|
8184
8199
|
evidenceFiles.push({
|
|
8185
8200
|
groupId: manifest.groupId,
|
|
8186
8201
|
name: capture.fileName,
|
|
@@ -8214,14 +8229,16 @@ async function saveTaskEvidence(options) {
|
|
|
8214
8229
|
if (!evidenceDir || !name || !groupId) {
|
|
8215
8230
|
throw new Error("task_evidence_options_required");
|
|
8216
8231
|
}
|
|
8232
|
+
const workspaceDir = resolveTaskWorkspaceDir();
|
|
8233
|
+
const resolvedEvidenceDir = (0, instrument_evidence_1.resolveInstrumentEvidenceDir)(workspaceDir, evidenceDir);
|
|
8217
8234
|
const capture = await (0, instrument_evidence_1.saveInstrumentEvidenceCapture)({
|
|
8218
|
-
workspaceDir
|
|
8219
|
-
evidenceDir,
|
|
8235
|
+
workspaceDir,
|
|
8236
|
+
evidenceDir: resolvedEvidenceDir,
|
|
8220
8237
|
groupId,
|
|
8221
8238
|
name,
|
|
8222
8239
|
...(screenshotId ? { screenshotId } : {}),
|
|
8223
8240
|
});
|
|
8224
|
-
(0, output_1.printSuccess)(`Saved ${capture.name} evidence from screenshot ${capture.screenshotId} to ${capture.fileName}.`);
|
|
8241
|
+
(0, output_1.printSuccess)(`Saved ${capture.name} evidence from screenshot ${capture.screenshotId} to ${node_path_1.default.join(resolvedEvidenceDir, capture.fileName)}.`);
|
|
8225
8242
|
}
|
|
8226
8243
|
const INSTRUMENT_ERROR_REASONS = new Set(["auth_state", "browser_control", "renderer", "screenshot"]);
|
|
8227
8244
|
async function instrumentErrorTask(options) {
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { AgentTaskCreatorFeedbackStatus, AppAuthMode, AppDetailRequest, AppDetailResponse, AppVersionDetailResponse, AppVersionVisibility, ContentCommentsResponse, ContentLicense, ContentRemixRelationsResponse, CreateCommentReportRequest, CreateContentCommentRequest, CreateContentCommentResponse, CreateContentReportRequest, CreateCreatorReportRequest, CreatorBlockMutationResponse, CreatorFollowMutationResponse, CreatorGameCreatorFeedbackStatusResponse, CreatorGamesListResponse, CreatorGameStatusResponse, DeleteContentCommentResponse, DislikedItemMutationResponse, GetLeaderboardResponse, LeaderboardEntry, LikedItemMutationResponse, ListAchievementsResponse, ListLeaderboardsResponse, ModerationReportResponse, SavedItemKind, SavedItemMutationResponse, SocialFriend, TrackEngagementEventRequest, TrackEngagementEventResponse, UpdateVersionResponse } from "@playdrop/types";
|
|
2
|
+
export declare function fetchAppDetail(creatorUsername: string, appName: string, options?: AppDetailRequest): Promise<AppDetailResponse>;
|
|
3
|
+
export declare function fetchUserByUsername(username: string): Promise<import("@playdrop/types").PublicUser>;
|
|
4
|
+
export declare function fetchAssetBySlug(creatorUsername: string, assetName: string): Promise<import("@playdrop/types").AssetResponse>;
|
|
5
|
+
export declare function fetchAssetRelated(creatorUsername: string, assetName: string): Promise<ContentRemixRelationsResponse>;
|
|
6
|
+
export declare function getPlatformGameFriends(appId: number): Promise<SocialFriend[]>;
|
|
7
|
+
export declare function listAchievements(appId: number, options?: {
|
|
8
|
+
includeHiddenDefinitions?: boolean;
|
|
9
|
+
includeRetired?: boolean;
|
|
10
|
+
}): Promise<ListAchievementsResponse>;
|
|
11
|
+
export declare function listLeaderboards(appId: number, options?: {
|
|
12
|
+
includeRetired?: boolean;
|
|
13
|
+
}): Promise<ListLeaderboardsResponse>;
|
|
14
|
+
export declare function getLeaderboard(appId: number, key: string, options?: {
|
|
15
|
+
top?: number;
|
|
16
|
+
aroundMe?: number;
|
|
17
|
+
includeRetired?: boolean;
|
|
18
|
+
}): Promise<GetLeaderboardResponse>;
|
|
19
|
+
export declare function getFriendLeaderboardEntries(appId: number, key: string): Promise<LeaderboardEntry[]>;
|
|
20
|
+
export declare function getAppVersion(creatorUsername: string, appName: string, version: string): Promise<AppVersionDetailResponse>;
|
|
21
|
+
export declare function updateAppVersion(creatorUsername: string, appName: string, version: string, updates: {
|
|
22
|
+
releaseNotes?: string | null;
|
|
23
|
+
visibility?: AppVersionVisibility;
|
|
24
|
+
authMode?: AppAuthMode;
|
|
25
|
+
license?: ContentLicense;
|
|
26
|
+
setAsCurrent?: boolean;
|
|
27
|
+
}): Promise<UpdateVersionResponse>;
|
|
28
|
+
export declare function getCreatorGameStatus(gameRef: string): Promise<CreatorGameStatusResponse>;
|
|
29
|
+
export declare function listCreatorGames(options?: {
|
|
30
|
+
limit?: number;
|
|
31
|
+
offset?: number;
|
|
32
|
+
signal?: AbortSignal;
|
|
33
|
+
}): Promise<CreatorGamesListResponse>;
|
|
34
|
+
export declare function updateCreatorGameFeedbackStatus(gameRef: string, appVersionId: number, creatorFeedbackStatus: AgentTaskCreatorFeedbackStatus, comment?: string): Promise<CreatorGameCreatorFeedbackStatusResponse>;
|
|
35
|
+
export declare function trackEngagementEvent(payload: TrackEngagementEventRequest): Promise<TrackEngagementEventResponse>;
|
|
36
|
+
export declare function saveItem(kind: SavedItemKind, creatorUsername: string, itemName: string): Promise<SavedItemMutationResponse>;
|
|
37
|
+
export declare function unsaveItem(kind: SavedItemKind, creatorUsername: string, itemName: string): Promise<SavedItemMutationResponse>;
|
|
38
|
+
export declare function likeItem(kind: SavedItemKind, creatorUsername: string, itemName: string): Promise<LikedItemMutationResponse>;
|
|
39
|
+
export declare function unlikeItem(kind: SavedItemKind, creatorUsername: string, itemName: string): Promise<LikedItemMutationResponse>;
|
|
40
|
+
export declare function dislikeItem(kind: SavedItemKind, creatorUsername: string, itemName: string): Promise<DislikedItemMutationResponse>;
|
|
41
|
+
export declare function undislikeItem(kind: SavedItemKind, creatorUsername: string, itemName: string): Promise<DislikedItemMutationResponse>;
|
|
42
|
+
export declare function reportContent(kind: SavedItemKind, creatorUsername: string, itemName: string, report: CreateContentReportRequest): Promise<ModerationReportResponse>;
|
|
43
|
+
export declare function reportCreator(creatorUsername: string, report: CreateCreatorReportRequest): Promise<ModerationReportResponse>;
|
|
44
|
+
export declare function followCreator(creatorUsername: string): Promise<CreatorFollowMutationResponse>;
|
|
45
|
+
export declare function unfollowCreator(creatorUsername: string): Promise<CreatorFollowMutationResponse>;
|
|
46
|
+
export declare function blockCreator(creatorUsername: string): Promise<CreatorBlockMutationResponse>;
|
|
47
|
+
export declare function unblockCreator(creatorUsername: string): Promise<CreatorBlockMutationResponse>;
|
|
48
|
+
export declare function fetchContentComments(kind: SavedItemKind, creatorUsername: string, itemName: string): Promise<ContentCommentsResponse>;
|
|
49
|
+
export declare function createContentComment(kind: SavedItemKind, creatorUsername: string, itemName: string, body: CreateContentCommentRequest): Promise<CreateContentCommentResponse>;
|
|
50
|
+
export declare function likeContentComment(commentId: number): Promise<LikedItemMutationResponse>;
|
|
51
|
+
export declare function unlikeContentComment(commentId: number): Promise<LikedItemMutationResponse>;
|
|
52
|
+
export declare function dislikeContentComment(commentId: number): Promise<DislikedItemMutationResponse>;
|
|
53
|
+
export declare function undislikeContentComment(commentId: number): Promise<DislikedItemMutationResponse>;
|
|
54
|
+
export declare function reportComment(commentId: number, report: CreateCommentReportRequest): Promise<ModerationReportResponse>;
|
|
55
|
+
export declare function deleteContentComment(commentId: number): Promise<DeleteContentCommentResponse>;
|
|
56
|
+
//# sourceMappingURL=acquisition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acquisition.d.ts","sourceRoot":"","sources":["../src/acquisition.ts"],"names":[],"mappings":"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"}
|