pinomad 0.11.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/{chunk-wb10efyq.js → chunk-445cevpm.js} +1 -1
- package/dist/{chunk-jt34g8st.js → chunk-4fferbxw.js} +247 -27
- package/dist/{chunk-67gq282t.js → chunk-53xv3fny.js} +725 -75
- package/dist/{chunk-44pnts98.js → chunk-563fnad9.js} +1 -1
- package/dist/{chunk-b457q0tm.js → chunk-6th9xv39.js} +11 -8
- package/dist/{chunk-ncbqa8jk.js → chunk-7mn38n4f.js} +1 -1
- package/dist/{chunk-as6pyf00.js → chunk-90g1cg9n.js} +1 -1
- package/dist/{chunk-9h5vawnm.js → chunk-aapsc9g0.js} +270 -66
- package/dist/{chunk-n1m1tjrk.js → chunk-d4tq62yr.js} +57 -16
- package/dist/{chunk-gtdpjqa3.js → chunk-d9mq5d46.js} +205 -49
- package/dist/{chunk-y127fe1a.js → chunk-g3ahp7b9.js} +11 -0
- package/dist/{chunk-xqycs43g.js → chunk-kmzzjv53.js} +83 -8
- package/dist/{chunk-4dcs8sbj.js → chunk-m51mq8vh.js} +43 -21
- package/dist/{chunk-tj57aqav.js → chunk-maqv34cs.js} +2 -2
- package/dist/chunk-nq57fdnq.js +106 -0
- package/dist/{chunk-h5q2y57m.js → chunk-ra86wjp5.js} +10 -4
- package/dist/{chunk-sd5fkxjj.js → chunk-s0h7c7da.js} +1 -1
- package/dist/chunk-sd640dt7.js +22 -0
- package/dist/{chunk-6d16c2fv.js → chunk-t6fw0wa9.js} +13 -6
- package/dist/{chunk-vvj9b1gc.js → chunk-wd7aracm.js} +188 -54
- package/dist/pinomad.js +15 -14
- package/package.json +13 -11
- package/web/assets/astro-DOly5024.js +1 -0
- package/web/assets/c-BIGW1oBm.js +1 -0
- package/web/assets/core-BHm2gdHL.js +4 -0
- package/web/assets/cpp-DddhVWhK.js +1 -0
- package/web/assets/csharp-B_TYUkTI.js +1 -0
- package/web/assets/css-Z72CF80r.js +1 -0
- package/web/assets/dart-CtKP3W-j.js +1 -0
- package/web/assets/diff-D97Zzqfu.js +1 -0
- package/web/assets/dockerfile-BcOcwvcX.js +1 -0
- package/web/assets/elixir-DkJLSxtU.js +1 -0
- package/web/assets/engine-javascript-BHPwbUfN.js +141 -0
- package/web/assets/engine-oniguruma-CQjQPVHy.js +1 -0
- package/web/assets/fish-BvzEVeQv.js +1 -0
- package/web/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
- package/web/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
- package/web/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
- package/web/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
- package/web/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
- package/web/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
- package/web/assets/go-C27-OAKa.js +1 -0
- package/web/assets/graphql-ChdNCCLP.js +1 -0
- package/web/assets/haskell-Df6bDoY_.js +1 -0
- package/web/assets/hcl-BWvSN4gD.js +1 -0
- package/web/assets/highlighted-diff-DrHvSLK9.js +175 -0
- package/web/assets/highlights-1aLwssz-.js +4 -0
- package/web/assets/highlights-themes-C1p4pFYS.js +1 -0
- package/web/assets/html-BlS82ilI.js +1 -0
- package/web/assets/index-A_AUJoO6.css +1 -0
- package/web/assets/index-BafYMKiN.js +396 -0
- package/web/assets/ini-BEwlwnbL.js +1 -0
- package/web/assets/java-CylS5w8V.js +1 -0
- package/web/assets/javascript-wDzz0qaB.js +1 -0
- package/web/assets/json-Cp-IABpG.js +1 -0
- package/web/assets/jsonc-Des-eS-w.js +1 -0
- package/web/assets/jsx-g9-lgVsj.js +1 -0
- package/web/assets/kotlin-BdnUsdx6.js +1 -0
- package/web/assets/less-B1dDrJ26.js +1 -0
- package/web/assets/lua-BaeVxFsk.js +1 -0
- package/web/assets/make-CHLpvVh8.js +1 -0
- package/web/assets/markdown-Cvjx9yec.js +1 -0
- package/web/assets/nix-CwoSXNpI.js +1 -0
- package/web/assets/objective-c-DXmwc3jG.js +1 -0
- package/web/assets/php-DoruYMF0.js +1 -0
- package/web/assets/pierre-dark-CyvmCCZW.js +1 -0
- package/web/assets/pierre-dark-VKo95ZgA.js +1 -0
- package/web/assets/pierre-light-480U9XYS.js +1 -0
- package/web/assets/pierre-light-BVSW-Xev.js +1 -0
- package/web/assets/postcss-DnzrXTVv.js +1 -0
- package/web/assets/powershell-Dd0kTxKP.js +1 -0
- package/web/assets/prisma-Vru482bI.js +1 -0
- package/web/assets/proto-C7zT0LnQ.js +1 -0
- package/web/assets/python-B6aJPvgy.js +1 -0
- package/web/assets/ruby-B43yHlf9.js +1 -0
- package/web/assets/rust-DPvrY3IQ.js +1 -0
- package/web/assets/scala-CqE71os6.js +1 -0
- package/web/assets/scss-Cw6XMfVs.js +1 -0
- package/web/assets/shellscript-Yzrsuije.js +1 -0
- package/web/assets/shiki-BwyCm3kZ.js +2 -0
- package/web/assets/shiki-langs-CMlALLSg.js +2 -0
- package/web/assets/shiki-wasm-CgFRq91U.js +1 -0
- package/web/assets/sql-DkvoVjww.js +1 -0
- package/web/assets/stream-tokenizer-BlgIhw0y.js +4 -0
- package/web/assets/svelte-DoIXUgJc.js +1 -0
- package/web/assets/swift-C2oV4EkX.js +1 -0
- package/web/assets/terraform-BETggiCN.js +1 -0
- package/web/assets/theming-themes-DDvoqEqT.js +1 -0
- package/web/assets/toml-vGWfd6FD.js +1 -0
- package/web/assets/tsx-COt5Ahok.js +1 -0
- package/web/assets/typescript-BPQ3VLAy.js +1 -0
- package/web/assets/vue-CwSeJimo.js +1 -0
- package/web/assets/xml-sdJ4AIDG.js +1 -0
- package/web/assets/xterm-view-6GBZ9nXN.css +32 -0
- package/web/assets/xterm-view-BnKOnF3C.js +38 -0
- package/web/assets/yaml-Buea-lGh.js +1 -0
- package/web/assets/zig-VOosw3JB.js +1 -0
- package/web/index.html +2 -2
- package/dist/chunk-etf7ef97.js +0 -55
- package/dist/chunk-greb3dp6.js +0 -22
- package/web/assets/index-BhHrKpoo.js +0 -395
- package/web/assets/index-DoyHMPwf.css +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ProtocolMismatchError,
|
|
3
3
|
connectRemoteDurable
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-4fferbxw.js";
|
|
5
5
|
import {
|
|
6
6
|
isParseArgsError
|
|
7
7
|
} from "./chunk-kzbzacz9.js";
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
commandHint,
|
|
14
14
|
hostEntry,
|
|
15
15
|
packagedVersion
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-s0h7c7da.js";
|
|
17
17
|
|
|
18
18
|
// apps/host/src/cli/service.ts
|
|
19
19
|
import { execFile as execFile2 } from "node:child_process";
|
|
@@ -24,6 +24,8 @@ import { parseArgs, promisify as promisify2 } from "node:util";
|
|
|
24
24
|
|
|
25
25
|
// apps/host/src/service/definition.ts
|
|
26
26
|
import { join, resolve } from "node:path";
|
|
27
|
+
var LAUNCHER_EXECUTABLE = "pinomad-host";
|
|
28
|
+
var isLauncher = (path) => path.endsWith(`.app/Contents/MacOS/${LAUNCHER_EXECUTABLE}`);
|
|
27
29
|
function sanitizePath(path) {
|
|
28
30
|
const seen = new Set;
|
|
29
31
|
const kept = [];
|
|
@@ -149,11 +151,21 @@ function specFromLaunchdPlist(text) {
|
|
|
149
151
|
const workdir = /<key>WorkingDirectory<\/key>\s*<string>([\s\S]*?)<\/string>/.exec(text)?.[1];
|
|
150
152
|
if (workdir === undefined)
|
|
151
153
|
throw new Error("plist has no WorkingDirectory");
|
|
152
|
-
|
|
154
|
+
if (program[0] === undefined || !isLauncher(program[0]))
|
|
155
|
+
return specFromProgram(program, env, xmlUnescape(workdir));
|
|
156
|
+
return { ...specFromProgram(program.slice(1), env, xmlUnescape(workdir)), launcher: program[0] };
|
|
153
157
|
}
|
|
154
158
|
var xmlEscape = (value) => value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
155
159
|
function launchdPlist(spec) {
|
|
156
|
-
const program = [
|
|
160
|
+
const program = [
|
|
161
|
+
...spec.launcher === undefined ? [] : [spec.launcher],
|
|
162
|
+
spec.nodePath,
|
|
163
|
+
spec.mainPath,
|
|
164
|
+
...spec.entryArgs,
|
|
165
|
+
"--data-dir",
|
|
166
|
+
spec.dataDir,
|
|
167
|
+
...spec.hostArgs
|
|
168
|
+
];
|
|
157
169
|
const log = join(spec.dataDir, "logs", "host.log");
|
|
158
170
|
const env = Object.entries(spec.env).map(([key, value]) => ` <key>${xmlEscape(key)}</key>
|
|
159
171
|
<string>${xmlEscape(value)}</string>`);
|
|
@@ -245,6 +257,55 @@ import { homedir, userInfo } from "node:os";
|
|
|
245
257
|
import { dirname, join as join2 } from "node:path";
|
|
246
258
|
import { promisify } from "node:util";
|
|
247
259
|
var run = promisify(execFile);
|
|
260
|
+
var NOT_INSTALLED = { installed: false, stopped: false, running: false, detail: "not installed" };
|
|
261
|
+
function launchdDisabled(printed) {
|
|
262
|
+
const value = /^\s*"pinomad\.host" => (\w+)\s*$/m.exec(printed)?.[1];
|
|
263
|
+
return value === "disabled" || value === "true";
|
|
264
|
+
}
|
|
265
|
+
function launchdState(disabled, printed) {
|
|
266
|
+
if (printed === undefined) {
|
|
267
|
+
return disabled ? { installed: true, stopped: true, running: false, detail: "stopped" } : { installed: true, stopped: false, running: false, detail: "not loaded" };
|
|
268
|
+
}
|
|
269
|
+
const field = (name) => printed.match(new RegExp(`^\\s*${name} = (.+)$`, "m"))?.[1];
|
|
270
|
+
const state = field("state") ?? "unknown";
|
|
271
|
+
const pid = field("pid");
|
|
272
|
+
const exit = field("last exit code");
|
|
273
|
+
return {
|
|
274
|
+
installed: true,
|
|
275
|
+
stopped: false,
|
|
276
|
+
running: state === "running" && pid !== undefined,
|
|
277
|
+
...pid === undefined ? {} : { pid: Number(pid) },
|
|
278
|
+
detail: [
|
|
279
|
+
state,
|
|
280
|
+
...pid === undefined ? [] : [`pid ${pid}`],
|
|
281
|
+
...exit === undefined || exit === "0" || exit === "(never exited)" ? [] : [`last exit ${exit}`],
|
|
282
|
+
...disabled ? ["turned off but still loaded"] : []
|
|
283
|
+
].join(", ")
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
function systemdState(shown) {
|
|
287
|
+
const fields = Object.fromEntries(shown.trim().split(`
|
|
288
|
+
`).map((line) => line.split("=", 2)));
|
|
289
|
+
if (fields.LoadState === "not-found")
|
|
290
|
+
return NOT_INSTALLED;
|
|
291
|
+
const pid = Number(fields.MainPID ?? "0");
|
|
292
|
+
const active = fields.ActiveState === "active";
|
|
293
|
+
const done = fields.ActiveState === "inactive" || fields.ActiveState === "failed";
|
|
294
|
+
if (fields.UnitFileState === "disabled" && done)
|
|
295
|
+
return { installed: true, stopped: true, running: false, detail: "stopped" };
|
|
296
|
+
return {
|
|
297
|
+
installed: true,
|
|
298
|
+
stopped: false,
|
|
299
|
+
running: active && pid > 0,
|
|
300
|
+
...pid > 0 ? { pid } : {},
|
|
301
|
+
detail: [
|
|
302
|
+
fields.ActiveState ?? "unknown",
|
|
303
|
+
fields.SubState ?? "",
|
|
304
|
+
...pid > 0 ? [`pid ${pid}`] : [],
|
|
305
|
+
...fields.ExecMainStatus === undefined || fields.ExecMainStatus === "0" ? [] : [`last exit ${fields.ExecMainStatus}`]
|
|
306
|
+
].filter((part) => part !== "").join(", ")
|
|
307
|
+
};
|
|
308
|
+
}
|
|
248
309
|
var launchd = {
|
|
249
310
|
async install(spec) {
|
|
250
311
|
await mkdir(join2(spec.dataDir, "logs"), { recursive: true });
|
|
@@ -253,6 +314,7 @@ var launchd = {
|
|
|
253
314
|
await writeFile(path, launchdPlist(spec));
|
|
254
315
|
const domain = `gui/${process.getuid()}/pinomad.host`;
|
|
255
316
|
await run("launchctl", ["bootout", domain]).catch(() => {});
|
|
317
|
+
await run("launchctl", ["enable", domain]);
|
|
256
318
|
await run("launchctl", ["bootstrap", `gui/${process.getuid()}`, path]);
|
|
257
319
|
return path;
|
|
258
320
|
},
|
|
@@ -263,26 +325,27 @@ var launchd = {
|
|
|
263
325
|
async restart() {
|
|
264
326
|
await run("launchctl", ["kickstart", "-k", `gui/${process.getuid()}/pinomad.host`]);
|
|
265
327
|
},
|
|
328
|
+
async start() {
|
|
329
|
+
const domain = `gui/${process.getuid()}/pinomad.host`;
|
|
330
|
+
await run("launchctl", ["enable", domain]);
|
|
331
|
+
if (await run("launchctl", ["print", domain]).then(() => true, () => false))
|
|
332
|
+
return;
|
|
333
|
+
await run("launchctl", ["bootstrap", `gui/${process.getuid()}`, launchdPlistPath(homedir())]);
|
|
334
|
+
},
|
|
335
|
+
async stop() {
|
|
336
|
+
const domain = `gui/${process.getuid()}/pinomad.host`;
|
|
337
|
+
await run("launchctl", ["disable", domain]);
|
|
338
|
+
await run("launchctl", ["bootout", domain]).catch(() => {});
|
|
339
|
+
},
|
|
266
340
|
async state() {
|
|
341
|
+
const defined = await readFile(launchdPlistPath(homedir())).then(() => true, () => false);
|
|
342
|
+
if (!defined)
|
|
343
|
+
return NOT_INSTALLED;
|
|
344
|
+
const disabled = await run("launchctl", ["print-disabled", `gui/${process.getuid()}`]).then(({ stdout }) => launchdDisabled(stdout), () => false);
|
|
267
345
|
const printed = await run("launchctl", ["print", `gui/${process.getuid()}/pinomad.host`]).then(({ stdout }) => stdout, () => {
|
|
268
346
|
return;
|
|
269
347
|
});
|
|
270
|
-
|
|
271
|
-
return { installed: false, running: false, detail: "not installed" };
|
|
272
|
-
const field = (name) => printed.match(new RegExp(`^\\s*${name} = (.+)$`, "m"))?.[1];
|
|
273
|
-
const state = field("state") ?? "unknown";
|
|
274
|
-
const pid = field("pid");
|
|
275
|
-
const exit = field("last exit code");
|
|
276
|
-
return {
|
|
277
|
-
installed: true,
|
|
278
|
-
running: state === "running" && pid !== undefined,
|
|
279
|
-
...pid === undefined ? {} : { pid: Number(pid) },
|
|
280
|
-
detail: [
|
|
281
|
-
state,
|
|
282
|
-
...pid === undefined ? [] : [`pid ${pid}`],
|
|
283
|
-
...exit === undefined || exit === "0" || exit === "(never exited)" ? [] : [`last exit ${exit}`]
|
|
284
|
-
].join(", ")
|
|
285
|
-
};
|
|
348
|
+
return launchdState(disabled, printed);
|
|
286
349
|
},
|
|
287
350
|
async logs(dataDir, lines, follow) {
|
|
288
351
|
const file = join2(dataDir, "logs", "host.log");
|
|
@@ -328,34 +391,23 @@ var systemd = {
|
|
|
328
391
|
async restart() {
|
|
329
392
|
await run("systemctl", ["--user", "restart", "pinomad.service"]);
|
|
330
393
|
},
|
|
394
|
+
async start() {
|
|
395
|
+
await run("systemctl", ["--user", "enable", "--now", "pinomad.service"]);
|
|
396
|
+
},
|
|
397
|
+
async stop() {
|
|
398
|
+
await run("systemctl", ["--user", "disable", "--now", "pinomad.service"]);
|
|
399
|
+
},
|
|
331
400
|
async state() {
|
|
332
401
|
const shown = await run("systemctl", [
|
|
333
402
|
"--user",
|
|
334
403
|
"show",
|
|
335
404
|
"pinomad.service",
|
|
336
405
|
"-p",
|
|
337
|
-
"LoadState,ActiveState,SubState,MainPID,ExecMainStatus"
|
|
406
|
+
"LoadState,ActiveState,SubState,MainPID,ExecMainStatus,UnitFileState"
|
|
338
407
|
]).then(({ stdout }) => stdout, () => {
|
|
339
408
|
return;
|
|
340
409
|
});
|
|
341
|
-
|
|
342
|
-
return { installed: false, running: false, detail: "not installed" };
|
|
343
|
-
const fields = Object.fromEntries(shown.trim().split(`
|
|
344
|
-
`).map((line) => line.split("=", 2)));
|
|
345
|
-
if (fields.LoadState === "not-found")
|
|
346
|
-
return { installed: false, running: false, detail: "not installed" };
|
|
347
|
-
const pid = Number(fields.MainPID ?? "0");
|
|
348
|
-
return {
|
|
349
|
-
installed: true,
|
|
350
|
-
running: fields.ActiveState === "active" && pid > 0,
|
|
351
|
-
...pid > 0 ? { pid } : {},
|
|
352
|
-
detail: [
|
|
353
|
-
fields.ActiveState ?? "unknown",
|
|
354
|
-
fields.SubState ?? "",
|
|
355
|
-
...pid > 0 ? [`pid ${pid}`] : [],
|
|
356
|
-
...fields.ExecMainStatus === undefined || fields.ExecMainStatus === "0" ? [] : [`last exit ${fields.ExecMainStatus}`]
|
|
357
|
-
].filter((part) => part !== "").join(", ")
|
|
358
|
-
};
|
|
410
|
+
return shown === undefined ? NOT_INSTALLED : systemdState(shown);
|
|
359
411
|
},
|
|
360
412
|
async logs(_dataDir, lines, follow) {
|
|
361
413
|
const journal = spawn("journalctl", ["--user", "-u", "pinomad.service", "-n", String(lines), ...follow ? ["-f"] : []], {
|
|
@@ -410,6 +462,74 @@ async function install(argv) {
|
|
|
410
462
|
console.log(`data dir: ${spec.dataDir}`);
|
|
411
463
|
console.log(`browser link: ${commandHint("link")} pairing QR: ${commandHint("pair")}`);
|
|
412
464
|
}
|
|
465
|
+
async function waitUntilIdle(address, connect, log) {
|
|
466
|
+
try {
|
|
467
|
+
const remote = await connect(address.url, address.token);
|
|
468
|
+
await waitForIdle(remote, (tasks) => {
|
|
469
|
+
log("waiting for running tasks to finish (Ctrl-C to cancel)");
|
|
470
|
+
for (const task of Object.values(tasks.tasks)) {
|
|
471
|
+
log(` ${task.kind} in conversation ${task.conversationId}`);
|
|
472
|
+
}
|
|
473
|
+
});
|
|
474
|
+
remote.close();
|
|
475
|
+
} catch {}
|
|
476
|
+
}
|
|
477
|
+
async function stopService({
|
|
478
|
+
force,
|
|
479
|
+
argv,
|
|
480
|
+
manager = serviceManager(),
|
|
481
|
+
connect = connectToHost,
|
|
482
|
+
log = (line) => console.log(line),
|
|
483
|
+
logError = (line) => console.error(line)
|
|
484
|
+
}) {
|
|
485
|
+
const state = await manager.state();
|
|
486
|
+
if (!state.installed) {
|
|
487
|
+
log(`service not installed (${commandHint("service")} install)`);
|
|
488
|
+
return 1;
|
|
489
|
+
}
|
|
490
|
+
if (state.stopped) {
|
|
491
|
+
log("already stopped");
|
|
492
|
+
return 0;
|
|
493
|
+
}
|
|
494
|
+
if (!force) {
|
|
495
|
+
const spec = argv.length === 0 ? await manager.read() : undefined;
|
|
496
|
+
const port = spec === undefined ? undefined : argValue(spec.hostArgs, "--port");
|
|
497
|
+
const flags = spec === undefined ? argv : ["--data-dir", spec.dataDir, ...port === undefined ? [] : ["--url", `ws://127.0.0.1:${port}`]];
|
|
498
|
+
const address = await hostAddress(flags).catch((error) => {
|
|
499
|
+
if (isParseArgsError(error))
|
|
500
|
+
throw error;
|
|
501
|
+
return;
|
|
502
|
+
});
|
|
503
|
+
if (address !== undefined)
|
|
504
|
+
await waitUntilIdle(address, connect, log);
|
|
505
|
+
}
|
|
506
|
+
const holdInterrupt = () => {};
|
|
507
|
+
process.on("SIGINT", holdInterrupt);
|
|
508
|
+
try {
|
|
509
|
+
await manager.stop();
|
|
510
|
+
} finally {
|
|
511
|
+
process.off("SIGINT", holdInterrupt);
|
|
512
|
+
}
|
|
513
|
+
const after = await manager.state();
|
|
514
|
+
if (!after.stopped) {
|
|
515
|
+
logError(`the host is still running (${after.detail}); run \`${commandHint("service")} stop\` again`);
|
|
516
|
+
return 1;
|
|
517
|
+
}
|
|
518
|
+
log(`stopped; it stays off, also after a restart, until \`${commandHint("service")} start\``);
|
|
519
|
+
return 0;
|
|
520
|
+
}
|
|
521
|
+
async function startService({
|
|
522
|
+
manager = serviceManager(),
|
|
523
|
+
log = (line) => console.log(line)
|
|
524
|
+
} = {}) {
|
|
525
|
+
if (!(await manager.state()).installed) {
|
|
526
|
+
log(`service not installed (${commandHint("service")} install)`);
|
|
527
|
+
return 1;
|
|
528
|
+
}
|
|
529
|
+
await manager.start();
|
|
530
|
+
log("started");
|
|
531
|
+
return 0;
|
|
532
|
+
}
|
|
413
533
|
async function versionLine() {
|
|
414
534
|
if (packagedVersion !== undefined)
|
|
415
535
|
return `version: ${packagedVersion}`;
|
|
@@ -432,8 +552,19 @@ async function reachabilityLine(argv) {
|
|
|
432
552
|
return `host: unreachable (${message(error)})`;
|
|
433
553
|
}
|
|
434
554
|
}
|
|
555
|
+
var serviceStatusJson = (state) => JSON.stringify({
|
|
556
|
+
installed: state.installed,
|
|
557
|
+
stopped: state.stopped,
|
|
558
|
+
running: state.running,
|
|
559
|
+
...state.pid === undefined ? {} : { pid: state.pid },
|
|
560
|
+
detail: state.detail
|
|
561
|
+
});
|
|
435
562
|
async function status(argv) {
|
|
436
563
|
const state = await serviceManager().state();
|
|
564
|
+
if (argv.includes("--json")) {
|
|
565
|
+
console.log(serviceStatusJson(state));
|
|
566
|
+
return;
|
|
567
|
+
}
|
|
437
568
|
console.log(`service: ${state.installed ? state.detail : "not installed"}`);
|
|
438
569
|
console.log(await versionLine());
|
|
439
570
|
console.log(await reachabilityLine(argv));
|
|
@@ -447,27 +578,22 @@ async function restartService({
|
|
|
447
578
|
pollTimeoutMs = 30000,
|
|
448
579
|
pollDelayMs = 500
|
|
449
580
|
}) {
|
|
450
|
-
|
|
581
|
+
const state = await manager.state();
|
|
582
|
+
if (!state.installed) {
|
|
451
583
|
console.log(`service not installed (${commandHint("service")} install)`);
|
|
452
584
|
return 1;
|
|
453
585
|
}
|
|
586
|
+
if (state.stopped && restart === undefined) {
|
|
587
|
+
console.log(`service stopped (${commandHint("service")} start)`);
|
|
588
|
+
return 1;
|
|
589
|
+
}
|
|
454
590
|
const address = await hostAddress(argv).catch((error) => {
|
|
455
591
|
if (isParseArgsError(error))
|
|
456
592
|
throw error;
|
|
457
593
|
return;
|
|
458
594
|
});
|
|
459
|
-
if (!force && address !== undefined)
|
|
460
|
-
|
|
461
|
-
const remote = await connect(address.url, address.token);
|
|
462
|
-
await waitForIdle(remote, (tasks) => {
|
|
463
|
-
console.log("waiting for running tasks to finish (Ctrl-C to cancel)");
|
|
464
|
-
for (const task of Object.values(tasks.tasks)) {
|
|
465
|
-
console.log(` ${task.kind} in conversation ${task.conversationId}`);
|
|
466
|
-
}
|
|
467
|
-
});
|
|
468
|
-
remote.close();
|
|
469
|
-
} catch {}
|
|
470
|
-
}
|
|
595
|
+
if (!force && address !== undefined)
|
|
596
|
+
await waitUntilIdle(address, connect, (line) => console.log(line));
|
|
471
597
|
await (restart?.() ?? manager.restart());
|
|
472
598
|
if (address === undefined) {
|
|
473
599
|
console.log("restart requested (host address unknown; not polling)");
|
|
@@ -525,11 +651,19 @@ async function main(argv) {
|
|
|
525
651
|
process.exitCode = await restartService({ force, argv: args.filter((arg) => arg !== "--force") });
|
|
526
652
|
break;
|
|
527
653
|
}
|
|
654
|
+
case "stop": {
|
|
655
|
+
const force = args.includes("--force");
|
|
656
|
+
process.exitCode = await stopService({ force, argv: args.filter((arg) => arg !== "--force") });
|
|
657
|
+
break;
|
|
658
|
+
}
|
|
659
|
+
case "start":
|
|
660
|
+
process.exitCode = await startService();
|
|
661
|
+
break;
|
|
528
662
|
case "logs":
|
|
529
663
|
await logs(args);
|
|
530
664
|
break;
|
|
531
665
|
default:
|
|
532
|
-
console.error(`usage: ${commandHint("service")} install|uninstall|status|restart|logs`);
|
|
666
|
+
console.error(`usage: ${commandHint("service")} install|uninstall|status|restart|stop|start|logs`);
|
|
533
667
|
process.exitCode = 1;
|
|
534
668
|
}
|
|
535
669
|
} catch (error) {
|
|
@@ -541,4 +675,4 @@ async function main(argv) {
|
|
|
541
675
|
}
|
|
542
676
|
if (false) {}
|
|
543
677
|
|
|
544
|
-
export { installSpec, argValue, withoutArg, withoutRelayArgs, serviceManager, versionLine, reachabilityLine, restartService, main };
|
|
678
|
+
export { LAUNCHER_EXECUTABLE, isLauncher, installSpec, argValue, withoutArg, withoutRelayArgs, serviceManager, stopService, startService, versionLine, reachabilityLine, serviceStatusJson, restartService, main };
|
package/dist/pinomad.js
CHANGED
|
@@ -5,24 +5,24 @@ import {
|
|
|
5
5
|
} from "./chunk-kzbzacz9.js";
|
|
6
6
|
import {
|
|
7
7
|
packagedVersion
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-s0h7c7da.js";
|
|
9
9
|
import {
|
|
10
10
|
__require
|
|
11
11
|
} from "./chunk-df32avw6.js";
|
|
12
12
|
|
|
13
13
|
// apps/cli/src/pinomad.ts
|
|
14
14
|
var COMMANDS = {
|
|
15
|
-
up: () => import("./chunk-
|
|
16
|
-
status: () => import("./chunk-
|
|
17
|
-
host: () => import("./chunk-
|
|
18
|
-
server: () => import("./chunk-
|
|
19
|
-
relay: () => import("./chunk-
|
|
20
|
-
service: () => import("./chunk-
|
|
21
|
-
upgrade: () => import("./chunk-
|
|
22
|
-
link: () => import("./chunk-
|
|
23
|
-
pair: () => import("./chunk-
|
|
24
|
-
join: () => import("./chunk-
|
|
25
|
-
leave: () => import("./chunk-
|
|
15
|
+
up: () => import("./chunk-d4tq62yr.js"),
|
|
16
|
+
status: () => import("./chunk-6th9xv39.js"),
|
|
17
|
+
host: () => import("./chunk-53xv3fny.js"),
|
|
18
|
+
server: () => import("./chunk-aapsc9g0.js"),
|
|
19
|
+
relay: () => import("./chunk-aapsc9g0.js"),
|
|
20
|
+
service: () => import("./chunk-ra86wjp5.js"),
|
|
21
|
+
upgrade: () => import("./chunk-t6fw0wa9.js"),
|
|
22
|
+
link: () => import("./chunk-90g1cg9n.js"),
|
|
23
|
+
pair: () => import("./chunk-maqv34cs.js"),
|
|
24
|
+
join: () => import("./chunk-sd640dt7.js"),
|
|
25
|
+
leave: () => import("./chunk-m51mq8vh.js")
|
|
26
26
|
};
|
|
27
27
|
var USAGE = `pinomad — PiNomad host, server, and utilities
|
|
28
28
|
|
|
@@ -31,6 +31,7 @@ usage: pinomad <command> [args…]
|
|
|
31
31
|
up [--server] [--lan] [--yes] set this host up: account, LAN, service
|
|
32
32
|
up --origin URL --remote-port N server to join (app.pinomad.si), LAN port (7422)
|
|
33
33
|
up --no-server|--no-lan [--data-dir D] turn a path off; with no flags, up asks
|
|
34
|
+
up --code join by a printed code (e.g. from another device), not this browser
|
|
34
35
|
status [--data-dir D] joined server and account, LAN, service, host
|
|
35
36
|
host [--data-dir DIR] [--port 7420] [--project DIR]… run the host in the foreground
|
|
36
37
|
host --remote-port PORT [--public-url URL] remote access, LAN (ADR-0008)
|
|
@@ -39,11 +40,11 @@ usage: pinomad <command> [args…]
|
|
|
39
40
|
server --public-origin O [--data-dir D] [--trust-proxy] run the server
|
|
40
41
|
server passwd [--data-dir D] [--user U] reset an account's password (stdin)
|
|
41
42
|
relay … old name of server
|
|
42
|
-
service install|uninstall|status|restart|logs user-level host service
|
|
43
|
+
service install|uninstall|status|restart|stop|start|logs user-level host service
|
|
43
44
|
upgrade [--force] [address flags] upgrade the package and restart the service
|
|
44
45
|
link [--data-dir D|--url U …] print the browser link
|
|
45
46
|
pair [--data-dir D|--url U …] print a pairing QR
|
|
46
|
-
join <origin> [token] [--data-dir D]
|
|
47
|
+
join <origin> [token] [--code] [--data-dir D] join this host to a server account
|
|
47
48
|
leave [--data-dir D] leave the server account
|
|
48
49
|
--version, -v print the version
|
|
49
50
|
`;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pinomad",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"description": "PiNomad — self-hosted coding agent: host, relay, and web client in one package",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -20,24 +20,26 @@
|
|
|
20
20
|
},
|
|
21
21
|
"homepage": "https://github.com/bubbleptr/pinomad",
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@earendil-works/chord": "1.
|
|
24
|
-
"@earendil-works/pi-ai": "1.
|
|
25
|
-
"@earendil-works/pi-codemode": "1.
|
|
26
|
-
"@earendil-works/pi-coding-agent": "1.
|
|
27
|
-
"@earendil-works/pi-durable": "1.
|
|
28
|
-
"@earendil-works/pi-mcp": "1.
|
|
23
|
+
"@earendil-works/chord": "1.5.0",
|
|
24
|
+
"@earendil-works/pi-ai": "1.5.0",
|
|
25
|
+
"@earendil-works/pi-codemode": "1.5.0",
|
|
26
|
+
"@earendil-works/pi-coding-agent": "1.5.0",
|
|
27
|
+
"@earendil-works/pi-durable": "1.5.0",
|
|
28
|
+
"@earendil-works/pi-mcp": "1.5.0",
|
|
29
|
+
"@lydell/node-pty": "1.2.0-beta.18",
|
|
29
30
|
"@noble/curves": "2.4.0",
|
|
30
31
|
"diff": "8.0.4",
|
|
31
32
|
"node-datachannel": "0.33.4",
|
|
32
33
|
"proper-lockfile": "4.1.2",
|
|
33
34
|
"typebox": "1.3.27",
|
|
34
|
-
"undici": "8.
|
|
35
|
+
"undici": "8.12.3",
|
|
35
36
|
"uqr": "0.1.3",
|
|
36
37
|
"ws": "8.22.0",
|
|
37
38
|
"@noble/ciphers": "2.4.0",
|
|
38
39
|
"@noble/hashes": "2.4.0",
|
|
39
|
-
"@earendil-works/pi-agent-core": "1.
|
|
40
|
-
"@earendil-works/pi-
|
|
41
|
-
"@earendil-works/pi-
|
|
40
|
+
"@earendil-works/pi-agent-core": "1.5.0",
|
|
41
|
+
"@earendil-works/pi-schema": "1.5.0",
|
|
42
|
+
"@earendil-works/pi-telemetry": "1.5.0",
|
|
43
|
+
"@earendil-works/pi-tui": "1.5.0"
|
|
42
44
|
}
|
|
43
45
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"./json-Cp-IABpG.js";import t from"./javascript-wDzz0qaB.js";import r from"./typescript-BPQ3VLAy.js";import a from"./css-Z72CF80r.js";import{p as n}from"./postcss-DnzrXTVv.js";import s from"./tsx-COt5Ahok.js";const i=Object.freeze(JSON.parse(`{"displayName":"Astro","fileTypes":["astro"],"injections":{"L:(meta.script.astro) (meta.lang.js | meta.lang.javascript | meta.lang.partytown | meta.lang.node) - (meta source)":{"patterns":[{"begin":"(?<=>)(?!</)","contentName":"source.js","end":"(?=</)","name":"meta.embedded.block.astro","patterns":[{"include":"source.js"}]}]},"L:(meta.script.astro) (meta.lang.json) - (meta source)":{"patterns":[{"begin":"(?<=>)(?!</)","contentName":"source.json","end":"(?=</)","name":"meta.embedded.block.astro","patterns":[{"include":"source.json"}]}]},"L:(meta.script.astro) (meta.lang.ts | meta.lang.typescript) - (meta source)":{"patterns":[{"begin":"(?<=>)(?!</)","contentName":"source.ts","end":"(?=</)","name":"meta.embedded.block.astro","patterns":[{"include":"source.ts"}]}]},"L:meta.script.astro - meta.lang - (meta source)":{"patterns":[{"begin":"(?<=>)(?!</)","contentName":"source.js","end":"(?=</)","name":"meta.embedded.block.astro","patterns":[{"include":"source.js"}]}]},"L:meta.style.astro - meta.lang - (meta source)":{"patterns":[{"begin":"(?<=>)(?!</)","contentName":"source.css","end":"(?=</)","name":"meta.embedded.block.astro","patterns":[{"include":"source.css"}]}]},"L:meta.style.astro meta.lang.css - (meta source)":{"patterns":[{"begin":"(?<=>)(?!</)","contentName":"source.css","end":"(?=</)","name":"meta.embedded.block.astro","patterns":[{"include":"source.css"}]}]},"L:meta.style.astro meta.lang.less - (meta source)":{"patterns":[{"begin":"(?<=>)(?!</)","contentName":"source.css.less","end":"(?=</)","name":"meta.embedded.block.astro","patterns":[{"include":"source.css.less"}]}]},"L:meta.style.astro meta.lang.postcss - (meta source)":{"patterns":[{"begin":"(?<=>)(?!</)","contentName":"source.css.postcss","end":"(?=</)","name":"meta.embedded.block.astro","patterns":[{"include":"source.css.postcss"}]}]},"L:meta.style.astro meta.lang.sass - (meta source)":{"patterns":[{"begin":"(?<=>)(?!</)","contentName":"source.sass","end":"(?=</)","name":"meta.embedded.block.astro","patterns":[{"include":"source.sass"}]}]},"L:meta.style.astro meta.lang.scss - (meta source)":{"patterns":[{"begin":"(?<=>)(?!</)","contentName":"source.css.scss","end":"(?=</)","name":"meta.embedded.block.astro","patterns":[{"include":"source.css.scss"}]}]},"L:meta.style.astro meta.lang.stylus - (meta source)":{"patterns":[{"begin":"(?<=>)(?!</)","contentName":"source.stylus","end":"(?=</)","name":"meta.embedded.block.astro","patterns":[{"include":"source.stylus"}]}]}},"name":"astro","patterns":[{"include":"#scope"},{"include":"#frontmatter"},{"include":"#text"}],"repository":{"attribute-literal":{"begin":"(\`)","end":"\\\\1","name":"string.template.astro","patterns":[{"include":"source.tsx#template-substitution-element"},{"include":"source.tsx#string-character-escape"}]},"attributes":{"patterns":[{"include":"#attributes-events"},{"include":"#attributes-keyvalue"},{"include":"#attributes-interpolated"}]},"attributes-events":{"begin":"(on(s(croll|t(orage|alled)|u(spend|bmit)|e(curitypolicyviolation|ek(ing|ed)|lect))|hashchange|c(hange|o(ntextmenu|py)|u(t|echange)|l(ick|ose)|an(cel|play(through)?))|t(imeupdate|oggle)|in(put|valid)|o((?:n|ff)line)|d(urationchange|r(op|ag(start|over|e(n(ter|d)|xit)|leave)?)|blclick)|un(handledrejection|load)|p(opstate|lay(ing)?|a(ste|use|ge(show|hide))|rogress)|e(nded|rror|mptied)|volumechange|key(down|up|press)|focus|w(heel|aiting)|l(oad(start|e(nd|d((?:|meta)data)))?|anguagechange)|a(uxclick|fterprint|bort)|r(e(s(ize|et)|jectionhandled)|atechange)|m(ouse(o(ut|ver)|down|up|enter|leave|move)|essage(error)?)|b(efore(unload|print)|lur)))(?![-:\\\\\\\\w])","beginCaptures":{"0":{"patterns":[{"match":".*","name":"entity.other.attribute-name.astro"}]}},"end":"(?=\\\\s*+[^=\\\\s])","name":"meta.attribute.$1.astro","patterns":[{"begin":"=","beginCaptures":{"0":{"name":"punctuation.separator.key-value.astro"}},"end":"(?<=[^=\\\\s])(?!\\\\s*=)|(?=/?>)","patterns":[{"include":"#interpolation"},{"include":"#attribute-literal"},{"begin":"(?=[^/<=>\`\\\\s]|/(?!>))","end":"(?!\\\\G)","name":"meta.embedded.line.js","patterns":[{"captures":{"0":{"name":"source.js"},"1":{"patterns":[{"include":"source.js"}]}},"match":"(([^\\"'/<=>\`\\\\s]|/(?!>))+)","name":"string.unquoted.astro"},{"begin":"(\\")","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.astro"}},"end":"\\\\1","endCaptures":{"0":{"name":"punctuation.definition.string.end.astro"}},"name":"string.quoted.astro","patterns":[{"captures":{"0":{"patterns":[{"include":"source.js"}]}},"match":"([^\\\\n\\"/]|/(?![*/]))+"},{"begin":"//","beginCaptures":{"0":{"name":"punctuation.definition.comment.js"}},"end":"(?=\\")|\\\\n","name":"comment.line.double-slash.js"},{"begin":"/\\\\*","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.js"}},"end":"(?=\\")|\\\\*/","endCaptures":{"0":{"name":"punctuation.definition.comment.end.js"}},"name":"comment.block.js"}]},{"begin":"(')","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.astro"}},"end":"\\\\1","endCaptures":{"0":{"name":"punctuation.definition.string.end.astro"}},"name":"string.quoted.astro","patterns":[{"captures":{"0":{"patterns":[{"include":"source.js"}]}},"match":"([^\\\\n'/]|/(?![*/]))+"},{"begin":"//","beginCaptures":{"0":{"name":"punctuation.definition.comment.js"}},"end":"(?=')|\\\\n","name":"comment.line.double-slash.js"},{"begin":"/\\\\*","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.js"}},"end":"(?=')|\\\\*/","endCaptures":{"0":{"name":"punctuation.definition.comment.end.js"}},"name":"comment.block.js"}]}]}]}]},"attributes-interpolated":{"begin":"(?<![:=])\\\\s*(\\\\{)","contentName":"meta.embedded.expression.astro source.tsx","end":"(})","patterns":[{"include":"source.tsx"}]},"attributes-keyvalue":{"begin":"([$@_[:alpha:]][-$.:_[:alnum:]]*)","beginCaptures":{"0":{"patterns":[{"match":".*","name":"entity.other.attribute-name.astro"}]}},"end":"(?=\\\\s*+[^=\\\\s])","name":"meta.attribute.$1.astro","patterns":[{"begin":"=","beginCaptures":{"0":{"name":"punctuation.separator.key-value.astro"}},"end":"(?<=[^=\\\\s])(?!\\\\s*=)|(?=/?>)","patterns":[{"include":"#attributes-value"}]}]},"attributes-value":{"patterns":[{"include":"#interpolation"},{"match":"([^\\"'/<=>\`\\\\s]|/(?!>))+","name":"string.unquoted.astro"},{"begin":"([\\"'])","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.astro"}},"end":"\\\\1","endCaptures":{"0":{"name":"punctuation.definition.string.end.astro"}},"name":"string.quoted.astro"},{"include":"#attribute-literal"}]},"comments":{"begin":"<!--","captures":{"0":{"name":"punctuation.definition.comment.astro"}},"end":"-->","name":"comment.block.astro","patterns":[{"match":"\\\\G-?>|<!--(?!>)|<!-(?=-->)|--!>","name":"invalid.illegal.characters-not-allowed-here.astro"}]},"entities":{"patterns":[{"captures":{"1":{"name":"punctuation.definition.entity.astro"},"912":{"name":"punctuation.definition.entity.astro"}},"match":"(&)(?=[A-Za-z])((a(s(ymp(eq)?|cr|t)|n(d(slope|[dv]|and)?|g(s(t|ph)|zarr|e|le|rt(vb(d)?)?|msd(a([a-h]))?)?)|c(y|irc|d|ute|E)?|tilde|o(pf|gon)|uml|p(id|os|prox(eq)?|[Ee]|acir)?|elig|f(r)?|w((?:con|)int)|l(pha|e(ph|fsym))|acute|ring|grave|m(p|a(cr|lg))|breve)|A(s(sign|cr)|nd|MP|c(y|irc)|tilde|o(pf|gon)|uml|pplyFunction|fr|Elig|lpha|acute|ring|grave|macr|breve))|(B(scr|cy|opf|umpeq|e(cause|ta|rnoullis)|fr|a(ckslash|r(v|wed))|reve)|b(s(cr|im(e)?|ol(hsub|b)?|emi)|n(ot|e(quiv)?)|c(y|ong)|ig(s(tar|qcup)|c(irc|up|ap)|triangle(down|up)|o(times|dot|plus)|uplus|vee|wedge)|o(t(tom)?|pf|wtie|x(h([DUdu])?|times|H([DUdu])?|d([LRlr])|u([LRlr])|plus|D([LRlr])|v([HLRhlr])?|U([LRlr])|V([HLRhlr])?|minus|box))|Not|dquo|u(ll(et)?|mp(e(q)?|E)?)|prime|e(caus(e)?|t(h|ween|a)|psi|rnou|mptyv)|karow|fr|l(ock|k(1([24])|34)|a(nk|ck(square|triangle(down|left|right)?|lozenge)))|a(ck(sim(eq)?|cong|prime|epsilon)|r(vee|wed(ge)?))|r(eve|vbar)|brk(tbrk)?))|(c(s(cr|u(p(e)?|b(e)?))|h(cy|i|eck(mark)?)|ylcty|c(irc|ups(sm)?|edil|a(ps|ron))|tdot|ir(scir|c(eq|le(d(R|circ|S|dash|ast)|arrow(left|right)))?|e|fnint|E|mid)?|o(n(int|g(dot)?)|p(y(sr)?|f|rod)|lon(e(q)?)?|m(p(fn|le(xes|ment))?|ma(t)?))|dot|u(darr([lr])|p(s|c([au]p)|or|dot|brcap)?|e(sc|pr)|vee|wed|larr(p)?|r(vearrow(left|right)|ly(eq(succ|prec)|vee|wedge)|arr(m)?|ren))|e(nt(erdot)?|dil|mptyv)|fr|w((?:con|)int)|lubs(uit)?|a(cute|p(s|c([au]p)|dot|and|brcup)?|r(on|et))|r(oss|arr))|C(scr|hi|c(irc|onint|edil|aron)|ircle(Minus|Times|Dot|Plus)|Hcy|o(n(tourIntegral|int|gruent)|unterClockwiseContourIntegral|p(f|roduct)|lon(e)?)|dot|up(Cap)?|OPY|e(nterDot|dilla)|fr|lo(seCurly((?:Double|)Quote)|ckwiseContourIntegral)|a(yleys|cute|p(italDifferentialD)?)|ross))|(d(s(c([ry])|trok|ol)|har([lr])|c(y|aron)|t(dot|ri(f)?)|i(sin|e|v(ide(ontimes)?|onx)?|am(s|ond(suit)?)?|gamma)|Har|z(cy|igrarr)|o(t(square|plus|eq(dot)?|minus)?|ublebarwedge|pf|wn(harpoon(left|right)|downarrows|arrow)|llar)|d(otseq|a(rr|gger))?|u(har|arr)|jcy|e(lta|g|mptyv)|f(isht|r)|wangle|lc(orn|rop)|a(sh(v)?|leth|rr|gger)|r(c(orn|rop)|bkarow)|b(karow|lac)|Arr)|D(s(cr|trok)|c(y|aron)|Scy|i(fferentialD|a(critical(Grave|Tilde|Do(t|ubleAcute)|Acute)|mond))|o(t(Dot|Equal)?|uble(Right(Tee|Arrow)|ContourIntegral|Do(t|wnArrow)|Up((?:Down|)Arrow)|VerticalBar|L(ong(RightArrow|Left((?:Right|)Arrow))|eft(RightArrow|Tee|Arrow)))|pf|wn(Right(TeeVector|Vector(Bar)?)|Breve|Tee(Arrow)?|arrow|Left(RightVector|TeeVector|Vector(Bar)?)|Arrow(Bar|UpArrow)?))|Zcy|el(ta)?|D(otrahd)?|Jcy|fr|a(shv|rr|gger)))|(e(s(cr|im|dot)|n(sp|g)|c(y|ir(c)?|olon|aron)|t([ah])|o(pf|gon)|dot|u(ro|ml)|p(si(v|lon)?|lus|ar(sl)?)|e|D(D??ot)|q(s(im|lant(less|gtr))|c(irc|olon)|u(iv(DD)?|est|als)|vparsl)|f(Dot|r)|l(s(dot)?|inters|l)?|a(ster|cute)|r(Dot|arr)|g(s(dot)?|rave)?|x(cl|ist|p(onentiale|ectation))|m(sp(1([34]))?|pty(set|v)?|acr))|E(s(cr|im)|c(y|irc|aron)|ta|o(pf|gon)|NG|dot|uml|TH|psilon|qu(ilibrium|al(Tilde)?)|fr|lement|acute|grave|x(ists|ponentialE)|m(pty((?:|Very)SmallSquare)|acr)))|(f(scr|nof|cy|ilig|o(pf|r(k(v)?|all))|jlig|partint|emale|f(ilig|l(l??ig)|r)|l(tns|lig|at)|allingdotseq|r(own|a(sl|c(1([2-68])|78|2([35])|3([458])|45|5([68])))))|F(scr|cy|illed((?:|Very)SmallSquare)|o(uriertrf|pf|rAll)|fr))|(G(scr|c(y|irc|edil)|t|opf|dot|T|Jcy|fr|amma(d)?|reater(Greater|SlantEqual|Tilde|Equal(Less)?|FullEqual|Less)|g|breve)|g(s(cr|im([el])?)|n(sim|e(q(q)?)?|E|ap(prox)?)|c(y|irc)|t(c(c|ir)|dot|quest|lPar|r(sim|dot|eq(q?less)|less|a(pprox|rr)))?|imel|opf|dot|jcy|e(s(cc|dot(o(l)?)?|l(es)?)?|q(slant|q)?|l)?|v(nE|ertneqq)|fr|E(l)?|l([Eaj])?|a(cute|p|mma(d)?)|rave|g(g)?|breve))|(h(s(cr|trok|lash)|y(phen|bull)|circ|o(ok((?:lef|righ)tarrow)|pf|arr|rbar|mtht)|e(llip|arts(uit)?|rcon)|ks([ew]arow)|fr|a(irsp|lf|r(dcy|r(cir|w)?)|milt)|bar|Arr)|H(s(cr|trok)|circ|ilbertSpace|o(pf|rizontalLine)|ump(DownHump|Equal)|fr|a(cek|t)|ARDcy))|(i(s(cr|in(s(v)?|dot|[Ev])?)|n(care|t(cal|prod|e(rcal|gers)|larhk)?|odot|fin(tie)?)?|c(y|irc)?|t(ilde)?|i(nfin|i(i??nt)|ota)?|o(cy|ta|pf|gon)|u(kcy|ml)|jlig|prod|e(cy|xcl)|quest|f([fr])|acute|grave|m(of|ped|a(cr|th|g(part|e|line))))|I(scr|n(t(e(rsection|gral))?|visible(Comma|Times))|c(y|irc)|tilde|o(ta|pf|gon)|dot|u(kcy|ml)|Ocy|Jlig|fr|Ecy|acute|grave|m(plies|a(cr|ginaryI))?))|(j(s(cr|ercy)|c(y|irc)|opf|ukcy|fr|math)|J(s(cr|ercy)|c(y|irc)|opf|ukcy|fr))|(k(scr|hcy|c(y|edil)|opf|jcy|fr|appa(v)?|green)|K(scr|c(y|edil)|Hcy|opf|Jcy|fr|appa))|(l(s(h|cr|trok|im([eg])?|q(uo(r)?|b)|aquo)|h(ar(d|u(l)?)|blk)|n(sim|e(q(q)?)?|E|ap(prox)?)|c(y|ub|e(d??il)|aron)|Barr|t(hree|c(c|ir)|imes|dot|quest|larr|r(i([ef])?|Par))?|Har|o(ng(left((?:|right)arrow)|rightarrow|mapsto)|times|z(enge|f)?|oparrow(left|right)|p(f|lus|ar)|w(ast|bar)|a(ng|rr)|brk)|d(sh|ca|quo(r)?|r((?:d|us)har))|ur((?:ds|u)har)|jcy|par(lt)?|e(s(s(sim|dot|eq(q?gtr)|approx|gtr)|cc|dot(o(r)?)?|g(es)?)?|q(slant|q)?|ft(harpoon(down|up)|threetimes|leftarrows|arrow(tail)?|right(squigarrow|harpoons|arrow(s)?))|g)?|v(nE|ertneqq)|f(isht|loor|r)|E(g)?|l(hard|corner|tri|arr)?|a(ng(d|le)?|cute|t(e(s)?|ail)?|p|emptyv|quo|rr(sim|hk|tl|pl|fs|lp|b(fs)?)?|gran|mbda)|r(har(d)?|corner|tri|arr|m)|g(E)?|m(idot|oust(ache)?)|b(arr|r(k(sl([du])|e)|ac([ek]))|brk)|A(tail|arr|rr))|L(s(h|cr|trok)|c(y|edil|aron)|t|o(ng(RightArrow|left((?:|right)arrow)|rightarrow|Left((?:Right|)Arrow))|pf|wer((?:Righ|Lef)tArrow))|T|e(ss(Greater|SlantEqual|Tilde|EqualGreater|FullEqual|Less)|ft(Right(Vector|Arrow)|Ceiling|T(ee(Vector|Arrow)?|riangle(Bar|Equal)?)|Do(ubleBracket|wn(TeeVector|Vector(Bar)?))|Up(TeeVector|DownVector|Vector(Bar)?)|Vector(Bar)?|arrow|rightarrow|Floor|A(ngleBracket|rrow(RightArrow|Bar)?)))|Jcy|fr|l(eftarrow)?|a(ng|cute|placetrf|rr|mbda)|midot))|(M(scr|cy|inusPlus|opf|u|e(diumSpace|llintrf)|fr|ap)|m(s(cr|tpos)|ho|nplus|c(y|omma)|i(nus(d(u)?|b)?|cro|d(cir|dot|ast)?)|o(dels|pf)|dash|u((?:lti|)map)?|p|easuredangle|DDot|fr|l(cp|dr)|a(cr|p(sto(down|up|left)?)?|l(t(ese)?|e)|rker)))|(n(s(hort(parallel|mid)|c(cue|[er])?|im(e(q)?)?|u(cc(eq)?|p(set(eq(q)?)?|[Ee])?|b(set(eq(q)?)?|[Ee])?)|par|qsu([bp]e)|mid)|Rightarrow|h(par|arr|Arr)|G(t(v)?|g)|c(y|ong(dot)?|up|edil|a(p|ron))|t(ilde|lg|riangle(left(eq)?|right(eq)?)|gl)|i(s(d)?|v)?|o(t(ni(v([abc]))?|in(dot|v([abc])|E)?)?|pf)|dash|u(m(sp|ero)?)?|jcy|p(olint|ar(sl|t|allel)?|r(cue|e(c(eq)?)?)?)|e(s(im|ear)|dot|quiv|ar(hk|r(ow)?)|xist(s)?|Arr)?|v(sim|infin|Harr|dash|Dash|l(t(rie)?|e|Arr)|ap|r(trie|Arr)|g([et]))|fr|w(near|ar(hk|r(ow)?)|Arr)|V([Dd]ash)|l(sim|t(ri(e)?)?|dr|e(s(s)?|q(slant|q)?|ft((?:|right)arrow))?|E|arr|Arr)|a(ng|cute|tur(al(s)?)?|p(id|os|prox|E)?|bla)|r(tri(e)?|ightarrow|arr([cw])?|Arr)|g(sim|t(r)?|e(s|q(slant|q)?)?|E)|mid|L(t(v)?|eft((?:|right)arrow)|l)|b(sp|ump(e)?))|N(scr|c(y|edil|aron)|tilde|o(nBreakingSpace|Break|t(R(ightTriangle(Bar|Equal)?|everseElement)|Greater(Greater|SlantEqual|Tilde|Equal|FullEqual|Less)?|S(u(cceeds(SlantEqual|Tilde|Equal)?|perset(Equal)?|bset(Equal)?)|quareSu(perset(Equal)?|bset(Equal)?))|Hump(DownHump|Equal)|Nested(GreaterGreater|LessLess)|C(ongruent|upCap)|Tilde(Tilde|Equal|FullEqual)?|DoubleVerticalBar|Precedes((?:Slant|)Equal)?|E(qual(Tilde)?|lement|xists)|VerticalBar|Le(ss(Greater|SlantEqual|Tilde|Equal|Less)?|ftTriangle(Bar|Equal)?))?|pf)|u|e(sted(GreaterGreater|LessLess)|wLine|gative(MediumSpace|Thi((?:n|ck)Space)|VeryThinSpace))|Jcy|fr|acute))|(o(s(cr|ol|lash)|h(m|bar)|c(y|ir(c)?)|ti(lde|mes(as)?)|S|int|opf|d(sold|iv|ot|ash|blac)|uml|p(erp|lus|ar)|elig|vbar|f(cir|r)|l(c(ir|ross)|t|ine|arr)|a(st|cute)|r(slope|igof|or|d(er(of)?|[fm])?|v|arr)?|g(t|on|rave)|m(i(nus|cron|d)|ega|acr))|O(s(cr|lash)|c(y|irc)|ti(lde|mes)|opf|dblac|uml|penCurly((?:Double|)Quote)|ver(B(ar|rac(e|ket))|Parenthesis)|fr|Elig|acute|r|grave|m(icron|ega|acr)))|(p(s(cr|i)|h(i(v)?|one|mmat)|cy|i(tchfork|v)?|o(intint|und|pf)|uncsp|er(cnt|tenk|iod|p|mil)|fr|l(us(sim|cir|two|d([ou])|e|acir|mn|b)?|an(ck(h)?|kv))|ar(s(im|l)|t|a(llel)?)?|r(sim|n(sim|E|ap)|cue|ime(s)?|o(d|p(to)?|f(surf|line|alar))|urel|e(c(sim|n(sim|eqq|approx)|curlyeq|eq|approx)?)?|E|ap)?|m)|P(s(cr|i)|hi|cy|i|o(incareplane|pf)|fr|lusMinus|artialD|r(ime|o(duct|portion(al)?)|ecedes(SlantEqual|Tilde|Equal)?)?))|(q(scr|int|opf|u(ot|est(eq)?|at(int|ernions))|prime|fr)|Q(scr|opf|UOT|fr))|(R(s(h|cr)|ho|c(y|edil|aron)|Barr|ight(Ceiling|T(ee(Vector|Arrow)?|riangle(Bar|Equal)?)|Do(ubleBracket|wn(TeeVector|Vector(Bar)?))|Up(TeeVector|DownVector|Vector(Bar)?)|Vector(Bar)?|arrow|Floor|A(ngleBracket|rrow(Bar|LeftArrow)?))|o(undImplies|pf)|uleDelayed|e(verse(UpEquilibrium|E(quilibrium|lement)))?|fr|EG|a(ng|cute|rr(tl)?)|rightarrow)|r(s(h|cr|q(uo(r)?|b)|aquo)|h(o(v)?|ar(d|u(l)?))|nmid|c(y|ub|e(d??il)|aron)|Barr|t(hree|imes|ri([ef]|ltri)?)|i(singdotseq|ng|ght(squigarrow|harpoon(down|up)|threetimes|left(harpoons|arrows)|arrow(tail)?|rightarrows))|Har|o(times|p(f|lus|ar)|a(ng|rr)|brk)|d(sh|ca|quo(r)?|ldhar)|uluhar|p(polint|ar(gt)?)|e(ct|al(s|ine|part)?|g)|f(isht|loor|r)|l(har|arr|m)|a(ng([de]|le)?|c(ute|e)|t(io(nals)?|ail)|dic|emptyv|quo|rr(sim|hk|c|tl|pl|fs|w|lp|ap|b(fs)?)?)|rarr|x|moust(ache)?|b(arr|r(k(sl([du])|e)|ac([ek]))|brk)|A(tail|arr|rr)))|(s(s(cr|tarf|etmn|mile)|h(y|c(hcy|y)|ort(parallel|mid)|arp)|c(sim|y|n(sim|E|ap)|cue|irc|polint|e(dil)?|E|a(p|ron))?|t(ar(f)?|r(ns|aight(phi|epsilon)))|i(gma([fv])?|m(ne|dot|plus|e(q)?|l(E)?|rarr|g(E)?)?)|zlig|o(pf|ftcy|l(b(ar)?)?)|dot([be])?|u(ng|cc(sim|n(sim|eqq|approx)|curlyeq|eq|approx)?|p(s(im|u([bp])|et(neq(q)?|eq(q)?)?)|hs(ol|ub)|1|n([Ee])|2|d(sub|ot)|3|plus|e(dot)?|E|larr|mult)?|m|b(s(im|u([bp])|et(neq(q)?|eq(q)?)?)|n([Ee])|dot|plus|e(dot)?|E|rarr|mult)?)|pa(des(uit)?|r)|e(swar|ct|tm(n|inus)|ar(hk|r(ow)?)|xt|mi|Arr)|q(su(p(set(eq)?|e)?|b(set(eq)?|e)?)|c(up(s)?|ap(s)?)|u(f|ar([ef]))?)|fr(own)?|w(nwar|ar(hk|r(ow)?)|Arr)|larr|acute|rarr|m(t(e(s)?)?|i(d|le)|eparsl|a(shp|llsetminus))|bquo)|S(scr|hort((?:Right|Down|Up|Left)Arrow)|c(y|irc|edil|aron)?|tar|igma|H(cy|CHcy)|opf|u(c(hThat|ceeds(SlantEqual|Tilde|Equal)?)|p(set|erset(Equal)?)?|m|b(set(Equal)?)?)|OFTcy|q(uare(Su(perset(Equal)?|bset(Equal)?)|Intersection|Union)?|rt)|fr|acute|mallCircle))|(t(s(hcy|c([ry])|trok)|h(i(nsp|ck(sim|approx))|orn|e(ta(sym|v)?|re(4|fore))|k(sim|ap))|c(y|edil|aron)|i(nt|lde|mes(d|b(ar)?)?)|o(sa|p(cir|f(ork)?|bot)?|ea)|dot|prime|elrec|fr|w(ixt|ohead((?:lef|righ)tarrow))|a(u|rget)|r(i(sb|time|dot|plus|e|angle(down|q|left(eq)?|right(eq)?)?|minus)|pezium|ade)|brk)|T(s(cr|trok)|RADE|h(i((?:n|ck)Space)|e(ta|refore))|c(y|edil|aron)|S(H??cy)|ilde(Tilde|Equal|FullEqual)?|HORN|opf|fr|a([bu])|ripleDot))|(u(scr|h(ar([lr])|blk)|c(y|irc)|t(ilde|dot|ri(f)?)|Har|o(pf|gon)|d(har|arr|blac)|u(arr|ml)|p(si(h|lon)?|harpoon(left|right)|downarrow|uparrows|lus|arrow)|f(isht|r)|wangle|l(c(orn(er)?|rop)|tri)|a(cute|rr)|r(c(orn(er)?|rop)|tri|ing)|grave|m(l|acr)|br(cy|eve)|Arr)|U(scr|n(ion(Plus)?|der(B(ar|rac(e|ket))|Parenthesis))|c(y|irc)|tilde|o(pf|gon)|dblac|uml|p(si(lon)?|downarrow|Tee(Arrow)?|per((?:Righ|Lef)tArrow)|DownArrow|Equilibrium|arrow|Arrow(Bar|DownArrow)?)|fr|a(cute|rr(ocir)?)|ring|grave|macr|br(cy|eve)))|(v(s(cr|u(pn([Ee])|bn([Ee])))|nsu([bp])|cy|Bar(v)?|zigzag|opf|dash|prop|e(e(eq|bar)?|llip|r(t|bar))|Dash|fr|ltri|a(ngrt|r(s(igma|u(psetneq(q)?|bsetneq(q)?))|nothing|t(heta|riangle(left|right))|p(hi|i|ropto)|epsilon|kappa|r(ho)?))|rtri|Arr)|V(scr|cy|opf|dash(l)?|e(e|r(yThinSpace|t(ical(Bar|Separator|Tilde|Line))?|bar))|Dash|vdash|fr|bar))|(w(scr|circ|opf|p|e(ierp|d(ge(q)?|bar))|fr|r(eath)?)|W(scr|circ|opf|edge|fr))|(X(scr|i|opf|fr)|x(s(cr|qcup)|h([Aa]rr)|nis|c(irc|up|ap)|i|o(time|dot|p(f|lus))|dtri|u(tri|plus)|vee|fr|wedge|l([Aa]rr)|r([Aa]rr)|map))|(y(scr|c(y|irc)|icy|opf|u(cy|ml)|en|fr|ac(y|ute))|Y(scr|c(y|irc)|opf|uml|Icy|Ucy|fr|acute|Acy))|(z(scr|hcy|c(y|aron)|igrarr|opf|dot|e(ta|etrf)|fr|w(n?j)|acute)|Z(scr|c(y|aron)|Hcy|opf|dot|e(ta|roWidthSpace)|fr|acute)))(;)","name":"constant.character.entity.named.$2.astro"},{"captures":{"1":{"name":"punctuation.definition.entity.astro"},"3":{"name":"punctuation.definition.entity.astro"}},"match":"(&)#[0-9]+(;)","name":"constant.character.entity.numeric.decimal.astro"},{"captures":{"1":{"name":"punctuation.definition.entity.astro"},"3":{"name":"punctuation.definition.entity.astro"}},"match":"(&)#[Xx]\\\\h+(;)","name":"constant.character.entity.numeric.hexadecimal.astro"},{"match":"&(?=[0-9A-Za-z]+;)","name":"invalid.illegal.ambiguous-ampersand.astro"}]},"frontmatter":{"begin":"\\\\A(-{3})\\\\s*$","beginCaptures":{"1":{"name":"comment"}},"contentName":"source.ts","end":"(^|\\\\G)(-{3})|\\\\.{3}\\\\s*$","endCaptures":{"2":{"name":"comment"}},"patterns":[{"include":"source.ts"}]},"interpolation":{"patterns":[{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.astro"}},"contentName":"meta.embedded.expression.astro source.tsx","end":"}","endCaptures":{"0":{"name":"punctuation.section.embedded.end.astro"}},"patterns":[{"begin":"\\\\G\\\\s*(?=\\\\{)","end":"(?<=})","patterns":[{"include":"source.tsx#object-literal"}]},{"include":"source.tsx"}]}]},"scope":{"patterns":[{"include":"#comments"},{"include":"#tags"},{"include":"#interpolation"},{"include":"#entities"}]},"tags":{"patterns":[{"include":"#tags-raw"},{"include":"#tags-lang"},{"include":"#tags-void"},{"include":"#tags-general-end"},{"include":"#tags-general-start"}]},"tags-end-node":{"captures":{"1":{"name":"meta.tag.end.astro punctuation.definition.tag.begin.astro"},"2":{"name":"meta.tag.end.astro","patterns":[{"include":"#tags-name"}]},"3":{"name":"meta.tag.end.astro punctuation.definition.tag.end.astro"},"4":{"name":"meta.tag.start.astro punctuation.definition.tag.end.astro"}},"match":"(</)(.*?)\\\\s*(>)|(/>)"},"tags-general-end":{"begin":"(</)([^/>\\\\s]*)","beginCaptures":{"1":{"name":"meta.tag.end.astro punctuation.definition.tag.begin.astro"},"2":{"name":"meta.tag.end.astro","patterns":[{"include":"#tags-name"}]}},"end":"(>)","endCaptures":{"1":{"name":"meta.tag.end.astro punctuation.definition.tag.end.astro"}},"name":"meta.scope.tag.$2.astro"},"tags-general-start":{"begin":"(<)([^/>\\\\s]*)","beginCaptures":{"0":{"patterns":[{"include":"#tags-start-node"}]}},"end":"(/?>)","endCaptures":{"1":{"name":"meta.tag.start.astro punctuation.definition.tag.end.astro"}},"name":"meta.scope.tag.$2.astro","patterns":[{"include":"#tags-start-attributes"}]},"tags-lang":{"begin":"<(s(?:cript|tyle))","beginCaptures":{"0":{"patterns":[{"include":"#tags-start-node"}]}},"end":"</\\\\1\\\\s*>|/>","endCaptures":{"0":{"patterns":[{"include":"#tags-end-node"}]}},"name":"meta.scope.tag.$1.astro meta.$1.astro","patterns":[{"begin":"\\\\G(?=\\\\s*[^>]*?(type|lang)\\\\s*=\\\\s*([\\"']?)(?:text/)?(application/ld\\\\+json)\\\\2)","end":"(?=</|/>)","name":"meta.lang.json.astro","patterns":[{"include":"#tags-lang-start-attributes"}]},{"begin":"\\\\G(?=\\\\s*[^>]*?(type|lang)\\\\s*=\\\\s*([\\"']?)(module)\\\\2)","end":"(?=</|/>)","name":"meta.lang.javascript.astro","patterns":[{"include":"#tags-lang-start-attributes"}]},{"begin":"\\\\G(?=\\\\s*[^>]*?(type|lang)\\\\s*=\\\\s*([\\"']?)(?:text/|application/)?([+/\\\\w]+)\\\\2)","end":"(?=</|/>)","name":"meta.lang.$3.astro","patterns":[{"include":"#tags-lang-start-attributes"}]},{"include":"#tags-lang-start-attributes"}]},"tags-lang-start-attributes":{"begin":"\\\\G","end":"(?=/>)|>","endCaptures":{"0":{"name":"punctuation.definition.tag.end.astro"}},"name":"meta.tag.start.astro","patterns":[{"include":"#attributes"}]},"tags-name":{"patterns":[{"match":"[A-Z][0-9A-Z_a-z]*","name":"support.class.component.astro"},{"match":"[a-z][0-:\\\\w]*-[-0-:\\\\w]*","name":"meta.tag.custom.astro entity.name.tag.astro"},{"match":"[a-z][-0-:\\\\w]*","name":"entity.name.tag.astro"}]},"tags-raw":{"begin":"<([^!/<>?\\\\s]+)(?=[^>]+is:raw).*?","beginCaptures":{"0":{"patterns":[{"include":"#tags-start-node"}]}},"contentName":"source.unknown","end":"</\\\\1\\\\s*>|/>","endCaptures":{"0":{"patterns":[{"include":"#tags-end-node"}]}},"name":"meta.scope.tag.$1.astro meta.raw.astro","patterns":[{"include":"#tags-lang-start-attributes"}]},"tags-start-attributes":{"begin":"\\\\G","end":"(?=/?>)","name":"meta.tag.start.astro","patterns":[{"include":"#attributes"}]},"tags-start-node":{"captures":{"1":{"name":"punctuation.definition.tag.begin.astro"},"2":{"patterns":[{"include":"#tags-name"}]}},"match":"(<)([^/>\\\\s]*)","name":"meta.tag.start.astro"},"tags-void":{"begin":"(<)(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.astro"},"2":{"name":"entity.name.tag.astro"}},"end":"/?>","endCaptures":{"0":{"name":"punctuation.definition.tag.begin.astro"}},"name":"meta.tag.void.astro","patterns":[{"include":"#attributes"}]},"text":{"patterns":[{"begin":"(?<=^|---|[>}])","end":"(?=[<{]|$)","name":"text.astro","patterns":[{"include":"#entities"}]}]}},"scopeName":"source.astro","embeddedLangs":["json","javascript","typescript","css","postcss","tsx"],"embeddedLangsLazy":["sass","scss","stylus","less"]}`)),m=[...e,...t,...r,...a,...n,...s,i];export{m as default};
|