@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,321 @@
|
|
|
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/runtime/DeferredTool.ts
|
|
31
|
+
var DeferredTool_exports = {};
|
|
32
|
+
__export(DeferredTool_exports, {
|
|
33
|
+
DEFERRED_TOOLS_SERVER_ID: () => DEFERRED_TOOLS_SERVER_ID,
|
|
34
|
+
DeferredTool: () => DeferredTool,
|
|
35
|
+
GET_TOOL_INFO_NAME: () => GET_TOOL_INFO_NAME,
|
|
36
|
+
GET_TOOL_OUTPUT_SCHEMA_NAME: () => GET_TOOL_OUTPUT_SCHEMA_NAME,
|
|
37
|
+
LIST_TOOLS_NAME: () => LIST_TOOLS_NAME
|
|
38
|
+
});
|
|
39
|
+
module.exports = __toCommonJS(DeferredTool_exports);
|
|
40
|
+
var import_dedent = __toESM(require("dedent"), 1);
|
|
41
|
+
var import_zod = require("zod");
|
|
42
|
+
var import_InstructionBuilder = require("../InstructionBuilder.js");
|
|
43
|
+
var import_IMCPServer = require("../mcp/IMCPServer.js");
|
|
44
|
+
var import_LocalToolMCP = require("../mcp/LocalToolMCP.js");
|
|
45
|
+
var import_errorLogFields = require("../util/errorLogFields.js");
|
|
46
|
+
var DEFERRED_TOOLS_SERVER_ID = "deferred-tools";
|
|
47
|
+
var DEFERRED_TOOLS_INSTRUCTION = "deferred-tools-instructions";
|
|
48
|
+
var LIST_TOOLS_NAME = "list_tools";
|
|
49
|
+
var GET_TOOL_INFO_NAME = "get_tool_info";
|
|
50
|
+
var GET_TOOL_OUTPUT_SCHEMA_NAME = "get_tool_output_schema";
|
|
51
|
+
var CALL_TOOL_NAME = "call_tool";
|
|
52
|
+
var MAX_DESCRIPTION_LENGTH = 200;
|
|
53
|
+
var listToolsSchema = import_zod.z.object({
|
|
54
|
+
mcp_server: import_zod.z.string().describe("Name of the MCP server to list tools for.")
|
|
55
|
+
});
|
|
56
|
+
var getToolInfoSchema = import_zod.z.object({
|
|
57
|
+
mcp_server: import_zod.z.string().describe("Name of the MCP server."),
|
|
58
|
+
tool_name: import_zod.z.string().describe("Name of the tool to inspect.")
|
|
59
|
+
});
|
|
60
|
+
var getToolOutputSchemaSchema = import_zod.z.object({
|
|
61
|
+
mcp_server: import_zod.z.string().describe("Name of the MCP server."),
|
|
62
|
+
tool_name: import_zod.z.string().describe("Name of the tool to get output schema for.")
|
|
63
|
+
});
|
|
64
|
+
var callToolSchema = import_zod.z.object({
|
|
65
|
+
mcp_server: import_zod.z.string().describe("Name of the MCP server."),
|
|
66
|
+
tool_name: import_zod.z.string().describe("Name of the tool to call."),
|
|
67
|
+
input: import_zod.z.record(import_zod.z.string(), import_zod.z.unknown()).default({}).describe("Arguments to pass to the tool.")
|
|
68
|
+
});
|
|
69
|
+
function isResolvedServerTools(result) {
|
|
70
|
+
return "tools" in result;
|
|
71
|
+
}
|
|
72
|
+
var DeferredTool = class extends import_LocalToolMCP.LocalToolMCP {
|
|
73
|
+
name = DEFERRED_TOOLS_SERVER_ID;
|
|
74
|
+
displayName = "DeferredTools";
|
|
75
|
+
description = "Deferred tool loading for user MCP servers";
|
|
76
|
+
serverMap;
|
|
77
|
+
tools;
|
|
78
|
+
logger;
|
|
79
|
+
constructor(servers, options) {
|
|
80
|
+
super({ tracing: options.tracing });
|
|
81
|
+
this.logger = options.logger.child({ module: "DeferredTool" });
|
|
82
|
+
this.serverMap = new Map(servers.map((s) => [s.name, s]));
|
|
83
|
+
this.tools = this.buildTools();
|
|
84
|
+
}
|
|
85
|
+
buildInstruction(builder) {
|
|
86
|
+
const servers = [...this.serverMap.values()];
|
|
87
|
+
const deferredServers = servers.filter((s) => !s.preload);
|
|
88
|
+
if (deferredServers.length === 0) return;
|
|
89
|
+
const deferredList = deferredServers.map((s) => s.description ? `- ${s.name}: "${s.description.slice(0, MAX_DESCRIPTION_LENGTH)}"` : `- ${s.name}`).join("\n");
|
|
90
|
+
builder.addSection(
|
|
91
|
+
DEFERRED_TOOLS_INSTRUCTION,
|
|
92
|
+
import_dedent.default`
|
|
93
|
+
The following MCP servers have deferred tool loading. Their tools are NOT pre-loaded.
|
|
94
|
+
${deferredList}
|
|
95
|
+
|
|
96
|
+
The Agent MUST use ${LIST_TOOLS_NAME} and ${GET_TOOL_INFO_NAME} to discover tools before calling them.`
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
getTools() {
|
|
100
|
+
return this.tools;
|
|
101
|
+
}
|
|
102
|
+
async toolCallInfo(params, resolveUnderlyingTool) {
|
|
103
|
+
if (params.name !== CALL_TOOL_NAME) {
|
|
104
|
+
return super.toolCallInfo(params, resolveUnderlyingTool);
|
|
105
|
+
}
|
|
106
|
+
if (resolveUnderlyingTool === false) {
|
|
107
|
+
const base = await super.toolCallInfo(params, resolveUnderlyingTool);
|
|
108
|
+
return { ...base, is_deferred: true };
|
|
109
|
+
}
|
|
110
|
+
const parsed = callToolSchema.safeParse(params.arguments);
|
|
111
|
+
if (!parsed.success) {
|
|
112
|
+
this.logger.warn(`Failed to parse call_tool arguments`, {
|
|
113
|
+
tool: params.name,
|
|
114
|
+
errors: parsed.error.issues
|
|
115
|
+
});
|
|
116
|
+
return { ...await super.toolCallInfo(params), is_deferred: true };
|
|
117
|
+
}
|
|
118
|
+
const server = this.resolveServer(parsed.data.mcp_server);
|
|
119
|
+
if (!server) {
|
|
120
|
+
this.logger.warn(`Server not found for toolCallInfo`, {
|
|
121
|
+
mcpServer: parsed.data.mcp_server,
|
|
122
|
+
toolName: parsed.data.tool_name,
|
|
123
|
+
availableServers: [...this.serverMap.keys()]
|
|
124
|
+
});
|
|
125
|
+
return { ...await super.toolCallInfo(params), is_deferred: true };
|
|
126
|
+
}
|
|
127
|
+
const underlying = await server.toolCallInfo({
|
|
128
|
+
name: parsed.data.tool_name,
|
|
129
|
+
arguments: parsed.data.input
|
|
130
|
+
});
|
|
131
|
+
return { ...underlying, is_deferred: true };
|
|
132
|
+
}
|
|
133
|
+
resolveServer(name) {
|
|
134
|
+
return this.serverMap.get(name);
|
|
135
|
+
}
|
|
136
|
+
async resolveServerTools(mcpServer) {
|
|
137
|
+
const server = this.resolveServer(mcpServer);
|
|
138
|
+
if (!server) {
|
|
139
|
+
return (0, import_IMCPServer.toolResultResponse)({
|
|
140
|
+
text: JSON.stringify({ error: `MCP server '${mcpServer}' not found` }),
|
|
141
|
+
isError: true
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
const listResponse = await server.listTools();
|
|
145
|
+
if ((0, import_IMCPServer.isAuthRequired)(listResponse)) {
|
|
146
|
+
return listResponse;
|
|
147
|
+
}
|
|
148
|
+
const { result, ...metadata } = listResponse;
|
|
149
|
+
return { server, tools: result.tools, metadata };
|
|
150
|
+
}
|
|
151
|
+
buildTools() {
|
|
152
|
+
return [this.buildListTools(), this.buildGetToolInfo(), this.buildGetToolOutputSchema(), this.buildCallTool()];
|
|
153
|
+
}
|
|
154
|
+
buildListTools() {
|
|
155
|
+
return (0, import_LocalToolMCP.defineTool)({
|
|
156
|
+
name: LIST_TOOLS_NAME,
|
|
157
|
+
description: import_dedent.default`
|
|
158
|
+
List tool names available on an MCP server.
|
|
159
|
+
Returns tool names only — use ${GET_TOOL_INFO_NAME} to get full details before calling a tool.`,
|
|
160
|
+
schema: listToolsSchema,
|
|
161
|
+
handler: async (input) => {
|
|
162
|
+
try {
|
|
163
|
+
const resolved = await this.resolveServerTools(input.mcp_server);
|
|
164
|
+
if (!isResolvedServerTools(resolved)) return resolved;
|
|
165
|
+
const { server, tools, metadata } = resolved;
|
|
166
|
+
return (0, import_IMCPServer.toolResultResponse)({
|
|
167
|
+
text: `${server.name}:
|
|
168
|
+
${tools.map((t) => t.name).join(", ")}`,
|
|
169
|
+
overrides: metadata
|
|
170
|
+
});
|
|
171
|
+
} catch (error) {
|
|
172
|
+
this.logger.error("list_tools failed", {
|
|
173
|
+
...(0, import_errorLogFields.extractErrorLogFields)(error),
|
|
174
|
+
mcpServer: input.mcp_server
|
|
175
|
+
});
|
|
176
|
+
return (0, import_IMCPServer.toolResultResponse)({
|
|
177
|
+
text: JSON.stringify({ error: `Failed to list tools for '${input.mcp_server}'.` }),
|
|
178
|
+
isError: true
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
buildGetToolInfo() {
|
|
185
|
+
return (0, import_LocalToolMCP.defineTool)({
|
|
186
|
+
name: GET_TOOL_INFO_NAME,
|
|
187
|
+
description: import_dedent.default`
|
|
188
|
+
Get description, inputSchema and outputSchema for a specific tool on an MCP server.
|
|
189
|
+
If outputSchema is null, it will NOT be present in ${GET_TOOL_OUTPUT_SCHEMA_NAME} as well.
|
|
190
|
+
The Agent MUST call ${LIST_TOOLS_NAME} first to know which tools are available.`,
|
|
191
|
+
schema: getToolInfoSchema,
|
|
192
|
+
handler: async (input) => {
|
|
193
|
+
try {
|
|
194
|
+
const resolved = await this.resolveServerTools(input.mcp_server);
|
|
195
|
+
if (!isResolvedServerTools(resolved)) return resolved;
|
|
196
|
+
const { tools, metadata } = resolved;
|
|
197
|
+
const tool = tools.find((t) => t.name === input.tool_name);
|
|
198
|
+
if (!tool) {
|
|
199
|
+
return (0, import_IMCPServer.toolResultResponse)({
|
|
200
|
+
text: JSON.stringify({ error: `Tool '${input.tool_name}' not found on server '${input.mcp_server}'` }),
|
|
201
|
+
overrides: metadata,
|
|
202
|
+
isError: true
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
return (0, import_IMCPServer.toolResultResponse)({
|
|
206
|
+
text: JSON.stringify({
|
|
207
|
+
description: tool.description,
|
|
208
|
+
inputSchema: tool.inputSchema,
|
|
209
|
+
outputSchema: tool.outputSchema ?? null
|
|
210
|
+
}),
|
|
211
|
+
overrides: metadata
|
|
212
|
+
});
|
|
213
|
+
} catch (error) {
|
|
214
|
+
this.logger.error("get_tool_info failed", {
|
|
215
|
+
...(0, import_errorLogFields.extractErrorLogFields)(error),
|
|
216
|
+
mcpServer: input.mcp_server,
|
|
217
|
+
toolName: input.tool_name
|
|
218
|
+
});
|
|
219
|
+
return (0, import_IMCPServer.toolResultResponse)({
|
|
220
|
+
text: JSON.stringify({
|
|
221
|
+
error: `Failed to get tool info: ${error instanceof Error ? error.message : "unknown"}`
|
|
222
|
+
}),
|
|
223
|
+
isError: true
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
buildGetToolOutputSchema() {
|
|
230
|
+
return (0, import_LocalToolMCP.defineTool)({
|
|
231
|
+
name: GET_TOOL_OUTPUT_SCHEMA_NAME,
|
|
232
|
+
description: import_dedent.default`
|
|
233
|
+
Get the outputSchema for a specific tool on an MCP server.
|
|
234
|
+
The Agent MUST not call ${GET_TOOL_OUTPUT_SCHEMA_NAME} and ${GET_TOOL_INFO_NAME} for the same tool.
|
|
235
|
+
The Agent MUST either call ${GET_TOOL_OUTPUT_SCHEMA_NAME} or ${GET_TOOL_INFO_NAME} before entering Code Mode.
|
|
236
|
+
The Agent must NOT assume the structure of a tool's response from its name or description alone.`,
|
|
237
|
+
schema: getToolOutputSchemaSchema,
|
|
238
|
+
handler: async (input) => {
|
|
239
|
+
try {
|
|
240
|
+
const resolved = await this.resolveServerTools(input.mcp_server);
|
|
241
|
+
if (!isResolvedServerTools(resolved)) return resolved;
|
|
242
|
+
const { tools, metadata } = resolved;
|
|
243
|
+
const tool = tools.find((t) => t.name === input.tool_name);
|
|
244
|
+
if (!tool) {
|
|
245
|
+
return (0, import_IMCPServer.toolResultResponse)({
|
|
246
|
+
text: JSON.stringify({ error: `Tool '${input.tool_name}' not found on server '${input.mcp_server}'` }),
|
|
247
|
+
overrides: metadata,
|
|
248
|
+
isError: true
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
return (0, import_IMCPServer.toolResultResponse)({
|
|
252
|
+
text: JSON.stringify({
|
|
253
|
+
outputSchema: tool.outputSchema ?? null
|
|
254
|
+
}),
|
|
255
|
+
overrides: metadata
|
|
256
|
+
});
|
|
257
|
+
} catch (error) {
|
|
258
|
+
this.logger.error("get_tool_output_schema failed", {
|
|
259
|
+
...(0, import_errorLogFields.extractErrorLogFields)(error),
|
|
260
|
+
mcpServer: input.mcp_server,
|
|
261
|
+
toolName: input.tool_name
|
|
262
|
+
});
|
|
263
|
+
return (0, import_IMCPServer.toolResultResponse)({
|
|
264
|
+
text: JSON.stringify({
|
|
265
|
+
error: `Failed to get output schema: ${error instanceof Error ? error.message : "unknown"}`
|
|
266
|
+
}),
|
|
267
|
+
isError: true
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
buildCallTool() {
|
|
274
|
+
return (0, import_LocalToolMCP.defineTool)({
|
|
275
|
+
name: CALL_TOOL_NAME,
|
|
276
|
+
description: import_dedent.default`
|
|
277
|
+
Call a tool on an MCP server.
|
|
278
|
+
The Agent MUST call ${LIST_TOOLS_NAME} and ${GET_TOOL_INFO_NAME} before calling a tool.`,
|
|
279
|
+
schema: callToolSchema,
|
|
280
|
+
handler: async (input, approvalDecision) => {
|
|
281
|
+
const server = this.resolveServer(input.mcp_server);
|
|
282
|
+
if (!server) {
|
|
283
|
+
return (0, import_IMCPServer.toolResultResponse)({
|
|
284
|
+
text: JSON.stringify({ error: `MCP server '${input.mcp_server}' not found` }),
|
|
285
|
+
isError: true
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
try {
|
|
289
|
+
const response = await server.callTool({ name: input.tool_name, arguments: input.input }, approvalDecision);
|
|
290
|
+
if ((0, import_IMCPServer.isAuthRequired)(response)) {
|
|
291
|
+
return response;
|
|
292
|
+
}
|
|
293
|
+
if ((0, import_IMCPServer.isApprovalRequiredResponse)(response)) return response;
|
|
294
|
+
if (!(0, import_IMCPServer.isCallToolResponseResult)(response)) {
|
|
295
|
+
throw new Error("Tool call returned an unexpected sub-agent response");
|
|
296
|
+
}
|
|
297
|
+
return response;
|
|
298
|
+
} catch (error) {
|
|
299
|
+
this.logger.error("call_tool failed", {
|
|
300
|
+
...(0, import_errorLogFields.extractErrorLogFields)(error),
|
|
301
|
+
mcpServer: input.mcp_server,
|
|
302
|
+
toolName: input.tool_name
|
|
303
|
+
});
|
|
304
|
+
return (0, import_IMCPServer.toolResultResponse)({
|
|
305
|
+
text: JSON.stringify({ error: `Tool call failed: ${error instanceof Error ? error.message : "unknown"}` }),
|
|
306
|
+
isError: true
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
};
|
|
313
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
314
|
+
0 && (module.exports = {
|
|
315
|
+
DEFERRED_TOOLS_SERVER_ID,
|
|
316
|
+
DeferredTool,
|
|
317
|
+
GET_TOOL_INFO_NAME,
|
|
318
|
+
GET_TOOL_OUTPUT_SCHEMA_NAME,
|
|
319
|
+
LIST_TOOLS_NAME
|
|
320
|
+
});
|
|
321
|
+
//# sourceMappingURL=DeferredTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/core/runtime/DeferredTool.ts"],"sourcesContent":["import type { CallToolRequest } from '@modelcontextprotocol/sdk/types.js';\nimport dedent from 'dedent';\nimport type { Logger } from 'winston';\nimport { z } from 'zod';\nimport type { ApprovalDecision } from '../events/schema';\nimport { InstructionBuilder } from '../InstructionBuilder';\nimport type { InternalToolCallInfo } from '../llm/LLMTypes';\nimport {\n type AgentToolSchema,\n type CallToolResponse,\n isApprovalRequiredResponse,\n isAuthRequired,\n isCallToolResponseResult,\n type IToolSet,\n type ListToolsResolvedResponse,\n toolResultResponse,\n} from '../mcp/IMCPServer';\nimport { defineTool, LocalToolMCP, type ToolDefinition } from '../mcp/LocalToolMCP';\nimport type { AgentTracing } from '../tracing/AgentTracing';\nimport { extractErrorLogFields } from '../util/errorLogFields';\n\nexport const DEFERRED_TOOLS_SERVER_ID = 'deferred-tools';\nconst DEFERRED_TOOLS_INSTRUCTION = 'deferred-tools-instructions';\nexport const LIST_TOOLS_NAME = 'list_tools';\nexport const GET_TOOL_INFO_NAME = 'get_tool_info';\nexport const GET_TOOL_OUTPUT_SCHEMA_NAME = 'get_tool_output_schema';\nconst CALL_TOOL_NAME = 'call_tool';\nconst MAX_DESCRIPTION_LENGTH = 200;\n\nconst listToolsSchema = z.object({\n mcp_server: z.string().describe('Name of the MCP server to list tools for.'),\n});\n\nconst getToolInfoSchema = z.object({\n mcp_server: z.string().describe('Name of the MCP server.'),\n tool_name: z.string().describe('Name of the tool to inspect.'),\n});\n\nconst getToolOutputSchemaSchema = z.object({\n mcp_server: z.string().describe('Name of the MCP server.'),\n tool_name: z.string().describe('Name of the tool to get output schema for.'),\n});\n\nconst callToolSchema = z.object({\n mcp_server: z.string().describe('Name of the MCP server.'),\n tool_name: z.string().describe('Name of the tool to call.'),\n input: z.record(z.string(), z.unknown()).default({}).describe('Arguments to pass to the tool.'),\n});\n\ninterface ResolvedServerTools {\n server: IToolSet;\n tools: AgentToolSchema[];\n metadata: Omit<ListToolsResolvedResponse, 'result'>;\n}\n\nfunction isResolvedServerTools(result: CallToolResponse | ResolvedServerTools): result is ResolvedServerTools {\n return 'tools' in result;\n}\n\nexport class DeferredTool extends LocalToolMCP {\n readonly name = DEFERRED_TOOLS_SERVER_ID;\n readonly displayName = 'DeferredTools';\n override readonly description = 'Deferred tool loading for user MCP servers';\n\n private readonly serverMap: Map<string, IToolSet>;\n private readonly tools: ToolDefinition[];\n private readonly logger: Logger;\n\n constructor(\n servers: readonly IToolSet[],\n options: {\n tracing: AgentTracing;\n logger: Logger;\n },\n ) {\n super({ tracing: options.tracing });\n this.logger = options.logger.child({ module: 'DeferredTool' });\n this.serverMap = new Map(servers.map(s => [s.name, s]));\n this.tools = this.buildTools();\n }\n\n buildInstruction(builder: InstructionBuilder): void {\n const servers = [...this.serverMap.values()];\n\n // Membership follows `preload` only (origin/main). Selective `preload_tools` /\n // `hasPreloadedTools` must not hide a server from deferred discovery instructions.\n const deferredServers = servers.filter(s => !s.preload);\n\n if (deferredServers.length === 0) return;\n\n const deferredList = deferredServers\n .map(s => (s.description ? `- ${s.name}: \"${s.description.slice(0, MAX_DESCRIPTION_LENGTH)}\"` : `- ${s.name}`))\n .join('\\n');\n\n builder.addSection(\n DEFERRED_TOOLS_INSTRUCTION,\n dedent`\n The following MCP servers have deferred tool loading. Their tools are NOT pre-loaded.\n ${deferredList}\n\n The Agent MUST use ${LIST_TOOLS_NAME} and ${GET_TOOL_INFO_NAME} to discover tools before calling them.`,\n );\n }\n\n protected getTools(): ToolDefinition[] {\n return this.tools;\n }\n\n override async toolCallInfo(\n params: CallToolRequest['params'],\n resolveUnderlyingTool?: boolean,\n ): Promise<InternalToolCallInfo> {\n if (params.name !== CALL_TOOL_NAME) {\n return super.toolCallInfo(params, resolveUnderlyingTool);\n }\n if (resolveUnderlyingTool === false) {\n const base = await super.toolCallInfo(params, resolveUnderlyingTool);\n return { ...base, is_deferred: true };\n }\n const parsed = callToolSchema.safeParse(params.arguments);\n if (!parsed.success) {\n this.logger.warn(`Failed to parse call_tool arguments`, {\n tool: params.name,\n errors: parsed.error.issues,\n });\n return { ...(await super.toolCallInfo(params)), is_deferred: true };\n }\n const server = this.resolveServer(parsed.data.mcp_server);\n if (!server) {\n this.logger.warn(`Server not found for toolCallInfo`, {\n mcpServer: parsed.data.mcp_server,\n toolName: parsed.data.tool_name,\n availableServers: [...this.serverMap.keys()],\n });\n return { ...(await super.toolCallInfo(params)), is_deferred: true };\n }\n const underlying = await server.toolCallInfo({\n name: parsed.data.tool_name,\n arguments: parsed.data.input,\n });\n return { ...underlying, is_deferred: true };\n }\n\n private resolveServer(name: string): IToolSet | undefined {\n return this.serverMap.get(name);\n }\n\n private async resolveServerTools(mcpServer: string): Promise<CallToolResponse | ResolvedServerTools> {\n const server = this.resolveServer(mcpServer);\n if (!server) {\n return toolResultResponse({\n text: JSON.stringify({ error: `MCP server '${mcpServer}' not found` }),\n isError: true,\n });\n }\n\n const listResponse = await server.listTools();\n if (isAuthRequired(listResponse)) {\n return listResponse;\n }\n const { result, ...metadata } = listResponse;\n return { server, tools: result.tools, metadata };\n }\n\n private buildTools(): ToolDefinition[] {\n return [this.buildListTools(), this.buildGetToolInfo(), this.buildGetToolOutputSchema(), this.buildCallTool()];\n }\n\n private buildListTools(): ToolDefinition {\n return defineTool({\n name: LIST_TOOLS_NAME,\n description: dedent`\n List tool names available on an MCP server.\n Returns tool names only — use ${GET_TOOL_INFO_NAME} to get full details before calling a tool.`,\n schema: listToolsSchema,\n handler: async (input: { mcp_server: string }) => {\n try {\n const resolved = await this.resolveServerTools(input.mcp_server);\n if (!isResolvedServerTools(resolved)) return resolved;\n const { server, tools, metadata } = resolved;\n return toolResultResponse({\n text: `${server.name}:\\n ${tools.map(t => t.name).join(', ')}`,\n overrides: metadata,\n });\n } catch (error) {\n this.logger.error('list_tools failed', {\n ...extractErrorLogFields(error),\n mcpServer: input.mcp_server,\n });\n return toolResultResponse({\n text: JSON.stringify({ error: `Failed to list tools for '${input.mcp_server}'.` }),\n isError: true,\n });\n }\n },\n });\n }\n\n private buildGetToolInfo(): ToolDefinition {\n return defineTool({\n name: GET_TOOL_INFO_NAME,\n description: dedent`\n Get description, inputSchema and outputSchema for a specific tool on an MCP server.\n If outputSchema is null, it will NOT be present in ${GET_TOOL_OUTPUT_SCHEMA_NAME} as well.\n The Agent MUST call ${LIST_TOOLS_NAME} first to know which tools are available.`,\n schema: getToolInfoSchema,\n handler: async (input: { mcp_server: string; tool_name: string }) => {\n try {\n const resolved = await this.resolveServerTools(input.mcp_server);\n if (!isResolvedServerTools(resolved)) return resolved;\n const { tools, metadata } = resolved;\n const tool = tools.find(t => t.name === input.tool_name);\n if (!tool) {\n return toolResultResponse({\n text: JSON.stringify({ error: `Tool '${input.tool_name}' not found on server '${input.mcp_server}'` }),\n overrides: metadata,\n isError: true,\n });\n }\n\n return toolResultResponse({\n text: JSON.stringify({\n description: tool.description,\n inputSchema: tool.inputSchema,\n outputSchema: tool.outputSchema ?? null,\n }),\n overrides: metadata,\n });\n } catch (error) {\n this.logger.error('get_tool_info failed', {\n ...extractErrorLogFields(error),\n mcpServer: input.mcp_server,\n toolName: input.tool_name,\n });\n return toolResultResponse({\n text: JSON.stringify({\n error: `Failed to get tool info: ${error instanceof Error ? error.message : 'unknown'}`,\n }),\n isError: true,\n });\n }\n },\n });\n }\n\n private buildGetToolOutputSchema(): ToolDefinition {\n return defineTool({\n name: GET_TOOL_OUTPUT_SCHEMA_NAME,\n description: dedent`\n Get the outputSchema for a specific tool on an MCP server.\n The Agent MUST not call ${GET_TOOL_OUTPUT_SCHEMA_NAME} and ${GET_TOOL_INFO_NAME} for the same tool.\n The Agent MUST either call ${GET_TOOL_OUTPUT_SCHEMA_NAME} or ${GET_TOOL_INFO_NAME} before entering Code Mode.\n The Agent must NOT assume the structure of a tool's response from its name or description alone.`,\n schema: getToolOutputSchemaSchema,\n handler: async (input: { mcp_server: string; tool_name: string }) => {\n try {\n const resolved = await this.resolveServerTools(input.mcp_server);\n if (!isResolvedServerTools(resolved)) return resolved;\n const { tools, metadata } = resolved;\n const tool = tools.find(t => t.name === input.tool_name);\n if (!tool) {\n return toolResultResponse({\n text: JSON.stringify({ error: `Tool '${input.tool_name}' not found on server '${input.mcp_server}'` }),\n overrides: metadata,\n isError: true,\n });\n }\n\n return toolResultResponse({\n text: JSON.stringify({\n outputSchema: tool.outputSchema ?? null,\n }),\n overrides: metadata,\n });\n } catch (error) {\n this.logger.error('get_tool_output_schema failed', {\n ...extractErrorLogFields(error),\n mcpServer: input.mcp_server,\n toolName: input.tool_name,\n });\n return toolResultResponse({\n text: JSON.stringify({\n error: `Failed to get output schema: ${error instanceof Error ? error.message : 'unknown'}`,\n }),\n isError: true,\n });\n }\n },\n });\n }\n\n private buildCallTool(): ToolDefinition {\n return defineTool({\n name: CALL_TOOL_NAME,\n description: dedent`\n Call a tool on an MCP server.\n The Agent MUST call ${LIST_TOOLS_NAME} and ${GET_TOOL_INFO_NAME} before calling a tool.`,\n schema: callToolSchema,\n handler: async (\n input: { mcp_server: string; tool_name: string; input: Record<string, unknown> },\n approvalDecision?: ApprovalDecision,\n ) => {\n const server = this.resolveServer(input.mcp_server);\n if (!server) {\n return toolResultResponse({\n text: JSON.stringify({ error: `MCP server '${input.mcp_server}' not found` }),\n isError: true,\n });\n }\n\n try {\n const response = await server.callTool({ name: input.tool_name, arguments: input.input }, approvalDecision);\n\n if (isAuthRequired(response)) {\n return response;\n }\n\n if (isApprovalRequiredResponse(response)) return response;\n\n if (!isCallToolResponseResult(response)) {\n throw new Error('Tool call returned an unexpected sub-agent response');\n }\n\n return response;\n } catch (error) {\n this.logger.error('call_tool failed', {\n ...extractErrorLogFields(error),\n mcpServer: input.mcp_server,\n toolName: input.tool_name,\n });\n return toolResultResponse({\n text: JSON.stringify({ error: `Tool call failed: ${error instanceof Error ? error.message : 'unknown'}` }),\n isError: true,\n });\n }\n },\n });\n }\n}\n"],"mappings":"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","names":["dedent"]}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
// src/core/runtime/DeferredTool.ts
|
|
2
|
+
import dedent from "dedent";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import "../InstructionBuilder.mjs";
|
|
5
|
+
import {
|
|
6
|
+
isApprovalRequiredResponse,
|
|
7
|
+
isAuthRequired,
|
|
8
|
+
isCallToolResponseResult,
|
|
9
|
+
toolResultResponse
|
|
10
|
+
} from "../mcp/IMCPServer.mjs";
|
|
11
|
+
import { defineTool, LocalToolMCP } from "../mcp/LocalToolMCP.mjs";
|
|
12
|
+
import { extractErrorLogFields } from "../util/errorLogFields.mjs";
|
|
13
|
+
var DEFERRED_TOOLS_SERVER_ID = "deferred-tools";
|
|
14
|
+
var DEFERRED_TOOLS_INSTRUCTION = "deferred-tools-instructions";
|
|
15
|
+
var LIST_TOOLS_NAME = "list_tools";
|
|
16
|
+
var GET_TOOL_INFO_NAME = "get_tool_info";
|
|
17
|
+
var GET_TOOL_OUTPUT_SCHEMA_NAME = "get_tool_output_schema";
|
|
18
|
+
var CALL_TOOL_NAME = "call_tool";
|
|
19
|
+
var MAX_DESCRIPTION_LENGTH = 200;
|
|
20
|
+
var listToolsSchema = z.object({
|
|
21
|
+
mcp_server: z.string().describe("Name of the MCP server to list tools for.")
|
|
22
|
+
});
|
|
23
|
+
var getToolInfoSchema = z.object({
|
|
24
|
+
mcp_server: z.string().describe("Name of the MCP server."),
|
|
25
|
+
tool_name: z.string().describe("Name of the tool to inspect.")
|
|
26
|
+
});
|
|
27
|
+
var getToolOutputSchemaSchema = z.object({
|
|
28
|
+
mcp_server: z.string().describe("Name of the MCP server."),
|
|
29
|
+
tool_name: z.string().describe("Name of the tool to get output schema for.")
|
|
30
|
+
});
|
|
31
|
+
var callToolSchema = z.object({
|
|
32
|
+
mcp_server: z.string().describe("Name of the MCP server."),
|
|
33
|
+
tool_name: z.string().describe("Name of the tool to call."),
|
|
34
|
+
input: z.record(z.string(), z.unknown()).default({}).describe("Arguments to pass to the tool.")
|
|
35
|
+
});
|
|
36
|
+
function isResolvedServerTools(result) {
|
|
37
|
+
return "tools" in result;
|
|
38
|
+
}
|
|
39
|
+
var DeferredTool = class extends LocalToolMCP {
|
|
40
|
+
name = DEFERRED_TOOLS_SERVER_ID;
|
|
41
|
+
displayName = "DeferredTools";
|
|
42
|
+
description = "Deferred tool loading for user MCP servers";
|
|
43
|
+
serverMap;
|
|
44
|
+
tools;
|
|
45
|
+
logger;
|
|
46
|
+
constructor(servers, options) {
|
|
47
|
+
super({ tracing: options.tracing });
|
|
48
|
+
this.logger = options.logger.child({ module: "DeferredTool" });
|
|
49
|
+
this.serverMap = new Map(servers.map((s) => [s.name, s]));
|
|
50
|
+
this.tools = this.buildTools();
|
|
51
|
+
}
|
|
52
|
+
buildInstruction(builder) {
|
|
53
|
+
const servers = [...this.serverMap.values()];
|
|
54
|
+
const deferredServers = servers.filter((s) => !s.preload);
|
|
55
|
+
if (deferredServers.length === 0) return;
|
|
56
|
+
const deferredList = deferredServers.map((s) => s.description ? `- ${s.name}: "${s.description.slice(0, MAX_DESCRIPTION_LENGTH)}"` : `- ${s.name}`).join("\n");
|
|
57
|
+
builder.addSection(
|
|
58
|
+
DEFERRED_TOOLS_INSTRUCTION,
|
|
59
|
+
dedent`
|
|
60
|
+
The following MCP servers have deferred tool loading. Their tools are NOT pre-loaded.
|
|
61
|
+
${deferredList}
|
|
62
|
+
|
|
63
|
+
The Agent MUST use ${LIST_TOOLS_NAME} and ${GET_TOOL_INFO_NAME} to discover tools before calling them.`
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
getTools() {
|
|
67
|
+
return this.tools;
|
|
68
|
+
}
|
|
69
|
+
async toolCallInfo(params, resolveUnderlyingTool) {
|
|
70
|
+
if (params.name !== CALL_TOOL_NAME) {
|
|
71
|
+
return super.toolCallInfo(params, resolveUnderlyingTool);
|
|
72
|
+
}
|
|
73
|
+
if (resolveUnderlyingTool === false) {
|
|
74
|
+
const base = await super.toolCallInfo(params, resolveUnderlyingTool);
|
|
75
|
+
return { ...base, is_deferred: true };
|
|
76
|
+
}
|
|
77
|
+
const parsed = callToolSchema.safeParse(params.arguments);
|
|
78
|
+
if (!parsed.success) {
|
|
79
|
+
this.logger.warn(`Failed to parse call_tool arguments`, {
|
|
80
|
+
tool: params.name,
|
|
81
|
+
errors: parsed.error.issues
|
|
82
|
+
});
|
|
83
|
+
return { ...await super.toolCallInfo(params), is_deferred: true };
|
|
84
|
+
}
|
|
85
|
+
const server = this.resolveServer(parsed.data.mcp_server);
|
|
86
|
+
if (!server) {
|
|
87
|
+
this.logger.warn(`Server not found for toolCallInfo`, {
|
|
88
|
+
mcpServer: parsed.data.mcp_server,
|
|
89
|
+
toolName: parsed.data.tool_name,
|
|
90
|
+
availableServers: [...this.serverMap.keys()]
|
|
91
|
+
});
|
|
92
|
+
return { ...await super.toolCallInfo(params), is_deferred: true };
|
|
93
|
+
}
|
|
94
|
+
const underlying = await server.toolCallInfo({
|
|
95
|
+
name: parsed.data.tool_name,
|
|
96
|
+
arguments: parsed.data.input
|
|
97
|
+
});
|
|
98
|
+
return { ...underlying, is_deferred: true };
|
|
99
|
+
}
|
|
100
|
+
resolveServer(name) {
|
|
101
|
+
return this.serverMap.get(name);
|
|
102
|
+
}
|
|
103
|
+
async resolveServerTools(mcpServer) {
|
|
104
|
+
const server = this.resolveServer(mcpServer);
|
|
105
|
+
if (!server) {
|
|
106
|
+
return toolResultResponse({
|
|
107
|
+
text: JSON.stringify({ error: `MCP server '${mcpServer}' not found` }),
|
|
108
|
+
isError: true
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
const listResponse = await server.listTools();
|
|
112
|
+
if (isAuthRequired(listResponse)) {
|
|
113
|
+
return listResponse;
|
|
114
|
+
}
|
|
115
|
+
const { result, ...metadata } = listResponse;
|
|
116
|
+
return { server, tools: result.tools, metadata };
|
|
117
|
+
}
|
|
118
|
+
buildTools() {
|
|
119
|
+
return [this.buildListTools(), this.buildGetToolInfo(), this.buildGetToolOutputSchema(), this.buildCallTool()];
|
|
120
|
+
}
|
|
121
|
+
buildListTools() {
|
|
122
|
+
return defineTool({
|
|
123
|
+
name: LIST_TOOLS_NAME,
|
|
124
|
+
description: dedent`
|
|
125
|
+
List tool names available on an MCP server.
|
|
126
|
+
Returns tool names only — use ${GET_TOOL_INFO_NAME} to get full details before calling a tool.`,
|
|
127
|
+
schema: listToolsSchema,
|
|
128
|
+
handler: async (input) => {
|
|
129
|
+
try {
|
|
130
|
+
const resolved = await this.resolveServerTools(input.mcp_server);
|
|
131
|
+
if (!isResolvedServerTools(resolved)) return resolved;
|
|
132
|
+
const { server, tools, metadata } = resolved;
|
|
133
|
+
return toolResultResponse({
|
|
134
|
+
text: `${server.name}:
|
|
135
|
+
${tools.map((t) => t.name).join(", ")}`,
|
|
136
|
+
overrides: metadata
|
|
137
|
+
});
|
|
138
|
+
} catch (error) {
|
|
139
|
+
this.logger.error("list_tools failed", {
|
|
140
|
+
...extractErrorLogFields(error),
|
|
141
|
+
mcpServer: input.mcp_server
|
|
142
|
+
});
|
|
143
|
+
return toolResultResponse({
|
|
144
|
+
text: JSON.stringify({ error: `Failed to list tools for '${input.mcp_server}'.` }),
|
|
145
|
+
isError: true
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
buildGetToolInfo() {
|
|
152
|
+
return defineTool({
|
|
153
|
+
name: GET_TOOL_INFO_NAME,
|
|
154
|
+
description: dedent`
|
|
155
|
+
Get description, inputSchema and outputSchema for a specific tool on an MCP server.
|
|
156
|
+
If outputSchema is null, it will NOT be present in ${GET_TOOL_OUTPUT_SCHEMA_NAME} as well.
|
|
157
|
+
The Agent MUST call ${LIST_TOOLS_NAME} first to know which tools are available.`,
|
|
158
|
+
schema: getToolInfoSchema,
|
|
159
|
+
handler: async (input) => {
|
|
160
|
+
try {
|
|
161
|
+
const resolved = await this.resolveServerTools(input.mcp_server);
|
|
162
|
+
if (!isResolvedServerTools(resolved)) return resolved;
|
|
163
|
+
const { tools, metadata } = resolved;
|
|
164
|
+
const tool = tools.find((t) => t.name === input.tool_name);
|
|
165
|
+
if (!tool) {
|
|
166
|
+
return toolResultResponse({
|
|
167
|
+
text: JSON.stringify({ error: `Tool '${input.tool_name}' not found on server '${input.mcp_server}'` }),
|
|
168
|
+
overrides: metadata,
|
|
169
|
+
isError: true
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
return toolResultResponse({
|
|
173
|
+
text: JSON.stringify({
|
|
174
|
+
description: tool.description,
|
|
175
|
+
inputSchema: tool.inputSchema,
|
|
176
|
+
outputSchema: tool.outputSchema ?? null
|
|
177
|
+
}),
|
|
178
|
+
overrides: metadata
|
|
179
|
+
});
|
|
180
|
+
} catch (error) {
|
|
181
|
+
this.logger.error("get_tool_info failed", {
|
|
182
|
+
...extractErrorLogFields(error),
|
|
183
|
+
mcpServer: input.mcp_server,
|
|
184
|
+
toolName: input.tool_name
|
|
185
|
+
});
|
|
186
|
+
return toolResultResponse({
|
|
187
|
+
text: JSON.stringify({
|
|
188
|
+
error: `Failed to get tool info: ${error instanceof Error ? error.message : "unknown"}`
|
|
189
|
+
}),
|
|
190
|
+
isError: true
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
buildGetToolOutputSchema() {
|
|
197
|
+
return defineTool({
|
|
198
|
+
name: GET_TOOL_OUTPUT_SCHEMA_NAME,
|
|
199
|
+
description: dedent`
|
|
200
|
+
Get the outputSchema for a specific tool on an MCP server.
|
|
201
|
+
The Agent MUST not call ${GET_TOOL_OUTPUT_SCHEMA_NAME} and ${GET_TOOL_INFO_NAME} for the same tool.
|
|
202
|
+
The Agent MUST either call ${GET_TOOL_OUTPUT_SCHEMA_NAME} or ${GET_TOOL_INFO_NAME} before entering Code Mode.
|
|
203
|
+
The Agent must NOT assume the structure of a tool's response from its name or description alone.`,
|
|
204
|
+
schema: getToolOutputSchemaSchema,
|
|
205
|
+
handler: async (input) => {
|
|
206
|
+
try {
|
|
207
|
+
const resolved = await this.resolveServerTools(input.mcp_server);
|
|
208
|
+
if (!isResolvedServerTools(resolved)) return resolved;
|
|
209
|
+
const { tools, metadata } = resolved;
|
|
210
|
+
const tool = tools.find((t) => t.name === input.tool_name);
|
|
211
|
+
if (!tool) {
|
|
212
|
+
return toolResultResponse({
|
|
213
|
+
text: JSON.stringify({ error: `Tool '${input.tool_name}' not found on server '${input.mcp_server}'` }),
|
|
214
|
+
overrides: metadata,
|
|
215
|
+
isError: true
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
return toolResultResponse({
|
|
219
|
+
text: JSON.stringify({
|
|
220
|
+
outputSchema: tool.outputSchema ?? null
|
|
221
|
+
}),
|
|
222
|
+
overrides: metadata
|
|
223
|
+
});
|
|
224
|
+
} catch (error) {
|
|
225
|
+
this.logger.error("get_tool_output_schema failed", {
|
|
226
|
+
...extractErrorLogFields(error),
|
|
227
|
+
mcpServer: input.mcp_server,
|
|
228
|
+
toolName: input.tool_name
|
|
229
|
+
});
|
|
230
|
+
return toolResultResponse({
|
|
231
|
+
text: JSON.stringify({
|
|
232
|
+
error: `Failed to get output schema: ${error instanceof Error ? error.message : "unknown"}`
|
|
233
|
+
}),
|
|
234
|
+
isError: true
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
buildCallTool() {
|
|
241
|
+
return defineTool({
|
|
242
|
+
name: CALL_TOOL_NAME,
|
|
243
|
+
description: dedent`
|
|
244
|
+
Call a tool on an MCP server.
|
|
245
|
+
The Agent MUST call ${LIST_TOOLS_NAME} and ${GET_TOOL_INFO_NAME} before calling a tool.`,
|
|
246
|
+
schema: callToolSchema,
|
|
247
|
+
handler: async (input, approvalDecision) => {
|
|
248
|
+
const server = this.resolveServer(input.mcp_server);
|
|
249
|
+
if (!server) {
|
|
250
|
+
return toolResultResponse({
|
|
251
|
+
text: JSON.stringify({ error: `MCP server '${input.mcp_server}' not found` }),
|
|
252
|
+
isError: true
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
try {
|
|
256
|
+
const response = await server.callTool({ name: input.tool_name, arguments: input.input }, approvalDecision);
|
|
257
|
+
if (isAuthRequired(response)) {
|
|
258
|
+
return response;
|
|
259
|
+
}
|
|
260
|
+
if (isApprovalRequiredResponse(response)) return response;
|
|
261
|
+
if (!isCallToolResponseResult(response)) {
|
|
262
|
+
throw new Error("Tool call returned an unexpected sub-agent response");
|
|
263
|
+
}
|
|
264
|
+
return response;
|
|
265
|
+
} catch (error) {
|
|
266
|
+
this.logger.error("call_tool failed", {
|
|
267
|
+
...extractErrorLogFields(error),
|
|
268
|
+
mcpServer: input.mcp_server,
|
|
269
|
+
toolName: input.tool_name
|
|
270
|
+
});
|
|
271
|
+
return toolResultResponse({
|
|
272
|
+
text: JSON.stringify({ error: `Tool call failed: ${error instanceof Error ? error.message : "unknown"}` }),
|
|
273
|
+
isError: true
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
export {
|
|
281
|
+
DEFERRED_TOOLS_SERVER_ID,
|
|
282
|
+
DeferredTool,
|
|
283
|
+
GET_TOOL_INFO_NAME,
|
|
284
|
+
GET_TOOL_OUTPUT_SCHEMA_NAME,
|
|
285
|
+
LIST_TOOLS_NAME
|
|
286
|
+
};
|
|
287
|
+
//# sourceMappingURL=DeferredTool.mjs.map
|