poe-code 3.0.121 → 3.0.123
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/cli/commands/auth.js +1 -1
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/install.js +1 -1
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/launch.d.ts +3 -0
- package/dist/cli/commands/launch.js +456 -0
- package/dist/cli/commands/launch.js.map +1 -0
- package/dist/cli/program.js +13 -23
- package/dist/cli/program.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +2538 -434
- package/dist/index.js.map +4 -4
- package/dist/sdk/launch.d.ts +45 -0
- package/dist/sdk/launch.js +165 -0
- package/dist/sdk/launch.js.map +1 -0
- package/dist/sdk/process-launcher.d.ts +2 -0
- package/dist/sdk/process-launcher.js +2 -0
- package/dist/sdk/process-launcher.js.map +1 -0
- package/package.json +4 -2
|
@@ -12,7 +12,7 @@ export function registerAuthCommand(program, container) {
|
|
|
12
12
|
});
|
|
13
13
|
auth
|
|
14
14
|
.command("status")
|
|
15
|
-
.description("Show login
|
|
15
|
+
.description("Show login status.")
|
|
16
16
|
.action(async () => {
|
|
17
17
|
await executeStatus(program, container);
|
|
18
18
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,YAAY,EAA4B,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,SAAuB;IAC3E,MAAM,IAAI,GAAG,OAAO;SACjB,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,YAAY,EAA4B,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,SAAuB;IAC3E,MAAM,IAAI,GAAG,OAAO;SACjB,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oBAAoB,CAAC;SACjC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,yBAAyB,CAAC;SACtC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,sBAAsB,CAAC;SACnC,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,OAA4B,EAAE,EAAE;QAC7C,MAAM,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAgB,EAAE,SAAuB;IACpE,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,wBAAwB,CAAC,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IAE5E,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;QAE5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACvC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC;YACvE,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;QACpB,CAAC,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAEtC,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,UAAU,CACzC,GAAG,SAAS,CAAC,GAAG,CAAC,aAAa,SAAS,EACvC;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,EAAE;aAClC;SACF,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAChC,MAAM,IAAI,QAAQ,CAAC,kCAAkC,QAAQ,CAAC,MAAM,GAAG,EAAE;gBACvE,UAAU,EAAE,QAAQ,CAAC,MAAM;gBAC3B,QAAQ,EAAE,YAAY;aACvB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAKtC,CAAC;QAEF,CAAC,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,IAAI,MAAM,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9D,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE;gBAClD,SAAS,EAAE,aAAa;aACzB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,QAAiB,EAAE,SAAuB;IACrE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -9,7 +9,7 @@ export function registerInstallCommand(program, container) {
|
|
|
9
9
|
return program
|
|
10
10
|
.command("install")
|
|
11
11
|
.alias("i")
|
|
12
|
-
.description("Install
|
|
12
|
+
.description("Install agent binary for a configured agent.")
|
|
13
13
|
.argument("[agent]", serviceDescription)
|
|
14
14
|
.action(async (service) => {
|
|
15
15
|
const resolved = await resolveServiceArgument(program, container, service, { action: "install" });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,UAAU,sBAAsB,CACpC,OAAgB,EAChB,SAAuB;IAEvB,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ;SACpC,IAAI,EAAE;SACN,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,OAAO,CAAC,OAAO,KAAK,UAAU,CAAC;SAC1D,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,kBAAkB,GACtB,mBAAmB,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;IACvD,OAAO,OAAO;SACX,OAAO,CAAC,SAAS,CAAC;SAClB,KAAK,CAAC,GAAG,CAAC;SACV,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,UAAU,sBAAsB,CACpC,OAAgB,EAChB,SAAuB;IAEvB,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ;SACpC,IAAI,EAAE;SACN,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,OAAO,CAAC,OAAO,KAAK,UAAU,CAAC;SAC1D,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,kBAAkB,GACtB,mBAAmB,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;IACvD,OAAO,OAAO;SACX,OAAO,CAAC,SAAS,CAAC;SAClB,KAAK,CAAC,GAAG,CAAC;SACV,WAAW,CAAC,8CAA8C,CAAC;SAC3D,QAAQ,CACP,SAAS,EACT,kBAAkB,CACnB;SACA,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE;QAC5C,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAC3C,OAAO,EACP,SAAS,EACT,OAAO,EACP,EAAE,MAAM,EAAE,SAAS,EAAE,CACtB,CAAC;QACF,MAAM,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAgB,EAChB,SAAuB,EACvB,OAAe;IAEf,MAAM,OAAO,GAAG,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IACtC,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,wBAAwB,CACxC,SAAS,EACT,KAAK,EACL,WAAW,gBAAgB,EAAE,CAC9B,CAAC;IAEF,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,gBAAgB,EAAE,CAAC,CAAC;IAEtD,MAAM,eAAe,GAAG,oBAAoB,CAC1C,SAAS,EACT,OAAO,EACP,SAAS,CACV,CAAC;IAEF,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC3E,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,UAAU,gBAAgB,6BAA6B,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GACd,gBAAgB,KAAK,aAAa;QAChC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,oBAAoB;QACtC,CAAC,CAAC,0BAA0B,OAAO,CAAC,KAAK,GAAG,CAAC;IAEjD,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzB,OAAO,EAAE,aAAa,OAAO,CAAC,KAAK,GAAG;QACtC,GAAG,EAAE,UAAU;KAChB,CAAC,CAAC;IAEH,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
import { Option } from "commander";
|
|
2
|
+
import { select, promptText, isCancel, cancel, getTheme, renderTable } from "@poe-code/design-system";
|
|
3
|
+
import { createExecutionResources, resolveCommandFlags } from "./shared.js";
|
|
4
|
+
import { ValidationError } from "../errors.js";
|
|
5
|
+
import { followLaunchLogs, listLaunches, readLaunchLogs, removeLaunch, restartLaunch, runLaunchDaemon, startLaunch, stopLaunch } from "../../sdk/launch.js";
|
|
6
|
+
export function registerLaunchCommand(program, container) {
|
|
7
|
+
const launch = program
|
|
8
|
+
.command("launch")
|
|
9
|
+
.description("Manage long-running host and Docker processes.");
|
|
10
|
+
launch
|
|
11
|
+
.command("start [id] [commandArgs...]")
|
|
12
|
+
.usage("<id> -- <command> [args...]")
|
|
13
|
+
.description("Start and supervise a managed process.")
|
|
14
|
+
.addOption(createChoiceOption("--restart <policy>", "Restart policy", ["never", "on-failure", "always"], "on-failure"))
|
|
15
|
+
.option("--max-restarts <n>", "Max consecutive restarts", "5")
|
|
16
|
+
.option("--ready-pattern <string>", "Log substring to wait for before reporting running")
|
|
17
|
+
.option("--ready-port <port>", "TCP port to probe for readiness")
|
|
18
|
+
.option("--cwd <dir>", "Working directory for the managed process")
|
|
19
|
+
.option("--env <entry>", "Environment variable (KEY=VALUE)", collectValues, [])
|
|
20
|
+
.option("--image <image>", "Docker image")
|
|
21
|
+
.option("--mount <src:target[:ro]>", "Docker bind mount", collectValues, [])
|
|
22
|
+
.option("--port <host:container>", "Docker port mapping", collectValues, [])
|
|
23
|
+
.option("--network <name>", "Docker network")
|
|
24
|
+
.addOption(createChoiceOption("--engine <engine>", "Container engine", ["docker", "podman"]))
|
|
25
|
+
.action(async function (id, commandArgs) {
|
|
26
|
+
const spec = await resolveStartSpec({
|
|
27
|
+
commandArgs,
|
|
28
|
+
id,
|
|
29
|
+
options: this.opts(),
|
|
30
|
+
program
|
|
31
|
+
});
|
|
32
|
+
if (spec === null) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
await startLaunch({
|
|
36
|
+
cwd: container.env.cwd,
|
|
37
|
+
homeDir: container.env.homeDir,
|
|
38
|
+
spec
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
launch
|
|
42
|
+
.command("stop <id>")
|
|
43
|
+
.description("Stop a managed process.")
|
|
44
|
+
.option("--force", "Stop immediately with SIGKILL / docker kill")
|
|
45
|
+
.action(async function (id) {
|
|
46
|
+
const result = await stopLaunch({
|
|
47
|
+
force: Boolean(this.opts().force),
|
|
48
|
+
homeDir: container.env.homeDir,
|
|
49
|
+
id
|
|
50
|
+
});
|
|
51
|
+
if (result === null) {
|
|
52
|
+
throw new ValidationError(`Managed process not found: ${id}`);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
launch
|
|
56
|
+
.command("restart <id>")
|
|
57
|
+
.description("Restart a managed process.")
|
|
58
|
+
.action(async function (id) {
|
|
59
|
+
await restartLaunch({ homeDir: container.env.homeDir, id });
|
|
60
|
+
});
|
|
61
|
+
launch
|
|
62
|
+
.command("status")
|
|
63
|
+
.description("List managed processes.")
|
|
64
|
+
.action(async function () {
|
|
65
|
+
const records = await listLaunches({ homeDir: container.env.homeDir });
|
|
66
|
+
const flags = resolveCommandFlags(program);
|
|
67
|
+
const resources = createExecutionResources(container, flags, "launch:status");
|
|
68
|
+
if (records.length === 0) {
|
|
69
|
+
resources.logger.info("No managed processes.");
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
resources.logger.info(renderTable({
|
|
73
|
+
columns: [
|
|
74
|
+
{ name: "ID", title: "ID", alignment: "left", maxLen: 24 },
|
|
75
|
+
{ name: "RUNTIME", title: "RUNTIME", alignment: "left", maxLen: 8 },
|
|
76
|
+
{ name: "STATUS", title: "STATUS", alignment: "left", maxLen: 12 },
|
|
77
|
+
{ name: "PID", title: "PID", alignment: "right", maxLen: 8 },
|
|
78
|
+
{ name: "RESTARTS", title: "RESTARTS", alignment: "right", maxLen: 10 },
|
|
79
|
+
{ name: "UPTIME", title: "UPTIME", alignment: "right", maxLen: 12 },
|
|
80
|
+
{ name: "LAST EXIT", title: "LAST EXIT", alignment: "right", maxLen: 10 }
|
|
81
|
+
],
|
|
82
|
+
rows: records.map(formatStatusRow),
|
|
83
|
+
theme: getTheme()
|
|
84
|
+
}));
|
|
85
|
+
});
|
|
86
|
+
launch
|
|
87
|
+
.command("logs <id>")
|
|
88
|
+
.description("Show managed process logs.")
|
|
89
|
+
.option("--follow", "Follow log output")
|
|
90
|
+
.option("--lines <n>", "Number of lines to show", "50")
|
|
91
|
+
.option("--stderr", "Show stderr instead of stdout")
|
|
92
|
+
.action(async function (id) {
|
|
93
|
+
const options = this.opts();
|
|
94
|
+
const lines = parseNonNegativeInt(options.lines, "lines") ?? 50;
|
|
95
|
+
const stream = options.stderr ? "stderr" : "stdout";
|
|
96
|
+
const flags = resolveCommandFlags(program);
|
|
97
|
+
const resources = createExecutionResources(container, flags, `launch:logs:${id}`);
|
|
98
|
+
const initial = await readLaunchLogs({
|
|
99
|
+
homeDir: container.env.homeDir,
|
|
100
|
+
id,
|
|
101
|
+
lines,
|
|
102
|
+
stream
|
|
103
|
+
});
|
|
104
|
+
if (initial.length > 0) {
|
|
105
|
+
resources.logger.info(initial.join("\n"));
|
|
106
|
+
}
|
|
107
|
+
if (!options.follow) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const controller = new AbortController();
|
|
111
|
+
const stop = () => {
|
|
112
|
+
controller.abort();
|
|
113
|
+
};
|
|
114
|
+
process.once("SIGINT", stop);
|
|
115
|
+
process.once("SIGTERM", stop);
|
|
116
|
+
try {
|
|
117
|
+
for await (const line of followLaunchLogs({
|
|
118
|
+
homeDir: container.env.homeDir,
|
|
119
|
+
id,
|
|
120
|
+
lines,
|
|
121
|
+
signal: controller.signal,
|
|
122
|
+
stream
|
|
123
|
+
})) {
|
|
124
|
+
resources.logger.info(line);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
process.removeListener("SIGINT", stop);
|
|
129
|
+
process.removeListener("SIGTERM", stop);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
launch
|
|
133
|
+
.command("rm <id>")
|
|
134
|
+
.description("Remove managed process state and logs.")
|
|
135
|
+
.action(async function (id) {
|
|
136
|
+
await removeLaunch({ homeDir: container.env.homeDir, id });
|
|
137
|
+
});
|
|
138
|
+
launch
|
|
139
|
+
.command("__run <id>", { hidden: true })
|
|
140
|
+
.action(async function (id) {
|
|
141
|
+
await runLaunchDaemon({ homeDir: container.env.homeDir, id });
|
|
142
|
+
});
|
|
143
|
+
return launch;
|
|
144
|
+
}
|
|
145
|
+
async function resolveStartSpec(options) {
|
|
146
|
+
const flags = resolveCommandFlags(options.program);
|
|
147
|
+
const id = await resolveProcessId(options.id);
|
|
148
|
+
if (id === null) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
const commandParts = await resolveCommandParts(options.commandArgs);
|
|
152
|
+
if (commandParts === null) {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
if (commandParts.length === 0) {
|
|
156
|
+
throw new ValidationError("Command to run is required.");
|
|
157
|
+
}
|
|
158
|
+
const runtime = await resolveRuntime({
|
|
159
|
+
assumeYes: flags.assumeYes,
|
|
160
|
+
hasCommand: commandParts.length > 0,
|
|
161
|
+
image: options.options.image
|
|
162
|
+
});
|
|
163
|
+
if (runtime === null) {
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
const restart = await resolveRestart(options.options.restart, flags.assumeYes);
|
|
167
|
+
if (restart === null) {
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
const spec = {
|
|
171
|
+
args: commandParts.slice(1),
|
|
172
|
+
command: commandParts[0],
|
|
173
|
+
id,
|
|
174
|
+
restart
|
|
175
|
+
};
|
|
176
|
+
const maxRestarts = parseNonNegativeInt(options.options.maxRestarts, "max-restarts");
|
|
177
|
+
if (maxRestarts !== undefined) {
|
|
178
|
+
spec.maxRestarts = maxRestarts;
|
|
179
|
+
}
|
|
180
|
+
if (options.options.cwd) {
|
|
181
|
+
spec.cwd = options.options.cwd;
|
|
182
|
+
}
|
|
183
|
+
const envEntries = options.options.env ?? [];
|
|
184
|
+
if (envEntries.length > 0) {
|
|
185
|
+
spec.env = parseEnvEntries(envEntries);
|
|
186
|
+
}
|
|
187
|
+
const readyCheck = resolveReadyCheck(options.options);
|
|
188
|
+
if (readyCheck) {
|
|
189
|
+
spec.readyCheck = readyCheck;
|
|
190
|
+
}
|
|
191
|
+
if (runtime === "docker") {
|
|
192
|
+
const image = await resolveDockerImage(options.options.image);
|
|
193
|
+
if (image === null) {
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
spec.docker = {
|
|
197
|
+
image,
|
|
198
|
+
...(options.options.engine ? { engine: options.options.engine } : {}),
|
|
199
|
+
...(options.options.mount?.length ? { mounts: options.options.mount.map(parseMount) } : {}),
|
|
200
|
+
...(options.options.port?.length ? { ports: options.options.port.map(parsePort) } : {}),
|
|
201
|
+
...(options.options.network ? { network: options.options.network } : {})
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
return spec;
|
|
205
|
+
}
|
|
206
|
+
async function resolveProcessId(value) {
|
|
207
|
+
if (value && value.trim().length > 0) {
|
|
208
|
+
return value.trim();
|
|
209
|
+
}
|
|
210
|
+
const entered = await promptText({
|
|
211
|
+
message: "Process ID"
|
|
212
|
+
});
|
|
213
|
+
if (isCancel(entered)) {
|
|
214
|
+
cancel("Launch start cancelled.");
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
const id = typeof entered === "string" ? entered.trim() : "";
|
|
218
|
+
if (id.length === 0) {
|
|
219
|
+
throw new ValidationError("Process ID is required.");
|
|
220
|
+
}
|
|
221
|
+
return id;
|
|
222
|
+
}
|
|
223
|
+
async function resolveCommandParts(commandArgs) {
|
|
224
|
+
if (commandArgs.length > 0) {
|
|
225
|
+
return [...commandArgs];
|
|
226
|
+
}
|
|
227
|
+
const entered = await promptText({
|
|
228
|
+
message: "Command to run"
|
|
229
|
+
});
|
|
230
|
+
if (isCancel(entered)) {
|
|
231
|
+
cancel("Launch start cancelled.");
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
const value = typeof entered === "string" ? entered.trim() : "";
|
|
235
|
+
if (value.length === 0) {
|
|
236
|
+
throw new ValidationError("Command to run is required.");
|
|
237
|
+
}
|
|
238
|
+
return splitCommandLine(value);
|
|
239
|
+
}
|
|
240
|
+
async function resolveRuntime(options) {
|
|
241
|
+
if (options.image) {
|
|
242
|
+
return "docker";
|
|
243
|
+
}
|
|
244
|
+
if (options.hasCommand || options.assumeYes) {
|
|
245
|
+
return "host";
|
|
246
|
+
}
|
|
247
|
+
const selected = await select({
|
|
248
|
+
message: "Runtime",
|
|
249
|
+
options: [
|
|
250
|
+
{ label: "host", value: "host" },
|
|
251
|
+
{ label: "docker", value: "docker" }
|
|
252
|
+
]
|
|
253
|
+
});
|
|
254
|
+
if (isCancel(selected)) {
|
|
255
|
+
cancel("Launch start cancelled.");
|
|
256
|
+
return null;
|
|
257
|
+
}
|
|
258
|
+
return selected;
|
|
259
|
+
}
|
|
260
|
+
async function resolveDockerImage(value) {
|
|
261
|
+
if (value && value.trim().length > 0) {
|
|
262
|
+
return value.trim();
|
|
263
|
+
}
|
|
264
|
+
const entered = await promptText({
|
|
265
|
+
message: "Docker image"
|
|
266
|
+
});
|
|
267
|
+
if (isCancel(entered)) {
|
|
268
|
+
cancel("Launch start cancelled.");
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
const image = typeof entered === "string" ? entered.trim() : "";
|
|
272
|
+
if (image.length === 0) {
|
|
273
|
+
throw new ValidationError("Docker image is required when runtime is docker.");
|
|
274
|
+
}
|
|
275
|
+
return image;
|
|
276
|
+
}
|
|
277
|
+
async function resolveRestart(restart, assumeYes) {
|
|
278
|
+
if (restart) {
|
|
279
|
+
return restart;
|
|
280
|
+
}
|
|
281
|
+
if (assumeYes) {
|
|
282
|
+
return "on-failure";
|
|
283
|
+
}
|
|
284
|
+
const selected = await select({
|
|
285
|
+
message: "Restart policy",
|
|
286
|
+
options: [
|
|
287
|
+
{ label: "on-failure", value: "on-failure" },
|
|
288
|
+
{ label: "never", value: "never" },
|
|
289
|
+
{ label: "always", value: "always" }
|
|
290
|
+
]
|
|
291
|
+
});
|
|
292
|
+
if (isCancel(selected)) {
|
|
293
|
+
cancel("Launch start cancelled.");
|
|
294
|
+
return null;
|
|
295
|
+
}
|
|
296
|
+
return selected;
|
|
297
|
+
}
|
|
298
|
+
function resolveReadyCheck(options) {
|
|
299
|
+
if (options.readyPattern && options.readyPattern.trim().length > 0) {
|
|
300
|
+
return { kind: "log-pattern", pattern: options.readyPattern.trim() };
|
|
301
|
+
}
|
|
302
|
+
const readyPort = parsePositiveInt(options.readyPort, "ready-port");
|
|
303
|
+
if (readyPort !== undefined) {
|
|
304
|
+
return { kind: "tcp", port: readyPort };
|
|
305
|
+
}
|
|
306
|
+
return undefined;
|
|
307
|
+
}
|
|
308
|
+
function parseEnvEntries(entries) {
|
|
309
|
+
const env = {};
|
|
310
|
+
for (const entry of entries) {
|
|
311
|
+
const separator = entry.indexOf("=");
|
|
312
|
+
if (separator <= 0) {
|
|
313
|
+
throw new ValidationError(`Invalid --env value "${entry}". Expected KEY=VALUE.`);
|
|
314
|
+
}
|
|
315
|
+
const key = entry.slice(0, separator).trim();
|
|
316
|
+
const value = entry.slice(separator + 1);
|
|
317
|
+
if (key.length === 0) {
|
|
318
|
+
throw new ValidationError(`Invalid --env value "${entry}". Expected KEY=VALUE.`);
|
|
319
|
+
}
|
|
320
|
+
env[key] = value;
|
|
321
|
+
}
|
|
322
|
+
return env;
|
|
323
|
+
}
|
|
324
|
+
function parseMount(value) {
|
|
325
|
+
const parts = value.split(":");
|
|
326
|
+
if (parts.length < 2 || parts.length > 3) {
|
|
327
|
+
throw new ValidationError(`Invalid --mount value "${value}". Expected src:target[:ro].`);
|
|
328
|
+
}
|
|
329
|
+
const mount = {
|
|
330
|
+
source: parts[0],
|
|
331
|
+
target: parts[1]
|
|
332
|
+
};
|
|
333
|
+
if (parts[2] === "ro") {
|
|
334
|
+
mount.readonly = true;
|
|
335
|
+
}
|
|
336
|
+
else if (parts[2] !== undefined) {
|
|
337
|
+
throw new ValidationError(`Invalid --mount value "${value}". Only :ro is supported.`);
|
|
338
|
+
}
|
|
339
|
+
return mount;
|
|
340
|
+
}
|
|
341
|
+
function parsePort(value) {
|
|
342
|
+
const parts = value.split(":");
|
|
343
|
+
if (parts.length !== 2) {
|
|
344
|
+
throw new ValidationError(`Invalid --port value "${value}". Expected host:container.`);
|
|
345
|
+
}
|
|
346
|
+
return {
|
|
347
|
+
container: parseRequiredPositiveInt(parts[1], "port"),
|
|
348
|
+
host: parseRequiredPositiveInt(parts[0], "port")
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
function splitCommandLine(value) {
|
|
352
|
+
const parts = [];
|
|
353
|
+
let current = "";
|
|
354
|
+
let quote = null;
|
|
355
|
+
for (const char of value) {
|
|
356
|
+
if (quote !== null) {
|
|
357
|
+
if (char === quote) {
|
|
358
|
+
quote = null;
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
current += char;
|
|
362
|
+
}
|
|
363
|
+
continue;
|
|
364
|
+
}
|
|
365
|
+
if (char === "'" || char === '"') {
|
|
366
|
+
quote = char;
|
|
367
|
+
continue;
|
|
368
|
+
}
|
|
369
|
+
if (char === " " || char === "\t") {
|
|
370
|
+
if (current.length > 0) {
|
|
371
|
+
parts.push(current);
|
|
372
|
+
current = "";
|
|
373
|
+
}
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
376
|
+
current += char;
|
|
377
|
+
}
|
|
378
|
+
if (quote !== null) {
|
|
379
|
+
throw new ValidationError("Command contains an unterminated quote.");
|
|
380
|
+
}
|
|
381
|
+
if (current.length > 0) {
|
|
382
|
+
parts.push(current);
|
|
383
|
+
}
|
|
384
|
+
return parts;
|
|
385
|
+
}
|
|
386
|
+
function formatStatusRow(record) {
|
|
387
|
+
const state = record.state;
|
|
388
|
+
const id = record.spec?.id ?? state?.id ?? "-";
|
|
389
|
+
return {
|
|
390
|
+
ID: id,
|
|
391
|
+
"LAST EXIT": state?.lastExitCode == null ? "-" : String(state.lastExitCode),
|
|
392
|
+
PID: state?.pid == null ? "-" : String(state.pid),
|
|
393
|
+
RESTARTS: state ? String(state.restartCount) : "0",
|
|
394
|
+
RUNTIME: state?.runtime ?? (record.spec?.docker ? "docker" : "host"),
|
|
395
|
+
STATUS: state?.status ?? "stopped",
|
|
396
|
+
UPTIME: formatUptime(state)
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
function formatUptime(state) {
|
|
400
|
+
if (!state || (state.status !== "running" && state.status !== "restarting") || !state.lastStartedAt) {
|
|
401
|
+
return "-";
|
|
402
|
+
}
|
|
403
|
+
const startedAt = Date.parse(state.lastStartedAt);
|
|
404
|
+
if (!Number.isFinite(startedAt)) {
|
|
405
|
+
return "-";
|
|
406
|
+
}
|
|
407
|
+
const totalSeconds = Math.max(0, Math.floor((Date.now() - startedAt) / 1000));
|
|
408
|
+
const hours = Math.floor(totalSeconds / 3600);
|
|
409
|
+
const minutes = Math.floor((totalSeconds % 3600) / 60);
|
|
410
|
+
const seconds = totalSeconds % 60;
|
|
411
|
+
if (hours > 0) {
|
|
412
|
+
return `${hours}h ${minutes}m`;
|
|
413
|
+
}
|
|
414
|
+
if (minutes > 0) {
|
|
415
|
+
return `${minutes}m ${seconds}s`;
|
|
416
|
+
}
|
|
417
|
+
return `${seconds}s`;
|
|
418
|
+
}
|
|
419
|
+
function createChoiceOption(flags, description, choices, defaultValue) {
|
|
420
|
+
const option = new Option(flags, description).choices(choices);
|
|
421
|
+
if (defaultValue !== undefined) {
|
|
422
|
+
option.default(defaultValue);
|
|
423
|
+
}
|
|
424
|
+
return option;
|
|
425
|
+
}
|
|
426
|
+
function parsePositiveInt(value, fieldName) {
|
|
427
|
+
if (value == null) {
|
|
428
|
+
return undefined;
|
|
429
|
+
}
|
|
430
|
+
const parsed = Number.parseInt(value, 10);
|
|
431
|
+
if (!Number.isInteger(parsed) || parsed < 1) {
|
|
432
|
+
throw new ValidationError(`Invalid ${fieldName} "${value}". Expected a positive integer.`);
|
|
433
|
+
}
|
|
434
|
+
return parsed;
|
|
435
|
+
}
|
|
436
|
+
function parseRequiredPositiveInt(value, fieldName) {
|
|
437
|
+
const parsed = parsePositiveInt(value, fieldName);
|
|
438
|
+
if (parsed === undefined) {
|
|
439
|
+
throw new ValidationError(`Invalid ${fieldName} "${value}". Expected a positive integer.`);
|
|
440
|
+
}
|
|
441
|
+
return parsed;
|
|
442
|
+
}
|
|
443
|
+
function parseNonNegativeInt(value, fieldName) {
|
|
444
|
+
if (value == null) {
|
|
445
|
+
return undefined;
|
|
446
|
+
}
|
|
447
|
+
const parsed = Number.parseInt(value, 10);
|
|
448
|
+
if (!Number.isInteger(parsed) || parsed < 0) {
|
|
449
|
+
throw new ValidationError(`Invalid ${fieldName} "${value}". Expected a non-negative integer.`);
|
|
450
|
+
}
|
|
451
|
+
return parsed;
|
|
452
|
+
}
|
|
453
|
+
function collectValues(value, previous) {
|
|
454
|
+
return [...previous, value];
|
|
455
|
+
}
|
|
456
|
+
//# sourceMappingURL=launch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../src/cli/commands/launch.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/program.js
CHANGED
|
@@ -23,6 +23,7 @@ import { registerModelsCommand } from "./commands/models.js";
|
|
|
23
23
|
import { registerPipelineCommand } from "./commands/pipeline.js";
|
|
24
24
|
import { registerRalphCommand } from "./commands/ralph.js";
|
|
25
25
|
import { registerExperimentCommand } from "./commands/experiment.js";
|
|
26
|
+
import { registerLaunchCommand } from "./commands/launch.js";
|
|
26
27
|
import packageJson from "../../package.json" with { type: "json" };
|
|
27
28
|
import { throwCommandNotFound } from "./command-not-found.js";
|
|
28
29
|
import { detectExecutionContext, formatCliHelpCommand, formatCliUsageCommand } from "../utils/execution-context.js";
|
|
@@ -47,7 +48,7 @@ function formatHelpText(input) {
|
|
|
47
48
|
name: "install",
|
|
48
49
|
aliases: ["i"],
|
|
49
50
|
args: "[agent]",
|
|
50
|
-
description: "Install
|
|
51
|
+
description: "Install agent binary for a configured agent"
|
|
51
52
|
},
|
|
52
53
|
{
|
|
53
54
|
name: "configure",
|
|
@@ -77,7 +78,7 @@ function formatHelpText(input) {
|
|
|
77
78
|
name: "auth status",
|
|
78
79
|
aliases: [],
|
|
79
80
|
args: "",
|
|
80
|
-
description: "Show login
|
|
81
|
+
description: "Show login status"
|
|
81
82
|
},
|
|
82
83
|
{
|
|
83
84
|
name: "agent",
|
|
@@ -122,10 +123,10 @@ function formatHelpText(input) {
|
|
|
122
123
|
description: "Remove Poe MCP configuration from your agent"
|
|
123
124
|
},
|
|
124
125
|
{
|
|
125
|
-
name: "
|
|
126
|
+
name: "experiment install",
|
|
126
127
|
aliases: [],
|
|
127
|
-
args: "",
|
|
128
|
-
description: "
|
|
128
|
+
args: "[agent]",
|
|
129
|
+
description: "Install the experiment skill into agent configuration"
|
|
129
130
|
},
|
|
130
131
|
{
|
|
131
132
|
name: "skill configure",
|
|
@@ -175,6 +176,12 @@ function formatHelpText(input) {
|
|
|
175
176
|
args: "[doc]",
|
|
176
177
|
description: "Display an experiment journal as a formatted table"
|
|
177
178
|
},
|
|
179
|
+
{
|
|
180
|
+
name: "launch",
|
|
181
|
+
aliases: [],
|
|
182
|
+
args: "",
|
|
183
|
+
description: "Manage long-running host and Docker processes"
|
|
184
|
+
},
|
|
178
185
|
{
|
|
179
186
|
name: "usage",
|
|
180
187
|
aliases: ["u"],
|
|
@@ -192,24 +199,6 @@ function formatHelpText(input) {
|
|
|
192
199
|
aliases: [],
|
|
193
200
|
args: "",
|
|
194
201
|
description: "Show config file paths and usage hints"
|
|
195
|
-
},
|
|
196
|
-
{
|
|
197
|
-
name: "utils config show",
|
|
198
|
-
aliases: [],
|
|
199
|
-
args: "",
|
|
200
|
-
description: "Show config inputs and resolved result"
|
|
201
|
-
},
|
|
202
|
-
{
|
|
203
|
-
name: "utils config init",
|
|
204
|
-
aliases: [],
|
|
205
|
-
args: "",
|
|
206
|
-
description: "Create a project config file"
|
|
207
|
-
},
|
|
208
|
-
{
|
|
209
|
-
name: "utils config edit",
|
|
210
|
-
aliases: [],
|
|
211
|
-
args: "",
|
|
212
|
-
description: "Open a config file in your editor"
|
|
213
202
|
}
|
|
214
203
|
];
|
|
215
204
|
const nameWidth = Math.max(0, ...commandRows.map((row) => [row.name, ...row.aliases].join(", ").length));
|
|
@@ -354,6 +343,7 @@ function bootstrapProgram(container) {
|
|
|
354
343
|
registerPipelineCommand(program, container);
|
|
355
344
|
registerRalphCommand(program, container);
|
|
356
345
|
registerExperimentCommand(program, container);
|
|
346
|
+
registerLaunchCommand(program, container);
|
|
357
347
|
registerUsageCommand(program, container);
|
|
358
348
|
registerModelsCommand(program, container);
|
|
359
349
|
program.allowExcessArguments().action(function () {
|