@bitmagic/cli 0.1.52-dev.0 → 0.1.52-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/browser-gl.d.ts +46 -8
- package/dist/browser-gl.js +54 -26
- package/dist/browser-gl.js.map +1 -1
- package/dist/cli.d.ts +18 -0
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/forge.d.ts +5 -0
- package/dist/commands/forge.js +10 -1
- package/dist/commands/forge.js.map +1 -1
- package/dist/commands/init.js +19 -12
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/judge.d.ts +41 -0
- package/dist/commands/judge.js +209 -0
- package/dist/commands/judge.js.map +1 -0
- package/dist/commands/reset-account.js +2 -8
- package/dist/commands/reset-account.js.map +1 -1
- package/dist/commands/verify.js +3 -3
- package/dist/commands/verify.js.map +1 -1
- package/dist/judge/facts.d.ts +18 -0
- package/dist/judge/facts.js +165 -0
- package/dist/judge/facts.js.map +1 -0
- package/dist/judge/record.d.ts +16 -0
- package/dist/judge/record.js +55 -0
- package/dist/judge/record.js.map +1 -0
- package/dist/judge/stream.d.ts +36 -0
- package/dist/judge/stream.js +122 -0
- package/dist/judge/stream.js.map +1 -0
- package/dist/project/jobs.d.ts +1 -1
- package/dist/scaffold/project-files.d.ts +8 -0
- package/dist/scaffold/project-files.js +83 -13
- package/dist/scaffold/project-files.js.map +1 -1
- package/dist/scaffold/project.js +2 -1
- package/dist/scaffold/project.js.map +1 -1
- package/dist/verify/browser.d.ts +11 -6
- package/dist/verify/browser.js +31 -15
- package/dist/verify/browser.js.map +1 -1
- package/dist/verify/iterate.js +3 -3
- package/dist/verify/iterate.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `bitmagic judge` — a second pair of eyes on the running game.
|
|
3
|
+
*
|
|
4
|
+
* The builder must not grade its own work: this command sends the screenshot
|
|
5
|
+
* `bitmagic verify` already captured, plus a rubric composed from
|
|
6
|
+
* GAME-DESIGN.md and an optional genre hint, to one bounded vision call on the
|
|
7
|
+
* server's light model, and prints a scorecard with at most three actionable
|
|
8
|
+
* findings. It is deliberately cheap and deliberately explicit — run it after
|
|
9
|
+
* a milestone, fix the top findings, run it once more, then move on.
|
|
10
|
+
*
|
|
11
|
+
* It performs no browser pass of its own: the frame it judges is the one
|
|
12
|
+
* verify's black-frame and renderer checks have already vetted, which is what
|
|
13
|
+
* makes a single small vision call trustworthy. No screenshot means no run —
|
|
14
|
+
* with a message that says which command produces one.
|
|
15
|
+
*
|
|
16
|
+
* The judge informs; it does not gate. Exit is 0 whatever the score, unless
|
|
17
|
+
* `--min-score` asks for a machine-checkable bar (exit 4 when below it).
|
|
18
|
+
*/
|
|
19
|
+
import { defineCommand } from 'citty';
|
|
20
|
+
import * as fs from 'fs';
|
|
21
|
+
import * as path from 'path';
|
|
22
|
+
import { buildJudgeRubric } from '@bitmagic/asset-core';
|
|
23
|
+
import { CliError } from '../errors.js';
|
|
24
|
+
import { loadProjectContext } from '../project/context.js';
|
|
25
|
+
import { withJobRecord } from '../project/jobs.js';
|
|
26
|
+
import { resolveEnvironmentForCommand, resolveAuth0ClientId } from '../config/environments.js';
|
|
27
|
+
import { getAccessToken } from '../auth/session.js';
|
|
28
|
+
import { computeFingerprint } from '../publish/fingerprint.js';
|
|
29
|
+
import { readVerifyRecord } from '../verify/result.js';
|
|
30
|
+
import { requestJudge } from '../judge/stream.js';
|
|
31
|
+
import { buildSceneFacts, buildVerifyContext } from '../judge/facts.js';
|
|
32
|
+
import { judgeRecordPath, writeJudgeRecord } from '../judge/record.js';
|
|
33
|
+
import { GAME_DESIGN_FILE } from './cover.js';
|
|
34
|
+
import { createOutput } from '../output.js';
|
|
35
|
+
/** Where `bitmagic verify` writes its artifacts — see `commands/verify.ts`. */
|
|
36
|
+
function verifyArtifactDir(root) {
|
|
37
|
+
return path.join(root, '.bitmagic', 'verify');
|
|
38
|
+
}
|
|
39
|
+
/** How many trailing console lines reach the judge as context. */
|
|
40
|
+
const CONSOLE_TAIL_LINES = 50;
|
|
41
|
+
/**
|
|
42
|
+
* `--min-score` failing is exit 4: 1-3 and 5-7 are taken (see README's exit
|
|
43
|
+
* code table), and it needs its own code so an agent can tell "below the bar"
|
|
44
|
+
* from "the judge itself failed".
|
|
45
|
+
*/
|
|
46
|
+
export const EXIT_BELOW_MIN_SCORE = 4;
|
|
47
|
+
function parseMinScoreArg(raw) {
|
|
48
|
+
if (raw === undefined)
|
|
49
|
+
return null;
|
|
50
|
+
const value = Number(raw);
|
|
51
|
+
if (!Number.isFinite(value) || value < 1 || value > 10) {
|
|
52
|
+
throw new CliError(`--min-score must be a number from 1 to 10, got ${JSON.stringify(raw)}.`);
|
|
53
|
+
}
|
|
54
|
+
return value;
|
|
55
|
+
}
|
|
56
|
+
function readConsoleTail(artifactDir) {
|
|
57
|
+
let raw;
|
|
58
|
+
try {
|
|
59
|
+
raw = fs.readFileSync(path.join(artifactDir, 'console.log'), 'utf-8');
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
return raw.split('\n').slice(-CONSOLE_TAIL_LINES).join('\n');
|
|
65
|
+
}
|
|
66
|
+
/** GAME-DESIGN.md's content, or empty — the rubric degrades gracefully without one. */
|
|
67
|
+
function readDesignText(root) {
|
|
68
|
+
try {
|
|
69
|
+
return fs.readFileSync(path.join(root, GAME_DESIGN_FILE), 'utf-8');
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return '';
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function renderScorecard(scorecard, model, sparks, log) {
|
|
76
|
+
log(`Judge verdict: ${scorecard.overall}/10 overall (${model}, ${sparks} sparks)`);
|
|
77
|
+
for (const dimension of scorecard.dimensions) {
|
|
78
|
+
log(` ${dimension.name.padEnd(16)} ${String(dimension.score).padStart(2)}/10 — ${dimension.note}`);
|
|
79
|
+
}
|
|
80
|
+
if (scorecard.topFindings.length === 0) {
|
|
81
|
+
log('No findings — the judge had nothing actionable to point at.');
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
log('Top findings:');
|
|
85
|
+
scorecard.topFindings.forEach((finding, index) => {
|
|
86
|
+
log(` ${index + 1}. [${finding.severity}] ${finding.title}`);
|
|
87
|
+
log(` ${finding.detail}`);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
function defaultDeps(json) {
|
|
91
|
+
const output = createOutput(json);
|
|
92
|
+
return {
|
|
93
|
+
fetch: globalThis.fetch,
|
|
94
|
+
sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)),
|
|
95
|
+
log: output.info,
|
|
96
|
+
result: output.result,
|
|
97
|
+
request: requestJudge,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
export async function runJudge(args, deps = defaultDeps(args.json === true)) {
|
|
101
|
+
const context = loadProjectContext(deps.startDir);
|
|
102
|
+
const root = context.root;
|
|
103
|
+
const minScore = parseMinScoreArg(args['min-score']);
|
|
104
|
+
const genre = args.genre?.trim() || undefined;
|
|
105
|
+
const artifactDir = verifyArtifactDir(root);
|
|
106
|
+
const screenshotFile = path.join(artifactDir, 'screenshot.png');
|
|
107
|
+
let screenshot;
|
|
108
|
+
try {
|
|
109
|
+
screenshot = fs.readFileSync(screenshotFile);
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
throw new CliError(`No verify screenshot at ${screenshotFile}. The judge grades the frame \`bitmagic verify\` ` +
|
|
113
|
+
'captures, so run `bitmagic verify` first — without --fast, which skips the screenshot.');
|
|
114
|
+
}
|
|
115
|
+
// Staleness is a warning, not a refusal: judging yesterday's frame is
|
|
116
|
+
// sometimes exactly what was asked for, but it must never pass silently as
|
|
117
|
+
// a verdict on today's code.
|
|
118
|
+
const verifyRecord = readVerifyRecord(artifactDir);
|
|
119
|
+
const fingerprint = computeFingerprint(root);
|
|
120
|
+
const fingerprintStale = verifyRecord !== null && verifyRecord.fingerprint !== fingerprint;
|
|
121
|
+
if (fingerprintStale) {
|
|
122
|
+
deps.log('The project has changed since this screenshot was taken — the verdict is about the older ' +
|
|
123
|
+
'build. Re-run `bitmagic verify` first for a current one.');
|
|
124
|
+
}
|
|
125
|
+
// Re-read world.json fresh — it is shared ground with the human's editor (see AGENTS.md).
|
|
126
|
+
// Unreadable is fine: the judge grades from pixels alone, as it did before scene facts existed.
|
|
127
|
+
let sceneFacts;
|
|
128
|
+
try {
|
|
129
|
+
const world = JSON.parse(fs.readFileSync(path.join(root, 'src', 'work', 'world.json'), 'utf-8'));
|
|
130
|
+
sceneFacts = buildSceneFacts(world) ?? undefined;
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
sceneFacts = undefined;
|
|
134
|
+
}
|
|
135
|
+
const rubric = buildJudgeRubric({ designText: readDesignText(root), genre, sceneFacts });
|
|
136
|
+
const verifyContext = buildVerifyContext(verifyRecord, readConsoleTail(artifactDir));
|
|
137
|
+
const environment = resolveEnvironmentForCommand({ cwd: root, baseDir: deps.baseDir });
|
|
138
|
+
const clientId = resolveAuth0ClientId(environment);
|
|
139
|
+
const token = await getAccessToken(environment, clientId, { fetch: deps.fetch, sleep: deps.sleep, now: deps.now }, deps.baseDir);
|
|
140
|
+
const body = {
|
|
141
|
+
gameId: context.metadata.gameId,
|
|
142
|
+
rubric,
|
|
143
|
+
...(verifyContext !== null ? { verifyContext } : {}),
|
|
144
|
+
images: [{ dataBase64: screenshot.toString('base64'), mediaType: 'image/png' }],
|
|
145
|
+
};
|
|
146
|
+
await withJobRecord({ root, kind: 'judge', label: genre ? `Quality judge (${genre})` : 'Quality judge', log: deps.log }, async (log) => {
|
|
147
|
+
log(`Judging game ${context.metadata.gameId} from ${path.relative(root, screenshotFile) || screenshotFile}...`);
|
|
148
|
+
const outcome = await deps.request(environment, token, body, {
|
|
149
|
+
fetch: deps.fetch,
|
|
150
|
+
onProgress: log,
|
|
151
|
+
});
|
|
152
|
+
if (!outcome.success) {
|
|
153
|
+
throw new CliError(outcome.message);
|
|
154
|
+
}
|
|
155
|
+
writeJudgeRecord(root, {
|
|
156
|
+
scorecard: outcome.scorecard,
|
|
157
|
+
fingerprint,
|
|
158
|
+
at: new Date().toISOString(),
|
|
159
|
+
model: outcome.model,
|
|
160
|
+
screenshotPath: path.relative(root, screenshotFile),
|
|
161
|
+
...(genre !== undefined ? { genre } : {}),
|
|
162
|
+
});
|
|
163
|
+
renderScorecard(outcome.scorecard, outcome.model, outcome.sparks, log);
|
|
164
|
+
log(`Recorded in ${judgeRecordPath(root)}.`);
|
|
165
|
+
if (minScore !== null && outcome.scorecard.overall < minScore) {
|
|
166
|
+
// No `result` document first: under `--json` stdout carries exactly one
|
|
167
|
+
// document, and for a failed bar that is the wrapper's error document.
|
|
168
|
+
// The full scorecard is still on disk, and the message says where.
|
|
169
|
+
throw new CliError(`Overall score ${outcome.scorecard.overall} is below --min-score ${minScore}. ` +
|
|
170
|
+
`The findings to fix are in ${judgeRecordPath(root)}.`, EXIT_BELOW_MIN_SCORE);
|
|
171
|
+
}
|
|
172
|
+
deps.result({
|
|
173
|
+
ok: true,
|
|
174
|
+
scorecard: outcome.scorecard,
|
|
175
|
+
judgePath: judgeRecordPath(root),
|
|
176
|
+
fingerprintStale,
|
|
177
|
+
sparks: outcome.sparks,
|
|
178
|
+
model: outcome.model,
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
export const judgeCommand = defineCommand({
|
|
183
|
+
meta: {
|
|
184
|
+
name: 'judge',
|
|
185
|
+
description: 'Grade the verify screenshot against a quality rubric with a vision model.',
|
|
186
|
+
},
|
|
187
|
+
args: {
|
|
188
|
+
genre: {
|
|
189
|
+
type: 'string',
|
|
190
|
+
description: 'Genre hint for the rubric: platformer, racing, shooter, combat, driving, tower-defense.',
|
|
191
|
+
},
|
|
192
|
+
'min-score': {
|
|
193
|
+
type: 'string',
|
|
194
|
+
description: `Fail (exit ${EXIT_BELOW_MIN_SCORE}) when the overall score is below this 1-10 bar. Without it the judge informs and exits 0.`,
|
|
195
|
+
},
|
|
196
|
+
json: {
|
|
197
|
+
type: 'boolean',
|
|
198
|
+
description: 'Print the result as JSON on stdout; all progress goes to stderr.',
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
async run({ args }) {
|
|
202
|
+
await runJudge({
|
|
203
|
+
genre: args.genre,
|
|
204
|
+
'min-score': args['min-score'],
|
|
205
|
+
json: args.json,
|
|
206
|
+
});
|
|
207
|
+
},
|
|
208
|
+
});
|
|
209
|
+
//# sourceMappingURL=judge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge.js","sourceRoot":"","sources":["../../src/commands/judge.ts"],"names":[],"mappings":"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"}
|
|
@@ -123,10 +123,7 @@ export function formatResetPreview(preview, environmentName, removesCli) {
|
|
|
123
123
|
export async function runResetAccount(options, output) {
|
|
124
124
|
const deps = options.deps ?? defaultResetDeps;
|
|
125
125
|
const removesCli = options.keepCli !== true;
|
|
126
|
-
const { environment } = selectEnvironmentForCommand({
|
|
127
|
-
explicit: options.env,
|
|
128
|
-
...(options.baseDir !== undefined ? { baseDir: options.baseDir } : {}),
|
|
129
|
-
});
|
|
126
|
+
const { environment } = selectEnvironmentForCommand({ explicit: options.env, baseDir: options.baseDir });
|
|
130
127
|
// Before anything else, including reading a token: pointing this at prod is
|
|
131
128
|
// the mistake worth catching with a sentence rather than a status code.
|
|
132
129
|
if (environment.name === 'prod') {
|
|
@@ -163,10 +160,7 @@ export async function runResetAccount(options, output) {
|
|
|
163
160
|
// it matters: every module is already loaded by the time this line runs, and
|
|
164
161
|
// nothing after it does a dynamic import — only already-resident code and Node
|
|
165
162
|
// builtins. Do not add an `await import()` below this point.
|
|
166
|
-
|
|
167
|
-
if (removesCli) {
|
|
168
|
-
cliUninstalled = deps.uninstall();
|
|
169
|
-
}
|
|
163
|
+
const cliUninstalled = removesCli ? deps.uninstall() : false;
|
|
170
164
|
return {
|
|
171
165
|
environment: environment.name,
|
|
172
166
|
userId: result.userId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reset-account.js","sourceRoot":"","sources":["../../src/commands/reset-account.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"reset-account.js","sourceRoot":"","sources":["../../src/commands/reset-account.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/verify.js
CHANGED
|
@@ -5,7 +5,7 @@ import { spawn, spawnSync } from 'child_process';
|
|
|
5
5
|
import { CliError } from '../errors.js';
|
|
6
6
|
import { loadProjectContext, projectBin } from '../project/context.js';
|
|
7
7
|
import { reserveCorsAllowedPort, CORS_ALLOWED_PORT_MIN, CORS_ALLOWED_PORT_MAX } from '../local-port.js';
|
|
8
|
-
import {
|
|
8
|
+
import { browserLaunchPlan, shouldRetrySoftwareGl, softwareGlLaunchPlan, } from '../browser-gl.js';
|
|
9
9
|
import { runHeadlessCheck, DEFAULT_START_INTERACTION } from '../verify/browser.js';
|
|
10
10
|
import { classifyVerifyRun } from '../verify/classify.js';
|
|
11
11
|
import { waitForServer } from '../verify/wait-for-server.js';
|
|
@@ -221,7 +221,7 @@ export const verifyCommand = defineCommand({
|
|
|
221
221
|
};
|
|
222
222
|
let observations = await runHeadlessCheck({
|
|
223
223
|
...checkOptions,
|
|
224
|
-
|
|
224
|
+
launch: browserLaunchPlan(process.env, renderer),
|
|
225
225
|
});
|
|
226
226
|
let result = classifyVerifyRun(observations);
|
|
227
227
|
let retriedWithSoftwareGl = false;
|
|
@@ -234,7 +234,7 @@ export const verifyCommand = defineCommand({
|
|
|
234
234
|
observations = await runHeadlessCheck({
|
|
235
235
|
...checkOptions,
|
|
236
236
|
consolePath: path.join(artifactDir, 'console.retry.log'),
|
|
237
|
-
|
|
237
|
+
launch: softwareGlLaunchPlan(process.env, renderer),
|
|
238
238
|
});
|
|
239
239
|
result = classifyVerifyRun(observations);
|
|
240
240
|
retriedWithSoftwareGl = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAqB,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACxG,OAAO,
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { VerifyRunRecord } from '../verify/result.js';
|
|
2
|
+
/**
|
|
3
|
+
* A compact, factual inventory of the scene, or null when world.json is
|
|
4
|
+
* missing or unreadable (the judge then grades from pixels alone, as before).
|
|
5
|
+
*
|
|
6
|
+
* Spread matters as much as counts: "23 objects" reads very differently when
|
|
7
|
+
* they span the whole ground than when they huddle within 10 units of spawn,
|
|
8
|
+
* and design docs make exactly this kind of claim ("dotted with", "scattered
|
|
9
|
+
* across"). The spatial summary is what lets the judge grade those claims
|
|
10
|
+
* instead of guessing from whatever the camera framed.
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildSceneFacts(world: unknown): string | null;
|
|
13
|
+
/**
|
|
14
|
+
* The run-state summary plus a console tail — what the judge knows about the
|
|
15
|
+
* game beyond the pixels. Char-capped to the wire contract's limit; the tail
|
|
16
|
+
* is trimmed first because the engine facts are the denser signal.
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildVerifyContext(record: VerifyRunRecord | null, consoleTail: string | null): string | null;
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Engine ground truth for the judge — the advantage this lane has over judging
|
|
3
|
+
* from pixels alone. A screenshot shows one camera angle of one instant; the
|
|
4
|
+
* engine knows the whole world and the whole run. Everything here is composed
|
|
5
|
+
* DETERMINISTICALLY, in code, from data verify and the project already have —
|
|
6
|
+
* the model is never asked to compute a fact it can be handed.
|
|
7
|
+
*
|
|
8
|
+
* Two outputs, two destinations:
|
|
9
|
+
* - `buildSceneFacts` summarises world.json — what exists, where, and how
|
|
10
|
+
* spread out. It rides in the rubric (via `buildJudgeRubric`'s
|
|
11
|
+
* `sceneFacts`), beside the design text it lets the judge check claims
|
|
12
|
+
* against.
|
|
13
|
+
* - `buildVerifyContext` summarises the RUN — engine state, settle, gameplay
|
|
14
|
+
* events, console tail. It rides in the request's `verifyContext` field.
|
|
15
|
+
*/
|
|
16
|
+
import { MAX_JUDGE_VERIFY_CHARS } from '@bitmagic/asset-core';
|
|
17
|
+
function isRecord(value) {
|
|
18
|
+
return typeof value === 'object' && value !== null;
|
|
19
|
+
}
|
|
20
|
+
function count(items, key) {
|
|
21
|
+
const totals = new Map();
|
|
22
|
+
for (const item of items) {
|
|
23
|
+
const k = key(item);
|
|
24
|
+
if (k === null)
|
|
25
|
+
continue;
|
|
26
|
+
totals.set(k, (totals.get(k) ?? 0) + 1);
|
|
27
|
+
}
|
|
28
|
+
return totals;
|
|
29
|
+
}
|
|
30
|
+
function formatCounts(totals, cap) {
|
|
31
|
+
return [...totals.entries()]
|
|
32
|
+
.sort((a, b) => b[1] - a[1])
|
|
33
|
+
.slice(0, cap)
|
|
34
|
+
.map(([name, n]) => (n > 1 ? `${name}×${n}` : name))
|
|
35
|
+
.join(', ');
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* A compact, factual inventory of the scene, or null when world.json is
|
|
39
|
+
* missing or unreadable (the judge then grades from pixels alone, as before).
|
|
40
|
+
*
|
|
41
|
+
* Spread matters as much as counts: "23 objects" reads very differently when
|
|
42
|
+
* they span the whole ground than when they huddle within 10 units of spawn,
|
|
43
|
+
* and design docs make exactly this kind of claim ("dotted with", "scattered
|
|
44
|
+
* across"). The spatial summary is what lets the judge grade those claims
|
|
45
|
+
* instead of guessing from whatever the camera framed.
|
|
46
|
+
*/
|
|
47
|
+
export function buildSceneFacts(world) {
|
|
48
|
+
if (!isRecord(world))
|
|
49
|
+
return null;
|
|
50
|
+
const lines = [];
|
|
51
|
+
const objects = Array.isArray(world.environmentObjects)
|
|
52
|
+
? world.environmentObjects.filter(isRecord)
|
|
53
|
+
: [];
|
|
54
|
+
if (objects.length > 0) {
|
|
55
|
+
const byType = count(objects, (o) => (typeof o.type === 'string' ? o.type : null));
|
|
56
|
+
lines.push(`Placed objects: ${objects.length} (${formatCounts(byType, 12)}).`);
|
|
57
|
+
const xs = [];
|
|
58
|
+
const zs = [];
|
|
59
|
+
for (const o of objects) {
|
|
60
|
+
const p = o.position;
|
|
61
|
+
if (isRecord(p) && typeof p.x === 'number' && typeof p.z === 'number') {
|
|
62
|
+
xs.push(p.x);
|
|
63
|
+
zs.push(p.z);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (xs.length > 0) {
|
|
67
|
+
const span = (v) => `${Math.round(Math.min(...v))}..${Math.round(Math.max(...v))}`;
|
|
68
|
+
lines.push(`Object spread: x ${span(xs)}, z ${span(zs)}.`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
lines.push('Placed objects: none.');
|
|
73
|
+
}
|
|
74
|
+
const assets = Array.isArray(world.assets) ? world.assets.filter(isRecord) : [];
|
|
75
|
+
if (assets.length > 0) {
|
|
76
|
+
const byType = count(assets, (a) => (typeof a.type === 'string' ? a.type : 'unknown'));
|
|
77
|
+
const names = assets
|
|
78
|
+
.map((a) => (typeof a.name === 'string' ? a.name : null))
|
|
79
|
+
.filter((n) => n !== null)
|
|
80
|
+
.slice(0, 15);
|
|
81
|
+
lines.push(`Assets: ${assets.length} (${formatCounts(byType, 8)})${names.length > 0 ? ` — ${names.join(', ')}` : ''}.`);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
lines.push('Assets: none.');
|
|
85
|
+
}
|
|
86
|
+
const profile = isRecord(world.worldProfileData) ? world.worldProfileData : undefined;
|
|
87
|
+
if (profile) {
|
|
88
|
+
const ground = typeof profile.groundWorldSizeX === 'number' && typeof profile.groundWorldSizeZ === 'number'
|
|
89
|
+
? `${profile.groundWorldSizeX}×${profile.groundWorldSizeZ}`
|
|
90
|
+
: null;
|
|
91
|
+
const spawn = isRecord(profile.playerSpawnPosition) ? profile.playerSpawnPosition : null;
|
|
92
|
+
const hud = isRecord(profile.hud) ? profile.hud : null;
|
|
93
|
+
const startScreenImage = hud && isRecord(hud.startScreen)
|
|
94
|
+
&& typeof hud.startScreen.imageUrl === 'string';
|
|
95
|
+
const details = [
|
|
96
|
+
...(ground ? [`ground ${ground}`] : []),
|
|
97
|
+
...(typeof profile.skyboxUrl === 'string' && profile.skyboxUrl ? ['custom skybox'] : ['no custom skybox']),
|
|
98
|
+
...(spawn && typeof spawn.x === 'number' ? [`spawn at (${spawn.x}, ${spawn.y}, ${spawn.z})`] : []),
|
|
99
|
+
...(startScreenImage ? ['start-screen cover art set'] : ['no start-screen cover art']),
|
|
100
|
+
];
|
|
101
|
+
if (details.length > 0)
|
|
102
|
+
lines.push(`World: ${details.join(', ')}.`);
|
|
103
|
+
}
|
|
104
|
+
return lines.length > 0 ? lines.join('\n') : null;
|
|
105
|
+
}
|
|
106
|
+
// ---------------------------------------------------------------------------
|
|
107
|
+
// Run facts from the verify record
|
|
108
|
+
// ---------------------------------------------------------------------------
|
|
109
|
+
/** Event types that count as gameplay actually happening, per verify/events.ts. */
|
|
110
|
+
const GAMEPLAY_EVENT_HINT = 'no gameplay events (deaths, pickups, score, match-end) fired during the run';
|
|
111
|
+
function describeEvents(record) {
|
|
112
|
+
const events = record.events;
|
|
113
|
+
if (!events)
|
|
114
|
+
return null;
|
|
115
|
+
const entries = Object.entries(events.totalByType).filter(([type]) => type !== 'state');
|
|
116
|
+
if (entries.length === 0)
|
|
117
|
+
return `Gameplay events: ${GAMEPLAY_EVENT_HINT}.`;
|
|
118
|
+
const summary = entries
|
|
119
|
+
.sort((a, b) => b[1] - a[1])
|
|
120
|
+
.map(([type, n]) => `${type}×${n}`)
|
|
121
|
+
.join(', ');
|
|
122
|
+
const matchEnd = events.matchEndAtSeconds !== null
|
|
123
|
+
? `; first match-end at ${Math.round(events.matchEndAtSeconds)}s`
|
|
124
|
+
: '';
|
|
125
|
+
return `Gameplay events: ${summary}${matchEnd}.`;
|
|
126
|
+
}
|
|
127
|
+
function describeRun(record) {
|
|
128
|
+
const snapshot = record.snapshot;
|
|
129
|
+
const parts = [
|
|
130
|
+
`verify ${record.ok ? 'passed' : 'FAILED'}`,
|
|
131
|
+
...(record.failures.length > 0 ? [`failures: ${record.failures.join('; ')}`] : []),
|
|
132
|
+
...(record.warnings.length > 0 ? [`warnings: ${record.warnings.join('; ')}`] : []),
|
|
133
|
+
...(record.settle ? [`settled in ${(record.settle.durationMs / 1000).toFixed(1)}s (${record.settle.reason})`] : []),
|
|
134
|
+
...(snapshot?.fps !== undefined && snapshot?.fps !== null ? [`${snapshot.fps} fps`] : []),
|
|
135
|
+
...(snapshot?.gameState ? [`state ${snapshot.gameState}`] : []),
|
|
136
|
+
...(snapshot?.player
|
|
137
|
+
? [`player at (${Math.round(snapshot.player.x)}, ${Math.round(snapshot.player.y)}, ${Math.round(snapshot.player.z)})${snapshot.player.isFalling ? ', FALLING' : ''}`]
|
|
138
|
+
: []),
|
|
139
|
+
...(snapshot?.physics ? [`${snapshot.physics.rigidBodyCount} rigid bodies`] : []),
|
|
140
|
+
...(snapshot?.scene ? [`scene: ${snapshot.scene.objects} objects, ${snapshot.scene.meshes} meshes, ${snapshot.scene.lights} lights`] : []),
|
|
141
|
+
...(snapshot?.npcCount !== undefined && snapshot?.npcCount !== null ? [`${snapshot.npcCount} NPCs`] : []),
|
|
142
|
+
];
|
|
143
|
+
return parts.join(' · ');
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* The run-state summary plus a console tail — what the judge knows about the
|
|
147
|
+
* game beyond the pixels. Char-capped to the wire contract's limit; the tail
|
|
148
|
+
* is trimmed first because the engine facts are the denser signal.
|
|
149
|
+
*/
|
|
150
|
+
export function buildVerifyContext(record, consoleTail) {
|
|
151
|
+
const parts = [];
|
|
152
|
+
if (record) {
|
|
153
|
+
parts.push(describeRun(record));
|
|
154
|
+
const events = describeEvents(record);
|
|
155
|
+
if (events)
|
|
156
|
+
parts.push(events);
|
|
157
|
+
}
|
|
158
|
+
if (consoleTail && consoleTail.trim()) {
|
|
159
|
+
parts.push(`Console tail:\n${consoleTail.trim()}`);
|
|
160
|
+
}
|
|
161
|
+
if (parts.length === 0)
|
|
162
|
+
return null;
|
|
163
|
+
return parts.join('\n\n').slice(0, MAX_JUDGE_VERIFY_CHARS);
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=facts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facts.js","sourceRoot":"","sources":["../../src/judge/facts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type JudgeScorecard } from '@bitmagic/asset-core';
|
|
2
|
+
export declare function judgeRecordPath(root: string): string;
|
|
3
|
+
export interface JudgeRecord {
|
|
4
|
+
scorecard: JudgeScorecard;
|
|
5
|
+
/** The project state that was judged — `computeFingerprint` at run time. */
|
|
6
|
+
fingerprint: string;
|
|
7
|
+
/** ISO 8601. */
|
|
8
|
+
at: string;
|
|
9
|
+
/** The model id the server judged with. */
|
|
10
|
+
model: string;
|
|
11
|
+
/** The frame that was judged, relative to the project root. */
|
|
12
|
+
screenshotPath: string;
|
|
13
|
+
genre?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function writeJudgeRecord(root: string, record: JudgeRecord): void;
|
|
16
|
+
export declare function readJudgeRecord(root: string): JudgeRecord | null;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The on-disk record of the last `bitmagic judge` run.
|
|
3
|
+
*
|
|
4
|
+
* Lives at `.bitmagic/judge.json` — inside `.bitmagic` so it is gitignored and
|
|
5
|
+
* excluded from the publish fingerprint (judging never invalidates a passing
|
|
6
|
+
* verify), and deliberately NOT inside `.bitmagic/verify/`: that directory has
|
|
7
|
+
* gating semantics of its own (`--fast` deletes files there, publish reads
|
|
8
|
+
* `result.json`), and a foreign file in it invites accidents.
|
|
9
|
+
*
|
|
10
|
+
* `fingerprint` is the same project fingerprint verify stamps, so a reader can
|
|
11
|
+
* tell "judged this exact state" from "judged, then edited". There is no
|
|
12
|
+
* designHash-style cache on purpose — the game changes between judges by
|
|
13
|
+
* design, and every run is a deliberate, cheap spend.
|
|
14
|
+
*/
|
|
15
|
+
import * as fs from 'fs';
|
|
16
|
+
import * as path from 'path';
|
|
17
|
+
import { judgeScorecardSchema } from '@bitmagic/asset-core';
|
|
18
|
+
const JUDGE_RECORD_FILE = path.join('.bitmagic', 'judge.json');
|
|
19
|
+
export function judgeRecordPath(root) {
|
|
20
|
+
return path.join(root, JUDGE_RECORD_FILE);
|
|
21
|
+
}
|
|
22
|
+
export function writeJudgeRecord(root, record) {
|
|
23
|
+
fs.mkdirSync(path.dirname(judgeRecordPath(root)), { recursive: true });
|
|
24
|
+
fs.writeFileSync(judgeRecordPath(root), `${JSON.stringify(record, null, 2)}\n`);
|
|
25
|
+
}
|
|
26
|
+
export function readJudgeRecord(root) {
|
|
27
|
+
let parsed;
|
|
28
|
+
try {
|
|
29
|
+
parsed = JSON.parse(fs.readFileSync(judgeRecordPath(root), 'utf-8'));
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
if (typeof parsed !== 'object' || parsed === null)
|
|
35
|
+
return null;
|
|
36
|
+
const record = parsed;
|
|
37
|
+
const scorecard = judgeScorecardSchema.safeParse(record.scorecard);
|
|
38
|
+
if (!scorecard.success)
|
|
39
|
+
return null;
|
|
40
|
+
if (typeof record.fingerprint !== 'string'
|
|
41
|
+
|| typeof record.at !== 'string'
|
|
42
|
+
|| typeof record.model !== 'string'
|
|
43
|
+
|| typeof record.screenshotPath !== 'string') {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
scorecard: scorecard.data,
|
|
48
|
+
fingerprint: record.fingerprint,
|
|
49
|
+
at: record.at,
|
|
50
|
+
model: record.model,
|
|
51
|
+
screenshotPath: record.screenshotPath,
|
|
52
|
+
...(typeof record.genre === 'string' ? { genre: record.genre } : {}),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/judge/record.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAuB,MAAM,sBAAsB,CAAC;AAEjF,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AAE/D,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AAC5C,CAAC;AAeD,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,MAAmB;IAChE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,EAAE,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAiC,CAAC;IACjD,MAAM,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnE,IAAI,CAAC,SAAS,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IACpC,IACE,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ;WACnC,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ;WAC7B,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;WAChC,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,EAC5C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,SAAS,EAAE,SAAS,CAAC,IAAI;QACzB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,GAAG,CAAC,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrE,CAAC;AACJ,CAAC"}
|