@salesforce/sfdx-agent-harness-claude 0.19.0 → 0.21.0
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.
- package/CHANGELOG.md +13 -0
- package/README.md +41 -3
- package/dist/claude-harness-factory.d.ts +21 -0
- package/dist/claude-harness-factory.js +1 -1
- package/dist/claude-harness-factory.js.map +1 -1
- package/dist/claude-query-env-builder.d.ts +31 -2
- package/dist/claude-query-env-builder.js +24 -2
- package/dist/claude-query-env-builder.js.map +1 -1
- package/dist/test/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,19 @@
|
|
|
3
3
|
All notable changes to `@salesforce/sfdx-agent-harness-claude` are documented in this file.
|
|
4
4
|
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
5
5
|
|
|
6
|
+
## [0.21.0] - 2026-06-24
|
|
7
|
+
|
|
8
|
+
### Chores
|
|
9
|
+
- update dependencies and disable Mastra PostHog telemetry @W-23054815 ([#619](https://github.com/forcedotcom/agentic-dx/pull/619))
|
|
10
|
+
|
|
11
|
+
## [0.20.0] - 2026-06-23
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
- **harness-claude**: add subprocessEnv for operational subprocess env vars @W-23145275 ([#618](https://github.com/forcedotcom/agentic-dx/pull/618))
|
|
15
|
+
|
|
16
|
+
### Chores
|
|
17
|
+
- **deps-dev**: bump @types/node from 22.19.21 to 22.20.0 in the dev-dependencies group ([#613](https://github.com/forcedotcom/agentic-dx/pull/613))
|
|
18
|
+
|
|
6
19
|
## [0.19.0] - 2026-06-22
|
|
7
20
|
|
|
8
21
|
### Features
|
package/README.md
CHANGED
|
@@ -41,7 +41,7 @@ internal architecture, see [ARCHITECTURE.md](ARCHITECTURE.md).
|
|
|
41
41
|
| Export | Kind | Description |
|
|
42
42
|
| ----------------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
43
43
|
| `ClaudeHarnessFactory` | class | `HarnessFactory` that produces a Claude-backed `AgentHarness` bound to a storage root. |
|
|
44
|
-
| `ClaudeHarnessFactoryConfig` | interface | Configuration for `ClaudeHarnessFactory` (`permissionMode`, optional `queryDefaults`, `toolApprovalTimeoutMs`, `bypassApprovalTools`, `
|
|
44
|
+
| `ClaudeHarnessFactoryConfig` | interface | Configuration for `ClaudeHarnessFactory` (`permissionMode`, optional `queryDefaults`, `toolApprovalTimeoutMs`, `bypassApprovalTools`, `subprocessEnv`). |
|
|
45
45
|
| `ClaudeHarnessPermissionMode` | type | Narrowed permission mode: `'bypassPermissions' \| 'acceptEdits' \| 'plan'`. |
|
|
46
46
|
| `ClaudeAgentHarness` | type | Branded `AgentHarness` subtype carrying the Claude-specific config inference. Inferred at `manager.createAgent` automatically — annotation rarely needed. |
|
|
47
47
|
| `ClaudeAgentConfig` | type | `AgentConfig` extended with Claude-only fields (`skillSearch`, `toolSearch`). |
|
|
@@ -67,8 +67,8 @@ regardless of the factory-pinned permission mode.
|
|
|
67
67
|
|
|
68
68
|
The harness honors `HTTPS_PROXY` / `HTTP_PROXY` / `NO_PROXY` (either casing) for the host-side MCP HTTP transport via
|
|
69
69
|
`@salesforce/agentic-common`'s `resolveProxyDispatcher()`. When either proxy var is set at factory `create()` time, the
|
|
70
|
-
harness wraps the transport `fetch` with an undici-backed routing function — no `globalThis` mutation. When no proxy
|
|
71
|
-
|
|
70
|
+
harness wraps the transport `fetch` with an undici-backed routing function — no `globalThis` mutation. When no proxy env
|
|
71
|
+
is set, `fetch` runs unwrapped (zero overhead).
|
|
72
72
|
|
|
73
73
|
The Claude subprocess inherits `HTTPS_PROXY` from the host env separately and is unaffected by the host-side wrapping.
|
|
74
74
|
Subprocess-side proxy routing follows whatever env was set when the subprocess spawned.
|
|
@@ -236,6 +236,44 @@ The SDK ships two bundled resolvers and a documented extension point — see the
|
|
|
236
236
|
The harness factory itself takes no resolver, gateway URL, or auth field — those concerns live entirely on the
|
|
237
237
|
connectivity resolver.
|
|
238
238
|
|
|
239
|
+
### Operational subprocess env (`subprocessEnv`)
|
|
240
|
+
|
|
241
|
+
**Rule:** `subprocessEnv` is for operational subprocess/runtime vars with no model-connectivity meaning — anything
|
|
242
|
+
dynamic or auth/endpoint-shaped belongs on the connectivity resolver. The map is **static for the factory's lifetime**;
|
|
243
|
+
per-spawn-dynamic values (a rotating key, a fresh trace id) belong on the resolver's `getHeaders()`, not here.
|
|
244
|
+
|
|
245
|
+
Connectivity (auth headers, gateway/endpoint URL, provider hint) flows through the connectivity resolver. Some
|
|
246
|
+
deployments also need to set operational environment variables on the Claude subprocess that aren't connectivity and
|
|
247
|
+
therefore have no home on `ModelConnectivityInfo`. `ClaudeHarnessFactoryConfig.subprocessEnv` is the injection point:
|
|
248
|
+
|
|
249
|
+
```ts
|
|
250
|
+
const harnessFactory = new ClaudeHarnessFactory({
|
|
251
|
+
permissionMode: 'bypassPermissions',
|
|
252
|
+
subprocessEnv: {
|
|
253
|
+
NODE_EXTRA_CA_CERTS: '/etc/corp/ca-bundle.pem', // corporate-proxy CA trust
|
|
254
|
+
NODE_TLS_REJECT_UNAUTHORIZED: '1',
|
|
255
|
+
DISABLE_TELEMETRY: '1',
|
|
256
|
+
DISABLE_AUTOUPDATER: '1',
|
|
257
|
+
},
|
|
258
|
+
});
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Layering (last wins): inherited host env (with the dangerous auth vars stripped) → `subprocessEnv` →
|
|
262
|
+
connectivity-derived transport env → `CLAUDE_CONFIG_DIR`. Two consequences fall out of that order:
|
|
263
|
+
|
|
264
|
+
- **`subprocessEnv` overrides inherited host vars** — that's the point of the slot.
|
|
265
|
+
- **`subprocessEnv` cannot override auth / endpoint.** Connectivity is layered last, so a `subprocessEnv` entry for
|
|
266
|
+
`ANTHROPIC_BEDROCK_BASE_URL` / `ANTHROPIC_CUSTOM_HEADERS` / etc. is overwritten by the resolver-derived value. Keep
|
|
267
|
+
auth on the connectivity resolver; put only operational vars here.
|
|
268
|
+
|
|
269
|
+
The three dangerous vars stripped from inherited env (`ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, `ANTHROPIC_BASE_URL`)
|
|
270
|
+
are **not** stripped from `subprocessEnv` — a value placed there is an explicit consumer choice, not an accidental host
|
|
271
|
+
leak.
|
|
272
|
+
|
|
273
|
+
> **Note:** `ANTHROPIC_DEFAULT_{HAIKU,SONNET,OPUS}_MODEL` (the Claude CLI's internal tier-model ids) is a valid current
|
|
274
|
+
> use case for this slot. If a future consumer needs those resolved dynamically per model rather than statically per
|
|
275
|
+
> factory, that's the signal to grow `ModelConnectivityInfo` rather than widen this slot to accept a function.
|
|
276
|
+
|
|
239
277
|
### Per-server MCP reconnect (eager semantics)
|
|
240
278
|
|
|
241
279
|
The Claude harness implements `Agent.reconnectMcpServer(name)` eagerly: the request closes the existing host-owned
|
|
@@ -35,6 +35,27 @@ export interface ClaudeHarnessFactoryConfig {
|
|
|
35
35
|
* pre-#516 behavior (every tool reaches the broker).
|
|
36
36
|
*/
|
|
37
37
|
bypassApprovalTools?: string[];
|
|
38
|
+
/**
|
|
39
|
+
* Static operational environment variables to set on every Claude
|
|
40
|
+
* subprocess spawn. Layered above the inherited host env (so these win
|
|
41
|
+
* over host vars) but below the connectivity-derived transport env (so
|
|
42
|
+
* they cannot override auth / endpoint, which are owned by the
|
|
43
|
+
* `AgentConnectivityResolver`'s `getHeaders()` + `baseUrl`).
|
|
44
|
+
*
|
|
45
|
+
* This is the injection point for subprocess-behavior vars that aren't
|
|
46
|
+
* connectivity and therefore have no home on `ModelConnectivityInfo` —
|
|
47
|
+
* e.g. `NODE_EXTRA_CA_CERTS` (corporate-proxy CA bundle),
|
|
48
|
+
* `NODE_TLS_REJECT_UNAUTHORIZED`, telemetry / auto-update disable flags
|
|
49
|
+
* (`DISABLE_TELEMETRY`, `DISABLE_AUTOUPDATER`), or the Claude CLI's
|
|
50
|
+
* internal tier-model ids (`ANTHROPIC_DEFAULT_SONNET_MODEL`, …).
|
|
51
|
+
*
|
|
52
|
+
* The three dangerous auth vars stripped from inherited env
|
|
53
|
+
* (`ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, `ANTHROPIC_BASE_URL`) are
|
|
54
|
+
* NOT stripped here — a value placed in `subprocessEnv` is an explicit
|
|
55
|
+
* consumer choice, not an accidental host leak. Auth still belongs on the
|
|
56
|
+
* connectivity resolver; only operational vars belong here.
|
|
57
|
+
*/
|
|
58
|
+
subprocessEnv?: Record<string, string>;
|
|
38
59
|
}
|
|
39
60
|
export declare class ClaudeHarnessFactory implements HarnessFactory<ClaudeAgentHarness> {
|
|
40
61
|
private readonly config;
|
|
@@ -25,7 +25,7 @@ export class ClaudeHarnessFactory {
|
|
|
25
25
|
}
|
|
26
26
|
async create(storageRootFolder) {
|
|
27
27
|
const innerFetch = createProxyAwareFetch(resolveProxyDispatcher());
|
|
28
|
-
const envBuilder = new ClaudeQueryEnvBuilder(storageRootFolder);
|
|
28
|
+
const envBuilder = new ClaudeQueryEnvBuilder(storageRootFolder, undefined, this.config.subprocessEnv);
|
|
29
29
|
const permissionDefaults = {
|
|
30
30
|
permissionMode: this.config.permissionMode,
|
|
31
31
|
...(this.config.permissionMode === 'bypassPermissions'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-harness-factory.js","sourceRoot":"","sources":["../src/claude-harness-factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAG3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAA2B,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAa1D,MAAM,gCAAgC,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-harness-factory.js","sourceRoot":"","sources":["../src/claude-harness-factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAG3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAA2B,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAa1D,MAAM,gCAAgC,GAAG,OAAO,CAAC;AAiDjD,MAAM,OAAO,oBAAoB;IAYA;IAXpB,SAAS,GAAG,QAAQ,CAAC;IACrB,eAAe,GAAG,CAAC,CAAC;IAC7B;;;;;;OAMG;IACM,sBAAsB,GAA4B,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAE9F,YAA6B,MAAkC;QAAlC,WAAM,GAAN,MAAM,CAA4B;IAAG,CAAC;IAEnE,KAAK,CAAC,MAAM,CAAC,iBAAyB;QAClC,MAAM,UAAU,GAAG,qBAAqB,CAAC,sBAAsB,EAAE,CAAC,CAAC;QACnE,MAAM,UAAU,GAAG,IAAI,qBAAqB,CAAC,iBAAiB,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACtG,MAAM,kBAAkB,GAAG;YACvB,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;YAC1C,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,KAAK,mBAAmB;gBAClD,CAAC,CAAC,EAAE,+BAA+B,EAAE,IAAa,EAAE;gBACpD,CAAC,CAAC,EAAE,CAAC;SACZ,CAAC;QACF,iEAAiE;QACjE,iEAAiE;QACjE,iEAAiE;QACjE,0DAA0D;QAC1D,kBAAkB;QAClB,MAAM,cAAc,GAAG,IAAI,yBAAyB,CAChD,EAAE,GAAG,kBAAkB,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,EACvD,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,EAAE,CAAC,CACjD,CAAC;QACF,iEAAiE;QACjE,yEAAyE;QACzE,iEAAiE;QACjE,MAAM,gBAAgB,GAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAChE,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAChD,OAAO,IAAI,aAAa,CACpB,UAAU,EACV,cAAc,EACd,IAAI,CAAC,MAAM,CAAC,qBAAqB,IAAI,gCAAgC,EACrE,iBAAiB,EACjB,EAAE,gBAAgB,EAAE,CACvB,CAAC;IACN,CAAC;CACJ"}
|
|
@@ -9,7 +9,11 @@ export interface ClaudeQueryEnvBuildResult {
|
|
|
9
9
|
*
|
|
10
10
|
* Layering order (last wins):
|
|
11
11
|
* 1. Inherited process env (with dangerous vars stripped)
|
|
12
|
-
* 2.
|
|
12
|
+
* 2. Consumer subprocess env (`ClaudeHarnessFactoryConfig.subprocessEnv`) — static
|
|
13
|
+
* operational vars the consumer needs on the subprocess (e.g.
|
|
14
|
+
* `NODE_EXTRA_CA_CERTS` for a corporate-proxy CA bundle, telemetry-disable
|
|
15
|
+
* flags). Overrides inherited env; does NOT override connectivity.
|
|
16
|
+
* 3. Connectivity-derived vars (auth headers, transport flags, endpoint config)
|
|
13
17
|
*
|
|
14
18
|
* The Claude CLI subprocess speaks Anthropic-shaped protocols only — either via
|
|
15
19
|
* `ANTHROPIC_BEDROCK_BASE_URL` (Bedrock-Anthropic, the Salesforce LLM Gateway's
|
|
@@ -19,11 +23,36 @@ export interface ClaudeQueryEnvBuildResult {
|
|
|
19
23
|
* api-key, the base URL, the native model id) lives on the bag and is
|
|
20
24
|
* re-evaluated per `build()` call so JWT rotation lands on the next subprocess
|
|
21
25
|
* spawn.
|
|
26
|
+
*
|
|
27
|
+
* Connectivity is layered LAST so the harness keeps final authority over
|
|
28
|
+
* auth / endpoint regardless of what the consumer's `subprocessEnv` carries —
|
|
29
|
+
* the consumer can inject operational vars but cannot silently redirect the
|
|
30
|
+
* subprocess at a different gateway or shadow the resolver's auth headers.
|
|
22
31
|
*/
|
|
23
32
|
export declare class ClaudeQueryEnvBuilder {
|
|
24
33
|
private readonly storageRootFolder?;
|
|
25
34
|
private readonly processEnv;
|
|
26
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Static operational env vars to layer onto every subprocess spawn.
|
|
37
|
+
* Sourced from `ClaudeHarnessFactoryConfig.subprocessEnv`. Applied
|
|
38
|
+
* above inherited env (so it can override host vars) but below the
|
|
39
|
+
* connectivity-derived transport env (so it cannot override auth /
|
|
40
|
+
* endpoint). The three dangerous vars stripped from inherited env are
|
|
41
|
+
* NOT stripped here — a value placed in `subprocessEnv` is an explicit
|
|
42
|
+
* consumer choice, not an accidental host leak.
|
|
43
|
+
*/
|
|
44
|
+
private readonly subprocessEnv;
|
|
45
|
+
constructor(storageRootFolder?: string | undefined, processEnv?: Record<string, string | undefined>,
|
|
46
|
+
/**
|
|
47
|
+
* Static operational env vars to layer onto every subprocess spawn.
|
|
48
|
+
* Sourced from `ClaudeHarnessFactoryConfig.subprocessEnv`. Applied
|
|
49
|
+
* above inherited env (so it can override host vars) but below the
|
|
50
|
+
* connectivity-derived transport env (so it cannot override auth /
|
|
51
|
+
* endpoint). The three dangerous vars stripped from inherited env are
|
|
52
|
+
* NOT stripped here — a value placed in `subprocessEnv` is an explicit
|
|
53
|
+
* consumer choice, not an accidental host leak.
|
|
54
|
+
*/
|
|
55
|
+
subprocessEnv?: Record<string, string>);
|
|
27
56
|
build(info: ModelConnectivityInfo): Promise<ClaudeQueryEnvBuildResult>;
|
|
28
57
|
/**
|
|
29
58
|
* Translates the bag into the env shape the Claude CLI wants for the
|
|
@@ -10,7 +10,11 @@ const STRIPPED_ENV_VARS = ['ANTHROPIC_API_KEY', 'ANTHROPIC_AUTH_TOKEN', 'ANTHROP
|
|
|
10
10
|
*
|
|
11
11
|
* Layering order (last wins):
|
|
12
12
|
* 1. Inherited process env (with dangerous vars stripped)
|
|
13
|
-
* 2.
|
|
13
|
+
* 2. Consumer subprocess env (`ClaudeHarnessFactoryConfig.subprocessEnv`) — static
|
|
14
|
+
* operational vars the consumer needs on the subprocess (e.g.
|
|
15
|
+
* `NODE_EXTRA_CA_CERTS` for a corporate-proxy CA bundle, telemetry-disable
|
|
16
|
+
* flags). Overrides inherited env; does NOT override connectivity.
|
|
17
|
+
* 3. Connectivity-derived vars (auth headers, transport flags, endpoint config)
|
|
14
18
|
*
|
|
15
19
|
* The Claude CLI subprocess speaks Anthropic-shaped protocols only — either via
|
|
16
20
|
* `ANTHROPIC_BEDROCK_BASE_URL` (Bedrock-Anthropic, the Salesforce LLM Gateway's
|
|
@@ -20,13 +24,30 @@ const STRIPPED_ENV_VARS = ['ANTHROPIC_API_KEY', 'ANTHROPIC_AUTH_TOKEN', 'ANTHROP
|
|
|
20
24
|
* api-key, the base URL, the native model id) lives on the bag and is
|
|
21
25
|
* re-evaluated per `build()` call so JWT rotation lands on the next subprocess
|
|
22
26
|
* spawn.
|
|
27
|
+
*
|
|
28
|
+
* Connectivity is layered LAST so the harness keeps final authority over
|
|
29
|
+
* auth / endpoint regardless of what the consumer's `subprocessEnv` carries —
|
|
30
|
+
* the consumer can inject operational vars but cannot silently redirect the
|
|
31
|
+
* subprocess at a different gateway or shadow the resolver's auth headers.
|
|
23
32
|
*/
|
|
24
33
|
export class ClaudeQueryEnvBuilder {
|
|
25
34
|
storageRootFolder;
|
|
26
35
|
processEnv;
|
|
27
|
-
|
|
36
|
+
subprocessEnv;
|
|
37
|
+
constructor(storageRootFolder, processEnv = process.env,
|
|
38
|
+
/**
|
|
39
|
+
* Static operational env vars to layer onto every subprocess spawn.
|
|
40
|
+
* Sourced from `ClaudeHarnessFactoryConfig.subprocessEnv`. Applied
|
|
41
|
+
* above inherited env (so it can override host vars) but below the
|
|
42
|
+
* connectivity-derived transport env (so it cannot override auth /
|
|
43
|
+
* endpoint). The three dangerous vars stripped from inherited env are
|
|
44
|
+
* NOT stripped here — a value placed in `subprocessEnv` is an explicit
|
|
45
|
+
* consumer choice, not an accidental host leak.
|
|
46
|
+
*/
|
|
47
|
+
subprocessEnv = {}) {
|
|
28
48
|
this.storageRootFolder = storageRootFolder;
|
|
29
49
|
this.processEnv = processEnv;
|
|
50
|
+
this.subprocessEnv = subprocessEnv;
|
|
30
51
|
}
|
|
31
52
|
async build(info) {
|
|
32
53
|
const env = { ...this.processEnv };
|
|
@@ -36,6 +57,7 @@ export class ClaudeQueryEnvBuilder {
|
|
|
36
57
|
return {
|
|
37
58
|
env: {
|
|
38
59
|
...env,
|
|
60
|
+
...this.subprocessEnv,
|
|
39
61
|
...transportEnv,
|
|
40
62
|
...(this.storageRootFolder ? { CLAUDE_CONFIG_DIR: this.storageRootFolder } : {}),
|
|
41
63
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-query-env-builder.js","sourceRoot":"","sources":["../src/claude-query-env-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,aAAa,EACb,iBAAiB,GAGpB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,iBAAiB,GAAG,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,oBAAoB,CAAU,CAAC;AAOvG
|
|
1
|
+
{"version":3,"file":"claude-query-env-builder.js","sourceRoot":"","sources":["../src/claude-query-env-builder.ts"],"names":[],"mappings":"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"}
|