mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-17 03:04:20 +00:00
后端没修完版
This commit is contained in:
@@ -31,6 +31,7 @@ from ..api.http.service import mcp as mcp_service
|
||||
from ..api.http.service import apikey as apikey_service
|
||||
from ..api.http.service import webhook as webhook_service
|
||||
from ..api.http.service import monitoring as monitoring_service
|
||||
from ..api.http.service import workflow as workflow_service
|
||||
|
||||
from ..discover import engine as discover_engine
|
||||
from ..storage import mgr as storagemgr
|
||||
@@ -149,6 +150,8 @@ class Application:
|
||||
|
||||
webhook_service: webhook_service.WebhookService = None
|
||||
|
||||
workflow_service: workflow_service.WorkflowService = None
|
||||
|
||||
telemetry: telemetry_module.TelemetryManager = None
|
||||
|
||||
survey: survey_module.SurveyManager = None
|
||||
@@ -218,6 +221,25 @@ class Application:
|
||||
scopes=[core_entities.LifecycleControlScope.APPLICATION],
|
||||
)
|
||||
|
||||
async def workflow_execution_cleanup_loop():
|
||||
check_interval_seconds = 60
|
||||
while True:
|
||||
try:
|
||||
cancelled = await self.workflow_service.cleanup_stale_executions()
|
||||
if cancelled > 0:
|
||||
self.logger.info(
|
||||
f'Workflow execution auto-cleanup: cancelled {cancelled} stale executions'
|
||||
)
|
||||
except Exception as e:
|
||||
self.logger.warning(f'Workflow execution auto-cleanup error: {e}')
|
||||
await asyncio.sleep(check_interval_seconds)
|
||||
|
||||
self.task_mgr.create_task(
|
||||
workflow_execution_cleanup_loop(),
|
||||
name='workflow-execution-cleanup',
|
||||
scopes=[core_entities.LifecycleControlScope.APPLICATION],
|
||||
)
|
||||
|
||||
self.task_mgr.create_task(
|
||||
never_ending(),
|
||||
name='never-ending-task',
|
||||
|
||||
@@ -28,6 +28,7 @@ from ...api.http.service import mcp as mcp_service
|
||||
from ...api.http.service import apikey as apikey_service
|
||||
from ...api.http.service import webhook as webhook_service
|
||||
from ...api.http.service import monitoring as monitoring_service
|
||||
from ...api.http.service import workflow as workflow_service
|
||||
from ...discover import engine as discover_engine
|
||||
from ...storage import mgr as storagemgr
|
||||
from ...utils import logcache
|
||||
@@ -85,6 +86,9 @@ class BuildAppStage(stage.BootingStage):
|
||||
webhook_service_inst = webhook_service.WebhookService(ap)
|
||||
ap.webhook_service = webhook_service_inst
|
||||
|
||||
workflow_service_inst = workflow_service.WorkflowService(ap)
|
||||
ap.workflow_service = workflow_service_inst
|
||||
|
||||
proxy_mgr = proxy.ProxyManager(ap)
|
||||
await proxy_mgr.initialize()
|
||||
ap.proxy_mgr = proxy_mgr
|
||||
|
||||
@@ -221,3 +221,52 @@ class LoadConfigStage(stage.BootingStage):
|
||||
ap.pipeline_config_meta_safety = await load_resource_yaml_template_data('metadata/pipeline/safety.yaml')
|
||||
ap.pipeline_config_meta_ai = await load_resource_yaml_template_data('metadata/pipeline/ai.yaml')
|
||||
ap.pipeline_config_meta_output = await load_resource_yaml_template_data('metadata/pipeline/output.yaml')
|
||||
|
||||
# Load workflow node configurations from YAML files
|
||||
ap.workflow_node_configs = {}
|
||||
node_config_files = [
|
||||
# Trigger nodes
|
||||
'metadata/nodes/message_trigger.yaml',
|
||||
'metadata/nodes/cron_trigger.yaml',
|
||||
'metadata/nodes/webhook_trigger.yaml',
|
||||
'metadata/nodes/event_trigger.yaml',
|
||||
# AI/Process nodes
|
||||
'metadata/nodes/llm_call.yaml',
|
||||
'metadata/nodes/question_classifier.yaml',
|
||||
'metadata/nodes/parameter_extractor.yaml',
|
||||
'metadata/nodes/knowledge_retrieval.yaml',
|
||||
'metadata/nodes/code_executor.yaml',
|
||||
'metadata/nodes/data_transform.yaml',
|
||||
# Control nodes
|
||||
'metadata/nodes/condition.yaml',
|
||||
'metadata/nodes/switch.yaml',
|
||||
'metadata/nodes/loop.yaml',
|
||||
'metadata/nodes/parallel.yaml',
|
||||
'metadata/nodes/wait.yaml',
|
||||
'metadata/nodes/end.yaml',
|
||||
# Action nodes
|
||||
'metadata/nodes/send_message.yaml',
|
||||
'metadata/nodes/http_request.yaml',
|
||||
# Integration nodes - Data & Tools
|
||||
'metadata/nodes/database_query.yaml',
|
||||
'metadata/nodes/redis_operation.yaml',
|
||||
'metadata/nodes/mcp_tool.yaml',
|
||||
'metadata/nodes/memory_store.yaml',
|
||||
# Integration nodes - External services
|
||||
'metadata/nodes/dify_workflow.yaml',
|
||||
'metadata/nodes/dify_knowledge_query.yaml',
|
||||
'metadata/nodes/n8n_workflow.yaml',
|
||||
'metadata/nodes/langflow_flow.yaml',
|
||||
'metadata/nodes/coze_bot.yaml',
|
||||
]
|
||||
for config_file in node_config_files:
|
||||
try:
|
||||
node_config = await load_resource_yaml_template_data(config_file)
|
||||
node_name = node_config.get('name')
|
||||
node_category = node_config.get('category', 'misc')
|
||||
if node_name:
|
||||
# Use category.name format to match node type format (e.g., integration.coze_bot)
|
||||
full_type = f'{node_category}.{node_name}'
|
||||
ap.workflow_node_configs[full_type] = node_config
|
||||
except Exception as e:
|
||||
print(f'Failed to load node config {config_file}: {e}')
|
||||
|
||||
Reference in New Issue
Block a user