@bitmagic/cli 0.1.28 → 0.1.30
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 +10 -3
- package/dist/cli.d.ts +4 -0
- package/dist/commands/dev.d.ts +4 -0
- package/dist/commands/dev.js +15 -1
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/init.js +3 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/editor/shell-page.js +44 -36
- package/dist/editor/shell-page.js.map +1 -1
- package/dist/open-browser.d.ts +21 -0
- package/dist/open-browser.js +67 -0
- package/dist/open-browser.js.map +1 -0
- package/dist/scaffold/project-files.d.ts +10 -1
- package/dist/scaffold/project-files.js +47 -14
- package/dist/scaffold/project-files.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -39,7 +39,7 @@ browser reloads itself on every change and the assets panel shows each generatio
|
|
|
39
39
|
| `bitmagic whoami [--env <env>]` | Show the identity the CLI is authenticated as. |
|
|
40
40
|
| `bitmagic init [dir] [--template <id>] [--name <name>] [--idea "<pitch>"] [--env <env>] [--force]` | Scaffold a new project: mints a game, downloads the vendored engine, writes `AGENTS.md`, `GAME-DESIGN.md` and templates. `--idea` seeds the design doc's pitch. |
|
|
41
41
|
| `bitmagic check` | Typecheck (`tsc --noEmit`) against the vendored engine. Fast; does not prove the game runs. |
|
|
42
|
-
| `bitmagic dev [--port <port>] [--editor-port <port>]` | Build, then serve everything and keep it running: `tsc --watch`, `vite` on 3010, and a **Game / Editor** view on 3011 that reloads itself when the project changes. The one command to leave open. See **The dev view** below. |
|
|
42
|
+
| `bitmagic dev [--port <port>] [--editor-port <port>] [--no-open]` | Build, then serve everything and keep it running: `tsc --watch`, `vite` on 3010, and a **Game / Editor** view on 3011 that reloads itself when the project changes. Opens the view in your browser; `--no-open` (or `BITMAGIC_NO_OPEN=1`) skips that. The one command to leave open. See **The dev view** below. |
|
|
43
43
|
| `bitmagic reload [--port <port>]` | Tell a running `bitmagic dev` to reload the browser now. For agents: run it when you finish a round of edits. Exits 0 and does nothing when no dev server is running. |
|
|
44
44
|
| `bitmagic verify [--timeout <ms>]` | Build, boot the game in a headless browser, click the engine's Play button like a player would, and report what broke. A game without the button passes as long as gameplay starts by itself (auto-starting genres, custom start UIs); a run where gameplay never starts fails. `--timeout` is settle time in ms measured after gameplay starts, so the screenshot captures gameplay. Writes the artifacts the publish gate reads (see below). |
|
|
45
45
|
| `bitmagic build` | Bundle the game into one self-contained `.bitmagic/build/index.html`. Rarely needs to be run by hand — `publish` builds automatically when the project changed. |
|
|
@@ -106,13 +106,20 @@ cover. Edit the design and run again, or pass `--force`, to replace it. Because
|
|
|
106
106
|
|
|
107
107
|
```bash
|
|
108
108
|
bitmagic dev
|
|
109
|
-
#
|
|
109
|
+
# Opened http://localhost:3011/ ← game + editor
|
|
110
110
|
#
|
|
111
111
|
# Game only http://localhost:3010/
|
|
112
112
|
# Editor actions .bitmagic/edit/events.jsonl
|
|
113
113
|
```
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
It opens that page for you. Pass `--no-open`, or set `BITMAGIC_NO_OPEN=1`, if you would rather it
|
|
116
|
+
did not — on a machine with no browser it simply prints the URL instead.
|
|
117
|
+
|
|
118
|
+
The reason it opens rather than only printing: agents are told to start `bitmagic dev` as a
|
|
119
|
+
background task, which means everything it prints — including the URL — lands in a log the creator
|
|
120
|
+
never reads. A dev server nobody opened is worth exactly as much as one nobody started.
|
|
121
|
+
|
|
122
|
+
Put the page beside your agent's window. It is one page with
|
|
116
123
|
two tabs over the same running game, so switching costs nothing and does not restart anything:
|
|
117
124
|
|
|
118
125
|
- **Game** — your game, playing. Click into it to capture the mouse, exactly as a player would.
|
package/dist/cli.d.ts
CHANGED
|
@@ -98,6 +98,10 @@ declare const rawCommands: {
|
|
|
98
98
|
readonly type: "string";
|
|
99
99
|
readonly description: "Port to serve the Game/Editor view on (default 3011).";
|
|
100
100
|
};
|
|
101
|
+
readonly 'no-open': {
|
|
102
|
+
readonly type: "boolean";
|
|
103
|
+
readonly description: "Do not open a browser. Same as setting BITMAGIC_NO_OPEN.";
|
|
104
|
+
};
|
|
101
105
|
}>;
|
|
102
106
|
reload: CommandDef<{
|
|
103
107
|
readonly port: {
|
package/dist/commands/dev.d.ts
CHANGED
|
@@ -7,4 +7,8 @@ export declare const devCommand: import("citty").CommandDef<{
|
|
|
7
7
|
readonly type: "string";
|
|
8
8
|
readonly description: "Port to serve the Game/Editor view on (default 3011).";
|
|
9
9
|
};
|
|
10
|
+
readonly 'no-open': {
|
|
11
|
+
readonly type: "boolean";
|
|
12
|
+
readonly description: "Do not open a browser. Same as setting BITMAGIC_NO_OPEN.";
|
|
13
|
+
};
|
|
10
14
|
}>;
|
package/dist/commands/dev.js
CHANGED
|
@@ -25,6 +25,7 @@ import { startEditorServer } from '../editor/server.js';
|
|
|
25
25
|
import { ReloadBus } from '../editor/reload-bus.js';
|
|
26
26
|
import { ReloadCoordinator, pipeTscWatch, watchProject } from '../editor/watch.js';
|
|
27
27
|
import { parseLocalPort } from '../local-port.js';
|
|
28
|
+
import { openInBrowser, NO_OPEN_ENV } from '../open-browser.js';
|
|
28
29
|
import { waitForServer } from '../verify/wait-for-server.js';
|
|
29
30
|
import { engineUpdateNotice } from '../project/engine-update.js';
|
|
30
31
|
/**
|
|
@@ -70,6 +71,10 @@ export const devCommand = defineCommand({
|
|
|
70
71
|
type: 'string',
|
|
71
72
|
description: `Port to serve the Game/Editor view on (default ${DEFAULT_EDITOR_PORT}).`,
|
|
72
73
|
},
|
|
74
|
+
'no-open': {
|
|
75
|
+
type: 'boolean',
|
|
76
|
+
description: `Do not open a browser. Same as setting ${NO_OPEN_ENV}.`,
|
|
77
|
+
},
|
|
73
78
|
},
|
|
74
79
|
async run({ args }) {
|
|
75
80
|
const context = loadProjectContext();
|
|
@@ -150,7 +155,16 @@ export const devCommand = defineCommand({
|
|
|
150
155
|
// the tabs, kept addressable for a second window or a bookmark.
|
|
151
156
|
void waitForServer(gamePort, 30_000)
|
|
152
157
|
.then(() => {
|
|
153
|
-
|
|
158
|
+
// Opened rather than merely printed, because this command is now started as a BACKGROUND
|
|
159
|
+
// task by the agent that scaffolds the project — so this banner goes to a log the creator
|
|
160
|
+
// never reads. See open-browser.ts for why `login` makes the opposite call.
|
|
161
|
+
const opened = openInBrowser(editor.url, {
|
|
162
|
+
disabled: args['no-open'] === true,
|
|
163
|
+
log: (m) => console.log(m),
|
|
164
|
+
});
|
|
165
|
+
console.log(opened
|
|
166
|
+
? `\n Opened ${editor.url} ← game + editor`
|
|
167
|
+
: `\n Open ${editor.url} ← game + editor`);
|
|
154
168
|
console.log(`\n Game only http://localhost:${gamePort}/`);
|
|
155
169
|
// Named on startup so the agent that launched this command knows where to look without
|
|
156
170
|
// being told — the journal is the only record of intentions the editor cannot carry out
|
package/dist/commands/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -75,8 +75,9 @@ function printNextSteps(output, dir, gameId, installSucceeded, hasIdea) {
|
|
|
75
75
|
if (!installSucceeded) {
|
|
76
76
|
output.info(' npm install');
|
|
77
77
|
}
|
|
78
|
-
output.info(' bitmagic dev # IN THE BACKGROUND — it never exits.
|
|
79
|
-
output.info(' # Start it FIRST
|
|
78
|
+
output.info(' bitmagic dev # IN THE BACKGROUND — it never exits. Opens http://localhost:3011/');
|
|
79
|
+
output.info(' # Start it FIRST, then tell the human that URL: you backgrounded');
|
|
80
|
+
output.info(' # it, so everything it prints goes to a log they never see.');
|
|
80
81
|
if (!hasIdea) {
|
|
81
82
|
output.info(' # write GAME-DESIGN.md — the cover art is generated from it');
|
|
82
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -101,7 +101,7 @@ export function renderEditorShell(options) {
|
|
|
101
101
|
padding: 4px 10px; font: inherit; cursor: pointer; }
|
|
102
102
|
button:hover { background: #30303a; }
|
|
103
103
|
button:disabled { opacity: .5; cursor: default; background: #26262e; }
|
|
104
|
-
|
|
104
|
+
/* .tab:hover is declared after .tab.active and would otherwise win on an active tab. */
|
|
105
105
|
#tabs .tab.active:hover { background: #3352c4; }
|
|
106
106
|
.banner { display: none; align-items: center; gap: 12px; flex: none; padding: 8px 12px;
|
|
107
107
|
background: #3a2c12; border-bottom: 1px solid #574018; color: #f0d9a8; }
|
|
@@ -233,6 +233,7 @@ export function renderEditorShell(options) {
|
|
|
233
233
|
var terrainBanner = document.getElementById('terrain-banner');
|
|
234
234
|
var buildBanner = document.getElementById('build-banner');
|
|
235
235
|
var autoToggle = document.getElementById('auto-toggle');
|
|
236
|
+
var tabButtons = document.querySelectorAll('.tab');
|
|
236
237
|
|
|
237
238
|
var loaded = false;
|
|
238
239
|
var saving = false;
|
|
@@ -294,23 +295,35 @@ export function renderEditorShell(options) {
|
|
|
294
295
|
});
|
|
295
296
|
}
|
|
296
297
|
|
|
298
|
+
/**
|
|
299
|
+
* Ask the engine something and wait for its answer, or null on timeout.
|
|
300
|
+
*
|
|
301
|
+
* The waiter is armed before the post for the same reason boot() arms both of its own before
|
|
302
|
+
* navigating: nothing here may assume the reply cannot land early.
|
|
303
|
+
*/
|
|
304
|
+
function request(type, replyType, timeoutMs, data) {
|
|
305
|
+
var reply = await_(replyType, timeoutMs);
|
|
306
|
+
post(type, data);
|
|
307
|
+
return reply;
|
|
308
|
+
}
|
|
309
|
+
|
|
297
310
|
window.addEventListener('message', function (event) {
|
|
298
311
|
var message = event.data;
|
|
299
312
|
if (!message || typeof message.type !== 'string') return;
|
|
300
313
|
|
|
301
|
-
|
|
302
|
-
if (
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
}
|
|
314
|
+
waiters = waiters.filter(function (waiter) {
|
|
315
|
+
if (waiter.type !== message.type) return true;
|
|
316
|
+
clearTimeout(waiter.timer);
|
|
317
|
+
waiter.resolve(message);
|
|
318
|
+
return false;
|
|
319
|
+
});
|
|
308
320
|
|
|
309
321
|
switch (message.type) {
|
|
310
322
|
case 'GAME_STATE_CHANGED':
|
|
311
323
|
gameState = message.state || '';
|
|
312
324
|
if (activeTab === 'game' && loaded) {
|
|
313
|
-
|
|
325
|
+
var playing = gameState === 'playing';
|
|
326
|
+
setStatus(playing ? 'saved' : '', playing ? 'Playing' : 'Ready');
|
|
314
327
|
}
|
|
315
328
|
break;
|
|
316
329
|
|
|
@@ -389,7 +402,7 @@ export function renderEditorShell(options) {
|
|
|
389
402
|
try {
|
|
390
403
|
var project = await (await fetch('/api/game-data')).json();
|
|
391
404
|
var asset = ((project.gameData && project.gameData.assets) || [])
|
|
392
|
-
.
|
|
405
|
+
.find(function (a) { return a && a.id === assetId; });
|
|
393
406
|
if (asset && typeof asset.description === 'string') existing = asset.description;
|
|
394
407
|
} catch (error) {
|
|
395
408
|
// No description to prefill is a worse dialog, not a broken one.
|
|
@@ -415,9 +428,9 @@ export function renderEditorShell(options) {
|
|
|
415
428
|
return;
|
|
416
429
|
}
|
|
417
430
|
lastKnownMtime = result.worldMtimeMs || lastKnownMtime;
|
|
418
|
-
hqNote.classList.add('show');
|
|
419
431
|
|
|
420
|
-
// The description is saved either way; only what happens next differs.
|
|
432
|
+
// The description is saved either way; only what happens next differs. Every branch below
|
|
433
|
+
// ends in showHqNote, which is what reveals the note.
|
|
421
434
|
if (result.canGenerate === false) {
|
|
422
435
|
showHqNote('Description saved. ' + (result.reason || 'This asset cannot be regenerated.'), '');
|
|
423
436
|
setStatus('saved', 'Description saved');
|
|
@@ -536,8 +549,7 @@ export function renderEditorShell(options) {
|
|
|
536
549
|
|
|
537
550
|
if (activeTab === 'editor' && tab === 'game' && loaded && !fromEngine) {
|
|
538
551
|
await flush();
|
|
539
|
-
|
|
540
|
-
var terrain = await await_('TERRAIN_HAS_CHANGES', 2000);
|
|
552
|
+
var terrain = await request('CHECK_TERRAIN_CHANGES', 'TERRAIN_HAS_CHANGES', 2000);
|
|
541
553
|
if (terrain && terrain.hasChanges === true) {
|
|
542
554
|
terrainBanner.classList.add('show');
|
|
543
555
|
return;
|
|
@@ -546,10 +558,9 @@ export function renderEditorShell(options) {
|
|
|
546
558
|
|
|
547
559
|
activeTab = tab;
|
|
548
560
|
writePref(TAB_KEY, tab);
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
}
|
|
561
|
+
tabButtons.forEach(function (button) {
|
|
562
|
+
button.classList.toggle('active', button.getAttribute('data-tab') === tab);
|
|
563
|
+
});
|
|
553
564
|
if (!loaded) return;
|
|
554
565
|
applyTab(tab);
|
|
555
566
|
// One loop for both tabs; the work inside it is what differs (see runLoop()).
|
|
@@ -614,13 +625,11 @@ export function renderEditorShell(options) {
|
|
|
614
625
|
async function flush() {
|
|
615
626
|
if (!loaded || saving) return;
|
|
616
627
|
|
|
617
|
-
|
|
618
|
-
var changes = await await_('SCENE_HAS_CHANGES', 2000);
|
|
628
|
+
var changes = await request('CHECK_SCENE_CHANGES', 'SCENE_HAS_CHANGES', 2000);
|
|
619
629
|
if (!changes) return;
|
|
620
630
|
if (!changes.hasChanges && !markersDirty) return;
|
|
621
631
|
|
|
622
|
-
|
|
623
|
-
var status = await await_('SCENE_EDITING_STATUS', 5000);
|
|
632
|
+
var status = await request('GET_SCENE_EDITING_STATUS', 'SCENE_EDITING_STATUS', 5000);
|
|
624
633
|
if (!status) return;
|
|
625
634
|
|
|
626
635
|
saving = true;
|
|
@@ -663,8 +672,7 @@ export function renderEditorShell(options) {
|
|
|
663
672
|
*/
|
|
664
673
|
async function checkTerrainEdits() {
|
|
665
674
|
if (!loaded) return;
|
|
666
|
-
|
|
667
|
-
var terrain = await await_('TERRAIN_HAS_CHANGES', 2000);
|
|
675
|
+
var terrain = await request('CHECK_TERRAIN_CHANGES', 'TERRAIN_HAS_CHANGES', 2000);
|
|
668
676
|
if (!terrain) return;
|
|
669
677
|
terrainBanner.classList.toggle('show', terrain.hasChanges === true);
|
|
670
678
|
}
|
|
@@ -1074,8 +1082,7 @@ export function renderEditorShell(options) {
|
|
|
1074
1082
|
var shotButton = document.getElementById('shot');
|
|
1075
1083
|
|
|
1076
1084
|
async function captureGamePng() {
|
|
1077
|
-
|
|
1078
|
-
var response = await await_('SCREENSHOT_RESPONSE', 15000);
|
|
1085
|
+
var response = await request('CAPTURE_SCREENSHOT', 'SCREENSHOT_RESPONSE', 15000, { mode: 'immediate' });
|
|
1079
1086
|
if (!response) throw new Error('the game did not answer');
|
|
1080
1087
|
// The engine reports its own failures as a null screenshot rather than staying silent.
|
|
1081
1088
|
if (!response.screenshot) throw new Error('the engine could not capture a frame');
|
|
@@ -1187,11 +1194,14 @@ export function renderEditorShell(options) {
|
|
|
1187
1194
|
* loop here — a dropped stream degrades to the mtime poll above until the browser reopens it.
|
|
1188
1195
|
*/
|
|
1189
1196
|
function listenForEvents() {
|
|
1197
|
+
// An unparseable payload is a missing label, not a lost event: the event's NAME is what says
|
|
1198
|
+
// what happened, and every field read below has a fallback.
|
|
1199
|
+
function payloadOf(event) {
|
|
1200
|
+
try { return JSON.parse(event.data); } catch (error) { return {}; }
|
|
1201
|
+
}
|
|
1190
1202
|
var events = new EventSource('/api/events/stream');
|
|
1191
1203
|
events.addEventListener('reload', function (event) {
|
|
1192
|
-
|
|
1193
|
-
try { payload = JSON.parse(event.data); } catch (error) { /* reason is a label */ }
|
|
1194
|
-
onChangeSignal(payload.reason || 'change');
|
|
1204
|
+
onChangeSignal(payloadOf(event).reason || 'change');
|
|
1195
1205
|
});
|
|
1196
1206
|
// A bare "the list moved" ping: a generation started, made progress, failed, or world.json was
|
|
1197
1207
|
// rewritten. The panel re-reads rather than the server sending a diff, which keeps the whole
|
|
@@ -1200,8 +1210,7 @@ export function renderEditorShell(options) {
|
|
|
1200
1210
|
void refreshAssets();
|
|
1201
1211
|
});
|
|
1202
1212
|
events.addEventListener('build', function (event) {
|
|
1203
|
-
var payload =
|
|
1204
|
-
try { payload = JSON.parse(event.data); } catch (error) { /* see above */ }
|
|
1213
|
+
var payload = payloadOf(event);
|
|
1205
1214
|
if (payload.status === 'failed') {
|
|
1206
1215
|
document.getElementById('build-message').textContent = payload.message || 'The build failed.';
|
|
1207
1216
|
buildBanner.classList.add('show');
|
|
@@ -1220,12 +1229,11 @@ export function renderEditorShell(options) {
|
|
|
1220
1229
|
post('REVERT_TERRAIN_CHANGES');
|
|
1221
1230
|
terrainBanner.classList.remove('show');
|
|
1222
1231
|
});
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
void selectTab(event.currentTarget.getAttribute('data-tab'), {});
|
|
1232
|
+
tabButtons.forEach(function (button) {
|
|
1233
|
+
button.addEventListener('click', function () {
|
|
1234
|
+
void selectTab(button.getAttribute('data-tab'));
|
|
1227
1235
|
});
|
|
1228
|
-
}
|
|
1236
|
+
});
|
|
1229
1237
|
autoToggle.addEventListener('change', function () {
|
|
1230
1238
|
autoReload = autoToggle.checked;
|
|
1231
1239
|
writePref(AUTO_KEY, autoReload ? '1' : '0');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-page.js","sourceRoot":"","sources":["../../src/editor/shell-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,oGAAoG;AACpG,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B;;;;;;GAMG;AACH,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAEnC,kGAAkG;AAClG,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC;AASD,MAAM,UAAU,iBAAiB,CAAC,OAA2B;IAC3D,MAAM,OAAO,GAAG,oBAAoB,OAAO,CAAC,QAAQ,2BAA2B,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IACpH,OAAO;;;;wBAIe,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBA2F3B,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAwD9B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;kBACxB,gBAAgB;yBACT,qBAAqB
|
|
1
|
+
{"version":3,"file":"shell-page.js","sourceRoot":"","sources":["../../src/editor/shell-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,oGAAoG;AACpG,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B;;;;;;GAMG;AACH,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAEnC,kGAAkG;AAClG,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC;AASD,MAAM,UAAU,iBAAiB,CAAC,OAA2B;IAC3D,MAAM,OAAO,GAAG,oBAAoB,OAAO,CAAC,QAAQ,2BAA2B,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IACpH,OAAO;;;;wBAIe,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBA2F3B,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAwD9B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;kBACxB,gBAAgB;yBACT,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2gC7C,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Set to any non-empty value to keep `bitmagic dev` from opening a tab. Mirrors BITMAGIC_NO_INLINE_IMAGE. */
|
|
2
|
+
export declare const NO_OPEN_ENV = "BITMAGIC_NO_OPEN";
|
|
3
|
+
interface Opener {
|
|
4
|
+
command: string;
|
|
5
|
+
args: string[];
|
|
6
|
+
}
|
|
7
|
+
/** The platform's "open this with whatever handles it" command, or null on one we do not know. */
|
|
8
|
+
export declare function openerFor(platform: string, url: string): Opener | null;
|
|
9
|
+
export interface OpenBrowserOptions {
|
|
10
|
+
/** Skip opening — the `--no-open` flag. The env var is checked here too. */
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
platform?: string;
|
|
13
|
+
env?: Record<string, string | undefined>;
|
|
14
|
+
log?: (message: string) => void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Try to open `url`. Returns whether an opener was actually launched, so the caller can word its
|
|
18
|
+
* banner honestly rather than claiming a tab that never appeared.
|
|
19
|
+
*/
|
|
20
|
+
export declare function openInBrowser(url: string, options?: OpenBrowserOptions): boolean;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Opening the dev view in the creator's browser.
|
|
3
|
+
*
|
|
4
|
+
* ── Why this exists, when `login` deliberately does the opposite ─────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* `bitmagic login` prints its URL and never shells out to a browser, because "agent tools
|
|
7
|
+
* frequently run without one" — and because a device code can be finished on a phone, so printing
|
|
8
|
+
* it always works.
|
|
9
|
+
*
|
|
10
|
+
* `bitmagic dev` is the other case entirely. Its whole product is a page to look at, and the URL is
|
|
11
|
+
* now printed into a place the human cannot see: agents are told to start `dev` as a BACKGROUND
|
|
12
|
+
* task, so the startup banner lands in a background task's log rather than on anyone's screen. The
|
|
13
|
+
* creator ends up with a dev server running, a browser that never opened, and nothing anywhere
|
|
14
|
+
* telling them to look — which is exactly as useless as not starting it at all.
|
|
15
|
+
*
|
|
16
|
+
* So the server opens the page itself, the way every other dev server does.
|
|
17
|
+
*
|
|
18
|
+
* Best-effort throughout. A machine with no opener — a container, an SSH session, CI — is not an
|
|
19
|
+
* error, it is a machine where the printed URL was always the answer. Nothing here can fail the
|
|
20
|
+
* dev server, and nothing here can block it: the child is detached with its stdio discarded and
|
|
21
|
+
* immediately unref'd, so an `xdg-open` that hangs waiting for a desktop that is not there cannot
|
|
22
|
+
* hold the process open or delay a single frame.
|
|
23
|
+
*/
|
|
24
|
+
import { spawn } from 'child_process';
|
|
25
|
+
/** Set to any non-empty value to keep `bitmagic dev` from opening a tab. Mirrors BITMAGIC_NO_INLINE_IMAGE. */
|
|
26
|
+
export const NO_OPEN_ENV = 'BITMAGIC_NO_OPEN';
|
|
27
|
+
/** The platform's "open this with whatever handles it" command, or null on one we do not know. */
|
|
28
|
+
export function openerFor(platform, url) {
|
|
29
|
+
if (platform === 'darwin')
|
|
30
|
+
return { command: 'open', args: [url] };
|
|
31
|
+
// The empty string is the window TITLE, not a stray argument: `start "http://…"` treats the URL
|
|
32
|
+
// as a title and opens nothing at all, which is the classic form of this bug.
|
|
33
|
+
if (platform === 'win32')
|
|
34
|
+
return { command: 'cmd', args: ['/c', 'start', '', url] };
|
|
35
|
+
if (platform === 'linux')
|
|
36
|
+
return { command: 'xdg-open', args: [url] };
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Try to open `url`. Returns whether an opener was actually launched, so the caller can word its
|
|
41
|
+
* banner honestly rather than claiming a tab that never appeared.
|
|
42
|
+
*/
|
|
43
|
+
export function openInBrowser(url, options = {}) {
|
|
44
|
+
const env = options.env ?? process.env;
|
|
45
|
+
const platform = options.platform ?? process.platform;
|
|
46
|
+
if (options.disabled === true)
|
|
47
|
+
return false;
|
|
48
|
+
if (typeof env[NO_OPEN_ENV] === 'string' && env[NO_OPEN_ENV] !== '')
|
|
49
|
+
return false;
|
|
50
|
+
const opener = openerFor(platform, url);
|
|
51
|
+
if (opener === null)
|
|
52
|
+
return false;
|
|
53
|
+
try {
|
|
54
|
+
const child = spawn(opener.command, opener.args, { detached: true, stdio: 'ignore' });
|
|
55
|
+
// A missing opener surfaces as an async 'error' event, not a throw, so it needs its own
|
|
56
|
+
// handler — an unhandled one on a ChildProcess takes the whole process down.
|
|
57
|
+
child.on('error', () => {
|
|
58
|
+
options.log?.(`Could not open a browser — open ${url} yourself.`);
|
|
59
|
+
});
|
|
60
|
+
child.unref();
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=open-browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-browser.js","sourceRoot":"","sources":["../src/open-browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,8GAA8G;AAC9G,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAO9C,kGAAkG;AAClG,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,GAAW;IACrD,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IACnE,gGAAgG;IAChG,8EAA8E;IAC9E,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;IACpF,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IACtE,OAAO,IAAI,CAAC;AACd,CAAC;AAUD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,UAA8B,EAAE;IACzE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACtD,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IAElF,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtF,wFAAwF;QACxF,6EAA6E;QAC7E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACrB,OAAO,CAAC,GAAG,EAAE,CAAC,mCAAmC,GAAG,YAAY,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -6,7 +6,16 @@
|
|
|
6
6
|
* PLATFORM_GENERATED_FILES in project.ts), so this is the only source of truth upgrade has for
|
|
7
7
|
* telling a creator what to add by hand.
|
|
8
8
|
*/
|
|
9
|
-
export declare const DEPENDENCIES:
|
|
9
|
+
export declare const DEPENDENCIES: {
|
|
10
|
+
'@dimforge/rapier2d-compat': string;
|
|
11
|
+
'@dimforge/rapier3d-compat': string;
|
|
12
|
+
'@msgpack/msgpack': string;
|
|
13
|
+
fflate: string;
|
|
14
|
+
i18next: string;
|
|
15
|
+
'i18next-browser-languagedetector': string;
|
|
16
|
+
jszip: string;
|
|
17
|
+
three: string;
|
|
18
|
+
};
|
|
10
19
|
export declare const DEV_DEPENDENCIES: Record<string, string>;
|
|
11
20
|
export declare function renderPackageJson(name: string): string;
|
|
12
21
|
export declare function renderTsconfig(): string;
|
|
@@ -16,6 +16,9 @@ export const DEPENDENCIES = {
|
|
|
16
16
|
'i18next-browser-languagedetector': '^8.0.4',
|
|
17
17
|
jszip: '^3.10.1',
|
|
18
18
|
three: '^0.185.1',
|
|
19
|
+
// `satisfies` rather than a `Record<string, string>` annotation: it keeps the same contract
|
|
20
|
+
// while leaving the key names visible to the type system, so `esmUrl('fflate')` below cannot
|
|
21
|
+
// name a package this map does not install.
|
|
19
22
|
};
|
|
20
23
|
export const DEV_DEPENDENCIES = {
|
|
21
24
|
'@types/node': '^24.10.0',
|
|
@@ -29,13 +32,26 @@ export const DEV_DEPENDENCIES = {
|
|
|
29
32
|
vite: '^7.3.1',
|
|
30
33
|
'vite-plugin-singlefile': '^2.3.3',
|
|
31
34
|
};
|
|
35
|
+
/** The exact release a `^x.y.z` range in `DEPENDENCIES` installs. */
|
|
36
|
+
function pinnedVersion(name) {
|
|
37
|
+
return DEPENDENCIES[name].replace(/^\^/, '');
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The CDN URL the browser loads a package from, pinned to the version `DEPENDENCIES` installs
|
|
41
|
+
* for tsc. Derived rather than written a second time: the two must agree, and a bump that
|
|
42
|
+
* updates the npm range but not the URL leaves a project type-checking against one copy of a
|
|
43
|
+
* library while the game runs against another.
|
|
44
|
+
*/
|
|
45
|
+
function esmUrl(name) {
|
|
46
|
+
return `https://esm.sh/${name}@${pinnedVersion(name)}`;
|
|
47
|
+
}
|
|
32
48
|
/**
|
|
33
|
-
* The three.js release every `three*` import map entry below resolves to.
|
|
49
|
+
* The three.js release every `three*` import map entry below resolves to. Named once because
|
|
34
50
|
* the entries repeat it eight times, including four times inside the `three` shim, and a bump
|
|
35
51
|
* that updates some copies but not others splits the engine across two module instances — the
|
|
36
52
|
* exact failure the comments below describe.
|
|
37
53
|
*/
|
|
38
|
-
const THREE_VERSION = '
|
|
54
|
+
const THREE_VERSION = pinnedVersion('three');
|
|
39
55
|
/**
|
|
40
56
|
* `three` resolves to a shim, not straight to the webgpu build. r185's three.webgpu.js exports
|
|
41
57
|
* neither `UniformsUtils` (which every classic postprocessing pass imports from `three`) nor
|
|
@@ -70,12 +86,12 @@ const CDN_IMPORTS = {
|
|
|
70
86
|
'three/addons/': `https://esm.sh/*three@${THREE_VERSION}/addons/`,
|
|
71
87
|
'three/examples/jsm/': `https://esm.sh/*three@${THREE_VERSION}/examples/jsm/`,
|
|
72
88
|
'three/': `https://esm.sh/three@${THREE_VERSION}/`,
|
|
73
|
-
'@dimforge/rapier3d-compat': '
|
|
74
|
-
'@dimforge/rapier2d-compat': '
|
|
75
|
-
i18next: '
|
|
76
|
-
'i18next-browser-languagedetector': '
|
|
77
|
-
'@msgpack/msgpack': '
|
|
78
|
-
fflate: '
|
|
89
|
+
'@dimforge/rapier3d-compat': esmUrl('@dimforge/rapier3d-compat'),
|
|
90
|
+
'@dimforge/rapier2d-compat': esmUrl('@dimforge/rapier2d-compat'),
|
|
91
|
+
i18next: esmUrl('i18next'),
|
|
92
|
+
'i18next-browser-languagedetector': esmUrl('i18next-browser-languagedetector'),
|
|
93
|
+
'@msgpack/msgpack': esmUrl('@msgpack/msgpack'),
|
|
94
|
+
fflate: esmUrl('fflate'),
|
|
79
95
|
};
|
|
80
96
|
/** Every JSON file the scaffold writes is 2-space indented and newline-terminated. */
|
|
81
97
|
function renderJson(value) {
|
|
@@ -153,6 +169,20 @@ export function renderTsconfig() {
|
|
|
153
169
|
],
|
|
154
170
|
});
|
|
155
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* The Bitmagic mark, inlined. Same 16x16 PNG as game/Images/favicon.png — keep in step with
|
|
174
|
+
* game/index.html. A data URI rather than a file reference because a built game is a single
|
|
175
|
+
* self-contained index.html that gets served from a bucket with no /favicon.png of its own.
|
|
176
|
+
* Regenerate with: base64 -i game/Images/favicon.png
|
|
177
|
+
*/
|
|
178
|
+
const FAVICON_DATA_URI = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB1UlEQVQ4jX2TsW/aQBTGfxB7q' +
|
|
179
|
+
'JBiprYSd8ZEqmjE0IykC0ipVKlT/wOjRGLuyFKJLnSqS5amo+eygLIUJjME1iJFERuWRfZgZnQdwK5jhX7TvXfv+757p/' +
|
|
180
|
+
'cySimSME3xCWgAb3iMGdANgqWbTGYiAdMUJ0AfKPJ/zICPQbD0Y4Ed2QOMdLUQkjBcEYZhMr0CToJg6WdNU+R3zkaa6Dj' +
|
|
181
|
+
'f6XS+cnt7R7v9BfFM8Pm4za7WBdB2/RbT5MlkCoDneQCcn1/w/u4DF78bUVnNNEXjwDAOfwIvkwKVSoWbmwnz+ZxqtcpgM' +
|
|
182
|
+
'EDXdY5qR1xd/0i2kzkwjMOrf71uL05P32LbNvl8nvF4TKvVolQq8eLVc4rFIsPhMBJ4rUWOZ2fvGI1GNJtNNE2PX1Mul+l' +
|
|
183
|
+
'0OuRyOSzLQte1x78sZUFJWVCXl10VwbZttVgs4jh5VkqpiCNlQWUjoc1mE4u6rovv+/T7fQAsy2IPVhrbwUhPHfV6/UnG/' +
|
|
184
|
+
'f0yGXpZoAvQ6/VYr9f7nGI4jpMMuyilkLLwR8qCqlSOVa/3S4VhqNIIw1A5zrdk/55Sav8oCyGRUsRW0+k06TwD6kGwfEg' +
|
|
185
|
+
'vk/vUf6QwZrtMD5DYxgimKRpsx7uWIg6Afnqd/wLHH+fn7VRm6gAAAABJRU5ErkJggg==';
|
|
156
186
|
export function renderIndexHtml() {
|
|
157
187
|
const aliasImports = importMapEntries();
|
|
158
188
|
const imports = { ...CDN_IMPORTS, ...aliasImports };
|
|
@@ -170,10 +200,10 @@ export function renderIndexHtml() {
|
|
|
170
200
|
<meta charset="UTF-8">
|
|
171
201
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
|
172
202
|
<title>Bitmagic Game</title>
|
|
203
|
+
<link rel="icon" type="image/png" href="${FAVICON_DATA_URI}">
|
|
173
204
|
<style>
|
|
174
205
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
175
|
-
html, body { width: 100%; height: 100%; overflow: hidden; background: #000; }
|
|
176
|
-
html, body { touch-action: none; }
|
|
206
|
+
html, body { width: 100%; height: 100%; overflow: hidden; background: #000; touch-action: none; }
|
|
177
207
|
canvas { display: block; }
|
|
178
208
|
#game-container {
|
|
179
209
|
position: fixed;
|
|
@@ -211,7 +241,6 @@ function renderAliasEntries() {
|
|
|
211
241
|
.join(',\n');
|
|
212
242
|
}
|
|
213
243
|
export function renderViteConfig() {
|
|
214
|
-
const entries = renderAliasEntries();
|
|
215
244
|
return `import { defineConfig } from 'vite';
|
|
216
245
|
|
|
217
246
|
// Aliases mirror tsconfig paths but point at the COMPILED output: tsc emits to dist/ and the
|
|
@@ -223,7 +252,7 @@ export default defineConfig({
|
|
|
223
252
|
assetsInclude: ['**/*.wasm'],
|
|
224
253
|
resolve: {
|
|
225
254
|
alias: {
|
|
226
|
-
${
|
|
255
|
+
${renderAliasEntries()}
|
|
227
256
|
}
|
|
228
257
|
},
|
|
229
258
|
server: {
|
|
@@ -244,7 +273,6 @@ ${entries}
|
|
|
244
273
|
* versions with the engine it was written for.
|
|
245
274
|
*/
|
|
246
275
|
export function renderVitePublishConfig() {
|
|
247
|
-
const entries = renderAliasEntries();
|
|
248
276
|
return `import { defineConfig } from 'vite';
|
|
249
277
|
import { viteSingleFile } from 'vite-plugin-singlefile';
|
|
250
278
|
|
|
@@ -273,7 +301,7 @@ export default defineConfig({
|
|
|
273
301
|
define: { __BUNDLED__: true },
|
|
274
302
|
resolve: {
|
|
275
303
|
alias: {
|
|
276
|
-
${
|
|
304
|
+
${renderAliasEntries()}
|
|
277
305
|
}
|
|
278
306
|
},
|
|
279
307
|
build: {
|
|
@@ -312,6 +340,11 @@ foreground and you will block until the session is killed, which is the mistake
|
|
|
312
340
|
because the way to avoid it is to defer the command — and deferring it is the failure this section
|
|
313
341
|
exists to prevent.
|
|
314
342
|
|
|
343
|
+
**Then say so in your reply, once:** that the dev view is at \`http://localhost:3011/\` and they can
|
|
344
|
+
watch there. It opens a browser tab by itself, but you started it in the background, so everything
|
|
345
|
+
it printed — including that URL — went into a log the person you are working for never sees. If you
|
|
346
|
+
do not mention it, the only signal they get is a tab that may or may not have appeared.
|
|
347
|
+
|
|
315
348
|
The point is not the server. The point is that the person who asked for this game is sitting in
|
|
316
349
|
front of that page, and everything below assumes they can see what you are doing:
|
|
317
350
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-files.js","sourceRoot":"","sources":["../../src/scaffold/project-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEjF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"project-files.js","sourceRoot":"","sources":["../../src/scaffold/project-files.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitmagic/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.30",
|
|
4
4
|
"description": "Build Bitmagic games from your own agent tool",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"citty": "^0.2.2",
|
|
20
20
|
"playwright-core": "^1.59.1",
|
|
21
21
|
"tar": "^7.4.3",
|
|
22
|
-
"@bitmagic/
|
|
23
|
-
"@bitmagic/
|
|
22
|
+
"@bitmagic/world-forger": "0.1.3",
|
|
23
|
+
"@bitmagic/asset-core": "0.1.1"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@eslint/js": "^9.38.0",
|