@volter/editor-game 0.5.69 → 0.5.71
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/contributions/react/react-inspector.service.ts +2 -2
- package/package.json +7 -7
- package/src/bridge/screenshot.ts +2 -0
- package/src/generation/generation-documents.tsx +1 -1
- package/src/generation/generation-presentation.ts +1 -1
- package/src/host/browser-transpile.ts +1 -1
- package/src/host/canvas-preview-frames.ts +1 -1
- package/src/host/game-location-guard.ts +1 -1
- package/src/host/playwright-shim.ts +1 -1
- package/src/ingest/mount-ingest-root.ts +1 -1
- package/src/play/play-mode.ts +1 -1
- package/src/runtime/adapter/audio-meter.ts +1 -1
- package/src/runtime/create-runtime.ts +1 -1
- package/src/runtime/debug-bridge.ts +5 -5
- package/src/runtime/debug-registry.ts +2 -2
- package/src/runtime/mount-manifest.ts +1 -1
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* ## Why this is a package and not the host's
|
|
10
10
|
*
|
|
11
|
-
* It was `
|
|
11
|
+
* It was the host's `authoring/react-inspector-section.tsx`,
|
|
12
12
|
* registered at module scope and reached by ONE line in the host's entry:
|
|
13
13
|
* `main.tsx:33`, `import './authoring/react-inspector-section';`. A bare
|
|
14
14
|
* side-effect import has no `from`, so the closure gate's walk never followed
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
* the DOM projection and the CSS inspection estate
|
|
63
63
|
* (`components/RootSelectionOverlay.tsx`); the surgical JSX writer and the
|
|
64
64
|
* structural write pipe (`authoring/r3f-source-authoring-adapter.ts`,
|
|
65
|
-
* `@volter/
|
|
65
|
+
* `@volter/editor-game`'s `src/host/authoring/pixi-source-write-target.ts`); the breakpoint state
|
|
66
66
|
* (`components/BoardRulers.tsx`); `authoring/react-story-board.ts`, the
|
|
67
67
|
* board's geometry, which three host surfaces read
|
|
68
68
|
* (`components/RootSelectionOverlay.tsx:98`,
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@volter/editor-game",
|
|
3
3
|
"author": "Volter AI, Inc.",
|
|
4
4
|
"license": "AGPL-3.0-only",
|
|
5
|
-
"version": "0.5.
|
|
5
|
+
"version": "0.5.71",
|
|
6
6
|
"publishConfig": {
|
|
7
7
|
"access": "public"
|
|
8
8
|
},
|
|
@@ -101,11 +101,11 @@
|
|
|
101
101
|
"serving": "./dist-node/serving.mjs"
|
|
102
102
|
},
|
|
103
103
|
"dependencies": {
|
|
104
|
-
"@volter/editor-sdk": "0.5.
|
|
105
|
-
"@volter/editor-project": "0.5.
|
|
106
|
-
"@volter/editor-threejs": "0.5.
|
|
107
|
-
"@volter/threejs-runtime": "0.5.
|
|
108
|
-
"@volter/game-runtime": "0.5.
|
|
104
|
+
"@volter/editor-sdk": "0.5.71",
|
|
105
|
+
"@volter/editor-project": "0.5.71",
|
|
106
|
+
"@volter/editor-threejs": "0.5.71",
|
|
107
|
+
"@volter/threejs-runtime": "0.5.71",
|
|
108
|
+
"@volter/game-runtime": "0.5.71",
|
|
109
109
|
"@colyseus/msgpackr": "^1.11.3",
|
|
110
110
|
"@colyseus/schema": "^4.0.14",
|
|
111
111
|
"@colyseus/sdk": "^0.17.34",
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
"xstate": "^5.32.4",
|
|
139
139
|
"zod": "^4.3.6",
|
|
140
140
|
"@fortawesome/fontawesome-svg-core": "^7.2.0",
|
|
141
|
-
"@volter/editor-react": "0.5.
|
|
141
|
+
"@volter/editor-react": "0.5.71"
|
|
142
142
|
},
|
|
143
143
|
"peerDependencies": {
|
|
144
144
|
"@sparkjsdev/spark": "^2.1.0",
|
package/src/bridge/screenshot.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* `@editor/*` alias until those modules move too. Nothing here is host API.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
+
import { getCurrentProject } from '@volter/editor-sdk/kit/active-project';
|
|
9
10
|
import { commandLine } from '@volter/editor-sdk/kit/product-command';
|
|
10
11
|
import {
|
|
11
12
|
type CaptureFlatness,
|
|
@@ -230,6 +231,7 @@ export async function handleBridgeScreenshot(
|
|
|
230
231
|
try {
|
|
231
232
|
const composite = await capturePlayComposite(container, {
|
|
232
233
|
canvasFrame: captureLiveCanvasFrame,
|
|
234
|
+
projectRoot: getCurrentProject()?.rootPath,
|
|
233
235
|
// The DECLARED medium, from the adapter's region table. `undefined`
|
|
234
236
|
// (no table loaded yet) leaves the compositor-settle heuristic on its
|
|
235
237
|
// own canvas count, exactly as before.
|
|
@@ -49,7 +49,7 @@ function billingLabel(billing: GenerationBilling): string {
|
|
|
49
49
|
if (billing.route === 'managed') {
|
|
50
50
|
if (billing.settledCredits !== undefined) return `${billing.settledCredits} credits settled`;
|
|
51
51
|
if (billing.estimatedCredits !== undefined) return `Up to ${billing.estimatedCredits} credits`;
|
|
52
|
-
return '
|
|
52
|
+
return 'Volter subscription · estimate unavailable';
|
|
53
53
|
}
|
|
54
54
|
if (billing.settledAmount !== undefined) return `$${billing.settledAmount.toFixed(3)} settled`;
|
|
55
55
|
if (billing.estimatedAmount !== undefined) return `Up to $${billing.estimatedAmount.toFixed(3)}`;
|
|
@@ -219,7 +219,7 @@ export function generationModelLabel(job: GenerationJob): string {
|
|
|
219
219
|
}
|
|
220
220
|
|
|
221
221
|
export function generationRouteLabel(job: GenerationJob): string {
|
|
222
|
-
if (job.mode === 'managed') return '
|
|
222
|
+
if (job.mode === 'managed') return 'Volter subscription';
|
|
223
223
|
if (job.mode === 'direct') return 'Your provider key';
|
|
224
224
|
return 'Mock';
|
|
225
225
|
}
|
|
@@ -213,7 +213,7 @@ function unregisteredRuntimeModules(specifiers: readonly string[]): Error {
|
|
|
213
213
|
'import to a dependency it ships; a package outside that list needs a dev server. Open ' +
|
|
214
214
|
`the project locally with ${commandLine('edit')} (which resolves the project’s own node_modules), ` +
|
|
215
215
|
'or add the package to a capability so it joins the list ' +
|
|
216
|
-
'(packages/editor/src/served-bundle-runtime-modules.ts, gated by ' +
|
|
216
|
+
'(packages/editor-game/src/host/served-bundle-runtime-modules.ts, gated by ' +
|
|
217
217
|
'`npm run validate-browser-runtime-modules`).',
|
|
218
218
|
);
|
|
219
219
|
}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* five callers never had a story in hand (`authoring/canvas-design-mount.ts`,
|
|
18
18
|
* `authoring/pixi-still-presentation.ts`, `components/world-root-stage.ts`,
|
|
19
19
|
* `live-canvas-frame.ts`, and the ingest lane's canvas mount); moving it out is
|
|
20
|
-
* the part of the CSF estate's exit to `@volter/game` (WORK.md §The open-source
|
|
20
|
+
* the part of the CSF estate's exit to `@volter/editor-game` (WORK.md §The open-source
|
|
21
21
|
* launch, phase 1 unit 3) that does not wait on anything else.
|
|
22
22
|
*/
|
|
23
23
|
|
|
@@ -145,6 +145,6 @@ export function refusedNavigationMessage(attempt: string): string {
|
|
|
145
145
|
`Ingested game attempted to navigate the editor away (${attempt}) — refused. ` +
|
|
146
146
|
"A game running in-realm shares the editor's document, so leaving it would take the " +
|
|
147
147
|
'whole session with it; game code sees a scoped `location` facade whose reads pass ' +
|
|
148
|
-
'through and whose navigating writes do not (packages/editor/src/game-location-guard.ts).'
|
|
148
|
+
'through and whose navigating writes do not (packages/editor-game/src/host/game-location-guard.ts).'
|
|
149
149
|
);
|
|
150
150
|
}
|
|
@@ -61,7 +61,7 @@ export class PageShimUnsupportedError extends Error {
|
|
|
61
61
|
`playwright-shim: ${objectName}.${member} is not supported by the in-page shim. ` +
|
|
62
62
|
`Supported ${objectName} members: ${supported.join(', ')}. ` +
|
|
63
63
|
'This shim is DOM-only — canvas gameplay input must use game.input.*, while React-only ' +
|
|
64
|
-
'DOM games may use Page keyboard/locator input. See packages/editor/src/playwright-shim.ts for ' +
|
|
64
|
+
'DOM games may use Page keyboard/locator input. See packages/editor-game/src/host/playwright-shim.ts for ' +
|
|
65
65
|
"the full supported subset and the wire's closure-capture limitation.",
|
|
66
66
|
);
|
|
67
67
|
this.name = 'PageShimUnsupportedError';
|
|
@@ -719,7 +719,7 @@ if (import.meta.env.DEV && typeof window !== 'undefined') {
|
|
|
719
719
|
isActive: () => activeIngest()?.kind === 'dom',
|
|
720
720
|
};
|
|
721
721
|
// Headless-readable mount outcomes —
|
|
722
|
-
// `packages/editor/src/
|
|
722
|
+
// `packages/editor-sdk/src/kit/mount-failure-report.ts`'s multi-entry
|
|
723
723
|
// list is otherwise only ever read by the status bar's `mount-failure`
|
|
724
724
|
// contribution (a React component), invisible to `page.evaluate()`. This is
|
|
725
725
|
// a plain function returning the LIVE list — a probe's browser
|
package/src/play/play-mode.ts
CHANGED
|
@@ -1306,7 +1306,7 @@ export function resizeGame(width: number, height: number, pixelRatio?: number):
|
|
|
1306
1306
|
* size exceeded` — not a hypothetical). In the field this window is entered
|
|
1307
1307
|
* whenever a caller re-issues `play` before the browser has acked the first
|
|
1308
1308
|
* (a slow scene boot outliving the relay's/SDK's own `play.start` timeout is
|
|
1309
|
-
* the documented trigger — `packages/
|
|
1309
|
+
* the documented trigger — `packages/editor-sdk/src/transport.ts`'s
|
|
1310
1310
|
* `PLAY_START_TIMEOUT_MS`/`editor-server.ts`'s `PLAY_COMMAND_TIMEOUT_MS` —
|
|
1311
1311
|
* and `play.start`'s own contract is explicitly "start (or restart)", so a
|
|
1312
1312
|
* caller retrying after a timeout is using the API as documented, not
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Meter arithmetic over an `AudioAdapter`'s `AudioMeterFrame.level` — the one
|
|
3
3
|
* place a linear RMS level becomes dBFS and a bar fill. Lives beside the
|
|
4
4
|
* adapter because both readers of a level (the editor's header meter and the
|
|
5
|
-
* `@volter/game` audio debugger) are consumers of the adapter, and neither may
|
|
5
|
+
* `@volter/editor-game` audio debugger) are consumers of the adapter, and neither may
|
|
6
6
|
* import the other.
|
|
7
7
|
*/
|
|
8
8
|
|
|
@@ -561,7 +561,7 @@ async function mountOneThreeRoot(
|
|
|
561
561
|
* pinned to the mount-time `w`/`h` (same as three, until PIXI's own
|
|
562
562
|
* construction-time resize runs), it self-heals the moment ANY real
|
|
563
563
|
* `session.resize(rw, rh)` fires — every shipped standalone entry
|
|
564
|
-
* (`packages/editor/template/src/main.ts`, `examples/tri-world/src/main.ts`)
|
|
564
|
+
* (`packages/game-editor/template/src/main.ts`, `examples/tri-world/src/main.ts`)
|
|
565
565
|
* already calls `session.resize()` unconditionally right after mount, so
|
|
566
566
|
* this never surfaces as a lasting bug the way three' buffer-only resize
|
|
567
567
|
* did (never self-healing, by design — see above). */
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* boot still only ever gets a handle when the gate below actually passes).
|
|
8
8
|
*
|
|
9
9
|
* D17: this is door (a) of the seam's three doors — the SAME `DebugAdapter`
|
|
10
|
-
* names/JSON the editor relay (door b) and `@volter/live` (door c, which
|
|
10
|
+
* names/JSON the editor relay (door b) and `@volter/game-live` (door c, which
|
|
11
11
|
* drives door (a) itself over Playwright) all read. D18: the bridge installs
|
|
12
12
|
* only when the page opts in (`?volter-debug=1`) AND is either a dev build
|
|
13
13
|
* (`import.meta.env.DEV`) or the project's manifest explicitly opts a
|
|
@@ -148,7 +148,7 @@ export interface VolterDebugHandle {
|
|
|
148
148
|
* (`DebugRegistry.registerWorldSettledProbe`, declared by the game's `debug.settled` entry
|
|
149
149
|
* export) — so a tick never races a scene remount's async commit, and WHICH tick first runs
|
|
150
150
|
* a freshly reloaded world is a function of the sim rather than wall timing. Session tick
|
|
151
|
-
* drivers (`@volter/live`'s fastForward) prefer this door; with no probe registered it behaves
|
|
151
|
+
* drivers (`@volter/game-live`'s fastForward) prefer this door; with no probe registered it behaves
|
|
152
152
|
* exactly like {@link runTicks}. Bounded: throws `WORLD_UNSETTLED_TIMEOUT` if a probe never
|
|
153
153
|
* settles.
|
|
154
154
|
*/
|
|
@@ -159,7 +159,7 @@ export interface VolterDebugHandle {
|
|
|
159
159
|
* this is the honest human-input-path proof) → `input.clearVirtualActions()`
|
|
160
160
|
* into ONE async bridge call, as a TOP-LEVEL method (not under `input`)
|
|
161
161
|
* because it needs the sim clock, not just the input target. Was 15+
|
|
162
|
-
* transport round trips over the editor relay (`@volter/live`'s old
|
|
162
|
+
* transport round trips over the editor relay (`@volter/game-live`'s old
|
|
163
163
|
* `GameInput.hold`: set → a 150ms-interval `waitSimTime` snapshot poll loop
|
|
164
164
|
* → clear); now one `page.evaluate`/relay call that runs the wait
|
|
165
165
|
* in-process on the page.
|
|
@@ -231,13 +231,13 @@ export interface MaybeInstallDebugBridgeOptions {
|
|
|
231
231
|
const PAGE_ERROR_CAP = 100;
|
|
232
232
|
|
|
233
233
|
/** `holdFor`'s in-process poll interval — this loop never leaves the page
|
|
234
|
-
* (no transport round trip per poll, unlike `@volter/live`'s old
|
|
234
|
+
* (no transport round trip per poll, unlike `@volter/game-live`'s old
|
|
235
235
|
* `waitSimTime`), so it can afford to be tighter than that loop's 150ms. */
|
|
236
236
|
const HOLD_FOR_POLL_MS = 50;
|
|
237
237
|
|
|
238
238
|
/** Consecutive `HOLD_FOR_POLL_MS` polls with the tick unchanged before
|
|
239
239
|
* `holdFor` gives up waiting and treats the game as stopped — mirrors
|
|
240
|
-
* `@volter/live`'s `WAIT_FOR_STALL_POLL_LIMIT` reasoning (`wait-for.ts`:
|
|
240
|
+
* `@volter/game-live`'s `WAIT_FOR_STALL_POLL_LIMIT` reasoning (`wait-for.ts`:
|
|
241
241
|
* a genuinely frozen sim clock must never poll forever), scaled to this
|
|
242
242
|
* faster in-process interval so the wall-clock grace period (~5s) lands in
|
|
243
243
|
* the same neighborhood. */
|
|
@@ -107,7 +107,7 @@ export interface DebugCtxSurface {
|
|
|
107
107
|
|
|
108
108
|
/** Engine-local error for the debug seam — mirrors the `code` + `data` shape
|
|
109
109
|
* `packages/volter-sdk/src/errors.ts` uses (no import: the engine does not
|
|
110
|
-
* depend on
|
|
110
|
+
* depend on the SDK). `code` is always machine-readable; nothing reading
|
|
111
111
|
* this error may key off `message` prose. */
|
|
112
112
|
export class DebugError extends Error {
|
|
113
113
|
readonly code: string;
|
|
@@ -200,7 +200,7 @@ export interface InputTraceSnapshot {
|
|
|
200
200
|
* (`runtime/game.ts`, D15/T-D15.3-.4) for full semantics. Named here (not
|
|
201
201
|
* re-declared per-caller) so the bridge (`runtime/debug-bridge.ts`), the
|
|
202
202
|
* editor relay (`command-listener.ts`'s `run-ticks` case), and
|
|
203
|
-
* `play.runTicks` (
|
|
203
|
+
* `play.runTicks` (the SDK) all reference the SAME type. */
|
|
204
204
|
export interface RunTicksOptions {
|
|
205
205
|
/** `'last'` (default) — skip `preRender`/`render` for every tick except
|
|
206
206
|
* the final one. `'all'` — render every tick. `'none'` — never render,
|
|
@@ -250,7 +250,7 @@ export function resolveManifest(raw: unknown): ResolvedGameManifest {
|
|
|
250
250
|
|
|
251
251
|
// ---------------------------------------------------------------------------
|
|
252
252
|
// Per-kind entry -> adapter resolution (mirrors `resolveRootBinding`'s
|
|
253
|
-
// per-identity dispatch, `packages/editor/src/binding-resolver.ts`)
|
|
253
|
+
// per-identity dispatch, `packages/editor-game/src/host/binding-resolver.ts`)
|
|
254
254
|
// ---------------------------------------------------------------------------
|
|
255
255
|
|
|
256
256
|
function resolveThreeAdapter(
|