flzxsqc-demo 1.4.3
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 +2 -0
- package/agent-backend/ARCHITECTURE.md +768 -0
- package/agent-backend/docs/async-analysis-aggregation-report-generalization.md +486 -0
- package/agent-backend/docs/harness-implementation-architecture.md +547 -0
- package/agent-backend/docs/harness-main-flow-code-references.md +664 -0
- package/agent-backend/docs/harness-requirements.md +212 -0
- package/agent-backend/docs/session-semantic-clustering-tool-design.md +337 -0
- package/agent-backend/pom.xml +130 -0
- package/agent-backend/src/main/java/com/example/agent/AgentApplication.java +20 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/analysis/AnalysisOutputParser.java +93 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/analysis/AnalysisPromptCompiler.java +76 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/analysis/PerRecordAnalysisContract.java +27 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/binding/BindingResolver.java +7 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/binding/DefaultBindingResolver.java +30 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/memory/AdminAuditRepository.java +119 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/memory/HarnessBestPracticeRepository.java +99 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/memory/HarnessBestPracticeSynthesisService.java +264 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/memory/HarnessErrorPatternRepository.java +112 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/memory/HarnessMemoryService.java +137 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/memory/HarnessReviewService.java +34 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/memory/SkillImprovementCandidateRepository.java +57 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/memory/SkillVersionRepository.java +121 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/planning/CompletionDecision.java +41 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/planning/CompletionPolicy.java +5 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/planning/FinalAnswerGuardService.java +276 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/planning/LoopGuardPolicy.java +47 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/planning/StructuredCompletionPolicy.java +160 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/policy/LlmRoleContext.java +33 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/policy/ModelRole.java +8 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/policy/ToolPolicyEngine.java +75 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/prompt/RuntimeInstructionFactory.java +149 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/recovery/DefaultFailureClassifier.java +106 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/recovery/FailureClassifier.java +5 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/recovery/FailureContext.java +25 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/recovery/FailureDecision.java +45 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/recovery/FailurePhase.java +6 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/report/ReportBlueprintContract.java +107 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/requirements/SkillQuestionRequirementService.java +210 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/schema/HarnessJsonSchemaValidator.java +197 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/state/AsyncCallbackContext.java +25 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/state/AsyncCallbackPayloadBuilder.java +7 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/state/DefaultAsyncCallbackPayloadBuilder.java +55 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/telemetry/HarnessMetricsService.java +47 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/tool/ToolInvocationGuard.java +171 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/workflow/HarnessPhase.java +17 -0
- package/agent-backend/src/main/java/com/example/agent/application/harness/workflow/HarnessWorkflowService.java +47 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/AgentCompletionFlowService.java +114 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/AgentDomainProfileService.java +25 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/AgentSessionStore.java +256 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/AgentStrategyService.java +146 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/AgentTimeContextService.java +211 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/AgentToolCallSupportService.java +120 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/AgentToolFlowService.java +287 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/AgentToolObservationService.java +69 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/AgentTurnRunner.java +321 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/AgentWaitingFlowService.java +321 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/AnalysisResultAssembler.java +95 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/ContextBudgetService.java +131 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/ConversationSummarizer.java +64 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/DslCompilerService.java +769 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/DslRuntimeService.java +407 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/FinalAnswerSynthesisService.java +156 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/InternalAsyncCallbackService.java +116 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/LlmSkillRouter.java +126 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/PlanRuntimeService.java +27 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/PromptAssembler.java +100 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/ReportAssemblyService.java +395 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/RuleBasedSkillSelector.java +14 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/RuntimeEventBus.java +120 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/SkillAdminService.java +183 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/SkillRegistry.java +85 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/SkillSelector.java +48 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/TokenEstimateService.java +31 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/ToolExecutionPipeline.java +252 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/ToolMessageCompactor.java +142 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/ToolRegistry.java +154 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/localtool/AnalysisJobService.java +160 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/localtool/AnalysisResultAggregationService.java +388 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/localtool/AnalysisResultClusteringService.java +609 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/localtool/AnalysisResultQueryService.java +37 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/localtool/AnalysisWorkerService.java +376 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/localtool/ClusterLabelService.java +190 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/localtool/CustomerSessionQueryService.java +35 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/localtool/LocalPerRecordAnalysisExecutor.java +80 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/localtool/PerRecordAnalysisExecutor.java +42 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/localtool/QueryHandleService.java +139 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/localtool/RemotePerRecordAnalysisExecutor.java +100 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/localtool/SphericalKMeansClusterer.java +287 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/localtool/TextFeatureVectorizer.java +233 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/tool/argument/CompanyStructuredQueryToolArgumentResolver.java +169 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/tool/argument/DefaultToolArgumentResolver.java +21 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/tool/argument/PerRecordAnalysisApiToolArgumentResolver.java +93 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/tool/argument/ReportToolArgumentResolver.java +502 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/tool/argument/ToolArgumentResolver.java +12 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/tool/argument/ToolArgumentResolverRegistry.java +31 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/tool/response/RemoteAnalysisAsyncResponseNormalizer.java +64 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/tool/response/StandardToolResponseNormalizer.java +53 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/tool/response/ToolResponseNormalizer.java +12 -0
- package/agent-backend/src/main/java/com/example/agent/application/service/tool/response/ToolResponseNormalizerRegistry.java +26 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/AgentExecutedStep.java +82 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/AgentSession.java +50 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/AgentSessionStatus.java +9 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/AgentSessionSummary.java +21 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/AgentSessionType.java +6 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/AgentStrategy.java +18 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/AgentTurn.java +13 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/AgentTurnStatus.java +9 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/CustomerSessionRecord.java +97 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/ExecutableDslInputBinding.java +10 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/ExecutableDslSnapshot.java +19 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/ExecutableDslStep.java +18 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/RenderedReport.java +14 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/ReportBlockBlueprint.java +27 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/ReportBlueprint.java +57 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/ReportSectionBlueprint.java +16 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/ReportSourceRef.java +38 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/ReportTableColumnBlueprint.java +11 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/RiskLevel.java +7 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/RuntimeEvent.java +17 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/RuntimeEventType.java +19 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/SkillDefinition.java +19 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/TimeNormalizationMode.java +7 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/ToolCommand.java +60 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/ToolDefinition.java +31 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/ToolExecutionFailedException.java +55 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/ToolExecutionResult.java +76 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/ToolOutputContract.java +16 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/ToolPrecondition.java +12 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/ToolResult.java +21 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/ToolResultType.java +10 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/ToolValidationException.java +53 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/chat/ChatMessage.java +26 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/chat/ChatRole.java +36 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/chat/ToolCall.java +14 -0
- package/agent-backend/src/main/java/com/example/agent/domain/model/chat/ToolFunctionCall.java +15 -0
- package/agent-backend/src/main/java/com/example/agent/domain/port/LlmClient.java +38 -0
- package/agent-backend/src/main/java/com/example/agent/domain/port/ToolExecutor.java +50 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/config/AgentAsyncConfig.java +23 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/config/ElasticsearchConfig.java +17 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/es/ContentIndexes.java +17 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/es/ContentPreviews.java +19 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/es/ElasticsearchLargeContentStore.java +128 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/es/LargeContentStore.java +20 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/llm/DummyLlmClient.java +305 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/llm/LlmProperties.java +46 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/mapper/AgentEventMapper.java +16 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/mapper/AgentSessionMapper.java +12 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/mapper/AsyncJobMapper.java +7 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/mapper/DslExecutionLogMapper.java +7 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/mapper/DslInstanceMapper.java +7 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/mapper/DslStepMapper.java +7 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/mapper/IsapStrategyMapper.java +24 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/mapper/SessionMapper.java +11 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/mapper/SkillDefinitionMapper.java +7 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/mapper/ToolDefinitionMapper.java +7 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/mapper/harness/HarnessMemoryMapper.java +51 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/mapper/localtool/AnalysisJobMapper.java +15 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/mapper/localtool/AnalysisRecordResultMapper.java +15 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/mapper/localtool/CustomerSessionMapper.java +13 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/mapper/localtool/QueryInstanceMapper.java +17 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/mapper/model/AgentEventRow.java +13 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/persistence/po/AgentSessionPo.java +64 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/persistence/po/AsyncJobPo.java +41 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/persistence/po/DslExecutionLogPo.java +27 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/persistence/po/DslInstancePo.java +32 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/persistence/po/DslStepPo.java +40 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/persistence/po/IsapStrategyPo.java +18 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/persistence/po/SkillDefinitionPo.java +29 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/persistence/po/ToolDefinitionPo.java +54 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/persistence/po/localtool/AnalysisJobPo.java +45 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/persistence/po/localtool/AnalysisResultPo.java +32 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/persistence/po/localtool/QueryInstancePo.java +33 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/persistence/po/localtool/QueryResultItemPo.java +25 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/repository/AgentEventRepository.java +60 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/repository/AgentSessionRepository.java +178 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/repository/AsyncJobRepository.java +145 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/repository/DslExecutionLogRepository.java +75 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/repository/DslInstanceRepository.java +106 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/repository/DslStepRepository.java +121 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/repository/IsapStrategyRepository.java +91 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/repository/SessionRepository.java +49 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/repository/SkillDefinitionRepository.java +59 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/repository/ToolDefinitionRepository.java +32 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/repository/localtool/AnalysisClusterRepository.java +81 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/repository/localtool/AnalysisJobRepository.java +155 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/repository/localtool/AnalysisRecordResultRepository.java +85 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/repository/localtool/CustomerSessionMysqlRepository.java +362 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/repository/localtool/QueryInstanceRepository.java +133 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/tool/DateExpressionParser.java +96 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/tool/SampleSessionItem.java +17 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/tool/ToolHttpAuthProperties.java +16 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/tool/ToolHttpAuthSupport.java +41 -0
- package/agent-backend/src/main/java/com/example/agent/infrastructure/tool/ToolsApiToolExecutor.java +195 -0
- package/agent-backend/src/main/java/com/example/agent/interfaces/rest/AgentApiExceptionHandler.java +32 -0
- package/agent-backend/src/main/java/com/example/agent/interfaces/rest/AgentRuntimeController.java +65 -0
- package/agent-backend/src/main/java/com/example/agent/interfaces/rest/AgentSessionController.java +120 -0
- package/agent-backend/src/main/java/com/example/agent/interfaces/rest/AgentStrategyController.java +78 -0
- package/agent-backend/src/main/java/com/example/agent/interfaces/rest/CustomerSessionController.java +23 -0
- package/agent-backend/src/main/java/com/example/agent/interfaces/rest/SkillAdminController.java +113 -0
- package/agent-backend/src/main/java/com/example/agent/interfaces/rest/ToolValidationExceptionHandler.java +17 -0
- package/agent-backend/src/main/java/com/example/agent/interfaces/rest/ToolsController.java +396 -0
- package/agent-backend/src/main/java/com/example/agent/interfaces/rest/dto/CustomerSessionAggregationSpec.java +10 -0
- package/agent-backend/src/main/java/com/example/agent/interfaces/rest/dto/CustomerSessionQueryRequest.java +19 -0
- package/agent-backend/src/main/java/com/example/agent/interfaces/rest/dto/CustomerSessionQueryResponse.java +16 -0
- package/agent-backend/src/main/resources/application.yml +111 -0
- package/agent-backend/src/main/resources/data.sql +930 -0
- package/agent-backend/src/main/resources/es/large-content-index.json +26 -0
- package/agent-backend/src/main/resources/mappers/AgentEventMapper.xml +28 -0
- package/agent-backend/src/main/resources/mappers/AgentSessionMapper.xml +30 -0
- package/agent-backend/src/main/resources/mappers/IsapStrategyMapper.xml +70 -0
- package/agent-backend/src/main/resources/mappers/SessionMapper.xml +25 -0
- package/agent-backend/src/main/resources/mappers/harness/HarnessMemoryMapper.xml +194 -0
- package/agent-backend/src/main/resources/mappers/localtool/AnalysisJobMapper.xml +50 -0
- package/agent-backend/src/main/resources/mappers/localtool/AnalysisRecordResultMapper.xml +43 -0
- package/agent-backend/src/main/resources/mappers/localtool/CustomerSessionMapper.xml +119 -0
- package/agent-backend/src/main/resources/mappers/localtool/QueryInstanceMapper.xml +34 -0
- package/agent-backend/src/main/resources/schema.sql +917 -0
- package/agent-backend/src/test/java/com/example/agent/application/harness/analysis/AnalysisOutputParserTest.java +28 -0
- package/agent-backend/src/test/java/com/example/agent/application/harness/analysis/AnalysisPromptCompilerTest.java +20 -0
- package/agent-backend/src/test/java/com/example/agent/application/harness/binding/DefaultBindingResolverTest.java +23 -0
- package/agent-backend/src/test/java/com/example/agent/application/harness/memory/HarnessBestPracticeRepositoryTest.java +43 -0
- package/agent-backend/src/test/java/com/example/agent/application/harness/memory/HarnessBestPracticeSynthesisServiceTest.java +141 -0
- package/agent-backend/src/test/java/com/example/agent/application/harness/memory/HarnessMemoryServiceTest.java +54 -0
- package/agent-backend/src/test/java/com/example/agent/application/harness/planning/FinalAnswerGuardServiceTest.java +109 -0
- package/agent-backend/src/test/java/com/example/agent/application/harness/planning/LoopGuardPolicyTest.java +42 -0
- package/agent-backend/src/test/java/com/example/agent/application/harness/planning/StructuredCompletionPolicyTest.java +51 -0
- package/agent-backend/src/test/java/com/example/agent/application/harness/prompt/RuntimeInstructionFactoryTest.java +75 -0
- package/agent-backend/src/test/java/com/example/agent/application/harness/report/ReportBlueprintContractTest.java +36 -0
- package/agent-backend/src/test/java/com/example/agent/application/harness/requirements/SkillQuestionRequirementServiceTest.java +85 -0
- package/agent-backend/src/test/java/com/example/agent/application/harness/state/DefaultAsyncCallbackPayloadBuilderTest.java +33 -0
- package/agent-backend/src/test/java/com/example/agent/application/harness/telemetry/HarnessMetricsServiceTest.java +55 -0
- package/agent-backend/src/test/java/com/example/agent/application/harness/tool/ToolInvocationGuardTest.java +79 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/AgentSessionStoreTest.java +135 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/AgentStrategyServiceTest.java +70 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/AgentTimeContextServiceTest.java +78 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/AgentTurnRunnerIntegrationTest.java +686 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/AgentWaitingFlowServiceTest.java +72 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/ContextBudgetServiceTest.java +95 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/CustomerSessionQueryServiceTest.java +94 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/DslCompilerServiceTest.java +403 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/LiveRealLlmDatabaseE2ETest.java +104 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/QueryHandleServiceIntegrationTest.java +41 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/ReportAssemblyServiceTest.java +705 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/SkillSelectorTest.java +65 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/ToolExecutionPipelineTest.java +136 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/ToolMessageCompactorTest.java +34 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/localtool/AnalysisResultAggregationServiceTest.java +113 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/localtool/AnalysisResultClusteringServiceTest.java +97 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/localtool/ClusterLabelServiceTest.java +46 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/localtool/SphericalKMeansClustererTest.java +30 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/localtool/TextFeatureVectorizerTest.java +23 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/tool/argument/CompanyStructuredQueryToolArgumentResolverTest.java +105 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/tool/argument/PerRecordAnalysisApiToolArgumentResolverTest.java +42 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/tool/response/RemoteAnalysisAsyncResponseNormalizerTest.java +28 -0
- package/agent-backend/src/test/java/com/example/agent/application/service/tool/response/StandardToolResponseNormalizerTest.java +35 -0
- package/agent-backend/src/test/java/com/example/agent/infrastructure/llm/DummyLlmClientTest.java +152 -0
- package/agent-backend/src/test/java/com/example/agent/infrastructure/tool/DateExpressionParserTest.java +42 -0
- package/agent-backend/src/test/resources/application.yml +25 -0
- package/agent-backend/target/classes/application.yml +111 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/analysis/AnalysisOutputParser$1.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/analysis/AnalysisOutputParser.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/analysis/AnalysisPromptCompiler.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/analysis/PerRecordAnalysisContract.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/binding/BindingResolver.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/binding/DefaultBindingResolver.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/memory/AdminAuditRepository$AuditRecord.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/memory/AdminAuditRepository.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/memory/HarnessBestPracticeRepository$RecoveredPracticeInsert.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/memory/HarnessBestPracticeRepository.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/memory/HarnessBestPracticeSynthesisService$1.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/memory/HarnessBestPracticeSynthesisService$BestPracticeDraft.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/memory/HarnessBestPracticeSynthesisService$RecoveryExample.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/memory/HarnessBestPracticeSynthesisService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/memory/HarnessErrorPatternRepository$ErrorPatternRecord.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/memory/HarnessErrorPatternRepository.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/memory/HarnessMemoryService$HarnessMemoryReadback.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/memory/HarnessMemoryService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/memory/HarnessReviewService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/memory/SkillImprovementCandidateRepository.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/memory/SkillVersionRepository$SkillVersionRecord.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/memory/SkillVersionRepository.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/planning/CompletionDecision$DecisionType.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/planning/CompletionDecision.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/planning/CompletionPolicy.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/planning/FinalAnswerGuardService$1.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/planning/FinalAnswerGuardService$2.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/planning/FinalAnswerGuardService$3.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/planning/FinalAnswerGuardService$4.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/planning/FinalAnswerGuardService$UserReplyDecision.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/planning/FinalAnswerGuardService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/planning/LoopGuardPolicy.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/planning/StructuredCompletionPolicy$1.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/planning/StructuredCompletionPolicy$CompletionSignal.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/planning/StructuredCompletionPolicy.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/policy/LlmRoleContext.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/policy/ModelRole.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/policy/ToolPolicyEngine.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/prompt/RuntimeInstructionFactory.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/recovery/DefaultFailureClassifier.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/recovery/FailureClassifier.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/recovery/FailureContext.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/recovery/FailureDecision.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/recovery/FailurePhase.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/report/ReportBlueprintContract.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/requirements/SkillQuestionRequirementService$1.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/requirements/SkillQuestionRequirementService$2.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/requirements/SkillQuestionRequirementService$RequirementCheckResult.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/requirements/SkillQuestionRequirementService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/schema/HarnessJsonSchemaValidator.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/state/AsyncCallbackContext.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/state/AsyncCallbackPayloadBuilder.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/state/DefaultAsyncCallbackPayloadBuilder$1.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/state/DefaultAsyncCallbackPayloadBuilder.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/telemetry/HarnessMetricsService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/tool/ToolInvocationGuard.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/workflow/HarnessPhase.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/harness/workflow/HarnessWorkflowService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentCompletionFlowService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentSessionStore$1.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentSessionStore$2.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentSessionStore$3.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentSessionStore$4.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentSessionStore.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentStrategyService$DuplicateNameException.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentStrategyService$NotFoundException.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentStrategyService$StrategyUpdateCommand.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentStrategyService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentTimeContextService$LocalDateRange.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentTimeContextService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentToolCallSupportService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentToolFlowService$ToolCallContext.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentToolFlowService$ToolCallOutcome.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentToolFlowService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentToolObservationService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentTurnRunner$1.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentTurnRunner.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentWaitingFlowService$UserInputWait.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/AgentWaitingFlowService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/ContextBudgetService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/ConversationSummarizer.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/DslCompilerService$BindingCandidate.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/DslCompilerService$CompiledStepContext.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/DslCompilerService$CompiledStepOutput.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/DslCompilerService$DataBindingSearch.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/DslCompilerService$ToolScopedPath.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/DslCompilerService$ToolSourceRef.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/DslCompilerService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/DslRuntimeService$ReplayExecutionState.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/DslRuntimeService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/FinalAnswerSynthesisService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/InternalAsyncCallbackService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/LlmSkillRouter.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/PlanRuntimeService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/PromptAssembler.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/ReportAssemblyService$1.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/ReportAssemblyService$2.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/ReportAssemblyService$3.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/ReportAssemblyService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/RuleBasedSkillSelector.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/RuntimeEventBus$1.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/RuntimeEventBus.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/SkillAdminService$SkillUpsertCommand.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/SkillAdminService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/SkillRegistry$1.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/SkillRegistry$2.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/SkillRegistry.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/SkillSelector.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/TokenEstimateService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/ToolExecutionPipeline$FailedToolExecution.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/ToolExecutionPipeline$ToolExecutionRequest.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/ToolExecutionPipeline.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/ToolMessageCompactor$1.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/ToolMessageCompactor.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/ToolRegistry$1.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/ToolRegistry$2.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/ToolRegistry$3.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/ToolRegistry.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/AnalysisJobService$AnalysisRequestContext.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/AnalysisJobService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/AnalysisResultAggregationService$AggregatedItem.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/AnalysisResultAggregationService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/AnalysisResultClusteringService$AnalysisDocument.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/AnalysisResultClusteringService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/AnalysisWorkerService$AnalysisExecutionContext.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/AnalysisWorkerService$SubmittedPerRecordJob.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/AnalysisWorkerService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/ClusterLabelService$1.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/ClusterLabelService$LabelRequest.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/ClusterLabelService$LabelResult.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/ClusterLabelService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/CustomerSessionQueryService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/LocalPerRecordAnalysisExecutor.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/PerRecordAnalysisExecutor$AnalysisSubmitRequest.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/PerRecordAnalysisExecutor$RawAnalysisRecordOutput.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/PerRecordAnalysisExecutor$SubmittedAnalysisJob.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/PerRecordAnalysisExecutor.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/QueryHandleService.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/RemotePerRecordAnalysisExecutor.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/SphericalKMeansClusterer$ClusterResult.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/SphericalKMeansClusterer.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/TextFeatureVectorizer$DocumentVector.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/TextFeatureVectorizer$VectorizedText.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/localtool/TextFeatureVectorizer.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/tool/argument/CompanyStructuredQueryToolArgumentResolver.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/tool/argument/DefaultToolArgumentResolver.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/tool/argument/PerRecordAnalysisApiToolArgumentResolver.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/tool/argument/ReportToolArgumentResolver.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/tool/argument/ToolArgumentResolver.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/tool/argument/ToolArgumentResolverRegistry.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/tool/response/RemoteAnalysisAsyncResponseNormalizer.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/tool/response/StandardToolResponseNormalizer.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/tool/response/ToolResponseNormalizer.class +0 -0
- package/agent-backend/target/classes/com/example/agent/application/service/tool/response/ToolResponseNormalizerRegistry.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/AgentExecutedStep$ExecutionRef.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/AgentExecutedStep.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/AgentSession.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/AgentSessionStatus.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/AgentSessionSummary.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/AgentSessionType.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/AgentStrategy.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/AgentTurn.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/AgentTurnStatus.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/ReportBlockBlueprint.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/ReportBlueprint.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/ReportSectionBlueprint.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/ReportTableColumnBlueprint.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/RuntimeEvent.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/RuntimeEventType.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/SkillDefinition.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/ToolCommand$ExecutionContext.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/ToolCommand.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/ToolDefinition.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/ToolExecutionFailedException$ToolFailureDetails.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/ToolExecutionFailedException.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/ToolExecutionResult.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/ToolOutputContract.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/ToolPrecondition.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/ToolResult.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/chat/ChatMessage.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/model/chat/ChatRole.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/port/LlmClient.class +0 -0
- package/agent-backend/target/classes/com/example/agent/domain/port/ToolExecutor.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/config/AgentAsyncConfig.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/es/ElasticsearchLargeContentStore.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/llm/DummyLlmClient$ResolvedModel.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/llm/DummyLlmClient.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/llm/LlmProperties$Model.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/llm/LlmProperties$Retry.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/llm/LlmProperties.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/mapper/AgentEventMapper.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/mapper/AgentSessionMapper.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/mapper/IsapStrategyMapper.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/mapper/SessionMapper.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/mapper/SkillDefinitionMapper.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/mapper/ToolDefinitionMapper.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/mapper/harness/HarnessMemoryMapper.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/persistence/po/AgentSessionPo.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/persistence/po/IsapStrategyPo.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/persistence/po/SkillDefinitionPo.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/persistence/po/ToolDefinitionPo.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/repository/AgentEventRepository.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/repository/AgentSessionRepository$AgentSessionUpsert.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/repository/AgentSessionRepository.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/repository/DslExecutionLogRepository.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/repository/IsapStrategyRepository.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/repository/SessionRepository.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/repository/SkillDefinitionRepository$SkillDefinitionUpsert.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/repository/SkillDefinitionRepository.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/repository/ToolDefinitionRepository.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/repository/localtool/AnalysisClusterRepository.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/repository/localtool/CustomerSessionMysqlRepository.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/tool/DateExpressionParser.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/tool/SampleSessionItem.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/tool/ToolHttpAuthProperties.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/tool/ToolHttpAuthSupport.class +0 -0
- package/agent-backend/target/classes/com/example/agent/infrastructure/tool/ToolsApiToolExecutor.class +0 -0
- package/agent-backend/target/classes/com/example/agent/interfaces/rest/AgentApiExceptionHandler.class +0 -0
- package/agent-backend/target/classes/com/example/agent/interfaces/rest/AgentRuntimeController$AnalysisProviderCallbackRequest.class +0 -0
- package/agent-backend/target/classes/com/example/agent/interfaces/rest/AgentRuntimeController$ToolCallbackRequest.class +0 -0
- package/agent-backend/target/classes/com/example/agent/interfaces/rest/AgentRuntimeController.class +0 -0
- package/agent-backend/target/classes/com/example/agent/interfaces/rest/AgentSessionController$MessageRequest.class +0 -0
- package/agent-backend/target/classes/com/example/agent/interfaces/rest/AgentSessionController$SessionRequest.class +0 -0
- package/agent-backend/target/classes/com/example/agent/interfaces/rest/AgentSessionController.class +0 -0
- package/agent-backend/target/classes/com/example/agent/interfaces/rest/AgentStrategyController$StrategyRequest.class +0 -0
- package/agent-backend/target/classes/com/example/agent/interfaces/rest/AgentStrategyController.class +0 -0
- package/agent-backend/target/classes/com/example/agent/interfaces/rest/CustomerSessionController.class +0 -0
- package/agent-backend/target/classes/com/example/agent/interfaces/rest/SkillAdminController$SkillUpsertRequest.class +0 -0
- package/agent-backend/target/classes/com/example/agent/interfaces/rest/SkillAdminController.class +0 -0
- package/agent-backend/target/classes/com/example/agent/interfaces/rest/ToolsController.class +0 -0
- package/agent-backend/target/classes/data.sql +930 -0
- package/agent-backend/target/classes/es/large-content-index.json +26 -0
- package/agent-backend/target/classes/mappers/AgentEventMapper.xml +28 -0
- package/agent-backend/target/classes/mappers/AgentSessionMapper.xml +30 -0
- package/agent-backend/target/classes/mappers/IsapStrategyMapper.xml +70 -0
- package/agent-backend/target/classes/mappers/SessionMapper.xml +25 -0
- package/agent-backend/target/classes/mappers/harness/HarnessMemoryMapper.xml +194 -0
- package/agent-backend/target/classes/mappers/localtool/AnalysisJobMapper.xml +50 -0
- package/agent-backend/target/classes/mappers/localtool/AnalysisRecordResultMapper.xml +43 -0
- package/agent-backend/target/classes/mappers/localtool/CustomerSessionMapper.xml +119 -0
- package/agent-backend/target/classes/mappers/localtool/QueryInstanceMapper.xml +34 -0
- package/agent-backend/target/classes/schema.sql +917 -0
- package/agent-backend/target/test-classes/application.yml +25 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/analysis/AnalysisOutputParserTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/analysis/AnalysisPromptCompilerTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/binding/DefaultBindingResolverTest$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/binding/DefaultBindingResolverTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/memory/HarnessBestPracticeRepositoryTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/memory/HarnessBestPracticeSynthesisServiceTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/memory/HarnessMemoryServiceTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/planning/FinalAnswerGuardServiceTest$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/planning/FinalAnswerGuardServiceTest$2.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/planning/FinalAnswerGuardServiceTest$3.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/planning/FinalAnswerGuardServiceTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/planning/LoopGuardPolicyTest$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/planning/LoopGuardPolicyTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/planning/StructuredCompletionPolicyTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/prompt/RuntimeInstructionFactoryTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/report/ReportBlueprintContractTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/requirements/SkillQuestionRequirementServiceTest$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/requirements/SkillQuestionRequirementServiceTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/state/DefaultAsyncCallbackPayloadBuilderTest$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/state/DefaultAsyncCallbackPayloadBuilderTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/telemetry/HarnessMetricsServiceTest$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/telemetry/HarnessMetricsServiceTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/harness/tool/ToolInvocationGuardTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/AgentSessionStoreTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/AgentStrategyServiceTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/AgentTimeContextServiceTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/AgentTurnRunnerIntegrationTest$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/AgentTurnRunnerIntegrationTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/AgentWaitingFlowServiceTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/ContextBudgetServiceTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/CustomerSessionQueryServiceTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/DslCompilerServiceTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/LiveRealLlmDatabaseE2ETest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/QueryHandleServiceIntegrationTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/ReportAssemblyServiceTest$1$1$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/ReportAssemblyServiceTest$1$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/ReportAssemblyServiceTest$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/ReportAssemblyServiceTest$2$1$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/ReportAssemblyServiceTest$2$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/ReportAssemblyServiceTest$2.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/ReportAssemblyServiceTest$3$1$1$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/ReportAssemblyServiceTest$3$1$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/ReportAssemblyServiceTest$3$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/ReportAssemblyServiceTest$3.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/ReportAssemblyServiceTest$4$1$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/ReportAssemblyServiceTest$4$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/ReportAssemblyServiceTest$4.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/ReportAssemblyServiceTest$5$1$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/ReportAssemblyServiceTest$5$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/ReportAssemblyServiceTest$5.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/ReportAssemblyServiceTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/SkillSelectorTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/ToolExecutionPipelineTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/ToolMessageCompactorTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/localtool/AnalysisResultAggregationServiceTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/localtool/AnalysisResultClusteringServiceTest$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/localtool/AnalysisResultClusteringServiceTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/localtool/ClusterLabelServiceTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/localtool/SphericalKMeansClustererTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/localtool/TextFeatureVectorizerTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/tool/argument/CompanyStructuredQueryToolArgumentResolverTest$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/tool/argument/CompanyStructuredQueryToolArgumentResolverTest$2.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/tool/argument/CompanyStructuredQueryToolArgumentResolverTest$3.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/tool/argument/CompanyStructuredQueryToolArgumentResolverTest$4.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/tool/argument/CompanyStructuredQueryToolArgumentResolverTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/tool/argument/PerRecordAnalysisApiToolArgumentResolverTest$1$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/tool/argument/PerRecordAnalysisApiToolArgumentResolverTest$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/tool/argument/PerRecordAnalysisApiToolArgumentResolverTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/tool/response/RemoteAnalysisAsyncResponseNormalizerTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/application/service/tool/response/StandardToolResponseNormalizerTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/infrastructure/llm/DummyLlmClientTest$1.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/infrastructure/llm/DummyLlmClientTest$2.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/infrastructure/llm/DummyLlmClientTest$3.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/infrastructure/llm/DummyLlmClientTest.class +0 -0
- package/agent-backend/target/test-classes/com/example/agent/infrastructure/tool/DateExpressionParserTest.class +0 -0
- package/agent-front-react/index.html +12 -0
- package/agent-front-react/package.json +25 -0
- package/agent-front-react/src/App.tsx +78 -0
- package/agent-front-react/src/api/client.ts +138 -0
- package/agent-front-react/src/hooks/useEventStream.ts +61 -0
- package/agent-front-react/src/main.tsx +14 -0
- package/agent-front-react/src/pages/AnalysisTaskPage.tsx +1020 -0
- package/agent-front-react/src/pages/DslReplayPage.tsx +199 -0
- package/agent-front-react/src/pages/SkillManagementPage.tsx +261 -0
- package/agent-front-react/src/pages/StrategyManagementPage.tsx +201 -0
- package/agent-front-react/src/storage/taskRegistry.ts +36 -0
- package/agent-front-react/src/styles.css +790 -0
- package/agent-front-react/src/types.ts +150 -0
- package/agent-front-react/src/utils/json.ts +11 -0
- package/agent-front-react/tsconfig.json +21 -0
- package/agent-front-react/tsconfig.node.json +9 -0
- package/agent-front-react/tsconfig.node.tsbuildinfo +1 -0
- package/agent-front-react/tsconfig.tsbuildinfo +1 -0
- package/agent-front-react/vite.config.d.ts +2 -0
- package/agent-front-react/vite.config.js +14 -0
- package/package.json +15 -0
|
@@ -0,0 +1,768 @@
|
|
|
1
|
+
# zy-agent-backend Architecture
|
|
2
|
+
|
|
3
|
+
## 1. Overview
|
|
4
|
+
|
|
5
|
+
`zy-agent-backend` is now a session-driven vertical agent backend for finance customer-support analysis.
|
|
6
|
+
|
|
7
|
+
The current runtime no longer uses the old one-shot plan builder or step-loop orchestrator. The active design is:
|
|
8
|
+
|
|
9
|
+
1. Receive a user request and create or resume an `AgentSession`
|
|
10
|
+
2. Select skills through `LLM skill routing` with `rule fallback`
|
|
11
|
+
3. Assemble a system prompt from runtime metadata, skill markdown, and allowed tools
|
|
12
|
+
4. Let the LLM decide the next action in a turn loop
|
|
13
|
+
5. If the LLM requests tools, execute them through a unified tool pipeline
|
|
14
|
+
6. Feed tool results back into the same transcript
|
|
15
|
+
7. Continue until the LLM returns a final assistant answer or an async tool waits for callback
|
|
16
|
+
8. When a task succeeds, compile the successful tool trajectory into a replayable DSL snapshot
|
|
17
|
+
|
|
18
|
+
The active runtime entry is:
|
|
19
|
+
|
|
20
|
+
- `src/main/java/com/example/agent/interfaces/rest/AgentSessionController.java`
|
|
21
|
+
- `src/main/java/com/example/agent/interfaces/rest/AgentRuntimeController.java`
|
|
22
|
+
|
|
23
|
+
The core orchestrator is:
|
|
24
|
+
|
|
25
|
+
- `src/main/java/com/example/agent/application/service/AgentTurnRunner.java`
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 2. Active API Surface
|
|
30
|
+
|
|
31
|
+
### 2.1 Agent session APIs
|
|
32
|
+
|
|
33
|
+
Defined in:
|
|
34
|
+
|
|
35
|
+
- `src/main/java/com/example/agent/interfaces/rest/AgentSessionController.java`
|
|
36
|
+
|
|
37
|
+
Endpoints:
|
|
38
|
+
|
|
39
|
+
#### `POST /api/agent/sessions`
|
|
40
|
+
|
|
41
|
+
Create a new agent session and immediately start the first turn.
|
|
42
|
+
|
|
43
|
+
Request body:
|
|
44
|
+
|
|
45
|
+
```json
|
|
46
|
+
{
|
|
47
|
+
"message": "请分析最近30天贵金属规则调整相关的客服问题并生成报告",
|
|
48
|
+
"globalContext": {
|
|
49
|
+
"tenantId": "finance-demo",
|
|
50
|
+
"businessLine": "precious-metal",
|
|
51
|
+
"operator": "alice",
|
|
52
|
+
"channel": "app"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Response:
|
|
58
|
+
|
|
59
|
+
- Full `AgentSession`
|
|
60
|
+
|
|
61
|
+
#### `POST /api/agent/sessions/{sessionId}/messages`
|
|
62
|
+
|
|
63
|
+
Append a user message to an existing session and continue the loop.
|
|
64
|
+
|
|
65
|
+
Request body:
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"message": "只分析高净值客户,并按渠道拆分"
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Response:
|
|
74
|
+
|
|
75
|
+
- Updated `AgentSession`
|
|
76
|
+
|
|
77
|
+
#### `POST /api/agent/sessions/{sessionId}/resume`
|
|
78
|
+
|
|
79
|
+
Resume a session after an async tool has completed or when an external caller explicitly wants to continue.
|
|
80
|
+
|
|
81
|
+
Response:
|
|
82
|
+
|
|
83
|
+
- Updated `AgentSession`
|
|
84
|
+
|
|
85
|
+
#### `GET /api/agent/sessions/{sessionId}`
|
|
86
|
+
|
|
87
|
+
Load the current session snapshot from persistence.
|
|
88
|
+
|
|
89
|
+
Response:
|
|
90
|
+
|
|
91
|
+
- Full `AgentSession`
|
|
92
|
+
|
|
93
|
+
#### `GET /api/agent/sessions/{sessionId}/events`
|
|
94
|
+
|
|
95
|
+
SSE event stream for runtime events.
|
|
96
|
+
|
|
97
|
+
Produced events come from:
|
|
98
|
+
|
|
99
|
+
- `src/main/java/com/example/agent/domain/model/RuntimeEventType.java`
|
|
100
|
+
|
|
101
|
+
Current event types:
|
|
102
|
+
|
|
103
|
+
- `SESSION_STARTED`
|
|
104
|
+
- `TURN_STARTED`
|
|
105
|
+
- `MODEL_DECISION`
|
|
106
|
+
- `TOOL_CALL_REQUESTED`
|
|
107
|
+
- `TOOL_EXECUTION_STARTED`
|
|
108
|
+
- `TOOL_CALLBACK_RECEIVED`
|
|
109
|
+
- `TOOL_EXECUTION_FINISHED`
|
|
110
|
+
- `TOOL_EXECUTION_FAILED`
|
|
111
|
+
- `WAITING_ASYNC_CALLBACK`
|
|
112
|
+
- `ASSISTANT_MESSAGE`
|
|
113
|
+
- `TURN_FINISHED`
|
|
114
|
+
- `DSL_COMPILED`
|
|
115
|
+
|
|
116
|
+
#### `GET /api/agent/dsl/{dslId}`
|
|
117
|
+
|
|
118
|
+
Load a compiled DSL snapshot.
|
|
119
|
+
|
|
120
|
+
Response:
|
|
121
|
+
|
|
122
|
+
- `ExecutableDslSnapshot`
|
|
123
|
+
|
|
124
|
+
#### `POST /api/agent/dsl/{dslId}/execute`
|
|
125
|
+
|
|
126
|
+
Replay a compiled DSL using optional runtime overrides.
|
|
127
|
+
|
|
128
|
+
Request body:
|
|
129
|
+
|
|
130
|
+
```json
|
|
131
|
+
{
|
|
132
|
+
"top_n": 20,
|
|
133
|
+
"business_line": "precious-metal"
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Response:
|
|
138
|
+
|
|
139
|
+
- DSL replay result with per-step outputs
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
### 2.2 Agent runtime APIs
|
|
144
|
+
|
|
145
|
+
Defined in:
|
|
146
|
+
|
|
147
|
+
- `src/main/java/com/example/agent/interfaces/rest/AgentRuntimeController.java`
|
|
148
|
+
|
|
149
|
+
Endpoints:
|
|
150
|
+
|
|
151
|
+
#### `POST /api/agent/tool-callback`
|
|
152
|
+
|
|
153
|
+
Receive an external async tool callback, update the matching tool result, emit callback events, and resume the session.
|
|
154
|
+
|
|
155
|
+
Request body:
|
|
156
|
+
|
|
157
|
+
```json
|
|
158
|
+
{
|
|
159
|
+
"externalJobId": "job-123",
|
|
160
|
+
"status": "SUCCEEDED",
|
|
161
|
+
"payload": {
|
|
162
|
+
"artifacts": {
|
|
163
|
+
"analysis_job_id": "job-123",
|
|
164
|
+
"keywords": ["保证金", "交易规则", "手续费"]
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Response:
|
|
171
|
+
|
|
172
|
+
```json
|
|
173
|
+
{
|
|
174
|
+
"ok": true
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
If no matching async job exists:
|
|
179
|
+
|
|
180
|
+
```json
|
|
181
|
+
{
|
|
182
|
+
"error": "async job not found"
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
#### `GET /api/agent/sessions/{sessionId}/runtime`
|
|
187
|
+
|
|
188
|
+
Return the persisted session row and event history snapshot.
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
### 2.3 Direct customer-session query API
|
|
193
|
+
|
|
194
|
+
Defined in:
|
|
195
|
+
|
|
196
|
+
- `src/main/java/com/example/agent/interfaces/rest/CustomerSessionController.java`
|
|
197
|
+
|
|
198
|
+
Endpoint:
|
|
199
|
+
|
|
200
|
+
#### `POST /api/customer-sessions/query`
|
|
201
|
+
|
|
202
|
+
Request:
|
|
203
|
+
|
|
204
|
+
```json
|
|
205
|
+
{
|
|
206
|
+
"keywords": ["保证金", "规则调整"],
|
|
207
|
+
"businessLine": "precious-metal",
|
|
208
|
+
"channel": "app",
|
|
209
|
+
"customerId": "C10001",
|
|
210
|
+
"startTime": "2026-03-01 00:00:00",
|
|
211
|
+
"endTime": "2026-03-14 23:59:59",
|
|
212
|
+
"limit": 20
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Response:
|
|
217
|
+
|
|
218
|
+
```json
|
|
219
|
+
{
|
|
220
|
+
"total": 2,
|
|
221
|
+
"records": [
|
|
222
|
+
{
|
|
223
|
+
"id": 1,
|
|
224
|
+
"sessionCode": "CS202603130001",
|
|
225
|
+
"channel": "app",
|
|
226
|
+
"customerId": "C10001",
|
|
227
|
+
"agentId": "A20001",
|
|
228
|
+
"businessLine": "precious-metal",
|
|
229
|
+
"userMessage": "...",
|
|
230
|
+
"agentReply": "...",
|
|
231
|
+
"tags": "规则调整,保证金",
|
|
232
|
+
"occurredAt": "2026-03-13T10:00:00"
|
|
233
|
+
}
|
|
234
|
+
]
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
### 2.4 Internal tool APIs
|
|
241
|
+
|
|
242
|
+
Defined in:
|
|
243
|
+
|
|
244
|
+
- `src/main/java/com/example/agent/interfaces/rest/ToolsController.java`
|
|
245
|
+
|
|
246
|
+
These endpoints are internal tool surfaces called by `ToolsApiToolExecutor`.
|
|
247
|
+
|
|
248
|
+
Endpoints:
|
|
249
|
+
|
|
250
|
+
- `POST /tools/sample-sessions-by-keywords`
|
|
251
|
+
- `POST /tools/query-sessions-handle`
|
|
252
|
+
- `POST /tools/analyze-keywords-async`
|
|
253
|
+
- `POST /tools/build-keyword-report`
|
|
254
|
+
- `POST /tools/query-customer-sessions-mysql`
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## 3. Main Planning and Execution Flow
|
|
259
|
+
|
|
260
|
+
### 3.1 Entry flow
|
|
261
|
+
|
|
262
|
+
The first request enters through:
|
|
263
|
+
|
|
264
|
+
- `AgentSessionController.createSession(...)`
|
|
265
|
+
|
|
266
|
+
This method calls:
|
|
267
|
+
|
|
268
|
+
- `AgentTurnRunner.startSession(...)`
|
|
269
|
+
|
|
270
|
+
`startSession(...)` does:
|
|
271
|
+
|
|
272
|
+
1. Create a new `AgentSession`
|
|
273
|
+
2. Copy `message` into `title` and `query`
|
|
274
|
+
3. Copy `globalContext`
|
|
275
|
+
4. Select skills through `SkillSelector.select(...)`
|
|
276
|
+
5. Build the initial transcript through `PromptAssembler.buildInitialTranscript(...)`
|
|
277
|
+
6. Persist the session through `AgentSessionStore.save(...)`
|
|
278
|
+
7. Publish `SESSION_STARTED`
|
|
279
|
+
8. Enter the execution loop through `runTurn(...)`
|
|
280
|
+
|
|
281
|
+
### 3.2 Skill selection flow
|
|
282
|
+
|
|
283
|
+
Relevant classes:
|
|
284
|
+
|
|
285
|
+
- `src/main/java/com/example/agent/application/service/SkillSelector.java`
|
|
286
|
+
- `src/main/java/com/example/agent/application/service/LlmSkillRouter.java`
|
|
287
|
+
- `src/main/java/com/example/agent/application/service/RuleBasedSkillSelector.java`
|
|
288
|
+
- `src/main/java/com/example/agent/application/service/SkillRegistry.java`
|
|
289
|
+
|
|
290
|
+
Logic:
|
|
291
|
+
|
|
292
|
+
1. `SkillRegistry` loads all enabled skills from:
|
|
293
|
+
- `src/main/resources/skills/*/SKILL.md`
|
|
294
|
+
2. `SkillSelector.select(...)` first calls:
|
|
295
|
+
- `LlmSkillRouter.route(query, globalContext, allSkills)`
|
|
296
|
+
3. `LlmSkillRouter` sends a lightweight router prompt to `LlmClient`
|
|
297
|
+
4. The model returns JSON:
|
|
298
|
+
|
|
299
|
+
```json
|
|
300
|
+
{
|
|
301
|
+
"selectedSkillIds": [
|
|
302
|
+
"finance-semantic-analysis",
|
|
303
|
+
"finance-reporting"
|
|
304
|
+
],
|
|
305
|
+
"reason": "analysis and report requested"
|
|
306
|
+
}
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
5. If routing fails, returns empty, or returns invalid skill ids, `SkillSelector` falls back to:
|
|
310
|
+
- `RuleBasedSkillSelector.select(...)`
|
|
311
|
+
|
|
312
|
+
Important point:
|
|
313
|
+
|
|
314
|
+
- The LLM does not directly open every tool by default
|
|
315
|
+
- It first chooses skills
|
|
316
|
+
- Skills then constrain the allowed tool set
|
|
317
|
+
|
|
318
|
+
### 3.3 Prompt assembly
|
|
319
|
+
|
|
320
|
+
Relevant class:
|
|
321
|
+
|
|
322
|
+
- `src/main/java/com/example/agent/application/service/PromptAssembler.java`
|
|
323
|
+
|
|
324
|
+
`PromptAssembler.systemPrompt(...)` builds the system prompt from:
|
|
325
|
+
|
|
326
|
+
1. Base agent instructions
|
|
327
|
+
2. Runtime metadata
|
|
328
|
+
3. Full markdown content of selected `SKILL.md` files
|
|
329
|
+
4. Allowed tool list from `ToolRegistry`
|
|
330
|
+
|
|
331
|
+
So the active prompt structure is:
|
|
332
|
+
|
|
333
|
+
1. Base runtime rules
|
|
334
|
+
2. User/tenant/channel metadata
|
|
335
|
+
3. Selected skill markdown
|
|
336
|
+
4. Tool whitelist
|
|
337
|
+
|
|
338
|
+
### 3.4 Turn loop
|
|
339
|
+
|
|
340
|
+
Relevant class:
|
|
341
|
+
|
|
342
|
+
- `src/main/java/com/example/agent/application/service/AgentTurnRunner.java`
|
|
343
|
+
|
|
344
|
+
Core method:
|
|
345
|
+
|
|
346
|
+
- `runTurn(AgentSession session, String userMessage, boolean resumed)`
|
|
347
|
+
|
|
348
|
+
Loop logic:
|
|
349
|
+
|
|
350
|
+
1. Publish `TURN_STARTED`
|
|
351
|
+
2. Resolve selected skills again for the session
|
|
352
|
+
3. Derive allowed tools from selected skills
|
|
353
|
+
4. Ensure transcript[0] contains the latest system prompt
|
|
354
|
+
5. Call:
|
|
355
|
+
- `llmClient.chat(session.getTranscript(), allowedTools)`
|
|
356
|
+
6. Publish `MODEL_DECISION`
|
|
357
|
+
7. If the model returned `tool_calls`:
|
|
358
|
+
- append assistant tool-call message
|
|
359
|
+
- for each tool call:
|
|
360
|
+
- publish `TOOL_CALL_REQUESTED`
|
|
361
|
+
- parse JSON arguments
|
|
362
|
+
- execute through `ToolExecutionPipeline.execute(...)`
|
|
363
|
+
- append the tool result as a `tool` message
|
|
364
|
+
- if async:
|
|
365
|
+
- mark session `WAITING_ASYNC_CALLBACK`
|
|
366
|
+
- publish `TURN_FINISHED`
|
|
367
|
+
- return
|
|
368
|
+
- otherwise continue next loop round
|
|
369
|
+
8. If the model returned plain assistant content:
|
|
370
|
+
- append final assistant message
|
|
371
|
+
- set session status `SUCCEEDED`
|
|
372
|
+
- publish `ASSISTANT_MESSAGE`
|
|
373
|
+
- if tool steps exist, compile DSL
|
|
374
|
+
- publish `DSL_COMPILED`
|
|
375
|
+
- publish `TURN_FINISHED`
|
|
376
|
+
- return
|
|
377
|
+
9. If max rounds exceeded:
|
|
378
|
+
- mark session `FAILED`
|
|
379
|
+
- publish `TURN_FINISHED`
|
|
380
|
+
|
|
381
|
+
---
|
|
382
|
+
|
|
383
|
+
## 4. Tool Execution Logic
|
|
384
|
+
|
|
385
|
+
### 4.1 Tool registry
|
|
386
|
+
|
|
387
|
+
Relevant class:
|
|
388
|
+
|
|
389
|
+
- `src/main/java/com/example/agent/application/service/ToolRegistry.java`
|
|
390
|
+
|
|
391
|
+
Current registered tools:
|
|
392
|
+
|
|
393
|
+
- `sample_sessions_by_keywords`
|
|
394
|
+
- `query_customer_sessions_mysql`
|
|
395
|
+
- `query_sessions_handle`
|
|
396
|
+
- `analyze_keywords_async`
|
|
397
|
+
- `build_keyword_report`
|
|
398
|
+
|
|
399
|
+
Each tool defines:
|
|
400
|
+
|
|
401
|
+
- `toolId`
|
|
402
|
+
- `description`
|
|
403
|
+
- `endpoint`
|
|
404
|
+
- `resultType`
|
|
405
|
+
- `async`
|
|
406
|
+
- `inputSchema`
|
|
407
|
+
|
|
408
|
+
### 4.2 Tool execution pipeline
|
|
409
|
+
|
|
410
|
+
Relevant class:
|
|
411
|
+
|
|
412
|
+
- `src/main/java/com/example/agent/application/service/ToolExecutionPipeline.java`
|
|
413
|
+
|
|
414
|
+
Main method:
|
|
415
|
+
|
|
416
|
+
- `execute(session, turnId, toolCallId, toolName, args, allowedTools)`
|
|
417
|
+
|
|
418
|
+
Execution steps:
|
|
419
|
+
|
|
420
|
+
1. Create `ToolExecutionResult`
|
|
421
|
+
2. Publish `TOOL_EXECUTION_STARTED`
|
|
422
|
+
3. Validate that `toolName` is in the allowed tool set
|
|
423
|
+
4. Validate required args from schema
|
|
424
|
+
5. Build a `ToolCommand`
|
|
425
|
+
6. Call `ToolExecutor.execute(...)`
|
|
426
|
+
7. Normalize tool result into a standard payload
|
|
427
|
+
8. Record an `AgentExecutedStep`
|
|
428
|
+
9. If result is async:
|
|
429
|
+
- insert pending async job into `AsyncJobRepository`
|
|
430
|
+
- set `session.waitingExternalJobId`
|
|
431
|
+
- publish `WAITING_ASYNC_CALLBACK`
|
|
432
|
+
10. Else:
|
|
433
|
+
- publish `TOOL_EXECUTION_FINISHED`
|
|
434
|
+
|
|
435
|
+
### 4.3 Tool executor implementation
|
|
436
|
+
|
|
437
|
+
Relevant class:
|
|
438
|
+
|
|
439
|
+
- `src/main/java/com/example/agent/infrastructure/tool/ToolsApiToolExecutor.java`
|
|
440
|
+
|
|
441
|
+
This is the active `ToolExecutor`.
|
|
442
|
+
|
|
443
|
+
Behavior:
|
|
444
|
+
|
|
445
|
+
1. Resolve tool metadata from `ToolRegistry`
|
|
446
|
+
2. If `tools.base-url=local://tools`
|
|
447
|
+
- call `ToolsController` directly in-process
|
|
448
|
+
3. Else
|
|
449
|
+
- call the configured HTTP tool endpoint
|
|
450
|
+
4. Convert the controller response into `ToolResult`
|
|
451
|
+
5. For `analyze_keywords_async`, optionally schedule auto callback in local test/demo mode
|
|
452
|
+
|
|
453
|
+
### 4.4 Tool controller mapping
|
|
454
|
+
|
|
455
|
+
Relevant class:
|
|
456
|
+
|
|
457
|
+
- `src/main/java/com/example/agent/interfaces/rest/ToolsController.java`
|
|
458
|
+
|
|
459
|
+
Mappings:
|
|
460
|
+
|
|
461
|
+
- `sample_sessions_by_keywords`
|
|
462
|
+
- uses `SessionRepository.sampleSessionsByKeywords(...)`
|
|
463
|
+
- `query_customer_sessions_mysql`
|
|
464
|
+
- uses `CustomerSessionQueryService.query(...)`
|
|
465
|
+
- `query_sessions_handle`
|
|
466
|
+
- currently generates a mock handle id
|
|
467
|
+
- `analyze_keywords_async`
|
|
468
|
+
- currently generates a mock async job id
|
|
469
|
+
- `build_keyword_report`
|
|
470
|
+
- currently generates a mock report id and keyword list
|
|
471
|
+
|
|
472
|
+
Important note:
|
|
473
|
+
|
|
474
|
+
- The main planning/execution loop is real
|
|
475
|
+
- Some tools are still demo implementations, especially:
|
|
476
|
+
- `query_sessions_handle`
|
|
477
|
+
- `analyze_keywords_async`
|
|
478
|
+
- `build_keyword_report`
|
|
479
|
+
|
|
480
|
+
---
|
|
481
|
+
|
|
482
|
+
## 5. Async Callback and Resume Flow
|
|
483
|
+
|
|
484
|
+
Relevant classes:
|
|
485
|
+
|
|
486
|
+
- `src/main/java/com/example/agent/interfaces/rest/AgentRuntimeController.java`
|
|
487
|
+
- `src/main/java/com/example/agent/application/service/AgentTurnRunner.java`
|
|
488
|
+
- `src/main/java/com/example/agent/infrastructure/repository/AsyncJobRepository.java`
|
|
489
|
+
|
|
490
|
+
Flow:
|
|
491
|
+
|
|
492
|
+
1. `analyze_keywords_async` returns `ASYNC_JOB`
|
|
493
|
+
2. `ToolExecutionPipeline` stores a pending job in `async_job`
|
|
494
|
+
3. Session status becomes `WAITING_ASYNC_CALLBACK`
|
|
495
|
+
4. External system posts callback to:
|
|
496
|
+
- `POST /api/agent/tool-callback`
|
|
497
|
+
5. `AgentRuntimeController.toolCallback(...)`:
|
|
498
|
+
- loads pending job by `externalJobId`
|
|
499
|
+
- publishes `TOOL_CALLBACK_RECEIVED`
|
|
500
|
+
- calls `AgentTurnRunner.appendToolObservation(...)`
|
|
501
|
+
- publishes `TOOL_EXECUTION_FINISHED`
|
|
502
|
+
- calls `AgentTurnRunner.resumeSession(...)`
|
|
503
|
+
6. `appendToolObservation(...)` updates the existing `tool` message by `toolCallId`
|
|
504
|
+
7. `resumeSession(...)` restarts the same turn loop with updated transcript state
|
|
505
|
+
|
|
506
|
+
This avoids the invalid message ordering bug where multiple unrelated `tool` messages followed a single assistant tool-call message.
|
|
507
|
+
|
|
508
|
+
---
|
|
509
|
+
|
|
510
|
+
## 6. DSL Compilation and Replay
|
|
511
|
+
|
|
512
|
+
### 6.1 Compilation
|
|
513
|
+
|
|
514
|
+
Relevant class:
|
|
515
|
+
|
|
516
|
+
- `src/main/java/com/example/agent/application/service/DslCompilerService.java`
|
|
517
|
+
|
|
518
|
+
Compilation trigger:
|
|
519
|
+
|
|
520
|
+
- after a turn succeeds and `session.executedSteps` is not empty
|
|
521
|
+
|
|
522
|
+
Compilation logic:
|
|
523
|
+
|
|
524
|
+
1. Create `ExecutableDslSnapshot`
|
|
525
|
+
2. Copy session metadata
|
|
526
|
+
3. Walk `session.executedSteps`
|
|
527
|
+
4. Keep only successful steps
|
|
528
|
+
5. Convert them to ordered `ExecutableDslStep` list
|
|
529
|
+
6. Persist snapshot through:
|
|
530
|
+
- `DslInstanceRepository`
|
|
531
|
+
- `DslStepRepository`
|
|
532
|
+
|
|
533
|
+
### 6.2 Replay
|
|
534
|
+
|
|
535
|
+
Relevant class:
|
|
536
|
+
|
|
537
|
+
- `src/main/java/com/example/agent/application/service/DslRuntimeService.java`
|
|
538
|
+
|
|
539
|
+
Replay logic:
|
|
540
|
+
|
|
541
|
+
1. Load DSL instance and steps
|
|
542
|
+
2. Create a replay-only `AgentSession`
|
|
543
|
+
3. Execute each DSL step through `ToolExecutionPipeline`
|
|
544
|
+
4. Persist replay execution result through `DslExecutionLogRepository`
|
|
545
|
+
|
|
546
|
+
Important point:
|
|
547
|
+
|
|
548
|
+
- DSL replay does not invoke the LLM
|
|
549
|
+
- It directly replays the persisted tool trajectory
|
|
550
|
+
|
|
551
|
+
---
|
|
552
|
+
|
|
553
|
+
## 7. Persistence Model
|
|
554
|
+
|
|
555
|
+
### 7.1 Session and event persistence
|
|
556
|
+
|
|
557
|
+
Relevant repositories:
|
|
558
|
+
|
|
559
|
+
- `src/main/java/com/example/agent/infrastructure/repository/AgentSessionRepository.java`
|
|
560
|
+
- `src/main/java/com/example/agent/infrastructure/repository/AgentEventRepository.java`
|
|
561
|
+
- `src/main/java/com/example/agent/infrastructure/repository/AsyncJobRepository.java`
|
|
562
|
+
|
|
563
|
+
These persist:
|
|
564
|
+
|
|
565
|
+
- agent session snapshots
|
|
566
|
+
- event history
|
|
567
|
+
- pending async jobs
|
|
568
|
+
|
|
569
|
+
### 7.2 DSL persistence
|
|
570
|
+
|
|
571
|
+
Relevant repositories:
|
|
572
|
+
|
|
573
|
+
- `src/main/java/com/example/agent/infrastructure/repository/DslInstanceRepository.java`
|
|
574
|
+
- `src/main/java/com/example/agent/infrastructure/repository/DslStepRepository.java`
|
|
575
|
+
- `src/main/java/com/example/agent/infrastructure/repository/DslExecutionLogRepository.java`
|
|
576
|
+
|
|
577
|
+
These persist:
|
|
578
|
+
|
|
579
|
+
- DSL metadata
|
|
580
|
+
- ordered replay steps
|
|
581
|
+
- replay logs
|
|
582
|
+
|
|
583
|
+
### 7.3 Customer session data access
|
|
584
|
+
|
|
585
|
+
Relevant repositories:
|
|
586
|
+
|
|
587
|
+
- `src/main/java/com/example/agent/infrastructure/repository/CustomerSessionMysqlRepository.java`
|
|
588
|
+
- `src/main/java/com/example/agent/infrastructure/repository/SessionRepository.java`
|
|
589
|
+
|
|
590
|
+
Split:
|
|
591
|
+
|
|
592
|
+
- `CustomerSessionMysqlRepository`
|
|
593
|
+
- real MySQL customer session table
|
|
594
|
+
- `SessionRepository`
|
|
595
|
+
- current sample-session data source for `sample_sessions_by_keywords`
|
|
596
|
+
|
|
597
|
+
---
|
|
598
|
+
|
|
599
|
+
## 8. LLM Layer
|
|
600
|
+
|
|
601
|
+
Relevant classes:
|
|
602
|
+
|
|
603
|
+
- `src/main/java/com/example/agent/domain/port/LlmClient.java`
|
|
604
|
+
- `src/main/java/com/example/agent/infrastructure/llm/DummyLlmClient.java`
|
|
605
|
+
|
|
606
|
+
Despite the class name, `DummyLlmClient` is the real active OpenAI-compatible HTTP client.
|
|
607
|
+
|
|
608
|
+
It is configured by:
|
|
609
|
+
|
|
610
|
+
- `src/main/resources/application.yml`
|
|
611
|
+
|
|
612
|
+
Main config:
|
|
613
|
+
|
|
614
|
+
```yaml
|
|
615
|
+
llm:
|
|
616
|
+
provider: deepseek
|
|
617
|
+
api-key: ${DEEPSEEK_API_KEY:}
|
|
618
|
+
base-url: https://api.deepseek.com/v1/chat/completions
|
|
619
|
+
model: deepseek-chat
|
|
620
|
+
routing:
|
|
621
|
+
enabled: true
|
|
622
|
+
```
|
|
623
|
+
|
|
624
|
+
Qwen example:
|
|
625
|
+
|
|
626
|
+
```yaml
|
|
627
|
+
llm:
|
|
628
|
+
provider: qwen
|
|
629
|
+
api-key: ${QWEN_API_KEY:}
|
|
630
|
+
base-url: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
|
|
631
|
+
model: qwen3-235b-a22b
|
|
632
|
+
routing:
|
|
633
|
+
enabled: true
|
|
634
|
+
```
|
|
635
|
+
|
|
636
|
+
The same client is used for:
|
|
637
|
+
|
|
638
|
+
- skill routing
|
|
639
|
+
- main turn planning and tool selection
|
|
640
|
+
|
|
641
|
+
---
|
|
642
|
+
|
|
643
|
+
## 9. Current Call Graph
|
|
644
|
+
|
|
645
|
+
### 9.1 High-level runtime graph
|
|
646
|
+
|
|
647
|
+
```mermaid
|
|
648
|
+
flowchart TD
|
|
649
|
+
A["POST /api/agent/sessions"] --> B["AgentSessionController.createSession"]
|
|
650
|
+
B --> C["AgentTurnRunner.startSession"]
|
|
651
|
+
C --> D["SkillSelector.select"]
|
|
652
|
+
D --> E["LlmSkillRouter.route"]
|
|
653
|
+
D --> F["RuleBasedSkillSelector.select (fallback)"]
|
|
654
|
+
C --> G["PromptAssembler.buildInitialTranscript"]
|
|
655
|
+
C --> H["AgentSessionStore.save"]
|
|
656
|
+
C --> I["AgentTurnRunner.runTurn"]
|
|
657
|
+
I --> J["LlmClient.chat"]
|
|
658
|
+
J --> K{"tool_calls?"}
|
|
659
|
+
K -->|yes| L["ToolExecutionPipeline.execute"]
|
|
660
|
+
L --> M["ToolsApiToolExecutor.execute"]
|
|
661
|
+
M --> N["ToolsController / HTTP tools"]
|
|
662
|
+
L --> O["AsyncJobRepository.insertPendingAgentJob"]
|
|
663
|
+
L --> P["RuntimeEventBus.publish"]
|
|
664
|
+
O --> Q{"async?"}
|
|
665
|
+
Q -->|yes| R["WAITING_ASYNC_CALLBACK"]
|
|
666
|
+
Q -->|no| I
|
|
667
|
+
K -->|no| S["Assistant final answer"]
|
|
668
|
+
S --> T["DslCompilerService.compile"]
|
|
669
|
+
T --> U["DslInstanceRepository + DslStepRepository"]
|
|
670
|
+
```
|
|
671
|
+
|
|
672
|
+
### 9.2 Async callback graph
|
|
673
|
+
|
|
674
|
+
```mermaid
|
|
675
|
+
flowchart TD
|
|
676
|
+
A["POST /api/agent/tool-callback"] --> B["AgentRuntimeController.toolCallback"]
|
|
677
|
+
B --> C["AsyncJobRepository.findByExternalJobId"]
|
|
678
|
+
C --> D["RuntimeEventBus.publish(TOOL_CALLBACK_RECEIVED)"]
|
|
679
|
+
D --> E["AgentTurnRunner.appendToolObservation"]
|
|
680
|
+
E --> F["Update existing tool message by toolCallId"]
|
|
681
|
+
F --> G["AgentTurnRunner.resumeSession"]
|
|
682
|
+
G --> H["AgentTurnRunner.runTurn"]
|
|
683
|
+
H --> I["LlmClient.chat with updated transcript"]
|
|
684
|
+
```
|
|
685
|
+
|
|
686
|
+
### 9.3 DSL replay graph
|
|
687
|
+
|
|
688
|
+
```mermaid
|
|
689
|
+
flowchart TD
|
|
690
|
+
A["POST /api/agent/dsl/{dslId}/execute"] --> B["AgentSessionController.executeDsl"]
|
|
691
|
+
B --> C["DslRuntimeService.execute"]
|
|
692
|
+
C --> D["DslInstanceRepository.findById"]
|
|
693
|
+
C --> E["DslStepRepository.findByDslId"]
|
|
694
|
+
C --> F["Create replay AgentSession"]
|
|
695
|
+
C --> G["ToolExecutionPipeline.execute (for each step)"]
|
|
696
|
+
G --> H["ToolsApiToolExecutor.execute"]
|
|
697
|
+
C --> I["DslExecutionLogRepository.insert"]
|
|
698
|
+
```
|
|
699
|
+
|
|
700
|
+
---
|
|
701
|
+
|
|
702
|
+
## 10. Class Responsibilities Summary
|
|
703
|
+
|
|
704
|
+
### Runtime orchestration
|
|
705
|
+
|
|
706
|
+
- `AgentTurnRunner`
|
|
707
|
+
- owns the turn loop
|
|
708
|
+
- `SkillSelector`
|
|
709
|
+
- chooses skills
|
|
710
|
+
- `PromptAssembler`
|
|
711
|
+
- builds system prompt and initial transcript
|
|
712
|
+
- `ToolExecutionPipeline`
|
|
713
|
+
- validates, runs, normalizes, and records tool calls
|
|
714
|
+
- `RuntimeEventBus`
|
|
715
|
+
- emits and streams runtime events
|
|
716
|
+
|
|
717
|
+
### Persistence
|
|
718
|
+
|
|
719
|
+
- `AgentSessionStore`
|
|
720
|
+
- serializes/deserializes `AgentSession`
|
|
721
|
+
- `PlanRuntimeService`
|
|
722
|
+
- returns session runtime snapshot
|
|
723
|
+
- `DslCompilerService`
|
|
724
|
+
- compiles successful sessions into DSL
|
|
725
|
+
- `DslRuntimeService`
|
|
726
|
+
- replays DSL
|
|
727
|
+
|
|
728
|
+
### LLM and skill routing
|
|
729
|
+
|
|
730
|
+
- `DummyLlmClient`
|
|
731
|
+
- active OpenAI-compatible LLM HTTP client
|
|
732
|
+
- `LlmSkillRouter`
|
|
733
|
+
- asks the model to choose skills
|
|
734
|
+
- `RuleBasedSkillSelector`
|
|
735
|
+
- deterministic fallback
|
|
736
|
+
- `SkillRegistry`
|
|
737
|
+
- loads `SKILL.md`
|
|
738
|
+
|
|
739
|
+
### Tool access
|
|
740
|
+
|
|
741
|
+
- `ToolRegistry`
|
|
742
|
+
- tool metadata and schema
|
|
743
|
+
- `ToolsApiToolExecutor`
|
|
744
|
+
- actual tool invocation bridge
|
|
745
|
+
- `ToolsController`
|
|
746
|
+
- local/internal tool endpoints
|
|
747
|
+
- `CustomerSessionQueryService`
|
|
748
|
+
- real MySQL customer session query service
|
|
749
|
+
|
|
750
|
+
---
|
|
751
|
+
|
|
752
|
+
## 11. Known Limitations
|
|
753
|
+
|
|
754
|
+
1. Tool streaming is event-level, not token-level LLM streaming
|
|
755
|
+
2. `query_sessions_handle`, `analyze_keywords_async`, and `build_keyword_report` are still mock-style business implementations
|
|
756
|
+
3. `DummyLlmClient` is badly named for a real LLM client and should be renamed
|
|
757
|
+
4. `sample_sessions_by_keywords` still uses the demo `session_table`, while `query_customer_sessions_mysql` uses the real MySQL table
|
|
758
|
+
5. DSL replay only replays tools; it does not replay LLM decisions
|
|
759
|
+
|
|
760
|
+
---
|
|
761
|
+
|
|
762
|
+
## 12. Recommended Next Refactors
|
|
763
|
+
|
|
764
|
+
1. Rename `DummyLlmClient` to `OpenAiCompatibleLlmClient`
|
|
765
|
+
2. Replace mock tool implementations with real business services
|
|
766
|
+
3. Unify `sample_sessions_by_keywords` onto the real MySQL or warehouse source
|
|
767
|
+
4. Add token-level LLM streaming and expose it through SSE
|
|
768
|
+
5. Add stronger tool policy controls, timeout policies, and retry policies per tool
|