@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.
Files changed (198) hide show
  1. package/README.md +5 -0
  2. package/dist/commands/restart.d.ts +3 -0
  3. package/dist/commands/restart.d.ts.map +1 -0
  4. package/dist/commands/restart.js +32 -0
  5. package/dist/commands/restart.js.map +1 -0
  6. package/dist/commands/serve.d.ts.map +1 -1
  7. package/dist/commands/serve.js +38 -19
  8. package/dist/commands/serve.js.map +1 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +3 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/log.d.ts +19 -0
  13. package/dist/log.d.ts.map +1 -0
  14. package/dist/log.js +52 -0
  15. package/dist/log.js.map +1 -0
  16. package/dist/parse-args.d.ts +5 -1
  17. package/dist/parse-args.d.ts.map +1 -1
  18. package/dist/parse-args.js +37 -4
  19. package/dist/parse-args.js.map +1 -1
  20. package/dist/port.d.ts +9 -0
  21. package/dist/port.d.ts.map +1 -0
  22. package/dist/port.js +86 -0
  23. package/dist/port.js.map +1 -0
  24. package/node_modules/@xrkseek/core-agent/dist/index.d.ts +2 -0
  25. package/node_modules/@xrkseek/core-agent/dist/index.d.ts.map +1 -1
  26. package/node_modules/@xrkseek/core-agent/dist/index.js +3 -0
  27. package/node_modules/@xrkseek/core-agent/dist/index.js.map +1 -1
  28. package/node_modules/@xrkseek/core-agent-loop/dist/index.d.ts +5 -0
  29. package/node_modules/@xrkseek/core-agent-loop/dist/index.d.ts.map +1 -1
  30. package/node_modules/@xrkseek/core-agent-loop/dist/index.js +3 -0
  31. package/node_modules/@xrkseek/core-agent-loop/dist/index.js.map +1 -1
  32. package/node_modules/@xrkseek/core-agent-loop/dist/settle-batch.d.ts +5 -0
  33. package/node_modules/@xrkseek/core-agent-loop/dist/settle-batch.d.ts.map +1 -1
  34. package/node_modules/@xrkseek/core-agent-loop/dist/settle-batch.js +22 -2
  35. package/node_modules/@xrkseek/core-agent-loop/dist/settle-batch.js.map +1 -1
  36. package/node_modules/@xrkseek/core-session/dist/compaction.d.ts.map +1 -1
  37. package/node_modules/@xrkseek/core-session/dist/compaction.js.map +1 -1
  38. package/node_modules/@xrkseek/exec-shell/dist/index.d.ts +4 -1
  39. package/node_modules/@xrkseek/exec-shell/dist/index.d.ts.map +1 -1
  40. package/node_modules/@xrkseek/exec-shell/dist/index.js +18 -2
  41. package/node_modules/@xrkseek/exec-shell/dist/index.js.map +1 -1
  42. package/node_modules/@xrkseek/exec-web/dist/fetch-http.js +1 -1
  43. package/node_modules/@xrkseek/exec-web/dist/index.d.ts +9 -2
  44. package/node_modules/@xrkseek/exec-web/dist/index.d.ts.map +1 -1
  45. package/node_modules/@xrkseek/exec-web/dist/index.js +10 -7
  46. package/node_modules/@xrkseek/exec-web/dist/index.js.map +1 -1
  47. package/node_modules/@xrkseek/exec-web/dist/search-duckduckgo.d.ts +14 -0
  48. package/node_modules/@xrkseek/exec-web/dist/search-duckduckgo.d.ts.map +1 -0
  49. package/node_modules/@xrkseek/exec-web/dist/search-duckduckgo.js +139 -0
  50. package/node_modules/@xrkseek/exec-web/dist/search-duckduckgo.js.map +1 -0
  51. package/node_modules/@xrkseek/exec-web/dist/search-mcp-client.d.ts +21 -0
  52. package/node_modules/@xrkseek/exec-web/dist/search-mcp-client.d.ts.map +1 -0
  53. package/node_modules/@xrkseek/exec-web/dist/search-mcp-client.js +175 -0
  54. package/node_modules/@xrkseek/exec-web/dist/search-mcp-client.js.map +1 -0
  55. package/node_modules/@xrkseek/exec-web/dist/search-parallel-free.d.ts +12 -0
  56. package/node_modules/@xrkseek/exec-web/dist/search-parallel-free.d.ts.map +1 -0
  57. package/node_modules/@xrkseek/exec-web/dist/search-parallel-free.js +105 -0
  58. package/node_modules/@xrkseek/exec-web/dist/search-parallel-free.js.map +1 -0
  59. package/node_modules/@xrkseek/exec-web/dist/search-providers.d.ts +28 -3
  60. package/node_modules/@xrkseek/exec-web/dist/search-providers.d.ts.map +1 -1
  61. package/node_modules/@xrkseek/exec-web/dist/search-providers.js +150 -23
  62. package/node_modules/@xrkseek/exec-web/dist/search-providers.js.map +1 -1
  63. package/node_modules/@xrkseek/mcp/dist/client.d.ts.map +1 -1
  64. package/node_modules/@xrkseek/mcp/dist/client.js.map +1 -1
  65. package/node_modules/@xrkseek/mcp/dist/project-content.js +1 -1
  66. package/node_modules/@xrkseek/mcp/dist/project-content.js.map +1 -1
  67. package/node_modules/@xrkseek/preset-harness/dist/preset.d.ts +11 -0
  68. package/node_modules/@xrkseek/preset-harness/dist/preset.d.ts.map +1 -1
  69. package/node_modules/@xrkseek/preset-harness/dist/preset.js +12 -2
  70. package/node_modules/@xrkseek/preset-harness/dist/preset.js.map +1 -1
  71. package/node_modules/@xrkseek/preset-harness/dist/tsconfig.tsbuildinfo +1 -1
  72. package/node_modules/@xrkseek/preset-minimal/dist/tsconfig.tsbuildinfo +1 -1
  73. package/node_modules/@xrkseek/preset-server/dist/preset.d.ts.map +1 -1
  74. package/node_modules/@xrkseek/preset-server/dist/preset.js +4 -1
  75. package/node_modules/@xrkseek/preset-server/dist/preset.js.map +1 -1
  76. package/node_modules/@xrkseek/preset-server/dist/tsconfig.tsbuildinfo +1 -1
  77. package/node_modules/@xrkseek/protocol/dist/token-usage.d.ts +7 -1
  78. package/node_modules/@xrkseek/protocol/dist/token-usage.d.ts.map +1 -1
  79. package/node_modules/@xrkseek/protocol/dist/token-usage.js +49 -24
  80. package/node_modules/@xrkseek/protocol/dist/token-usage.js.map +1 -1
  81. package/node_modules/@xrkseek/server-config/dist/index.js +1 -1
  82. package/node_modules/@xrkseek/server-face/dist/context.d.ts +6 -5
  83. package/node_modules/@xrkseek/server-face/dist/context.d.ts.map +1 -1
  84. package/node_modules/@xrkseek/server-face/dist/context.js +1 -3
  85. package/node_modules/@xrkseek/server-face/dist/context.js.map +1 -1
  86. package/node_modules/@xrkseek/server-face/dist/dispatch.d.ts.map +1 -1
  87. package/node_modules/@xrkseek/server-face/dist/dispatch.js +4 -2
  88. package/node_modules/@xrkseek/server-face/dist/dispatch.js.map +1 -1
  89. package/node_modules/@xrkseek/server-face/dist/face-schema.d.ts +3 -2
  90. package/node_modules/@xrkseek/server-face/dist/face-schema.d.ts.map +1 -1
  91. package/node_modules/@xrkseek/server-face/dist/face-schema.js +16 -4
  92. package/node_modules/@xrkseek/server-face/dist/face-schema.js.map +1 -1
  93. package/node_modules/@xrkseek/server-face/dist/handlers/catalog.d.ts.map +1 -1
  94. package/node_modules/@xrkseek/server-face/dist/handlers/catalog.js +26 -12
  95. package/node_modules/@xrkseek/server-face/dist/handlers/catalog.js.map +1 -1
  96. package/node_modules/@xrkseek/server-face/dist/handlers/session-added.d.ts.map +1 -1
  97. package/node_modules/@xrkseek/server-face/dist/handlers/session-added.js +3 -2
  98. package/node_modules/@xrkseek/server-face/dist/handlers/session-added.js.map +1 -1
  99. package/node_modules/@xrkseek/server-face/dist/handlers/session.d.ts.map +1 -1
  100. package/node_modules/@xrkseek/server-face/dist/handlers/session.js +24 -27
  101. package/node_modules/@xrkseek/server-face/dist/handlers/session.js.map +1 -1
  102. package/node_modules/@xrkseek/server-face/dist/index.d.ts +4 -3
  103. package/node_modules/@xrkseek/server-face/dist/index.d.ts.map +1 -1
  104. package/node_modules/@xrkseek/server-face/dist/index.js +4 -3
  105. package/node_modules/@xrkseek/server-face/dist/index.js.map +1 -1
  106. package/node_modules/@xrkseek/server-face/dist/llm-provider-context.d.ts +44 -6
  107. package/node_modules/@xrkseek/server-face/dist/llm-provider-context.d.ts.map +1 -1
  108. package/node_modules/@xrkseek/server-face/dist/llm-provider-context.js +220 -34
  109. package/node_modules/@xrkseek/server-face/dist/llm-provider-context.js.map +1 -1
  110. package/node_modules/@xrkseek/server-face/dist/llm-resolve.d.ts.map +1 -1
  111. package/node_modules/@xrkseek/server-face/dist/llm-resolve.js +4 -7
  112. package/node_modules/@xrkseek/server-face/dist/llm-resolve.js.map +1 -1
  113. package/node_modules/@xrkseek/server-face/dist/model-catalog.d.ts +1 -1
  114. package/node_modules/@xrkseek/server-face/dist/model-catalog.d.ts.map +1 -1
  115. package/node_modules/@xrkseek/server-face/dist/model-catalog.js +23 -26
  116. package/node_modules/@xrkseek/server-face/dist/model-catalog.js.map +1 -1
  117. package/node_modules/@xrkseek/server-face/dist/presets-catalog.d.ts +13 -1
  118. package/node_modules/@xrkseek/server-face/dist/presets-catalog.d.ts.map +1 -1
  119. package/node_modules/@xrkseek/server-face/dist/presets-catalog.js +24 -9
  120. package/node_modules/@xrkseek/server-face/dist/presets-catalog.js.map +1 -1
  121. package/node_modules/@xrkseek/server-face/dist/session-cwd.d.ts +3 -0
  122. package/node_modules/@xrkseek/server-face/dist/session-cwd.d.ts.map +1 -0
  123. package/node_modules/@xrkseek/server-face/dist/session-cwd.js +19 -0
  124. package/node_modules/@xrkseek/server-face/dist/session-cwd.js.map +1 -0
  125. package/node_modules/@xrkseek/server-face/dist/settings-credentials.d.ts +1 -1
  126. package/node_modules/@xrkseek/server-face/dist/settings-credentials.d.ts.map +1 -1
  127. package/node_modules/@xrkseek/server-face/dist/settings-credentials.js +116 -14
  128. package/node_modules/@xrkseek/server-face/dist/settings-credentials.js.map +1 -1
  129. package/node_modules/@xrkseek/server-face/dist/settings-document.d.ts +1 -1
  130. package/node_modules/@xrkseek/server-face/dist/settings-document.d.ts.map +1 -1
  131. package/node_modules/@xrkseek/server-face/dist/settings-document.js +25 -22
  132. package/node_modules/@xrkseek/server-face/dist/settings-document.js.map +1 -1
  133. package/node_modules/@xrkseek/server-face/dist/settings-layers.d.ts +3 -0
  134. package/node_modules/@xrkseek/server-face/dist/settings-layers.d.ts.map +1 -0
  135. package/node_modules/@xrkseek/server-face/dist/settings-layers.js +19 -0
  136. package/node_modules/@xrkseek/server-face/dist/settings-layers.js.map +1 -0
  137. package/node_modules/@xrkseek/server-face/dist/settings-schemas.d.ts.map +1 -1
  138. package/node_modules/@xrkseek/server-face/dist/settings-schemas.js +18 -11
  139. package/node_modules/@xrkseek/server-face/dist/settings-schemas.js.map +1 -1
  140. package/node_modules/@xrkseek/server-face/dist/workspace-face.d.ts.map +1 -1
  141. package/node_modules/@xrkseek/server-face/dist/workspace-face.js +26 -9
  142. package/node_modules/@xrkseek/server-face/dist/workspace-face.js.map +1 -1
  143. package/node_modules/@xrkseek/server-face/dist/workspace-registry.d.ts +6 -0
  144. package/node_modules/@xrkseek/server-face/dist/workspace-registry.d.ts.map +1 -1
  145. package/node_modules/@xrkseek/server-face/dist/workspace-registry.js +39 -1
  146. package/node_modules/@xrkseek/server-face/dist/workspace-registry.js.map +1 -1
  147. package/node_modules/@xrkseek/server-face/dist/workspace-store.d.ts +4 -0
  148. package/node_modules/@xrkseek/server-face/dist/workspace-store.d.ts.map +1 -1
  149. package/node_modules/@xrkseek/server-face/dist/workspace-store.js +43 -1
  150. package/node_modules/@xrkseek/server-face/dist/workspace-store.js.map +1 -1
  151. package/node_modules/@xrkseek/server-host/dist/index.d.ts +19 -2
  152. package/node_modules/@xrkseek/server-host/dist/index.d.ts.map +1 -1
  153. package/node_modules/@xrkseek/server-host/dist/index.js +150 -23
  154. package/node_modules/@xrkseek/server-host/dist/index.js.map +1 -1
  155. package/node_modules/@xrkseek/server-host/dist/log.d.ts +14 -0
  156. package/node_modules/@xrkseek/server-host/dist/log.d.ts.map +1 -0
  157. package/node_modules/@xrkseek/server-host/dist/log.js +6 -0
  158. package/node_modules/@xrkseek/server-host/dist/log.js.map +1 -0
  159. package/node_modules/@xrkseek/server-host/dist/mcp-wire.d.ts +9 -4
  160. package/node_modules/@xrkseek/server-host/dist/mcp-wire.d.ts.map +1 -1
  161. package/node_modules/@xrkseek/server-host/dist/mcp-wire.js +42 -7
  162. package/node_modules/@xrkseek/server-host/dist/mcp-wire.js.map +1 -1
  163. package/node_modules/@xrkseek/server-host/dist/standing-tools.js +2 -2
  164. package/node_modules/@xrkseek/server-host/dist/standing-tools.js.map +1 -1
  165. package/node_modules/@xrkseek/server-http/dist/index.d.ts +9 -0
  166. package/node_modules/@xrkseek/server-http/dist/index.d.ts.map +1 -1
  167. package/node_modules/@xrkseek/server-http/dist/index.js +9 -0
  168. package/node_modules/@xrkseek/server-http/dist/index.js.map +1 -1
  169. package/package.json +1 -1
  170. package/product-web/boot.json +1 -1
  171. package/product-web/plugins/@xrkseek/client-locale/client.js +3 -3
  172. package/product-web/plugins/@xrkseek/client-ui-agent-preset/client.js +33 -33
  173. package/product-web/plugins/@xrkseek/client-ui-commands/client.js +7 -7
  174. package/product-web/plugins/@xrkseek/client-ui-conversation/client.js +156 -156
  175. package/product-web/plugins/@xrkseek/client-ui-deliverables/client.js +5 -5
  176. package/product-web/plugins/@xrkseek/client-ui-directory-picker-browse/client.js +29 -29
  177. package/product-web/plugins/@xrkseek/client-ui-goal/client.js +6 -6
  178. package/product-web/plugins/@xrkseek/client-ui-input-trigger/client.js +5 -5
  179. package/product-web/plugins/@xrkseek/client-ui-jobs/client.js +10 -10
  180. package/product-web/plugins/@xrkseek/client-ui-layout/client.js +4 -4
  181. package/product-web/plugins/@xrkseek/client-ui-message-feedback/client.js +4 -4
  182. package/product-web/plugins/@xrkseek/client-ui-model-selection/client.js +19 -19
  183. package/product-web/plugins/@xrkseek/client-ui-permission-presets/client.js +4 -4
  184. package/product-web/plugins/@xrkseek/client-ui-plan/client.js +1 -1
  185. package/product-web/plugins/@xrkseek/client-ui-settings/client.js +7 -1
  186. package/product-web/plugins/@xrkseek/client-ui-settings-general/client.js +16 -16
  187. package/product-web/plugins/@xrkseek/client-ui-settings-models/client.js +53 -53
  188. package/product-web/plugins/@xrkseek/client-ui-settings-plugin-inventory/client.js +12 -12
  189. package/product-web/plugins/@xrkseek/client-ui-settings-plugins/client.js +615 -548
  190. package/product-web/plugins/@xrkseek/client-ui-sidebar/client.js +14 -14
  191. package/product-web/plugins/@xrkseek/client-ui-skill/client.js +9 -9
  192. package/product-web/plugins/@xrkseek/client-ui-subagent/client.js +16 -16
  193. package/product-web/plugins/@xrkseek/client-ui-theme/client.js +3 -3
  194. package/product-web/plugins/@xrkseek/client-ui-tool/client.js +37 -37
  195. package/product-web/plugins/@xrkseek/client-ui-trajectory/client.js +144 -144
  196. package/product-web/plugins/@xrkseek/client-ui-user-questions/client.js +30 -30
  197. package/product-web/plugins/@xrkseek/client-ui-workflow-run/client.js +11 -11
  198. 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,3 @@
1
+ import type { ParsedArgs } from "../parse-args.js";
2
+ export declare function runRestart(args: ParsedArgs): Promise<number>;
3
+ //# sourceMappingURL=restart.d.ts.map
@@ -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":"AAWA,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA4DnE,wBAAsB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA2FhE;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIzE"}
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"}
@@ -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
- function openProductUrl(url) {
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
- process.stderr.write(`warn: could not open browser: ${err.message}\n`);
28
+ log.warn(`could not open browser: ${err.message}`);
25
29
  });
26
30
  child.unref();
27
31
  }
28
- function factoryForPreset(preset, workspaceRoot, policy) {
29
- if (preset === "server" || preset === "harness") {
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
- process.stderr.write(`error: ${message}\n`);
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
- process.stdout.write(`xrk-harness serve ${origin}/\n`);
113
+ log.info(`xrk-harness serve ${origin}/`);
102
114
  const uiRel = path.relative(repoRoot(), webDist) || webDist;
103
- process.stdout.write(` workspace=${config.runtime.workspaceRoot}\n`);
104
- process.stdout.write(` preset=${preset} ui=${uiRel} sessions=${sessionsDir ?? "memory"}\n`);
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
- process.stdout.write(" apiKey=set\n");
119
+ log.info(" apiKey=set");
107
120
  }
108
121
  if (policy)
109
- process.stdout.write(" policy=on\n");
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
- process.stdout.write("shutting down...\n");
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":"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"}
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,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,CAgDxE"}
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":"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"}
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
@@ -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"}
@@ -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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parse-args.d.ts","sourceRoot":"","sources":["../src/parse-args.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,QAAQ,GAAG,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;AAE7E,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,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;AA4BD,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CA2J7D;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAgCjC"}
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"}
@@ -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
- let preset = "minimal";
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, default: minimal)
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 server
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parse-args.js","sourceRoot":"","sources":["../src/parse-args.ts"],"names":[],"mappings":"AAkBA,SAAS,UAAU,CAAC,GAAuB;IACzC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QACzC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,OAAO,KAAgC,CAAC;QAC1C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,UAAU,IAAI,uGAAuG,CACtH,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,GAAuB;IACxC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,SAAS,CAAC,OAAsD;IACvE,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,MAAM;QACd,cAAc,EAAE,KAAK;QACrB,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE;QACxB,KAAK,EAAE,EAAE;QACT,YAAY,EAAE,OAAO;QACrB,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,IAAI;QACb,GAAG,OAAO;KACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAuB;IAC/C,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IAEvB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAClE,OAAO,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAG,CAAC;IAC5B,IAAI,OAAmB,CAAC;IACxB,IACE,KAAK,KAAK,KAAK;QACf,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,aAAa;QACvB,KAAK,KAAK,OAAO;QACjB,KAAK,KAAK,MAAM,EAChB,CAAC;QACD,OAAO,GAAG,KAAK,CAAC;IAClB,CAAC;SAAM,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QAC3B,OAAO,GAAG,OAAO,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,oBAAoB,KAAK,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,MAAM,GAAG,SAAS,CAAC;IACvB,IAAI,cAAkC,CAAC;IACvC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC9B,IAAI,QAA4B,CAAC;IACjC,IAAI,YAAY,GAAqB,OAAO,CAAC;IAC7C,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,IAAwB,CAAC;IAC7B,IAAI,IAAwB,CAAC;IAE7B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAG,CAAC;QACxB,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACjC,IAAI,GAAG,IAAI,CAAC;YACZ,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACpC,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YACnB,IAAI,GAAG,IAAI,CAAC;YACZ,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,cAAc,EAAE,CAAC;YACzB,OAAO,GAAG,KAAK,CAAC;YAChB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,UAAU,EAAE,CAAC;YACrB,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC;YAChC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACrC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,UAAU,EAAE,CAAC;YACrB,cAAc,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;YACpC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC7C,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,aAAa,EAAE,CAAC;YACxB,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,SAAS,CAAC;YACtC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YACjC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC3C,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACxB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACtC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,gBAAgB,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,OAAO,CAAC;YAClC,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC;YAClD,CAAC;YACD,YAAY,GAAG,CAAC,CAAC;YACjB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC;YAClD,CAAC;YACD,YAAY,GAAG,CAAC,CAAC;YACjB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YACnB,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACnD,cAAc,CAAC,IAAI,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5B,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACjC,cAAc,CAAC,IAAI,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YACnB,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5B,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5C,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,cAAc,GAClB,cAAc,KAAK,SAAS,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IACzD,MAAM,MAAM,GACV,cAAc,KAAK,SAAS;QAC1B,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YACtB,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;YACvB,CAAC,CAAC,MAAM,CAAC;IAEf,OAAO;QACL,OAAO,EAAE,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;QACvE,MAAM;QACN,MAAM;QACN,cAAc;QACd,SAAS;QACT,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC;QAC3B,YAAY;QACZ,IAAI;QACJ,OAAO;QACP,IAAI;QACJ,OAAO;QACP,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BR,CAAC;AACF,CAAC"}
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
@@ -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. */