@truefoundry/trueforge-core 0.0.0 → 0.1.0-rc.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/LICENSE +21 -0
- package/dist/agent-session/ITurnResourceResolver.d.ts +69 -0
- package/dist/agent-session/ITurnResourceResolver.d.ts.map +1 -0
- package/dist/agent-session/ITurnResourceResolver.js +19 -0
- package/dist/agent-session/ITurnResourceResolver.js.map +1 -0
- package/dist/agent-session/ITurnResourceResolver.mjs +1 -0
- package/dist/agent-session/ITurnResourceResolver.mjs.map +1 -0
- package/dist/agent-session/SessionHandle.d.ts +81 -0
- package/dist/agent-session/SessionHandle.d.ts.map +1 -0
- package/dist/agent-session/SessionHandle.js +392 -0
- package/dist/agent-session/SessionHandle.js.map +1 -0
- package/dist/agent-session/SessionHandle.mjs +371 -0
- package/dist/agent-session/SessionHandle.mjs.map +1 -0
- package/dist/agent-session/Sessions.d.ts +25 -0
- package/dist/agent-session/Sessions.d.ts.map +1 -0
- package/dist/agent-session/Sessions.js +71 -0
- package/dist/agent-session/Sessions.js.map +1 -0
- package/dist/agent-session/Sessions.mjs +46 -0
- package/dist/agent-session/Sessions.mjs.map +1 -0
- package/dist/agent-session/TurnHandle.d.ts +88 -0
- package/dist/agent-session/TurnHandle.d.ts.map +1 -0
- package/dist/agent-session/TurnHandle.js +490 -0
- package/dist/agent-session/TurnHandle.js.map +1 -0
- package/dist/agent-session/TurnHandle.mjs +469 -0
- package/dist/agent-session/TurnHandle.mjs.map +1 -0
- package/dist/agent-session/TurnResourceResolver.d.ts +154 -0
- package/dist/agent-session/TurnResourceResolver.d.ts.map +1 -0
- package/dist/agent-session/TurnResourceResolver.js +178 -0
- package/dist/agent-session/TurnResourceResolver.js.map +1 -0
- package/dist/agent-session/TurnResourceResolver.mjs +153 -0
- package/dist/agent-session/TurnResourceResolver.mjs.map +1 -0
- package/dist/agent-session/builtinsFromSpec.d.ts +19 -0
- package/dist/agent-session/builtinsFromSpec.d.ts.map +1 -0
- package/dist/agent-session/builtinsFromSpec.js +73 -0
- package/dist/agent-session/builtinsFromSpec.js.map +1 -0
- package/dist/agent-session/builtinsFromSpec.mjs +48 -0
- package/dist/agent-session/builtinsFromSpec.mjs.map +1 -0
- package/dist/agent-session/index.d.ts +29 -0
- package/dist/agent-session/index.d.ts.map +1 -0
- package/dist/agent-session/index.js +117 -0
- package/dist/agent-session/index.js.map +1 -0
- package/dist/agent-session/index.mjs +84 -0
- package/dist/agent-session/index.mjs.map +1 -0
- package/dist/agent-session/models/SessionRecord.d.ts +34 -0
- package/dist/agent-session/models/SessionRecord.d.ts.map +1 -0
- package/dist/agent-session/models/SessionRecord.js +19 -0
- package/dist/agent-session/models/SessionRecord.js.map +1 -0
- package/dist/agent-session/models/SessionRecord.mjs +1 -0
- package/dist/agent-session/models/SessionRecord.mjs.map +1 -0
- package/dist/agent-session/models/TurnRecord.d.ts +37 -0
- package/dist/agent-session/models/TurnRecord.d.ts.map +1 -0
- package/dist/agent-session/models/TurnRecord.js +31 -0
- package/dist/agent-session/models/TurnRecord.js.map +1 -0
- package/dist/agent-session/models/TurnRecord.mjs +6 -0
- package/dist/agent-session/models/TurnRecord.mjs.map +1 -0
- package/dist/agent-session/schemas/agentSpec.d.ts +142 -0
- package/dist/agent-session/schemas/agentSpec.d.ts.map +1 -0
- package/dist/agent-session/schemas/agentSpec.js +170 -0
- package/dist/agent-session/schemas/agentSpec.js.map +1 -0
- package/dist/agent-session/schemas/agentSpec.mjs +154 -0
- package/dist/agent-session/schemas/agentSpec.mjs.map +1 -0
- package/dist/agent-session/schemas/events.d.ts +1037 -0
- package/dist/agent-session/schemas/events.d.ts.map +1 -0
- package/dist/agent-session/schemas/events.js +80 -0
- package/dist/agent-session/schemas/events.js.map +1 -0
- package/dist/agent-session/schemas/events.mjs +69 -0
- package/dist/agent-session/schemas/events.mjs.map +1 -0
- package/dist/agent-session/schemas/pagination.d.ts +9 -0
- package/dist/agent-session/schemas/pagination.d.ts.map +1 -0
- package/dist/agent-session/schemas/pagination.js +36 -0
- package/dist/agent-session/schemas/pagination.js.map +1 -0
- package/dist/agent-session/schemas/pagination.mjs +11 -0
- package/dist/agent-session/schemas/pagination.mjs.map +1 -0
- package/dist/agent-session/schemas/session.d.ts +319 -0
- package/dist/agent-session/schemas/session.d.ts.map +1 -0
- package/dist/agent-session/schemas/session.js +58 -0
- package/dist/agent-session/schemas/session.js.map +1 -0
- package/dist/agent-session/schemas/session.mjs +30 -0
- package/dist/agent-session/schemas/session.mjs.map +1 -0
- package/dist/agent-session/schemas/turn.d.ts +494 -0
- package/dist/agent-session/schemas/turn.d.ts.map +1 -0
- package/dist/agent-session/schemas/turn.js +131 -0
- package/dist/agent-session/schemas/turn.js.map +1 -0
- package/dist/agent-session/schemas/turn.mjs +102 -0
- package/dist/agent-session/schemas/turn.mjs.map +1 -0
- package/dist/agent-session/store/ISessionStore.d.ts +310 -0
- package/dist/agent-session/store/ISessionStore.d.ts.map +1 -0
- package/dist/agent-session/store/ISessionStore.js +19 -0
- package/dist/agent-session/store/ISessionStore.js.map +1 -0
- package/dist/agent-session/store/ISessionStore.mjs +1 -0
- package/dist/agent-session/store/ISessionStore.mjs.map +1 -0
- package/dist/agent-session/store/InMemorySessionStore.d.ts +55 -0
- package/dist/agent-session/store/InMemorySessionStore.d.ts.map +1 -0
- package/dist/agent-session/store/InMemorySessionStore.js +475 -0
- package/dist/agent-session/store/InMemorySessionStore.js.map +1 -0
- package/dist/agent-session/store/InMemorySessionStore.mjs +461 -0
- package/dist/agent-session/store/InMemorySessionStore.mjs.map +1 -0
- package/dist/agent-session/store/OffsetPageToken.d.ts +13 -0
- package/dist/agent-session/store/OffsetPageToken.d.ts.map +1 -0
- package/dist/agent-session/store/OffsetPageToken.js +60 -0
- package/dist/agent-session/store/OffsetPageToken.js.map +1 -0
- package/dist/agent-session/store/OffsetPageToken.mjs +32 -0
- package/dist/agent-session/store/OffsetPageToken.mjs.map +1 -0
- package/dist/agent-session/store/PageToken.d.ts +4 -0
- package/dist/agent-session/store/PageToken.d.ts.map +1 -0
- package/dist/agent-session/store/PageToken.js +45 -0
- package/dist/agent-session/store/PageToken.js.map +1 -0
- package/dist/agent-session/store/PageToken.mjs +19 -0
- package/dist/agent-session/store/PageToken.mjs.map +1 -0
- package/dist/agent-session/store/SessionEventPageToken.d.ts +14 -0
- package/dist/agent-session/store/SessionEventPageToken.d.ts.map +1 -0
- package/dist/agent-session/store/SessionEventPageToken.js +70 -0
- package/dist/agent-session/store/SessionEventPageToken.js.map +1 -0
- package/dist/agent-session/store/SessionEventPageToken.mjs +42 -0
- package/dist/agent-session/store/SessionEventPageToken.mjs.map +1 -0
- package/dist/agent-session/store/SessionListPageToken.d.ts +24 -0
- package/dist/agent-session/store/SessionListPageToken.d.ts.map +1 -0
- package/dist/agent-session/store/SessionListPageToken.js +66 -0
- package/dist/agent-session/store/SessionListPageToken.js.map +1 -0
- package/dist/agent-session/store/SessionListPageToken.mjs +38 -0
- package/dist/agent-session/store/SessionListPageToken.mjs.map +1 -0
- package/dist/agent-session/store/SessionStoreErrors.d.ts +43 -0
- package/dist/agent-session/store/SessionStoreErrors.d.ts.map +1 -0
- package/dist/agent-session/store/SessionStoreErrors.js +126 -0
- package/dist/agent-session/store/SessionStoreErrors.js.map +1 -0
- package/dist/agent-session/store/SessionStoreErrors.mjs +92 -0
- package/dist/agent-session/store/SessionStoreErrors.mjs.map +1 -0
- package/dist/agent-session/store/assertCreateTurnThreadDelta.d.ts +18 -0
- package/dist/agent-session/store/assertCreateTurnThreadDelta.d.ts.map +1 -0
- package/dist/agent-session/store/assertCreateTurnThreadDelta.js +67 -0
- package/dist/agent-session/store/assertCreateTurnThreadDelta.js.map +1 -0
- package/dist/agent-session/store/assertCreateTurnThreadDelta.mjs +42 -0
- package/dist/agent-session/store/assertCreateTurnThreadDelta.mjs.map +1 -0
- package/dist/core/InstructionBuilder.d.ts +71 -0
- package/dist/core/InstructionBuilder.d.ts.map +1 -0
- package/dist/core/InstructionBuilder.js +95 -0
- package/dist/core/InstructionBuilder.js.map +1 -0
- package/dist/core/InstructionBuilder.mjs +69 -0
- package/dist/core/InstructionBuilder.mjs.map +1 -0
- package/dist/core/capabilities/AgentCapability.d.ts +32 -0
- package/dist/core/capabilities/AgentCapability.d.ts.map +1 -0
- package/dist/core/capabilities/AgentCapability.js +19 -0
- package/dist/core/capabilities/AgentCapability.js.map +1 -0
- package/dist/core/capabilities/AgentCapability.mjs +1 -0
- package/dist/core/capabilities/AgentCapability.mjs.map +1 -0
- package/dist/core/capabilities/AgentContextProcessor.d.ts +30 -0
- package/dist/core/capabilities/AgentContextProcessor.d.ts.map +1 -0
- package/dist/core/capabilities/AgentContextProcessor.js +19 -0
- package/dist/core/capabilities/AgentContextProcessor.js.map +1 -0
- package/dist/core/capabilities/AgentContextProcessor.mjs +1 -0
- package/dist/core/capabilities/AgentContextProcessor.mjs.map +1 -0
- package/dist/core/capabilities/ToolResponseProcessor.d.ts +12 -0
- package/dist/core/capabilities/ToolResponseProcessor.d.ts.map +1 -0
- package/dist/core/capabilities/ToolResponseProcessor.js +19 -0
- package/dist/core/capabilities/ToolResponseProcessor.js.map +1 -0
- package/dist/core/capabilities/ToolResponseProcessor.mjs +1 -0
- package/dist/core/capabilities/ToolResponseProcessor.mjs.map +1 -0
- package/dist/core/capabilities/builtins/AskUserQuestion.d.ts +11 -0
- package/dist/core/capabilities/builtins/AskUserQuestion.d.ts.map +1 -0
- package/dist/core/capabilities/builtins/AskUserQuestion.js +90 -0
- package/dist/core/capabilities/builtins/AskUserQuestion.js.map +1 -0
- package/dist/core/capabilities/builtins/AskUserQuestion.mjs +64 -0
- package/dist/core/capabilities/builtins/AskUserQuestion.mjs.map +1 -0
- package/dist/core/capabilities/builtins/ContextCompaction.d.ts +23 -0
- package/dist/core/capabilities/builtins/ContextCompaction.d.ts.map +1 -0
- package/dist/core/capabilities/builtins/ContextCompaction.js +235 -0
- package/dist/core/capabilities/builtins/ContextCompaction.js.map +1 -0
- package/dist/core/capabilities/builtins/ContextCompaction.mjs +208 -0
- package/dist/core/capabilities/builtins/ContextCompaction.mjs.map +1 -0
- package/dist/core/capabilities/builtins/CurrentDateTime.d.ts +17 -0
- package/dist/core/capabilities/builtins/CurrentDateTime.d.ts.map +1 -0
- package/dist/core/capabilities/builtins/CurrentDateTime.js +75 -0
- package/dist/core/capabilities/builtins/CurrentDateTime.js.map +1 -0
- package/dist/core/capabilities/builtins/CurrentDateTime.mjs +47 -0
- package/dist/core/capabilities/builtins/CurrentDateTime.mjs.map +1 -0
- package/dist/core/capabilities/builtins/DynamicSubAgents.d.ts +39 -0
- package/dist/core/capabilities/builtins/DynamicSubAgents.d.ts.map +1 -0
- package/dist/core/capabilities/builtins/DynamicSubAgents.js +176 -0
- package/dist/core/capabilities/builtins/DynamicSubAgents.js.map +1 -0
- package/dist/core/capabilities/builtins/DynamicSubAgents.mjs +134 -0
- package/dist/core/capabilities/builtins/DynamicSubAgents.mjs.map +1 -0
- package/dist/core/capabilities/builtins/LargeToolResponse.d.ts +40 -0
- package/dist/core/capabilities/builtins/LargeToolResponse.d.ts.map +1 -0
- package/dist/core/capabilities/builtins/LargeToolResponse.js +225 -0
- package/dist/core/capabilities/builtins/LargeToolResponse.js.map +1 -0
- package/dist/core/capabilities/builtins/LargeToolResponse.mjs +186 -0
- package/dist/core/capabilities/builtins/LargeToolResponse.mjs.map +1 -0
- package/dist/core/capabilities/builtins/OpenUI.d.ts +31 -0
- package/dist/core/capabilities/builtins/OpenUI.d.ts.map +1 -0
- package/dist/core/capabilities/builtins/OpenUI.js +376 -0
- package/dist/core/capabilities/builtins/OpenUI.js.map +1 -0
- package/dist/core/capabilities/builtins/OpenUI.mjs +326 -0
- package/dist/core/capabilities/builtins/OpenUI.mjs.map +1 -0
- package/dist/core/errors.d.ts +33 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +88 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/errors.mjs +57 -0
- package/dist/core/errors.mjs.map +1 -0
- package/dist/core/events/PassthroughEvents.d.ts +30 -0
- package/dist/core/events/PassthroughEvents.d.ts.map +1 -0
- package/dist/core/events/PassthroughEvents.js +19 -0
- package/dist/core/events/PassthroughEvents.js.map +1 -0
- package/dist/core/events/PassthroughEvents.mjs +1 -0
- package/dist/core/events/PassthroughEvents.mjs.map +1 -0
- package/dist/core/events/schema.d.ts +1103 -0
- package/dist/core/events/schema.d.ts.map +1 -0
- package/dist/core/events/schema.js +337 -0
- package/dist/core/events/schema.js.map +1 -0
- package/dist/core/events/schema.mjs +283 -0
- package/dist/core/events/schema.mjs.map +1 -0
- package/dist/core/index.d.ts +60 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +209 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/index.mjs +144 -0
- package/dist/core/index.mjs.map +1 -0
- package/dist/core/llm/ILLM.d.ts +15 -0
- package/dist/core/llm/ILLM.d.ts.map +1 -0
- package/dist/core/llm/ILLM.js +19 -0
- package/dist/core/llm/ILLM.js.map +1 -0
- package/dist/core/llm/ILLM.mjs +1 -0
- package/dist/core/llm/ILLM.mjs.map +1 -0
- package/dist/core/llm/LLMTypes.d.ts +369 -0
- package/dist/core/llm/LLMTypes.d.ts.map +1 -0
- package/dist/core/llm/LLMTypes.js +170 -0
- package/dist/core/llm/LLMTypes.js.map +1 -0
- package/dist/core/llm/LLMTypes.mjs +133 -0
- package/dist/core/llm/LLMTypes.mjs.map +1 -0
- package/dist/core/llm/VercelAILLM.d.ts +228 -0
- package/dist/core/llm/VercelAILLM.d.ts.map +1 -0
- package/dist/core/llm/VercelAILLM.js +1042 -0
- package/dist/core/llm/VercelAILLM.js.map +1 -0
- package/dist/core/llm/VercelAILLM.mjs +999 -0
- package/dist/core/llm/VercelAILLM.mjs.map +1 -0
- package/dist/core/llm/openaiSchemas.d.ts +190 -0
- package/dist/core/llm/openaiSchemas.d.ts.map +1 -0
- package/dist/core/llm/openaiSchemas.js +144 -0
- package/dist/core/llm/openaiSchemas.js.map +1 -0
- package/dist/core/llm/openaiSchemas.mjs +107 -0
- package/dist/core/llm/openaiSchemas.mjs.map +1 -0
- package/dist/core/llm/responseFormat.d.ts +25 -0
- package/dist/core/llm/responseFormat.d.ts.map +1 -0
- package/dist/core/llm/responseFormat.js +58 -0
- package/dist/core/llm/responseFormat.js.map +1 -0
- package/dist/core/llm/responseFormat.mjs +32 -0
- package/dist/core/llm/responseFormat.mjs.map +1 -0
- package/dist/core/llm/toOpenAIChatMessage.d.ts +11 -0
- package/dist/core/llm/toOpenAIChatMessage.d.ts.map +1 -0
- package/dist/core/llm/toOpenAIChatMessage.js +95 -0
- package/dist/core/llm/toOpenAIChatMessage.js.map +1 -0
- package/dist/core/llm/toOpenAIChatMessage.mjs +70 -0
- package/dist/core/llm/toOpenAIChatMessage.mjs.map +1 -0
- package/dist/core/llm/usage.d.ts +4 -0
- package/dist/core/llm/usage.d.ts.map +1 -0
- package/dist/core/llm/usage.js +52 -0
- package/dist/core/llm/usage.js.map +1 -0
- package/dist/core/llm/usage.mjs +26 -0
- package/dist/core/llm/usage.mjs.map +1 -0
- package/dist/core/mcp/ClientSideTool.d.ts +10 -0
- package/dist/core/mcp/ClientSideTool.d.ts.map +1 -0
- package/dist/core/mcp/ClientSideTool.js +56 -0
- package/dist/core/mcp/ClientSideTool.js.map +1 -0
- package/dist/core/mcp/ClientSideTool.mjs +31 -0
- package/dist/core/mcp/ClientSideTool.mjs.map +1 -0
- package/dist/core/mcp/IMCPServer.d.ts +78 -0
- package/dist/core/mcp/IMCPServer.d.ts.map +1 -0
- package/dist/core/mcp/IMCPServer.js +63 -0
- package/dist/core/mcp/IMCPServer.js.map +1 -0
- package/dist/core/mcp/IMCPServer.mjs +33 -0
- package/dist/core/mcp/IMCPServer.mjs.map +1 -0
- package/dist/core/mcp/LocalToolMCP.d.ts +39 -0
- package/dist/core/mcp/LocalToolMCP.d.ts.map +1 -0
- package/dist/core/mcp/LocalToolMCP.js +121 -0
- package/dist/core/mcp/LocalToolMCP.js.map +1 -0
- package/dist/core/mcp/LocalToolMCP.mjs +98 -0
- package/dist/core/mcp/LocalToolMCP.mjs.map +1 -0
- package/dist/core/mcp/RemoteMCP.d.ts +67 -0
- package/dist/core/mcp/RemoteMCP.d.ts.map +1 -0
- package/dist/core/mcp/RemoteMCP.js +244 -0
- package/dist/core/mcp/RemoteMCP.js.map +1 -0
- package/dist/core/mcp/RemoteMCP.mjs +222 -0
- package/dist/core/mcp/RemoteMCP.mjs.map +1 -0
- package/dist/core/mcp/ToolSelectorPolicy.d.ts +52 -0
- package/dist/core/mcp/ToolSelectorPolicy.d.ts.map +1 -0
- package/dist/core/mcp/ToolSelectorPolicy.js +108 -0
- package/dist/core/mcp/ToolSelectorPolicy.js.map +1 -0
- package/dist/core/mcp/ToolSelectorPolicy.mjs +90 -0
- package/dist/core/mcp/ToolSelectorPolicy.mjs.map +1 -0
- package/dist/core/mcp/ToolSet.d.ts +31 -0
- package/dist/core/mcp/ToolSet.d.ts.map +1 -0
- package/dist/core/mcp/ToolSet.js +119 -0
- package/dist/core/mcp/ToolSet.js.map +1 -0
- package/dist/core/mcp/ToolSet.mjs +98 -0
- package/dist/core/mcp/ToolSet.mjs.map +1 -0
- package/dist/core/mcp/convertMCPServers.d.ts +22 -0
- package/dist/core/mcp/convertMCPServers.d.ts.map +1 -0
- package/dist/core/mcp/convertMCPServers.js +89 -0
- package/dist/core/mcp/convertMCPServers.js.map +1 -0
- package/dist/core/mcp/convertMCPServers.mjs +64 -0
- package/dist/core/mcp/convertMCPServers.mjs.map +1 -0
- package/dist/core/mcp/executeToolCalls.d.ts +31 -0
- package/dist/core/mcp/executeToolCalls.d.ts.map +1 -0
- package/dist/core/mcp/executeToolCalls.js +168 -0
- package/dist/core/mcp/executeToolCalls.js.map +1 -0
- package/dist/core/mcp/executeToolCalls.mjs +149 -0
- package/dist/core/mcp/executeToolCalls.mjs.map +1 -0
- package/dist/core/mcp/pagination.d.ts +11 -0
- package/dist/core/mcp/pagination.d.ts.map +1 -0
- package/dist/core/mcp/pagination.js +49 -0
- package/dist/core/mcp/pagination.js.map +1 -0
- package/dist/core/mcp/pagination.mjs +24 -0
- package/dist/core/mcp/pagination.mjs.map +1 -0
- package/dist/core/mcp/remoteMcpClient.d.ts +36 -0
- package/dist/core/mcp/remoteMcpClient.d.ts.map +1 -0
- package/dist/core/mcp/remoteMcpClient.js +138 -0
- package/dist/core/mcp/remoteMcpClient.js.map +1 -0
- package/dist/core/mcp/remoteMcpClient.mjs +112 -0
- package/dist/core/mcp/remoteMcpClient.mjs.map +1 -0
- package/dist/core/mcp/toolNames.d.ts +6 -0
- package/dist/core/mcp/toolNames.d.ts.map +1 -0
- package/dist/core/mcp/toolNames.js +59 -0
- package/dist/core/mcp/toolNames.js.map +1 -0
- package/dist/core/mcp/toolNames.mjs +33 -0
- package/dist/core/mcp/toolNames.mjs.map +1 -0
- package/dist/core/mcp/toolSelectors.d.ts +28 -0
- package/dist/core/mcp/toolSelectors.d.ts.map +1 -0
- package/dist/core/mcp/toolSelectors.js +113 -0
- package/dist/core/mcp/toolSelectors.js.map +1 -0
- package/dist/core/mcp/toolSelectors.mjs +78 -0
- package/dist/core/mcp/toolSelectors.mjs.map +1 -0
- package/dist/core/runtime/AgentDefinition.d.ts +23 -0
- package/dist/core/runtime/AgentDefinition.d.ts.map +1 -0
- package/dist/core/runtime/AgentDefinition.js +19 -0
- package/dist/core/runtime/AgentDefinition.js.map +1 -0
- package/dist/core/runtime/AgentDefinition.mjs +1 -0
- package/dist/core/runtime/AgentDefinition.mjs.map +1 -0
- package/dist/core/runtime/AgentThread.d.ts +64 -0
- package/dist/core/runtime/AgentThread.d.ts.map +1 -0
- package/dist/core/runtime/AgentThread.js +1065 -0
- package/dist/core/runtime/AgentThread.js.map +1 -0
- package/dist/core/runtime/AgentThread.mjs +1062 -0
- package/dist/core/runtime/AgentThread.mjs.map +1 -0
- package/dist/core/runtime/AgentThread.types.d.ts +123 -0
- package/dist/core/runtime/AgentThread.types.d.ts.map +1 -0
- package/dist/core/runtime/AgentThread.types.js +46 -0
- package/dist/core/runtime/AgentThread.types.js.map +1 -0
- package/dist/core/runtime/AgentThread.types.mjs +20 -0
- package/dist/core/runtime/AgentThread.types.mjs.map +1 -0
- package/dist/core/runtime/AgentThreadOrchestrator.d.ts +35 -0
- package/dist/core/runtime/AgentThreadOrchestrator.d.ts.map +1 -0
- package/dist/core/runtime/AgentThreadOrchestrator.js +433 -0
- package/dist/core/runtime/AgentThreadOrchestrator.js.map +1 -0
- package/dist/core/runtime/AgentThreadOrchestrator.mjs +418 -0
- package/dist/core/runtime/AgentThreadOrchestrator.mjs.map +1 -0
- package/dist/core/runtime/CreateDynamicSubAgentThread.d.ts +11 -0
- package/dist/core/runtime/CreateDynamicSubAgentThread.d.ts.map +1 -0
- package/dist/core/runtime/CreateDynamicSubAgentThread.js +19 -0
- package/dist/core/runtime/CreateDynamicSubAgentThread.js.map +1 -0
- package/dist/core/runtime/CreateDynamicSubAgentThread.mjs +1 -0
- package/dist/core/runtime/CreateDynamicSubAgentThread.mjs.map +1 -0
- package/dist/core/runtime/DeferredTool.d.ts +34 -0
- package/dist/core/runtime/DeferredTool.d.ts.map +1 -0
- package/dist/core/runtime/DeferredTool.js +321 -0
- package/dist/core/runtime/DeferredTool.js.map +1 -0
- package/dist/core/runtime/DeferredTool.mjs +287 -0
- package/dist/core/runtime/DeferredTool.mjs.map +1 -0
- package/dist/core/runtime/OpenToolCallCloser.d.ts +21 -0
- package/dist/core/runtime/OpenToolCallCloser.d.ts.map +1 -0
- package/dist/core/runtime/OpenToolCallCloser.js +92 -0
- package/dist/core/runtime/OpenToolCallCloser.js.map +1 -0
- package/dist/core/runtime/OpenToolCallCloser.mjs +66 -0
- package/dist/core/runtime/OpenToolCallCloser.mjs.map +1 -0
- package/dist/core/runtime/UserInputMessage.d.ts +16 -0
- package/dist/core/runtime/UserInputMessage.d.ts.map +1 -0
- package/dist/core/runtime/UserInputMessage.js +183 -0
- package/dist/core/runtime/UserInputMessage.js.map +1 -0
- package/dist/core/runtime/UserInputMessage.mjs +157 -0
- package/dist/core/runtime/UserInputMessage.mjs.map +1 -0
- package/dist/core/runtime/contextUsage.d.ts +17 -0
- package/dist/core/runtime/contextUsage.d.ts.map +1 -0
- package/dist/core/runtime/contextUsage.js +56 -0
- package/dist/core/runtime/contextUsage.js.map +1 -0
- package/dist/core/runtime/contextUsage.mjs +28 -0
- package/dist/core/runtime/contextUsage.mjs.map +1 -0
- package/dist/core/runtime/contextUtils.d.ts +30 -0
- package/dist/core/runtime/contextUtils.d.ts.map +1 -0
- package/dist/core/runtime/contextUtils.js +198 -0
- package/dist/core/runtime/contextUtils.js.map +1 -0
- package/dist/core/runtime/contextUtils.mjs +148 -0
- package/dist/core/runtime/contextUtils.mjs.map +1 -0
- package/dist/core/runtime/metrics.d.ts +22 -0
- package/dist/core/runtime/metrics.d.ts.map +1 -0
- package/dist/core/runtime/metrics.js +89 -0
- package/dist/core/runtime/metrics.js.map +1 -0
- package/dist/core/runtime/metrics.mjs +61 -0
- package/dist/core/runtime/metrics.mjs.map +1 -0
- package/dist/core/sandbox/Sandbox.d.ts +121 -0
- package/dist/core/sandbox/Sandbox.d.ts.map +1 -0
- package/dist/core/sandbox/Sandbox.js +572 -0
- package/dist/core/sandbox/Sandbox.js.map +1 -0
- package/dist/core/sandbox/Sandbox.mjs +536 -0
- package/dist/core/sandbox/Sandbox.mjs.map +1 -0
- package/dist/core/sandbox/SandboxErrors.d.ts +30 -0
- package/dist/core/sandbox/SandboxErrors.d.ts.map +1 -0
- package/dist/core/sandbox/SandboxErrors.js +102 -0
- package/dist/core/sandbox/SandboxErrors.js.map +1 -0
- package/dist/core/sandbox/SandboxErrors.mjs +71 -0
- package/dist/core/sandbox/SandboxErrors.mjs.map +1 -0
- package/dist/core/sandbox/SandboxNatsBridge.d.ts +33 -0
- package/dist/core/sandbox/SandboxNatsBridge.d.ts.map +1 -0
- package/dist/core/sandbox/SandboxNatsBridge.js +222 -0
- package/dist/core/sandbox/SandboxNatsBridge.js.map +1 -0
- package/dist/core/sandbox/SandboxNatsBridge.mjs +201 -0
- package/dist/core/sandbox/SandboxNatsBridge.mjs.map +1 -0
- package/dist/core/sandbox/constants.d.ts +10 -0
- package/dist/core/sandbox/constants.d.ts.map +1 -0
- package/dist/core/sandbox/constants.js +37 -0
- package/dist/core/sandbox/constants.js.map +1 -0
- package/dist/core/sandbox/constants.mjs +10 -0
- package/dist/core/sandbox/constants.mjs.map +1 -0
- package/dist/core/sandbox/provider/DaytonaProvider.d.ts +80 -0
- package/dist/core/sandbox/provider/DaytonaProvider.d.ts.map +1 -0
- package/dist/core/sandbox/provider/DaytonaProvider.js +346 -0
- package/dist/core/sandbox/provider/DaytonaProvider.js.map +1 -0
- package/dist/core/sandbox/provider/DaytonaProvider.mjs +326 -0
- package/dist/core/sandbox/provider/DaytonaProvider.mjs.map +1 -0
- package/dist/core/sandbox/provider/Provider.d.ts +83 -0
- package/dist/core/sandbox/provider/Provider.d.ts.map +1 -0
- package/dist/core/sandbox/provider/Provider.js +43 -0
- package/dist/core/sandbox/provider/Provider.js.map +1 -0
- package/dist/core/sandbox/provider/Provider.mjs +17 -0
- package/dist/core/sandbox/provider/Provider.mjs.map +1 -0
- package/dist/core/sandbox/provider/TFYSandboxProvider.d.ts +41 -0
- package/dist/core/sandbox/provider/TFYSandboxProvider.d.ts.map +1 -0
- package/dist/core/sandbox/provider/TFYSandboxProvider.js +180 -0
- package/dist/core/sandbox/provider/TFYSandboxProvider.js.map +1 -0
- package/dist/core/sandbox/provider/TFYSandboxProvider.mjs +147 -0
- package/dist/core/sandbox/provider/TFYSandboxProvider.mjs.map +1 -0
- package/dist/core/sandbox/sandboxImage.d.ts +6 -0
- package/dist/core/sandbox/sandboxImage.d.ts.map +1 -0
- package/dist/core/sandbox/sandboxImage.js +31 -0
- package/dist/core/sandbox/sandboxImage.js.map +1 -0
- package/dist/core/sandbox/sandboxImage.mjs +6 -0
- package/dist/core/sandbox/sandboxImage.mjs.map +1 -0
- package/dist/core/sandbox/sandboxScripts.gen.d.ts +5 -0
- package/dist/core/sandbox/sandboxScripts.gen.d.ts.map +1 -0
- package/dist/core/sandbox/sandboxScripts.gen.js +343 -0
- package/dist/core/sandbox/sandboxScripts.gen.js.map +1 -0
- package/dist/core/sandbox/sandboxScripts.gen.mjs +318 -0
- package/dist/core/sandbox/sandboxScripts.gen.mjs.map +1 -0
- package/dist/core/sandbox/skills/ISkillMounter.d.ts +7 -0
- package/dist/core/sandbox/skills/ISkillMounter.d.ts.map +1 -0
- package/dist/core/sandbox/skills/ISkillMounter.js +19 -0
- package/dist/core/sandbox/skills/ISkillMounter.js.map +1 -0
- package/dist/core/sandbox/skills/ISkillMounter.mjs +1 -0
- package/dist/core/sandbox/skills/ISkillMounter.mjs.map +1 -0
- package/dist/core/sandbox/skills/SkillMounter.d.ts +17 -0
- package/dist/core/sandbox/skills/SkillMounter.d.ts.map +1 -0
- package/dist/core/sandbox/skills/SkillMounter.js +73 -0
- package/dist/core/sandbox/skills/SkillMounter.js.map +1 -0
- package/dist/core/sandbox/skills/SkillMounter.mjs +48 -0
- package/dist/core/sandbox/skills/SkillMounter.mjs.map +1 -0
- package/dist/core/sandbox/skills/constants.d.ts +10 -0
- package/dist/core/sandbox/skills/constants.d.ts.map +1 -0
- package/dist/core/sandbox/skills/constants.js +56 -0
- package/dist/core/sandbox/skills/constants.js.map +1 -0
- package/dist/core/sandbox/skills/constants.mjs +28 -0
- package/dist/core/sandbox/skills/constants.mjs.map +1 -0
- package/dist/core/sandbox/skills/index.d.ts +5 -0
- package/dist/core/sandbox/skills/index.d.ts.map +1 -0
- package/dist/core/sandbox/skills/index.js +40 -0
- package/dist/core/sandbox/skills/index.js.map +1 -0
- package/dist/core/sandbox/skills/index.mjs +11 -0
- package/dist/core/sandbox/skills/index.mjs.map +1 -0
- package/dist/core/tracing/AgentTracing.d.ts +38 -0
- package/dist/core/tracing/AgentTracing.d.ts.map +1 -0
- package/dist/core/tracing/AgentTracing.js +19 -0
- package/dist/core/tracing/AgentTracing.js.map +1 -0
- package/dist/core/tracing/AgentTracing.mjs +1 -0
- package/dist/core/tracing/AgentTracing.mjs.map +1 -0
- package/dist/core/tracing/NoopAgentTracing.d.ts +3 -0
- package/dist/core/tracing/NoopAgentTracing.d.ts.map +1 -0
- package/dist/core/tracing/NoopAgentTracing.js +79 -0
- package/dist/core/tracing/NoopAgentTracing.js.map +1 -0
- package/dist/core/tracing/NoopAgentTracing.mjs +54 -0
- package/dist/core/tracing/NoopAgentTracing.mjs.map +1 -0
- package/dist/core/util/abort.d.ts +2 -0
- package/dist/core/util/abort.d.ts.map +1 -0
- package/dist/core/util/abort.js +38 -0
- package/dist/core/util/abort.js.map +1 -0
- package/dist/core/util/abort.mjs +13 -0
- package/dist/core/util/abort.mjs.map +1 -0
- package/dist/core/util/errorLogFields.d.ts +6 -0
- package/dist/core/util/errorLogFields.d.ts.map +1 -0
- package/dist/core/util/errorLogFields.js +36 -0
- package/dist/core/util/errorLogFields.js.map +1 -0
- package/dist/core/util/errorLogFields.mjs +11 -0
- package/dist/core/util/errorLogFields.mjs.map +1 -0
- package/dist/core/util/promiseUtils.d.ts +7 -0
- package/dist/core/util/promiseUtils.d.ts.map +1 -0
- package/dist/core/util/promiseUtils.js +82 -0
- package/dist/core/util/promiseUtils.js.map +1 -0
- package/dist/core/util/promiseUtils.mjs +55 -0
- package/dist/core/util/promiseUtils.mjs.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +8 -0
- package/dist/index.mjs.map +1 -0
- package/dist/package.json +3 -0
- package/dist/request-reply/client.d.ts +21 -0
- package/dist/request-reply/client.d.ts.map +1 -0
- package/dist/request-reply/client.js +92 -0
- package/dist/request-reply/client.js.map +1 -0
- package/dist/request-reply/client.mjs +67 -0
- package/dist/request-reply/client.mjs.map +1 -0
- package/dist/request-reply/errors.d.ts +23 -0
- package/dist/request-reply/errors.d.ts.map +1 -0
- package/dist/request-reply/errors.js +66 -0
- package/dist/request-reply/errors.js.map +1 -0
- package/dist/request-reply/errors.mjs +39 -0
- package/dist/request-reply/errors.mjs.map +1 -0
- package/dist/request-reply/executor.d.ts +70 -0
- package/dist/request-reply/executor.d.ts.map +1 -0
- package/dist/request-reply/executor.js +267 -0
- package/dist/request-reply/executor.js.map +1 -0
- package/dist/request-reply/executor.mjs +232 -0
- package/dist/request-reply/executor.mjs.map +1 -0
- package/dist/request-reply/index.d.ts +16 -0
- package/dist/request-reply/index.d.ts.map +1 -0
- package/dist/request-reply/index.js +47 -0
- package/dist/request-reply/index.js.map +1 -0
- package/dist/request-reply/index.mjs +16 -0
- package/dist/request-reply/index.mjs.map +1 -0
- package/dist/request-reply/router.d.ts +20 -0
- package/dist/request-reply/router.d.ts.map +1 -0
- package/dist/request-reply/router.js +55 -0
- package/dist/request-reply/router.js.map +1 -0
- package/dist/request-reply/router.mjs +30 -0
- package/dist/request-reply/router.mjs.map +1 -0
- package/dist/request-reply/types.d.ts +25 -0
- package/dist/request-reply/types.d.ts.map +1 -0
- package/dist/request-reply/types.js +54 -0
- package/dist/request-reply/types.js.map +1 -0
- package/dist/request-reply/types.mjs +28 -0
- package/dist/request-reply/types.mjs.map +1 -0
- package/dist/request-reply/utils.d.ts +9 -0
- package/dist/request-reply/utils.d.ts.map +1 -0
- package/dist/request-reply/utils.js +51 -0
- package/dist/request-reply/utils.js.map +1 -0
- package/dist/request-reply/utils.mjs +22 -0
- package/dist/request-reply/utils.mjs.map +1 -0
- package/package.json +127 -6
- package/README.md +0 -4
- package/index.js +0 -1
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
// src/core/capabilities/builtins/DynamicSubAgents.ts
|
|
2
|
+
import dedent from "dedent";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import "../../InstructionBuilder.mjs";
|
|
5
|
+
import { defineTool, LocalToolMCP } from "../../mcp/LocalToolMCP.mjs";
|
|
6
|
+
var SUB_AGENT_TOOL_NAME = "create_sub_agent";
|
|
7
|
+
var SUB_AGENTS_SERVER_ID = "sub_agents";
|
|
8
|
+
var SUB_AGENTS_REMINDER_TAG = "sub-agents";
|
|
9
|
+
var SUB_AGENT_IDENTITY = "You are the Agent operating as a sub-agent that has been delegated a specific task. The Agent has access to the same tools as the parent agent. The Agent must focus on completing the delegated task and return a concise result. The Agent cannot ask questions to the user.";
|
|
10
|
+
function createDynamicSubAgentLargeToolResponseGuidance() {
|
|
11
|
+
return dedent`
|
|
12
|
+
For large unstructured output like web search, documentation lookup, or broad search results,
|
|
13
|
+
the Agent should prefer delegating to a sub-agent and ask it to return only the relevant summary, with citations
|
|
14
|
+
when they improve verification.`;
|
|
15
|
+
}
|
|
16
|
+
function buildDynamicSubAgentsInstruction(builder, params) {
|
|
17
|
+
const sandboxGuidance = params.sandboxAvailable ? dedent`
|
|
18
|
+
When both sub-agents and sandbox are available, the Agent should always use sandbox code for mechanical data processing.
|
|
19
|
+
The Agent should use sub-agents for tasks that return large unstructured text (e.g. web search, documentation lookup) or
|
|
20
|
+
where multi-step reasoning is needed to process and summarize the results.` : "";
|
|
21
|
+
const paragraphs = [
|
|
22
|
+
dedent`The Agent can create sub-agents using the ${SUB_AGENT_TOOL_NAME} tool. Sub-agents are best for tasks that involve one or more tool calls that would fill up the context window or are blocked due to "Large Tool Response",
|
|
23
|
+
or tasks requiring exploration and reasoning that can be clearly delegated.`,
|
|
24
|
+
createDynamicSubAgentLargeToolResponseGuidance(),
|
|
25
|
+
...sandboxGuidance ? [sandboxGuidance] : [],
|
|
26
|
+
dedent`The Agent should ask the sub-agent to include references or citations when they would improve reliability or make
|
|
27
|
+
verification easier.`
|
|
28
|
+
];
|
|
29
|
+
builder.addSection(SUB_AGENTS_REMINDER_TAG, paragraphs.join("\n\n").trim());
|
|
30
|
+
}
|
|
31
|
+
var DynamicSubAgents = class extends LocalToolMCP {
|
|
32
|
+
name = SUB_AGENTS_SERVER_ID;
|
|
33
|
+
displayName = "DynamicSubAgents";
|
|
34
|
+
tracingEnabled = false;
|
|
35
|
+
tools;
|
|
36
|
+
getCreateSubAgentDescription(modelSetConfig) {
|
|
37
|
+
let modelSetGuidance = "";
|
|
38
|
+
const modelSetModels = modelSetConfig ? Object.keys(modelSetConfig) : [];
|
|
39
|
+
if (modelSetConfig && modelSetModels.length > 0) {
|
|
40
|
+
const modelList = Object.entries(modelSetConfig).map(([key, entry]) => `- [${key}]: ${entry.description}`).join("\n");
|
|
41
|
+
modelSetGuidance = dedent`
|
|
42
|
+
Pick a suitable model for the task being delegated from the following list of models and their descriptions:
|
|
43
|
+
${modelList}
|
|
44
|
+
`;
|
|
45
|
+
}
|
|
46
|
+
const paragraphs = [
|
|
47
|
+
`Delegate a well-defined task to a sub-agent. The Agent must not delegate the whole work to the sub-agent.`,
|
|
48
|
+
`The sub-agent has access to the same tools and the same sandbox environment as the parent Agent. Files created or modified by either agent are shared and remain available to both.`,
|
|
49
|
+
...modelSetGuidance ? [modelSetGuidance] : [],
|
|
50
|
+
`The sub-agent has NO access to the prior conversation or the user's original message. The Agent must provide a clear, self-contained instruction that includes all necessary context, the exact task to perform, any constraints, what outputs are expected, and what work has already been completed so effort is not duplicated.`
|
|
51
|
+
];
|
|
52
|
+
return paragraphs.join("\n\n").trim();
|
|
53
|
+
}
|
|
54
|
+
getCreateSubAgentTool(modelSetConfig) {
|
|
55
|
+
const modelKeys = Object.keys(modelSetConfig ?? {});
|
|
56
|
+
if (modelKeys.length > 0) {
|
|
57
|
+
return defineTool({
|
|
58
|
+
name: SUB_AGENT_TOOL_NAME,
|
|
59
|
+
description: this.getCreateSubAgentDescription(modelSetConfig),
|
|
60
|
+
schema: z.object({
|
|
61
|
+
name: z.string().min(1),
|
|
62
|
+
input: z.string().min(1),
|
|
63
|
+
model: z.enum(modelKeys)
|
|
64
|
+
}),
|
|
65
|
+
handler: (input) => Promise.resolve({
|
|
66
|
+
createSubAgent: {
|
|
67
|
+
type: "dynamic",
|
|
68
|
+
name: input.name,
|
|
69
|
+
input: input.input,
|
|
70
|
+
model: input.model
|
|
71
|
+
}
|
|
72
|
+
})
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return defineTool({
|
|
76
|
+
name: SUB_AGENT_TOOL_NAME,
|
|
77
|
+
description: this.getCreateSubAgentDescription(modelSetConfig),
|
|
78
|
+
schema: z.object({
|
|
79
|
+
name: z.string().min(1),
|
|
80
|
+
input: z.string().min(1)
|
|
81
|
+
}),
|
|
82
|
+
handler: (input) => Promise.resolve({
|
|
83
|
+
createSubAgent: {
|
|
84
|
+
type: "dynamic",
|
|
85
|
+
name: input.name,
|
|
86
|
+
input: input.input
|
|
87
|
+
}
|
|
88
|
+
})
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
constructor({ modelSetConfig, tracing }) {
|
|
92
|
+
super({ tracing });
|
|
93
|
+
this.tools = [this.getCreateSubAgentTool(modelSetConfig)];
|
|
94
|
+
}
|
|
95
|
+
getTools() {
|
|
96
|
+
return this.tools;
|
|
97
|
+
}
|
|
98
|
+
toolCallInfo(params, _resolveUnderlyingTool) {
|
|
99
|
+
void _resolveUnderlyingTool;
|
|
100
|
+
return Promise.resolve({
|
|
101
|
+
type: "truefoundry-system",
|
|
102
|
+
mcp_server_id: this.mcpServerId,
|
|
103
|
+
mcp_server_name: this.name,
|
|
104
|
+
original_tool_name: params.name,
|
|
105
|
+
is_approval_required: false,
|
|
106
|
+
is_thread_creation: true
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
function dynamicSubAgents(options) {
|
|
111
|
+
const toolSet = new DynamicSubAgents({
|
|
112
|
+
modelSetConfig: options.modelSetConfig,
|
|
113
|
+
tracing: options.tracing
|
|
114
|
+
});
|
|
115
|
+
return {
|
|
116
|
+
systemToolSets: [toolSet],
|
|
117
|
+
instructionBuilders: [
|
|
118
|
+
(builder) => {
|
|
119
|
+
buildDynamicSubAgentsInstruction(builder, { sandboxAvailable: options.sandboxAvailable });
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
export {
|
|
125
|
+
DynamicSubAgents,
|
|
126
|
+
SUB_AGENTS_REMINDER_TAG,
|
|
127
|
+
SUB_AGENTS_SERVER_ID,
|
|
128
|
+
SUB_AGENT_IDENTITY,
|
|
129
|
+
SUB_AGENT_TOOL_NAME,
|
|
130
|
+
buildDynamicSubAgentsInstruction,
|
|
131
|
+
createDynamicSubAgentLargeToolResponseGuidance,
|
|
132
|
+
dynamicSubAgents
|
|
133
|
+
};
|
|
134
|
+
//# sourceMappingURL=DynamicSubAgents.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/capabilities/builtins/DynamicSubAgents.ts"],"sourcesContent":["import type { CallToolRequest } from '@modelcontextprotocol/sdk/types.js';\nimport dedent from 'dedent';\nimport { z } from 'zod';\nimport { InstructionBuilder } from '../../InstructionBuilder';\nimport type { InternalToolCallInfo } from '../../llm/LLMTypes';\nimport { defineTool, LocalToolMCP, type ToolDefinition } from '../../mcp/LocalToolMCP';\nimport type { AgentTracing } from '../../tracing/AgentTracing';\nimport type { AgentCapability } from '../AgentCapability';\n\nexport const SUB_AGENT_TOOL_NAME = 'create_sub_agent';\nexport const SUB_AGENTS_SERVER_ID = 'sub_agents';\nexport const SUB_AGENTS_REMINDER_TAG = 'sub-agents';\n\nexport const SUB_AGENT_IDENTITY =\n 'You are the Agent operating as a sub-agent that has been delegated a specific task. The Agent has access to the same tools as the parent agent. The Agent must focus on completing the delegated task and return a concise result. The Agent cannot ask questions to the user.';\n\nexport interface ModelSetEntry {\n description: string;\n model_params?: Record<string, unknown> | undefined;\n}\n\nexport type ModelSetConfig = Record<string, ModelSetEntry>;\n\nexport function createDynamicSubAgentLargeToolResponseGuidance(): string {\n return dedent`\n For large unstructured output like web search, documentation lookup, or broad search results,\n the Agent should prefer delegating to a sub-agent and ask it to return only the relevant summary, with citations\n when they improve verification.`;\n}\n\nexport function buildDynamicSubAgentsInstruction(\n builder: InstructionBuilder,\n params: { sandboxAvailable: boolean },\n): void {\n const sandboxGuidance = params.sandboxAvailable\n ? dedent`\n When both sub-agents and sandbox are available, the Agent should always use sandbox code for mechanical data processing.\n The Agent should use sub-agents for tasks that return large unstructured text (e.g. web search, documentation lookup) or\n where multi-step reasoning is needed to process and summarize the results.`\n : '';\n\n const paragraphs = [\n dedent`The Agent can create sub-agents using the ${SUB_AGENT_TOOL_NAME} tool. Sub-agents are best for tasks that involve one or more tool calls that would fill up the context window or are blocked due to \"Large Tool Response\",\n or tasks requiring exploration and reasoning that can be clearly delegated.`,\n createDynamicSubAgentLargeToolResponseGuidance(),\n ...(sandboxGuidance ? [sandboxGuidance] : []),\n dedent`The Agent should ask the sub-agent to include references or citations when they would improve reliability or make\n verification easier.`,\n ];\n\n builder.addSection(SUB_AGENTS_REMINDER_TAG, paragraphs.join('\\n\\n').trim());\n}\n\nexport class DynamicSubAgents extends LocalToolMCP {\n readonly name = SUB_AGENTS_SERVER_ID;\n readonly displayName = 'DynamicSubAgents';\n override readonly tracingEnabled = false;\n private tools: ToolDefinition[];\n\n private getCreateSubAgentDescription(modelSetConfig?: ModelSetConfig): string {\n let modelSetGuidance = '';\n const modelSetModels = modelSetConfig ? Object.keys(modelSetConfig) : [];\n if (modelSetConfig && modelSetModels.length > 0) {\n const modelList = Object.entries(modelSetConfig)\n .map(([key, entry]) => `- [${key}]: ${entry.description}`)\n .join('\\n');\n modelSetGuidance = dedent`\n Pick a suitable model for the task being delegated from the following list of models and their descriptions:\n ${modelList}\n `;\n }\n\n const paragraphs = [\n `Delegate a well-defined task to a sub-agent. The Agent must not delegate the whole work to the sub-agent.`,\n `The sub-agent has access to the same tools and the same sandbox environment as the parent Agent. Files created or modified by either agent are shared and remain available to both.`,\n ...(modelSetGuidance ? [modelSetGuidance] : []),\n `The sub-agent has NO access to the prior conversation or the user's original message. The Agent must provide a clear, self-contained instruction that includes all necessary context, the exact task to perform, any constraints, what outputs are expected, and what work has already been completed so effort is not duplicated.`,\n ];\n\n return paragraphs.join('\\n\\n').trim();\n }\n\n private getCreateSubAgentTool(modelSetConfig?: ModelSetConfig): ToolDefinition {\n const modelKeys = Object.keys(modelSetConfig ?? {});\n if (modelKeys.length > 0) {\n return defineTool({\n name: SUB_AGENT_TOOL_NAME,\n description: this.getCreateSubAgentDescription(modelSetConfig),\n schema: z.object({\n name: z.string().min(1),\n input: z.string().min(1),\n model: z.enum(modelKeys as [string, ...string[]]),\n }),\n handler: input =>\n Promise.resolve({\n createSubAgent: {\n type: 'dynamic',\n name: input.name,\n input: input.input,\n model: input.model,\n },\n }),\n });\n }\n return defineTool({\n name: SUB_AGENT_TOOL_NAME,\n description: this.getCreateSubAgentDescription(modelSetConfig),\n schema: z.object({\n name: z.string().min(1),\n input: z.string().min(1),\n }),\n handler: input =>\n Promise.resolve({\n createSubAgent: {\n type: 'dynamic',\n name: input.name,\n input: input.input,\n },\n }),\n });\n }\n\n constructor({ modelSetConfig, tracing }: { modelSetConfig?: ModelSetConfig | undefined; tracing: AgentTracing }) {\n super({ tracing });\n this.tools = [this.getCreateSubAgentTool(modelSetConfig)];\n }\n\n protected getTools(): ToolDefinition[] {\n return this.tools;\n }\n\n override toolCallInfo(\n params: CallToolRequest['params'],\n _resolveUnderlyingTool?: boolean,\n ): Promise<InternalToolCallInfo> {\n void _resolveUnderlyingTool;\n return Promise.resolve({\n type: 'truefoundry-system',\n mcp_server_id: this.mcpServerId,\n mcp_server_name: this.name,\n original_tool_name: params.name,\n is_approval_required: false,\n is_thread_creation: true,\n });\n }\n}\n\nexport function dynamicSubAgents(options: {\n modelSetConfig?: ModelSetConfig | undefined;\n sandboxAvailable: boolean;\n tracing: AgentTracing;\n}): AgentCapability {\n const toolSet = new DynamicSubAgents({\n modelSetConfig: options.modelSetConfig,\n tracing: options.tracing,\n });\n return {\n systemToolSets: [toolSet],\n instructionBuilders: [\n builder => {\n buildDynamicSubAgentsInstruction(builder, { sandboxAvailable: options.sandboxAvailable });\n },\n ],\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Logger } from 'winston';
|
|
2
|
+
import type { ToolCallResult } from '../../mcp/executeToolCalls';
|
|
3
|
+
import type { AgentCapability } from '../AgentCapability';
|
|
4
|
+
import type { AgentThreadExecutionContext } from '../AgentContextProcessor';
|
|
5
|
+
import type { ToolResponseProcessor, ToolResponseProcessorResult } from '../ToolResponseProcessor';
|
|
6
|
+
export declare const DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD = 6000;
|
|
7
|
+
export declare const DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD = 10000;
|
|
8
|
+
export declare const DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS = 100;
|
|
9
|
+
export declare class LargeToolResponseProcessor implements ToolResponseProcessor {
|
|
10
|
+
private dynamicSubAgentsPresent;
|
|
11
|
+
private individualTokenThreshold;
|
|
12
|
+
private totalTokenThreshold;
|
|
13
|
+
private previewNumberOfCharacters;
|
|
14
|
+
private readonly logger;
|
|
15
|
+
constructor(param: {
|
|
16
|
+
dynamicSubAgentsPresent: boolean;
|
|
17
|
+
individualTokenThreshold: number;
|
|
18
|
+
totalTokenThreshold: number;
|
|
19
|
+
previewNumberOfCharacters: number;
|
|
20
|
+
logger: Logger;
|
|
21
|
+
});
|
|
22
|
+
private createLargeToolResponseGuidance;
|
|
23
|
+
private createFileDumpMessage;
|
|
24
|
+
private buildResultsWithInfo;
|
|
25
|
+
private blockResult;
|
|
26
|
+
private uploadToSandboxAndPrependFilePath;
|
|
27
|
+
private executeSandboxDumps;
|
|
28
|
+
process(results: ToolCallResult[], execution: Readonly<AgentThreadExecutionContext>): Promise<ToolResponseProcessorResult>;
|
|
29
|
+
}
|
|
30
|
+
export interface LargeToolResponseSettings {
|
|
31
|
+
individualTokenThreshold?: number | undefined;
|
|
32
|
+
totalTokenThreshold?: number | undefined;
|
|
33
|
+
previewNumberOfCharacters?: number | undefined;
|
|
34
|
+
}
|
|
35
|
+
export declare function largeToolResponse(options: {
|
|
36
|
+
dynamicSubAgentsPresent: boolean;
|
|
37
|
+
settings?: LargeToolResponseSettings | undefined;
|
|
38
|
+
logger: Logger;
|
|
39
|
+
}): AgentCapability;
|
|
40
|
+
//# sourceMappingURL=LargeToolResponse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LargeToolResponse.d.ts","sourceRoot":"","sources":["../../../../src/core/capabilities/builtins/LargeToolResponse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAIjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAGnG,eAAO,MAAM,uCAAuC,OAAO,CAAC;AAC5D,eAAO,MAAM,kCAAkC,QAAQ,CAAC;AACxD,eAAO,MAAM,oCAAoC,MAAM,CAAC;AA4BxD,qBAAa,0BAA2B,YAAW,qBAAqB;IACtE,OAAO,CAAC,uBAAuB,CAAU;IACzC,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,yBAAyB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,YAAY,KAAK,EAAE;QACjB,uBAAuB,EAAE,OAAO,CAAC;QACjC,wBAAwB,EAAE,MAAM,CAAC;QACjC,mBAAmB,EAAE,MAAM,CAAC;QAC5B,yBAAyB,EAAE,MAAM,CAAC;QAClC,MAAM,EAAE,MAAM,CAAC;KAChB,EAWA;IAED,OAAO,CAAC,+BAA+B;IAgBvC,OAAO,CAAC,qBAAqB;IAoB7B,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,WAAW;YA4BL,iCAAiC;YA2BjC,mBAAmB;IAO3B,OAAO,CACX,OAAO,EAAE,cAAc,EAAE,EACzB,SAAS,EAAE,QAAQ,CAAC,2BAA2B,CAAC,GAC/C,OAAO,CAAC,2BAA2B,CAAC,CA8BtC;CACF;AAED,MAAM,WAAW,yBAAyB;IACxC,wBAAwB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,yBAAyB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,uBAAuB,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,EAAE,yBAAyB,GAAG,SAAS,CAAC;IACjD,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,eAAe,CAYlB"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/core/capabilities/builtins/LargeToolResponse.ts
|
|
31
|
+
var LargeToolResponse_exports = {};
|
|
32
|
+
__export(LargeToolResponse_exports, {
|
|
33
|
+
DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD: () => DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD,
|
|
34
|
+
DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS: () => DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS,
|
|
35
|
+
DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD: () => DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD,
|
|
36
|
+
LargeToolResponseProcessor: () => LargeToolResponseProcessor,
|
|
37
|
+
largeToolResponse: () => largeToolResponse
|
|
38
|
+
});
|
|
39
|
+
module.exports = __toCommonJS(LargeToolResponse_exports);
|
|
40
|
+
var import_dedent = __toESM(require("dedent"), 1);
|
|
41
|
+
var import_usage = require("../../llm/usage.js");
|
|
42
|
+
var import_Sandbox = require("../../sandbox/Sandbox.js");
|
|
43
|
+
var import_errorLogFields = require("../../util/errorLogFields.js");
|
|
44
|
+
var import_DynamicSubAgents = require("./DynamicSubAgents.js");
|
|
45
|
+
var DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD = 6e3;
|
|
46
|
+
var DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD = 1e4;
|
|
47
|
+
var DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS = 100;
|
|
48
|
+
var FAILURE_MESSAGE_TRUNCATION_LENGTH = 500;
|
|
49
|
+
function categorize(result, sandbox) {
|
|
50
|
+
if (result.failure) return "failure";
|
|
51
|
+
if (!result.info) {
|
|
52
|
+
throw new Error(`Unreachable`);
|
|
53
|
+
}
|
|
54
|
+
if (sandbox && result.info.toolSet === sandbox) return "sandbox";
|
|
55
|
+
return "mcp";
|
|
56
|
+
}
|
|
57
|
+
function createContentPreview(content, previewChars) {
|
|
58
|
+
if (content.length <= previewChars * 2) {
|
|
59
|
+
return content;
|
|
60
|
+
}
|
|
61
|
+
return `${content.slice(0, previewChars)}
|
|
62
|
+
...
|
|
63
|
+
${content.slice(-previewChars)}`;
|
|
64
|
+
}
|
|
65
|
+
var LargeToolResponseProcessor = class {
|
|
66
|
+
dynamicSubAgentsPresent;
|
|
67
|
+
individualTokenThreshold;
|
|
68
|
+
totalTokenThreshold;
|
|
69
|
+
previewNumberOfCharacters;
|
|
70
|
+
logger;
|
|
71
|
+
constructor(param) {
|
|
72
|
+
if (param.individualTokenThreshold > param.totalTokenThreshold) {
|
|
73
|
+
throw new Error(
|
|
74
|
+
`individualTokenThreshold (${String(param.individualTokenThreshold)}) must be <= totalTokenThreshold (${String(param.totalTokenThreshold)})`
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
this.dynamicSubAgentsPresent = param.dynamicSubAgentsPresent;
|
|
78
|
+
this.individualTokenThreshold = param.individualTokenThreshold;
|
|
79
|
+
this.totalTokenThreshold = param.totalTokenThreshold;
|
|
80
|
+
this.previewNumberOfCharacters = param.previewNumberOfCharacters;
|
|
81
|
+
this.logger = param.logger.child({ module: "LargeToolResponse" });
|
|
82
|
+
}
|
|
83
|
+
createLargeToolResponseGuidance(sandbox) {
|
|
84
|
+
const steps = ["Check if some parameter can be passed in order to reduce the output size."];
|
|
85
|
+
if (sandbox) {
|
|
86
|
+
steps.push((0, import_Sandbox.createSandboxLargeToolResponseGuidance)());
|
|
87
|
+
}
|
|
88
|
+
if (this.dynamicSubAgentsPresent) {
|
|
89
|
+
steps.push((0, import_DynamicSubAgents.createDynamicSubAgentLargeToolResponseGuidance)());
|
|
90
|
+
}
|
|
91
|
+
return `Content too big. To handle a large tool call the Agent can do the following:
|
|
92
|
+
${steps.map((step, index) => `${String(index + 1)}. ${step}`).join("\n")}`;
|
|
93
|
+
}
|
|
94
|
+
createFileDumpMessage(params) {
|
|
95
|
+
const { filePath, preview } = params;
|
|
96
|
+
const steps = [
|
|
97
|
+
import_dedent.default`Use sandbox to read parts of the file or extract data.
|
|
98
|
+
Use ${import_Sandbox.SANDBOX_SCHEMA_INFER_TAG} to undertand the schema.`
|
|
99
|
+
];
|
|
100
|
+
if (this.dynamicSubAgentsPresent) {
|
|
101
|
+
steps.push(
|
|
102
|
+
`${(0, import_DynamicSubAgents.createDynamicSubAgentLargeToolResponseGuidance)()} The Agent must pass file path to sub-agent also.`
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
const guidance = `The Agent can do the following to handle it:
|
|
106
|
+
${steps.map((step, index) => `${String(index + 1)}. ${step}`).join("\n")}`;
|
|
107
|
+
return `Content too large. Result saved to: ${filePath}.
|
|
108
|
+
|
|
109
|
+
${guidance}
|
|
110
|
+
|
|
111
|
+
Preview (first and last ${String(this.previewNumberOfCharacters)} chars):
|
|
112
|
+
${preview}`;
|
|
113
|
+
}
|
|
114
|
+
buildResultsWithInfo(results, sandbox) {
|
|
115
|
+
return results.map((toolCallResult) => ({
|
|
116
|
+
toolCallResult,
|
|
117
|
+
originalContent: toolCallResult.message.content,
|
|
118
|
+
originalTokens: (0, import_usage.estimateTokensForString)(toolCallResult.message.content),
|
|
119
|
+
category: categorize(toolCallResult, sandbox)
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
blockResult(entry, pendingSandboxDumps, sandbox) {
|
|
123
|
+
const preview = createContentPreview(entry.originalContent, this.previewNumberOfCharacters);
|
|
124
|
+
let newContent;
|
|
125
|
+
switch (entry.category) {
|
|
126
|
+
case "failure":
|
|
127
|
+
newContent = entry.originalContent.slice(0, FAILURE_MESSAGE_TRUNCATION_LENGTH);
|
|
128
|
+
break;
|
|
129
|
+
case "sandbox":
|
|
130
|
+
newContent = `Content too big. The Agent should write to a file if required and use grep and sed.
|
|
131
|
+
|
|
132
|
+
Preview:
|
|
133
|
+
${preview}`;
|
|
134
|
+
break;
|
|
135
|
+
case "mcp":
|
|
136
|
+
newContent = `${this.createLargeToolResponseGuidance(sandbox)}
|
|
137
|
+
|
|
138
|
+
Preview (first and last ${String(this.previewNumberOfCharacters)} chars):
|
|
139
|
+
${preview}`;
|
|
140
|
+
if (sandbox) {
|
|
141
|
+
pendingSandboxDumps.push(entry);
|
|
142
|
+
}
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
entry.toolCallResult.message.content = newContent;
|
|
146
|
+
entry.toolCallResult.isStructuredContent = false;
|
|
147
|
+
return Math.max(0, entry.originalTokens - (0, import_usage.estimateTokensForString)(newContent));
|
|
148
|
+
}
|
|
149
|
+
async uploadToSandboxAndPrependFilePath(entry, index, sandbox) {
|
|
150
|
+
if (!entry.toolCallResult.info) {
|
|
151
|
+
throw new Error(`Unreachable`);
|
|
152
|
+
}
|
|
153
|
+
const sanitizedName = entry.toolCallResult.info.originalToolName.replace(/[^a-zA-Z0-9_-]/g, "_").slice(0, 40);
|
|
154
|
+
const epoch = Date.now();
|
|
155
|
+
const fileName = `${sanitizedName}_${String(index)}_${String(epoch)}.txt`;
|
|
156
|
+
try {
|
|
157
|
+
const stored = await sandbox.writeArtifact({
|
|
158
|
+
fileName,
|
|
159
|
+
content: Buffer.from(entry.originalContent),
|
|
160
|
+
sourceTool: entry.toolCallResult.info
|
|
161
|
+
});
|
|
162
|
+
const preview = createContentPreview(entry.originalContent, this.previewNumberOfCharacters);
|
|
163
|
+
entry.toolCallResult.message.content = this.createFileDumpMessage({ filePath: stored.filePath, preview });
|
|
164
|
+
entry.toolCallResult.isStructuredContent = false;
|
|
165
|
+
return stored.sandboxCreated;
|
|
166
|
+
} catch (error) {
|
|
167
|
+
this.logger.error("Failed to upload to sandbox", (0, import_errorLogFields.extractErrorLogFields)(error));
|
|
168
|
+
return void 0;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
async executeSandboxDumps(entries, sandbox) {
|
|
172
|
+
const results = await Promise.all(
|
|
173
|
+
entries.map((entry, index) => this.uploadToSandboxAndPrependFilePath(entry, index, sandbox))
|
|
174
|
+
);
|
|
175
|
+
return results.find((r) => r !== void 0);
|
|
176
|
+
}
|
|
177
|
+
async process(results, execution) {
|
|
178
|
+
const sandbox = execution.sandbox;
|
|
179
|
+
const resultsWithInfo = this.buildResultsWithInfo(results, sandbox);
|
|
180
|
+
let runningTotal = resultsWithInfo.reduce((sum, e) => sum + e.originalTokens, 0);
|
|
181
|
+
if (runningTotal < this.individualTokenThreshold) {
|
|
182
|
+
return {};
|
|
183
|
+
}
|
|
184
|
+
const pendingSandboxDumps = [];
|
|
185
|
+
const unblocked = [];
|
|
186
|
+
for (const entry of resultsWithInfo) {
|
|
187
|
+
if (entry.originalTokens >= this.individualTokenThreshold) {
|
|
188
|
+
runningTotal -= this.blockResult(entry, pendingSandboxDumps, sandbox);
|
|
189
|
+
} else {
|
|
190
|
+
unblocked.push(entry);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
const sortedUnblocked = [...unblocked].sort((a, b) => b.originalTokens - a.originalTokens);
|
|
194
|
+
for (const entry of sortedUnblocked) {
|
|
195
|
+
if (runningTotal < this.totalTokenThreshold) {
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
runningTotal -= this.blockResult(entry, pendingSandboxDumps, sandbox);
|
|
199
|
+
}
|
|
200
|
+
const sandboxCreated = sandbox ? await this.executeSandboxDumps(pendingSandboxDumps, sandbox) : void 0;
|
|
201
|
+
return sandboxCreated !== void 0 ? { sandboxCreated } : {};
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
function largeToolResponse(options) {
|
|
205
|
+
return {
|
|
206
|
+
toolResponseProcessors: [
|
|
207
|
+
new LargeToolResponseProcessor({
|
|
208
|
+
dynamicSubAgentsPresent: options.dynamicSubAgentsPresent,
|
|
209
|
+
individualTokenThreshold: options.settings?.individualTokenThreshold ?? DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD,
|
|
210
|
+
totalTokenThreshold: options.settings?.totalTokenThreshold ?? DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD,
|
|
211
|
+
previewNumberOfCharacters: options.settings?.previewNumberOfCharacters ?? DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS,
|
|
212
|
+
logger: options.logger
|
|
213
|
+
})
|
|
214
|
+
]
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
218
|
+
0 && (module.exports = {
|
|
219
|
+
DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD,
|
|
220
|
+
DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS,
|
|
221
|
+
DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD,
|
|
222
|
+
LargeToolResponseProcessor,
|
|
223
|
+
largeToolResponse
|
|
224
|
+
});
|
|
225
|
+
//# sourceMappingURL=LargeToolResponse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/capabilities/builtins/LargeToolResponse.ts"],"sourcesContent":["import dedent from 'dedent';\nimport type { Logger } from 'winston';\nimport { estimateTokensForString } from '../../llm/usage';\nimport type { ToolCallResult } from '../../mcp/executeToolCalls';\nimport type { Sandbox, SandboxInfo } from '../../sandbox/Sandbox';\nimport { createSandboxLargeToolResponseGuidance, SANDBOX_SCHEMA_INFER_TAG } from '../../sandbox/Sandbox';\nimport { extractErrorLogFields } from '../../util/errorLogFields';\nimport type { AgentCapability } from '../AgentCapability';\nimport type { AgentThreadExecutionContext } from '../AgentContextProcessor';\nimport type { ToolResponseProcessor, ToolResponseProcessorResult } from '../ToolResponseProcessor';\nimport { createDynamicSubAgentLargeToolResponseGuidance } from './DynamicSubAgents';\n\nexport const DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD = 6000;\nexport const DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD = 10000;\nexport const DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS = 100;\nconst FAILURE_MESSAGE_TRUNCATION_LENGTH = 500;\n\ntype ResultCategory = 'failure' | 'sandbox' | 'mcp';\n\ninterface ToolResultWithInfo {\n toolCallResult: ToolCallResult;\n originalContent: string;\n originalTokens: number;\n category: ResultCategory;\n}\n\nfunction categorize(result: ToolCallResult, sandbox: Sandbox | undefined): ResultCategory {\n if (result.failure) return 'failure';\n if (!result.info) {\n throw new Error(`Unreachable`);\n }\n if (sandbox && result.info.toolSet === sandbox) return 'sandbox';\n return 'mcp';\n}\n\nfunction createContentPreview(content: string, previewChars: number): string {\n if (content.length <= previewChars * 2) {\n return content;\n }\n return `${content.slice(0, previewChars)}\\n...\\n${content.slice(-previewChars)}`;\n}\n\nexport class LargeToolResponseProcessor implements ToolResponseProcessor {\n private dynamicSubAgentsPresent: boolean;\n private individualTokenThreshold: number;\n private totalTokenThreshold: number;\n private previewNumberOfCharacters: number;\n private readonly logger: Logger;\n\n constructor(param: {\n dynamicSubAgentsPresent: boolean;\n individualTokenThreshold: number;\n totalTokenThreshold: number;\n previewNumberOfCharacters: number;\n logger: Logger;\n }) {\n if (param.individualTokenThreshold > param.totalTokenThreshold) {\n throw new Error(\n `individualTokenThreshold (${String(param.individualTokenThreshold)}) must be <= totalTokenThreshold (${String(param.totalTokenThreshold)})`,\n );\n }\n this.dynamicSubAgentsPresent = param.dynamicSubAgentsPresent;\n this.individualTokenThreshold = param.individualTokenThreshold;\n this.totalTokenThreshold = param.totalTokenThreshold;\n this.previewNumberOfCharacters = param.previewNumberOfCharacters;\n this.logger = param.logger.child({ module: 'LargeToolResponse' });\n }\n\n private createLargeToolResponseGuidance(sandbox: Sandbox | undefined): string {\n const steps = ['Check if some parameter can be passed in order to reduce the output size.'];\n\n if (sandbox) {\n steps.push(createSandboxLargeToolResponseGuidance());\n }\n\n if (this.dynamicSubAgentsPresent) {\n steps.push(createDynamicSubAgentLargeToolResponseGuidance());\n }\n\n return `Content too big. To handle a large tool call the Agent can do the following:\\n${steps\n .map((step, index) => `${String(index + 1)}. ${step}`)\n .join('\\n')}`;\n }\n\n private createFileDumpMessage(params: { filePath: string; preview: string }): string {\n const { filePath, preview } = params;\n const steps: string[] = [\n dedent`Use sandbox to read parts of the file or extract data.\n Use ${SANDBOX_SCHEMA_INFER_TAG} to undertand the schema.`,\n ];\n\n if (this.dynamicSubAgentsPresent) {\n steps.push(\n `${createDynamicSubAgentLargeToolResponseGuidance()} The Agent must pass file path to sub-agent also.`,\n );\n }\n\n const guidance = `The Agent can do the following to handle it:\\n${steps\n .map((step, index) => `${String(index + 1)}. ${step}`)\n .join('\\n')}`;\n\n return `Content too large. Result saved to: ${filePath}.\\n\\n${guidance}\\n\\nPreview (first and last ${String(this.previewNumberOfCharacters)} chars):\\n${preview}`;\n }\n\n private buildResultsWithInfo(results: ToolCallResult[], sandbox: Sandbox | undefined): ToolResultWithInfo[] {\n return results.map(toolCallResult => ({\n toolCallResult,\n originalContent: toolCallResult.message.content,\n originalTokens: estimateTokensForString(toolCallResult.message.content),\n category: categorize(toolCallResult, sandbox),\n }));\n }\n\n private blockResult(\n entry: ToolResultWithInfo,\n pendingSandboxDumps: ToolResultWithInfo[],\n sandbox: Sandbox | undefined,\n ): number {\n const preview = createContentPreview(entry.originalContent, this.previewNumberOfCharacters);\n\n let newContent: string;\n switch (entry.category) {\n case 'failure':\n newContent = entry.originalContent.slice(0, FAILURE_MESSAGE_TRUNCATION_LENGTH);\n break;\n case 'sandbox':\n newContent = `Content too big. The Agent should write to a file if required and use grep and sed.\\n\\nPreview:\\n${preview}`;\n break;\n case 'mcp':\n newContent = `${this.createLargeToolResponseGuidance(sandbox)}\\n\\nPreview (first and last ${String(this.previewNumberOfCharacters)} chars):\\n${preview}`;\n if (sandbox) {\n pendingSandboxDumps.push(entry);\n }\n break;\n }\n\n entry.toolCallResult.message.content = newContent;\n entry.toolCallResult.isStructuredContent = false;\n return Math.max(0, entry.originalTokens - estimateTokensForString(newContent));\n }\n\n private async uploadToSandboxAndPrependFilePath(\n entry: ToolResultWithInfo,\n index: number,\n sandbox: Sandbox,\n ): Promise<SandboxInfo | undefined> {\n if (!entry.toolCallResult.info) {\n throw new Error(`Unreachable`);\n }\n const sanitizedName = entry.toolCallResult.info.originalToolName.replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 40);\n const epoch = Date.now();\n const fileName = `${sanitizedName}_${String(index)}_${String(epoch)}.txt`;\n try {\n const stored = await sandbox.writeArtifact({\n fileName,\n content: Buffer.from(entry.originalContent),\n sourceTool: entry.toolCallResult.info,\n });\n const preview = createContentPreview(entry.originalContent, this.previewNumberOfCharacters);\n entry.toolCallResult.message.content = this.createFileDumpMessage({ filePath: stored.filePath, preview });\n entry.toolCallResult.isStructuredContent = false;\n return stored.sandboxCreated;\n } catch (error) {\n this.logger.error('Failed to upload to sandbox', extractErrorLogFields(error));\n return undefined;\n }\n }\n\n private async executeSandboxDumps(entries: ToolResultWithInfo[], sandbox: Sandbox): Promise<SandboxInfo | undefined> {\n const results = await Promise.all(\n entries.map((entry, index) => this.uploadToSandboxAndPrependFilePath(entry, index, sandbox)),\n );\n return results.find(r => r !== undefined);\n }\n\n async process(\n results: ToolCallResult[],\n execution: Readonly<AgentThreadExecutionContext>,\n ): Promise<ToolResponseProcessorResult> {\n const sandbox = execution.sandbox;\n const resultsWithInfo = this.buildResultsWithInfo(results, sandbox);\n let runningTotal = resultsWithInfo.reduce((sum, e) => sum + e.originalTokens, 0);\n\n if (runningTotal < this.individualTokenThreshold) {\n return {};\n }\n\n const pendingSandboxDumps: ToolResultWithInfo[] = [];\n\n const unblocked: ToolResultWithInfo[] = [];\n for (const entry of resultsWithInfo) {\n if (entry.originalTokens >= this.individualTokenThreshold) {\n runningTotal -= this.blockResult(entry, pendingSandboxDumps, sandbox);\n } else {\n unblocked.push(entry);\n }\n }\n\n const sortedUnblocked = [...unblocked].sort((a, b) => b.originalTokens - a.originalTokens);\n for (const entry of sortedUnblocked) {\n if (runningTotal < this.totalTokenThreshold) {\n break;\n }\n runningTotal -= this.blockResult(entry, pendingSandboxDumps, sandbox);\n }\n\n const sandboxCreated = sandbox ? await this.executeSandboxDumps(pendingSandboxDumps, sandbox) : undefined;\n return sandboxCreated !== undefined ? { sandboxCreated } : {};\n }\n}\n\nexport interface LargeToolResponseSettings {\n individualTokenThreshold?: number | undefined;\n totalTokenThreshold?: number | undefined;\n previewNumberOfCharacters?: number | undefined;\n}\n\nexport function largeToolResponse(options: {\n dynamicSubAgentsPresent: boolean;\n settings?: LargeToolResponseSettings | undefined;\n logger: Logger;\n}): AgentCapability {\n return {\n toolResponseProcessors: [\n new LargeToolResponseProcessor({\n dynamicSubAgentsPresent: options.dynamicSubAgentsPresent,\n individualTokenThreshold: options.settings?.individualTokenThreshold ?? DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD,\n totalTokenThreshold: options.settings?.totalTokenThreshold ?? DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD,\n previewNumberOfCharacters: options.settings?.previewNumberOfCharacters ?? DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS,\n logger: options.logger,\n }),\n ],\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAmB;AAEnB,mBAAwC;AAGxC,qBAAiF;AACjF,4BAAsC;AAItC,8BAA+D;AAExD,IAAM,0CAA0C;AAChD,IAAM,qCAAqC;AAC3C,IAAM,uCAAuC;AACpD,IAAM,oCAAoC;AAW1C,SAAS,WAAW,QAAwB,SAA8C;AACxF,MAAI,OAAO,QAAS,QAAO;AAC3B,MAAI,CAAC,OAAO,MAAM;AAChB,UAAM,IAAI,MAAM,aAAa;AAAA,EAC/B;AACA,MAAI,WAAW,OAAO,KAAK,YAAY,QAAS,QAAO;AACvD,SAAO;AACT;AAEA,SAAS,qBAAqB,SAAiB,cAA8B;AAC3E,MAAI,QAAQ,UAAU,eAAe,GAAG;AACtC,WAAO;AAAA,EACT;AACA,SAAO,GAAG,QAAQ,MAAM,GAAG,YAAY,CAAC;AAAA;AAAA,EAAU,QAAQ,MAAM,CAAC,YAAY,CAAC;AAChF;AAEO,IAAM,6BAAN,MAAkE;AAAA,EAC/D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACS;AAAA,EAEjB,YAAY,OAMT;AACD,QAAI,MAAM,2BAA2B,MAAM,qBAAqB;AAC9D,YAAM,IAAI;AAAA,QACR,6BAA6B,OAAO,MAAM,wBAAwB,CAAC,qCAAqC,OAAO,MAAM,mBAAmB,CAAC;AAAA,MAC3I;AAAA,IACF;AACA,SAAK,0BAA0B,MAAM;AACrC,SAAK,2BAA2B,MAAM;AACtC,SAAK,sBAAsB,MAAM;AACjC,SAAK,4BAA4B,MAAM;AACvC,SAAK,SAAS,MAAM,OAAO,MAAM,EAAE,QAAQ,oBAAoB,CAAC;AAAA,EAClE;AAAA,EAEQ,gCAAgC,SAAsC;AAC5E,UAAM,QAAQ,CAAC,2EAA2E;AAE1F,QAAI,SAAS;AACX,YAAM,SAAK,uDAAuC,CAAC;AAAA,IACrD;AAEA,QAAI,KAAK,yBAAyB;AAChC,YAAM,SAAK,wEAA+C,CAAC;AAAA,IAC7D;AAEA,WAAO;AAAA,EAAiF,MACrF,IAAI,CAAC,MAAM,UAAU,GAAG,OAAO,QAAQ,CAAC,CAAC,KAAK,IAAI,EAAE,EACpD,KAAK,IAAI,CAAC;AAAA,EACf;AAAA,EAEQ,sBAAsB,QAAuD;AACnF,UAAM,EAAE,UAAU,QAAQ,IAAI;AAC9B,UAAM,QAAkB;AAAA,MACtB,cAAAA;AAAA,YACM,uCAAwB;AAAA,IAChC;AAEA,QAAI,KAAK,yBAAyB;AAChC,YAAM;AAAA,QACJ,OAAG,wEAA+C,CAAC;AAAA,MACrD;AAAA,IACF;AAEA,UAAM,WAAW;AAAA,EAAiD,MAC/D,IAAI,CAAC,MAAM,UAAU,GAAG,OAAO,QAAQ,CAAC,CAAC,KAAK,IAAI,EAAE,EACpD,KAAK,IAAI,CAAC;AAEb,WAAO,uCAAuC,QAAQ;AAAA;AAAA,EAAQ,QAAQ;AAAA;AAAA,0BAA+B,OAAO,KAAK,yBAAyB,CAAC;AAAA,EAAa,OAAO;AAAA,EACjK;AAAA,EAEQ,qBAAqB,SAA2B,SAAoD;AAC1G,WAAO,QAAQ,IAAI,qBAAmB;AAAA,MACpC;AAAA,MACA,iBAAiB,eAAe,QAAQ;AAAA,MACxC,oBAAgB,sCAAwB,eAAe,QAAQ,OAAO;AAAA,MACtE,UAAU,WAAW,gBAAgB,OAAO;AAAA,IAC9C,EAAE;AAAA,EACJ;AAAA,EAEQ,YACN,OACA,qBACA,SACQ;AACR,UAAM,UAAU,qBAAqB,MAAM,iBAAiB,KAAK,yBAAyB;AAE1F,QAAI;AACJ,YAAQ,MAAM,UAAU;AAAA,MACtB,KAAK;AACH,qBAAa,MAAM,gBAAgB,MAAM,GAAG,iCAAiC;AAC7E;AAAA,MACF,KAAK;AACH,qBAAa;AAAA;AAAA;AAAA,EAAoG,OAAO;AACxH;AAAA,MACF,KAAK;AACH,qBAAa,GAAG,KAAK,gCAAgC,OAAO,CAAC;AAAA;AAAA,0BAA+B,OAAO,KAAK,yBAAyB,CAAC;AAAA,EAAa,OAAO;AACtJ,YAAI,SAAS;AACX,8BAAoB,KAAK,KAAK;AAAA,QAChC;AACA;AAAA,IACJ;AAEA,UAAM,eAAe,QAAQ,UAAU;AACvC,UAAM,eAAe,sBAAsB;AAC3C,WAAO,KAAK,IAAI,GAAG,MAAM,qBAAiB,sCAAwB,UAAU,CAAC;AAAA,EAC/E;AAAA,EAEA,MAAc,kCACZ,OACA,OACA,SACkC;AAClC,QAAI,CAAC,MAAM,eAAe,MAAM;AAC9B,YAAM,IAAI,MAAM,aAAa;AAAA,IAC/B;AACA,UAAM,gBAAgB,MAAM,eAAe,KAAK,iBAAiB,QAAQ,mBAAmB,GAAG,EAAE,MAAM,GAAG,EAAE;AAC5G,UAAM,QAAQ,KAAK,IAAI;AACvB,UAAM,WAAW,GAAG,aAAa,IAAI,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC;AACnE,QAAI;AACF,YAAM,SAAS,MAAM,QAAQ,cAAc;AAAA,QACzC;AAAA,QACA,SAAS,OAAO,KAAK,MAAM,eAAe;AAAA,QAC1C,YAAY,MAAM,eAAe;AAAA,MACnC,CAAC;AACD,YAAM,UAAU,qBAAqB,MAAM,iBAAiB,KAAK,yBAAyB;AAC1F,YAAM,eAAe,QAAQ,UAAU,KAAK,sBAAsB,EAAE,UAAU,OAAO,UAAU,QAAQ,CAAC;AACxG,YAAM,eAAe,sBAAsB;AAC3C,aAAO,OAAO;AAAA,IAChB,SAAS,OAAO;AACd,WAAK,OAAO,MAAM,mCAA+B,6CAAsB,KAAK,CAAC;AAC7E,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,oBAAoB,SAA+B,SAAoD;AACnH,UAAM,UAAU,MAAM,QAAQ;AAAA,MAC5B,QAAQ,IAAI,CAAC,OAAO,UAAU,KAAK,kCAAkC,OAAO,OAAO,OAAO,CAAC;AAAA,IAC7F;AACA,WAAO,QAAQ,KAAK,OAAK,MAAM,MAAS;AAAA,EAC1C;AAAA,EAEA,MAAM,QACJ,SACA,WACsC;AACtC,UAAM,UAAU,UAAU;AAC1B,UAAM,kBAAkB,KAAK,qBAAqB,SAAS,OAAO;AAClE,QAAI,eAAe,gBAAgB,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,gBAAgB,CAAC;AAE/E,QAAI,eAAe,KAAK,0BAA0B;AAChD,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,sBAA4C,CAAC;AAEnD,UAAM,YAAkC,CAAC;AACzC,eAAW,SAAS,iBAAiB;AACnC,UAAI,MAAM,kBAAkB,KAAK,0BAA0B;AACzD,wBAAgB,KAAK,YAAY,OAAO,qBAAqB,OAAO;AAAA,MACtE,OAAO;AACL,kBAAU,KAAK,KAAK;AAAA,MACtB;AAAA,IACF;AAEA,UAAM,kBAAkB,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,iBAAiB,EAAE,cAAc;AACzF,eAAW,SAAS,iBAAiB;AACnC,UAAI,eAAe,KAAK,qBAAqB;AAC3C;AAAA,MACF;AACA,sBAAgB,KAAK,YAAY,OAAO,qBAAqB,OAAO;AAAA,IACtE;AAEA,UAAM,iBAAiB,UAAU,MAAM,KAAK,oBAAoB,qBAAqB,OAAO,IAAI;AAChG,WAAO,mBAAmB,SAAY,EAAE,eAAe,IAAI,CAAC;AAAA,EAC9D;AACF;AAQO,SAAS,kBAAkB,SAId;AAClB,SAAO;AAAA,IACL,wBAAwB;AAAA,MACtB,IAAI,2BAA2B;AAAA,QAC7B,yBAAyB,QAAQ;AAAA,QACjC,0BAA0B,QAAQ,UAAU,4BAA4B;AAAA,QACxE,qBAAqB,QAAQ,UAAU,uBAAuB;AAAA,QAC9D,2BAA2B,QAAQ,UAAU,6BAA6B;AAAA,QAC1E,QAAQ,QAAQ;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF;AACF;","names":["dedent"]}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
// src/core/capabilities/builtins/LargeToolResponse.ts
|
|
2
|
+
import dedent from "dedent";
|
|
3
|
+
import { estimateTokensForString } from "../../llm/usage.mjs";
|
|
4
|
+
import { createSandboxLargeToolResponseGuidance, SANDBOX_SCHEMA_INFER_TAG } from "../../sandbox/Sandbox.mjs";
|
|
5
|
+
import { extractErrorLogFields } from "../../util/errorLogFields.mjs";
|
|
6
|
+
import { createDynamicSubAgentLargeToolResponseGuidance } from "./DynamicSubAgents.mjs";
|
|
7
|
+
var DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD = 6e3;
|
|
8
|
+
var DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD = 1e4;
|
|
9
|
+
var DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS = 100;
|
|
10
|
+
var FAILURE_MESSAGE_TRUNCATION_LENGTH = 500;
|
|
11
|
+
function categorize(result, sandbox) {
|
|
12
|
+
if (result.failure) return "failure";
|
|
13
|
+
if (!result.info) {
|
|
14
|
+
throw new Error(`Unreachable`);
|
|
15
|
+
}
|
|
16
|
+
if (sandbox && result.info.toolSet === sandbox) return "sandbox";
|
|
17
|
+
return "mcp";
|
|
18
|
+
}
|
|
19
|
+
function createContentPreview(content, previewChars) {
|
|
20
|
+
if (content.length <= previewChars * 2) {
|
|
21
|
+
return content;
|
|
22
|
+
}
|
|
23
|
+
return `${content.slice(0, previewChars)}
|
|
24
|
+
...
|
|
25
|
+
${content.slice(-previewChars)}`;
|
|
26
|
+
}
|
|
27
|
+
var LargeToolResponseProcessor = class {
|
|
28
|
+
dynamicSubAgentsPresent;
|
|
29
|
+
individualTokenThreshold;
|
|
30
|
+
totalTokenThreshold;
|
|
31
|
+
previewNumberOfCharacters;
|
|
32
|
+
logger;
|
|
33
|
+
constructor(param) {
|
|
34
|
+
if (param.individualTokenThreshold > param.totalTokenThreshold) {
|
|
35
|
+
throw new Error(
|
|
36
|
+
`individualTokenThreshold (${String(param.individualTokenThreshold)}) must be <= totalTokenThreshold (${String(param.totalTokenThreshold)})`
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
this.dynamicSubAgentsPresent = param.dynamicSubAgentsPresent;
|
|
40
|
+
this.individualTokenThreshold = param.individualTokenThreshold;
|
|
41
|
+
this.totalTokenThreshold = param.totalTokenThreshold;
|
|
42
|
+
this.previewNumberOfCharacters = param.previewNumberOfCharacters;
|
|
43
|
+
this.logger = param.logger.child({ module: "LargeToolResponse" });
|
|
44
|
+
}
|
|
45
|
+
createLargeToolResponseGuidance(sandbox) {
|
|
46
|
+
const steps = ["Check if some parameter can be passed in order to reduce the output size."];
|
|
47
|
+
if (sandbox) {
|
|
48
|
+
steps.push(createSandboxLargeToolResponseGuidance());
|
|
49
|
+
}
|
|
50
|
+
if (this.dynamicSubAgentsPresent) {
|
|
51
|
+
steps.push(createDynamicSubAgentLargeToolResponseGuidance());
|
|
52
|
+
}
|
|
53
|
+
return `Content too big. To handle a large tool call the Agent can do the following:
|
|
54
|
+
${steps.map((step, index) => `${String(index + 1)}. ${step}`).join("\n")}`;
|
|
55
|
+
}
|
|
56
|
+
createFileDumpMessage(params) {
|
|
57
|
+
const { filePath, preview } = params;
|
|
58
|
+
const steps = [
|
|
59
|
+
dedent`Use sandbox to read parts of the file or extract data.
|
|
60
|
+
Use ${SANDBOX_SCHEMA_INFER_TAG} to undertand the schema.`
|
|
61
|
+
];
|
|
62
|
+
if (this.dynamicSubAgentsPresent) {
|
|
63
|
+
steps.push(
|
|
64
|
+
`${createDynamicSubAgentLargeToolResponseGuidance()} The Agent must pass file path to sub-agent also.`
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
const guidance = `The Agent can do the following to handle it:
|
|
68
|
+
${steps.map((step, index) => `${String(index + 1)}. ${step}`).join("\n")}`;
|
|
69
|
+
return `Content too large. Result saved to: ${filePath}.
|
|
70
|
+
|
|
71
|
+
${guidance}
|
|
72
|
+
|
|
73
|
+
Preview (first and last ${String(this.previewNumberOfCharacters)} chars):
|
|
74
|
+
${preview}`;
|
|
75
|
+
}
|
|
76
|
+
buildResultsWithInfo(results, sandbox) {
|
|
77
|
+
return results.map((toolCallResult) => ({
|
|
78
|
+
toolCallResult,
|
|
79
|
+
originalContent: toolCallResult.message.content,
|
|
80
|
+
originalTokens: estimateTokensForString(toolCallResult.message.content),
|
|
81
|
+
category: categorize(toolCallResult, sandbox)
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
84
|
+
blockResult(entry, pendingSandboxDumps, sandbox) {
|
|
85
|
+
const preview = createContentPreview(entry.originalContent, this.previewNumberOfCharacters);
|
|
86
|
+
let newContent;
|
|
87
|
+
switch (entry.category) {
|
|
88
|
+
case "failure":
|
|
89
|
+
newContent = entry.originalContent.slice(0, FAILURE_MESSAGE_TRUNCATION_LENGTH);
|
|
90
|
+
break;
|
|
91
|
+
case "sandbox":
|
|
92
|
+
newContent = `Content too big. The Agent should write to a file if required and use grep and sed.
|
|
93
|
+
|
|
94
|
+
Preview:
|
|
95
|
+
${preview}`;
|
|
96
|
+
break;
|
|
97
|
+
case "mcp":
|
|
98
|
+
newContent = `${this.createLargeToolResponseGuidance(sandbox)}
|
|
99
|
+
|
|
100
|
+
Preview (first and last ${String(this.previewNumberOfCharacters)} chars):
|
|
101
|
+
${preview}`;
|
|
102
|
+
if (sandbox) {
|
|
103
|
+
pendingSandboxDumps.push(entry);
|
|
104
|
+
}
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
entry.toolCallResult.message.content = newContent;
|
|
108
|
+
entry.toolCallResult.isStructuredContent = false;
|
|
109
|
+
return Math.max(0, entry.originalTokens - estimateTokensForString(newContent));
|
|
110
|
+
}
|
|
111
|
+
async uploadToSandboxAndPrependFilePath(entry, index, sandbox) {
|
|
112
|
+
if (!entry.toolCallResult.info) {
|
|
113
|
+
throw new Error(`Unreachable`);
|
|
114
|
+
}
|
|
115
|
+
const sanitizedName = entry.toolCallResult.info.originalToolName.replace(/[^a-zA-Z0-9_-]/g, "_").slice(0, 40);
|
|
116
|
+
const epoch = Date.now();
|
|
117
|
+
const fileName = `${sanitizedName}_${String(index)}_${String(epoch)}.txt`;
|
|
118
|
+
try {
|
|
119
|
+
const stored = await sandbox.writeArtifact({
|
|
120
|
+
fileName,
|
|
121
|
+
content: Buffer.from(entry.originalContent),
|
|
122
|
+
sourceTool: entry.toolCallResult.info
|
|
123
|
+
});
|
|
124
|
+
const preview = createContentPreview(entry.originalContent, this.previewNumberOfCharacters);
|
|
125
|
+
entry.toolCallResult.message.content = this.createFileDumpMessage({ filePath: stored.filePath, preview });
|
|
126
|
+
entry.toolCallResult.isStructuredContent = false;
|
|
127
|
+
return stored.sandboxCreated;
|
|
128
|
+
} catch (error) {
|
|
129
|
+
this.logger.error("Failed to upload to sandbox", extractErrorLogFields(error));
|
|
130
|
+
return void 0;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
async executeSandboxDumps(entries, sandbox) {
|
|
134
|
+
const results = await Promise.all(
|
|
135
|
+
entries.map((entry, index) => this.uploadToSandboxAndPrependFilePath(entry, index, sandbox))
|
|
136
|
+
);
|
|
137
|
+
return results.find((r) => r !== void 0);
|
|
138
|
+
}
|
|
139
|
+
async process(results, execution) {
|
|
140
|
+
const sandbox = execution.sandbox;
|
|
141
|
+
const resultsWithInfo = this.buildResultsWithInfo(results, sandbox);
|
|
142
|
+
let runningTotal = resultsWithInfo.reduce((sum, e) => sum + e.originalTokens, 0);
|
|
143
|
+
if (runningTotal < this.individualTokenThreshold) {
|
|
144
|
+
return {};
|
|
145
|
+
}
|
|
146
|
+
const pendingSandboxDumps = [];
|
|
147
|
+
const unblocked = [];
|
|
148
|
+
for (const entry of resultsWithInfo) {
|
|
149
|
+
if (entry.originalTokens >= this.individualTokenThreshold) {
|
|
150
|
+
runningTotal -= this.blockResult(entry, pendingSandboxDumps, sandbox);
|
|
151
|
+
} else {
|
|
152
|
+
unblocked.push(entry);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
const sortedUnblocked = [...unblocked].sort((a, b) => b.originalTokens - a.originalTokens);
|
|
156
|
+
for (const entry of sortedUnblocked) {
|
|
157
|
+
if (runningTotal < this.totalTokenThreshold) {
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
runningTotal -= this.blockResult(entry, pendingSandboxDumps, sandbox);
|
|
161
|
+
}
|
|
162
|
+
const sandboxCreated = sandbox ? await this.executeSandboxDumps(pendingSandboxDumps, sandbox) : void 0;
|
|
163
|
+
return sandboxCreated !== void 0 ? { sandboxCreated } : {};
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
function largeToolResponse(options) {
|
|
167
|
+
return {
|
|
168
|
+
toolResponseProcessors: [
|
|
169
|
+
new LargeToolResponseProcessor({
|
|
170
|
+
dynamicSubAgentsPresent: options.dynamicSubAgentsPresent,
|
|
171
|
+
individualTokenThreshold: options.settings?.individualTokenThreshold ?? DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD,
|
|
172
|
+
totalTokenThreshold: options.settings?.totalTokenThreshold ?? DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD,
|
|
173
|
+
previewNumberOfCharacters: options.settings?.previewNumberOfCharacters ?? DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS,
|
|
174
|
+
logger: options.logger
|
|
175
|
+
})
|
|
176
|
+
]
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
export {
|
|
180
|
+
DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD,
|
|
181
|
+
DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS,
|
|
182
|
+
DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD,
|
|
183
|
+
LargeToolResponseProcessor,
|
|
184
|
+
largeToolResponse
|
|
185
|
+
};
|
|
186
|
+
//# sourceMappingURL=LargeToolResponse.mjs.map
|