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

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 (166) 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 +56 -20
  29. package/dist/config-file.js.map +1 -1
  30. package/dist/config.d.ts +4 -0
  31. package/dist/config.js +12 -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 +87 -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/platform/linux.js +6 -5
  80. package/dist/platform/linux.js.map +1 -1
  81. package/dist/platform/macos.js +3 -2
  82. package/dist/platform/macos.js.map +1 -1
  83. package/dist/platform/windows.js +3 -2
  84. package/dist/platform/windows.js.map +1 -1
  85. package/dist/providers/claude-code/channel-server.js +2 -1
  86. package/dist/providers/claude-code/channel-server.js.map +1 -1
  87. package/dist/providers/claude-code/settings-writer.d.ts +3 -2
  88. package/dist/providers/claude-code/settings-writer.js +6 -15
  89. package/dist/providers/claude-code/settings-writer.js.map +1 -1
  90. package/dist/providers/index.d.ts +13 -0
  91. package/dist/providers/index.js +25 -0
  92. package/dist/providers/index.js.map +1 -1
  93. package/dist/providers/openclaw/gateway-adapter.js +2 -0
  94. package/dist/providers/openclaw/gateway-adapter.js.map +1 -1
  95. package/dist/providers/openclaw/gateway-client.js +6 -1
  96. package/dist/providers/openclaw/gateway-client.js.map +1 -1
  97. package/dist/providers/openclaw/index.js +11 -13
  98. package/dist/providers/openclaw/index.js.map +1 -1
  99. package/dist/slack-relay-server.d.ts +48 -0
  100. package/dist/slack-relay-server.js +197 -0
  101. package/dist/slack-relay-server.js.map +1 -0
  102. package/dist/types.d.ts +16 -1
  103. package/dist/utils/anthropic-auth.d.ts +14 -0
  104. package/dist/utils/anthropic-auth.js +24 -0
  105. package/dist/utils/anthropic-auth.js.map +1 -1
  106. package/dist/utils/apply-config.d.ts +65 -12
  107. package/dist/utils/apply-config.js +295 -100
  108. package/dist/utils/apply-config.js.map +1 -1
  109. package/dist/utils/claude-env.d.ts +6 -0
  110. package/dist/utils/claude-env.js +29 -28
  111. package/dist/utils/claude-env.js.map +1 -1
  112. package/dist/utils/config-merge-paths.d.ts +15 -1
  113. package/dist/utils/config-merge-paths.js +17 -3
  114. package/dist/utils/config-merge-paths.js.map +1 -1
  115. package/dist/utils/deploy-type.d.ts +16 -0
  116. package/dist/utils/deploy-type.js +34 -0
  117. package/dist/utils/deploy-type.js.map +1 -0
  118. package/dist/utils/env.d.ts +0 -1
  119. package/dist/utils/env.js +0 -8
  120. package/dist/utils/env.js.map +1 -1
  121. package/dist/utils/exec.d.ts +11 -0
  122. package/dist/utils/exec.js +47 -1
  123. package/dist/utils/exec.js.map +1 -1
  124. package/dist/utils/gateway-restart-handler.d.ts +6 -2
  125. package/dist/utils/gateway-restart-handler.js +11 -2
  126. package/dist/utils/gateway-restart-handler.js.map +1 -1
  127. package/dist/utils/gateway-restart.d.ts +7 -0
  128. package/dist/utils/gateway-restart.js +12 -4
  129. package/dist/utils/gateway-restart.js.map +1 -1
  130. package/dist/utils/knowledge-graph.d.ts +13 -1
  131. package/dist/utils/knowledge-graph.js +75 -29
  132. package/dist/utils/knowledge-graph.js.map +1 -1
  133. package/dist/utils/legacy-mcp-servers.d.ts +12 -0
  134. package/dist/utils/legacy-mcp-servers.js +37 -0
  135. package/dist/utils/legacy-mcp-servers.js.map +1 -0
  136. package/dist/utils/log-collector.js +2 -1
  137. package/dist/utils/log-collector.js.map +1 -1
  138. package/dist/utils/openclaw-ops.d.ts +45 -3
  139. package/dist/utils/openclaw-ops.js +94 -15
  140. package/dist/utils/openclaw-ops.js.map +1 -1
  141. package/dist/utils/openclaw-stack-update.d.ts +31 -0
  142. package/dist/utils/openclaw-stack-update.js +50 -0
  143. package/dist/utils/openclaw-stack-update.js.map +1 -0
  144. package/dist/utils/package-install.js +4 -12
  145. package/dist/utils/package-install.js.map +1 -1
  146. package/dist/utils/package-version.d.ts +10 -0
  147. package/dist/utils/package-version.js +18 -0
  148. package/dist/utils/package-version.js.map +1 -0
  149. package/dist/utils/parse-id-at-version.d.ts +15 -0
  150. package/dist/utils/parse-id-at-version.js +22 -0
  151. package/dist/utils/parse-id-at-version.js.map +1 -0
  152. package/dist/utils/plugin-reconcile.d.ts +46 -0
  153. package/dist/utils/plugin-reconcile.js +201 -0
  154. package/dist/utils/plugin-reconcile.js.map +1 -0
  155. package/dist/utils/response.js +1 -0
  156. package/dist/utils/response.js.map +1 -1
  157. package/dist/utils/write-home-files.d.ts +27 -0
  158. package/dist/utils/write-home-files.js +72 -0
  159. package/dist/utils/write-home-files.js.map +1 -0
  160. package/dist/utils/write-workspace-files.d.ts +1 -1
  161. package/dist/utils/write-workspace-files.js +19 -7
  162. package/dist/utils/write-workspace-files.js.map +1 -1
  163. package/dist/workspace.d.ts +11 -0
  164. package/dist/workspace.js +20 -0
  165. package/dist/workspace.js.map +1 -1
  166. package/package.json +9 -4
@@ -3,17 +3,38 @@ import path from 'node:path';
3
3
  import os from 'node:os';
4
4
  import { writeClaudeEnv } from './claude-env.js';
5
5
  import { writeWorkspaceFiles } from './write-workspace-files.js';
6
+ import { writeHomeFiles } from './write-home-files.js';
6
7
  import { restartGateway } from './gateway-restart.js';
7
- import { VM_ENV_PATH } from '../config-file.js';
8
+ import { VM_ENV_PATH, readEnvFile, writeEnvFile } from '../config-file.js';
8
9
  import { config } from '../config.js';
9
10
  import { getWorkspaceDir } from '../workspace.js';
10
- import { MERGEABLE_CONFIG_PATHS, MERGEABLE_SETTINGS_PATHS } from './config-merge-paths.js';
11
+ import { MCP_SERVERS_PATH, MERGEABLE_CONFIG_PATHS, MERGEABLE_SETTINGS_PATHS, } from './config-merge-paths.js';
12
+ import { getResolvedDeployType, isManagedDeploy, setResolvedDeployType } from './deploy-type.js';
13
+ import { migrateLegacyMcpServers } from './legacy-mcp-servers.js';
14
+ import { toErrorMessage } from './response.js';
11
15
  function getOpenclawDir() {
12
16
  return config.stateDir;
13
17
  }
14
18
  function getAuthProfilesPath() {
15
19
  return path.join(getOpenclawDir(), 'agents', 'main', 'agent', 'auth-profiles.json');
16
20
  }
21
+ /** Canonical openclaw.json location — `<stateDir>/openclaw.json`. */
22
+ export function getOpenclawJsonPath() {
23
+ return path.join(getOpenclawDir(), 'openclaw.json');
24
+ }
25
+ /**
26
+ * The ONE writer for openclaw.json — atomic (tmp + rename) and mode 0600.
27
+ *
28
+ * Both properties are load-bearing and used to be split across three
29
+ * independent write sites: the full apply wrote 0600 but non-atomically (a
30
+ * reader could see a truncated file), the scoped merge wrote atomically but
31
+ * with no mode (tmp + rename RESETS a pre-existing 0600 file to 0644, leaking
32
+ * `models.providers[*].apiKey`), and the startup memory-MCP injection did
33
+ * neither. Everything goes through here now.
34
+ */
35
+ export async function writeOpenclawJson(data) {
36
+ await writeJsonAtomic(getOpenclawJsonPath(), data, 0o600);
37
+ }
17
38
  /**
18
39
  * Generate auth-profiles.json from openclaw.json auth config + envVars.
19
40
  * openclaw.json contains profile declarations (provider, mode) without secrets.
@@ -76,26 +97,56 @@ async function fileExists(p) {
76
97
  }
77
98
  }
78
99
  /**
79
- * Apply config from bootstrap API response:
100
+ * Write `skills` through the same hardened writer as workspace files. Skills
101
+ * used to have their own copy of this logic in commands/bootstrap.ts that had
102
+ * no path-containment check, so a backend-supplied key like
103
+ * '../../.claude/settings.json' escaped the workspace.
104
+ */
105
+ async function writeSkills(data, logPrefix) {
106
+ if (!data.skills || Object.keys(data.skills).length === 0)
107
+ return;
108
+ const wrote = await writeWorkspaceFiles(data.skills, getWorkspaceDir());
109
+ console.log(`${logPrefix} wrote ${wrote} skill files`);
110
+ }
111
+ /**
112
+ * Vars without which agent-controller cannot boot: `requireConfig` exits the
113
+ * process when any is missing. The VM provisioner writes them; nothing that
114
+ * arrives later over the wire may remove them from the VM `.env`.
115
+ */
116
+ const BOOT_CRITICAL_ENV_KEYS = [
117
+ 'AGENT_ID',
118
+ 'AGENT_TOKEN',
119
+ 'CENTRIFUGO_URL',
120
+ 'BACKEND_URL',
121
+ ];
122
+ /**
123
+ * FULL apply — only ever legal on a managed install (see `isManagedDeploy`).
124
+ * Rewrites files wholesale:
80
125
  * 1. Write openclaw.json
81
- * 2. Write auth-profiles.json + settings.json (from envVars)
82
- * 3. Write .env (for VM agents)
83
- * 4. Restart gateway
126
+ * 2. Write workspace files + skills
127
+ * 3. Write auth-profiles.json + settings.json (from envVars)
128
+ * 4. MERGE .env (for VM agents) — never a wholesale replace, see step 4 below
129
+ * 5. Restart gateway
84
130
  */
85
131
  export async function applyBootstrapConfig(data) {
86
- const openclawDir = getOpenclawDir();
87
132
  // 1. Write openclaw.json
88
133
  if (data.openclawConfig) {
89
- const configPath = path.join(openclawDir, 'openclaw.json');
90
- await fs.mkdir(openclawDir, { recursive: true });
91
- await fs.writeFile(configPath, JSON.stringify(data.openclawConfig, null, 2) + '\n');
134
+ await writeOpenclawJson(data.openclawConfig);
92
135
  console.log('[apply-config] openclaw.json updated');
93
136
  }
94
137
  // 1a. Write workspace files (shared files pushed by backend on update_config)
95
138
  if (data.workspaceFiles && Object.keys(data.workspaceFiles).length > 0) {
96
139
  const workspaceDir = getWorkspaceDir();
97
- await writeWorkspaceFiles(data.workspaceFiles, workspaceDir);
98
- console.log(`[apply-config] wrote ${Object.keys(data.workspaceFiles).length} workspace files`);
140
+ const wrote = await writeWorkspaceFiles(data.workspaceFiles, workspaceDir);
141
+ console.log(`[apply-config] wrote ${wrote} workspace files`);
142
+ }
143
+ // 1b. Write skills (same sandbox as workspace files — they share the dir)
144
+ await writeSkills(data, '[apply-config]');
145
+ // 1c. Write home files — platform-managed credentials placed outside the
146
+ // workspace (~/.secrets/SECRETS.txt) so knowledge sync never indexes them.
147
+ const wroteHomeFiles = await writeHomeFiles(data.homeFiles);
148
+ if (wroteHomeFiles > 0) {
149
+ console.log(`[apply-config] wrote ${wroteHomeFiles} home files`);
99
150
  }
100
151
  // 2. Write auth-profiles.json from openclawConfig.auth.profiles + envVars (API keys)
101
152
  if (data.openclawConfig && data.envVars) {
@@ -112,23 +163,57 @@ export async function applyBootstrapConfig(data) {
112
163
  }
113
164
  await writeClaudeEnv(cleanEnvVars);
114
165
  console.log('[apply-config] settings.json updated');
115
- // 3. Write .env for VM agents
116
- if (config.agentDeployType === 'vm' || (await fileExists(VM_ENV_PATH))) {
117
- const envContent = Object.entries(cleanEnvVars)
118
- .map(([k, v]) => `${k}=${v}`)
119
- .join('\n') + '\n';
120
- await fs.mkdir(path.dirname(VM_ENV_PATH), { recursive: true });
121
- await fs.writeFile(VM_ENV_PATH, envContent, { mode: 0o600 });
166
+ // 4. Update .env for VM agents — a MERGE onto the existing file, never a
167
+ // replace.
168
+ //
169
+ // This used to write `{ ...cleanEnvVars, AGENT_DEPLOY_TYPE }`, i.e. the
170
+ // payload's envVars wholesale. But the payload only carries proxy
171
+ // credentials (ANTHROPIC_API_KEY / ANTHROPIC_BASE_URL …), so every
172
+ // boot-critical var the VM provisioner wrote — AGENT_ID, AGENT_TOKEN,
173
+ // CENTRIFUGO_URL, BACKEND_URL, OPENCLAW_GATEWAY_TOKEN, USER_ID,
174
+ // WORKSPACE_ID — was deleted on the first successful update_config. The
175
+ // next service restart then booted a controller with no identity,
176
+ // `requireConfig` exited, and the agent was simply dead.
177
+ //
178
+ // It shipped that way for months, masked by an EACCES on this file (the
179
+ // provisioner left the dir root-owned, so the write always failed). Fixing
180
+ // those permissions on 2026-08-08 unmasked it: the first update_config
181
+ // afterwards clobbered .env on all 5 running VMs and killed agent
182
+ // 87b96f43 overnight (incident 2026-08-09).
183
+ const deployType = getResolvedDeployType();
184
+ if (deployType === 'vm' || (await fileExists(VM_ENV_PATH))) {
185
+ const existingVars = await readEnvFile(VM_ENV_PATH);
186
+ const envOut = { ...existingVars, ...cleanEnvVars };
187
+ // An empty payload value means "remove this key" — the same signal
188
+ // `cleanEnvVars` strips out for settings.json, applied here to the file
189
+ // the key actually lives in. Without this there would be no way to
190
+ // retire a rotated credential from a VM once merging began.
191
+ for (const [k, v] of Object.entries(data.envVars)) {
192
+ if (v === '')
193
+ delete envOut[k];
194
+ }
195
+ if (deployType)
196
+ envOut.AGENT_DEPLOY_TYPE = deployType;
197
+ // Belt and braces: whatever the backend sends, a config update must not
198
+ // be able to leave the controller unable to boot. If one of these was in
199
+ // the file and the merge would drop or blank it, keep what was there.
200
+ for (const k of BOOT_CRITICAL_ENV_KEYS) {
201
+ if (existingVars[k] && !envOut[k]) {
202
+ console.warn(`[apply-config] refusing to remove boot-critical ${k} from .env — keeping existing value`);
203
+ envOut[k] = existingVars[k];
204
+ }
205
+ }
206
+ await writeEnvFile(VM_ENV_PATH, envOut);
122
207
  console.log('[apply-config] .env updated');
123
208
  }
124
209
  }
125
- // 4. Restart gateway
210
+ // 5. Restart gateway
126
211
  try {
127
212
  await restartGateway();
128
213
  console.log('[apply-config] gateway restarted');
129
214
  }
130
215
  catch (err) {
131
- console.error('[apply-config] gateway restart failed:', err instanceof Error ? err.message : err);
216
+ console.error('[apply-config] gateway restart failed:', toErrorMessage(err));
132
217
  }
133
218
  }
134
219
  function isPlainObject(v) {
@@ -175,14 +260,46 @@ function getPath(obj, dotPath) {
175
260
  /** Set dot-path on object, creating intermediate objects as needed. */
176
261
  function setPath(obj, dotPath, value) {
177
262
  const parts = dotPath.split('.');
263
+ const leaf = parts[parts.length - 1];
264
+ if (leaf === undefined)
265
+ return;
178
266
  let cur = obj;
179
267
  for (let i = 0; i < parts.length - 1; i++) {
180
268
  const key = parts[i];
269
+ if (key === undefined)
270
+ continue;
181
271
  if (!isPlainObject(cur[key]))
182
272
  cur[key] = {};
183
273
  cur = cur[key];
184
274
  }
185
- cur[parts[parts.length - 1]] = value;
275
+ cur[leaf] = value;
276
+ }
277
+ /**
278
+ * Keys whose values must never reach a log line. Matched case-insensitively
279
+ * against the key NAME, so it also catches nested holders like
280
+ * `headers.Authorization` and `env.ANTHROPIC_API_KEY`.
281
+ */
282
+ const SECRET_KEY_RE = /token|secret|key|auth|password|credential/i;
283
+ function maskSecretValue(v) {
284
+ if (typeof v !== 'string')
285
+ return '***';
286
+ return v.length <= 4 ? '***' : `***${v.slice(-4)}`;
287
+ }
288
+ /** Deep copy of a config value with secret-ish leaves masked, for logging only. */
289
+ function maskSecrets(value) {
290
+ if (Array.isArray(value))
291
+ return value.map(maskSecrets);
292
+ if (!isPlainObject(value))
293
+ return value;
294
+ const out = {};
295
+ for (const [k, v] of Object.entries(value)) {
296
+ out[k] = SECRET_KEY_RE.test(k) ? maskSecretValue(v) : maskSecrets(v);
297
+ }
298
+ return out;
299
+ }
300
+ /** One-line, secret-masked rendering of a config value for a log message. */
301
+ function describeForLog(value) {
302
+ return JSON.stringify(maskSecrets(value));
186
303
  }
187
304
  /**
188
305
  * Merge a single allowlisted path from remote into local.
@@ -190,11 +307,18 @@ function setPath(obj, dotPath, value) {
190
307
  * Semantics:
191
308
  * - If local missing → copy remote (added).
192
309
  * - If both plain objects → key-by-key merge; new keys added, conflicting
193
- * keys (existing key with different value) logged + skipped (local wins).
310
+ * keys (existing key with different value) logged + skipped (local wins),
311
+ * UNLESS `remoteWins` — then the local entry is overwritten with the remote
312
+ * one and the change is logged (old → new, secrets masked).
194
313
  * - Otherwise (scalars / arrays / subtree) → equality check: equal = no-op,
195
314
  * differ = conflict (local wins).
315
+ *
316
+ * `remoteWins` is only used for `mcp.servers` in openclaw.json. That section is
317
+ * backend-managed (rotated tokens, changed URLs) and local-wins meant an
318
+ * updated server entry could never reach a standalone agent. Every other
319
+ * mergeable path — and ALL of ~/.claude/settings.json — keeps local-wins.
196
320
  */
197
- function mergePath(local, remote, dotPath, logPrefix) {
321
+ function mergePath(local, remote, dotPath, logPrefix, remoteWins = false) {
198
322
  const remoteVal = getPath(remote, dotPath);
199
323
  if (remoteVal === undefined)
200
324
  return { changed: false, outcome: 'equal' };
@@ -206,28 +330,46 @@ function mergePath(local, remote, dotPath, logPrefix) {
206
330
  }
207
331
  // Both objects → key-level merge
208
332
  if (isPlainObject(localVal) && isPlainObject(remoteVal)) {
209
- let anyAdded = false;
333
+ const added = [];
334
+ const overwritten = [];
210
335
  const conflicts = [];
211
336
  for (const [k, v] of Object.entries(remoteVal)) {
212
337
  if (!(k in localVal)) {
213
338
  localVal[k] = v;
214
- anyAdded = true;
339
+ added.push(k);
215
340
  console.log(`${logPrefix} ADDED ${dotPath}.${k}`);
216
341
  }
217
342
  else if (!deepEqual(localVal[k], v)) {
218
- conflicts.push(k);
219
- console.warn(`[config-merge] SKIPPED conflict at ${dotPath}.${k}: keeping local value`);
343
+ if (remoteWins) {
344
+ console.log(`${logPrefix} OVERWROTE ${dotPath}.${k}: ` +
345
+ `${describeForLog(localVal[k])} → ${describeForLog(v)}`);
346
+ localVal[k] = v;
347
+ overwritten.push(k);
348
+ }
349
+ else {
350
+ conflicts.push(k);
351
+ console.warn(`[config-merge] SKIPPED conflict at ${dotPath}.${k}: keeping local value`);
352
+ }
220
353
  }
221
354
  }
222
- if (conflicts.length > 0 && !anyAdded) {
223
- return { changed: false, outcome: 'conflict', detail: conflicts.join(',') };
355
+ // Keys present only locally are never removed — the backend payload is not
356
+ // authoritative about deletions. Documented in applyMergeableConfig.
357
+ const changed = added.length > 0 || overwritten.length > 0;
358
+ const detailParts = [];
359
+ if (overwritten.length > 0)
360
+ detailParts.push(`overwritten:${overwritten.join(',')}`);
361
+ if (conflicts.length > 0)
362
+ detailParts.push(`conflicts:${conflicts.join(',')}`);
363
+ const detail = detailParts.length > 0 ? detailParts.join(' ') : undefined;
364
+ if (!changed) {
365
+ return conflicts.length > 0
366
+ ? { changed: false, outcome: 'conflict', detail: conflicts.join(',') }
367
+ : { changed: false, outcome: 'equal' };
224
368
  }
225
- if (conflicts.length > 0 && anyAdded) {
226
- return { changed: true, outcome: 'merged', detail: `conflicts:${conflicts.join(',')}` };
369
+ if (overwritten.length > 0 && added.length === 0) {
370
+ return { changed: true, outcome: 'overwritten', detail };
227
371
  }
228
- if (anyAdded)
229
- return { changed: true, outcome: 'merged' };
230
- return { changed: false, outcome: 'equal' };
372
+ return { changed: true, outcome: 'merged', detail };
231
373
  }
232
374
  // Leaf or array or mismatched types → equality check
233
375
  if (deepEqual(localVal, remoteVal)) {
@@ -246,11 +388,31 @@ async function readJsonSafe(filePath) {
246
388
  return null;
247
389
  }
248
390
  }
391
+ /**
392
+ * Write JSON through a tmp file + rename so a reader never sees a half-written
393
+ * config. Without an explicit `mode` the existing file's permissions are
394
+ * carried over: the tmp is a brand-new inode, so a plain rename would silently
395
+ * relax a 0600 file (e.g. a user's ~/.claude/settings.json) to whatever the
396
+ * umask allows.
397
+ */
249
398
  async function writeJsonAtomic(filePath, data, mode) {
250
399
  await fs.mkdir(path.dirname(filePath), { recursive: true });
400
+ let effectiveMode = mode;
401
+ if (effectiveMode === undefined) {
402
+ try {
403
+ effectiveMode = (await fs.stat(filePath)).mode & 0o777;
404
+ }
405
+ catch {
406
+ // No existing file (or a mocked fs) — let the umask decide.
407
+ }
408
+ }
251
409
  const tmp = filePath + '.tmp';
252
- const opts = mode !== undefined ? { mode } : undefined;
410
+ const opts = effectiveMode !== undefined ? { mode: effectiveMode } : undefined;
253
411
  await fs.writeFile(tmp, JSON.stringify(data, null, 2) + '\n', opts);
412
+ // `mode` on writeFile only applies when the file is CREATED — a tmp left
413
+ // behind by a crashed run would keep its old, looser mode.
414
+ if (effectiveMode !== undefined)
415
+ await fs.chmod(tmp, effectiveMode);
254
416
  await fs.rename(tmp, filePath);
255
417
  }
256
418
  /**
@@ -263,11 +425,32 @@ async function writeJsonAtomic(filePath, data, mode) {
263
425
  * - Missing local value → remote is written.
264
426
  * - Equal values → no-op.
265
427
  * - Differing values → conflict, local wins, warn+skip logged.
266
- * - For `mcp.servers` (and other object paths): conflict detection is
267
- * per-key inside the dict.
268
- * - Does NOT restart the gateway (standalone owns their own lifecycle).
269
- * - Settings.json (~/.claude/settings.json) gets the same treatment for
270
- * `mcp.servers` and `env` only — apiKeyHelper/permissions/etc untouched.
428
+ * - For object paths: conflict detection is per-key inside the dict.
429
+ * - **Exception — `mcp.servers` in openclaw.json is REMOTE-wins per key.**
430
+ * That section is backend-managed: the URL, transport and bearer token of a
431
+ * backend-generated server (e.g. `openclaw-cloud`) change over time, and
432
+ * under local-wins an updated entry could never reach a standalone agent —
433
+ * a rotated token was skipped forever (observed live 2026-08-02). Every
434
+ * server NAME present in the payload is overwritten; names that exist only
435
+ * locally are left untouched.
436
+ * LIMITATION — no deletions. A server removed in the backend stays in the
437
+ * local openclaw.json: the payload cannot distinguish "removed upstream"
438
+ * from "never managed here", and dropping local-only entries would delete
439
+ * the user's own servers. Removal on standalone is a manual edit.
440
+ * - Restarts the gateway **iff** the `mcp.servers` subtree actually changed.
441
+ * This is a FALLBACK, not the primary delivery mechanism: openclaw 2026.7.1
442
+ * does self-reload this section (verified live 2026-08-03 — the gateway
443
+ * logged `[reload] config hot reload applied (mcp.servers.<name>.url,
444
+ * mcp.servers.<name>.headers)` on an overwrite, with no restart). The
445
+ * restart covers builds/paths where that self-reload does not fire, and
446
+ * mirrors what applyBootstrapConfig does on managed installs. It is
447
+ * best-effort: a failure is logged and does not fail the apply — on a
448
+ * launchd box where `openclaw` is not on the service PATH it never runs at
449
+ * all, and the merge still lands.
450
+ * - Settings.json (~/.claude/settings.json) keeps LOCAL-wins for
451
+ * `mcp.servers` ONLY — apiKeyHelper/permissions/env/etc untouched. `env` is
452
+ * never written here: it would redirect the user's own Claude Code sessions
453
+ * to the platform proxy (see MERGEABLE_SETTINGS_PATHS).
271
454
  * - auth-profiles.json and .env are NOT touched on standalone.
272
455
  */
273
456
  export async function applyMergeableConfig(data) {
@@ -276,47 +459,40 @@ export async function applyMergeableConfig(data) {
276
459
  if (data.workspaceFiles && Object.keys(data.workspaceFiles).length > 0) {
277
460
  console.log('[config-merge] workspaceFiles not applied on standalone — intentional MVP limitation');
278
461
  }
462
+ // Same for home files: writing platform credentials into a third-party
463
+ // user's HOME is exactly the class of mistake this branch exists to prevent.
464
+ // `writeHomeFiles` enforces that itself; this line just makes the skip visible.
465
+ if (data.homeFiles && Object.keys(data.homeFiles).length > 0) {
466
+ console.log('[config-merge] homeFiles not applied on standalone — managed installs only');
467
+ }
468
+ // Skills ARE applied: they live under the platform-owned .agents/skills/
469
+ // namespace, and the CLI bootstrap wrote them on standalone all along.
470
+ await writeSkills(data, '[config-merge] skills:');
279
471
  // --- openclaw.json ---
472
+ let mcpServersChanged = false;
280
473
  if (data.openclawConfig && isPlainObject(data.openclawConfig)) {
281
- const openclawDir = config.stateDir;
282
- const configPath = path.join(openclawDir, 'openclaw.json');
474
+ const configPath = getOpenclawJsonPath();
283
475
  const existing = await readJsonSafe(configPath);
284
476
  const local = existing ?? {};
285
477
  const isFreshFile = existing === null;
286
478
  const remoteConfig = data.openclawConfig;
479
+ // Snapshot the section BEFORE any mutation (the legacy migration below can
480
+ // move entries into it too) so the restart decision reflects what the
481
+ // running gateway would actually see change.
482
+ const mcpServersBefore = structuredClone(getPath(local, MCP_SERVERS_PATH));
287
483
  // One-shot migration of the local file: lift any pre-existing flat
288
484
  // `mcpServers` into `mcp.servers` so the OpenClaw CLI's strict schema
289
485
  // stops rejecting the file.
290
- let changed = false;
291
- if (isPlainObject(local.mcpServers)) {
292
- const flatEntries = local.mcpServers;
293
- const existingNested = isPlainObject(local.mcp)
294
- ? local.mcp.servers
295
- : undefined;
296
- const nested = isPlainObject(existingNested)
297
- ? existingNested
298
- : {};
299
- for (const [k, v] of Object.entries(flatEntries)) {
300
- if (!(k in nested)) {
301
- nested[k] = v;
302
- console.log(`[config-merge] MIGRATED legacy mcpServers.${k} → mcp.servers.${k}`);
303
- }
304
- else {
305
- console.warn(`[config-merge] MIGRATION SKIP: mcp.servers.${k} already exists, dropping legacy flat entry`);
306
- }
307
- }
308
- setPath(local, 'mcp.servers', nested);
309
- delete local.mcpServers;
310
- changed = true;
311
- }
486
+ let changed = migrateLegacyMcpServers(local, '[config-merge]');
312
487
  for (const p of MERGEABLE_CONFIG_PATHS) {
313
- const r = mergePath(local, remoteConfig, p, '[config-merge]');
488
+ const r = mergePath(local, remoteConfig, p, '[config-merge]', p === MCP_SERVERS_PATH);
314
489
  result.outcomes.push({ path: p, outcome: r.outcome, detail: r.detail });
315
490
  if (r.changed)
316
491
  changed = true;
317
492
  }
493
+ mcpServersChanged = !deepEqual(mcpServersBefore, getPath(local, MCP_SERVERS_PATH));
318
494
  if (changed || (isFreshFile && Object.keys(local).length > 0)) {
319
- await writeJsonAtomic(configPath, local);
495
+ await writeOpenclawJson(local);
320
496
  result.changed = true;
321
497
  console.log(`[config-merge] openclaw.json ${isFreshFile ? 'created' : 'updated'} at ${configPath}`);
322
498
  }
@@ -328,23 +504,16 @@ export async function applyMergeableConfig(data) {
328
504
  }
329
505
  }
330
506
  // --- ~/.claude/settings.json ---
331
- // Only merge if we have either envVars (→ env) or MCP servers in the payload.
507
+ // Only merge if the payload carries MCP servers. `data.envVars` is
508
+ // deliberately NOT projected into `env` here — see MERGEABLE_SETTINGS_PATHS.
332
509
  // Canonical shape in Claude Code's settings.json is `mcp.servers` (nested);
333
510
  // the backend always sends that shape.
334
511
  const settingsLikeRemote = {};
335
- if (data.envVars && Object.keys(data.envVars).length > 0) {
336
- const cleanEnv = {};
337
- for (const [k, v] of Object.entries(data.envVars))
338
- if (v !== '')
339
- cleanEnv[k] = v;
340
- if (Object.keys(cleanEnv).length > 0)
341
- settingsLikeRemote.env = cleanEnv;
342
- }
343
512
  if (data.openclawConfig && isPlainObject(data.openclawConfig)) {
344
513
  const oc = data.openclawConfig;
345
514
  const nestedServers = isPlainObject(oc.mcp) ? oc.mcp.servers : undefined;
346
515
  if (isPlainObject(nestedServers)) {
347
- setPath(settingsLikeRemote, 'mcp.servers', nestedServers);
516
+ setPath(settingsLikeRemote, MCP_SERVERS_PATH, nestedServers);
348
517
  }
349
518
  }
350
519
  if (Object.keys(settingsLikeRemote).length > 0) {
@@ -357,35 +526,19 @@ export async function applyMergeableConfig(data) {
357
526
  // One-shot migration: if settings.json has the legacy flat `mcpServers`
358
527
  // key, lift its entries into `mcp.servers` (local wins on conflict) and
359
528
  // remove the flat key. Survives across runs (idempotent).
360
- if (isPlainObject(local.mcpServers)) {
361
- const flatEntries = local.mcpServers;
362
- const existingNested = isPlainObject(local.mcp)
363
- ? local.mcp.servers
364
- : undefined;
365
- const nested = isPlainObject(existingNested)
366
- ? existingNested
367
- : {};
368
- for (const [k, v] of Object.entries(flatEntries)) {
369
- if (!(k in nested)) {
370
- nested[k] = v;
371
- console.log(`[settings-merge] MIGRATED legacy mcpServers.${k} → mcp.servers.${k}`);
372
- }
373
- else {
374
- console.warn(`[settings-merge] MIGRATION SKIP: mcp.servers.${k} already exists, dropping legacy flat entry`);
375
- }
376
- }
377
- setPath(local, 'mcp.servers', nested);
378
- delete local.mcpServers;
379
- result.changed = true;
380
- }
381
- let changed = false;
529
+ //
530
+ // `changed` is per-FILE on purpose. It used to write into the shared
531
+ // `result.changed`, which made "did settings.json change?" true whenever
532
+ // openclaw.json had changed earlier — settings.json got rewritten even
533
+ // when every one of its own merges was a no-op.
534
+ let changed = migrateLegacyMcpServers(local, '[settings-merge]');
382
535
  for (const p of MERGEABLE_SETTINGS_PATHS) {
383
536
  const r = mergePath(local, settingsLikeRemote, p, '[settings-merge]');
384
537
  result.outcomes.push({ path: `settings:${p}`, outcome: r.outcome, detail: r.detail });
385
538
  if (r.changed)
386
539
  changed = true;
387
540
  }
388
- if (changed || result.changed) {
541
+ if (changed) {
389
542
  await writeJsonAtomic(settingsPath, local);
390
543
  result.changed = true;
391
544
  console.log(`[settings-merge] settings.json updated at ${settingsPath}`);
@@ -398,6 +551,48 @@ export async function applyMergeableConfig(data) {
398
551
  console.log('[settings-merge] ~/.claude/settings.json absent — skipping (standalone user owns it)');
399
552
  }
400
553
  }
554
+ // Fallback delivery for `mcp.servers`. Openclaw 2026.7.1 DOES self-reload
555
+ // this section (verified live 2026-08-03), so on a current runtime this
556
+ // restart is belt-and-braces; it exists for builds where the self-reload does
557
+ // not cover `mcp.servers`, and mirrors applyBootstrapConfig on managed. Fires
558
+ // only when the section actually moved, so a no-op payload never bounces a
559
+ // busy gateway (this gateway also hosts the running agent).
560
+ if (mcpServersChanged) {
561
+ console.log('[config-merge] mcp.servers changed — restarting gateway');
562
+ try {
563
+ await restartGateway();
564
+ console.log('[config-merge] gateway restarted');
565
+ }
566
+ catch (err) {
567
+ // Best-effort: the config on disk is already correct, and failing the
568
+ // whole apply over a restart would lose the merge result.
569
+ console.error('[config-merge] gateway restart failed:', toErrorMessage(err));
570
+ }
571
+ }
401
572
  return result;
402
573
  }
574
+ /**
575
+ * The one owner of "fetch bootstrap and apply it". Every caller — the
576
+ * `update_config` WS handler, the `bootstrap` CLI, the opt-in startup refresh —
577
+ * goes through here so the deploy-type decision cannot drift between them.
578
+ *
579
+ * Managed installs ('vm'/'k8s') are provisioned end to end by the platform and
580
+ * get the full apply. Anything else — 'standalone', 'external', or a payload
581
+ * from an older backend that omits `deploymentType` — is a third-party machine
582
+ * and gets the scoped, additive merge only. Never rewrite files we don't own.
583
+ */
584
+ export async function fetchAndApplyConfig(api, agentId) {
585
+ const data = await api.agentBootstrap(agentId);
586
+ setResolvedDeployType(data.deploymentType);
587
+ const deployType = getResolvedDeployType() ?? 'unknown';
588
+ if (isManagedDeploy()) {
589
+ console.log(`[apply-config] managed install (deployType=${deployType}) — full apply`);
590
+ await applyBootstrapConfig(data);
591
+ return { managed: true };
592
+ }
593
+ console.log(`[apply-config] third-party install (deployType=${deployType}) — scoped merge only, ` +
594
+ 'user-owned files left alone');
595
+ const mergeResult = await applyMergeableConfig(data);
596
+ return { managed: false, mergeResult };
597
+ }
403
598
  //# sourceMappingURL=apply-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"apply-config.js","sourceRoot":"","sources":["../../src/utils/apply-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAE3F,SAAS,cAAc;IACrB,OAAO,MAAM,CAAC,QAAQ,CAAC;AACzB,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC;AACtF,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,iBAAiB,CAC9B,cAAuC,EACvC,OAA+B;IAE/B,MAAM,IAAI,GAAG,cAAc,CAAC,IAEf,CAAC;IACd,MAAM,MAAM,GAAG,cAAc,CAAC,MAEjB,CAAC;IAEd,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAC;IAC3C,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhE,MAAM,QAAQ,GAAsE,EAAE,CAAC;IAEvF,IAAI,IAAI,EAAE,QAAQ,EAAE,CAAC;QACnB,kDAAkD;QAClD,KAAK,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnE,iDAAiD;YACjD,MAAM,cAAc,GAA2B;gBAC7C,SAAS,EAAE,mBAAmB;gBAC9B,MAAM,EAAE,gBAAgB;gBACxB,UAAU,EAAE,oBAAoB;gBAChC,MAAM,EAAE,gBAAgB;aACzB,CAAC;YACF,MAAM,MAAM,GACV,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;YAClF,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAI,KAAK,EAAE,CAAC;gBACV,QAAQ,CAAC,WAAW,CAAC,GAAG;oBACtB,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,KAAK;iBACN,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,EAAE,SAAS,EAAE,CAAC;QAC7B,4DAA4D;QAC5D,KAAK,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9E,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,IAAI,OAAO,CAAC,iBAAiB,IAAI,EAAE,CAAC;YACvE,IAAI,KAAK,EAAE,CAAC;gBACV,QAAQ,CAAC,GAAG,YAAY,QAAQ,CAAC,GAAG;oBAClC,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,YAAY;oBACtB,KAAK;iBACN,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,gBAAgB,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;QAClD,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;YACjF,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,CAAS;IACjC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAqB;IAC9D,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,yBAAyB;IACzB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAC3D,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;IAED,8EAA8E;IAC9E,IAAI,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvE,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QACvC,MAAM,mBAAmB,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,kBAAkB,CAAC,CAAC;IACjG,CAAC;IAED,qFAAqF;IACrF,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACxC,MAAM,iBAAiB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IAC3D,CAAC;IAED,+DAA+D;IAC/D,IAAI,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,6DAA6D;QAC7D,MAAM,YAAY,GAA2B,EAAE,CAAC;QAChD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,KAAK,EAAE;gBAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,cAAc,CAAC,YAAY,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QAEpD,8BAA8B;QAC9B,IAAI,MAAM,CAAC,eAAe,KAAK,IAAI,IAAI,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;YACvE,MAAM,UAAU,GACd,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;iBACzB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;iBAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACvB,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/D,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,IAAI,CAAC;QACH,MAAM,cAAc,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,wCAAwC,EACxC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACzC,CAAC;IACJ,CAAC;AACH,CAAC;AAQD,SAAS,aAAa,CAAC,CAAU;IAC/B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,SAAS,CAAC,CAAU,EAAE,CAAU;IACvC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,EAAE;YAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2EAA2E;AAC3E,SAAS,OAAO,CAAC,GAAY,EAAE,OAAe;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,GAAG,GAAY,GAAG,CAAC;IACvB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAC1C,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACf,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,uEAAuE;AACvE,SAAS,OAAO,CAAC,GAAe,EAAE,OAAe,EAAE,KAAc;IAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,GAAG,GAAe,GAAG,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QAC5C,GAAG,GAAG,GAAG,CAAC,GAAG,CAAe,CAAC;IAC/B,CAAC;IACD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AACvC,CAAC;AASD;;;;;;;;;GASG;AACH,SAAS,SAAS,CAChB,KAAiB,EACjB,MAAkB,EAClB,OAAe,EACf,SAAiB;IAEjB,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAEzE,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAEzC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,UAAU,OAAO,EAAE,CAAC,CAAC;QAC7C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC7C,CAAC;IAED,iCAAiC;IACjC,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QACxD,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC;gBACrB,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAChB,QAAQ,GAAG,IAAI,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,UAAU,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;YACpD,CAAC;iBAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACtC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,sCAAsC,OAAO,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9E,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;YACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QAC1F,CAAC;QACD,IAAI,QAAQ;YAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC1D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC9C,CAAC;IAED,qDAAqD;IACrD,IAAI,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,sCAAsC,OAAO,uBAAuB,CAAC,CAAC;IACnF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,QAAgB;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,IAAgB,EAAE,IAAa;IAC9E,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;IACpE,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAqB;IAC9D,MAAM,MAAM,GAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAE7D,8EAA8E;IAC9E,IAAI,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvE,OAAO,CAAC,GAAG,CACT,sFAAsF,CACvF,CAAC;IACJ,CAAC;IAED,wBAAwB;IACxB,IAAI,IAAI,CAAC,cAAc,IAAI,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QAC9D,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,KAAK,GAAe,QAAQ,IAAI,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,QAAQ,KAAK,IAAI,CAAC;QAEtC,MAAM,YAAY,GAAe,IAAI,CAAC,cAA4B,CAAC;QAEnE,mEAAmE;QACnE,sEAAsE;QACtE,4BAA4B;QAC5B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,MAAM,WAAW,GAAG,KAAK,CAAC,UAAwB,CAAC;YACnD,MAAM,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;gBAC7C,CAAC,CAAG,KAAK,CAAC,GAAkB,CAAC,OAAmB;gBAChD,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,MAAM,GAAe,aAAa,CAAC,cAAc,CAAC;gBACtD,CAAC,CAAE,cAA6B;gBAChC,CAAC,CAAC,EAAE,CAAC;YACP,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBACjD,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC;oBACnB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACd,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;gBACnF,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CACV,8CAA8C,CAAC,6CAA6C,CAC7F,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;YACtC,OAAO,KAAK,CAAC,UAAU,CAAC;YACxB,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,sBAAsB,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAC9D,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,CAAC,OAAO;gBAAE,OAAO,GAAG,IAAI,CAAC;QAChC,CAAC;QAED,IAAI,OAAO,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;YAC9D,MAAM,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACzC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,OAAO,CAAC,GAAG,CACT,gCAAgC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,OAAO,UAAU,EAAE,CACvF,CAAC;QACJ,CAAC;aAAM,IAAI,WAAW,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CACT,8FAA8F,CAC/F,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,8EAA8E;IAC9E,4EAA4E;IAC5E,uCAAuC;IACvC,MAAM,kBAAkB,GAAe,EAAE,CAAC;IAC1C,IAAI,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,MAAM,QAAQ,GAA2B,EAAE,CAAC;QAC5C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,KAAK,EAAE;gBAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACjF,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,kBAAkB,CAAC,GAAG,GAAG,QAAQ,CAAC;IAC1E,CAAC;IACD,IAAI,IAAI,CAAC,cAAc,IAAI,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QAC9D,MAAM,EAAE,GAAG,IAAI,CAAC,cAA4B,CAAC;QAC7C,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC,GAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QACzF,IAAI,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,kBAAkB,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;QAClD,0EAA0E;QAC1E,2EAA2E;QAC3E,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,QAAQ,CAAC;YAEvB,wEAAwE;YACxE,wEAAwE;YACxE,0DAA0D;YAC1D,IAAI,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpC,MAAM,WAAW,GAAG,KAAK,CAAC,UAAwB,CAAC;gBACnD,MAAM,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;oBAC7C,CAAC,CAAG,KAAK,CAAC,GAAkB,CAAC,OAAmB;oBAChD,CAAC,CAAC,SAAS,CAAC;gBACd,MAAM,MAAM,GAAe,aAAa,CAAC,cAAc,CAAC;oBACtD,CAAC,CAAE,cAA6B;oBAChC,CAAC,CAAC,EAAE,CAAC;gBACP,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;oBACjD,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC;wBACnB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;wBACd,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;oBACrF,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,IAAI,CACV,gDAAgD,CAAC,6CAA6C,CAC/F,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;gBACtC,OAAO,KAAK,CAAC,UAAU,CAAC;gBACxB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACxB,CAAC;YAED,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,KAAK,MAAM,CAAC,IAAI,wBAAwB,EAAE,CAAC;gBACzC,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,kBAAkB,EAAE,CAAC,EAAE,kBAAkB,CAAC,CAAC;gBACtE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtF,IAAI,CAAC,CAAC,OAAO;oBAAE,OAAO,GAAG,IAAI,CAAC;YAChC,CAAC;YACD,IAAI,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC9B,MAAM,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;gBAC3C,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,6CAA6C,YAAY,EAAE,CAAC,CAAC;YAC3E,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,sFAAsF,CACvF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"apply-config.js","sourceRoot":"","sources":["../../src/utils/apply-config.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,11 @@
1
1
  /**
2
2
  * Write ~/.claude/settings.json, ~/.claude/cc-notify.sh, and auth-profiles.json
3
3
  * from a flat env vars dict (ANTHROPIC_API_KEY, ANTHROPIC_BASE_URL).
4
+ *
5
+ * This is a WHOLESALE rewrite of the user's Claude settings, so it is gated on
6
+ * the install being managed ('vm'/'k8s'). The guard lives here rather than in
7
+ * the callers deliberately: it is defense in depth that holds for every current
8
+ * and future caller. `agent-controller bootstrap` on a developer laptop once
9
+ * blew away ~/.claude/settings.json — that must not be re-reachable.
4
10
  */
5
11
  export declare function writeClaudeEnv(envVars: Record<string, string>): Promise<void>;