@clawops/cli 2.1.3 → 2.2.0

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 (51) hide show
  1. package/README.md +120 -2
  2. package/dist/agent-activity-25FAWLAI.js +16 -0
  3. package/dist/{apply-JARPVA5Y.js → apply-F5SQ2ZOS.js} +7 -7
  4. package/dist/backup-flows-NDP5JTR3.js +29 -0
  5. package/dist/{bootstrap-3PBVY7MA.js → bootstrap-32TZXVDF.js} +3 -3
  6. package/dist/bootstrap.sh.tmpl +4 -0
  7. package/dist/chunk-27335SIH.js +51 -0
  8. package/dist/{chunk-E4NJSJ54.js → chunk-4PY6PN4G.js} +51 -7
  9. package/dist/{chunk-PTCVFLZ3.js → chunk-66R52R7K.js} +7 -11
  10. package/dist/{chunk-7T4CIT7C.js → chunk-AX65JMDZ.js} +15 -15
  11. package/dist/{chunk-TYHTISI5.js → chunk-CQOYUWR7.js} +610 -104
  12. package/dist/chunk-E6BRQK67.js +289 -0
  13. package/dist/chunk-LV7UO5CG.js +82 -0
  14. package/dist/{chunk-GIEVAGEK.js → chunk-N5ZYUTZS.js} +16 -1
  15. package/dist/{chunk-CPCO6UJK.js → chunk-OUQVKIIA.js} +368 -30
  16. package/dist/{chunk-XFN3YDZE.js → chunk-PASAVVNS.js} +1 -1
  17. package/dist/chunk-PCSX6Y3U.js +297 -0
  18. package/dist/chunk-POYS3EVQ.js +14 -0
  19. package/dist/chunk-SX75L2T3.js +46 -0
  20. package/dist/{chunk-2Z7J3ERQ.js → chunk-TYNMOYVM.js} +1 -1
  21. package/dist/{chunk-2I7KCMXZ.js → chunk-UAJJEDCJ.js} +2 -2
  22. package/dist/{chunk-NUDIHZEH.js → chunk-WPZIJONN.js} +14 -12
  23. package/dist/{chunk-CHNSL3TC.js → chunk-YPVWF7IA.js} +1 -1
  24. package/dist/{chunk-3OLUJPCB.js → chunk-Z3XLWZWF.js} +1 -1
  25. package/dist/cli.js +303 -698
  26. package/dist/conn-M2V5HBPJ.js +9 -0
  27. package/dist/{context-WOKSKAIA.js → context-EHSLWKSH.js} +2 -2
  28. package/dist/{docker-3PDO4TS7.js → docker-IKM5GRMC.js} +2 -2
  29. package/dist/{flows-HGJIA6EL.js → flows-6B2I6TRW.js} +5 -5
  30. package/dist/{generate-NE54BATS.js → generate-4YYNW3IU.js} +5 -4
  31. package/dist/{harden-RUOUA5BV.js → harden-UHAOVQMZ.js} +3 -3
  32. package/dist/{mcp-wire-FIO5DFBY.js → mcp-wire-BXF4DJFT.js} +21 -14
  33. package/dist/migrate-flow-24XA4GZL.js +25 -0
  34. package/dist/{package-MF5LPITL.js → package-HYGHRX35.js} +3 -1
  35. package/dist/{pool-PIIKJ4L2.js → pool-NT4XBSUT.js} +2 -2
  36. package/dist/{privileged-JFA6LLTV.js → privileged-5Y6O4H7Z.js} +1 -1
  37. package/dist/{ready-KDNRBNSU.js → ready-IJEUBFVX.js} +2 -2
  38. package/dist/{remote-config-3HZLUWEA.js → remote-config-OZYBMBSK.js} +3 -3
  39. package/dist/{runtime-X3KW5TCP.js → runtime-VW53TU2W.js} +5 -1
  40. package/dist/{server-OXWHBTXK.js → server-E3YA32ND.js} +21 -14
  41. package/dist/ssh-HOM7GF3M.js +13 -0
  42. package/dist/stack-delete-NTIGKWUF.js +13 -0
  43. package/dist/{tailscale-cutover-EKAQSDXP.js → tailscale-cutover-V42HO5UM.js} +1 -1
  44. package/dist/{validate-JXKN5WD6.js → validate-DZE6LFEB.js} +1 -1
  45. package/dist/{wait-WO72TRRQ.js → wait-DOUNNJNN.js} +2 -2
  46. package/package.json +3 -1
  47. package/spec/mcp-tools.yaml +213 -7
  48. package/dist/logs-5A7YYA53.js +0 -15
  49. package/dist/ssh-VAI5DU5M.js +0 -11
  50. package/dist/upgrade-ULD4KFYC.js +0 -88
  51. /package/dist/{chunk-NUL5F6YV.js → chunk-SOZ62ZXW.js} +0 -0
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ resolveConn
4
+ } from "./chunk-SX75L2T3.js";
5
+ import "./chunk-POYS3EVQ.js";
6
+ import "./chunk-KGXPLI7W.js";
7
+ export {
8
+ resolveConn
9
+ };
@@ -3,9 +3,9 @@ import {
3
3
  buildContext,
4
4
  loadAdapterModule
5
5
  } from "./chunk-AVERNLUY.js";
6
- import "./chunk-CHNSL3TC.js";
6
+ import "./chunk-YPVWF7IA.js";
7
7
  import "./chunk-VUFMZEIM.js";
8
- import "./chunk-GIEVAGEK.js";
8
+ import "./chunk-N5ZYUTZS.js";
9
9
  import "./chunk-VOEJYRIK.js";
10
10
  import "./chunk-EI7CQQ7D.js";
11
11
  import "./chunk-FEK7VJAY.js";
@@ -3,8 +3,8 @@ import {
3
3
  containerStatus,
4
4
  inspectContainer,
5
5
  looksLikeStillBooting
6
- } from "./chunk-3OLUJPCB.js";
7
- import "./chunk-NUDIHZEH.js";
6
+ } from "./chunk-Z3XLWZWF.js";
7
+ import "./chunk-WPZIJONN.js";
8
8
  export {
9
9
  containerStatus,
10
10
  inspectContainer,
@@ -2,8 +2,8 @@
2
2
 
3
3
  // src/harden/flows.ts
4
4
  async function cutOverToTailnet(ctx, conn, config) {
5
- const { withRemoteExec } = await import("./harden-RUOUA5BV.js");
6
- const { verifyTailnetAddress, probeSsh } = await import("./tailscale-cutover-EKAQSDXP.js");
5
+ const { withRemoteExec } = await import("./harden-UHAOVQMZ.js");
6
+ const { verifyTailnetAddress, probeSsh } = await import("./tailscale-cutover-V42HO5UM.js");
7
7
  const { setConfig } = await import("./store-YOLQYXMB.js");
8
8
  const result = await withRemoteExec(
9
9
  conn,
@@ -49,10 +49,10 @@ async function revertTailnet(ctx, config) {
49
49
  message: `Stack "${ctx.stackName}" is not using a tailnet address; nothing to revert.`
50
50
  };
51
51
  }
52
- const { buildContext } = await import("./context-WOKSKAIA.js");
52
+ const { buildContext } = await import("./context-EHSLWKSH.js");
53
53
  const { extractBaseOutputs } = await import("./outputs-DJHBY7EE.js");
54
- const { probeSsh, leaveTailnet } = await import("./tailscale-cutover-EKAQSDXP.js");
55
- const { withRemoteExec } = await import("./harden-RUOUA5BV.js");
54
+ const { probeSsh, leaveTailnet } = await import("./tailscale-cutover-V42HO5UM.js");
55
+ const { withRemoteExec } = await import("./harden-UHAOVQMZ.js");
56
56
  const { getConfig, setConfig } = await import("./store-YOLQYXMB.js");
57
57
  const { forgetHost } = await import("./known-hosts-file-I3Q3NBYQ.js");
58
58
  const direct = buildContext({ stack: ctx.stackName, ignoreTailnet: true });
@@ -5,13 +5,14 @@ import {
5
5
  isInstanceAlias,
6
6
  parseDiffForTest,
7
7
  planId
8
- } from "./chunk-PTCVFLZ3.js";
9
- import "./chunk-XFN3YDZE.js";
8
+ } from "./chunk-66R52R7K.js";
9
+ import "./chunk-POYS3EVQ.js";
10
+ import "./chunk-PASAVVNS.js";
10
11
  import "./chunk-AVERNLUY.js";
11
- import "./chunk-CHNSL3TC.js";
12
+ import "./chunk-YPVWF7IA.js";
12
13
  import "./chunk-JW5A7E3X.js";
13
14
  import "./chunk-VUFMZEIM.js";
14
- import "./chunk-GIEVAGEK.js";
15
+ import "./chunk-N5ZYUTZS.js";
15
16
  import "./chunk-VOEJYRIK.js";
16
17
  import "./chunk-EI7CQQ7D.js";
17
18
  import "./chunk-FEK7VJAY.js";
@@ -6,8 +6,8 @@ import {
6
6
  import {
7
7
  acquireSession,
8
8
  drainPool
9
- } from "./chunk-2Z7J3ERQ.js";
10
- import "./chunk-E4NJSJ54.js";
9
+ } from "./chunk-TYNMOYVM.js";
10
+ import "./chunk-4PY6PN4G.js";
11
11
  import "./chunk-MC5ATCXS.js";
12
12
  import {
13
13
  managementToken
@@ -16,7 +16,7 @@ import {
16
16
  PUBLISH_INSPECT_CMD,
17
17
  publishForRestart,
18
18
  publishedGatewayPort
19
- } from "./chunk-GIEVAGEK.js";
19
+ } from "./chunk-N5ZYUTZS.js";
20
20
  import {
21
21
  GATEWAY_PORT
22
22
  } from "./chunk-VOEJYRIK.js";
@@ -1,31 +1,38 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  MCP_HTTP_PORT
4
- } from "./chunk-TYHTISI5.js";
5
- import "./chunk-7T4CIT7C.js";
6
- import "./chunk-PTCVFLZ3.js";
4
+ } from "./chunk-CQOYUWR7.js";
5
+ import "./chunk-E6BRQK67.js";
6
+ import "./chunk-PCSX6Y3U.js";
7
+ import "./chunk-LV7UO5CG.js";
8
+ import "./chunk-AX65JMDZ.js";
9
+ import "./chunk-SX75L2T3.js";
10
+ import "./chunk-27335SIH.js";
11
+ import "./chunk-66R52R7K.js";
12
+ import "./chunk-POYS3EVQ.js";
7
13
  import "./chunk-BOPSG2LI.js";
8
- import "./chunk-6ZFIFDBJ.js";
9
14
  import "./chunk-3QJBNAHW.js";
10
- import "./chunk-2I7KCMXZ.js";
11
- import "./chunk-XFN3YDZE.js";
15
+ import "./chunk-UAJJEDCJ.js";
16
+ import "./chunk-PASAVVNS.js";
12
17
  import "./chunk-55UMO37O.js";
13
18
  import "./chunk-AEEMRFZV.js";
14
19
  import "./chunk-AVERNLUY.js";
15
- import "./chunk-2Z7J3ERQ.js";
16
- import "./chunk-E4NJSJ54.js";
20
+ import "./chunk-GAZPPSKU.js";
21
+ import "./chunk-TYNMOYVM.js";
22
+ import "./chunk-4PY6PN4G.js";
17
23
  import "./chunk-MC5ATCXS.js";
18
- import "./chunk-CPCO6UJK.js";
19
- import "./chunk-NUL5F6YV.js";
20
- import "./chunk-3OLUJPCB.js";
24
+ import "./chunk-OUQVKIIA.js";
25
+ import "./chunk-SOZ62ZXW.js";
26
+ import "./chunk-6ZFIFDBJ.js";
27
+ import "./chunk-Z3XLWZWF.js";
21
28
  import {
22
29
  execPrivileged
23
- } from "./chunk-NUDIHZEH.js";
24
- import "./chunk-CHNSL3TC.js";
30
+ } from "./chunk-WPZIJONN.js";
31
+ import "./chunk-YPVWF7IA.js";
25
32
  import "./chunk-JW5A7E3X.js";
26
33
  import "./chunk-LT4XMO5D.js";
27
34
  import "./chunk-VUFMZEIM.js";
28
- import "./chunk-GIEVAGEK.js";
35
+ import "./chunk-N5ZYUTZS.js";
29
36
  import "./chunk-VOEJYRIK.js";
30
37
  import "./chunk-EI7CQQ7D.js";
31
38
  import "./chunk-FEK7VJAY.js";
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ PREMIGRATION_ARCHIVE,
4
+ SYNTHESISED_CONFIG,
5
+ migrationQuestion,
6
+ migrationResult,
7
+ migrationSteps,
8
+ prepareMigration,
9
+ runMigration
10
+ } from "./chunk-E6BRQK67.js";
11
+ import "./chunk-GAZPPSKU.js";
12
+ import "./chunk-JW5A7E3X.js";
13
+ import "./chunk-LT4XMO5D.js";
14
+ import "./chunk-N5ZYUTZS.js";
15
+ import "./chunk-VOEJYRIK.js";
16
+ import "./chunk-EI7CQQ7D.js";
17
+ export {
18
+ PREMIGRATION_ARCHIVE,
19
+ SYNTHESISED_CONFIG,
20
+ migrationQuestion,
21
+ migrationResult,
22
+ migrationSteps,
23
+ prepareMigration,
24
+ runMigration
25
+ };
@@ -2,7 +2,7 @@
2
2
 
3
3
  // package.json
4
4
  var name = "@clawops/cli";
5
- var version = "2.1.3";
5
+ var version = "2.2.0";
6
6
  var description = "Deploy self-hosted OpenClaw to AWS, GCP, Azure or a local VM \u2014 a CLI and an MCP server in one.";
7
7
  var keywords = [
8
8
  "openclaw",
@@ -62,6 +62,7 @@ var scripts = {
62
62
  "test:pulumi": "vitest run tests/providers/aws/program.test.ts tests/providers/azure/program.test.ts",
63
63
  "test:changed": "vitest --changed",
64
64
  "test:integration": "vitest run --config vitest.integration.config.ts",
65
+ "test:e2e:local": "pnpm build && CLAWOPS_E2E_LOCAL=1 vitest run --config vitest.integration.config.ts tests/e2e/local",
65
66
  "test:cloud": "bash scripts/e2e/cloud.sh",
66
67
  typecheck: "NODE_OPTIONS=--max-old-space-size=4096 tsc --noEmit",
67
68
  lint: "eslint --max-warnings=0 src tests scripts",
@@ -73,6 +74,7 @@ var scripts = {
73
74
  "verify:pack": "node scripts/dev/verify-pack.mjs",
74
75
  "verify:mcp": "node scripts/dev/mcp-probe.mjs",
75
76
  "verify:docker": "node scripts/dev/verify-docker.mjs",
77
+ "verify:docs": "node scripts/dev/check-doc-links.mjs",
76
78
  "version:packages": "changeset version && node scripts/sync-server-json.mjs",
77
79
  "sync:server-json": "node scripts/sync-server-json.mjs"
78
80
  };
@@ -2,8 +2,8 @@
2
2
  import {
3
3
  acquireSession,
4
4
  drainPool
5
- } from "./chunk-2Z7J3ERQ.js";
6
- import "./chunk-E4NJSJ54.js";
5
+ } from "./chunk-TYNMOYVM.js";
6
+ import "./chunk-4PY6PN4G.js";
7
7
  import "./chunk-MC5ATCXS.js";
8
8
  import "./chunk-KGXPLI7W.js";
9
9
  export {
@@ -6,7 +6,7 @@ import {
6
6
  shellQuote,
7
7
  streamPrivileged,
8
8
  sudoWrap
9
- } from "./chunk-NUDIHZEH.js";
9
+ } from "./chunk-WPZIJONN.js";
10
10
  export {
11
11
  execPrivileged,
12
12
  execPrivilegedWithInput,
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  containerStatus,
4
4
  looksLikeStillBooting
5
- } from "./chunk-3OLUJPCB.js";
5
+ } from "./chunk-Z3XLWZWF.js";
6
6
  import {
7
7
  execPrivileged
8
- } from "./chunk-NUDIHZEH.js";
8
+ } from "./chunk-WPZIJONN.js";
9
9
  import {
10
10
  interpretProbe,
11
11
  probeCommand
@@ -8,9 +8,9 @@ import {
8
8
  deepMerge,
9
9
  readRemoteConfig,
10
10
  restartGateway
11
- } from "./chunk-2I7KCMXZ.js";
12
- import "./chunk-NUDIHZEH.js";
13
- import "./chunk-GIEVAGEK.js";
11
+ } from "./chunk-UAJJEDCJ.js";
12
+ import "./chunk-WPZIJONN.js";
13
+ import "./chunk-N5ZYUTZS.js";
14
14
  import "./chunk-VOEJYRIK.js";
15
15
  import "./chunk-EI7CQQ7D.js";
16
16
  export {
@@ -5,19 +5,21 @@ import {
5
5
  CONFIG_MOUNT_PATH,
6
6
  CONTAINER_UID,
7
7
  ENV_FILE_PATH,
8
+ GATEWAY_STOP_COMMAND,
8
9
  PUBLISH_INSPECT_CMD,
9
10
  SECURITY_FLAGS,
10
11
  STATE_DIR_CONTAINER,
11
12
  STATE_DIR_HOST_LINUX,
12
13
  STATE_DIR_HOST_MACOS,
13
14
  SUPERVISOR_ENV,
15
+ SYSTEMD_DROPIN,
14
16
  configPathForOS,
15
17
  gatewayRunArgs,
16
18
  gatewayRunCommand,
17
19
  publishForRestart,
18
20
  publishedGatewayPort,
19
21
  stateDirForOS
20
- } from "./chunk-GIEVAGEK.js";
22
+ } from "./chunk-N5ZYUTZS.js";
21
23
  import {
22
24
  GATEWAY_PORT
23
25
  } from "./chunk-VOEJYRIK.js";
@@ -29,12 +31,14 @@ export {
29
31
  CONTAINER_UID,
30
32
  ENV_FILE_PATH,
31
33
  GATEWAY_PORT,
34
+ GATEWAY_STOP_COMMAND,
32
35
  PUBLISH_INSPECT_CMD,
33
36
  SECURITY_FLAGS,
34
37
  STATE_DIR_CONTAINER,
35
38
  STATE_DIR_HOST_LINUX,
36
39
  STATE_DIR_HOST_MACOS,
37
40
  SUPERVISOR_ENV,
41
+ SYSTEMD_DROPIN,
38
42
  configPathForOS,
39
43
  gatewayRunArgs,
40
44
  gatewayRunCommand,
@@ -5,29 +5,36 @@ import {
5
5
  bearerFrom,
6
6
  isLoopbackBind,
7
7
  serveMcp
8
- } from "./chunk-TYHTISI5.js";
9
- import "./chunk-7T4CIT7C.js";
10
- import "./chunk-PTCVFLZ3.js";
8
+ } from "./chunk-CQOYUWR7.js";
9
+ import "./chunk-E6BRQK67.js";
10
+ import "./chunk-PCSX6Y3U.js";
11
+ import "./chunk-LV7UO5CG.js";
12
+ import "./chunk-AX65JMDZ.js";
13
+ import "./chunk-SX75L2T3.js";
14
+ import "./chunk-27335SIH.js";
15
+ import "./chunk-66R52R7K.js";
16
+ import "./chunk-POYS3EVQ.js";
11
17
  import "./chunk-BOPSG2LI.js";
12
- import "./chunk-6ZFIFDBJ.js";
13
18
  import "./chunk-3QJBNAHW.js";
14
- import "./chunk-2I7KCMXZ.js";
15
- import "./chunk-XFN3YDZE.js";
19
+ import "./chunk-UAJJEDCJ.js";
20
+ import "./chunk-PASAVVNS.js";
16
21
  import "./chunk-55UMO37O.js";
17
22
  import "./chunk-AEEMRFZV.js";
18
23
  import "./chunk-AVERNLUY.js";
19
- import "./chunk-2Z7J3ERQ.js";
20
- import "./chunk-E4NJSJ54.js";
24
+ import "./chunk-GAZPPSKU.js";
25
+ import "./chunk-TYNMOYVM.js";
26
+ import "./chunk-4PY6PN4G.js";
21
27
  import "./chunk-MC5ATCXS.js";
22
- import "./chunk-CPCO6UJK.js";
23
- import "./chunk-NUL5F6YV.js";
24
- import "./chunk-3OLUJPCB.js";
25
- import "./chunk-NUDIHZEH.js";
26
- import "./chunk-CHNSL3TC.js";
28
+ import "./chunk-OUQVKIIA.js";
29
+ import "./chunk-SOZ62ZXW.js";
30
+ import "./chunk-6ZFIFDBJ.js";
31
+ import "./chunk-Z3XLWZWF.js";
32
+ import "./chunk-WPZIJONN.js";
33
+ import "./chunk-YPVWF7IA.js";
27
34
  import "./chunk-JW5A7E3X.js";
28
35
  import "./chunk-LT4XMO5D.js";
29
36
  import "./chunk-VUFMZEIM.js";
30
- import "./chunk-GIEVAGEK.js";
37
+ import "./chunk-N5ZYUTZS.js";
31
38
  import "./chunk-VOEJYRIK.js";
32
39
  import "./chunk-EI7CQQ7D.js";
33
40
  import "./chunk-FEK7VJAY.js";
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ connect,
4
+ describeConnectError,
5
+ diagnoseConnectError
6
+ } from "./chunk-4PY6PN4G.js";
7
+ import "./chunk-MC5ATCXS.js";
8
+ import "./chunk-KGXPLI7W.js";
9
+ export {
10
+ connect,
11
+ describeConnectError,
12
+ diagnoseConnectError
13
+ };
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ checkStackDelete,
4
+ deleteStackFromConfig,
5
+ forgetNotice
6
+ } from "./chunk-LV7UO5CG.js";
7
+ import "./chunk-GFIR2IIJ.js";
8
+ import "./chunk-KGXPLI7W.js";
9
+ export {
10
+ checkStackDelete,
11
+ deleteStackFromConfig,
12
+ forgetNotice
13
+ };
@@ -76,7 +76,7 @@ async function verifyTailnetAddress(publicConn, deps) {
76
76
  return { ok: true, ip, ...status.hostname ? { hostname: status.hostname } : {}, pinned };
77
77
  }
78
78
  async function probeSsh(conn, signal) {
79
- const { connect } = await import("./ssh-VAI5DU5M.js");
79
+ const { connect } = await import("./ssh-HOM7GF3M.js");
80
80
  let session;
81
81
  try {
82
82
  session = await connect({
@@ -4,7 +4,7 @@ import {
4
4
  validatePlan,
5
5
  validatePlanConfig,
6
6
  validatePlanNetwork
7
- } from "./chunk-XFN3YDZE.js";
7
+ } from "./chunk-PASAVVNS.js";
8
8
  import "./chunk-JW5A7E3X.js";
9
9
  export {
10
10
  assertValidPlan,
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  connect
4
- } from "./chunk-E4NJSJ54.js";
4
+ } from "./chunk-4PY6PN4G.js";
5
5
  import "./chunk-MC5ATCXS.js";
6
6
  import {
7
7
  NetworkError
@@ -36,7 +36,7 @@ async function waitForSsh(conn, opts = {}) {
36
36
  if (opts.signal?.aborted) throw new NetworkError("Waiting for SSH was aborted");
37
37
  attempts++;
38
38
  try {
39
- const session = await connect2({ ...conn, signal: opts.signal });
39
+ const session = await connect2({ ...conn, awaitingBoot: true, signal: opts.signal });
40
40
  if (attempts > 1) opts.onProgress?.(`SSH is up after ${attempts} attempts.`);
41
41
  return session;
42
42
  } catch (err) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clawops/cli",
3
- "version": "2.1.3",
3
+ "version": "2.2.0",
4
4
  "description": "Deploy self-hosted OpenClaw to AWS, GCP, Azure or a local VM — a CLI and an MCP server in one.",
5
5
  "keywords": [
6
6
  "openclaw",
@@ -59,6 +59,7 @@
59
59
  "test:pulumi": "vitest run tests/providers/aws/program.test.ts tests/providers/azure/program.test.ts",
60
60
  "test:changed": "vitest --changed",
61
61
  "test:integration": "vitest run --config vitest.integration.config.ts",
62
+ "test:e2e:local": "pnpm build && CLAWOPS_E2E_LOCAL=1 vitest run --config vitest.integration.config.ts tests/e2e/local",
62
63
  "test:cloud": "bash scripts/e2e/cloud.sh",
63
64
  "typecheck": "NODE_OPTIONS=--max-old-space-size=4096 tsc --noEmit",
64
65
  "lint": "eslint --max-warnings=0 src tests scripts",
@@ -70,6 +71,7 @@
70
71
  "verify:pack": "node scripts/dev/verify-pack.mjs",
71
72
  "verify:mcp": "node scripts/dev/mcp-probe.mjs",
72
73
  "verify:docker": "node scripts/dev/verify-docker.mjs",
74
+ "verify:docs": "node scripts/dev/check-doc-links.mjs",
73
75
  "version:packages": "changeset version && node scripts/sync-server-json.mjs",
74
76
  "sync:server-json": "node scripts/sync-server-json.mjs"
75
77
  },