@vantaloom/runtime-linux-x64 0.2.0 → 0.3.6
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/VERSION +1 -1
- package/bin/vantaloom-agent +0 -0
- package/bin/vantaloom-api +0 -0
- package/bin/vantaloomctl +0 -0
- package/cli/package.json +1 -1
- package/cli/src/cli.mjs +306 -23
- package/manifest.json +2 -2
- package/package.json +1 -1
- package/web/404.html +1 -1
- package/web/__next.__PAGE__.txt +2 -2
- package/web/__next._full.txt +3 -3
- package/web/__next._head.txt +1 -1
- package/web/__next._index.txt +2 -2
- package/web/__next._tree.txt +2 -2
- package/web/_next/static/chunks/73d2c788f1076e9a.css +2 -0
- package/web/_next/static/chunks/7d5ab4ba8d474929.js +52 -0
- package/web/_not-found/__next._full.txt +2 -2
- package/web/_not-found/__next._head.txt +1 -1
- package/web/_not-found/__next._index.txt +2 -2
- package/web/_not-found/__next._not-found/__PAGE__.txt +1 -1
- package/web/_not-found/__next._not-found.txt +1 -1
- package/web/_not-found/__next._tree.txt +2 -2
- package/web/_not-found.html +1 -1
- package/web/_not-found.txt +2 -2
- package/web/index.html +1 -31
- package/web/index.txt +3 -3
- package/web/_next/static/chunks/1da7f8d27cd96c86.js +0 -52
- package/web/_next/static/chunks/c0c4db6d45c7ff65.css +0 -2
- /package/web/_next/static/{qDb937Fsr8zR_VHDxrNf_ → 2kPL4gOT89qnDZSfX50Rn}/_buildManifest.js +0 -0
- /package/web/_next/static/{qDb937Fsr8zR_VHDxrNf_ → 2kPL4gOT89qnDZSfX50Rn}/_clientMiddlewareManifest.json +0 -0
- /package/web/_next/static/{qDb937Fsr8zR_VHDxrNf_ → 2kPL4gOT89qnDZSfX50Rn}/_ssgManifest.js +0 -0
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
532507a
|
package/bin/vantaloom-agent
CHANGED
|
Binary file
|
package/bin/vantaloom-api
CHANGED
|
Binary file
|
package/bin/vantaloomctl
CHANGED
|
Binary file
|
package/cli/package.json
CHANGED
package/cli/src/cli.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { execFileSync, spawnSync } from "node:child_process"
|
|
2
2
|
import {
|
|
3
|
+
appendFileSync,
|
|
3
4
|
chmodSync,
|
|
4
5
|
existsSync,
|
|
5
6
|
mkdirSync,
|
|
@@ -20,11 +21,45 @@ const installedConfigPath = path.join(cliRoot, "config.json")
|
|
|
20
21
|
const defaultReleaseTag = "runtime-latest"
|
|
21
22
|
const defaultRepo = "Timefiles404/Vantaloom-next"
|
|
22
23
|
const defaultNpmRegistry = "https://registry.npmjs.org"
|
|
24
|
+
const fallbackNpmRegistries = [
|
|
25
|
+
"https://registry.npmmirror.com",
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
// Inherit strict-ssl=false from npm/npx config, or respect NODE_TLS_REJECT_UNAUTHORIZED.
|
|
29
|
+
// When npm runs us via npx with strict-ssl disabled, it sets npm_config_strict_ssl="false".
|
|
30
|
+
// Also check user .npmrc for strict-ssl=false (common in China behind proxies).
|
|
31
|
+
function shouldDisableTLS() {
|
|
32
|
+
if (process.env.NODE_TLS_REJECT_UNAUTHORIZED === "0") return true
|
|
33
|
+
if (process.env.npm_config_strict_ssl === "false") return true
|
|
34
|
+
if (process.env.npm_config_strict_ssl === "") return true
|
|
35
|
+
try {
|
|
36
|
+
const npmrcPath = path.join(os.homedir(), ".npmrc")
|
|
37
|
+
if (existsSync(npmrcPath)) {
|
|
38
|
+
const content = readFileSync(npmrcPath, "utf8")
|
|
39
|
+
if (/^\s*strict-ssl\s*=\s*false/m.test(content)) return true
|
|
40
|
+
}
|
|
41
|
+
} catch {}
|
|
42
|
+
return false
|
|
43
|
+
}
|
|
44
|
+
if (shouldDisableTLS()) {
|
|
45
|
+
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const cliVersion = readJSONIfExists(path.join(cliRoot, "package.json")).version ?? "unknown"
|
|
23
49
|
|
|
24
50
|
export async function main(argv) {
|
|
25
51
|
const command = argv[0] ?? "help"
|
|
26
52
|
const options = parseOptions(argv.slice(1))
|
|
27
53
|
|
|
54
|
+
// --no-strict-ssl flag disables TLS certificate verification for fetch calls
|
|
55
|
+
if (options.noStrictSsl) {
|
|
56
|
+
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (command === "install" || command === "update") {
|
|
60
|
+
console.log(`vantaloom-cli v${cliVersion} (${platformId()})`)
|
|
61
|
+
}
|
|
62
|
+
|
|
28
63
|
switch (command) {
|
|
29
64
|
case "install":
|
|
30
65
|
if (options.package) {
|
|
@@ -91,6 +126,7 @@ async function installFromSource(options) {
|
|
|
91
126
|
|
|
92
127
|
console.log(`${options.update ? "updated" : "installed"} Vantaloom: ${prefix}`)
|
|
93
128
|
console.log(`version: ${version}`)
|
|
129
|
+
ensureInPath(prefix)
|
|
94
130
|
console.log(`run: ${displayCommand(prefix)} status`)
|
|
95
131
|
}
|
|
96
132
|
|
|
@@ -104,6 +140,7 @@ async function installFromPackage(options) {
|
|
|
104
140
|
|
|
105
141
|
console.log(`${options.update ? "updated" : "installed"} Vantaloom: ${prefix}`)
|
|
106
142
|
console.log(`version: ${version}`)
|
|
143
|
+
ensureInPath(prefix)
|
|
107
144
|
console.log(`run: ${displayCommand(prefix)} status`)
|
|
108
145
|
}
|
|
109
146
|
|
|
@@ -186,15 +223,49 @@ async function applyPackage(packageRoot, prefix, options) {
|
|
|
186
223
|
spawnSync(existingCtl, ["stop", "--prefix", prefix], { stdio: "inherit" })
|
|
187
224
|
}
|
|
188
225
|
|
|
226
|
+
// Kill lingering tray process that may hold locks on bin/ (older versions
|
|
227
|
+
// don't write tray.pid, so vantaloomctl stop won't find them).
|
|
228
|
+
killTrayProcess(prefix)
|
|
229
|
+
|
|
230
|
+
// Copy package contents to install prefix
|
|
189
231
|
for (const name of ["bin", "web", "cli"]) {
|
|
190
|
-
|
|
191
|
-
|
|
232
|
+
const src = path.join(packageRoot, name)
|
|
233
|
+
const dst = path.join(prefix, name)
|
|
234
|
+
if (!existsSync(src)) {
|
|
235
|
+
console.error(` warning: package missing ${name}/ directory`)
|
|
236
|
+
continue
|
|
237
|
+
}
|
|
238
|
+
removeKnownPath(dst, prefix)
|
|
239
|
+
await cp(src, dst, {
|
|
192
240
|
recursive: true,
|
|
193
241
|
force: true,
|
|
194
242
|
dereference: false,
|
|
195
243
|
})
|
|
196
244
|
}
|
|
197
245
|
|
|
246
|
+
// Ensure binaries are executable on Unix (cross-compiled from Windows they lose +x)
|
|
247
|
+
const binDir = path.join(prefix, "bin")
|
|
248
|
+
if (process.platform !== "win32" && existsSync(binDir)) {
|
|
249
|
+
for (const entry of readdirSync(binDir)) {
|
|
250
|
+
const binPath = path.join(binDir, entry)
|
|
251
|
+
try { chmodSync(binPath, 0o755) } catch {}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Verify vantaloomctl binary exists before trying to run it
|
|
256
|
+
const ctlBin = path.join(prefix, "bin", binaryName("vantaloomctl"))
|
|
257
|
+
if (!existsSync(ctlBin)) {
|
|
258
|
+
const binContents = existsSync(binDir) ? readdirSync(binDir) : []
|
|
259
|
+
const srcBinContents = existsSync(path.join(packageRoot, "bin")) ? readdirSync(path.join(packageRoot, "bin")) : []
|
|
260
|
+
throw new Error(
|
|
261
|
+
`vantaloomctl binary not found at ${ctlBin}\n` +
|
|
262
|
+
` installed bin/: [${binContents.join(", ")}]\n` +
|
|
263
|
+
` package bin/: [${srcBinContents.join(", ")}]\n` +
|
|
264
|
+
` platform: ${platformId()}\n` +
|
|
265
|
+
` This may indicate a corrupt download. Try again or install from source.`
|
|
266
|
+
)
|
|
267
|
+
}
|
|
268
|
+
|
|
198
269
|
await writeLauncher(prefix)
|
|
199
270
|
await writeText(path.join(prefix, "cli", "config.json"), `${JSON.stringify(mergedConfig, null, 2)}\n`)
|
|
200
271
|
await writeText(path.join(prefix, "VERSION"), `${version}\n`)
|
|
@@ -202,7 +273,7 @@ async function applyPackage(packageRoot, prefix, options) {
|
|
|
202
273
|
force: true,
|
|
203
274
|
})
|
|
204
275
|
|
|
205
|
-
run(
|
|
276
|
+
run(ctlBin, [
|
|
206
277
|
"install",
|
|
207
278
|
"--prefix",
|
|
208
279
|
prefix,
|
|
@@ -211,7 +282,7 @@ async function applyPackage(packageRoot, prefix, options) {
|
|
|
211
282
|
])
|
|
212
283
|
|
|
213
284
|
if (!options.noStart) {
|
|
214
|
-
run(
|
|
285
|
+
run(ctlBin, [
|
|
215
286
|
"start",
|
|
216
287
|
"--prefix",
|
|
217
288
|
prefix,
|
|
@@ -224,9 +295,13 @@ async function applyPackage(packageRoot, prefix, options) {
|
|
|
224
295
|
async function syncFromNpmRegistry(options, action) {
|
|
225
296
|
const prefix = safeDirectory(options.prefix ?? defaultPrefix())
|
|
226
297
|
const installedConfig = readInstalledConfig(prefix)
|
|
227
|
-
|
|
298
|
+
// Always derive runtimePackage from current platform — never trust stale config
|
|
299
|
+
// from a different platform (e.g. win32 config baked into a darwin package).
|
|
300
|
+
// Only explicit --runtime-package flag can override.
|
|
301
|
+
const runtimePackage = options.runtimePackage || runtimePackageName(platformId())
|
|
228
302
|
const runtimeVersion = options.runtimeVersion || installedConfig.runtimeVersion || "latest"
|
|
229
|
-
const
|
|
303
|
+
const explicitRegistry = options.npmRegistry || installedConfig.npmRegistry
|
|
304
|
+
const registry = normalizeRegistry(explicitRegistry || detectNpmRegistry() || defaultNpmRegistry)
|
|
230
305
|
const tempRoot = mkdtempSync(path.join(os.tmpdir(), "vantaloom-npm-"))
|
|
231
306
|
|
|
232
307
|
try {
|
|
@@ -234,7 +309,11 @@ async function syncFromNpmRegistry(options, action) {
|
|
|
234
309
|
const archive = path.join(tempRoot, `${packageBasename(runtimePackage)}-${runtimeVersion}.tgz`)
|
|
235
310
|
mkdirSync(extractRoot, { recursive: true })
|
|
236
311
|
|
|
237
|
-
const resolved = await
|
|
312
|
+
const resolved = await resolveNpmPackageWithFallback({
|
|
313
|
+
registries: explicitRegistry ? [registry] : [registry, ...fallbackNpmRegistries.map(normalizeRegistry)],
|
|
314
|
+
name: runtimePackage,
|
|
315
|
+
version: runtimeVersion,
|
|
316
|
+
})
|
|
238
317
|
await downloadNpmTarball({
|
|
239
318
|
tarballUrl: resolved.tarball,
|
|
240
319
|
target: archive,
|
|
@@ -248,13 +327,15 @@ async function syncFromNpmRegistry(options, action) {
|
|
|
248
327
|
noStart: options.noStart,
|
|
249
328
|
runtimePackage,
|
|
250
329
|
runtimeVersion: options.runtimeVersion ? resolved.version : "latest",
|
|
251
|
-
npmRegistry: registry,
|
|
330
|
+
npmRegistry: resolved.registry,
|
|
252
331
|
update: action === "update",
|
|
253
332
|
})
|
|
254
333
|
|
|
255
334
|
console.log(`${action === "update" ? "updated" : "installed"} Vantaloom: ${prefix}`)
|
|
256
335
|
console.log(`version: ${version}`)
|
|
257
336
|
console.log(`source: ${runtimePackage}@${resolved.version}`)
|
|
337
|
+
console.log(`registry: ${resolved.registry}`)
|
|
338
|
+
ensureInPath(prefix)
|
|
258
339
|
console.log(`run: ${displayCommand(prefix)} status`)
|
|
259
340
|
} finally {
|
|
260
341
|
removeKnownPath(tempRoot, os.tmpdir())
|
|
@@ -296,6 +377,7 @@ async function syncFromRelease(options, action) {
|
|
|
296
377
|
console.log(`${action === "update" ? "updated" : "installed"} Vantaloom: ${prefix}`)
|
|
297
378
|
console.log(`version: ${version}`)
|
|
298
379
|
console.log(`source: ${repo}@${releaseTag}`)
|
|
380
|
+
ensureInPath(prefix)
|
|
299
381
|
console.log(`run: ${displayCommand(prefix)} status`)
|
|
300
382
|
} finally {
|
|
301
383
|
removeKnownPath(tempRoot, os.tmpdir())
|
|
@@ -346,14 +428,114 @@ async function downloadReleaseAsset({ repo, releaseTag, assetName, target, token
|
|
|
346
428
|
await writeFile(target, buffer)
|
|
347
429
|
}
|
|
348
430
|
|
|
431
|
+
function detectNpmRegistry() {
|
|
432
|
+
// 1. NPM_CONFIG_REGISTRY env var (highest priority, set by npm/npx when running)
|
|
433
|
+
if (process.env.NPM_CONFIG_REGISTRY) {
|
|
434
|
+
return process.env.npm_config_registry || process.env.NPM_CONFIG_REGISTRY
|
|
435
|
+
}
|
|
436
|
+
// npm also sets the lowercase variant
|
|
437
|
+
if (process.env.npm_config_registry) {
|
|
438
|
+
return process.env.npm_config_registry
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
// 2. Read user .npmrc
|
|
442
|
+
try {
|
|
443
|
+
const npmrcPaths = [
|
|
444
|
+
path.join(os.homedir(), ".npmrc"),
|
|
445
|
+
]
|
|
446
|
+
// Also check project-level .npmrc
|
|
447
|
+
const localNpmrc = path.resolve(".npmrc")
|
|
448
|
+
if (localNpmrc !== npmrcPaths[0]) {
|
|
449
|
+
npmrcPaths.unshift(localNpmrc)
|
|
450
|
+
}
|
|
451
|
+
for (const npmrcPath of npmrcPaths) {
|
|
452
|
+
if (existsSync(npmrcPath)) {
|
|
453
|
+
const content = readFileSync(npmrcPath, "utf8")
|
|
454
|
+
const match = content.match(/^\s*registry\s*=\s*(.+)/m)
|
|
455
|
+
if (match) {
|
|
456
|
+
return match[1].trim()
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
} catch {
|
|
461
|
+
// Ignore .npmrc read errors
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
return ""
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
async function resolveNpmPackageWithFallback({ registries, name, version }) {
|
|
468
|
+
const errors = []
|
|
469
|
+
for (const registry of registries) {
|
|
470
|
+
try {
|
|
471
|
+
const result = await resolveNpmPackage({ registry, name, version })
|
|
472
|
+
return { ...result, registry }
|
|
473
|
+
} catch (error) {
|
|
474
|
+
const causeCode = error?.cause?.code || ""
|
|
475
|
+
const isNetworkError = causeCode === "ECONNREFUSED"
|
|
476
|
+
|| causeCode === "ENOTFOUND"
|
|
477
|
+
|| causeCode === "ETIMEDOUT"
|
|
478
|
+
|| causeCode === "ECONNRESET"
|
|
479
|
+
|| causeCode === "UND_ERR_CONNECT_TIMEOUT"
|
|
480
|
+
|| (error instanceof TypeError && error.message === "fetch failed")
|
|
481
|
+
const isSslError = causeCode === "UNABLE_TO_GET_ISSUER_CERT_LOCALLY"
|
|
482
|
+
|| causeCode === "CERT_HAS_EXPIRED"
|
|
483
|
+
|| causeCode === "DEPTH_ZERO_SELF_SIGNED_CERT"
|
|
484
|
+
|| causeCode === "SELF_SIGNED_CERT_IN_CHAIN"
|
|
485
|
+
|| causeCode === "ERR_TLS_CERT_ALTNAME_INVALID"
|
|
486
|
+
const isRetryable = isNetworkError || isSslError
|
|
487
|
+
errors.push({ registry, error, isRetryable, isSslError })
|
|
488
|
+
|
|
489
|
+
if (isRetryable && registries.length > 1) {
|
|
490
|
+
const hint = isSslError ? " (SSL certificate error)" : ""
|
|
491
|
+
console.error(`vantaloom: ${registry} unreachable${hint}, trying next registry...`)
|
|
492
|
+
continue
|
|
493
|
+
}
|
|
494
|
+
if (isSslError) {
|
|
495
|
+
throw new Error(
|
|
496
|
+
`SSL certificate error connecting to ${registry}: ${causeCode}\n` +
|
|
497
|
+
` Fix: run with --no-strict-ssl, or set npm config: npm config set strict-ssl false`
|
|
498
|
+
)
|
|
499
|
+
}
|
|
500
|
+
// Non-network error (404, parse error, etc.) — don't try fallbacks
|
|
501
|
+
throw error
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
// All registries failed
|
|
506
|
+
const hasSslError = errors.some((e) => e.isSslError)
|
|
507
|
+
const tried = errors.map((e) => e.registry).join(", ")
|
|
508
|
+
const sslHint = hasSslError
|
|
509
|
+
? `\n SSL fix: run with --no-strict-ssl, or set npm config: npm config set strict-ssl false`
|
|
510
|
+
: ""
|
|
511
|
+
throw new Error(
|
|
512
|
+
`all registries unreachable (tried: ${tried}). ` +
|
|
513
|
+
`Check your network or specify --npm-registry <url>${sslHint}`
|
|
514
|
+
)
|
|
515
|
+
}
|
|
516
|
+
|
|
349
517
|
async function resolveNpmPackage({ registry, name, version }) {
|
|
350
518
|
const metadataUrl = `${registry}/${encodeURIComponent(name).replace("%2F", "%2f")}`
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
519
|
+
let response
|
|
520
|
+
try {
|
|
521
|
+
response = await fetch(metadataUrl, {
|
|
522
|
+
headers: {
|
|
523
|
+
Accept: "application/vnd.npm.install-v1+json",
|
|
524
|
+
"User-Agent": "vantaloom-cli",
|
|
525
|
+
},
|
|
526
|
+
signal: AbortSignal.timeout(15000),
|
|
527
|
+
})
|
|
528
|
+
} catch (error) {
|
|
529
|
+
if (error instanceof TypeError && error.message === "fetch failed") {
|
|
530
|
+
const causeCode = error.cause?.code || ""
|
|
531
|
+
const causeMsg = causeCode || error.cause?.message || String(error.cause || "")
|
|
532
|
+
throw Object.assign(
|
|
533
|
+
new Error(`cannot reach registry ${registry} (${causeMsg})`),
|
|
534
|
+
{ cause: error.cause }
|
|
535
|
+
)
|
|
536
|
+
}
|
|
537
|
+
throw error
|
|
538
|
+
}
|
|
357
539
|
if (!response.ok) {
|
|
358
540
|
const detail = await response.text().catch(() => "")
|
|
359
541
|
throw new Error(`failed to inspect npm package ${name}: HTTP ${response.status}${detail ? ` ${detail.slice(0, 200)}` : ""}`)
|
|
@@ -373,11 +555,22 @@ async function resolveNpmPackage({ registry, name, version }) {
|
|
|
373
555
|
}
|
|
374
556
|
|
|
375
557
|
async function downloadNpmTarball({ tarballUrl, target, packageName, version }) {
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
558
|
+
console.log(` downloading ${packageName}@${version}...`)
|
|
559
|
+
let response
|
|
560
|
+
try {
|
|
561
|
+
response = await fetch(tarballUrl, {
|
|
562
|
+
headers: {
|
|
563
|
+
"User-Agent": "vantaloom-cli",
|
|
564
|
+
},
|
|
565
|
+
signal: AbortSignal.timeout(120000),
|
|
566
|
+
})
|
|
567
|
+
} catch (error) {
|
|
568
|
+
const causeCode = error?.cause?.code || ""
|
|
569
|
+
const causeMsg = causeCode || error?.cause?.message || error.message || ""
|
|
570
|
+
const isSsl = causeCode.includes("CERT") || causeCode === "UNABLE_TO_GET_ISSUER_CERT_LOCALLY"
|
|
571
|
+
const hint = isSsl ? `\n Fix: run with --no-strict-ssl` : ""
|
|
572
|
+
throw new Error(`failed to download ${packageName}@${version} from ${tarballUrl}: ${causeMsg}${hint}`)
|
|
573
|
+
}
|
|
381
574
|
if (!response.ok) {
|
|
382
575
|
const detail = await response.text().catch(() => "")
|
|
383
576
|
throw new Error(`failed to download ${packageName}@${version}: HTTP ${response.status}${detail ? ` ${detail.slice(0, 200)}` : ""}`)
|
|
@@ -385,6 +578,7 @@ async function downloadNpmTarball({ tarballUrl, target, packageName, version })
|
|
|
385
578
|
|
|
386
579
|
const buffer = Buffer.from(await response.arrayBuffer())
|
|
387
580
|
await writeFile(target, buffer)
|
|
581
|
+
console.log(` downloaded ${(buffer.length / 1024 / 1024).toFixed(1)} MB`)
|
|
388
582
|
}
|
|
389
583
|
|
|
390
584
|
function shouldUseSourceInstall(options) {
|
|
@@ -448,9 +642,9 @@ function mergeRuntimeConfig(packageConfig, existingConfig, overrides) {
|
|
|
448
642
|
if (!merged.releaseTag) {
|
|
449
643
|
merged.releaseTag = defaultReleaseTag
|
|
450
644
|
}
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
645
|
+
// Always force runtimePackage to match the running platform — a cross-compiled
|
|
646
|
+
// package may carry a config for a different platform (e.g. win32 inside darwin).
|
|
647
|
+
merged.runtimePackage = runtimePackageName(platformId())
|
|
454
648
|
if (!merged.runtimeVersion) {
|
|
455
649
|
merged.runtimeVersion = "latest"
|
|
456
650
|
}
|
|
@@ -470,7 +664,7 @@ function runtimeConfigFromSource(sourceRoot) {
|
|
|
470
664
|
releaseTag: defaultReleaseTag,
|
|
471
665
|
runtimePackage: runtimePackageName(platformId()),
|
|
472
666
|
runtimeVersion: "latest",
|
|
473
|
-
npmRegistry: defaultNpmRegistry,
|
|
667
|
+
npmRegistry: detectNpmRegistry() || defaultNpmRegistry,
|
|
474
668
|
}
|
|
475
669
|
}
|
|
476
670
|
|
|
@@ -776,6 +970,9 @@ function parseOptions(args) {
|
|
|
776
970
|
case "local":
|
|
777
971
|
options.local = true
|
|
778
972
|
break
|
|
973
|
+
case "no-strict-ssl":
|
|
974
|
+
options.noStrictSsl = true
|
|
975
|
+
break
|
|
779
976
|
default:
|
|
780
977
|
throw new Error(`unknown option --${key}`)
|
|
781
978
|
}
|
|
@@ -897,6 +1094,92 @@ async function writeText(filePath, content) {
|
|
|
897
1094
|
await writeFile(filePath, content)
|
|
898
1095
|
}
|
|
899
1096
|
|
|
1097
|
+
// ensureInPath adds the Vantaloom install directory to the user's shell PATH
|
|
1098
|
+
// on macOS and Linux, so `vantaloom` can be run directly after install.
|
|
1099
|
+
// On Windows this is not needed (vantaloom.cmd is run by full path or added via installer).
|
|
1100
|
+
function ensureInPath(prefix) {
|
|
1101
|
+
if (process.platform === "win32") return
|
|
1102
|
+
|
|
1103
|
+
// Check if already in PATH
|
|
1104
|
+
const pathDirs = (process.env.PATH || "").split(":")
|
|
1105
|
+
if (pathDirs.includes(prefix)) return
|
|
1106
|
+
|
|
1107
|
+
// Determine shell profile file
|
|
1108
|
+
const home = os.homedir()
|
|
1109
|
+
const shell = process.env.SHELL || ""
|
|
1110
|
+
let profilePath
|
|
1111
|
+
if (shell.endsWith("/zsh") || existsSync(path.join(home, ".zshrc"))) {
|
|
1112
|
+
profilePath = path.join(home, ".zshrc")
|
|
1113
|
+
} else if (shell.endsWith("/bash")) {
|
|
1114
|
+
// On macOS, bash uses .bash_profile; on Linux, .bashrc
|
|
1115
|
+
profilePath = process.platform === "darwin"
|
|
1116
|
+
? path.join(home, ".bash_profile")
|
|
1117
|
+
: path.join(home, ".bashrc")
|
|
1118
|
+
} else if (existsSync(path.join(home, ".profile"))) {
|
|
1119
|
+
profilePath = path.join(home, ".profile")
|
|
1120
|
+
} else {
|
|
1121
|
+
profilePath = path.join(home, ".profile")
|
|
1122
|
+
}
|
|
1123
|
+
|
|
1124
|
+
// Use $HOME-relative path for portability
|
|
1125
|
+
const homeRelative = prefix.startsWith(home)
|
|
1126
|
+
? `$HOME${prefix.slice(home.length)}`
|
|
1127
|
+
: prefix
|
|
1128
|
+
const exportLine = `export PATH="${homeRelative}:$PATH"`
|
|
1129
|
+
const marker = "# vantaloom"
|
|
1130
|
+
|
|
1131
|
+
// Check if already added to profile
|
|
1132
|
+
try {
|
|
1133
|
+
if (existsSync(profilePath)) {
|
|
1134
|
+
const content = readFileSync(profilePath, "utf8")
|
|
1135
|
+
if (content.includes("vantaloom") && content.includes("PATH")) return
|
|
1136
|
+
}
|
|
1137
|
+
} catch {}
|
|
1138
|
+
|
|
1139
|
+
// Append to profile
|
|
1140
|
+
try {
|
|
1141
|
+
const entry = `\n${marker}\n${exportLine}\n`
|
|
1142
|
+
appendFileSync(profilePath, entry)
|
|
1143
|
+
console.log(`PATH: added ${prefix} to ${profilePath}`)
|
|
1144
|
+
console.log(` run: source ${profilePath} (or open a new terminal)`)
|
|
1145
|
+
} catch (error) {
|
|
1146
|
+
console.log(`PATH: could not update ${profilePath}: ${error.message}`)
|
|
1147
|
+
console.log(` add manually: ${exportLine}`)
|
|
1148
|
+
}
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
function killTrayProcess(prefix) {
|
|
1152
|
+
if (process.platform === "win32") {
|
|
1153
|
+
// Try PID file first (new tray versions write runtime/tray.pid).
|
|
1154
|
+
const pidFile = path.join(prefix, "runtime", "tray.pid")
|
|
1155
|
+
if (existsSync(pidFile)) {
|
|
1156
|
+
const pid = readFileSync(pidFile, "utf8").trim()
|
|
1157
|
+
if (pid) {
|
|
1158
|
+
spawnSync("taskkill", ["/PID", pid, "/F"], { stdio: "ignore" })
|
|
1159
|
+
try { rmSync(pidFile, { force: true }) } catch {}
|
|
1160
|
+
}
|
|
1161
|
+
}
|
|
1162
|
+
// Fallback: kill by image name if the binary is inside our prefix.
|
|
1163
|
+
const result = spawnSync("tasklist", ["/FI", "IMAGENAME eq vantaloom-tray.exe", "/FO", "CSV", "/NH"], {
|
|
1164
|
+
encoding: "utf8",
|
|
1165
|
+
windowsHide: true,
|
|
1166
|
+
})
|
|
1167
|
+
if (result.stdout) {
|
|
1168
|
+
for (const line of result.stdout.split("\n")) {
|
|
1169
|
+
const match = line.match(/"vantaloom-tray\.exe","(\d+)"/)
|
|
1170
|
+
if (match) {
|
|
1171
|
+
spawnSync("taskkill", ["/PID", match[1], "/F"], { stdio: "ignore" })
|
|
1172
|
+
}
|
|
1173
|
+
}
|
|
1174
|
+
}
|
|
1175
|
+
// Brief pause to let file handles release.
|
|
1176
|
+
spawnSync("timeout", ["/t", "1", "/nobreak"], { stdio: "ignore", windowsHide: true })
|
|
1177
|
+
} else {
|
|
1178
|
+
// Unix: pkill by name (best-effort).
|
|
1179
|
+
spawnSync("pkill", ["-f", "vantaloom-tray"], { stdio: "ignore" })
|
|
1180
|
+
}
|
|
1181
|
+
}
|
|
1182
|
+
|
|
900
1183
|
function printHelp() {
|
|
901
1184
|
console.log(`Vantaloom CLI
|
|
902
1185
|
|
package/manifest.json
CHANGED
package/package.json
CHANGED
package/web/404.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--2kPL4gOT89qnDZSfX50Rn--><html lang="zh-CN" class="font-sans antialiased" data-vtl-theme="default" data-vtl-density="default" data-vtl-motion="default"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/73d2c788f1076e9a.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/a678910d6e3629e7.js"/><script src="/_next/static/chunks/b9cfbaaba1fd82be.js" async=""></script><script src="/_next/static/chunks/757e2e1b77b5bacc.js" async=""></script><script src="/_next/static/chunks/turbopack-d8677f40582561e6.js" async=""></script><script src="/_next/static/chunks/eca64d281474b631.js" async=""></script><script src="/_next/static/chunks/7dfeab42587bcc0e.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>Vantaloom</title><meta name="description" content="Vantaloom local agent operations console."/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","system",null,["light","dark"],null,true,true)</script><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/a678910d6e3629e7.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[22332,[\"/_next/static/chunks/eca64d281474b631.js\",\"/_next/static/chunks/7dfeab42587bcc0e.js\"],\"ThemeProvider\"]\n3:I[45121,[\"/_next/static/chunks/eca64d281474b631.js\",\"/_next/static/chunks/7dfeab42587bcc0e.js\"],\"default\"]\n4:I[60512,[\"/_next/static/chunks/eca64d281474b631.js\",\"/_next/static/chunks/7dfeab42587bcc0e.js\"],\"default\"]\n5:I[35417,[\"/_next/static/chunks/eca64d281474b631.js\",\"/_next/static/chunks/7dfeab42587bcc0e.js\"],\"OutletBoundary\"]\n6:\"$Sreact.suspense\"\n8:I[35417,[\"/_next/static/chunks/eca64d281474b631.js\",\"/_next/static/chunks/7dfeab42587bcc0e.js\"],\"ViewportBoundary\"]\na:I[35417,[\"/_next/static/chunks/eca64d281474b631.js\",\"/_next/static/chunks/7dfeab42587bcc0e.js\"],\"MetadataBoundary\"]\nc:I[50025,[\"/_next/static/chunks/eca64d281474b631.js\",\"/_next/static/chunks/7dfeab42587bcc0e.js\"],\"default\"]\n:HL[\"/_next/static/chunks/73d2c788f1076e9a.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"2kPL4gOT89qnDZSfX50Rn\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/73d2c788f1076e9a.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/eca64d281474b631.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/7dfeab42587bcc0e.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"zh-CN\",\"suppressHydrationWarning\":true,\"className\":\"font-sans antialiased\",\"data-vtl-theme\":\"default\",\"data-vtl-density\":\"default\",\"data-vtl-motion\":\"default\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L5\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@7\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"7:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"Vantaloom\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Vantaloom local agent operations console.\"}]]\n"])</script></body></html>
|
package/web/__next.__PAGE__.txt
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
2
|
2:I[66863,["/_next/static/chunks/7dfeab42587bcc0e.js"],"ClientPageRoot"]
|
|
3
|
-
3:I[66204,["/_next/static/chunks/eca64d281474b631.js","/_next/static/chunks/17e0384154325960.js","/_next/static/chunks/c990601c49cb69a5.js","/_next/static/chunks/
|
|
3
|
+
3:I[66204,["/_next/static/chunks/eca64d281474b631.js","/_next/static/chunks/17e0384154325960.js","/_next/static/chunks/c990601c49cb69a5.js","/_next/static/chunks/7d5ab4ba8d474929.js","/_next/static/chunks/742d3900ca49db0a.js"],"default"]
|
|
4
4
|
6:I[35417,["/_next/static/chunks/7dfeab42587bcc0e.js"],"OutletBoundary"]
|
|
5
5
|
7:"$Sreact.suspense"
|
|
6
|
-
0:{"buildId":"
|
|
6
|
+
0:{"buildId":"2kPL4gOT89qnDZSfX50Rn","rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/17e0384154325960.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/c990601c49cb69a5.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/7d5ab4ba8d474929.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/742d3900ca49db0a.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"loading":null,"isPartial":false}
|
|
7
7
|
4:{}
|
|
8
8
|
5:"$0:rsc:props:children:0:props:serverProvidedParams:params"
|
|
9
9
|
8:null
|
package/web/__next._full.txt
CHANGED
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
3:I[45121,["/_next/static/chunks/7dfeab42587bcc0e.js"],"default"]
|
|
4
4
|
4:I[60512,["/_next/static/chunks/7dfeab42587bcc0e.js"],"default"]
|
|
5
5
|
5:I[66863,["/_next/static/chunks/7dfeab42587bcc0e.js"],"ClientPageRoot"]
|
|
6
|
-
6:I[66204,["/_next/static/chunks/eca64d281474b631.js","/_next/static/chunks/17e0384154325960.js","/_next/static/chunks/c990601c49cb69a5.js","/_next/static/chunks/
|
|
6
|
+
6:I[66204,["/_next/static/chunks/eca64d281474b631.js","/_next/static/chunks/17e0384154325960.js","/_next/static/chunks/c990601c49cb69a5.js","/_next/static/chunks/7d5ab4ba8d474929.js","/_next/static/chunks/742d3900ca49db0a.js"],"default"]
|
|
7
7
|
9:I[35417,["/_next/static/chunks/7dfeab42587bcc0e.js"],"OutletBoundary"]
|
|
8
8
|
a:"$Sreact.suspense"
|
|
9
9
|
c:I[35417,["/_next/static/chunks/7dfeab42587bcc0e.js"],"ViewportBoundary"]
|
|
10
10
|
e:I[35417,["/_next/static/chunks/7dfeab42587bcc0e.js"],"MetadataBoundary"]
|
|
11
11
|
10:I[50025,["/_next/static/chunks/7dfeab42587bcc0e.js"],"default"]
|
|
12
|
-
:HL["/_next/static/chunks/
|
|
13
|
-
0:{"P":null,"b":"
|
|
12
|
+
:HL["/_next/static/chunks/73d2c788f1076e9a.css","style"]
|
|
13
|
+
0:{"P":null,"b":"2kPL4gOT89qnDZSfX50Rn","c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/73d2c788f1076e9a.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/eca64d281474b631.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"zh-CN","suppressHydrationWarning":true,"className":"font-sans antialiased","data-vtl-theme":"default","data-vtl-density":"default","data-vtl-motion":"default","children":["$","body",null,{"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":[["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@7","$@8"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/17e0384154325960.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/c990601c49cb69a5.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/7d5ab4ba8d474929.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/742d3900ca49db0a.js","async":true,"nonce":"$undefined"}]],["$","$L9",null,{"children":["$","$a",null,{"name":"Next.MetadataOutlet","children":"$@b"}]}]]}],{},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$Lc",null,{"children":"$Ld"}],["$","div",null,{"hidden":true,"children":["$","$Le",null,{"children":["$","$a",null,{"name":"Next.Metadata","children":"$Lf"}]}]}],null]}],false]],"m":"$undefined","G":["$10",[]],"S":true}
|
|
14
14
|
7:{}
|
|
15
15
|
8:"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params"
|
|
16
16
|
d:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
package/web/__next._head.txt
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
2:I[35417,["/_next/static/chunks/7dfeab42587bcc0e.js"],"ViewportBoundary"]
|
|
3
3
|
3:I[35417,["/_next/static/chunks/7dfeab42587bcc0e.js"],"MetadataBoundary"]
|
|
4
4
|
4:"$Sreact.suspense"
|
|
5
|
-
0:{"buildId":"
|
|
5
|
+
0:{"buildId":"2kPL4gOT89qnDZSfX50Rn","rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Vantaloom"}],["$","meta","1",{"name":"description","content":"Vantaloom local agent operations console."}]]}]}]}],null]}],"loading":null,"isPartial":false}
|