/** Durable dream inputs and passive notes, admitted once per request ID. */ import { defineTask } from '@earendil-works/pi-durable' const terminal = {status:'terminal',outcome:{status:'completed',result:null}} as const export const deliverTask = (host:any) => defineTask({ name:'dream.deliver', version:1, initial:()=>({phase:'submit'}), phases:{submit:async(task,runtime,ctx)=>{ const {to,type,requestId,kind,data,content}=task.input const target=(await host.harness().conversation(to,ctx))! await target.submit(type==='input' ? {type,requestId,content,entry:{kind,data},whenBusy:'followUp'} : {type,requestId,entry:{kind,data,model:[{role:'user',content,timestamp:Date.now()}]}},ctx) await runtime.commit(()=>terminal,ctx) }}, abort:(_task,runtime,ctx)=>runtime.commit(()=>({status:'terminal',outcome:{status:'aborted'}}),ctx), }) export const deliver = (host:any,tx:any,to:number,delivery:any) => tx.createTask(deliverTask(host),{to,...delivery},{conversationId:to,ownership:{kind:'conversation'},background:true})