@openclaw-cloud/agent-controller 3.1.0 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/bin/agent-controller.js +5 -9
  2. package/dist/api.d.ts +7 -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 +25 -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.js +17 -34
  23. package/dist/commands/self-update.js.map +1 -1
  24. package/dist/commands/update-skills.js +7 -6
  25. package/dist/commands/update-skills.js.map +1 -1
  26. package/dist/config-file.d.ts +7 -0
  27. package/dist/config-file.js +22 -11
  28. package/dist/config-file.js.map +1 -1
  29. package/dist/handlers/agent-update.d.ts +4 -0
  30. package/dist/handlers/agent-update.js +16 -44
  31. package/dist/handlers/agent-update.js.map +1 -1
  32. package/dist/handlers/deploy.d.ts +1 -2
  33. package/dist/handlers/deploy.js +4 -20
  34. package/dist/handlers/deploy.js.map +1 -1
  35. package/dist/handlers/diagnostics.js +0 -12
  36. package/dist/handlers/diagnostics.js.map +1 -1
  37. package/dist/handlers/file-delete.js +4 -5
  38. package/dist/handlers/file-delete.js.map +1 -1
  39. package/dist/handlers/file-write.js +4 -4
  40. package/dist/handlers/file-write.js.map +1 -1
  41. package/dist/handlers/knowledge-sync.js +2 -14
  42. package/dist/handlers/knowledge-sync.js.map +1 -1
  43. package/dist/handlers/memory.d.ts +11 -1
  44. package/dist/handlers/memory.js.map +1 -1
  45. package/dist/handlers/onboarding.d.ts +1 -2
  46. package/dist/handlers/onboarding.js +3 -20
  47. package/dist/handlers/onboarding.js.map +1 -1
  48. package/dist/handlers/package-install.js +1 -1
  49. package/dist/handlers/package-install.js.map +1 -1
  50. package/dist/handlers/pair.js +0 -12
  51. package/dist/handlers/pair.js.map +1 -1
  52. package/dist/handlers/restart.d.ts +1 -2
  53. package/dist/handlers/restart.js +3 -8
  54. package/dist/handlers/restart.js.map +1 -1
  55. package/dist/handlers/stop.js +0 -7
  56. package/dist/handlers/stop.js.map +1 -1
  57. package/dist/handlers/telegram-webhook.js +3 -22
  58. package/dist/handlers/telegram-webhook.js.map +1 -1
  59. package/dist/handlers/update-config.js +4 -13
  60. package/dist/handlers/update-config.js.map +1 -1
  61. package/dist/heartbeat.js +2 -1
  62. package/dist/heartbeat.js.map +1 -1
  63. package/dist/index.d.ts +0 -8
  64. package/dist/index.js +57 -117
  65. package/dist/index.js.map +1 -1
  66. package/dist/lockfile.js +2 -1
  67. package/dist/lockfile.js.map +1 -1
  68. package/dist/platform/linux.js +6 -5
  69. package/dist/platform/linux.js.map +1 -1
  70. package/dist/platform/macos.js +3 -2
  71. package/dist/platform/macos.js.map +1 -1
  72. package/dist/platform/windows.js +3 -2
  73. package/dist/platform/windows.js.map +1 -1
  74. package/dist/providers/claude-code/channel-server.js +2 -1
  75. package/dist/providers/claude-code/channel-server.js.map +1 -1
  76. package/dist/providers/claude-code/settings-writer.d.ts +3 -2
  77. package/dist/providers/claude-code/settings-writer.js +6 -15
  78. package/dist/providers/claude-code/settings-writer.js.map +1 -1
  79. package/dist/providers/index.d.ts +13 -0
  80. package/dist/providers/index.js +25 -0
  81. package/dist/providers/index.js.map +1 -1
  82. package/dist/providers/openclaw/gateway-adapter.js +2 -0
  83. package/dist/providers/openclaw/gateway-adapter.js.map +1 -1
  84. package/dist/providers/openclaw/index.js +11 -13
  85. package/dist/providers/openclaw/index.js.map +1 -1
  86. package/dist/utils/anthropic-auth.d.ts +14 -0
  87. package/dist/utils/anthropic-auth.js +24 -0
  88. package/dist/utils/anthropic-auth.js.map +1 -1
  89. package/dist/utils/apply-config.d.ts +38 -6
  90. package/dist/utils/apply-config.js +118 -69
  91. package/dist/utils/apply-config.js.map +1 -1
  92. package/dist/utils/claude-env.d.ts +6 -0
  93. package/dist/utils/claude-env.js +29 -28
  94. package/dist/utils/claude-env.js.map +1 -1
  95. package/dist/utils/deploy-type.d.ts +16 -0
  96. package/dist/utils/deploy-type.js +34 -0
  97. package/dist/utils/deploy-type.js.map +1 -0
  98. package/dist/utils/env.d.ts +0 -1
  99. package/dist/utils/env.js +0 -8
  100. package/dist/utils/env.js.map +1 -1
  101. package/dist/utils/exec.d.ts +9 -0
  102. package/dist/utils/exec.js +12 -1
  103. package/dist/utils/exec.js.map +1 -1
  104. package/dist/utils/gateway-restart-handler.d.ts +6 -2
  105. package/dist/utils/gateway-restart-handler.js +11 -2
  106. package/dist/utils/gateway-restart-handler.js.map +1 -1
  107. package/dist/utils/gateway-restart.d.ts +7 -0
  108. package/dist/utils/gateway-restart.js +12 -4
  109. package/dist/utils/gateway-restart.js.map +1 -1
  110. package/dist/utils/knowledge-graph.d.ts +13 -1
  111. package/dist/utils/knowledge-graph.js +75 -29
  112. package/dist/utils/knowledge-graph.js.map +1 -1
  113. package/dist/utils/legacy-mcp-servers.d.ts +12 -0
  114. package/dist/utils/legacy-mcp-servers.js +37 -0
  115. package/dist/utils/legacy-mcp-servers.js.map +1 -0
  116. package/dist/utils/log-collector.js +2 -1
  117. package/dist/utils/log-collector.js.map +1 -1
  118. package/dist/utils/openclaw-ops.js +8 -7
  119. package/dist/utils/openclaw-ops.js.map +1 -1
  120. package/dist/utils/openclaw-stack-update.d.ts +31 -0
  121. package/dist/utils/openclaw-stack-update.js +50 -0
  122. package/dist/utils/openclaw-stack-update.js.map +1 -0
  123. package/dist/utils/package-install.js +4 -12
  124. package/dist/utils/package-install.js.map +1 -1
  125. package/dist/utils/package-version.d.ts +10 -0
  126. package/dist/utils/package-version.js +18 -0
  127. package/dist/utils/package-version.js.map +1 -0
  128. package/dist/utils/parse-id-at-version.d.ts +15 -0
  129. package/dist/utils/parse-id-at-version.js +22 -0
  130. package/dist/utils/parse-id-at-version.js.map +1 -0
  131. package/dist/utils/response.js +1 -0
  132. package/dist/utils/response.js.map +1 -1
  133. package/dist/utils/write-workspace-files.d.ts +1 -1
  134. package/dist/utils/write-workspace-files.js +19 -7
  135. package/dist/utils/write-workspace-files.js.map +1 -1
  136. package/dist/workspace.d.ts +11 -0
  137. package/dist/workspace.js +20 -0
  138. package/dist/workspace.js.map +1 -1
  139. package/package.json +9 -4
@@ -10,4 +10,28 @@ export function classifyAnthropicAuth(input) {
10
10
  return { kind: 'auth_token', value: apiKey };
11
11
  return { kind: 'api_key', value: apiKey };
12
12
  }
13
+ /** The permissions block both Claude settings writers emit, verbatim. */
14
+ export const CLAUDE_PERMISSIONS = {
15
+ allow: ['Bash(*)', 'Read(*)', 'Write(*)', 'Edit(*)', 'mcp__*'],
16
+ };
17
+ /**
18
+ * The settings.json base shared by both writers: the permissions block plus the
19
+ * `env` entry the auth classification implies.
20
+ *
21
+ * `providers/claude-code/settings-writer.ts` uses this as its complete output;
22
+ * `utils/claude-env.ts` uses it for the OAuth branch and composes its own
23
+ * apiKeyHelper variant for the API-key branch (that flow reads the key out of
24
+ * the VM `.env` at runtime instead of embedding it).
25
+ */
26
+ export function buildClaudeSettings(auth) {
27
+ switch (auth.kind) {
28
+ case 'auth_token':
29
+ return { permissions: CLAUDE_PERMISSIONS, env: { ANTHROPIC_AUTH_TOKEN: auth.value } };
30
+ case 'api_key':
31
+ return { permissions: CLAUDE_PERMISSIONS, env: { ANTHROPIC_API_KEY: auth.value } };
32
+ case 'none':
33
+ // No static credentials: rely on ~/.claude/.credentials.json (subscription login).
34
+ return { permissions: CLAUDE_PERMISSIONS };
35
+ }
36
+ }
13
37
  //# sourceMappingURL=anthropic-auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic-auth.js","sourceRoot":"","sources":["../../src/utils/anthropic-auth.ts"],"names":[],"mappings":"AAiBA,MAAM,UAAU,qBAAqB,CAAC,KAGrC;IACC,MAAM,SAAS,GAAG,KAAK,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACnD,IAAI,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAE/D,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;IAC7C,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAErC,yEAAyE;IACzE,IAAI,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAElF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"anthropic-auth.js","sourceRoot":"","sources":["../../src/utils/anthropic-auth.ts"],"names":[],"mappings":"AAiBA,MAAM,UAAU,qBAAqB,CAAC,KAGrC;IACC,MAAM,SAAS,GAAG,KAAK,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACnD,IAAI,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAE/D,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;IAC7C,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAErC,yEAAyE;IACzE,IAAI,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAElF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC5C,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC;CAC/D,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAmB;IACrD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,YAAY;YACf,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,GAAG,EAAE,EAAE,oBAAoB,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;QACxF,KAAK,SAAS;YACZ,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,GAAG,EAAE,EAAE,iBAAiB,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;QACrF,KAAK,MAAM;YACT,mFAAmF;YACnF,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAC/C,CAAC;AACH,CAAC"}
@@ -1,14 +1,29 @@
1
- import type { BootstrapResult } from '../api.js';
1
+ import type { AgentApi, BootstrapResult } from '../api.js';
2
+ /** Canonical openclaw.json location — `<stateDir>/openclaw.json`. */
3
+ export declare function getOpenclawJsonPath(): string;
2
4
  /**
3
- * Apply config from bootstrap API response:
5
+ * The ONE writer for openclaw.json — atomic (tmp + rename) and mode 0600.
6
+ *
7
+ * Both properties are load-bearing and used to be split across three
8
+ * independent write sites: the full apply wrote 0600 but non-atomically (a
9
+ * reader could see a truncated file), the scoped merge wrote atomically but
10
+ * with no mode (tmp + rename RESETS a pre-existing 0600 file to 0644, leaking
11
+ * `models.providers[*].apiKey`), and the startup memory-MCP injection did
12
+ * neither. Everything goes through here now.
13
+ */
14
+ export declare function writeOpenclawJson(data: Record<string, unknown>): Promise<void>;
15
+ /**
16
+ * FULL apply — only ever legal on a managed install (see `isManagedDeploy`).
17
+ * Rewrites files wholesale:
4
18
  * 1. Write openclaw.json
5
- * 2. Write auth-profiles.json + settings.json (from envVars)
6
- * 3. Write .env (for VM agents)
7
- * 4. Restart gateway
19
+ * 2. Write workspace files + skills
20
+ * 3. Write auth-profiles.json + settings.json (from envVars)
21
+ * 4. Write .env (for VM agents)
22
+ * 5. Restart gateway
8
23
  */
9
24
  export declare function applyBootstrapConfig(data: BootstrapResult): Promise<void>;
10
25
  type MergeOutcome = 'added' | 'equal' | 'conflict' | 'merged';
11
- interface MergeResult {
26
+ export interface MergeResult {
12
27
  changed: boolean;
13
28
  outcomes: Array<{
14
29
  path: string;
@@ -34,4 +49,21 @@ interface MergeResult {
34
49
  * - auth-profiles.json and .env are NOT touched on standalone.
35
50
  */
36
51
  export declare function applyMergeableConfig(data: BootstrapResult): Promise<MergeResult>;
52
+ export interface ApplyConfigOutcome {
53
+ /** True when the full apply ran (managed install), false for scoped merge. */
54
+ managed: boolean;
55
+ /** Present only on the scoped-merge path. */
56
+ mergeResult?: MergeResult;
57
+ }
58
+ /**
59
+ * The one owner of "fetch bootstrap and apply it". Every caller — the
60
+ * `update_config` WS handler, the `bootstrap` CLI, the opt-in startup refresh —
61
+ * goes through here so the deploy-type decision cannot drift between them.
62
+ *
63
+ * Managed installs ('vm'/'k8s') are provisioned end to end by the platform and
64
+ * get the full apply. Anything else — 'standalone', 'external', or a payload
65
+ * from an older backend that omits `deploymentType` — is a third-party machine
66
+ * and gets the scoped, additive merge only. Never rewrite files we don't own.
67
+ */
68
+ export declare function fetchAndApplyConfig(api: AgentApi, agentId: string): Promise<ApplyConfigOutcome>;
37
69
  export {};
@@ -4,16 +4,36 @@ import os from 'node:os';
4
4
  import { writeClaudeEnv } from './claude-env.js';
5
5
  import { writeWorkspaceFiles } from './write-workspace-files.js';
6
6
  import { restartGateway } from './gateway-restart.js';
7
- import { VM_ENV_PATH } from '../config-file.js';
7
+ import { VM_ENV_PATH, writeEnvFile } from '../config-file.js';
8
8
  import { config } from '../config.js';
9
9
  import { getWorkspaceDir } from '../workspace.js';
10
10
  import { MERGEABLE_CONFIG_PATHS, MERGEABLE_SETTINGS_PATHS } from './config-merge-paths.js';
11
+ import { getResolvedDeployType, isManagedDeploy, setResolvedDeployType } from './deploy-type.js';
12
+ import { migrateLegacyMcpServers } from './legacy-mcp-servers.js';
13
+ import { toErrorMessage } from './response.js';
11
14
  function getOpenclawDir() {
12
15
  return config.stateDir;
13
16
  }
14
17
  function getAuthProfilesPath() {
15
18
  return path.join(getOpenclawDir(), 'agents', 'main', 'agent', 'auth-profiles.json');
16
19
  }
20
+ /** Canonical openclaw.json location — `<stateDir>/openclaw.json`. */
21
+ export function getOpenclawJsonPath() {
22
+ return path.join(getOpenclawDir(), 'openclaw.json');
23
+ }
24
+ /**
25
+ * The ONE writer for openclaw.json — atomic (tmp + rename) and mode 0600.
26
+ *
27
+ * Both properties are load-bearing and used to be split across three
28
+ * independent write sites: the full apply wrote 0600 but non-atomically (a
29
+ * reader could see a truncated file), the scoped merge wrote atomically but
30
+ * with no mode (tmp + rename RESETS a pre-existing 0600 file to 0644, leaking
31
+ * `models.providers[*].apiKey`), and the startup memory-MCP injection did
32
+ * neither. Everything goes through here now.
33
+ */
34
+ export async function writeOpenclawJson(data) {
35
+ await writeJsonAtomic(getOpenclawJsonPath(), data, 0o600);
36
+ }
17
37
  /**
18
38
  * Generate auth-profiles.json from openclaw.json auth config + envVars.
19
39
  * openclaw.json contains profile declarations (provider, mode) without secrets.
@@ -76,27 +96,40 @@ async function fileExists(p) {
76
96
  }
77
97
  }
78
98
  /**
79
- * Apply config from bootstrap API response:
99
+ * Write `skills` through the same hardened writer as workspace files. Skills
100
+ * used to have their own copy of this logic in commands/bootstrap.ts that had
101
+ * no path-containment check, so a backend-supplied key like
102
+ * '../../.claude/settings.json' escaped the workspace.
103
+ */
104
+ async function writeSkills(data, logPrefix) {
105
+ if (!data.skills || Object.keys(data.skills).length === 0)
106
+ return;
107
+ const wrote = await writeWorkspaceFiles(data.skills, getWorkspaceDir());
108
+ console.log(`${logPrefix} wrote ${wrote} skill files`);
109
+ }
110
+ /**
111
+ * FULL apply — only ever legal on a managed install (see `isManagedDeploy`).
112
+ * Rewrites files wholesale:
80
113
  * 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
114
+ * 2. Write workspace files + skills
115
+ * 3. Write auth-profiles.json + settings.json (from envVars)
116
+ * 4. Write .env (for VM agents)
117
+ * 5. Restart gateway
84
118
  */
85
119
  export async function applyBootstrapConfig(data) {
86
- const openclawDir = getOpenclawDir();
87
120
  // 1. Write openclaw.json
88
121
  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');
122
+ await writeOpenclawJson(data.openclawConfig);
92
123
  console.log('[apply-config] openclaw.json updated');
93
124
  }
94
125
  // 1a. Write workspace files (shared files pushed by backend on update_config)
95
126
  if (data.workspaceFiles && Object.keys(data.workspaceFiles).length > 0) {
96
127
  const workspaceDir = getWorkspaceDir();
97
- await writeWorkspaceFiles(data.workspaceFiles, workspaceDir);
98
- console.log(`[apply-config] wrote ${Object.keys(data.workspaceFiles).length} workspace files`);
128
+ const wrote = await writeWorkspaceFiles(data.workspaceFiles, workspaceDir);
129
+ console.log(`[apply-config] wrote ${wrote} workspace files`);
99
130
  }
131
+ // 1b. Write skills (same sandbox as workspace files — they share the dir)
132
+ await writeSkills(data, '[apply-config]');
100
133
  // 2. Write auth-profiles.json from openclawConfig.auth.profiles + envVars (API keys)
101
134
  if (data.openclawConfig && data.envVars) {
102
135
  await writeAuthProfiles(data.openclawConfig, data.envVars);
@@ -112,13 +145,15 @@ export async function applyBootstrapConfig(data) {
112
145
  }
113
146
  await writeClaudeEnv(cleanEnvVars);
114
147
  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 });
148
+ // 3. Write .env for VM agents. The payload's envVars replace the file
149
+ // wholesale, so re-assert AGENT_DEPLOY_TYPE — otherwise the marker the VM
150
+ // provisioner wrote is lost on the first update_config.
151
+ const deployType = getResolvedDeployType();
152
+ if (deployType === 'vm' || (await fileExists(VM_ENV_PATH))) {
153
+ const envOut = { ...cleanEnvVars };
154
+ if (deployType)
155
+ envOut.AGENT_DEPLOY_TYPE = deployType;
156
+ await writeEnvFile(VM_ENV_PATH, envOut);
122
157
  console.log('[apply-config] .env updated');
123
158
  }
124
159
  }
@@ -128,7 +163,7 @@ export async function applyBootstrapConfig(data) {
128
163
  console.log('[apply-config] gateway restarted');
129
164
  }
130
165
  catch (err) {
131
- console.error('[apply-config] gateway restart failed:', err instanceof Error ? err.message : err);
166
+ console.error('[apply-config] gateway restart failed:', toErrorMessage(err));
132
167
  }
133
168
  }
134
169
  function isPlainObject(v) {
@@ -175,14 +210,19 @@ function getPath(obj, dotPath) {
175
210
  /** Set dot-path on object, creating intermediate objects as needed. */
176
211
  function setPath(obj, dotPath, value) {
177
212
  const parts = dotPath.split('.');
213
+ const leaf = parts[parts.length - 1];
214
+ if (leaf === undefined)
215
+ return;
178
216
  let cur = obj;
179
217
  for (let i = 0; i < parts.length - 1; i++) {
180
218
  const key = parts[i];
219
+ if (key === undefined)
220
+ continue;
181
221
  if (!isPlainObject(cur[key]))
182
222
  cur[key] = {};
183
223
  cur = cur[key];
184
224
  }
185
- cur[parts[parts.length - 1]] = value;
225
+ cur[leaf] = value;
186
226
  }
187
227
  /**
188
228
  * Merge a single allowlisted path from remote into local.
@@ -246,11 +286,31 @@ async function readJsonSafe(filePath) {
246
286
  return null;
247
287
  }
248
288
  }
289
+ /**
290
+ * Write JSON through a tmp file + rename so a reader never sees a half-written
291
+ * config. Without an explicit `mode` the existing file's permissions are
292
+ * carried over: the tmp is a brand-new inode, so a plain rename would silently
293
+ * relax a 0600 file (e.g. a user's ~/.claude/settings.json) to whatever the
294
+ * umask allows.
295
+ */
249
296
  async function writeJsonAtomic(filePath, data, mode) {
250
297
  await fs.mkdir(path.dirname(filePath), { recursive: true });
298
+ let effectiveMode = mode;
299
+ if (effectiveMode === undefined) {
300
+ try {
301
+ effectiveMode = (await fs.stat(filePath)).mode & 0o777;
302
+ }
303
+ catch {
304
+ // No existing file (or a mocked fs) — let the umask decide.
305
+ }
306
+ }
251
307
  const tmp = filePath + '.tmp';
252
- const opts = mode !== undefined ? { mode } : undefined;
308
+ const opts = effectiveMode !== undefined ? { mode: effectiveMode } : undefined;
253
309
  await fs.writeFile(tmp, JSON.stringify(data, null, 2) + '\n', opts);
310
+ // `mode` on writeFile only applies when the file is CREATED — a tmp left
311
+ // behind by a crashed run would keep its old, looser mode.
312
+ if (effectiveMode !== undefined)
313
+ await fs.chmod(tmp, effectiveMode);
254
314
  await fs.rename(tmp, filePath);
255
315
  }
256
316
  /**
@@ -276,10 +336,12 @@ export async function applyMergeableConfig(data) {
276
336
  if (data.workspaceFiles && Object.keys(data.workspaceFiles).length > 0) {
277
337
  console.log('[config-merge] workspaceFiles not applied on standalone — intentional MVP limitation');
278
338
  }
339
+ // Skills ARE applied: they live under the platform-owned .agents/skills/
340
+ // namespace, and the CLI bootstrap wrote them on standalone all along.
341
+ await writeSkills(data, '[config-merge] skills:');
279
342
  // --- openclaw.json ---
280
343
  if (data.openclawConfig && isPlainObject(data.openclawConfig)) {
281
- const openclawDir = config.stateDir;
282
- const configPath = path.join(openclawDir, 'openclaw.json');
344
+ const configPath = getOpenclawJsonPath();
283
345
  const existing = await readJsonSafe(configPath);
284
346
  const local = existing ?? {};
285
347
  const isFreshFile = existing === null;
@@ -287,28 +349,7 @@ export async function applyMergeableConfig(data) {
287
349
  // One-shot migration of the local file: lift any pre-existing flat
288
350
  // `mcpServers` into `mcp.servers` so the OpenClaw CLI's strict schema
289
351
  // 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
- }
352
+ let changed = migrateLegacyMcpServers(local, '[config-merge]');
312
353
  for (const p of MERGEABLE_CONFIG_PATHS) {
313
354
  const r = mergePath(local, remoteConfig, p, '[config-merge]');
314
355
  result.outcomes.push({ path: p, outcome: r.outcome, detail: r.detail });
@@ -316,7 +357,7 @@ export async function applyMergeableConfig(data) {
316
357
  changed = true;
317
358
  }
318
359
  if (changed || (isFreshFile && Object.keys(local).length > 0)) {
319
- await writeJsonAtomic(configPath, local);
360
+ await writeOpenclawJson(local);
320
361
  result.changed = true;
321
362
  console.log(`[config-merge] openclaw.json ${isFreshFile ? 'created' : 'updated'} at ${configPath}`);
322
363
  }
@@ -357,35 +398,19 @@ export async function applyMergeableConfig(data) {
357
398
  // One-shot migration: if settings.json has the legacy flat `mcpServers`
358
399
  // key, lift its entries into `mcp.servers` (local wins on conflict) and
359
400
  // 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;
401
+ //
402
+ // `changed` is per-FILE on purpose. It used to write into the shared
403
+ // `result.changed`, which made "did settings.json change?" true whenever
404
+ // openclaw.json had changed earlier — settings.json got rewritten even
405
+ // when every one of its own merges was a no-op.
406
+ let changed = migrateLegacyMcpServers(local, '[settings-merge]');
382
407
  for (const p of MERGEABLE_SETTINGS_PATHS) {
383
408
  const r = mergePath(local, settingsLikeRemote, p, '[settings-merge]');
384
409
  result.outcomes.push({ path: `settings:${p}`, outcome: r.outcome, detail: r.detail });
385
410
  if (r.changed)
386
411
  changed = true;
387
412
  }
388
- if (changed || result.changed) {
413
+ if (changed) {
389
414
  await writeJsonAtomic(settingsPath, local);
390
415
  result.changed = true;
391
416
  console.log(`[settings-merge] settings.json updated at ${settingsPath}`);
@@ -400,4 +425,28 @@ export async function applyMergeableConfig(data) {
400
425
  }
401
426
  return result;
402
427
  }
428
+ /**
429
+ * The one owner of "fetch bootstrap and apply it". Every caller — the
430
+ * `update_config` WS handler, the `bootstrap` CLI, the opt-in startup refresh —
431
+ * goes through here so the deploy-type decision cannot drift between them.
432
+ *
433
+ * Managed installs ('vm'/'k8s') are provisioned end to end by the platform and
434
+ * get the full apply. Anything else — 'standalone', 'external', or a payload
435
+ * from an older backend that omits `deploymentType` — is a third-party machine
436
+ * and gets the scoped, additive merge only. Never rewrite files we don't own.
437
+ */
438
+ export async function fetchAndApplyConfig(api, agentId) {
439
+ const data = await api.agentBootstrap(agentId);
440
+ setResolvedDeployType(data.deploymentType);
441
+ const deployType = getResolvedDeployType() ?? 'unknown';
442
+ if (isManagedDeploy()) {
443
+ console.log(`[apply-config] managed install (deployType=${deployType}) — full apply`);
444
+ await applyBootstrapConfig(data);
445
+ return { managed: true };
446
+ }
447
+ console.log(`[apply-config] third-party install (deployType=${deployType}) — scoped merge only, ` +
448
+ 'user-owned files left alone');
449
+ const mergeResult = await applyMergeableConfig(data);
450
+ return { managed: false, mergeResult };
451
+ }
403
452
  //# sourceMappingURL=apply-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"apply-config.js","sourceRoot":"","sources":["../../src/utils/apply-config.ts"],"names":[],"mappings":"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"}
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>;
@@ -1,7 +1,8 @@
1
1
  import fs from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import os from 'node:os';
4
- import { classifyAnthropicAuth } from './anthropic-auth.js';
4
+ import { buildClaudeSettings, classifyAnthropicAuth, CLAUDE_PERMISSIONS, } from './anthropic-auth.js';
5
+ import { getResolvedDeployType, isManagedDeploy } from './deploy-type.js';
5
6
  const CC_NOTIFY_SH = `#!/bin/bash
6
7
  # Claude Code hook: notify OpenClaw on Stop/PermissionRequest
7
8
  EVENT_TYPE="\${CC_HOOK_EVENT:-unknown}"
@@ -41,8 +42,18 @@ exit 0
41
42
  /**
42
43
  * Write ~/.claude/settings.json, ~/.claude/cc-notify.sh, and auth-profiles.json
43
44
  * from a flat env vars dict (ANTHROPIC_API_KEY, ANTHROPIC_BASE_URL).
45
+ *
46
+ * This is a WHOLESALE rewrite of the user's Claude settings, so it is gated on
47
+ * the install being managed ('vm'/'k8s'). The guard lives here rather than in
48
+ * the callers deliberately: it is defense in depth that holds for every current
49
+ * and future caller. `agent-controller bootstrap` on a developer laptop once
50
+ * blew away ~/.claude/settings.json — that must not be re-reachable.
44
51
  */
45
52
  export async function writeClaudeEnv(envVars) {
53
+ if (!isManagedDeploy()) {
54
+ console.log(`[claude-env] skipped: not a managed install (deployType=${getResolvedDeployType() ?? 'unknown'})`);
55
+ return;
56
+ }
46
57
  const claudeDir = path.join(os.homedir(), '.claude');
47
58
  await fs.mkdir(claudeDir, { recursive: true });
48
59
  // Write cc-notify.sh
@@ -50,10 +61,6 @@ export async function writeClaudeEnv(envVars) {
50
61
  await fs.writeFile(notifyPath, CC_NOTIFY_SH);
51
62
  await fs.chmod(notifyPath, 0o755);
52
63
  const auth = classifyAnthropicAuth({ anthropicApiKey: envVars.ANTHROPIC_API_KEY });
53
- // This flow only handles the OAuth-vs-API-key split (no explicit
54
- // anthropicAuthToken input); an `auth_token` classification here always
55
- // means "the API key was in fact an OAuth token".
56
- const isOAuthToken = auth.kind === 'auth_token';
57
64
  const hooks = {
58
65
  PreToolUse: [{ matcher: 'Bash', hooks: [] }],
59
66
  PostToolUse: [{ matcher: 'Write|Edit', hooks: [] }],
@@ -69,29 +76,23 @@ export async function writeClaudeEnv(envVars) {
69
76
  },
70
77
  ],
71
78
  };
72
- const permissions = {
73
- allow: ['Bash(*)', 'Read(*)', 'Write(*)', 'Edit(*)', 'mcp__*'],
74
- };
75
- let settings;
76
- if (isOAuthToken) {
77
- // OAuth token flow: set ANTHROPIC_AUTH_TOKEN, no apiKeyHelper, no ANTHROPIC_BASE_URL
78
- settings = {
79
- permissions,
80
- env: { ANTHROPIC_AUTH_TOKEN: auth.value },
81
- hooks,
82
- };
83
- }
84
- else {
85
- // API key flow (default): apiKeyHelper + optional ANTHROPIC_BASE_URL
86
- settings = {
87
- permissions,
88
- apiKeyHelper: "bash -c 'source /opt/openclaw-cloud/agent-controller/.env && echo $ANTHROPIC_API_KEY'",
89
- ...(envVars.ANTHROPIC_BASE_URL
90
- ? { env: { ANTHROPIC_BASE_URL: envVars.ANTHROPIC_BASE_URL } }
91
- : {}),
92
- hooks,
93
- };
94
- }
79
+ // This flow only handles the OAuth-vs-API-key split (no explicit
80
+ // anthropicAuthToken input); an `auth_token` classification here always
81
+ // means "the API key was in fact an OAuth token".
82
+ const settings = auth.kind === 'auth_token'
83
+ ? // OAuth token flow: ANTHROPIC_AUTH_TOKEN, no apiKeyHelper, no ANTHROPIC_BASE_URL
84
+ { ...buildClaudeSettings(auth), hooks }
85
+ : // API key flow (default): the key is NOT embedded — apiKeyHelper reads it
86
+ // out of the VM .env at runtime — so this branch cannot use the shared
87
+ // `env` variant. Optional ANTHROPIC_BASE_URL rides along.
88
+ {
89
+ permissions: CLAUDE_PERMISSIONS,
90
+ apiKeyHelper: "bash -c 'source /opt/openclaw-cloud/agent-controller/.env && echo $ANTHROPIC_API_KEY'",
91
+ ...(envVars.ANTHROPIC_BASE_URL
92
+ ? { env: { ANTHROPIC_BASE_URL: envVars.ANTHROPIC_BASE_URL } }
93
+ : {}),
94
+ hooks,
95
+ };
95
96
  // Contains ANTHROPIC_AUTH_TOKEN on OAuth flow — chmod 0o600.
96
97
  await fs.writeFile(path.join(claudeDir, 'settings.json'), JSON.stringify(settings, null, 2) + '\n', { mode: 0o600 });
97
98
  // auth-profiles.json is now written by applyBootstrapConfig from openclaw.json
@@ -1 +1 @@
1
- {"version":3,"file":"claude-env.js","sourceRoot":"","sources":["../../src/utils/claude-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCpB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA+B;IAClE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,qBAAqB;IACrB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACxD,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAC7C,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAElC,MAAM,IAAI,GAAG,qBAAqB,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACnF,iEAAiE;IACjE,wEAAwE;IACxE,kDAAkD;IAClD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC;IAEhD,MAAM,KAAK,GAAG;QACZ,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAC5C,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACnD,IAAI,EAAE;YACJ;gBACE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC;aACnF;SACF;QACD,YAAY,EAAE;YACZ;gBACE,OAAO,EAAE,mBAAmB;gBAC5B,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,mDAAmD,EAAE,CAAC;aAC3F;SACF;KACF,CAAC;IAEF,MAAM,WAAW,GAAG;QAClB,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC;KAC/D,CAAC;IAEF,IAAI,QAAiC,CAAC;IACtC,IAAI,YAAY,EAAE,CAAC;QACjB,qFAAqF;QACrF,QAAQ,GAAG;YACT,WAAW;YACX,GAAG,EAAE,EAAE,oBAAoB,EAAE,IAAI,CAAC,KAAK,EAAE;YACzC,KAAK;SACN,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,qEAAqE;QACrE,QAAQ,GAAG;YACT,WAAW;YACX,YAAY,EACV,uFAAuF;YACzF,GAAG,CAAC,OAAO,CAAC,kBAAkB;gBAC5B,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,EAAE;gBAC7D,CAAC,CAAC,EAAE,CAAC;YACP,KAAK;SACN,CAAC;IACJ,CAAC;IAED,6DAA6D;IAC7D,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EACrC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EACxC,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;IAEF,+EAA+E;AACjF,CAAC"}
1
+ {"version":3,"file":"claude-env.js","sourceRoot":"","sources":["../../src/utils/claude-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE1E,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCpB,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA+B;IAClE,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CACT,2DAA2D,qBAAqB,EAAE,IAAI,SAAS,GAAG,CACnG,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,qBAAqB;IACrB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACxD,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAC7C,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAElC,MAAM,IAAI,GAAG,qBAAqB,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAEnF,MAAM,KAAK,GAAG;QACZ,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAC5C,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACnD,IAAI,EAAE;YACJ;gBACE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC;aACnF;SACF;QACD,YAAY,EAAE;YACZ;gBACE,OAAO,EAAE,mBAAmB;gBAC5B,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,mDAAmD,EAAE,CAAC;aAC3F;SACF;KACF,CAAC;IAEF,iEAAiE;IACjE,wEAAwE;IACxE,kDAAkD;IAClD,MAAM,QAAQ,GACZ,IAAI,CAAC,IAAI,KAAK,YAAY;QACxB,CAAC,CAAC,iFAAiF;YACjF,EAAE,GAAG,mBAAmB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE;QACzC,CAAC,CAAC,0EAA0E;YAC1E,uEAAuE;YACvE,0DAA0D;YAC1D;gBACE,WAAW,EAAE,kBAAkB;gBAC/B,YAAY,EACV,uFAAuF;gBACzF,GAAG,CAAC,OAAO,CAAC,kBAAkB;oBAC5B,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,EAAE;oBAC7D,CAAC,CAAC,EAAE,CAAC;gBACP,KAAK;aACN,CAAC;IAER,6DAA6D;IAC7D,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EACrC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EACxC,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;IAEF,+EAA+E;AACjF,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Record the deployment type reported by a bootstrap payload. Ignores empty
3
+ * values so an older backend that omits the field cannot clear a known type.
4
+ */
5
+ export declare function setResolvedDeployType(t?: string): void;
6
+ /**
7
+ * The payload-reported deployment type if one has arrived, otherwise the
8
+ * `AGENT_DEPLOY_TYPE` env var. `undefined` means "we do not know".
9
+ */
10
+ export declare function getResolvedDeployType(): string | undefined;
11
+ /**
12
+ * True only for managed installs ('vm' / 'k8s'). Unknown deployment types
13
+ * deliberately resolve to false — fail safe, because the expensive mistake is
14
+ * rewriting a developer's ~/.claude/settings.json, not skipping a full apply.
15
+ */
16
+ export declare function isManagedDeploy(): boolean;
@@ -0,0 +1,34 @@
1
+ import { config } from '../config.js';
2
+ /**
3
+ * Deployment types describing a machine our platform provisioned end to end.
4
+ * Everything else — 'standalone', 'external', or an unknown/absent type — is a
5
+ * third-party machine whose config files we are only allowed to merge into.
6
+ */
7
+ const MANAGED_TYPES = new Set(['vm', 'k8s']);
8
+ /** Set from the bootstrap payload; survives for the life of the process. */
9
+ let resolvedDeployType;
10
+ /**
11
+ * Record the deployment type reported by a bootstrap payload. Ignores empty
12
+ * values so an older backend that omits the field cannot clear a known type.
13
+ */
14
+ export function setResolvedDeployType(t) {
15
+ if (t)
16
+ resolvedDeployType = t;
17
+ }
18
+ /**
19
+ * The payload-reported deployment type if one has arrived, otherwise the
20
+ * `AGENT_DEPLOY_TYPE` env var. `undefined` means "we do not know".
21
+ */
22
+ export function getResolvedDeployType() {
23
+ return resolvedDeployType ?? config.agentDeployType;
24
+ }
25
+ /**
26
+ * True only for managed installs ('vm' / 'k8s'). Unknown deployment types
27
+ * deliberately resolve to false — fail safe, because the expensive mistake is
28
+ * rewriting a developer's ~/.claude/settings.json, not skipping a full apply.
29
+ */
30
+ export function isManagedDeploy() {
31
+ const type = getResolvedDeployType();
32
+ return type !== undefined && MANAGED_TYPES.has(type);
33
+ }
34
+ //# sourceMappingURL=deploy-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-type.js","sourceRoot":"","sources":["../../src/utils/deploy-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC;;;;GAIG;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAE7C,4EAA4E;AAC5E,IAAI,kBAAsC,CAAC;AAE3C;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,CAAU;IAC9C,IAAI,CAAC;QAAE,kBAAkB,GAAG,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,kBAAkB,IAAI,MAAM,CAAC,eAAe,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;IACrC,OAAO,IAAI,KAAK,SAAS,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACvD,CAAC"}
@@ -1,2 +1 @@
1
- export declare function requireEnv(name: string): string;
2
1
  export declare function getBackendUrl(): string;