@salesforce/sfdx-agent-harness-claude 0.46.0 → 0.47.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 +9 -0
- package/README.md +8 -1
- package/dist/claude-harness-factory.d.ts +11 -0
- package/dist/claude-harness-factory.js +1 -1
- package/dist/claude-harness-factory.js.map +1 -1
- package/dist/claude-query-options-builder.d.ts +11 -1
- package/dist/claude-query-options-builder.js +17 -1
- package/dist/claude-query-options-builder.js.map +1 -1
- package/dist/test/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,15 @@
|
|
|
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.47.0] - 2026-08-18
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
- **harness-claude**: opt-in approvalHookTimeoutMs to outlast SDK per-hook timeout @W-23848717@ ([#755](https://github.com/forcedotcom/agentic-dx/pull/755))
|
|
10
|
+
|
|
11
|
+
### Chores
|
|
12
|
+
- **deps-dev**: bump the eslint group across 1 directory with 2 updates ([#754](https://github.com/forcedotcom/agentic-dx/pull/754))
|
|
13
|
+
- **deps-dev**: bump the dev-dependencies group with 2 updates ([#753](https://github.com/forcedotcom/agentic-dx/pull/753))
|
|
14
|
+
|
|
6
15
|
## [0.46.0] - 2026-08-17
|
|
7
16
|
|
|
8
17
|
### Features
|
package/README.md
CHANGED
|
@@ -51,7 +51,7 @@ cross-harness comparison.
|
|
|
51
51
|
| Export | Kind | Description |
|
|
52
52
|
| ------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
53
53
|
| `ClaudeHarnessFactory` | class | `HarnessFactory` that produces a Claude-backed `AgentHarness` bound to a storage root. |
|
|
54
|
-
| `ClaudeHarnessFactoryConfig` | interface | Configuration for `ClaudeHarnessFactory` (`permissionMode`, optional `queryDefaults`, `toolApprovalTimeoutMs`, `subprocessEnv`).
|
|
54
|
+
| `ClaudeHarnessFactoryConfig` | interface | Configuration for `ClaudeHarnessFactory` (`permissionMode`, optional `queryDefaults`, `toolApprovalTimeoutMs`, `approvalHookTimeoutMs`, `subprocessEnv`). |
|
|
55
55
|
| `CLAUDE_BUILT_IN_TOOL_POLICIES` | const | Frozen `ReadonlyArray<ToolPolicyRule>` the harness feeds the SDK's `resolveToolApprovalPolicy` as the `tiers.harness` slice — `require-approval` rules for Claude's mutating built-ins `Bash` / `Edit` / `MultiEdit` / `Write` / `NotebookEdit`. |
|
|
56
56
|
| `CLAUDE_BUILT_IN_TOOL_NAMES` | const | The five built-in tool names `CLAUDE_BUILT_IN_TOOL_POLICIES` covers. |
|
|
57
57
|
| `ClaudeHarnessPermissionMode` | type | Narrowed permission mode: `'bypassPermissions' \| 'acceptEdits' \| 'plan'`. |
|
|
@@ -246,6 +246,13 @@ Each pending approval is auto-denied after `ClaudeHarnessFactoryConfig.toolAppro
|
|
|
246
246
|
Calling `approveToolCall` or `declineToolCall` before the timeout cancels the timer — no spurious error event surfaces
|
|
247
247
|
afterwards.
|
|
248
248
|
|
|
249
|
+
> **SDK hook-timeout interaction:** `toolApprovalTimeoutMs` is the harness's own auto-deny timer, but the parked
|
|
250
|
+
> approval is a Claude SDK `PreToolUse` hook, and the SDK aborts a hook after its own per-hook timeout (~60s) regardless
|
|
251
|
+
> of the harness timer. A `toolApprovalTimeoutMs` above that default therefore does nothing on its own — the SDK tears
|
|
252
|
+
> the hook down first. Set `ClaudeHarnessFactoryConfig.approvalHookTimeoutMs` (milliseconds; typically equal to
|
|
253
|
+
> `toolApprovalTimeoutMs`) to raise the SDK's per-hook timeout so the parked approval survives long enough for the
|
|
254
|
+
> harness timer to own the deadline. Left unset, the SDK default is preserved.
|
|
255
|
+
|
|
249
256
|
> **Consumer pattern:** to observe the timeout (or `abort` / `dispose`) error on the `eventStream`, iterate the stream
|
|
250
257
|
> to its natural end rather than `break`ing out after the `tool-approval-request` event. Calling `iterator.return()`
|
|
251
258
|
> (which `break` does inside `for await`) finalizes the harness's source generator before the terminal event can reach
|
|
@@ -20,6 +20,17 @@ export interface ClaudeHarnessFactoryConfig {
|
|
|
20
20
|
* Defaults to `600_000` (10 minutes), matching the Mastra MCP timeout.
|
|
21
21
|
*/
|
|
22
22
|
toolApprovalTimeoutMs?: number;
|
|
23
|
+
/**
|
|
24
|
+
* Opt-in override (milliseconds) for the SDK's per-hook timeout on the
|
|
25
|
+
* approval-gating `PreToolUse` hook. The SDK aborts a parked hook after
|
|
26
|
+
* its own default (~60s) regardless of {@link toolApprovalTimeoutMs} — so
|
|
27
|
+
* a consumer whose human-in-the-loop approval window must outlast that
|
|
28
|
+
* default has to raise this too, or the parked approval is torn down
|
|
29
|
+
* before {@link toolApprovalTimeoutMs} can fire. Undefined leaves the
|
|
30
|
+
* SDK default in place (unchanged behavior for existing consumers);
|
|
31
|
+
* typically set equal to `toolApprovalTimeoutMs`.
|
|
32
|
+
*/
|
|
33
|
+
approvalHookTimeoutMs?: number;
|
|
23
34
|
/**
|
|
24
35
|
* Static operational environment variables to set on every Claude
|
|
25
36
|
* subprocess spawn. Layered above the inherited host env (so these win
|
|
@@ -32,7 +32,7 @@ export class ClaudeHarnessFactory {
|
|
|
32
32
|
? { allowDangerouslySkipPermissions: true }
|
|
33
33
|
: {}),
|
|
34
34
|
};
|
|
35
|
-
const optionsBuilder = new ClaudeQueryOptionsBuilder({ ...permissionDefaults, ...this.config.queryDefaults });
|
|
35
|
+
const optionsBuilder = new ClaudeQueryOptionsBuilder({ ...permissionDefaults, ...this.config.queryDefaults }, this.config.approvalHookTimeoutMs);
|
|
36
36
|
// Bind `innerFetch` into the mcp-client factory closure so every
|
|
37
37
|
// call site inside `ClaudeHarness` (createAgent, reconnect, updateAgent)
|
|
38
38
|
// routes MCP HTTP transports through the same proxy-aware fetch.
|
|
@@ -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;AA6CjD,MAAM,OAAO,oBAAoB;IAYA,MAAM;IAX1B,SAAS,GAAG,QAAQ,CAAC;IACrB,eAAe,GAAG,CAAC,CAAC;IAC7B;;;;;;OAMG;IACM,sBAAsB,GAA4B,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAE9F,YAA6B,MAAkC;sBAAlC,MAAM;IAA+B,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,MAAM,cAAc,GAAG,IAAI,yBAAyB,CAChD,EAAE,GAAG,kBAAkB,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,EACvD,IAAI,CAAC,MAAM,CAAC,qBAAqB,CACpC,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"}
|
|
@@ -24,7 +24,17 @@ export type SessionOptions = {
|
|
|
24
24
|
*/
|
|
25
25
|
export declare class ClaudeQueryOptionsBuilder {
|
|
26
26
|
private readonly queryDefaults;
|
|
27
|
-
|
|
27
|
+
private readonly approvalHookTimeoutMs?;
|
|
28
|
+
/**
|
|
29
|
+
* @param approvalHookTimeoutMs Opt-in override for the broker `PreToolUse`
|
|
30
|
+
* matcher's per-hook timeout. Undefined leaves the SDK's default hook
|
|
31
|
+
* timeout (~60s) in place — the current behavior for every consumer. A
|
|
32
|
+
* consumer whose approval window must outlast that default (e.g. a
|
|
33
|
+
* human-in-the-loop pause bounded by `toolApprovalTimeoutMs`) sets this so
|
|
34
|
+
* the SDK does not abort the parked hook before the coordinator's own
|
|
35
|
+
* auto-deny timer fires. See ARCHITECTURE.md → "Approval gating".
|
|
36
|
+
*/
|
|
37
|
+
constructor(queryDefaults?: ClaudeQueryDefaults, approvalHookTimeoutMs?: number | undefined);
|
|
28
38
|
build(projectRoot: string, config: HarnessAgentConfig, streamOptions: StreamOptions | undefined, env: Record<string, string | undefined>, sessionOptions?: SessionOptions, nativeModelId?: string, brokerPreToolUseHook?: HookCallback, mcpServers?: Record<string, McpServerConfig>, rulesAppend?: string, postToolUseRedactionHook?: HookCallback, skillDirectories?: readonly string[], thinkingMode?: ThinkingMode): Options & {
|
|
29
39
|
env: Record<string, string | undefined>;
|
|
30
40
|
};
|
|
@@ -19,8 +19,19 @@ const HARNESS_REQUIRED_OPTIONS = {
|
|
|
19
19
|
*/
|
|
20
20
|
export class ClaudeQueryOptionsBuilder {
|
|
21
21
|
queryDefaults;
|
|
22
|
-
|
|
22
|
+
approvalHookTimeoutMs;
|
|
23
|
+
/**
|
|
24
|
+
* @param approvalHookTimeoutMs Opt-in override for the broker `PreToolUse`
|
|
25
|
+
* matcher's per-hook timeout. Undefined leaves the SDK's default hook
|
|
26
|
+
* timeout (~60s) in place — the current behavior for every consumer. A
|
|
27
|
+
* consumer whose approval window must outlast that default (e.g. a
|
|
28
|
+
* human-in-the-loop pause bounded by `toolApprovalTimeoutMs`) sets this so
|
|
29
|
+
* the SDK does not abort the parked hook before the coordinator's own
|
|
30
|
+
* auto-deny timer fires. See ARCHITECTURE.md → "Approval gating".
|
|
31
|
+
*/
|
|
32
|
+
constructor(queryDefaults = {}, approvalHookTimeoutMs) {
|
|
23
33
|
this.queryDefaults = queryDefaults;
|
|
34
|
+
this.approvalHookTimeoutMs = approvalHookTimeoutMs;
|
|
24
35
|
}
|
|
25
36
|
build(projectRoot, config, streamOptions, env, sessionOptions, nativeModelId, brokerPreToolUseHook, mcpServers, rulesAppend, postToolUseRedactionHook, skillDirectories, thinkingMode) {
|
|
26
37
|
const hasMcpServers = mcpServers !== undefined && Object.keys(mcpServers).length > 0;
|
|
@@ -103,6 +114,11 @@ export class ClaudeQueryOptionsBuilder {
|
|
|
103
114
|
const brokerEntry = {
|
|
104
115
|
matcher: CONSUMER_TOOL_BYPASS_MATCHER,
|
|
105
116
|
hooks: [brokerPreToolUseHook],
|
|
117
|
+
// `HookCallbackMatcher.timeout` is seconds; omit it entirely
|
|
118
|
+
// when unset so the SDK keeps its default hook timeout.
|
|
119
|
+
...(this.approvalHookTimeoutMs !== undefined && {
|
|
120
|
+
timeout: Math.ceil(this.approvalHookTimeoutMs / 1000),
|
|
121
|
+
}),
|
|
106
122
|
};
|
|
107
123
|
mergedHooks.PreToolUse = [...(consumerHooks.PreToolUse ?? []), brokerEntry];
|
|
108
124
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-query-options-builder.js","sourceRoot":"","sources":["../src/claude-query-options-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EAAE,iCAAiC,EAAE,MAAM,kCAAkC,CAAC;AAuBrF,MAAM,wBAAwB,GAAqB;IAC/C,sBAAsB,EAAE,IAAI;IAC5B,cAAc,EAAE,EAAE;IAClB,cAAc,EAAE,IAAI;CACvB,CAAC;AAIF;;;;;;;;GAQG;AACH,MAAM,OAAO,yBAAyB;
|
|
1
|
+
{"version":3,"file":"claude-query-options-builder.js","sourceRoot":"","sources":["../src/claude-query-options-builder.ts"],"names":[],"mappings":"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"}
|