#!/usr/bin/env python3 # -*- coding: utf-8 -*- """Add comprehensive JavaDoc to workflow subpackages. Documentation-only; no logic changes.""" import re from pathlib import Path ROOT = Path(r"d:/ylrz_saas_new/java") WORKFLOW_DIR = ROOT / "fs-service/src/main/java/com/fs/company/service/workflow" TARGET_PACKAGES = [ "api", "async", "cache", "canvas", "capability", "data", "dedup", "event", "expression", "feedback", "handoff", "health", "heartbeat", "http", "inbound", "knowledge", "media", "memory", "monitor", "pay", "push", "queue", "scope", "sim", "vector", ] PACKAGE_INFO = { "api": ( "��Ϻ�������ⲿ API �����Ӱ���\n" "
\n" " �ṩ API �˵�ע�����ġ�ͨ�� HTTP ִ������SpEL �ű����������� API �ڵ�ִ��������\n" " ��Ҫ���÷���{@code SmartApiCallNodeExecutor}��{@code LobsterWorkflowExecutorImpl}��" "{@code ToolCallFrameworkImpl}��{@code LobsterApiRegistryController}��" ), "async": ( "��Ϻ�������첽�����Ӱ���\n" "
\n" " ���ؽ��������첽�ύ��֪ʶ��ʹ����־�첽д�룬���������Ի���·����\n" " ��Ҫ���÷���{@code LobsterEvolveTaskConsumer}��{@code ContextAssemblerImpl}��" ), "cache": ( "��Ϻ���������� Redis �����Ӱ���\n" "
\n" " ���滭�Ի���֪ʶ�⡢�Ϲ���������е���·�����ݣ�Redis ������ʱ�Զ�����ֱ�� DB��\n" " ��Ҫ���÷���{@code ContextAssemblerImpl}��{@code LobsterEvolutionEngineImpl}��" "{@code VectorPatternMatcherImpl}��" ), "canvas": ( "����������ͬ�������Ӱ���\n" "
\n" " ��ǰ�˻�����ͬ�����ڵ� nextNodeCode ��������֧�ֶΣ�������ʱִ����ʹ�á�\n" " ��Ҫ���÷���{@code CompanyWorkflowLobsterServiceImpl}��" ), "capability": ( "��Ϻ�ڵ�����ע����ģ��У���Ӱ���\n" "
\n" " �������ڵ����ͳ����������ȱ�ڣ�����ģ�屣��ʱУ�� PayRouter��API �ȡ�\n" " ��Ҫ���÷���{@code CompanyWorkflowLobsterServiceImpl}��{@code LobsterEngineController}��" ), "data": ( "�ⲿʵʱ�����ṩ���Ӱ���\n" "
\n" " ͨ�� {@code ExternalDataRouter} ·���������ڼ��յȲ��ʽ�����ṩ�ߡ�\n" " ��Ҫ���÷�����������̬�ڵ��빤�ߵ��ÿ�ܡ�" ), "dedup": ( "��Ϣȥ���Ӱ���\n" "
\n" " �ṩ��ȷƥ�����������ƶȣ�2-gram Jaccard��ȥ�أ�ά���Ự�����Ϣ��ʷ��\n" " ��Ҫ���÷���{@code DuplicateReplyDetector}��" ), "event": ( "�������¼������벹���Ӱ���\n" "
\n" " �����û��¼���ء��ڵ㿨סͳ���빤����/�ڵ㲹�����Ӧ�á�\n" " ��Ҫ���÷���{@code LobsterEventAuditController}��" ), "expression": ( "��������ʽ��ֵ�Ӱ���\n" "
\n" " ���� SpEL ������������֧������ģ�����ʽ��\n" " ��Ҫ���÷��������������ڵ������� API �ڵ㡣" ), "feedback": ( "�������������Ӱ���\n" "
\n" " ��¼�˹��������������������� A/B ���Ա��壬�����ڵ� Prompt �Զ��Ż���\n" " ��Ҫ���÷���{@code LobsterAdminController}��{@code EvolutionSchedulerImpl}��" ), "handoff": ( "����ת�˹�����Ӱ���\n" "
\n" " ��ά���жϿͻ��� AI �Ƿ���Ҫת�˹��ӹܣ�������ת�˹��������¼���¼��\n" " ��Ҫ���÷���{@code DynamicNodeAdjusterImpl}��{@code LobsterInboundReplyOrchestrator}��" ), "health": ( "��Ϻ���潡������Ӱ���\n" "
\n" " ����ʱ������ Bean �Ƿ�װ����������������̽�\n" " ��Ҫ���÷���{@code LobsterEngineController}��" ), "heartbeat": ( "������ʵ�����������Ӱ���\n" "
\n" " ע��/ע����Ծʵ������ʱ������������ⳬʱ���������ڼ�¼��\n" " ��Ҫ���÷���{@code LobsterWorkflowExecutorImpl}��{@code LobsterEngineController}��" ), "http": ( "������ HTTP �ͻ����Ӱ���\n" "
\n" " ��װ GET/POST/PUT/DELETE ���� Webhook �ڵ����ⲿ API ����ʹ�á�" ), "inbound": ( "ȫ����ͳһ��վ�����Ӱ���\n" "
\n" " ���ͻ���Ϣ��ҵ���¼�·�ɵ�������ʵ������У�� Webhook ��Կ��\n" " ��Ҫ���÷���{@code LobsterInboundController}��" ), "knowledge": ( "֪ʶ��汾�����Ӱ���\n" "
\n" " �ṩ֪ʶ���մ������汾�Աȡ��ع����ǩ����������" ), "media": ( "��վ��ý����ϢԤ�����Ӱ���\n" "
\n" " ͼƬʶ���ļ�/��Ƶת�˹��ж����ý�����ݹ淶����\n" " ��Ҫ���÷���{@code LobsterInboundService}��{@code LobsterInboundReplyOrchestrator}��" ), "memory": ( "��Ϻ�Ի�����ͬ���Ӱ���\n" "
\n" " �� chat_msg ͬ���� lobster_chat_record�����Ž��� Hook ��վ����·����\n" " ��Ҫ���÷���{@code LobsterWorkflowExecutorImpl}��{@code LobsterOutboundMessageService}��" ), "monitor": ( "��Ϻҵ���ؿ����Ӱ���\n" "
\n" " �ۺ�ʵ������Ϣ��ת�������ŵȶ�ά�⻧ָ�ꡣ\n" " ��Ҫ���÷���{@code LobsterAdminController}��" ), "pay": ( "������֧�������Ӱ���\n" "
\n" " ֧������·�ɡ���������/��ѯ/�ص�������֧���ɹ����ƽ��������������\n" " ��Ҫ���÷���{@code PayCallbackController}��{@code LobsterAdminController}��" ), "push": ( "ʵʱ��Ϣ�����Ӱ���\n" "
\n" " ͳһ SSE/WebSocket ������ڣ��������߿ͻ������ӳء�" ), "queue": ( "�ֲ�ʽ�����Ӱ���\n" "
\n" " Redis ZSET �ӳٶ��������Ŷ��г־û������Թ�����\n" " ��Ҫ���÷���{@code LobsterWorkflowExecutorImpl}��{@code LobsterDeadLetterController}��" ), "scope": ( "��Ϻ���ݿɼ���Χ�Ӱ���\n" "
\n" " �����۶˽�ɫ����ȫ��˾/������/���������ݷ�Χ������ʵ�����ǩ��\n" " ��Ҫ���÷���{@code LobsterWorkflowExecController}��{@code CompanyTagTemplateBindingServiceImpl}��" ), "sim": ( "��֤����ʱ�������Ӱ���\n" "
\n" " ��������ӳ��Ϊ��ʵ���ӣ���������֤��ȴ��ڵ������١�\n" " ��Ҫ���÷���{@code LobsterTravelValidationServiceImpl}��{@code DynamicNodeExecutorImpl}��" ), "vector": ( "��������ƥ���Ӱ���\n" "
\n" " �洢/��������Ƕ�벢�Ƽ�ѧϰ���ԣ���ǿ֪ʶ������������װ��\n" " ��Ҫ���÷���{@code ContextAssemblerImpl}��{@code LobsterWorkflowExecutorImpl}��" ), } CLASS_DESC = { # api "SmartApiCallNodeExecutor": "���� API �ڵ�ִ����������ƥ��ע�� API����ȡ���������� REST ���ò��� SpEL ���������", "ApiCallExecutor": "ͨ�� HTTP API ����ִ������֧�� GET/POST/PUT/DELETE �볬ʱ����Ȩͷ��", "ScriptCache": "SpEL �ű����뻺�棬������ API �ڵ� resultScript ���á�", "ApiRegistryService": "�ⲿ�ӿ�ͳһע�����ģ��� DB ����/ע�� API �˵㲢������Ȩͷ��", # async "LobsterEvolveAsyncService": "���������첽�ύ��ִ�У�֧���̳߳ء�MQ �� Redis ������ա�", "KnowledgeUsageLogAsyncWriter": "�첽д��֪ʶ��ʹ����־�����������Ի���·����", # cache "LobsterContextCacheService": "��Ϻ���������� Redis ���棨����/�Ի�/֪ʶ/�Ϲ�ȣ���������ʱ����ֱ�� DB��", # canvas "WorkflowCanvasSyncUtil": "��������ͬ�����ڵ� nextNodeCode ��������֧�ֶΣ�������ʱִ����ʹ�á�", # capability "LobsterNodeCapabilityRegistry": "��̬ע�������������Ϻ�ڵ����͵ij���ȡ�ִ����������ȱ�ڡ�", "LobsterTemplateCapabilityValidator": "У�鹤����ģ�廭���ڵ�������PayRouter��API �ȣ���", # data "ExternalDataRouter": "�ⲿ����·�������Զ����ֲ�·�� ExternalDataProvider ʵ�֡�", "ExternalDataProvider": "�ⲿʵʱ�����ṩ�߲�νӿڣ�����/�ڼ���/�����ȣ���", "HolidayDataProvider": "�����й������ڼ���/�������жϵ������ṩ�ߡ�", "WeatherDataProvider": "ͨ�� ApiRegistryService ����ߵ�/�ͷ������ API��", # dedup "MessageDedupService": "��Ϣ��ȷ+���壨2-gram Jaccard��ȥ�أ�ά���Ự��� 5 ����ʷ��", # event "WorkflowPatcher": "������/�ڵ㲹��������д�롢��ˡ�Ӧ�û����ڵ㲹����", "EventDecisionEngine": "�¼��ڵ���ߣ���ס�ڵ�ͳ�ơ���Ƽ�¼���û��¼�������", "UserEventMonitor": "�û��¼���أ�����Ѵ�����ͳ���¼�����", # expression "ExpressionEngine": "���� SpEL ����������ʽ��������ֵ���档", # feedback "FeedbackDrivenEvolution": "�������������ӿڣ���¼�������������������ɱ����� A/B ���ԡ�", "FeedbackDrivenEvolutionImpl": "������������ʵ�֣�MyBatis �־û���AI ���ɱ��塢A/B �������Զ�Ӧ�á�", # handoff "HumanHandoffDetector": "���弶ת�˹����ӿڣ���ά���ж��Ƿ���Ҫ�˹��ӹܡ�", "HumanHandoffDetectorImpl": "ת�˹��¼���¼ʵ�֣��־û�ת�˹���ʷ�������˲�ѯ��", "HandoffResult": "ת�˹������ DTO����ԭ�����ȡ����Ŷȵȡ�", "HandoffRule": "�⻧ת�˹���������ʵ�塣", # health "LobsterEngineHealthService": "����ʱ�����Ϻ������� Bean �Ƿ�װ��������", # heartbeat "HeartbeatConfig": "������ʵ���������ã��������ʱ�����Եȣ���", "HeartbeatScheduler": "�����������ӿڣ�ע��/ע��ʵ�������ִ�С���ѯ״̬��", "HeartbeatSchedulerImpl": "��������ʵ�֣���ʱ����/�����������ڴ���ٻ�Ծʵ����", # http "HttpClient": "������ HTTP �ͻ��˷�װ���� Webhook/�ⲿ API �ڵ�ʹ�á�", # inbound "LobsterInboundService": "ȫ����ͳһ��վ���أ��ͻ���Ϣ��ҵ���¼�·�ɵ�������ʵ����", "LobsterInboundWebhookAuth": "��վ Webhook ��ԿУ�飨X-Lobster-Webhook-Secret �� body �ֶΣ���", # knowledge "KnowledgeVersionManager": "֪ʶ��汾���������ա��Աȡ��ع����ǩ��", "KnowledgeVersionManagerImpl": "֪ʶ�汾���� MyBatis ʵ�֡�", # media "LobsterMediaMessageService": "��վ��ý��Ԥ������ͼƬʶ���ļ�/��Ƶת�˹���", "LobsterMediaMessageServiceImpl": "��ý����Ϣ����ʵ�֣����� AiVisionService �������¼�����ġ�", # memory "LobsterChatRecordSyncService": "�� chat_msg ͬ��д�� lobster_chat_record���������������ʹ�á�", "LobsterQwEvolutionBridge": "�� Hook ��վ�ظ��� LobsterEvolutionEngine �������Žӷ���", # monitor "DashboardService": "��Ϻҵ���ؿ��壬�ۺ�ʵ��/��Ϣ/ת��/���ŵȶ�άָ�ꡣ", # pay "PayProvider": "֧�����ز�νӿڣ���/֧�����ȣ���", "PayRouter": "֧��·�������Զ����ֲ�·�� PayProvider��", "PayService": "֧������ȫ�������ڣ���������ѯ���ص����ƽ���������", "LobsterPayWorkflowBridge": "֧���ɹ���д�� ActionOutcome ��������������������ͻ���", "WechatPayProvider": "��֧���ṩ�ߣ��� ApiRegistryService �����̻���Ϣ��", # push "MessagePushService": "ͳһ��Ϣ������ڣ�SSE/WebSocket ռλ�����������߿ͻ������ӳء�", # queue "DistributedDelayQueue": "Redis ZSET �ֲ�ʽ�ӳٶ��У�֧���û� hash ������������ȡ��", "DeadLetterQueue": "���Ŷ��г־û������Թ�����", # scope "LobsterDataScope": "��Ϻ���ݿɼ���Χֵ���� create_by ���ˣ���", "LobsterInstanceScopeFilter": "�������˷�Χ������Ϻ������ʵ���б���", "LobsterDataScopeService": "�������۶����ݷ�Χ��ȫ��˾/������/�����ˡ�", # sim "LobsterSimulationTimeScale": "��֤/����ʱ�����ţ�1 ������ = N ��ʵ���ӣ�Ĭ�� 10����", # vector "VectorPatternMatcher": "��������ƥ��ӿڣ��洢/�����������Ƽ����ԡ�", "VectorPatternMatcherImpl": "����ģʽƥ��ʵ�֣����� EmbeddingService �������Ļ��档", # root interfaces "LobsterWorkflowExecutor": "��Ϻ������ִ�к��Ľӿڣ���ͣ���ƽ��ڵ㡢ģ�����������", "LobsterEvolutionEngine": "��Ϻ�������棺�����ġ�Prompt��AI���ʼ���Ϲ��ժҪ�������Ի�������", "ContextAssembler": "��װ�Ի������ģ�����/ժҪ/��ʷ/֪ʶ/�Ϲ�/ѧϰ���ԣ���", "ComplianceService": "�Ϲ����� Prompt ע�롢AI �ظ�Υ��ɨ�衣", "ConditionEvaluator": "������������֧��ֵ����һ�ڵ������", "DynamicNodeAdjuster": "������ͼ/������̬������һ�ڵ��ת�˹���", "DynamicNodeExecutor": "��̬�ڵ�ִ������֧��ע���Զ���ڵ㴦������", "DynamicNodeImplService": "��̬�ڵ�ѧϰ���ָ�Ƹ��á���⡢�������������", "MultiModelWorkflowGenerator": "��ģ��Э������/�����Ż�������ģ�塣", "MultiTurnDialogueManager": "���ڵ���ֶԻ��������ִ�״̬���١�", "OutputQualityChecker": "�������������Զ�������", "PendingAuditKnowledgeService": "������ AI �ظ��Զ���������֪ʶ�⡣", "PromptManager": "�������ȼ� Prompt ���أ��ڵ�>�⻧>Fallback����", "QualityScoringService": "8 ά������������ϵ���������ɻ��ơ�", "ReplaceWordService": "Υ����/�״����滻��ȫ��+�⻧�ʿ⣩��", "SemanticTakeoverDetector": "����ӹ�/ת AI ��⡣", "SensitiveWordService": "���дʹ��ˣ�������������㣩��", "SummaryGenerator": "�Ի�ժҪ���ɡ��첽�����뻺���ȡ��", "ToolCallFramework": "���ߵ��ÿ�ܣ�ע��/ִ�� HTTP/�ű�/���ù��ߡ�", "VariableStore": "������ʵ�������ڴ�+DB ˫д�洢��", "VariableSubstitutionEngine": "ģ�����ռλ���滻���档", "WorkflowPromptResolver": "���� workflowId��templateCode���� PromptManager ��ѯ��", "LobsterE2eTestService": "�˵��˲��ԣ�AI ���ɹ�������ʵ���ƽ����ʼ���������顣", "LobsterIntegrationTestService": "��Ϻ��ģ�鼯�ɲ�����ڡ�", "LobsterModelConfigService": "����������/�ʼ����ô�ģ�����ù�����", "LobsterNodeTypeService": "�ڵ����� DB �����뻺�����", "LobsterSalesCorpusAnalysisReport": "�������� AI �������� DTO��", "LobsterTestScenarioService": "���Գ����籾 CRUD �붨ʱ/��ʱ�ع����С�", "LobsterWorkflowGenerateAsyncService": "�첽/ͬ��ִ�� AI �������������������ɼ�¼��", "ILobsterBillingService": "��Ϻ Token �Ʒ������Ѽ�¼��ѯ��", "ILobsterConversationSummaryService": "�Ի�ժҪ�б��������ѯ��", "ILobsterEventAuditService": "�¼��ڵ�����б���ͨ��/���ء�", "ILobsterEvolutionSuggestionService": "�������������������ˡ�", "ILobsterInstanceStatsService": "��Ϻʵ������ͳ�ơ�", "ILobsterLearningCorpusService": "ѧϰ���Ͽ��б���ѯ��", "ILobsterPromptService": "ϵͳ/���漶��ʾ�� CRUD ������ѯ��", "ILobsterSalesCorpusService": "�������Ϲ����������� AI ������", "INodePromptService": "�ڵ㼶 Prompt ���ء���������ҵĬ��Ԥ��/�ָ���", "IWorkflowTemplateAdminService": "������ģ��/�ڵ�����˷���", } CLASS_CALLERS = { "SmartApiCallNodeExecutor": ["LobsterWorkflowExecutorImpl"], "ApiCallExecutor": ["SmartApiCallNodeExecutor", "ApiRegistryService"], "ScriptCache": ["SmartApiCallNodeExecutor"], "ApiRegistryService": ["SmartApiCallNodeExecutor", "ToolCallFrameworkImpl", "WeatherDataProvider", "WechatPayProvider", "LobsterApiRegistryController"], "LobsterEvolveAsyncService": ["LobsterEvolveTaskConsumer"], "KnowledgeUsageLogAsyncWriter": ["ContextAssemblerImpl"], "LobsterContextCacheService": ["ContextAssemblerImpl", "LobsterEvolutionEngineImpl", "ComplianceServiceImpl", "SummaryGeneratorImpl", "VectorPatternMatcherImpl", "TenantLearningEngineImpl"], "WorkflowCanvasSyncUtil": ["CompanyWorkflowLobsterServiceImpl"], "LobsterNodeCapabilityRegistry": ["LobsterTemplateCapabilityValidator", "LobsterEngineController"], "LobsterTemplateCapabilityValidator": ["CompanyWorkflowLobsterServiceImpl"], "ExternalDataRouter": ["DynamicNodeExecutorImpl"], "ExternalDataProvider": ["ExternalDataRouter"], "HolidayDataProvider": ["ExternalDataRouter"], "WeatherDataProvider": ["ExternalDataRouter"], "MessageDedupService": ["DuplicateReplyDetector"], "WorkflowPatcher": ["LobsterEventAuditController"], "EventDecisionEngine": ["LobsterEventAuditController"], "UserEventMonitor": ["EventDecisionEngine"], "ExpressionEngine": ["ConditionEvaluatorImpl", "SmartApiCallNodeExecutor"], "FeedbackDrivenEvolution": ["LobsterAdminController", "FeedbackDrivenEvolutionImpl"], "FeedbackDrivenEvolutionImpl": ["EvolutionSchedulerImpl", "LobsterAdminController"], "HumanHandoffDetector": ["DynamicNodeAdjusterImpl", "LobsterInboundReplyOrchestrator"], "HumanHandoffDetectorImpl": ["LobsterInboundReplyOrchestrator"], "HandoffResult": ["HumanHandoffDetector", "DynamicNodeAdjusterImpl"], "HandoffRule": ["HumanHandoffDetector"], "LobsterEngineHealthService": ["LobsterEngineController"], "HeartbeatConfig": ["HeartbeatSchedulerImpl", "LobsterWorkflowExecutorImpl"], "HeartbeatScheduler": ["LobsterWorkflowExecutorImpl", "LobsterEngineController"], "HeartbeatSchedulerImpl": ["LobsterWorkflowExecutorImpl", "LobsterEngineController"], "HttpClient": ["DynamicNodeExecutorImpl", "ToolCallFrameworkImpl"], "LobsterInboundService": ["LobsterInboundController"], "LobsterInboundWebhookAuth": ["LobsterInboundController"], "KnowledgeVersionManager": ["KnowledgeVersionManagerImpl"], "KnowledgeVersionManagerImpl": ["LobsterAdminController"], "LobsterMediaMessageService": ["LobsterInboundService"], "LobsterMediaMessageServiceImpl": ["LobsterInboundService", "LobsterInboundReplyOrchestrator"], "LobsterChatRecordSyncService": ["LobsterOutboundMessageService", "LobsterWorkflowExecutorImpl", "LobsterQwEvolutionBridge"], "LobsterQwEvolutionBridge": ["LobsterWorkflowExecutorImpl"], "DashboardService": ["LobsterAdminController"], "PayProvider": ["PayRouter"], "PayRouter": ["PayService", "DynamicNodeExecutorImpl"], "PayService": ["LobsterAdminController", "PayCallbackController"], "LobsterPayWorkflowBridge": ["PayService"], "WechatPayProvider": ["PayRouter"], "MessagePushService": ["LobsterWorkflowExecutorImpl"], "DistributedDelayQueue": ["LobsterScheduleService", "WorkflowTriggerScheduler"], "DeadLetterQueue": ["LobsterWorkflowExecutorImpl", "LobsterOutboundMessageService", "LobsterDeadLetterController", "DashboardService"], "LobsterDataScope": ["LobsterDataScopeService", "LobsterInstanceScopeFilter"], "LobsterInstanceScopeFilter": ["LobsterInstanceMonitorController", "LobsterWorkflowExecController"], "LobsterDataScopeService": ["LobsterInstanceScopeFilter", "CompanyTagTemplateBindingServiceImpl"], "LobsterSimulationTimeScale": ["DynamicNodeExecutorImpl", "LobsterTravelValidationServiceImpl"], "VectorPatternMatcher": ["ContextAssemblerImpl", "LobsterWorkflowExecutorImpl"], "VectorPatternMatcherImpl": ["ContextAssemblerImpl", "LobsterWorkflowExecutorImpl", "DynamicNodeExecutorImpl"], "LobsterWorkflowExecutor": ["LobsterInboundService", "LobsterWorkflowExecController", "LobsterTaskDispatchService", "LobsterTravelValidationServiceImpl"], "LobsterEvolutionEngine": ["LobsterWorkflowExecutorImpl", "LobsterQwEvolutionBridge", "LobsterPayWorkflowBridge", "LobsterTravelValidationServiceImpl"], "ContextAssembler": ["LobsterEvolutionEngineImpl", "MultiTurnDialogueManagerImpl"], "ComplianceService": ["LobsterEvolutionEngineImpl", "MultiTurnDialogueManagerImpl"], "ConditionEvaluator": ["LobsterWorkflowExecutorImpl"], "DynamicNodeAdjuster": ["LobsterEvolutionEngineImpl"], "DynamicNodeExecutor": ["LobsterWorkflowExecutorImpl", "LobsterIntegrationTestServiceImpl"], "DynamicNodeImplService": ["DynamicNodeExecutorImpl", "LobsterAdminController"], "MultiModelWorkflowGenerator": ["LobsterIntegrationTestServiceImpl", "LobsterAdminController", "LobsterWorkflowGenerateAsyncService"], "MultiTurnDialogueManager": ["LobsterEvolutionEngineImpl", "LobsterWorkflowExecutorImpl"], "OutputQualityChecker": ["DynamicNodeExecutorImpl", "LobsterEvolutionEngineImpl"], "PendingAuditKnowledgeService": ["TenantLearningEngineImpl", "QualityScoringServiceImpl"], "PromptManager": ["LobsterEvolutionEngineImpl", "LobsterWorkflowExecutorImpl", "DynamicNodeExecutorImpl"], "QualityScoringService": ["LobsterEvolutionEngineImpl", "LobsterE2eTestServiceImpl", "LobsterTravelValidationServiceImpl"], "ReplaceWordService": ["LobsterEvolutionEngineImpl", "LobsterCompanyConfigService"], "SemanticTakeoverDetector": ["DynamicNodeAdjusterImpl", "LobsterInboundReplyOrchestrator"], "SensitiveWordService": ["LobsterEvolutionEngineImpl", "LobsterEngineHealthService"], "SummaryGenerator": ["LobsterEvolutionEngineImpl", "ContextAssemblerImpl", "LobsterEngineHealthService"], "ToolCallFramework": ["LobsterEvolutionEngineImpl", "DynamicNodeExecutorImpl"], "VariableStore": ["LobsterEvolutionEngineImpl", "LobsterWorkflowExecutorImpl", "TriggerOrchestratorImpl"], "VariableSubstitutionEngine": ["LobsterWorkflowExecutorImpl", "LobsterEvolutionEngineImpl"], "WorkflowPromptResolver": ["PromptManagerImpl", "LobsterEvolutionEngineImpl"], "LobsterE2eTestService": ["LobsterE2eController", "LobsterAdminController", "LobsterTravelValidationServiceImpl"], "LobsterIntegrationTestService": ["LobsterEngineController", "LobsterAdminController"], "LobsterModelConfigService": ["LobsterAdminController", "LobsterModelRouteController"], "LobsterNodeTypeService": ["LobsterIntegrationTestServiceImpl", "DynamicNodeExecutorImpl"], "LobsterSalesCorpusAnalysisReport": ["ILobsterSalesCorpusService", "LobsterSalesCorpusServiceImpl"], "LobsterTestScenarioService": ["LobsterE2eController", "LobsterAdminController"], "LobsterWorkflowGenerateAsyncService": ["CompanyWorkflowLobsterServiceImpl", "LobsterAiGeneratorController"], "ILobsterBillingService": ["LobsterAdminController", "LobsterPlatformAdminController"], "ILobsterConversationSummaryService": ["LobsterAdminController"], "ILobsterEventAuditService": ["LobsterEventAuditController", "LobsterAdminController"], "ILobsterEvolutionSuggestionService": ["LobsterAdminController", "LobsterEngineController"], "ILobsterInstanceStatsService": ["LobsterAdminController"], "ILobsterLearningCorpusService": ["LobsterAdminController"], "ILobsterPromptService": ["LobsterPromptController", "LobsterAdminController"], "ILobsterSalesCorpusService": ["LobsterAdminController", "LobsterSalesCorpusController"], "INodePromptService": ["WorkflowTemplateAdminServiceImpl", "CompanyWorkflowLobsterServiceImpl"], "IWorkflowTemplateAdminService": ["LobsterAdminController"], } METHOD_CN = { "execute": "ִ������ API �ڵ㣺ƥ��˵㡢���� REST ������ SpEL �����", "invoke": "���� HTTP API ���ò�������Ӧ�塣", "init": "��ʼ�����������á�ע�� handler ��ˢ�»���ȡ�", "refreshCache": "ˢ�±���/Redis ���档", "get": "����ʶ��ȡע���", "getAllApis": "��ȡȫ����ע�� API �˵㡣", "register": "ע���µ� API �˵�������ṩ�ߡ�", "buildAuthHeaders": "���ݼ�Ȩ���ù��� HTTP ����ͷ��", "size": "���ػ��浱ǰ��Ŀ����", "clear": "��ջ��档", "isAsyncEnabled": "�ж��Ƿ������첽��������", "submit": "�ύ�첽��������", "executeTask": "ִ��ָ����������", "getTask": "������ ID ��ѯ��������״̬��", "cleanupOldTasks": "�������ڽ���������ա�", "shutdown": "�ر��첽�����̳߳ء�", "writeUsageLogs": "�첽д��֪ʶ������ʹ����־��", "getUserProfile": "��������Դ�����û�����", "getRecentChats": "��������Դ��������Ի���¼��", "getHistoricalFacts": "��������Դ������ʷ�û���ʵ��", "getDialogueState": "��������Դ���ضԻ�״̬��", "getCustomerHabits": "��������Դ���ؿͻ���ͨϰ�ߡ�", "getLearnedStrategies": "��������Դ�����⻧ѧϰ���ԡ�", "getKnowledgeSearch": "��������Դִ��֪ʶ�������", "getComplianceRules": "��������Դ���غϹ�����б���", "getCompliancePrompt": "��������Դ���غϹ� Prompt Ƭ�Ρ�", "getEmbeddingJson": "��������Դ��ȡ�ı�����Ƕ�� JSON��", "getVectorRowsJson": "��������Դ��ȡ������ JSON��", "getWorkflowInstance": "��������Դ���ع�����ʵ����", "getExecutionLogs": "��������Դ���ؽڵ�ִ����־��", "getTenantKeywords": "��������Դ�����⻧����ؼ��ʡ�", "invalidateUserProfile": "ʧЧ�û����档", "invalidateRecentChats": "ʧЧ����Ի����档", "invalidateHistoricalFacts": "ʧЧ��ʷ��ʵ���档", "invalidateDialogueState": "ʧЧ�Ի�״̬���档", "invalidateCustomerHabits": "ʧЧ�ͻ�ϰ���档", "invalidateLearnedStrategies": "ʧЧѧϰ���Ի��档", "invalidateKnowledge": "ʧЧ֪ʶ��������档", "invalidateCompliance": "ʧЧ�Ϲ������ Prompt ���档", "invalidateVectorRows": "ʧЧ�����л��档", "invalidateInstance": "ʧЧʵ����ִ����־���档", "invalidateTenantKeywords": "ʧЧ�⻧�ؼ��ʻ��档", "invalidateAfterDialogue": "�Ի�����������ʧЧ�û��������ݡ�", "syncEdgesToNodes": "��������ͬ��д��ڵ� nextNodeCode ���֧������", "normalizeLegacyBranchFields": "�淶���ɰ��֧�ֶ��Լ�������ʱִ������", "all": "����ȫ���ڵ�����ע���", "belowStars": "ɸѡ����ָ���Ǽ��Ľڵ����͡�", "dynamicExecutorTypes": "����֧�ֶ�ִ̬�����Ľڵ����ͼ��ϡ�", "summary": "���ܽڵ����������ͳ�ơ�", "validate": "У��ģ�廭���ڵ����������Ƿ�������", "getProvider": "�����ͻ�ȡ���ݻ�֧���ṩ�ߡ�", "getAvailableSources": "�г������ⲿ����Դ���͡�", "fetch": "��ȡ�ⲿʵʱ���ݡ�", "getSourceType": "��������Դ���ͱ�ʶ��", "isAvailable": "�ж��ṩ��/�����Ƿ���á�", "isExactDuplicate": "�ж���Ϣ�Ƿ�����ʷ��ȷ�ظ���", "semanticSimilarity": "����������Ϣ���������ƶȡ�", "check": "�ۺϾ�ȷ������ȥ�ؼ�顣", "record": "��¼�ѷ�����Ϣ��ȥ����ʷ��", "restoreFromRedis": "�� Redis �ָ�ȥ����ʷ��", "addPatch": "������������ڵ㲹����", "getPendingPatches": "��ѯ����˲����б���", "applyPatch": "Ӧ�������ͨ���IJ�����", "rejectPatch": "���ز������롣", "patchNode": "�Ե����ڵ�Ӧ�ò������ݡ�", "getStuckNodes": "ͳ�ƿ�ס�Ľڵ��б���", "getNodeStats": "��ȡ�ڵ�ִ��ͳ�ơ�", "recordAudit": "��¼�¼��ڵ���ơ�", "markProcessed": "����û��¼��Ѵ�����", "countEvents": "ͳ���û��¼�������", "evaluateBoolean": "��ֵ SpEL ����ʽ�����ز��������", "evaluate": "��ֵ��������ʽ���֧������", "isValid": "У�� SpEL ����ʽ��Ƿ�Ϸ���", "recordFeedback": "��¼�˹����������뱸ע��", "analyzeFeedback": "������������ȡ�����Ľ����顣", "generateVariants": "���ڷ������� Prompt ���塣", "getActiveABTests": "��ѯ�����е� A/B ���ԡ�", "applyABTestResult": "Ӧ�� A/B ����ʤ�����塣", "resolveVariantForNode": "Ϊ�ڵ������ǰ��Ч�� A/B ���塣", "sweepAutoApply": "ɨ�貢�Զ�Ӧ�ô����塣", "detectHandoff": "����Ƿ���Ҫת�˹���", "getHandoffRules": "��ѯ�⻧ת�˹�����", "saveHandoffRule": "����ת�˹��������á�", "recordHandoffEvent": "��¼ת�˹��¼���", "recordHandoff": "��¼һ��ת�˹�������", "getHandoffHistory": "��ѯת�˹���ʷ��¼��", "noHandoff": "��������ת�˹��Ľ����", "needHandoff": "������Ҫת�˹��Ľ����", "isHandoffNeeded": "�ж��Ƿ��ѱ����Ҫת�˹���", "setHandoffNeeded": "�����Ƿ���Ҫת�˹���", "check": "ִ�����潡����顣", "defaultConfig": "����Ĭ���������á�", "registerInstance": "ע��ʵ�����������ȡ�", "unregisterInstance": "����������ע��ʵ����", "checkAndExecute": "��鲢ִ�е�����������", "getHeartbeatStatus": "��ѯʵ������״̬��", "sendHeartbeat": "����ʵ��������", "cleanupExpiredHeartbeats": "��������������¼��", "recordHeartbeat": "��¼�����¼���", "getRecentHeartbeats": "��ѯ���������¼��", "updateHeartbeatStatus": "��������״̬��", "get": "���� GET ����", "postJson": "���� JSON POST ����", "postForm": "������� POST ����", "put": "���� PUT ����", "delete": "���� DELETE ����", "request": "����ͨ�� HTTP ����", "handleInboundMessage": "�����ͻ���վ��Ϣ��·�ɵ���������", "handleBusinessEvent": "����ҵ���¼���������������", "assertWebhookAuthorized": "У�� Webhook ������Կ��", "createVersion": "����֪ʶ��汾���ա�", "getVersionHistory": "��ѯ֪ʶ�汾��ʷ��", "getVersion": "���汾�Ż�ȡ�������顣", "diffVersions": "�Ա�����֪ʶ�汾���졣", "rollback": "�ع���ָ��֪ʶ�汾��", "addVersionTag": "Ϊ֪ʶ�汾���ӱ�ǩ��", "isImageType": "�ж���Ϣ�����Ƿ�ΪͼƬ��", "requiresHandoff": "�ж϶�ý���Ƿ���ת�˹���", "classifyMediaKind": "�����ý����Ϣ���͡�", "recognizeImageWithContext": "��϶Ի�������ʶ��ͼƬ���ݡ�", "buildConversationContext": "������ý��ʶ���öԻ������ġ�", "preprocess": "Ԥ������վ��ý����Ϣ��", "normalizeImageParse": "�淶��ͼƬʶ�����ı���", "resolveInstanceId": "������Ϣ��Ӧ�Ĺ�����ʵ�� ID��", "syncFromChatMsg": "�� chat_msg ͬ���� lobster_chat_record��", "syncInboundText": "ͬ����վ�ı���Ϣ���������", "tryEvolve": "���Ծ��������洦������վ�ظ���", "getTenantDashboard": "�ۺ��⻧��ؿ���ָ�ꡣ", "getGatewayType": "����֧���������ͱ�ʶ��", "createOrder": "����֧��������", "queryOrder": "��ѯ֧������״̬��", "getAvailableGateways": "�г�����֧�����ء�", "createPayOrder": "����������֧��������", "checkPayStatus": "���֧��״̬��", "handlePaymentNotify": "����֧���ص�֪ͨ��", "sqlEscapePublic": "�� SQL �ַ���������ת�塣", "onPaymentSuccess": "֧���ɹ����ƽ����������������", "loadOrderRow": "����֧�����������ݡ�", "pushToUser": "��ָ���û�����ʵʱ��Ϣ��", "broadcastToCompany": "���⻧ȫԱ�㲥��Ϣ��", "clientConnect": "ע��ͻ����������ӡ�", "clientDisconnect": "ע���ͻ����������ӡ�", "getOnlineCount": "��ȡ������������", "enqueue": "����ӳٻ�������Ϣ��", "enqueueWithSharding": "���û� hash ��������ӳ���Ϣ��", "pollBatch": "������ȡ�����ӳ���Ϣ��", "getQueueSize": "��ȡ���е�ǰ��С��", "tryAcquireBatchLock": "���Ի�ȡ������������", "releaseBatchLock": "�ͷ�������������", "dequeue": "����������Ϣ��", "retry": "����������Ϣ��", "remove": "�Ƴ����ż�¼��", "getDeadLetterList": "��ѯ�����б���", "getPendingCount": "��ȡ����������������", "getDeadCount": "��ȡ��������������", "retryAllDead": "��������ȫ�����š�", "unrestricted": "�������������ݷ�Χ��", "filtered": "���찴�����˹��˵����ݷ�Χ��", "isUnrestricted": "�ж��Ƿ�Ϊ�����Ʒ�Χ��", "getCreateByUsernames": "��ȡ�ɼ��������û������ϡ�", "canAccessCreateBy": "�ж��Ƿ�ɷ���ָ�����������ݡ�", "filterInstances": "�����ݷ�Χ����ʵ���б���", "canAccessInstance": "�ж��Ƿ�ɷ���ָ��ʵ����", "resolve": "������ǰ�û����ݿɼ���Χ��", "describeScope": "�������ݷ�Χ�����İ���", "enabled": "�жϷ���ʱ�������Ƿ����á�", "minuteUnit": "����ÿ���Ӷ�Ӧ����������", "daysToMillis": "��������ת��Ϊ��ʵ���롣", "alignToMinuteBucket": "���뵽����ʱ��Ͱ��", "storeVector": "�洢����Ƕ�롣", "searchSimilar": "������������������", "deleteVector": "ɾ��������¼��", "recommendByVector": "���������Ƽ�ѧϰ���ԡ�", "startWorkflow": "�����µĹ�����ʵ����ִ���ڵ㡣", "executeNextNode": "���ͻ��ظ��ƽ�����������һ�ڵ㡣", "pauseWorkflow": "��ͣ������ʵ��ִ�С�", "resumeWorkflow": "�ָ�����ͣ�Ĺ�����ʵ����", "terminateWorkflow": "��ֹ������ʵ������¼ԭ��", "getInstanceState": "��ѯ������ʵ����ǰ״̬�������ġ�", "simulateExecution": "ģ��ִ�й������ڵ㣨��ʵ�ʷ���Ϣ����", "deliverProactiveMessage": "��ͻ�Ͷ�ݹ�����������Ϣ��", "evolve": "ִ�е��ֶԻ�������ˮ�ߡ�", "enrichWithDynamicNode": "AI ��̬���ɲ�����Ի������Ľڵ㡣", "assembleContext": "��װ�Ի��������ı����� token ���ޣ���", "assembleForNode": "Ϊָ���ڵ�������װ�����ġ�", "getContextVariables": "��ȡʵ�������ı��� Map��", "assembleFullContext": "���м��ض�Դ�����IJ���װΪ Map��", "buildAiPrompt": "�������� Map ��ʽ��Ϊ AI Prompt �ı���", "formatKnowledgeForScoring": "��ʽ��֪ʶ��Ƭ�ι���������ʹ�á�", "checkCompliance": "������ݺϹ��ԡ�", "checkComplianceWithResult": "���Ϲ��Բ�������ϸ�����", "getComplianceRules": "��ȡ�⻧�Ϲ�����б���", "buildCompliancePrompt": "�����Ϲ� Prompt ע��Ƭ�Ρ�", "checkAiReplyCompliance": "У�� AI �ظ��Ϲ��Բ����طּ������", "evaluateNextNode": "��ֵ������������һ�ڵ���롣", "adjustNode": "��������������ڽڵ�·�ɾ��ߡ�", "shouldTransferToHuman": "�ж��Ƿ�Ӧת�˹���", "detectIntent": "���ͻ���ͼ���͡�", "supports": "�жϽڵ������Ƿ���ע�� handler��", "registerHandler": "ע���Զ���ڵ����� handler��", "getRegisteredHandlers": "������ע���ȫ���ڵ� handler ӳ�䡣", "computeFingerprint": "���㶯̬�ڵ�ʵ��ָ�ơ�", "findActiveImpl": "�����Ѽ���Ķ�̬�ڵ�ʵ�֡�", "saveLearned": "����ѧϰ�õ��Ķ�̬�ڵ�ʵ�֡�", "recordRunAndScore": "��¼���в����ֶ�̬�ڵ�ʵ�֡�", "approve": "���ͨ����̬�ڵ�ʵ�ֻ�֪ʶ��Ŀ��", "reject": "��˲��ض�̬�ڵ�ʵ�ֻ�֪ʶ��Ŀ��", "listByStatus": "��״̬�г���̬�ڵ�ʵ�֡�", "getStats": "��ȡͳ��ָ�ꡣ", "generateWorkflow": "AI ���ɹ�����ģ�� JSON��", "generateWorkflowWithResult": "AI ���ɹ�������������ϸ�����", "iterateOptimize": "�����Ż����й�����ģ�塣", "processDialogue": "�������ֶԻ��ڵ��һ�ֽ�����", "isMultiTurnNode": "�жϽڵ��Ƿ�����Ϊ���ֶԻ���", "isDialogueComplete": "�ж϶��ֶԻ��Ƿ�����ɡ�", "getDialogueRound": "��ȡ��ǰ���ֶԻ��ִΡ�", "resetDialogue": "���ö��ֶԻ�״̬��", "checkQuality": "���������ݻ���������", "checkAndCorrect": "����������ڱ�Ҫʱ�������ݡ�", "saveToPending": "���������ظ���������֪ʶ�⡣", "listPendingAudit": "�г������֪ʶ��Ŀ��", "promoteToKnowledge": "�����ͨ����Ŀ������ʽ֪ʶ�⡣", "getPrompt": "��ȡ�ڵ�/ȫ�� Prompt ���ݡ�", "getSystemPrompt": "��ȡ�ڵ�ϵͳ Prompt��", "getInstructionPrompt": "��ȡ�ڵ�ָ�� Prompt��", "getFallbackPrompt": "��ȡ�ڵ㶵�� Prompt��", "hasConfiguredNodePrompt": "�жϽڵ��Ƿ�������ָ������ Prompt��", "saveNodePrompt": "����ڵ� Prompt �����ݿ⡣", "saveGlobalPrompt": "����ȫ�� Prompt �����ݿ⡣", "listPrompts": "�г��⻧ Prompt ���á�", "invalidateCache": "ʧЧ Prompt ���档", "scoreWithRetry": "�������ֲ��ڲ����ʱ���������ɡ�", "score": "�� AI �ظ����ж�ά���������֡�", "getThreshold": "��ȡ����������ֵ��", "getImprovementHint": "���ݵ�ǰ�÷����ɸĽ���ʾ��", "applyReplace": "���ı�Ӧ��Υ����/�״����滻��", "listWords": "��ҳ��ѯ�滻���б���", "saveWord": "�����滻�����á�", "deleteWord": "ɾ���滻�ʡ�", "detectTakeover": "���ͻ��Ƿ�Ҫ��ת�˹��ӹܡ�", "detectAITransfer": "��� AI �Ƿ�Ӧ����ת���˹���", "filterSensitiveWords": "�����ı��е����дʲ��滻��", "containsSensitiveWord": "����ı��Ƿ�������дʡ�", "detectSensitiveWords": "��Ⲣ�������д���ϸ�б���", "addSensitiveWord": "�����⻧���дʲ�ˢ�»��档", "removeSensitiveWord": "�Ƴ����дʲ�ˢ�»��档", "listSensitiveWords": "��ѯ�⻧���д��б���", "generateSummary": "���ڶԻ���ʷ����ժҪ�ı���", "extractKeyPoints": "�ӶԻ���ʷ��ȡ�ؼ�Ҫ�㡣", "analyzeSentiment": "����������Ϣ�������", "generateSummaryAsync": "�첽����ʵ��ժҪ���£�����������", "forceGenerateSummary": "ǿ���������ɲ��־û�ʵ��ժҪ��", "forceGenerateSummaryFromHistory": "���ڸ�����ʷ�ı�ǿ������ժҪ��", "getCachedSummary": "��ȡ�ѻ�����û�/ʵ��ժҪ��", "buildSummaryPrompt": "����ժҪ������ Prompt��", "executeTool": "ִ��ָ�����ƵĹ��ߵ��á�", "getAvailableTools": "�г��⻧���ù��ߡ�", "registerTool": "ע���Զ��幤�ߡ�", "setVariable": "���õ���ʵ���������ڴ�+Redis+DB����", "setVariables": "��������ʵ��������", "getVariable": "��ȡ����ʵ��������", "getAllVariables": "��ȡʵ��ȫ��������", "removeVariable": "ɾ������ʵ��������", "clearVariables": "���ʵ��ȫ��������", "persistToDatabase": "���ڴ�����־û������ݿ⡣", "loadFromDatabase": "�����ݿ���ر������ڴ滺�档", "substitute": "��ģ���еı���ռλ���滻Ϊʵ��ֵ��", "extractVariables": "���������г�ȡ����ֵ��", "resolveWorkflowCode": "�� workflowId ���� templateCode��", "resolveWorkflowCodeFromInstance": "��ʵ�� ID ���� templateCode��", "runE2e": "�������� E2E ���Բ����ر��档", "getReport": "�� runId ��ѯ E2E ���Ա��档", "stepNext": "E2E �����ƽ���ע���û����벢ִ����һ�ڵ㡣", "multiTurn": "E2E ���ֶԻ����ԡ�", "listRuns": "��ҳ�г� E2E �������м�¼��", "deleteRun": "ɾ�� E2E �������м�¼��", "runAllTests": "����ȫ������ð�̲��ԡ�", "testNodeTypeService": "���Խڵ����ͷ���", "testDynamicNodeExecutor": "���Զ�̬�ڵ�ִ������", "testMultiModelWorkflowGenerator": "���Զ�ģ��������������", "testModelConfigService": "����ģ�����÷���", "setupTestData": "�����ɲ������ݡ�", "cleanupTestData": "�������ɲ������ݡ�", "getWorkflowGeneratorConfig": "��ȡ����������ģ�����á�", "getQualityCheckConfig": "��ȡ�������ģ�����á�", "getConfig": "�� ID ��ȡģ�����á�", "getAllConfigs": "��ȡȫ��ģ�����á�", "getConfigsByCompany": "���⻧��ȡģ�������б���", "saveConfig": "����ģ�����á�", "deleteConfig": "ɾ��ģ�����á�", "getByNodeType": "���ڵ����ͻ�ȡ���á�", "getByCodeName": "����������ȡ�ڵ����͡�", "getAllEnabled": "��ȡȫ�����õĽڵ����͡�", "getByCategory": "�������ȡ�ڵ����͡�", "getNodeTypeMap": "��ȡ�ڵ����� Map ���档", "saveNodeType": "����ڵ��������á�", "updateNodeType": "���½ڵ��������á�", "deleteNodeType": "ɾ���ڵ��������á�", "createScenario": "�������Գ����籾��", "updateScenario": "���²��Գ����籾��", "deleteScenario": "ɾ�����Գ����籾��", "getScenario": "��ȡ���Գ������顣", "listScenarios": "�г����Գ����б���", "runScenarioNow": "��������ָ�����Գ�����", "runAllEnabledScenarios": "����ȫ�����õIJ��Գ�����", "executeGenerateSync": "ͬ��ִ�� AI ��������������", "executeGenerate": "�첽ִ�� AI ��������������", "applyFallbackForRecord": "Ϊ���ɼ�¼Ӧ�ö���ģ�塣", "getBalance": "��ѯ�⻧ Token ��", "updateTokenCoefficient": "���� Token ����ϵ����", "listConsumeRecords": "�г����Ѽ�¼��", "getTokenDailySummary": "��ȡ Token �ջ��ܡ�", "getTokenModelSummary": "��ȡ Token ��ģ�ͻ��ܡ�", "getTokenInstanceSummary": "��ȡ Token ��ʵ�����ܡ�", "listTokenRecords": "�г� Token ������ϸ��", "listSummaries": "��ҳ�г��Ի�ժҪ��", "getById": "�� ID ��ѯ���顣", "listAudits": "�г��¼���˼�¼��", "listSuggestions": "�г��������顣", "getEvolutionMetrics": "��ȡ����ָ��ͳ�ơ�", "auditSuggestion": "��˵����������顣", "batchAudit": "������˽������顣", "selectListByCompanyId": "���⻧��ѯѧϰ�����б���", "listEnginePrompts": "�г����漶 Prompt��", "create": "�����¼�¼��", "update": "�������м�¼��", "softDelete": "��ɾ����¼��", "listCategories": "�г� Prompt ���ࡣ", "getByScene": "��������ȡ Prompt��", "listCorpus": "�г��������ϡ�", "addDialog": "�������ڶԻ���", "batchImportDialogs": "�����������ڶԻ���", "batchImportFromJson": "�� JSON �����������ڶԻ���", "analyzeCorpus": "AI �����������ϡ�", "queryByScenario": "��������ѯ���ڻ�����", "getScenarios": "��ȡ�������ϳ����б���", "attachPromptsToNodes": "Ϊ�ڵ���� Prompt ���á�", "saveNodePromptsFromPayload": "�������屣��ڵ� Prompt��", "saveNodePromptsFromEntities": "��ʵ���б�����ڵ� Prompt��", "previewIndustryDefault": "Ԥ����ҵĬ�Ͻڵ� Prompt��", "restoreNodeFromIndustry": "����ҵĬ�ϻָ��ڵ� Prompt��", "listTemplates": "�г�������ģ�塣", "listPublishedTemplates": "�г��ѷ���ģ�塣", "getTemplateWithNodes": "��ȡģ�弰�ڵ����顣", "saveTemplateNodes": "����ģ��ڵ����á�", "isToolAvailable": "�жϹ��߶��⻧�Ƿ���á�", } CALLER_INDEX = None def build_caller_index(): index = {} for jf in ROOT.rglob("*.java"): try: text = jf.read_text(encoding="utf-8", errors="replace") except Exception: continue stem = jf.stem for m in re.finditer( r'\b([A-Z][a-zA-Z0-9]+(?:Service|Executor|Engine|Manager|Store|Assembler|Generator|Framework|Detector|Evaluator|Adjuster|Scheduler|Checker|Router|Bridge|Registry|Validator|Monitor|Patcher|Provider|Queue|Filter|Scale|Matcher|Writer|Auth|Client|Controller)?)\b', text, ): name = m.group(1) if name.endswith("Impl"): index.setdefault(name[:-4], set()).add(stem) index.setdefault(name, set()).add(stem) for m in re.finditer( r'\b(Lobster[A-Za-z]+|ContextAssembler|VariableStore|SummaryGenerator|QualityScoringService|SensitiveWordService|DynamicNodeExecutor|MultiTurnDialogueManager|PromptManager|ComplianceService|ToolCallFramework|ConditionEvaluator|DynamicNodeAdjuster|ReplaceWordService|OutputQualityChecker|SemanticTakeoverDetector|VariableSubstitutionEngine|MultiModelWorkflowGenerator|PendingAuditKnowledgeService|I[A-Z][a-zA-Z]+Service|ApiCallExecutor|MessageDedupService|PayRouter|PayService|HeartbeatScheduler|LobsterInboundService|VectorPatternMatcher|FeedbackDrivenEvolution|HumanHandoffDetector|ExpressionEngine|ExternalDataRouter|DeadLetterQueue|DistributedDelayQueue|MessagePushService|DashboardService|LobsterContextCacheService)\s+\w+', text, ): iface = m.group(1) if stem not in {iface, iface + "Impl"}: index.setdefault(iface, set()).add(stem) return index def get_callers(class_name): if class_name in CLASS_CALLERS: return CLASS_CALLERS[class_name] global CALLER_INDEX if CALLER_INDEX is None: CALLER_INDEX = build_caller_index() iface = class_name.replace("Impl", "") callers = set() for key in (class_name, iface, "I" + iface if not iface.startswith("I") else iface): callers.update(CALLER_INDEX.get(key, set())) callers.discard(class_name) filtered = sorted(c for c in callers if not c.endswith("Impl") or c in { "LobsterWorkflowExecutorImpl", "LobsterEvolutionEngineImpl", "DynamicNodeExecutorImpl", "ContextAssemblerImpl", "MultiTurnDialogueManagerImpl", "LobsterE2eTestServiceImpl", "LobsterTravelValidationServiceImpl", "LobsterIntegrationTestServiceImpl", "FeedbackDrivenEvolutionImpl", "HumanHandoffDetectorImpl", "HeartbeatSchedulerImpl", "KnowledgeVersionManagerImpl", "VectorPatternMatcherImpl", "LobsterMediaMessageServiceImpl", }) return filtered[:8] if filtered else ["Spring ����ע��"] def format_callers(callers): return "��".join(f"{{@code {c}}}" for c in callers) def method_purpose(class_name, method_name): if method_name in METHOD_CN: return METHOD_CN[method_name] if method_name.startswith("get") and len(method_name) > 3: return f"��ȡ{method_name[3:]}��" if method_name.startswith("set") and len(method_name) > 3: return f"����{method_name[3:]}��" if method_name.startswith("is") and len(method_name) > 2: return f"�ж��Ƿ�Ϊ{method_name[2:]}��" if method_name.startswith("has") and len(method_name) > 3: return f"�ж��Ƿ����{method_name[3:]}��" if method_name.startswith("list"): return f"��ѯ{method_name[4:]}�б���" if method_name.startswith("save") or method_name.startswith("create"): return f"����/����������ݡ�" if method_name.startswith("delete") or method_name.startswith("remove"): return f"ɾ��������ݡ�" if method_name.startswith("update"): return f"����{method_name[6:]}��" return f"{method_name} ��ҵ����ڡ�" def make_method_javadoc(class_name, method_name, indent=" "): purpose = method_purpose(class_name, method_name) callers = get_callers(class_name) return [ f"{indent}/**", f"{indent} * {purpose}", f"{indent} *
���÷���{format_callers(callers)}��", f"{indent} */", ] def make_class_javadoc(class_name, is_interface=False): kind = "�ӿ�" if is_interface else "����" desc = CLASS_DESC.get(class_name, f"{class_name}����Ϻ workflow {kind}��") callers = get_callers(class_name) return [ "/**", f" * {desc}", f" *
��Ҫ���÷���{format_callers(callers)}��", " */", ] def has_javadoc_before(lines, idx): j = idx - 1 while j >= 0 and lines[j].strip().startswith("@"): j -= 1 if j >= 0 and (lines[j].strip().startswith("/**") or lines[j].strip().endswith("*/")): return True return False def find_declaration(lines, class_name): patterns = [ re.compile(r'public\s+(?:final\s+)?class\s+' + re.escape(class_name) + r'\b'), re.compile(r'public\s+interface\s+' + re.escape(class_name) + r'\b'), re.compile(r'public\s+enum\s+' + re.escape(class_name) + r'\b'), ] for i, line in enumerate(lines): for pat in patterns: if pat.search(line): return i, "interface" in line return None, False def remove_existing_javadoc(lines, decl_idx): """Remove javadoc block immediately above declaration (skip annotations).""" j = decl_idx - 1 while j >= 0 and (lines[j].strip().startswith("@") or lines[j].strip() == ""): j -= 1 if j >= 0 and lines[j].strip().endswith("*/"): end = j while j >= 0: if lines[j].strip().startswith("/**"): return j, end + 1 j -= 1 return None, None def process_file(path: Path): text = path.read_text(encoding="utf-8") class_name = path.stem lines = text.splitlines(keepends=True) decl_idx, is_interface = find_declaration(lines, class_name) if decl_idx is None: return False modified = False new_lines = [] # Replace or insert class javadoc start, end = remove_existing_javadoc(lines, decl_idx) class_doc = make_class_javadoc(class_name, is_interface) class_doc_lines = [dl + "\n" for dl in class_doc] i = 0 while i < len(lines): if start is not None and i == start: for dl in class_doc_lines: new_lines.append(dl) i = end modified = True continue if i == decl_idx and start is None: for dl in class_doc_lines: new_lines.append(dl) modified = True line = lines[i] stripped = line.strip() pub_match = re.match( r'^(\s*)(@Override\s+)?public\s+(?!class\b|interface\b|enum\b|static\s+class\b)', stripped, ) if pub_match and not has_javadoc_before(new_lines if i >= len(lines) else lines, i): # check javadoc in original lines if not has_javadoc_before(lines, i): indent = pub_match.group(1) combined = stripped k = i while ";" not in combined and "{" not in combined and k + 1 < len(lines): k += 1 combined += " " + lines[k].strip() mm = re.search(r'\b(\w+)\s*\(', combined) if mm: method_name = mm.group(1) if method_name not in ("if", "for", "while", "switch", "catch", "synchronized", "return", "new", "super"): for dl in make_method_javadoc(class_name, method_name, indent): new_lines.append(dl + "\n") modified = True else: # Replace existing method javadoc with standard format j = i - 1 while j >= 0 and lines[j].strip().startswith("@"): j -= 1 if j >= 0 and lines[j].strip().endswith("*/"): end_j = j while j >= 0: if lines[j].strip().startswith("/**"): indent = re.match(r'^(\s*)', lines[j]).group(1) combined = stripped k = i while ";" not in combined and "{" not in combined and k + 1 < len(lines): k += 1 combined += " " + lines[k].strip() mm = re.search(r'\b(\w+)\s*\(', combined) if mm: method_name = mm.group(1) for dl in make_method_javadoc(class_name, method_name, indent): new_lines.append(dl + "\n") modified = True i = end_j + 1 continue j -= 1 new_lines.append(line) i += 1 if modified: path.write_text("".join(new_lines), encoding="utf-8") return modified def write_package_info(pkg: str): pkg_dir = WORKFLOW_DIR / pkg if not pkg_dir.is_dir(): return False info_path = pkg_dir / "package-info.java" desc = PACKAGE_INFO.get(pkg, f"��Ϻ������ {pkg} �Ӱ���") content = ( "/**\n" f" * {desc}\n" " */\n" f"package com.fs.company.service.workflow.{pkg};\n" ) if info_path.exists(): existing = info_path.read_text(encoding="utf-8") if "���÷�" in existing or "��Ҫ���÷�" in existing: return False info_path.write_text(content, encoding="utf-8") return True def collect_files(): files = [] for pkg in TARGET_PACKAGES: pkg_dir = WORKFLOW_DIR / pkg if pkg_dir.is_dir(): files.extend(sorted(pkg_dir.rglob("*.java"))) if (pkg_dir / "impl").is_dir(): pass # already covered by rglob for jf in sorted(WORKFLOW_DIR.glob("*.java")): if jf.name != "package-info.java": files.append(jf) return files def main(): modified = [] pkg_created = [] for pkg in TARGET_PACKAGES: if write_package_info(pkg): pkg_created.append(pkg) print(f"PACKAGE-INFO: {pkg}") for jf in collect_files(): if process_file(jf): modified.append(str(jf.relative_to(ROOT))) print(f"MODIFIED: {jf.name}") else: print(f"SKIP: {jf.name}") print(f"\nPackage-info created/updated: {len(pkg_created)}") print(f"Files modified: {len(modified)}") return modified, pkg_created if __name__ == "__main__": main()