@xrkseek/harness-cli 0.0.2 → 0.0.4
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 +5 -0
- package/dist/commands/restart.d.ts +3 -0
- package/dist/commands/restart.d.ts.map +1 -0
- package/dist/commands/restart.js +32 -0
- package/dist/commands/restart.js.map +1 -0
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +38 -19
- package/dist/commands/serve.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts +19 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +52 -0
- package/dist/log.js.map +1 -0
- package/dist/parse-args.d.ts +5 -1
- package/dist/parse-args.d.ts.map +1 -1
- package/dist/parse-args.js +37 -4
- package/dist/parse-args.js.map +1 -1
- package/dist/port.d.ts +9 -0
- package/dist/port.d.ts.map +1 -0
- package/dist/port.js +86 -0
- package/dist/port.js.map +1 -0
- package/node_modules/@xrkseek/core-agent/dist/index.d.ts +2 -0
- package/node_modules/@xrkseek/core-agent/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-agent/dist/index.js +3 -0
- package/node_modules/@xrkseek/core-agent/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/core-agent-loop/dist/index.d.ts +5 -0
- package/node_modules/@xrkseek/core-agent-loop/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-agent-loop/dist/index.js +3 -0
- package/node_modules/@xrkseek/core-agent-loop/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/core-agent-loop/dist/settle-batch.d.ts +5 -0
- package/node_modules/@xrkseek/core-agent-loop/dist/settle-batch.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-agent-loop/dist/settle-batch.js +22 -2
- package/node_modules/@xrkseek/core-agent-loop/dist/settle-batch.js.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/compaction.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/compaction.js.map +1 -1
- package/node_modules/@xrkseek/exec-shell/dist/index.d.ts +4 -1
- package/node_modules/@xrkseek/exec-shell/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-shell/dist/index.js +18 -2
- package/node_modules/@xrkseek/exec-shell/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/exec-web/dist/fetch-http.js +1 -1
- package/node_modules/@xrkseek/exec-web/dist/index.d.ts +9 -2
- package/node_modules/@xrkseek/exec-web/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-web/dist/index.js +10 -7
- package/node_modules/@xrkseek/exec-web/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/exec-web/dist/search-duckduckgo.d.ts +14 -0
- package/node_modules/@xrkseek/exec-web/dist/search-duckduckgo.d.ts.map +1 -0
- package/node_modules/@xrkseek/exec-web/dist/search-duckduckgo.js +139 -0
- package/node_modules/@xrkseek/exec-web/dist/search-duckduckgo.js.map +1 -0
- package/node_modules/@xrkseek/exec-web/dist/search-mcp-client.d.ts +21 -0
- package/node_modules/@xrkseek/exec-web/dist/search-mcp-client.d.ts.map +1 -0
- package/node_modules/@xrkseek/exec-web/dist/search-mcp-client.js +175 -0
- package/node_modules/@xrkseek/exec-web/dist/search-mcp-client.js.map +1 -0
- package/node_modules/@xrkseek/exec-web/dist/search-parallel-free.d.ts +12 -0
- package/node_modules/@xrkseek/exec-web/dist/search-parallel-free.d.ts.map +1 -0
- package/node_modules/@xrkseek/exec-web/dist/search-parallel-free.js +105 -0
- package/node_modules/@xrkseek/exec-web/dist/search-parallel-free.js.map +1 -0
- package/node_modules/@xrkseek/exec-web/dist/search-providers.d.ts +28 -3
- package/node_modules/@xrkseek/exec-web/dist/search-providers.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-web/dist/search-providers.js +150 -23
- package/node_modules/@xrkseek/exec-web/dist/search-providers.js.map +1 -1
- package/node_modules/@xrkseek/mcp/dist/client.d.ts.map +1 -1
- package/node_modules/@xrkseek/mcp/dist/client.js.map +1 -1
- package/node_modules/@xrkseek/mcp/dist/project-content.js +1 -1
- package/node_modules/@xrkseek/mcp/dist/project-content.js.map +1 -1
- package/node_modules/@xrkseek/preset-harness/dist/preset.d.ts +11 -0
- package/node_modules/@xrkseek/preset-harness/dist/preset.d.ts.map +1 -1
- package/node_modules/@xrkseek/preset-harness/dist/preset.js +12 -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/preset-minimal/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@xrkseek/preset-server/dist/preset.d.ts.map +1 -1
- package/node_modules/@xrkseek/preset-server/dist/preset.js +4 -1
- package/node_modules/@xrkseek/preset-server/dist/preset.js.map +1 -1
- package/node_modules/@xrkseek/preset-server/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@xrkseek/protocol/dist/token-usage.d.ts +7 -1
- package/node_modules/@xrkseek/protocol/dist/token-usage.d.ts.map +1 -1
- package/node_modules/@xrkseek/protocol/dist/token-usage.js +49 -24
- package/node_modules/@xrkseek/protocol/dist/token-usage.js.map +1 -1
- package/node_modules/@xrkseek/server-config/dist/index.js +1 -1
- package/node_modules/@xrkseek/server-face/dist/context.d.ts +6 -5
- package/node_modules/@xrkseek/server-face/dist/context.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/context.js +1 -3
- package/node_modules/@xrkseek/server-face/dist/context.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/dispatch.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/dispatch.js +4 -2
- package/node_modules/@xrkseek/server-face/dist/dispatch.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/face-schema.d.ts +3 -2
- package/node_modules/@xrkseek/server-face/dist/face-schema.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/face-schema.js +16 -4
- package/node_modules/@xrkseek/server-face/dist/face-schema.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/catalog.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/catalog.js +26 -12
- package/node_modules/@xrkseek/server-face/dist/handlers/catalog.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/session-added.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/session-added.js +3 -2
- package/node_modules/@xrkseek/server-face/dist/handlers/session-added.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/session.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/session.js +24 -27
- package/node_modules/@xrkseek/server-face/dist/handlers/session.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/index.d.ts +4 -3
- package/node_modules/@xrkseek/server-face/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/index.js +4 -3
- package/node_modules/@xrkseek/server-face/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/llm-provider-context.d.ts +44 -6
- package/node_modules/@xrkseek/server-face/dist/llm-provider-context.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/llm-provider-context.js +220 -34
- package/node_modules/@xrkseek/server-face/dist/llm-provider-context.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/llm-resolve.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/llm-resolve.js +4 -7
- package/node_modules/@xrkseek/server-face/dist/llm-resolve.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/model-catalog.d.ts +1 -1
- package/node_modules/@xrkseek/server-face/dist/model-catalog.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/model-catalog.js +23 -26
- package/node_modules/@xrkseek/server-face/dist/model-catalog.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/presets-catalog.d.ts +13 -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 +24 -9
- package/node_modules/@xrkseek/server-face/dist/presets-catalog.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/session-cwd.d.ts +3 -0
- package/node_modules/@xrkseek/server-face/dist/session-cwd.d.ts.map +1 -0
- package/node_modules/@xrkseek/server-face/dist/session-cwd.js +19 -0
- package/node_modules/@xrkseek/server-face/dist/session-cwd.js.map +1 -0
- package/node_modules/@xrkseek/server-face/dist/settings-credentials.d.ts +1 -1
- package/node_modules/@xrkseek/server-face/dist/settings-credentials.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/settings-credentials.js +116 -14
- package/node_modules/@xrkseek/server-face/dist/settings-credentials.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/settings-document.d.ts +1 -1
- package/node_modules/@xrkseek/server-face/dist/settings-document.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/settings-document.js +25 -22
- package/node_modules/@xrkseek/server-face/dist/settings-document.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/settings-layers.d.ts +3 -0
- package/node_modules/@xrkseek/server-face/dist/settings-layers.d.ts.map +1 -0
- package/node_modules/@xrkseek/server-face/dist/settings-layers.js +19 -0
- package/node_modules/@xrkseek/server-face/dist/settings-layers.js.map +1 -0
- package/node_modules/@xrkseek/server-face/dist/settings-schemas.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/settings-schemas.js +18 -11
- package/node_modules/@xrkseek/server-face/dist/settings-schemas.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-face.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-face.js +26 -9
- package/node_modules/@xrkseek/server-face/dist/workspace-face.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-registry.d.ts +6 -0
- package/node_modules/@xrkseek/server-face/dist/workspace-registry.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-registry.js +39 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-registry.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-store.d.ts +4 -0
- package/node_modules/@xrkseek/server-face/dist/workspace-store.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-store.js +43 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-store.js.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/index.d.ts +19 -2
- package/node_modules/@xrkseek/server-host/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/index.js +150 -23
- package/node_modules/@xrkseek/server-host/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/log.d.ts +14 -0
- package/node_modules/@xrkseek/server-host/dist/log.d.ts.map +1 -0
- package/node_modules/@xrkseek/server-host/dist/log.js +6 -0
- package/node_modules/@xrkseek/server-host/dist/log.js.map +1 -0
- package/node_modules/@xrkseek/server-host/dist/mcp-wire.d.ts +9 -4
- package/node_modules/@xrkseek/server-host/dist/mcp-wire.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/mcp-wire.js +42 -7
- package/node_modules/@xrkseek/server-host/dist/mcp-wire.js.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/standing-tools.js +2 -2
- package/node_modules/@xrkseek/server-host/dist/standing-tools.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/index.d.ts +9 -0
- package/node_modules/@xrkseek/server-http/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/index.js +9 -0
- 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-ui-agent-preset/client.js +33 -33
- package/product-web/plugins/@xrkseek/client-ui-commands/client.js +7 -7
- package/product-web/plugins/@xrkseek/client-ui-conversation/client.js +156 -156
- 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 +6 -6
- package/product-web/plugins/@xrkseek/client-ui-input-trigger/client.js +5 -5
- package/product-web/plugins/@xrkseek/client-ui-jobs/client.js +10 -10
- package/product-web/plugins/@xrkseek/client-ui-layout/client.js +4 -4
- package/product-web/plugins/@xrkseek/client-ui-message-feedback/client.js +4 -4
- package/product-web/plugins/@xrkseek/client-ui-model-selection/client.js +19 -19
- package/product-web/plugins/@xrkseek/client-ui-permission-presets/client.js +4 -4
- package/product-web/plugins/@xrkseek/client-ui-plan/client.js +1 -1
- package/product-web/plugins/@xrkseek/client-ui-settings/client.js +7 -1
- package/product-web/plugins/@xrkseek/client-ui-settings-general/client.js +16 -16
- package/product-web/plugins/@xrkseek/client-ui-settings-models/client.js +53 -53
- package/product-web/plugins/@xrkseek/client-ui-settings-plugin-inventory/client.js +12 -12
- package/product-web/plugins/@xrkseek/client-ui-settings-plugins/client.js +615 -548
- package/product-web/plugins/@xrkseek/client-ui-sidebar/client.js +14 -14
- package/product-web/plugins/@xrkseek/client-ui-skill/client.js +9 -9
- package/product-web/plugins/@xrkseek/client-ui-subagent/client.js +16 -16
- package/product-web/plugins/@xrkseek/client-ui-theme/client.js +3 -3
- package/product-web/plugins/@xrkseek/client-ui-tool/client.js +37 -37
- package/product-web/plugins/@xrkseek/client-ui-trajectory/client.js +144 -144
- package/product-web/plugins/@xrkseek/client-ui-user-questions/client.js +30 -30
- package/product-web/plugins/@xrkseek/client-ui-workflow-run/client.js +11 -11
- package/product-web/plugins/@xrkseek/client-ui-workspace/client.js +53 -53
package/README.md
CHANGED
|
@@ -8,11 +8,16 @@ bin:`xrk-harness`。产品 UI:包内 `product-web/`(源码仓用 `apps/web
|
|
|
8
8
|
|------|------|
|
|
9
9
|
| `run` | 单 turn(默认 minimal + replay) |
|
|
10
10
|
| `serve` / `web` | HTTP host + 产品壳 |
|
|
11
|
+
| `restart` | 释放监听端口后重新 serve |
|
|
11
12
|
| `doctor` | Node · workspace · 产品壳 |
|
|
12
13
|
| `dump-config` | 打印 preset 配置 |
|
|
13
14
|
|
|
15
|
+
常用 flags:`--verbose`(`/api` + MCP 细节)· `--force`(先杀占用端口)· `--quiet` · `XRK_LOG=debug`。
|
|
16
|
+
|
|
14
17
|
```bash
|
|
15
18
|
npx @xrkseek/harness-cli web
|
|
19
|
+
npx @xrkseek/harness-cli web --force --verbose
|
|
20
|
+
npx @xrkseek/harness-cli restart
|
|
16
21
|
# 源码:
|
|
17
22
|
pnpm build && pnpm web:build && pnpm client:bundle && pnpm web:assemble
|
|
18
23
|
node apps/cli/dist/bin.js web --workspace .
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart.d.ts","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAKnD,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBlE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Free the listen port, then start serve (OpenClaw `gateway restart` UX for foreground Host).
|
|
3
|
+
*/
|
|
4
|
+
import { loadHostConfig } from "@xrkseek/server-config";
|
|
5
|
+
import { createCliLogger, resolveLogLevel } from "../log.js";
|
|
6
|
+
import { forceFreePort } from "../port.js";
|
|
7
|
+
import { runServe } from "./serve.js";
|
|
8
|
+
export async function runRestart(args) {
|
|
9
|
+
const log = createCliLogger(resolveLogLevel({ verbose: args.verbose, quiet: args.quiet }));
|
|
10
|
+
const patch = {
|
|
11
|
+
...args.patch,
|
|
12
|
+
workspaceRoot: args.workspace,
|
|
13
|
+
preset: args.preset,
|
|
14
|
+
};
|
|
15
|
+
if (args.host)
|
|
16
|
+
patch.host = args.host;
|
|
17
|
+
if (args.port !== undefined)
|
|
18
|
+
patch.port = args.port;
|
|
19
|
+
const config = loadHostConfig({ patch });
|
|
20
|
+
const port = config.runtime.port;
|
|
21
|
+
if (port > 0) {
|
|
22
|
+
const killed = await forceFreePort(port, log);
|
|
23
|
+
if (killed.length === 0) {
|
|
24
|
+
log.info(`restart: nothing listening on ${port}`);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
log.info(`restart: freed port ${port}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return runServe({ ...args, force: false });
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=restart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart.js","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,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;IACjC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC9C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,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":"
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAaA,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAmEnE,wBAAsB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA6GhE;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIzE"}
|
package/dist/commands/serve.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { resolveToolPreset } from "@xrkseek/server-face";
|
|
1
2
|
import { loadHostConfig, defaultSessionsDir } from "@xrkseek/server-config";
|
|
2
3
|
import { createHostManager } from "@xrkseek/server-host";
|
|
3
4
|
import { createServerAgentFactory, createServerComposition, } from "@xrkseek/preset-server";
|
|
@@ -5,10 +6,13 @@ import { createMinimalComposition } from "@xrkseek/preset-minimal";
|
|
|
5
6
|
import { resolveLlmFromEnv } from "@xrkseek/llm-registry";
|
|
6
7
|
import { createPolicyEngineFromFile } from "@xrkseek/policy";
|
|
7
8
|
import { spawn } from "node:child_process";
|
|
9
|
+
import os from "node:os";
|
|
8
10
|
import path from "node:path";
|
|
9
11
|
import { assertSafeHost } from "../parse-args.js";
|
|
10
12
|
import { ensureProductWebDist, repoRoot, } from "../product-paths.js";
|
|
11
|
-
|
|
13
|
+
import { createCliLogger, resolveLogLevel } from "../log.js";
|
|
14
|
+
import { forceFreePort } from "../port.js";
|
|
15
|
+
function openProductUrl(url, log) {
|
|
12
16
|
const platform = process.platform;
|
|
13
17
|
const child = platform === "win32"
|
|
14
18
|
? spawn("cmd.exe", ["/c", "start", "", url], {
|
|
@@ -21,18 +25,12 @@ function openProductUrl(url) {
|
|
|
21
25
|
stdio: "ignore",
|
|
22
26
|
});
|
|
23
27
|
child.once("error", (err) => {
|
|
24
|
-
|
|
28
|
+
log.warn(`could not open browser: ${err.message}`);
|
|
25
29
|
});
|
|
26
30
|
child.unref();
|
|
27
31
|
}
|
|
28
|
-
function factoryForPreset(
|
|
29
|
-
|
|
30
|
-
return createServerAgentFactory({
|
|
31
|
-
workspaceRoot,
|
|
32
|
-
...(policy ? { policy } : {}),
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
return async ({ sessionId, store, workspaceRoot: root, plugins, resolveImage, resolveLlm, }) => {
|
|
32
|
+
function factoryForPreset(hostPreset, workspaceRoot, policy) {
|
|
33
|
+
const minimalFactory = async ({ sessionId, store, workspaceRoot: root, plugins, resolveImage, resolveLlm, }) => {
|
|
36
34
|
const fromFace = resolveLlm?.(sessionId);
|
|
37
35
|
const fromEnv = fromFace ? undefined : resolveLlmFromEnv(process.env);
|
|
38
36
|
const composition = createMinimalComposition({
|
|
@@ -47,8 +45,19 @@ function factoryForPreset(preset, workspaceRoot, policy) {
|
|
|
47
45
|
});
|
|
48
46
|
return composition.createAgent();
|
|
49
47
|
};
|
|
48
|
+
const harnessFactory = createServerAgentFactory({
|
|
49
|
+
workspaceRoot,
|
|
50
|
+
...(policy ? { policy } : {}),
|
|
51
|
+
});
|
|
52
|
+
return async (input) => {
|
|
53
|
+
const preset = resolveToolPreset(input.agentPreset, hostPreset);
|
|
54
|
+
if (preset === "minimal")
|
|
55
|
+
return minimalFactory(input);
|
|
56
|
+
return harnessFactory(input);
|
|
57
|
+
};
|
|
50
58
|
}
|
|
51
59
|
export async function runServe(args) {
|
|
60
|
+
const log = createCliLogger(resolveLogLevel({ verbose: args.verbose, quiet: args.quiet }));
|
|
52
61
|
const patch = {
|
|
53
62
|
...args.patch,
|
|
54
63
|
workspaceRoot: args.workspace,
|
|
@@ -60,6 +69,9 @@ export async function runServe(args) {
|
|
|
60
69
|
patch.port = args.port;
|
|
61
70
|
const config = loadHostConfig({ patch });
|
|
62
71
|
assertSafeHost(config.runtime.host);
|
|
72
|
+
if (args.force && config.runtime.port > 0) {
|
|
73
|
+
await forceFreePort(config.runtime.port, log);
|
|
74
|
+
}
|
|
63
75
|
const preset = args.preset === "minimal" ||
|
|
64
76
|
args.preset === "harness" ||
|
|
65
77
|
args.preset === "server"
|
|
@@ -74,7 +86,7 @@ export async function runServe(args) {
|
|
|
74
86
|
}
|
|
75
87
|
catch (err) {
|
|
76
88
|
const message = err instanceof Error ? err.message : String(err);
|
|
77
|
-
|
|
89
|
+
log.error(message);
|
|
78
90
|
return 1;
|
|
79
91
|
}
|
|
80
92
|
const sessionsDir = args.persist
|
|
@@ -94,24 +106,31 @@ export async function runServe(args) {
|
|
|
94
106
|
const instance = await manager.spawn({
|
|
95
107
|
...config,
|
|
96
108
|
runtime,
|
|
97
|
-
}, factory);
|
|
109
|
+
}, factory, { logger: log });
|
|
98
110
|
const health = instance.health();
|
|
99
111
|
const port = health.port ?? config.runtime.port;
|
|
100
112
|
const origin = `http://${config.runtime.host}:${port}`;
|
|
101
|
-
|
|
113
|
+
log.info(`xrk-harness serve ${origin}/`);
|
|
102
114
|
const uiRel = path.relative(repoRoot(), webDist) || webDist;
|
|
103
|
-
|
|
104
|
-
|
|
115
|
+
log.info(` workspace=${config.runtime.workspaceRoot}`);
|
|
116
|
+
log.info(` preset=${preset} ui=${uiRel} sessions=${sessionsDir ?? "memory"}`);
|
|
117
|
+
log.info(` mcpAllow=${health.mcpAllowConnect ? "on" : "off"} log=${log.level}`);
|
|
105
118
|
if (config.credentials.apiKey) {
|
|
106
|
-
|
|
119
|
+
log.info(" apiKey=set");
|
|
107
120
|
}
|
|
108
121
|
if (policy)
|
|
109
|
-
|
|
122
|
+
log.info(" policy=on");
|
|
123
|
+
const home = path.resolve(os.homedir());
|
|
124
|
+
const ws = path.resolve(config.runtime.workspaceRoot);
|
|
125
|
+
if (ws === home || ws.startsWith(home + path.sep + ".xrk")) {
|
|
126
|
+
log.info(" tip: workspace is your user home (or ~/.xrk) — prefer `cd <project> && xrk-harness web`");
|
|
127
|
+
}
|
|
128
|
+
log.info(" tip: Ctrl+C stop · `xrk-harness restart` / `web --force` free port");
|
|
110
129
|
if (args.open) {
|
|
111
|
-
openProductUrl(`${origin}
|
|
130
|
+
openProductUrl(`${origin}/`, log);
|
|
112
131
|
}
|
|
113
132
|
const shutdown = async () => {
|
|
114
|
-
|
|
133
|
+
log.info("shutting down...");
|
|
115
134
|
await manager.stopAll();
|
|
116
135
|
process.exit(0);
|
|
117
136
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA,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,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAmB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EACL,oBAAoB,EACpB,QAAQ,GACT,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;AAE/C,wBAAsB,IAAI,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkDxE"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { runDoctor } from "./commands/doctor.js";
|
|
2
2
|
import { runDumpConfig } from "./commands/dump-config.js";
|
|
3
3
|
import { runCommand } from "./commands/run.js";
|
|
4
|
+
import { runRestart } from "./commands/restart.js";
|
|
4
5
|
import { runServe } from "./commands/serve.js";
|
|
5
6
|
import { helpText, parseArgs } from "./parse-args.js";
|
|
6
7
|
import { readCliVersion } from "./product-paths.js";
|
|
@@ -40,6 +41,8 @@ export async function main(argv = process.argv.slice(2)) {
|
|
|
40
41
|
return 0;
|
|
41
42
|
case "serve":
|
|
42
43
|
return await runServe(args);
|
|
44
|
+
case "restart":
|
|
45
|
+
return await runRestart(args);
|
|
43
46
|
default:
|
|
44
47
|
process.stdout.write(helpText());
|
|
45
48
|
return 0;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,cAAc,EAAE,IAAI,CAAC,CAAC;QAC9C,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC;QACH,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,KAAK,KAAK;gBACR,OAAO,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;YAChC,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC/C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,IAAI,CACpD,CAAC;gBACJ,CAAC;gBACD,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;YACD,KAAK,aAAa;gBAChB,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;gBAC1B,OAAO,CAAC,CAAC;YACX,KAAK,OAAO;gBACV,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC9B;gBACE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACjC,OAAO,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/log.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI / Host console log (DSH: URL + lifecycle belong to the shell; OpenClaw: --verbose).
|
|
3
|
+
*/
|
|
4
|
+
export type LogLevel = "silent" | "error" | "warn" | "info" | "debug";
|
|
5
|
+
export interface CliLogger {
|
|
6
|
+
readonly level: LogLevel;
|
|
7
|
+
error(msg: string): void;
|
|
8
|
+
warn(msg: string): void;
|
|
9
|
+
info(msg: string): void;
|
|
10
|
+
debug(msg: string): void;
|
|
11
|
+
}
|
|
12
|
+
/** Resolve level: flag > XRK_LOG / XRK_LOG_LEVEL > default info. */
|
|
13
|
+
export declare function resolveLogLevel(options: {
|
|
14
|
+
readonly verbose?: boolean;
|
|
15
|
+
readonly quiet?: boolean;
|
|
16
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
17
|
+
}): LogLevel;
|
|
18
|
+
export declare function createCliLogger(level: LogLevel): CliLogger;
|
|
19
|
+
//# sourceMappingURL=log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAUtE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAiBD,oEAAoE;AACpE,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAClC,GAAG,QAAQ,CASX;AAMD,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,CAY1D"}
|
package/dist/log.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI / Host console log (DSH: URL + lifecycle belong to the shell; OpenClaw: --verbose).
|
|
3
|
+
*/
|
|
4
|
+
const RANK = {
|
|
5
|
+
silent: 100,
|
|
6
|
+
error: 40,
|
|
7
|
+
warn: 30,
|
|
8
|
+
info: 20,
|
|
9
|
+
debug: 10,
|
|
10
|
+
};
|
|
11
|
+
function parseLevel(raw) {
|
|
12
|
+
if (!raw)
|
|
13
|
+
return undefined;
|
|
14
|
+
const v = raw.trim().toLowerCase();
|
|
15
|
+
if (v === "silent" ||
|
|
16
|
+
v === "error" ||
|
|
17
|
+
v === "warn" ||
|
|
18
|
+
v === "info" ||
|
|
19
|
+
v === "debug") {
|
|
20
|
+
return v;
|
|
21
|
+
}
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
/** Resolve level: flag > XRK_LOG / XRK_LOG_LEVEL > default info. */
|
|
25
|
+
export function resolveLogLevel(options) {
|
|
26
|
+
if (options.quiet)
|
|
27
|
+
return "warn";
|
|
28
|
+
if (options.verbose)
|
|
29
|
+
return "debug";
|
|
30
|
+
const env = options.env ?? process.env;
|
|
31
|
+
return (parseLevel(env.XRK_LOG) ??
|
|
32
|
+
parseLevel(env.XRK_LOG_LEVEL) ??
|
|
33
|
+
"info");
|
|
34
|
+
}
|
|
35
|
+
function stamp() {
|
|
36
|
+
return new Date().toISOString().slice(11, 23); // HH:mm:ss.sss
|
|
37
|
+
}
|
|
38
|
+
export function createCliLogger(level) {
|
|
39
|
+
const write = (min, stream, msg) => {
|
|
40
|
+
if (RANK[level] > RANK[min])
|
|
41
|
+
return;
|
|
42
|
+
stream.write(`${stamp()} ${msg}\n`);
|
|
43
|
+
};
|
|
44
|
+
return {
|
|
45
|
+
level,
|
|
46
|
+
error: (msg) => write("error", process.stderr, `error ${msg}`),
|
|
47
|
+
warn: (msg) => write("warn", process.stderr, `warn ${msg}`),
|
|
48
|
+
info: (msg) => write("info", process.stdout, msg),
|
|
49
|
+
debug: (msg) => write("debug", process.stderr, `debug ${msg}`),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=log.js.map
|
package/dist/log.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,IAAI,GAA6B;IACrC,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;CACV,CAAC;AAUF,SAAS,UAAU,CAAC,GAAuB;IACzC,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACnC,IACE,CAAC,KAAK,QAAQ;QACd,CAAC,KAAK,OAAO;QACb,CAAC,KAAK,MAAM;QACZ,CAAC,KAAK,MAAM;QACZ,CAAC,KAAK,OAAO,EACb,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,eAAe,CAAC,OAI/B;IACC,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC;IACjC,IAAI,OAAO,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC;IACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,OAAO,CACL,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;QACvB,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC;QAC7B,MAAM,CACP,CAAC;AACJ,CAAC;AAED,SAAS,KAAK;IACZ,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe;AAChE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAe;IAC7C,MAAM,KAAK,GAAG,CAAC,GAAa,EAAE,MAA0B,EAAE,GAAW,EAAE,EAAE;QACvE,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO;QACpC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC;IACF,OAAO;QACL,KAAK;QACL,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,GAAG,EAAE,CAAC;QAC/D,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,GAAG,EAAE,CAAC;QAC7D,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;QACjD,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,GAAG,EAAE,CAAC;KAChE,CAAC;AACJ,CAAC"}
|
package/dist/parse-args.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type CliCommand = "run" | "doctor" | "dump-config" | "serve" | "help";
|
|
1
|
+
export type CliCommand = "run" | "doctor" | "dump-config" | "serve" | "restart" | "help";
|
|
2
2
|
export interface ParsedArgs {
|
|
3
3
|
readonly command: CliCommand;
|
|
4
4
|
readonly preset: string;
|
|
@@ -11,6 +11,10 @@ export interface ParsedArgs {
|
|
|
11
11
|
readonly version: boolean;
|
|
12
12
|
readonly open: boolean;
|
|
13
13
|
readonly persist: boolean;
|
|
14
|
+
/** OpenClaw-style: free the listen port before bind. */
|
|
15
|
+
readonly force: boolean;
|
|
16
|
+
readonly verbose: boolean;
|
|
17
|
+
readonly quiet: boolean;
|
|
14
18
|
readonly host?: string;
|
|
15
19
|
readonly port?: number;
|
|
16
20
|
}
|
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,
|
|
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,MAAM,CAAC;AAEX,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,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;AA+BD,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAgL7D;AAED,wBAAgB,QAAQ,IAAI,MAAM,CA0CjC"}
|
package/dist/parse-args.js
CHANGED
|
@@ -39,6 +39,9 @@ function emptyArgs(partial) {
|
|
|
39
39
|
version: false,
|
|
40
40
|
open: false,
|
|
41
41
|
persist: true,
|
|
42
|
+
force: false,
|
|
43
|
+
verbose: false,
|
|
44
|
+
quiet: false,
|
|
42
45
|
...partial,
|
|
43
46
|
};
|
|
44
47
|
}
|
|
@@ -56,6 +59,7 @@ export function parseArgs(argv) {
|
|
|
56
59
|
first === "doctor" ||
|
|
57
60
|
first === "dump-config" ||
|
|
58
61
|
first === "serve" ||
|
|
62
|
+
first === "restart" ||
|
|
59
63
|
first === "help") {
|
|
60
64
|
command = first;
|
|
61
65
|
}
|
|
@@ -65,7 +69,8 @@ export function parseArgs(argv) {
|
|
|
65
69
|
else {
|
|
66
70
|
throw new Error(`unknown command: ${first}`);
|
|
67
71
|
}
|
|
68
|
-
|
|
72
|
+
/** Product Host (`web`/`serve`) defaults to harness tools; `run` stays minimal for smoke. */
|
|
73
|
+
let preset = command === "serve" || command === "restart" ? "harness" : "minimal";
|
|
69
74
|
let promptFromFlag;
|
|
70
75
|
const promptParts = [];
|
|
71
76
|
let workspace = process.cwd();
|
|
@@ -75,6 +80,9 @@ export function parseArgs(argv) {
|
|
|
75
80
|
let version = false;
|
|
76
81
|
let open = false;
|
|
77
82
|
let persist = true;
|
|
83
|
+
let force = false;
|
|
84
|
+
let verbose = false;
|
|
85
|
+
let quiet = false;
|
|
78
86
|
let host;
|
|
79
87
|
let port;
|
|
80
88
|
while (args.length) {
|
|
@@ -95,6 +103,18 @@ export function parseArgs(argv) {
|
|
|
95
103
|
persist = false;
|
|
96
104
|
continue;
|
|
97
105
|
}
|
|
106
|
+
if (a === "--force") {
|
|
107
|
+
force = true;
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (a === "--verbose" || a === "-v") {
|
|
111
|
+
verbose = true;
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (a === "--quiet" || a === "-q") {
|
|
115
|
+
quiet = true;
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
98
118
|
if (a === "--preset") {
|
|
99
119
|
preset = args.shift() ?? preset;
|
|
100
120
|
continue;
|
|
@@ -187,6 +207,9 @@ export function parseArgs(argv) {
|
|
|
187
207
|
version,
|
|
188
208
|
open,
|
|
189
209
|
persist,
|
|
210
|
+
force,
|
|
211
|
+
verbose,
|
|
212
|
+
quiet,
|
|
190
213
|
...(host ? { host } : {}),
|
|
191
214
|
...(port !== undefined ? { port } : {}),
|
|
192
215
|
};
|
|
@@ -201,26 +224,36 @@ Commands:
|
|
|
201
224
|
run One turn (default: minimal + replay; XRK_LLM_PRESET if set)
|
|
202
225
|
serve HTTP host + product UI (apps/web/dist)
|
|
203
226
|
web Alias for serve
|
|
227
|
+
restart Free the listen port, then serve (same flags as web)
|
|
204
228
|
doctor Check node / workspace / product shell
|
|
205
229
|
dump-config Print layered config JSON
|
|
206
230
|
help Show this help
|
|
207
231
|
|
|
208
232
|
Options:
|
|
209
|
-
--preset <id> Preset id (minimal|harness|server
|
|
233
|
+
--preset <id> Preset id (minimal|harness|server; web/serve default: harness; run default: minimal)
|
|
210
234
|
--prompt <text> User prompt for run (or positional tokens)
|
|
211
235
|
--workspace <path> User workspace (default: cwd)
|
|
212
236
|
--host <addr> Bind host (default: 127.0.0.1; not 0.0.0.0)
|
|
213
237
|
--port <n> Bind port (default: 8787; 0 = OS pick)
|
|
214
238
|
--open Open the product UI in the system browser
|
|
239
|
+
--force Kill whatever is already listening on --port (OpenClaw-style)
|
|
240
|
+
--verbose, -v Debug logs (HTTP /api access + MCP detail)
|
|
241
|
+
--quiet, -q Warn/error only
|
|
215
242
|
--no-persist In-memory sessions (default: ~/.xrk/sessions)
|
|
216
243
|
--patch <json> Shallow JSON patch merged into dump-config / serve
|
|
217
244
|
--presentation <m> tools (default) | code (experimental run_code)
|
|
218
245
|
-V, --version Print CLI version
|
|
219
246
|
-h, --help Show help
|
|
220
247
|
|
|
248
|
+
Env:
|
|
249
|
+
XRK_LOG / XRK_LOG_LEVEL silent|error|warn|info|debug (default info)
|
|
250
|
+
XRK_MCP_ALLOW=1 Allow mcp.connect for configured / saved servers
|
|
251
|
+
|
|
221
252
|
Examples:
|
|
222
|
-
xrk-harness serve --preset
|
|
223
|
-
xrk-harness web --port 8080 --open
|
|
253
|
+
xrk-harness serve --preset harness
|
|
254
|
+
xrk-harness web --port 8080 --open --verbose
|
|
255
|
+
xrk-harness web --force
|
|
256
|
+
xrk-harness restart --workspace .
|
|
224
257
|
xrk-harness run --preset minimal "ping"
|
|
225
258
|
`;
|
|
226
259
|
}
|
package/dist/parse-args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-args.js","sourceRoot":"","sources":["../src/parse-args.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parse-args.js","sourceRoot":"","sources":["../src/parse-args.ts"],"names":[],"mappings":"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"}
|
package/dist/port.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CliLogger } from "./log.js";
|
|
2
|
+
/** PIDs currently LISTENing on `port` (IPv4/IPv6). */
|
|
3
|
+
export declare function pidsListeningOnPort(port: number): Promise<number[]>;
|
|
4
|
+
/**
|
|
5
|
+
* SIGTERM/SIGKILL (or taskkill) every listener on `port`.
|
|
6
|
+
* Skips the current process.
|
|
7
|
+
*/
|
|
8
|
+
export declare function forceFreePort(port: number, log?: CliLogger): Promise<number[]>;
|
|
9
|
+
//# sourceMappingURL=port.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../src/port.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAI1C,sDAAsD;AACtD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAMzE;AA+CD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,MAAM,EAAE,CAAC,CA8BnB"}
|
package/dist/port.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Free a TCP listen port before serve (OpenClaw `gateway --force` UX).
|
|
3
|
+
*/
|
|
4
|
+
import { execFile } from "node:child_process";
|
|
5
|
+
import { promisify } from "node:util";
|
|
6
|
+
const execFileAsync = promisify(execFile);
|
|
7
|
+
/** PIDs currently LISTENing on `port` (IPv4/IPv6). */
|
|
8
|
+
export async function pidsListeningOnPort(port) {
|
|
9
|
+
if (!Number.isInteger(port) || port <= 0)
|
|
10
|
+
return [];
|
|
11
|
+
if (process.platform === "win32") {
|
|
12
|
+
return pidsWindows(port);
|
|
13
|
+
}
|
|
14
|
+
return pidsUnix(port);
|
|
15
|
+
}
|
|
16
|
+
async function pidsWindows(port) {
|
|
17
|
+
try {
|
|
18
|
+
const { stdout } = await execFileAsync("netstat", ["-ano", "-p", "TCP"], { windowsHide: true, maxBuffer: 2 * 1024 * 1024 });
|
|
19
|
+
const needle = `:${port}`;
|
|
20
|
+
const pids = new Set();
|
|
21
|
+
for (const line of stdout.split(/\r?\n/)) {
|
|
22
|
+
if (!/\bLISTENING\b/i.test(line))
|
|
23
|
+
continue;
|
|
24
|
+
if (!line.includes(needle))
|
|
25
|
+
continue;
|
|
26
|
+
// Local address column may be 0.0.0.0:8787 or [::]:8787 or 127.0.0.1:8787
|
|
27
|
+
const parts = line.trim().split(/\s+/);
|
|
28
|
+
const local = parts[1] ?? "";
|
|
29
|
+
if (!local.endsWith(needle) && !local.includes(`]:${port}`))
|
|
30
|
+
continue;
|
|
31
|
+
const pid = Number(parts[parts.length - 1]);
|
|
32
|
+
if (Number.isInteger(pid) && pid > 0)
|
|
33
|
+
pids.add(pid);
|
|
34
|
+
}
|
|
35
|
+
return [...pids];
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async function pidsUnix(port) {
|
|
42
|
+
try {
|
|
43
|
+
const { stdout } = await execFileAsync("lsof", [`-iTCP:${port}`, "-sTCP:LISTEN", "-n", "-P", "-t"], { maxBuffer: 512 * 1024 });
|
|
44
|
+
return [
|
|
45
|
+
...new Set(stdout
|
|
46
|
+
.split(/\r?\n/)
|
|
47
|
+
.map((s) => Number(s.trim()))
|
|
48
|
+
.filter((n) => Number.isInteger(n) && n > 0)),
|
|
49
|
+
];
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* SIGTERM/SIGKILL (or taskkill) every listener on `port`.
|
|
57
|
+
* Skips the current process.
|
|
58
|
+
*/
|
|
59
|
+
export async function forceFreePort(port, log) {
|
|
60
|
+
const pids = (await pidsListeningOnPort(port)).filter((pid) => pid !== process.pid);
|
|
61
|
+
if (pids.length === 0)
|
|
62
|
+
return [];
|
|
63
|
+
for (const pid of pids) {
|
|
64
|
+
log?.warn(`freeing port ${port}: stop pid ${pid}`);
|
|
65
|
+
try {
|
|
66
|
+
if (process.platform === "win32") {
|
|
67
|
+
await execFileAsync("taskkill", ["/PID", String(pid), "/T", "/F"], { windowsHide: true });
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
try {
|
|
71
|
+
process.kill(pid, "SIGTERM");
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
/* already gone */
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
log?.warn(`could not stop pid ${pid}: ${err instanceof Error ? err.message : String(err)}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Brief settle so the OS releases the bind.
|
|
83
|
+
await new Promise((r) => setTimeout(r, 400));
|
|
84
|
+
return pids;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=port.js.map
|
package/dist/port.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port.js","sourceRoot":"","sources":["../src/port.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,sDAAsD;AACtD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAY;IACpD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACpD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAY;IACrC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CACpC,SAAS,EACT,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,EACrB,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,CAClD,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC3C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,SAAS;YACrC,0EAA0E;YAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;gBAAE,SAAS;YACtE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;gBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAY;IAClC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CACpC,MAAM,EACN,CAAC,SAAS,IAAI,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EACnD,EAAE,SAAS,EAAE,GAAG,GAAG,IAAI,EAAE,CAC1B,CAAC;QACF,OAAO;YACL,GAAG,IAAI,GAAG,CACR,MAAM;iBACH,KAAK,CAAC,OAAO,CAAC;iBACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;iBAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC/C;SACF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,GAAe;IAEf,MAAM,IAAI,GAAG,CAAC,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CACnD,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAC7B,CAAC;IACF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,GAAG,EAAE,IAAI,CAAC,gBAAgB,IAAI,cAAc,GAAG,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC;YACH,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACjC,MAAM,aAAa,CACjB,UAAU,EACV,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EACjC,EAAE,WAAW,EAAE,IAAI,EAAE,CACtB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC/B,CAAC;gBAAC,MAAM,CAAC;oBACP,kBAAkB;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,EAAE,IAAI,CACP,sBAAsB,GAAG,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACjF,CAAC;QACJ,CAAC;IACH,CAAC;IACD,4CAA4C;IAC5C,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7C,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -104,6 +104,8 @@ export interface CreateAgentOptions {
|
|
|
104
104
|
readonly safety?: false | SessionSafetyOptions;
|
|
105
105
|
/** Default `parallel` — see runTurn `toolSettle`. */
|
|
106
106
|
readonly toolSettle?: "serial" | "parallel";
|
|
107
|
+
/** Cap concurrent settles; Face `agent-loop.maxParallelToolCalls`. */
|
|
108
|
+
readonly maxParallelToolCalls?: number;
|
|
107
109
|
/** Opt-in context compaction / one overflow retry. */
|
|
108
110
|
readonly compaction?: false | CompactionOptions;
|
|
109
111
|
/** Forwarded to runTurn for vision adapters. */
|