@xrkseek/harness-cli 0.0.9 → 0.0.11
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 +13 -6
- package/dist/commands/plugin.d.ts.map +1 -1
- package/dist/commands/plugin.js +4 -3
- package/dist/commands/plugin.js.map +1 -1
- package/dist/commands/restart.d.ts.map +1 -1
- package/dist/commands/restart.js +16 -7
- package/dist/commands/restart.js.map +1 -1
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +40 -8
- package/dist/commands/serve.js.map +1 -1
- package/dist/host-lock.d.ts +15 -0
- package/dist/host-lock.d.ts.map +1 -0
- package/dist/host-lock.js +64 -0
- package/dist/host-lock.js.map +1 -0
- package/dist/parse-args.d.ts.map +1 -1
- package/dist/parse-args.js +13 -10
- package/dist/parse-args.js.map +1 -1
- package/dist/port.d.ts +20 -2
- package/dist/port.d.ts.map +1 -1
- package/dist/port.js +147 -28
- package/dist/port.js.map +1 -1
- package/node_modules/@xrkseek/preset-harness/README.md +5 -2
- package/node_modules/@xrkseek/preset-harness/dist/preset.js +2 -2
- package/node_modules/@xrkseek/preset-harness/dist/preset.js.map +1 -1
- package/node_modules/@xrkseek/preset-harness/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@xrkseek/server-face/dist/attach-http.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/attach-http.js +33 -4
- package/node_modules/@xrkseek/server-face/dist/attach-http.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/presets-catalog.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/presets-catalog.js +3 -3
- package/node_modules/@xrkseek/server-face/dist/presets-catalog.js.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/index.js +27 -21
- package/node_modules/@xrkseek/server-host/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/index.js +9 -1
- package/node_modules/@xrkseek/server-http/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/product-web/boot.json +1 -1
- package/product-web/plugins/@xrkseek/client-locale/client.js +3 -3
- package/product-web/plugins/@xrkseek/client-runtime/client.js +4 -0
- package/product-web/plugins/@xrkseek/client-ui-agent-preset/client.js +58 -75
- package/product-web/plugins/@xrkseek/client-ui-commands/client.js +6 -6
- package/product-web/plugins/@xrkseek/client-ui-conversation/client.js +209 -185
- package/product-web/plugins/@xrkseek/client-ui-deliverables/client.js +5 -5
- package/product-web/plugins/@xrkseek/client-ui-directory-picker-browse/client.js +29 -29
- package/product-web/plugins/@xrkseek/client-ui-goal/client.js +8 -8
- package/product-web/plugins/@xrkseek/client-ui-input-trigger/client.js +5 -5
- package/product-web/plugins/@xrkseek/client-ui-jobs/client.js +9 -9
- package/product-web/plugins/@xrkseek/client-ui-layout/client.js +1 -1
- package/product-web/plugins/@xrkseek/client-ui-message-feedback/client.js +5 -5
- package/product-web/plugins/@xrkseek/client-ui-model-selection/client.js +14 -14
- package/product-web/plugins/@xrkseek/client-ui-permission-presets/client.js +3 -3
- package/product-web/plugins/@xrkseek/client-ui-plan/client.js +2 -2
- package/product-web/plugins/@xrkseek/client-ui-settings-general/client.js +15 -15
- package/product-web/plugins/@xrkseek/client-ui-settings-models/client.js +55 -55
- package/product-web/plugins/@xrkseek/client-ui-settings-plugin-inventory/client.js +11 -11
- package/product-web/plugins/@xrkseek/client-ui-settings-plugins/client.js +37 -37
- package/product-web/plugins/@xrkseek/client-ui-sidebar/client.js +15 -15
- package/product-web/plugins/@xrkseek/client-ui-skill/client.js +11 -11
- package/product-web/plugins/@xrkseek/client-ui-subagent/client.js +19 -19
- package/product-web/plugins/@xrkseek/client-ui-tool/client.js +35 -35
- package/product-web/plugins/@xrkseek/client-ui-trajectory/client.js +140 -140
- package/product-web/plugins/@xrkseek/client-ui-user-questions/client.js +27 -27
- package/product-web/plugins/@xrkseek/client-ui-workflow-run/client.js +17 -17
- package/product-web/plugins/@xrkseek/client-ui-workspace/client.js +53 -53
package/README.md
CHANGED
|
@@ -7,22 +7,29 @@ bin:`xrk-harness`。产品 UI:包内 `product-web/`(源码仓用 `apps/web
|
|
|
7
7
|
| 命令 | 作用 |
|
|
8
8
|
|------|------|
|
|
9
9
|
| `run` | 单 turn(默认 minimal + replay) |
|
|
10
|
-
| `serve` / `web` | HTTP host +
|
|
11
|
-
| `restart` |
|
|
10
|
+
| `serve` / `web` | HTTP host + 产品壳(默认 **XRK Harness** 工具面) |
|
|
11
|
+
| `restart` | 停**本机先前的 XRK Host**(`~/.xrk/run/host-<port>.pid.json`)再起;不杀陌生进程 |
|
|
12
12
|
| `plugin` | 安装 / 卸载 / 列出用户插件(`~/.xrk/plugins`) |
|
|
13
13
|
| `doctor` | Node · workspace · 产品壳 |
|
|
14
14
|
| `dump-config` | 打印 preset 配置 |
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
| Flag | 作用 |
|
|
17
|
+
|------|------|
|
|
18
|
+
| `--force` | 只停**已识别为 XRK Host** 的监听进程;端口被其它程序占用则报错退出 |
|
|
19
|
+
| `--verbose` | `/api` + MCP 细节 |
|
|
20
|
+
| `--quiet` | 仅 warn/error |
|
|
21
|
+
|
|
22
|
+
OpenClaw/DSH 的 `gateway --force` 仍是按端口杀监听;其更成熟路径是服务管理器 + `--safe` drain。本 CLI 是前台进程,用 **pid 锁 + 指纹校验** 代替「杀端口上任意进程」。
|
|
23
|
+
|
|
24
|
+
Preset 分层:[docs/profiles.md](../../docs/profiles.md)。写插件:[docs/plugin-development.md](../../docs/plugin-development.md)。
|
|
17
25
|
|
|
18
26
|
```bash
|
|
19
27
|
npx @xrkseek/harness-cli web
|
|
20
|
-
npx @xrkseek/harness-cli web --force --verbose
|
|
21
28
|
npx @xrkseek/harness-cli restart
|
|
22
|
-
npx @xrkseek/harness-cli plugin add
|
|
29
|
+
npx @xrkseek/harness-cli plugin add ./extensions/example-tools
|
|
23
30
|
# 源码:
|
|
24
31
|
pnpm build && pnpm web:build && pnpm client:bundle && pnpm web:assemble
|
|
25
32
|
node apps/cli/dist/bin.js web --workspace .
|
|
26
33
|
```
|
|
27
34
|
|
|
28
|
-
静态根:`XRK_WEB_DIST` → `product-web/` → `apps/web/dist
|
|
35
|
+
静态根:`XRK_WEB_DIST` → `product-web/` → `apps/web/dist`。配置见 [docs/configuration.md](../../docs/configuration.md)。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"AAWA,wBAAgB,cAAc,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"AAWA,wBAAgB,cAAc,IAAI,MAAM,CAiCvC;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAuExE"}
|
package/dist/commands/plugin.js
CHANGED
|
@@ -28,7 +28,8 @@ Root:
|
|
|
28
28
|
default ~/.xrk/plugins (XRK_HOME / XRK_DSH_HOME / DSH_HOME)
|
|
29
29
|
override XRK_PLUGINS_DIR
|
|
30
30
|
|
|
31
|
-
After add/remove,
|
|
31
|
+
After add/remove, run \`xrk-harness restart\` so Host reloads plugins
|
|
32
|
+
(stops the previous XRK Host via pid lock; will not kill foreign listeners).
|
|
32
33
|
|
|
33
34
|
Examples:
|
|
34
35
|
xrk-harness plugin add @huanlin/dsh-plugin-spur
|
|
@@ -55,7 +56,7 @@ export async function runPlugin(argv) {
|
|
|
55
56
|
for (const spec of args) {
|
|
56
57
|
addPlugin(spec);
|
|
57
58
|
}
|
|
58
|
-
process.stdout.write("xrk-harness:
|
|
59
|
+
process.stdout.write("xrk-harness: run `restart` to load new plugins (stops the previous XRK Host only)\n");
|
|
59
60
|
return 0;
|
|
60
61
|
}
|
|
61
62
|
case "remove":
|
|
@@ -66,7 +67,7 @@ export async function runPlugin(argv) {
|
|
|
66
67
|
for (const name of args) {
|
|
67
68
|
removePlugin(name);
|
|
68
69
|
}
|
|
69
|
-
process.stdout.write("xrk-harness:
|
|
70
|
+
process.stdout.write("xrk-harness: run `restart` to drop removed plugins (stops the previous XRK Host only)\n");
|
|
70
71
|
return 0;
|
|
71
72
|
}
|
|
72
73
|
case "list":
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,SAAS,EACT,WAAW,EACX,YAAY,EACZ,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,UAAU,cAAc;IAC5B,OAAO
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restart.d.ts","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"restart.d.ts","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAKnD,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAkClE"}
|
package/dist/commands/restart.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Stop the previous XRK Host for this port (pid lock / verified process), then serve.
|
|
3
|
+
* Not a synonym of `--force`: never kills foreign listeners.
|
|
3
4
|
*/
|
|
4
5
|
import { loadHostConfig } from "@xrkseek/server-config";
|
|
5
6
|
import { createCliLogger, resolveLogLevel } from "../log.js";
|
|
6
|
-
import {
|
|
7
|
+
import { stopOwnHost } from "../port.js";
|
|
7
8
|
import { runServe } from "./serve.js";
|
|
8
9
|
export async function runRestart(args) {
|
|
9
10
|
const log = createCliLogger(resolveLogLevel({ verbose: args.verbose, quiet: args.quiet }));
|
|
@@ -19,14 +20,22 @@ export async function runRestart(args) {
|
|
|
19
20
|
const config = loadHostConfig({ patch });
|
|
20
21
|
const port = config.runtime.port;
|
|
21
22
|
if (port > 0) {
|
|
22
|
-
const
|
|
23
|
-
if (
|
|
24
|
-
log.info(`restart:
|
|
23
|
+
const { stopped, foreign } = await stopOwnHost(port, log);
|
|
24
|
+
if (stopped.length === 0 && foreign.length === 0) {
|
|
25
|
+
log.info(`restart: no XRK Host on port ${port}`);
|
|
25
26
|
}
|
|
26
|
-
else {
|
|
27
|
-
log.info(`restart:
|
|
27
|
+
else if (stopped.length > 0) {
|
|
28
|
+
log.info(`restart: stopped XRK Host pid(s) ${stopped.join(", ")}`);
|
|
29
|
+
}
|
|
30
|
+
if (foreign.length > 0) {
|
|
31
|
+
for (const f of foreign) {
|
|
32
|
+
log.error(`restart: port ${port} still held by non-XRK pid ${f.pid} (${f.command})`);
|
|
33
|
+
}
|
|
34
|
+
log.error("pick another --port, or stop that process yourself; refusing to kill it");
|
|
35
|
+
return 1;
|
|
28
36
|
}
|
|
29
37
|
}
|
|
38
|
+
// Soft restart never needs --force (we already stopped our own Host).
|
|
30
39
|
return runServe({ ...args, force: false });
|
|
31
40
|
}
|
|
32
41
|
//# sourceMappingURL=restart.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restart.js","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"restart.js","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAgB;IAC/C,MAAM,GAAG,GAAG,eAAe,CACzB,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAC9D,CAAC;IACF,MAAM,KAAK,GAA4B;QACrC,GAAG,IAAI,CAAC,KAAK;QACb,aAAa,EAAE,IAAI,CAAC,SAAS;QAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC;IACF,IAAI,IAAI,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACtC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACpD,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IAEjC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACb,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,IAAI,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,IAAI,CAAC,oCAAoC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,GAAG,CAAC,KAAK,CACP,iBAAiB,IAAI,8BAA8B,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,GAAG,CAC1E,CAAC;YACJ,CAAC;YACD,GAAG,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;YACrF,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,OAAO,QAAQ,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAaA,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAaA,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAoEnE,wBAAsB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA2IhE;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIzE"}
|
package/dist/commands/serve.js
CHANGED
|
@@ -11,7 +11,8 @@ import path from "node:path";
|
|
|
11
11
|
import { assertSafeHost } from "../parse-args.js";
|
|
12
12
|
import { ensureProductWebDist, repoRoot, } from "../product-paths.js";
|
|
13
13
|
import { createCliLogger, resolveLogLevel } from "../log.js";
|
|
14
|
-
import {
|
|
14
|
+
import { clearHostLock, writeHostLock } from "../host-lock.js";
|
|
15
|
+
import { forceFreeXrkPort } from "../port.js";
|
|
15
16
|
function openProductUrl(url, log) {
|
|
16
17
|
const platform = process.platform;
|
|
17
18
|
const child = platform === "win32"
|
|
@@ -70,7 +71,14 @@ export async function runServe(args) {
|
|
|
70
71
|
const config = loadHostConfig({ patch });
|
|
71
72
|
assertSafeHost(config.runtime.host);
|
|
72
73
|
if (args.force && config.runtime.port > 0) {
|
|
73
|
-
|
|
74
|
+
try {
|
|
75
|
+
await forceFreeXrkPort(config.runtime.port, log);
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
79
|
+
log.error(message);
|
|
80
|
+
return 1;
|
|
81
|
+
}
|
|
74
82
|
}
|
|
75
83
|
const preset = args.preset === "minimal" ||
|
|
76
84
|
args.preset === "harness" ||
|
|
@@ -110,6 +118,8 @@ export async function runServe(args) {
|
|
|
110
118
|
const health = instance.health();
|
|
111
119
|
const port = health.port ?? config.runtime.port;
|
|
112
120
|
const origin = `http://${config.runtime.host}:${port}`;
|
|
121
|
+
if (port > 0)
|
|
122
|
+
writeHostLock(port);
|
|
113
123
|
log.info(`xrk-harness serve ${origin}/`);
|
|
114
124
|
const uiRel = path.relative(repoRoot(), webDist) || webDist;
|
|
115
125
|
log.info(` workspace=${config.runtime.workspaceRoot}`);
|
|
@@ -125,20 +135,42 @@ export async function runServe(args) {
|
|
|
125
135
|
if (ws === home || ws.startsWith(home + path.sep + ".xrk")) {
|
|
126
136
|
log.info(" tip: workspace is your user home (or ~/.xrk) — prefer `cd <project> && xrk-harness web`");
|
|
127
137
|
}
|
|
128
|
-
log.info(" tip: Ctrl+C stop · `xrk-harness restart`
|
|
138
|
+
log.info(" tip: Ctrl+C stop · `xrk-harness restart` stops this Host · `web --force` only kills verified XRK listeners");
|
|
129
139
|
if (args.open) {
|
|
130
140
|
openProductUrl(`${origin}/`, log);
|
|
131
141
|
}
|
|
132
|
-
|
|
142
|
+
/**
|
|
143
|
+
* Idempotent stop. First Ctrl+C starts teardown; further signals force-exit
|
|
144
|
+
* so a hung `http.close` (open SSE / WS) cannot spam "shutting down..." or
|
|
145
|
+
* stack Server `close` listeners (MaxListenersExceededWarning).
|
|
146
|
+
*/
|
|
147
|
+
let stopState = "running";
|
|
148
|
+
const onSignal = (signal) => {
|
|
149
|
+
if (stopState === "stopping") {
|
|
150
|
+
log.warn(`${signal} again — force exit`);
|
|
151
|
+
process.exit(1);
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
stopState = "stopping";
|
|
133
155
|
log.info("shutting down...");
|
|
134
|
-
|
|
135
|
-
|
|
156
|
+
if (port > 0)
|
|
157
|
+
clearHostLock(port);
|
|
158
|
+
void manager
|
|
159
|
+
.stopAll()
|
|
160
|
+
.then(() => {
|
|
161
|
+
process.exit(0);
|
|
162
|
+
})
|
|
163
|
+
.catch((err) => {
|
|
164
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
165
|
+
log.error(`shutdown failed: ${message}`);
|
|
166
|
+
process.exit(1);
|
|
167
|
+
});
|
|
136
168
|
};
|
|
137
169
|
process.on("SIGINT", () => {
|
|
138
|
-
|
|
170
|
+
onSignal("SIGINT");
|
|
139
171
|
});
|
|
140
172
|
process.on("SIGTERM", () => {
|
|
141
|
-
|
|
173
|
+
onSignal("SIGTERM");
|
|
142
174
|
});
|
|
143
175
|
await new Promise(() => { });
|
|
144
176
|
return 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAqB,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EACL,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAqB,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAmB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EACL,oBAAoB,EACpB,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,eAAe,EAAkB,MAAM,WAAW,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface HostLockRecord {
|
|
2
|
+
readonly pid: number;
|
|
3
|
+
readonly port: number;
|
|
4
|
+
readonly startedAt: number;
|
|
5
|
+
/** Short argv fingerprint for humans / verification. */
|
|
6
|
+
readonly argv: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function hostRunDir(env?: NodeJS.ProcessEnv): string;
|
|
9
|
+
export declare function hostLockPath(port: number, env?: NodeJS.ProcessEnv): string;
|
|
10
|
+
export declare function writeHostLock(port: number, env?: NodeJS.ProcessEnv): HostLockRecord;
|
|
11
|
+
export declare function readHostLock(port: number, env?: NodeJS.ProcessEnv): HostLockRecord | null;
|
|
12
|
+
export declare function clearHostLock(port: number, env?: NodeJS.ProcessEnv): void;
|
|
13
|
+
/** True when this process still owns the lock file for `port`. */
|
|
14
|
+
export declare function ownsHostLock(port: number, env?: NodeJS.ProcessEnv): boolean;
|
|
15
|
+
//# sourceMappingURL=host-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-lock.d.ts","sourceRoot":"","sources":["../src/host-lock.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAEvE;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAER;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,cAAc,CAWhB;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,cAAc,GAAG,IAAI,CAsBvB;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,IAAI,CAON;AAED,kEAAkE;AAClE,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAGT"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host process lock under `~/.xrk/run/` — so `restart` can stop *our* Host
|
|
3
|
+
* without killing whatever else happens to bind the same TCP port.
|
|
4
|
+
*/
|
|
5
|
+
import fs from "node:fs";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import { resolveXrkHome } from "@xrkseek/server-config";
|
|
8
|
+
export function hostRunDir(env = process.env) {
|
|
9
|
+
return path.join(resolveXrkHome(env), "run");
|
|
10
|
+
}
|
|
11
|
+
export function hostLockPath(port, env = process.env) {
|
|
12
|
+
return path.join(hostRunDir(env), `host-${port}.pid.json`);
|
|
13
|
+
}
|
|
14
|
+
export function writeHostLock(port, env = process.env) {
|
|
15
|
+
const dir = hostRunDir(env);
|
|
16
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
17
|
+
const record = {
|
|
18
|
+
pid: process.pid,
|
|
19
|
+
port,
|
|
20
|
+
startedAt: Date.now(),
|
|
21
|
+
argv: process.argv.slice(0, 3).join(" "),
|
|
22
|
+
};
|
|
23
|
+
fs.writeFileSync(hostLockPath(port, env), `${JSON.stringify(record, null, 2)}\n`, "utf8");
|
|
24
|
+
return record;
|
|
25
|
+
}
|
|
26
|
+
export function readHostLock(port, env = process.env) {
|
|
27
|
+
const file = hostLockPath(port, env);
|
|
28
|
+
if (!fs.existsSync(file))
|
|
29
|
+
return null;
|
|
30
|
+
try {
|
|
31
|
+
const raw = JSON.parse(fs.readFileSync(file, "utf8"));
|
|
32
|
+
if (typeof raw.pid !== "number" ||
|
|
33
|
+
!Number.isInteger(raw.pid) ||
|
|
34
|
+
raw.pid <= 0 ||
|
|
35
|
+
typeof raw.port !== "number") {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
pid: raw.pid,
|
|
40
|
+
port: raw.port,
|
|
41
|
+
startedAt: typeof raw.startedAt === "number" ? raw.startedAt : 0,
|
|
42
|
+
argv: typeof raw.argv === "string" ? raw.argv : "",
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export function clearHostLock(port, env = process.env) {
|
|
50
|
+
const file = hostLockPath(port, env);
|
|
51
|
+
try {
|
|
52
|
+
if (fs.existsSync(file))
|
|
53
|
+
fs.unlinkSync(file);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
/* best-effort */
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/** True when this process still owns the lock file for `port`. */
|
|
60
|
+
export function ownsHostLock(port, env = process.env) {
|
|
61
|
+
const lock = readHostLock(port, env);
|
|
62
|
+
return lock !== null && lock.pid === process.pid;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=host-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-lock.js","sourceRoot":"","sources":["../src/host-lock.ts"],"names":[],"mappings":"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"}
|
package/dist/parse-args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-args.d.ts","sourceRoot":"","sources":["../src/parse-args.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAClB,KAAK,GACL,QAAQ,GACR,aAAa,GACb,OAAO,GACP,SAAS,GACT,QAAQ,GACR,MAAM,CAAC;AAEX,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,OAAO,GAAG,MAAM,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,wDAAwD;IACxD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAeD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAOjD;AAgCD,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAuL7D;AAED,wBAAgB,QAAQ,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"parse-args.d.ts","sourceRoot":"","sources":["../src/parse-args.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAClB,KAAK,GACL,QAAQ,GACR,aAAa,GACb,OAAO,GACP,SAAS,GACT,QAAQ,GACR,MAAM,CAAC;AAEX,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,OAAO,GAAG,MAAM,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,wDAAwD;IACxD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAeD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAOjD;AAgCD,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAuL7D;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAiDjC"}
|
package/dist/parse-args.js
CHANGED
|
@@ -71,11 +71,11 @@ export function parseArgs(argv) {
|
|
|
71
71
|
else {
|
|
72
72
|
throw new Error(`unknown command: ${first}`);
|
|
73
73
|
}
|
|
74
|
-
// `plugin` owns the rest of argv (
|
|
74
|
+
// `plugin` owns the rest of argv (subcommand + specs).
|
|
75
75
|
if (command === "plugin") {
|
|
76
76
|
return emptyArgs({ command: "plugin", pluginArgv: args });
|
|
77
77
|
}
|
|
78
|
-
/** Product Host (`web`/`serve`) defaults to harness tools; `run` stays minimal for smoke. */
|
|
78
|
+
/** Product Host (`web`/`serve`/`restart`) defaults to harness tools; `run` stays minimal for smoke. */
|
|
79
79
|
let preset = command === "serve" || command === "restart" ? "harness" : "minimal";
|
|
80
80
|
let promptFromFlag;
|
|
81
81
|
const promptParts = [];
|
|
@@ -231,20 +231,24 @@ Commands:
|
|
|
231
231
|
run One turn (default: minimal + replay; XRK_LLM_PRESET if set)
|
|
232
232
|
serve HTTP host + product UI (apps/web/dist)
|
|
233
233
|
web Alias for serve
|
|
234
|
-
restart
|
|
234
|
+
restart Stop the previous XRK Host on this port (pid lock), then serve
|
|
235
235
|
plugin Install / remove / list user plugins (~/.xrk/plugins)
|
|
236
236
|
doctor Check node / workspace / product shell
|
|
237
237
|
dump-config Print layered config JSON
|
|
238
238
|
help Show this help
|
|
239
239
|
|
|
240
240
|
Options:
|
|
241
|
-
--preset <id> Preset id (minimal|harness|server
|
|
241
|
+
--preset <id> Preset id (minimal|harness|server)
|
|
242
|
+
· web/serve/restart default: harness (XRK Harness tools)
|
|
243
|
+
· run default: minimal
|
|
244
|
+
· server = Host factory name; tools same as harness
|
|
242
245
|
--prompt <text> User prompt for run (or positional tokens)
|
|
243
246
|
--workspace <path> User workspace (default: cwd)
|
|
244
247
|
--host <addr> Bind host (default: 127.0.0.1; not 0.0.0.0)
|
|
245
248
|
--port <n> Bind port (default: 8787; 0 = OS pick)
|
|
246
249
|
--open Open the product UI in the system browser
|
|
247
|
-
--force
|
|
250
|
+
--force Stop a verified XRK Host on --port before bind
|
|
251
|
+
(refuses to kill non-XRK listeners)
|
|
248
252
|
--verbose, -v Debug logs (HTTP /api access + MCP detail)
|
|
249
253
|
--quiet, -q Warn/error only
|
|
250
254
|
--no-persist In-memory sessions (default: ~/.xrk/sessions)
|
|
@@ -259,11 +263,10 @@ Env:
|
|
|
259
263
|
XRK_PLUGINS_DIR Plugin root (default: ~/.xrk/plugins when present)
|
|
260
264
|
|
|
261
265
|
Examples:
|
|
262
|
-
xrk-harness
|
|
263
|
-
xrk-harness
|
|
264
|
-
xrk-harness web --force
|
|
265
|
-
xrk-harness
|
|
266
|
-
xrk-harness plugin add @huanlin/dsh-plugin-spur
|
|
266
|
+
xrk-harness web --workspace .
|
|
267
|
+
xrk-harness restart --port 8787
|
|
268
|
+
xrk-harness web --force --verbose
|
|
269
|
+
xrk-harness plugin add ./extensions/example-tools
|
|
267
270
|
xrk-harness plugin list
|
|
268
271
|
xrk-harness run --preset minimal "ping"
|
|
269
272
|
`;
|
package/dist/parse-args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-args.js","sourceRoot":"","sources":["../src/parse-args.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"parse-args.js","sourceRoot":"","sources":["../src/parse-args.ts"],"names":[],"mappings":"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"}
|
package/dist/port.d.ts
CHANGED
|
@@ -1,9 +1,27 @@
|
|
|
1
1
|
import type { CliLogger } from "./log.js";
|
|
2
|
+
export declare function looksLikeXrkHostCommand(command: string): boolean;
|
|
2
3
|
/** PIDs currently LISTENing on `port` (IPv4/IPv6). */
|
|
3
4
|
export declare function pidsListeningOnPort(port: number): Promise<number[]>;
|
|
5
|
+
/** Best-effort process command line for `pid` (empty when unknown). */
|
|
6
|
+
export declare function commandLineForPid(pid: number): Promise<string>;
|
|
7
|
+
export declare function waitForPortFree(port: number, timeoutMs?: number, intervalMs?: number): Promise<boolean>;
|
|
8
|
+
export interface StopHostResult {
|
|
9
|
+
readonly stopped: number[];
|
|
10
|
+
readonly foreign: {
|
|
11
|
+
readonly pid: number;
|
|
12
|
+
readonly command: string;
|
|
13
|
+
}[];
|
|
14
|
+
}
|
|
4
15
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
16
|
+
* Graceful stop of the Host we previously recorded for `port`.
|
|
17
|
+
* Falls back to verified XRK listeners on that port when the lock is stale.
|
|
7
18
|
*/
|
|
19
|
+
export declare function stopOwnHost(port: number, log?: CliLogger): Promise<StopHostResult>;
|
|
20
|
+
/**
|
|
21
|
+
* `--force`: stop verified XRK Host listeners only.
|
|
22
|
+
* @throws when a non-XRK process still holds the port.
|
|
23
|
+
*/
|
|
24
|
+
export declare function forceFreeXrkPort(port: number, log?: CliLogger): Promise<number[]>;
|
|
25
|
+
/** @deprecated Prefer {@link forceFreeXrkPort}; kept name for call-site clarity in serve. */
|
|
8
26
|
export declare function forceFreePort(port: number, log?: CliLogger): Promise<number[]>;
|
|
9
27
|
//# sourceMappingURL=port.d.ts.map
|
package/dist/port.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../src/port.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../src/port.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAc1C,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIhE;AAED,sDAAsD;AACtD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAIzE;AA8CD,uEAAuE;AACvE,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBpE;AAwBD,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,SAAS,SAAQ,EACjB,UAAU,SAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACxE;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,cAAc,CAAC,CAwCzB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,MAAM,EAAE,CAAC,CAoBnB;AAED,6FAA6F;AAC7F,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,MAAM,EAAE,CAAC,CAEnB"}
|