yumoqing b556ab0cdc feat: task center - human task interaction, artifact view, restart capability
- Add human task dspy: human_complete, human_list, approval_approve, approval_reject
- Add task_restart.dspy for restarting completed/failed tasks
- Enhance task_detail.ui: inline human task forms, approval buttons, restart
- New step_panel.ui: view/modify step artifacts with cascade rerun
- Update task_list.ui: Tabular with search_form filter by pipeline/state
- Update index.ui: embed task list Tabular inline
- Update load_path.py: register new dspy/ui paths
2026-07-08 21:03:32 +08:00

61 lines
2.0 KiB
Python

"""pipeline_task 交互模块 — 产线任务的用户交互层。
纯薄交互层,无数据表。通过 ServerEnv 调用 pipeline-service 的函数。
任何宿主加载 pipeline_service 后,再加载 pipeline_task 即可使用。
"""
import json
from ahserver.serverenv import ServerEnv
MODULE_NAME = "pipeline_task"
MODULE_VERSION = "1.1.0"
def load_pipeline_task():
"""注册交互模块到 ServerEnv。"""
env = ServerEnv()
env.pipeline_task_info = lambda: {
"module": MODULE_NAME,
"version": MODULE_VERSION,
"depends_on": "pipeline_service",
}
# Jinja2 helper: preload task data for detail page rendering
async def get_task_data(request):
"""Load task detail data for Jinja2 template rendering."""
env_ns = request._run_ns
task_id = env_ns.params_kw.get('task_id', '')
if not task_id:
return {'success': False, 'message': '缺少task_id'}
try:
tenant_id = (await env_ns.get_userorgid()) or '0'
result_raw = await env.pipeline_detail(tenant_id, task_id)
data = json.loads(result_raw)
return data
except Exception as e:
return {'success': False, 'message': str(e)}
env.get_task_data = get_task_data
# Jinja2 helper: preload step node artifact data
async def get_step_node_data(request):
"""Load artifact data for step_panel Jinja2 template."""
env_ns = request._run_ns
task_id = env_ns.params_kw.get('task_id', '')
step_name = env_ns.params_kw.get('step_name', '')
if not task_id or not step_name:
return {'success': False, 'message': '缺少参数'}
try:
tenant_id = (await env_ns.get_userorgid()) or '0'
result_raw = await env.pipeline_node(tenant_id, task_id, step_name)
data = json.loads(result_raw)
return data
except Exception as e:
return {'success': False, 'message': str(e)}
env.get_step_node_data = get_step_node_data
return True