@openclaw-cloud/agent-controller 3.0.0-beta.2 → 3.0.0-beta.21

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 (169) hide show
  1. package/bin/agent-controller.js +5 -9
  2. package/dist/api.d.ts +16 -0
  3. package/dist/api.js.map +1 -1
  4. package/dist/commands/agent-update-cli.js +23 -38
  5. package/dist/commands/agent-update-cli.js.map +1 -1
  6. package/dist/commands/backup-cli.js +6 -4
  7. package/dist/commands/backup-cli.js.map +1 -1
  8. package/dist/commands/bootstrap.d.ts +10 -1
  9. package/dist/commands/bootstrap.js +33 -73
  10. package/dist/commands/bootstrap.js.map +1 -1
  11. package/dist/commands/channel-server.js +4 -3
  12. package/dist/commands/channel-server.js.map +1 -1
  13. package/dist/commands/heartbeat-cli.js +2 -6
  14. package/dist/commands/heartbeat-cli.js.map +1 -1
  15. package/dist/commands/install-deps.d.ts +10 -0
  16. package/dist/commands/install-deps.js +33 -43
  17. package/dist/commands/install-deps.js.map +1 -1
  18. package/dist/commands/knowledge-sync-cli.js +6 -4
  19. package/dist/commands/knowledge-sync-cli.js.map +1 -1
  20. package/dist/commands/plugin-update-cli.js +4 -8
  21. package/dist/commands/plugin-update-cli.js.map +1 -1
  22. package/dist/commands/self-update.d.ts +1 -0
  23. package/dist/commands/self-update.js +76 -37
  24. package/dist/commands/self-update.js.map +1 -1
  25. package/dist/commands/update-skills.js +7 -6
  26. package/dist/commands/update-skills.js.map +1 -1
  27. package/dist/config-file.d.ts +24 -0
  28. package/dist/config-file.js +59 -20
  29. package/dist/config-file.js.map +1 -1
  30. package/dist/config.d.ts +10 -0
  31. package/dist/config.js +28 -0
  32. package/dist/config.js.map +1 -1
  33. package/dist/connection.d.ts +4 -0
  34. package/dist/connection.js +50 -5
  35. package/dist/connection.js.map +1 -1
  36. package/dist/handlers/agent-update.d.ts +4 -0
  37. package/dist/handlers/agent-update.js +16 -44
  38. package/dist/handlers/agent-update.js.map +1 -1
  39. package/dist/handlers/deploy.d.ts +1 -2
  40. package/dist/handlers/deploy.js +4 -20
  41. package/dist/handlers/deploy.js.map +1 -1
  42. package/dist/handlers/diagnostics.js +0 -12
  43. package/dist/handlers/diagnostics.js.map +1 -1
  44. package/dist/handlers/file-delete.js +4 -5
  45. package/dist/handlers/file-delete.js.map +1 -1
  46. package/dist/handlers/file-write.js +4 -4
  47. package/dist/handlers/file-write.js.map +1 -1
  48. package/dist/handlers/knowledge-sync.js +2 -14
  49. package/dist/handlers/knowledge-sync.js.map +1 -1
  50. package/dist/handlers/memory.d.ts +11 -1
  51. package/dist/handlers/memory.js.map +1 -1
  52. package/dist/handlers/onboarding.d.ts +1 -2
  53. package/dist/handlers/onboarding.js +3 -20
  54. package/dist/handlers/onboarding.js.map +1 -1
  55. package/dist/handlers/package-install.js +1 -1
  56. package/dist/handlers/package-install.js.map +1 -1
  57. package/dist/handlers/pair.js +0 -12
  58. package/dist/handlers/pair.js.map +1 -1
  59. package/dist/handlers/restart.d.ts +1 -2
  60. package/dist/handlers/restart.js +3 -8
  61. package/dist/handlers/restart.js.map +1 -1
  62. package/dist/handlers/slack-event.d.ts +13 -0
  63. package/dist/handlers/slack-event.js +40 -0
  64. package/dist/handlers/slack-event.js.map +1 -0
  65. package/dist/handlers/stop.js +0 -7
  66. package/dist/handlers/stop.js.map +1 -1
  67. package/dist/handlers/telegram-webhook.js +3 -22
  68. package/dist/handlers/telegram-webhook.js.map +1 -1
  69. package/dist/handlers/update-config.js +4 -13
  70. package/dist/handlers/update-config.js.map +1 -1
  71. package/dist/heartbeat.d.ts +7 -1
  72. package/dist/heartbeat.js +35 -6
  73. package/dist/heartbeat.js.map +1 -1
  74. package/dist/index.d.ts +0 -8
  75. package/dist/index.js +96 -119
  76. package/dist/index.js.map +1 -1
  77. package/dist/lockfile.js +2 -1
  78. package/dist/lockfile.js.map +1 -1
  79. package/dist/mock-board-worker.d.ts +31 -0
  80. package/dist/mock-board-worker.js +125 -0
  81. package/dist/mock-board-worker.js.map +1 -0
  82. package/dist/platform/linux.js +6 -5
  83. package/dist/platform/linux.js.map +1 -1
  84. package/dist/platform/macos.js +3 -2
  85. package/dist/platform/macos.js.map +1 -1
  86. package/dist/platform/windows.js +3 -2
  87. package/dist/platform/windows.js.map +1 -1
  88. package/dist/providers/claude-code/channel-server.js +2 -1
  89. package/dist/providers/claude-code/channel-server.js.map +1 -1
  90. package/dist/providers/claude-code/settings-writer.d.ts +3 -2
  91. package/dist/providers/claude-code/settings-writer.js +6 -15
  92. package/dist/providers/claude-code/settings-writer.js.map +1 -1
  93. package/dist/providers/index.d.ts +13 -0
  94. package/dist/providers/index.js +25 -0
  95. package/dist/providers/index.js.map +1 -1
  96. package/dist/providers/openclaw/gateway-adapter.js +2 -0
  97. package/dist/providers/openclaw/gateway-adapter.js.map +1 -1
  98. package/dist/providers/openclaw/gateway-client.js +6 -1
  99. package/dist/providers/openclaw/gateway-client.js.map +1 -1
  100. package/dist/providers/openclaw/index.js +34 -13
  101. package/dist/providers/openclaw/index.js.map +1 -1
  102. package/dist/slack-relay-server.d.ts +48 -0
  103. package/dist/slack-relay-server.js +197 -0
  104. package/dist/slack-relay-server.js.map +1 -0
  105. package/dist/types.d.ts +16 -1
  106. package/dist/utils/anthropic-auth.d.ts +14 -0
  107. package/dist/utils/anthropic-auth.js +24 -0
  108. package/dist/utils/anthropic-auth.js.map +1 -1
  109. package/dist/utils/apply-config.d.ts +65 -12
  110. package/dist/utils/apply-config.js +308 -100
  111. package/dist/utils/apply-config.js.map +1 -1
  112. package/dist/utils/claude-env.d.ts +6 -0
  113. package/dist/utils/claude-env.js +29 -28
  114. package/dist/utils/claude-env.js.map +1 -1
  115. package/dist/utils/config-merge-paths.d.ts +15 -1
  116. package/dist/utils/config-merge-paths.js +17 -3
  117. package/dist/utils/config-merge-paths.js.map +1 -1
  118. package/dist/utils/deploy-type.d.ts +16 -0
  119. package/dist/utils/deploy-type.js +34 -0
  120. package/dist/utils/deploy-type.js.map +1 -0
  121. package/dist/utils/env.d.ts +0 -1
  122. package/dist/utils/env.js +0 -8
  123. package/dist/utils/env.js.map +1 -1
  124. package/dist/utils/exec.d.ts +11 -0
  125. package/dist/utils/exec.js +47 -1
  126. package/dist/utils/exec.js.map +1 -1
  127. package/dist/utils/gateway-restart-handler.d.ts +6 -2
  128. package/dist/utils/gateway-restart-handler.js +11 -2
  129. package/dist/utils/gateway-restart-handler.js.map +1 -1
  130. package/dist/utils/gateway-restart.d.ts +7 -0
  131. package/dist/utils/gateway-restart.js +12 -4
  132. package/dist/utils/gateway-restart.js.map +1 -1
  133. package/dist/utils/knowledge-graph.d.ts +13 -1
  134. package/dist/utils/knowledge-graph.js +75 -29
  135. package/dist/utils/knowledge-graph.js.map +1 -1
  136. package/dist/utils/legacy-mcp-servers.d.ts +12 -0
  137. package/dist/utils/legacy-mcp-servers.js +37 -0
  138. package/dist/utils/legacy-mcp-servers.js.map +1 -0
  139. package/dist/utils/log-collector.js +2 -1
  140. package/dist/utils/log-collector.js.map +1 -1
  141. package/dist/utils/openclaw-ops.d.ts +45 -3
  142. package/dist/utils/openclaw-ops.js +94 -15
  143. package/dist/utils/openclaw-ops.js.map +1 -1
  144. package/dist/utils/openclaw-stack-update.d.ts +31 -0
  145. package/dist/utils/openclaw-stack-update.js +50 -0
  146. package/dist/utils/openclaw-stack-update.js.map +1 -0
  147. package/dist/utils/package-install.js +4 -12
  148. package/dist/utils/package-install.js.map +1 -1
  149. package/dist/utils/package-version.d.ts +10 -0
  150. package/dist/utils/package-version.js +18 -0
  151. package/dist/utils/package-version.js.map +1 -0
  152. package/dist/utils/parse-id-at-version.d.ts +15 -0
  153. package/dist/utils/parse-id-at-version.js +22 -0
  154. package/dist/utils/parse-id-at-version.js.map +1 -0
  155. package/dist/utils/plugin-reconcile.d.ts +46 -0
  156. package/dist/utils/plugin-reconcile.js +201 -0
  157. package/dist/utils/plugin-reconcile.js.map +1 -0
  158. package/dist/utils/response.js +1 -0
  159. package/dist/utils/response.js.map +1 -1
  160. package/dist/utils/write-home-files.d.ts +27 -0
  161. package/dist/utils/write-home-files.js +72 -0
  162. package/dist/utils/write-home-files.js.map +1 -0
  163. package/dist/utils/write-workspace-files.d.ts +1 -1
  164. package/dist/utils/write-workspace-files.js +19 -7
  165. package/dist/utils/write-workspace-files.js.map +1 -1
  166. package/dist/workspace.d.ts +11 -0
  167. package/dist/workspace.js +20 -0
  168. package/dist/workspace.js.map +1 -1
  169. package/package.json +9 -4
@@ -1,16 +1,18 @@
1
1
  import { createAgentApi } from '../api.js';
2
- import { getBackendUrl, requireEnv } from '../utils/env.js';
2
+ import { getBackendUrl } from '../utils/env.js';
3
+ import { requireConfig } from '../config.js';
3
4
  import { pushKnowledgeToBackend } from '../utils/knowledge-push.js';
5
+ import { toErrorMessage } from '../utils/response.js';
4
6
  export async function runKnowledgeSync() {
5
7
  console.log('Starting knowledge sync...');
6
- const api = createAgentApi(getBackendUrl(), requireEnv('AGENT_TOKEN'));
7
- const agentId = requireEnv('AGENT_ID');
8
+ const api = createAgentApi(getBackendUrl(), requireConfig('agentToken'));
9
+ const agentId = requireConfig('agentId');
8
10
  try {
9
11
  const { filesRead, filesUpdated } = await pushKnowledgeToBackend(api, agentId);
10
12
  console.log(`Knowledge sync complete — ${filesUpdated}/${filesRead} files updated.`);
11
13
  }
12
14
  catch (e) {
13
- console.error(e instanceof Error ? e.message : String(e));
15
+ console.error(toErrorMessage(e));
14
16
  process.exit(1);
15
17
  }
16
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge-sync-cli.js","sourceRoot":"","sources":["../../src/commands/knowledge-sync-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAE1C,MAAM,GAAG,GAAG,cAAc,CAAC,aAAa,EAAE,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,6BAA6B,YAAY,IAAI,SAAS,iBAAiB,CAAC,CAAC;IACvF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"knowledge-sync-cli.js","sourceRoot":"","sources":["../../src/commands/knowledge-sync-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAE1C,MAAM,GAAG,GAAG,cAAc,CAAC,aAAa,EAAE,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAEzC,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,6BAA6B,YAAY,IAAI,SAAS,iBAAiB,CAAC,CAAC;IACvF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { installPlugin } from '../utils/openclaw-ops.js';
2
+ import { parseIdAtVersion } from '../utils/parse-id-at-version.js';
2
3
  import { logCollector } from '../connection.js';
3
4
  import { toErrorMessage } from '../utils/response.js';
4
5
  // ---------------------------------------------------------------------------
@@ -12,15 +13,10 @@ const USAGE = 'Usage: agent-controller plugin-update <id> <version>\n' +
12
13
  ' agent-controller plugin-update <id>@<version>';
13
14
  function parseArgs(args) {
14
15
  if (args.length === 1) {
15
- const at = args[0].lastIndexOf('@');
16
- // Reject leading-@ so `@scope/name` without version doesn't slip through.
17
- if (at <= 0)
16
+ const combined = args[0];
17
+ if (!combined)
18
18
  return null;
19
- const id = args[0].slice(0, at).trim();
20
- const version = args[0].slice(at + 1).trim();
21
- if (!id || !version)
22
- return null;
23
- return { id, version };
19
+ return parseIdAtVersion(combined);
24
20
  }
25
21
  if (args.length === 2) {
26
22
  const id = args[0]?.trim() ?? '';
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-update-cli.js","sourceRoot":"","sources":["../../src/commands/plugin-update-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-update-cli.js","sourceRoot":"","sources":["../../src/commands/plugin-update-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,8EAA8E;AAC9E,qEAAqE;AACrE,6EAA6E;AAC7E,2EAA2E;AAC3E,0EAA0E;AAC1E,qEAAqE;AACrE,8EAA8E;AAE9E,MAAM,KAAK,GACT,wDAAwD;IACxD,sDAAsD,CAAC;AAOzD,SAAS,SAAS,CAAC,IAAc;IAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QACjC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAc;IACrD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAE/B,YAAY,EAAE,IAAI,CAAC,yBAAyB,EAAE,MAAM,EAAE,2BAA2B,EAAE;QACjF,EAAE;QACF,OAAO;KACR,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,IAAI,OAAO,KAAK,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAEnD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,OAAO,mCAAmC,CAAC,CAAC;YACjF,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QAED,wEAAwE;QACxE,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;QAChD,YAAY,EAAE,IAAI,CAAC,0BAA0B,EAAE,OAAO,EAAE,0BAA0B,EAAE;YAClF,EAAE;YACF,OAAO;YACP,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -33,6 +33,7 @@ export interface RunExplicitSelfUpdateResult {
33
33
  */
34
34
  export declare function runExplicitSelfUpdate(currentVersion: string, payload: SelfUpdatePayload): Promise<RunExplicitSelfUpdateResult>;
35
35
  export declare function selfUpdate(currentVersion: string): Promise<void>;
36
+ export declare function fetchRuntimeTargets(): Promise<SelfUpdatePayload | null>;
36
37
  /**
37
38
  * Top-level CLI entrypoint invoked by `agent-controller self-update`.
38
39
  * Tries the new explicit-payload flow first; falls back to legacy when
@@ -1,11 +1,11 @@
1
1
  import { execAsync } from '../utils/exec.js';
2
2
  import { removeLockFile } from '../lockfile.js';
3
3
  import { getReleaseChannel } from '../utils/release-channel.js';
4
+ import { createAgentApi } from '../api.js';
4
5
  import { config } from '../config.js';
5
- import { withEaccesRetry, installOpenclaw, installPlugins, installAcSelf, AC_PACKAGE, } from '../utils/openclaw-ops.js';
6
- import { restartGateway } from '../utils/gateway-restart.js';
6
+ import { withEaccesRetry, installAcSelf, AC_PACKAGE, } from '../utils/openclaw-ops.js';
7
+ import { runOpenclawStackUpdate } from '../utils/openclaw-stack-update.js';
7
8
  import { logCollector } from '../connection.js';
8
- import { toErrorMessage } from '../utils/response.js';
9
9
  /**
10
10
  * Run the explicit-version self-update flow. Throws when `installOpenclaw`
11
11
  * or `installAcSelf` fail outright — per-plugin failures are recorded in
@@ -33,30 +33,14 @@ export async function runExplicitSelfUpdate(currentVersion, payload) {
33
33
  });
34
34
  // 1) openclaw runtime + plugins (one gateway restart at the end)
35
35
  if (payload.openclaw) {
36
- runtimeChanged = await installOpenclaw(payload.openclaw.version);
37
- if (runtimeChanged) {
38
- logCollector?.push('self_update_runtime_installed', 'info', `openclaw runtime installed at ${payload.openclaw.version}`, { version: payload.openclaw.version });
39
- }
40
- if (payload.openclaw.plugins?.length) {
41
- logCollector?.push('self_update_plugin_install_start', 'info', `Installing ${payload.openclaw.plugins.length} plugin(s)`, { pluginCount: payload.openclaw.plugins.length });
42
- pluginSummary = await installPlugins(payload.openclaw.plugins);
43
- logCollector?.push('self_update_plugin_install_done', pluginSummary.failed.length > 0 ? 'warn' : 'info', `Plugin install complete: ${pluginSummary.installed.length} installed, ${pluginSummary.skipped.length} skipped, ${pluginSummary.failed.length} failed`, {
44
- installed: pluginSummary.installed,
45
- skipped: pluginSummary.skipped,
46
- failed: pluginSummary.failed,
47
- });
48
- }
49
- const anyChanged = runtimeChanged || (pluginSummary?.installed.length ?? 0) > 0;
50
- if (anyChanged) {
51
- try {
52
- await restartGateway();
53
- gatewayRestarted = true;
54
- logCollector?.push('self_update_gateway_restarted', 'info', 'Gateway restarted after openclaw stack update', {});
55
- }
56
- catch (err) {
57
- logCollector?.push('self_update_gateway_restart_failed', 'warn', `Gateway restart after openclaw stack update failed: ${toErrorMessage(err)}`, { error: toErrorMessage(err) });
58
- }
59
- }
36
+ const stack = await runOpenclawStackUpdate({
37
+ version: payload.openclaw.version,
38
+ plugins: payload.openclaw.plugins,
39
+ eventPrefix: 'self_update',
40
+ });
41
+ runtimeChanged = stack.runtimeChanged;
42
+ pluginSummary = stack.pluginSummary;
43
+ gatewayRestarted = stack.gatewayRestarted;
60
44
  }
61
45
  // 2) agent-controller swap LAST. Note: we run `npm install -g` here but
62
46
  // do NOT remove the lockfile or sleep — the WS handler defers that
@@ -95,20 +79,24 @@ export async function selfUpdate(currentVersion) {
95
79
  // CLI entrypoint — try the new on-demand /api/agent/runtime-targets path
96
80
  // first; fall back to the legacy channel-based path if the backend is
97
81
  // unreachable, returns an empty payload, or returns a non-2xx response.
82
+ //
83
+ // `fetchRuntimeTargets` is exported because it is the ONE implementation of
84
+ // "ask the backend what this agent should be running"; utils/plugin-reconcile.ts
85
+ // reuses it so a reconcile install picks the same plugin version a self-update
86
+ // would.
98
87
  // ---------------------------------------------------------------------------
99
- async function fetchRuntimeTargets() {
88
+ export async function fetchRuntimeTargets() {
100
89
  const backendUrl = config.backendUrl;
101
90
  const token = config.agentToken;
102
91
  if (!backendUrl || !token)
103
92
  return null;
104
93
  try {
105
- const res = await fetch(`${backendUrl}/api/agent/runtime-targets`, {
106
- headers: { Authorization: `Bearer ${token}` },
107
- signal: AbortSignal.timeout(10_000),
108
- });
109
- if (!res.ok)
110
- return null;
111
- const data = (await res.json());
94
+ // Through AgentApi rather than a hand-rolled fetch, so this request shows
95
+ // up in debugLog tracing like every other backend call. The swallow is
96
+ // deliberate: any failure (401, 500, network, empty body) means "no
97
+ // explicit targets", and the caller falls back to the channel-based path.
98
+ const api = createAgentApi(backendUrl, token);
99
+ const data = (await api.get('/api/agent/runtime-targets'));
112
100
  if (!data || (!data.openclaw && !data.agentController))
113
101
  return null;
114
102
  return data;
@@ -130,10 +118,61 @@ async function fetchRuntimeTargets() {
130
118
  export async function runSelfUpdateCli(currentVersion) {
131
119
  const targets = await fetchRuntimeTargets();
132
120
  if (targets) {
133
- console.log('Using runtime targets from backend (explicit self-update path)');
121
+ const channel = getReleaseChannel();
122
+ console.log(`Current version: ${currentVersion} (channel: ${channel})`);
123
+ // Summary line — describe what the backend wants us to install, skipping
124
+ // subparts the payload didn't include.
125
+ const pluginCount = targets.openclaw?.plugins?.length ?? 0;
126
+ const summaryParts = [];
127
+ if (targets.openclaw) {
128
+ summaryParts.push(pluginCount > 0
129
+ ? `openclaw=${targets.openclaw.version} (${pluginCount} plugin(s))`
130
+ : `openclaw=${targets.openclaw.version}`);
131
+ }
132
+ if (targets.agentController) {
133
+ summaryParts.push(`agent-controller=${targets.agentController.version}`);
134
+ }
135
+ if (summaryParts.length > 0) {
136
+ console.log(`Backend targets: ${summaryParts.join(', ')}`);
137
+ }
138
+ // Intent lines — printed BEFORE runExplicitSelfUpdate runs. The runtime
139
+ // step may end up being a no-op (skip); the post-call result lines below
140
+ // resolve that ambiguity.
141
+ if (targets.openclaw) {
142
+ console.log(`Installing openclaw runtime ${targets.openclaw.version}...`);
143
+ }
144
+ if (pluginCount > 0) {
145
+ console.log(`Installing ${pluginCount} plugin(s)...`);
146
+ }
147
+ if (targets.agentController) {
148
+ console.log(`Installing agent-controller ${targets.agentController.version}...`);
149
+ }
134
150
  const result = await runExplicitSelfUpdate(currentVersion, targets);
151
+ // Result lines — what actually happened.
152
+ if (targets.openclaw) {
153
+ if (result.runtimeChanged) {
154
+ console.log(`openclaw runtime installed at ${targets.openclaw.version}`);
155
+ }
156
+ else {
157
+ console.log(`openclaw runtime already at ${targets.openclaw.version}, skipped`);
158
+ }
159
+ }
160
+ if (result.pluginSummary) {
161
+ const s = result.pluginSummary;
162
+ console.log(`Plugin install complete: ${s.installed.length} installed, ${s.skipped.length} skipped, ${s.failed.length} failed`);
163
+ }
164
+ if (result.gatewayRestarted) {
165
+ console.log('Gateway restarted after openclaw stack update');
166
+ }
167
+ if (targets.agentController) {
168
+ if (result.acChanged) {
169
+ console.log(`Successfully updated to ${targets.agentController.version}. Removing lock file for graceful restart...`);
170
+ }
171
+ else {
172
+ console.log(`agent-controller already at ${targets.agentController.version}, skipped`);
173
+ }
174
+ }
135
175
  if (result.acChanged) {
136
- console.log(`Successfully updated agent-controller to ${targets.agentController?.version}. Removing lock file for graceful restart...`);
137
176
  removeLockFile();
138
177
  await new Promise((resolve) => setTimeout(resolve, 30_000));
139
178
  }
@@ -1 +1 @@
1
- {"version":3,"file":"self-update.js","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"self-update.js","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,12 @@
1
1
  import { createAgentApi } from '../api.js';
2
- import { getBackendUrl, requireEnv } from '../utils/env.js';
2
+ import { getBackendUrl } from '../utils/env.js';
3
+ import { requireConfig } from '../config.js';
3
4
  import { getWorkspaceDir } from '../workspace.js';
4
- import { writeSkillFiles } from './bootstrap.js';
5
+ import { writeWorkspaceFiles } from '../utils/write-workspace-files.js';
5
6
  export async function updateSkills() {
6
7
  const backendUrl = getBackendUrl();
7
- const agentToken = requireEnv('AGENT_TOKEN');
8
- const agentId = requireEnv('AGENT_ID');
8
+ const agentToken = requireConfig('agentToken');
9
+ const agentId = requireConfig('agentId');
9
10
  const workspaceDir = getWorkspaceDir();
10
11
  const api = createAgentApi(backendUrl, agentToken);
11
12
  const data = await api.agentBootstrap(agentId);
@@ -14,7 +15,7 @@ export async function updateSkills() {
14
15
  console.log('update_skills: no skills in bootstrap response, nothing to write');
15
16
  return;
16
17
  }
17
- await writeSkillFiles(skills, workspaceDir);
18
- console.log(`update_skills: wrote ${Object.keys(skills).length} skill files`);
18
+ const wrote = await writeWorkspaceFiles(skills, workspaceDir);
19
+ console.log(`update_skills: wrote ${wrote} skill files`);
19
20
  }
20
21
  //# sourceMappingURL=update-skills.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-skills.js","sourceRoot":"","sources":["../../src/commands/update-skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACvC,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IAEvC,MAAM,GAAG,GAAG,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IACjC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;QAChF,OAAO;IACT,CAAC;IACD,MAAM,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,cAAc,CAAC,CAAC;AAChF,CAAC"}
1
+ {"version":3,"file":"update-skills.js","sourceRoot":"","sources":["../../src/commands/update-skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,UAAU,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IAEvC,MAAM,GAAG,GAAG,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IACjC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;QAChF,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,cAAc,CAAC,CAAC;AAC3D,CAAC"}
@@ -2,6 +2,13 @@
2
2
  export declare const VM_ENV_PATH = "/opt/openclaw-cloud/agent-controller/.env";
3
3
  export declare function getConfigDir(): string;
4
4
  export declare function getConfigPath(): string;
5
+ /**
6
+ * Serialize a dict to `KEY=VALUE` lines and write it 0600, creating the parent
7
+ * directory. The one writer for every env file we own (`agent.env` and the VM
8
+ * provisioner's `.env`) — these files carry AGENT_TOKEN and provider API keys,
9
+ * so the mode is not optional.
10
+ */
11
+ export declare function writeEnvFile(filePath: string, vars: Record<string, string>): Promise<void>;
5
12
  export declare function saveEnvFile(config: {
6
13
  centrifugoUrl: string;
7
14
  agentToken: string;
@@ -9,4 +16,21 @@ export declare function saveEnvFile(config: {
9
16
  backendInternalUrl: string;
10
17
  gatewayToken?: string | null;
11
18
  }): Promise<void>;
19
+ /**
20
+ * Parse `KEY=VALUE` lines into a dict. Blank lines, `#` comments and lines
21
+ * without `=` are skipped; only the first `=` separates, so values may contain
22
+ * more. On a duplicate key the FIRST occurrence wins, mirroring `loadEnvFile`'s
23
+ * "already set, don't overwrite" precedence.
24
+ *
25
+ * Deliberately does NOT filter through `ENV_KEYS`: that allowlist governs what
26
+ * this process imports into `process.env`, not what is allowed to live in the
27
+ * file. Callers that rewrite an env file must see every key, or they would drop
28
+ * the ones only systemd or `apiKeyHelper` read.
29
+ */
30
+ export declare function parseEnvContent(content: string): Record<string, string>;
31
+ /**
32
+ * Read and parse an env file. A missing or unreadable file yields `{}` — the
33
+ * caller decides what that means. The counterpart to `writeEnvFile`.
34
+ */
35
+ export declare function readEnvFile(filePath: string): Promise<Record<string, string>>;
12
36
  export declare function loadEnvFile(): Promise<void>;
@@ -13,12 +13,18 @@ const ENV_KEYS = [
13
13
  'AC_RELEASE_CHANNEL',
14
14
  'AC_DEBUG',
15
15
  'AGENT_PROVIDER',
16
+ 'AGENT_DEPLOY_TYPE',
16
17
  'ANTHROPIC_API_KEY',
17
18
  'ANTHROPIC_AUTH_TOKEN',
18
19
  'CLAUDE_CODE_OAUTH_TOKEN',
19
20
  'CLAUDE_WORKSPACE_DIR',
20
21
  'CLAUDE_MD_CONTENT',
21
22
  'AC_RUN_BOOTSTRAP',
23
+ 'SLACK_RELAY_AUTH_TOKEN',
24
+ 'SLACK_RELAY_PORT',
25
+ 'MOCK_BOARD_POLL_MS',
26
+ 'MOCK_TASK_DELAY_MS',
27
+ 'MOCK_TASK_TEXT',
22
28
  ];
23
29
  /** VM provisioner writes env here */
24
30
  export const VM_ENV_PATH = '/opt/openclaw-cloud/agent-controller/.env';
@@ -28,30 +34,45 @@ export function getConfigDir() {
28
34
  export function getConfigPath() {
29
35
  return path.join(getConfigDir(), 'agent.env');
30
36
  }
37
+ /**
38
+ * Serialize a dict to `KEY=VALUE` lines and write it 0600, creating the parent
39
+ * directory. The one writer for every env file we own (`agent.env` and the VM
40
+ * provisioner's `.env`) — these files carry AGENT_TOKEN and provider API keys,
41
+ * so the mode is not optional.
42
+ */
43
+ export async function writeEnvFile(filePath, vars) {
44
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
45
+ const content = Object.entries(vars)
46
+ .map(([k, v]) => `${k}=${v}`)
47
+ .join('\n') + '\n';
48
+ await fs.writeFile(filePath, content, { mode: 0o600 });
49
+ }
31
50
  export async function saveEnvFile(config) {
32
- const dir = getConfigDir();
33
- await fs.mkdir(dir, { recursive: true });
34
- const lines = [
35
- `CENTRIFUGO_URL=${config.centrifugoUrl}`,
36
- `AGENT_TOKEN=${config.agentToken}`,
37
- `AGENT_ID=${config.agentId}`,
38
- `BACKEND_URL=${config.backendInternalUrl}`,
39
- ];
51
+ const vars = {
52
+ CENTRIFUGO_URL: config.centrifugoUrl,
53
+ AGENT_TOKEN: config.agentToken,
54
+ AGENT_ID: config.agentId,
55
+ BACKEND_URL: config.backendInternalUrl,
56
+ };
40
57
  if (config.gatewayToken) {
41
- lines.push(`OPENCLAW_GATEWAY_TOKEN=${config.gatewayToken}`);
58
+ vars.OPENCLAW_GATEWAY_TOKEN = config.gatewayToken;
42
59
  }
43
- const content = lines.join('\n') + '\n';
44
- await fs.writeFile(getConfigPath(), content, { mode: 0o600 });
60
+ await writeEnvFile(getConfigPath(), vars);
45
61
  console.log(` Config saved to ${getConfigPath()}`);
46
62
  }
47
- async function loadFile(filePath) {
48
- let content;
49
- try {
50
- content = await fs.readFile(filePath, 'utf-8');
51
- }
52
- catch {
53
- return; // File not found — skip
54
- }
63
+ /**
64
+ * Parse `KEY=VALUE` lines into a dict. Blank lines, `#` comments and lines
65
+ * without `=` are skipped; only the first `=` separates, so values may contain
66
+ * more. On a duplicate key the FIRST occurrence wins, mirroring `loadEnvFile`'s
67
+ * "already set, don't overwrite" precedence.
68
+ *
69
+ * Deliberately does NOT filter through `ENV_KEYS`: that allowlist governs what
70
+ * this process imports into `process.env`, not what is allowed to live in the
71
+ * file. Callers that rewrite an env file must see every key, or they would drop
72
+ * the ones only systemd or `apiKeyHelper` read.
73
+ */
74
+ export function parseEnvContent(content) {
75
+ const vars = {};
55
76
  for (const line of content.split('\n')) {
56
77
  const trimmed = line.trim();
57
78
  if (!trimmed || trimmed.startsWith('#'))
@@ -60,7 +81,25 @@ async function loadFile(filePath) {
60
81
  if (eq === -1)
61
82
  continue;
62
83
  const key = trimmed.slice(0, eq).trim();
63
- const value = trimmed.slice(eq + 1).trim();
84
+ if (!(key in vars))
85
+ vars[key] = trimmed.slice(eq + 1).trim();
86
+ }
87
+ return vars;
88
+ }
89
+ /**
90
+ * Read and parse an env file. A missing or unreadable file yields `{}` — the
91
+ * caller decides what that means. The counterpart to `writeEnvFile`.
92
+ */
93
+ export async function readEnvFile(filePath) {
94
+ try {
95
+ return parseEnvContent(await fs.readFile(filePath, 'utf-8'));
96
+ }
97
+ catch {
98
+ return {};
99
+ }
100
+ }
101
+ async function loadFile(filePath) {
102
+ for (const [key, value] of Object.entries(await readEnvFile(filePath))) {
64
103
  if (ENV_KEYS.includes(key) && !process.env[key]) {
65
104
  process.env[key] = value;
66
105
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config-file.js","sourceRoot":"","sources":["../src/config-file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-file.js","sourceRoot":"","sources":["../src/config-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,QAAQ,GAAG;IACf,gBAAgB;IAChB,aAAa;IACb,UAAU;IACV,sBAAsB;IACtB,aAAa;IACb,SAAS;IACT,cAAc;IACd,wBAAwB;IACxB,oBAAoB;IACpB,UAAU;IACV,gBAAgB;IAChB,mBAAmB;IACnB,mBAAmB;IACnB,sBAAsB;IACtB,yBAAyB;IACzB,sBAAsB;IACtB,mBAAmB;IACnB,kBAAkB;IAClB,wBAAwB;IACxB,kBAAkB;IAClB,oBAAoB;IACpB,oBAAoB;IACpB,gBAAgB;CACR,CAAC;AAEX,qCAAqC;AACrC,MAAM,CAAC,MAAM,WAAW,GAAG,2CAA2C,CAAC;AAEvE,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,WAAW,CAAC,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB,EAAE,IAA4B;IAC/E,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,OAAO,GACX,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;SACjB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;SAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAMjC;IACC,MAAM,IAAI,GAA2B;QACnC,cAAc,EAAE,MAAM,CAAC,aAAa;QACpC,WAAW,EAAE,MAAM,CAAC,UAAU;QAC9B,QAAQ,EAAE,MAAM,CAAC,OAAO;QACxB,WAAW,EAAE,MAAM,CAAC,kBAAkB;KACvC,CAAC;IACF,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,YAAY,CAAC;IACpD,CAAC;IAED,MAAM,YAAY,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,qBAAqB,aAAa,EAAE,EAAE,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,IAAI,GAA2B,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,EAAE,KAAK,CAAC,CAAC;YAAE,SAAS;QACxB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB;IAChD,IAAI,CAAC;QACH,OAAO,eAAe,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,QAAgB;IACtC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACvE,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAgC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,8DAA8D;IAC9D,MAAM,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAChC,qEAAqE;IACrE,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC9B,CAAC"}
package/dist/config.d.ts CHANGED
@@ -35,5 +35,15 @@ export declare const config: {
35
35
  readonly claudeWorkspaceDir: string;
36
36
  /** Optional CLAUDE.md content for the claude-code workspace (set by bootstrap). */
37
37
  readonly claudeMdContent: string | undefined;
38
+ /** Bearer token the openclaw Slack relay client must present (defense-in-depth on loopback). */
39
+ readonly slackRelayAuthToken: string | undefined;
40
+ /** Optional port override for the local Slack relay WS server (default 8788). */
41
+ readonly slackRelayPort: number | undefined;
42
+ /** Idle poll interval for the mock board worker (mock provider only). */
43
+ readonly mockBoardPollMs: number;
44
+ /** Simulated "thinking" delay before the mock board worker submits. */
45
+ readonly mockTaskDelayMs: number;
46
+ /** Text the mock board worker submits as the agent's reply. */
47
+ readonly mockTaskText: string;
38
48
  };
39
49
  export declare function requireConfig<K extends keyof typeof config>(key: K): NonNullable<(typeof config)[K]>;
package/dist/config.js CHANGED
@@ -14,6 +14,10 @@ import path from 'node:path';
14
14
  function stateDir() {
15
15
  return process.env.OPENCLAW_STATE_DIR?.trim() || path.join(os.homedir(), '.openclaw');
16
16
  }
17
+ function positiveIntEnv(name, fallback) {
18
+ const parsed = Number.parseInt(process.env[name]?.trim() ?? '', 10);
19
+ return Number.isInteger(parsed) && parsed > 0 ? parsed : fallback;
20
+ }
17
21
  export const config = {
18
22
  /** Base state directory — ~/.openclaw or OPENCLAW_STATE_DIR */
19
23
  get stateDir() {
@@ -88,6 +92,30 @@ export const config = {
88
92
  get claudeMdContent() {
89
93
  return process.env.CLAUDE_MD_CONTENT?.trim() || undefined;
90
94
  },
95
+ /** Bearer token the openclaw Slack relay client must present (defense-in-depth on loopback). */
96
+ get slackRelayAuthToken() {
97
+ return process.env.SLACK_RELAY_AUTH_TOKEN?.trim() || undefined;
98
+ },
99
+ /** Optional port override for the local Slack relay WS server (default 8788). */
100
+ get slackRelayPort() {
101
+ const raw = process.env.SLACK_RELAY_PORT?.trim();
102
+ if (!raw)
103
+ return undefined;
104
+ const parsed = Number.parseInt(raw, 10);
105
+ return Number.isInteger(parsed) && parsed > 0 ? parsed : undefined;
106
+ },
107
+ /** Idle poll interval for the mock board worker (mock provider only). */
108
+ get mockBoardPollMs() {
109
+ return positiveIntEnv('MOCK_BOARD_POLL_MS', 7_000);
110
+ },
111
+ /** Simulated "thinking" delay before the mock board worker submits. */
112
+ get mockTaskDelayMs() {
113
+ return positiveIntEnv('MOCK_TASK_DELAY_MS', 1_500);
114
+ },
115
+ /** Text the mock board worker submits as the agent's reply. */
116
+ get mockTaskText() {
117
+ return process.env.MOCK_TASK_TEXT?.trim() || 'Mock agent completed the task.';
118
+ },
91
119
  };
92
120
  /* ── Strict accessors (throw on missing) ────────────────────── */
93
121
  export function requireConfig(key) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { AgentApi } from './api.js';
2
2
  import { Centrifuge, Subscription } from 'centrifuge';
3
+ import type { CentrifugoStatus } from './types.js';
3
4
  import { LogCollector } from './utils/log-collector.js';
4
5
  import type { KnowledgeGraphManager } from './utils/knowledge-graph.js';
5
6
  export interface ConnectionOptions {
@@ -12,10 +13,13 @@ export interface ConnectionOptions {
12
13
  knowledgeGraphManager?: KnowledgeGraphManager;
13
14
  }
14
15
  export declare let logCollector: LogCollector;
16
+ export declare function mapClientState(raw: unknown): CentrifugoStatus['state'];
17
+ export declare function mapSubState(raw: unknown): CentrifugoStatus['commandSubState'];
15
18
  declare function subscribeToChannel(client: Centrifuge, channel: string, opts: ConnectionOptions): Subscription;
16
19
  export declare function createConnection(opts: ConnectionOptions): {
17
20
  client: Centrifuge;
18
21
  drainCommands: () => Promise<void>;
19
22
  logCollector: LogCollector;
23
+ getCentrifugoStatus: () => CentrifugoStatus;
20
24
  };
21
25
  export { subscribeToChannel };