| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- import request from '../utils/request'
- /**
- * 工作流 API。
- *
- * 路由策略(方案C):URL 路径参数统一使用 name(kebab-case);
- * 旧数字 id 作为字符串传入时也可被后端 getWorkflow(nameOrId) 兜底解析。
- */
- export function getWorkflows(params = {}) {
- return request.get('/workflows', { params })
- }
- export function setWorkflowCategory(nameOrId, categoryId) {
- return request.put(`/workflows/${nameOrId}/category`, { categoryId })
- }
- export function getWorkflow(nameOrId) {
- return request.get(`/workflows/${nameOrId}`)
- }
- export function createWorkflow(data) {
- return request.post('/workflows', data)
- }
- export function saveWorkflow(nameOrId, data) {
- return request.post(`/workflows/${nameOrId}/save`, data)
- }
- export function deleteWorkflow(nameOrId) {
- return request.post(`/workflows/${nameOrId}/delete`)
- }
- /**
- * 运行工作流(POST SSE 流式响应)
- * 支持文件/目录上传:使用 FormData 提交
- * paths 为每个文件在工作目录中的相对路径(目录上传时保留目录结构)
- * 返回原生 fetch Response,需自行解析 SSE 流
- */
- export function runWorkflow(nameOrId, inputs, files = [], paths = []) {
- const formData = new FormData()
- formData.append('inputs', JSON.stringify(inputs || {}))
- files.forEach((file, i) => {
- formData.append('files', file)
- formData.append('paths', paths[i] || file.name)
- })
- return fetch(`/api/workflows/${nameOrId}/run`, {
- method: 'POST',
- body: formData
- })
- }
- /**
- * v1.1:断线重连入口 —— 按 runId 重新订阅 SSE。
- * 客户端 reader.read() 抛错时记录 lastEventId 后通过此端点续接。
- * 返回原生 fetch Response,需自行解析 SSE 流(与 runWorkflow 一致)。
- *
- * @param {string} runId 工作流运行 ID
- * @param {number} lastEventId 上次收到的最大事件 id(来自 SSE event.id 字段)
- */
- export function reconnectRunStream(runId, lastEventId) {
- const url = `/api/workflows/runs/${runId}/stream`
- + (lastEventId != null ? `?lastEventId=${lastEventId}` : '')
- return fetch(url)
- }
- /**
- * v1.1:查询运行状态 + 当前未答暂停点。
- * 用户离开几小时后回来时,前端先调此端点:
- * 若 status=RUNNING 且 currentPause 非空,立即恢复 Askfor UI;
- * 然后再调 reconnectRunStream 续接 SSE。
- */
- export function getRunState(runId) {
- return request.get(`/workflows/runs/${runId}/state`)
- }
- /**
- * v1.1:提交用户对 clarify_request 的回答。
- * 唤醒后端 Bridge 中阻塞等待的 Hermes Agent 线程,工作流继续执行。
- */
- export function submitClarifyAnswer(runId, clarifyId, answer) {
- return request.post(`/workflows/runs/${runId}/resume`, { clarifyId, answer })
- }
- /**
- * 自动关联分析:识别 Skill/SmartAction 节点隐式引用的其他 Skill
- */
- export function autoAssociate(graphData) {
- return request.post('/workflows/auto-associate', { graphData })
- }
- // ==================== 版本管理 ====================
- export function listWorkflowVersions(nameOrId) {
- return request.get(`/workflows/${nameOrId}/versions`)
- }
- export function getWorkflowVersionContent(nameOrId, version) {
- return request.get(`/workflows/${nameOrId}/versions/${version}/content`)
- }
- export function rollbackWorkflowVersion(nameOrId, version) {
- return request.post(`/workflows/${nameOrId}/versions/${version}/rollback`)
- }
- export function updateWorkflowVersionMessage(nameOrId, version, message) {
- return request.put(`/workflows/${nameOrId}/versions/${version}/message`, { message })
- }
|