@openclaw-cloud/agent-controller 3.6.1 → 3.6.3

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 (205) hide show
  1. package/dist/api.d.ts +2 -14
  2. package/dist/api.js +1 -15
  3. package/dist/api.js.map +1 -1
  4. package/dist/commands/agent-update-cli.js +0 -7
  5. package/dist/commands/agent-update-cli.js.map +1 -1
  6. package/dist/commands/bootstrap.d.ts +0 -10
  7. package/dist/commands/bootstrap.js +2 -16
  8. package/dist/commands/bootstrap.js.map +1 -1
  9. package/dist/commands/channel-server.d.ts +0 -16
  10. package/dist/commands/channel-server.js +1 -19
  11. package/dist/commands/channel-server.js.map +1 -1
  12. package/dist/commands/deploy-cli.js +2 -12
  13. package/dist/commands/deploy-cli.js.map +1 -1
  14. package/dist/commands/diagnostics-cli.js +0 -6
  15. package/dist/commands/diagnostics-cli.js.map +1 -1
  16. package/dist/commands/install-deps.d.ts +0 -10
  17. package/dist/commands/install-deps.js +1 -10
  18. package/dist/commands/install-deps.js.map +1 -1
  19. package/dist/commands/install.js +0 -6
  20. package/dist/commands/install.js.map +1 -1
  21. package/dist/commands/package-install-cli.js +1 -14
  22. package/dist/commands/package-install-cli.js.map +1 -1
  23. package/dist/commands/plugin-update-cli.js +1 -8
  24. package/dist/commands/plugin-update-cli.js.map +1 -1
  25. package/dist/commands/restart-cli.js +0 -4
  26. package/dist/commands/restart-cli.js.map +1 -1
  27. package/dist/commands/self-update.d.ts +2 -24
  28. package/dist/commands/self-update.js +5 -54
  29. package/dist/commands/self-update.js.map +1 -1
  30. package/dist/commands/stop-cli.d.ts +0 -4
  31. package/dist/commands/stop-cli.js +1 -24
  32. package/dist/commands/stop-cli.js.map +1 -1
  33. package/dist/config-file.d.ts +3 -20
  34. package/dist/config-file.js +3 -22
  35. package/dist/config-file.js.map +1 -1
  36. package/dist/config.d.ts +0 -22
  37. package/dist/config.js +1 -34
  38. package/dist/config.js.map +1 -1
  39. package/dist/connection.js +2 -39
  40. package/dist/connection.js.map +1 -1
  41. package/dist/handlers/agent-update.d.ts +1 -21
  42. package/dist/handlers/agent-update.js +1 -21
  43. package/dist/handlers/agent-update.js.map +1 -1
  44. package/dist/handlers/chat.d.ts +0 -8
  45. package/dist/handlers/chat.js +3 -23
  46. package/dist/handlers/chat.js.map +1 -1
  47. package/dist/handlers/file-write.js +1 -4
  48. package/dist/handlers/file-write.js.map +1 -1
  49. package/dist/handlers/memory.d.ts +1 -9
  50. package/dist/handlers/memory.js +3 -25
  51. package/dist/handlers/memory.js.map +1 -1
  52. package/dist/handlers/onboarding.js +0 -2
  53. package/dist/handlers/onboarding.js.map +1 -1
  54. package/dist/handlers/pair.js +1 -3
  55. package/dist/handlers/pair.js.map +1 -1
  56. package/dist/handlers/plugin-update.d.ts +1 -16
  57. package/dist/handlers/plugin-update.js +1 -16
  58. package/dist/handlers/plugin-update.js.map +1 -1
  59. package/dist/handlers/restart.js +0 -2
  60. package/dist/handlers/restart.js.map +1 -1
  61. package/dist/handlers/self-update.d.ts +2 -29
  62. package/dist/handlers/self-update.js +3 -35
  63. package/dist/handlers/self-update.js.map +1 -1
  64. package/dist/handlers/slack-event.d.ts +2 -9
  65. package/dist/handlers/slack-event.js +2 -10
  66. package/dist/handlers/slack-event.js.map +1 -1
  67. package/dist/heartbeat.d.ts +2 -12
  68. package/dist/heartbeat.js +3 -18
  69. package/dist/heartbeat.js.map +1 -1
  70. package/dist/index.js +6 -50
  71. package/dist/index.js.map +1 -1
  72. package/dist/lockfile.d.ts +0 -7
  73. package/dist/lockfile.js +0 -9
  74. package/dist/lockfile.js.map +1 -1
  75. package/dist/memory-mcp-server.d.ts +1 -19
  76. package/dist/memory-mcp-server.js +5 -53
  77. package/dist/memory-mcp-server.js.map +1 -1
  78. package/dist/mock-board-worker.d.ts +2 -25
  79. package/dist/mock-board-worker.js +7 -54
  80. package/dist/mock-board-worker.js.map +1 -1
  81. package/dist/platform/linux.js +0 -3
  82. package/dist/platform/linux.js.map +1 -1
  83. package/dist/platform/macos.js +0 -2
  84. package/dist/platform/macos.js.map +1 -1
  85. package/dist/providers/chat-types.d.ts +0 -3
  86. package/dist/providers/chat-types.js +0 -3
  87. package/dist/providers/chat-types.js.map +1 -1
  88. package/dist/providers/claude-code/channel-server.d.ts +0 -19
  89. package/dist/providers/claude-code/channel-server.js +0 -19
  90. package/dist/providers/claude-code/channel-server.js.map +1 -1
  91. package/dist/providers/claude-code/index.d.ts +0 -22
  92. package/dist/providers/claude-code/index.js +3 -26
  93. package/dist/providers/claude-code/index.js.map +1 -1
  94. package/dist/providers/claude-code/login-flow.d.ts +0 -17
  95. package/dist/providers/claude-code/login-flow.js +2 -16
  96. package/dist/providers/claude-code/login-flow.js.map +1 -1
  97. package/dist/providers/claude-code/settings-writer.d.ts +1 -16
  98. package/dist/providers/claude-code/settings-writer.js +5 -20
  99. package/dist/providers/claude-code/settings-writer.js.map +1 -1
  100. package/dist/providers/claude-code/socket-bridge.d.ts +0 -35
  101. package/dist/providers/claude-code/socket-bridge.js +2 -43
  102. package/dist/providers/claude-code/socket-bridge.js.map +1 -1
  103. package/dist/providers/claude-code/spawn-claude.d.ts +0 -17
  104. package/dist/providers/claude-code/spawn-claude.js +1 -15
  105. package/dist/providers/claude-code/spawn-claude.js.map +1 -1
  106. package/dist/providers/index.d.ts +1 -10
  107. package/dist/providers/index.js +2 -13
  108. package/dist/providers/index.js.map +1 -1
  109. package/dist/providers/mock/index.d.ts +0 -4
  110. package/dist/providers/mock/index.js +0 -4
  111. package/dist/providers/mock/index.js.map +1 -1
  112. package/dist/providers/openclaw/auto-pair.d.ts +1 -6
  113. package/dist/providers/openclaw/auto-pair.js +1 -10
  114. package/dist/providers/openclaw/auto-pair.js.map +1 -1
  115. package/dist/providers/openclaw/device-identity.d.ts +1 -1
  116. package/dist/providers/openclaw/device-identity.js +33 -17
  117. package/dist/providers/openclaw/device-identity.js.map +1 -1
  118. package/dist/providers/openclaw/gateway-adapter.d.ts +0 -5
  119. package/dist/providers/openclaw/gateway-adapter.js +4 -32
  120. package/dist/providers/openclaw/gateway-adapter.js.map +1 -1
  121. package/dist/providers/openclaw/gateway-client.js +3 -9
  122. package/dist/providers/openclaw/gateway-client.js.map +1 -1
  123. package/dist/providers/openclaw/index.js +2 -15
  124. package/dist/providers/openclaw/index.js.map +1 -1
  125. package/dist/providers/types.d.ts +0 -10
  126. package/dist/slack-relay-server.d.ts +4 -33
  127. package/dist/slack-relay-server.js +9 -57
  128. package/dist/slack-relay-server.js.map +1 -1
  129. package/dist/types.d.ts +1 -12
  130. package/dist/types.js +0 -6
  131. package/dist/types.js.map +1 -1
  132. package/dist/utils/agent-controller-bin.d.ts +0 -6
  133. package/dist/utils/agent-controller-bin.js +1 -21
  134. package/dist/utils/agent-controller-bin.js.map +1 -1
  135. package/dist/utils/anthropic-auth.d.ts +1 -22
  136. package/dist/utils/anthropic-auth.js +0 -10
  137. package/dist/utils/anthropic-auth.js.map +1 -1
  138. package/dist/utils/apply-config.d.ts +8 -68
  139. package/dist/utils/apply-config.js +75 -203
  140. package/dist/utils/apply-config.js.map +1 -1
  141. package/dist/utils/backup-push.d.ts +0 -10
  142. package/dist/utils/backup-push.js +0 -15
  143. package/dist/utils/backup-push.js.map +1 -1
  144. package/dist/utils/claude-env.d.ts +1 -10
  145. package/dist/utils/claude-env.js +2 -14
  146. package/dist/utils/claude-env.js.map +1 -1
  147. package/dist/utils/config-merge-paths.d.ts +5 -43
  148. package/dist/utils/config-merge-paths.js +5 -43
  149. package/dist/utils/config-merge-paths.js.map +1 -1
  150. package/dist/utils/deploy-type.d.ts +1 -13
  151. package/dist/utils/deploy-type.js +2 -19
  152. package/dist/utils/deploy-type.js.map +1 -1
  153. package/dist/utils/diagnostics.d.ts +0 -7
  154. package/dist/utils/diagnostics.js +0 -15
  155. package/dist/utils/diagnostics.js.map +1 -1
  156. package/dist/utils/exec.d.ts +0 -10
  157. package/dist/utils/exec.js +2 -32
  158. package/dist/utils/exec.js.map +1 -1
  159. package/dist/utils/gateway-restart-handler.d.ts +1 -8
  160. package/dist/utils/gateway-restart-handler.js +1 -8
  161. package/dist/utils/gateway-restart-handler.js.map +1 -1
  162. package/dist/utils/gateway-restart.d.ts +1 -11
  163. package/dist/utils/gateway-restart.js +1 -11
  164. package/dist/utils/gateway-restart.js.map +1 -1
  165. package/dist/utils/knowledge-graph.d.ts +2 -25
  166. package/dist/utils/knowledge-graph.js +2 -37
  167. package/dist/utils/knowledge-graph.js.map +1 -1
  168. package/dist/utils/knowledge-push.d.ts +0 -4
  169. package/dist/utils/knowledge-push.js +4 -19
  170. package/dist/utils/knowledge-push.js.map +1 -1
  171. package/dist/utils/legacy-mcp-servers.d.ts +1 -11
  172. package/dist/utils/legacy-mcp-servers.js +1 -11
  173. package/dist/utils/legacy-mcp-servers.js.map +1 -1
  174. package/dist/utils/log-collector.js +0 -2
  175. package/dist/utils/log-collector.js.map +1 -1
  176. package/dist/utils/openclaw-ops.d.ts +5 -72
  177. package/dist/utils/openclaw-ops.js +6 -98
  178. package/dist/utils/openclaw-ops.js.map +1 -1
  179. package/dist/utils/openclaw-stack-update.d.ts +2 -14
  180. package/dist/utils/openclaw-stack-update.js +1 -6
  181. package/dist/utils/openclaw-stack-update.js.map +1 -1
  182. package/dist/utils/package-install.d.ts +0 -5
  183. package/dist/utils/package-install.js +2 -21
  184. package/dist/utils/package-install.js.map +1 -1
  185. package/dist/utils/package-version.d.ts +1 -9
  186. package/dist/utils/package-version.js +1 -9
  187. package/dist/utils/package-version.js.map +1 -1
  188. package/dist/utils/parse-id-at-version.d.ts +1 -11
  189. package/dist/utils/parse-id-at-version.js +1 -11
  190. package/dist/utils/parse-id-at-version.js.map +1 -1
  191. package/dist/utils/plugin-reconcile.d.ts +2 -33
  192. package/dist/utils/plugin-reconcile.js +7 -77
  193. package/dist/utils/plugin-reconcile.js.map +1 -1
  194. package/dist/utils/release-channel.d.ts +0 -8
  195. package/dist/utils/release-channel.js.map +1 -1
  196. package/dist/utils/write-home-files.d.ts +2 -24
  197. package/dist/utils/write-home-files.js +3 -27
  198. package/dist/utils/write-home-files.js.map +1 -1
  199. package/dist/utils/write-workspace-files.d.ts +0 -14
  200. package/dist/utils/write-workspace-files.js +1 -19
  201. package/dist/utils/write-workspace-files.js.map +1 -1
  202. package/dist/workspace.d.ts +1 -21
  203. package/dist/workspace.js +1 -21
  204. package/dist/workspace.js.map +1 -1
  205. package/package.json +1 -1
@@ -6,20 +6,7 @@ import { config } from '../config.js';
6
6
  import { withEaccesRetry, installAcSelf, AC_PACKAGE, } from '../utils/openclaw-ops.js';
7
7
  import { runOpenclawStackUpdate } from '../utils/openclaw-stack-update.js';
8
8
  import { logCollector } from '../connection.js';
9
- /**
10
- * Run the explicit-version self-update flow. Throws when `installOpenclaw`
11
- * or `installAcSelf` fail outright — per-plugin failures are recorded in
12
- * the result rather than thrown. The caller is responsible for translating
13
- * thrown errors into an AgentResponse / process exit.
14
- *
15
- * IMPORTANT: when `acChanged` is true, this function does NOT call
16
- * `removeLockFile()` and does NOT sleep — both are now the caller's job
17
- * (handler defers them to the next tick AFTER `api.publishResponse` so the
18
- * backend sees a real `success: true` response before the supervisor picks
19
- * up the missing lock and restarts the process). The CLI entrypoint
20
- * (`runSelfUpdateCli`) handles this directly since there's no response to
21
- * publish.
22
- */
9
+ /** Callers own lock removal: the WS handler delays it to give the response a chance to publish. */
23
10
  export async function runExplicitSelfUpdate(currentVersion, payload) {
24
11
  let runtimeChanged = false;
25
12
  let pluginSummary;
@@ -31,7 +18,6 @@ export async function runExplicitSelfUpdate(currentVersion, payload) {
31
18
  targetOpenclaw: payload.openclaw?.version,
32
19
  pluginCount: payload.openclaw?.plugins?.length ?? 0,
33
20
  });
34
- // 1) openclaw runtime + plugins (one gateway restart at the end)
35
21
  if (payload.openclaw) {
36
22
  const stack = await runOpenclawStackUpdate({
37
23
  version: payload.openclaw.version,
@@ -42,10 +28,6 @@ export async function runExplicitSelfUpdate(currentVersion, payload) {
42
28
  pluginSummary = stack.pluginSummary;
43
29
  gatewayRestarted = stack.gatewayRestarted;
44
30
  }
45
- // 2) agent-controller swap LAST. Note: we run `npm install -g` here but
46
- // do NOT remove the lockfile or sleep — the WS handler defers that
47
- // work until AFTER the AgentResponse is published. The CLI path runs
48
- // this same function and handles the lockfile + sleep itself.
49
31
  if (payload.agentController?.version) {
50
32
  acChanged = await installAcSelf(payload.agentController.version, currentVersion);
51
33
  if (acChanged) {
@@ -54,11 +36,7 @@ export async function runExplicitSelfUpdate(currentVersion, payload) {
54
36
  }
55
37
  return { runtimeChanged, pluginSummary, gatewayRestarted, acChanged };
56
38
  }
57
- // ---------------------------------------------------------------------------
58
- // Legacy channel-based path — preserved for old backends that publish
59
- // `self_update` with an empty payload (and for the CLI fallback when the
60
- // runtime-targets endpoint is unreachable).
61
- // ---------------------------------------------------------------------------
39
+ // Empty-payload self_update from older backends still uses the release channel.
62
40
  export async function selfUpdate(currentVersion) {
63
41
  const channel = getReleaseChannel();
64
42
  const tag = channel === 'stable' ? 'latest' : channel;
@@ -75,26 +53,14 @@ export async function selfUpdate(currentVersion) {
75
53
  removeLockFile();
76
54
  await new Promise((resolve) => setTimeout(resolve, 30_000));
77
55
  }
78
- // ---------------------------------------------------------------------------
79
- // CLI entrypoint — try the new on-demand /api/agent/runtime-targets path
80
- // first; fall back to the legacy channel-based path if the backend is
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.
87
- // ---------------------------------------------------------------------------
56
+ // Reconciliation shares this target lookup so it selects the same versions as self-update.
88
57
  export async function fetchRuntimeTargets() {
89
58
  const backendUrl = config.backendUrl;
90
59
  const token = config.agentToken;
91
60
  if (!backendUrl || !token)
92
61
  return null;
93
62
  try {
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.
63
+ // Unavailable or invalid targets deliberately fall back to the legacy release-channel path.
98
64
  const api = createAgentApi(backendUrl, token);
99
65
  const data = (await api.get('/api/agent/runtime-targets'));
100
66
  if (!data || (!data.openclaw && !data.agentController))
@@ -105,23 +71,12 @@ export async function fetchRuntimeTargets() {
105
71
  return null;
106
72
  }
107
73
  }
108
- /**
109
- * Top-level CLI entrypoint invoked by `agent-controller self-update`.
110
- * Tries the new explicit-payload flow first; falls back to legacy when
111
- * the backend has no runtime-targets endpoint or no override configured.
112
- *
113
- * Unlike the WS handler path (handlers/self-update.ts), the CLI has no
114
- * AgentResponse to publish, so we keep the original
115
- * `removeLockFile() + sleep(30s)` tail when the agent-controller actually
116
- * changed — that's the supervisor handoff signal.
117
- */
74
+ /** The CLI has no response to publish, so it can hand off to the supervisor directly. */
118
75
  export async function runSelfUpdateCli(currentVersion) {
119
76
  const targets = await fetchRuntimeTargets();
120
77
  if (targets) {
121
78
  const channel = getReleaseChannel();
122
79
  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
80
  const pluginCount = targets.openclaw?.plugins?.length ?? 0;
126
81
  const summaryParts = [];
127
82
  if (targets.openclaw) {
@@ -135,9 +90,6 @@ export async function runSelfUpdateCli(currentVersion) {
135
90
  if (summaryParts.length > 0) {
136
91
  console.log(`Backend targets: ${summaryParts.join(', ')}`);
137
92
  }
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
93
  if (targets.openclaw) {
142
94
  console.log(`Installing openclaw runtime ${targets.openclaw.version}...`);
143
95
  }
@@ -148,7 +100,6 @@ export async function runSelfUpdateCli(currentVersion) {
148
100
  console.log(`Installing agent-controller ${targets.agentController.version}...`);
149
101
  }
150
102
  const result = await runExplicitSelfUpdate(currentVersion, targets);
151
- // Result lines — what actually happened.
152
103
  if (targets.openclaw) {
153
104
  if (result.runtimeChanged) {
154
105
  console.log(`openclaw runtime installed at ${targets.openclaw.version}`);
@@ -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,6 +1,2 @@
1
- /**
2
- * Internal seam — wraps `process.kill` so tests can swap in a stub without
3
- * mocking the global. Exported for testing only.
4
- */
5
1
  export declare const _killProcess: (pid: number, signal: NodeJS.Signals) => void;
6
2
  export declare function runStopCli(): Promise<void>;
@@ -1,31 +1,8 @@
1
1
  import { isLockFilePresent, readLockFilePid } from '../lockfile.js';
2
2
  import { logCollector } from '../connection.js';
3
3
  import { toErrorMessage } from '../utils/response.js';
4
- // ---------------------------------------------------------------------------
5
- // CLI entrypoint for `agent-controller stop`. The WS handler at
6
- // src/handlers/stop.ts gracefully shuts down the running agent-controller
7
- // process — the CLI can't do that directly because it's a separate
8
- // short-lived process, so we signal the running daemon instead.
9
- //
10
- // Strategy (option B from the design discussion):
11
- // 1. Read the lockfile (~/.openclaw/agent-controller/agent-controller.lock
12
- // or /opt/openclaw-cloud/agent-controller/agent-controller.lock) to
13
- // find the daemon PID.
14
- // 2. Send SIGTERM. The daemon's normal shutdown path runs.
15
- // 3. Exit 0 once the signal is sent — we don't wait for the daemon to
16
- // actually exit because the supervisor (systemd/launchd/k8s) will
17
- // decide whether to restart it.
18
- //
19
- // Failure modes:
20
- // - No lockfile / daemon not running → exit 0 with a "not running" log
21
- // - Lockfile exists but PID is gone (stale) → exit 0, hint to remove lock
22
- // - kill(pid, SIGTERM) throws → exit 1 (permission, etc.)
23
- // ---------------------------------------------------------------------------
4
+ // The CLI is a separate process: signal the lockfile PID and leave restart policy to the supervisor.
24
5
  const STOP_SIGNAL = 'SIGTERM';
25
- /**
26
- * Internal seam — wraps `process.kill` so tests can swap in a stub without
27
- * mocking the global. Exported for testing only.
28
- */
29
6
  export const _killProcess = (pid, signal) => {
30
7
  process.kill(pid, signal);
31
8
  };
@@ -1 +1 @@
1
- {"version":3,"file":"stop-cli.js","sourceRoot":"","sources":["../../src/commands/stop-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,8EAA8E;AAC9E,gEAAgE;AAChE,0EAA0E;AAC1E,mEAAmE;AACnE,gEAAgE;AAChE,EAAE;AACF,kDAAkD;AAClD,6EAA6E;AAC7E,yEAAyE;AACzE,4BAA4B;AAC5B,6DAA6D;AAC7D,wEAAwE;AACxE,uEAAuE;AACvE,qCAAqC;AACrC,EAAE;AACF,iBAAiB;AACjB,yEAAyE;AACzE,4EAA4E;AAC5E,4DAA4D;AAC5D,8EAA8E;AAE9E,MAAM,WAAW,GAAmB,SAAS,CAAC;AAE9C;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,MAAsB,EAAQ,EAAE;IACxE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAErE,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;QAC3E,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;IAC9B,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CACT,gFAAgF;YAC9E,wEAAwE,CAC3E,CAAC;QACF,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,kBAAkB,WAAW,6BAA6B,GAAG,MAAM,CAAC,CAAC;IACjF,IAAI,CAAC;QACH,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,GAA4B,CAAC;QACvC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CACT,kBAAkB,GAAG,4DAA4D,CAClF,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,+BAA+B,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;QAC5D,YAAY,EAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"stop-cli.js","sourceRoot":"","sources":["../../src/commands/stop-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,qGAAqG;AAErG,MAAM,WAAW,GAAmB,SAAS,CAAC;AAE9C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,MAAsB,EAAQ,EAAE;IACxE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAErE,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;QAC3E,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;IAC9B,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CACT,gFAAgF;YAC9E,wEAAwE,CAC3E,CAAC;QACF,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,kBAAkB,WAAW,6BAA6B,GAAG,MAAM,CAAC,CAAC;IACjF,IAAI,CAAC;QACH,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,GAA4B,CAAC;QACvC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CACT,kBAAkB,GAAG,4DAA4D,CAClF,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,+BAA+B,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;QAC5D,YAAY,EAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC7B,CAAC"}
@@ -1,13 +1,7 @@
1
- /** VM provisioner writes env here */
2
1
  export declare const VM_ENV_PATH = "/opt/openclaw-cloud/agent-controller/.env";
3
2
  export declare function getConfigDir(): string;
4
3
  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
- */
4
+ /** Env files carry AGENT_TOKEN and provider keys, so mode 0600 is mandatory. */
11
5
  export declare function writeEnvFile(filePath: string, vars: Record<string, string>): Promise<void>;
12
6
  export declare function saveEnvFile(config: {
13
7
  centrifugoUrl: string;
@@ -17,20 +11,9 @@ export declare function saveEnvFile(config: {
17
11
  gatewayToken?: string | null;
18
12
  }): Promise<void>;
19
13
  /**
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.
14
+ * First occurrence wins, matching loadEnvFile precedence. Do not filter through ENV_KEYS:
15
+ * rewriting must preserve keys consumed only by systemd or apiKeyHelper.
29
16
  */
30
17
  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
18
  export declare function readEnvFile(filePath: string): Promise<Record<string, string>>;
36
19
  export declare function loadEnvFile(): Promise<void>;
@@ -26,7 +26,6 @@ const ENV_KEYS = [
26
26
  'MOCK_TASK_DELAY_MS',
27
27
  'MOCK_TASK_TEXT',
28
28
  ];
29
- /** VM provisioner writes env here */
30
29
  export const VM_ENV_PATH = '/opt/openclaw-cloud/agent-controller/.env';
31
30
  export function getConfigDir() {
32
31
  return path.join(config.stateDir, 'agent-controller');
@@ -34,12 +33,7 @@ export function getConfigDir() {
34
33
  export function getConfigPath() {
35
34
  return path.join(getConfigDir(), 'agent.env');
36
35
  }
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
- */
36
+ /** Env files carry AGENT_TOKEN and provider keys, so mode 0600 is mandatory. */
43
37
  export async function writeEnvFile(filePath, vars) {
44
38
  await fs.mkdir(path.dirname(filePath), { recursive: true });
45
39
  const content = Object.entries(vars)
@@ -61,15 +55,8 @@ export async function saveEnvFile(config) {
61
55
  console.log(` Config saved to ${getConfigPath()}`);
62
56
  }
63
57
  /**
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.
58
+ * First occurrence wins, matching loadEnvFile precedence. Do not filter through ENV_KEYS:
59
+ * rewriting must preserve keys consumed only by systemd or apiKeyHelper.
73
60
  */
74
61
  export function parseEnvContent(content) {
75
62
  const vars = {};
@@ -86,10 +73,6 @@ export function parseEnvContent(content) {
86
73
  }
87
74
  return vars;
88
75
  }
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
76
  export async function readEnvFile(filePath) {
94
77
  try {
95
78
  return parseEnvContent(await fs.readFile(filePath, 'utf-8'));
@@ -106,9 +89,7 @@ async function loadFile(filePath) {
106
89
  }
107
90
  }
108
91
  export async function loadEnvFile() {
109
- // 1. User config dir (~/.openclaw/agent-controller/agent.env)
110
92
  await loadFile(getConfigPath());
111
- // 2. VM provisioner path (/opt/openclaw-cloud/agent-controller/.env)
112
93
  await loadFile(VM_ENV_PATH);
113
94
  }
114
95
  //# sourceMappingURL=config-file.js.map
@@ -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":"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"}
package/dist/config.d.ts CHANGED
@@ -1,49 +1,27 @@
1
1
  export declare const config: {
2
- /** Base state directory — ~/.openclaw or OPENCLAW_STATE_DIR */
3
2
  readonly stateDir: string;
4
- /** Debug mode (AC_DEBUG or DEBUG) */
5
3
  readonly debug: boolean;
6
- /** Agent UUID (required for main entry, optional in CLI) */
7
4
  readonly agentId: string | undefined;
8
- /** Bearer token for backend API */
9
5
  readonly agentToken: string | undefined;
10
- /** Centrifugo WS endpoint */
11
6
  readonly centrifugoUrl: string | undefined;
12
- /** Backend API URL — BACKEND_URL takes priority, fallback to BACKEND_INTERNAL_URL */
13
7
  readonly backendUrl: string | undefined;
14
- /** Agent provider type */
15
8
  readonly agentProvider: string;
16
- /** OpenClaw Gateway WS URL */
17
9
  readonly gatewayWsUrl: string;
18
- /** OpenClaw Gateway auth token */
19
10
  readonly gatewayToken: string;
20
- /** Release channel — beta or stable */
21
11
  readonly releaseChannel: "beta" | "stable";
22
- /** Workspace directory override */
23
12
  readonly workspaceDir: string | undefined;
24
- /** Deploy type — 'vm' or undefined */
25
13
  readonly agentDeployType: string | undefined;
26
- /** HOME directory */
27
14
  readonly home: string;
28
- /** Anthropic API key (claude-code provider) */
29
15
  readonly anthropicApiKey: string | undefined;
30
- /** Anthropic auth token — alternative to API key (claude-code provider) */
31
16
  readonly anthropicAuthToken: string | undefined;
32
- /** Claude Code OAuth token — issued by `claude login` (claude-code provider) */
33
17
  readonly claudeCodeOauthToken: string | undefined;
34
- /** Workspace directory for the claude-code provider */
35
18
  readonly claudeWorkspaceDir: string;
36
- /** Optional CLAUDE.md content for the claude-code workspace (set by bootstrap). */
37
19
  readonly claudeMdContent: string | undefined;
38
20
  /** Bearer token the openclaw Slack relay client must present (defense-in-depth on loopback). */
39
21
  readonly slackRelayAuthToken: string | undefined;
40
- /** Optional port override for the local Slack relay WS server (default 8788). */
41
22
  readonly slackRelayPort: number | undefined;
42
- /** Idle poll interval for the mock board worker (mock provider only). */
43
23
  readonly mockBoardPollMs: number;
44
- /** Simulated "thinking" delay before the mock board worker submits. */
45
24
  readonly mockTaskDelayMs: number;
46
- /** Text the mock board worker submits as the agent's reply. */
47
25
  readonly mockTaskText: string;
48
26
  };
49
27
  export declare function requireConfig<K extends keyof typeof config>(key: K): NonNullable<(typeof config)[K]>;
package/dist/config.js CHANGED
@@ -1,16 +1,6 @@
1
1
  import os from 'node:os';
2
2
  import path from 'node:path';
3
- /**
4
- * Central configuration object — single source of truth for all env vars.
5
- *
6
- * IMPORTANT: This module must be imported AFTER config-file.ts loadEnvFile()
7
- * has run, because loadEnvFile() populates process.env from .env files.
8
- * The main entry point (index.ts) and CLI commands call loadEnvFile() before
9
- * importing anything that depends on config.
10
- *
11
- * For platform-specific values (APPDATA/USERPROFILE on Windows), access
12
- * process.env directly.
13
- */
3
+ // Load env files before consuming config; platform-specific variables remain direct process.env reads.
14
4
  function stateDir() {
15
5
  return process.env.OPENCLAW_STATE_DIR?.trim() || path.join(os.homedir(), '.openclaw');
16
6
  }
@@ -19,76 +9,58 @@ function positiveIntEnv(name, fallback) {
19
9
  return Number.isInteger(parsed) && parsed > 0 ? parsed : fallback;
20
10
  }
21
11
  export const config = {
22
- /** Base state directory — ~/.openclaw or OPENCLAW_STATE_DIR */
23
12
  get stateDir() {
24
13
  return stateDir();
25
14
  },
26
- /** Debug mode (AC_DEBUG or DEBUG) */
27
15
  get debug() {
28
16
  return !!(process.env.AC_DEBUG || process.env.DEBUG);
29
17
  },
30
- /** Agent UUID (required for main entry, optional in CLI) */
31
18
  get agentId() {
32
19
  return process.env.AGENT_ID;
33
20
  },
34
- /** Bearer token for backend API */
35
21
  get agentToken() {
36
22
  return process.env.AGENT_TOKEN;
37
23
  },
38
- /** Centrifugo WS endpoint */
39
24
  get centrifugoUrl() {
40
25
  return process.env.CENTRIFUGO_URL;
41
26
  },
42
- /** Backend API URL — BACKEND_URL takes priority, fallback to BACKEND_INTERNAL_URL */
43
27
  get backendUrl() {
44
28
  return process.env.BACKEND_URL || process.env.BACKEND_INTERNAL_URL || undefined;
45
29
  },
46
- /** Agent provider type */
47
30
  get agentProvider() {
48
31
  return process.env.AGENT_PROVIDER ?? 'openclaw';
49
32
  },
50
- /** OpenClaw Gateway WS URL */
51
33
  get gatewayWsUrl() {
52
34
  return process.env.OPENCLAW_GATEWAY_WS ?? 'ws://localhost:18789';
53
35
  },
54
- /** OpenClaw Gateway auth token */
55
36
  get gatewayToken() {
56
37
  return process.env.OPENCLAW_GATEWAY_TOKEN ?? '';
57
38
  },
58
- /** Release channel — beta or stable */
59
39
  get releaseChannel() {
60
40
  const raw = process.env.AC_RELEASE_CHANNEL?.trim().toLowerCase();
61
41
  return raw === 'beta' ? 'beta' : 'stable';
62
42
  },
63
- /** Workspace directory override */
64
43
  get workspaceDir() {
65
44
  return process.env.WORKSPACE_DIR?.trim() || undefined;
66
45
  },
67
- /** Deploy type — 'vm' or undefined */
68
46
  get agentDeployType() {
69
47
  return process.env.AGENT_DEPLOY_TYPE;
70
48
  },
71
- /** HOME directory */
72
49
  get home() {
73
50
  return process.env.HOME ?? '/root';
74
51
  },
75
- /** Anthropic API key (claude-code provider) */
76
52
  get anthropicApiKey() {
77
53
  return process.env.ANTHROPIC_API_KEY;
78
54
  },
79
- /** Anthropic auth token — alternative to API key (claude-code provider) */
80
55
  get anthropicAuthToken() {
81
56
  return process.env.ANTHROPIC_AUTH_TOKEN;
82
57
  },
83
- /** Claude Code OAuth token — issued by `claude login` (claude-code provider) */
84
58
  get claudeCodeOauthToken() {
85
59
  return process.env.CLAUDE_CODE_OAUTH_TOKEN;
86
60
  },
87
- /** Workspace directory for the claude-code provider */
88
61
  get claudeWorkspaceDir() {
89
62
  return process.env.CLAUDE_WORKSPACE_DIR ?? '/home/ubuntu/.claude/workspace';
90
63
  },
91
- /** Optional CLAUDE.md content for the claude-code workspace (set by bootstrap). */
92
64
  get claudeMdContent() {
93
65
  return process.env.CLAUDE_MD_CONTENT?.trim() || undefined;
94
66
  },
@@ -96,7 +68,6 @@ export const config = {
96
68
  get slackRelayAuthToken() {
97
69
  return process.env.SLACK_RELAY_AUTH_TOKEN?.trim() || undefined;
98
70
  },
99
- /** Optional port override for the local Slack relay WS server (default 8788). */
100
71
  get slackRelayPort() {
101
72
  const raw = process.env.SLACK_RELAY_PORT?.trim();
102
73
  if (!raw)
@@ -104,20 +75,16 @@ export const config = {
104
75
  const parsed = Number.parseInt(raw, 10);
105
76
  return Number.isInteger(parsed) && parsed > 0 ? parsed : undefined;
106
77
  },
107
- /** Idle poll interval for the mock board worker (mock provider only). */
108
78
  get mockBoardPollMs() {
109
79
  return positiveIntEnv('MOCK_BOARD_POLL_MS', 7_000);
110
80
  },
111
- /** Simulated "thinking" delay before the mock board worker submits. */
112
81
  get mockTaskDelayMs() {
113
82
  return positiveIntEnv('MOCK_TASK_DELAY_MS', 1_500);
114
83
  },
115
- /** Text the mock board worker submits as the agent's reply. */
116
84
  get mockTaskText() {
117
85
  return process.env.MOCK_TASK_TEXT?.trim() || 'Mock agent completed the task.';
118
86
  },
119
87
  };
120
- /* ── Strict accessors (throw on missing) ────────────────────── */
121
88
  export function requireConfig(key) {
122
89
  const value = config[key];
123
90
  if (value === undefined || value === null || value === '') {
@@ -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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"}
@@ -23,19 +23,8 @@ import { handleUpdateConfig } from './handlers/update-config.js';
23
23
  import { createMemoryHandlers } from './handlers/memory.js';
24
24
  import { toErrorMessage } from './utils/response.js';
25
25
  import { LogCollector } from './utils/log-collector.js';
26
- // ---------------------------------------------------------------------------
27
- // Log collector singleton — initialized in createConnection()
28
- // ---------------------------------------------------------------------------
29
26
  export let logCollector;
30
- // ---------------------------------------------------------------------------
31
- // Centrifuge state mappers
32
- //
33
- // The centrifuge library exposes `.state` as a string-valued enum
34
- // (`State.Connected = 'connected'`, etc.) on both clients and subscriptions.
35
- // We coerce defensively to the CentrifugoStatus string-literal contract so
36
- // any unexpected enum value (library upgrade, runtime edge case) maps to a
37
- // safe "down" state rather than throwing — heartbeats must never crash.
38
- // ---------------------------------------------------------------------------
27
+ // Unexpected Centrifuge states must map to down; library changes must not crash heartbeats.
39
28
  export function mapClientState(raw) {
40
29
  if (raw === 'connected')
41
30
  return 'connected';
@@ -50,9 +39,6 @@ export function mapSubState(raw) {
50
39
  return 'subscribing';
51
40
  return 'unsubscribed';
52
41
  }
53
- // ---------------------------------------------------------------------------
54
- // Chat response types — moved to module scope to avoid re-creation on every message
55
- // ---------------------------------------------------------------------------
56
42
  const CHAT_RESPONSE_TYPES = new Set([
57
43
  'chat_sessions_response',
58
44
  'chat_history_response',
@@ -60,9 +46,6 @@ const CHAT_RESPONSE_TYPES = new Set([
60
46
  'chat_delta',
61
47
  'chat_typing',
62
48
  ]);
63
- // ---------------------------------------------------------------------------
64
- // Handlers
65
- // ---------------------------------------------------------------------------
66
49
  function buildHandlers(opts) {
67
50
  return {
68
51
  diagnostics: handleDiagnostics,
@@ -86,9 +69,6 @@ function buildHandlers(opts) {
86
69
  ...(opts.knowledgeGraphManager ? createMemoryHandlers(opts.knowledgeGraphManager) : {}),
87
70
  };
88
71
  }
89
- // ---------------------------------------------------------------------------
90
- // Step 1: Create Centrifuge client (no subscriptions yet)
91
- // ---------------------------------------------------------------------------
92
72
  function createClient(opts) {
93
73
  const getToken = async () => {
94
74
  console.log('Fetching connection token...');
@@ -102,7 +82,6 @@ function createClient(opts) {
102
82
  throw err;
103
83
  }
104
84
  };
105
- // Ensure Centrifugo URL includes /connection/websocket path
106
85
  let wsUrl = opts.url;
107
86
  if (!wsUrl.includes('/connection/websocket')) {
108
87
  wsUrl = wsUrl.replace(/\/+$/, '') + '/connection/websocket';
@@ -132,9 +111,6 @@ function createClient(opts) {
132
111
  });
133
112
  return client;
134
113
  }
135
- // ---------------------------------------------------------------------------
136
- // Step 2: Subscribe to a channel with subscription token auth
137
- // ---------------------------------------------------------------------------
138
114
  function subscribeToChannel(client, channel, opts) {
139
115
  const sub = client.newSubscription(channel, {
140
116
  getToken: async () => {
@@ -165,9 +141,6 @@ function subscribeToChannel(client, channel, opts) {
165
141
  sub.subscribe();
166
142
  return sub;
167
143
  }
168
- // ---------------------------------------------------------------------------
169
- // Step 3: Wire up system command channel (agent:<agentId>)
170
- // ---------------------------------------------------------------------------
171
144
  function attachCommandHandlers(sub, channel, opts, markEvent) {
172
145
  const handlers = buildHandlers(opts);
173
146
  let commandQueue = Promise.resolve();
@@ -242,9 +215,6 @@ function attachCommandHandlers(sub, channel, opts, markEvent) {
242
215
  });
243
216
  return () => commandQueue;
244
217
  }
245
- // ---------------------------------------------------------------------------
246
- // Step 4: Wire up chat command channel (chat:<agentId>)
247
- // ---------------------------------------------------------------------------
248
218
  function attachChatHandlers(sub, channel, opts, markEvent) {
249
219
  sub.on('publication', (ctx) => {
250
220
  markEvent();
@@ -284,25 +254,18 @@ function attachChatHandlers(sub, channel, opts, markEvent) {
284
254
  }
285
255
  });
286
256
  }
287
- // ---------------------------------------------------------------------------
288
- // Public API
289
- // ---------------------------------------------------------------------------
290
257
  export function createConnection(opts) {
291
- // Initialize log collector singleton
292
258
  logCollector = new LogCollector(opts.api, { flushIntervalMs: 5000, maxBatchSize: 50 });
293
259
  const commandChannel = `agent:${opts.agentId}`;
294
260
  const chatChannel = `chat:${opts.agentId}`;
295
261
  const client = createClient(opts);
296
- // Track the most recent inbound publication across BOTH channels — this is
297
- // the truest "WS is alive end-to-end" signal we can give the backend.
262
+ // Either inbound channel proves command transport is alive; an HTTP heartbeat alone cannot.
298
263
  let lastEventAt = null;
299
264
  const markEvent = () => {
300
265
  lastEventAt = new Date().toISOString();
301
266
  };
302
- // System commands channel (serialized queue)
303
267
  const commandSub = subscribeToChannel(client, commandChannel, opts);
304
268
  const drainCommands = attachCommandHandlers(commandSub, commandChannel, opts, markEvent);
305
- // Chat commands channel (concurrent, fire-and-forget)
306
269
  const chatSub = subscribeToChannel(client, chatChannel, opts);
307
270
  attachChatHandlers(chatSub, chatChannel, opts, markEvent);
308
271
  const getCentrifugoStatus = () => {