@@ -31,6 +31,7 @@ import {
|
31 | 31 | import { couldNormalizeToolNamePrefixToAllowedTool, normalizeToolName } from "../../tool-policy.js"; |
32 | 32 | import { shouldAllowProviderOwnedThinkingReplay } from "../../transcript-policy.js"; |
33 | 33 | import type { TranscriptPolicy } from "../../transcript-policy.js"; |
| 34 | +import { isRunnerToolCallBlockType } from "./attempt.tool-call-block-type.js"; |
34 | 35 | import { wrapStreamObjectEvents } from "./stream-wrapper.js"; |
35 | 36 | |
36 | 37 | const BLANK_TOOL_CALL_NAME_DESCRIPTION = "blank tool name"; |
@@ -238,10 +239,6 @@ function normalizeToolCallNameForDispatch(
|
238 | 239 | return resolveStructuredAllowedToolName(trimmed, allowedToolNames) ?? trimmed; |
239 | 240 | } |
240 | 241 | |
241 | | -function isToolCallBlockType(type: unknown): boolean { |
242 | | -return type === "toolCall" || type === "toolUse" || type === "functionCall"; |
243 | | -} |
244 | | - |
245 | 242 | const REPLAY_TOOL_CALL_NAME_MAX_CHARS = 64; |
246 | 243 | |
247 | 244 | type ReplayToolCallBlock = { |
@@ -298,7 +295,7 @@ function isReplayToolCallBlock(block: unknown): block is ReplayToolCallBlock {
|
298 | 295 | if (!block || typeof block !== "object") { |
299 | 296 | return false; |
300 | 297 | } |
301 | | -return isToolCallBlockType((block as { type?: unknown }).type); |
| 298 | +return isRunnerToolCallBlockType((block as { type?: unknown }).type); |
302 | 299 | } |
303 | 300 | |
304 | 301 | function replayToolCallHasInput(block: ReplayToolCallBlock): boolean { |
@@ -533,7 +530,7 @@ function sanitizeAnthropicReplayToolResults(
|
533 | 530 | continue; |
534 | 531 | } |
535 | 532 | const typedBlock = block as { type?: unknown; id?: unknown }; |
536 | | -if (!isToolCallBlockType(typedBlock.type) || typeof typedBlock.id !== "string") { |
| 533 | +if (!isRunnerToolCallBlockType(typedBlock.type) || typeof typedBlock.id !== "string") { |
537 | 534 | continue; |
538 | 535 | } |
539 | 536 | const trimmedId = typedBlock.id.trim(); |
@@ -625,7 +622,7 @@ function normalizeToolCallIdsInMessage(message: unknown): void {
|
625 | 622 | continue; |
626 | 623 | } |
627 | 624 | const typedBlock = block as { type?: unknown; id?: unknown }; |
628 | | -if (!isToolCallBlockType(typedBlock.type) || typeof typedBlock.id !== "string") { |
| 625 | +if (!isRunnerToolCallBlockType(typedBlock.type) || typeof typedBlock.id !== "string") { |
629 | 626 | continue; |
630 | 627 | } |
631 | 628 | const trimmedId = typedBlock.id.trim(); |
@@ -642,7 +639,7 @@ function normalizeToolCallIdsInMessage(message: unknown): void {
|
642 | 639 | continue; |
643 | 640 | } |
644 | 641 | const typedBlock = block as { type?: unknown; id?: unknown }; |
645 | | -if (!isToolCallBlockType(typedBlock.type)) { |
| 642 | +if (!isRunnerToolCallBlockType(typedBlock.type)) { |
646 | 643 | continue; |
647 | 644 | } |
648 | 645 | if (typeof typedBlock.id === "string") { |
@@ -674,7 +671,7 @@ function trimWhitespaceFromToolCallNamesInMessage(
|
674 | 671 | ): void { |
675 | 672 | visitObjectContentBlocks(message, (block) => { |
676 | 673 | const typedBlock = block as { type?: unknown; name?: unknown; id?: unknown }; |
677 | | -if (!isToolCallBlockType(typedBlock.type)) { |
| 674 | +if (!isRunnerToolCallBlockType(typedBlock.type)) { |
678 | 675 | return; |
679 | 676 | } |
680 | 677 | const rawId = typeof typedBlock.id === "string" ? typedBlock.id : undefined; |
@@ -721,7 +718,7 @@ function classifyToolCallMessage(
|
721 | 718 | continue; |
722 | 719 | } |
723 | 720 | const typedBlock = block as { type?: unknown; name?: unknown }; |
724 | | -if (!isToolCallBlockType(typedBlock.type)) { |
| 721 | +if (!isRunnerToolCallBlockType(typedBlock.type)) { |
725 | 722 | continue; |
726 | 723 | } |
727 | 724 | sawToolCall = true; |
|