- 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
61 lines
2.0 KiB
Python
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
|