@hagicode/hagiscript 0.1.6-dev.39.1.abb22ea → 0.1.6-dev.41.1.c7efd72
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 +38 -8
- package/README_cn.md +55 -0
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/pm2-commands.d.ts +2 -0
- package/dist/commands/pm2-commands.js +54 -0
- package/dist/commands/pm2-commands.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/pm2-manager.d.ts +54 -0
- package/dist/runtime/pm2-manager.js +260 -0
- package/dist/runtime/pm2-manager.js.map +1 -0
- package/dist/runtime/runtime-executor.d.ts +18 -0
- package/dist/runtime/runtime-executor.js +58 -9
- package/dist/runtime/runtime-executor.js.map +1 -1
- package/dist/runtime/runtime-manager.d.ts +4 -0
- package/dist/runtime/runtime-manager.js +79 -13
- package/dist/runtime/runtime-manager.js.map +1 -1
- package/dist/runtime/runtime-manifest.d.ts +14 -0
- package/dist/runtime/runtime-manifest.js +46 -0
- package/dist/runtime/runtime-manifest.js.map +1 -1
- package/dist/runtime/runtime-paths.d.ts +8 -1
- package/dist/runtime/runtime-paths.js +27 -12
- package/dist/runtime/runtime-paths.js.map +1 -1
- package/package.json +1 -1
- package/runtime/lib/runtime-script-lib.mjs +40 -1
- package/runtime/manifest.yaml +15 -1
- package/runtime/scripts/configure-code-server.mjs +1 -1
- package/runtime/scripts/configure-omniroute.mjs +3 -3
- package/runtime/scripts/install-code-server.mjs +7 -4
- package/runtime/scripts/install-omniroute.mjs +9 -6
- package/runtime/templates/code-server-config.yaml +2 -2
- package/runtime/templates/omniroute-config.yaml +3 -3
package/README.md
CHANGED
|
@@ -217,7 +217,7 @@ When fallback is triggered, HagiScript logs `Fallback used: ...` during executio
|
|
|
217
217
|
|
|
218
218
|
### Runtime Package Management
|
|
219
219
|
|
|
220
|
-
`hagiscript runtime` adds a manifest-driven package manager for the broader `hagicode-runtime` contract. By default it loads `runtime/manifest.yaml` from the installed package, resolves the managed runtime root to `~/.hagicode/runtime`,
|
|
220
|
+
`hagiscript runtime` adds a manifest-driven package manager for the broader `hagicode-runtime` contract. By default it loads `runtime/manifest.yaml` from the installed package, resolves the managed runtime root to `~/.hagicode/runtime`, then splits that managed runtime into a program home and a mutable runtime-data home unless `--runtime-root <path>` overrides the base location for a specific install, deployment mode, or automation run.
|
|
221
221
|
|
|
222
222
|
```bash
|
|
223
223
|
hagiscript runtime install
|
|
@@ -231,21 +231,51 @@ The packaged runtime manifest aligns its default component boundaries with HagiC
|
|
|
231
231
|
|
|
232
232
|
- Node is governed as a Desktop-aligned Node 22 toolchain component.
|
|
233
233
|
- `.NET` is modeled as a Desktop-aligned 10.0 runtime component.
|
|
234
|
-
- Mutable npm packages are installed into a managed prefix under the
|
|
234
|
+
- Mutable npm packages, including the managed `pm2` binary, are installed into a managed prefix under the runtime program home instead of the immutable Node payload or host-global npm locations.
|
|
235
235
|
- `code-server` and `omniroute` stay grouped as vendored bundled-runtime components rather than npm-managed packages.
|
|
236
236
|
|
|
237
237
|
The runtime layout is explicit and stable for downstream consumers:
|
|
238
238
|
|
|
239
239
|
```text
|
|
240
240
|
<runtime-root>/
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
241
|
+
program/
|
|
242
|
+
bin/
|
|
243
|
+
npm/
|
|
244
|
+
components/
|
|
245
|
+
runtime-data/
|
|
246
|
+
config/
|
|
247
|
+
logs/
|
|
248
|
+
data/
|
|
249
|
+
components/
|
|
250
|
+
state.json
|
|
246
251
|
```
|
|
247
252
|
|
|
248
|
-
`state
|
|
253
|
+
`hagiscript runtime state --json` is the canonical contract for install, update, remove, and downstream inspection. It reports the resolved runtime home, runtime data root, per-component runtime data homes, and derived PM2 homes so Desktop, local bootstrap flows, or automation does not need to probe files directly.
|
|
254
|
+
|
|
255
|
+
Runtime lifecycle scripts and managed PM2 services receive the same public runtime environment contract:
|
|
256
|
+
|
|
257
|
+
- `HAGICODE_RUNTIME_HOME` points to the runtime program home.
|
|
258
|
+
- `HAGICODE_RUNTIME_DATA_HOME` points to the current component's writable runtime data home.
|
|
259
|
+
- `PM2_HOME` defaults to a child directory beneath `HAGICODE_RUNTIME_DATA_HOME`.
|
|
260
|
+
- `PATH` is rebuilt so the managed Node runtime, managed npm prefix, and managed wrappers take precedence over the ambient shell environment.
|
|
261
|
+
|
|
262
|
+
### Managed PM2 Service Commands
|
|
263
|
+
|
|
264
|
+
`hagiscript pm2` manages the runtime-scoped `omniroute` and `code-server` services through the PM2 binary installed by `hagiscript runtime install`.
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
hagiscript pm2 omniroute start
|
|
268
|
+
hagiscript pm2 omniroute status
|
|
269
|
+
hagiscript pm2 code-server stop
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
Each PM2 command resolves the runtime manifest first, loads the canonical runtime homes, derives a component-scoped `PM2_HOME`, and executes the managed PM2 binary from `<runtime-home>/npm`. It does not rely on a system PM2 or a system Node on the ambient shell `PATH`.
|
|
273
|
+
|
|
274
|
+
The packaged `runtime/manifest.yaml` can override:
|
|
275
|
+
|
|
276
|
+
- runtime-level `paths.runtimeHome`, `paths.runtimeDataRoot`, `paths.componentDataRoot`, and `paths.defaultPm2Home`
|
|
277
|
+
- component-level `runtimeDataDir`
|
|
278
|
+
- service-level `pm2.appName`, `pm2.cwd`, `pm2.script`, `pm2.args`, `pm2.env`, and `pm2.pm2Home`
|
|
249
279
|
|
|
250
280
|
The package also ships a thin `hagicode-runtime` wrapper binary that delegates to `hagiscript runtime ...` for automation that prefers a runtime-oriented entrypoint:
|
|
251
281
|
|
package/README_cn.md
CHANGED
|
@@ -197,6 +197,61 @@ Changed: 1
|
|
|
197
197
|
|
|
198
198
|
如果触发了回退,Hagiscript 会在执行期间输出 `Fallback used: ...`,并在最终摘要中记录 `Fallback detail: ...`,这样 CI 或桌面端自动化就能明确知道哪个镜像失败了、是否切到了官方源,以及官方源重试是否成功。
|
|
199
199
|
|
|
200
|
+
### Runtime 包管理
|
|
201
|
+
|
|
202
|
+
`hagiscript runtime` 提供了面向 `hagicode-runtime` 的 manifest 驱动包管理能力。默认情况下,它会加载安装包内置的 `runtime/manifest.yaml`,把托管运行时根目录解析为 `~/.hagicode/runtime`,然后在该根目录下拆分出只读程序目录和可写运行时数据目录;如果某次部署或自动化需要独立路径,可通过 `--runtime-root <path>` 覆盖基础位置。
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
hagiscript runtime install
|
|
206
|
+
hagiscript runtime install --components node,npm-packages --dry-run
|
|
207
|
+
hagiscript runtime update --runtime-root /opt/hagicode/runtime --check-only
|
|
208
|
+
hagiscript runtime remove --components code-server --purge
|
|
209
|
+
hagiscript runtime state --json
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
默认运行时布局如下:
|
|
213
|
+
|
|
214
|
+
```text
|
|
215
|
+
<runtime-root>/
|
|
216
|
+
program/
|
|
217
|
+
bin/
|
|
218
|
+
npm/
|
|
219
|
+
components/
|
|
220
|
+
runtime-data/
|
|
221
|
+
config/
|
|
222
|
+
logs/
|
|
223
|
+
data/
|
|
224
|
+
components/
|
|
225
|
+
state.json
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
`hagiscript runtime state --json` 是安装、更新、删除与下游诊断的标准状态接口。它会输出解析后的运行时程序目录、运行时数据根目录、组件级 `HAGICODE_RUNTIME_DATA_HOME`,以及派生出的 `PM2_HOME`,下游工具不需要再自己探测文件系统。
|
|
229
|
+
|
|
230
|
+
运行时脚本和 PM2 托管服务会共享同一套公开环境变量约定:
|
|
231
|
+
|
|
232
|
+
- `HAGICODE_RUNTIME_HOME`:运行时程序目录
|
|
233
|
+
- `HAGICODE_RUNTIME_DATA_HOME`:当前组件的可写运行时数据目录
|
|
234
|
+
- `PM2_HOME`:默认位于 `HAGICODE_RUNTIME_DATA_HOME` 下的独立子目录
|
|
235
|
+
- `PATH`:优先注入托管 Node 运行时、托管 npm 前缀和托管 wrapper,再继承当前 shell 的 PATH
|
|
236
|
+
|
|
237
|
+
### PM2 托管服务命令
|
|
238
|
+
|
|
239
|
+
`hagiscript pm2` 用于管理运行时作用域内的 `omniroute` 和 `code-server` 服务,底层始终调用 `hagiscript runtime install` 安装到托管 npm 前缀中的 PM2。
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
hagiscript pm2 omniroute start
|
|
243
|
+
hagiscript pm2 omniroute status
|
|
244
|
+
hagiscript pm2 code-server stop
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
每次 PM2 命令都会先解析运行时 manifest,计算规范化的运行时目录和组件数据目录,再以组件级 `PM2_HOME` 和托管 Node-first PATH 调用 `<runtime-home>/npm` 下的 PM2;它不会依赖系统预装的 PM2 或系统 Node。
|
|
248
|
+
|
|
249
|
+
`runtime/manifest.yaml` 现在支持以下覆盖项:
|
|
250
|
+
|
|
251
|
+
- 运行时级别:`paths.runtimeHome`、`paths.runtimeDataRoot`、`paths.componentDataRoot`、`paths.defaultPm2Home`
|
|
252
|
+
- 组件级别:`runtimeDataDir`
|
|
253
|
+
- 服务级别:`pm2.appName`、`pm2.cwd`、`pm2.script`、`pm2.args`、`pm2.env`、`pm2.pm2Home`
|
|
254
|
+
|
|
200
255
|
在 ESM 项目中使用库 API:
|
|
201
256
|
|
|
202
257
|
```ts
|
package/dist/cli.js
CHANGED
|
@@ -5,6 +5,7 @@ import { Command } from "commander";
|
|
|
5
5
|
import { createRuntimeInfo, packageVersion } from "./index.js";
|
|
6
6
|
import { registerNpmSyncCommand } from "./commands/npm-sync-commands.js";
|
|
7
7
|
import { registerNodeRuntimeCommands } from "./commands/node-runtime-commands.js";
|
|
8
|
+
import { registerPm2Commands } from "./commands/pm2-commands.js";
|
|
8
9
|
import { registerRuntimeCommands } from "./commands/runtime-commands.js";
|
|
9
10
|
export function createCli() {
|
|
10
11
|
const program = new Command();
|
|
@@ -21,6 +22,7 @@ export function createCli() {
|
|
|
21
22
|
});
|
|
22
23
|
registerNodeRuntimeCommands(program);
|
|
23
24
|
registerNpmSyncCommand(program);
|
|
25
|
+
registerPm2Commands(program);
|
|
24
26
|
registerRuntimeCommands(program);
|
|
25
27
|
program.action(() => {
|
|
26
28
|
program.outputHelp();
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,YAAY,CAAC;SAClB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,OAAO,CAAC,cAAc,EAAE,eAAe,EAAE,8BAA8B,CAAC,CAAC;IAE5E,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mCAAmC,CAAC;SAChD,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEL,2BAA2B,CAAC,OAAO,CAAC,CAAC;IACrC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAEjC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;QAClB,OAAO,CAAC,UAAU,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;IAC9C,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAC5B,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAC3B,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAE1B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,KAAK,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,IAAI,eAAe,EAAE,EAAE,CAAC;IACtB,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAChC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QACrC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,YAAY,CAAC;SAClB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,OAAO,CAAC,cAAc,EAAE,eAAe,EAAE,8BAA8B,CAAC,CAAC;IAE5E,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mCAAmC,CAAC;SAChD,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEL,2BAA2B,CAAC,OAAO,CAAC,CAAC;IACrC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAEjC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;QAClB,OAAO,CAAC,UAAU,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;IAC9C,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAC5B,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAC3B,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAE1B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,KAAK,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,IAAI,eAAe,EAAE,EAAE,CAAC;IACtB,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAChC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QACrC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { InvalidArgumentError } from "commander";
|
|
2
|
+
import { renderManagedPm2StatusText, runManagedPm2Command, supportedPm2Services } from "../runtime/pm2-manager.js";
|
|
3
|
+
export function registerPm2Commands(program) {
|
|
4
|
+
program
|
|
5
|
+
.command("pm2")
|
|
6
|
+
.description("manage PM2-backed hagicode-runtime services")
|
|
7
|
+
.argument("<service>", "managed service name", parseManagedPm2Service)
|
|
8
|
+
.argument("<action>", "pm2 action", parseManagedPm2Action)
|
|
9
|
+
.option("--from-manifest <path>", "override the default runtime manifest")
|
|
10
|
+
.option("--runtime-root <path>", "managed runtime root override")
|
|
11
|
+
.action(async (service, action, options, command) => {
|
|
12
|
+
try {
|
|
13
|
+
const result = await runManagedPm2Command({
|
|
14
|
+
manifestPath: validatePathOption(options.fromManifest, "--from-manifest"),
|
|
15
|
+
runtimeRoot: validatePathOption(options.runtimeRoot, "--runtime-root"),
|
|
16
|
+
service,
|
|
17
|
+
action
|
|
18
|
+
});
|
|
19
|
+
process.stdout.write(`${renderManagedPm2StatusText(result)}\n`);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
command.error(formatPm2Error(error), { exitCode: 1 });
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function parseManagedPm2Service(value) {
|
|
27
|
+
if (supportedPm2Services.includes(value)) {
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
30
|
+
throw new InvalidArgumentError(`Unsupported managed PM2 service "${value}". Supported services: ${supportedPm2Services.join(", ")}.`);
|
|
31
|
+
}
|
|
32
|
+
function parseManagedPm2Action(value) {
|
|
33
|
+
if (value === "start" || value === "stop" || value === "status") {
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
throw new InvalidArgumentError(`Unsupported PM2 action "${value}". Supported actions: start, stop, status.`);
|
|
37
|
+
}
|
|
38
|
+
function validatePathOption(value, optionName) {
|
|
39
|
+
if (value === undefined) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
const normalized = value.trim();
|
|
43
|
+
if (!normalized) {
|
|
44
|
+
throw new InvalidArgumentError(`${optionName} must be a non-empty path.`);
|
|
45
|
+
}
|
|
46
|
+
if (normalized.includes("\0")) {
|
|
47
|
+
throw new InvalidArgumentError(`${optionName} contains an invalid null byte.`);
|
|
48
|
+
}
|
|
49
|
+
return normalized;
|
|
50
|
+
}
|
|
51
|
+
function formatPm2Error(error) {
|
|
52
|
+
return error instanceof Error ? error.message : String(error);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=pm2-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pm2-commands.js","sourceRoot":"","sources":["../../src/commands/pm2-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,oBAAoB,EAAE,MAAM,WAAW,CAAA;AACzD,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,oBAAoB,EAGrB,MAAM,2BAA2B,CAAA;AAOlC,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,6CAA6C,CAAC;SAC1D,QAAQ,CAAC,WAAW,EAAE,sBAAsB,EAAE,sBAAsB,CAAC;SACrE,QAAQ,CAAC,UAAU,EAAE,YAAY,EAAE,qBAAqB,CAAC;SACzD,MAAM,CAAC,wBAAwB,EAAE,uCAAuC,CAAC;SACzE,MAAM,CAAC,uBAAuB,EAAE,+BAA+B,CAAC;SAChE,MAAM,CACL,KAAK,EACH,OAA8B,EAC9B,MAAwB,EACxB,OAA0B,EAC1B,OAAgB,EAChB,EAAE;QACF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC;gBACxC,YAAY,EAAE,kBAAkB,CAAC,OAAO,CAAC,YAAY,EAAE,iBAAiB,CAAC;gBACzE,WAAW,EAAE,kBAAkB,CAAC,OAAO,CAAC,WAAW,EAAE,gBAAgB,CAAC;gBACtE,OAAO;gBACP,MAAM;aACP,CAAC,CAAA;YAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,0BAA0B,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAA;QACvD,CAAC;IACH,CAAC,CACF,CAAA;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa;IAC3C,IAAK,oBAA0C,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,KAA8B,CAAA;IACvC,CAAC;IAED,MAAM,IAAI,oBAAoB,CAC5B,oCAAoC,KAAK,0BAA0B,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACtG,CAAA;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChE,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,IAAI,oBAAoB,CAC5B,2BAA2B,KAAK,4CAA4C,CAC7E,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAyB,EACzB,UAAkB;IAElB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC/B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,oBAAoB,CAAC,GAAG,UAAU,4BAA4B,CAAC,CAAA;IAC3E,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,oBAAoB,CAAC,GAAG,UAAU,iCAAiC,CAAC,CAAA;IAChF,CAAC;IAED,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC/D,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ export { verifyNodeRuntime, type NodeRuntimeVerificationResult } from "./runtime
|
|
|
10
10
|
export { createNpmSyncPlan, loadNpmSyncManifest, normalizeGlobalInventory, syncNpmGlobals, validateNpmSyncManifest, type InstalledGlobalPackages, type NpmSyncActionKind, type NpmSyncActionResult, type NpmSyncCommandKind, type NpmSyncFallbackEvent, type NpmSyncFallbackPolicy, type NpmSyncManifest, type NpmSyncManifestEntry, type NpmSyncPlannedAction, type NpmSyncRuntimeMetadata, type NpmSyncSummary } from "./runtime/npm-sync.js";
|
|
11
11
|
export { buildToolSyncPackageSet, builtInToolSyncCatalog, normalizeToolSyncEntry, validateToolSyncCatalog, type CustomAgentCliToolInput, type ToolSyncCatalogEntry, type ToolSyncGroupId, type ToolSyncPackageConstraint, type ToolSyncRequirement, type ToolSyncSelection } from "./runtime/tool-sync-catalog.js";
|
|
12
12
|
export { getDefaultRuntimeManifestPath, loadRuntimeManifest, type LoadedRuntimeManifest, type RuntimeComponentDefinition, type RuntimeLifecyclePhase, type RuntimeManifestPaths } from "./runtime/runtime-manifest.js";
|
|
13
|
-
export { defaultRuntimeRoot, getComponentConfigDirectory, getComponentManagedRoot, resolveRuntimePaths, type ResolvedRuntimePaths } from "./runtime/runtime-paths.js";
|
|
13
|
+
export { defaultRuntimeRoot, getComponentConfigDirectory, getComponentLogsDirectory, getComponentManagedRoot, getComponentPm2Home, getComponentRuntimeDataHome, resolveRuntimePaths, type ResolvedRuntimePaths } from "./runtime/runtime-paths.js";
|
|
14
14
|
export { createInitialRuntimeState, mergeRuntimeState, readRuntimeState, writeRuntimeState, type RuntimeComponentState, type RuntimeOperationState, type RuntimeState } from "./runtime/runtime-state.js";
|
|
15
|
+
export { renderManagedPm2StatusText, resolveManagedPm2ServiceDefinition, runManagedPm2Command, supportedPm2Services, type ManagedPm2Action, type ManagedPm2CommandResult, type ManagedPm2CommandOptions, type ManagedPm2ServiceName, type ManagedPm2Status, type ResolvedManagedPm2ServiceDefinition } from "./runtime/pm2-manager.js";
|
|
16
|
+
export { buildManagedRuntimeEnvironment, getManagedNpmBinDirectory, getManagedRuntimePathEntries, prependPathEntries } from "./runtime/runtime-executor.js";
|
|
15
17
|
export { installRuntime, planRuntimeLifecycle, queryRuntimeState, removeRuntime, renderRuntimeStateText, runRuntimeLifecycle, updateRuntime, type RuntimeLifecycleOptions, type RuntimeLifecycleResult, type RuntimePlannedAction, type RuntimeStateReport } from "./runtime/runtime-manager.js";
|
package/dist/index.js
CHANGED
|
@@ -12,7 +12,9 @@ export { verifyNodeRuntime } from "./runtime/node-verify.js";
|
|
|
12
12
|
export { createNpmSyncPlan, loadNpmSyncManifest, normalizeGlobalInventory, syncNpmGlobals, validateNpmSyncManifest } from "./runtime/npm-sync.js";
|
|
13
13
|
export { buildToolSyncPackageSet, builtInToolSyncCatalog, normalizeToolSyncEntry, validateToolSyncCatalog } from "./runtime/tool-sync-catalog.js";
|
|
14
14
|
export { getDefaultRuntimeManifestPath, loadRuntimeManifest } from "./runtime/runtime-manifest.js";
|
|
15
|
-
export { defaultRuntimeRoot, getComponentConfigDirectory, getComponentManagedRoot, resolveRuntimePaths } from "./runtime/runtime-paths.js";
|
|
15
|
+
export { defaultRuntimeRoot, getComponentConfigDirectory, getComponentLogsDirectory, getComponentManagedRoot, getComponentPm2Home, getComponentRuntimeDataHome, resolveRuntimePaths } from "./runtime/runtime-paths.js";
|
|
16
16
|
export { createInitialRuntimeState, mergeRuntimeState, readRuntimeState, writeRuntimeState } from "./runtime/runtime-state.js";
|
|
17
|
+
export { renderManagedPm2StatusText, resolveManagedPm2ServiceDefinition, runManagedPm2Command, supportedPm2Services } from "./runtime/pm2-manager.js";
|
|
18
|
+
export { buildManagedRuntimeEnvironment, getManagedNpmBinDirectory, getManagedRuntimePathEntries, prependPathEntries } from "./runtime/runtime-executor.js";
|
|
17
19
|
export { installRuntime, planRuntimeLifecycle, queryRuntimeState, removeRuntime, renderRuntimeStateText, runRuntimeLifecycle, updateRuntime } from "./runtime/runtime-manager.js";
|
|
18
20
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,cAAc,EAEf,MAAM,cAAc,CAAC;AAQtB,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,WAAW;QACX,OAAO,EAAE,cAAc;QACvB,MAAM,EAAE,YAAY;KACrB,CAAC;AACJ,CAAC;AAED,OAAO,EACL,qCAAqC,EACrC,kBAAkB,EAClB,yBAAyB,EAG1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,iBAAiB,EAElB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,uBAAuB,EAYxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EAOxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,6BAA6B,EAC7B,mBAAmB,EAKpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,uBAAuB,EACvB,mBAAmB,EAEpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EAIlB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,aAAa,EAKd,MAAM,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,cAAc,EAEf,MAAM,cAAc,CAAC;AAQtB,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,WAAW;QACX,OAAO,EAAE,cAAc;QACvB,MAAM,EAAE,YAAY;KACrB,CAAC;AACJ,CAAC;AAED,OAAO,EACL,qCAAqC,EACrC,kBAAkB,EAClB,yBAAyB,EAG1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,iBAAiB,EAElB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,uBAAuB,EAYxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EAOxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,6BAA6B,EAC7B,mBAAmB,EAKpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,yBAAyB,EACzB,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,EAC3B,mBAAmB,EAEpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EAIlB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,0BAA0B,EAC1B,kCAAkC,EAClC,oBAAoB,EACpB,oBAAoB,EAOrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,8BAA8B,EAC9B,yBAAyB,EACzB,4BAA4B,EAC5B,kBAAkB,EACnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,aAAa,EAKd,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { CommandRunner } from "./command-launch.js";
|
|
2
|
+
import { type LoadedRuntimeManifest, type RuntimeComponentDefinition } from "./runtime-manifest.js";
|
|
3
|
+
import { type ResolvedRuntimePaths } from "./runtime-paths.js";
|
|
4
|
+
export declare const supportedPm2Services: readonly ["omniroute", "code-server"];
|
|
5
|
+
export type ManagedPm2ServiceName = (typeof supportedPm2Services)[number];
|
|
6
|
+
export type ManagedPm2Action = "start" | "stop" | "status";
|
|
7
|
+
export type ManagedPm2Status = "online" | "stopped" | "errored" | "missing" | "unknown";
|
|
8
|
+
export interface ManagedPm2CommandOptions {
|
|
9
|
+
manifestPath?: string;
|
|
10
|
+
runtimeRoot?: string;
|
|
11
|
+
service: ManagedPm2ServiceName;
|
|
12
|
+
action: ManagedPm2Action;
|
|
13
|
+
runner?: CommandRunner;
|
|
14
|
+
}
|
|
15
|
+
export interface ResolvedManagedPm2ServiceDefinition {
|
|
16
|
+
service: ManagedPm2ServiceName;
|
|
17
|
+
component: RuntimeComponentDefinition;
|
|
18
|
+
manifestDir: string;
|
|
19
|
+
paths: ResolvedRuntimePaths;
|
|
20
|
+
appName: string;
|
|
21
|
+
cwd: string;
|
|
22
|
+
script: string;
|
|
23
|
+
args: string[];
|
|
24
|
+
env: Record<string, string>;
|
|
25
|
+
runtimeHome: string;
|
|
26
|
+
runtimeDataHome: string;
|
|
27
|
+
componentRoot: string;
|
|
28
|
+
componentConfigDir: string;
|
|
29
|
+
pm2Home: string;
|
|
30
|
+
pm2Binary: string;
|
|
31
|
+
nodePath: string;
|
|
32
|
+
}
|
|
33
|
+
export interface ManagedPm2CommandResult {
|
|
34
|
+
service: ManagedPm2ServiceName;
|
|
35
|
+
action: ManagedPm2Action;
|
|
36
|
+
appName: string;
|
|
37
|
+
cwd: string;
|
|
38
|
+
script: string;
|
|
39
|
+
runtimeHome: string;
|
|
40
|
+
runtimeDataHome: string;
|
|
41
|
+
pm2Home: string;
|
|
42
|
+
pm2Binary: string;
|
|
43
|
+
exists: boolean;
|
|
44
|
+
status: ManagedPm2Status;
|
|
45
|
+
pid: number | null;
|
|
46
|
+
stdout: string;
|
|
47
|
+
stderr: string;
|
|
48
|
+
}
|
|
49
|
+
export declare class ManagedPm2Error extends Error {
|
|
50
|
+
constructor(message: string, options?: ErrorOptions);
|
|
51
|
+
}
|
|
52
|
+
export declare function runManagedPm2Command(options: ManagedPm2CommandOptions): Promise<ManagedPm2CommandResult>;
|
|
53
|
+
export declare function resolveManagedPm2ServiceDefinition(manifest: LoadedRuntimeManifest, paths: ResolvedRuntimePaths, service: ManagedPm2ServiceName): Promise<ResolvedManagedPm2ServiceDefinition>;
|
|
54
|
+
export declare function renderManagedPm2StatusText(result: ManagedPm2CommandResult): string;
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { access } from "node:fs/promises";
|
|
2
|
+
import { basename, extname, join } from "node:path";
|
|
3
|
+
import process from "node:process";
|
|
4
|
+
import { runCommand } from "./command-launch.js";
|
|
5
|
+
import { buildManagedRuntimeEnvironment, } from "./runtime-executor.js";
|
|
6
|
+
import { getRuntimeExecutablePaths } from "./node-verify.js";
|
|
7
|
+
import { loadRuntimeManifest } from "./runtime-manifest.js";
|
|
8
|
+
import { getComponentConfigDirectory, getComponentManagedRoot, getComponentPm2Home, getComponentRuntimeDataHome, resolveManagedPath, resolveRuntimePaths } from "./runtime-paths.js";
|
|
9
|
+
export const supportedPm2Services = ["omniroute", "code-server"];
|
|
10
|
+
export class ManagedPm2Error extends Error {
|
|
11
|
+
constructor(message, options) {
|
|
12
|
+
super(message, options);
|
|
13
|
+
this.name = "ManagedPm2Error";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export async function runManagedPm2Command(options) {
|
|
17
|
+
const manifest = await loadRuntimeManifest({ manifestPath: options.manifestPath });
|
|
18
|
+
const paths = resolveRuntimePaths(manifest, { runtimeRoot: options.runtimeRoot });
|
|
19
|
+
const definition = await resolveManagedPm2ServiceDefinition(manifest, paths, options.service);
|
|
20
|
+
const runner = options.runner ?? runCommand;
|
|
21
|
+
switch (options.action) {
|
|
22
|
+
case "start":
|
|
23
|
+
await runPm2(definition, buildPm2StartArgs(definition), runner);
|
|
24
|
+
return readManagedPm2Status(definition, "start", runner);
|
|
25
|
+
case "stop":
|
|
26
|
+
await runPm2(definition, ["stop", definition.appName], runner);
|
|
27
|
+
return readManagedPm2Status(definition, "stop", runner);
|
|
28
|
+
case "status":
|
|
29
|
+
return readManagedPm2Status(definition, "status", runner);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export async function resolveManagedPm2ServiceDefinition(manifest, paths, service) {
|
|
33
|
+
assertSupportedPm2Service(service);
|
|
34
|
+
const component = manifest.componentMap.get(service);
|
|
35
|
+
if (!component) {
|
|
36
|
+
throw new ManagedPm2Error(`Runtime manifest does not define the ${service} service.`);
|
|
37
|
+
}
|
|
38
|
+
const componentRoot = getComponentManagedRoot(paths, component.name);
|
|
39
|
+
const runtimeDataHome = getComponentRuntimeDataHome(paths, component.name, component.runtimeDataDir);
|
|
40
|
+
const componentConfigDir = getComponentConfigDirectory(paths, component.name, component.runtimeDataDir);
|
|
41
|
+
const pm2Home = getComponentPm2Home(paths, component.name, component.runtimeDataDir, component.pm2?.pm2Home);
|
|
42
|
+
const script = resolveManagedPath(component.pm2?.script ?? defaultPm2Script(component.name), componentRoot);
|
|
43
|
+
const cwd = resolveManagedPath(component.pm2?.cwd ?? ".", componentRoot);
|
|
44
|
+
const nodePath = getRuntimeExecutablePaths(paths.nodeRuntime).nodePath;
|
|
45
|
+
const pm2Entrypoint = getManagedPm2Entrypoint(paths.npmPrefix);
|
|
46
|
+
await Promise.all([
|
|
47
|
+
validateManagedPath(script, `Managed launcher for ${service} is missing`),
|
|
48
|
+
validateManagedPath(cwd, `Managed working directory for ${service} is missing`),
|
|
49
|
+
validateManagedPath(pm2Entrypoint, "Managed PM2 binary is missing. Install the runtime npm-packages component first."),
|
|
50
|
+
validateManagedPath(nodePath, "Managed Node runtime is missing. Install the runtime node component first.")
|
|
51
|
+
]);
|
|
52
|
+
return {
|
|
53
|
+
service,
|
|
54
|
+
component,
|
|
55
|
+
manifestDir: manifest.manifestDir,
|
|
56
|
+
paths,
|
|
57
|
+
appName: component.pm2?.appName ?? `hagicode-${component.name}`,
|
|
58
|
+
cwd,
|
|
59
|
+
script,
|
|
60
|
+
args: component.pm2?.args ?? [],
|
|
61
|
+
env: component.pm2?.env ?? {},
|
|
62
|
+
runtimeHome: paths.runtimeHome,
|
|
63
|
+
runtimeDataHome,
|
|
64
|
+
componentRoot,
|
|
65
|
+
componentConfigDir,
|
|
66
|
+
pm2Home,
|
|
67
|
+
pm2Binary: pm2Entrypoint,
|
|
68
|
+
nodePath
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export function renderManagedPm2StatusText(result) {
|
|
72
|
+
return [
|
|
73
|
+
`Service: ${result.service}`,
|
|
74
|
+
`Action: ${result.action}`,
|
|
75
|
+
`App: ${result.appName}`,
|
|
76
|
+
`Status: ${result.status}`,
|
|
77
|
+
`Runtime home: ${result.runtimeHome}`,
|
|
78
|
+
`Runtime data home: ${result.runtimeDataHome}`,
|
|
79
|
+
`PM2 home: ${result.pm2Home}`,
|
|
80
|
+
`Script: ${result.script}`,
|
|
81
|
+
`Working directory: ${result.cwd}`,
|
|
82
|
+
`PM2 binary: ${result.pm2Binary}`,
|
|
83
|
+
`PID: ${result.pid ?? "n/a"}`
|
|
84
|
+
].join("\n");
|
|
85
|
+
}
|
|
86
|
+
function assertSupportedPm2Service(service) {
|
|
87
|
+
if (supportedPm2Services.includes(service)) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
throw new ManagedPm2Error(`Unsupported managed PM2 service "${service}". Supported services: ${supportedPm2Services.join(", ")}.`);
|
|
91
|
+
}
|
|
92
|
+
async function readManagedPm2Status(definition, action, runner) {
|
|
93
|
+
const result = await runPm2(definition, ["jlist"], runner);
|
|
94
|
+
const statusEntry = parsePm2Status(result, definition.appName);
|
|
95
|
+
return {
|
|
96
|
+
service: definition.service,
|
|
97
|
+
action,
|
|
98
|
+
appName: definition.appName,
|
|
99
|
+
cwd: definition.cwd,
|
|
100
|
+
script: definition.script,
|
|
101
|
+
runtimeHome: definition.runtimeHome,
|
|
102
|
+
runtimeDataHome: definition.runtimeDataHome,
|
|
103
|
+
pm2Home: definition.pm2Home,
|
|
104
|
+
pm2Binary: definition.pm2Binary,
|
|
105
|
+
exists: statusEntry !== null,
|
|
106
|
+
status: statusEntry?.status ?? "missing",
|
|
107
|
+
pid: statusEntry?.pid ?? null,
|
|
108
|
+
stdout: result.stdout,
|
|
109
|
+
stderr: result.stderr
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
async function runPm2(definition, args, runner) {
|
|
113
|
+
const env = buildManagedRuntimeEnvironment({
|
|
114
|
+
component: definition.component,
|
|
115
|
+
manifest: { manifestDir: definition.manifestDir },
|
|
116
|
+
paths: definition.paths,
|
|
117
|
+
componentRoot: definition.componentRoot,
|
|
118
|
+
componentConfigDir: definition.componentConfigDir,
|
|
119
|
+
componentDataHome: definition.runtimeDataHome,
|
|
120
|
+
pm2Home: definition.pm2Home,
|
|
121
|
+
scriptBasename: basename(definition.script)
|
|
122
|
+
}, { ...process.env, ...definition.env });
|
|
123
|
+
return runner(definition.nodePath, [definition.pm2Binary, ...args], {
|
|
124
|
+
cwd: definition.cwd,
|
|
125
|
+
env,
|
|
126
|
+
maxBuffer: 10 * 1024 * 1024
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
function parsePm2Status(result, appName) {
|
|
130
|
+
const parsed = parsePm2ProcessList(result);
|
|
131
|
+
if (!Array.isArray(parsed)) {
|
|
132
|
+
throw new ManagedPm2Error(`Managed PM2 status returned an unexpected payload for ${appName}.`);
|
|
133
|
+
}
|
|
134
|
+
const entry = parsed.find((value) => isPm2ProcessRecord(value) && value.name === appName);
|
|
135
|
+
if (!entry || !isPm2ProcessRecord(entry)) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
status: normalizePm2Status(entry.pm2_env?.status),
|
|
140
|
+
pid: typeof entry.pid === "number" ? entry.pid : null
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
function parsePm2ProcessList(result) {
|
|
144
|
+
const directCandidates = [result.stdout.trim(), `${result.stdout}\n${result.stderr}`.trim()].filter(Boolean);
|
|
145
|
+
for (const candidate of directCandidates) {
|
|
146
|
+
const direct = tryParseJson(candidate);
|
|
147
|
+
if (Array.isArray(direct)) {
|
|
148
|
+
return direct;
|
|
149
|
+
}
|
|
150
|
+
const extracted = extractPm2JsonArray(candidate);
|
|
151
|
+
if (Array.isArray(extracted)) {
|
|
152
|
+
return extracted;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
throw new ManagedPm2Error(`Managed PM2 status returned invalid JSON: ${summarizePm2Output(result)}`);
|
|
156
|
+
}
|
|
157
|
+
function extractPm2JsonArray(output) {
|
|
158
|
+
for (let index = 0; index < output.length; index += 1) {
|
|
159
|
+
if (output[index] !== "[") {
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
const nextNonWhitespace = output.slice(index + 1).match(/\S/u)?.[0];
|
|
163
|
+
if (nextNonWhitespace !== "{" && nextNonWhitespace !== "]") {
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
const parsed = tryParseJson(output.slice(index));
|
|
167
|
+
if (Array.isArray(parsed)) {
|
|
168
|
+
return parsed;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
function tryParseJson(value) {
|
|
174
|
+
try {
|
|
175
|
+
return JSON.parse(value);
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function summarizePm2Output(result) {
|
|
182
|
+
return [result.stdout.trim(), result.stderr.trim()]
|
|
183
|
+
.filter(Boolean)
|
|
184
|
+
.join(" | ")
|
|
185
|
+
.slice(0, 400);
|
|
186
|
+
}
|
|
187
|
+
function normalizePm2Status(value) {
|
|
188
|
+
switch (value) {
|
|
189
|
+
case "online":
|
|
190
|
+
return "online";
|
|
191
|
+
case "stopped":
|
|
192
|
+
return "stopped";
|
|
193
|
+
case "errored":
|
|
194
|
+
return "errored";
|
|
195
|
+
default:
|
|
196
|
+
return "unknown";
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
function isPm2ProcessRecord(value) {
|
|
200
|
+
return typeof value === "object" && value !== null;
|
|
201
|
+
}
|
|
202
|
+
function defaultPm2Script(componentName) {
|
|
203
|
+
switch (componentName) {
|
|
204
|
+
case "omniroute":
|
|
205
|
+
return "current/omniroute-launcher.mjs";
|
|
206
|
+
case "code-server":
|
|
207
|
+
return "current/code-server-launcher.mjs";
|
|
208
|
+
default:
|
|
209
|
+
throw new ManagedPm2Error(`Unsupported PM2 component ${componentName}.`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
function toPm2Args(args) {
|
|
213
|
+
return args.length > 0 ? ["--", ...args] : [];
|
|
214
|
+
}
|
|
215
|
+
function buildPm2StartArgs(definition) {
|
|
216
|
+
if (isNodeLauncherScript(definition.script)) {
|
|
217
|
+
return [
|
|
218
|
+
"start",
|
|
219
|
+
"node",
|
|
220
|
+
"--name",
|
|
221
|
+
definition.appName,
|
|
222
|
+
"--cwd",
|
|
223
|
+
definition.cwd,
|
|
224
|
+
"--interpreter",
|
|
225
|
+
"none",
|
|
226
|
+
"--update-env",
|
|
227
|
+
"--",
|
|
228
|
+
definition.script,
|
|
229
|
+
...definition.args
|
|
230
|
+
];
|
|
231
|
+
}
|
|
232
|
+
return [
|
|
233
|
+
"start",
|
|
234
|
+
definition.script,
|
|
235
|
+
"--name",
|
|
236
|
+
definition.appName,
|
|
237
|
+
"--cwd",
|
|
238
|
+
definition.cwd,
|
|
239
|
+
"--update-env",
|
|
240
|
+
...toPm2Args(definition.args)
|
|
241
|
+
];
|
|
242
|
+
}
|
|
243
|
+
function isNodeLauncherScript(scriptPath) {
|
|
244
|
+
const extension = extname(scriptPath).toLowerCase();
|
|
245
|
+
return extension === ".js" || extension === ".mjs" || extension === ".cjs";
|
|
246
|
+
}
|
|
247
|
+
function getManagedPm2Entrypoint(npmPrefix) {
|
|
248
|
+
return process.platform === "win32"
|
|
249
|
+
? join(npmPrefix, "node_modules", "pm2", "bin", "pm2")
|
|
250
|
+
: join(npmPrefix, "lib", "node_modules", "pm2", "bin", "pm2");
|
|
251
|
+
}
|
|
252
|
+
async function validateManagedPath(pathValue, message) {
|
|
253
|
+
try {
|
|
254
|
+
await access(pathValue);
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
throw new ManagedPm2Error(message, error instanceof Error ? { cause: error } : undefined);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=pm2-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pm2-manager.js","sourceRoot":"","sources":["../../src/runtime/pm2-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,20 @@ export interface RuntimeScriptExecutionContext {
|
|
|
13
13
|
verbose?: boolean;
|
|
14
14
|
runner?: CommandRunner;
|
|
15
15
|
}
|
|
16
|
+
export interface ManagedRuntimeEnvironmentContext {
|
|
17
|
+
component: Pick<RuntimeComponentDefinition, "name" | "type" | "version" | "runtimeDataDir">;
|
|
18
|
+
manifest: Pick<LoadedRuntimeManifest, "manifestDir">;
|
|
19
|
+
paths: ResolvedRuntimePaths;
|
|
20
|
+
componentRoot: string;
|
|
21
|
+
componentConfigDir: string;
|
|
22
|
+
componentDataHome?: string;
|
|
23
|
+
componentLogsDir?: string;
|
|
24
|
+
pm2Home?: string;
|
|
25
|
+
phase?: string;
|
|
26
|
+
purge?: boolean;
|
|
27
|
+
verbose?: boolean;
|
|
28
|
+
scriptBasename?: string;
|
|
29
|
+
}
|
|
16
30
|
export interface RuntimeScriptExecutionResult {
|
|
17
31
|
command: string;
|
|
18
32
|
args: string[];
|
|
@@ -25,3 +39,7 @@ export declare function getRuntimeScriptLaunch(scriptPath: string): {
|
|
|
25
39
|
command: string;
|
|
26
40
|
args: string[];
|
|
27
41
|
};
|
|
42
|
+
export declare function buildManagedRuntimeEnvironment(context: ManagedRuntimeEnvironmentContext, baseEnv?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
43
|
+
export declare function prependPathEntries(env: NodeJS.ProcessEnv, pathEntries: readonly string[]): NodeJS.ProcessEnv;
|
|
44
|
+
export declare function getManagedRuntimePathEntries(paths: ResolvedRuntimePaths): string[];
|
|
45
|
+
export declare function getManagedNpmBinDirectory(npmPrefix: string): string;
|