@openclaw-cloud/agent-controller 3.1.1 → 3.1.2

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 (121) hide show
  1. package/bin/agent-controller.js +5 -9
  2. package/dist/commands/agent-update-cli.js +23 -38
  3. package/dist/commands/agent-update-cli.js.map +1 -1
  4. package/dist/commands/backup-cli.js +6 -4
  5. package/dist/commands/backup-cli.js.map +1 -1
  6. package/dist/commands/bootstrap.js +4 -4
  7. package/dist/commands/bootstrap.js.map +1 -1
  8. package/dist/commands/channel-server.js +4 -3
  9. package/dist/commands/channel-server.js.map +1 -1
  10. package/dist/commands/heartbeat-cli.js +2 -6
  11. package/dist/commands/heartbeat-cli.js.map +1 -1
  12. package/dist/commands/install-deps.d.ts +10 -0
  13. package/dist/commands/install-deps.js +33 -43
  14. package/dist/commands/install-deps.js.map +1 -1
  15. package/dist/commands/knowledge-sync-cli.js +6 -4
  16. package/dist/commands/knowledge-sync-cli.js.map +1 -1
  17. package/dist/commands/plugin-update-cli.js +2 -9
  18. package/dist/commands/plugin-update-cli.js.map +1 -1
  19. package/dist/commands/self-update.js +17 -34
  20. package/dist/commands/self-update.js.map +1 -1
  21. package/dist/commands/update-skills.js +4 -3
  22. package/dist/commands/update-skills.js.map +1 -1
  23. package/dist/config-file.d.ts +7 -0
  24. package/dist/config-file.js +21 -11
  25. package/dist/config-file.js.map +1 -1
  26. package/dist/handlers/agent-update.d.ts +4 -0
  27. package/dist/handlers/agent-update.js +16 -44
  28. package/dist/handlers/agent-update.js.map +1 -1
  29. package/dist/handlers/deploy.d.ts +1 -2
  30. package/dist/handlers/deploy.js +4 -20
  31. package/dist/handlers/deploy.js.map +1 -1
  32. package/dist/handlers/diagnostics.js +0 -12
  33. package/dist/handlers/diagnostics.js.map +1 -1
  34. package/dist/handlers/file-delete.js +4 -5
  35. package/dist/handlers/file-delete.js.map +1 -1
  36. package/dist/handlers/file-write.js +4 -4
  37. package/dist/handlers/file-write.js.map +1 -1
  38. package/dist/handlers/knowledge-sync.js +2 -14
  39. package/dist/handlers/knowledge-sync.js.map +1 -1
  40. package/dist/handlers/onboarding.d.ts +1 -2
  41. package/dist/handlers/onboarding.js +3 -20
  42. package/dist/handlers/onboarding.js.map +1 -1
  43. package/dist/handlers/package-install.js +1 -1
  44. package/dist/handlers/package-install.js.map +1 -1
  45. package/dist/handlers/pair.js +0 -12
  46. package/dist/handlers/pair.js.map +1 -1
  47. package/dist/handlers/restart.d.ts +1 -2
  48. package/dist/handlers/restart.js +3 -8
  49. package/dist/handlers/restart.js.map +1 -1
  50. package/dist/handlers/stop.js +0 -7
  51. package/dist/handlers/stop.js.map +1 -1
  52. package/dist/handlers/telegram-webhook.js +3 -22
  53. package/dist/handlers/telegram-webhook.js.map +1 -1
  54. package/dist/handlers/update-config.js +3 -11
  55. package/dist/handlers/update-config.js.map +1 -1
  56. package/dist/heartbeat.js +2 -1
  57. package/dist/heartbeat.js.map +1 -1
  58. package/dist/index.d.ts +0 -8
  59. package/dist/index.js +37 -84
  60. package/dist/index.js.map +1 -1
  61. package/dist/lockfile.js +2 -1
  62. package/dist/lockfile.js.map +1 -1
  63. package/dist/platform/linux.js +6 -5
  64. package/dist/platform/linux.js.map +1 -1
  65. package/dist/platform/macos.js +3 -2
  66. package/dist/platform/macos.js.map +1 -1
  67. package/dist/platform/windows.js +3 -2
  68. package/dist/platform/windows.js.map +1 -1
  69. package/dist/providers/claude-code/channel-server.js +2 -1
  70. package/dist/providers/claude-code/channel-server.js.map +1 -1
  71. package/dist/providers/claude-code/settings-writer.d.ts +3 -2
  72. package/dist/providers/claude-code/settings-writer.js +6 -15
  73. package/dist/providers/claude-code/settings-writer.js.map +1 -1
  74. package/dist/providers/index.d.ts +13 -0
  75. package/dist/providers/index.js +25 -0
  76. package/dist/providers/index.js.map +1 -1
  77. package/dist/providers/openclaw/index.js +11 -13
  78. package/dist/providers/openclaw/index.js.map +1 -1
  79. package/dist/utils/anthropic-auth.d.ts +14 -0
  80. package/dist/utils/anthropic-auth.js +24 -0
  81. package/dist/utils/anthropic-auth.js.map +1 -1
  82. package/dist/utils/apply-config.d.ts +13 -0
  83. package/dist/utils/apply-config.js +54 -71
  84. package/dist/utils/apply-config.js.map +1 -1
  85. package/dist/utils/claude-env.js +18 -28
  86. package/dist/utils/claude-env.js.map +1 -1
  87. package/dist/utils/env.d.ts +0 -1
  88. package/dist/utils/env.js +0 -8
  89. package/dist/utils/env.js.map +1 -1
  90. package/dist/utils/gateway-restart-handler.d.ts +6 -2
  91. package/dist/utils/gateway-restart-handler.js +11 -2
  92. package/dist/utils/gateway-restart-handler.js.map +1 -1
  93. package/dist/utils/gateway-restart.d.ts +7 -0
  94. package/dist/utils/gateway-restart.js +12 -4
  95. package/dist/utils/gateway-restart.js.map +1 -1
  96. package/dist/utils/legacy-mcp-servers.d.ts +12 -0
  97. package/dist/utils/legacy-mcp-servers.js +37 -0
  98. package/dist/utils/legacy-mcp-servers.js.map +1 -0
  99. package/dist/utils/log-collector.js +2 -1
  100. package/dist/utils/log-collector.js.map +1 -1
  101. package/dist/utils/openclaw-ops.js +8 -7
  102. package/dist/utils/openclaw-ops.js.map +1 -1
  103. package/dist/utils/openclaw-stack-update.d.ts +31 -0
  104. package/dist/utils/openclaw-stack-update.js +50 -0
  105. package/dist/utils/openclaw-stack-update.js.map +1 -0
  106. package/dist/utils/package-install.js +4 -12
  107. package/dist/utils/package-install.js.map +1 -1
  108. package/dist/utils/package-version.d.ts +10 -0
  109. package/dist/utils/package-version.js +18 -0
  110. package/dist/utils/package-version.js.map +1 -0
  111. package/dist/utils/parse-id-at-version.d.ts +15 -0
  112. package/dist/utils/parse-id-at-version.js +22 -0
  113. package/dist/utils/parse-id-at-version.js.map +1 -0
  114. package/dist/utils/response.js +1 -0
  115. package/dist/utils/response.js.map +1 -1
  116. package/dist/utils/write-workspace-files.js +8 -13
  117. package/dist/utils/write-workspace-files.js.map +1 -1
  118. package/dist/workspace.d.ts +11 -0
  119. package/dist/workspace.js +20 -0
  120. package/dist/workspace.js.map +1 -1
  121. package/package.json +1 -1
@@ -1,5 +1,7 @@
1
1
  import fs from 'node:fs/promises';
2
2
  import path from 'node:path';
3
+ import { resolveInsideWorkspace } from '../workspace.js';
4
+ import { toErrorMessage } from './response.js';
3
5
  /**
4
6
  * Write a map of workspace-relative paths → content into `workspaceDir`.
5
7
  *
@@ -21,18 +23,11 @@ export async function writeWorkspaceFiles(files, workspaceDir) {
21
23
  await fs.mkdir(workspaceDir, { recursive: true });
22
24
  const written = [];
23
25
  for (const [filePath, content] of Object.entries(files)) {
24
- // Reject any key that escapes the workspace. The file_write handler applies
25
- // the same sandbox; writeWorkspaceFiles previously had no guard, so a
26
- // backend-supplied key like "../../etc/openclaw/agent.env" or an absolute
27
- // path could write outside the workspace.
28
- const fullPath = path.join(workspaceDir, filePath);
29
- const rel = path.relative(workspaceDir, fullPath);
30
- // Segment-aware containment: reject absolute keys and real ".." traversal,
31
- // but allow filenames that merely contain ".." (e.g. "notes..v2.md").
32
- if (path.isAbsolute(filePath) ||
33
- rel === '..' ||
34
- rel.startsWith('..' + path.sep) ||
35
- path.isAbsolute(rel)) {
26
+ // Reject any key that escapes the workspace — a backend-supplied key like
27
+ // "../../etc/openclaw/agent.env" or an absolute path must not write outside
28
+ // it. Same sandbox helper as the file_write / file_delete handlers.
29
+ const fullPath = resolveInsideWorkspace(workspaceDir, filePath);
30
+ if (!fullPath) {
36
31
  console.error(` ✗ ${filePath}: rejected (path escapes workspace)`);
37
32
  continue;
38
33
  }
@@ -43,7 +38,7 @@ export async function writeWorkspaceFiles(files, workspaceDir) {
43
38
  console.log(` ✓ ${filePath}`);
44
39
  }
45
40
  catch (err) {
46
- console.error(` ✗ ${filePath}: ${err instanceof Error ? err.message : err}`);
41
+ console.error(` ✗ ${filePath}: ${toErrorMessage(err)}`);
47
42
  }
48
43
  }
49
44
  // Make .sh files executable (only the ones we actually wrote)
@@ -1 +1 @@
1
- {"version":3,"file":"write-workspace-files.js","sourceRoot":"","sources":["../../src/utils/write-workspace-files.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write-workspace-files.js","sourceRoot":"","sources":["../../src/utils/write-workspace-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAA6B,EAC7B,YAAoB;IAEpB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAErC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAElD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,0EAA0E;QAC1E,4EAA4E;QAC5E,oEAAoE;QACpE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,OAAO,QAAQ,qCAAqC,CAAC,CAAC;YACpE,SAAS;QACX,CAAC;QACD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,OAAO,QAAQ,EAAE,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,OAAO,QAAQ,KAAK,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC/B,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YACnD,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC1E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,MAAM,kBAAkB,CAAC,CAAC;IACzD,OAAO,OAAO,CAAC,MAAM,CAAC;AACxB,CAAC"}
@@ -10,3 +10,14 @@
10
10
  * (which used WORKSPACE_DIR) and backup/knowledge_sync (which used OPENCLAW_STATE_DIR).
11
11
  */
12
12
  export declare function getWorkspaceDir(): string;
13
+ /**
14
+ * Resolve a backend-supplied relative path inside `workspaceDir`, or null if it
15
+ * escapes. The ONE sandbox for every backend-supplied path — `file_write`,
16
+ * `file_delete` and `writeWorkspaceFiles` all route through it.
17
+ *
18
+ * Containment is checked on path *segments* (via `path.relative`), not by
19
+ * substring. The old `p.includes('..') || p.startsWith('/')` copies in the two
20
+ * handlers rejected innocent names like `notes..v2.md` and missed Windows
21
+ * absolute forms such as `C:\x` and `\\server\share`.
22
+ */
23
+ export declare function resolveInsideWorkspace(workspaceDir: string, relPath: string): string | null;
package/dist/workspace.js CHANGED
@@ -16,4 +16,24 @@ export function getWorkspaceDir() {
16
16
  return config.workspaceDir;
17
17
  return path.join(config.stateDir, 'workspace');
18
18
  }
19
+ /**
20
+ * Resolve a backend-supplied relative path inside `workspaceDir`, or null if it
21
+ * escapes. The ONE sandbox for every backend-supplied path — `file_write`,
22
+ * `file_delete` and `writeWorkspaceFiles` all route through it.
23
+ *
24
+ * Containment is checked on path *segments* (via `path.relative`), not by
25
+ * substring. The old `p.includes('..') || p.startsWith('/')` copies in the two
26
+ * handlers rejected innocent names like `notes..v2.md` and missed Windows
27
+ * absolute forms such as `C:\x` and `\\server\share`.
28
+ */
29
+ export function resolveInsideWorkspace(workspaceDir, relPath) {
30
+ if (!relPath || path.isAbsolute(relPath) || path.win32.isAbsolute(relPath))
31
+ return null;
32
+ const fullPath = path.resolve(workspaceDir, relPath);
33
+ const rel = path.relative(workspaceDir, fullPath);
34
+ if (rel === '' || rel === '..' || rel.startsWith('..' + path.sep) || path.isAbsolute(rel)) {
35
+ return null;
36
+ }
37
+ return fullPath;
38
+ }
19
39
  //# sourceMappingURL=workspace.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,MAAM,CAAC,YAAY;QAAE,OAAO,MAAM,CAAC,YAAY,CAAC;IACpD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,MAAM,CAAC,YAAY;QAAE,OAAO,MAAM,CAAC,YAAY,CAAC;IACpD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAC,YAAoB,EAAE,OAAe;IAC1E,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAClD,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1F,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw-cloud/agent-controller",
3
- "version": "3.1.1",
3
+ "version": "3.1.2",
4
4
  "packageManager": "pnpm@11.5.2",
5
5
  "type": "module",
6
6
  "engines": {