@salesforce/sfdx-agent-harness-claude 0.8.0 → 0.9.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/README.md +14 -2
- package/dist/claude-consumer-tool-bridge.js +15 -0
- package/dist/claude-consumer-tool-bridge.js.map +1 -1
- package/dist/claude-event-adapter.js +48 -2
- package/dist/claude-event-adapter.js.map +1 -1
- package/dist/claude-harness.d.ts +19 -3
- package/dist/claude-harness.js +159 -27
- package/dist/claude-harness.js.map +1 -1
- package/dist/claude-mcp-bridge.d.ts +8 -2
- package/dist/claude-mcp-bridge.js +21 -5
- package/dist/claude-mcp-bridge.js.map +1 -1
- package/dist/claude-skill-mcp-server.js +5 -0
- package/dist/claude-skill-mcp-server.js.map +1 -1
- package/dist/claude-stream-broker.d.ts +138 -14
- package/dist/claude-stream-broker.js +248 -23
- package/dist/claude-stream-broker.js.map +1 -1
- package/dist/mcp-meta-keys.d.ts +15 -0
- package/dist/mcp-meta-keys.js +20 -0
- package/dist/mcp-meta-keys.js.map +1 -0
- package/dist/test/tsconfig.tsbuildinfo +1 -1
- package/dist/transcript.js +20 -0
- package/dist/transcript.js.map +1 -1
- package/package.json +4 -8
package/README.md
CHANGED
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
Claude Agent SDK-backed `AgentHarness` implementation for [`@salesforce/sfdx-agent-sdk`](../sfdx-agent-sdk). Provides
|
|
4
4
|
`ClaudeHarnessFactory`, the entry point consumers pass to `createAgentManager`.
|
|
5
5
|
|
|
6
|
+
> **Closed source.** This package is published to npm under the [Salesforce Public Code License](../../LICENSE.txt) and
|
|
7
|
+
> is for use by Salesforce only.
|
|
8
|
+
|
|
6
9
|
## Install
|
|
7
10
|
|
|
8
11
|
```bash
|
|
@@ -51,8 +54,17 @@ prompt source:
|
|
|
51
54
|
|
|
52
55
|
`'default'`, `'dontAsk'`, and `'auto'` are intentionally excluded because they require a prompt UI the harness does not
|
|
53
56
|
provide. For human-in-the-loop gating, set `StreamOptions.requireToolApproval: true` per-call instead — the harness
|
|
54
|
-
installs a `PreToolUse` SDK hook for that turn that gates every tool call through the SDK's `tool-approval-request`
|
|
55
|
-
|
|
57
|
+
installs a `PreToolUse` SDK hook for that turn that gates every tool call through the SDK's `tool-approval-request` flow
|
|
58
|
+
regardless of the factory-pinned permission mode.
|
|
59
|
+
|
|
60
|
+
### Multimodal input
|
|
61
|
+
|
|
62
|
+
`chatSession.chat()` / harness `stream()` accept a `MessagePart[]` carrying `image` (PNG/JPEG) and `file` (PDF) parts
|
|
63
|
+
alongside text (see the SDK README for the part shapes). The harness lowers them to Anthropic `image` / `document`
|
|
64
|
+
content blocks sent over the Bedrock-native path. Files are validated pre-stream against the agent's gateway model
|
|
65
|
+
capabilities and caps — an unsupported format, an oversized file, or too many files rejects with
|
|
66
|
+
`AgentSDKError(MULTIMODAL_NOT_SUPPORTED)`; a malformed input part rejects with `INVALID_MESSAGE_CONTENT`. The caps
|
|
67
|
+
mirror the gateway SDK's conservative limits so a file behaves identically here and on the Mastra harness.
|
|
56
68
|
|
|
57
69
|
### Tool approval
|
|
58
70
|
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
*/
|
|
25
25
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
26
26
|
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
27
|
+
import { ALWAYS_LOAD_META_KEY } from './mcp-meta-keys.js';
|
|
27
28
|
const BRIDGE_VERSION = '1.0.0';
|
|
28
29
|
/**
|
|
29
30
|
* Logical server name the bridge advertises. The Claude SDK derives the
|
|
@@ -40,10 +41,24 @@ export function buildConsumerToolsBridge(tools, parker) {
|
|
|
40
41
|
if (tools.length === 0)
|
|
41
42
|
return undefined;
|
|
42
43
|
const instance = new McpServer({ name: CONSUMER_TOOLS_BRIDGE_SERVER_NAME, version: BRIDGE_VERSION }, { capabilities: { tools: {} } });
|
|
44
|
+
// Opt every consumer-declared tool out of tool-search deferral (#495).
|
|
45
|
+
// See ARCHITECTURE.md → "Harness-owned in-process MCP tools bypass
|
|
46
|
+
// Claude tool-search deferral".
|
|
47
|
+
//
|
|
48
|
+
// - **Set, not merge.** `ToolDefinition` has no `_meta` field today, so
|
|
49
|
+
// this assignment fully owns the slot. If `ToolDefinition` ever
|
|
50
|
+
// grows a consumer-supplied `_meta`, this would silently drop those
|
|
51
|
+
// keys and would need to switch to a merge.
|
|
52
|
+
// - **Unbounded.** Always-load is unconditional here; every entry in
|
|
53
|
+
// `AgentConfig.tools` lands in the prompt at rest. Fits the dominant
|
|
54
|
+
// consumer pattern (a small handful of consumer tools); a consumer
|
|
55
|
+
// with a very large tool catalog should reach for an external MCP
|
|
56
|
+
// server with `alwaysLoad: false` (the default) instead.
|
|
43
57
|
const mcpTools = tools.map((t) => ({
|
|
44
58
|
name: t.name,
|
|
45
59
|
description: t.description ?? '',
|
|
46
60
|
inputSchema: t.inputSchema,
|
|
61
|
+
_meta: { [ALWAYS_LOAD_META_KEY]: true },
|
|
47
62
|
}));
|
|
48
63
|
instance.server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: mcpTools }));
|
|
49
64
|
instance.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-consumer-tool-bridge.js","sourceRoot":"","sources":["../src/claude-consumer-tool-bridge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EACH,qBAAqB,EACrB,sBAAsB,GAGzB,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-consumer-tool-bridge.js","sourceRoot":"","sources":["../src/claude-consumer-tool-bridge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EACH,qBAAqB,EACrB,sBAAsB,GAGzB,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B;;;;GAIG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,+BAA+B,CAAC;AAajF;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CACpC,KAAuB,EACvB,MAA8B;IAE9B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAEzC,MAAM,QAAQ,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,iCAAiC,EAAE,OAAO,EAAE,cAAc,EAAE,EACpE,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAClC,CAAC;IAEF,uEAAuE;IACvE,mEAAmE;IACnE,gCAAgC;IAChC,EAAE;IACF,wEAAwE;IACxE,kEAAkE;IAClE,sEAAsE;IACtE,8CAA8C;IAC9C,qEAAqE;IACrE,uEAAuE;IACvE,qEAAqE;IACrE,oEAAoE;IACpE,2DAA2D;IAC3D,MAAM,QAAQ,GAAW,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;QAChC,WAAW,EAAE,CAAC,CAAC,WAAkC;QACjD,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE;KAC1C,CAAC,CAAC,CAAC;IAEJ,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAE7F,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAA2B,EAAE;QAChG,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QAC/D,MAAM,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,CAA4B,CAAC;QAEzD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7D,OAAO;YACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxC,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,iCAAiC,EAAE,QAAQ,EAAE,CAAC;AAC9E,CAAC;AAED,SAAS,eAAe,CAAC,MAAe;IACpC,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC9C,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;AACL,CAAC"}
|
|
@@ -62,12 +62,18 @@ export class ClaudeEventAdapter {
|
|
|
62
62
|
if (block.type !== 'tool_result' || typeof block.tool_use_id !== 'string')
|
|
63
63
|
continue;
|
|
64
64
|
const toolName = this.toolCallNames.get(block.tool_use_id) ?? 'unknown';
|
|
65
|
+
const isError = block.is_error === true;
|
|
65
66
|
events.push({
|
|
66
67
|
type: 'tool-result',
|
|
67
68
|
toolCallId: block.tool_use_id,
|
|
68
69
|
toolName,
|
|
69
70
|
result: block.content,
|
|
70
|
-
isError
|
|
71
|
+
isError,
|
|
72
|
+
...(isError && block.content
|
|
73
|
+
? {
|
|
74
|
+
error: new Error(typeof block.content === 'string' ? block.content : JSON.stringify(block.content)),
|
|
75
|
+
}
|
|
76
|
+
: {}),
|
|
71
77
|
...this.enrichmentFor(toolName),
|
|
72
78
|
});
|
|
73
79
|
this.consumePendingToolResult(block.tool_use_id, events);
|
|
@@ -130,12 +136,18 @@ export class ClaudeEventAdapter {
|
|
|
130
136
|
}
|
|
131
137
|
else if (block.type === 'mcp_tool_result') {
|
|
132
138
|
const toolName = this.toolCallNames.get(block.tool_use_id) ?? 'unknown';
|
|
139
|
+
const isError = block.is_error === true;
|
|
133
140
|
events.push({
|
|
134
141
|
type: 'tool-result',
|
|
135
142
|
toolCallId: block.tool_use_id,
|
|
136
143
|
toolName,
|
|
137
144
|
result: block.content,
|
|
138
|
-
isError
|
|
145
|
+
isError,
|
|
146
|
+
...(isError && block.content
|
|
147
|
+
? {
|
|
148
|
+
error: new Error(typeof block.content === 'string' ? block.content : JSON.stringify(block.content)),
|
|
149
|
+
}
|
|
150
|
+
: {}),
|
|
139
151
|
...this.enrichmentFor(toolName),
|
|
140
152
|
});
|
|
141
153
|
this.consumePendingToolResult(block.tool_use_id, events);
|
|
@@ -251,11 +263,13 @@ function buildResultUsage(usage) {
|
|
|
251
263
|
return undefined;
|
|
252
264
|
const safeInput = inputTokens ?? 0;
|
|
253
265
|
const safeOutput = outputTokens ?? 0;
|
|
266
|
+
const cacheWriteInputTokens = usage?.cache_creation_input_tokens ? usage.cache_creation_input_tokens : undefined;
|
|
254
267
|
return {
|
|
255
268
|
inputTokens: safeInput,
|
|
256
269
|
outputTokens: safeOutput,
|
|
257
270
|
totalTokens: safeInput + safeOutput,
|
|
258
271
|
...(cachedInputTokens ? { cachedInputTokens } : {}),
|
|
272
|
+
...(cacheWriteInputTokens ? { cacheWriteInputTokens } : {}),
|
|
259
273
|
};
|
|
260
274
|
}
|
|
261
275
|
/**
|
|
@@ -269,6 +283,7 @@ function buildMessageDeltaUsage(usage) {
|
|
|
269
283
|
const inputTokens = usage.input_tokens ?? undefined;
|
|
270
284
|
const outputTokens = usage.output_tokens ?? undefined;
|
|
271
285
|
const cachedInputTokens = usage.cache_read_input_tokens ?? undefined;
|
|
286
|
+
const cacheWriteInputTokens = usage.cache_creation_input_tokens ? usage.cache_creation_input_tokens : undefined;
|
|
272
287
|
if (inputTokens === undefined && outputTokens === undefined)
|
|
273
288
|
return undefined;
|
|
274
289
|
const safeInput = inputTokens ?? 0;
|
|
@@ -278,6 +293,7 @@ function buildMessageDeltaUsage(usage) {
|
|
|
278
293
|
outputTokens: safeOutput,
|
|
279
294
|
totalTokens: safeInput + safeOutput,
|
|
280
295
|
...(cachedInputTokens ? { cachedInputTokens } : {}),
|
|
296
|
+
...(cacheWriteInputTokens ? { cacheWriteInputTokens } : {}),
|
|
281
297
|
};
|
|
282
298
|
}
|
|
283
299
|
/**
|
|
@@ -356,6 +372,36 @@ export function mapSessionMessageContent(message) {
|
|
|
356
372
|
});
|
|
357
373
|
}
|
|
358
374
|
break;
|
|
375
|
+
case 'image': {
|
|
376
|
+
// Round-trip an Anthropic base64 image block back to an SDK ImagePart. Only
|
|
377
|
+
// base64 PNG/JPEG map cleanly; other shapes (URL sources, gif/webp) fall through to
|
|
378
|
+
// the placeholder default so we never inline a giant blob as text.
|
|
379
|
+
const src = block.source;
|
|
380
|
+
if (src?.type === 'base64' &&
|
|
381
|
+
typeof src.data === 'string' &&
|
|
382
|
+
(src.media_type === 'image/png' || src.media_type === 'image/jpeg')) {
|
|
383
|
+
parts.push({ type: 'image', mimeType: src.media_type, data: src.data });
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
parts.push({ type: 'text', text: '[image]' });
|
|
387
|
+
}
|
|
388
|
+
break;
|
|
389
|
+
}
|
|
390
|
+
case 'document': {
|
|
391
|
+
const src = block.source;
|
|
392
|
+
if (src?.type === 'base64' && typeof src.data === 'string' && src.media_type === 'application/pdf') {
|
|
393
|
+
parts.push({
|
|
394
|
+
type: 'file',
|
|
395
|
+
mimeType: src.media_type,
|
|
396
|
+
data: src.data,
|
|
397
|
+
...(typeof block.title === 'string' ? { fileName: block.title } : {}),
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
parts.push({ type: 'text', text: '[document]' });
|
|
402
|
+
}
|
|
403
|
+
break;
|
|
404
|
+
}
|
|
359
405
|
default:
|
|
360
406
|
parts.push({ type: 'text', text: JSON.stringify(block) });
|
|
361
407
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-event-adapter.js","sourceRoot":"","sources":["../src/claude-event-adapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"claude-event-adapter.js","sourceRoot":"","sources":["../src/claude-event-adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/claude-harness.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Clock, type LogRecord, type UniqueIDGenerator, type Unsubscribe } from '@salesforce/agentic-common';
|
|
2
|
-
import { type AgentHarness, type ChatStreamResult, type HarnessAgentConfig, type McpServerInfo, type Message, type StreamOptions, type TelemetryEventCallback, type ToolResultInfo } from '@salesforce/sfdx-agent-sdk';
|
|
3
|
-
import type
|
|
2
|
+
import { type AgentHarness, type ChatStreamResult, type HarnessAgentConfig, type McpServerInfo, type Message, type MessagePart, type StreamOptions, type TelemetryEventCallback, type ToolResultInfo } from '@salesforce/sfdx-agent-sdk';
|
|
3
|
+
import { type LLMGatewayClient } from '@salesforce/llm-gateway-sdk';
|
|
4
4
|
import { type SessionStore } from '@anthropic-ai/claude-agent-sdk';
|
|
5
5
|
import type { ClaudeQueryEnvBuilder } from './claude-query-env-builder.js';
|
|
6
6
|
import type { ClaudeQueryOptionsBuilder } from './claude-query-options-builder.js';
|
|
@@ -186,7 +186,23 @@ export declare class ClaudeHarness implements AgentHarness {
|
|
|
186
186
|
* summarized again into the final summary.
|
|
187
187
|
*/
|
|
188
188
|
private summarizeInChunks;
|
|
189
|
-
|
|
189
|
+
/**
|
|
190
|
+
* Validates a `MessagePart[]` and lowers it to a single-message `AsyncIterable<SDKUserMessage>`
|
|
191
|
+
* carrying Anthropic content blocks (`text`, `image`, `document`).
|
|
192
|
+
*
|
|
193
|
+
* Pre-stream validation and the input-part guard live in the SDK's {@link lowerStreamInput}:
|
|
194
|
+
* `image` / `file` parts are validated against the agent's gateway `Model.supportedFormats` and
|
|
195
|
+
* the global gateway caps via the shared `validateMultimodalFiles`, so a file is accepted or
|
|
196
|
+
* rejected identically on the Claude and Mastra paths (we deliberately mirror the SDK's
|
|
197
|
+
* conservative caps even though the underlying Bedrock models may accept more), and a
|
|
198
|
+
* `reasoning` / `tool-call` / `tool-result` part rejects with `INVALID_MESSAGE_CONTENT`. This
|
|
199
|
+
* method only supplies the Anthropic-specific lowering of each part.
|
|
200
|
+
*
|
|
201
|
+
* Validation and block construction run synchronously (the returned generator only yields the
|
|
202
|
+
* pre-built message) so failures reject the caller's `stream()` promise before any query starts.
|
|
203
|
+
*/
|
|
204
|
+
private buildMultimodalPrompt;
|
|
205
|
+
stream(agentId: string, threadId: string, message: string | MessagePart[], streamOptions?: StreamOptions): Promise<ChatStreamResult>;
|
|
190
206
|
/**
|
|
191
207
|
* Build the per-stream MCP bridge configs the Claude subprocess will
|
|
192
208
|
* receive on `query({ options.mcpServers })`. Each external-server
|
package/dist/claude-harness.js
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { realpath } from 'node:fs/promises';
|
|
6
6
|
import { RealClock, UUIDGenerator, buildSummaryPrompt, getErrorMessage, isAbortError, } from '@salesforce/agentic-common';
|
|
7
|
-
import { AgentSDKError, AgentSDKErrorType, HarnessBusOwner, McpServerStatus, } from '@salesforce/sfdx-agent-sdk';
|
|
7
|
+
import { AgentSDKError, AgentSDKErrorType, HarnessBusOwner, lowerStreamInput, McpServerStatus, resolveToolApprovalMode, } from '@salesforce/sfdx-agent-sdk';
|
|
8
|
+
import { validateMultimodalFiles } from '@salesforce/llm-gateway-sdk';
|
|
8
9
|
import { deleteSession, forkSession, getSessionMessages, listSessions, query, } from '@anthropic-ai/claude-agent-sdk';
|
|
9
10
|
import { ClaudeEventAdapter, mapSessionMessageContent } from './claude-event-adapter.js';
|
|
10
11
|
import { ClaudeStreamBroker } from './claude-stream-broker.js';
|
|
@@ -20,6 +21,18 @@ import { DiskBackedSessionStore } from './disk-backed-session-store.js';
|
|
|
20
21
|
import { ThreadContextStore } from './thread-context-store.js';
|
|
21
22
|
import { teeTextStream } from './text-stream.js';
|
|
22
23
|
import { MAX_TRANSCRIPT_CHARS, partToTranscriptText, splitIntoChunks } from './transcript.js';
|
|
24
|
+
/**
|
|
25
|
+
* Returns a shallow copy of `m` with `content` normalized: any `MessagePart[]`
|
|
26
|
+
* is reduced to a compact placeholder string via {@link partToTranscriptText} so
|
|
27
|
+
* raw base64 blobs never land in the sidecar JSON. All three
|
|
28
|
+
* `threadContextStore.write` call sites route through this helper.
|
|
29
|
+
*/
|
|
30
|
+
function normalizeMessageForSidecar(m) {
|
|
31
|
+
return {
|
|
32
|
+
...m,
|
|
33
|
+
content: typeof m.content === 'string' ? m.content : m.content.map((p) => partToTranscriptText(p)).join(' '),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
23
36
|
export class ClaudeHarness {
|
|
24
37
|
envBuilder;
|
|
25
38
|
optionsBuilder;
|
|
@@ -209,8 +222,8 @@ export class ClaudeHarness {
|
|
|
209
222
|
projectRoot: resolvedProjectRoot,
|
|
210
223
|
config,
|
|
211
224
|
rulesAppend,
|
|
225
|
+
model: llmGatewayClient.getModel(),
|
|
212
226
|
skillMap,
|
|
213
|
-
modelId: llmGatewayClient.getModel().name,
|
|
214
227
|
threads,
|
|
215
228
|
mcpServers,
|
|
216
229
|
});
|
|
@@ -473,8 +486,8 @@ export class ClaudeHarness {
|
|
|
473
486
|
if (source.contextHistory.length === 0 && source.pendingContext.length === 0)
|
|
474
487
|
return;
|
|
475
488
|
await this.threadContextStore.write(projectRoot, threadId, {
|
|
476
|
-
contextHistory:
|
|
477
|
-
pendingContext:
|
|
489
|
+
contextHistory: source.contextHistory.map(normalizeMessageForSidecar),
|
|
490
|
+
pendingContext: source.pendingContext.map(normalizeMessageForSidecar),
|
|
478
491
|
});
|
|
479
492
|
}
|
|
480
493
|
/**
|
|
@@ -606,7 +619,7 @@ export class ClaudeHarness {
|
|
|
606
619
|
if (!agent.config.orgJwt) {
|
|
607
620
|
throw new Error('Agent has no orgJwt configured');
|
|
608
621
|
}
|
|
609
|
-
const { env, nativeModelId } = await this.envBuilder.build(agent.config.orgJwt, agent.
|
|
622
|
+
const { env, nativeModelId } = await this.envBuilder.build(agent.config.orgJwt, agent.model.name);
|
|
610
623
|
const summaryConfig = {
|
|
611
624
|
orgJwt: agent.config.orgJwt,
|
|
612
625
|
// The role declaration + summarization imperative + the
|
|
@@ -691,17 +704,65 @@ export class ClaudeHarness {
|
|
|
691
704
|
? this.summarize(agent, buildSummaryPrompt(merged))
|
|
692
705
|
: this.summarizeInChunks(agent, merged);
|
|
693
706
|
}
|
|
707
|
+
/**
|
|
708
|
+
* Validates a `MessagePart[]` and lowers it to a single-message `AsyncIterable<SDKUserMessage>`
|
|
709
|
+
* carrying Anthropic content blocks (`text`, `image`, `document`).
|
|
710
|
+
*
|
|
711
|
+
* Pre-stream validation and the input-part guard live in the SDK's {@link lowerStreamInput}:
|
|
712
|
+
* `image` / `file` parts are validated against the agent's gateway `Model.supportedFormats` and
|
|
713
|
+
* the global gateway caps via the shared `validateMultimodalFiles`, so a file is accepted or
|
|
714
|
+
* rejected identically on the Claude and Mastra paths (we deliberately mirror the SDK's
|
|
715
|
+
* conservative caps even though the underlying Bedrock models may accept more), and a
|
|
716
|
+
* `reasoning` / `tool-call` / `tool-result` part rejects with `INVALID_MESSAGE_CONTENT`. This
|
|
717
|
+
* method only supplies the Anthropic-specific lowering of each part.
|
|
718
|
+
*
|
|
719
|
+
* Validation and block construction run synchronously (the returned generator only yields the
|
|
720
|
+
* pre-built message) so failures reject the caller's `stream()` promise before any query starts.
|
|
721
|
+
*/
|
|
722
|
+
buildMultimodalPrompt(agentState, parts) {
|
|
723
|
+
const content = lowerStreamInput(parts, (files) => validateMultimodalFiles(files, agentState.model), (part) => {
|
|
724
|
+
switch (part.type) {
|
|
725
|
+
case 'text':
|
|
726
|
+
return { type: 'text', text: part.text };
|
|
727
|
+
case 'image':
|
|
728
|
+
return {
|
|
729
|
+
type: 'image',
|
|
730
|
+
source: { type: 'base64', media_type: part.mimeType, data: part.data },
|
|
731
|
+
};
|
|
732
|
+
case 'file':
|
|
733
|
+
return {
|
|
734
|
+
type: 'document',
|
|
735
|
+
source: { type: 'base64', media_type: part.mimeType, data: part.data },
|
|
736
|
+
...(part.fileName !== undefined ? { title: part.fileName } : {}),
|
|
737
|
+
};
|
|
738
|
+
}
|
|
739
|
+
});
|
|
740
|
+
const userMessage = {
|
|
741
|
+
type: 'user',
|
|
742
|
+
parent_tool_use_id: null,
|
|
743
|
+
message: { role: 'user', content },
|
|
744
|
+
};
|
|
745
|
+
return (async function* () {
|
|
746
|
+
yield userMessage;
|
|
747
|
+
})();
|
|
748
|
+
}
|
|
694
749
|
async stream(agentId, threadId, message, streamOptions) {
|
|
695
750
|
const agentState = this.agents.get(agentId);
|
|
696
751
|
if (!agentState) {
|
|
697
752
|
throw new Error(`Agent "${agentId}" not found`);
|
|
698
753
|
}
|
|
699
|
-
const { projectRoot, config, rulesAppend,
|
|
754
|
+
const { projectRoot, config, rulesAppend, model } = agentState;
|
|
700
755
|
const threadState = agentState.threads.get(threadId);
|
|
701
756
|
if (!config.orgJwt) {
|
|
702
757
|
throw new Error(`Agent "${agentId}" has no orgJwt configured`);
|
|
703
758
|
}
|
|
704
|
-
|
|
759
|
+
// Build (and pre-stream-validate) the query prompt. A plain string passes through; a
|
|
760
|
+
// MessagePart[] is validated against the model's capabilities and lowered to a single
|
|
761
|
+
// Anthropic user message carrying text / image / document content blocks. Validation runs
|
|
762
|
+
// synchronously here so failures reject the `stream()` promise (pre-stream contract) rather
|
|
763
|
+
// than surfacing mid-iteration.
|
|
764
|
+
const prompt = typeof message === 'string' ? message : this.buildMultimodalPrompt(agentState, message);
|
|
765
|
+
const { env, nativeModelId } = await this.envBuilder.build(config.orgJwt, model.name);
|
|
705
766
|
const sessionOptions = threadState?.hasStreamed ? { resume: threadId } : { sessionId: threadId };
|
|
706
767
|
const pendingContext = threadState?.pendingContext ?? [];
|
|
707
768
|
const contextConfig = pendingContext.length > 0
|
|
@@ -716,8 +777,13 @@ export class ClaudeHarness {
|
|
|
716
777
|
const lookup = (toolName) => lookupMcpToolMetadata(agentState.mcpServers, toolName);
|
|
717
778
|
const adapter = new ClaudeEventAdapter(this.buses.getLogBus(), lookup);
|
|
718
779
|
const controller = new AbortController();
|
|
780
|
+
// Resolve `requireToolApproval` to its canonical mode (#447):
|
|
781
|
+
// `undefined` (no gating), `'serial'`, or `'batch'`. The broker
|
|
782
|
+
// is allocated for both gating modes; only the emission shape
|
|
783
|
+
// differs.
|
|
784
|
+
const approvalMode = resolveToolApprovalMode(streamOptions?.requireToolApproval);
|
|
719
785
|
let broker;
|
|
720
|
-
if (
|
|
786
|
+
if (approvalMode !== undefined) {
|
|
721
787
|
const key = this.brokerKey(agentId, threadId);
|
|
722
788
|
this.brokers.get(key)?.dispose();
|
|
723
789
|
broker = new ClaudeStreamBroker({
|
|
@@ -725,6 +791,7 @@ export class ClaudeHarness {
|
|
|
725
791
|
toolApprovalTimeoutMs: this.toolApprovalTimeoutMs,
|
|
726
792
|
abortController: controller,
|
|
727
793
|
lookupMcpToolMetadata: lookup,
|
|
794
|
+
mode: approvalMode,
|
|
728
795
|
});
|
|
729
796
|
this.brokers.set(key, broker);
|
|
730
797
|
}
|
|
@@ -737,7 +804,7 @@ export class ClaudeHarness {
|
|
|
737
804
|
const consumerTools = config.tools ?? [];
|
|
738
805
|
let consumerToolBroker;
|
|
739
806
|
let consumerToolsBridge;
|
|
740
|
-
if (
|
|
807
|
+
if (approvalMode === undefined && consumerTools.length > 0) {
|
|
741
808
|
const key = this.brokerKey(agentId, threadId);
|
|
742
809
|
this.consumerToolBrokers.get(key)?.dispose();
|
|
743
810
|
consumerToolBroker = new ConsumerToolBroker(CONSUMER_TOOLS_BRIDGE_SERVER_NAME);
|
|
@@ -759,11 +826,28 @@ export class ClaudeHarness {
|
|
|
759
826
|
options.sessionStore = this.sessionStore;
|
|
760
827
|
if (streamOptions?.abortSignal) {
|
|
761
828
|
streamOptions.abortSignal.throwIfAborted();
|
|
762
|
-
|
|
829
|
+
const onAbort = () => {
|
|
763
830
|
controller.abort();
|
|
764
831
|
broker?.abort();
|
|
765
832
|
consumerToolBroker?.abort();
|
|
766
|
-
}
|
|
833
|
+
};
|
|
834
|
+
const abortSignal = streamOptions.abortSignal;
|
|
835
|
+
abortSignal.addEventListener('abort', onAbort);
|
|
836
|
+
// Detach the listener at the per-stream controller's abort
|
|
837
|
+
// event. The harness aborts `controller` from end-of-stream
|
|
838
|
+
// paths (the eventStream generator's `finally`, broker
|
|
839
|
+
// dispose's `abortController.abort()`, consumer-tool broker's
|
|
840
|
+
// abort, the inbound abort listener above), so this fires
|
|
841
|
+
// exactly once per stream — natural completion, error, or
|
|
842
|
+
// forwarded abort. Without this, a long-lived consumer
|
|
843
|
+
// AbortController (session-scoped, app-scoped) would
|
|
844
|
+
// accumulate one listener per turn even when the turn never
|
|
845
|
+
// aborts. Tying cleanup to `controller.signal` instead of
|
|
846
|
+
// `broker?.onTeardown()` covers the no-broker path (most
|
|
847
|
+
// turns) too.
|
|
848
|
+
controller.signal.addEventListener('abort', () => abortSignal.removeEventListener('abort', onAbort), {
|
|
849
|
+
once: true,
|
|
850
|
+
});
|
|
767
851
|
}
|
|
768
852
|
if (threadState && pendingContext.length > 0) {
|
|
769
853
|
threadState.pendingContext = [];
|
|
@@ -771,12 +855,13 @@ export class ClaudeHarness {
|
|
|
771
855
|
// stream and the next addContext doesn't re-inject the
|
|
772
856
|
// already-consumed pendingContext into the model's
|
|
773
857
|
// systemPrompt. contextHistory persists unchanged.
|
|
858
|
+
// Normalize to placeholders so raw base64 never lands on disk.
|
|
774
859
|
await this.threadContextStore.write(projectRoot, threadId, {
|
|
775
|
-
pendingContext:
|
|
776
|
-
contextHistory: threadState.contextHistory,
|
|
860
|
+
pendingContext: [],
|
|
861
|
+
contextHistory: threadState.contextHistory.map(normalizeMessageForSidecar),
|
|
777
862
|
});
|
|
778
863
|
}
|
|
779
|
-
const queryResult = query({ prompt
|
|
864
|
+
const queryResult = query({ prompt, options });
|
|
780
865
|
if (threadState) {
|
|
781
866
|
threadState.hasStreamed = true;
|
|
782
867
|
}
|
|
@@ -815,17 +900,38 @@ export class ClaudeHarness {
|
|
|
815
900
|
return teeTextStream(consumerToolBroker.initialSink().generator());
|
|
816
901
|
}
|
|
817
902
|
const logBus = this.buses.getLogBus();
|
|
903
|
+
// Snapshot here so the catch block can distinguish a
|
|
904
|
+
// consumer-forwarded abort (signal aborted before the iterator
|
|
905
|
+
// threw) from "iterator threw normally and the finally aborted
|
|
906
|
+
// `controller` for listener cleanup." Without this, the natural
|
|
907
|
+
// error path would mis-classify as abort once the finally runs.
|
|
908
|
+
const consumerAbortSignal = streamOptions?.abortSignal;
|
|
818
909
|
async function* eventStream() {
|
|
819
910
|
let terminalEmitted = false;
|
|
820
911
|
try {
|
|
821
|
-
|
|
822
|
-
for (const
|
|
823
|
-
|
|
824
|
-
|
|
912
|
+
try {
|
|
913
|
+
for await (const msg of queryResult) {
|
|
914
|
+
for (const event of adapter.mapMessage(msg)) {
|
|
915
|
+
if (event.type === 'finish') {
|
|
916
|
+
terminalEmitted = true;
|
|
917
|
+
}
|
|
918
|
+
yield event;
|
|
825
919
|
}
|
|
826
|
-
yield event;
|
|
827
920
|
}
|
|
828
921
|
}
|
|
922
|
+
finally {
|
|
923
|
+
// Abort the per-stream controller on every exit path
|
|
924
|
+
// (natural completion, iterator throw, consumer
|
|
925
|
+
// `return()` from a `break`). The abort fires the
|
|
926
|
+
// `controller.signal` listeners we register above
|
|
927
|
+
// (consumer-AbortSignal listener detach, broker
|
|
928
|
+
// teardown), so a turn that never explicitly aborts
|
|
929
|
+
// still releases its inbound listener. Idempotent —
|
|
930
|
+
// the inbound abort listener already aborted
|
|
931
|
+
// `controller` when applicable.
|
|
932
|
+
if (!controller.signal.aborted)
|
|
933
|
+
controller.abort();
|
|
934
|
+
}
|
|
829
935
|
}
|
|
830
936
|
catch (err) {
|
|
831
937
|
// The Salesforce LLM Gateway's Bedrock-Claude path
|
|
@@ -853,13 +959,20 @@ export class ClaudeHarness {
|
|
|
853
959
|
});
|
|
854
960
|
return;
|
|
855
961
|
}
|
|
856
|
-
if (
|
|
962
|
+
if (consumerAbortSignal?.aborted) {
|
|
857
963
|
// When the consumer-supplied AbortSignal fires, the
|
|
858
964
|
// harness forwards it onto its local controller and the
|
|
859
965
|
// Claude SDK iterator throws whatever it throws (varies
|
|
860
966
|
// by upstream version). Normalize to the SDK's
|
|
861
967
|
// documented abort contract: AbortError-named Error +
|
|
862
968
|
// `code: 'abort'`. Matches the Mastra harness convention.
|
|
969
|
+
//
|
|
970
|
+
// We check the CONSUMER's signal here, not
|
|
971
|
+
// `controller.signal` — the per-stream controller is
|
|
972
|
+
// also aborted from the generator's `finally` for
|
|
973
|
+
// listener cleanup on natural error paths, so checking
|
|
974
|
+
// it would mis-classify regular iterator failures as
|
|
975
|
+
// aborts.
|
|
863
976
|
yield {
|
|
864
977
|
type: 'error',
|
|
865
978
|
error: new DOMException('The stream was aborted.', 'AbortError'),
|
|
@@ -903,8 +1016,8 @@ export class ClaudeHarness {
|
|
|
903
1016
|
for (const [name, state] of agent.mcpServers) {
|
|
904
1017
|
if (state.currentStatus !== McpServerStatus.Connected)
|
|
905
1018
|
continue;
|
|
906
|
-
const
|
|
907
|
-
out[name] = buildBridgeForServer(name, state.client, state.tools, timeout);
|
|
1019
|
+
const serverConfig = agent.config.mcpServers?.[name];
|
|
1020
|
+
out[name] = buildBridgeForServer(name, state.client, state.tools, serverConfig?.timeout, serverConfig?.alwaysLoad);
|
|
908
1021
|
}
|
|
909
1022
|
if (consumerToolsBridge) {
|
|
910
1023
|
out[CONSUMER_TOOLS_BRIDGE_SERVER_NAME] = consumerToolsBridge;
|
|
@@ -925,7 +1038,16 @@ export class ClaudeHarness {
|
|
|
925
1038
|
* fresh continuation sink returned here.
|
|
926
1039
|
*/
|
|
927
1040
|
async submitToolResult(agentId, threadId, toolResult) {
|
|
928
|
-
const
|
|
1041
|
+
const key = this.brokerKey(agentId, threadId);
|
|
1042
|
+
// A `ClaudeStreamBroker` only exists when the originating turn was
|
|
1043
|
+
// approval-gated. The broker has no path to settle a
|
|
1044
|
+
// consumer-executed tool result (its decision shape is
|
|
1045
|
+
// approve/decline only), so refuse with cross-harness-parity
|
|
1046
|
+
// guidance — Mastra's submitToolResult emits the same shape.
|
|
1047
|
+
if (this.brokers.has(key)) {
|
|
1048
|
+
throw new Error(`ClaudeHarness.submitToolResult(): thread "${threadId}" on agent "${agentId}" is in approval-gated mode; settle pending approvals via approveToolCall / declineToolCall first`);
|
|
1049
|
+
}
|
|
1050
|
+
const broker = this.consumerToolBrokers.get(key);
|
|
929
1051
|
if (!broker) {
|
|
930
1052
|
throw new Error(`ClaudeHarness.submitToolResult(): no active consumer-tool stream for thread "${threadId}" on agent "${agentId}"`);
|
|
931
1053
|
}
|
|
@@ -971,6 +1093,9 @@ export class ClaudeHarness {
|
|
|
971
1093
|
// `pendingContext` → systemPrompt path on the next stream. Order is
|
|
972
1094
|
// injection-order followed by persisted-transcript-order, matching
|
|
973
1095
|
// the Mastra harness shape.
|
|
1096
|
+
// Consumer-visible content round-trips unchanged: contextHistory entries
|
|
1097
|
+
// are returned exactly as passed to addContext(), including any raw base64
|
|
1098
|
+
// in image/file parts. Only the sidecar-persisted copy is normalized (see addContext()).
|
|
974
1099
|
const contextHistory = threadState?.contextHistory ?? [];
|
|
975
1100
|
return contextHistory.length === 0 ? persisted : [...contextHistory, ...persisted];
|
|
976
1101
|
}
|
|
@@ -995,7 +1120,7 @@ export class ClaudeHarness {
|
|
|
995
1120
|
}
|
|
996
1121
|
buildContextPrompt(baseInstructions, messages) {
|
|
997
1122
|
const contextBlock = messages
|
|
998
|
-
.map((m) => `[${m.role}]: ${typeof m.content === 'string' ? m.content :
|
|
1123
|
+
.map((m) => `[${m.role}]: ${typeof m.content === 'string' ? m.content : m.content.map((p) => partToTranscriptText(p)).join(' ')}`)
|
|
999
1124
|
.join('\n');
|
|
1000
1125
|
const prefix = baseInstructions ? `${baseInstructions}\n\n` : '';
|
|
1001
1126
|
return `${prefix}<prior-context>\n${contextBlock}\n</prior-context>`;
|
|
@@ -1022,9 +1147,12 @@ export class ClaudeHarness {
|
|
|
1022
1147
|
// path (`memory.saveMessages`) propagates libsql failures, and
|
|
1023
1148
|
// silently masking a write failure here would recreate the very
|
|
1024
1149
|
// cross-restart drop the sidecar exists to prevent.
|
|
1150
|
+
// Normalize MessagePart[] content to placeholder text before writing so
|
|
1151
|
+
// raw base64 blobs never land in the sidecar JSON (same pattern as
|
|
1152
|
+
// compactThread's transcript builder).
|
|
1025
1153
|
await this.threadContextStore.write(agent.projectRoot, threadId, {
|
|
1026
|
-
pendingContext: threadState.pendingContext,
|
|
1027
|
-
contextHistory: threadState.contextHistory,
|
|
1154
|
+
pendingContext: threadState.pendingContext.map(normalizeMessageForSidecar),
|
|
1155
|
+
contextHistory: threadState.contextHistory.map(normalizeMessageForSidecar),
|
|
1028
1156
|
});
|
|
1029
1157
|
}
|
|
1030
1158
|
/**
|
|
@@ -1295,7 +1423,11 @@ function projectMcpServerStateToInfo(name, state) {
|
|
|
1295
1423
|
}
|
|
1296
1424
|
}
|
|
1297
1425
|
function mapToolToInfo(serverName, tool) {
|
|
1298
|
-
const info = {
|
|
1426
|
+
const info = {
|
|
1427
|
+
name: `mcp__${serverName}__${tool.name}`,
|
|
1428
|
+
serverName,
|
|
1429
|
+
toolName: tool.name,
|
|
1430
|
+
};
|
|
1299
1431
|
if (tool.description !== undefined && tool.description !== '') {
|
|
1300
1432
|
info.description = tool.description;
|
|
1301
1433
|
}
|