@vgai/cli 0.5.50 → 0.5.52
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/dist/index.js +218 -123
- package/package.json +7 -7
package/dist/index.js
CHANGED
|
@@ -319407,7 +319407,7 @@ var require_sync = __commonJS({
|
|
|
319407
319407
|
"../../../donor-main/node_modules/get-package-type/sync.cjs"(exports, module) {
|
|
319408
319408
|
"use strict";
|
|
319409
319409
|
var path = __require("path");
|
|
319410
|
-
var { readFileSync:
|
|
319410
|
+
var { readFileSync: readFileSync33 } = __require("fs");
|
|
319411
319411
|
var isNodeModules = require_is_node_modules();
|
|
319412
319412
|
var resultsCache = require_cache5();
|
|
319413
319413
|
function getDirectoryTypeActual(directory) {
|
|
@@ -319415,7 +319415,7 @@ var require_sync = __commonJS({
|
|
|
319415
319415
|
return "commonjs";
|
|
319416
319416
|
}
|
|
319417
319417
|
try {
|
|
319418
|
-
return JSON.parse(
|
|
319418
|
+
return JSON.parse(readFileSync33(path.resolve(directory, "package.json"))).type || "commonjs";
|
|
319419
319419
|
} catch (_) {
|
|
319420
319420
|
}
|
|
319421
319421
|
const parent = path.dirname(directory);
|
|
@@ -333438,7 +333438,7 @@ import {
|
|
|
333438
333438
|
mkdirSync as mkdirSync17,
|
|
333439
333439
|
openSync as openSync3,
|
|
333440
333440
|
readdirSync as readdirSync16,
|
|
333441
|
-
readFileSync as
|
|
333441
|
+
readFileSync as readFileSync32,
|
|
333442
333442
|
realpathSync as realpathSync8,
|
|
333443
333443
|
statSync as statSync12,
|
|
333444
333444
|
writeFileSync as writeFileSync15
|
|
@@ -333447,7 +333447,7 @@ import { createRequire as createRequire2 } from "node:module";
|
|
|
333447
333447
|
import { homedir as homedir7 } from "node:os";
|
|
333448
333448
|
import { basename as basename6, dirname as dirname26, isAbsolute as isAbsolute12, join as join39, relative as relative12, resolve as resolve21, sep as sep6 } from "node:path";
|
|
333449
333449
|
import { setTimeout as delay } from "node:timers/promises";
|
|
333450
|
-
import { fileURLToPath as
|
|
333450
|
+
import { fileURLToPath as fileURLToPath4, pathToFileURL as pathToFileURL2 } from "node:url";
|
|
333451
333451
|
import { inspect } from "node:util";
|
|
333452
333452
|
|
|
333453
333453
|
// ../create-vgai-project/src/scaffold.ts
|
|
@@ -333459,7 +333459,7 @@ import {
|
|
|
333459
333459
|
lstatSync as lstatSync2,
|
|
333460
333460
|
mkdirSync as mkdirSync5,
|
|
333461
333461
|
readdirSync as readdirSync6,
|
|
333462
|
-
readFileSync as
|
|
333462
|
+
readFileSync as readFileSync11,
|
|
333463
333463
|
rmSync as rmSync2,
|
|
333464
333464
|
writeFileSync as writeFileSync4
|
|
333465
333465
|
} from "node:fs";
|
|
@@ -335628,12 +335628,101 @@ function satisfiesTilde(version2, base) {
|
|
|
335628
335628
|
return version2[0] === base[0] && version2[1] === base[1];
|
|
335629
335629
|
}
|
|
335630
335630
|
|
|
335631
|
+
// ../create-vgai-project/templates.json
|
|
335632
|
+
var templates_default = {
|
|
335633
|
+
$comment: "The empty project, named presets of additions, and focused reference examples.",
|
|
335634
|
+
registryVersion: 1,
|
|
335635
|
+
templates: [
|
|
335636
|
+
{
|
|
335637
|
+
id: "empty",
|
|
335638
|
+
title: "Empty project",
|
|
335639
|
+
description: "A project that declares nothing yet \u2014 add a 3D world, a UI, a server or models from here.",
|
|
335640
|
+
source: "template:empty",
|
|
335641
|
+
thumbnail: "packages/create-vgai-project/thumbnails/default.png",
|
|
335642
|
+
whatsInside: [
|
|
335643
|
+
"No roots, no configurations",
|
|
335644
|
+
"The four settings layers",
|
|
335645
|
+
"Add what the project needs"
|
|
335646
|
+
]
|
|
335647
|
+
},
|
|
335648
|
+
{
|
|
335649
|
+
id: "prototype",
|
|
335650
|
+
title: "Game prototype",
|
|
335651
|
+
description: "A 3D world for a playable prototype, without required Data, Game Inspector or Analytics panels.",
|
|
335652
|
+
source: "template:prototype",
|
|
335653
|
+
thumbnail: "packages/create-vgai-project/thumbnails/default.png",
|
|
335654
|
+
whatsInside: [
|
|
335655
|
+
"Three.js world root",
|
|
335656
|
+
"Neutral daylight scene + focal cube prefab",
|
|
335657
|
+
"No required development panels",
|
|
335658
|
+
"No preselected genre"
|
|
335659
|
+
]
|
|
335660
|
+
},
|
|
335661
|
+
{
|
|
335662
|
+
id: "game",
|
|
335663
|
+
title: "Game development",
|
|
335664
|
+
description: "A 3D world, multiplayer configuration and required game-specific Data, Game Inspector and Analytics panels to implement.",
|
|
335665
|
+
source: "template:game",
|
|
335666
|
+
thumbnail: "packages/create-vgai-project/thumbnails/default.png",
|
|
335667
|
+
whatsInside: [
|
|
335668
|
+
"Three.js world root",
|
|
335669
|
+
"Neutral daylight scene + focal cube prefab",
|
|
335670
|
+
"server + multiplayer configurations",
|
|
335671
|
+
"Data, Game Inspector and Analytics stubs",
|
|
335672
|
+
"No preselected genre"
|
|
335673
|
+
]
|
|
335674
|
+
},
|
|
335675
|
+
{
|
|
335676
|
+
id: "website",
|
|
335677
|
+
title: "Website / UI",
|
|
335678
|
+
description: "A React root mounted as a DOM layer \u2014 JSX as the authored truth.",
|
|
335679
|
+
source: "template:website",
|
|
335680
|
+
thumbnail: "packages/create-vgai-project/thumbnails/react.png",
|
|
335681
|
+
whatsInside: [
|
|
335682
|
+
"React DOM root",
|
|
335683
|
+
"Styled shell page",
|
|
335684
|
+
"react-root capability"
|
|
335685
|
+
]
|
|
335686
|
+
},
|
|
335687
|
+
{
|
|
335688
|
+
id: "models",
|
|
335689
|
+
title: "Models",
|
|
335690
|
+
description: "The mesh capability alone: authored models, Edit Mesh, the model finder \u2014 no world to run.",
|
|
335691
|
+
source: "template:models",
|
|
335692
|
+
thumbnail: "packages/create-vgai-project/thumbnails/default.png",
|
|
335693
|
+
whatsInside: [
|
|
335694
|
+
"mesh capability",
|
|
335695
|
+
"src/models/ + the model finder",
|
|
335696
|
+
"Opens in the Model workspace"
|
|
335697
|
+
]
|
|
335698
|
+
},
|
|
335699
|
+
{
|
|
335700
|
+
id: "first-person",
|
|
335701
|
+
title: "First Person",
|
|
335702
|
+
description: "Premium bright arena shooter with Quaternius enemies, layered combat animation, and three weapons.",
|
|
335703
|
+
source: "example:first-person",
|
|
335704
|
+
thumbnail: "examples/first-person/learn/thumbnail.png"
|
|
335705
|
+
},
|
|
335706
|
+
{
|
|
335707
|
+
id: "third-person",
|
|
335708
|
+
title: "Third Person",
|
|
335709
|
+
description: "Premium coastal-citadel TPS with over-shoulder combat, layered Quaternius animation, AI, and a complete match.",
|
|
335710
|
+
source: "example:third-person",
|
|
335711
|
+
thumbnail: "examples/third-person/learn/thumbnail.png"
|
|
335712
|
+
},
|
|
335713
|
+
{
|
|
335714
|
+
id: "top-down-strategy",
|
|
335715
|
+
title: "Top Down Strategy",
|
|
335716
|
+
description: "Premium orthographic strategy sample with multi-selection, formation movement, navigation, physics props, automatic doors, and roof reveal.",
|
|
335717
|
+
source: "example:top-down-strategy",
|
|
335718
|
+
thumbnail: "examples/top-down-strategy/learn/thumbnail.png"
|
|
335719
|
+
}
|
|
335720
|
+
]
|
|
335721
|
+
};
|
|
335722
|
+
|
|
335631
335723
|
// ../create-vgai-project/src/templates.ts
|
|
335632
|
-
import { readFileSync as readFileSync11 } from "node:fs";
|
|
335633
|
-
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
335634
335724
|
var TEMPLATE_COMPOSITION_IDS = ["empty", "prototype", "game", "website", "models"];
|
|
335635
335725
|
var SCAFFOLD_PRESENTATIONS = ["blank"];
|
|
335636
|
-
var REGISTRY_PATH = fileURLToPath2(new URL("../templates.json", import.meta.url));
|
|
335637
335726
|
function parseTemplateSource(source) {
|
|
335638
335727
|
const exampleId = source.startsWith("example:") ? source.slice("example:".length) : void 0;
|
|
335639
335728
|
if (exampleId !== void 0) {
|
|
@@ -335690,7 +335779,7 @@ function isEntryScaffoldable(entry, scaffoldTemplates) {
|
|
|
335690
335779
|
return source.type === "example" ? scaffoldTemplates.includes("example") : scaffoldTemplates.includes(source.template);
|
|
335691
335780
|
}
|
|
335692
335781
|
function loadTemplateRegistry() {
|
|
335693
|
-
const raw =
|
|
335782
|
+
const raw = templates_default;
|
|
335694
335783
|
if (typeof raw !== "object" || raw === null) {
|
|
335695
335784
|
throw new Error("Template registry: templates.json is not an object");
|
|
335696
335785
|
}
|
|
@@ -335776,7 +335865,7 @@ var PROJECT_DEVELOPMENT_LOG_RELATIVE_PATH = "DEVLOG.md";
|
|
|
335776
335865
|
function rewriteRoadmap(targetDir, name) {
|
|
335777
335866
|
const path = join15(targetDir, PROJECT_ROADMAP_RELATIVE_PATH);
|
|
335778
335867
|
if (!existsSync10(path)) return;
|
|
335779
|
-
const body =
|
|
335868
|
+
const body = readFileSync11(path, "utf-8").replace(/^# .*$/m, `# Roadmap \u2014 ${name}`);
|
|
335780
335869
|
writeFileSync4(path, body, "utf-8");
|
|
335781
335870
|
}
|
|
335782
335871
|
function resolveEngineDependencyNames(engineDir, fallbackDir) {
|
|
@@ -335793,7 +335882,7 @@ function readInstalledVersionWithFallback(monoRoot, fallbackDir, name) {
|
|
|
335793
335882
|
}
|
|
335794
335883
|
function readEngineDependencyNames(engineDir) {
|
|
335795
335884
|
try {
|
|
335796
|
-
const enginePkg = JSON.parse(
|
|
335885
|
+
const enginePkg = JSON.parse(readFileSync11(join15(engineDir, "package.json"), "utf-8"));
|
|
335797
335886
|
return new Set(Object.keys(enginePkg.dependencies ?? {}));
|
|
335798
335887
|
} catch {
|
|
335799
335888
|
return void 0;
|
|
@@ -335802,7 +335891,7 @@ function readEngineDependencyNames(engineDir) {
|
|
|
335802
335891
|
function readInstalledVersion(monoRoot, packageName) {
|
|
335803
335892
|
try {
|
|
335804
335893
|
const installed = JSON.parse(
|
|
335805
|
-
|
|
335894
|
+
readFileSync11(join15(monoRoot, "node_modules", packageName, "package.json"), "utf-8")
|
|
335806
335895
|
);
|
|
335807
335896
|
return installed.version;
|
|
335808
335897
|
} catch {
|
|
@@ -335959,7 +336048,7 @@ function shouldCopyStarterPath(templateDir, sourcePath) {
|
|
|
335959
336048
|
function rewritePackageJson(targetDir, slug, engineDir, monoRoot) {
|
|
335960
336049
|
const pkgPath = join15(targetDir, "package.json");
|
|
335961
336050
|
if (!existsSync10(pkgPath)) return;
|
|
335962
|
-
const pkg = JSON.parse(
|
|
336051
|
+
const pkg = JSON.parse(readFileSync11(pkgPath, "utf-8"));
|
|
335963
336052
|
pkg.name = slug;
|
|
335964
336053
|
pkg.dependencies = pkg.dependencies ?? {};
|
|
335965
336054
|
pkg.dependencies["@vgai/engine"] = engineDependencySpec(monoRoot, "@vgai/engine");
|
|
@@ -336006,7 +336095,7 @@ function versionFromCheckout(monoRoot, relPath) {
|
|
|
336006
336095
|
const candidate = resolve9(monoRoot, cleaned, "package.json");
|
|
336007
336096
|
if (!existsSync10(candidate)) return void 0;
|
|
336008
336097
|
try {
|
|
336009
|
-
const parsed = JSON.parse(
|
|
336098
|
+
const parsed = JSON.parse(readFileSync11(candidate, "utf8"));
|
|
336010
336099
|
return typeof parsed.version === "string" ? parsed.version : void 0;
|
|
336011
336100
|
} catch {
|
|
336012
336101
|
return void 0;
|
|
@@ -336024,7 +336113,7 @@ function rewriteGameManifest(targetDir, name, slug, additions, monoRoot) {
|
|
|
336024
336113
|
const engineVersion = readInstalledVersion(monoRoot, "@vgai/engine");
|
|
336025
336114
|
let manifest;
|
|
336026
336115
|
if (existsSync10(manifestPath)) {
|
|
336027
|
-
manifest = JSON.parse(
|
|
336116
|
+
manifest = JSON.parse(readFileSync11(manifestPath, "utf-8"));
|
|
336028
336117
|
} else {
|
|
336029
336118
|
manifest = {
|
|
336030
336119
|
manifestVersion: 2,
|
|
@@ -336070,7 +336159,7 @@ function repinEngineAfterInstall(targetDir) {
|
|
|
336070
336159
|
const manifestPath = resolveManifestPath(targetDir);
|
|
336071
336160
|
let manifest;
|
|
336072
336161
|
try {
|
|
336073
|
-
manifest = JSON.parse(
|
|
336162
|
+
manifest = JSON.parse(readFileSync11(manifestPath, "utf-8"));
|
|
336074
336163
|
} catch {
|
|
336075
336164
|
return null;
|
|
336076
336165
|
}
|
|
@@ -336081,7 +336170,7 @@ function repinEngineAfterInstall(targetDir) {
|
|
|
336081
336170
|
writeJson(manifestPath, manifest);
|
|
336082
336171
|
const baselinePath = join15(targetDir, SCAFFOLD_BASELINE_RELATIVE_PATH);
|
|
336083
336172
|
try {
|
|
336084
|
-
const baseline = JSON.parse(
|
|
336173
|
+
const baseline = JSON.parse(readFileSync11(baselinePath, "utf-8"));
|
|
336085
336174
|
baseline.engineVersion = installed;
|
|
336086
336175
|
baseline.files["vgai.project.json"] = hashFile(manifestPath);
|
|
336087
336176
|
writeFileSync4(baselinePath, `${JSON.stringify(baseline, null, 2)}
|
|
@@ -336115,7 +336204,7 @@ function checkoutVgaiPackageDirs(monoRoot) {
|
|
|
336115
336204
|
if (!existsSync10(join15(dir, "src"))) continue;
|
|
336116
336205
|
let name;
|
|
336117
336206
|
try {
|
|
336118
|
-
name = JSON.parse(
|
|
336207
|
+
name = JSON.parse(readFileSync11(join15(dir, "package.json"), "utf-8")).name;
|
|
336119
336208
|
} catch {
|
|
336120
336209
|
continue;
|
|
336121
336210
|
}
|
|
@@ -336126,7 +336215,7 @@ function checkoutVgaiPackageDirs(monoRoot) {
|
|
|
336126
336215
|
function declaredVgaiDependencies(projectDir) {
|
|
336127
336216
|
let pkg;
|
|
336128
336217
|
try {
|
|
336129
|
-
pkg = JSON.parse(
|
|
336218
|
+
pkg = JSON.parse(readFileSync11(join15(projectDir, "package.json"), "utf-8"));
|
|
336130
336219
|
} catch {
|
|
336131
336220
|
return [];
|
|
336132
336221
|
}
|
|
@@ -336156,7 +336245,7 @@ var runPackageBuild = (packageDir) => {
|
|
|
336156
336245
|
function declaredBins(packageDir) {
|
|
336157
336246
|
let pkg;
|
|
336158
336247
|
try {
|
|
336159
|
-
pkg = JSON.parse(
|
|
336248
|
+
pkg = JSON.parse(readFileSync11(join15(packageDir, "package.json"), "utf-8"));
|
|
336160
336249
|
} catch {
|
|
336161
336250
|
return [];
|
|
336162
336251
|
}
|
|
@@ -336206,7 +336295,7 @@ function rewriteTemplateVariantFiles(targetDir, additions) {
|
|
|
336206
336295
|
writeFileSync4(join15(targetDir, "vgai.adapter.ts"), adapterSourceFor(additions), "utf-8");
|
|
336207
336296
|
} else {
|
|
336208
336297
|
const adapterPath = join15(targetDir, "vgai.adapter.ts");
|
|
336209
|
-
const source = joinAdditionFinders(
|
|
336298
|
+
const source = joinAdditionFinders(readFileSync11(adapterPath, "utf-8"), additions);
|
|
336210
336299
|
writeFileSync4(adapterPath, source, "utf-8");
|
|
336211
336300
|
}
|
|
336212
336301
|
if (additions.has("mesh")) {
|
|
@@ -336228,7 +336317,7 @@ function relaxIndexAccessForModels(targetDir) {
|
|
|
336228
336317
|
const tsconfigPath = join15(targetDir, "tsconfig.json");
|
|
336229
336318
|
if (!existsSync10(tsconfigPath)) return;
|
|
336230
336319
|
const parseErrors = [];
|
|
336231
|
-
const tsconfig = parse4(
|
|
336320
|
+
const tsconfig = parse4(readFileSync11(tsconfigPath, "utf-8"), parseErrors, {
|
|
336232
336321
|
allowTrailingComma: true
|
|
336233
336322
|
});
|
|
336234
336323
|
if (parseErrors.length > 0) return;
|
|
@@ -336239,7 +336328,7 @@ function rewriteTsconfig(targetDir, engineRelPath, editorRelPath) {
|
|
|
336239
336328
|
const tsconfigPath = join15(targetDir, "tsconfig.json");
|
|
336240
336329
|
if (!existsSync10(tsconfigPath)) return;
|
|
336241
336330
|
const parseErrors = [];
|
|
336242
|
-
const tsconfig = parse4(
|
|
336331
|
+
const tsconfig = parse4(readFileSync11(tsconfigPath, "utf-8"), parseErrors, {
|
|
336243
336332
|
allowTrailingComma: true
|
|
336244
336333
|
});
|
|
336245
336334
|
if (parseErrors.length > 0) {
|
|
@@ -336261,7 +336350,7 @@ function rewriteTsconfig(targetDir, engineRelPath, editorRelPath) {
|
|
|
336261
336350
|
function rewriteViteConfig(targetDir) {
|
|
336262
336351
|
const vitePath = join15(targetDir, "vite.config.ts");
|
|
336263
336352
|
if (!existsSync10(vitePath)) return;
|
|
336264
|
-
writeFileSync4(vitePath, rewriteViteConfigContent(
|
|
336353
|
+
writeFileSync4(vitePath, rewriteViteConfigContent(readFileSync11(vitePath, "utf-8")), "utf-8");
|
|
336265
336354
|
}
|
|
336266
336355
|
function rewriteViteConfigContent(content) {
|
|
336267
336356
|
return ensureReactDedupe(content);
|
|
@@ -336287,7 +336376,7 @@ function ensureReactDedupe(content) {
|
|
|
336287
336376
|
function rewriteIndexHtml(targetDir, name) {
|
|
336288
336377
|
const htmlPath = join15(targetDir, "index.html");
|
|
336289
336378
|
if (!existsSync10(htmlPath)) return;
|
|
336290
|
-
const html =
|
|
336379
|
+
const html = readFileSync11(htmlPath, "utf-8").replace(
|
|
336291
336380
|
/<title>.*<\/title>/,
|
|
336292
336381
|
`<title>${name}</title>`
|
|
336293
336382
|
);
|
|
@@ -336346,7 +336435,7 @@ function scaffoldProject(opts) {
|
|
|
336346
336435
|
// ../create-vgai-project/src/dep-cache.ts
|
|
336347
336436
|
import { spawnSync as spawnSync4 } from "node:child_process";
|
|
336348
336437
|
import { createHash as createHash4 } from "node:crypto";
|
|
336349
|
-
import { existsSync as existsSync11, mkdirSync as mkdirSync6, readFileSync as
|
|
336438
|
+
import { existsSync as existsSync11, mkdirSync as mkdirSync6, readFileSync as readFileSync12, renameSync as renameSync2, rmSync as rmSync3, statSync as statSync4 } from "node:fs";
|
|
336350
336439
|
import { homedir as homedir2 } from "node:os";
|
|
336351
336440
|
import { dirname as dirname10, isAbsolute as isAbsolute7, join as join16, resolve as resolve10 } from "node:path";
|
|
336352
336441
|
var LOCAL_SPECIFIER_PREFIXES = ["file:", "link:", "portal:"];
|
|
@@ -336454,7 +336543,7 @@ function cacheDependencies(targetDir, env3, clone2 = cloneTree) {
|
|
|
336454
336543
|
}
|
|
336455
336544
|
function readKey(targetDir) {
|
|
336456
336545
|
try {
|
|
336457
|
-
const pkg = JSON.parse(
|
|
336546
|
+
const pkg = JSON.parse(readFileSync12(join16(targetDir, "package.json"), "utf8"));
|
|
336458
336547
|
return computeDepCacheKey({
|
|
336459
336548
|
dependencies: pkg.dependencies ?? {},
|
|
336460
336549
|
devDependencies: pkg.devDependencies ?? {},
|
|
@@ -336500,7 +336589,7 @@ import {
|
|
|
336500
336589
|
existsSync as existsSync12,
|
|
336501
336590
|
mkdtempSync,
|
|
336502
336591
|
readdirSync as readdirSync7,
|
|
336503
|
-
readFileSync as
|
|
336592
|
+
readFileSync as readFileSync13,
|
|
336504
336593
|
statSync as statSync5,
|
|
336505
336594
|
writeFileSync as writeFileSync5
|
|
336506
336595
|
} from "node:fs";
|
|
@@ -336592,7 +336681,7 @@ ${detail}`
|
|
|
336592
336681
|
);
|
|
336593
336682
|
}
|
|
336594
336683
|
const stagedManifestPath = join17(stagedDir, "vgai.project.json");
|
|
336595
|
-
const staged = JSON.parse(
|
|
336684
|
+
const staged = JSON.parse(readFileSync13(stagedManifestPath, "utf-8"));
|
|
336596
336685
|
staged.relay = {
|
|
336597
336686
|
grant: minted.grant,
|
|
336598
336687
|
expiresAt: minted.expiresAt,
|
|
@@ -336602,7 +336691,7 @@ ${detail}`
|
|
|
336602
336691
|
writeFileSync5(stagedManifestPath, `${JSON.stringify(staged, null, 2)}
|
|
336603
336692
|
`, "utf-8");
|
|
336604
336693
|
const sourceManifestPath = resolveManifestPath(projectDir);
|
|
336605
|
-
const source = JSON.parse(
|
|
336694
|
+
const source = JSON.parse(readFileSync13(sourceManifestPath, "utf-8"));
|
|
336606
336695
|
if (source.relay !== void 0) {
|
|
336607
336696
|
throw new DeployError(
|
|
336608
336697
|
`vgai deploy: internal invariant violated \u2014 the SOURCE manifest at ${sourceManifestPath} gained a relay grant. The grant must live only in the staged bundle.`
|
|
@@ -336646,7 +336735,7 @@ async function deployProject(opts) {
|
|
|
336646
336735
|
}
|
|
336647
336736
|
|
|
336648
336737
|
// ../create-vgai-project/src/deploy-itch.ts
|
|
336649
|
-
import { mkdirSync as mkdirSync7, readdirSync as readdirSync8, readFileSync as
|
|
336738
|
+
import { mkdirSync as mkdirSync7, readdirSync as readdirSync8, readFileSync as readFileSync14, writeFileSync as writeFileSync6 } from "node:fs";
|
|
336650
336739
|
import { dirname as dirname11, isAbsolute as isAbsolute8, join as join18, relative as relative7, sep as sep3 } from "node:path";
|
|
336651
336740
|
|
|
336652
336741
|
// ../../../donor-main/node_modules/fflate/esm/index.mjs
|
|
@@ -337652,7 +337741,7 @@ function collectZippable(dir, base = dir) {
|
|
|
337652
337741
|
Object.assign(out, collectZippable(full, base));
|
|
337653
337742
|
} else if (entry.isFile()) {
|
|
337654
337743
|
const relPath = relative7(base, full).split(sep3).join("/");
|
|
337655
|
-
out[relPath] = new Uint8Array(
|
|
337744
|
+
out[relPath] = new Uint8Array(readFileSync14(full));
|
|
337656
337745
|
}
|
|
337657
337746
|
}
|
|
337658
337747
|
return out;
|
|
@@ -337671,7 +337760,7 @@ function assertItchZipEntries(entries) {
|
|
|
337671
337760
|
}
|
|
337672
337761
|
}
|
|
337673
337762
|
function validateItchZipFile(zipPath) {
|
|
337674
|
-
const bytes =
|
|
337763
|
+
const bytes = readFileSync14(zipPath);
|
|
337675
337764
|
const entries = [];
|
|
337676
337765
|
unzipSync(new Uint8Array(bytes), {
|
|
337677
337766
|
filter(file2) {
|
|
@@ -337789,7 +337878,7 @@ import {
|
|
|
337789
337878
|
mkdirSync as mkdirSync8,
|
|
337790
337879
|
mkdtempSync as mkdtempSync2,
|
|
337791
337880
|
readdirSync as readdirSync9,
|
|
337792
|
-
readFileSync as
|
|
337881
|
+
readFileSync as readFileSync15,
|
|
337793
337882
|
rmSync as rmSync4,
|
|
337794
337883
|
writeFileSync as writeFileSync7
|
|
337795
337884
|
} from "node:fs";
|
|
@@ -337941,7 +338030,7 @@ function classifyTemplateFiles(projectDir, baseline, newTemplateAbsPaths) {
|
|
|
337941
338030
|
status: "user-edited",
|
|
337942
338031
|
diff: unifiedDiff(
|
|
337943
338032
|
path,
|
|
337944
|
-
|
|
338033
|
+
readFileSync15(currentAbsPath, "utf-8"),
|
|
337945
338034
|
readTextSafe(newTemplateAbsPath)
|
|
337946
338035
|
)
|
|
337947
338036
|
});
|
|
@@ -337958,7 +338047,7 @@ function classifyTemplateFiles(projectDir, baseline, newTemplateAbsPaths) {
|
|
|
337958
338047
|
if (currentHash !== newTemplateHash) {
|
|
337959
338048
|
report.diff = unifiedDiff(
|
|
337960
338049
|
path,
|
|
337961
|
-
|
|
338050
|
+
readFileSync15(currentAbsPath, "utf-8"),
|
|
337962
338051
|
readTextSafe(newTemplateAbsPath)
|
|
337963
338052
|
);
|
|
337964
338053
|
}
|
|
@@ -337973,7 +338062,7 @@ function classifyTemplateFiles(projectDir, baseline, newTemplateAbsPaths) {
|
|
|
337973
338062
|
}
|
|
337974
338063
|
function readTextSafe(absPath) {
|
|
337975
338064
|
try {
|
|
337976
|
-
return
|
|
338065
|
+
return readFileSync15(absPath, "utf-8");
|
|
337977
338066
|
} catch {
|
|
337978
338067
|
return "";
|
|
337979
338068
|
}
|
|
@@ -338038,7 +338127,7 @@ function buildDependencyVersionsReport(projectDir, currentEngineVersion, targetP
|
|
|
338038
338127
|
if (!existsSync13(pkgPath)) return [];
|
|
338039
338128
|
let pkg;
|
|
338040
338129
|
try {
|
|
338041
|
-
pkg = JSON.parse(
|
|
338130
|
+
pkg = JSON.parse(readFileSync15(pkgPath, "utf-8"));
|
|
338042
338131
|
} catch {
|
|
338043
338132
|
return [];
|
|
338044
338133
|
}
|
|
@@ -338064,7 +338153,7 @@ function rewriteDependencyVersions(projectDir, entries) {
|
|
|
338064
338153
|
if (toWrite.length === 0) return;
|
|
338065
338154
|
const pkgPath = join19(projectDir, "package.json");
|
|
338066
338155
|
if (!existsSync13(pkgPath)) return;
|
|
338067
|
-
const pkg = JSON.parse(
|
|
338156
|
+
const pkg = JSON.parse(readFileSync15(pkgPath, "utf-8"));
|
|
338068
338157
|
for (const entry of toWrite) {
|
|
338069
338158
|
const bucket = entry.field === "dependencies" ? pkg.dependencies : pkg.devDependencies;
|
|
338070
338159
|
if (!bucket || bucket[entry.name] === void 0) continue;
|
|
@@ -338075,7 +338164,7 @@ function rewriteDependencyVersions(projectDir, entries) {
|
|
|
338075
338164
|
}
|
|
338076
338165
|
function rewriteEngineVersionPin(projectDir, newVersion) {
|
|
338077
338166
|
const manifestPath = resolveManifestPath(projectDir);
|
|
338078
|
-
const raw =
|
|
338167
|
+
const raw = readFileSync15(manifestPath, "utf-8");
|
|
338079
338168
|
const manifest = JSON.parse(raw);
|
|
338080
338169
|
manifest.engine = { ...manifest.engine, version: newVersion };
|
|
338081
338170
|
writeFileSync7(manifestPath, `${JSON.stringify(manifest, null, 2)}
|
|
@@ -338096,7 +338185,7 @@ function buildNewTemplateSnapshot(monoRoot, projectDir, scratchDir, currentEngin
|
|
|
338096
338185
|
const catalogDir = join19(templateDir, "..", "catalog");
|
|
338097
338186
|
copyTemplateTree(templateDir, scratchDir);
|
|
338098
338187
|
const currentManifestPath = resolveManifestPath(projectDir);
|
|
338099
|
-
const name = existsSync13(currentManifestPath) ? JSON.parse(
|
|
338188
|
+
const name = existsSync13(currentManifestPath) ? JSON.parse(readFileSync15(currentManifestPath, "utf-8")).name ?? "game" : "game";
|
|
338100
338189
|
reapplyScaffoldRewrites(
|
|
338101
338190
|
scratchDir,
|
|
338102
338191
|
projectDir,
|
|
@@ -338125,7 +338214,7 @@ var R3F_STARTER_WORLD_PATHS = /* @__PURE__ */ new Set([
|
|
|
338125
338214
|
]);
|
|
338126
338215
|
function projectUsesR3fStarterWorld(projectDir) {
|
|
338127
338216
|
try {
|
|
338128
|
-
const manifest = JSON.parse(
|
|
338217
|
+
const manifest = JSON.parse(readFileSync15(resolveManifestPath(projectDir), "utf8"));
|
|
338129
338218
|
return manifest.roots?.some(
|
|
338130
338219
|
(root) => root.adapter === "three" && root.entry?.replace(/^\.\//, "") === "src/world.tsx"
|
|
338131
338220
|
) ?? false;
|
|
@@ -338166,12 +338255,12 @@ function copyTemplateTree(templateDir, targetDir) {
|
|
|
338166
338255
|
const src = join19(templateDir, relPath);
|
|
338167
338256
|
const dest = join19(targetDir, relPath);
|
|
338168
338257
|
mkdirSync8(join19(dest, ".."), { recursive: true });
|
|
338169
|
-
writeFileSync7(dest,
|
|
338258
|
+
writeFileSync7(dest, readFileSync15(src));
|
|
338170
338259
|
}
|
|
338171
338260
|
}
|
|
338172
338261
|
function projectHasThreeRoot(projectDir) {
|
|
338173
338262
|
try {
|
|
338174
|
-
const manifest = JSON.parse(
|
|
338263
|
+
const manifest = JSON.parse(readFileSync15(resolveManifestPath(projectDir), "utf8"));
|
|
338175
338264
|
return manifest.roots?.some((root) => root.adapter === "three") ?? false;
|
|
338176
338265
|
} catch {
|
|
338177
338266
|
return false;
|
|
@@ -338193,9 +338282,9 @@ function reapplyScaffoldRewrites(scratchDir, projectDir, monoRoot, name, current
|
|
|
338193
338282
|
};
|
|
338194
338283
|
const pkgPath = join19(scratchDir, "package.json");
|
|
338195
338284
|
if (existsSync13(pkgPath)) {
|
|
338196
|
-
const pkg = JSON.parse(
|
|
338285
|
+
const pkg = JSON.parse(readFileSync15(pkgPath, "utf-8"));
|
|
338197
338286
|
const projectPkgPath = join19(projectDir, "package.json");
|
|
338198
|
-
const projectPkg = existsSync13(projectPkgPath) ? JSON.parse(
|
|
338287
|
+
const projectPkg = existsSync13(projectPkgPath) ? JSON.parse(readFileSync15(projectPkgPath, "utf-8")) : void 0;
|
|
338199
338288
|
const slug = projectPkg?.name;
|
|
338200
338289
|
if (slug) pkg.name = slug;
|
|
338201
338290
|
pkg.dependencies = pkg.dependencies ?? {};
|
|
@@ -338234,9 +338323,9 @@ function reapplyScaffoldRewrites(scratchDir, projectDir, monoRoot, name, current
|
|
|
338234
338323
|
}
|
|
338235
338324
|
const manifestPath = resolveManifestPath(scratchDir);
|
|
338236
338325
|
if (existsSync13(manifestPath)) {
|
|
338237
|
-
const manifest = JSON.parse(
|
|
338326
|
+
const manifest = JSON.parse(readFileSync15(manifestPath, "utf-8"));
|
|
338238
338327
|
const currentManifestPath = resolveManifestPath(projectDir);
|
|
338239
|
-
const currentManifest = existsSync13(currentManifestPath) ? JSON.parse(
|
|
338328
|
+
const currentManifest = existsSync13(currentManifestPath) ? JSON.parse(readFileSync15(currentManifestPath, "utf-8")) : void 0;
|
|
338240
338329
|
manifest["name"] = name;
|
|
338241
338330
|
if (currentManifest?.["appId"] !== void 0) manifest["appId"] = currentManifest["appId"];
|
|
338242
338331
|
writeFileSync7(manifestPath, `${JSON.stringify(manifest, null, 2)}
|
|
@@ -338244,7 +338333,7 @@ function reapplyScaffoldRewrites(scratchDir, projectDir, monoRoot, name, current
|
|
|
338244
338333
|
}
|
|
338245
338334
|
const tsconfigPath = join19(scratchDir, "tsconfig.json");
|
|
338246
338335
|
if (existsSync13(tsconfigPath)) {
|
|
338247
|
-
const tsconfig = JSON.parse(
|
|
338336
|
+
const tsconfig = JSON.parse(readFileSync15(tsconfigPath, "utf-8"));
|
|
338248
338337
|
tsconfig.compilerOptions = tsconfig.compilerOptions ?? {};
|
|
338249
338338
|
tsconfig.compilerOptions.paths = {
|
|
338250
338339
|
// Kept byte-identical to `scaffold.ts`'s `rewriteTsconfig` — see its doc
|
|
@@ -338264,12 +338353,12 @@ function reapplyScaffoldRewrites(scratchDir, projectDir, monoRoot, name, current
|
|
|
338264
338353
|
}
|
|
338265
338354
|
const vitePath = join19(scratchDir, "vite.config.ts");
|
|
338266
338355
|
if (existsSync13(vitePath)) {
|
|
338267
|
-
const content = rewriteViteConfigContent(
|
|
338356
|
+
const content = rewriteViteConfigContent(readFileSync15(vitePath, "utf-8"));
|
|
338268
338357
|
writeFileSync7(vitePath, content, "utf-8");
|
|
338269
338358
|
}
|
|
338270
338359
|
const htmlPath = join19(scratchDir, "index.html");
|
|
338271
338360
|
if (existsSync13(htmlPath)) {
|
|
338272
|
-
const html =
|
|
338361
|
+
const html = readFileSync15(htmlPath, "utf-8").replace(
|
|
338273
338362
|
/<title>.*<\/title>/,
|
|
338274
338363
|
`<title>${name}</title>`
|
|
338275
338364
|
);
|
|
@@ -338277,14 +338366,14 @@ function reapplyScaffoldRewrites(scratchDir, projectDir, monoRoot, name, current
|
|
|
338277
338366
|
}
|
|
338278
338367
|
const roadmapPath = join19(scratchDir, PROJECT_ROADMAP_RELATIVE_PATH);
|
|
338279
338368
|
if (existsSync13(roadmapPath)) {
|
|
338280
|
-
const roadmap =
|
|
338369
|
+
const roadmap = readFileSync15(roadmapPath, "utf-8").replace(/^# .*$/m, `# ${name} \u2014 Roadmap`);
|
|
338281
338370
|
writeFileSync7(roadmapPath, roadmap, "utf-8");
|
|
338282
338371
|
}
|
|
338283
338372
|
}
|
|
338284
338373
|
function readBaseline(projectDir) {
|
|
338285
338374
|
const path = join19(projectDir, SCAFFOLD_BASELINE_RELATIVE_PATH);
|
|
338286
338375
|
if (!existsSync13(path)) return void 0;
|
|
338287
|
-
return JSON.parse(
|
|
338376
|
+
return JSON.parse(readFileSync15(path, "utf-8"));
|
|
338288
338377
|
}
|
|
338289
338378
|
function refreshBaselineAfterUpgrade(projectDir, engineVersion, newTemplateFiles, engineDir) {
|
|
338290
338379
|
const files = {};
|
|
@@ -338315,7 +338404,7 @@ async function upgradeProject(opts) {
|
|
|
338315
338404
|
const { projectDir, monoRoot, currentEngineVersion } = opts;
|
|
338316
338405
|
const manifestPath = resolveManifestPath(projectDir);
|
|
338317
338406
|
const pinBefore = existsSync13(manifestPath) ? compareEnginePin(
|
|
338318
|
-
JSON.parse(
|
|
338407
|
+
JSON.parse(readFileSync15(manifestPath, "utf-8")).engine?.version ?? "",
|
|
338319
338408
|
currentEngineVersion
|
|
338320
338409
|
) : {
|
|
338321
338410
|
status: "invalid",
|
|
@@ -338420,7 +338509,7 @@ async function upgradeProject(opts) {
|
|
|
338420
338509
|
if (!newAbsPath) continue;
|
|
338421
338510
|
const destPath = join19(projectDir, file2.path);
|
|
338422
338511
|
mkdirSync8(join19(destPath, ".."), { recursive: true });
|
|
338423
|
-
writeFileSync7(destPath,
|
|
338512
|
+
writeFileSync7(destPath, readFileSync15(newAbsPath));
|
|
338424
338513
|
} else if (file2.status === "removed-incompatible-starter") {
|
|
338425
338514
|
const destPath = join19(projectDir, file2.path);
|
|
338426
338515
|
const baselineHash = baseline.files[file2.path];
|
|
@@ -338460,7 +338549,7 @@ function editorServerNodeOptions(inherited) {
|
|
|
338460
338549
|
}
|
|
338461
338550
|
|
|
338462
338551
|
// ../editor/server/open-browser.ts
|
|
338463
|
-
import { existsSync as existsSync14, readFileSync as
|
|
338552
|
+
import { existsSync as existsSync14, readFileSync as readFileSync16 } from "node:fs";
|
|
338464
338553
|
|
|
338465
338554
|
// ../editor/server/spawn-opener.ts
|
|
338466
338555
|
import { spawn as spawn2 } from "node:child_process";
|
|
@@ -338506,7 +338595,7 @@ function spawnOpener(cmd, cmdArgs, fallback) {
|
|
|
338506
338595
|
function isWSL() {
|
|
338507
338596
|
if (process.platform !== "linux") return false;
|
|
338508
338597
|
try {
|
|
338509
|
-
return
|
|
338598
|
+
return readFileSync16("/proc/version", "utf8").toLowerCase().includes("microsoft");
|
|
338510
338599
|
} catch {
|
|
338511
338600
|
return false;
|
|
338512
338601
|
}
|
|
@@ -338705,7 +338794,7 @@ init_load_file();
|
|
|
338705
338794
|
|
|
338706
338795
|
// ../vgai-sdk/src/project/build-discipline.ts
|
|
338707
338796
|
import { spawnSync as spawnSync6 } from "node:child_process";
|
|
338708
|
-
import { existsSync as existsSync15, mkdirSync as mkdirSync9, readdirSync as readdirSync10, readFileSync as
|
|
338797
|
+
import { existsSync as existsSync15, mkdirSync as mkdirSync9, readdirSync as readdirSync10, readFileSync as readFileSync17, statSync as statSync6, writeFileSync as writeFileSync8 } from "node:fs";
|
|
338709
338798
|
import { dirname as dirname12, join as join20 } from "node:path";
|
|
338710
338799
|
function formatElapsed(ms2) {
|
|
338711
338800
|
const totalMinutes = Math.floor(ms2 / 6e4);
|
|
@@ -338933,7 +339022,7 @@ function unplayedSessionBanner(sessionStartedAtMs, newestEvidence, now, playable
|
|
|
338933
339022
|
var TRIPWIRE_GATE_PATH = join20(".vgai", "tripwire-gate.json");
|
|
338934
339023
|
|
|
338935
339024
|
// ../vgai-sdk/src/project/session-journal.ts
|
|
338936
|
-
import { appendFileSync, mkdirSync as mkdirSync10, readdirSync as readdirSync11, readFileSync as
|
|
339025
|
+
import { appendFileSync, mkdirSync as mkdirSync10, readdirSync as readdirSync11, readFileSync as readFileSync18, unlinkSync } from "node:fs";
|
|
338937
339026
|
import { join as join21 } from "node:path";
|
|
338938
339027
|
var PREFIX = "editor-";
|
|
338939
339028
|
var SUFFIX = ".jsonl";
|
|
@@ -338951,7 +339040,7 @@ function readRecentJournalEvents(projectRoot, kinds, limit) {
|
|
|
338951
339040
|
if (path === null || limit <= 0) return [];
|
|
338952
339041
|
let raw;
|
|
338953
339042
|
try {
|
|
338954
|
-
raw =
|
|
339043
|
+
raw = readFileSync18(path, "utf-8");
|
|
338955
339044
|
} catch {
|
|
338956
339045
|
return [];
|
|
338957
339046
|
}
|
|
@@ -339087,7 +339176,7 @@ function sessionJournalPointerLine(journalPath) {
|
|
|
339087
339176
|
}
|
|
339088
339177
|
|
|
339089
339178
|
// src/account-session.ts
|
|
339090
|
-
import { readFileSync as
|
|
339179
|
+
import { readFileSync as readFileSync19 } from "node:fs";
|
|
339091
339180
|
import { homedir as homedir3 } from "node:os";
|
|
339092
339181
|
import { join as join22, resolve as resolve11 } from "node:path";
|
|
339093
339182
|
|
|
@@ -339224,7 +339313,7 @@ function cliAccountPath() {
|
|
|
339224
339313
|
}
|
|
339225
339314
|
function readCliAccountState() {
|
|
339226
339315
|
try {
|
|
339227
|
-
const value = JSON.parse(
|
|
339316
|
+
const value = JSON.parse(readFileSync19(cliAccountPath(), "utf8"));
|
|
339228
339317
|
if (value.version !== 1 || value.backend !== "mock" && value.backend !== "live") {
|
|
339229
339318
|
return void 0;
|
|
339230
339319
|
}
|
|
@@ -339714,7 +339803,7 @@ function formatAssetPackFailure(outcome, projectDir) {
|
|
|
339714
339803
|
|
|
339715
339804
|
// src/check-idioms-status.ts
|
|
339716
339805
|
import { spawnSync as spawnSync7 } from "node:child_process";
|
|
339717
|
-
import { existsSync as existsSync16, readFileSync as
|
|
339806
|
+
import { existsSync as existsSync16, readFileSync as readFileSync20, statSync as statSync7 } from "node:fs";
|
|
339718
339807
|
import { dirname as dirname15, join as join25 } from "node:path";
|
|
339719
339808
|
var SCANNER_SOURCE = "check-idioms.ts";
|
|
339720
339809
|
var FINDINGS_RECORD = join25(".vgai", "check-idioms.json");
|
|
@@ -339778,7 +339867,7 @@ function readCheckIdiomsFindings(projectRoot, changedAt) {
|
|
|
339778
339867
|
const at = recordedAt(projectRoot);
|
|
339779
339868
|
if (at === null || changedAt !== null && changedAt > at) refreshFindings(projectRoot);
|
|
339780
339869
|
try {
|
|
339781
|
-
const raw = JSON.parse(
|
|
339870
|
+
const raw = JSON.parse(readFileSync20(join25(projectRoot, FINDINGS_RECORD), "utf-8"));
|
|
339782
339871
|
if (!Array.isArray(raw.findings)) {
|
|
339783
339872
|
return [gateFailure("record-malformed", `${FINDINGS_RECORD} has no findings array`)];
|
|
339784
339873
|
}
|
|
@@ -339802,16 +339891,16 @@ function gateFailure(kind, detail) {
|
|
|
339802
339891
|
// src/colyseus-autoboot.ts
|
|
339803
339892
|
init_load_file();
|
|
339804
339893
|
import { spawn as spawn3 } from "node:child_process";
|
|
339805
|
-
import { existsSync as existsSync17, readFileSync as
|
|
339894
|
+
import { existsSync as existsSync17, readFileSync as readFileSync22 } from "node:fs";
|
|
339806
339895
|
import { join as join27 } from "node:path";
|
|
339807
339896
|
|
|
339808
339897
|
// ../engine/src/manifest/runtime-environment.ts
|
|
339809
339898
|
var import_semver = __toESM(require_semver2(), 1);
|
|
339810
|
-
import { readFileSync as
|
|
339899
|
+
import { readFileSync as readFileSync21 } from "node:fs";
|
|
339811
339900
|
import { join as join26 } from "node:path";
|
|
339812
339901
|
function declaredNodeRange(projectDir) {
|
|
339813
339902
|
try {
|
|
339814
|
-
const raw = JSON.parse(
|
|
339903
|
+
const raw = JSON.parse(readFileSync21(join26(projectDir, "package.json"), "utf-8"));
|
|
339815
339904
|
const engines = raw?.engines;
|
|
339816
339905
|
return typeof engines?.node === "string" && engines.node.trim() ? engines.node.trim() : null;
|
|
339817
339906
|
} catch {
|
|
@@ -339910,7 +339999,7 @@ function readDeclaredProcess(projectDir) {
|
|
|
339910
339999
|
try {
|
|
339911
340000
|
const manifestPath = resolveManifestPath(projectDir);
|
|
339912
340001
|
if (!existsSync17(manifestPath)) return null;
|
|
339913
|
-
const parsed = JSON.parse(
|
|
340002
|
+
const parsed = JSON.parse(readFileSync22(manifestPath, "utf8"));
|
|
339914
340003
|
const declared = (parsed.configurations ?? []).find(
|
|
339915
340004
|
(c) => c?.kind === "process" && typeof c.entry === "string"
|
|
339916
340005
|
);
|
|
@@ -340661,7 +340750,7 @@ function describeEditorBootFailure(outcome, ctx) {
|
|
|
340661
340750
|
// src/editor-sessions.ts
|
|
340662
340751
|
init_session_registry_format();
|
|
340663
340752
|
import { execFileSync as execFileSync2 } from "node:child_process";
|
|
340664
|
-
import { readFileSync as
|
|
340753
|
+
import { readFileSync as readFileSync23, realpathSync as realpathSync4, statSync as statSync9 } from "node:fs";
|
|
340665
340754
|
import { join as join29 } from "node:path";
|
|
340666
340755
|
|
|
340667
340756
|
// src/loopback-port.ts
|
|
@@ -340869,7 +340958,7 @@ function restartPendingSessionHint(projectDir, opts = {}) {
|
|
|
340869
340958
|
let parsed;
|
|
340870
340959
|
try {
|
|
340871
340960
|
mtimeMs = statSync9(file2).mtimeMs;
|
|
340872
|
-
parsed = JSON.parse(
|
|
340961
|
+
parsed = JSON.parse(readFileSync23(file2, "utf8"));
|
|
340873
340962
|
} catch {
|
|
340874
340963
|
return null;
|
|
340875
340964
|
}
|
|
@@ -350627,7 +350716,7 @@ function livePlaneLine(shape) {
|
|
|
350627
350716
|
}
|
|
350628
350717
|
|
|
350629
350718
|
// src/integrations.ts
|
|
350630
|
-
import { existsSync as existsSync21, mkdirSync as mkdirSync11, readFileSync as
|
|
350719
|
+
import { existsSync as existsSync21, mkdirSync as mkdirSync11, readFileSync as readFileSync25, renameSync as renameSync3, writeFileSync as writeFileSync9 } from "node:fs";
|
|
350631
350720
|
import { homedir as homedir4 } from "node:os";
|
|
350632
350721
|
import { dirname as dirname17, join as join30 } from "node:path";
|
|
350633
350722
|
|
|
@@ -350752,7 +350841,7 @@ function handleIntegrationHook(event, stdinRaw, env3 = process.env) {
|
|
|
350752
350841
|
function readJsonObject(path) {
|
|
350753
350842
|
if (!existsSync21(path)) return null;
|
|
350754
350843
|
try {
|
|
350755
|
-
const raw = JSON.parse(
|
|
350844
|
+
const raw = JSON.parse(readFileSync25(path, "utf8"));
|
|
350756
350845
|
if (typeof raw === "object" && raw !== null && !Array.isArray(raw)) {
|
|
350757
350846
|
return raw;
|
|
350758
350847
|
}
|
|
@@ -350997,7 +351086,7 @@ function uninstallFromClaude(path) {
|
|
|
350997
351086
|
function defaultReadStdinSync() {
|
|
350998
351087
|
try {
|
|
350999
351088
|
if (process.stdin.isTTY) return "";
|
|
351000
|
-
return
|
|
351089
|
+
return readFileSync25(0, "utf8");
|
|
351001
351090
|
} catch {
|
|
351002
351091
|
return "";
|
|
351003
351092
|
}
|
|
@@ -351071,14 +351160,14 @@ import {
|
|
|
351071
351160
|
mkdirSync as mkdirSync12,
|
|
351072
351161
|
openSync as openSync2,
|
|
351073
351162
|
readdirSync as readdirSync13,
|
|
351074
|
-
readFileSync as
|
|
351163
|
+
readFileSync as readFileSync26,
|
|
351075
351164
|
renameSync as renameSync4,
|
|
351076
351165
|
rmSync as rmSync5,
|
|
351077
351166
|
writeFileSync as writeFileSync10
|
|
351078
351167
|
} from "node:fs";
|
|
351079
351168
|
import { homedir as homedir5 } from "node:os";
|
|
351080
351169
|
import { dirname as dirname18, isAbsolute as isAbsolute10, join as join31, relative as relative10, resolve as resolve14, sep as sep5 } from "node:path";
|
|
351081
|
-
import { fileURLToPath as
|
|
351170
|
+
import { fileURLToPath as fileURLToPath2, pathToFileURL } from "node:url";
|
|
351082
351171
|
|
|
351083
351172
|
// ../editor/server/worktree-identity.ts
|
|
351084
351173
|
import { execFileSync as execFileSync4 } from "node:child_process";
|
|
@@ -351172,7 +351261,7 @@ function resolveWorktreeIdentity(projectRoot) {
|
|
|
351172
351261
|
// src/isolated-worktree.ts
|
|
351173
351262
|
var CONTAINER_IMAGE_REVISION = 7;
|
|
351174
351263
|
var CLI_VERSION = JSON.parse(
|
|
351175
|
-
|
|
351264
|
+
readFileSync26(resolve14(dirname18(fileURLToPath2(import.meta.url)), "../package.json"), "utf8")
|
|
351176
351265
|
).version;
|
|
351177
351266
|
var IMAGE = `vgai/isolated-worktree:${CLI_VERSION}-${CONTAINER_IMAGE_REVISION}`;
|
|
351178
351267
|
var CONTAINER_PORT = 25680;
|
|
@@ -351237,7 +351326,7 @@ function writeRecord(record2) {
|
|
|
351237
351326
|
chmodSync(statePath(record2.id), 384);
|
|
351238
351327
|
}
|
|
351239
351328
|
function readRecord(id) {
|
|
351240
|
-
const record2 = JSON.parse(
|
|
351329
|
+
const record2 = JSON.parse(readFileSync26(statePath(id), "utf8"));
|
|
351241
351330
|
if (record2.version !== STATE_VERSION || record2.id !== id) {
|
|
351242
351331
|
throw new Error(`Unsupported isolated-worktree state: ${statePath(id)}`);
|
|
351243
351332
|
}
|
|
@@ -351259,7 +351348,7 @@ function isolatedId(repositoryId, branch) {
|
|
|
351259
351348
|
return createHash7("sha256").update(`${repositoryId}\0${branch}`).digest("hex").slice(0, 16);
|
|
351260
351349
|
}
|
|
351261
351350
|
function imageContext() {
|
|
351262
|
-
return resolve14(dirname18(
|
|
351351
|
+
return resolve14(dirname18(fileURLToPath2(import.meta.url)), "../container");
|
|
351263
351352
|
}
|
|
351264
351353
|
function ensureImage(runner) {
|
|
351265
351354
|
try {
|
|
@@ -351282,7 +351371,7 @@ function assertCleanRepository(root, runner) {
|
|
|
351282
351371
|
function assertLocalDependencyInsideRepository(root, ownerPath, label, rawSpecifier) {
|
|
351283
351372
|
let target;
|
|
351284
351373
|
if (rawSpecifier.startsWith("file:")) {
|
|
351285
|
-
target =
|
|
351374
|
+
target = fileURLToPath2(new URL(rawSpecifier, pathToFileURL(`${dirname18(ownerPath)}/`)));
|
|
351286
351375
|
} else if (rawSpecifier.startsWith("link:")) {
|
|
351287
351376
|
target = resolve14(dirname18(ownerPath), rawSpecifier.slice("link:".length));
|
|
351288
351377
|
}
|
|
@@ -351327,7 +351416,7 @@ function assertReproducibleLocalDependencies(root, runner) {
|
|
|
351327
351416
|
];
|
|
351328
351417
|
for (const manifestRelative of manifests) {
|
|
351329
351418
|
const manifestPath = resolve14(root, manifestRelative);
|
|
351330
|
-
const manifest = JSON.parse(
|
|
351419
|
+
const manifest = JSON.parse(readFileSync26(manifestPath, "utf8"));
|
|
351331
351420
|
for (const group of dependencyGroups) {
|
|
351332
351421
|
for (const [name, rawSpecifier] of Object.entries(manifest[group] ?? {})) {
|
|
351333
351422
|
if (typeof rawSpecifier !== "string") continue;
|
|
@@ -351342,7 +351431,7 @@ function assertReproducibleLocalDependencies(root, runner) {
|
|
|
351342
351431
|
assertLockResolutionsInsideRepository(
|
|
351343
351432
|
root,
|
|
351344
351433
|
lockPath,
|
|
351345
|
-
JSON.parse(
|
|
351434
|
+
JSON.parse(readFileSync26(lockPath, "utf8"))
|
|
351346
351435
|
);
|
|
351347
351436
|
}
|
|
351348
351437
|
}
|
|
@@ -351726,7 +351815,7 @@ async function hydrateManagedDeployEnv(resolveToken = cliAccountAccessToken) {
|
|
|
351726
351815
|
var import_core13 = __toESM(require_lib(), 1);
|
|
351727
351816
|
init_src2();
|
|
351728
351817
|
import { dirname as dirname19, resolve as resolvePath2 } from "node:path";
|
|
351729
|
-
import { fileURLToPath as
|
|
351818
|
+
import { fileURLToPath as fileURLToPath3 } from "node:url";
|
|
351730
351819
|
|
|
351731
351820
|
// src/oclif/exit-codes.ts
|
|
351732
351821
|
var EXIT_CODES = {
|
|
@@ -351788,7 +351877,7 @@ function exitCodeForErrorCode(code) {
|
|
|
351788
351877
|
|
|
351789
351878
|
// src/oclif/operation-command.ts
|
|
351790
351879
|
var import_core12 = __toESM(require_lib(), 1);
|
|
351791
|
-
import { readFileSync as
|
|
351880
|
+
import { readFileSync as readFileSync27 } from "node:fs";
|
|
351792
351881
|
import { resolve as resolve15 } from "node:path";
|
|
351793
351882
|
|
|
351794
351883
|
// src/oclif/schema-to-flags.ts
|
|
@@ -351956,7 +352045,7 @@ function applyScalarFlags(scalarFields, flags, input) {
|
|
|
351956
352045
|
function readInputFile(inputFile) {
|
|
351957
352046
|
let raw;
|
|
351958
352047
|
try {
|
|
351959
|
-
raw =
|
|
352048
|
+
raw = readFileSync27(resolve15(inputFile), "utf-8");
|
|
351960
352049
|
} catch (err2) {
|
|
351961
352050
|
return {
|
|
351962
352051
|
ok: false,
|
|
@@ -352178,7 +352267,7 @@ function createOperationCommand(def, registry3) {
|
|
|
352178
352267
|
}
|
|
352179
352268
|
|
|
352180
352269
|
// src/oclif/dispatch.ts
|
|
352181
|
-
var __dirname3 = dirname19(
|
|
352270
|
+
var __dirname3 = dirname19(fileURLToPath3(import.meta.url));
|
|
352182
352271
|
var CLI_PACKAGE_ROOT = resolvePath2(__dirname3, "..", "..");
|
|
352183
352272
|
var cachedConfig;
|
|
352184
352273
|
async function loadConfig() {
|
|
@@ -352261,7 +352350,7 @@ import { join as join33 } from "node:path";
|
|
|
352261
352350
|
|
|
352262
352351
|
// src/perf.ts
|
|
352263
352352
|
init_load();
|
|
352264
|
-
import { existsSync as existsSync23, mkdirSync as mkdirSync13, readdirSync as readdirSync14, readFileSync as
|
|
352353
|
+
import { existsSync as existsSync23, mkdirSync as mkdirSync13, readdirSync as readdirSync14, readFileSync as readFileSync28, rmSync as rmSync6, writeFileSync as writeFileSync11 } from "node:fs";
|
|
352265
352354
|
import { dirname as dirname20, join as join32, resolve as resolve16 } from "node:path";
|
|
352266
352355
|
function percentile2(values, fraction) {
|
|
352267
352356
|
if (values.length === 0) return 0;
|
|
@@ -352439,7 +352528,7 @@ function readTrendEntries(projectRoot, limit) {
|
|
|
352439
352528
|
const entries = [];
|
|
352440
352529
|
for (const f of files) {
|
|
352441
352530
|
try {
|
|
352442
|
-
entries.push(JSON.parse(
|
|
352531
|
+
entries.push(JSON.parse(readFileSync28(join32(dir, f), "utf8")));
|
|
352443
352532
|
} catch {
|
|
352444
352533
|
}
|
|
352445
352534
|
}
|
|
@@ -352500,7 +352589,7 @@ function readManifestBudget(manifestPath) {
|
|
|
352500
352589
|
}
|
|
352501
352590
|
let raw;
|
|
352502
352591
|
try {
|
|
352503
|
-
raw = JSON.parse(
|
|
352592
|
+
raw = JSON.parse(readFileSync28(manifestPath, "utf8"));
|
|
352504
352593
|
} catch (err2) {
|
|
352505
352594
|
throw new PerfGateError(
|
|
352506
352595
|
`Could not parse ${manifestPath}: ${err2 instanceof Error ? err2.message : String(err2)}`
|
|
@@ -352519,7 +352608,7 @@ function readReportFile(path) {
|
|
|
352519
352608
|
if (!existsSync23(abs)) throw new PerfGateError(`No perf report at ${abs}.`);
|
|
352520
352609
|
let parsed;
|
|
352521
352610
|
try {
|
|
352522
|
-
parsed = JSON.parse(
|
|
352611
|
+
parsed = JSON.parse(readFileSync28(abs, "utf8"));
|
|
352523
352612
|
} catch (err2) {
|
|
352524
352613
|
throw new PerfGateError(
|
|
352525
352614
|
`Could not parse perf report ${abs}: ${err2 instanceof Error ? err2.message : String(err2)}`
|
|
@@ -352881,7 +352970,7 @@ async function playWithRelayReloadRetry(client, opts, dependencies = {}) {
|
|
|
352881
352970
|
|
|
352882
352971
|
// src/project-editor-port.ts
|
|
352883
352972
|
import { createHash as createHash8 } from "node:crypto";
|
|
352884
|
-
import { mkdirSync as mkdirSync14, readFileSync as
|
|
352973
|
+
import { mkdirSync as mkdirSync14, readFileSync as readFileSync29, renameSync as renameSync5, rmdirSync, statSync as statSync10, writeFileSync as writeFileSync12 } from "node:fs";
|
|
352885
352974
|
import { homedir as homedir6 } from "node:os";
|
|
352886
352975
|
import { dirname as dirname21, join as join34 } from "node:path";
|
|
352887
352976
|
var MIN_PORT = 1024;
|
|
@@ -352905,7 +352994,7 @@ function isEntry(value) {
|
|
|
352905
352994
|
function readEntries2(registryFile) {
|
|
352906
352995
|
let raw;
|
|
352907
352996
|
try {
|
|
352908
|
-
raw =
|
|
352997
|
+
raw = readFileSync29(registryFile, "utf8");
|
|
352909
352998
|
} catch (error48) {
|
|
352910
352999
|
if (error48.code === "ENOENT") return [];
|
|
352911
353000
|
throw new Error(
|
|
@@ -353611,7 +353700,7 @@ function describeTabAttachment(outcome, editorUrl) {
|
|
|
353611
353700
|
// src/validate.ts
|
|
353612
353701
|
var import_typescript2 = __toESM(require_typescript(), 1);
|
|
353613
353702
|
init_zod();
|
|
353614
|
-
import { existsSync as existsSync24, readdirSync as readdirSync15, readFileSync as
|
|
353703
|
+
import { existsSync as existsSync24, readdirSync as readdirSync15, readFileSync as readFileSync30, statSync as statSync11 } from "node:fs";
|
|
353615
353704
|
import { dirname as dirname22, join as join36, resolve as resolve18 } from "node:path";
|
|
353616
353705
|
init_load_file();
|
|
353617
353706
|
|
|
@@ -353699,7 +353788,7 @@ function collectSourceFiles2(dir) {
|
|
|
353699
353788
|
}
|
|
353700
353789
|
function collectUnmanagedReactRoots(folder) {
|
|
353701
353790
|
return collectSourceFiles2(join36(folder, "src")).flatMap(
|
|
353702
|
-
(file2) => detectUnmanagedReactRoots(
|
|
353791
|
+
(file2) => detectUnmanagedReactRoots(readFileSync30(file2, "utf-8"), file2)
|
|
353703
353792
|
);
|
|
353704
353793
|
}
|
|
353705
353794
|
var MIN_REACT_ROOT_DESIGN_STATES = 3;
|
|
@@ -353832,7 +353921,7 @@ function readDefaultExportedComponentName(source) {
|
|
|
353832
353921
|
function parseStoryModule(file2) {
|
|
353833
353922
|
let text2;
|
|
353834
353923
|
try {
|
|
353835
|
-
text2 =
|
|
353924
|
+
text2 = readFileSync30(file2, "utf-8");
|
|
353836
353925
|
} catch {
|
|
353837
353926
|
return null;
|
|
353838
353927
|
}
|
|
@@ -353868,7 +353957,7 @@ function collectReactDesignStateChecks(folder, manifest) {
|
|
|
353868
353957
|
if (!existsSync24(entryPath)) return skip(`${entry} does not exist`);
|
|
353869
353958
|
let entrySource;
|
|
353870
353959
|
try {
|
|
353871
|
-
entrySource =
|
|
353960
|
+
entrySource = readFileSync30(entryPath, "utf-8");
|
|
353872
353961
|
} catch {
|
|
353873
353962
|
return skip(`${entry} could not be read`);
|
|
353874
353963
|
}
|
|
@@ -353935,7 +354024,7 @@ function checkEngineSourceDrift(folder, engineDir) {
|
|
|
353935
354024
|
if (!existsSync24(baselinePath)) return void 0;
|
|
353936
354025
|
let recorded;
|
|
353937
354026
|
try {
|
|
353938
|
-
recorded = JSON.parse(
|
|
354027
|
+
recorded = JSON.parse(readFileSync30(baselinePath, "utf-8")).engineSource;
|
|
353939
354028
|
} catch {
|
|
353940
354029
|
return void 0;
|
|
353941
354030
|
}
|
|
@@ -354003,7 +354092,7 @@ import { execFile as execFile2, execFileSync as execFileSync7 } from "node:child
|
|
|
354003
354092
|
// ../editor/server/worktree-retention.mjs
|
|
354004
354093
|
import { execFileSync as execFileSync6 } from "node:child_process";
|
|
354005
354094
|
import { createHash as createHash9, randomUUID as randomUUID2 } from "node:crypto";
|
|
354006
|
-
import { existsSync as existsSync25, linkSync, mkdirSync as mkdirSync15, readFileSync as
|
|
354095
|
+
import { existsSync as existsSync25, linkSync, mkdirSync as mkdirSync15, readFileSync as readFileSync31, realpathSync as realpathSync6, renameSync as renameSync6, rmSync as rmSync7, writeFileSync as writeFileSync13 } from "node:fs";
|
|
354007
354096
|
import { basename as basename4, dirname as dirname23, join as join37, resolve as resolve19 } from "node:path";
|
|
354008
354097
|
var git4 = (root, args2) => execFileSync6("git", ["-C", root, ...args2], { encoding: "utf8" }).trim();
|
|
354009
354098
|
function canonical2(target) {
|
|
@@ -354033,7 +354122,7 @@ function locked(repo, target, action) {
|
|
|
354033
354122
|
}
|
|
354034
354123
|
}
|
|
354035
354124
|
function read(file2) {
|
|
354036
|
-
return existsSync25(file2) ? JSON.parse(
|
|
354125
|
+
return existsSync25(file2) ? JSON.parse(readFileSync31(file2, "utf8")) : null;
|
|
354037
354126
|
}
|
|
354038
354127
|
function registered(repo, path) {
|
|
354039
354128
|
return git4(repo, ["worktree", "list", "--porcelain", "-z"]).split("\0").includes(`worktree ${path}`);
|
|
@@ -354046,7 +354135,7 @@ function generationFile(repo, path) {
|
|
|
354046
354135
|
function markGeneration(repo, path, record2) {
|
|
354047
354136
|
const file2 = generationFile(repo, path);
|
|
354048
354137
|
if (existsSync25(file2)) {
|
|
354049
|
-
if (
|
|
354138
|
+
if (readFileSync31(file2, "utf8") !== record2.generation) throw new Error("Worktree generation differs from creation intent.");
|
|
354050
354139
|
} else {
|
|
354051
354140
|
const temporary = `${file2}.${randomUUID2()}.tmp`;
|
|
354052
354141
|
try {
|
|
@@ -354058,7 +354147,7 @@ function markGeneration(repo, path, record2) {
|
|
|
354058
354147
|
}
|
|
354059
354148
|
}
|
|
354060
354149
|
function verifyGeneration(repo, path, record2) {
|
|
354061
|
-
if (
|
|
354150
|
+
if (readFileSync31(generationFile(repo, path), "utf8") !== record2.generation) throw new Error("Worktree generation changed; old completion cannot remove it.");
|
|
354062
354151
|
}
|
|
354063
354152
|
function preserve(repo, ref, head) {
|
|
354064
354153
|
try {
|
|
@@ -354300,7 +354389,7 @@ function archiveRepositoryWorktree(projectRoot, targetRoot, sessions2) {
|
|
|
354300
354389
|
}
|
|
354301
354390
|
|
|
354302
354391
|
// src/index.ts
|
|
354303
|
-
var __dirname4 = dirname26(
|
|
354392
|
+
var __dirname4 = dirname26(fileURLToPath4(import.meta.url));
|
|
354304
354393
|
function resolveCliEngineRoot(cliDir) {
|
|
354305
354394
|
const candidate = resolve21(cliDir, "..", "..", "..");
|
|
354306
354395
|
return basename6(candidate) === "node_modules" ? dirname26(candidate) : candidate;
|
|
@@ -354313,11 +354402,11 @@ function catalogDistributionDir() {
|
|
|
354313
354402
|
);
|
|
354314
354403
|
}
|
|
354315
354404
|
function cliVersion() {
|
|
354316
|
-
if ("0.5.
|
|
354317
|
-
return "0.5.
|
|
354405
|
+
if ("0.5.52") {
|
|
354406
|
+
return "0.5.52";
|
|
354318
354407
|
}
|
|
354319
354408
|
try {
|
|
354320
|
-
const pkg = JSON.parse(
|
|
354409
|
+
const pkg = JSON.parse(readFileSync32(join39(__dirname4, "..", "package.json"), "utf8"));
|
|
354321
354410
|
return typeof pkg.version === "string" ? pkg.version : "unknown";
|
|
354322
354411
|
} catch {
|
|
354323
354412
|
return "unknown";
|
|
@@ -354333,7 +354422,7 @@ function bakedTargetVersions() {
|
|
|
354333
354422
|
if (false)
|
|
354334
354423
|
return void 0;
|
|
354335
354424
|
try {
|
|
354336
|
-
return JSON.parse('{"@vgai/engine":"0.5.
|
|
354425
|
+
return JSON.parse('{"@vgai/engine":"0.5.52","@vgai/editor":"0.5.52","@vgai/p2p-colyseus":"0.5.52","@vgai/live":"0.5.52","@vgai/sdk":"0.5.52","@vgai/editor-sdk":"0.5.52","@vgai/cli":"0.5.52"}');
|
|
354337
354426
|
} catch {
|
|
354338
354427
|
return void 0;
|
|
354339
354428
|
}
|
|
@@ -354450,11 +354539,12 @@ Drive the running game or editor \u2014 THE general door:
|
|
|
354450
354539
|
eval <js> Literal JS with { editor, game, page, tools, session }.
|
|
354451
354540
|
A game names its OWN commands, so no fixed verb set can
|
|
354452
354541
|
cover them. Start with: vgai eval --list
|
|
354453
|
-
|
|
354542
|
+
tool <name> Invoke one registered project tool with validated JSON
|
|
354454
354543
|
input (--list names them, --describe prints its schemas,
|
|
354455
354544
|
--input <file|-> pipes the input in)
|
|
354456
354545
|
|
|
354457
354546
|
Run and look at it:
|
|
354547
|
+
run [id] List or start a declared run configuration; --stop <id> stops it
|
|
354458
354548
|
play / stop Enter / leave play mode
|
|
354459
354549
|
restart Reload stale public/ assets when needed, then remount \u2014 acks
|
|
354460
354550
|
only when the session is READY (tab attached, play running)
|
|
@@ -354606,8 +354696,10 @@ Project:
|
|
|
354606
354696
|
open <path> Switch project in running editor
|
|
354607
354697
|
project Show current project info
|
|
354608
354698
|
projects List recent projects
|
|
354609
|
-
run
|
|
354610
|
-
|
|
354699
|
+
run [id] List or start a declared run configuration
|
|
354700
|
+
--stop <id> Stop the selected configuration
|
|
354701
|
+
tool --list List project-local runnable capabilities
|
|
354702
|
+
tool <name> Run a Node-hosted project capability with validated JSON input
|
|
354611
354703
|
--describe Print the selected capability's schemas and metadata without running
|
|
354612
354704
|
--input <file|-> Read input JSON from a file or stdin (default: {})
|
|
354613
354705
|
--yes Confirm write/destructive tool execution
|
|
@@ -355217,7 +355309,7 @@ async function colyseusPresenceWarning(projectDir) {
|
|
|
355217
355309
|
try {
|
|
355218
355310
|
const manifestPath = resolveManifestPath(projectDir);
|
|
355219
355311
|
if (!existsSync27(manifestPath)) return null;
|
|
355220
|
-
const parsed = JSON.parse(
|
|
355312
|
+
const parsed = JSON.parse(readFileSync32(manifestPath, "utf8"));
|
|
355221
355313
|
if (typeof parsed.server?.room !== "string") return null;
|
|
355222
355314
|
room = parsed.server.room;
|
|
355223
355315
|
} catch {
|
|
@@ -355359,7 +355451,7 @@ function readNewestPlayLog(projectRoot) {
|
|
|
355359
355451
|
const name = newestPlayLogName(readdirSync16(logsDir));
|
|
355360
355452
|
if (!name) return { logFile: null, logErrors: [] };
|
|
355361
355453
|
const file2 = join39(logsDir, name);
|
|
355362
|
-
return { logFile: file2, logErrors: playLogErrorMessages(
|
|
355454
|
+
return { logFile: file2, logErrors: playLogErrorMessages(readFileSync32(file2, "utf-8")) };
|
|
355363
355455
|
} catch {
|
|
355364
355456
|
return { logFile: null, logErrors: [] };
|
|
355365
355457
|
}
|
|
@@ -355626,7 +355718,7 @@ add requires at least one capability id`);
|
|
|
355626
355718
|
}
|
|
355627
355719
|
function projectToolIdentities(projectDir) {
|
|
355628
355720
|
try {
|
|
355629
|
-
const pkg = JSON.parse(
|
|
355721
|
+
const pkg = JSON.parse(readFileSync32(join39(projectDir, "package.json"), "utf8"));
|
|
355630
355722
|
const identities = /* @__PURE__ */ new Set();
|
|
355631
355723
|
for (const tool of pkg.vgai?.tools ?? []) {
|
|
355632
355724
|
const identity = typeof tool === "string" ? tool : tool.entry ?? tool.id;
|
|
@@ -355687,7 +355779,7 @@ function listAvailableExamples(monoRoot = ENGINE_ROOT) {
|
|
|
355687
355779
|
const manifestPath = join39(examplesDir, entry.name, "vgai.project.json");
|
|
355688
355780
|
if (!existsSync27(manifestPath)) continue;
|
|
355689
355781
|
try {
|
|
355690
|
-
const manifest = JSON.parse(
|
|
355782
|
+
const manifest = JSON.parse(readFileSync32(manifestPath, "utf-8"));
|
|
355691
355783
|
examples.push({
|
|
355692
355784
|
id: entry.name,
|
|
355693
355785
|
name: typeof manifest.name === "string" ? manifest.name : entry.name
|
|
@@ -356267,7 +356359,7 @@ function describeEditorProvenance(packagedEntry, engineRoot) {
|
|
|
356267
356359
|
const editorPkgDir = dirname26(dirname26(packagedEntry));
|
|
356268
356360
|
let version2 = "unknown";
|
|
356269
356361
|
try {
|
|
356270
|
-
version2 = JSON.parse(
|
|
356362
|
+
version2 = JSON.parse(readFileSync32(join39(editorPkgDir, "package.json"), "utf8")).version ?? "unknown";
|
|
356271
356363
|
} catch {
|
|
356272
356364
|
}
|
|
356273
356365
|
return `Editor: packaged @vgai/editor@${version2} (${editorPkgDir})`;
|
|
@@ -357197,7 +357289,7 @@ async function runAssetLabLook(source, flags, outputDirectory, defaultStage) {
|
|
|
357197
357289
|
screenshotUsageError("--compare stages its own subject; --stage does not apply");
|
|
357198
357290
|
}
|
|
357199
357291
|
const refAbsolute = resolve21(flags.compare);
|
|
357200
|
-
const refBytes =
|
|
357292
|
+
const refBytes = readFileSync32(refAbsolute);
|
|
357201
357293
|
const maxRefBytes = 32 * 1024 * 1024;
|
|
357202
357294
|
if (refBytes.byteLength > maxRefBytes) {
|
|
357203
357295
|
throw new Error(`--compare reference GLB must be ${maxRefBytes / 1024 / 1024} MiB or less.`);
|
|
@@ -357939,7 +358031,7 @@ async function run() {
|
|
|
357939
358031
|
try {
|
|
357940
358032
|
await dispatchCommand();
|
|
357941
358033
|
} finally {
|
|
357942
|
-
await drainConsoleLoudness(resolveConsoleLoudnessUrl());
|
|
358034
|
+
if (command !== "close") await drainConsoleLoudness(resolveConsoleLoudnessUrl());
|
|
357943
358035
|
}
|
|
357944
358036
|
}
|
|
357945
358037
|
async function dispatchCommand() {
|
|
@@ -358053,7 +358145,7 @@ ${JSON.stringify(operation.resultSchema, null, 2)}`);
|
|
|
358053
358145
|
if (inputPath) {
|
|
358054
358146
|
try {
|
|
358055
358147
|
input = JSON.parse(
|
|
358056
|
-
inputPath === "-" ?
|
|
358148
|
+
inputPath === "-" ? readFileSync32(0, "utf8") : readFileSync32(resolve21(inputPath), "utf8")
|
|
358057
358149
|
);
|
|
358058
358150
|
} catch (error48) {
|
|
358059
358151
|
console.error(
|
|
@@ -358188,7 +358280,7 @@ Inspects first. Without --write this is a preview. With --write it creates only
|
|
|
358188
358280
|
throw new Error("vgai blender-mcp: run it from inside a vgai project.");
|
|
358189
358281
|
}
|
|
358190
358282
|
if (!await hasLiveEditorSession(project)) {
|
|
358191
|
-
spawnSync10(process.execPath, [
|
|
358283
|
+
spawnSync10(process.execPath, [fileURLToPath4(import.meta.url), "edit", project], {
|
|
358192
358284
|
cwd: project,
|
|
358193
358285
|
stdio: ["ignore", 2, 2],
|
|
358194
358286
|
env: { ...process.env, VGAI_DETACH_AFTER_READY: "1" }
|
|
@@ -359429,7 +359521,7 @@ Choose exactly one target: project, --port/--url, --all, or --everywhere.`
|
|
|
359429
359521
|
let source;
|
|
359430
359522
|
if (fileFlag) {
|
|
359431
359523
|
try {
|
|
359432
|
-
source =
|
|
359524
|
+
source = readFileSync32(resolve21(process.cwd(), rest[1] ?? ""), "utf-8");
|
|
359433
359525
|
} catch (err2) {
|
|
359434
359526
|
console.error(
|
|
359435
359527
|
`vgai eval: cannot read ${rest[1]} \u2014 ${err2 instanceof Error ? err2.message : String(err2)}`
|
|
@@ -359567,24 +359659,27 @@ Choose exactly one target: project, --port/--url, --all, or --everywhere.`
|
|
|
359567
359659
|
case "run": {
|
|
359568
359660
|
if (hasHelpFlag(args)) {
|
|
359569
359661
|
console.log(
|
|
359570
|
-
"Usage: vgai run (list the project's configurations and their status)\n vgai run <id> (start a declared run-role configuration through the live editor session)\n vgai run --stop <id> (stop it)\n
|
|
359662
|
+
"Usage: vgai run (list the project's configurations and their status)\n vgai run <id> (start a declared run-role configuration through the live editor session)\n vgai run --stop <id> (stop it)\n The editor's transport, this verb and a harness start the same declared configuration."
|
|
359571
359663
|
);
|
|
359572
359664
|
break;
|
|
359573
359665
|
}
|
|
359574
|
-
const base = resolveEditorTargetUrl();
|
|
359575
359666
|
const rest = args.slice(1);
|
|
359667
|
+
const validArgs = rest.length === 0 || rest.length === 1 && !rest[0].startsWith("-") || rest.length === 2 && rest[0] === "--stop" && !rest[1].startsWith("-");
|
|
359668
|
+
if (!validArgs) throw new Error("Usage: vgai run [id] | vgai run --stop <id>");
|
|
359669
|
+
const base = resolveEditorTargetUrl();
|
|
359576
359670
|
const stopFlag = rest.indexOf("--stop");
|
|
359577
359671
|
const targetId = stopFlag >= 0 ? rest[stopFlag + 1] : rest.find((a) => !a.startsWith("-"));
|
|
359578
359672
|
if (!targetId) {
|
|
359579
359673
|
const res2 = await fetch(`${base}/__editor/configurations`);
|
|
359580
359674
|
const body2 = await res2.json();
|
|
359581
359675
|
if (!res2.ok) throw new Error(body2.error ?? `vgai run: ${res2.status}`);
|
|
359582
|
-
|
|
359676
|
+
const configurations = (body2.configurations ?? []).filter((c) => c.role === "run");
|
|
359677
|
+
for (const c of configurations) {
|
|
359583
359678
|
console.log(
|
|
359584
359679
|
`${c.status === "running" ? "\u25CF" : "\u25CB"} ${c.id} ${c.kind}${c.port ? ` :${c.port}` : ""}`
|
|
359585
359680
|
);
|
|
359586
359681
|
}
|
|
359587
|
-
if (
|
|
359682
|
+
if (configurations.length === 0)
|
|
359588
359683
|
console.log("(this project declares no run configurations)");
|
|
359589
359684
|
break;
|
|
359590
359685
|
}
|
|
@@ -359757,7 +359852,7 @@ Choose exactly one target: project, --port/--url, --all, or --everywhere.`
|
|
|
359757
359852
|
);
|
|
359758
359853
|
let playable = true;
|
|
359759
359854
|
try {
|
|
359760
|
-
const raw = JSON.parse(
|
|
359855
|
+
const raw = JSON.parse(readFileSync32(resolveManifestPath(statusProjectRoot), "utf8"));
|
|
359761
359856
|
playable = Array.isArray(raw.roots) && raw.roots.length > 0;
|
|
359762
359857
|
} catch {
|
|
359763
359858
|
}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@vgai/cli",
|
|
3
3
|
"author": "Volter AI, Inc.",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
|
-
"version": "0.5.
|
|
5
|
+
"version": "0.5.52",
|
|
6
6
|
"description": "Create, open, control, validate, and playtest VGAI game projects.",
|
|
7
7
|
"keywords": [
|
|
8
8
|
"game-engine",
|
|
@@ -39,12 +39,12 @@
|
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@oclif/core": "^4.11.14",
|
|
42
|
-
"@vgai/editor": "0.5.
|
|
43
|
-
"@vgai/editor-sdk": "0.5.
|
|
44
|
-
"@vgai/engine": "0.5.
|
|
45
|
-
"@vgai/live": "0.5.
|
|
46
|
-
"@vgai/p2p-colyseus": "0.5.
|
|
47
|
-
"@vgai/sdk": "0.5.
|
|
42
|
+
"@vgai/editor": "0.5.52",
|
|
43
|
+
"@vgai/editor-sdk": "0.5.52",
|
|
44
|
+
"@vgai/engine": "0.5.52",
|
|
45
|
+
"@vgai/live": "0.5.52",
|
|
46
|
+
"@vgai/p2p-colyseus": "0.5.52",
|
|
47
|
+
"@vgai/sdk": "0.5.52",
|
|
48
48
|
"ink": "^7.1.0",
|
|
49
49
|
"playwright": "^1.58.2",
|
|
50
50
|
"react": "^19.2.4",
|