@framers/agentos 0.1.113 → 0.1.114
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -5
- package/dist/api/AgentOS.d.ts +45 -12
- package/dist/api/AgentOS.d.ts.map +1 -1
- package/dist/api/AgentOS.js +225 -78
- package/dist/api/AgentOS.js.map +1 -1
- package/dist/api/AgentOSOrchestrator.d.ts +8 -0
- package/dist/api/AgentOSOrchestrator.d.ts.map +1 -1
- package/dist/api/AgentOSOrchestrator.js +350 -59
- package/dist/api/AgentOSOrchestrator.js.map +1 -1
- package/dist/api/StreamChunkEmitter.d.ts.map +1 -1
- package/dist/api/StreamChunkEmitter.js +2 -0
- package/dist/api/StreamChunkEmitter.js.map +1 -1
- package/dist/api/agency.d.ts.map +1 -1
- package/dist/api/agency.js +47 -1
- package/dist/api/agency.js.map +1 -1
- package/dist/api/agent.d.ts +18 -5
- package/dist/api/agent.d.ts.map +1 -1
- package/dist/api/agent.js +48 -9
- package/dist/api/agent.js.map +1 -1
- package/dist/api/agentExport.d.ts +202 -0
- package/dist/api/agentExport.d.ts.map +1 -0
- package/dist/api/agentExport.js +323 -0
- package/dist/api/agentExport.js.map +1 -0
- package/dist/api/editImage.d.ts +119 -0
- package/dist/api/editImage.d.ts.map +1 -0
- package/dist/api/editImage.js +150 -0
- package/dist/api/editImage.js.map +1 -0
- package/dist/api/embedText.d.ts +137 -0
- package/dist/api/embedText.d.ts.map +1 -0
- package/dist/api/embedText.js +229 -0
- package/dist/api/embedText.js.map +1 -0
- package/dist/api/externalToolRegistry.d.ts +44 -0
- package/dist/api/externalToolRegistry.d.ts.map +1 -0
- package/dist/api/externalToolRegistry.js +245 -0
- package/dist/api/externalToolRegistry.js.map +1 -0
- package/dist/api/generateImage.d.ts +1 -1
- package/dist/api/generateImage.d.ts.map +1 -1
- package/dist/api/generateImage.js +17 -13
- package/dist/api/generateImage.js.map +1 -1
- package/dist/api/generateObject.d.ts +185 -0
- package/dist/api/generateObject.d.ts.map +1 -0
- package/dist/api/generateObject.js +249 -0
- package/dist/api/generateObject.js.map +1 -0
- package/dist/api/generateText.d.ts +13 -3
- package/dist/api/generateText.d.ts.map +1 -1
- package/dist/api/generateText.js +20 -5
- package/dist/api/generateText.js.map +1 -1
- package/dist/api/interfaces/IAgentOS.d.ts +29 -1
- package/dist/api/interfaces/IAgentOS.d.ts.map +1 -1
- package/dist/api/model.d.ts +7 -7
- package/dist/api/model.d.ts.map +1 -1
- package/dist/api/model.js +22 -16
- package/dist/api/model.js.map +1 -1
- package/dist/api/processRequestWithExternalTools.d.ts +26 -0
- package/dist/api/processRequestWithExternalTools.d.ts.map +1 -0
- package/dist/api/processRequestWithExternalTools.js +52 -0
- package/dist/api/processRequestWithExternalTools.js.map +1 -0
- package/dist/api/processRequestWithRegisteredTools.d.ts +56 -0
- package/dist/api/processRequestWithRegisteredTools.d.ts.map +1 -0
- package/dist/api/processRequestWithRegisteredTools.js +125 -0
- package/dist/api/processRequestWithRegisteredTools.js.map +1 -0
- package/dist/api/provider-defaults.d.ts.map +1 -1
- package/dist/api/provider-defaults.js +28 -0
- package/dist/api/provider-defaults.js.map +1 -1
- package/dist/api/resumeExternalToolRequestWithRegisteredTools.d.ts +71 -0
- package/dist/api/resumeExternalToolRequestWithRegisteredTools.d.ts.map +1 -0
- package/dist/api/resumeExternalToolRequestWithRegisteredTools.js +159 -0
- package/dist/api/resumeExternalToolRequestWithRegisteredTools.js.map +1 -0
- package/dist/api/strategies/agentGraphBuilder.d.ts +170 -0
- package/dist/api/strategies/agentGraphBuilder.d.ts.map +1 -0
- package/dist/api/strategies/agentGraphBuilder.js +299 -0
- package/dist/api/strategies/agentGraphBuilder.js.map +1 -0
- package/dist/api/strategies/graphCompiler.d.ts +84 -0
- package/dist/api/strategies/graphCompiler.d.ts.map +1 -0
- package/dist/api/strategies/graphCompiler.js +617 -0
- package/dist/api/strategies/graphCompiler.js.map +1 -0
- package/dist/api/strategies/hierarchical.d.ts.map +1 -1
- package/dist/api/strategies/hierarchical.js +2 -1
- package/dist/api/strategies/hierarchical.js.map +1 -1
- package/dist/api/strategies/index.d.ts +3 -0
- package/dist/api/strategies/index.d.ts.map +1 -1
- package/dist/api/strategies/index.js +2 -0
- package/dist/api/strategies/index.js.map +1 -1
- package/dist/api/strategies/shared.d.ts +1 -1
- package/dist/api/strategies/shared.d.ts.map +1 -1
- package/dist/api/strategies/shared.js +3 -2
- package/dist/api/strategies/shared.js.map +1 -1
- package/dist/api/streamObject.d.ts +166 -0
- package/dist/api/streamObject.d.ts.map +1 -0
- package/dist/api/streamObject.js +268 -0
- package/dist/api/streamObject.js.map +1 -0
- package/dist/api/streamText.d.ts +1 -1
- package/dist/api/streamText.d.ts.map +1 -1
- package/dist/api/streamText.js +26 -8
- package/dist/api/streamText.js.map +1 -1
- package/dist/api/toolAdapter.d.ts +44 -8
- package/dist/api/toolAdapter.d.ts.map +1 -1
- package/dist/api/toolAdapter.js +224 -45
- package/dist/api/toolAdapter.js.map +1 -1
- package/dist/api/types/AgentOSExternalToolRequest.d.ts +35 -0
- package/dist/api/types/AgentOSExternalToolRequest.d.ts.map +1 -0
- package/dist/api/types/AgentOSExternalToolRequest.js +2 -0
- package/dist/api/types/AgentOSExternalToolRequest.js.map +1 -0
- package/dist/api/types/AgentOSResponse.d.ts +25 -0
- package/dist/api/types/AgentOSResponse.d.ts.map +1 -1
- package/dist/api/types/AgentOSResponse.js +20 -0
- package/dist/api/types/AgentOSResponse.js.map +1 -1
- package/dist/api/types/AgentOSToolResult.d.ts +11 -0
- package/dist/api/types/AgentOSToolResult.d.ts.map +1 -0
- package/dist/api/types/AgentOSToolResult.js +2 -0
- package/dist/api/types/AgentOSToolResult.js.map +1 -0
- package/dist/api/types.d.ts +28 -4
- package/dist/api/types.d.ts.map +1 -1
- package/dist/api/types.js.map +1 -1
- package/dist/api/upscaleImage.d.ts +92 -0
- package/dist/api/upscaleImage.d.ts.map +1 -0
- package/dist/api/upscaleImage.js +133 -0
- package/dist/api/upscaleImage.js.map +1 -0
- package/dist/api/variateImage.d.ts +102 -0
- package/dist/api/variateImage.d.ts.map +1 -0
- package/dist/api/variateImage.js +154 -0
- package/dist/api/variateImage.js.map +1 -0
- package/dist/cognitive_substrate/GMI.d.ts +16 -2
- package/dist/cognitive_substrate/GMI.d.ts.map +1 -1
- package/dist/cognitive_substrate/GMI.js +188 -56
- package/dist/cognitive_substrate/GMI.js.map +1 -1
- package/dist/cognitive_substrate/IGMI.d.ts +10 -0
- package/dist/cognitive_substrate/IGMI.d.ts.map +1 -1
- package/dist/cognitive_substrate/IGMI.js.map +1 -1
- package/dist/config/AgentOSConfig.d.ts +19 -2
- package/dist/config/AgentOSConfig.d.ts.map +1 -1
- package/dist/config/AgentOSConfig.js +46 -29
- package/dist/config/AgentOSConfig.js.map +1 -1
- package/dist/core/guardrails/IGuardrailService.d.ts +1 -1
- package/dist/core/images/IImageProvider.d.ts +93 -0
- package/dist/core/images/IImageProvider.d.ts.map +1 -1
- package/dist/core/images/IImageProvider.js.map +1 -1
- package/dist/core/images/ImageOperationError.d.ts +52 -0
- package/dist/core/images/ImageOperationError.d.ts.map +1 -0
- package/dist/core/images/ImageOperationError.js +58 -0
- package/dist/core/images/ImageOperationError.js.map +1 -0
- package/dist/core/images/imageToBuffer.d.ts +41 -0
- package/dist/core/images/imageToBuffer.d.ts.map +1 -0
- package/dist/core/images/imageToBuffer.js +95 -0
- package/dist/core/images/imageToBuffer.js.map +1 -0
- package/dist/core/images/index.d.ts +4 -0
- package/dist/core/images/index.d.ts.map +1 -1
- package/dist/core/images/index.js +8 -0
- package/dist/core/images/index.js.map +1 -1
- package/dist/core/images/providers/FalImageProvider.d.ts +208 -0
- package/dist/core/images/providers/FalImageProvider.d.ts.map +1 -0
- package/dist/core/images/providers/FalImageProvider.js +301 -0
- package/dist/core/images/providers/FalImageProvider.js.map +1 -0
- package/dist/core/images/providers/FluxImageProvider.d.ts +197 -0
- package/dist/core/images/providers/FluxImageProvider.d.ts.map +1 -0
- package/dist/core/images/providers/FluxImageProvider.js +271 -0
- package/dist/core/images/providers/FluxImageProvider.js.map +1 -0
- package/dist/core/images/providers/OpenAIImageProvider.d.ts +33 -1
- package/dist/core/images/providers/OpenAIImageProvider.d.ts.map +1 -1
- package/dist/core/images/providers/OpenAIImageProvider.js +125 -0
- package/dist/core/images/providers/OpenAIImageProvider.js.map +1 -1
- package/dist/core/images/providers/ReplicateImageProvider.d.ts +26 -1
- package/dist/core/images/providers/ReplicateImageProvider.d.ts.map +1 -1
- package/dist/core/images/providers/ReplicateImageProvider.js +118 -0
- package/dist/core/images/providers/ReplicateImageProvider.js.map +1 -1
- package/dist/core/images/providers/StabilityImageProvider.d.ts +41 -1
- package/dist/core/images/providers/StabilityImageProvider.d.ts.map +1 -1
- package/dist/core/images/providers/StabilityImageProvider.js +180 -7
- package/dist/core/images/providers/StabilityImageProvider.js.map +1 -1
- package/dist/core/images/providers/StableDiffusionLocalProvider.d.ts +29 -1
- package/dist/core/images/providers/StableDiffusionLocalProvider.d.ts.map +1 -1
- package/dist/core/images/providers/StableDiffusionLocalProvider.js +124 -0
- package/dist/core/images/providers/StableDiffusionLocalProvider.js.map +1 -1
- package/dist/core/llm/IPromptEngine.d.ts +2 -2
- package/dist/core/llm/IPromptEngine.d.ts.map +1 -1
- package/dist/core/llm/IPromptEngine.js +2 -2
- package/dist/core/llm/IPromptEngine.js.map +1 -1
- package/dist/core/llm/providers/AIModelProviderManager.d.ts +7 -1
- package/dist/core/llm/providers/AIModelProviderManager.d.ts.map +1 -1
- package/dist/core/llm/providers/AIModelProviderManager.js +24 -0
- package/dist/core/llm/providers/AIModelProviderManager.js.map +1 -1
- package/dist/core/llm/providers/errors/AnthropicProviderError.d.ts +42 -0
- package/dist/core/llm/providers/errors/AnthropicProviderError.d.ts.map +1 -0
- package/dist/core/llm/providers/errors/AnthropicProviderError.js +45 -0
- package/dist/core/llm/providers/errors/AnthropicProviderError.js.map +1 -0
- package/dist/core/llm/providers/errors/GeminiProviderError.d.ts +45 -0
- package/dist/core/llm/providers/errors/GeminiProviderError.d.ts.map +1 -0
- package/dist/core/llm/providers/errors/GeminiProviderError.js +46 -0
- package/dist/core/llm/providers/errors/GeminiProviderError.js.map +1 -0
- package/dist/core/llm/providers/errors/OllamaProviderError.d.ts +1 -1
- package/dist/core/llm/providers/errors/OllamaProviderError.d.ts.map +1 -1
- package/dist/core/llm/providers/errors/OllamaProviderError.js +1 -1
- package/dist/core/llm/providers/errors/OllamaProviderError.js.map +1 -1
- package/dist/core/llm/providers/errors/OpenAIProviderError.d.ts +1 -1
- package/dist/core/llm/providers/errors/OpenAIProviderError.js +1 -1
- package/dist/core/llm/providers/errors/OpenRouterProviderError.d.ts +1 -1
- package/dist/core/llm/providers/errors/OpenRouterProviderError.js +1 -1
- package/dist/core/llm/providers/implementations/AnthropicProvider.d.ts +340 -0
- package/dist/core/llm/providers/implementations/AnthropicProvider.d.ts.map +1 -0
- package/dist/core/llm/providers/implementations/AnthropicProvider.js +959 -0
- package/dist/core/llm/providers/implementations/AnthropicProvider.js.map +1 -0
- package/dist/core/llm/providers/implementations/GeminiProvider.d.ts +339 -0
- package/dist/core/llm/providers/implementations/GeminiProvider.d.ts.map +1 -0
- package/dist/core/llm/providers/implementations/GeminiProvider.js +1004 -0
- package/dist/core/llm/providers/implementations/GeminiProvider.js.map +1 -0
- package/dist/core/llm/providers/implementations/GroqProvider.d.ts +105 -0
- package/dist/core/llm/providers/implementations/GroqProvider.d.ts.map +1 -0
- package/dist/core/llm/providers/implementations/GroqProvider.js +134 -0
- package/dist/core/llm/providers/implementations/GroqProvider.js.map +1 -0
- package/dist/core/llm/providers/implementations/MistralProvider.d.ts +105 -0
- package/dist/core/llm/providers/implementations/MistralProvider.d.ts.map +1 -0
- package/dist/core/llm/providers/implementations/MistralProvider.js +146 -0
- package/dist/core/llm/providers/implementations/MistralProvider.js.map +1 -0
- package/dist/core/llm/providers/implementations/TogetherProvider.d.ts +107 -0
- package/dist/core/llm/providers/implementations/TogetherProvider.d.ts.map +1 -0
- package/dist/core/llm/providers/implementations/TogetherProvider.js +138 -0
- package/dist/core/llm/providers/implementations/TogetherProvider.js.map +1 -0
- package/dist/core/llm/providers/implementations/XAIProvider.d.ts +102 -0
- package/dist/core/llm/providers/implementations/XAIProvider.d.ts.map +1 -0
- package/dist/core/llm/providers/implementations/XAIProvider.js +123 -0
- package/dist/core/llm/providers/implementations/XAIProvider.js.map +1 -0
- package/dist/core/orchestration/AgentOrchestrator.d.ts.map +1 -1
- package/dist/core/orchestration/AgentOrchestrator.js +26 -5
- package/dist/core/orchestration/AgentOrchestrator.js.map +1 -1
- package/dist/core/tools/IToolOrchestrator.d.ts +2 -2
- package/dist/core/tools/IToolOrchestrator.d.ts.map +1 -1
- package/dist/core/tools/ToolExecutor.d.ts +3 -0
- package/dist/core/tools/ToolExecutor.d.ts.map +1 -1
- package/dist/core/tools/ToolExecutor.js +2 -1
- package/dist/core/tools/ToolExecutor.js.map +1 -1
- package/dist/core/tools/ToolOrchestrator.d.ts +7 -7
- package/dist/core/tools/ToolOrchestrator.d.ts.map +1 -1
- package/dist/core/tools/ToolOrchestrator.js +135 -36
- package/dist/core/tools/ToolOrchestrator.js.map +1 -1
- package/dist/core/tools/permissions/ToolPermissionManager.d.ts +6 -5
- package/dist/core/tools/permissions/ToolPermissionManager.d.ts.map +1 -1
- package/dist/core/tools/permissions/ToolPermissionManager.js +47 -21
- package/dist/core/tools/permissions/ToolPermissionManager.js.map +1 -1
- package/dist/core/vision/VisionPipeline.d.ts +437 -0
- package/dist/core/vision/VisionPipeline.d.ts.map +1 -0
- package/dist/core/vision/VisionPipeline.js +1113 -0
- package/dist/core/vision/VisionPipeline.js.map +1 -0
- package/dist/core/vision/index.d.ts +97 -0
- package/dist/core/vision/index.d.ts.map +1 -0
- package/dist/core/vision/index.js +182 -0
- package/dist/core/vision/index.js.map +1 -0
- package/dist/core/vision/providers/LLMVisionProvider.d.ts +135 -0
- package/dist/core/vision/providers/LLMVisionProvider.d.ts.map +1 -0
- package/dist/core/vision/providers/LLMVisionProvider.js +136 -0
- package/dist/core/vision/providers/LLMVisionProvider.js.map +1 -0
- package/dist/core/vision/providers/PipelineVisionProvider.d.ts +154 -0
- package/dist/core/vision/providers/PipelineVisionProvider.d.ts.map +1 -0
- package/dist/core/vision/providers/PipelineVisionProvider.js +160 -0
- package/dist/core/vision/providers/PipelineVisionProvider.js.map +1 -0
- package/dist/core/vision/types.d.ts +286 -0
- package/dist/core/vision/types.d.ts.map +1 -0
- package/dist/core/vision/types.js +24 -0
- package/dist/core/vision/types.js.map +1 -0
- package/dist/discovery/CapabilityDiscoveryEngine.d.ts +1 -1
- package/dist/discovery/CapabilityDiscoveryEngine.d.ts.map +1 -1
- package/dist/discovery/CapabilityDiscoveryEngine.js +1 -1
- package/dist/discovery/CapabilityDiscoveryEngine.js.map +1 -1
- package/dist/emergent/ComposableToolBuilder.d.ts +15 -4
- package/dist/emergent/ComposableToolBuilder.d.ts.map +1 -1
- package/dist/emergent/ComposableToolBuilder.js +29 -14
- package/dist/emergent/ComposableToolBuilder.js.map +1 -1
- package/dist/emergent/EmergentCapabilityEngine.d.ts +3 -3
- package/dist/emergent/EmergentCapabilityEngine.d.ts.map +1 -1
- package/dist/emergent/EmergentCapabilityEngine.js +15 -12
- package/dist/emergent/EmergentCapabilityEngine.js.map +1 -1
- package/dist/emergent/EmergentJudge.d.ts +20 -0
- package/dist/emergent/EmergentJudge.d.ts.map +1 -1
- package/dist/emergent/EmergentJudge.js +121 -26
- package/dist/emergent/EmergentJudge.js.map +1 -1
- package/dist/emergent/EmergentToolRegistry.d.ts +17 -0
- package/dist/emergent/EmergentToolRegistry.d.ts.map +1 -1
- package/dist/emergent/EmergentToolRegistry.js +26 -0
- package/dist/emergent/EmergentToolRegistry.js.map +1 -1
- package/dist/emergent/ForgeToolMetaTool.d.ts +1 -1
- package/dist/emergent/ForgeToolMetaTool.d.ts.map +1 -1
- package/dist/emergent/ForgeToolMetaTool.js +15 -2
- package/dist/emergent/ForgeToolMetaTool.js.map +1 -1
- package/dist/emergent/SandboxedToolForge.d.ts +2 -2
- package/dist/emergent/SandboxedToolForge.d.ts.map +1 -1
- package/dist/emergent/SandboxedToolForge.js +13 -23
- package/dist/emergent/SandboxedToolForge.js.map +1 -1
- package/dist/emergent/SkillExporter.d.ts +119 -0
- package/dist/emergent/SkillExporter.d.ts.map +1 -0
- package/dist/emergent/SkillExporter.js +344 -0
- package/dist/emergent/SkillExporter.js.map +1 -0
- package/dist/emergent/index.d.ts +1 -0
- package/dist/emergent/index.d.ts.map +1 -1
- package/dist/emergent/index.js +1 -0
- package/dist/emergent/index.js.map +1 -1
- package/dist/emergent/types.d.ts +4 -4
- package/dist/index.d.ts +30 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -2
- package/dist/index.js.map +1 -1
- package/dist/memory/index.d.ts +10 -8
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +2 -0
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/ingestion/DoclingLoader.d.ts +3 -3
- package/dist/memory/ingestion/DoclingLoader.d.ts.map +1 -1
- package/dist/memory/ingestion/DoclingLoader.js +12 -8
- package/dist/memory/ingestion/DoclingLoader.js.map +1 -1
- package/dist/memory/ingestion/FolderScanner.d.ts +7 -7
- package/dist/memory/ingestion/FolderScanner.d.ts.map +1 -1
- package/dist/memory/ingestion/FolderScanner.js +6 -6
- package/dist/memory/ingestion/FolderScanner.js.map +1 -1
- package/dist/memory/ingestion/LoaderRegistry.d.ts +8 -8
- package/dist/memory/ingestion/LoaderRegistry.d.ts.map +1 -1
- package/dist/memory/ingestion/LoaderRegistry.js +9 -11
- package/dist/memory/ingestion/LoaderRegistry.js.map +1 -1
- package/dist/memory/ingestion/MultimodalAggregator.d.ts +1 -1
- package/dist/memory/ingestion/MultimodalAggregator.js +1 -1
- package/dist/memory/ingestion/OcrPdfLoader.d.ts +2 -2
- package/dist/memory/ingestion/OcrPdfLoader.d.ts.map +1 -1
- package/dist/memory/ingestion/OcrPdfLoader.js +12 -8
- package/dist/memory/ingestion/OcrPdfLoader.js.map +1 -1
- package/dist/memory/ingestion/PdfLoader.d.ts +8 -8
- package/dist/memory/ingestion/PdfLoader.d.ts.map +1 -1
- package/dist/memory/ingestion/PdfLoader.js +13 -10
- package/dist/memory/ingestion/PdfLoader.js.map +1 -1
- package/dist/memory/io/MarkdownExporter.d.ts +1 -1
- package/dist/memory/io/MarkdownExporter.d.ts.map +1 -1
- package/dist/memory/io/MarkdownExporter.js +1 -1
- package/dist/memory/io/MarkdownExporter.js.map +1 -1
- package/dist/memory/tools/MemoryAddTool.d.ts +2 -2
- package/dist/memory/tools/MemoryAddTool.d.ts.map +1 -1
- package/dist/memory/tools/MemoryAddTool.js +8 -3
- package/dist/memory/tools/MemoryAddTool.js.map +1 -1
- package/dist/memory/tools/MemorySearchTool.d.ts +3 -3
- package/dist/memory/tools/MemorySearchTool.d.ts.map +1 -1
- package/dist/memory/tools/MemorySearchTool.js +11 -9
- package/dist/memory/tools/MemorySearchTool.js.map +1 -1
- package/dist/memory/tools/scopeContext.d.ts +11 -0
- package/dist/memory/tools/scopeContext.d.ts.map +1 -0
- package/dist/memory/tools/scopeContext.js +46 -0
- package/dist/memory/tools/scopeContext.js.map +1 -0
- package/dist/orchestration/builders/AgentGraph.d.ts +12 -11
- package/dist/orchestration/builders/AgentGraph.d.ts.map +1 -1
- package/dist/orchestration/builders/AgentGraph.js +12 -11
- package/dist/orchestration/builders/AgentGraph.js.map +1 -1
- package/dist/orchestration/builders/VoiceNodeBuilder.d.ts +2 -2
- package/dist/orchestration/builders/VoiceNodeBuilder.d.ts.map +1 -1
- package/dist/orchestration/builders/VoiceNodeBuilder.js +2 -2
- package/dist/orchestration/builders/VoiceNodeBuilder.js.map +1 -1
- package/dist/orchestration/builders/WorkflowBuilder.d.ts +1 -1
- package/dist/orchestration/builders/WorkflowBuilder.d.ts.map +1 -1
- package/dist/orchestration/builders/WorkflowBuilder.js +1 -1
- package/dist/orchestration/builders/WorkflowBuilder.js.map +1 -1
- package/dist/orchestration/checkpoint/InMemoryCheckpointStore.d.ts +7 -54
- package/dist/orchestration/checkpoint/InMemoryCheckpointStore.d.ts.map +1 -1
- package/dist/orchestration/checkpoint/InMemoryCheckpointStore.js +8 -56
- package/dist/orchestration/checkpoint/InMemoryCheckpointStore.js.map +1 -1
- package/dist/orchestration/events/GraphEvent.d.ts +12 -12
- package/dist/orchestration/events/GraphEvent.d.ts.map +1 -1
- package/dist/orchestration/events/GraphEvent.js.map +1 -1
- package/dist/orchestration/runtime/GraphRuntime.d.ts.map +1 -1
- package/dist/orchestration/runtime/GraphRuntime.js +151 -1
- package/dist/orchestration/runtime/GraphRuntime.js.map +1 -1
- package/dist/orchestration/runtime/LoopController.d.ts +3 -3
- package/dist/orchestration/runtime/LoopController.d.ts.map +1 -1
- package/dist/orchestration/runtime/LoopController.js.map +1 -1
- package/dist/orchestration/runtime/StateManager.d.ts +3 -3
- package/dist/orchestration/runtime/StateManager.js +3 -3
- package/dist/orchestration/runtime/VoiceNodeExecutor.d.ts +6 -6
- package/dist/orchestration/runtime/VoiceNodeExecutor.d.ts.map +1 -1
- package/dist/orchestration/runtime/VoiceNodeExecutor.js +27 -10
- package/dist/orchestration/runtime/VoiceNodeExecutor.js.map +1 -1
- package/dist/orchestration/runtime/VoiceTransportAdapter.d.ts +5 -5
- package/dist/orchestration/runtime/VoiceTransportAdapter.js +5 -5
- package/dist/orchestration/runtime/VoiceTurnCollector.d.ts +2 -2
- package/dist/orchestration/runtime/VoiceTurnCollector.js +2 -2
- package/dist/query-router/KeywordFallback.d.ts +70 -0
- package/dist/query-router/KeywordFallback.d.ts.map +1 -0
- package/dist/query-router/KeywordFallback.js +132 -0
- package/dist/query-router/KeywordFallback.js.map +1 -0
- package/dist/query-router/QueryClassifier.d.ts +140 -0
- package/dist/query-router/QueryClassifier.d.ts.map +1 -0
- package/dist/query-router/QueryClassifier.js +223 -0
- package/dist/query-router/QueryClassifier.js.map +1 -0
- package/dist/query-router/QueryDispatcher.d.ts +139 -0
- package/dist/query-router/QueryDispatcher.d.ts.map +1 -0
- package/dist/query-router/QueryDispatcher.js +297 -0
- package/dist/query-router/QueryDispatcher.js.map +1 -0
- package/dist/query-router/QueryGenerator.d.ts +184 -0
- package/dist/query-router/QueryGenerator.d.ts.map +1 -0
- package/dist/query-router/QueryGenerator.js +241 -0
- package/dist/query-router/QueryGenerator.js.map +1 -0
- package/dist/query-router/QueryRouter.d.ts +292 -0
- package/dist/query-router/QueryRouter.d.ts.map +1 -0
- package/dist/query-router/QueryRouter.js +803 -0
- package/dist/query-router/QueryRouter.js.map +1 -0
- package/dist/query-router/TopicExtractor.d.ts +73 -0
- package/dist/query-router/TopicExtractor.d.ts.map +1 -0
- package/dist/query-router/TopicExtractor.js +95 -0
- package/dist/query-router/TopicExtractor.js.map +1 -0
- package/dist/query-router/index.d.ts +40 -0
- package/dist/query-router/index.d.ts.map +1 -0
- package/dist/query-router/index.js +46 -0
- package/dist/query-router/index.js.map +1 -0
- package/dist/query-router/types.d.ts +508 -0
- package/dist/query-router/types.d.ts.map +1 -0
- package/dist/query-router/types.js +39 -0
- package/dist/query-router/types.js.map +1 -0
- package/dist/rag/index.d.ts +5 -0
- package/dist/rag/index.d.ts.map +1 -1
- package/dist/rag/index.js +7 -0
- package/dist/rag/index.js.map +1 -1
- package/dist/rag/multimodal/LLMVisionAdapter.d.ts +43 -0
- package/dist/rag/multimodal/LLMVisionAdapter.d.ts.map +1 -0
- package/dist/rag/multimodal/LLMVisionAdapter.js +46 -0
- package/dist/rag/multimodal/LLMVisionAdapter.js.map +1 -0
- package/dist/rag/multimodal/MultimodalIndexer.d.ts +244 -0
- package/dist/rag/multimodal/MultimodalIndexer.d.ts.map +1 -0
- package/dist/rag/multimodal/MultimodalIndexer.js +411 -0
- package/dist/rag/multimodal/MultimodalIndexer.js.map +1 -0
- package/dist/rag/multimodal/MultimodalMemoryBridge.d.ts +448 -0
- package/dist/rag/multimodal/MultimodalMemoryBridge.d.ts.map +1 -0
- package/dist/rag/multimodal/MultimodalMemoryBridge.js +941 -0
- package/dist/rag/multimodal/MultimodalMemoryBridge.js.map +1 -0
- package/dist/rag/multimodal/SpeechProviderAdapter.d.ts +139 -0
- package/dist/rag/multimodal/SpeechProviderAdapter.d.ts.map +1 -0
- package/dist/rag/multimodal/SpeechProviderAdapter.js +143 -0
- package/dist/rag/multimodal/SpeechProviderAdapter.js.map +1 -0
- package/dist/rag/multimodal/createMultimodalIndexerFromResolver.d.ts +172 -0
- package/dist/rag/multimodal/createMultimodalIndexerFromResolver.d.ts.map +1 -0
- package/dist/rag/multimodal/createMultimodalIndexerFromResolver.js +152 -0
- package/dist/rag/multimodal/createMultimodalIndexerFromResolver.js.map +1 -0
- package/dist/rag/multimodal/index.d.ts +44 -0
- package/dist/rag/multimodal/index.d.ts.map +1 -0
- package/dist/rag/multimodal/index.js +42 -0
- package/dist/rag/multimodal/index.js.map +1 -0
- package/dist/rag/multimodal/types.d.ts +276 -0
- package/dist/rag/multimodal/types.d.ts.map +1 -0
- package/dist/rag/multimodal/types.js +26 -0
- package/dist/rag/multimodal/types.js.map +1 -0
- package/dist/social-posting/SocialPostManager.d.ts +3 -3
- package/dist/social-posting/SocialPostManager.d.ts.map +1 -1
- package/dist/social-posting/SocialPostManager.js +3 -5
- package/dist/social-posting/SocialPostManager.js.map +1 -1
- package/dist/speech/FallbackProxy.d.ts +6 -6
- package/dist/speech/FallbackProxy.d.ts.map +1 -1
- package/dist/speech/FallbackProxy.js +3 -3
- package/dist/speech/FallbackProxy.js.map +1 -1
- package/dist/speech/SpeechProviderResolver.d.ts +8 -8
- package/dist/speech/SpeechProviderResolver.d.ts.map +1 -1
- package/dist/speech/SpeechProviderResolver.js +22 -11
- package/dist/speech/SpeechProviderResolver.js.map +1 -1
- package/dist/speech/SpeechRuntime.d.ts +1 -5
- package/dist/speech/SpeechRuntime.d.ts.map +1 -1
- package/dist/speech/SpeechRuntime.js +17 -9
- package/dist/speech/SpeechRuntime.js.map +1 -1
- package/dist/speech/providers/AssemblyAISTTProvider.d.ts +4 -4
- package/dist/speech/providers/AssemblyAISTTProvider.js +4 -4
- package/dist/speech/providers/AzureSpeechTTSProvider.d.ts +3 -3
- package/dist/speech/providers/AzureSpeechTTSProvider.js +2 -2
- package/dist/speech/providers/AzureSpeechTTSProvider.js.map +1 -1
- package/dist/speech/providers/BuiltInAdaptiveVadProvider.d.ts +9 -9
- package/dist/speech/providers/BuiltInAdaptiveVadProvider.d.ts.map +1 -1
- package/dist/speech/providers/BuiltInAdaptiveVadProvider.js +5 -5
- package/dist/speech/providers/BuiltInAdaptiveVadProvider.js.map +1 -1
- package/dist/speech/providers/DeepgramBatchSTTProvider.d.ts +2 -2
- package/dist/speech/providers/DeepgramBatchSTTProvider.js +2 -2
- package/dist/speech/providers/OpenAITextToSpeechProvider.d.ts +3 -3
- package/dist/speech/providers/OpenAITextToSpeechProvider.js +2 -2
- package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.d.ts +1 -1
- package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.d.ts.map +1 -1
- package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.js +1 -1
- package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.js.map +1 -1
- package/dist/voice/TelephonyStreamTransport.d.ts +6 -6
- package/dist/voice/TelephonyStreamTransport.d.ts.map +1 -1
- package/dist/voice/TelephonyStreamTransport.js +5 -5
- package/dist/voice/TelephonyStreamTransport.js.map +1 -1
- package/dist/voice-pipeline/AcousticEndpointDetector.d.ts +4 -4
- package/dist/voice-pipeline/AcousticEndpointDetector.d.ts.map +1 -1
- package/dist/voice-pipeline/AcousticEndpointDetector.js +4 -4
- package/dist/voice-pipeline/AcousticEndpointDetector.js.map +1 -1
- package/dist/voice-pipeline/HardCutBargeinHandler.d.ts +3 -3
- package/dist/voice-pipeline/HardCutBargeinHandler.js +3 -3
- package/dist/voice-pipeline/HeuristicEndpointDetector.d.ts +3 -3
- package/dist/voice-pipeline/HeuristicEndpointDetector.d.ts.map +1 -1
- package/dist/voice-pipeline/HeuristicEndpointDetector.js +3 -3
- package/dist/voice-pipeline/HeuristicEndpointDetector.js.map +1 -1
- package/dist/voice-pipeline/SoftFadeBargeinHandler.d.ts +5 -5
- package/dist/voice-pipeline/SoftFadeBargeinHandler.js +1 -1
- package/dist/voice-pipeline/VoiceInterruptError.d.ts +6 -6
- package/dist/voice-pipeline/VoiceInterruptError.d.ts.map +1 -1
- package/dist/voice-pipeline/VoiceInterruptError.js +4 -4
- package/dist/voice-pipeline/VoiceInterruptError.js.map +1 -1
- package/dist/voice-pipeline/VoicePipelineOrchestrator.d.ts +9 -9
- package/dist/voice-pipeline/VoicePipelineOrchestrator.d.ts.map +1 -1
- package/dist/voice-pipeline/VoicePipelineOrchestrator.js +8 -8
- package/dist/voice-pipeline/VoicePipelineOrchestrator.js.map +1 -1
- package/dist/voice-pipeline/WebRTCStreamTransport.d.ts +421 -0
- package/dist/voice-pipeline/WebRTCStreamTransport.d.ts.map +1 -0
- package/dist/voice-pipeline/WebRTCStreamTransport.js +573 -0
- package/dist/voice-pipeline/WebRTCStreamTransport.js.map +1 -0
- package/dist/voice-pipeline/WebSocketStreamTransport.d.ts +8 -8
- package/dist/voice-pipeline/WebSocketStreamTransport.js +5 -5
- package/dist/voice-pipeline/index.d.ts +1 -0
- package/dist/voice-pipeline/index.d.ts.map +1 -1
- package/dist/voice-pipeline/index.js +2 -0
- package/dist/voice-pipeline/index.js.map +1 -1
- package/dist/voice-pipeline/types.d.ts +43 -43
- package/dist/voice-pipeline/types.d.ts.map +1 -1
- package/package.json +19 -1
|
@@ -9,11 +9,12 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { TaskOutcomeTelemetryManager, evaluateTaskOutcome, resolveTaskOutcomeTelemetryConfig, resolveAdaptiveExecutionConfig, } from './TaskOutcomeTelemetryManager.js';
|
|
11
11
|
import { StreamChunkEmitter } from './StreamChunkEmitter.js';
|
|
12
|
-
import { executeRollingSummaryPhase } from './turn-phases/rolling-summary.js';
|
|
12
|
+
import { executeRollingSummaryPhase, } from './turn-phases/rolling-summary.js';
|
|
13
13
|
import { executePromptProfilePhase } from './turn-phases/prompt-profile.js';
|
|
14
14
|
import { executeLongTermMemoryPhase } from './turn-phases/long-term-memory.js';
|
|
15
15
|
import { assembleConversationHistory } from './turn-phases/conversation-history.js';
|
|
16
16
|
import { AgentOSResponseChunkType, } from './types/AgentOSResponse.js';
|
|
17
|
+
import { AGENTOS_PENDING_EXTERNAL_TOOL_REQUEST_METADATA_KEY } from './types/AgentOSExternalToolRequest.js';
|
|
17
18
|
import { GMIInteractionType, // Added for GMITurnInput
|
|
18
19
|
GMIOutputChunkType, // Added for comparisons
|
|
19
20
|
} from '../cognitive_substrate/IGMI.js';
|
|
@@ -23,7 +24,7 @@ import { GMIError, GMIErrorCode } from '../utils/errors.js';
|
|
|
23
24
|
import { normalizeUsage, snapshotPersonaDetails } from '../core/orchestration/helpers.js';
|
|
24
25
|
import { DEFAULT_PROMPT_PROFILE_CONFIG, } from '../core/prompting/PromptProfileRouter.js';
|
|
25
26
|
import { DEFAULT_ROLLING_SUMMARY_COMPACTION_CONFIG, } from '../core/conversation/RollingSummaryCompactor.js';
|
|
26
|
-
import { DEFAULT_LONG_TERM_MEMORY_POLICY, hasAnyLongTermMemoryScope, LONG_TERM_MEMORY_POLICY_METADATA_KEY, resolveLongTermMemoryPolicy, } from '../core/conversation/LongTermMemoryPolicy.js';
|
|
27
|
+
import { DEFAULT_LONG_TERM_MEMORY_POLICY, hasAnyLongTermMemoryScope, LONG_TERM_MEMORY_POLICY_METADATA_KEY, ORGANIZATION_ID_METADATA_KEY, resolveLongTermMemoryPolicy, } from '../core/conversation/LongTermMemoryPolicy.js';
|
|
27
28
|
import { recordAgentOSToolResultMetrics, recordAgentOSTurnMetrics, recordExceptionOnActiveSpan, runWithSpanContext, startAgentOSSpan, withAgentOSSpan, } from '../core/observability/otel.js';
|
|
28
29
|
// TaskOutcomeKpiWindowEntry imported from types/OrchestratorConfig.ts
|
|
29
30
|
// AdaptiveExecutionDecision imported from TaskOutcomeTelemetryManager
|
|
@@ -115,6 +116,17 @@ function resolveTenantRoutingConfig(config) {
|
|
|
115
116
|
strictOrganizationIsolation: Boolean(config?.strictOrganizationIsolation),
|
|
116
117
|
};
|
|
117
118
|
}
|
|
119
|
+
function buildToolCallChunkMetadata(streamContext, extra) {
|
|
120
|
+
const metadata = {
|
|
121
|
+
sessionId: streamContext.sessionId,
|
|
122
|
+
conversationId: streamContext.conversationId,
|
|
123
|
+
...extra,
|
|
124
|
+
};
|
|
125
|
+
if (streamContext.organizationId) {
|
|
126
|
+
metadata.organizationId = streamContext.organizationId;
|
|
127
|
+
}
|
|
128
|
+
return metadata;
|
|
129
|
+
}
|
|
118
130
|
/**
|
|
119
131
|
* @class AgentOSOrchestrator
|
|
120
132
|
* @description
|
|
@@ -151,7 +163,11 @@ export class AgentOSOrchestrator {
|
|
|
151
163
|
console.warn('AgentOSOrchestrator already initialized. Skipping re-initialization.');
|
|
152
164
|
return;
|
|
153
165
|
}
|
|
154
|
-
if (!dependencies.gmiManager ||
|
|
166
|
+
if (!dependencies.gmiManager ||
|
|
167
|
+
!dependencies.toolOrchestrator ||
|
|
168
|
+
!dependencies.conversationManager ||
|
|
169
|
+
!dependencies.streamingManager ||
|
|
170
|
+
!dependencies.modelProviderManager) {
|
|
155
171
|
throw new GMIError('AgentOSOrchestrator: Missing essential dependencies (gmiManager, toolOrchestrator, conversationManager, streamingManager, modelProviderManager).', GMIErrorCode.CONFIGURATION_ERROR);
|
|
156
172
|
}
|
|
157
173
|
this.config = {
|
|
@@ -163,7 +179,10 @@ export class AgentOSOrchestrator {
|
|
|
163
179
|
: (config.promptProfileConfig ?? DEFAULT_PROMPT_PROFILE_CONFIG),
|
|
164
180
|
rollingSummaryCompactionConfig: config.rollingSummaryCompactionConfig === null
|
|
165
181
|
? null
|
|
166
|
-
: {
|
|
182
|
+
: {
|
|
183
|
+
...DEFAULT_ROLLING_SUMMARY_COMPACTION_CONFIG,
|
|
184
|
+
...(config.rollingSummaryCompactionConfig ?? {}),
|
|
185
|
+
},
|
|
167
186
|
rollingSummaryCompactionProfilesConfig: config.rollingSummaryCompactionProfilesConfig ?? null,
|
|
168
187
|
rollingSummarySystemPrompt: config.rollingSummarySystemPrompt ?? '',
|
|
169
188
|
rollingSummaryStateKey: config.rollingSummaryStateKey ?? 'rollingSummaryState',
|
|
@@ -194,10 +213,7 @@ export class AgentOSOrchestrator {
|
|
|
194
213
|
const tenantConfig = this.config.tenantRouting;
|
|
195
214
|
if (tenantConfig.mode === 'single_tenant') {
|
|
196
215
|
const fallback = tenantConfig.defaultOrganizationId;
|
|
197
|
-
if (tenantConfig.strictOrganizationIsolation &&
|
|
198
|
-
inbound &&
|
|
199
|
-
fallback &&
|
|
200
|
-
inbound !== fallback) {
|
|
216
|
+
if (tenantConfig.strictOrganizationIsolation && inbound && fallback && inbound !== fallback) {
|
|
201
217
|
throw new GMIError(`organizationId '${inbound}' does not match configured single-tenant org '${fallback}'.`, GMIErrorCode.VALIDATION_ERROR, {
|
|
202
218
|
mode: tenantConfig.mode,
|
|
203
219
|
inboundOrganizationId: inbound,
|
|
@@ -304,6 +320,100 @@ export class AgentOSOrchestrator {
|
|
|
304
320
|
});
|
|
305
321
|
return agentOSStreamId;
|
|
306
322
|
}
|
|
323
|
+
async orchestrateResumedToolResults(pendingRequest, toolResults, options = {}) {
|
|
324
|
+
this.ensureInitialized();
|
|
325
|
+
const agentOSStreamId = await this.dependencies.streamingManager.createStream();
|
|
326
|
+
console.log(`AgentOSOrchestrator: Resuming external tool request for conversation ${pendingRequest.conversationId} on new stream ${agentOSStreamId}.`);
|
|
327
|
+
const rootSpan = startAgentOSSpan('agentos.resume_external_tool_request', {
|
|
328
|
+
attributes: {
|
|
329
|
+
'agentos.stream_id': agentOSStreamId,
|
|
330
|
+
'agentos.user_id': pendingRequest.userId,
|
|
331
|
+
'agentos.session_id': pendingRequest.sessionId,
|
|
332
|
+
'agentos.conversation_id': pendingRequest.conversationId,
|
|
333
|
+
'agentos.persona_id': pendingRequest.personaId,
|
|
334
|
+
'agentos.tool_result_count': toolResults.length,
|
|
335
|
+
},
|
|
336
|
+
});
|
|
337
|
+
const run = async () => this._resumeToolResultsInternal(agentOSStreamId, pendingRequest, toolResults, options);
|
|
338
|
+
const promise = rootSpan ? runWithSpanContext(rootSpan, run) : run();
|
|
339
|
+
promise
|
|
340
|
+
.catch(async (criticalError) => {
|
|
341
|
+
if (rootSpan) {
|
|
342
|
+
try {
|
|
343
|
+
rootSpan.recordException(criticalError);
|
|
344
|
+
}
|
|
345
|
+
catch {
|
|
346
|
+
// ignore
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
console.error(`AgentOSOrchestrator: Critical unhandled error in _resumeToolResultsInternal for stream ${agentOSStreamId}:`, criticalError);
|
|
350
|
+
try {
|
|
351
|
+
await this.chunks.pushError(agentOSStreamId, pendingRequest.personaId || 'unknown_persona', pendingRequest.gmiInstanceId || 'orchestrator_resume_critical', GMIErrorCode.INTERNAL_SERVER_ERROR, `A critical external-tool resume error occurred: ${criticalError.message}`, { name: criticalError.name, stack: criticalError.stack });
|
|
352
|
+
await this.dependencies.streamingManager.closeStream(agentOSStreamId, 'Critical external-tool resume error');
|
|
353
|
+
}
|
|
354
|
+
catch (cleanupError) {
|
|
355
|
+
console.error(`AgentOSOrchestrator: Error during resume critical-error cleanup for stream ${agentOSStreamId}:`, cleanupError);
|
|
356
|
+
}
|
|
357
|
+
this.activeStreamContexts.delete(agentOSStreamId);
|
|
358
|
+
})
|
|
359
|
+
.finally(() => {
|
|
360
|
+
try {
|
|
361
|
+
rootSpan?.end();
|
|
362
|
+
}
|
|
363
|
+
catch {
|
|
364
|
+
// ignore
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
return agentOSStreamId;
|
|
368
|
+
}
|
|
369
|
+
async _resumeToolResultsInternal(agentOSStreamId, pendingRequest, toolResults, options) {
|
|
370
|
+
if (!Array.isArray(toolResults) || toolResults.length === 0) {
|
|
371
|
+
throw new GMIError('At least one tool result is required to resume an external tool request.', GMIErrorCode.VALIDATION_ERROR, { agentOSStreamId, conversationId: pendingRequest.conversationId });
|
|
372
|
+
}
|
|
373
|
+
const gmiResult = await withAgentOSSpan('agentos.gmi.resume_get_or_create', async (span) => {
|
|
374
|
+
span?.setAttribute('agentos.user_id', pendingRequest.userId);
|
|
375
|
+
span?.setAttribute('agentos.session_id', pendingRequest.sessionId);
|
|
376
|
+
span?.setAttribute('agentos.conversation_id', pendingRequest.conversationId);
|
|
377
|
+
span?.setAttribute('agentos.persona_id', pendingRequest.personaId);
|
|
378
|
+
return this.dependencies.gmiManager.getOrCreateGMIForSession(pendingRequest.userId, pendingRequest.sessionId, pendingRequest.personaId, pendingRequest.conversationId, options.preferredModelId, options.preferredProviderId, options.userApiKeys);
|
|
379
|
+
});
|
|
380
|
+
const gmi = gmiResult.gmi;
|
|
381
|
+
const conversationContext = gmiResult.conversationContext;
|
|
382
|
+
const currentPersonaId = gmi.getCurrentPrimaryPersonaId();
|
|
383
|
+
const gmiInstanceIdForChunks = gmi.getGMIId();
|
|
384
|
+
const storedOrganizationId = conversationContext.getMetadata(ORGANIZATION_ID_METADATA_KEY);
|
|
385
|
+
const resolvedOrganizationId = this.resolveOrganizationContext(options.organizationId ?? storedOrganizationId);
|
|
386
|
+
const streamContext = {
|
|
387
|
+
gmi,
|
|
388
|
+
userId: pendingRequest.userId,
|
|
389
|
+
sessionId: pendingRequest.sessionId,
|
|
390
|
+
personaId: currentPersonaId,
|
|
391
|
+
conversationId: conversationContext.sessionId,
|
|
392
|
+
organizationId: resolvedOrganizationId,
|
|
393
|
+
conversationContext,
|
|
394
|
+
userApiKeys: options.userApiKeys,
|
|
395
|
+
processingOptions: {
|
|
396
|
+
preferredModelId: options.preferredModelId,
|
|
397
|
+
preferredProviderId: options.preferredProviderId,
|
|
398
|
+
},
|
|
399
|
+
};
|
|
400
|
+
this.activeStreamContexts.set(agentOSStreamId, streamContext);
|
|
401
|
+
if (gmi.hydrateConversationHistory) {
|
|
402
|
+
gmi.hydrateConversationHistory(conversationContext.getHistory(undefined, [MessageRole.ERROR, MessageRole.THOUGHT]));
|
|
403
|
+
}
|
|
404
|
+
if (gmi.hydrateTurnContext) {
|
|
405
|
+
gmi.hydrateTurnContext({
|
|
406
|
+
sessionId: pendingRequest.sessionId,
|
|
407
|
+
conversationId: conversationContext.sessionId,
|
|
408
|
+
organizationId: resolvedOrganizationId,
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
await this.chunks.pushChunk(agentOSStreamId, AgentOSResponseChunkType.SYSTEM_PROGRESS, gmiInstanceIdForChunks, currentPersonaId, false, {
|
|
412
|
+
message: `Resuming external tool request for conversation ${conversationContext.sessionId}...`,
|
|
413
|
+
progressPercentage: 10,
|
|
414
|
+
});
|
|
415
|
+
await this.orchestrateToolResults(agentOSStreamId, toolResults);
|
|
416
|
+
}
|
|
307
417
|
/**
|
|
308
418
|
* Internal processing logic for a turn, designed to be called without await by `orchestrateTurn`.
|
|
309
419
|
* @private
|
|
@@ -346,15 +456,25 @@ export class AgentOSOrchestrator {
|
|
|
346
456
|
gmiInstanceIdForChunks = gmi.getGMIId();
|
|
347
457
|
turnMetricsPersonaId = currentPersonaId;
|
|
348
458
|
const streamContext = {
|
|
349
|
-
gmi,
|
|
459
|
+
gmi,
|
|
460
|
+
userId: input.userId,
|
|
461
|
+
sessionId: input.sessionId,
|
|
462
|
+
personaId: currentPersonaId,
|
|
463
|
+
organizationId: organizationIdForMemory,
|
|
350
464
|
conversationId: conversationContext.sessionId, // Use actual conversation ID from context
|
|
351
|
-
conversationContext,
|
|
465
|
+
conversationContext,
|
|
466
|
+
userApiKeys: input.userApiKeys,
|
|
467
|
+
processingOptions: input.options,
|
|
352
468
|
};
|
|
353
469
|
this.activeStreamContexts.set(agentOSStreamId, streamContext);
|
|
354
|
-
await this.chunks.pushChunk(agentOSStreamId, AgentOSResponseChunkType.SYSTEM_PROGRESS, gmiInstanceIdForChunks, currentPersonaId, false, {
|
|
470
|
+
await this.chunks.pushChunk(agentOSStreamId, AgentOSResponseChunkType.SYSTEM_PROGRESS, gmiInstanceIdForChunks, currentPersonaId, false, {
|
|
471
|
+
message: `Initializing persona ${currentPersonaId}... GMI: ${gmiInstanceIdForChunks}`,
|
|
472
|
+
progressPercentage: 10,
|
|
473
|
+
});
|
|
355
474
|
const gmiInput = this.constructGMITurnInput(agentOSStreamId, input, streamContext);
|
|
356
475
|
let turnPlan = null;
|
|
357
476
|
const resolvedOrganizationId = this.resolveOrganizationContext(input.organizationId);
|
|
477
|
+
streamContext.organizationId = resolvedOrganizationId;
|
|
358
478
|
if (this.dependencies.turnPlanner) {
|
|
359
479
|
const planningMessage = gmiInput.type === GMIInteractionType.TEXT && typeof gmiInput.content === 'string'
|
|
360
480
|
? gmiInput.content
|
|
@@ -475,7 +595,9 @@ export class AgentOSOrchestrator {
|
|
|
475
595
|
else if (gmiInput.type === GMIInteractionType.SYSTEM_MESSAGE) {
|
|
476
596
|
conversationContext.addMessage({
|
|
477
597
|
role: MessageRole.SYSTEM,
|
|
478
|
-
content: typeof gmiInput.content === 'string'
|
|
598
|
+
content: typeof gmiInput.content === 'string'
|
|
599
|
+
? gmiInput.content
|
|
600
|
+
: JSON.stringify(gmiInput.content),
|
|
479
601
|
metadata: { agentPersonaId: currentPersonaId, source: 'agentos_input_system' },
|
|
480
602
|
});
|
|
481
603
|
}
|
|
@@ -490,7 +612,8 @@ export class AgentOSOrchestrator {
|
|
|
490
612
|
}
|
|
491
613
|
}
|
|
492
614
|
// Build conversationHistoryForPrompt after compaction/routing so it can reflect rolling-summary trimming.
|
|
493
|
-
const modeForRouting = typeof input.options?.customFlags?.mode === 'string' &&
|
|
615
|
+
const modeForRouting = typeof input.options?.customFlags?.mode === 'string' &&
|
|
616
|
+
input.options.customFlags.mode.trim()
|
|
494
617
|
? input.options.customFlags.mode.trim()
|
|
495
618
|
: currentPersonaId;
|
|
496
619
|
// --- Rolling summary compaction (delegated to turn-phases/rolling-summary) ---
|
|
@@ -504,7 +627,7 @@ export class AgentOSOrchestrator {
|
|
|
504
627
|
rollingSummaryStateKey: this.config.rollingSummaryStateKey,
|
|
505
628
|
modelProviderManager: this.dependencies.modelProviderManager,
|
|
506
629
|
});
|
|
507
|
-
const { result: rollingSummaryResult, profileId: rollingSummaryProfileId, configForTurn: rollingSummaryConfigForTurn } = rollingSummaryPhase;
|
|
630
|
+
const { result: rollingSummaryResult, profileId: rollingSummaryProfileId, configForTurn: rollingSummaryConfigForTurn, } = rollingSummaryPhase;
|
|
508
631
|
const rollingSummaryEnabled = rollingSummaryPhase.enabled;
|
|
509
632
|
const rollingSummaryText = rollingSummaryPhase.summaryText;
|
|
510
633
|
if (!gmiInput.metadata) {
|
|
@@ -753,20 +876,26 @@ export class AgentOSOrchestrator {
|
|
|
753
876
|
// Send a final response chunk if not already implicitly sent by an error or final GMI chunk transform.
|
|
754
877
|
// This part needs careful consideration of what `lastGMIOutput` represents here.
|
|
755
878
|
// It should represent the *actual* TReturn from the GMI's processing.
|
|
756
|
-
const finalGMIStateForResponse = lastGMIOutput ||
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
};
|
|
879
|
+
const finalGMIStateForResponse = lastGMIOutput || {
|
|
880
|
+
isFinal: true,
|
|
881
|
+
responseText: gmi ? 'Processing complete.' : 'Processing ended.',
|
|
882
|
+
};
|
|
761
883
|
if (finalGMIStateForResponse.isFinal === false &&
|
|
762
884
|
Array.isArray(finalGMIStateForResponse.toolCalls) &&
|
|
763
885
|
finalGMIStateForResponse.toolCalls.length > 0) {
|
|
764
886
|
keepStreamContextActive = true;
|
|
887
|
+
if (conversationContext) {
|
|
888
|
+
await this.persistPendingExternalToolRequest(agentOSStreamId, streamContext, gmiInstanceIdForChunks, finalGMIStateForResponse.toolCalls, finalGMIStateForResponse.responseText ||
|
|
889
|
+
'Agent requires tool execution before it can complete the turn.');
|
|
890
|
+
}
|
|
765
891
|
if (!streamedToolCallRequest) {
|
|
766
892
|
await this.chunks.pushChunk(agentOSStreamId, AgentOSResponseChunkType.TOOL_CALL_REQUEST, gmiInstanceIdForChunks, currentPersonaId, false, {
|
|
767
893
|
toolCalls: finalGMIStateForResponse.toolCalls,
|
|
768
894
|
rationale: finalGMIStateForResponse.responseText ||
|
|
769
895
|
'Agent requires tool execution before it can complete the turn.',
|
|
896
|
+
executionMode: 'external',
|
|
897
|
+
requiresExternalToolResult: true,
|
|
898
|
+
metadata: buildToolCallChunkMetadata(streamContext),
|
|
770
899
|
});
|
|
771
900
|
}
|
|
772
901
|
return;
|
|
@@ -777,7 +906,9 @@ export class AgentOSOrchestrator {
|
|
|
777
906
|
totalTokens: normalizedUsage.totalTokens,
|
|
778
907
|
promptTokens: normalizedUsage.promptTokens,
|
|
779
908
|
completionTokens: normalizedUsage.completionTokens,
|
|
780
|
-
totalCostUSD: typeof normalizedUsage.totalCostUSD === 'number'
|
|
909
|
+
totalCostUSD: typeof normalizedUsage.totalCostUSD === 'number'
|
|
910
|
+
? normalizedUsage.totalCostUSD
|
|
911
|
+
: undefined,
|
|
781
912
|
};
|
|
782
913
|
}
|
|
783
914
|
if (didForceTerminate || Boolean(finalGMIStateForResponse.error)) {
|
|
@@ -844,18 +975,23 @@ export class AgentOSOrchestrator {
|
|
|
844
975
|
},
|
|
845
976
|
});
|
|
846
977
|
}
|
|
978
|
+
if (conversationContext) {
|
|
979
|
+
await this.clearPendingExternalToolRequest(conversationContext);
|
|
980
|
+
}
|
|
847
981
|
// Persist assistant output into ConversationContext for durable memory / prompt reconstruction.
|
|
848
982
|
if (this.config.enableConversationalPersistence && conversationContext) {
|
|
849
983
|
const persistContext = conversationContext;
|
|
850
984
|
try {
|
|
851
|
-
if (typeof finalGMIStateForResponse.responseText === 'string' &&
|
|
985
|
+
if (typeof finalGMIStateForResponse.responseText === 'string' &&
|
|
986
|
+
finalGMIStateForResponse.responseText.trim()) {
|
|
852
987
|
conversationContext.addMessage({
|
|
853
988
|
role: MessageRole.ASSISTANT,
|
|
854
989
|
content: finalGMIStateForResponse.responseText,
|
|
855
990
|
metadata: { agentPersonaId: currentPersonaId, source: 'agentos_output' },
|
|
856
991
|
});
|
|
857
992
|
}
|
|
858
|
-
else if (finalGMIStateForResponse.toolCalls &&
|
|
993
|
+
else if (finalGMIStateForResponse.toolCalls &&
|
|
994
|
+
finalGMIStateForResponse.toolCalls.length > 0) {
|
|
859
995
|
conversationContext.addMessage({
|
|
860
996
|
role: MessageRole.ASSISTANT,
|
|
861
997
|
content: null,
|
|
@@ -885,10 +1021,12 @@ export class AgentOSOrchestrator {
|
|
|
885
1021
|
usage: normalizedUsage,
|
|
886
1022
|
reasoningTrace: finalGMIStateForResponse.reasoningTrace,
|
|
887
1023
|
error: finalGMIStateForResponse.error,
|
|
888
|
-
updatedConversationContext: conversationContext
|
|
1024
|
+
updatedConversationContext: conversationContext
|
|
1025
|
+
? conversationContext.toJSON()
|
|
1026
|
+
: undefined,
|
|
889
1027
|
activePersonaDetails: snapshotPersonaDetails(gmi?.getPersona?.()),
|
|
890
1028
|
});
|
|
891
|
-
await this.dependencies.streamingManager.closeStream(agentOSStreamId,
|
|
1029
|
+
await this.dependencies.streamingManager.closeStream(agentOSStreamId, 'Processing complete.');
|
|
892
1030
|
}
|
|
893
1031
|
catch (error) {
|
|
894
1032
|
turnMetricsStatus = 'error';
|
|
@@ -929,7 +1067,8 @@ export class AgentOSOrchestrator {
|
|
|
929
1067
|
},
|
|
930
1068
|
});
|
|
931
1069
|
await this.chunks.pushError(agentOSStreamId, currentPersonaId ?? 'unknown_persona', gmiInstanceIdForChunks, gmiErr.code, gmiErr.message, gmiErr.details);
|
|
932
|
-
await this.
|
|
1070
|
+
await this.clearPendingExternalToolRequest(conversationContext);
|
|
1071
|
+
await this.dependencies.streamingManager.closeStream(agentOSStreamId, 'Error during turn processing.');
|
|
933
1072
|
}
|
|
934
1073
|
finally {
|
|
935
1074
|
recordAgentOSTurnMetrics({
|
|
@@ -969,67 +1108,150 @@ export class AgentOSOrchestrator {
|
|
|
969
1108
|
* @throws {GMIError} If stream context is not found or GMI fails to handle result.
|
|
970
1109
|
*/
|
|
971
1110
|
async orchestrateToolResult(agentOSStreamId, toolCallId, toolName, toolOutput, isSuccess, errorMessage) {
|
|
1111
|
+
return this.orchestrateToolResults(agentOSStreamId, [
|
|
1112
|
+
{
|
|
1113
|
+
toolCallId,
|
|
1114
|
+
toolName,
|
|
1115
|
+
toolOutput,
|
|
1116
|
+
isSuccess,
|
|
1117
|
+
errorMessage,
|
|
1118
|
+
},
|
|
1119
|
+
]);
|
|
1120
|
+
}
|
|
1121
|
+
async orchestrateToolResults(agentOSStreamId, toolResults) {
|
|
972
1122
|
this.ensureInitialized();
|
|
973
1123
|
const startedAt = Date.now();
|
|
1124
|
+
if (!Array.isArray(toolResults) || toolResults.length === 0) {
|
|
1125
|
+
throw new GMIError('At least one tool result is required to continue the stream.', GMIErrorCode.VALIDATION_ERROR, { agentOSStreamId });
|
|
1126
|
+
}
|
|
974
1127
|
const streamContext = this.activeStreamContexts.get(agentOSStreamId);
|
|
975
1128
|
if (!streamContext) {
|
|
976
|
-
const errMsg = `Orchestrator: Received tool result for unknown or inactive streamId: ${agentOSStreamId}
|
|
1129
|
+
const errMsg = `Orchestrator: Received tool result for unknown or inactive streamId: ${agentOSStreamId}.`;
|
|
977
1130
|
console.error(errMsg);
|
|
978
1131
|
// Cannot push to a non-existent stream context. This is a critical failure.
|
|
979
|
-
throw new GMIError(errMsg, GMIErrorCode.RESOURCE_NOT_FOUND, {
|
|
1132
|
+
throw new GMIError(errMsg, GMIErrorCode.RESOURCE_NOT_FOUND, {
|
|
1133
|
+
agentOSStreamId,
|
|
1134
|
+
toolResults: toolResults.map((toolResult) => ({
|
|
1135
|
+
toolCallId: toolResult.toolCallId,
|
|
1136
|
+
toolName: toolResult.toolName,
|
|
1137
|
+
})),
|
|
1138
|
+
});
|
|
980
1139
|
}
|
|
981
1140
|
const { gmi, userId, personaId, conversationContext, userApiKeys } = streamContext;
|
|
982
1141
|
const gmiInstanceIdForChunks = gmi.getGMIId();
|
|
983
|
-
const
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
console.log(`AgentOSOrchestrator: Feeding tool result for stream ${agentOSStreamId}, GMI ${gmiInstanceIdForChunks}, tool call ${toolCallId} (${toolName}) back to GMI.`);
|
|
1142
|
+
const metricToolName = toolResults.length === 1 ? toolResults[0].toolName : '__batch_external_tools__';
|
|
1143
|
+
const metricToolSuccess = toolResults.every((toolResult) => toolResult.isSuccess);
|
|
1144
|
+
console.log(`AgentOSOrchestrator: Feeding ${toolResults.length} tool result(s) for stream ${agentOSStreamId}, GMI ${gmiInstanceIdForChunks} back to GMI.`);
|
|
987
1145
|
try {
|
|
988
1146
|
await withAgentOSSpan('agentos.tool_result', async (span) => {
|
|
989
1147
|
span?.setAttribute('agentos.stream_id', agentOSStreamId);
|
|
990
1148
|
span?.setAttribute('agentos.gmi_id', gmiInstanceIdForChunks);
|
|
991
|
-
span?.setAttribute('agentos.
|
|
992
|
-
span?.setAttribute('agentos.
|
|
993
|
-
span?.setAttribute('agentos.
|
|
1149
|
+
span?.setAttribute('agentos.tool_result_count', toolResults.length);
|
|
1150
|
+
span?.setAttribute('agentos.tool_call_ids', JSON.stringify(toolResults.map((toolResult) => toolResult.toolCallId)));
|
|
1151
|
+
span?.setAttribute('agentos.tool_names', JSON.stringify(toolResults.map((toolResult) => toolResult.toolName)));
|
|
1152
|
+
span?.setAttribute('agentos.tool_success', metricToolSuccess);
|
|
994
1153
|
try {
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1154
|
+
await this.clearPendingExternalToolRequest(conversationContext);
|
|
1155
|
+
for (const toolResult of toolResults) {
|
|
1156
|
+
await this.chunks.pushChunk(agentOSStreamId, AgentOSResponseChunkType.TOOL_RESULT_EMISSION, gmiInstanceIdForChunks, personaId, false, {
|
|
1157
|
+
toolCallId: toolResult.toolCallId,
|
|
1158
|
+
toolName: toolResult.toolName,
|
|
1159
|
+
toolResult: toolResult.toolOutput,
|
|
1160
|
+
isSuccess: toolResult.isSuccess,
|
|
1161
|
+
errorMessage: toolResult.errorMessage,
|
|
1162
|
+
});
|
|
1163
|
+
if (this.config.enableConversationalPersistence && conversationContext) {
|
|
1000
1164
|
conversationContext.addMessage({
|
|
1001
1165
|
role: MessageRole.TOOL,
|
|
1002
|
-
content: typeof toolOutput === 'string'
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1166
|
+
content: typeof toolResult.toolOutput === 'string'
|
|
1167
|
+
? toolResult.toolOutput
|
|
1168
|
+
: JSON.stringify(toolResult.toolOutput),
|
|
1169
|
+
tool_call_id: toolResult.toolCallId,
|
|
1170
|
+
name: toolResult.toolName,
|
|
1171
|
+
metadata: {
|
|
1172
|
+
agentPersonaId: personaId,
|
|
1173
|
+
source: 'agentos_tool_result',
|
|
1174
|
+
isSuccess: toolResult.isSuccess,
|
|
1175
|
+
},
|
|
1006
1176
|
});
|
|
1177
|
+
}
|
|
1178
|
+
}
|
|
1179
|
+
if (this.config.enableConversationalPersistence && conversationContext) {
|
|
1180
|
+
try {
|
|
1007
1181
|
await withAgentOSSpan('agentos.conversation.save', async (child) => {
|
|
1008
1182
|
child?.setAttribute('agentos.stage', 'tool_result');
|
|
1009
1183
|
child?.setAttribute('agentos.stream_id', agentOSStreamId);
|
|
1184
|
+
child?.setAttribute('agentos.tool_result_count', toolResults.length);
|
|
1010
1185
|
await this.dependencies.conversationManager.saveConversation(conversationContext);
|
|
1011
1186
|
});
|
|
1012
1187
|
}
|
|
1013
1188
|
catch (persistError) {
|
|
1014
|
-
console.warn(`AgentOSOrchestrator: Failed to persist tool
|
|
1189
|
+
console.warn(`AgentOSOrchestrator: Failed to persist tool results to ConversationContext for stream ${agentOSStreamId}.`, persistError);
|
|
1015
1190
|
}
|
|
1016
1191
|
}
|
|
1017
1192
|
// GMI processes the tool result and gives a *final output for that step*
|
|
1018
1193
|
const gmiOutputAfterTool = await withAgentOSSpan('agentos.gmi.handle_tool_result', async (child) => {
|
|
1019
1194
|
child?.setAttribute('agentos.stream_id', agentOSStreamId);
|
|
1020
|
-
child?.setAttribute('agentos.
|
|
1021
|
-
child?.setAttribute('agentos.
|
|
1022
|
-
child?.setAttribute('agentos.
|
|
1023
|
-
|
|
1195
|
+
child?.setAttribute('agentos.tool_result_count', toolResults.length);
|
|
1196
|
+
child?.setAttribute('agentos.tool_call_ids', JSON.stringify(toolResults.map((toolResult) => toolResult.toolCallId)));
|
|
1197
|
+
child?.setAttribute('agentos.tool_names', JSON.stringify(toolResults.map((toolResult) => toolResult.toolName)));
|
|
1198
|
+
child?.setAttribute('agentos.tool_success', metricToolSuccess);
|
|
1199
|
+
if (toolResults.length > 1) {
|
|
1200
|
+
if (!gmi.handleToolResults) {
|
|
1201
|
+
throw new GMIError(`GMI ${gmiInstanceIdForChunks} does not support batched external tool continuation.`, GMIErrorCode.INVALID_STATE, {
|
|
1202
|
+
agentOSStreamId,
|
|
1203
|
+
gmiInstanceId: gmiInstanceIdForChunks,
|
|
1204
|
+
toolResults: toolResults.map((toolResult) => ({
|
|
1205
|
+
toolCallId: toolResult.toolCallId,
|
|
1206
|
+
toolName: toolResult.toolName,
|
|
1207
|
+
})),
|
|
1208
|
+
});
|
|
1209
|
+
}
|
|
1210
|
+
return gmi.handleToolResults(toolResults.map((toolResult) => ({
|
|
1211
|
+
toolCallId: toolResult.toolCallId,
|
|
1212
|
+
toolName: toolResult.toolName,
|
|
1213
|
+
output: toolResult.isSuccess
|
|
1214
|
+
? toolResult.toolOutput
|
|
1215
|
+
: {
|
|
1216
|
+
code: 'EXTERNAL_TOOL_ERROR',
|
|
1217
|
+
message: toolResult.errorMessage ||
|
|
1218
|
+
`External tool '${toolResult.toolName}' execution failed.`,
|
|
1219
|
+
},
|
|
1220
|
+
isError: !toolResult.isSuccess,
|
|
1221
|
+
errorDetails: toolResult.isSuccess
|
|
1222
|
+
? undefined
|
|
1223
|
+
: {
|
|
1224
|
+
code: 'EXTERNAL_TOOL_ERROR',
|
|
1225
|
+
message: toolResult.errorMessage ||
|
|
1226
|
+
`External tool '${toolResult.toolName}' execution failed.`,
|
|
1227
|
+
},
|
|
1228
|
+
})), userId, userApiKeys || {});
|
|
1229
|
+
}
|
|
1230
|
+
const [toolResult] = toolResults;
|
|
1231
|
+
const toolResultPayload = toolResult.isSuccess
|
|
1232
|
+
? { type: 'success', result: toolResult.toolOutput }
|
|
1233
|
+
: {
|
|
1234
|
+
type: 'error',
|
|
1235
|
+
error: {
|
|
1236
|
+
code: 'EXTERNAL_TOOL_ERROR',
|
|
1237
|
+
message: toolResult.errorMessage ||
|
|
1238
|
+
`External tool '${toolResult.toolName}' execution failed.`,
|
|
1239
|
+
},
|
|
1240
|
+
};
|
|
1241
|
+
return gmi.handleToolResult(toolResult.toolCallId, toolResult.toolName, toolResultPayload, userId, userApiKeys || {});
|
|
1024
1242
|
});
|
|
1025
1243
|
// Process the GMIOutput (which is not a stream of chunks)
|
|
1026
1244
|
await this.processGMIOutput(agentOSStreamId, streamContext, gmiOutputAfterTool, false);
|
|
1027
1245
|
// If GMIOutput indicates further tool calls are needed by the GMI
|
|
1028
1246
|
if (gmiOutputAfterTool.toolCalls && gmiOutputAfterTool.toolCalls.length > 0) {
|
|
1247
|
+
await this.persistPendingExternalToolRequest(agentOSStreamId, streamContext, gmiInstanceIdForChunks, gmiOutputAfterTool.toolCalls, gmiOutputAfterTool.responseText || 'Agent requires further tool execution.');
|
|
1029
1248
|
await this.chunks.pushChunk(agentOSStreamId, AgentOSResponseChunkType.TOOL_CALL_REQUEST, gmiInstanceIdForChunks, personaId, false, // Not final, more interaction expected
|
|
1030
1249
|
{
|
|
1031
1250
|
toolCalls: gmiOutputAfterTool.toolCalls,
|
|
1032
1251
|
rationale: gmiOutputAfterTool.responseText || 'Agent requires further tool execution.',
|
|
1252
|
+
executionMode: 'external',
|
|
1253
|
+
requiresExternalToolResult: true,
|
|
1254
|
+
metadata: buildToolCallChunkMetadata(streamContext),
|
|
1033
1255
|
});
|
|
1034
1256
|
// The orchestrator now waits for another external call to `orchestrateToolResult` for these new calls.
|
|
1035
1257
|
}
|
|
@@ -1046,7 +1268,8 @@ export class AgentOSOrchestrator {
|
|
|
1046
1268
|
metadata: { agentPersonaId: personaId, source: 'agentos_output' },
|
|
1047
1269
|
});
|
|
1048
1270
|
}
|
|
1049
|
-
else if (gmiOutputAfterTool.toolCalls &&
|
|
1271
|
+
else if (gmiOutputAfterTool.toolCalls &&
|
|
1272
|
+
gmiOutputAfterTool.toolCalls.length > 0) {
|
|
1050
1273
|
conversationContext.addMessage({
|
|
1051
1274
|
role: MessageRole.ASSISTANT,
|
|
1052
1275
|
content: null,
|
|
@@ -1088,6 +1311,7 @@ export class AgentOSOrchestrator {
|
|
|
1088
1311
|
const gmiErr = GMIError.wrap?.(error, GMIErrorCode.TOOL_ERROR, `Error in orchestrateToolResult for stream ${agentOSStreamId}`) ||
|
|
1089
1312
|
new GMIError(`Error in orchestrateToolResult for stream ${agentOSStreamId}: ${error.message}`, GMIErrorCode.TOOL_ERROR, error);
|
|
1090
1313
|
console.error(`AgentOSOrchestrator: Critical error processing tool result for stream ${agentOSStreamId}:`, gmiErr);
|
|
1314
|
+
await this.clearPendingExternalToolRequest(conversationContext);
|
|
1091
1315
|
await this.chunks.pushError(agentOSStreamId, personaId, gmiInstanceIdForChunks, gmiErr.code, gmiErr.message, gmiErr.details);
|
|
1092
1316
|
this.activeStreamContexts.delete(agentOSStreamId);
|
|
1093
1317
|
await this.dependencies.streamingManager.closeStream(agentOSStreamId, 'Critical error during tool result processing.');
|
|
@@ -1097,20 +1321,70 @@ export class AgentOSOrchestrator {
|
|
|
1097
1321
|
recordAgentOSToolResultMetrics({
|
|
1098
1322
|
durationMs: Date.now() - startedAt,
|
|
1099
1323
|
status: 'ok',
|
|
1100
|
-
toolName,
|
|
1101
|
-
toolSuccess:
|
|
1324
|
+
toolName: metricToolName,
|
|
1325
|
+
toolSuccess: metricToolSuccess,
|
|
1102
1326
|
});
|
|
1103
1327
|
}
|
|
1104
1328
|
catch (error) {
|
|
1105
1329
|
recordAgentOSToolResultMetrics({
|
|
1106
1330
|
durationMs: Date.now() - startedAt,
|
|
1107
1331
|
status: 'error',
|
|
1108
|
-
toolName,
|
|
1109
|
-
toolSuccess:
|
|
1332
|
+
toolName: metricToolName,
|
|
1333
|
+
toolSuccess: metricToolSuccess,
|
|
1110
1334
|
});
|
|
1111
1335
|
throw error;
|
|
1112
1336
|
}
|
|
1113
1337
|
}
|
|
1338
|
+
buildPendingExternalToolRequest(agentOSStreamId, streamContext, gmiInstanceId, toolCalls, rationale) {
|
|
1339
|
+
return {
|
|
1340
|
+
streamId: agentOSStreamId,
|
|
1341
|
+
sessionId: streamContext.sessionId,
|
|
1342
|
+
conversationId: streamContext.conversationId,
|
|
1343
|
+
userId: streamContext.userId,
|
|
1344
|
+
personaId: streamContext.personaId,
|
|
1345
|
+
gmiInstanceId,
|
|
1346
|
+
toolCalls,
|
|
1347
|
+
rationale,
|
|
1348
|
+
requestedAt: new Date().toISOString(),
|
|
1349
|
+
};
|
|
1350
|
+
}
|
|
1351
|
+
async persistPendingExternalToolRequest(agentOSStreamId, streamContext, gmiInstanceId, toolCalls, rationale) {
|
|
1352
|
+
const { conversationContext, personaId } = streamContext;
|
|
1353
|
+
const pendingRequest = this.buildPendingExternalToolRequest(agentOSStreamId, streamContext, gmiInstanceId, toolCalls, rationale);
|
|
1354
|
+
if (toolCalls.length > 0) {
|
|
1355
|
+
conversationContext.addMessage({
|
|
1356
|
+
role: MessageRole.ASSISTANT,
|
|
1357
|
+
content: null,
|
|
1358
|
+
tool_calls: toolCalls,
|
|
1359
|
+
metadata: { agentPersonaId: personaId, source: 'agentos_output_tool_calls' },
|
|
1360
|
+
});
|
|
1361
|
+
}
|
|
1362
|
+
conversationContext.setMetadata(AGENTOS_PENDING_EXTERNAL_TOOL_REQUEST_METADATA_KEY, pendingRequest);
|
|
1363
|
+
if (this.config.enableConversationalPersistence) {
|
|
1364
|
+
await withAgentOSSpan('agentos.conversation.save', async (span) => {
|
|
1365
|
+
span?.setAttribute('agentos.stage', 'pending_external_tool_request');
|
|
1366
|
+
span?.setAttribute('agentos.stream_id', agentOSStreamId);
|
|
1367
|
+
await this.dependencies.conversationManager.saveConversation(conversationContext);
|
|
1368
|
+
});
|
|
1369
|
+
}
|
|
1370
|
+
return pendingRequest;
|
|
1371
|
+
}
|
|
1372
|
+
async clearPendingExternalToolRequest(conversationContext) {
|
|
1373
|
+
if (!conversationContext) {
|
|
1374
|
+
return;
|
|
1375
|
+
}
|
|
1376
|
+
if (conversationContext.getMetadata(AGENTOS_PENDING_EXTERNAL_TOOL_REQUEST_METADATA_KEY) ===
|
|
1377
|
+
undefined) {
|
|
1378
|
+
return;
|
|
1379
|
+
}
|
|
1380
|
+
conversationContext.setMetadata(AGENTOS_PENDING_EXTERNAL_TOOL_REQUEST_METADATA_KEY, undefined);
|
|
1381
|
+
if (this.config.enableConversationalPersistence) {
|
|
1382
|
+
await withAgentOSSpan('agentos.conversation.save', async (span) => {
|
|
1383
|
+
span?.setAttribute('agentos.stage', 'clear_pending_external_tool_request');
|
|
1384
|
+
await this.dependencies.conversationManager.saveConversation(conversationContext);
|
|
1385
|
+
});
|
|
1386
|
+
}
|
|
1387
|
+
}
|
|
1114
1388
|
/**
|
|
1115
1389
|
* Processes a GMIOutput object (typically from handleToolResult or the end of a processTurnStream)
|
|
1116
1390
|
* and pushes relevant chunks to the client stream.
|
|
@@ -1128,6 +1402,7 @@ export class AgentOSOrchestrator {
|
|
|
1128
1402
|
await this.chunks.pushChunk(agentOSStreamId, AgentOSResponseChunkType.UI_COMMAND, gmiInstanceIdForChunks, personaId, false, { uiCommands: gmiOutput.uiCommands });
|
|
1129
1403
|
}
|
|
1130
1404
|
if (gmiOutput.error) {
|
|
1405
|
+
await this.clearPendingExternalToolRequest(conversationContext);
|
|
1131
1406
|
await this.chunks.pushError(agentOSStreamId, personaId, gmiInstanceIdForChunks, gmiOutput.error.code, gmiOutput.error.message, gmiOutput.error.details);
|
|
1132
1407
|
// If an error occurs in GMIOutput, it's usually final for this interaction path
|
|
1133
1408
|
if (gmiOutput.isFinal) {
|
|
@@ -1139,6 +1414,7 @@ export class AgentOSOrchestrator {
|
|
|
1139
1414
|
// Note: Tool calls from GMIOutput are handled by the calling method (orchestrateTurn or orchestrateToolResult)
|
|
1140
1415
|
// to decide on looping or yielding ToolCallRequestChunks.
|
|
1141
1416
|
if (gmiOutput.isFinal && (!gmiOutput.toolCalls || gmiOutput.toolCalls.length === 0)) {
|
|
1417
|
+
await this.clearPendingExternalToolRequest(conversationContext);
|
|
1142
1418
|
if (this.config.enableConversationalPersistence && conversationContext) {
|
|
1143
1419
|
await withAgentOSSpan('agentos.conversation.save', async (span) => {
|
|
1144
1420
|
span?.setAttribute('agentos.stage', 'gmi_output_final');
|
|
@@ -1160,7 +1436,7 @@ export class AgentOSOrchestrator {
|
|
|
1160
1436
|
activePersonaDetails: snapshotPersonaDetails(gmi.getPersona?.()),
|
|
1161
1437
|
});
|
|
1162
1438
|
this.activeStreamContexts.delete(agentOSStreamId);
|
|
1163
|
-
await this.dependencies.streamingManager.closeStream(agentOSStreamId,
|
|
1439
|
+
await this.dependencies.streamingManager.closeStream(agentOSStreamId, 'Processing complete.');
|
|
1164
1440
|
}
|
|
1165
1441
|
}
|
|
1166
1442
|
/**
|
|
@@ -1185,8 +1461,17 @@ export class AgentOSOrchestrator {
|
|
|
1185
1461
|
case GMIOutputChunkType.TOOL_CALL_REQUEST:
|
|
1186
1462
|
if (gmiChunk.content && Array.isArray(gmiChunk.content)) {
|
|
1187
1463
|
const toolCalls = gmiChunk.content;
|
|
1464
|
+
const executionMode = gmiChunk.metadata?.executionMode === 'external' ? 'external' : 'internal';
|
|
1188
1465
|
await this.chunks.pushChunk(agentOSStreamId, AgentOSResponseChunkType.TOOL_CALL_REQUEST, gmiInstanceIdForChunks, personaId, false, // Tool call request is not final for the AgentOS turn
|
|
1189
|
-
{
|
|
1466
|
+
{
|
|
1467
|
+
toolCalls,
|
|
1468
|
+
rationale: gmiChunk.metadata?.rationale || 'Agent requires tool execution.',
|
|
1469
|
+
executionMode,
|
|
1470
|
+
requiresExternalToolResult: typeof gmiChunk.metadata?.requiresExternalToolResult === 'boolean'
|
|
1471
|
+
? gmiChunk.metadata.requiresExternalToolResult
|
|
1472
|
+
: executionMode === 'external',
|
|
1473
|
+
metadata: buildToolCallChunkMetadata(streamContext, gmiChunk.metadata),
|
|
1474
|
+
});
|
|
1190
1475
|
}
|
|
1191
1476
|
break;
|
|
1192
1477
|
case GMIOutputChunkType.UI_COMMAND:
|
|
@@ -1227,13 +1512,19 @@ export class AgentOSOrchestrator {
|
|
|
1227
1512
|
gmiId: gmi.getGMIId(),
|
|
1228
1513
|
// Pass relevant options to GMI if it needs them
|
|
1229
1514
|
options: options,
|
|
1515
|
+
sessionId,
|
|
1516
|
+
conversationId: streamContext.conversationId,
|
|
1230
1517
|
// User API keys are handled by GMIManager when fetching/creating GMI,
|
|
1231
1518
|
// but can be passed in metadata if GMI needs them per-turn for some reason.
|
|
1232
1519
|
userApiKeys: input.userApiKeys,
|
|
1233
1520
|
userFeedback: input.userFeedback,
|
|
1234
1521
|
explicitPersonaSwitchId: input.selectedPersonaId,
|
|
1235
1522
|
// Task hint can be more sophisticated, based on input analysis
|
|
1236
|
-
taskHint: input.textInput
|
|
1523
|
+
taskHint: input.textInput
|
|
1524
|
+
? 'user_text_query'
|
|
1525
|
+
: input.visionInputs || input.audioInput
|
|
1526
|
+
? 'user_multimodal_query'
|
|
1527
|
+
: 'general_query',
|
|
1237
1528
|
// GMI.ts specific fields if any, not standard in IGMI.GMITurnInput
|
|
1238
1529
|
modelSelectionOverrides: {
|
|
1239
1530
|
preferredModelId: options?.preferredModelId,
|
|
@@ -1246,7 +1537,7 @@ export class AgentOSOrchestrator {
|
|
|
1246
1537
|
};
|
|
1247
1538
|
let type;
|
|
1248
1539
|
let content;
|
|
1249
|
-
if (input.visionInputs && input.visionInputs.length > 0 || input.audioInput) {
|
|
1540
|
+
if ((input.visionInputs && input.visionInputs.length > 0) || input.audioInput) {
|
|
1250
1541
|
type = GMIInteractionType.MULTIMODAL_CONTENT;
|
|
1251
1542
|
const multiModalContent = {};
|
|
1252
1543
|
if (input.textInput)
|
|
@@ -1264,7 +1555,7 @@ export class AgentOSOrchestrator {
|
|
|
1264
1555
|
else {
|
|
1265
1556
|
// Fallback or error if no meaningful input
|
|
1266
1557
|
type = GMIInteractionType.SYSTEM_MESSAGE; // E.g. an empty ping or keep-alive
|
|
1267
|
-
content =
|
|
1558
|
+
content = 'No primary user input provided for this turn.';
|
|
1268
1559
|
console.warn(`AgentOSOrchestrator: No primary input in AgentOSInput for stream ${agentOSStreamId}. Sending as system message to GMI.`);
|
|
1269
1560
|
}
|
|
1270
1561
|
return {
|
|
@@ -1291,7 +1582,7 @@ export class AgentOSOrchestrator {
|
|
|
1291
1582
|
// Notify and close streams managed by StreamingManager for contexts held here
|
|
1292
1583
|
for (const streamId of this.activeStreamContexts.keys()) {
|
|
1293
1584
|
try {
|
|
1294
|
-
await this.dependencies.streamingManager.closeStream(streamId,
|
|
1585
|
+
await this.dependencies.streamingManager.closeStream(streamId, 'Orchestrator shutting down.');
|
|
1295
1586
|
}
|
|
1296
1587
|
catch (e) {
|
|
1297
1588
|
console.error(`AgentOSOrchestrator: Error closing stream ${streamId} during shutdown: ${e.message}`);
|