@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,469 @@
|
|
|
1
|
+
// src/agent-session/TurnHandle.ts
|
|
2
|
+
import { AgentHarnessError } from "../core/errors.mjs";
|
|
3
|
+
import { EventType as HarnessEventType, newEventId } from "../core/events/schema.mjs";
|
|
4
|
+
import {
|
|
5
|
+
InternalEventType
|
|
6
|
+
} from "../core/runtime/AgentThread.types.mjs";
|
|
7
|
+
import { getEmptyCurrentContextUsage } from "../core/runtime/contextUsage.mjs";
|
|
8
|
+
import { EventType } from "./schemas/events.mjs";
|
|
9
|
+
import {
|
|
10
|
+
CancellationReason
|
|
11
|
+
} from "./schemas/turn.mjs";
|
|
12
|
+
import { TurnNotRunningError } from "./store/SessionStoreErrors.mjs";
|
|
13
|
+
function cancellationReasonFromAbortReason(abortReason) {
|
|
14
|
+
if (abortReason === CancellationReason.ServerExecutionTimeout) {
|
|
15
|
+
return CancellationReason.ServerExecutionTimeout;
|
|
16
|
+
}
|
|
17
|
+
if (abortReason === CancellationReason.CancelledForNextTurn) {
|
|
18
|
+
return CancellationReason.CancelledForNextTurn;
|
|
19
|
+
}
|
|
20
|
+
if (abortReason === CancellationReason.Abandoned) {
|
|
21
|
+
return CancellationReason.Abandoned;
|
|
22
|
+
}
|
|
23
|
+
return CancellationReason.ClientCancelled;
|
|
24
|
+
}
|
|
25
|
+
function toThreadDoneEvent(event) {
|
|
26
|
+
const state = event.status === "error" ? { status: "error", error: event.error, ...event.output && { output: event.output } } : { status: "done", output: event.output };
|
|
27
|
+
return {
|
|
28
|
+
type: HarnessEventType.THREAD_DONE,
|
|
29
|
+
id: newEventId(),
|
|
30
|
+
created_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
31
|
+
parent: event.parent,
|
|
32
|
+
thread_id: event.thread_id,
|
|
33
|
+
title: event.title,
|
|
34
|
+
state
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function toMCPAuthRequiredEvent(event) {
|
|
38
|
+
return {
|
|
39
|
+
type: HarnessEventType.MCP_AUTH_REQUIRED,
|
|
40
|
+
id: event.id,
|
|
41
|
+
created_at: event.created_at,
|
|
42
|
+
thread_id: event.thread_id,
|
|
43
|
+
mcp_servers: event.mcp_servers.map(({ thread_ids, ...server }) => {
|
|
44
|
+
void thread_ids;
|
|
45
|
+
return server;
|
|
46
|
+
})
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function turnMetricsFromAgentThreadMetrics(metrics) {
|
|
50
|
+
return {
|
|
51
|
+
total_input_tokens: metrics.total_input_tokens,
|
|
52
|
+
total_output_tokens: metrics.total_output_tokens,
|
|
53
|
+
total_tokens: metrics.total_tokens,
|
|
54
|
+
total_cache_read_tokens: metrics.total_cache_read_tokens,
|
|
55
|
+
total_cache_write_tokens: metrics.total_cache_write_tokens,
|
|
56
|
+
total_reasoning_tokens: metrics.total_reasoning_tokens,
|
|
57
|
+
total_cost_in_usd: metrics.total_cost_in_usd
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
var TurnHandle = class _TurnHandle {
|
|
61
|
+
store;
|
|
62
|
+
turn;
|
|
63
|
+
orchestrator;
|
|
64
|
+
resolver;
|
|
65
|
+
signal;
|
|
66
|
+
streamStarted = false;
|
|
67
|
+
constructor(options) {
|
|
68
|
+
this.store = options.store;
|
|
69
|
+
this.turn = options.turn;
|
|
70
|
+
this.orchestrator = options.orchestrator;
|
|
71
|
+
this.resolver = options.resolver;
|
|
72
|
+
this.signal = options.signal;
|
|
73
|
+
}
|
|
74
|
+
/** Store-only handle (e.g. from {@link SessionHandle.getTurn}) — stream() is not available. */
|
|
75
|
+
static fromRecord(options) {
|
|
76
|
+
return new _TurnHandle(options);
|
|
77
|
+
}
|
|
78
|
+
static async get(options) {
|
|
79
|
+
const turn = await options.store.getTurn({
|
|
80
|
+
session_id: options.session_id,
|
|
81
|
+
turn_id: options.turn_id
|
|
82
|
+
});
|
|
83
|
+
if (!turn) {
|
|
84
|
+
return void 0;
|
|
85
|
+
}
|
|
86
|
+
return _TurnHandle.fromRecord({
|
|
87
|
+
store: options.store,
|
|
88
|
+
turn
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
get id() {
|
|
92
|
+
return this.turn.turn_id;
|
|
93
|
+
}
|
|
94
|
+
get session_id() {
|
|
95
|
+
return this.turn.session_id;
|
|
96
|
+
}
|
|
97
|
+
get previous_turn_id() {
|
|
98
|
+
return this.turn.previous_turn_id;
|
|
99
|
+
}
|
|
100
|
+
get input() {
|
|
101
|
+
return this.turn.input;
|
|
102
|
+
}
|
|
103
|
+
get state() {
|
|
104
|
+
return this.turn.state;
|
|
105
|
+
}
|
|
106
|
+
get created_at() {
|
|
107
|
+
return this.turn.created_at;
|
|
108
|
+
}
|
|
109
|
+
get custom() {
|
|
110
|
+
return this.turn.custom;
|
|
111
|
+
}
|
|
112
|
+
get record() {
|
|
113
|
+
return this.turn;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Executes the turn. Single consumer, callable ONCE — a second call throws:
|
|
117
|
+
* this generator IS the execution (persist-before-yield). Execute-only: the
|
|
118
|
+
* input was already sent and validated in run(); nothing is sent here.
|
|
119
|
+
* Sole terminal writer — done/cancelled/error is written to the store from
|
|
120
|
+
* inside this generator; honors the AbortSignal passed to run(). On every
|
|
121
|
+
* exit path the resolver is closed best-effort in a finally, after the
|
|
122
|
+
* terminal write.
|
|
123
|
+
*
|
|
124
|
+
* Two consumption patterns (both caller-side; this method is identical for both):
|
|
125
|
+
*
|
|
126
|
+
* // STREAMING — pipe events out as they happen (e.g. SSE):
|
|
127
|
+
* for await (const e of turn.stream()) yield sse(e);
|
|
128
|
+
*
|
|
129
|
+
* // NON-STREAMING — drain in background, respond immediately with the
|
|
130
|
+
* // running turn. The caller owns the active-turn registry, the .catch
|
|
131
|
+
* // (store-write failures reject the drain; agent errors do NOT — they
|
|
132
|
+
* // become terminal 'error' events inside), and graceful shutdown.
|
|
133
|
+
* const drain = (async () => { for await (const _ of turn.stream()); })()
|
|
134
|
+
* .catch(err => logger.error('turn drain failed', err));
|
|
135
|
+
* activeTurns.set(turn.id, { controller, drain });
|
|
136
|
+
* drain.finally(() => activeTurns.delete(turn.id));
|
|
137
|
+
* return turnCreatedResponse(turn);
|
|
138
|
+
*
|
|
139
|
+
* Yields the delta-inclusive streaming union: deltas pass through to the
|
|
140
|
+
* consumer but are NEVER persisted. Events carry no sequence_number; yield
|
|
141
|
+
* order ≡ persist order (single sequential generator), so callers that need
|
|
142
|
+
* numbering (e.g. SSE resume) stamp it at their own transport boundary.
|
|
143
|
+
*/
|
|
144
|
+
async *stream() {
|
|
145
|
+
if (this.streamStarted) {
|
|
146
|
+
throw new Error("TurnHandle.stream() is single-use and was already called");
|
|
147
|
+
}
|
|
148
|
+
this.streamStarted = true;
|
|
149
|
+
const orchestrator = this.orchestrator;
|
|
150
|
+
const resolver = this.resolver;
|
|
151
|
+
const signal = this.signal;
|
|
152
|
+
if (!orchestrator || !resolver || !signal) {
|
|
153
|
+
throw new Error("TurnHandle.stream() is only available on turns returned from SessionHandle.createTurn()");
|
|
154
|
+
}
|
|
155
|
+
let caughtError;
|
|
156
|
+
let frozenByStore = false;
|
|
157
|
+
let executeResult;
|
|
158
|
+
let generator;
|
|
159
|
+
try {
|
|
160
|
+
const turnCreated = {
|
|
161
|
+
type: EventType.TURN_CREATED,
|
|
162
|
+
id: newEventId(),
|
|
163
|
+
turn_id: this.turn.turn_id,
|
|
164
|
+
previous_turn_id: this.turn.previous_turn_id,
|
|
165
|
+
...this.turn.input.length > 0 ? { input: this.turn.input } : {},
|
|
166
|
+
state: { status: "running" },
|
|
167
|
+
created_at: this.turn.created_at.toISOString(),
|
|
168
|
+
thread_id: null
|
|
169
|
+
};
|
|
170
|
+
await this.store.appendToEvents({
|
|
171
|
+
session_id: this.turn.session_id,
|
|
172
|
+
turn_id: this.turn.turn_id,
|
|
173
|
+
events: [turnCreated]
|
|
174
|
+
});
|
|
175
|
+
yield turnCreated;
|
|
176
|
+
generator = orchestrator.execute({ signal });
|
|
177
|
+
let iterResult = await generator.next();
|
|
178
|
+
while (!iterResult.done) {
|
|
179
|
+
const event = iterResult.value;
|
|
180
|
+
try {
|
|
181
|
+
const yielded = await this.persistExecutionEvent(event);
|
|
182
|
+
if (yielded) {
|
|
183
|
+
yield yielded;
|
|
184
|
+
}
|
|
185
|
+
} catch (error) {
|
|
186
|
+
if (error instanceof TurnNotRunningError) {
|
|
187
|
+
frozenByStore = true;
|
|
188
|
+
const emptyResult = {
|
|
189
|
+
output: null,
|
|
190
|
+
required_actions: []
|
|
191
|
+
};
|
|
192
|
+
await generator.return(emptyResult);
|
|
193
|
+
generator = void 0;
|
|
194
|
+
const updatedAt = /* @__PURE__ */ new Date();
|
|
195
|
+
const createdAtIso = updatedAt.toISOString();
|
|
196
|
+
const state = {
|
|
197
|
+
...error.state,
|
|
198
|
+
metrics: turnMetricsFromAgentThreadMetrics(orchestrator.getMetrics())
|
|
199
|
+
};
|
|
200
|
+
this.turn = { ...this.turn, state, updated_at: updatedAt };
|
|
201
|
+
yield {
|
|
202
|
+
type: EventType.TURN_DONE,
|
|
203
|
+
id: newEventId(),
|
|
204
|
+
created_at: createdAtIso,
|
|
205
|
+
state,
|
|
206
|
+
thread_id: null
|
|
207
|
+
};
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
throw error;
|
|
211
|
+
}
|
|
212
|
+
iterResult = await generator.next();
|
|
213
|
+
}
|
|
214
|
+
executeResult = iterResult.value;
|
|
215
|
+
} catch (error) {
|
|
216
|
+
caughtError = error instanceof Error ? error : new Error(String(error));
|
|
217
|
+
} finally {
|
|
218
|
+
if (generator) {
|
|
219
|
+
const emptyResult = {
|
|
220
|
+
output: null,
|
|
221
|
+
required_actions: []
|
|
222
|
+
};
|
|
223
|
+
await generator.return(emptyResult);
|
|
224
|
+
}
|
|
225
|
+
const updatedAt = /* @__PURE__ */ new Date();
|
|
226
|
+
const createdAtIso = updatedAt.toISOString();
|
|
227
|
+
const metrics = turnMetricsFromAgentThreadMetrics(orchestrator.getMetrics());
|
|
228
|
+
let terminalState;
|
|
229
|
+
if (signal.aborted) {
|
|
230
|
+
terminalState = {
|
|
231
|
+
status: "cancelled",
|
|
232
|
+
reason: cancellationReasonFromAbortReason(signal.reason),
|
|
233
|
+
completed_at: createdAtIso,
|
|
234
|
+
metrics
|
|
235
|
+
};
|
|
236
|
+
} else if (caughtError) {
|
|
237
|
+
terminalState = {
|
|
238
|
+
status: "error",
|
|
239
|
+
message: caughtError.message,
|
|
240
|
+
completed_at: createdAtIso,
|
|
241
|
+
metrics
|
|
242
|
+
};
|
|
243
|
+
} else if (executeResult?.root_agent_error) {
|
|
244
|
+
terminalState = {
|
|
245
|
+
status: "error",
|
|
246
|
+
message: executeResult.root_agent_error.error,
|
|
247
|
+
completed_at: createdAtIso,
|
|
248
|
+
metrics
|
|
249
|
+
};
|
|
250
|
+
} else if (executeResult === void 0) {
|
|
251
|
+
terminalState = {
|
|
252
|
+
status: "cancelled",
|
|
253
|
+
reason: CancellationReason.ClientCancelled,
|
|
254
|
+
completed_at: createdAtIso,
|
|
255
|
+
metrics
|
|
256
|
+
};
|
|
257
|
+
} else {
|
|
258
|
+
terminalState = {
|
|
259
|
+
status: "done",
|
|
260
|
+
output: executeResult.output,
|
|
261
|
+
required_actions: executeResult.required_actions,
|
|
262
|
+
completed_at: createdAtIso,
|
|
263
|
+
metrics
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
const turnDone = {
|
|
267
|
+
type: EventType.TURN_DONE,
|
|
268
|
+
id: newEventId(),
|
|
269
|
+
created_at: createdAtIso,
|
|
270
|
+
state: terminalState,
|
|
271
|
+
thread_id: null
|
|
272
|
+
};
|
|
273
|
+
if (!frozenByStore) {
|
|
274
|
+
try {
|
|
275
|
+
await this.store.updateTurnState({
|
|
276
|
+
session_id: this.turn.session_id,
|
|
277
|
+
turn_id: this.turn.turn_id,
|
|
278
|
+
state: terminalState,
|
|
279
|
+
turn_done_event: turnDone
|
|
280
|
+
});
|
|
281
|
+
this.turn = { ...this.turn, state: terminalState, updated_at: updatedAt };
|
|
282
|
+
} catch (persistError) {
|
|
283
|
+
if (persistError instanceof TurnNotRunningError) {
|
|
284
|
+
const state = { ...persistError.state, metrics };
|
|
285
|
+
this.turn = { ...this.turn, state, updated_at: updatedAt };
|
|
286
|
+
await resolver.close().catch(() => {
|
|
287
|
+
});
|
|
288
|
+
yield {
|
|
289
|
+
type: EventType.TURN_DONE,
|
|
290
|
+
id: newEventId(),
|
|
291
|
+
created_at: createdAtIso,
|
|
292
|
+
state,
|
|
293
|
+
thread_id: null
|
|
294
|
+
};
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
await resolver.close().catch(() => {
|
|
298
|
+
});
|
|
299
|
+
throw persistError;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
await resolver.close().catch((err) => {
|
|
303
|
+
resolver.logger.warn("TurnResourceResolver.close() failed", { err });
|
|
304
|
+
});
|
|
305
|
+
if (!frozenByStore) {
|
|
306
|
+
yield turnDone;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
/** Paginated read of this turn's persisted events. */
|
|
311
|
+
async listEvents(input) {
|
|
312
|
+
return this.store.listTurnEvents({
|
|
313
|
+
session_id: this.turn.session_id,
|
|
314
|
+
turn_id: this.turn.turn_id,
|
|
315
|
+
limit: input.limit,
|
|
316
|
+
page_token: input.page_token,
|
|
317
|
+
order: input.order
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Persist side effects for one execution event; return a streaming yield when
|
|
322
|
+
* the event should be emitted to the consumer (null = side-effect only / skip).
|
|
323
|
+
*/
|
|
324
|
+
async persistExecutionEvent(event) {
|
|
325
|
+
const scope = {
|
|
326
|
+
session_id: this.turn.session_id,
|
|
327
|
+
turn_id: this.turn.turn_id
|
|
328
|
+
};
|
|
329
|
+
switch (event.type) {
|
|
330
|
+
case HarnessEventType.MODEL_MESSAGE:
|
|
331
|
+
case HarnessEventType.MODEL_MESSAGE_DELTA:
|
|
332
|
+
return event;
|
|
333
|
+
case HarnessEventType.TOOL_RESPONSE:
|
|
334
|
+
await this.store.appendToEvents({
|
|
335
|
+
...scope,
|
|
336
|
+
events: [event]
|
|
337
|
+
});
|
|
338
|
+
return event;
|
|
339
|
+
case InternalEventType.AGENT_CREATE_SUBAGENT:
|
|
340
|
+
return null;
|
|
341
|
+
case InternalEventType.CAPABILITY_STATE: {
|
|
342
|
+
const state = event.state;
|
|
343
|
+
if (state === void 0) {
|
|
344
|
+
throw new AgentHarnessError(
|
|
345
|
+
"capability_state_error",
|
|
346
|
+
`CAPABILITY_STATE for key '${event.key}' must not be undefined \u2014 use null to clear durable state`
|
|
347
|
+
);
|
|
348
|
+
}
|
|
349
|
+
await this.store.patchThreadCapabilityState({
|
|
350
|
+
...scope,
|
|
351
|
+
thread_id: event.thread_id,
|
|
352
|
+
key: event.key,
|
|
353
|
+
state: event.state
|
|
354
|
+
});
|
|
355
|
+
return null;
|
|
356
|
+
}
|
|
357
|
+
case HarnessEventType.AGENT_CONTEXT_OVERWRITE: {
|
|
358
|
+
await this.store.overwriteThreadContext({ ...scope, event });
|
|
359
|
+
return null;
|
|
360
|
+
}
|
|
361
|
+
case InternalEventType.AGENT_CONTEXT_APPEND: {
|
|
362
|
+
await this.store.appendToThreadContext({
|
|
363
|
+
...scope,
|
|
364
|
+
thread_id: event.thread_id,
|
|
365
|
+
context: event.context,
|
|
366
|
+
current_context_usage: event.current_context_usage ?? null,
|
|
367
|
+
completion: event.completion ?? null
|
|
368
|
+
});
|
|
369
|
+
if (event.output.length > 0) {
|
|
370
|
+
await this.store.appendToEvents({
|
|
371
|
+
...scope,
|
|
372
|
+
events: event.output
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
return null;
|
|
376
|
+
}
|
|
377
|
+
case InternalEventType.AGENT_DONE: {
|
|
378
|
+
if (!event.parent) {
|
|
379
|
+
return null;
|
|
380
|
+
}
|
|
381
|
+
const threadDone = toThreadDoneEvent(event);
|
|
382
|
+
await this.store.removeThreads({
|
|
383
|
+
...scope,
|
|
384
|
+
thread_ids: [event.thread_id]
|
|
385
|
+
});
|
|
386
|
+
await this.store.appendToEvents({
|
|
387
|
+
...scope,
|
|
388
|
+
events: [threadDone]
|
|
389
|
+
});
|
|
390
|
+
return threadDone;
|
|
391
|
+
}
|
|
392
|
+
case HarnessEventType.THREAD_CREATED: {
|
|
393
|
+
await this.store.addThreads({
|
|
394
|
+
...scope,
|
|
395
|
+
threads: [
|
|
396
|
+
{
|
|
397
|
+
thread_id: event.thread_id,
|
|
398
|
+
parent: event.parent,
|
|
399
|
+
agent_info: event.agent_info,
|
|
400
|
+
context: [],
|
|
401
|
+
current_context_usage: getEmptyCurrentContextUsage(),
|
|
402
|
+
completion: null,
|
|
403
|
+
capability_state: null
|
|
404
|
+
}
|
|
405
|
+
]
|
|
406
|
+
});
|
|
407
|
+
await this.store.appendToEvents({
|
|
408
|
+
...scope,
|
|
409
|
+
events: [event]
|
|
410
|
+
});
|
|
411
|
+
return event;
|
|
412
|
+
}
|
|
413
|
+
case InternalEventType.MCP_AUTH_REQUIRED: {
|
|
414
|
+
const authEvent = toMCPAuthRequiredEvent(event);
|
|
415
|
+
await this.store.appendToEvents({
|
|
416
|
+
...scope,
|
|
417
|
+
events: [authEvent]
|
|
418
|
+
});
|
|
419
|
+
return authEvent;
|
|
420
|
+
}
|
|
421
|
+
case HarnessEventType.MCP_INITIALIZE: {
|
|
422
|
+
await this.store.patchMCPServers({
|
|
423
|
+
...scope,
|
|
424
|
+
mcp_servers: event.mcp_servers.map((initInfo) => ({
|
|
425
|
+
id: initInfo.id,
|
|
426
|
+
name: initInfo.name,
|
|
427
|
+
session_id: initInfo.session_id,
|
|
428
|
+
transport_type: initInfo.transport_type
|
|
429
|
+
}))
|
|
430
|
+
});
|
|
431
|
+
await this.store.appendToEvents({
|
|
432
|
+
...scope,
|
|
433
|
+
events: [event]
|
|
434
|
+
});
|
|
435
|
+
return event;
|
|
436
|
+
}
|
|
437
|
+
case HarnessEventType.SANDBOX_CREATED: {
|
|
438
|
+
await this.store.patchSandboxInfo({
|
|
439
|
+
...scope,
|
|
440
|
+
sandbox_info: { sandbox_id: event.sandbox_id }
|
|
441
|
+
});
|
|
442
|
+
await this.store.appendToEvents({
|
|
443
|
+
...scope,
|
|
444
|
+
events: [event]
|
|
445
|
+
});
|
|
446
|
+
return event;
|
|
447
|
+
}
|
|
448
|
+
case HarnessEventType.TOOL_APPROVAL_REQUIRED:
|
|
449
|
+
case HarnessEventType.TOOL_RESPONSE_REQUIRED: {
|
|
450
|
+
await this.store.appendToEvents({
|
|
451
|
+
...scope,
|
|
452
|
+
events: [event]
|
|
453
|
+
});
|
|
454
|
+
return event;
|
|
455
|
+
}
|
|
456
|
+
default: {
|
|
457
|
+
await this.store.appendToEvents({
|
|
458
|
+
...scope,
|
|
459
|
+
events: [event]
|
|
460
|
+
});
|
|
461
|
+
return event;
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
};
|
|
466
|
+
export {
|
|
467
|
+
TurnHandle
|
|
468
|
+
};
|
|
469
|
+
//# sourceMappingURL=TurnHandle.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/agent-session/TurnHandle.ts"],"sourcesContent":["/**\n * Durable turn handle. {@link TurnHandle.stream} is execute-once (persist-before-yield).\n */\nimport { AgentHarnessError } from '../core/errors';\nimport type { MCPAuthRequiredEvent, ModelMessageDeltaEvent, ThreadDoneEvent } from '../core/events/schema';\nimport { EventType as HarnessEventType, newEventId } from '../core/events/schema';\nimport {\n InternalEventType,\n type AgentThreadExecutionEvent,\n type AgentThreadExecutionResult,\n type InternalMCPAuthRequiredEvent,\n type InternalThreadDoneEvent,\n} from '../core/runtime/AgentThread.types';\nimport type { AgentThreadOrchestrator } from '../core/runtime/AgentThreadOrchestrator';\nimport { getEmptyCurrentContextUsage } from '../core/runtime/contextUsage';\nimport type { AgentThreadMetrics } from '../core/runtime/metrics';\nimport type { ITurnResourceResolver } from './ITurnResourceResolver';\nimport type { TurnRecord } from './models/TurnRecord';\nimport { EventType, type PersistedTurnEvent, type TurnCreatedEvent, type TurnDoneEvent } from './schemas/events';\nimport type { TokenPagination } from './schemas/pagination';\nimport {\n CancellationReason,\n type TerminalTurnState,\n type TurnInputItem,\n type TurnMetrics,\n type TurnState,\n} from './schemas/turn';\nimport type { ISessionStore } from './store/ISessionStore';\nimport { TurnNotRunningError } from './store/SessionStoreErrors';\n\n/** Streaming yield union — deltas pass through; never persisted. No sequence_number. */\nexport type TurnStreamingEvent = PersistedTurnEvent | ModelMessageDeltaEvent;\n\nfunction cancellationReasonFromAbortReason(abortReason: unknown): CancellationReason {\n if (abortReason === CancellationReason.ServerExecutionTimeout) {\n return CancellationReason.ServerExecutionTimeout;\n }\n if (abortReason === CancellationReason.CancelledForNextTurn) {\n return CancellationReason.CancelledForNextTurn;\n }\n if (abortReason === CancellationReason.Abandoned) {\n return CancellationReason.Abandoned;\n }\n return CancellationReason.ClientCancelled;\n}\n\nfunction toThreadDoneEvent(event: InternalThreadDoneEvent): ThreadDoneEvent {\n const state =\n event.status === 'error'\n ? { status: 'error' as const, error: event.error, ...(event.output && { output: event.output }) }\n : { status: 'done' as const, output: event.output };\n return {\n type: HarnessEventType.THREAD_DONE,\n id: newEventId(),\n created_at: new Date().toISOString(),\n parent: event.parent,\n thread_id: event.thread_id,\n title: event.title,\n state,\n };\n}\n\nfunction toMCPAuthRequiredEvent(event: InternalMCPAuthRequiredEvent): MCPAuthRequiredEvent {\n return {\n type: HarnessEventType.MCP_AUTH_REQUIRED,\n id: event.id,\n created_at: event.created_at,\n thread_id: event.thread_id,\n mcp_servers: event.mcp_servers.map(({ thread_ids, ...server }) => {\n void thread_ids;\n return server;\n }),\n };\n}\n\nfunction turnMetricsFromAgentThreadMetrics(metrics: AgentThreadMetrics): TurnMetrics {\n return {\n total_input_tokens: metrics.total_input_tokens,\n total_output_tokens: metrics.total_output_tokens,\n total_tokens: metrics.total_tokens,\n total_cache_read_tokens: metrics.total_cache_read_tokens,\n total_cache_write_tokens: metrics.total_cache_write_tokens,\n total_reasoning_tokens: metrics.total_reasoning_tokens,\n total_cost_in_usd: metrics.total_cost_in_usd,\n };\n}\n\nexport class TurnHandle<TTurnCustom extends object = Record<string, never>> {\n private readonly store: ISessionStore<object, TTurnCustom>;\n private turn: TurnRecord<TTurnCustom>;\n private readonly orchestrator: AgentThreadOrchestrator | undefined;\n private readonly resolver: ITurnResourceResolver<TTurnCustom> | undefined;\n private readonly signal: AbortSignal | undefined;\n private streamStarted = false;\n\n constructor(options: {\n store: ISessionStore<object, TTurnCustom>;\n turn: TurnRecord<TTurnCustom>;\n orchestrator?: AgentThreadOrchestrator | undefined;\n resolver?: ITurnResourceResolver<TTurnCustom> | undefined;\n signal?: AbortSignal | undefined;\n }) {\n this.store = options.store;\n this.turn = options.turn;\n this.orchestrator = options.orchestrator;\n this.resolver = options.resolver;\n this.signal = options.signal;\n }\n\n /** Store-only handle (e.g. from {@link SessionHandle.getTurn}) — stream() is not available. */\n static fromRecord<TCustom extends object = Record<string, never>>(options: {\n store: ISessionStore<object, TCustom>;\n turn: TurnRecord<TCustom>;\n }): TurnHandle<TCustom> {\n return new TurnHandle(options);\n }\n\n static async get<TCustom extends object = Record<string, never>>(options: {\n store: ISessionStore<object, TCustom>;\n session_id: string;\n turn_id: string;\n }): Promise<TurnHandle<TCustom> | undefined> {\n const turn = await options.store.getTurn({\n session_id: options.session_id,\n turn_id: options.turn_id,\n });\n if (!turn) {\n return undefined;\n }\n return TurnHandle.fromRecord({\n store: options.store,\n turn,\n });\n }\n\n get id(): string {\n return this.turn.turn_id;\n }\n\n get session_id(): string {\n return this.turn.session_id;\n }\n\n get previous_turn_id(): string | null {\n return this.turn.previous_turn_id;\n }\n\n get input(): TurnInputItem[] {\n return this.turn.input;\n }\n\n get state(): TurnState {\n return this.turn.state;\n }\n\n get created_at(): Date {\n return this.turn.created_at;\n }\n\n get custom(): TTurnCustom | null {\n return this.turn.custom;\n }\n\n get record(): TurnRecord<TTurnCustom> {\n return this.turn;\n }\n\n /**\n * Executes the turn. Single consumer, callable ONCE — a second call throws:\n * this generator IS the execution (persist-before-yield). Execute-only: the\n * input was already sent and validated in run(); nothing is sent here.\n * Sole terminal writer — done/cancelled/error is written to the store from\n * inside this generator; honors the AbortSignal passed to run(). On every\n * exit path the resolver is closed best-effort in a finally, after the\n * terminal write.\n *\n * Two consumption patterns (both caller-side; this method is identical for both):\n *\n * // STREAMING — pipe events out as they happen (e.g. SSE):\n * for await (const e of turn.stream()) yield sse(e);\n *\n * // NON-STREAMING — drain in background, respond immediately with the\n * // running turn. The caller owns the active-turn registry, the .catch\n * // (store-write failures reject the drain; agent errors do NOT — they\n * // become terminal 'error' events inside), and graceful shutdown.\n * const drain = (async () => { for await (const _ of turn.stream()); })()\n * .catch(err => logger.error('turn drain failed', err));\n * activeTurns.set(turn.id, { controller, drain });\n * drain.finally(() => activeTurns.delete(turn.id));\n * return turnCreatedResponse(turn);\n *\n * Yields the delta-inclusive streaming union: deltas pass through to the\n * consumer but are NEVER persisted. Events carry no sequence_number; yield\n * order ≡ persist order (single sequential generator), so callers that need\n * numbering (e.g. SSE resume) stamp it at their own transport boundary.\n */\n async *stream(): AsyncGenerator<TurnStreamingEvent> {\n if (this.streamStarted) {\n throw new Error('TurnHandle.stream() is single-use and was already called');\n }\n this.streamStarted = true;\n\n const orchestrator = this.orchestrator;\n const resolver = this.resolver;\n const signal = this.signal;\n if (!orchestrator || !resolver || !signal) {\n throw new Error('TurnHandle.stream() is only available on turns returned from SessionHandle.createTurn()');\n }\n\n let caughtError: Error | undefined;\n let frozenByStore = false;\n let executeResult: AgentThreadExecutionResult | undefined;\n let generator: AsyncGenerator<AgentThreadExecutionEvent, AgentThreadExecutionResult, unknown> | undefined;\n\n try {\n const turnCreated: TurnCreatedEvent = {\n type: EventType.TURN_CREATED,\n id: newEventId(),\n turn_id: this.turn.turn_id,\n previous_turn_id: this.turn.previous_turn_id,\n ...(this.turn.input.length > 0 ? { input: this.turn.input } : {}),\n state: { status: 'running' },\n created_at: this.turn.created_at.toISOString(),\n thread_id: null,\n };\n await this.store.appendToEvents({\n session_id: this.turn.session_id,\n turn_id: this.turn.turn_id,\n events: [turnCreated],\n });\n yield turnCreated;\n\n generator = orchestrator.execute({ signal });\n let iterResult = await generator.next();\n while (!iterResult.done) {\n const event = iterResult.value;\n try {\n const yielded = await this.persistExecutionEvent(event);\n if (yielded) {\n yield yielded;\n }\n } catch (error) {\n if (error instanceof TurnNotRunningError) {\n frozenByStore = true;\n const emptyResult: AgentThreadExecutionResult = {\n output: null,\n required_actions: [],\n };\n await generator.return(emptyResult);\n // Cleared so the finally block does not close the generator a second time.\n generator = undefined;\n const updatedAt = new Date();\n const createdAtIso = updatedAt.toISOString();\n const state: TerminalTurnState = {\n ...error.state,\n metrics: turnMetricsFromAgentThreadMetrics(orchestrator.getMetrics()),\n };\n this.turn = { ...this.turn, state, updated_at: updatedAt };\n yield {\n type: EventType.TURN_DONE,\n id: newEventId(),\n created_at: createdAtIso,\n state,\n thread_id: null,\n };\n return;\n }\n throw error;\n }\n iterResult = await generator.next();\n }\n executeResult = iterResult.value;\n } catch (error) {\n caughtError = error instanceof Error ? error : new Error(String(error));\n } finally {\n if (generator) {\n const emptyResult: AgentThreadExecutionResult = {\n output: null,\n required_actions: [],\n };\n await generator.return(emptyResult);\n }\n\n const updatedAt = new Date();\n const createdAtIso = updatedAt.toISOString();\n const metrics = turnMetricsFromAgentThreadMetrics(orchestrator.getMetrics());\n let terminalState: TerminalTurnState;\n if (signal.aborted) {\n terminalState = {\n status: 'cancelled',\n reason: cancellationReasonFromAbortReason(signal.reason),\n completed_at: createdAtIso,\n metrics,\n };\n } else if (caughtError) {\n terminalState = {\n status: 'error',\n message: caughtError.message,\n completed_at: createdAtIso,\n metrics,\n };\n } else if (executeResult?.root_agent_error) {\n terminalState = {\n status: 'error',\n message: executeResult.root_agent_error.error,\n completed_at: createdAtIso,\n metrics,\n };\n } else if (executeResult === undefined) {\n // Consumer abandoned the generator (break/return) without aborting —\n // no executeResult, no error, signal not aborted.\n terminalState = {\n status: 'cancelled',\n reason: CancellationReason.ClientCancelled,\n completed_at: createdAtIso,\n metrics,\n };\n } else {\n terminalState = {\n status: 'done',\n output: executeResult.output,\n required_actions: executeResult.required_actions,\n completed_at: createdAtIso,\n metrics,\n };\n }\n\n const turnDone: TurnDoneEvent = {\n type: EventType.TURN_DONE,\n id: newEventId(),\n created_at: createdAtIso,\n state: terminalState,\n thread_id: null,\n };\n\n if (!frozenByStore) {\n try {\n await this.store.updateTurnState({\n session_id: this.turn.session_id,\n turn_id: this.turn.turn_id,\n state: terminalState,\n turn_done_event: turnDone,\n });\n this.turn = { ...this.turn, state: terminalState, updated_at: updatedAt };\n } catch (persistError) {\n if (persistError instanceof TurnNotRunningError) {\n const state: TerminalTurnState = { ...persistError.state, metrics };\n this.turn = { ...this.turn, state, updated_at: updatedAt };\n await resolver.close().catch(() => {\n /* no-op */\n });\n yield {\n type: EventType.TURN_DONE,\n id: newEventId(),\n created_at: createdAtIso,\n state,\n thread_id: null,\n };\n // eslint-disable-next-line no-unsafe-finally -- deliberate: a concurrent freeze during the terminal write makes the store's state authoritative, so the stream ends here\n return;\n }\n // Store-write failures reject the stream (caller drain .catch).\n await resolver.close().catch(() => {\n /* no-op */\n });\n // eslint-disable-next-line no-unsafe-finally -- deliberate: the terminal-state write runs in finally and its failure must reject the stream\n throw persistError;\n }\n }\n\n await resolver.close().catch((err: unknown) => {\n resolver.logger.warn('TurnResourceResolver.close() failed', { err });\n });\n\n if (!frozenByStore) {\n yield turnDone;\n }\n }\n }\n\n /** Paginated read of this turn's persisted events. */\n async listEvents(input: {\n limit: number;\n page_token?: string | undefined;\n order?: 'asc' | 'desc' | undefined;\n }): Promise<{\n data: PersistedTurnEvent[];\n pagination: TokenPagination;\n }> {\n return this.store.listTurnEvents({\n session_id: this.turn.session_id,\n turn_id: this.turn.turn_id,\n limit: input.limit,\n page_token: input.page_token,\n order: input.order,\n });\n }\n\n /**\n * Persist side effects for one execution event; return a streaming yield when\n * the event should be emitted to the consumer (null = side-effect only / skip).\n */\n private async persistExecutionEvent(event: AgentThreadExecutionEvent): Promise<TurnStreamingEvent | null> {\n const scope = {\n session_id: this.turn.session_id,\n turn_id: this.turn.turn_id,\n };\n\n switch (event.type) {\n case HarnessEventType.MODEL_MESSAGE:\n case HarnessEventType.MODEL_MESSAGE_DELTA:\n // Stream only — durable model content lands via AGENT_CONTEXT_APPEND.output.\n return event;\n\n case HarnessEventType.TOOL_RESPONSE:\n await this.store.appendToEvents({\n ...scope,\n events: [event],\n });\n return event;\n\n case InternalEventType.AGENT_CREATE_SUBAGENT:\n return null;\n\n case InternalEventType.CAPABILITY_STATE: {\n // Persist boundary: types exclude undefined; reject it at runtime so stores never see it.\n const state: unknown = event.state;\n if (state === undefined) {\n throw new AgentHarnessError(\n 'capability_state_error',\n `CAPABILITY_STATE for key '${event.key}' must not be undefined — use null to clear durable state`,\n );\n }\n await this.store.patchThreadCapabilityState({\n ...scope,\n thread_id: event.thread_id,\n key: event.key,\n state: event.state,\n });\n return null;\n }\n\n case HarnessEventType.AGENT_CONTEXT_OVERWRITE: {\n await this.store.overwriteThreadContext({ ...scope, event });\n return null;\n }\n\n case InternalEventType.AGENT_CONTEXT_APPEND: {\n await this.store.appendToThreadContext({\n ...scope,\n thread_id: event.thread_id,\n context: event.context,\n current_context_usage: event.current_context_usage ?? null,\n completion: event.completion ?? null,\n });\n if (event.output.length > 0) {\n await this.store.appendToEvents({\n ...scope,\n events: event.output,\n });\n }\n return null;\n }\n\n case InternalEventType.AGENT_DONE: {\n if (!event.parent) {\n return null;\n }\n const threadDone = toThreadDoneEvent(event);\n await this.store.removeThreads({\n ...scope,\n thread_ids: [event.thread_id],\n });\n await this.store.appendToEvents({\n ...scope,\n events: [threadDone],\n });\n return threadDone;\n }\n\n case HarnessEventType.THREAD_CREATED: {\n await this.store.addThreads({\n ...scope,\n threads: [\n {\n thread_id: event.thread_id,\n parent: event.parent,\n agent_info: event.agent_info,\n context: [],\n current_context_usage: getEmptyCurrentContextUsage(),\n completion: null,\n capability_state: null,\n },\n ],\n });\n await this.store.appendToEvents({\n ...scope,\n events: [event],\n });\n return event;\n }\n\n case InternalEventType.MCP_AUTH_REQUIRED: {\n const authEvent = toMCPAuthRequiredEvent(event);\n await this.store.appendToEvents({\n ...scope,\n events: [authEvent],\n });\n return authEvent;\n }\n\n case HarnessEventType.MCP_INITIALIZE: {\n await this.store.patchMCPServers({\n ...scope,\n mcp_servers: event.mcp_servers.map(initInfo => ({\n id: initInfo.id,\n name: initInfo.name,\n session_id: initInfo.session_id,\n transport_type: initInfo.transport_type,\n })),\n });\n await this.store.appendToEvents({\n ...scope,\n events: [event],\n });\n return event;\n }\n\n case HarnessEventType.SANDBOX_CREATED: {\n await this.store.patchSandboxInfo({\n ...scope,\n sandbox_info: { sandbox_id: event.sandbox_id },\n });\n await this.store.appendToEvents({\n ...scope,\n events: [event],\n });\n return event;\n }\n\n case HarnessEventType.TOOL_APPROVAL_REQUIRED:\n case HarnessEventType.TOOL_RESPONSE_REQUIRED: {\n await this.store.appendToEvents({\n ...scope,\n events: [event],\n });\n return event;\n }\n\n default: {\n // Registered passthrough (orchestrator unwraps PASSTHROUGH before yield).\n await this.store.appendToEvents({\n ...scope,\n events: [event],\n });\n return event;\n }\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import type { Logger } from 'winston';
|
|
2
|
+
import type { AgentCapability } from '../core/capabilities/AgentCapability';
|
|
3
|
+
import type { ILLM } from '../core/llm/ILLM';
|
|
4
|
+
import type { ToolSource } from '../core/mcp/IMCPServer';
|
|
5
|
+
import { type RemoteMcpHeaders } from '../core/mcp/RemoteMCP';
|
|
6
|
+
import type { AgentDefinition, ModelParams } from '../core/runtime/AgentDefinition';
|
|
7
|
+
import type { AgentInfo } from '../core/runtime/AgentThread.types';
|
|
8
|
+
import type { Sandbox, SandboxInfo } from '../core/sandbox/Sandbox';
|
|
9
|
+
import type { AgentTracing } from '../core/tracing/AgentTracing';
|
|
10
|
+
import type { ITurnResourceResolver } from './ITurnResourceResolver';
|
|
11
|
+
import type { TurnRecord } from './models/TurnRecord';
|
|
12
|
+
import type { AgentSpec } from './schemas/agentSpec';
|
|
13
|
+
/**
|
|
14
|
+
* Factory that creates a Sandbox handle for a run (reattach via
|
|
15
|
+
* existingSandboxId). `spec` carries the sandbox-relevant agent settings
|
|
16
|
+
* (e.g. config.sandbox.file_downloads) so implementations can shape the
|
|
17
|
+
* Sandbox per run without the factory type growing a field per option.
|
|
18
|
+
*/
|
|
19
|
+
export type TurnSandboxFactory = (input: {
|
|
20
|
+
spec: AgentSpec;
|
|
21
|
+
existingSandboxId?: string | undefined;
|
|
22
|
+
signal: AbortSignal;
|
|
23
|
+
tracing: AgentTracing;
|
|
24
|
+
}) => Promise<Sandbox>;
|
|
25
|
+
/**
|
|
26
|
+
* Batteries-included base implementation. Construct-and-go for the default
|
|
27
|
+
* behavior; subclass and override to customize (tool sources, sandbox,
|
|
28
|
+
* tracing).
|
|
29
|
+
*/
|
|
30
|
+
export declare class TurnResourceResolver<TTurnCustom extends object = Record<string, never>> implements ITurnResourceResolver<TTurnCustom> {
|
|
31
|
+
#private;
|
|
32
|
+
protected readonly deps: {
|
|
33
|
+
/** Model name → client and defaults. Called once per resolved definition; may load provider config. */
|
|
34
|
+
llm: (model: string) => Promise<{
|
|
35
|
+
modelClient: ILLM;
|
|
36
|
+
defaultModelParams: ModelParams;
|
|
37
|
+
}>;
|
|
38
|
+
/**
|
|
39
|
+
* MCP server name → connection details. Required to use spec.mcp_servers:
|
|
40
|
+
* the AgentSpec carries names only (no url/headers on the wire) — the
|
|
41
|
+
* runtime supplies the catalog. Called once per distinct server name per
|
|
42
|
+
* turn. Throw for unknown names. `headers` supports the async resolver form.
|
|
43
|
+
*/
|
|
44
|
+
mcp: (name: string) => Promise<{
|
|
45
|
+
url: string;
|
|
46
|
+
headers?: RemoteMcpHeaders;
|
|
47
|
+
}>;
|
|
48
|
+
mcpRequestTimeoutMs: number;
|
|
49
|
+
mcpConnectTimeoutMs: number;
|
|
50
|
+
/** One sandbox type per runtime. Omit = no sandbox support. */
|
|
51
|
+
sandboxProvider?: TurnSandboxFactory | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Named-agent lookup (registry id → live AgentSpec). Required when a
|
|
54
|
+
* session is bound by reference; omit only if all sessions use inline agents.
|
|
55
|
+
*/
|
|
56
|
+
agent?: ((agentId: string) => Promise<AgentSpec>) | undefined;
|
|
57
|
+
/** Forwarded to RemoteMCP / AgentThread (required by their constructors). */
|
|
58
|
+
logger: Logger;
|
|
59
|
+
};
|
|
60
|
+
constructor(deps: {
|
|
61
|
+
/** Model name → client and defaults. Called once per resolved definition; may load provider config. */
|
|
62
|
+
llm: (model: string) => Promise<{
|
|
63
|
+
modelClient: ILLM;
|
|
64
|
+
defaultModelParams: ModelParams;
|
|
65
|
+
}>;
|
|
66
|
+
/**
|
|
67
|
+
* MCP server name → connection details. Required to use spec.mcp_servers:
|
|
68
|
+
* the AgentSpec carries names only (no url/headers on the wire) — the
|
|
69
|
+
* runtime supplies the catalog. Called once per distinct server name per
|
|
70
|
+
* turn. Throw for unknown names. `headers` supports the async resolver form.
|
|
71
|
+
*/
|
|
72
|
+
mcp: (name: string) => Promise<{
|
|
73
|
+
url: string;
|
|
74
|
+
headers?: RemoteMcpHeaders;
|
|
75
|
+
}>;
|
|
76
|
+
mcpRequestTimeoutMs: number;
|
|
77
|
+
mcpConnectTimeoutMs: number;
|
|
78
|
+
/** One sandbox type per runtime. Omit = no sandbox support. */
|
|
79
|
+
sandboxProvider?: TurnSandboxFactory | undefined;
|
|
80
|
+
/**
|
|
81
|
+
* Named-agent lookup (registry id → live AgentSpec). Required when a
|
|
82
|
+
* session is bound by reference; omit only if all sessions use inline agents.
|
|
83
|
+
*/
|
|
84
|
+
agent?: ((agentId: string) => Promise<AgentSpec>) | undefined;
|
|
85
|
+
/** Forwarded to RemoteMCP / AgentThread (required by their constructors). */
|
|
86
|
+
logger: Logger;
|
|
87
|
+
});
|
|
88
|
+
get logger(): Logger;
|
|
89
|
+
/** Default: no-op tracing. Override to plug in a real tracer. */
|
|
90
|
+
createTracing(): AgentTracing;
|
|
91
|
+
/** Named (ref) session agent → live registry lookup via deps.agent. */
|
|
92
|
+
resolveAgentSpec(input: {
|
|
93
|
+
agent_id: string;
|
|
94
|
+
}): Promise<AgentSpec>;
|
|
95
|
+
/**
|
|
96
|
+
* Default: creates a sandbox iff a provider is configured AND the spec wants
|
|
97
|
+
* one; reattaches to the previous turn's VM via `existing.sandbox_id` when
|
|
98
|
+
* present. Overrides that resolve their own sandbox must assign it so
|
|
99
|
+
* close() can release it (or override close() too).
|
|
100
|
+
*/
|
|
101
|
+
resolveSandbox(input: {
|
|
102
|
+
spec: AgentSpec;
|
|
103
|
+
existing?: SandboxInfo | undefined;
|
|
104
|
+
previousTurn?: TurnRecord<TTurnCustom> | undefined;
|
|
105
|
+
signal: AbortSignal;
|
|
106
|
+
tracing: AgentTracing;
|
|
107
|
+
}): Promise<Sandbox | undefined>;
|
|
108
|
+
/**
|
|
109
|
+
* Closes the sandbox HANDLE if one was resolved. This releases only this
|
|
110
|
+
* process's connection (local bridge); the sandbox VM keeps running and the
|
|
111
|
+
* next turn reattaches via `existing.sandbox_id`.
|
|
112
|
+
*
|
|
113
|
+
* Tool sources (MCP connections) are intentionally NOT closed: the run's
|
|
114
|
+
* AbortSignal already aborts their in-flight calls, and connections are
|
|
115
|
+
* per-run objects that are simply dropped. If deterministic MCP socket
|
|
116
|
+
* release is ever needed, add it here — no contract change required.
|
|
117
|
+
*
|
|
118
|
+
* Subclasses that acquire additional resources MUST override, release
|
|
119
|
+
* their own resources best-effort, and call `await super.close()`.
|
|
120
|
+
* Idempotent; never throws.
|
|
121
|
+
*/
|
|
122
|
+
close(): Promise<void>;
|
|
123
|
+
/**
|
|
124
|
+
* Default: maps the spec directly to a definition — spec.mcp_servers carry
|
|
125
|
+
* names only; deps.mcp resolves each name to url/headers, and the result
|
|
126
|
+
* becomes a RemoteMCP source (deduped per turn via getOrCreateToolSource)
|
|
127
|
+
* wrapped in a per-agent ToolSet view. Passes the previous turn's persisted
|
|
128
|
+
* MCP session_id into RemoteMCP for cross-turn stateful resume.
|
|
129
|
+
*/
|
|
130
|
+
resolveAgentDefinition(input: {
|
|
131
|
+
spec: AgentSpec;
|
|
132
|
+
thread_id: string;
|
|
133
|
+
agent_info?: AgentInfo | undefined;
|
|
134
|
+
previousTurn?: TurnRecord<TTurnCustom> | undefined;
|
|
135
|
+
signal: AbortSignal;
|
|
136
|
+
tracing: AgentTracing;
|
|
137
|
+
}): Promise<{
|
|
138
|
+
definition: AgentDefinition;
|
|
139
|
+
extraCapabilities?: AgentCapability[] | undefined;
|
|
140
|
+
}>;
|
|
141
|
+
/**
|
|
142
|
+
* Returns the tool source for `id`, creating it on first call — use from
|
|
143
|
+
* resolveAgentDefinition overrides so agents sharing a server share one
|
|
144
|
+
* connection. Single-flight by id: the promise is stored synchronously (no
|
|
145
|
+
* await between get and set), so overlapping resolveAgentDefinition calls
|
|
146
|
+
* can never double-create. Rejections stay cached: one attempt per turn.
|
|
147
|
+
* Do not override.
|
|
148
|
+
*/
|
|
149
|
+
protected getOrCreateToolSource(input: {
|
|
150
|
+
id: string;
|
|
151
|
+
create: () => Promise<ToolSource>;
|
|
152
|
+
}): Promise<ToolSource>;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=TurnResourceResolver.d.ts.map
|