UNPKG

eve

Version:

Filesystem-first framework for durable backend AI agents that run anywhere.

1 lines • 2.16 kB
import{sessionCommandHookToken}from"#execution/session-inbox/address.js";import{readWorkflowTaskView,recordWorkflowTaskView}from"#harness/workflow-tool-runs.js";import{sendTaskCommand}from"#execution/tasks/parent/run-parent.js";import"#tasks/types.js";import{createTaskControlError,createTaskViewsResult,createUnknownTasksError,lookupTaskEntries}from"#execution/tasks/parent/control-shared.js";import{notifyTaskParent}from"#execution/tasks/child/notify.js";import{cancelTaskOwnedWork}from"#execution/tasks/parent/task-cancel.js";import{TASK_CANCEL_TOOL_NAME,TASK_TOOL_NAMES}from"#tools/framework/task-contract.js";function isTaskControlAction(e){return e.kind===`tool-call`&&TASK_TOOL_NAMES.has(e.toolName)}async function executeTaskControlAction(e){let{action:t}=e,n=e.session,r=readTaskIds(t.input);if(r===void 0||r.length===0)return{result:createTaskControlError(t,"Provide a non-empty `taskIds` array."),session:n};let i=lookupTaskEntries(n,r);if(i.kind===`unknown`)return{result:createUnknownTasksError(t,i.unknown),session:n};if(t.toolName!==TASK_CANCEL_TOOL_NAME)return{result:createTaskControlError(t,`Unsupported task control "${t.toolName}".`),session:n};let a=[];for(let t of i.entries){let r=await cancelOwnedTask({cancelOwnedWork:e.cancelOwnedWork,entry:t,serializedContext:e.serializedContext,session:n});n={...n,state:recordWorkflowTaskView(n.state,r)},a.push(r)}return{result:createTaskViewsResult(t,a),session:n}}async function cancelOwnedTask(e){let t=readWorkflowTaskView(e.entry.task);if(t!==void 0&&t.status!==`cancelled`)return t;let n=t??{metadata:e.entry.task.metadata,status:`cancelled`,taskId:e.entry.task.taskId};return await sendTaskCommand({command:{kind:`cancel`},taskInboxToken:e.entry.address.hookToken}),await cancelTaskOwnedWork({cancelOwnedWork:e.cancelOwnedWork,entry:e.entry,serializedContext:e.serializedContext,session:e.session}),e.session!==void 0&&await notifyTaskParent({token:sessionCommandHookToken(e.session.sessionId),view:n}),n}function readTaskIds(e){let t=e.taskIds;if(Array.isArray(t))return t.filter(e=>typeof e==`string`&&e.trim()!==``)}export{cancelOwnedTask,executeTaskControlAction,isTaskControlAction};