gitextract_x29x44af/ ├── .editorconfig ├── .github/ │ └── workflows/ │ ├── docs-build.yml │ └── docs-pages.yml ├── .gitignore ├── LICENSE ├── README-EN.md ├── README.md ├── ai4j/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── io/ │ │ │ └── github/ │ │ │ └── lnyocly/ │ │ │ └── ai4j/ │ │ │ ├── agentflow/ │ │ │ │ ├── AgentFlow.java │ │ │ │ ├── AgentFlowConfig.java │ │ │ │ ├── AgentFlowException.java │ │ │ │ ├── AgentFlowType.java │ │ │ │ ├── AgentFlowUsage.java │ │ │ │ ├── chat/ │ │ │ │ │ ├── AgentFlowChatEvent.java │ │ │ │ │ ├── AgentFlowChatListener.java │ │ │ │ │ ├── AgentFlowChatRequest.java │ │ │ │ │ ├── AgentFlowChatResponse.java │ │ │ │ │ ├── AgentFlowChatService.java │ │ │ │ │ ├── CozeAgentFlowChatService.java │ │ │ │ │ └── DifyAgentFlowChatService.java │ │ │ │ ├── support/ │ │ │ │ │ └── AgentFlowSupport.java │ │ │ │ ├── trace/ │ │ │ │ │ ├── AgentFlowTraceContext.java │ │ │ │ │ └── AgentFlowTraceListener.java │ │ │ │ └── workflow/ │ │ │ │ ├── AgentFlowWorkflowEvent.java │ │ │ │ ├── AgentFlowWorkflowListener.java │ │ │ │ ├── AgentFlowWorkflowRequest.java │ │ │ │ ├── AgentFlowWorkflowResponse.java │ │ │ │ ├── AgentFlowWorkflowService.java │ │ │ │ ├── CozeAgentFlowWorkflowService.java │ │ │ │ ├── DifyAgentFlowWorkflowService.java │ │ │ │ └── N8nAgentFlowWorkflowService.java │ │ │ ├── annotation/ │ │ │ │ ├── FunctionCall.java │ │ │ │ ├── FunctionParameter.java │ │ │ │ └── FunctionRequest.java │ │ │ ├── auth/ │ │ │ │ └── BearerTokenUtils.java │ │ │ ├── config/ │ │ │ │ ├── AiPlatform.java │ │ │ │ ├── BaichuanConfig.java │ │ │ │ ├── DashScopeConfig.java │ │ │ │ ├── DeepSeekConfig.java │ │ │ │ ├── DoubaoConfig.java │ │ │ │ ├── HunyuanConfig.java │ │ │ │ ├── JinaConfig.java │ │ │ │ ├── LingyiConfig.java │ │ │ │ ├── McpConfig.java │ │ │ │ ├── MilvusConfig.java │ │ │ │ ├── MinimaxConfig.java │ │ │ │ ├── MoonshotConfig.java │ │ │ │ ├── OkHttpConfig.java │ │ │ │ ├── OllamaConfig.java │ │ │ │ ├── OpenAiConfig.java │ │ │ │ ├── PgVectorConfig.java │ │ │ │ ├── PineconeConfig.java │ │ │ │ ├── QdrantConfig.java │ │ │ │ └── ZhipuConfig.java │ │ │ ├── constant/ │ │ │ │ └── Constants.java │ │ │ ├── convert/ │ │ │ │ ├── audio/ │ │ │ │ │ ├── AudioParameterConvert.java │ │ │ │ │ └── AudioResultConvert.java │ │ │ │ ├── chat/ │ │ │ │ │ ├── ParameterConvert.java │ │ │ │ │ └── ResultConvert.java │ │ │ │ └── embedding/ │ │ │ │ ├── EmbeddingParameterConvert.java │ │ │ │ └── EmbeddingResultConvert.java │ │ │ ├── document/ │ │ │ │ ├── RecursiveCharacterTextSplitter.java │ │ │ │ └── TikaUtil.java │ │ │ ├── exception/ │ │ │ │ ├── Ai4jException.java │ │ │ │ ├── CommonException.java │ │ │ │ ├── chain/ │ │ │ │ │ ├── AbstractErrorHandler.java │ │ │ │ │ ├── ErrorHandler.java │ │ │ │ │ ├── IErrorHandler.java │ │ │ │ │ └── impl/ │ │ │ │ │ ├── HunyuanErrorHandler.java │ │ │ │ │ ├── OpenAiErrorHandler.java │ │ │ │ │ └── UnknownErrorHandler.java │ │ │ │ └── error/ │ │ │ │ ├── Error.java │ │ │ │ ├── HunyuanError.java │ │ │ │ └── OpenAiError.java │ │ │ ├── interceptor/ │ │ │ │ ├── ContentTypeInterceptor.java │ │ │ │ └── ErrorInterceptor.java │ │ │ ├── listener/ │ │ │ │ ├── AbstractManagedStreamListener.java │ │ │ │ ├── ImageSseListener.java │ │ │ │ ├── ManagedStreamListener.java │ │ │ │ ├── RealtimeListener.java │ │ │ │ ├── ResponseSseListener.java │ │ │ │ ├── SseListener.java │ │ │ │ ├── StreamExecutionOptions.java │ │ │ │ └── StreamExecutionSupport.java │ │ │ ├── mcp/ │ │ │ │ ├── annotation/ │ │ │ │ │ ├── McpParameter.java │ │ │ │ │ ├── McpPrompt.java │ │ │ │ │ ├── McpPromptParameter.java │ │ │ │ │ ├── McpResource.java │ │ │ │ │ ├── McpResourceParameter.java │ │ │ │ │ ├── McpService.java │ │ │ │ │ └── McpTool.java │ │ │ │ ├── client/ │ │ │ │ │ ├── McpClient.java │ │ │ │ │ └── McpClientResponseSupport.java │ │ │ │ ├── config/ │ │ │ │ │ ├── FileMcpConfigSource.java │ │ │ │ │ ├── McpConfigIO.java │ │ │ │ │ ├── McpConfigManager.java │ │ │ │ │ ├── McpConfigSource.java │ │ │ │ │ └── McpServerConfig.java │ │ │ │ ├── entity/ │ │ │ │ │ ├── McpError.java │ │ │ │ │ ├── McpInitializeResponse.java │ │ │ │ │ ├── McpMessage.java │ │ │ │ │ ├── McpNotification.java │ │ │ │ │ ├── McpPrompt.java │ │ │ │ │ ├── McpPromptResult.java │ │ │ │ │ ├── McpRequest.java │ │ │ │ │ ├── McpResource.java │ │ │ │ │ ├── McpResourceContent.java │ │ │ │ │ ├── McpResponse.java │ │ │ │ │ ├── McpRoot.java │ │ │ │ │ ├── McpSamplingRequest.java │ │ │ │ │ ├── McpSamplingResult.java │ │ │ │ │ ├── McpServerInfo.java │ │ │ │ │ ├── McpServerReference.java │ │ │ │ │ ├── McpTool.java │ │ │ │ │ ├── McpToolDefinition.java │ │ │ │ │ └── McpToolResult.java │ │ │ │ ├── gateway/ │ │ │ │ │ ├── McpGateway.java │ │ │ │ │ ├── McpGatewayClientFactory.java │ │ │ │ │ ├── McpGatewayConfigSourceBinding.java │ │ │ │ │ ├── McpGatewayKeySupport.java │ │ │ │ │ └── McpGatewayToolRegistry.java │ │ │ │ ├── server/ │ │ │ │ │ ├── McpHttpServerSupport.java │ │ │ │ │ ├── McpServer.java │ │ │ │ │ ├── McpServerEngine.java │ │ │ │ │ ├── McpServerFactory.java │ │ │ │ │ ├── McpServerSessionState.java │ │ │ │ │ ├── McpServerSessionSupport.java │ │ │ │ │ ├── SseMcpServer.java │ │ │ │ │ ├── StdioMcpServer.java │ │ │ │ │ └── StreamableHttpMcpServer.java │ │ │ │ ├── transport/ │ │ │ │ │ ├── McpTransport.java │ │ │ │ │ ├── McpTransportFactory.java │ │ │ │ │ ├── McpTransportSupport.java │ │ │ │ │ ├── SseTransport.java │ │ │ │ │ ├── StdioTransport.java │ │ │ │ │ ├── StreamableHttpTransport.java │ │ │ │ │ └── TransportConfig.java │ │ │ │ └── util/ │ │ │ │ ├── McpMessageCodec.java │ │ │ │ ├── McpPromptAdapter.java │ │ │ │ ├── McpResourceAdapter.java │ │ │ │ ├── McpToolAdapter.java │ │ │ │ ├── McpToolConversionSupport.java │ │ │ │ └── McpTypeSupport.java │ │ │ ├── memory/ │ │ │ │ ├── ChatMemory.java │ │ │ │ ├── ChatMemoryItem.java │ │ │ │ ├── ChatMemoryPolicy.java │ │ │ │ ├── ChatMemorySnapshot.java │ │ │ │ ├── ChatMemorySummarizer.java │ │ │ │ ├── ChatMemorySummaryRequest.java │ │ │ │ ├── InMemoryChatMemory.java │ │ │ │ ├── JdbcChatMemory.java │ │ │ │ ├── JdbcChatMemoryConfig.java │ │ │ │ ├── MessageWindowChatMemoryPolicy.java │ │ │ │ ├── SummaryChatMemoryPolicy.java │ │ │ │ ├── SummaryChatMemoryPolicyConfig.java │ │ │ │ └── UnboundedChatMemoryPolicy.java │ │ │ ├── network/ │ │ │ │ ├── ConnectionPoolProvider.java │ │ │ │ ├── DispatcherProvider.java │ │ │ │ ├── OkHttpUtil.java │ │ │ │ ├── UrlUtils.java │ │ │ │ └── impl/ │ │ │ │ ├── DefaultConnectionPoolProvider.java │ │ │ │ └── DefaultDispatcherProvider.java │ │ │ ├── platform/ │ │ │ │ ├── baichuan/ │ │ │ │ │ └── chat/ │ │ │ │ │ ├── BaichuanChatService.java │ │ │ │ │ └── entity/ │ │ │ │ │ ├── BaichuanChatCompletion.java │ │ │ │ │ └── BaichuanChatCompletionResponse.java │ │ │ │ ├── dashscope/ │ │ │ │ │ ├── DashScopeChatService.java │ │ │ │ │ ├── entity/ │ │ │ │ │ │ └── DashScopeResult.java │ │ │ │ │ ├── response/ │ │ │ │ │ │ └── DashScopeResponsesService.java │ │ │ │ │ └── util/ │ │ │ │ │ └── MessageUtil.java │ │ │ │ ├── deepseek/ │ │ │ │ │ └── chat/ │ │ │ │ │ ├── DeepSeekChatService.java │ │ │ │ │ └── entity/ │ │ │ │ │ ├── DeepSeekChatCompletion.java │ │ │ │ │ └── DeepSeekChatCompletionResponse.java │ │ │ │ ├── doubao/ │ │ │ │ │ ├── chat/ │ │ │ │ │ │ ├── DoubaoChatService.java │ │ │ │ │ │ └── entity/ │ │ │ │ │ │ ├── DoubaoChatCompletion.java │ │ │ │ │ │ └── DoubaoChatCompletionResponse.java │ │ │ │ │ ├── image/ │ │ │ │ │ │ ├── DoubaoImageService.java │ │ │ │ │ │ └── entity/ │ │ │ │ │ │ └── DoubaoImageGenerationRequest.java │ │ │ │ │ ├── rerank/ │ │ │ │ │ │ └── DoubaoRerankService.java │ │ │ │ │ └── response/ │ │ │ │ │ └── DoubaoResponsesService.java │ │ │ │ ├── hunyuan/ │ │ │ │ │ ├── HunyuanConstant.java │ │ │ │ │ ├── chat/ │ │ │ │ │ │ ├── HunyuanChatService.java │ │ │ │ │ │ └── entity/ │ │ │ │ │ │ ├── HunyuanChatCompletion.java │ │ │ │ │ │ └── HunyuanChatCompletionResponse.java │ │ │ │ │ └── support/ │ │ │ │ │ └── HunyuanJsonUtil.java │ │ │ │ ├── jina/ │ │ │ │ │ └── rerank/ │ │ │ │ │ └── JinaRerankService.java │ │ │ │ ├── lingyi/ │ │ │ │ │ └── chat/ │ │ │ │ │ ├── LingyiChatService.java │ │ │ │ │ └── entity/ │ │ │ │ │ ├── LingyiChatCompletion.java │ │ │ │ │ └── LingyiChatCompletionResponse.java │ │ │ │ ├── minimax/ │ │ │ │ │ └── chat/ │ │ │ │ │ ├── MinimaxChatService.java │ │ │ │ │ └── entity/ │ │ │ │ │ ├── MinimaxChatCompletion.java │ │ │ │ │ └── MinimaxChatCompletionResponse.java │ │ │ │ ├── moonshot/ │ │ │ │ │ └── chat/ │ │ │ │ │ ├── MoonshotChatService.java │ │ │ │ │ └── entity/ │ │ │ │ │ ├── MoonshotChatCompletion.java │ │ │ │ │ └── MoonshotChatCompletionResponse.java │ │ │ │ ├── ollama/ │ │ │ │ │ ├── chat/ │ │ │ │ │ │ ├── OllamaAiChatService.java │ │ │ │ │ │ └── entity/ │ │ │ │ │ │ ├── OllamaChatCompletion.java │ │ │ │ │ │ ├── OllamaChatCompletionResponse.java │ │ │ │ │ │ ├── OllamaMessage.java │ │ │ │ │ │ └── OllamaOptions.java │ │ │ │ │ ├── embedding/ │ │ │ │ │ │ ├── OllamaEmbeddingService.java │ │ │ │ │ │ └── entity/ │ │ │ │ │ │ ├── OllamaEmbedding.java │ │ │ │ │ │ └── OllamaEmbeddingResponse.java │ │ │ │ │ └── rerank/ │ │ │ │ │ └── OllamaRerankService.java │ │ │ │ ├── openai/ │ │ │ │ │ ├── audio/ │ │ │ │ │ │ ├── OpenAiAudioService.java │ │ │ │ │ │ ├── entity/ │ │ │ │ │ │ │ ├── Segment.java │ │ │ │ │ │ │ ├── TextToSpeech.java │ │ │ │ │ │ │ ├── Transcription.java │ │ │ │ │ │ │ ├── TranscriptionResponse.java │ │ │ │ │ │ │ ├── Translation.java │ │ │ │ │ │ │ ├── TranslationResponse.java │ │ │ │ │ │ │ └── Word.java │ │ │ │ │ │ └── enums/ │ │ │ │ │ │ ├── AudioEnum.java │ │ │ │ │ │ └── WhisperEnum.java │ │ │ │ │ ├── chat/ │ │ │ │ │ │ ├── OpenAiChatService.java │ │ │ │ │ │ ├── entity/ │ │ │ │ │ │ │ ├── ChatCompletion.java │ │ │ │ │ │ │ ├── ChatCompletionResponse.java │ │ │ │ │ │ │ ├── ChatMessage.java │ │ │ │ │ │ │ ├── Choice.java │ │ │ │ │ │ │ ├── Content.java │ │ │ │ │ │ │ └── StreamOptions.java │ │ │ │ │ │ ├── enums/ │ │ │ │ │ │ │ └── ChatMessageType.java │ │ │ │ │ │ └── serializer/ │ │ │ │ │ │ └── ContentDeserializer.java │ │ │ │ │ ├── embedding/ │ │ │ │ │ │ ├── OpenAiEmbeddingService.java │ │ │ │ │ │ └── entity/ │ │ │ │ │ │ ├── Embedding.java │ │ │ │ │ │ ├── EmbeddingObject.java │ │ │ │ │ │ └── EmbeddingResponse.java │ │ │ │ │ ├── image/ │ │ │ │ │ │ ├── OpenAiImageService.java │ │ │ │ │ │ └── entity/ │ │ │ │ │ │ ├── ImageData.java │ │ │ │ │ │ ├── ImageGeneration.java │ │ │ │ │ │ ├── ImageGenerationResponse.java │ │ │ │ │ │ ├── ImageStreamError.java │ │ │ │ │ │ ├── ImageStreamEvent.java │ │ │ │ │ │ ├── ImageUsage.java │ │ │ │ │ │ └── ImageUsageDetails.java │ │ │ │ │ ├── realtime/ │ │ │ │ │ │ ├── OpenAiRealtimeService.java │ │ │ │ │ │ ├── RealtimeConstant.java │ │ │ │ │ │ └── entity/ │ │ │ │ │ │ ├── ConversationCreated.java │ │ │ │ │ │ ├── Session.java │ │ │ │ │ │ ├── SessionCreated.java │ │ │ │ │ │ └── SessionUpdated.java │ │ │ │ │ ├── response/ │ │ │ │ │ │ ├── OpenAiResponsesService.java │ │ │ │ │ │ ├── ResponseEventParser.java │ │ │ │ │ │ └── entity/ │ │ │ │ │ │ ├── ImagePixelLimit.java │ │ │ │ │ │ ├── Response.java │ │ │ │ │ │ ├── ResponseContentPart.java │ │ │ │ │ │ ├── ResponseContextEdit.java │ │ │ │ │ │ ├── ResponseContextManagement.java │ │ │ │ │ │ ├── ResponseDeleteResponse.java │ │ │ │ │ │ ├── ResponseError.java │ │ │ │ │ │ ├── ResponseIncompleteDetails.java │ │ │ │ │ │ ├── ResponseItem.java │ │ │ │ │ │ ├── ResponseRequest.java │ │ │ │ │ │ ├── ResponseStreamEvent.java │ │ │ │ │ │ ├── ResponseSummary.java │ │ │ │ │ │ ├── ResponseToolUsage.java │ │ │ │ │ │ ├── ResponseToolUsageDetails.java │ │ │ │ │ │ ├── ResponseUsage.java │ │ │ │ │ │ ├── ResponseUsageDetails.java │ │ │ │ │ │ └── TranslationOptions.java │ │ │ │ │ ├── tool/ │ │ │ │ │ │ ├── Tool.java │ │ │ │ │ │ └── ToolCall.java │ │ │ │ │ └── usage/ │ │ │ │ │ └── Usage.java │ │ │ │ ├── standard/ │ │ │ │ │ └── rerank/ │ │ │ │ │ └── StandardRerankService.java │ │ │ │ └── zhipu/ │ │ │ │ └── chat/ │ │ │ │ ├── ZhipuChatService.java │ │ │ │ └── entity/ │ │ │ │ ├── ZhipuChatCompletion.java │ │ │ │ └── ZhipuChatCompletionResponse.java │ │ │ ├── rag/ │ │ │ │ ├── AbstractScoreFusionStrategy.java │ │ │ │ ├── Bm25Retriever.java │ │ │ │ ├── DbsfFusionStrategy.java │ │ │ │ ├── DefaultRagContextAssembler.java │ │ │ │ ├── DefaultRagService.java │ │ │ │ ├── DefaultTextTokenizer.java │ │ │ │ ├── DenseRetriever.java │ │ │ │ ├── FusionStrategy.java │ │ │ │ ├── HybridRetriever.java │ │ │ │ ├── ModelReranker.java │ │ │ │ ├── NoopReranker.java │ │ │ │ ├── RagChunk.java │ │ │ │ ├── RagCitation.java │ │ │ │ ├── RagContext.java │ │ │ │ ├── RagContextAssembler.java │ │ │ │ ├── RagDocument.java │ │ │ │ ├── RagEvaluation.java │ │ │ │ ├── RagEvaluator.java │ │ │ │ ├── RagHit.java │ │ │ │ ├── RagHitSupport.java │ │ │ │ ├── RagMetadataKeys.java │ │ │ │ ├── RagQuery.java │ │ │ │ ├── RagResult.java │ │ │ │ ├── RagScoreDetail.java │ │ │ │ ├── RagService.java │ │ │ │ ├── RagTrace.java │ │ │ │ ├── Reranker.java │ │ │ │ ├── Retriever.java │ │ │ │ ├── RrfFusionStrategy.java │ │ │ │ ├── RsfFusionStrategy.java │ │ │ │ ├── TextTokenizer.java │ │ │ │ └── ingestion/ │ │ │ │ ├── Chunker.java │ │ │ │ ├── DefaultMetadataEnricher.java │ │ │ │ ├── DocumentLoader.java │ │ │ │ ├── IngestionPipeline.java │ │ │ │ ├── IngestionRequest.java │ │ │ │ ├── IngestionResult.java │ │ │ │ ├── IngestionSource.java │ │ │ │ ├── LoadedDocument.java │ │ │ │ ├── LoadedDocumentProcessor.java │ │ │ │ ├── MetadataEnricher.java │ │ │ │ ├── OcrNoiseCleaningDocumentProcessor.java │ │ │ │ ├── OcrTextExtractingDocumentProcessor.java │ │ │ │ ├── OcrTextExtractor.java │ │ │ │ ├── RecursiveTextChunker.java │ │ │ │ ├── TextDocumentLoader.java │ │ │ │ ├── TikaDocumentLoader.java │ │ │ │ └── WhitespaceNormalizingDocumentProcessor.java │ │ │ ├── rerank/ │ │ │ │ └── entity/ │ │ │ │ ├── RerankDocument.java │ │ │ │ ├── RerankRequest.java │ │ │ │ ├── RerankResponse.java │ │ │ │ ├── RerankResult.java │ │ │ │ └── RerankUsage.java │ │ │ ├── service/ │ │ │ │ ├── AiConfig.java │ │ │ │ ├── Configuration.java │ │ │ │ ├── IAudioService.java │ │ │ │ ├── IChatService.java │ │ │ │ ├── IEmbeddingService.java │ │ │ │ ├── IImageService.java │ │ │ │ ├── IRealtimeService.java │ │ │ │ ├── IRerankService.java │ │ │ │ ├── IResponsesService.java │ │ │ │ ├── ModelType.java │ │ │ │ ├── PlatformType.java │ │ │ │ ├── factory/ │ │ │ │ │ ├── AiService.java │ │ │ │ │ ├── AiServiceFactory.java │ │ │ │ │ ├── AiServiceRegistration.java │ │ │ │ │ ├── AiServiceRegistry.java │ │ │ │ │ ├── DefaultAiServiceFactory.java │ │ │ │ │ ├── DefaultAiServiceRegistry.java │ │ │ │ │ └── FreeAiService.java │ │ │ │ └── spi/ │ │ │ │ └── ServiceLoaderUtil.java │ │ │ ├── skill/ │ │ │ │ ├── SkillDescriptor.java │ │ │ │ └── Skills.java │ │ │ ├── token/ │ │ │ │ └── TikTokensUtil.java │ │ │ ├── tool/ │ │ │ │ ├── BuiltInProcessRegistry.java │ │ │ │ ├── BuiltInToolContext.java │ │ │ │ ├── BuiltInToolExecutor.java │ │ │ │ ├── BuiltInTools.java │ │ │ │ ├── ResponseRequestToolResolver.java │ │ │ │ └── ToolUtil.java │ │ │ ├── tools/ │ │ │ │ ├── ApplyPatchFunction.java │ │ │ │ ├── BashFunction.java │ │ │ │ ├── QueryTrainInfoFunction.java │ │ │ │ ├── QueryWeatherFunction.java │ │ │ │ ├── ReadFileFunction.java │ │ │ │ └── WriteFileFunction.java │ │ │ ├── vector/ │ │ │ │ ├── VectorDataEntity.java │ │ │ │ ├── pinecone/ │ │ │ │ │ ├── PineconeDelete.java │ │ │ │ │ ├── PineconeInsert.java │ │ │ │ │ ├── PineconeInsertResponse.java │ │ │ │ │ ├── PineconeQuery.java │ │ │ │ │ ├── PineconeQueryResponse.java │ │ │ │ │ └── PineconeVectors.java │ │ │ │ ├── service/ │ │ │ │ │ └── PineconeService.java │ │ │ │ └── store/ │ │ │ │ ├── VectorDeleteRequest.java │ │ │ │ ├── VectorRecord.java │ │ │ │ ├── VectorSearchRequest.java │ │ │ │ ├── VectorSearchResult.java │ │ │ │ ├── VectorStore.java │ │ │ │ ├── VectorStoreCapabilities.java │ │ │ │ ├── VectorUpsertRequest.java │ │ │ │ ├── milvus/ │ │ │ │ │ └── MilvusVectorStore.java │ │ │ │ ├── pgvector/ │ │ │ │ │ └── PgVectorStore.java │ │ │ │ ├── pinecone/ │ │ │ │ │ └── PineconeVectorStore.java │ │ │ │ └── qdrant/ │ │ │ │ └── QdrantVectorStore.java │ │ │ └── websearch/ │ │ │ ├── ChatWithWebSearchEnhance.java │ │ │ └── searxng/ │ │ │ ├── SearXNGConfig.java │ │ │ ├── SearXNGRequest.java │ │ │ └── SearXNGResponse.java │ │ └── resources/ │ │ ├── META-INF/ │ │ │ └── services/ │ │ │ ├── io.github.lnyocly.ai4j.network.ConnectionPoolProvider │ │ │ └── io.github.lnyocly.ai4j.network.DispatcherProvider │ │ └── mcp-servers-config.json │ └── test/ │ └── java/ │ └── io/ │ └── github/ │ └── lnyocly/ │ ├── BaichuanTest.java │ ├── DashScopeTest.java │ ├── DeepSeekTest.java │ ├── DoubaoImageTest.java │ ├── DoubaoResponsesTest.java │ ├── DoubaoTest.java │ ├── HunyuanTest.java │ ├── LingyiTest.java │ ├── MinimaxTest.java │ ├── MoonshotTest.java │ ├── OllamaTest.java │ ├── OpenAiTest.java │ ├── OtherTest.java │ ├── ZhipuTest.java │ ├── ai4j/ │ │ ├── agentflow/ │ │ │ ├── AgentFlowTraceSupportTest.java │ │ │ ├── CozeAgentFlowServiceTest.java │ │ │ ├── DifyAgentFlowServiceTest.java │ │ │ └── N8nAgentFlowWorkflowServiceTest.java │ │ ├── function/ │ │ │ └── TestFunction.java │ │ ├── mcp/ │ │ │ ├── McpClientResponseSupportTest.java │ │ │ ├── McpGatewaySupportTest.java │ │ │ ├── McpServerTest.java │ │ │ ├── McpTypeSupportTest.java │ │ │ ├── TestMcpService.java │ │ │ ├── config/ │ │ │ │ └── McpConfigManagerTest.java │ │ │ ├── gateway/ │ │ │ │ └── McpGatewayConfigSourceTest.java │ │ │ ├── transport/ │ │ │ │ └── SseTransportTest.java │ │ │ └── util/ │ │ │ └── TestMcpService.java │ │ ├── memory/ │ │ │ ├── InMemoryChatMemoryTest.java │ │ │ ├── JdbcChatMemoryTest.java │ │ │ └── SummaryChatMemoryPolicyTest.java │ │ ├── platform/ │ │ │ ├── doubao/ │ │ │ │ └── rerank/ │ │ │ │ └── DoubaoRerankServiceTest.java │ │ │ ├── jina/ │ │ │ │ └── rerank/ │ │ │ │ └── JinaRerankServiceTest.java │ │ │ ├── minimax/ │ │ │ │ └── chat/ │ │ │ │ └── MinimaxChatServiceTest.java │ │ │ ├── ollama/ │ │ │ │ └── rerank/ │ │ │ │ └── OllamaRerankServiceTest.java │ │ │ └── openai/ │ │ │ ├── audio/ │ │ │ │ └── OpenAiAudioServiceTest.java │ │ │ ├── chat/ │ │ │ │ └── OpenAiChatServicePassThroughTest.java │ │ │ └── response/ │ │ │ └── ResponseRequestToolResolverTest.java │ │ ├── rag/ │ │ │ ├── Bm25RetrieverTest.java │ │ │ ├── DefaultRagServiceTest.java │ │ │ ├── DenseRetrieverTest.java │ │ │ ├── HybridRetrieverTest.java │ │ │ ├── IngestionPipelineTest.java │ │ │ ├── ModelRerankerTest.java │ │ │ └── RagEvaluatorTest.java │ │ ├── skill/ │ │ │ └── SkillsIChatServiceTest.java │ │ ├── tool/ │ │ │ └── BuiltInToolExecutorTest.java │ │ └── vector/ │ │ └── store/ │ │ ├── milvus/ │ │ │ └── MilvusVectorStoreTest.java │ │ ├── pinecone/ │ │ │ └── PineconeVectorStoreTest.java │ │ └── qdrant/ │ │ └── QdrantVectorStoreTest.java │ ├── interceptor/ │ │ └── ErrorInterceptorTest.java │ ├── listener/ │ │ ├── SseListenerTest.java │ │ └── StreamExecutionSupportTest.java │ └── service/ │ └── AiServiceRegistryTest.java ├── ai4j-agent/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── io/ │ │ └── github/ │ │ └── lnyocly/ │ │ └── ai4j/ │ │ └── agent/ │ │ ├── Agent.java │ │ ├── AgentBuilder.java │ │ ├── AgentContext.java │ │ ├── AgentOptions.java │ │ ├── AgentRequest.java │ │ ├── AgentResult.java │ │ ├── AgentRuntime.java │ │ ├── AgentSession.java │ │ ├── Agents.java │ │ ├── codeact/ │ │ │ ├── CodeActOptions.java │ │ │ ├── CodeExecutionRequest.java │ │ │ ├── CodeExecutionResult.java │ │ │ ├── CodeExecutor.java │ │ │ ├── GraalVmCodeExecutor.java │ │ │ └── NashornCodeExecutor.java │ │ ├── event/ │ │ │ ├── AgentEvent.java │ │ │ ├── AgentEventPublisher.java │ │ │ ├── AgentEventType.java │ │ │ └── AgentListener.java │ │ ├── flowgram/ │ │ │ ├── Ai4jFlowGramLlmNodeRunner.java │ │ │ ├── FlowGramLlmNodeRunner.java │ │ │ ├── FlowGramNodeExecutionContext.java │ │ │ ├── FlowGramNodeExecutionResult.java │ │ │ ├── FlowGramNodeExecutor.java │ │ │ ├── FlowGramRuntimeEvent.java │ │ │ ├── FlowGramRuntimeListener.java │ │ │ ├── FlowGramRuntimeService.java │ │ │ └── model/ │ │ │ ├── FlowGramEdgeSchema.java │ │ │ ├── FlowGramNodeSchema.java │ │ │ ├── FlowGramTaskCancelOutput.java │ │ │ ├── FlowGramTaskReportOutput.java │ │ │ ├── FlowGramTaskResultOutput.java │ │ │ ├── FlowGramTaskRunInput.java │ │ │ ├── FlowGramTaskRunOutput.java │ │ │ ├── FlowGramTaskValidateOutput.java │ │ │ └── FlowGramWorkflowSchema.java │ │ ├── memory/ │ │ │ ├── AgentMemory.java │ │ │ ├── InMemoryAgentMemory.java │ │ │ ├── JdbcAgentMemory.java │ │ │ ├── JdbcAgentMemoryConfig.java │ │ │ ├── MemoryCompressor.java │ │ │ ├── MemorySnapshot.java │ │ │ └── WindowedMemoryCompressor.java │ │ ├── model/ │ │ │ ├── AgentModelClient.java │ │ │ ├── AgentModelResult.java │ │ │ ├── AgentModelStreamListener.java │ │ │ ├── AgentPrompt.java │ │ │ ├── ChatModelClient.java │ │ │ └── ResponsesModelClient.java │ │ ├── runtime/ │ │ │ ├── AgentToolExecutionScope.java │ │ │ ├── BaseAgentRuntime.java │ │ │ ├── CodeActRuntime.java │ │ │ ├── DeepResearchRuntime.java │ │ │ ├── Planner.java │ │ │ └── ReActRuntime.java │ │ ├── subagent/ │ │ │ ├── HandoffContext.java │ │ │ ├── HandoffFailureAction.java │ │ │ ├── HandoffInputFilter.java │ │ │ ├── HandoffPolicy.java │ │ │ ├── StaticSubAgentRegistry.java │ │ │ ├── SubAgentDefinition.java │ │ │ ├── SubAgentRegistry.java │ │ │ ├── SubAgentSessionMode.java │ │ │ └── SubAgentToolExecutor.java │ │ ├── team/ │ │ │ ├── AgentTeam.java │ │ │ ├── AgentTeamAgentRuntime.java │ │ │ ├── AgentTeamBuilder.java │ │ │ ├── AgentTeamControl.java │ │ │ ├── AgentTeamEventHook.java │ │ │ ├── AgentTeamHook.java │ │ │ ├── AgentTeamMember.java │ │ │ ├── AgentTeamMemberResult.java │ │ │ ├── AgentTeamMemberSnapshot.java │ │ │ ├── AgentTeamMessage.java │ │ │ ├── AgentTeamMessageBus.java │ │ │ ├── AgentTeamOptions.java │ │ │ ├── AgentTeamPlan.java │ │ │ ├── AgentTeamPlanApproval.java │ │ │ ├── AgentTeamPlanParser.java │ │ │ ├── AgentTeamPlanner.java │ │ │ ├── AgentTeamResult.java │ │ │ ├── AgentTeamState.java │ │ │ ├── AgentTeamStateStore.java │ │ │ ├── AgentTeamSynthesizer.java │ │ │ ├── AgentTeamTask.java │ │ │ ├── AgentTeamTaskBoard.java │ │ │ ├── AgentTeamTaskState.java │ │ │ ├── AgentTeamTaskStatus.java │ │ │ ├── FileAgentTeamMessageBus.java │ │ │ ├── FileAgentTeamStateStore.java │ │ │ ├── InMemoryAgentTeamMessageBus.java │ │ │ ├── InMemoryAgentTeamStateStore.java │ │ │ ├── LlmAgentTeamPlanner.java │ │ │ ├── LlmAgentTeamSynthesizer.java │ │ │ └── tool/ │ │ │ ├── AgentTeamToolExecutor.java │ │ │ └── AgentTeamToolRegistry.java │ │ ├── tool/ │ │ │ ├── AgentToolCall.java │ │ │ ├── AgentToolCallSanitizer.java │ │ │ ├── AgentToolRegistry.java │ │ │ ├── AgentToolResult.java │ │ │ ├── CompositeToolRegistry.java │ │ │ ├── StaticToolRegistry.java │ │ │ ├── ToolExecutor.java │ │ │ ├── ToolUtilExecutor.java │ │ │ └── ToolUtilRegistry.java │ │ ├── trace/ │ │ │ ├── AbstractOpenTelemetryTraceExporter.java │ │ │ ├── AgentFlowTraceBridge.java │ │ │ ├── AgentTraceListener.java │ │ │ ├── CompositeTraceExporter.java │ │ │ ├── ConsoleTraceExporter.java │ │ │ ├── InMemoryTraceExporter.java │ │ │ ├── JsonlTraceExporter.java │ │ │ ├── LangfuseTraceExporter.java │ │ │ ├── OpenTelemetryTraceExporter.java │ │ │ ├── OpenTelemetryTraceSupport.java │ │ │ ├── TraceConfig.java │ │ │ ├── TraceExporter.java │ │ │ ├── TraceMasker.java │ │ │ ├── TraceMetrics.java │ │ │ ├── TracePricing.java │ │ │ ├── TracePricingResolver.java │ │ │ ├── TraceSpan.java │ │ │ ├── TraceSpanEvent.java │ │ │ ├── TraceSpanStatus.java │ │ │ └── TraceSpanType.java │ │ ├── util/ │ │ │ ├── AgentInputItem.java │ │ │ └── ResponseUtil.java │ │ └── workflow/ │ │ ├── AgentNode.java │ │ ├── AgentWorkflow.java │ │ ├── RuntimeAgentNode.java │ │ ├── SequentialWorkflow.java │ │ ├── StateCondition.java │ │ ├── StateGraphWorkflow.java │ │ ├── StateRouter.java │ │ ├── StateTransition.java │ │ ├── WorkflowAgent.java │ │ ├── WorkflowContext.java │ │ └── WorkflowResultAware.java │ └── test/ │ └── java/ │ └── io/ │ └── github/ │ └── lnyocly/ │ ├── agent/ │ │ ├── AgentFlowTraceBridgeTest.java │ │ ├── AgentMemoryTest.java │ │ ├── AgentRuntimeTest.java │ │ ├── AgentTeamAgentAdapterTest.java │ │ ├── AgentTeamPersistenceTest.java │ │ ├── AgentTeamProjectDeliveryExampleTest.java │ │ ├── AgentTeamTaskBoardTest.java │ │ ├── AgentTeamTest.java │ │ ├── AgentTeamUsageTest.java │ │ ├── AgentTraceListenerTest.java │ │ ├── AgentTraceUsageTest.java │ │ ├── AgentWorkflowTest.java │ │ ├── AgentWorkflowUsageTest.java │ │ ├── ChatModelClientTest.java │ │ ├── CodeActAgentUsageTest.java │ │ ├── CodeActPythonExecutorTest.java │ │ ├── CodeActRuntimeTest.java │ │ ├── CodeActRuntimeWithTraceTest.java │ │ ├── DoubaoAgentTeamBestPracticeTest.java │ │ ├── DoubaoAgentWorkflowTest.java │ │ ├── DoubaoProjectTeamAgentTeamsTest.java │ │ ├── FileAgentTeamStateStoreTest.java │ │ ├── HandoffPolicyTest.java │ │ ├── MinimaxAgentTeamTravelUsageTest.java │ │ ├── NashornCodeExecutorTest.java │ │ ├── ReActAgentUsageTest.java │ │ ├── ResponsesModelClientTest.java │ │ ├── StateGraphWorkflowTest.java │ │ ├── SubAgentParallelFallbackTest.java │ │ ├── SubAgentRuntimeTest.java │ │ ├── SubAgentUsageTest.java │ │ ├── ToolUtilExecutorRestrictionTest.java │ │ ├── UniversalAgentUsageTest.java │ │ ├── WeatherAgentWorkflowTest.java │ │ └── support/ │ │ └── ZhipuAgentTestSupport.java │ └── ai4j/ │ └── agent/ │ ├── flowgram/ │ │ └── FlowGramRuntimeServiceTest.java │ ├── memory/ │ │ └── JdbcAgentMemoryTest.java │ ├── model/ │ │ └── ChatModelClientTest.java │ └── trace/ │ └── LangfuseTraceExporterTest.java ├── ai4j-bom/ │ └── pom.xml ├── ai4j-cli/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── io/ │ │ │ └── github/ │ │ │ └── lnyocly/ │ │ │ └── ai4j/ │ │ │ ├── cli/ │ │ │ │ ├── Ai4jCli.java │ │ │ │ ├── Ai4jCliMain.java │ │ │ │ ├── ApprovalMode.java │ │ │ │ ├── CliProtocol.java │ │ │ │ ├── CliUiMode.java │ │ │ │ ├── SlashCommandController.java │ │ │ │ ├── acp/ │ │ │ │ │ ├── AcpCodingCliAgentFactory.java │ │ │ │ │ ├── AcpCommand.java │ │ │ │ │ ├── AcpJsonRpcServer.java │ │ │ │ │ ├── AcpSlashCommandSupport.java │ │ │ │ │ └── AcpToolApprovalDecorator.java │ │ │ │ ├── agent/ │ │ │ │ │ └── CliCodingAgentRegistry.java │ │ │ │ ├── command/ │ │ │ │ │ ├── CodeCommand.java │ │ │ │ │ ├── CodeCommandOptions.java │ │ │ │ │ ├── CodeCommandOptionsParser.java │ │ │ │ │ ├── CustomCommandRegistry.java │ │ │ │ │ └── CustomCommandTemplate.java │ │ │ │ ├── config/ │ │ │ │ │ └── CliWorkspaceConfig.java │ │ │ │ ├── factory/ │ │ │ │ │ ├── CodingCliAgentFactory.java │ │ │ │ │ ├── CodingCliTuiFactory.java │ │ │ │ │ ├── DefaultCodingCliAgentFactory.java │ │ │ │ │ └── DefaultCodingCliTuiFactory.java │ │ │ │ ├── mcp/ │ │ │ │ │ ├── CliMcpConfig.java │ │ │ │ │ ├── CliMcpConfigManager.java │ │ │ │ │ ├── CliMcpConnectionHandle.java │ │ │ │ │ ├── CliMcpRuntimeManager.java │ │ │ │ │ ├── CliMcpServerDefinition.java │ │ │ │ │ ├── CliMcpStatusSnapshot.java │ │ │ │ │ ├── CliResolvedMcpConfig.java │ │ │ │ │ └── CliResolvedMcpServer.java │ │ │ │ ├── provider/ │ │ │ │ │ ├── CliProviderConfigManager.java │ │ │ │ │ ├── CliProviderProfile.java │ │ │ │ │ ├── CliProvidersConfig.java │ │ │ │ │ └── CliResolvedProviderConfig.java │ │ │ │ ├── render/ │ │ │ │ │ ├── AssistantTranscriptRenderer.java │ │ │ │ │ ├── CliAnsi.java │ │ │ │ │ ├── CliDisplayWidth.java │ │ │ │ │ ├── CliThemeStyler.java │ │ │ │ │ ├── CodexStyleBlockFormatter.java │ │ │ │ │ ├── PatchSummaryFormatter.java │ │ │ │ │ └── TranscriptPrinter.java │ │ │ │ ├── runtime/ │ │ │ │ │ ├── AgentHandoffSessionEventSupport.java │ │ │ │ │ ├── AgentTeamMessageSessionEventSupport.java │ │ │ │ │ ├── AgentTeamSessionEventSupport.java │ │ │ │ │ ├── CliTeamStateManager.java │ │ │ │ │ ├── CliToolApprovalDecorator.java │ │ │ │ │ ├── CodingCliSessionRunner.java │ │ │ │ │ ├── CodingCliTuiSupport.java │ │ │ │ │ ├── CodingTaskSessionEventBridge.java │ │ │ │ │ ├── HeadlessCodingSessionRuntime.java │ │ │ │ │ ├── HeadlessTurnObserver.java │ │ │ │ │ └── TeamBoardRenderSupport.java │ │ │ │ ├── session/ │ │ │ │ │ ├── CodingSessionManager.java │ │ │ │ │ ├── CodingSessionStore.java │ │ │ │ │ ├── DefaultCodingSessionManager.java │ │ │ │ │ ├── FileCodingSessionStore.java │ │ │ │ │ ├── FileSessionEventStore.java │ │ │ │ │ ├── InMemoryCodingSessionStore.java │ │ │ │ │ ├── InMemorySessionEventStore.java │ │ │ │ │ ├── SessionEventStore.java │ │ │ │ │ └── StoredCodingSession.java │ │ │ │ └── shell/ │ │ │ │ ├── JlineCodeCommandRunner.java │ │ │ │ ├── JlineShellContext.java │ │ │ │ ├── JlineShellTerminalIO.java │ │ │ │ └── WindowsConsoleKeyPoller.java │ │ │ └── tui/ │ │ │ ├── AnsiTuiRuntime.java │ │ │ ├── AppendOnlyTuiRuntime.java │ │ │ ├── JlineTerminalIO.java │ │ │ ├── StreamsTerminalIO.java │ │ │ ├── TerminalIO.java │ │ │ ├── TuiAnsi.java │ │ │ ├── TuiAssistantPhase.java │ │ │ ├── TuiAssistantToolView.java │ │ │ ├── TuiAssistantViewModel.java │ │ │ ├── TuiConfig.java │ │ │ ├── TuiConfigManager.java │ │ │ ├── TuiInteractionState.java │ │ │ ├── TuiKeyStroke.java │ │ │ ├── TuiKeyType.java │ │ │ ├── TuiPaletteItem.java │ │ │ ├── TuiPanelId.java │ │ │ ├── TuiRenderContext.java │ │ │ ├── TuiRenderer.java │ │ │ ├── TuiRuntime.java │ │ │ ├── TuiScreenModel.java │ │ │ ├── TuiSessionView.java │ │ │ ├── TuiTheme.java │ │ │ ├── io/ │ │ │ │ ├── DefaultJlineTerminalIO.java │ │ │ │ └── DefaultStreamsTerminalIO.java │ │ │ └── runtime/ │ │ │ ├── DefaultAnsiTuiRuntime.java │ │ │ └── DefaultAppendOnlyTuiRuntime.java │ │ └── resources/ │ │ └── io/ │ │ └── github/ │ │ └── lnyocly/ │ │ └── ai4j/ │ │ └── tui/ │ │ └── themes/ │ │ ├── amber.json │ │ ├── default.json │ │ ├── github-dark.json │ │ ├── github-light.json │ │ ├── matrix.json │ │ └── ocean.json │ └── test/ │ └── java/ │ └── io/ │ └── github/ │ └── lnyocly/ │ └── ai4j/ │ ├── cli/ │ │ ├── Ai4jCliTest.java │ │ ├── AssistantTranscriptRendererTest.java │ │ ├── CliDisplayWidthTest.java │ │ ├── CliMcpConfigManagerTest.java │ │ ├── CliMcpRuntimeManagerTest.java │ │ ├── CliProviderConfigManagerTest.java │ │ ├── CliThemeStylerTest.java │ │ ├── CodeCommandOptionsParserTest.java │ │ ├── CodeCommandTest.java │ │ ├── CodexStyleBlockFormatterTest.java │ │ ├── DefaultCodingCliAgentFactoryTest.java │ │ ├── DefaultCodingSessionManagerTest.java │ │ ├── FileCodingSessionStoreTest.java │ │ ├── FileSessionEventStoreTest.java │ │ ├── JlineShellTerminalIOTest.java │ │ ├── PatchSummaryFormatterTest.java │ │ ├── SlashCommandControllerTest.java │ │ ├── TranscriptPrinterTest.java │ │ ├── acp/ │ │ │ ├── AcpCommandTest.java │ │ │ └── AcpSlashCommandSupportTest.java │ │ ├── agent/ │ │ │ └── CliCodingAgentRegistryTest.java │ │ └── runtime/ │ │ ├── AgentHandoffSessionEventSupportTest.java │ │ ├── AgentTeamMessageSessionEventSupportTest.java │ │ ├── AgentTeamSessionEventSupportTest.java │ │ ├── CodingTaskSessionEventBridgeTest.java │ │ └── HeadlessCodingSessionRuntimeTest.java │ └── tui/ │ ├── AnsiTuiRuntimeTest.java │ ├── AppendOnlyTuiRuntimeTest.java │ ├── StreamsTerminalIOTest.java │ ├── TuiConfigManagerTest.java │ ├── TuiInteractionStateTest.java │ └── TuiSessionViewTest.java ├── ai4j-coding/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── io/ │ │ └── github/ │ │ └── lnyocly/ │ │ └── ai4j/ │ │ └── coding/ │ │ ├── CodingAgent.java │ │ ├── CodingAgentBuilder.java │ │ ├── CodingAgentOptions.java │ │ ├── CodingAgentRequest.java │ │ ├── CodingAgentResult.java │ │ ├── CodingAgents.java │ │ ├── CodingSession.java │ │ ├── CodingSessionCheckpoint.java │ │ ├── CodingSessionCheckpointFormatter.java │ │ ├── CodingSessionCompactResult.java │ │ ├── CodingSessionScope.java │ │ ├── CodingSessionSnapshot.java │ │ ├── CodingSessionState.java │ │ ├── compact/ │ │ │ ├── CodingCompactionPreparation.java │ │ │ ├── CodingSessionCompactor.java │ │ │ ├── CodingToolResultMicroCompactResult.java │ │ │ └── CodingToolResultMicroCompactor.java │ │ ├── definition/ │ │ │ ├── BuiltInCodingAgentDefinitions.java │ │ │ ├── CodingAgentDefinition.java │ │ │ ├── CodingAgentDefinitionRegistry.java │ │ │ ├── CodingApprovalMode.java │ │ │ ├── CodingIsolationMode.java │ │ │ ├── CodingMemoryScope.java │ │ │ ├── CodingSessionMode.java │ │ │ ├── CompositeCodingAgentDefinitionRegistry.java │ │ │ └── StaticCodingAgentDefinitionRegistry.java │ │ ├── delegate/ │ │ │ ├── CodingDelegateRequest.java │ │ │ ├── CodingDelegateResult.java │ │ │ ├── CodingDelegateToolExecutor.java │ │ │ └── CodingDelegateToolRegistry.java │ │ ├── loop/ │ │ │ ├── CodingAgentLoopController.java │ │ │ ├── CodingContinuationPrompt.java │ │ │ ├── CodingLoopDecision.java │ │ │ ├── CodingLoopPolicy.java │ │ │ └── CodingStopReason.java │ │ ├── patch/ │ │ │ ├── ApplyPatchFileChange.java │ │ │ └── ApplyPatchResult.java │ │ ├── policy/ │ │ │ ├── CodingToolContextPolicy.java │ │ │ └── CodingToolPolicyResolver.java │ │ ├── process/ │ │ │ ├── BashProcessInfo.java │ │ │ ├── BashProcessLogChunk.java │ │ │ ├── BashProcessStatus.java │ │ │ ├── SessionProcessRegistry.java │ │ │ └── StoredProcessSnapshot.java │ │ ├── prompt/ │ │ │ └── CodingContextPromptAssembler.java │ │ ├── runtime/ │ │ │ ├── CodingRuntime.java │ │ │ ├── CodingRuntimeListener.java │ │ │ └── DefaultCodingRuntime.java │ │ ├── session/ │ │ │ ├── CodingSessionDescriptor.java │ │ │ ├── CodingSessionLink.java │ │ │ ├── CodingSessionLinkStore.java │ │ │ ├── InMemoryCodingSessionLinkStore.java │ │ │ ├── ManagedCodingSession.java │ │ │ ├── SessionEvent.java │ │ │ └── SessionEventType.java │ │ ├── shell/ │ │ │ ├── LocalShellCommandExecutor.java │ │ │ ├── ShellCommandExecutor.java │ │ │ ├── ShellCommandRequest.java │ │ │ ├── ShellCommandResult.java │ │ │ └── ShellCommandSupport.java │ │ ├── skill/ │ │ │ ├── CodingSkillDescriptor.java │ │ │ └── CodingSkillDiscovery.java │ │ ├── task/ │ │ │ ├── CodingTask.java │ │ │ ├── CodingTaskManager.java │ │ │ ├── CodingTaskProgress.java │ │ │ ├── CodingTaskStatus.java │ │ │ └── InMemoryCodingTaskManager.java │ │ ├── tool/ │ │ │ ├── ApplyPatchToolExecutor.java │ │ │ ├── BashToolExecutor.java │ │ │ ├── CodingToolNames.java │ │ │ ├── CodingToolRegistryFactory.java │ │ │ ├── ReadFileToolExecutor.java │ │ │ ├── RoutingToolExecutor.java │ │ │ ├── ToolExecutorDecorator.java │ │ │ └── WriteFileToolExecutor.java │ │ └── workspace/ │ │ ├── LocalWorkspaceFileService.java │ │ ├── WorkspaceContext.java │ │ ├── WorkspaceEntry.java │ │ ├── WorkspaceFileReadResult.java │ │ ├── WorkspaceFileService.java │ │ └── WorkspaceWriteResult.java │ └── test/ │ └── java/ │ └── io/ │ └── github/ │ └── lnyocly/ │ └── ai4j/ │ └── coding/ │ ├── ApplyPatchToolExecutorTest.java │ ├── BashToolExecutorTest.java │ ├── CodingAgentBuilderTest.java │ ├── CodingRuntimeTest.java │ ├── CodingSessionCheckpointFormatterTest.java │ ├── CodingSessionTest.java │ ├── CodingSkillSupportTest.java │ ├── LocalShellCommandExecutorTest.java │ ├── MinimaxCodingAgentTeamWorkspaceUsageTest.java │ ├── ReadFileToolExecutorTest.java │ ├── WriteFileToolExecutorTest.java │ ├── loop/ │ │ └── CodingAgentLoopControllerTest.java │ └── shell/ │ └── ShellCommandSupportTest.java ├── ai4j-flowgram-demo/ │ ├── README.md │ ├── backend-18080-run.log │ ├── backend-18080.log │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── io/ │ │ └── github/ │ │ └── lnyocly/ │ │ └── ai4j/ │ │ └── flowgram/ │ │ └── demo/ │ │ ├── FlowGramDemoApplication.java │ │ └── FlowGramDemoMockController.java │ └── resources/ │ └── application.yml ├── ai4j-flowgram-spring-boot-starter/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── io/ │ │ │ └── github/ │ │ │ └── lnyocly/ │ │ │ └── ai4j/ │ │ │ └── flowgram/ │ │ │ └── springboot/ │ │ │ ├── adapter/ │ │ │ │ └── FlowGramProtocolAdapter.java │ │ │ ├── autoconfigure/ │ │ │ │ └── FlowGramAutoConfiguration.java │ │ │ ├── config/ │ │ │ │ └── FlowGramProperties.java │ │ │ ├── controller/ │ │ │ │ └── FlowGramTaskController.java │ │ │ ├── dto/ │ │ │ │ ├── FlowGramErrorResponse.java │ │ │ │ ├── FlowGramTaskCancelResponse.java │ │ │ │ ├── FlowGramTaskReportResponse.java │ │ │ │ ├── FlowGramTaskResultResponse.java │ │ │ │ ├── FlowGramTaskRunRequest.java │ │ │ │ ├── FlowGramTaskRunResponse.java │ │ │ │ ├── FlowGramTaskValidateRequest.java │ │ │ │ ├── FlowGramTaskValidateResponse.java │ │ │ │ └── FlowGramTraceView.java │ │ │ ├── exception/ │ │ │ │ ├── FlowGramAccessDeniedException.java │ │ │ │ ├── FlowGramApiException.java │ │ │ │ ├── FlowGramExceptionHandler.java │ │ │ │ └── FlowGramTaskNotFoundException.java │ │ │ ├── node/ │ │ │ │ ├── FlowGramCodeNodeExecutor.java │ │ │ │ ├── FlowGramHttpNodeExecutor.java │ │ │ │ ├── FlowGramKnowledgeRetrieveNodeExecutor.java │ │ │ │ ├── FlowGramNodeValueResolver.java │ │ │ │ ├── FlowGramToolNodeExecutor.java │ │ │ │ └── FlowGramVariableNodeExecutor.java │ │ │ ├── security/ │ │ │ │ ├── DefaultFlowGramAccessChecker.java │ │ │ │ ├── DefaultFlowGramCallerResolver.java │ │ │ │ ├── DefaultFlowGramTaskOwnershipStrategy.java │ │ │ │ ├── FlowGramAccessChecker.java │ │ │ │ ├── FlowGramAction.java │ │ │ │ ├── FlowGramCaller.java │ │ │ │ ├── FlowGramCallerResolver.java │ │ │ │ ├── FlowGramTaskOwnership.java │ │ │ │ └── FlowGramTaskOwnershipStrategy.java │ │ │ └── support/ │ │ │ ├── FlowGramRuntimeFacade.java │ │ │ ├── FlowGramRuntimeTraceCollector.java │ │ │ ├── FlowGramStoredTask.java │ │ │ ├── FlowGramTaskStore.java │ │ │ ├── FlowGramTraceResponseEnricher.java │ │ │ ├── InMemoryFlowGramTaskStore.java │ │ │ ├── JdbcFlowGramTaskStore.java │ │ │ └── RegistryBackedFlowGramModelClientResolver.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ └── test/ │ └── java/ │ └── io/ │ └── github/ │ └── lnyocly/ │ └── ai4j/ │ └── flowgram/ │ └── springboot/ │ ├── FlowGramJdbcTaskStoreAutoConfigurationTest.java │ ├── FlowGramRuntimeTraceCollectorTest.java │ ├── FlowGramTaskControllerIntegrationTest.java │ ├── node/ │ │ ├── FlowGramBuiltinNodeExecutorTest.java │ │ └── FlowGramKnowledgeRetrieveNodeExecutorTest.java │ └── support/ │ └── JdbcFlowGramTaskStoreTest.java ├── ai4j-flowgram-webapp-demo/ │ ├── .eslintrc.js │ ├── .gitignore │ ├── README.md │ ├── README.zh_CN.md │ ├── index.html │ ├── package.json │ ├── rsbuild.config.ts │ ├── src/ │ │ ├── app.tsx │ │ ├── assets/ │ │ │ ├── icon-auto-layout.tsx │ │ │ ├── icon-cancel.tsx │ │ │ ├── icon-comment.tsx │ │ │ ├── icon-minimap.tsx │ │ │ ├── icon-mouse.tsx │ │ │ ├── icon-pad.tsx │ │ │ ├── icon-success.tsx │ │ │ ├── icon-switch-line.tsx │ │ │ └── icon-warning.tsx │ │ ├── components/ │ │ │ ├── add-node/ │ │ │ │ ├── index.tsx │ │ │ │ └── use-add-node.ts │ │ │ ├── base-node/ │ │ │ │ ├── index.tsx │ │ │ │ ├── node-wrapper.tsx │ │ │ │ ├── styles.tsx │ │ │ │ └── utils.ts │ │ │ ├── comment/ │ │ │ │ ├── components/ │ │ │ │ │ ├── blank-area.tsx │ │ │ │ │ ├── border-area.tsx │ │ │ │ │ ├── container.tsx │ │ │ │ │ ├── content-drag-area.tsx │ │ │ │ │ ├── drag-area.tsx │ │ │ │ │ ├── editor.tsx │ │ │ │ │ ├── index.css │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── more-button.tsx │ │ │ │ │ ├── render.tsx │ │ │ │ │ └── resize-area.tsx │ │ │ │ ├── constant.ts │ │ │ │ ├── hooks/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── use-model.ts │ │ │ │ │ ├── use-overflow.ts │ │ │ │ │ ├── use-placeholder.ts │ │ │ │ │ └── use-size.ts │ │ │ │ ├── index.ts │ │ │ │ ├── model.ts │ │ │ │ └── type.ts │ │ │ ├── group/ │ │ │ │ ├── color.ts │ │ │ │ ├── components/ │ │ │ │ │ ├── background.tsx │ │ │ │ │ ├── color.tsx │ │ │ │ │ ├── header.tsx │ │ │ │ │ ├── icon-group.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── node-render.tsx │ │ │ │ │ ├── tips/ │ │ │ │ │ │ ├── global-store.ts │ │ │ │ │ │ ├── icon-close.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── is-mac-os.ts │ │ │ │ │ │ ├── style.ts │ │ │ │ │ │ └── use-control.ts │ │ │ │ │ ├── title.tsx │ │ │ │ │ ├── tools.tsx │ │ │ │ │ └── ungroup.tsx │ │ │ │ ├── constant.ts │ │ │ │ ├── index.css │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── line-add-button/ │ │ │ │ ├── button.tsx │ │ │ │ ├── index.less │ │ │ │ ├── index.tsx │ │ │ │ └── use-visible.ts │ │ │ ├── node-menu/ │ │ │ │ └── index.tsx │ │ │ ├── node-panel/ │ │ │ │ ├── index.less │ │ │ │ ├── index.tsx │ │ │ │ ├── node-list.tsx │ │ │ │ └── node-placeholder.tsx │ │ │ ├── problem-panel/ │ │ │ │ ├── index.ts │ │ │ │ ├── problem-panel.tsx │ │ │ │ └── use-watch-validate.ts │ │ │ ├── selector-box-popover/ │ │ │ │ └── index.tsx │ │ │ ├── sidebar/ │ │ │ │ ├── index.tsx │ │ │ │ ├── node-form-panel.tsx │ │ │ │ └── sidebar-node-renderer.tsx │ │ │ ├── testrun/ │ │ │ │ ├── hooks/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── use-fields.ts │ │ │ │ │ ├── use-form-meta.ts │ │ │ │ │ └── use-sync-default.ts │ │ │ │ ├── json-value-editor/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── node-status-bar/ │ │ │ │ │ ├── group/ │ │ │ │ │ │ ├── index.module.less │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── header/ │ │ │ │ │ │ ├── index.module.less │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── render/ │ │ │ │ │ │ ├── index.module.less │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── viewer/ │ │ │ │ │ ├── index.module.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── testrun-button/ │ │ │ │ │ ├── index.module.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── testrun-form/ │ │ │ │ │ ├── index.module.less │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── type.ts │ │ │ │ ├── testrun-json-input/ │ │ │ │ │ ├── index.module.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── testrun-panel/ │ │ │ │ │ ├── index.module.less │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── test-run-panel.tsx │ │ │ │ └── trace-panel/ │ │ │ │ ├── index.module.less │ │ │ │ └── index.tsx │ │ │ └── tools/ │ │ │ ├── auto-layout.tsx │ │ │ ├── comment.tsx │ │ │ ├── download.tsx │ │ │ ├── fit-view.tsx │ │ │ ├── index.tsx │ │ │ ├── interactive.tsx │ │ │ ├── minimap-switch.tsx │ │ │ ├── minimap.tsx │ │ │ ├── mouse-pad-selector.less │ │ │ ├── mouse-pad-selector.tsx │ │ │ ├── readonly.tsx │ │ │ ├── save.tsx │ │ │ ├── styles.tsx │ │ │ ├── switch-line.tsx │ │ │ └── zoom-select.tsx │ │ ├── context/ │ │ │ ├── index.ts │ │ │ ├── node-render-context.ts │ │ │ └── sidebar-context.ts │ │ ├── data/ │ │ │ └── workflow-templates.ts │ │ ├── editor.tsx │ │ ├── form-components/ │ │ │ ├── feedback.tsx │ │ │ ├── form-content/ │ │ │ │ ├── index.tsx │ │ │ │ └── styles.tsx │ │ │ ├── form-header/ │ │ │ │ ├── index.tsx │ │ │ │ ├── styles.tsx │ │ │ │ ├── title-input.tsx │ │ │ │ └── utils.tsx │ │ │ ├── form-inputs/ │ │ │ │ ├── index.tsx │ │ │ │ └── styles.tsx │ │ │ ├── form-item/ │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ └── index.ts │ │ ├── hooks/ │ │ │ ├── index.ts │ │ │ ├── use-editor-props.tsx │ │ │ ├── use-is-sidebar.ts │ │ │ ├── use-node-render-context.ts │ │ │ └── use-port-click.ts │ │ ├── index.ts │ │ ├── initial-data.ts │ │ ├── nodes/ │ │ │ ├── block-end/ │ │ │ │ ├── form-meta.tsx │ │ │ │ └── index.ts │ │ │ ├── block-start/ │ │ │ │ ├── form-meta.tsx │ │ │ │ └── index.ts │ │ │ ├── break/ │ │ │ │ ├── form-meta.tsx │ │ │ │ └── index.ts │ │ │ ├── code/ │ │ │ │ ├── components/ │ │ │ │ │ ├── code.tsx │ │ │ │ │ ├── inputs.tsx │ │ │ │ │ └── outputs.tsx │ │ │ │ ├── form-meta.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── types.tsx │ │ │ ├── comment/ │ │ │ │ └── index.tsx │ │ │ ├── condition/ │ │ │ │ ├── condition-inputs/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.tsx │ │ │ │ ├── form-meta.tsx │ │ │ │ └── index.ts │ │ │ ├── constants.ts │ │ │ ├── continue/ │ │ │ │ ├── form-meta.tsx │ │ │ │ └── index.ts │ │ │ ├── default-form-meta.tsx │ │ │ ├── end/ │ │ │ │ ├── form-meta.tsx │ │ │ │ └── index.ts │ │ │ ├── group/ │ │ │ │ └── index.tsx │ │ │ ├── http/ │ │ │ │ ├── components/ │ │ │ │ │ ├── api.tsx │ │ │ │ │ ├── body.tsx │ │ │ │ │ ├── headers.tsx │ │ │ │ │ ├── params.tsx │ │ │ │ │ └── timeout.tsx │ │ │ │ ├── form-meta.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── types.tsx │ │ │ ├── index.ts │ │ │ ├── knowledge/ │ │ │ │ └── index.tsx │ │ │ ├── llm/ │ │ │ │ └── index.ts │ │ │ ├── loop/ │ │ │ │ ├── form-meta.tsx │ │ │ │ └── index.ts │ │ │ ├── start/ │ │ │ │ ├── form-meta.tsx │ │ │ │ └── index.ts │ │ │ ├── tool/ │ │ │ │ └── index.tsx │ │ │ └── variable/ │ │ │ ├── form-meta.tsx │ │ │ ├── index.tsx │ │ │ ├── output-schema.ts │ │ │ └── types.tsx │ │ ├── plugins/ │ │ │ ├── context-menu-plugin/ │ │ │ │ ├── context-menu-layer.tsx │ │ │ │ ├── context-menu-plugin.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── panel-manager-plugin/ │ │ │ │ ├── constants.ts │ │ │ │ ├── hooks.ts │ │ │ │ └── index.tsx │ │ │ ├── runtime-plugin/ │ │ │ │ ├── client/ │ │ │ │ │ ├── base-client.ts │ │ │ │ │ ├── browser-client/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── server-client/ │ │ │ │ │ ├── constant.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── type.ts │ │ │ │ ├── create-runtime-plugin.ts │ │ │ │ ├── index.ts │ │ │ │ ├── runtime-service/ │ │ │ │ │ └── index.ts │ │ │ │ ├── trace.ts │ │ │ │ └── type.ts │ │ │ └── variable-panel-plugin/ │ │ │ ├── components/ │ │ │ │ ├── full-variable-list.tsx │ │ │ │ ├── global-variable-editor.tsx │ │ │ │ ├── index.module.less │ │ │ │ └── variable-panel.tsx │ │ │ ├── index.ts │ │ │ ├── variable-panel-layer.tsx │ │ │ └── variable-panel-plugin.ts │ │ ├── services/ │ │ │ ├── custom-service.ts │ │ │ ├── index.ts │ │ │ └── validate-service.ts │ │ ├── shortcuts/ │ │ │ ├── collapse/ │ │ │ │ └── index.ts │ │ │ ├── constants.ts │ │ │ ├── copy/ │ │ │ │ └── index.ts │ │ │ ├── delete/ │ │ │ │ └── index.ts │ │ │ ├── expand/ │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── paste/ │ │ │ │ ├── index.ts │ │ │ │ ├── traverse.ts │ │ │ │ └── unique-workflow.ts │ │ │ ├── select-all/ │ │ │ │ └── index.ts │ │ │ ├── shortcuts.ts │ │ │ ├── type.ts │ │ │ ├── zoom-in/ │ │ │ │ └── index.ts │ │ │ └── zoom-out/ │ │ │ └── index.ts │ │ ├── styles/ │ │ │ └── index.css │ │ ├── type.d.ts │ │ ├── typings/ │ │ │ ├── index.ts │ │ │ ├── json-schema.ts │ │ │ └── node.ts │ │ ├── utils/ │ │ │ ├── backend-workflow.ts │ │ │ ├── can-contain-node.ts │ │ │ ├── index.ts │ │ │ ├── on-drag-line-end.ts │ │ │ └── toggle-loop-expanded.ts │ │ └── workbench/ │ │ ├── runtime-hooks.ts │ │ ├── workbench-shell.tsx │ │ ├── workbench-sidebar.tsx │ │ └── workbench-toolbar.tsx │ └── tsconfig.json ├── ai4j-spring-boot-starter/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── io/ │ │ │ └── github/ │ │ │ └── lnyocly/ │ │ │ └── ai4j/ │ │ │ ├── AgentFlowProperties.java │ │ │ ├── AgentFlowRegistry.java │ │ │ ├── AiConfigAutoConfiguration.java │ │ │ ├── AiConfigProperties.java │ │ │ ├── AiPlatformProperties.java │ │ │ ├── BaichuanConfigProperties.java │ │ │ ├── DashScopeConfigProperties.java │ │ │ ├── DeepSeekConfigProperties.java │ │ │ ├── DoubaoConfigProperties.java │ │ │ ├── HunyuanConfigProperties.java │ │ │ ├── JinaConfigProperties.java │ │ │ ├── LingyiConfigProperties.java │ │ │ ├── MilvusConfigProperties.java │ │ │ ├── MinimaxConfigProperties.java │ │ │ ├── MoonshotConfigProperties.java │ │ │ ├── OkHttpConfigProperties.java │ │ │ ├── OllamaConfigProperties.java │ │ │ ├── OpenAiConfigProperties.java │ │ │ ├── PgVectorConfigProperties.java │ │ │ ├── PineconeConfigProperties.java │ │ │ ├── QdrantConfigProperties.java │ │ │ ├── SearXNGConfigProperties.java │ │ │ └── ZhipuConfigProperties.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ └── test/ │ └── java/ │ └── io/ │ └── github/ │ └── lnyocly/ │ └── ai4j/ │ └── AgentFlowAutoConfigurationTest.java ├── docs-site/ │ ├── .gitignore │ ├── README.md │ ├── docusaurus.config.ts │ ├── i18n/ │ │ └── zh-Hans/ │ │ ├── code.json │ │ ├── docusaurus-plugin-content-docs/ │ │ │ ├── current/ │ │ │ │ ├── agent/ │ │ │ │ │ ├── _category_.json │ │ │ │ │ ├── agent-teams.md │ │ │ │ │ ├── codeact-custom-sandbox.md │ │ │ │ │ ├── codeact-runtime.md │ │ │ │ │ ├── coding-agent-cli.md │ │ │ │ │ ├── coding-agent-command-reference.md │ │ │ │ │ ├── custom-agent-development.md │ │ │ │ │ ├── memory-management.md │ │ │ │ │ ├── model-client-selection.md │ │ │ │ │ ├── multi-provider-profiles.md │ │ │ │ │ ├── overview.md │ │ │ │ │ ├── provider-config-examples.md │ │ │ │ │ ├── reference-core-classes.md │ │ │ │ │ ├── runtime-implementations.md │ │ │ │ │ ├── subagent-handoff-policy.md │ │ │ │ │ ├── system-prompt-vs-instructions.md │ │ │ │ │ ├── trace-observability.md │ │ │ │ │ ├── weather-workflow-cookbook.md │ │ │ │ │ └── workflow-stategraph.md │ │ │ │ ├── ai-basics/ │ │ │ │ │ ├── _category_.json │ │ │ │ │ ├── chat/ │ │ │ │ │ │ ├── _category_.json │ │ │ │ │ │ ├── multimodal.md │ │ │ │ │ │ ├── non-stream.md │ │ │ │ │ │ ├── stream.md │ │ │ │ │ │ └── tool-calling.md │ │ │ │ │ ├── enhancements/ │ │ │ │ │ │ ├── _category_.json │ │ │ │ │ │ ├── pinecone-rag-workflow.md │ │ │ │ │ │ ├── searxng-enhancement.md │ │ │ │ │ │ └── spi-http-stack.md │ │ │ │ │ ├── overview.md │ │ │ │ │ ├── platform-adaptation.md │ │ │ │ │ ├── responses/ │ │ │ │ │ │ ├── _category_.json │ │ │ │ │ │ ├── chat-vs-responses.md │ │ │ │ │ │ ├── non-stream.md │ │ │ │ │ │ └── stream-events.md │ │ │ │ │ └── services/ │ │ │ │ │ ├── _category_.json │ │ │ │ │ ├── audio.md │ │ │ │ │ ├── embedding.md │ │ │ │ │ ├── image-generation.md │ │ │ │ │ └── realtime.md │ │ │ │ ├── core-sdk/ │ │ │ │ │ ├── _category_.json │ │ │ │ │ ├── agentflow-protocol-mapping.md │ │ │ │ │ ├── agentflow.md │ │ │ │ │ ├── audio.md │ │ │ │ │ ├── chat/ │ │ │ │ │ │ ├── multimodal.md │ │ │ │ │ │ ├── non-stream.md │ │ │ │ │ │ ├── stream.md │ │ │ │ │ │ └── tool-calling.md │ │ │ │ │ ├── embedding.md │ │ │ │ │ ├── image-generation.md │ │ │ │ │ ├── overview.md │ │ │ │ │ ├── pinecone-rag-workflow.md │ │ │ │ │ ├── platform-service-matrix.md │ │ │ │ │ ├── realtime.md │ │ │ │ │ ├── responses/ │ │ │ │ │ │ ├── chat-vs-responses.md │ │ │ │ │ │ ├── non-stream.md │ │ │ │ │ │ └── stream-events.md │ │ │ │ │ ├── searxng-enhancement.md │ │ │ │ │ └── spi-http-stack.md │ │ │ │ ├── deploy/ │ │ │ │ │ ├── _category_.json │ │ │ │ │ └── cloudflare-pages.md │ │ │ │ ├── getting-started/ │ │ │ │ │ ├── _category_.json │ │ │ │ │ ├── chat-and-responses-guide.md │ │ │ │ │ ├── coding-agent-cli-quickstart.md │ │ │ │ │ ├── installation.md │ │ │ │ │ ├── multimodal-and-function-call.md │ │ │ │ │ ├── platforms-and-service-matrix.md │ │ │ │ │ ├── quickstart-ollama.md │ │ │ │ │ ├── quickstart-openai-jdk8.md │ │ │ │ │ ├── quickstart-springboot.md │ │ │ │ │ └── troubleshooting.md │ │ │ │ ├── guides/ │ │ │ │ │ ├── _category_.json │ │ │ │ │ ├── blog-migration-map.md │ │ │ │ │ ├── deepseek-stream-search-rag.md │ │ │ │ │ ├── pinecone-vector-workflow.md │ │ │ │ │ ├── rag-legal-assistant.md │ │ │ │ │ ├── searxng-web-search.md │ │ │ │ │ └── spi-dispatcher-connectionpool.md │ │ │ │ ├── intro.md │ │ │ │ └── mcp/ │ │ │ │ ├── _category_.json │ │ │ │ ├── build-your-mcp-server.md │ │ │ │ ├── client-integration.md │ │ │ │ ├── gateway-management.md │ │ │ │ ├── mcp-agent-end-to-end.md │ │ │ │ ├── mysql-dynamic-datasource.md │ │ │ │ ├── overview.md │ │ │ │ ├── third-party-mcp-integration.md │ │ │ │ ├── tool-exposure-semantics.md │ │ │ │ └── transport-types.md │ │ │ └── current.json │ │ └── docusaurus-theme-classic/ │ │ ├── footer.json │ │ └── navbar.json │ ├── package.json │ ├── scripts/ │ │ └── generate_agent_teams_api_docs.py │ ├── sidebars.ts │ ├── src/ │ │ ├── components/ │ │ │ └── HomepageFeatures/ │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ │ ├── css/ │ │ │ └── custom.css │ │ ├── pages/ │ │ │ ├── index.module.css │ │ │ └── index.tsx │ │ └── theme/ │ │ └── NotFound/ │ │ └── Content/ │ │ └── index.tsx │ ├── static/ │ │ ├── .nojekyll │ │ ├── install.ps1 │ │ └── install.sh │ └── tsconfig.json └── pom.xml