@alook/app 0.0.72 → 0.0.73

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/bundled/web/.open-next/.build/durable-objects/queue.js +5 -5
  2. package/bundled/web/.open-next/assets/BUILD_ID +1 -1
  3. package/bundled/web/.open-next/assets/_next/static/chunks/08q1jdm7c98jd.js +63 -0
  4. package/bundled/web/.open-next/assets/_next/static/chunks/{0ymb~iviyjlb_.js → 0o3ol51uyvngq.js} +2 -2
  5. package/bundled/web/.open-next/assets/_next/static/chunks/{0_ceurra~p4yl.js → 0r91umgrdcg_w.js} +2 -2
  6. package/bundled/web/.open-next/assets/_next/static/chunks/0z1nxwsyi9qzp.js +1 -0
  7. package/bundled/web/.open-next/cache/{UKi2wJge4r06KGiZ66_h- → hO1_nTdFBzjO6p-ajc4L9}/_global-error.cache +1 -1
  8. package/bundled/web/.open-next/cache/{UKi2wJge4r06KGiZ66_h- → hO1_nTdFBzjO6p-ajc4L9}/_not-found.cache +1 -1
  9. package/bundled/web/.open-next/cache/{UKi2wJge4r06KGiZ66_h- → hO1_nTdFBzjO6p-ajc4L9}/sitemap.xml.cache +1 -1
  10. package/bundled/web/.open-next/cloudflare/cache-assets-manifest.sql +1 -1
  11. package/bundled/web/.open-next/cloudflare/init.js +1 -1
  12. package/bundled/web/.open-next/dynamodb-provider/dynamodb-cache.json +1 -1
  13. package/bundled/web/.open-next/middleware/handler.mjs +3 -3
  14. package/bundled/web/.open-next/server-functions/default/src/web/.next/BUILD_ID +1 -1
  15. package/bundled/web/.open-next/server-functions/default/src/web/.next/build-manifest.json +3 -3
  16. package/bundled/web/.open-next/server-functions/default/src/web/.next/prerender-manifest.json +3 -3
  17. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/studio/new/page_client-reference-manifest.js +1 -1
  18. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/activity/page_client-reference-manifest.js +1 -1
  19. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/chat/[convId]/page_client-reference-manifest.js +1 -1
  20. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/chat/page_client-reference-manifest.js +1 -1
  21. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/email/page_client-reference-manifest.js +1 -1
  22. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/files/page_client-reference-manifest.js +1 -1
  23. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/meetings/page_client-reference-manifest.js +1 -1
  24. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/[id]/page_client-reference-manifest.js +1 -1
  25. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/new/page_client-reference-manifest.js +1 -1
  26. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/agents/page_client-reference-manifest.js +1 -1
  27. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/calendar/page_client-reference-manifest.js +1 -1
  28. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/flags/page_client-reference-manifest.js +1 -1
  29. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/help/email-setup/page_client-reference-manifest.js +1 -1
  30. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/home/page_client-reference-manifest.js +1 -1
  31. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/issues/page_client-reference-manifest.js +1 -1
  32. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/runtimes/page_client-reference-manifest.js +1 -1
  33. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/settings/page_client-reference-manifest.js +1 -1
  34. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/threads/[traceId]/page_client-reference-manifest.js +1 -1
  35. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/threads/page_client-reference-manifest.js +1 -1
  36. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/w/[slug]/unread/page_client-reference-manifest.js +1 -1
  37. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/app/(app)/workspaces/page_client-reference-manifest.js +1 -1
  38. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__02wurdb._.js +1 -1
  39. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0dkg608._.js +1 -1
  40. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0p769.0._.js +1 -1
  41. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0s9v7kt._.js +1 -1
  42. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/[root-of-the-server]__0v.x5_r._.js +1 -1
  43. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0-r4t0g._.js +1 -1
  44. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_05_d3df._.js +1 -1
  45. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_06.am62._.js +1 -1
  46. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_07-798_._.js +1 -1
  47. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_08mdiy6._.js +1 -1
  48. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0csh82a._.js +1 -1
  49. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0j.pt~7._.js +1 -1
  50. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0j1t6f2._.js +1 -1
  51. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0lmedw9._.js +1 -1
  52. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0ns9.qo._.js +1 -1
  53. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/_0u3tu2x._.js +2 -2
  54. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/src_0q3gvkd._.js +1 -1
  55. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/[root-of-the-server]__0r2s1aj._.js +1 -1
  56. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/_0y3mwm6._.js +1 -1
  57. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/_11~t2ti._.js +1 -1
  58. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/chunks/ssr/src_web_src_0~23g-y._.js +2 -2
  59. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/middleware-build-manifest.js +3 -3
  60. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/middleware-manifest.json +5 -5
  61. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/server-reference-manifest.js +1 -1
  62. package/bundled/web/.open-next/server-functions/default/src/web/.next/server/server-reference-manifest.json +1 -1
  63. package/bundled/web/.open-next/server-functions/default/src/web/handler.mjs +17 -17
  64. package/bundled/web/.open-next/server-functions/default/src/web/handler.mjs.meta.json +53 -53
  65. package/bundled/web/.open-next/server-functions/default/src/web/index.mjs +3 -3
  66. package/package.json +1 -1
  67. package/bundled/web/.open-next/assets/_next/static/chunks/08u3p1v8e1gxg.js +0 -63
  68. package/bundled/web/.open-next/assets/_next/static/chunks/0ua2sdw9pqxwv.js +0 -1
  69. /package/bundled/web/.open-next/assets/_next/static/{UKi2wJge4r06KGiZ66_h- → hO1_nTdFBzjO6p-ajc4L9}/_buildManifest.js +0 -0
  70. /package/bundled/web/.open-next/assets/_next/static/{UKi2wJge4r06KGiZ66_h- → hO1_nTdFBzjO6p-ajc4L9}/_clientMiddlewareManifest.js +0 -0
  71. /package/bundled/web/.open-next/assets/_next/static/{UKi2wJge4r06KGiZ66_h- → hO1_nTdFBzjO6p-ajc4L9}/_ssgManifest.js +0 -0
  72. /package/bundled/web/.open-next/cache/{UKi2wJge4r06KGiZ66_h- → hO1_nTdFBzjO6p-ajc4L9}/robots.txt.cache +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[726089,e=>{"use strict";var t=e.i(291484);e.i(700598);var a=e.i(704024);let s=(0,e.i(726527).createLogger)({service:"broadcast"});async function r(e,r,i){let n;try{let{env:a}=(0,t.getCloudflareContext)();n=a.DEV_WS_DO_URL;let o=await a.WS_DO_WORKER.fetch(`http://internal${e}`,{method:"POST",body:r});if(o.ok)return;s.warn("broadcast service-binding non-ok",{...i,status:o.status});return}catch{}let o=n||a.DEV_WS_DO_URL;try{let t=await fetch(`${o}${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:r});t.ok||s.warn("broadcast failed",{...i,status:t.status})}catch(e){s.warn("broadcast error",{...i,err:String(e)})}}e.s(["broadcastToUser",0,function(e,a){return function(e,a,s){let i=r(e,a,s);try{let{ctx:e}=(0,t.getCloudflareContext)();e.waitUntil(i)}catch{}return i}(`/broadcast/user/${e}`,JSON.stringify(a),{userId:e,type:a.type})}])},799579,e=>{"use strict";e.i(700598);let t=(0,e.i(726527).createLogger)({service:"web",level:process.env.ALOOK_LOG_LEVEL||"info",pretty:!1});e.s(["log",0,t])},205054,e=>{"use strict";e.i(700598);var t=e.i(291109),a=e.i(704024),s=e.i(799579),r=e.i(726089),i=e.i(740580),n=e.i(774078);let o=t.queries.task,l=t.queries.agent,d=t.queries.message,c=t.queries.conversation,u=t.queries.issue;e.s(["TaskService",0,class{db;constructor(e){this.db=e}async enqueueTask(e,t,s,r,i=a.TASK_TYPES.USER_DM_MESSAGE,d){let c=await l.getAgent(this.db,e,s);if(!c)throw Error("agent not found");if(!c.runtimeId)throw Error("agent has no runtime");if(d?.traceId&&d.parentTaskId&&await o.countTasksByTrace(this.db,d.traceId)>=a.MAX_TASKS_PER_TRACE)throw Error(`Trace limit reached (${a.MAX_TASKS_PER_TRACE} tasks). This may indicate an infinite loop between agents.`);let u=await o.createTask(this.db,{agentId:e,runtimeId:c.runtimeId,workspaceId:s,conversationId:t,prompt:r,type:i,contextKey:d?.contextKey??null,priority:0,context:d?.context,traceId:d?.traceId??null,parentTaskId:d?.parentTaskId??null});return(0,n.invalidate)(n.cacheKeys.activeTaskCounts(s)).catch(()=>{}),u}async claimTask(e,t){let a=await l.getAgent(this.db,e,t);if(!a)return null;if(await o.countRunningTasks(this.db,e,t)>=a.maxConcurrentTasks){let s=await o.findSteerableReplacement(this.db,e,t);if(!s||await o.countRunningTasks(this.db,e,t,s.predecessorId)>=a.maxConcurrentTasks)return null}let s=await o.claimTask(this.db,e,t);return s?(await l.updateAgentStatus(this.db,e,t,"working"),s):null}async claimTasksForRuntimes(e,t,a){let s=await o.claimKillTasks(this.db,e,a,t),r=t-s.length,i=r>0?await o.listPendingTasksByRuntimes(this.db,e,a):[],n=new Set(e),l=new Set,d=[...s],c=[];for(let e of i){if(c.length>=r)break;let t=`${e.agentId}:${e.workspaceId}`;l.has(t)||(l.add(t),c.push(e))}for(let e of(await Promise.all(c.map(e=>this.claimTask(e.agentId,e.workspaceId)))))e&&n.has(e.runtimeId)&&d.push(e);return d}async startTask(e,t){let a=await o.startTask(this.db,e,t);if(!a)throw Error("task not in dispatched status");return a}async completeTask(e,t,a,r){let i;try{i=JSON.parse(a)}catch{i={raw:a}}let n=await o.completeTask(this.db,e,t,{result:i,sessionId:r||null});if(!n){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`completeTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot complete task in '${a}' status`)}let l=i,c="string"==typeof l?.output?l.output:"";return c&&await d.createMessage(this.db,{conversationId:n.conversationId,role:"assistant",content:c,taskId:e}),await this.reconcileAgentStatus(n.agentId,n.workspaceId),await this.dispatchNextBufferedMessage(n.conversationId,n.workspaceId),n}async failTask(e,t,r){let i=await o.failTask(this.db,e,t,r);if(!i){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`failTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot fail task in '${a}' status`)}return i.type===a.TASK_TYPES.KILL_TASK||(r&&await d.createMessage(this.db,{conversationId:i.conversationId,role:"assistant",content:`Error: ${r}`,taskId:e}),await this.reconcileAgentStatus(i.agentId,i.workspaceId),await this.syncIssueStatusFromTask(i,"failed"),await this.dispatchNextBufferedMessage(i.conversationId,i.workspaceId)),i}async syncIssueStatusFromTask(e,t){if(e.type!==a.TASK_TYPES.ISSUE_EVENT)return;let s=await u.getIssueByConversation(this.db,e.conversationId,e.workspaceId);if(!s||s.status===t||!await u.updateIssue(this.db,s.id,e.workspaceId,{status:t}))return;let n=await d.createMessage(this.db,{conversationId:e.conversationId,role:"event",content:`Issue status changed: ${s.status} -> ${t}`,taskId:e.id,metadata:JSON.stringify({issueId:s.id})});try{let t=await c.getConversation(this.db,e.conversationId,e.workspaceId);t&&(0,r.broadcastToUser)(t.userId,{type:"conversation.message",conversationId:e.conversationId,message:(0,i.messageToResponse)(n)}).catch(()=>{})}catch{}}async supersedeTask(e,t){let a=await o.supersedeTask(this.db,e,t);if(!a){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`supersedeTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot supersede task in '${a}' status`)}return await this.reconcileAgentStatus(a.agentId,a.workspaceId),await this.dispatchNextBufferedMessage(a.conversationId,a.workspaceId),a}async retryTask(e,t){let a=await o.getTask(this.db,e);if(!a||a.workspaceId!==t)throw Error("task not found");if("failed"!==a.status)throw Error("only failed tasks can be retried");let s=await o.markFailedAsSuperseded(this.db,e,t);if(!s)throw Error("failed to mark task as superseded");return{oldTask:s,newTask:await this.enqueueTask(a.agentId,a.conversationId,t,a.prompt,a.type,{contextKey:a.contextKey??null,context:a.context,traceId:a.traceId??null,parentTaskId:a.parentTaskId??null})}}async cancelActiveTask(e,t,s){let r=await o.getActiveTaskByConversation(this.db,e,t);if(!r)return null;let i=await o.cancelTask(this.db,r.id,t);return i?(("dispatched"===r.status||"running"===r.status)&&await o.createTask(this.db,{agentId:r.agentId,runtimeId:r.runtimeId,workspaceId:t,conversationId:e,prompt:"",type:a.TASK_TYPES.KILL_TASK,context:{target_task_id:r.id}}),await d.createMessage(this.db,{conversationId:e,role:"assistant",content:s?.reason??"Task cancelled by user",taskId:r.id}),await this.reconcileAgentStatus(r.agentId,t),s?.skipDispatch||await this.dispatchNextBufferedMessage(e,t),i):null}async reconcileAgentStatus(e,t){let a=await o.countRunningTasks(this.db,e,t);await l.updateAgentStatus(this.db,e,t,a>0?"working":"idle"),(0,n.invalidate)(n.cacheKeys.activeTaskCounts(t)).catch(()=>{})}async dispatchNextBufferedMessage(e,t){let n=await d.activateNextBufferedMessage(this.db,e);if(!n)return null;let l=await c.getConversation(this.db,e,t);if(!l)return s.log.warn("dispatchNextBufferedMessage: conversation not found",{conversationId:e}),await d.revertToBuffered(this.db,n.id).catch(e=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:n.id,revertErr:e})}),null;let u=l.userId;try{let s=n.attachmentIds?JSON.parse(n.attachmentIds):[],c=await o.getLatestTaskForConversation(this.db,e),p=c?.traceId??null,h=await this.enqueueTask(l.agentId,e,t,n.content,a.TASK_TYPES.USER_DM_MESSAGE,{contextKey:e,context:s.length>0?{attachment_ids:s}:void 0,traceId:p,parentTaskId:null});return await d.updateMessageTaskId(this.db,n.id,h.id),(0,r.broadcastToUser)(u,{type:"followup.dispatched",conversationId:e,message:(0,i.messageToResponse)(n),task:(0,i.taskToResponse)(h)}).catch(()=>{}),h}catch(t){return s.log.warn("dispatchNextBufferedMessage: enqueueTask failed",{conversationId:e,err:t}),await d.revertToBuffered(this.db,n.id).catch(e=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:n.id,revertErr:e})}),(0,r.broadcastToUser)(u,{type:"followup.dispatch_failed",conversationId:e,messageId:n.id,error:t instanceof Error?t.message:"Failed to dispatch follow-up"}).catch(()=>{}),null}}async cancelTrace(e,t,a){for(let r of[...new Set((await o.getTraceTree(this.db,e,t)).filter(e=>["queued","dispatched","running"].includes(e.status)).map(e=>e.conversationId))])try{await this.cancelActiveTask(r,t,{skipDispatch:!0,reason:a?.reason})}catch(t){s.log.warn("cancelTrace: failed to cancel task",{traceId:e,convId:r,err:t})}}}])},764083,e=>{"use strict";e.s(["filterVisibleAgents",0,function(e,t,a){let s=new Set(a.filter(e=>e.userId===t).map(e=>e.agentId));return e.filter(e=>"public"===e.visibility||e.ownerId===t||s.has(e.id))}])},587860,e=>e.a(async(t,a)=>{try{var s=e.i(291484);e.i(700598);var r=e.i(291109),i=e.i(424166),n=e.i(469187),o=e.i(888247),l=e.i(704024),d=e.i(675139),c=e.i(152327),u=e.i(47962),p=e.i(776227),h=e.i(740580),w=e.i(205054),g=e.i(774078),f=e.i(764083),m=t([c]);[c]=m.then?(await m)():m;let k=(0,c.withAuth)(async(e,t)=>{let a=await (0,u.withWorkspaceMember)(e,t);if(a instanceof Response)return a;let{env:i}=(0,s.getCloudflareContext)(),n=(0,d.getReadDb)(i.DB),[o,l]=await Promise.all([(0,g.cached)(g.cacheKeys.allAgents(a.workspaceId),300,()=>r.queries.agent.getAllAgentsForWorkspace(n,a.workspaceId)),(0,g.cached)(g.cacheKeys.allAgentAccess(a.workspaceId),300,()=>r.queries.agentAccess.getAllAgentAccessForWorkspace(n,a.workspaceId))]),c=(0,f.filterVisibleAgents)(o,t.userId,l);return(0,p.writeJSON)(c.map(h.agentToResponse))}),I=(0,c.withAuth)(async(e,t)=>{let a=await (0,u.withWorkspaceMember)(e,t);if(a instanceof Response)return a;let{env:c}=(0,s.getCloudflareContext)(),f=(0,d.getDb)(c.DB),[m,k]=await (0,p.parseBody)(e,o.CreateAgentRequestSchema);if(k)return k;let I=m.name.trim(),y=m.runtime_id,T=m.max_concurrent_tasks||0;T<=0&&(T=6);let v="string"==typeof m.email_handle?m.email_handle.trim().toLowerCase():"";if(v){if(!(0,i.isValidHandle)(v))return(0,p.writeError)("email_handle must be 4+ alphanumeric/dash characters",400);if(await r.queries.agent.getAgentByHandle(f,v))return(0,p.writeError)("Handle already taken",409)}let _=await r.queries.runtime.getAgentRuntimeForWorkspace(f,y,a.workspaceId);if(!_)return(0,p.writeError)("runtime not found in workspace",404);let b=m.runtime_config,A=b?{..."string"==typeof b.model?{model:b.model}:{}}:null,S=await r.queries.agent.createAgent(f,{workspaceId:a.workspaceId,name:I,description:m.description,instructions:m.instructions,runtimeId:y,runtimeMode:_.runtimeMode,runtimeConfig:A,visibility:"private",maxConcurrentTasks:T,ownerId:t.userId,emailHandle:v||null,avatarUrl:m.avatar_url??null});if(v&&t.email&&await r.queries.whitelist.addWhitelist(f,S.id,a.workspaceId,t.email.toLowerCase()),await Promise.all([(0,g.invalidate)(g.cacheKeys.allAgents(a.workspaceId)),(0,g.invalidate)(g.cacheKeys.allHandles(a.workspaceId)),(0,g.invalidate)(g.cacheKeys.allAgentAccess(a.workspaceId))]),S.runtimeId&&S.emailHandle&&t.email&&(0,n.isOnline)(_.machineLastSeenAt))try{let e=await r.queries.conversation.createConversation(f,{workspaceId:a.workspaceId,agentId:S.id,userId:t.userId,title:`Welcome: ${t.email}`.slice(0,50),type:l.TASK_TYPES.EMAIL_NOTIFICATION}),s=new w.TaskService(f);await s.enqueueTask(S.id,e.id,a.workspaceId,`You have just been created by your owner (${t.email}). Please send them a welcome email introducing yourself as "${I}". In the email: 1) Introduce yourself warmly — your name, your email address, and what you can help with. 2) Briefly introduce the Alook platform — a personal AI agent platform where agents can handle emails, schedule tasks, and work autonomously. 3) Let them know they can chat with you directly or email you anytime. Be warm, professional, and concise.`,l.TASK_TYPES.EMAIL_NOTIFICATION);let i=new Date().toISOString().slice(0,10);(0,g.invalidate)(g.cacheKeys.overviewTaskStats(a.workspaceId,i)).catch(()=>{})}catch{}if((0,n.isOnline)(_.machineLastSeenAt)){let e=new w.TaskService(f);await e.reconcileAgentStatus(S.id,a.workspaceId);let s=await r.queries.agent.getAgent(f,S.id,a.workspaceId,t.userId);if(s)return(0,p.writeJSON)((0,h.agentToResponse)(s),201)}return(0,p.writeJSON)((0,h.agentToResponse)(S),201)});e.s(["GET",0,k,"POST",0,I]),a()}catch(e){a(e)}},!1),672424,e=>e.a(async(t,a)=>{try{var s=e.i(80774),r=e.i(404478),i=e.i(732985),n=e.i(481671),o=e.i(638081),l=e.i(204960),d=e.i(924918),c=e.i(363585),u=e.i(906846),p=e.i(359838),h=e.i(383303),w=e.i(234173),g=e.i(270215),f=e.i(830665),m=e.i(944002),k=e.i(193695);e.i(195928);var I=e.i(81543),y=e.i(587860),T=t([y]);[y]=T.then?(await T)():T;let _=new s.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/agents/route",pathname:"/api/agents",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/web/src/app/api/agents/route.ts",nextConfigOutput:"standalone",userland:y,...{}}),{workAsyncStorage:b,workUnitAsyncStorage:A,serverHooks:S}=_;async function v(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),_.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let s="/api/agents/route";s=s.replace(/\/index$/,"")||"/";let i=await _.prepare(e,t,{srcPage:s,multiZoneDraftMode:!1});if(!i)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:y,deploymentId:T,params:v,nextConfig:b,parsedUrl:A,isDraftMode:S,prerenderManifest:R,routerServerContext:E,isOnDemandRevalidate:C,revalidateOnlyGenerated:x,resolvedPathname:N,clientReferenceManifest:P,serverActionsManifest:O}=i,M=(0,d.normalizeAppPath)(s),q=!!(R.dynamicRoutes[M]||R.routes[N]),K=async()=>((null==E?void 0:E.render404)?await E.render404(e,t,A,!1):t.end("This page could not be found"),null);if(q&&!S){let e=!!R.routes[N],t=R.dynamicRoutes[M];if(t&&!1===t.fallback&&!e){if(b.adapterPath)return await K();throw new k.NoFallbackError}}let B=null;!q||_.isDev||S||(B=N,B="/index"===B?"/":B);let $=!0===_.isDev||!q,D=q&&!$;O&&P&&(0,l.setManifestsSingleton)({page:s,clientReferenceManifest:P,serverActionsManifest:O});let U=e.method||"GET",L=(0,o.getTracer)(),H=L.getActiveScopeSpan(),j=!!(null==E?void 0:E.isWrappedByNextServer),F=!!(0,n.getRequestMeta)(e,"minimalMode"),W=(0,n.getRequestMeta)(e,"incrementalCache")||await _.getIncrementalCache(e,b,R,F);null==W||W.resetRequestCache(),globalThis.__incrementalCache=W;let V={params:v,previewProps:R.preview,renderOpts:{experimental:{authInterrupts:!!b.experimental.authInterrupts},cacheComponents:!!b.cacheComponents,supportsDynamicResponse:$,incrementalCache:W,cacheLifeProfiles:b.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,s,r)=>_.onRequestError(e,t,s,r,E)},sharedContext:{buildId:y,deploymentId:T}},Y=new c.NodeNextRequest(e),G=new c.NodeNextResponse(t),J=u.NextRequestAdapter.fromNodeNextRequest(Y,(0,u.signalFromNodeResponse)(t));try{let i,n=async e=>_.handle(J,V).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let a=L.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=a.get("next.route");if(r){let t=`${U} ${r}`;e.setAttributes({"next.route":r,"http.route":r,"next.span_name":t}),e.updateName(t),i&&i!==e&&(i.setAttribute("http.route",r),i.updateName(t))}else e.updateName(`${U} ${s}`)}),l=async i=>{var o,l;let d=async({previousCacheEntry:r})=>{try{if(!F&&C&&x&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await n(i);e.fetchMetrics=V.renderOpts.fetchMetrics;let o=V.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let l=V.renderOpts.collectedTags;if(!q)return await (0,w.sendResponse)(Y,G,s,V.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,g.toNodeOutgoingHttpHeaders)(s.headers);l&&(t[m.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==V.renderOpts.collectedRevalidate&&!(V.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&V.renderOpts.collectedRevalidate,r=void 0===V.renderOpts.collectedExpire||V.renderOpts.collectedExpire>=m.INFINITE_CACHE?void 0:V.renderOpts.collectedExpire;return{value:{kind:I.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:r}}}}catch(t){throw(null==r?void 0:r.isStale)&&await _.onRequestError(e,t,{routerKind:"App Router",routePath:s,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:C})},!1,E),t}},c=await _.handleResponse({req:e,nextConfig:b,cacheKey:B,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:R,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:x,responseGenerator:d,waitUntil:a.waitUntil,isMinimalMode:F});if(!q)return null;if((null==c||null==(o=c.value)?void 0:o.kind)!==I.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(l=c.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});F||t.setHeader("x-nextjs-cache",C?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),S&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,g.fromNodeOutgoingHttpHeaders)(c.value.headers);return F&&q||u.delete(m.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,f.getCacheControlHeader)(c.cacheControl)),await (0,w.sendResponse)(Y,G,new Response(c.value.body,{headers:u,status:c.value.status||200})),null};j&&H?await l(H):(i=L.getActiveScopeSpan(),await L.withPropagatedContext(e.headers,()=>L.trace(p.BaseServerSpan.handleRequest,{spanName:`${U} ${s}`,kind:o.SpanKind.SERVER,attributes:{"http.method":U,"http.target":e.url}},l),void 0,!j))}catch(t){if(t instanceof k.NoFallbackError||await _.onRequestError(e,t,{routerKind:"App Router",routePath:M,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:C})},!1,E),q)throw t;return await (0,w.sendResponse)(Y,G,new Response(null,{status:500})),null}}e.s(["handler",0,v,"patchFetch",0,function(){return(0,i.patchFetch)({workAsyncStorage:b,workUnitAsyncStorage:A})},"routeModule",0,_,"serverHooks",0,S,"workAsyncStorage",0,b,"workUnitAsyncStorage",0,A]),a()}catch(e){a(e)}},!1),572758,e=>{e.v(t=>Promise.all(["server/chunks/0yh8_@better-auth_memory-adapter_dist_index_mjs_0u9gr83._.js"].map(t=>e.l(t))).then(()=>t(501816)))},409008,e=>{e.v(t=>Promise.all(["server/chunks/0cae_better-auth_dist_adapters_kysely-adapter_index_mjs_0c-9lzd._.js"].map(t=>e.l(t))).then(()=>t(770021)))},96318,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_bun-sqlite-dialect-na--YwnN_mjs_0ua5mwj._.js"].map(t=>e.l(t))).then(()=>t(158195)))},11379,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_node-sqlite-dialect_mjs_0evb.r9._.js"].map(t=>e.l(t))).then(()=>t(302822)))},946743,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_d1-sqlite-dialect-C2B7YsIT_mjs_0bihzky._.js"].map(t=>e.l(t))).then(()=>t(898679)))}];
1
+ module.exports=[726089,e=>{"use strict";var t=e.i(291484);e.i(700598);var a=e.i(704024);let s=(0,e.i(726527).createLogger)({service:"broadcast"});async function r(e,r,i){let n;try{let{env:a}=(0,t.getCloudflareContext)();n=a.DEV_WS_DO_URL;let o=await a.WS_DO_WORKER.fetch(`http://internal${e}`,{method:"POST",body:r});if(o.ok)return;s.warn("broadcast service-binding non-ok",{...i,status:o.status});return}catch{}let o=n||a.DEV_WS_DO_URL;try{let t=await fetch(`${o}${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:r});t.ok||s.warn("broadcast failed",{...i,status:t.status})}catch(e){s.warn("broadcast error",{...i,err:String(e)})}}e.s(["broadcastToUser",0,function(e,a){return function(e,a,s){let i=r(e,a,s);try{let{ctx:e}=(0,t.getCloudflareContext)();e.waitUntil(i)}catch{}return i}(`/broadcast/user/${e}`,JSON.stringify(a),{userId:e,type:a.type})}])},799579,e=>{"use strict";e.i(700598);let t=(0,e.i(726527).createLogger)({service:"web",level:process.env.ALOOK_LOG_LEVEL||"info",pretty:!1});e.s(["log",0,t])},205054,e=>{"use strict";e.i(700598);var t=e.i(291109),a=e.i(704024),s=e.i(799579),r=e.i(726089),i=e.i(740580),n=e.i(774078);let o=t.queries.task,l=t.queries.agent,d=t.queries.message,c=t.queries.conversation,u=t.queries.issue;e.s(["TaskService",0,class{db;constructor(e){this.db=e}async enqueueTask(e,t,s,r,i=a.TASK_TYPES.USER_DM_MESSAGE,d){let c=await l.getAgent(this.db,e,s);if(!c)throw Error("agent not found");if(!c.runtimeId)throw Error("agent has no runtime");if(d?.traceId&&d.parentTaskId&&await o.countTasksByTrace(this.db,d.traceId)>=a.MAX_TASKS_PER_TRACE)throw Error(`Trace limit reached (${a.MAX_TASKS_PER_TRACE} tasks). This may indicate an infinite loop between agents.`);let u=await o.createTask(this.db,{agentId:e,runtimeId:c.runtimeId,workspaceId:s,conversationId:t,prompt:r,type:i,contextKey:d?.contextKey??null,priority:0,context:d?.context,traceId:d?.traceId??null,parentTaskId:d?.parentTaskId??null});return(0,n.invalidate)(n.cacheKeys.activeTaskCounts(s)).catch(()=>{}),u}async claimTask(e,t){let a=await l.getAgent(this.db,e,t);if(!a)return null;if(await o.countRunningTasks(this.db,e,t)>=a.maxConcurrentTasks){let s=await o.findSteerableReplacement(this.db,e,t);if(!s||await o.countRunningTasks(this.db,e,t,s.predecessorId)>=a.maxConcurrentTasks)return null}let s=await o.claimTask(this.db,e,t);return s?(await l.updateAgentStatus(this.db,e,t,"working"),s):null}async claimTasksForRuntimes(e,t,a){let s=await o.claimKillTasks(this.db,e,a,t),r=t-s.length,i=r>0?await o.listPendingTasksByRuntimes(this.db,e,a):[],n=new Set(e),l=new Set,d=[...s],c=[];for(let e of i){if(c.length>=r)break;let t=`${e.agentId}:${e.workspaceId}`;l.has(t)||(l.add(t),c.push(e))}for(let e of(await Promise.all(c.map(e=>this.claimTask(e.agentId,e.workspaceId)))))e&&n.has(e.runtimeId)&&d.push(e);return d}async startTask(e,t){let a=await o.startTask(this.db,e,t);if(!a)throw Error("task not in dispatched status");return a}async completeTask(e,t,a,n){let l;try{l=JSON.parse(a)}catch{l={raw:a}}let u=await o.completeTask(this.db,e,t,{result:l,sessionId:n||null});if(!u){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`completeTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot complete task in '${a}' status`)}let p=l,h="string"==typeof p?.output?p.output:"";if(h){let a=await d.createMessage(this.db,{conversationId:u.conversationId,role:"assistant",content:h,taskId:e});try{let e=await c.getConversation(this.db,u.conversationId,t);e&&(0,r.broadcastToUser)(e.userId,{type:"conversation.message",conversationId:u.conversationId,message:(0,i.messageToResponse)(a)}).catch(()=>{})}catch{}}return await this.reconcileAgentStatus(u.agentId,u.workspaceId),await this.dispatchNextBufferedMessage(u.conversationId,u.workspaceId),u}async failTask(e,t,n){let l=await o.failTask(this.db,e,t,n);if(!l){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`failTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot fail task in '${a}' status`)}if(l.type===a.TASK_TYPES.KILL_TASK)return l;if(n){let a=await d.createMessage(this.db,{conversationId:l.conversationId,role:"assistant",content:`Error: ${n}`,taskId:e});try{let e=await c.getConversation(this.db,l.conversationId,t);e&&(0,r.broadcastToUser)(e.userId,{type:"conversation.message",conversationId:l.conversationId,message:(0,i.messageToResponse)(a)}).catch(()=>{})}catch{}}return await this.reconcileAgentStatus(l.agentId,l.workspaceId),await this.syncIssueStatusFromTask(l,"failed"),await this.dispatchNextBufferedMessage(l.conversationId,l.workspaceId),l}async syncIssueStatusFromTask(e,t){if(e.type!==a.TASK_TYPES.ISSUE_EVENT)return;let s=await u.getIssueByConversation(this.db,e.conversationId,e.workspaceId);if(!s||s.status===t||!await u.updateIssue(this.db,s.id,e.workspaceId,{status:t}))return;let n=await d.createMessage(this.db,{conversationId:e.conversationId,role:"event",content:`Issue status changed: ${s.status} -> ${t}`,taskId:e.id,metadata:JSON.stringify({issueId:s.id})});try{let t=await c.getConversation(this.db,e.conversationId,e.workspaceId);t&&(0,r.broadcastToUser)(t.userId,{type:"conversation.message",conversationId:e.conversationId,message:(0,i.messageToResponse)(n)}).catch(()=>{})}catch{}}async supersedeTask(e,t){let a=await o.supersedeTask(this.db,e,t);if(!a){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`supersedeTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot supersede task in '${a}' status`)}return await this.reconcileAgentStatus(a.agentId,a.workspaceId),await this.dispatchNextBufferedMessage(a.conversationId,a.workspaceId),a}async retryTask(e,t){let a=await o.getTask(this.db,e);if(!a||a.workspaceId!==t)throw Error("task not found");if("failed"!==a.status)throw Error("only failed tasks can be retried");let s=await o.markFailedAsSuperseded(this.db,e,t);if(!s)throw Error("failed to mark task as superseded");return{oldTask:s,newTask:await this.enqueueTask(a.agentId,a.conversationId,t,a.prompt,a.type,{contextKey:a.contextKey??null,context:a.context,traceId:a.traceId??null,parentTaskId:a.parentTaskId??null})}}async cancelActiveTask(e,t,s){let r=await o.getActiveTaskByConversation(this.db,e,t);if(!r)return null;let i=await o.cancelTask(this.db,r.id,t);return i?(("dispatched"===r.status||"running"===r.status)&&await o.createTask(this.db,{agentId:r.agentId,runtimeId:r.runtimeId,workspaceId:t,conversationId:e,prompt:"",type:a.TASK_TYPES.KILL_TASK,context:{target_task_id:r.id}}),await d.createMessage(this.db,{conversationId:e,role:"assistant",content:s?.reason??"Task cancelled by user",taskId:r.id}),await this.reconcileAgentStatus(r.agentId,t),s?.skipDispatch||await this.dispatchNextBufferedMessage(e,t),i):null}async reconcileAgentStatus(e,t){let a=await o.countRunningTasks(this.db,e,t);await l.updateAgentStatus(this.db,e,t,a>0?"working":"idle"),(0,n.invalidate)(n.cacheKeys.activeTaskCounts(t)).catch(()=>{})}async dispatchNextBufferedMessage(e,t){let n=await d.activateNextBufferedMessage(this.db,e);if(!n)return null;let l=await c.getConversation(this.db,e,t);if(!l)return s.log.warn("dispatchNextBufferedMessage: conversation not found",{conversationId:e}),await d.revertToBuffered(this.db,n.id).catch(e=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:n.id,revertErr:e})}),null;let u=l.userId;try{let s=n.attachmentIds?JSON.parse(n.attachmentIds):[],c=await o.getLatestTaskForConversation(this.db,e),p=c?.traceId??null,h=await this.enqueueTask(l.agentId,e,t,n.content,a.TASK_TYPES.USER_DM_MESSAGE,{contextKey:e,context:s.length>0?{attachment_ids:s}:void 0,traceId:p,parentTaskId:null});return await d.updateMessageTaskId(this.db,n.id,h.id),(0,r.broadcastToUser)(u,{type:"followup.dispatched",conversationId:e,message:(0,i.messageToResponse)(n),task:(0,i.taskToResponse)(h)}).catch(()=>{}),h}catch(t){return s.log.warn("dispatchNextBufferedMessage: enqueueTask failed",{conversationId:e,err:t}),await d.revertToBuffered(this.db,n.id).catch(e=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:n.id,revertErr:e})}),(0,r.broadcastToUser)(u,{type:"followup.dispatch_failed",conversationId:e,messageId:n.id,error:t instanceof Error?t.message:"Failed to dispatch follow-up"}).catch(()=>{}),null}}async cancelTrace(e,t,a){for(let r of[...new Set((await o.getTraceTree(this.db,e,t)).filter(e=>["queued","dispatched","running"].includes(e.status)).map(e=>e.conversationId))])try{await this.cancelActiveTask(r,t,{skipDispatch:!0,reason:a?.reason})}catch(t){s.log.warn("cancelTrace: failed to cancel task",{traceId:e,convId:r,err:t})}}}])},764083,e=>{"use strict";e.s(["filterVisibleAgents",0,function(e,t,a){let s=new Set(a.filter(e=>e.userId===t).map(e=>e.agentId));return e.filter(e=>"public"===e.visibility||e.ownerId===t||s.has(e.id))}])},587860,e=>e.a(async(t,a)=>{try{var s=e.i(291484);e.i(700598);var r=e.i(291109),i=e.i(424166),n=e.i(469187),o=e.i(888247),l=e.i(704024),d=e.i(675139),c=e.i(152327),u=e.i(47962),p=e.i(776227),h=e.i(740580),w=e.i(205054),g=e.i(774078),m=e.i(764083),f=t([c]);[c]=f.then?(await f)():f;let k=(0,c.withAuth)(async(e,t)=>{let a=await (0,u.withWorkspaceMember)(e,t);if(a instanceof Response)return a;let{env:i}=(0,s.getCloudflareContext)(),n=(0,d.getReadDb)(i.DB),[o,l]=await Promise.all([(0,g.cached)(g.cacheKeys.allAgents(a.workspaceId),300,()=>r.queries.agent.getAllAgentsForWorkspace(n,a.workspaceId)),(0,g.cached)(g.cacheKeys.allAgentAccess(a.workspaceId),300,()=>r.queries.agentAccess.getAllAgentAccessForWorkspace(n,a.workspaceId))]),c=(0,m.filterVisibleAgents)(o,t.userId,l);return(0,p.writeJSON)(c.map(h.agentToResponse))}),I=(0,c.withAuth)(async(e,t)=>{let a=await (0,u.withWorkspaceMember)(e,t);if(a instanceof Response)return a;let{env:c}=(0,s.getCloudflareContext)(),m=(0,d.getDb)(c.DB),[f,k]=await (0,p.parseBody)(e,o.CreateAgentRequestSchema);if(k)return k;let I=f.name.trim(),y=f.runtime_id,T=f.max_concurrent_tasks||0;T<=0&&(T=6);let v="string"==typeof f.email_handle?f.email_handle.trim().toLowerCase():"";if(v){if(!(0,i.isValidHandle)(v))return(0,p.writeError)("email_handle must be 4+ alphanumeric/dash characters",400);if(await r.queries.agent.getAgentByHandle(m,v))return(0,p.writeError)("Handle already taken",409)}let b=await r.queries.runtime.getAgentRuntimeForWorkspace(m,y,a.workspaceId);if(!b)return(0,p.writeError)("runtime not found in workspace",404);let _=f.runtime_config,A=_?{..."string"==typeof _.model?{model:_.model}:{}}:null,S=await r.queries.agent.createAgent(m,{workspaceId:a.workspaceId,name:I,description:f.description,instructions:f.instructions,runtimeId:y,runtimeMode:b.runtimeMode,runtimeConfig:A,visibility:"private",maxConcurrentTasks:T,ownerId:t.userId,emailHandle:v||null,avatarUrl:f.avatar_url??null});if(v&&t.email&&await r.queries.whitelist.addWhitelist(m,S.id,a.workspaceId,t.email.toLowerCase()),await Promise.all([(0,g.invalidate)(g.cacheKeys.allAgents(a.workspaceId)),(0,g.invalidate)(g.cacheKeys.allHandles(a.workspaceId)),(0,g.invalidate)(g.cacheKeys.allAgentAccess(a.workspaceId))]),S.runtimeId&&S.emailHandle&&t.email&&(0,n.isOnline)(b.machineLastSeenAt))try{let e=await r.queries.conversation.createConversation(m,{workspaceId:a.workspaceId,agentId:S.id,userId:t.userId,title:`Welcome: ${t.email}`.slice(0,50),type:l.TASK_TYPES.EMAIL_NOTIFICATION}),s=new w.TaskService(m);await s.enqueueTask(S.id,e.id,a.workspaceId,`You have just been created by your owner (${t.email}). Please send them a welcome email introducing yourself as "${I}". In the email: 1) Introduce yourself warmly — your name, your email address, and what you can help with. 2) Briefly introduce the Alook platform — a personal AI agent platform where agents can handle emails, schedule tasks, and work autonomously. 3) Let them know they can chat with you directly or email you anytime. Be warm, professional, and concise.`,l.TASK_TYPES.EMAIL_NOTIFICATION);let i=new Date().toISOString().slice(0,10);(0,g.invalidate)(g.cacheKeys.overviewTaskStats(a.workspaceId,i)).catch(()=>{})}catch{}if((0,n.isOnline)(b.machineLastSeenAt)){let e=new w.TaskService(m);await e.reconcileAgentStatus(S.id,a.workspaceId);let s=await r.queries.agent.getAgent(m,S.id,a.workspaceId,t.userId);if(s)return(0,p.writeJSON)((0,h.agentToResponse)(s),201)}return(0,p.writeJSON)((0,h.agentToResponse)(S),201)});e.s(["GET",0,k,"POST",0,I]),a()}catch(e){a(e)}},!1),672424,e=>e.a(async(t,a)=>{try{var s=e.i(80774),r=e.i(404478),i=e.i(732985),n=e.i(481671),o=e.i(638081),l=e.i(204960),d=e.i(924918),c=e.i(363585),u=e.i(906846),p=e.i(359838),h=e.i(383303),w=e.i(234173),g=e.i(270215),m=e.i(830665),f=e.i(944002),k=e.i(193695);e.i(195928);var I=e.i(81543),y=e.i(587860),T=t([y]);[y]=T.then?(await T)():T;let b=new s.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/agents/route",pathname:"/api/agents",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/web/src/app/api/agents/route.ts",nextConfigOutput:"standalone",userland:y,...{}}),{workAsyncStorage:_,workUnitAsyncStorage:A,serverHooks:S}=b;async function v(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),b.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let s="/api/agents/route";s=s.replace(/\/index$/,"")||"/";let i=await b.prepare(e,t,{srcPage:s,multiZoneDraftMode:!1});if(!i)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:y,deploymentId:T,params:v,nextConfig:_,parsedUrl:A,isDraftMode:S,prerenderManifest:R,routerServerContext:E,isOnDemandRevalidate:C,revalidateOnlyGenerated:x,resolvedPathname:N,clientReferenceManifest:P,serverActionsManifest:O}=i,M=(0,d.normalizeAppPath)(s),q=!!(R.dynamicRoutes[M]||R.routes[N]),K=async()=>((null==E?void 0:E.render404)?await E.render404(e,t,A,!1):t.end("This page could not be found"),null);if(q&&!S){let e=!!R.routes[N],t=R.dynamicRoutes[M];if(t&&!1===t.fallback&&!e){if(_.adapterPath)return await K();throw new k.NoFallbackError}}let B=null;!q||b.isDev||S||(B=N,B="/index"===B?"/":B);let U=!0===b.isDev||!q,$=q&&!U;O&&P&&(0,l.setManifestsSingleton)({page:s,clientReferenceManifest:P,serverActionsManifest:O});let D=e.method||"GET",L=(0,o.getTracer)(),H=L.getActiveScopeSpan(),j=!!(null==E?void 0:E.isWrappedByNextServer),F=!!(0,n.getRequestMeta)(e,"minimalMode"),W=(0,n.getRequestMeta)(e,"incrementalCache")||await b.getIncrementalCache(e,_,R,F);null==W||W.resetRequestCache(),globalThis.__incrementalCache=W;let V={params:v,previewProps:R.preview,renderOpts:{experimental:{authInterrupts:!!_.experimental.authInterrupts},cacheComponents:!!_.cacheComponents,supportsDynamicResponse:U,incrementalCache:W,cacheLifeProfiles:_.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,s,r)=>b.onRequestError(e,t,s,r,E)},sharedContext:{buildId:y,deploymentId:T}},Y=new c.NodeNextRequest(e),G=new c.NodeNextResponse(t),J=u.NextRequestAdapter.fromNodeNextRequest(Y,(0,u.signalFromNodeResponse)(t));try{let i,n=async e=>b.handle(J,V).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let a=L.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=a.get("next.route");if(r){let t=`${D} ${r}`;e.setAttributes({"next.route":r,"http.route":r,"next.span_name":t}),e.updateName(t),i&&i!==e&&(i.setAttribute("http.route",r),i.updateName(t))}else e.updateName(`${D} ${s}`)}),l=async i=>{var o,l;let d=async({previousCacheEntry:r})=>{try{if(!F&&C&&x&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await n(i);e.fetchMetrics=V.renderOpts.fetchMetrics;let o=V.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let l=V.renderOpts.collectedTags;if(!q)return await (0,w.sendResponse)(Y,G,s,V.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,g.toNodeOutgoingHttpHeaders)(s.headers);l&&(t[f.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==V.renderOpts.collectedRevalidate&&!(V.renderOpts.collectedRevalidate>=f.INFINITE_CACHE)&&V.renderOpts.collectedRevalidate,r=void 0===V.renderOpts.collectedExpire||V.renderOpts.collectedExpire>=f.INFINITE_CACHE?void 0:V.renderOpts.collectedExpire;return{value:{kind:I.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:r}}}}catch(t){throw(null==r?void 0:r.isStale)&&await b.onRequestError(e,t,{routerKind:"App Router",routePath:s,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:C})},!1,E),t}},c=await b.handleResponse({req:e,nextConfig:_,cacheKey:B,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:R,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:x,responseGenerator:d,waitUntil:a.waitUntil,isMinimalMode:F});if(!q)return null;if((null==c||null==(o=c.value)?void 0:o.kind)!==I.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(l=c.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});F||t.setHeader("x-nextjs-cache",C?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),S&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,g.fromNodeOutgoingHttpHeaders)(c.value.headers);return F&&q||u.delete(f.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,m.getCacheControlHeader)(c.cacheControl)),await (0,w.sendResponse)(Y,G,new Response(c.value.body,{headers:u,status:c.value.status||200})),null};j&&H?await l(H):(i=L.getActiveScopeSpan(),await L.withPropagatedContext(e.headers,()=>L.trace(p.BaseServerSpan.handleRequest,{spanName:`${D} ${s}`,kind:o.SpanKind.SERVER,attributes:{"http.method":D,"http.target":e.url}},l),void 0,!j))}catch(t){if(t instanceof k.NoFallbackError||await b.onRequestError(e,t,{routerKind:"App Router",routePath:M,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:C})},!1,E),q)throw t;return await (0,w.sendResponse)(Y,G,new Response(null,{status:500})),null}}e.s(["handler",0,v,"patchFetch",0,function(){return(0,i.patchFetch)({workAsyncStorage:_,workUnitAsyncStorage:A})},"routeModule",0,b,"serverHooks",0,S,"workAsyncStorage",0,_,"workUnitAsyncStorage",0,A]),a()}catch(e){a(e)}},!1),572758,e=>{e.v(t=>Promise.all(["server/chunks/0yh8_@better-auth_memory-adapter_dist_index_mjs_0u9gr83._.js"].map(t=>e.l(t))).then(()=>t(501816)))},409008,e=>{e.v(t=>Promise.all(["server/chunks/0cae_better-auth_dist_adapters_kysely-adapter_index_mjs_0c-9lzd._.js"].map(t=>e.l(t))).then(()=>t(770021)))},96318,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_bun-sqlite-dialect-na--YwnN_mjs_0ua5mwj._.js"].map(t=>e.l(t))).then(()=>t(158195)))},11379,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_node-sqlite-dialect_mjs_0evb.r9._.js"].map(t=>e.l(t))).then(()=>t(302822)))},946743,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_d1-sqlite-dialect-C2B7YsIT_mjs_0bihzky._.js"].map(t=>e.l(t))).then(()=>t(898679)))}];
2
2
 
3
3
  //# sourceMappingURL=_0csh82a._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[726089,t=>{"use strict";var e=t.i(291484);t.i(700598);var a=t.i(704024);let s=(0,t.i(726527).createLogger)({service:"broadcast"});async function r(t,r,i){let n;try{let{env:a}=(0,e.getCloudflareContext)();n=a.DEV_WS_DO_URL;let d=await a.WS_DO_WORKER.fetch(`http://internal${t}`,{method:"POST",body:r});if(d.ok)return;s.warn("broadcast service-binding non-ok",{...i,status:d.status});return}catch{}let d=n||a.DEV_WS_DO_URL;try{let e=await fetch(`${d}${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:r});e.ok||s.warn("broadcast failed",{...i,status:e.status})}catch(t){s.warn("broadcast error",{...i,err:String(t)})}}t.s(["broadcastToUser",0,function(t,a){return function(t,a,s){let i=r(t,a,s);try{let{ctx:t}=(0,e.getCloudflareContext)();t.waitUntil(i)}catch{}return i}(`/broadcast/user/${t}`,JSON.stringify(a),{userId:t,type:a.type})}])},799579,t=>{"use strict";t.i(700598);let e=(0,t.i(726527).createLogger)({service:"web",level:process.env.ALOOK_LOG_LEVEL||"info",pretty:!1});t.s(["log",0,e])},205054,t=>{"use strict";t.i(700598);var e=t.i(291109),a=t.i(704024),s=t.i(799579),r=t.i(726089),i=t.i(740580),n=t.i(774078);let d=e.queries.task,o=e.queries.agent,c=e.queries.message,l=e.queries.conversation,u=e.queries.issue;t.s(["TaskService",0,class{db;constructor(t){this.db=t}async enqueueTask(t,e,s,r,i=a.TASK_TYPES.USER_DM_MESSAGE,c){let l=await o.getAgent(this.db,t,s);if(!l)throw Error("agent not found");if(!l.runtimeId)throw Error("agent has no runtime");if(c?.traceId&&c.parentTaskId&&await d.countTasksByTrace(this.db,c.traceId)>=a.MAX_TASKS_PER_TRACE)throw Error(`Trace limit reached (${a.MAX_TASKS_PER_TRACE} tasks). This may indicate an infinite loop between agents.`);let u=await d.createTask(this.db,{agentId:t,runtimeId:l.runtimeId,workspaceId:s,conversationId:e,prompt:r,type:i,contextKey:c?.contextKey??null,priority:0,context:c?.context,traceId:c?.traceId??null,parentTaskId:c?.parentTaskId??null});return(0,n.invalidate)(n.cacheKeys.activeTaskCounts(s)).catch(()=>{}),u}async claimTask(t,e){let a=await o.getAgent(this.db,t,e);if(!a)return null;if(await d.countRunningTasks(this.db,t,e)>=a.maxConcurrentTasks){let s=await d.findSteerableReplacement(this.db,t,e);if(!s||await d.countRunningTasks(this.db,t,e,s.predecessorId)>=a.maxConcurrentTasks)return null}let s=await d.claimTask(this.db,t,e);return s?(await o.updateAgentStatus(this.db,t,e,"working"),s):null}async claimTasksForRuntimes(t,e,a){let s=await d.claimKillTasks(this.db,t,a,e),r=e-s.length,i=r>0?await d.listPendingTasksByRuntimes(this.db,t,a):[],n=new Set(t),o=new Set,c=[...s],l=[];for(let t of i){if(l.length>=r)break;let e=`${t.agentId}:${t.workspaceId}`;o.has(e)||(o.add(e),l.push(t))}for(let t of(await Promise.all(l.map(t=>this.claimTask(t.agentId,t.workspaceId)))))t&&n.has(t.runtimeId)&&c.push(t);return c}async startTask(t,e){let a=await d.startTask(this.db,t,e);if(!a)throw Error("task not in dispatched status");return a}async completeTask(t,e,a,r){let i;try{i=JSON.parse(a)}catch{i={raw:a}}let n=await d.completeTask(this.db,t,e,{result:i,sessionId:r||null});if(!n){let e=await d.getTask(this.db,t),a=e?.status??"unknown";throw s.log.warn(`completeTask failed: task is in '${a}' status`,{taskId:t}),Error(`cannot complete task in '${a}' status`)}let o=i,l="string"==typeof o?.output?o.output:"";return l&&await c.createMessage(this.db,{conversationId:n.conversationId,role:"assistant",content:l,taskId:t}),await this.reconcileAgentStatus(n.agentId,n.workspaceId),await this.dispatchNextBufferedMessage(n.conversationId,n.workspaceId),n}async failTask(t,e,r){let i=await d.failTask(this.db,t,e,r);if(!i){let e=await d.getTask(this.db,t),a=e?.status??"unknown";throw s.log.warn(`failTask failed: task is in '${a}' status`,{taskId:t}),Error(`cannot fail task in '${a}' status`)}return i.type===a.TASK_TYPES.KILL_TASK||(r&&await c.createMessage(this.db,{conversationId:i.conversationId,role:"assistant",content:`Error: ${r}`,taskId:t}),await this.reconcileAgentStatus(i.agentId,i.workspaceId),await this.syncIssueStatusFromTask(i,"failed"),await this.dispatchNextBufferedMessage(i.conversationId,i.workspaceId)),i}async syncIssueStatusFromTask(t,e){if(t.type!==a.TASK_TYPES.ISSUE_EVENT)return;let s=await u.getIssueByConversation(this.db,t.conversationId,t.workspaceId);if(!s||s.status===e||!await u.updateIssue(this.db,s.id,t.workspaceId,{status:e}))return;let n=await c.createMessage(this.db,{conversationId:t.conversationId,role:"event",content:`Issue status changed: ${s.status} -> ${e}`,taskId:t.id,metadata:JSON.stringify({issueId:s.id})});try{let e=await l.getConversation(this.db,t.conversationId,t.workspaceId);e&&(0,r.broadcastToUser)(e.userId,{type:"conversation.message",conversationId:t.conversationId,message:(0,i.messageToResponse)(n)}).catch(()=>{})}catch{}}async supersedeTask(t,e){let a=await d.supersedeTask(this.db,t,e);if(!a){let e=await d.getTask(this.db,t),a=e?.status??"unknown";throw s.log.warn(`supersedeTask failed: task is in '${a}' status`,{taskId:t}),Error(`cannot supersede task in '${a}' status`)}return await this.reconcileAgentStatus(a.agentId,a.workspaceId),await this.dispatchNextBufferedMessage(a.conversationId,a.workspaceId),a}async retryTask(t,e){let a=await d.getTask(this.db,t);if(!a||a.workspaceId!==e)throw Error("task not found");if("failed"!==a.status)throw Error("only failed tasks can be retried");let s=await d.markFailedAsSuperseded(this.db,t,e);if(!s)throw Error("failed to mark task as superseded");return{oldTask:s,newTask:await this.enqueueTask(a.agentId,a.conversationId,e,a.prompt,a.type,{contextKey:a.contextKey??null,context:a.context,traceId:a.traceId??null,parentTaskId:a.parentTaskId??null})}}async cancelActiveTask(t,e,s){let r=await d.getActiveTaskByConversation(this.db,t,e);if(!r)return null;let i=await d.cancelTask(this.db,r.id,e);return i?(("dispatched"===r.status||"running"===r.status)&&await d.createTask(this.db,{agentId:r.agentId,runtimeId:r.runtimeId,workspaceId:e,conversationId:t,prompt:"",type:a.TASK_TYPES.KILL_TASK,context:{target_task_id:r.id}}),await c.createMessage(this.db,{conversationId:t,role:"assistant",content:s?.reason??"Task cancelled by user",taskId:r.id}),await this.reconcileAgentStatus(r.agentId,e),s?.skipDispatch||await this.dispatchNextBufferedMessage(t,e),i):null}async reconcileAgentStatus(t,e){let a=await d.countRunningTasks(this.db,t,e);await o.updateAgentStatus(this.db,t,e,a>0?"working":"idle"),(0,n.invalidate)(n.cacheKeys.activeTaskCounts(e)).catch(()=>{})}async dispatchNextBufferedMessage(t,e){let n=await c.activateNextBufferedMessage(this.db,t);if(!n)return null;let o=await l.getConversation(this.db,t,e);if(!o)return s.log.warn("dispatchNextBufferedMessage: conversation not found",{conversationId:t}),await c.revertToBuffered(this.db,n.id).catch(t=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:n.id,revertErr:t})}),null;let u=o.userId;try{let s=n.attachmentIds?JSON.parse(n.attachmentIds):[],l=await d.getLatestTaskForConversation(this.db,t),h=l?.traceId??null,k=await this.enqueueTask(o.agentId,t,e,n.content,a.TASK_TYPES.USER_DM_MESSAGE,{contextKey:t,context:s.length>0?{attachment_ids:s}:void 0,traceId:h,parentTaskId:null});return await c.updateMessageTaskId(this.db,n.id,k.id),(0,r.broadcastToUser)(u,{type:"followup.dispatched",conversationId:t,message:(0,i.messageToResponse)(n),task:(0,i.taskToResponse)(k)}).catch(()=>{}),k}catch(e){return s.log.warn("dispatchNextBufferedMessage: enqueueTask failed",{conversationId:t,err:e}),await c.revertToBuffered(this.db,n.id).catch(t=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:n.id,revertErr:t})}),(0,r.broadcastToUser)(u,{type:"followup.dispatch_failed",conversationId:t,messageId:n.id,error:e instanceof Error?e.message:"Failed to dispatch follow-up"}).catch(()=>{}),null}}async cancelTrace(t,e,a){for(let r of[...new Set((await d.getTraceTree(this.db,t,e)).filter(t=>["queued","dispatched","running"].includes(t.status)).map(t=>t.conversationId))])try{await this.cancelActiveTask(r,e,{skipDispatch:!0,reason:a?.reason})}catch(e){s.log.warn("cancelTrace: failed to cancel task",{traceId:t,convId:r,err:e})}}}])},572758,t=>{t.v(e=>Promise.all(["server/chunks/0yh8_@better-auth_memory-adapter_dist_index_mjs_0u9gr83._.js"].map(e=>t.l(e))).then(()=>e(501816)))},409008,t=>{t.v(e=>Promise.all(["server/chunks/0cae_better-auth_dist_adapters_kysely-adapter_index_mjs_0c-9lzd._.js"].map(e=>t.l(e))).then(()=>e(770021)))},96318,t=>{t.v(e=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_bun-sqlite-dialect-na--YwnN_mjs_0ua5mwj._.js"].map(e=>t.l(e))).then(()=>e(158195)))},11379,t=>{t.v(e=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_node-sqlite-dialect_mjs_0evb.r9._.js"].map(e=>t.l(e))).then(()=>e(302822)))},946743,t=>{t.v(e=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_d1-sqlite-dialect-C2B7YsIT_mjs_0bihzky._.js"].map(e=>t.l(e))).then(()=>e(898679)))}];
1
+ module.exports=[726089,t=>{"use strict";var e=t.i(291484);t.i(700598);var a=t.i(704024);let s=(0,t.i(726527).createLogger)({service:"broadcast"});async function r(t,r,i){let n;try{let{env:a}=(0,e.getCloudflareContext)();n=a.DEV_WS_DO_URL;let o=await a.WS_DO_WORKER.fetch(`http://internal${t}`,{method:"POST",body:r});if(o.ok)return;s.warn("broadcast service-binding non-ok",{...i,status:o.status});return}catch{}let o=n||a.DEV_WS_DO_URL;try{let e=await fetch(`${o}${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:r});e.ok||s.warn("broadcast failed",{...i,status:e.status})}catch(t){s.warn("broadcast error",{...i,err:String(t)})}}t.s(["broadcastToUser",0,function(t,a){return function(t,a,s){let i=r(t,a,s);try{let{ctx:t}=(0,e.getCloudflareContext)();t.waitUntil(i)}catch{}return i}(`/broadcast/user/${t}`,JSON.stringify(a),{userId:t,type:a.type})}])},799579,t=>{"use strict";t.i(700598);let e=(0,t.i(726527).createLogger)({service:"web",level:process.env.ALOOK_LOG_LEVEL||"info",pretty:!1});t.s(["log",0,e])},205054,t=>{"use strict";t.i(700598);var e=t.i(291109),a=t.i(704024),s=t.i(799579),r=t.i(726089),i=t.i(740580),n=t.i(774078);let o=e.queries.task,d=e.queries.agent,c=e.queries.message,l=e.queries.conversation,u=e.queries.issue;t.s(["TaskService",0,class{db;constructor(t){this.db=t}async enqueueTask(t,e,s,r,i=a.TASK_TYPES.USER_DM_MESSAGE,c){let l=await d.getAgent(this.db,t,s);if(!l)throw Error("agent not found");if(!l.runtimeId)throw Error("agent has no runtime");if(c?.traceId&&c.parentTaskId&&await o.countTasksByTrace(this.db,c.traceId)>=a.MAX_TASKS_PER_TRACE)throw Error(`Trace limit reached (${a.MAX_TASKS_PER_TRACE} tasks). This may indicate an infinite loop between agents.`);let u=await o.createTask(this.db,{agentId:t,runtimeId:l.runtimeId,workspaceId:s,conversationId:e,prompt:r,type:i,contextKey:c?.contextKey??null,priority:0,context:c?.context,traceId:c?.traceId??null,parentTaskId:c?.parentTaskId??null});return(0,n.invalidate)(n.cacheKeys.activeTaskCounts(s)).catch(()=>{}),u}async claimTask(t,e){let a=await d.getAgent(this.db,t,e);if(!a)return null;if(await o.countRunningTasks(this.db,t,e)>=a.maxConcurrentTasks){let s=await o.findSteerableReplacement(this.db,t,e);if(!s||await o.countRunningTasks(this.db,t,e,s.predecessorId)>=a.maxConcurrentTasks)return null}let s=await o.claimTask(this.db,t,e);return s?(await d.updateAgentStatus(this.db,t,e,"working"),s):null}async claimTasksForRuntimes(t,e,a){let s=await o.claimKillTasks(this.db,t,a,e),r=e-s.length,i=r>0?await o.listPendingTasksByRuntimes(this.db,t,a):[],n=new Set(t),d=new Set,c=[...s],l=[];for(let t of i){if(l.length>=r)break;let e=`${t.agentId}:${t.workspaceId}`;d.has(e)||(d.add(e),l.push(t))}for(let t of(await Promise.all(l.map(t=>this.claimTask(t.agentId,t.workspaceId)))))t&&n.has(t.runtimeId)&&c.push(t);return c}async startTask(t,e){let a=await o.startTask(this.db,t,e);if(!a)throw Error("task not in dispatched status");return a}async completeTask(t,e,a,n){let d;try{d=JSON.parse(a)}catch{d={raw:a}}let u=await o.completeTask(this.db,t,e,{result:d,sessionId:n||null});if(!u){let e=await o.getTask(this.db,t),a=e?.status??"unknown";throw s.log.warn(`completeTask failed: task is in '${a}' status`,{taskId:t}),Error(`cannot complete task in '${a}' status`)}let h=d,k="string"==typeof h?.output?h.output:"";if(k){let a=await c.createMessage(this.db,{conversationId:u.conversationId,role:"assistant",content:k,taskId:t});try{let t=await l.getConversation(this.db,u.conversationId,e);t&&(0,r.broadcastToUser)(t.userId,{type:"conversation.message",conversationId:u.conversationId,message:(0,i.messageToResponse)(a)}).catch(()=>{})}catch{}}return await this.reconcileAgentStatus(u.agentId,u.workspaceId),await this.dispatchNextBufferedMessage(u.conversationId,u.workspaceId),u}async failTask(t,e,n){let d=await o.failTask(this.db,t,e,n);if(!d){let e=await o.getTask(this.db,t),a=e?.status??"unknown";throw s.log.warn(`failTask failed: task is in '${a}' status`,{taskId:t}),Error(`cannot fail task in '${a}' status`)}if(d.type===a.TASK_TYPES.KILL_TASK)return d;if(n){let a=await c.createMessage(this.db,{conversationId:d.conversationId,role:"assistant",content:`Error: ${n}`,taskId:t});try{let t=await l.getConversation(this.db,d.conversationId,e);t&&(0,r.broadcastToUser)(t.userId,{type:"conversation.message",conversationId:d.conversationId,message:(0,i.messageToResponse)(a)}).catch(()=>{})}catch{}}return await this.reconcileAgentStatus(d.agentId,d.workspaceId),await this.syncIssueStatusFromTask(d,"failed"),await this.dispatchNextBufferedMessage(d.conversationId,d.workspaceId),d}async syncIssueStatusFromTask(t,e){if(t.type!==a.TASK_TYPES.ISSUE_EVENT)return;let s=await u.getIssueByConversation(this.db,t.conversationId,t.workspaceId);if(!s||s.status===e||!await u.updateIssue(this.db,s.id,t.workspaceId,{status:e}))return;let n=await c.createMessage(this.db,{conversationId:t.conversationId,role:"event",content:`Issue status changed: ${s.status} -> ${e}`,taskId:t.id,metadata:JSON.stringify({issueId:s.id})});try{let e=await l.getConversation(this.db,t.conversationId,t.workspaceId);e&&(0,r.broadcastToUser)(e.userId,{type:"conversation.message",conversationId:t.conversationId,message:(0,i.messageToResponse)(n)}).catch(()=>{})}catch{}}async supersedeTask(t,e){let a=await o.supersedeTask(this.db,t,e);if(!a){let e=await o.getTask(this.db,t),a=e?.status??"unknown";throw s.log.warn(`supersedeTask failed: task is in '${a}' status`,{taskId:t}),Error(`cannot supersede task in '${a}' status`)}return await this.reconcileAgentStatus(a.agentId,a.workspaceId),await this.dispatchNextBufferedMessage(a.conversationId,a.workspaceId),a}async retryTask(t,e){let a=await o.getTask(this.db,t);if(!a||a.workspaceId!==e)throw Error("task not found");if("failed"!==a.status)throw Error("only failed tasks can be retried");let s=await o.markFailedAsSuperseded(this.db,t,e);if(!s)throw Error("failed to mark task as superseded");return{oldTask:s,newTask:await this.enqueueTask(a.agentId,a.conversationId,e,a.prompt,a.type,{contextKey:a.contextKey??null,context:a.context,traceId:a.traceId??null,parentTaskId:a.parentTaskId??null})}}async cancelActiveTask(t,e,s){let r=await o.getActiveTaskByConversation(this.db,t,e);if(!r)return null;let i=await o.cancelTask(this.db,r.id,e);return i?(("dispatched"===r.status||"running"===r.status)&&await o.createTask(this.db,{agentId:r.agentId,runtimeId:r.runtimeId,workspaceId:e,conversationId:t,prompt:"",type:a.TASK_TYPES.KILL_TASK,context:{target_task_id:r.id}}),await c.createMessage(this.db,{conversationId:t,role:"assistant",content:s?.reason??"Task cancelled by user",taskId:r.id}),await this.reconcileAgentStatus(r.agentId,e),s?.skipDispatch||await this.dispatchNextBufferedMessage(t,e),i):null}async reconcileAgentStatus(t,e){let a=await o.countRunningTasks(this.db,t,e);await d.updateAgentStatus(this.db,t,e,a>0?"working":"idle"),(0,n.invalidate)(n.cacheKeys.activeTaskCounts(e)).catch(()=>{})}async dispatchNextBufferedMessage(t,e){let n=await c.activateNextBufferedMessage(this.db,t);if(!n)return null;let d=await l.getConversation(this.db,t,e);if(!d)return s.log.warn("dispatchNextBufferedMessage: conversation not found",{conversationId:t}),await c.revertToBuffered(this.db,n.id).catch(t=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:n.id,revertErr:t})}),null;let u=d.userId;try{let s=n.attachmentIds?JSON.parse(n.attachmentIds):[],l=await o.getLatestTaskForConversation(this.db,t),h=l?.traceId??null,k=await this.enqueueTask(d.agentId,t,e,n.content,a.TASK_TYPES.USER_DM_MESSAGE,{contextKey:t,context:s.length>0?{attachment_ids:s}:void 0,traceId:h,parentTaskId:null});return await c.updateMessageTaskId(this.db,n.id,k.id),(0,r.broadcastToUser)(u,{type:"followup.dispatched",conversationId:t,message:(0,i.messageToResponse)(n),task:(0,i.taskToResponse)(k)}).catch(()=>{}),k}catch(e){return s.log.warn("dispatchNextBufferedMessage: enqueueTask failed",{conversationId:t,err:e}),await c.revertToBuffered(this.db,n.id).catch(t=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:n.id,revertErr:t})}),(0,r.broadcastToUser)(u,{type:"followup.dispatch_failed",conversationId:t,messageId:n.id,error:e instanceof Error?e.message:"Failed to dispatch follow-up"}).catch(()=>{}),null}}async cancelTrace(t,e,a){for(let r of[...new Set((await o.getTraceTree(this.db,t,e)).filter(t=>["queued","dispatched","running"].includes(t.status)).map(t=>t.conversationId))])try{await this.cancelActiveTask(r,e,{skipDispatch:!0,reason:a?.reason})}catch(e){s.log.warn("cancelTrace: failed to cancel task",{traceId:t,convId:r,err:e})}}}])},572758,t=>{t.v(e=>Promise.all(["server/chunks/0yh8_@better-auth_memory-adapter_dist_index_mjs_0u9gr83._.js"].map(e=>t.l(e))).then(()=>e(501816)))},409008,t=>{t.v(e=>Promise.all(["server/chunks/0cae_better-auth_dist_adapters_kysely-adapter_index_mjs_0c-9lzd._.js"].map(e=>t.l(e))).then(()=>e(770021)))},96318,t=>{t.v(e=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_bun-sqlite-dialect-na--YwnN_mjs_0ua5mwj._.js"].map(e=>t.l(e))).then(()=>e(158195)))},11379,t=>{t.v(e=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_node-sqlite-dialect_mjs_0evb.r9._.js"].map(e=>t.l(e))).then(()=>e(302822)))},946743,t=>{t.v(e=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_d1-sqlite-dialect-C2B7YsIT_mjs_0bihzky._.js"].map(e=>t.l(e))).then(()=>e(898679)))}];
2
2
 
3
3
  //# sourceMappingURL=_0j.pt~7._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[726089,e=>{"use strict";var t=e.i(291484);e.i(700598);var a=e.i(704024);let s=(0,e.i(726527).createLogger)({service:"broadcast"});async function r(e,r,n){let i;try{let{env:a}=(0,t.getCloudflareContext)();i=a.DEV_WS_DO_URL;let o=await a.WS_DO_WORKER.fetch(`http://internal${e}`,{method:"POST",body:r});if(o.ok)return;s.warn("broadcast service-binding non-ok",{...n,status:o.status});return}catch{}let o=i||a.DEV_WS_DO_URL;try{let t=await fetch(`${o}${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:r});t.ok||s.warn("broadcast failed",{...n,status:t.status})}catch(e){s.warn("broadcast error",{...n,err:String(e)})}}e.s(["broadcastToUser",0,function(e,a){return function(e,a,s){let n=r(e,a,s);try{let{ctx:e}=(0,t.getCloudflareContext)();e.waitUntil(n)}catch{}return n}(`/broadcast/user/${e}`,JSON.stringify(a),{userId:e,type:a.type})}])},799579,e=>{"use strict";e.i(700598);let t=(0,e.i(726527).createLogger)({service:"web",level:process.env.ALOOK_LOG_LEVEL||"info",pretty:!1});e.s(["log",0,t])},205054,e=>{"use strict";e.i(700598);var t=e.i(291109),a=e.i(704024),s=e.i(799579),r=e.i(726089),n=e.i(740580),i=e.i(774078);let o=t.queries.task,d=t.queries.agent,l=t.queries.message,c=t.queries.conversation,u=t.queries.issue;e.s(["TaskService",0,class{db;constructor(e){this.db=e}async enqueueTask(e,t,s,r,n=a.TASK_TYPES.USER_DM_MESSAGE,l){let c=await d.getAgent(this.db,e,s);if(!c)throw Error("agent not found");if(!c.runtimeId)throw Error("agent has no runtime");if(l?.traceId&&l.parentTaskId&&await o.countTasksByTrace(this.db,l.traceId)>=a.MAX_TASKS_PER_TRACE)throw Error(`Trace limit reached (${a.MAX_TASKS_PER_TRACE} tasks). This may indicate an infinite loop between agents.`);let u=await o.createTask(this.db,{agentId:e,runtimeId:c.runtimeId,workspaceId:s,conversationId:t,prompt:r,type:n,contextKey:l?.contextKey??null,priority:0,context:l?.context,traceId:l?.traceId??null,parentTaskId:l?.parentTaskId??null});return(0,i.invalidate)(i.cacheKeys.activeTaskCounts(s)).catch(()=>{}),u}async claimTask(e,t){let a=await d.getAgent(this.db,e,t);if(!a)return null;if(await o.countRunningTasks(this.db,e,t)>=a.maxConcurrentTasks){let s=await o.findSteerableReplacement(this.db,e,t);if(!s||await o.countRunningTasks(this.db,e,t,s.predecessorId)>=a.maxConcurrentTasks)return null}let s=await o.claimTask(this.db,e,t);return s?(await d.updateAgentStatus(this.db,e,t,"working"),s):null}async claimTasksForRuntimes(e,t,a){let s=await o.claimKillTasks(this.db,e,a,t),r=t-s.length,n=r>0?await o.listPendingTasksByRuntimes(this.db,e,a):[],i=new Set(e),d=new Set,l=[...s],c=[];for(let e of n){if(c.length>=r)break;let t=`${e.agentId}:${e.workspaceId}`;d.has(t)||(d.add(t),c.push(e))}for(let e of(await Promise.all(c.map(e=>this.claimTask(e.agentId,e.workspaceId)))))e&&i.has(e.runtimeId)&&l.push(e);return l}async startTask(e,t){let a=await o.startTask(this.db,e,t);if(!a)throw Error("task not in dispatched status");return a}async completeTask(e,t,a,r){let n;try{n=JSON.parse(a)}catch{n={raw:a}}let i=await o.completeTask(this.db,e,t,{result:n,sessionId:r||null});if(!i){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`completeTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot complete task in '${a}' status`)}let d=n,c="string"==typeof d?.output?d.output:"";return c&&await l.createMessage(this.db,{conversationId:i.conversationId,role:"assistant",content:c,taskId:e}),await this.reconcileAgentStatus(i.agentId,i.workspaceId),await this.dispatchNextBufferedMessage(i.conversationId,i.workspaceId),i}async failTask(e,t,r){let n=await o.failTask(this.db,e,t,r);if(!n){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`failTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot fail task in '${a}' status`)}return n.type===a.TASK_TYPES.KILL_TASK||(r&&await l.createMessage(this.db,{conversationId:n.conversationId,role:"assistant",content:`Error: ${r}`,taskId:e}),await this.reconcileAgentStatus(n.agentId,n.workspaceId),await this.syncIssueStatusFromTask(n,"failed"),await this.dispatchNextBufferedMessage(n.conversationId,n.workspaceId)),n}async syncIssueStatusFromTask(e,t){if(e.type!==a.TASK_TYPES.ISSUE_EVENT)return;let s=await u.getIssueByConversation(this.db,e.conversationId,e.workspaceId);if(!s||s.status===t||!await u.updateIssue(this.db,s.id,e.workspaceId,{status:t}))return;let i=await l.createMessage(this.db,{conversationId:e.conversationId,role:"event",content:`Issue status changed: ${s.status} -> ${t}`,taskId:e.id,metadata:JSON.stringify({issueId:s.id})});try{let t=await c.getConversation(this.db,e.conversationId,e.workspaceId);t&&(0,r.broadcastToUser)(t.userId,{type:"conversation.message",conversationId:e.conversationId,message:(0,n.messageToResponse)(i)}).catch(()=>{})}catch{}}async supersedeTask(e,t){let a=await o.supersedeTask(this.db,e,t);if(!a){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`supersedeTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot supersede task in '${a}' status`)}return await this.reconcileAgentStatus(a.agentId,a.workspaceId),await this.dispatchNextBufferedMessage(a.conversationId,a.workspaceId),a}async retryTask(e,t){let a=await o.getTask(this.db,e);if(!a||a.workspaceId!==t)throw Error("task not found");if("failed"!==a.status)throw Error("only failed tasks can be retried");let s=await o.markFailedAsSuperseded(this.db,e,t);if(!s)throw Error("failed to mark task as superseded");return{oldTask:s,newTask:await this.enqueueTask(a.agentId,a.conversationId,t,a.prompt,a.type,{contextKey:a.contextKey??null,context:a.context,traceId:a.traceId??null,parentTaskId:a.parentTaskId??null})}}async cancelActiveTask(e,t,s){let r=await o.getActiveTaskByConversation(this.db,e,t);if(!r)return null;let n=await o.cancelTask(this.db,r.id,t);return n?(("dispatched"===r.status||"running"===r.status)&&await o.createTask(this.db,{agentId:r.agentId,runtimeId:r.runtimeId,workspaceId:t,conversationId:e,prompt:"",type:a.TASK_TYPES.KILL_TASK,context:{target_task_id:r.id}}),await l.createMessage(this.db,{conversationId:e,role:"assistant",content:s?.reason??"Task cancelled by user",taskId:r.id}),await this.reconcileAgentStatus(r.agentId,t),s?.skipDispatch||await this.dispatchNextBufferedMessage(e,t),n):null}async reconcileAgentStatus(e,t){let a=await o.countRunningTasks(this.db,e,t);await d.updateAgentStatus(this.db,e,t,a>0?"working":"idle"),(0,i.invalidate)(i.cacheKeys.activeTaskCounts(t)).catch(()=>{})}async dispatchNextBufferedMessage(e,t){let i=await l.activateNextBufferedMessage(this.db,e);if(!i)return null;let d=await c.getConversation(this.db,e,t);if(!d)return s.log.warn("dispatchNextBufferedMessage: conversation not found",{conversationId:e}),await l.revertToBuffered(this.db,i.id).catch(e=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:i.id,revertErr:e})}),null;let u=d.userId;try{let s=i.attachmentIds?JSON.parse(i.attachmentIds):[],c=await o.getLatestTaskForConversation(this.db,e),p=c?.traceId??null,h=await this.enqueueTask(d.agentId,e,t,i.content,a.TASK_TYPES.USER_DM_MESSAGE,{contextKey:e,context:s.length>0?{attachment_ids:s}:void 0,traceId:p,parentTaskId:null});return await l.updateMessageTaskId(this.db,i.id,h.id),(0,r.broadcastToUser)(u,{type:"followup.dispatched",conversationId:e,message:(0,n.messageToResponse)(i),task:(0,n.taskToResponse)(h)}).catch(()=>{}),h}catch(t){return s.log.warn("dispatchNextBufferedMessage: enqueueTask failed",{conversationId:e,err:t}),await l.revertToBuffered(this.db,i.id).catch(e=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:i.id,revertErr:e})}),(0,r.broadcastToUser)(u,{type:"followup.dispatch_failed",conversationId:e,messageId:i.id,error:t instanceof Error?t.message:"Failed to dispatch follow-up"}).catch(()=>{}),null}}async cancelTrace(e,t,a){for(let r of[...new Set((await o.getTraceTree(this.db,e,t)).filter(e=>["queued","dispatched","running"].includes(e.status)).map(e=>e.conversationId))])try{await this.cancelActiveTask(r,t,{skipDispatch:!0,reason:a?.reason})}catch(t){s.log.warn("cancelTrace: failed to cancel task",{traceId:e,convId:r,err:t})}}}])},825526,e=>e.a(async(t,a)=>{try{var s=e.i(291484),r=e.i(675139),n=e.i(152327),i=e.i(47962),o=e.i(776227),d=e.i(740580),l=e.i(205054),c=e.i(726089),u=e.i(774078),p=t([n]);[n]=p.then?(await p)():p;let h=(0,n.withAuth)(async(e,t)=>{let a=await (0,i.withWorkspaceMember)(e,t);if(a instanceof Response)return a;let{env:n}=(0,s.getCloudflareContext)(),p=(0,r.getDb)(n.DB),h=t.params?.id;if(!h)return(0,o.writeError)("task id is required",400);let w=new l.TaskService(p);try{let{oldTask:e,newTask:s}=await w.retryTask(h,a.workspaceId),r=new Date().toISOString().slice(0,10);return(0,u.invalidate)(u.cacheKeys.overviewTaskStats(a.workspaceId,r)).catch(()=>{}),(0,c.broadcastToUser)(t.userId,{type:"task.updated",taskId:e.id,agentId:e.agentId,status:"superseded"}).catch(()=>{}),(0,c.broadcastToUser)(t.userId,{type:"task.updated",taskId:s.id,agentId:s.agentId,status:"queued"}).catch(()=>{}),(0,o.writeJSON)((0,d.taskToResponse)(s))}catch(e){return(0,o.writeError)(e instanceof Error?e.message:"Unknown error",400)}});e.s(["POST",0,h]),a()}catch(e){a(e)}},!1),867955,e=>e.a(async(t,a)=>{try{var s=e.i(80774),r=e.i(404478),n=e.i(732985),i=e.i(481671),o=e.i(638081),d=e.i(204960),l=e.i(924918),c=e.i(363585),u=e.i(906846),p=e.i(359838),h=e.i(383303),w=e.i(234173),g=e.i(270215),k=e.i(830665),f=e.i(944002),T=e.i(193695);e.i(195928);var v=e.i(81543),y=e.i(825526),m=t([y]);[y]=m.then?(await m)():m;let b=new s.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/tasks/[id]/retry/route",pathname:"/api/tasks/[id]/retry",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/web/src/app/api/tasks/[id]/retry/route.ts",nextConfigOutput:"standalone",userland:y,...{}}),{workAsyncStorage:_,workUnitAsyncStorage:R,serverHooks:E}=b;async function I(e,t,a){a.requestMeta&&(0,i.setRequestMeta)(e,a.requestMeta),b.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let s="/api/tasks/[id]/retry/route";s=s.replace(/\/index$/,"")||"/";let n=await b.prepare(e,t,{srcPage:s,multiZoneDraftMode:!1});if(!n)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:y,deploymentId:m,params:I,nextConfig:_,parsedUrl:R,isDraftMode:E,prerenderManifest:S,routerServerContext:A,isOnDemandRevalidate:x,revalidateOnlyGenerated:C,resolvedPathname:N,clientReferenceManifest:P,serverActionsManifest:M}=n,O=(0,l.normalizeAppPath)(s),q=!!(S.dynamicRoutes[O]||S.routes[N]),K=async()=>((null==A?void 0:A.render404)?await A.render404(e,t,R,!1):t.end("This page could not be found"),null);if(q&&!E){let e=!!S.routes[N],t=S.dynamicRoutes[O];if(t&&!1===t.fallback&&!e){if(_.adapterPath)return await K();throw new T.NoFallbackError}}let U=null;!q||b.isDev||E||(U=N,U="/index"===U?"/":U);let D=!0===b.isDev||!q,$=q&&!D;M&&P&&(0,d.setManifestsSingleton)({page:s,clientReferenceManifest:P,serverActionsManifest:M});let B=e.method||"GET",j=(0,o.getTracer)(),L=j.getActiveScopeSpan(),H=!!(null==A?void 0:A.isWrappedByNextServer),F=!!(0,i.getRequestMeta)(e,"minimalMode"),W=(0,i.getRequestMeta)(e,"incrementalCache")||await b.getIncrementalCache(e,_,S,F);null==W||W.resetRequestCache(),globalThis.__incrementalCache=W;let V={params:I,previewProps:S.preview,renderOpts:{experimental:{authInterrupts:!!_.experimental.authInterrupts},cacheComponents:!!_.cacheComponents,supportsDynamicResponse:D,incrementalCache:W,cacheLifeProfiles:_.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,s,r)=>b.onRequestError(e,t,s,r,A)},sharedContext:{buildId:y,deploymentId:m}},Y=new c.NodeNextRequest(e),G=new c.NodeNextResponse(t),J=u.NextRequestAdapter.fromNodeNextRequest(Y,(0,u.signalFromNodeResponse)(t));try{let n,i=async e=>b.handle(J,V).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let a=j.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=a.get("next.route");if(r){let t=`${B} ${r}`;e.setAttributes({"next.route":r,"http.route":r,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",r),n.updateName(t))}else e.updateName(`${B} ${s}`)}),d=async n=>{var o,d;let l=async({previousCacheEntry:r})=>{try{if(!F&&x&&C&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await i(n);e.fetchMetrics=V.renderOpts.fetchMetrics;let o=V.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let d=V.renderOpts.collectedTags;if(!q)return await (0,w.sendResponse)(Y,G,s,V.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,g.toNodeOutgoingHttpHeaders)(s.headers);d&&(t[f.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==V.renderOpts.collectedRevalidate&&!(V.renderOpts.collectedRevalidate>=f.INFINITE_CACHE)&&V.renderOpts.collectedRevalidate,r=void 0===V.renderOpts.collectedExpire||V.renderOpts.collectedExpire>=f.INFINITE_CACHE?void 0:V.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:r}}}}catch(t){throw(null==r?void 0:r.isStale)&&await b.onRequestError(e,t,{routerKind:"App Router",routePath:s,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:x})},!1,A),t}},c=await b.handleResponse({req:e,nextConfig:_,cacheKey:U,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:S,isRoutePPREnabled:!1,isOnDemandRevalidate:x,revalidateOnlyGenerated:C,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:F});if(!q)return null;if((null==c||null==(o=c.value)?void 0:o.kind)!==v.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(d=c.value)?void 0:d.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});F||t.setHeader("x-nextjs-cache",x?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),E&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,g.fromNodeOutgoingHttpHeaders)(c.value.headers);return F&&q||u.delete(f.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,k.getCacheControlHeader)(c.cacheControl)),await (0,w.sendResponse)(Y,G,new Response(c.value.body,{headers:u,status:c.value.status||200})),null};H&&L?await d(L):(n=j.getActiveScopeSpan(),await j.withPropagatedContext(e.headers,()=>j.trace(p.BaseServerSpan.handleRequest,{spanName:`${B} ${s}`,kind:o.SpanKind.SERVER,attributes:{"http.method":B,"http.target":e.url}},d),void 0,!H))}catch(t){if(t instanceof T.NoFallbackError||await b.onRequestError(e,t,{routerKind:"App Router",routePath:O,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:x})},!1,A),q)throw t;return await (0,w.sendResponse)(Y,G,new Response(null,{status:500})),null}}e.s(["handler",0,I,"patchFetch",0,function(){return(0,n.patchFetch)({workAsyncStorage:_,workUnitAsyncStorage:R})},"routeModule",0,b,"serverHooks",0,E,"workAsyncStorage",0,_,"workUnitAsyncStorage",0,R]),a()}catch(e){a(e)}},!1),572758,e=>{e.v(t=>Promise.all(["server/chunks/0yh8_@better-auth_memory-adapter_dist_index_mjs_0u9gr83._.js"].map(t=>e.l(t))).then(()=>t(501816)))},409008,e=>{e.v(t=>Promise.all(["server/chunks/0cae_better-auth_dist_adapters_kysely-adapter_index_mjs_0c-9lzd._.js"].map(t=>e.l(t))).then(()=>t(770021)))},96318,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_bun-sqlite-dialect-na--YwnN_mjs_0ua5mwj._.js"].map(t=>e.l(t))).then(()=>t(158195)))},11379,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_node-sqlite-dialect_mjs_0evb.r9._.js"].map(t=>e.l(t))).then(()=>t(302822)))},946743,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_d1-sqlite-dialect-C2B7YsIT_mjs_0bihzky._.js"].map(t=>e.l(t))).then(()=>t(898679)))}];
1
+ module.exports=[726089,e=>{"use strict";var t=e.i(291484);e.i(700598);var a=e.i(704024);let s=(0,e.i(726527).createLogger)({service:"broadcast"});async function r(e,r,n){let i;try{let{env:a}=(0,t.getCloudflareContext)();i=a.DEV_WS_DO_URL;let o=await a.WS_DO_WORKER.fetch(`http://internal${e}`,{method:"POST",body:r});if(o.ok)return;s.warn("broadcast service-binding non-ok",{...n,status:o.status});return}catch{}let o=i||a.DEV_WS_DO_URL;try{let t=await fetch(`${o}${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:r});t.ok||s.warn("broadcast failed",{...n,status:t.status})}catch(e){s.warn("broadcast error",{...n,err:String(e)})}}e.s(["broadcastToUser",0,function(e,a){return function(e,a,s){let n=r(e,a,s);try{let{ctx:e}=(0,t.getCloudflareContext)();e.waitUntil(n)}catch{}return n}(`/broadcast/user/${e}`,JSON.stringify(a),{userId:e,type:a.type})}])},799579,e=>{"use strict";e.i(700598);let t=(0,e.i(726527).createLogger)({service:"web",level:process.env.ALOOK_LOG_LEVEL||"info",pretty:!1});e.s(["log",0,t])},205054,e=>{"use strict";e.i(700598);var t=e.i(291109),a=e.i(704024),s=e.i(799579),r=e.i(726089),n=e.i(740580),i=e.i(774078);let o=t.queries.task,d=t.queries.agent,c=t.queries.message,l=t.queries.conversation,u=t.queries.issue;e.s(["TaskService",0,class{db;constructor(e){this.db=e}async enqueueTask(e,t,s,r,n=a.TASK_TYPES.USER_DM_MESSAGE,c){let l=await d.getAgent(this.db,e,s);if(!l)throw Error("agent not found");if(!l.runtimeId)throw Error("agent has no runtime");if(c?.traceId&&c.parentTaskId&&await o.countTasksByTrace(this.db,c.traceId)>=a.MAX_TASKS_PER_TRACE)throw Error(`Trace limit reached (${a.MAX_TASKS_PER_TRACE} tasks). This may indicate an infinite loop between agents.`);let u=await o.createTask(this.db,{agentId:e,runtimeId:l.runtimeId,workspaceId:s,conversationId:t,prompt:r,type:n,contextKey:c?.contextKey??null,priority:0,context:c?.context,traceId:c?.traceId??null,parentTaskId:c?.parentTaskId??null});return(0,i.invalidate)(i.cacheKeys.activeTaskCounts(s)).catch(()=>{}),u}async claimTask(e,t){let a=await d.getAgent(this.db,e,t);if(!a)return null;if(await o.countRunningTasks(this.db,e,t)>=a.maxConcurrentTasks){let s=await o.findSteerableReplacement(this.db,e,t);if(!s||await o.countRunningTasks(this.db,e,t,s.predecessorId)>=a.maxConcurrentTasks)return null}let s=await o.claimTask(this.db,e,t);return s?(await d.updateAgentStatus(this.db,e,t,"working"),s):null}async claimTasksForRuntimes(e,t,a){let s=await o.claimKillTasks(this.db,e,a,t),r=t-s.length,n=r>0?await o.listPendingTasksByRuntimes(this.db,e,a):[],i=new Set(e),d=new Set,c=[...s],l=[];for(let e of n){if(l.length>=r)break;let t=`${e.agentId}:${e.workspaceId}`;d.has(t)||(d.add(t),l.push(e))}for(let e of(await Promise.all(l.map(e=>this.claimTask(e.agentId,e.workspaceId)))))e&&i.has(e.runtimeId)&&c.push(e);return c}async startTask(e,t){let a=await o.startTask(this.db,e,t);if(!a)throw Error("task not in dispatched status");return a}async completeTask(e,t,a,i){let d;try{d=JSON.parse(a)}catch{d={raw:a}}let u=await o.completeTask(this.db,e,t,{result:d,sessionId:i||null});if(!u){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`completeTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot complete task in '${a}' status`)}let p=d,h="string"==typeof p?.output?p.output:"";if(h){let a=await c.createMessage(this.db,{conversationId:u.conversationId,role:"assistant",content:h,taskId:e});try{let e=await l.getConversation(this.db,u.conversationId,t);e&&(0,r.broadcastToUser)(e.userId,{type:"conversation.message",conversationId:u.conversationId,message:(0,n.messageToResponse)(a)}).catch(()=>{})}catch{}}return await this.reconcileAgentStatus(u.agentId,u.workspaceId),await this.dispatchNextBufferedMessage(u.conversationId,u.workspaceId),u}async failTask(e,t,i){let d=await o.failTask(this.db,e,t,i);if(!d){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`failTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot fail task in '${a}' status`)}if(d.type===a.TASK_TYPES.KILL_TASK)return d;if(i){let a=await c.createMessage(this.db,{conversationId:d.conversationId,role:"assistant",content:`Error: ${i}`,taskId:e});try{let e=await l.getConversation(this.db,d.conversationId,t);e&&(0,r.broadcastToUser)(e.userId,{type:"conversation.message",conversationId:d.conversationId,message:(0,n.messageToResponse)(a)}).catch(()=>{})}catch{}}return await this.reconcileAgentStatus(d.agentId,d.workspaceId),await this.syncIssueStatusFromTask(d,"failed"),await this.dispatchNextBufferedMessage(d.conversationId,d.workspaceId),d}async syncIssueStatusFromTask(e,t){if(e.type!==a.TASK_TYPES.ISSUE_EVENT)return;let s=await u.getIssueByConversation(this.db,e.conversationId,e.workspaceId);if(!s||s.status===t||!await u.updateIssue(this.db,s.id,e.workspaceId,{status:t}))return;let i=await c.createMessage(this.db,{conversationId:e.conversationId,role:"event",content:`Issue status changed: ${s.status} -> ${t}`,taskId:e.id,metadata:JSON.stringify({issueId:s.id})});try{let t=await l.getConversation(this.db,e.conversationId,e.workspaceId);t&&(0,r.broadcastToUser)(t.userId,{type:"conversation.message",conversationId:e.conversationId,message:(0,n.messageToResponse)(i)}).catch(()=>{})}catch{}}async supersedeTask(e,t){let a=await o.supersedeTask(this.db,e,t);if(!a){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`supersedeTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot supersede task in '${a}' status`)}return await this.reconcileAgentStatus(a.agentId,a.workspaceId),await this.dispatchNextBufferedMessage(a.conversationId,a.workspaceId),a}async retryTask(e,t){let a=await o.getTask(this.db,e);if(!a||a.workspaceId!==t)throw Error("task not found");if("failed"!==a.status)throw Error("only failed tasks can be retried");let s=await o.markFailedAsSuperseded(this.db,e,t);if(!s)throw Error("failed to mark task as superseded");return{oldTask:s,newTask:await this.enqueueTask(a.agentId,a.conversationId,t,a.prompt,a.type,{contextKey:a.contextKey??null,context:a.context,traceId:a.traceId??null,parentTaskId:a.parentTaskId??null})}}async cancelActiveTask(e,t,s){let r=await o.getActiveTaskByConversation(this.db,e,t);if(!r)return null;let n=await o.cancelTask(this.db,r.id,t);return n?(("dispatched"===r.status||"running"===r.status)&&await o.createTask(this.db,{agentId:r.agentId,runtimeId:r.runtimeId,workspaceId:t,conversationId:e,prompt:"",type:a.TASK_TYPES.KILL_TASK,context:{target_task_id:r.id}}),await c.createMessage(this.db,{conversationId:e,role:"assistant",content:s?.reason??"Task cancelled by user",taskId:r.id}),await this.reconcileAgentStatus(r.agentId,t),s?.skipDispatch||await this.dispatchNextBufferedMessage(e,t),n):null}async reconcileAgentStatus(e,t){let a=await o.countRunningTasks(this.db,e,t);await d.updateAgentStatus(this.db,e,t,a>0?"working":"idle"),(0,i.invalidate)(i.cacheKeys.activeTaskCounts(t)).catch(()=>{})}async dispatchNextBufferedMessage(e,t){let i=await c.activateNextBufferedMessage(this.db,e);if(!i)return null;let d=await l.getConversation(this.db,e,t);if(!d)return s.log.warn("dispatchNextBufferedMessage: conversation not found",{conversationId:e}),await c.revertToBuffered(this.db,i.id).catch(e=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:i.id,revertErr:e})}),null;let u=d.userId;try{let s=i.attachmentIds?JSON.parse(i.attachmentIds):[],l=await o.getLatestTaskForConversation(this.db,e),p=l?.traceId??null,h=await this.enqueueTask(d.agentId,e,t,i.content,a.TASK_TYPES.USER_DM_MESSAGE,{contextKey:e,context:s.length>0?{attachment_ids:s}:void 0,traceId:p,parentTaskId:null});return await c.updateMessageTaskId(this.db,i.id,h.id),(0,r.broadcastToUser)(u,{type:"followup.dispatched",conversationId:e,message:(0,n.messageToResponse)(i),task:(0,n.taskToResponse)(h)}).catch(()=>{}),h}catch(t){return s.log.warn("dispatchNextBufferedMessage: enqueueTask failed",{conversationId:e,err:t}),await c.revertToBuffered(this.db,i.id).catch(e=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:i.id,revertErr:e})}),(0,r.broadcastToUser)(u,{type:"followup.dispatch_failed",conversationId:e,messageId:i.id,error:t instanceof Error?t.message:"Failed to dispatch follow-up"}).catch(()=>{}),null}}async cancelTrace(e,t,a){for(let r of[...new Set((await o.getTraceTree(this.db,e,t)).filter(e=>["queued","dispatched","running"].includes(e.status)).map(e=>e.conversationId))])try{await this.cancelActiveTask(r,t,{skipDispatch:!0,reason:a?.reason})}catch(t){s.log.warn("cancelTrace: failed to cancel task",{traceId:e,convId:r,err:t})}}}])},825526,e=>e.a(async(t,a)=>{try{var s=e.i(291484),r=e.i(675139),n=e.i(152327),i=e.i(47962),o=e.i(776227),d=e.i(740580),c=e.i(205054),l=e.i(726089),u=e.i(774078),p=t([n]);[n]=p.then?(await p)():p;let h=(0,n.withAuth)(async(e,t)=>{let a=await (0,i.withWorkspaceMember)(e,t);if(a instanceof Response)return a;let{env:n}=(0,s.getCloudflareContext)(),p=(0,r.getDb)(n.DB),h=t.params?.id;if(!h)return(0,o.writeError)("task id is required",400);let w=new c.TaskService(p);try{let{oldTask:e,newTask:s}=await w.retryTask(h,a.workspaceId),r=new Date().toISOString().slice(0,10);return(0,u.invalidate)(u.cacheKeys.overviewTaskStats(a.workspaceId,r)).catch(()=>{}),(0,l.broadcastToUser)(t.userId,{type:"task.updated",taskId:e.id,agentId:e.agentId,status:"superseded"}).catch(()=>{}),(0,l.broadcastToUser)(t.userId,{type:"task.updated",taskId:s.id,agentId:s.agentId,status:"queued"}).catch(()=>{}),(0,o.writeJSON)((0,d.taskToResponse)(s))}catch(e){return(0,o.writeError)(e instanceof Error?e.message:"Unknown error",400)}});e.s(["POST",0,h]),a()}catch(e){a(e)}},!1),867955,e=>e.a(async(t,a)=>{try{var s=e.i(80774),r=e.i(404478),n=e.i(732985),i=e.i(481671),o=e.i(638081),d=e.i(204960),c=e.i(924918),l=e.i(363585),u=e.i(906846),p=e.i(359838),h=e.i(383303),w=e.i(234173),g=e.i(270215),k=e.i(830665),f=e.i(944002),T=e.i(193695);e.i(195928);var v=e.i(81543),y=e.i(825526),I=t([y]);[y]=I.then?(await I)():I;let b=new s.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/tasks/[id]/retry/route",pathname:"/api/tasks/[id]/retry",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/web/src/app/api/tasks/[id]/retry/route.ts",nextConfigOutput:"standalone",userland:y,...{}}),{workAsyncStorage:_,workUnitAsyncStorage:R,serverHooks:E}=b;async function m(e,t,a){a.requestMeta&&(0,i.setRequestMeta)(e,a.requestMeta),b.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let s="/api/tasks/[id]/retry/route";s=s.replace(/\/index$/,"")||"/";let n=await b.prepare(e,t,{srcPage:s,multiZoneDraftMode:!1});if(!n)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:y,deploymentId:I,params:m,nextConfig:_,parsedUrl:R,isDraftMode:E,prerenderManifest:S,routerServerContext:A,isOnDemandRevalidate:x,revalidateOnlyGenerated:C,resolvedPathname:N,clientReferenceManifest:P,serverActionsManifest:M}=n,O=(0,c.normalizeAppPath)(s),q=!!(S.dynamicRoutes[O]||S.routes[N]),U=async()=>((null==A?void 0:A.render404)?await A.render404(e,t,R,!1):t.end("This page could not be found"),null);if(q&&!E){let e=!!S.routes[N],t=S.dynamicRoutes[O];if(t&&!1===t.fallback&&!e){if(_.adapterPath)return await U();throw new T.NoFallbackError}}let K=null;!q||b.isDev||E||(K=N,K="/index"===K?"/":K);let D=!0===b.isDev||!q,$=q&&!D;M&&P&&(0,d.setManifestsSingleton)({page:s,clientReferenceManifest:P,serverActionsManifest:M});let B=e.method||"GET",j=(0,o.getTracer)(),L=j.getActiveScopeSpan(),H=!!(null==A?void 0:A.isWrappedByNextServer),F=!!(0,i.getRequestMeta)(e,"minimalMode"),W=(0,i.getRequestMeta)(e,"incrementalCache")||await b.getIncrementalCache(e,_,S,F);null==W||W.resetRequestCache(),globalThis.__incrementalCache=W;let V={params:m,previewProps:S.preview,renderOpts:{experimental:{authInterrupts:!!_.experimental.authInterrupts},cacheComponents:!!_.cacheComponents,supportsDynamicResponse:D,incrementalCache:W,cacheLifeProfiles:_.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,s,r)=>b.onRequestError(e,t,s,r,A)},sharedContext:{buildId:y,deploymentId:I}},Y=new l.NodeNextRequest(e),G=new l.NodeNextResponse(t),J=u.NextRequestAdapter.fromNodeNextRequest(Y,(0,u.signalFromNodeResponse)(t));try{let n,i=async e=>b.handle(J,V).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let a=j.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=a.get("next.route");if(r){let t=`${B} ${r}`;e.setAttributes({"next.route":r,"http.route":r,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",r),n.updateName(t))}else e.updateName(`${B} ${s}`)}),d=async n=>{var o,d;let c=async({previousCacheEntry:r})=>{try{if(!F&&x&&C&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await i(n);e.fetchMetrics=V.renderOpts.fetchMetrics;let o=V.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let d=V.renderOpts.collectedTags;if(!q)return await (0,w.sendResponse)(Y,G,s,V.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,g.toNodeOutgoingHttpHeaders)(s.headers);d&&(t[f.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==V.renderOpts.collectedRevalidate&&!(V.renderOpts.collectedRevalidate>=f.INFINITE_CACHE)&&V.renderOpts.collectedRevalidate,r=void 0===V.renderOpts.collectedExpire||V.renderOpts.collectedExpire>=f.INFINITE_CACHE?void 0:V.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:r}}}}catch(t){throw(null==r?void 0:r.isStale)&&await b.onRequestError(e,t,{routerKind:"App Router",routePath:s,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:x})},!1,A),t}},l=await b.handleResponse({req:e,nextConfig:_,cacheKey:K,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:S,isRoutePPREnabled:!1,isOnDemandRevalidate:x,revalidateOnlyGenerated:C,responseGenerator:c,waitUntil:a.waitUntil,isMinimalMode:F});if(!q)return null;if((null==l||null==(o=l.value)?void 0:o.kind)!==v.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(d=l.value)?void 0:d.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});F||t.setHeader("x-nextjs-cache",x?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),E&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,g.fromNodeOutgoingHttpHeaders)(l.value.headers);return F&&q||u.delete(f.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,k.getCacheControlHeader)(l.cacheControl)),await (0,w.sendResponse)(Y,G,new Response(l.value.body,{headers:u,status:l.value.status||200})),null};H&&L?await d(L):(n=j.getActiveScopeSpan(),await j.withPropagatedContext(e.headers,()=>j.trace(p.BaseServerSpan.handleRequest,{spanName:`${B} ${s}`,kind:o.SpanKind.SERVER,attributes:{"http.method":B,"http.target":e.url}},d),void 0,!H))}catch(t){if(t instanceof T.NoFallbackError||await b.onRequestError(e,t,{routerKind:"App Router",routePath:O,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:x})},!1,A),q)throw t;return await (0,w.sendResponse)(Y,G,new Response(null,{status:500})),null}}e.s(["handler",0,m,"patchFetch",0,function(){return(0,n.patchFetch)({workAsyncStorage:_,workUnitAsyncStorage:R})},"routeModule",0,b,"serverHooks",0,E,"workAsyncStorage",0,_,"workUnitAsyncStorage",0,R]),a()}catch(e){a(e)}},!1),572758,e=>{e.v(t=>Promise.all(["server/chunks/0yh8_@better-auth_memory-adapter_dist_index_mjs_0u9gr83._.js"].map(t=>e.l(t))).then(()=>t(501816)))},409008,e=>{e.v(t=>Promise.all(["server/chunks/0cae_better-auth_dist_adapters_kysely-adapter_index_mjs_0c-9lzd._.js"].map(t=>e.l(t))).then(()=>t(770021)))},96318,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_bun-sqlite-dialect-na--YwnN_mjs_0ua5mwj._.js"].map(t=>e.l(t))).then(()=>t(158195)))},11379,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_node-sqlite-dialect_mjs_0evb.r9._.js"].map(t=>e.l(t))).then(()=>t(302822)))},946743,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_d1-sqlite-dialect-C2B7YsIT_mjs_0bihzky._.js"].map(t=>e.l(t))).then(()=>t(898679)))}];
2
2
 
3
3
  //# sourceMappingURL=_0j1t6f2._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[726089,e=>{"use strict";var t=e.i(291484);e.i(700598);var a=e.i(704024);let s=(0,e.i(726527).createLogger)({service:"broadcast"});async function r(e,r,n){let i;try{let{env:a}=(0,t.getCloudflareContext)();i=a.DEV_WS_DO_URL;let o=await a.WS_DO_WORKER.fetch(`http://internal${e}`,{method:"POST",body:r});if(o.ok)return;s.warn("broadcast service-binding non-ok",{...n,status:o.status});return}catch{}let o=i||a.DEV_WS_DO_URL;try{let t=await fetch(`${o}${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:r});t.ok||s.warn("broadcast failed",{...n,status:t.status})}catch(e){s.warn("broadcast error",{...n,err:String(e)})}}e.s(["broadcastToUser",0,function(e,a){return function(e,a,s){let n=r(e,a,s);try{let{ctx:e}=(0,t.getCloudflareContext)();e.waitUntil(n)}catch{}return n}(`/broadcast/user/${e}`,JSON.stringify(a),{userId:e,type:a.type})}])},799579,e=>{"use strict";e.i(700598);let t=(0,e.i(726527).createLogger)({service:"web",level:process.env.ALOOK_LOG_LEVEL||"info",pretty:!1});e.s(["log",0,t])},205054,e=>{"use strict";e.i(700598);var t=e.i(291109),a=e.i(704024),s=e.i(799579),r=e.i(726089),n=e.i(740580),i=e.i(774078);let o=t.queries.task,d=t.queries.agent,c=t.queries.message,l=t.queries.conversation,u=t.queries.issue;e.s(["TaskService",0,class{db;constructor(e){this.db=e}async enqueueTask(e,t,s,r,n=a.TASK_TYPES.USER_DM_MESSAGE,c){let l=await d.getAgent(this.db,e,s);if(!l)throw Error("agent not found");if(!l.runtimeId)throw Error("agent has no runtime");if(c?.traceId&&c.parentTaskId&&await o.countTasksByTrace(this.db,c.traceId)>=a.MAX_TASKS_PER_TRACE)throw Error(`Trace limit reached (${a.MAX_TASKS_PER_TRACE} tasks). This may indicate an infinite loop between agents.`);let u=await o.createTask(this.db,{agentId:e,runtimeId:l.runtimeId,workspaceId:s,conversationId:t,prompt:r,type:n,contextKey:c?.contextKey??null,priority:0,context:c?.context,traceId:c?.traceId??null,parentTaskId:c?.parentTaskId??null});return(0,i.invalidate)(i.cacheKeys.activeTaskCounts(s)).catch(()=>{}),u}async claimTask(e,t){let a=await d.getAgent(this.db,e,t);if(!a)return null;if(await o.countRunningTasks(this.db,e,t)>=a.maxConcurrentTasks){let s=await o.findSteerableReplacement(this.db,e,t);if(!s||await o.countRunningTasks(this.db,e,t,s.predecessorId)>=a.maxConcurrentTasks)return null}let s=await o.claimTask(this.db,e,t);return s?(await d.updateAgentStatus(this.db,e,t,"working"),s):null}async claimTasksForRuntimes(e,t,a){let s=await o.claimKillTasks(this.db,e,a,t),r=t-s.length,n=r>0?await o.listPendingTasksByRuntimes(this.db,e,a):[],i=new Set(e),d=new Set,c=[...s],l=[];for(let e of n){if(l.length>=r)break;let t=`${e.agentId}:${e.workspaceId}`;d.has(t)||(d.add(t),l.push(e))}for(let e of(await Promise.all(l.map(e=>this.claimTask(e.agentId,e.workspaceId)))))e&&i.has(e.runtimeId)&&c.push(e);return c}async startTask(e,t){let a=await o.startTask(this.db,e,t);if(!a)throw Error("task not in dispatched status");return a}async completeTask(e,t,a,r){let n;try{n=JSON.parse(a)}catch{n={raw:a}}let i=await o.completeTask(this.db,e,t,{result:n,sessionId:r||null});if(!i){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`completeTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot complete task in '${a}' status`)}let d=n,l="string"==typeof d?.output?d.output:"";return l&&await c.createMessage(this.db,{conversationId:i.conversationId,role:"assistant",content:l,taskId:e}),await this.reconcileAgentStatus(i.agentId,i.workspaceId),await this.dispatchNextBufferedMessage(i.conversationId,i.workspaceId),i}async failTask(e,t,r){let n=await o.failTask(this.db,e,t,r);if(!n){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`failTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot fail task in '${a}' status`)}return n.type===a.TASK_TYPES.KILL_TASK||(r&&await c.createMessage(this.db,{conversationId:n.conversationId,role:"assistant",content:`Error: ${r}`,taskId:e}),await this.reconcileAgentStatus(n.agentId,n.workspaceId),await this.syncIssueStatusFromTask(n,"failed"),await this.dispatchNextBufferedMessage(n.conversationId,n.workspaceId)),n}async syncIssueStatusFromTask(e,t){if(e.type!==a.TASK_TYPES.ISSUE_EVENT)return;let s=await u.getIssueByConversation(this.db,e.conversationId,e.workspaceId);if(!s||s.status===t||!await u.updateIssue(this.db,s.id,e.workspaceId,{status:t}))return;let i=await c.createMessage(this.db,{conversationId:e.conversationId,role:"event",content:`Issue status changed: ${s.status} -> ${t}`,taskId:e.id,metadata:JSON.stringify({issueId:s.id})});try{let t=await l.getConversation(this.db,e.conversationId,e.workspaceId);t&&(0,r.broadcastToUser)(t.userId,{type:"conversation.message",conversationId:e.conversationId,message:(0,n.messageToResponse)(i)}).catch(()=>{})}catch{}}async supersedeTask(e,t){let a=await o.supersedeTask(this.db,e,t);if(!a){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`supersedeTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot supersede task in '${a}' status`)}return await this.reconcileAgentStatus(a.agentId,a.workspaceId),await this.dispatchNextBufferedMessage(a.conversationId,a.workspaceId),a}async retryTask(e,t){let a=await o.getTask(this.db,e);if(!a||a.workspaceId!==t)throw Error("task not found");if("failed"!==a.status)throw Error("only failed tasks can be retried");let s=await o.markFailedAsSuperseded(this.db,e,t);if(!s)throw Error("failed to mark task as superseded");return{oldTask:s,newTask:await this.enqueueTask(a.agentId,a.conversationId,t,a.prompt,a.type,{contextKey:a.contextKey??null,context:a.context,traceId:a.traceId??null,parentTaskId:a.parentTaskId??null})}}async cancelActiveTask(e,t,s){let r=await o.getActiveTaskByConversation(this.db,e,t);if(!r)return null;let n=await o.cancelTask(this.db,r.id,t);return n?(("dispatched"===r.status||"running"===r.status)&&await o.createTask(this.db,{agentId:r.agentId,runtimeId:r.runtimeId,workspaceId:t,conversationId:e,prompt:"",type:a.TASK_TYPES.KILL_TASK,context:{target_task_id:r.id}}),await c.createMessage(this.db,{conversationId:e,role:"assistant",content:s?.reason??"Task cancelled by user",taskId:r.id}),await this.reconcileAgentStatus(r.agentId,t),s?.skipDispatch||await this.dispatchNextBufferedMessage(e,t),n):null}async reconcileAgentStatus(e,t){let a=await o.countRunningTasks(this.db,e,t);await d.updateAgentStatus(this.db,e,t,a>0?"working":"idle"),(0,i.invalidate)(i.cacheKeys.activeTaskCounts(t)).catch(()=>{})}async dispatchNextBufferedMessage(e,t){let i=await c.activateNextBufferedMessage(this.db,e);if(!i)return null;let d=await l.getConversation(this.db,e,t);if(!d)return s.log.warn("dispatchNextBufferedMessage: conversation not found",{conversationId:e}),await c.revertToBuffered(this.db,i.id).catch(e=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:i.id,revertErr:e})}),null;let u=d.userId;try{let s=i.attachmentIds?JSON.parse(i.attachmentIds):[],l=await o.getLatestTaskForConversation(this.db,e),p=l?.traceId??null,h=await this.enqueueTask(d.agentId,e,t,i.content,a.TASK_TYPES.USER_DM_MESSAGE,{contextKey:e,context:s.length>0?{attachment_ids:s}:void 0,traceId:p,parentTaskId:null});return await c.updateMessageTaskId(this.db,i.id,h.id),(0,r.broadcastToUser)(u,{type:"followup.dispatched",conversationId:e,message:(0,n.messageToResponse)(i),task:(0,n.taskToResponse)(h)}).catch(()=>{}),h}catch(t){return s.log.warn("dispatchNextBufferedMessage: enqueueTask failed",{conversationId:e,err:t}),await c.revertToBuffered(this.db,i.id).catch(e=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:i.id,revertErr:e})}),(0,r.broadcastToUser)(u,{type:"followup.dispatch_failed",conversationId:e,messageId:i.id,error:t instanceof Error?t.message:"Failed to dispatch follow-up"}).catch(()=>{}),null}}async cancelTrace(e,t,a){for(let r of[...new Set((await o.getTraceTree(this.db,e,t)).filter(e=>["queued","dispatched","running"].includes(e.status)).map(e=>e.conversationId))])try{await this.cancelActiveTask(r,t,{skipDispatch:!0,reason:a?.reason})}catch(t){s.log.warn("cancelTrace: failed to cancel task",{traceId:e,convId:r,err:t})}}}])},258704,e=>e.a(async(t,a)=>{try{var s=e.i(291484);e.i(700598);var r=e.i(291109),n=e.i(675139),i=e.i(152327),o=e.i(47962),d=e.i(776227),c=e.i(740580),l=e.i(205054),u=e.i(726089),p=e.i(774078),h=t([i]);[i]=h.then?(await h)():h;let w=(0,i.withAuth)(async(e,t)=>{let a=await (0,o.withWorkspaceMember)(e,t);if(a instanceof Response)return a;let{env:i}=(0,s.getCloudflareContext)(),l=(0,n.getDb)(i.DB),u=t.params?.id;if(!u)return(0,d.writeError)("conversation id is required",400);if(!await r.queries.conversation.getConversation(l,u,a.workspaceId))return(0,d.writeError)("conversation not found",404);let p=await r.queries.task.getActiveTaskByConversation(l,u,a.workspaceId);return p?(0,d.writeJSON)((0,c.taskToResponse)(p)):new Response(null,{status:204})}),g=(0,i.withAuth)(async(e,t)=>{let a=await (0,o.withWorkspaceMember)(e,t);if(a instanceof Response)return a;let{env:i}=(0,s.getCloudflareContext)(),h=(0,n.getDb)(i.DB),w=t.params?.id;if(!w)return(0,d.writeError)("conversation id is required",400);if(!await r.queries.conversation.getConversation(h,w,a.workspaceId))return(0,d.writeError)("conversation not found",404);let g=new l.TaskService(h),f=await g.cancelActiveTask(w,a.workspaceId);if(!f)return(0,d.writeError)("no active task to cancel",404);let k=new Date().toISOString().slice(0,10);return(0,p.invalidate)(p.cacheKeys.overviewTaskStats(a.workspaceId,k)).catch(()=>{}),(0,u.broadcastToUser)(t.userId,{type:"task.updated",taskId:f.id,agentId:f.agentId,status:"cancelled"}).catch(()=>{}),(0,d.writeJSON)((0,c.taskToResponse)(f))});e.s(["DELETE",0,g,"GET",0,w]),a()}catch(e){a(e)}},!1),993823,e=>e.a(async(t,a)=>{try{var s=e.i(80774),r=e.i(404478),n=e.i(732985),i=e.i(481671),o=e.i(638081),d=e.i(204960),c=e.i(924918),l=e.i(363585),u=e.i(906846),p=e.i(359838),h=e.i(383303),w=e.i(234173),g=e.i(270215),f=e.i(830665),k=e.i(944002),v=e.i(193695);e.i(195928);var T=e.i(81543),m=e.i(258704),y=t([m]);[m]=y.then?(await y)():y;let b=new s.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/conversations/[id]/active-task/route",pathname:"/api/conversations/[id]/active-task",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/web/src/app/api/conversations/[id]/active-task/route.ts",nextConfigOutput:"standalone",userland:m,...{}}),{workAsyncStorage:_,workUnitAsyncStorage:E,serverHooks:R}=b;async function I(e,t,a){a.requestMeta&&(0,i.setRequestMeta)(e,a.requestMeta),b.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let s="/api/conversations/[id]/active-task/route";s=s.replace(/\/index$/,"")||"/";let n=await b.prepare(e,t,{srcPage:s,multiZoneDraftMode:!1});if(!n)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:m,deploymentId:y,params:I,nextConfig:_,parsedUrl:E,isDraftMode:R,prerenderManifest:S,routerServerContext:A,isOnDemandRevalidate:C,revalidateOnlyGenerated:x,resolvedPathname:N,clientReferenceManifest:P,serverActionsManifest:M}=n,O=(0,c.normalizeAppPath)(s),q=!!(S.dynamicRoutes[O]||S.routes[N]),K=async()=>((null==A?void 0:A.render404)?await A.render404(e,t,E,!1):t.end("This page could not be found"),null);if(q&&!R){let e=!!S.routes[N],t=S.dynamicRoutes[O];if(t&&!1===t.fallback&&!e){if(_.adapterPath)return await K();throw new v.NoFallbackError}}let D=null;!q||b.isDev||R||(D=N,D="/index"===D?"/":D);let U=!0===b.isDev||!q,B=q&&!U;M&&P&&(0,d.setManifestsSingleton)({page:s,clientReferenceManifest:P,serverActionsManifest:M});let $=e.method||"GET",j=(0,o.getTracer)(),L=j.getActiveScopeSpan(),H=!!(null==A?void 0:A.isWrappedByNextServer),F=!!(0,i.getRequestMeta)(e,"minimalMode"),W=(0,i.getRequestMeta)(e,"incrementalCache")||await b.getIncrementalCache(e,_,S,F);null==W||W.resetRequestCache(),globalThis.__incrementalCache=W;let G={params:I,previewProps:S.preview,renderOpts:{experimental:{authInterrupts:!!_.experimental.authInterrupts},cacheComponents:!!_.cacheComponents,supportsDynamicResponse:U,incrementalCache:W,cacheLifeProfiles:_.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,s,r)=>b.onRequestError(e,t,s,r,A)},sharedContext:{buildId:m,deploymentId:y}},V=new l.NodeNextRequest(e),Y=new l.NodeNextResponse(t),J=u.NextRequestAdapter.fromNodeNextRequest(V,(0,u.signalFromNodeResponse)(t));try{let n,i=async e=>b.handle(J,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let a=j.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=a.get("next.route");if(r){let t=`${$} ${r}`;e.setAttributes({"next.route":r,"http.route":r,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",r),n.updateName(t))}else e.updateName(`${$} ${s}`)}),d=async n=>{var o,d;let c=async({previousCacheEntry:r})=>{try{if(!F&&C&&x&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await i(n);e.fetchMetrics=G.renderOpts.fetchMetrics;let o=G.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let d=G.renderOpts.collectedTags;if(!q)return await (0,w.sendResponse)(V,Y,s,G.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,g.toNodeOutgoingHttpHeaders)(s.headers);d&&(t[k.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=k.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,r=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=k.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:T.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:r}}}}catch(t){throw(null==r?void 0:r.isStale)&&await b.onRequestError(e,t,{routerKind:"App Router",routePath:s,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:B,isOnDemandRevalidate:C})},!1,A),t}},l=await b.handleResponse({req:e,nextConfig:_,cacheKey:D,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:S,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:x,responseGenerator:c,waitUntil:a.waitUntil,isMinimalMode:F});if(!q)return null;if((null==l||null==(o=l.value)?void 0:o.kind)!==T.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(d=l.value)?void 0:d.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});F||t.setHeader("x-nextjs-cache",C?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),R&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,g.fromNodeOutgoingHttpHeaders)(l.value.headers);return F&&q||u.delete(k.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,f.getCacheControlHeader)(l.cacheControl)),await (0,w.sendResponse)(V,Y,new Response(l.value.body,{headers:u,status:l.value.status||200})),null};H&&L?await d(L):(n=j.getActiveScopeSpan(),await j.withPropagatedContext(e.headers,()=>j.trace(p.BaseServerSpan.handleRequest,{spanName:`${$} ${s}`,kind:o.SpanKind.SERVER,attributes:{"http.method":$,"http.target":e.url}},d),void 0,!H))}catch(t){if(t instanceof v.NoFallbackError||await b.onRequestError(e,t,{routerKind:"App Router",routePath:O,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:B,isOnDemandRevalidate:C})},!1,A),q)throw t;return await (0,w.sendResponse)(V,Y,new Response(null,{status:500})),null}}e.s(["handler",0,I,"patchFetch",0,function(){return(0,n.patchFetch)({workAsyncStorage:_,workUnitAsyncStorage:E})},"routeModule",0,b,"serverHooks",0,R,"workAsyncStorage",0,_,"workUnitAsyncStorage",0,E]),a()}catch(e){a(e)}},!1),572758,e=>{e.v(t=>Promise.all(["server/chunks/0yh8_@better-auth_memory-adapter_dist_index_mjs_0u9gr83._.js"].map(t=>e.l(t))).then(()=>t(501816)))},409008,e=>{e.v(t=>Promise.all(["server/chunks/0cae_better-auth_dist_adapters_kysely-adapter_index_mjs_0c-9lzd._.js"].map(t=>e.l(t))).then(()=>t(770021)))},96318,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_bun-sqlite-dialect-na--YwnN_mjs_0ua5mwj._.js"].map(t=>e.l(t))).then(()=>t(158195)))},11379,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_node-sqlite-dialect_mjs_0evb.r9._.js"].map(t=>e.l(t))).then(()=>t(302822)))},946743,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_d1-sqlite-dialect-C2B7YsIT_mjs_0bihzky._.js"].map(t=>e.l(t))).then(()=>t(898679)))}];
1
+ module.exports=[726089,e=>{"use strict";var t=e.i(291484);e.i(700598);var a=e.i(704024);let s=(0,e.i(726527).createLogger)({service:"broadcast"});async function r(e,r,n){let i;try{let{env:a}=(0,t.getCloudflareContext)();i=a.DEV_WS_DO_URL;let o=await a.WS_DO_WORKER.fetch(`http://internal${e}`,{method:"POST",body:r});if(o.ok)return;s.warn("broadcast service-binding non-ok",{...n,status:o.status});return}catch{}let o=i||a.DEV_WS_DO_URL;try{let t=await fetch(`${o}${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:r});t.ok||s.warn("broadcast failed",{...n,status:t.status})}catch(e){s.warn("broadcast error",{...n,err:String(e)})}}e.s(["broadcastToUser",0,function(e,a){return function(e,a,s){let n=r(e,a,s);try{let{ctx:e}=(0,t.getCloudflareContext)();e.waitUntil(n)}catch{}return n}(`/broadcast/user/${e}`,JSON.stringify(a),{userId:e,type:a.type})}])},799579,e=>{"use strict";e.i(700598);let t=(0,e.i(726527).createLogger)({service:"web",level:process.env.ALOOK_LOG_LEVEL||"info",pretty:!1});e.s(["log",0,t])},205054,e=>{"use strict";e.i(700598);var t=e.i(291109),a=e.i(704024),s=e.i(799579),r=e.i(726089),n=e.i(740580),i=e.i(774078);let o=t.queries.task,d=t.queries.agent,c=t.queries.message,l=t.queries.conversation,u=t.queries.issue;e.s(["TaskService",0,class{db;constructor(e){this.db=e}async enqueueTask(e,t,s,r,n=a.TASK_TYPES.USER_DM_MESSAGE,c){let l=await d.getAgent(this.db,e,s);if(!l)throw Error("agent not found");if(!l.runtimeId)throw Error("agent has no runtime");if(c?.traceId&&c.parentTaskId&&await o.countTasksByTrace(this.db,c.traceId)>=a.MAX_TASKS_PER_TRACE)throw Error(`Trace limit reached (${a.MAX_TASKS_PER_TRACE} tasks). This may indicate an infinite loop between agents.`);let u=await o.createTask(this.db,{agentId:e,runtimeId:l.runtimeId,workspaceId:s,conversationId:t,prompt:r,type:n,contextKey:c?.contextKey??null,priority:0,context:c?.context,traceId:c?.traceId??null,parentTaskId:c?.parentTaskId??null});return(0,i.invalidate)(i.cacheKeys.activeTaskCounts(s)).catch(()=>{}),u}async claimTask(e,t){let a=await d.getAgent(this.db,e,t);if(!a)return null;if(await o.countRunningTasks(this.db,e,t)>=a.maxConcurrentTasks){let s=await o.findSteerableReplacement(this.db,e,t);if(!s||await o.countRunningTasks(this.db,e,t,s.predecessorId)>=a.maxConcurrentTasks)return null}let s=await o.claimTask(this.db,e,t);return s?(await d.updateAgentStatus(this.db,e,t,"working"),s):null}async claimTasksForRuntimes(e,t,a){let s=await o.claimKillTasks(this.db,e,a,t),r=t-s.length,n=r>0?await o.listPendingTasksByRuntimes(this.db,e,a):[],i=new Set(e),d=new Set,c=[...s],l=[];for(let e of n){if(l.length>=r)break;let t=`${e.agentId}:${e.workspaceId}`;d.has(t)||(d.add(t),l.push(e))}for(let e of(await Promise.all(l.map(e=>this.claimTask(e.agentId,e.workspaceId)))))e&&i.has(e.runtimeId)&&c.push(e);return c}async startTask(e,t){let a=await o.startTask(this.db,e,t);if(!a)throw Error("task not in dispatched status");return a}async completeTask(e,t,a,i){let d;try{d=JSON.parse(a)}catch{d={raw:a}}let u=await o.completeTask(this.db,e,t,{result:d,sessionId:i||null});if(!u){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`completeTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot complete task in '${a}' status`)}let p=d,h="string"==typeof p?.output?p.output:"";if(h){let a=await c.createMessage(this.db,{conversationId:u.conversationId,role:"assistant",content:h,taskId:e});try{let e=await l.getConversation(this.db,u.conversationId,t);e&&(0,r.broadcastToUser)(e.userId,{type:"conversation.message",conversationId:u.conversationId,message:(0,n.messageToResponse)(a)}).catch(()=>{})}catch{}}return await this.reconcileAgentStatus(u.agentId,u.workspaceId),await this.dispatchNextBufferedMessage(u.conversationId,u.workspaceId),u}async failTask(e,t,i){let d=await o.failTask(this.db,e,t,i);if(!d){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`failTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot fail task in '${a}' status`)}if(d.type===a.TASK_TYPES.KILL_TASK)return d;if(i){let a=await c.createMessage(this.db,{conversationId:d.conversationId,role:"assistant",content:`Error: ${i}`,taskId:e});try{let e=await l.getConversation(this.db,d.conversationId,t);e&&(0,r.broadcastToUser)(e.userId,{type:"conversation.message",conversationId:d.conversationId,message:(0,n.messageToResponse)(a)}).catch(()=>{})}catch{}}return await this.reconcileAgentStatus(d.agentId,d.workspaceId),await this.syncIssueStatusFromTask(d,"failed"),await this.dispatchNextBufferedMessage(d.conversationId,d.workspaceId),d}async syncIssueStatusFromTask(e,t){if(e.type!==a.TASK_TYPES.ISSUE_EVENT)return;let s=await u.getIssueByConversation(this.db,e.conversationId,e.workspaceId);if(!s||s.status===t||!await u.updateIssue(this.db,s.id,e.workspaceId,{status:t}))return;let i=await c.createMessage(this.db,{conversationId:e.conversationId,role:"event",content:`Issue status changed: ${s.status} -> ${t}`,taskId:e.id,metadata:JSON.stringify({issueId:s.id})});try{let t=await l.getConversation(this.db,e.conversationId,e.workspaceId);t&&(0,r.broadcastToUser)(t.userId,{type:"conversation.message",conversationId:e.conversationId,message:(0,n.messageToResponse)(i)}).catch(()=>{})}catch{}}async supersedeTask(e,t){let a=await o.supersedeTask(this.db,e,t);if(!a){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`supersedeTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot supersede task in '${a}' status`)}return await this.reconcileAgentStatus(a.agentId,a.workspaceId),await this.dispatchNextBufferedMessage(a.conversationId,a.workspaceId),a}async retryTask(e,t){let a=await o.getTask(this.db,e);if(!a||a.workspaceId!==t)throw Error("task not found");if("failed"!==a.status)throw Error("only failed tasks can be retried");let s=await o.markFailedAsSuperseded(this.db,e,t);if(!s)throw Error("failed to mark task as superseded");return{oldTask:s,newTask:await this.enqueueTask(a.agentId,a.conversationId,t,a.prompt,a.type,{contextKey:a.contextKey??null,context:a.context,traceId:a.traceId??null,parentTaskId:a.parentTaskId??null})}}async cancelActiveTask(e,t,s){let r=await o.getActiveTaskByConversation(this.db,e,t);if(!r)return null;let n=await o.cancelTask(this.db,r.id,t);return n?(("dispatched"===r.status||"running"===r.status)&&await o.createTask(this.db,{agentId:r.agentId,runtimeId:r.runtimeId,workspaceId:t,conversationId:e,prompt:"",type:a.TASK_TYPES.KILL_TASK,context:{target_task_id:r.id}}),await c.createMessage(this.db,{conversationId:e,role:"assistant",content:s?.reason??"Task cancelled by user",taskId:r.id}),await this.reconcileAgentStatus(r.agentId,t),s?.skipDispatch||await this.dispatchNextBufferedMessage(e,t),n):null}async reconcileAgentStatus(e,t){let a=await o.countRunningTasks(this.db,e,t);await d.updateAgentStatus(this.db,e,t,a>0?"working":"idle"),(0,i.invalidate)(i.cacheKeys.activeTaskCounts(t)).catch(()=>{})}async dispatchNextBufferedMessage(e,t){let i=await c.activateNextBufferedMessage(this.db,e);if(!i)return null;let d=await l.getConversation(this.db,e,t);if(!d)return s.log.warn("dispatchNextBufferedMessage: conversation not found",{conversationId:e}),await c.revertToBuffered(this.db,i.id).catch(e=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:i.id,revertErr:e})}),null;let u=d.userId;try{let s=i.attachmentIds?JSON.parse(i.attachmentIds):[],l=await o.getLatestTaskForConversation(this.db,e),p=l?.traceId??null,h=await this.enqueueTask(d.agentId,e,t,i.content,a.TASK_TYPES.USER_DM_MESSAGE,{contextKey:e,context:s.length>0?{attachment_ids:s}:void 0,traceId:p,parentTaskId:null});return await c.updateMessageTaskId(this.db,i.id,h.id),(0,r.broadcastToUser)(u,{type:"followup.dispatched",conversationId:e,message:(0,n.messageToResponse)(i),task:(0,n.taskToResponse)(h)}).catch(()=>{}),h}catch(t){return s.log.warn("dispatchNextBufferedMessage: enqueueTask failed",{conversationId:e,err:t}),await c.revertToBuffered(this.db,i.id).catch(e=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:i.id,revertErr:e})}),(0,r.broadcastToUser)(u,{type:"followup.dispatch_failed",conversationId:e,messageId:i.id,error:t instanceof Error?t.message:"Failed to dispatch follow-up"}).catch(()=>{}),null}}async cancelTrace(e,t,a){for(let r of[...new Set((await o.getTraceTree(this.db,e,t)).filter(e=>["queued","dispatched","running"].includes(e.status)).map(e=>e.conversationId))])try{await this.cancelActiveTask(r,t,{skipDispatch:!0,reason:a?.reason})}catch(t){s.log.warn("cancelTrace: failed to cancel task",{traceId:e,convId:r,err:t})}}}])},258704,e=>e.a(async(t,a)=>{try{var s=e.i(291484);e.i(700598);var r=e.i(291109),n=e.i(675139),i=e.i(152327),o=e.i(47962),d=e.i(776227),c=e.i(740580),l=e.i(205054),u=e.i(726089),p=e.i(774078),h=t([i]);[i]=h.then?(await h)():h;let w=(0,i.withAuth)(async(e,t)=>{let a=await (0,o.withWorkspaceMember)(e,t);if(a instanceof Response)return a;let{env:i}=(0,s.getCloudflareContext)(),l=(0,n.getDb)(i.DB),u=t.params?.id;if(!u)return(0,d.writeError)("conversation id is required",400);if(!await r.queries.conversation.getConversation(l,u,a.workspaceId))return(0,d.writeError)("conversation not found",404);let p=await r.queries.task.getActiveTaskByConversation(l,u,a.workspaceId);return p?(0,d.writeJSON)((0,c.taskToResponse)(p)):new Response(null,{status:204})}),g=(0,i.withAuth)(async(e,t)=>{let a=await (0,o.withWorkspaceMember)(e,t);if(a instanceof Response)return a;let{env:i}=(0,s.getCloudflareContext)(),h=(0,n.getDb)(i.DB),w=t.params?.id;if(!w)return(0,d.writeError)("conversation id is required",400);if(!await r.queries.conversation.getConversation(h,w,a.workspaceId))return(0,d.writeError)("conversation not found",404);let g=new l.TaskService(h),f=await g.cancelActiveTask(w,a.workspaceId);if(!f)return(0,d.writeError)("no active task to cancel",404);let v=new Date().toISOString().slice(0,10);return(0,p.invalidate)(p.cacheKeys.overviewTaskStats(a.workspaceId,v)).catch(()=>{}),(0,u.broadcastToUser)(t.userId,{type:"task.updated",taskId:f.id,agentId:f.agentId,status:"cancelled"}).catch(()=>{}),(0,d.writeJSON)((0,c.taskToResponse)(f))});e.s(["DELETE",0,g,"GET",0,w]),a()}catch(e){a(e)}},!1),993823,e=>e.a(async(t,a)=>{try{var s=e.i(80774),r=e.i(404478),n=e.i(732985),i=e.i(481671),o=e.i(638081),d=e.i(204960),c=e.i(924918),l=e.i(363585),u=e.i(906846),p=e.i(359838),h=e.i(383303),w=e.i(234173),g=e.i(270215),f=e.i(830665),v=e.i(944002),k=e.i(193695);e.i(195928);var T=e.i(81543),m=e.i(258704),I=t([m]);[m]=I.then?(await I)():I;let b=new s.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/conversations/[id]/active-task/route",pathname:"/api/conversations/[id]/active-task",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/web/src/app/api/conversations/[id]/active-task/route.ts",nextConfigOutput:"standalone",userland:m,...{}}),{workAsyncStorage:_,workUnitAsyncStorage:E,serverHooks:R}=b;async function y(e,t,a){a.requestMeta&&(0,i.setRequestMeta)(e,a.requestMeta),b.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let s="/api/conversations/[id]/active-task/route";s=s.replace(/\/index$/,"")||"/";let n=await b.prepare(e,t,{srcPage:s,multiZoneDraftMode:!1});if(!n)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:m,deploymentId:I,params:y,nextConfig:_,parsedUrl:E,isDraftMode:R,prerenderManifest:S,routerServerContext:A,isOnDemandRevalidate:C,revalidateOnlyGenerated:x,resolvedPathname:N,clientReferenceManifest:P,serverActionsManifest:M}=n,O=(0,c.normalizeAppPath)(s),q=!!(S.dynamicRoutes[O]||S.routes[N]),K=async()=>((null==A?void 0:A.render404)?await A.render404(e,t,E,!1):t.end("This page could not be found"),null);if(q&&!R){let e=!!S.routes[N],t=S.dynamicRoutes[O];if(t&&!1===t.fallback&&!e){if(_.adapterPath)return await K();throw new k.NoFallbackError}}let U=null;!q||b.isDev||R||(U=N,U="/index"===U?"/":U);let D=!0===b.isDev||!q,B=q&&!D;M&&P&&(0,d.setManifestsSingleton)({page:s,clientReferenceManifest:P,serverActionsManifest:M});let $=e.method||"GET",j=(0,o.getTracer)(),L=j.getActiveScopeSpan(),H=!!(null==A?void 0:A.isWrappedByNextServer),F=!!(0,i.getRequestMeta)(e,"minimalMode"),W=(0,i.getRequestMeta)(e,"incrementalCache")||await b.getIncrementalCache(e,_,S,F);null==W||W.resetRequestCache(),globalThis.__incrementalCache=W;let G={params:y,previewProps:S.preview,renderOpts:{experimental:{authInterrupts:!!_.experimental.authInterrupts},cacheComponents:!!_.cacheComponents,supportsDynamicResponse:D,incrementalCache:W,cacheLifeProfiles:_.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,s,r)=>b.onRequestError(e,t,s,r,A)},sharedContext:{buildId:m,deploymentId:I}},V=new l.NodeNextRequest(e),Y=new l.NodeNextResponse(t),J=u.NextRequestAdapter.fromNodeNextRequest(V,(0,u.signalFromNodeResponse)(t));try{let n,i=async e=>b.handle(J,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let a=j.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=a.get("next.route");if(r){let t=`${$} ${r}`;e.setAttributes({"next.route":r,"http.route":r,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",r),n.updateName(t))}else e.updateName(`${$} ${s}`)}),d=async n=>{var o,d;let c=async({previousCacheEntry:r})=>{try{if(!F&&C&&x&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await i(n);e.fetchMetrics=G.renderOpts.fetchMetrics;let o=G.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let d=G.renderOpts.collectedTags;if(!q)return await (0,w.sendResponse)(V,Y,s,G.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,g.toNodeOutgoingHttpHeaders)(s.headers);d&&(t[v.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=v.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,r=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=v.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:T.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:r}}}}catch(t){throw(null==r?void 0:r.isStale)&&await b.onRequestError(e,t,{routerKind:"App Router",routePath:s,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:B,isOnDemandRevalidate:C})},!1,A),t}},l=await b.handleResponse({req:e,nextConfig:_,cacheKey:U,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:S,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:x,responseGenerator:c,waitUntil:a.waitUntil,isMinimalMode:F});if(!q)return null;if((null==l||null==(o=l.value)?void 0:o.kind)!==T.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(d=l.value)?void 0:d.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});F||t.setHeader("x-nextjs-cache",C?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),R&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,g.fromNodeOutgoingHttpHeaders)(l.value.headers);return F&&q||u.delete(v.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,f.getCacheControlHeader)(l.cacheControl)),await (0,w.sendResponse)(V,Y,new Response(l.value.body,{headers:u,status:l.value.status||200})),null};H&&L?await d(L):(n=j.getActiveScopeSpan(),await j.withPropagatedContext(e.headers,()=>j.trace(p.BaseServerSpan.handleRequest,{spanName:`${$} ${s}`,kind:o.SpanKind.SERVER,attributes:{"http.method":$,"http.target":e.url}},d),void 0,!H))}catch(t){if(t instanceof k.NoFallbackError||await b.onRequestError(e,t,{routerKind:"App Router",routePath:O,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:B,isOnDemandRevalidate:C})},!1,A),q)throw t;return await (0,w.sendResponse)(V,Y,new Response(null,{status:500})),null}}e.s(["handler",0,y,"patchFetch",0,function(){return(0,n.patchFetch)({workAsyncStorage:_,workUnitAsyncStorage:E})},"routeModule",0,b,"serverHooks",0,R,"workAsyncStorage",0,_,"workUnitAsyncStorage",0,E]),a()}catch(e){a(e)}},!1),572758,e=>{e.v(t=>Promise.all(["server/chunks/0yh8_@better-auth_memory-adapter_dist_index_mjs_0u9gr83._.js"].map(t=>e.l(t))).then(()=>t(501816)))},409008,e=>{e.v(t=>Promise.all(["server/chunks/0cae_better-auth_dist_adapters_kysely-adapter_index_mjs_0c-9lzd._.js"].map(t=>e.l(t))).then(()=>t(770021)))},96318,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_bun-sqlite-dialect-na--YwnN_mjs_0ua5mwj._.js"].map(t=>e.l(t))).then(()=>t(158195)))},11379,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_node-sqlite-dialect_mjs_0evb.r9._.js"].map(t=>e.l(t))).then(()=>t(302822)))},946743,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_d1-sqlite-dialect-C2B7YsIT_mjs_0bihzky._.js"].map(t=>e.l(t))).then(()=>t(898679)))}];
2
2
 
3
3
  //# sourceMappingURL=_0lmedw9._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[726089,t=>{"use strict";var e=t.i(291484);t.i(700598);var a=t.i(704024);let s=(0,t.i(726527).createLogger)({service:"broadcast"});async function r(t,r,i){let n;try{let{env:a}=(0,e.getCloudflareContext)();n=a.DEV_WS_DO_URL;let d=await a.WS_DO_WORKER.fetch(`http://internal${t}`,{method:"POST",body:r});if(d.ok)return;s.warn("broadcast service-binding non-ok",{...i,status:d.status});return}catch{}let d=n||a.DEV_WS_DO_URL;try{let e=await fetch(`${d}${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:r});e.ok||s.warn("broadcast failed",{...i,status:e.status})}catch(t){s.warn("broadcast error",{...i,err:String(t)})}}t.s(["broadcastToUser",0,function(t,a){return function(t,a,s){let i=r(t,a,s);try{let{ctx:t}=(0,e.getCloudflareContext)();t.waitUntil(i)}catch{}return i}(`/broadcast/user/${t}`,JSON.stringify(a),{userId:t,type:a.type})}])},799579,t=>{"use strict";t.i(700598);let e=(0,t.i(726527).createLogger)({service:"web",level:process.env.ALOOK_LOG_LEVEL||"info",pretty:!1});t.s(["log",0,e])},205054,t=>{"use strict";t.i(700598);var e=t.i(291109),a=t.i(704024),s=t.i(799579),r=t.i(726089),i=t.i(740580),n=t.i(774078);let d=e.queries.task,o=e.queries.agent,c=e.queries.message,l=e.queries.conversation,u=e.queries.issue;t.s(["TaskService",0,class{db;constructor(t){this.db=t}async enqueueTask(t,e,s,r,i=a.TASK_TYPES.USER_DM_MESSAGE,c){let l=await o.getAgent(this.db,t,s);if(!l)throw Error("agent not found");if(!l.runtimeId)throw Error("agent has no runtime");if(c?.traceId&&c.parentTaskId&&await d.countTasksByTrace(this.db,c.traceId)>=a.MAX_TASKS_PER_TRACE)throw Error(`Trace limit reached (${a.MAX_TASKS_PER_TRACE} tasks). This may indicate an infinite loop between agents.`);let u=await d.createTask(this.db,{agentId:t,runtimeId:l.runtimeId,workspaceId:s,conversationId:e,prompt:r,type:i,contextKey:c?.contextKey??null,priority:0,context:c?.context,traceId:c?.traceId??null,parentTaskId:c?.parentTaskId??null});return(0,n.invalidate)(n.cacheKeys.activeTaskCounts(s)).catch(()=>{}),u}async claimTask(t,e){let a=await o.getAgent(this.db,t,e);if(!a)return null;if(await d.countRunningTasks(this.db,t,e)>=a.maxConcurrentTasks){let s=await d.findSteerableReplacement(this.db,t,e);if(!s||await d.countRunningTasks(this.db,t,e,s.predecessorId)>=a.maxConcurrentTasks)return null}let s=await d.claimTask(this.db,t,e);return s?(await o.updateAgentStatus(this.db,t,e,"working"),s):null}async claimTasksForRuntimes(t,e,a){let s=await d.claimKillTasks(this.db,t,a,e),r=e-s.length,i=r>0?await d.listPendingTasksByRuntimes(this.db,t,a):[],n=new Set(t),o=new Set,c=[...s],l=[];for(let t of i){if(l.length>=r)break;let e=`${t.agentId}:${t.workspaceId}`;o.has(e)||(o.add(e),l.push(t))}for(let t of(await Promise.all(l.map(t=>this.claimTask(t.agentId,t.workspaceId)))))t&&n.has(t.runtimeId)&&c.push(t);return c}async startTask(t,e){let a=await d.startTask(this.db,t,e);if(!a)throw Error("task not in dispatched status");return a}async completeTask(t,e,a,r){let i;try{i=JSON.parse(a)}catch{i={raw:a}}let n=await d.completeTask(this.db,t,e,{result:i,sessionId:r||null});if(!n){let e=await d.getTask(this.db,t),a=e?.status??"unknown";throw s.log.warn(`completeTask failed: task is in '${a}' status`,{taskId:t}),Error(`cannot complete task in '${a}' status`)}let o=i,l="string"==typeof o?.output?o.output:"";return l&&await c.createMessage(this.db,{conversationId:n.conversationId,role:"assistant",content:l,taskId:t}),await this.reconcileAgentStatus(n.agentId,n.workspaceId),await this.dispatchNextBufferedMessage(n.conversationId,n.workspaceId),n}async failTask(t,e,r){let i=await d.failTask(this.db,t,e,r);if(!i){let e=await d.getTask(this.db,t),a=e?.status??"unknown";throw s.log.warn(`failTask failed: task is in '${a}' status`,{taskId:t}),Error(`cannot fail task in '${a}' status`)}return i.type===a.TASK_TYPES.KILL_TASK||(r&&await c.createMessage(this.db,{conversationId:i.conversationId,role:"assistant",content:`Error: ${r}`,taskId:t}),await this.reconcileAgentStatus(i.agentId,i.workspaceId),await this.syncIssueStatusFromTask(i,"failed"),await this.dispatchNextBufferedMessage(i.conversationId,i.workspaceId)),i}async syncIssueStatusFromTask(t,e){if(t.type!==a.TASK_TYPES.ISSUE_EVENT)return;let s=await u.getIssueByConversation(this.db,t.conversationId,t.workspaceId);if(!s||s.status===e||!await u.updateIssue(this.db,s.id,t.workspaceId,{status:e}))return;let n=await c.createMessage(this.db,{conversationId:t.conversationId,role:"event",content:`Issue status changed: ${s.status} -> ${e}`,taskId:t.id,metadata:JSON.stringify({issueId:s.id})});try{let e=await l.getConversation(this.db,t.conversationId,t.workspaceId);e&&(0,r.broadcastToUser)(e.userId,{type:"conversation.message",conversationId:t.conversationId,message:(0,i.messageToResponse)(n)}).catch(()=>{})}catch{}}async supersedeTask(t,e){let a=await d.supersedeTask(this.db,t,e);if(!a){let e=await d.getTask(this.db,t),a=e?.status??"unknown";throw s.log.warn(`supersedeTask failed: task is in '${a}' status`,{taskId:t}),Error(`cannot supersede task in '${a}' status`)}return await this.reconcileAgentStatus(a.agentId,a.workspaceId),await this.dispatchNextBufferedMessage(a.conversationId,a.workspaceId),a}async retryTask(t,e){let a=await d.getTask(this.db,t);if(!a||a.workspaceId!==e)throw Error("task not found");if("failed"!==a.status)throw Error("only failed tasks can be retried");let s=await d.markFailedAsSuperseded(this.db,t,e);if(!s)throw Error("failed to mark task as superseded");return{oldTask:s,newTask:await this.enqueueTask(a.agentId,a.conversationId,e,a.prompt,a.type,{contextKey:a.contextKey??null,context:a.context,traceId:a.traceId??null,parentTaskId:a.parentTaskId??null})}}async cancelActiveTask(t,e,s){let r=await d.getActiveTaskByConversation(this.db,t,e);if(!r)return null;let i=await d.cancelTask(this.db,r.id,e);return i?(("dispatched"===r.status||"running"===r.status)&&await d.createTask(this.db,{agentId:r.agentId,runtimeId:r.runtimeId,workspaceId:e,conversationId:t,prompt:"",type:a.TASK_TYPES.KILL_TASK,context:{target_task_id:r.id}}),await c.createMessage(this.db,{conversationId:t,role:"assistant",content:s?.reason??"Task cancelled by user",taskId:r.id}),await this.reconcileAgentStatus(r.agentId,e),s?.skipDispatch||await this.dispatchNextBufferedMessage(t,e),i):null}async reconcileAgentStatus(t,e){let a=await d.countRunningTasks(this.db,t,e);await o.updateAgentStatus(this.db,t,e,a>0?"working":"idle"),(0,n.invalidate)(n.cacheKeys.activeTaskCounts(e)).catch(()=>{})}async dispatchNextBufferedMessage(t,e){let n=await c.activateNextBufferedMessage(this.db,t);if(!n)return null;let o=await l.getConversation(this.db,t,e);if(!o)return s.log.warn("dispatchNextBufferedMessage: conversation not found",{conversationId:t}),await c.revertToBuffered(this.db,n.id).catch(t=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:n.id,revertErr:t})}),null;let u=o.userId;try{let s=n.attachmentIds?JSON.parse(n.attachmentIds):[],l=await d.getLatestTaskForConversation(this.db,t),h=l?.traceId??null,k=await this.enqueueTask(o.agentId,t,e,n.content,a.TASK_TYPES.USER_DM_MESSAGE,{contextKey:t,context:s.length>0?{attachment_ids:s}:void 0,traceId:h,parentTaskId:null});return await c.updateMessageTaskId(this.db,n.id,k.id),(0,r.broadcastToUser)(u,{type:"followup.dispatched",conversationId:t,message:(0,i.messageToResponse)(n),task:(0,i.taskToResponse)(k)}).catch(()=>{}),k}catch(e){return s.log.warn("dispatchNextBufferedMessage: enqueueTask failed",{conversationId:t,err:e}),await c.revertToBuffered(this.db,n.id).catch(t=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:n.id,revertErr:t})}),(0,r.broadcastToUser)(u,{type:"followup.dispatch_failed",conversationId:t,messageId:n.id,error:e instanceof Error?e.message:"Failed to dispatch follow-up"}).catch(()=>{}),null}}async cancelTrace(t,e,a){for(let r of[...new Set((await d.getTraceTree(this.db,t,e)).filter(t=>["queued","dispatched","running"].includes(t.status)).map(t=>t.conversationId))])try{await this.cancelActiveTask(r,e,{skipDispatch:!0,reason:a?.reason})}catch(e){s.log.warn("cancelTrace: failed to cancel task",{traceId:t,convId:r,err:e})}}}])},572758,t=>{t.v(e=>Promise.all(["server/chunks/0yh8_@better-auth_memory-adapter_dist_index_mjs_0u9gr83._.js"].map(e=>t.l(e))).then(()=>e(501816)))},409008,t=>{t.v(e=>Promise.all(["server/chunks/0cae_better-auth_dist_adapters_kysely-adapter_index_mjs_0c-9lzd._.js"].map(e=>t.l(e))).then(()=>e(770021)))},96318,t=>{t.v(e=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_bun-sqlite-dialect-na--YwnN_mjs_0ua5mwj._.js"].map(e=>t.l(e))).then(()=>e(158195)))},11379,t=>{t.v(e=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_node-sqlite-dialect_mjs_0evb.r9._.js"].map(e=>t.l(e))).then(()=>e(302822)))},946743,t=>{t.v(e=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_d1-sqlite-dialect-C2B7YsIT_mjs_0bihzky._.js"].map(e=>t.l(e))).then(()=>e(898679)))}];
1
+ module.exports=[726089,t=>{"use strict";var e=t.i(291484);t.i(700598);var a=t.i(704024);let s=(0,t.i(726527).createLogger)({service:"broadcast"});async function r(t,r,i){let n;try{let{env:a}=(0,e.getCloudflareContext)();n=a.DEV_WS_DO_URL;let o=await a.WS_DO_WORKER.fetch(`http://internal${t}`,{method:"POST",body:r});if(o.ok)return;s.warn("broadcast service-binding non-ok",{...i,status:o.status});return}catch{}let o=n||a.DEV_WS_DO_URL;try{let e=await fetch(`${o}${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:r});e.ok||s.warn("broadcast failed",{...i,status:e.status})}catch(t){s.warn("broadcast error",{...i,err:String(t)})}}t.s(["broadcastToUser",0,function(t,a){return function(t,a,s){let i=r(t,a,s);try{let{ctx:t}=(0,e.getCloudflareContext)();t.waitUntil(i)}catch{}return i}(`/broadcast/user/${t}`,JSON.stringify(a),{userId:t,type:a.type})}])},799579,t=>{"use strict";t.i(700598);let e=(0,t.i(726527).createLogger)({service:"web",level:process.env.ALOOK_LOG_LEVEL||"info",pretty:!1});t.s(["log",0,e])},205054,t=>{"use strict";t.i(700598);var e=t.i(291109),a=t.i(704024),s=t.i(799579),r=t.i(726089),i=t.i(740580),n=t.i(774078);let o=e.queries.task,d=e.queries.agent,c=e.queries.message,l=e.queries.conversation,u=e.queries.issue;t.s(["TaskService",0,class{db;constructor(t){this.db=t}async enqueueTask(t,e,s,r,i=a.TASK_TYPES.USER_DM_MESSAGE,c){let l=await d.getAgent(this.db,t,s);if(!l)throw Error("agent not found");if(!l.runtimeId)throw Error("agent has no runtime");if(c?.traceId&&c.parentTaskId&&await o.countTasksByTrace(this.db,c.traceId)>=a.MAX_TASKS_PER_TRACE)throw Error(`Trace limit reached (${a.MAX_TASKS_PER_TRACE} tasks). This may indicate an infinite loop between agents.`);let u=await o.createTask(this.db,{agentId:t,runtimeId:l.runtimeId,workspaceId:s,conversationId:e,prompt:r,type:i,contextKey:c?.contextKey??null,priority:0,context:c?.context,traceId:c?.traceId??null,parentTaskId:c?.parentTaskId??null});return(0,n.invalidate)(n.cacheKeys.activeTaskCounts(s)).catch(()=>{}),u}async claimTask(t,e){let a=await d.getAgent(this.db,t,e);if(!a)return null;if(await o.countRunningTasks(this.db,t,e)>=a.maxConcurrentTasks){let s=await o.findSteerableReplacement(this.db,t,e);if(!s||await o.countRunningTasks(this.db,t,e,s.predecessorId)>=a.maxConcurrentTasks)return null}let s=await o.claimTask(this.db,t,e);return s?(await d.updateAgentStatus(this.db,t,e,"working"),s):null}async claimTasksForRuntimes(t,e,a){let s=await o.claimKillTasks(this.db,t,a,e),r=e-s.length,i=r>0?await o.listPendingTasksByRuntimes(this.db,t,a):[],n=new Set(t),d=new Set,c=[...s],l=[];for(let t of i){if(l.length>=r)break;let e=`${t.agentId}:${t.workspaceId}`;d.has(e)||(d.add(e),l.push(t))}for(let t of(await Promise.all(l.map(t=>this.claimTask(t.agentId,t.workspaceId)))))t&&n.has(t.runtimeId)&&c.push(t);return c}async startTask(t,e){let a=await o.startTask(this.db,t,e);if(!a)throw Error("task not in dispatched status");return a}async completeTask(t,e,a,n){let d;try{d=JSON.parse(a)}catch{d={raw:a}}let u=await o.completeTask(this.db,t,e,{result:d,sessionId:n||null});if(!u){let e=await o.getTask(this.db,t),a=e?.status??"unknown";throw s.log.warn(`completeTask failed: task is in '${a}' status`,{taskId:t}),Error(`cannot complete task in '${a}' status`)}let h=d,k="string"==typeof h?.output?h.output:"";if(k){let a=await c.createMessage(this.db,{conversationId:u.conversationId,role:"assistant",content:k,taskId:t});try{let t=await l.getConversation(this.db,u.conversationId,e);t&&(0,r.broadcastToUser)(t.userId,{type:"conversation.message",conversationId:u.conversationId,message:(0,i.messageToResponse)(a)}).catch(()=>{})}catch{}}return await this.reconcileAgentStatus(u.agentId,u.workspaceId),await this.dispatchNextBufferedMessage(u.conversationId,u.workspaceId),u}async failTask(t,e,n){let d=await o.failTask(this.db,t,e,n);if(!d){let e=await o.getTask(this.db,t),a=e?.status??"unknown";throw s.log.warn(`failTask failed: task is in '${a}' status`,{taskId:t}),Error(`cannot fail task in '${a}' status`)}if(d.type===a.TASK_TYPES.KILL_TASK)return d;if(n){let a=await c.createMessage(this.db,{conversationId:d.conversationId,role:"assistant",content:`Error: ${n}`,taskId:t});try{let t=await l.getConversation(this.db,d.conversationId,e);t&&(0,r.broadcastToUser)(t.userId,{type:"conversation.message",conversationId:d.conversationId,message:(0,i.messageToResponse)(a)}).catch(()=>{})}catch{}}return await this.reconcileAgentStatus(d.agentId,d.workspaceId),await this.syncIssueStatusFromTask(d,"failed"),await this.dispatchNextBufferedMessage(d.conversationId,d.workspaceId),d}async syncIssueStatusFromTask(t,e){if(t.type!==a.TASK_TYPES.ISSUE_EVENT)return;let s=await u.getIssueByConversation(this.db,t.conversationId,t.workspaceId);if(!s||s.status===e||!await u.updateIssue(this.db,s.id,t.workspaceId,{status:e}))return;let n=await c.createMessage(this.db,{conversationId:t.conversationId,role:"event",content:`Issue status changed: ${s.status} -> ${e}`,taskId:t.id,metadata:JSON.stringify({issueId:s.id})});try{let e=await l.getConversation(this.db,t.conversationId,t.workspaceId);e&&(0,r.broadcastToUser)(e.userId,{type:"conversation.message",conversationId:t.conversationId,message:(0,i.messageToResponse)(n)}).catch(()=>{})}catch{}}async supersedeTask(t,e){let a=await o.supersedeTask(this.db,t,e);if(!a){let e=await o.getTask(this.db,t),a=e?.status??"unknown";throw s.log.warn(`supersedeTask failed: task is in '${a}' status`,{taskId:t}),Error(`cannot supersede task in '${a}' status`)}return await this.reconcileAgentStatus(a.agentId,a.workspaceId),await this.dispatchNextBufferedMessage(a.conversationId,a.workspaceId),a}async retryTask(t,e){let a=await o.getTask(this.db,t);if(!a||a.workspaceId!==e)throw Error("task not found");if("failed"!==a.status)throw Error("only failed tasks can be retried");let s=await o.markFailedAsSuperseded(this.db,t,e);if(!s)throw Error("failed to mark task as superseded");return{oldTask:s,newTask:await this.enqueueTask(a.agentId,a.conversationId,e,a.prompt,a.type,{contextKey:a.contextKey??null,context:a.context,traceId:a.traceId??null,parentTaskId:a.parentTaskId??null})}}async cancelActiveTask(t,e,s){let r=await o.getActiveTaskByConversation(this.db,t,e);if(!r)return null;let i=await o.cancelTask(this.db,r.id,e);return i?(("dispatched"===r.status||"running"===r.status)&&await o.createTask(this.db,{agentId:r.agentId,runtimeId:r.runtimeId,workspaceId:e,conversationId:t,prompt:"",type:a.TASK_TYPES.KILL_TASK,context:{target_task_id:r.id}}),await c.createMessage(this.db,{conversationId:t,role:"assistant",content:s?.reason??"Task cancelled by user",taskId:r.id}),await this.reconcileAgentStatus(r.agentId,e),s?.skipDispatch||await this.dispatchNextBufferedMessage(t,e),i):null}async reconcileAgentStatus(t,e){let a=await o.countRunningTasks(this.db,t,e);await d.updateAgentStatus(this.db,t,e,a>0?"working":"idle"),(0,n.invalidate)(n.cacheKeys.activeTaskCounts(e)).catch(()=>{})}async dispatchNextBufferedMessage(t,e){let n=await c.activateNextBufferedMessage(this.db,t);if(!n)return null;let d=await l.getConversation(this.db,t,e);if(!d)return s.log.warn("dispatchNextBufferedMessage: conversation not found",{conversationId:t}),await c.revertToBuffered(this.db,n.id).catch(t=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:n.id,revertErr:t})}),null;let u=d.userId;try{let s=n.attachmentIds?JSON.parse(n.attachmentIds):[],l=await o.getLatestTaskForConversation(this.db,t),h=l?.traceId??null,k=await this.enqueueTask(d.agentId,t,e,n.content,a.TASK_TYPES.USER_DM_MESSAGE,{contextKey:t,context:s.length>0?{attachment_ids:s}:void 0,traceId:h,parentTaskId:null});return await c.updateMessageTaskId(this.db,n.id,k.id),(0,r.broadcastToUser)(u,{type:"followup.dispatched",conversationId:t,message:(0,i.messageToResponse)(n),task:(0,i.taskToResponse)(k)}).catch(()=>{}),k}catch(e){return s.log.warn("dispatchNextBufferedMessage: enqueueTask failed",{conversationId:t,err:e}),await c.revertToBuffered(this.db,n.id).catch(t=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:n.id,revertErr:t})}),(0,r.broadcastToUser)(u,{type:"followup.dispatch_failed",conversationId:t,messageId:n.id,error:e instanceof Error?e.message:"Failed to dispatch follow-up"}).catch(()=>{}),null}}async cancelTrace(t,e,a){for(let r of[...new Set((await o.getTraceTree(this.db,t,e)).filter(t=>["queued","dispatched","running"].includes(t.status)).map(t=>t.conversationId))])try{await this.cancelActiveTask(r,e,{skipDispatch:!0,reason:a?.reason})}catch(e){s.log.warn("cancelTrace: failed to cancel task",{traceId:t,convId:r,err:e})}}}])},572758,t=>{t.v(e=>Promise.all(["server/chunks/0yh8_@better-auth_memory-adapter_dist_index_mjs_0u9gr83._.js"].map(e=>t.l(e))).then(()=>e(501816)))},409008,t=>{t.v(e=>Promise.all(["server/chunks/0cae_better-auth_dist_adapters_kysely-adapter_index_mjs_0c-9lzd._.js"].map(e=>t.l(e))).then(()=>e(770021)))},96318,t=>{t.v(e=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_bun-sqlite-dialect-na--YwnN_mjs_0ua5mwj._.js"].map(e=>t.l(e))).then(()=>e(158195)))},11379,t=>{t.v(e=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_node-sqlite-dialect_mjs_0evb.r9._.js"].map(e=>t.l(e))).then(()=>e(302822)))},946743,t=>{t.v(e=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_d1-sqlite-dialect-C2B7YsIT_mjs_0bihzky._.js"].map(e=>t.l(e))).then(()=>e(898679)))}];
2
2
 
3
3
  //# sourceMappingURL=_0ns9.qo._.js.map
@@ -1,5 +1,5 @@
1
- module.exports=[726089,e=>{"use strict";var t=e.i(291484);e.i(700598);var a=e.i(704024);let s=(0,e.i(726527).createLogger)({service:"broadcast"});async function r(e,r,i){let n;try{let{env:a}=(0,t.getCloudflareContext)();n=a.DEV_WS_DO_URL;let o=await a.WS_DO_WORKER.fetch(`http://internal${e}`,{method:"POST",body:r});if(o.ok)return;s.warn("broadcast service-binding non-ok",{...i,status:o.status});return}catch{}let o=n||a.DEV_WS_DO_URL;try{let t=await fetch(`${o}${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:r});t.ok||s.warn("broadcast failed",{...i,status:t.status})}catch(e){s.warn("broadcast error",{...i,err:String(e)})}}e.s(["broadcastToUser",0,function(e,a){return function(e,a,s){let i=r(e,a,s);try{let{ctx:e}=(0,t.getCloudflareContext)();e.waitUntil(i)}catch{}return i}(`/broadcast/user/${e}`,JSON.stringify(a),{userId:e,type:a.type})}])},799579,e=>{"use strict";e.i(700598);let t=(0,e.i(726527).createLogger)({service:"web",level:process.env.ALOOK_LOG_LEVEL||"info",pretty:!1});e.s(["log",0,t])},205054,e=>{"use strict";e.i(700598);var t=e.i(291109),a=e.i(704024),s=e.i(799579),r=e.i(726089),i=e.i(740580),n=e.i(774078);let o=t.queries.task,d=t.queries.agent,c=t.queries.message,l=t.queries.conversation,u=t.queries.issue;e.s(["TaskService",0,class{db;constructor(e){this.db=e}async enqueueTask(e,t,s,r,i=a.TASK_TYPES.USER_DM_MESSAGE,c){let l=await d.getAgent(this.db,e,s);if(!l)throw Error("agent not found");if(!l.runtimeId)throw Error("agent has no runtime");if(c?.traceId&&c.parentTaskId&&await o.countTasksByTrace(this.db,c.traceId)>=a.MAX_TASKS_PER_TRACE)throw Error(`Trace limit reached (${a.MAX_TASKS_PER_TRACE} tasks). This may indicate an infinite loop between agents.`);let u=await o.createTask(this.db,{agentId:e,runtimeId:l.runtimeId,workspaceId:s,conversationId:t,prompt:r,type:i,contextKey:c?.contextKey??null,priority:0,context:c?.context,traceId:c?.traceId??null,parentTaskId:c?.parentTaskId??null});return(0,n.invalidate)(n.cacheKeys.activeTaskCounts(s)).catch(()=>{}),u}async claimTask(e,t){let a=await d.getAgent(this.db,e,t);if(!a)return null;if(await o.countRunningTasks(this.db,e,t)>=a.maxConcurrentTasks){let s=await o.findSteerableReplacement(this.db,e,t);if(!s||await o.countRunningTasks(this.db,e,t,s.predecessorId)>=a.maxConcurrentTasks)return null}let s=await o.claimTask(this.db,e,t);return s?(await d.updateAgentStatus(this.db,e,t,"working"),s):null}async claimTasksForRuntimes(e,t,a){let s=await o.claimKillTasks(this.db,e,a,t),r=t-s.length,i=r>0?await o.listPendingTasksByRuntimes(this.db,e,a):[],n=new Set(e),d=new Set,c=[...s],l=[];for(let e of i){if(l.length>=r)break;let t=`${e.agentId}:${e.workspaceId}`;d.has(t)||(d.add(t),l.push(e))}for(let e of(await Promise.all(l.map(e=>this.claimTask(e.agentId,e.workspaceId)))))e&&n.has(e.runtimeId)&&c.push(e);return c}async startTask(e,t){let a=await o.startTask(this.db,e,t);if(!a)throw Error("task not in dispatched status");return a}async completeTask(e,t,a,r){let i;try{i=JSON.parse(a)}catch{i={raw:a}}let n=await o.completeTask(this.db,e,t,{result:i,sessionId:r||null});if(!n){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`completeTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot complete task in '${a}' status`)}let d=i,l="string"==typeof d?.output?d.output:"";return l&&await c.createMessage(this.db,{conversationId:n.conversationId,role:"assistant",content:l,taskId:e}),await this.reconcileAgentStatus(n.agentId,n.workspaceId),await this.dispatchNextBufferedMessage(n.conversationId,n.workspaceId),n}async failTask(e,t,r){let i=await o.failTask(this.db,e,t,r);if(!i){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`failTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot fail task in '${a}' status`)}return i.type===a.TASK_TYPES.KILL_TASK||(r&&await c.createMessage(this.db,{conversationId:i.conversationId,role:"assistant",content:`Error: ${r}`,taskId:e}),await this.reconcileAgentStatus(i.agentId,i.workspaceId),await this.syncIssueStatusFromTask(i,"failed"),await this.dispatchNextBufferedMessage(i.conversationId,i.workspaceId)),i}async syncIssueStatusFromTask(e,t){if(e.type!==a.TASK_TYPES.ISSUE_EVENT)return;let s=await u.getIssueByConversation(this.db,e.conversationId,e.workspaceId);if(!s||s.status===t||!await u.updateIssue(this.db,s.id,e.workspaceId,{status:t}))return;let n=await c.createMessage(this.db,{conversationId:e.conversationId,role:"event",content:`Issue status changed: ${s.status} -> ${t}`,taskId:e.id,metadata:JSON.stringify({issueId:s.id})});try{let t=await l.getConversation(this.db,e.conversationId,e.workspaceId);t&&(0,r.broadcastToUser)(t.userId,{type:"conversation.message",conversationId:e.conversationId,message:(0,i.messageToResponse)(n)}).catch(()=>{})}catch{}}async supersedeTask(e,t){let a=await o.supersedeTask(this.db,e,t);if(!a){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`supersedeTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot supersede task in '${a}' status`)}return await this.reconcileAgentStatus(a.agentId,a.workspaceId),await this.dispatchNextBufferedMessage(a.conversationId,a.workspaceId),a}async retryTask(e,t){let a=await o.getTask(this.db,e);if(!a||a.workspaceId!==t)throw Error("task not found");if("failed"!==a.status)throw Error("only failed tasks can be retried");let s=await o.markFailedAsSuperseded(this.db,e,t);if(!s)throw Error("failed to mark task as superseded");return{oldTask:s,newTask:await this.enqueueTask(a.agentId,a.conversationId,t,a.prompt,a.type,{contextKey:a.contextKey??null,context:a.context,traceId:a.traceId??null,parentTaskId:a.parentTaskId??null})}}async cancelActiveTask(e,t,s){let r=await o.getActiveTaskByConversation(this.db,e,t);if(!r)return null;let i=await o.cancelTask(this.db,r.id,t);return i?(("dispatched"===r.status||"running"===r.status)&&await o.createTask(this.db,{agentId:r.agentId,runtimeId:r.runtimeId,workspaceId:t,conversationId:e,prompt:"",type:a.TASK_TYPES.KILL_TASK,context:{target_task_id:r.id}}),await c.createMessage(this.db,{conversationId:e,role:"assistant",content:s?.reason??"Task cancelled by user",taskId:r.id}),await this.reconcileAgentStatus(r.agentId,t),s?.skipDispatch||await this.dispatchNextBufferedMessage(e,t),i):null}async reconcileAgentStatus(e,t){let a=await o.countRunningTasks(this.db,e,t);await d.updateAgentStatus(this.db,e,t,a>0?"working":"idle"),(0,n.invalidate)(n.cacheKeys.activeTaskCounts(t)).catch(()=>{})}async dispatchNextBufferedMessage(e,t){let n=await c.activateNextBufferedMessage(this.db,e);if(!n)return null;let d=await l.getConversation(this.db,e,t);if(!d)return s.log.warn("dispatchNextBufferedMessage: conversation not found",{conversationId:e}),await c.revertToBuffered(this.db,n.id).catch(e=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:n.id,revertErr:e})}),null;let u=d.userId;try{let s=n.attachmentIds?JSON.parse(n.attachmentIds):[],l=await o.getLatestTaskForConversation(this.db,e),p=l?.traceId??null,h=await this.enqueueTask(d.agentId,e,t,n.content,a.TASK_TYPES.USER_DM_MESSAGE,{contextKey:e,context:s.length>0?{attachment_ids:s}:void 0,traceId:p,parentTaskId:null});return await c.updateMessageTaskId(this.db,n.id,h.id),(0,r.broadcastToUser)(u,{type:"followup.dispatched",conversationId:e,message:(0,i.messageToResponse)(n),task:(0,i.taskToResponse)(h)}).catch(()=>{}),h}catch(t){return s.log.warn("dispatchNextBufferedMessage: enqueueTask failed",{conversationId:e,err:t}),await c.revertToBuffered(this.db,n.id).catch(e=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:n.id,revertErr:e})}),(0,r.broadcastToUser)(u,{type:"followup.dispatch_failed",conversationId:e,messageId:n.id,error:t instanceof Error?t.message:"Failed to dispatch follow-up"}).catch(()=>{}),null}}async cancelTrace(e,t,a){for(let r of[...new Set((await o.getTraceTree(this.db,e,t)).filter(e=>["queued","dispatched","running"].includes(e.status)).map(e=>e.conversationId))])try{await this.cancelActiveTask(r,t,{skipDispatch:!0,reason:a?.reason})}catch(t){s.log.warn("cancelTrace: failed to cancel task",{traceId:e,convId:r,err:t})}}}])},914022,e=>e.a(async(t,a)=>{try{var s=e.i(291484);e.i(700598);var r=e.i(888247),i=e.i(704024),n=e.i(291109),o=e.i(675139),d=e.i(152327),c=e.i(47962),l=e.i(776227),u=e.i(726089),p=e.i(205054),h=e.i(774078),w=t([d]);[d]=w.then?(await w)():w;let g=(0,d.withAuth)(async(e,t)=>{let a=await (0,c.withWorkspaceMember)(e,t);if(a instanceof Response)return a;let{env:r}=(0,s.getCloudflareContext)(),i=(0,o.getDb)(r.DB),d=t.params?.id;if(!d)return(0,l.writeError)("issue id is required",400);if(!await n.queries.issue.getIssue(i,d,a.workspaceId))return(0,l.writeError)("issue not found",404);let u=await n.queries.issueComment.listComments(i,d,a.workspaceId);return(0,l.writeJSON)({comments:u.map(n.queries.issueComment.commentToResponse)})}),k=(0,d.withAuth)(async(e,t)=>{let a=await (0,c.withWorkspaceMember)(e,t);if(a instanceof Response)return a;let{env:d}=(0,s.getCloudflareContext)(),w=(0,o.getDb)(d.DB),g=t.params?.id;if(!g)return(0,l.writeError)("issue id is required",400);let k=await n.queries.issue.getIssue(w,g,a.workspaceId);if(!k)return(0,l.writeError)("issue not found",404);let m=e.nextUrl.searchParams.get("agentId");if(m&&k.agentId!==m)return(0,l.writeError)("issue does not belong to agent",403);let[f,T]=await (0,l.parseBody)(e,r.CreateIssueCommentBodySchema);if(T)return T;let I=m?"agent":"user",v=m??t.userId,y=await n.queries.issueComment.createComment(w,{issueId:g,workspaceId:a.workspaceId,authorType:I,authorId:v,content:f.content});await n.queries.issue.updateIssue(w,g,a.workspaceId,{});let b=n.queries.issueComment.commentToResponse(y);if((0,u.broadcastToUser)(k.creatorUserId,{type:"issue.comment",issueId:g,comment:b}).catch(()=>{}),"user"===I&&!(0,i.isTerminalIssueStatus)(k.status)&&k.agentId&&k.conversationId&&!await n.queries.task.getActiveTaskByConversation(w,k.conversationId,a.workspaceId)){let e=new p.TaskService(w),t=`${k.title}
1
+ module.exports=[726089,e=>{"use strict";var t=e.i(291484);e.i(700598);var a=e.i(704024);let s=(0,e.i(726527).createLogger)({service:"broadcast"});async function r(e,r,i){let n;try{let{env:a}=(0,t.getCloudflareContext)();n=a.DEV_WS_DO_URL;let o=await a.WS_DO_WORKER.fetch(`http://internal${e}`,{method:"POST",body:r});if(o.ok)return;s.warn("broadcast service-binding non-ok",{...i,status:o.status});return}catch{}let o=n||a.DEV_WS_DO_URL;try{let t=await fetch(`${o}${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:r});t.ok||s.warn("broadcast failed",{...i,status:t.status})}catch(e){s.warn("broadcast error",{...i,err:String(e)})}}e.s(["broadcastToUser",0,function(e,a){return function(e,a,s){let i=r(e,a,s);try{let{ctx:e}=(0,t.getCloudflareContext)();e.waitUntil(i)}catch{}return i}(`/broadcast/user/${e}`,JSON.stringify(a),{userId:e,type:a.type})}])},799579,e=>{"use strict";e.i(700598);let t=(0,e.i(726527).createLogger)({service:"web",level:process.env.ALOOK_LOG_LEVEL||"info",pretty:!1});e.s(["log",0,t])},205054,e=>{"use strict";e.i(700598);var t=e.i(291109),a=e.i(704024),s=e.i(799579),r=e.i(726089),i=e.i(740580),n=e.i(774078);let o=t.queries.task,d=t.queries.agent,c=t.queries.message,l=t.queries.conversation,u=t.queries.issue;e.s(["TaskService",0,class{db;constructor(e){this.db=e}async enqueueTask(e,t,s,r,i=a.TASK_TYPES.USER_DM_MESSAGE,c){let l=await d.getAgent(this.db,e,s);if(!l)throw Error("agent not found");if(!l.runtimeId)throw Error("agent has no runtime");if(c?.traceId&&c.parentTaskId&&await o.countTasksByTrace(this.db,c.traceId)>=a.MAX_TASKS_PER_TRACE)throw Error(`Trace limit reached (${a.MAX_TASKS_PER_TRACE} tasks). This may indicate an infinite loop between agents.`);let u=await o.createTask(this.db,{agentId:e,runtimeId:l.runtimeId,workspaceId:s,conversationId:t,prompt:r,type:i,contextKey:c?.contextKey??null,priority:0,context:c?.context,traceId:c?.traceId??null,parentTaskId:c?.parentTaskId??null});return(0,n.invalidate)(n.cacheKeys.activeTaskCounts(s)).catch(()=>{}),u}async claimTask(e,t){let a=await d.getAgent(this.db,e,t);if(!a)return null;if(await o.countRunningTasks(this.db,e,t)>=a.maxConcurrentTasks){let s=await o.findSteerableReplacement(this.db,e,t);if(!s||await o.countRunningTasks(this.db,e,t,s.predecessorId)>=a.maxConcurrentTasks)return null}let s=await o.claimTask(this.db,e,t);return s?(await d.updateAgentStatus(this.db,e,t,"working"),s):null}async claimTasksForRuntimes(e,t,a){let s=await o.claimKillTasks(this.db,e,a,t),r=t-s.length,i=r>0?await o.listPendingTasksByRuntimes(this.db,e,a):[],n=new Set(e),d=new Set,c=[...s],l=[];for(let e of i){if(l.length>=r)break;let t=`${e.agentId}:${e.workspaceId}`;d.has(t)||(d.add(t),l.push(e))}for(let e of(await Promise.all(l.map(e=>this.claimTask(e.agentId,e.workspaceId)))))e&&n.has(e.runtimeId)&&c.push(e);return c}async startTask(e,t){let a=await o.startTask(this.db,e,t);if(!a)throw Error("task not in dispatched status");return a}async completeTask(e,t,a,n){let d;try{d=JSON.parse(a)}catch{d={raw:a}}let u=await o.completeTask(this.db,e,t,{result:d,sessionId:n||null});if(!u){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`completeTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot complete task in '${a}' status`)}let p=d,h="string"==typeof p?.output?p.output:"";if(h){let a=await c.createMessage(this.db,{conversationId:u.conversationId,role:"assistant",content:h,taskId:e});try{let e=await l.getConversation(this.db,u.conversationId,t);e&&(0,r.broadcastToUser)(e.userId,{type:"conversation.message",conversationId:u.conversationId,message:(0,i.messageToResponse)(a)}).catch(()=>{})}catch{}}return await this.reconcileAgentStatus(u.agentId,u.workspaceId),await this.dispatchNextBufferedMessage(u.conversationId,u.workspaceId),u}async failTask(e,t,n){let d=await o.failTask(this.db,e,t,n);if(!d){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`failTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot fail task in '${a}' status`)}if(d.type===a.TASK_TYPES.KILL_TASK)return d;if(n){let a=await c.createMessage(this.db,{conversationId:d.conversationId,role:"assistant",content:`Error: ${n}`,taskId:e});try{let e=await l.getConversation(this.db,d.conversationId,t);e&&(0,r.broadcastToUser)(e.userId,{type:"conversation.message",conversationId:d.conversationId,message:(0,i.messageToResponse)(a)}).catch(()=>{})}catch{}}return await this.reconcileAgentStatus(d.agentId,d.workspaceId),await this.syncIssueStatusFromTask(d,"failed"),await this.dispatchNextBufferedMessage(d.conversationId,d.workspaceId),d}async syncIssueStatusFromTask(e,t){if(e.type!==a.TASK_TYPES.ISSUE_EVENT)return;let s=await u.getIssueByConversation(this.db,e.conversationId,e.workspaceId);if(!s||s.status===t||!await u.updateIssue(this.db,s.id,e.workspaceId,{status:t}))return;let n=await c.createMessage(this.db,{conversationId:e.conversationId,role:"event",content:`Issue status changed: ${s.status} -> ${t}`,taskId:e.id,metadata:JSON.stringify({issueId:s.id})});try{let t=await l.getConversation(this.db,e.conversationId,e.workspaceId);t&&(0,r.broadcastToUser)(t.userId,{type:"conversation.message",conversationId:e.conversationId,message:(0,i.messageToResponse)(n)}).catch(()=>{})}catch{}}async supersedeTask(e,t){let a=await o.supersedeTask(this.db,e,t);if(!a){let t=await o.getTask(this.db,e),a=t?.status??"unknown";throw s.log.warn(`supersedeTask failed: task is in '${a}' status`,{taskId:e}),Error(`cannot supersede task in '${a}' status`)}return await this.reconcileAgentStatus(a.agentId,a.workspaceId),await this.dispatchNextBufferedMessage(a.conversationId,a.workspaceId),a}async retryTask(e,t){let a=await o.getTask(this.db,e);if(!a||a.workspaceId!==t)throw Error("task not found");if("failed"!==a.status)throw Error("only failed tasks can be retried");let s=await o.markFailedAsSuperseded(this.db,e,t);if(!s)throw Error("failed to mark task as superseded");return{oldTask:s,newTask:await this.enqueueTask(a.agentId,a.conversationId,t,a.prompt,a.type,{contextKey:a.contextKey??null,context:a.context,traceId:a.traceId??null,parentTaskId:a.parentTaskId??null})}}async cancelActiveTask(e,t,s){let r=await o.getActiveTaskByConversation(this.db,e,t);if(!r)return null;let i=await o.cancelTask(this.db,r.id,t);return i?(("dispatched"===r.status||"running"===r.status)&&await o.createTask(this.db,{agentId:r.agentId,runtimeId:r.runtimeId,workspaceId:t,conversationId:e,prompt:"",type:a.TASK_TYPES.KILL_TASK,context:{target_task_id:r.id}}),await c.createMessage(this.db,{conversationId:e,role:"assistant",content:s?.reason??"Task cancelled by user",taskId:r.id}),await this.reconcileAgentStatus(r.agentId,t),s?.skipDispatch||await this.dispatchNextBufferedMessage(e,t),i):null}async reconcileAgentStatus(e,t){let a=await o.countRunningTasks(this.db,e,t);await d.updateAgentStatus(this.db,e,t,a>0?"working":"idle"),(0,n.invalidate)(n.cacheKeys.activeTaskCounts(t)).catch(()=>{})}async dispatchNextBufferedMessage(e,t){let n=await c.activateNextBufferedMessage(this.db,e);if(!n)return null;let d=await l.getConversation(this.db,e,t);if(!d)return s.log.warn("dispatchNextBufferedMessage: conversation not found",{conversationId:e}),await c.revertToBuffered(this.db,n.id).catch(e=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:n.id,revertErr:e})}),null;let u=d.userId;try{let s=n.attachmentIds?JSON.parse(n.attachmentIds):[],l=await o.getLatestTaskForConversation(this.db,e),p=l?.traceId??null,h=await this.enqueueTask(d.agentId,e,t,n.content,a.TASK_TYPES.USER_DM_MESSAGE,{contextKey:e,context:s.length>0?{attachment_ids:s}:void 0,traceId:p,parentTaskId:null});return await c.updateMessageTaskId(this.db,n.id,h.id),(0,r.broadcastToUser)(u,{type:"followup.dispatched",conversationId:e,message:(0,i.messageToResponse)(n),task:(0,i.taskToResponse)(h)}).catch(()=>{}),h}catch(t){return s.log.warn("dispatchNextBufferedMessage: enqueueTask failed",{conversationId:e,err:t}),await c.revertToBuffered(this.db,n.id).catch(e=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:n.id,revertErr:e})}),(0,r.broadcastToUser)(u,{type:"followup.dispatch_failed",conversationId:e,messageId:n.id,error:t instanceof Error?t.message:"Failed to dispatch follow-up"}).catch(()=>{}),null}}async cancelTrace(e,t,a){for(let r of[...new Set((await o.getTraceTree(this.db,e,t)).filter(e=>["queued","dispatched","running"].includes(e.status)).map(e=>e.conversationId))])try{await this.cancelActiveTask(r,t,{skipDispatch:!0,reason:a?.reason})}catch(t){s.log.warn("cancelTrace: failed to cancel task",{traceId:e,convId:r,err:t})}}}])},914022,e=>e.a(async(t,a)=>{try{var s=e.i(291484);e.i(700598);var r=e.i(888247),i=e.i(704024),n=e.i(291109),o=e.i(675139),d=e.i(152327),c=e.i(47962),l=e.i(776227),u=e.i(726089),p=e.i(205054),h=e.i(774078),w=t([d]);[d]=w.then?(await w)():w;let g=(0,d.withAuth)(async(e,t)=>{let a=await (0,c.withWorkspaceMember)(e,t);if(a instanceof Response)return a;let{env:r}=(0,s.getCloudflareContext)(),i=(0,o.getDb)(r.DB),d=t.params?.id;if(!d)return(0,l.writeError)("issue id is required",400);if(!await n.queries.issue.getIssue(i,d,a.workspaceId))return(0,l.writeError)("issue not found",404);let u=await n.queries.issueComment.listComments(i,d,a.workspaceId);return(0,l.writeJSON)({comments:u.map(n.queries.issueComment.commentToResponse)})}),m=(0,d.withAuth)(async(e,t)=>{let a=await (0,c.withWorkspaceMember)(e,t);if(a instanceof Response)return a;let{env:d}=(0,s.getCloudflareContext)(),w=(0,o.getDb)(d.DB),g=t.params?.id;if(!g)return(0,l.writeError)("issue id is required",400);let m=await n.queries.issue.getIssue(w,g,a.workspaceId);if(!m)return(0,l.writeError)("issue not found",404);let f=e.nextUrl.searchParams.get("agentId");if(f&&m.agentId!==f)return(0,l.writeError)("issue does not belong to agent",403);let[k,T]=await (0,l.parseBody)(e,r.CreateIssueCommentBodySchema);if(T)return T;let I=f?"agent":"user",v=f??t.userId,y=await n.queries.issueComment.createComment(w,{issueId:g,workspaceId:a.workspaceId,authorType:I,authorId:v,content:k.content});await n.queries.issue.updateIssue(w,g,a.workspaceId,{});let b=n.queries.issueComment.commentToResponse(y);if((0,u.broadcastToUser)(m.creatorUserId,{type:"issue.comment",issueId:g,comment:b}).catch(()=>{}),"user"===I&&!(0,i.isTerminalIssueStatus)(m.status)&&m.agentId&&m.conversationId&&!await n.queries.task.getActiveTaskByConversation(w,m.conversationId,a.workspaceId)){let e=new p.TaskService(w),t=`${m.title}
2
2
 
3
- User feedback: "${f.content}"`;try{let s=k.latestTaskId?(await n.queries.task.getTask(w,k.latestTaskId,a.workspaceId))?.traceId??null:null,r=await e.enqueueTask(k.agentId,k.conversationId,a.workspaceId,t,i.TASK_TYPES.ISSUE_EVENT,{contextKey:k.conversationId,context:{issue_id:k.id},traceId:s,parentTaskId:null});await n.queries.issue.setLatestTask(w,g,a.workspaceId,r.id);let o=new Date().toISOString().slice(0,10);(0,h.invalidate)(h.cacheKeys.overviewTaskStats(a.workspaceId,o)).catch(()=>{})}catch{}}return(0,l.writeJSON)({comment:b},201)});e.s(["GET",0,g,"POST",0,k]),a()}catch(e){a(e)}},!1),789442,e=>e.a(async(t,a)=>{try{var s=e.i(80774),r=e.i(404478),i=e.i(732985),n=e.i(481671),o=e.i(638081),d=e.i(204960),c=e.i(924918),l=e.i(363585),u=e.i(906846),p=e.i(359838),h=e.i(383303),w=e.i(234173),g=e.i(270215),k=e.i(830665),m=e.i(944002),f=e.i(193695);e.i(195928);var T=e.i(81543),I=e.i(914022),v=t([I]);[I]=v.then?(await v)():v;let b=new s.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/issues/[id]/comments/route",pathname:"/api/issues/[id]/comments",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/web/src/app/api/issues/[id]/comments/route.ts",nextConfigOutput:"standalone",userland:I,...{}}),{workAsyncStorage:_,workUnitAsyncStorage:E,serverHooks:S}=b;async function y(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),b.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let s="/api/issues/[id]/comments/route";s=s.replace(/\/index$/,"")||"/";let i=await b.prepare(e,t,{srcPage:s,multiZoneDraftMode:!1});if(!i)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:I,deploymentId:v,params:y,nextConfig:_,parsedUrl:E,isDraftMode:S,prerenderManifest:R,routerServerContext:C,isOnDemandRevalidate:A,revalidateOnlyGenerated:x,resolvedPathname:q,clientReferenceManifest:N,serverActionsManifest:P}=i,M=(0,c.normalizeAppPath)(s),O=!!(R.dynamicRoutes[M]||R.routes[q]),K=async()=>((null==C?void 0:C.render404)?await C.render404(e,t,E,!1):t.end("This page could not be found"),null);if(O&&!S){let e=!!R.routes[q],t=R.dynamicRoutes[M];if(t&&!1===t.fallback&&!e){if(_.adapterPath)return await K();throw new f.NoFallbackError}}let U=null;!O||b.isDev||S||(U=q,U="/index"===U?"/":U);let B=!0===b.isDev||!O,D=O&&!B;P&&N&&(0,d.setManifestsSingleton)({page:s,clientReferenceManifest:N,serverActionsManifest:P});let $=e.method||"GET",j=(0,o.getTracer)(),L=j.getActiveScopeSpan(),H=!!(null==C?void 0:C.isWrappedByNextServer),F=!!(0,n.getRequestMeta)(e,"minimalMode"),W=(0,n.getRequestMeta)(e,"incrementalCache")||await b.getIncrementalCache(e,_,R,F);null==W||W.resetRequestCache(),globalThis.__incrementalCache=W;let V={params:y,previewProps:R.preview,renderOpts:{experimental:{authInterrupts:!!_.experimental.authInterrupts},cacheComponents:!!_.cacheComponents,supportsDynamicResponse:B,incrementalCache:W,cacheLifeProfiles:_.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,s,r)=>b.onRequestError(e,t,s,r,C)},sharedContext:{buildId:I,deploymentId:v}},Y=new l.NodeNextRequest(e),G=new l.NodeNextResponse(t),J=u.NextRequestAdapter.fromNodeNextRequest(Y,(0,u.signalFromNodeResponse)(t));try{let i,n=async e=>b.handle(J,V).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let a=j.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=a.get("next.route");if(r){let t=`${$} ${r}`;e.setAttributes({"next.route":r,"http.route":r,"next.span_name":t}),e.updateName(t),i&&i!==e&&(i.setAttribute("http.route",r),i.updateName(t))}else e.updateName(`${$} ${s}`)}),d=async i=>{var o,d;let c=async({previousCacheEntry:r})=>{try{if(!F&&A&&x&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await n(i);e.fetchMetrics=V.renderOpts.fetchMetrics;let o=V.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let d=V.renderOpts.collectedTags;if(!O)return await (0,w.sendResponse)(Y,G,s,V.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,g.toNodeOutgoingHttpHeaders)(s.headers);d&&(t[m.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==V.renderOpts.collectedRevalidate&&!(V.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&V.renderOpts.collectedRevalidate,r=void 0===V.renderOpts.collectedExpire||V.renderOpts.collectedExpire>=m.INFINITE_CACHE?void 0:V.renderOpts.collectedExpire;return{value:{kind:T.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:r}}}}catch(t){throw(null==r?void 0:r.isStale)&&await b.onRequestError(e,t,{routerKind:"App Router",routePath:s,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:A})},!1,C),t}},l=await b.handleResponse({req:e,nextConfig:_,cacheKey:U,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:R,isRoutePPREnabled:!1,isOnDemandRevalidate:A,revalidateOnlyGenerated:x,responseGenerator:c,waitUntil:a.waitUntil,isMinimalMode:F});if(!O)return null;if((null==l||null==(o=l.value)?void 0:o.kind)!==T.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(d=l.value)?void 0:d.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});F||t.setHeader("x-nextjs-cache",A?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),S&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,g.fromNodeOutgoingHttpHeaders)(l.value.headers);return F&&O||u.delete(m.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,k.getCacheControlHeader)(l.cacheControl)),await (0,w.sendResponse)(Y,G,new Response(l.value.body,{headers:u,status:l.value.status||200})),null};H&&L?await d(L):(i=j.getActiveScopeSpan(),await j.withPropagatedContext(e.headers,()=>j.trace(p.BaseServerSpan.handleRequest,{spanName:`${$} ${s}`,kind:o.SpanKind.SERVER,attributes:{"http.method":$,"http.target":e.url}},d),void 0,!H))}catch(t){if(t instanceof f.NoFallbackError||await b.onRequestError(e,t,{routerKind:"App Router",routePath:M,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:A})},!1,C),O)throw t;return await (0,w.sendResponse)(Y,G,new Response(null,{status:500})),null}}e.s(["handler",0,y,"patchFetch",0,function(){return(0,i.patchFetch)({workAsyncStorage:_,workUnitAsyncStorage:E})},"routeModule",0,b,"serverHooks",0,S,"workAsyncStorage",0,_,"workUnitAsyncStorage",0,E]),a()}catch(e){a(e)}},!1),572758,e=>{e.v(t=>Promise.all(["server/chunks/0yh8_@better-auth_memory-adapter_dist_index_mjs_0u9gr83._.js"].map(t=>e.l(t))).then(()=>t(501816)))},409008,e=>{e.v(t=>Promise.all(["server/chunks/0cae_better-auth_dist_adapters_kysely-adapter_index_mjs_0c-9lzd._.js"].map(t=>e.l(t))).then(()=>t(770021)))},96318,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_bun-sqlite-dialect-na--YwnN_mjs_0ua5mwj._.js"].map(t=>e.l(t))).then(()=>t(158195)))},11379,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_node-sqlite-dialect_mjs_0evb.r9._.js"].map(t=>e.l(t))).then(()=>t(302822)))},946743,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_d1-sqlite-dialect-C2B7YsIT_mjs_0bihzky._.js"].map(t=>e.l(t))).then(()=>t(898679)))}];
3
+ User feedback: "${k.content}"`;try{let s=m.latestTaskId?(await n.queries.task.getTask(w,m.latestTaskId,a.workspaceId))?.traceId??null:null,r=await e.enqueueTask(m.agentId,m.conversationId,a.workspaceId,t,i.TASK_TYPES.ISSUE_EVENT,{contextKey:m.conversationId,context:{issue_id:m.id},traceId:s,parentTaskId:null});await n.queries.issue.setLatestTask(w,g,a.workspaceId,r.id);let o=new Date().toISOString().slice(0,10);(0,h.invalidate)(h.cacheKeys.overviewTaskStats(a.workspaceId,o)).catch(()=>{})}catch{}}return(0,l.writeJSON)({comment:b},201)});e.s(["GET",0,g,"POST",0,m]),a()}catch(e){a(e)}},!1),789442,e=>e.a(async(t,a)=>{try{var s=e.i(80774),r=e.i(404478),i=e.i(732985),n=e.i(481671),o=e.i(638081),d=e.i(204960),c=e.i(924918),l=e.i(363585),u=e.i(906846),p=e.i(359838),h=e.i(383303),w=e.i(234173),g=e.i(270215),m=e.i(830665),f=e.i(944002),k=e.i(193695);e.i(195928);var T=e.i(81543),I=e.i(914022),v=t([I]);[I]=v.then?(await v)():v;let b=new s.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/issues/[id]/comments/route",pathname:"/api/issues/[id]/comments",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/web/src/app/api/issues/[id]/comments/route.ts",nextConfigOutput:"standalone",userland:I,...{}}),{workAsyncStorage:_,workUnitAsyncStorage:E,serverHooks:R}=b;async function y(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),b.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let s="/api/issues/[id]/comments/route";s=s.replace(/\/index$/,"")||"/";let i=await b.prepare(e,t,{srcPage:s,multiZoneDraftMode:!1});if(!i)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:I,deploymentId:v,params:y,nextConfig:_,parsedUrl:E,isDraftMode:R,prerenderManifest:S,routerServerContext:C,isOnDemandRevalidate:A,revalidateOnlyGenerated:x,resolvedPathname:q,clientReferenceManifest:N,serverActionsManifest:P}=i,M=(0,c.normalizeAppPath)(s),O=!!(S.dynamicRoutes[M]||S.routes[q]),U=async()=>((null==C?void 0:C.render404)?await C.render404(e,t,E,!1):t.end("This page could not be found"),null);if(O&&!R){let e=!!S.routes[q],t=S.dynamicRoutes[M];if(t&&!1===t.fallback&&!e){if(_.adapterPath)return await U();throw new k.NoFallbackError}}let K=null;!O||b.isDev||R||(K=q,K="/index"===K?"/":K);let B=!0===b.isDev||!O,D=O&&!B;P&&N&&(0,d.setManifestsSingleton)({page:s,clientReferenceManifest:N,serverActionsManifest:P});let $=e.method||"GET",j=(0,o.getTracer)(),L=j.getActiveScopeSpan(),H=!!(null==C?void 0:C.isWrappedByNextServer),F=!!(0,n.getRequestMeta)(e,"minimalMode"),W=(0,n.getRequestMeta)(e,"incrementalCache")||await b.getIncrementalCache(e,_,S,F);null==W||W.resetRequestCache(),globalThis.__incrementalCache=W;let V={params:y,previewProps:S.preview,renderOpts:{experimental:{authInterrupts:!!_.experimental.authInterrupts},cacheComponents:!!_.cacheComponents,supportsDynamicResponse:B,incrementalCache:W,cacheLifeProfiles:_.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,s,r)=>b.onRequestError(e,t,s,r,C)},sharedContext:{buildId:I,deploymentId:v}},Y=new l.NodeNextRequest(e),G=new l.NodeNextResponse(t),J=u.NextRequestAdapter.fromNodeNextRequest(Y,(0,u.signalFromNodeResponse)(t));try{let i,n=async e=>b.handle(J,V).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let a=j.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=a.get("next.route");if(r){let t=`${$} ${r}`;e.setAttributes({"next.route":r,"http.route":r,"next.span_name":t}),e.updateName(t),i&&i!==e&&(i.setAttribute("http.route",r),i.updateName(t))}else e.updateName(`${$} ${s}`)}),d=async i=>{var o,d;let c=async({previousCacheEntry:r})=>{try{if(!F&&A&&x&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await n(i);e.fetchMetrics=V.renderOpts.fetchMetrics;let o=V.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let d=V.renderOpts.collectedTags;if(!O)return await (0,w.sendResponse)(Y,G,s,V.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,g.toNodeOutgoingHttpHeaders)(s.headers);d&&(t[f.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==V.renderOpts.collectedRevalidate&&!(V.renderOpts.collectedRevalidate>=f.INFINITE_CACHE)&&V.renderOpts.collectedRevalidate,r=void 0===V.renderOpts.collectedExpire||V.renderOpts.collectedExpire>=f.INFINITE_CACHE?void 0:V.renderOpts.collectedExpire;return{value:{kind:T.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:r}}}}catch(t){throw(null==r?void 0:r.isStale)&&await b.onRequestError(e,t,{routerKind:"App Router",routePath:s,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:A})},!1,C),t}},l=await b.handleResponse({req:e,nextConfig:_,cacheKey:K,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:S,isRoutePPREnabled:!1,isOnDemandRevalidate:A,revalidateOnlyGenerated:x,responseGenerator:c,waitUntil:a.waitUntil,isMinimalMode:F});if(!O)return null;if((null==l||null==(o=l.value)?void 0:o.kind)!==T.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(d=l.value)?void 0:d.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});F||t.setHeader("x-nextjs-cache",A?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),R&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,g.fromNodeOutgoingHttpHeaders)(l.value.headers);return F&&O||u.delete(f.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,m.getCacheControlHeader)(l.cacheControl)),await (0,w.sendResponse)(Y,G,new Response(l.value.body,{headers:u,status:l.value.status||200})),null};H&&L?await d(L):(i=j.getActiveScopeSpan(),await j.withPropagatedContext(e.headers,()=>j.trace(p.BaseServerSpan.handleRequest,{spanName:`${$} ${s}`,kind:o.SpanKind.SERVER,attributes:{"http.method":$,"http.target":e.url}},d),void 0,!H))}catch(t){if(t instanceof k.NoFallbackError||await b.onRequestError(e,t,{routerKind:"App Router",routePath:M,routeType:"route",revalidateReason:(0,h.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:A})},!1,C),O)throw t;return await (0,w.sendResponse)(Y,G,new Response(null,{status:500})),null}}e.s(["handler",0,y,"patchFetch",0,function(){return(0,i.patchFetch)({workAsyncStorage:_,workUnitAsyncStorage:E})},"routeModule",0,b,"serverHooks",0,R,"workAsyncStorage",0,_,"workUnitAsyncStorage",0,E]),a()}catch(e){a(e)}},!1),572758,e=>{e.v(t=>Promise.all(["server/chunks/0yh8_@better-auth_memory-adapter_dist_index_mjs_0u9gr83._.js"].map(t=>e.l(t))).then(()=>t(501816)))},409008,e=>{e.v(t=>Promise.all(["server/chunks/0cae_better-auth_dist_adapters_kysely-adapter_index_mjs_0c-9lzd._.js"].map(t=>e.l(t))).then(()=>t(770021)))},96318,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_bun-sqlite-dialect-na--YwnN_mjs_0ua5mwj._.js"].map(t=>e.l(t))).then(()=>t(158195)))},11379,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_node-sqlite-dialect_mjs_0evb.r9._.js"].map(t=>e.l(t))).then(()=>t(302822)))},946743,e=>{e.v(t=>Promise.all(["server/chunks/0_yy_@better-auth_kysely-adapter_dist_d1-sqlite-dialect-C2B7YsIT_mjs_0bihzky._.js"].map(t=>e.l(t))).then(()=>t(898679)))}];
4
4
 
5
5
  //# sourceMappingURL=_0u3tu2x._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[776227,t=>{"use strict";var e=t.i(463421);function a(t,a){return e.NextResponse.json({error:t},{status:a})}async function s(t,s){let r;try{r=await t.json()}catch{return[null,a("invalid request body",400)]}try{return[s.parse(r),null]}catch(a){let t=(a.issues??a.errors??[]).map(t=>`${t.path.join(".")}: ${t.message}`);return[null,e.NextResponse.json({error:"validation error",details:t},{status:400})]}}t.s(["formatTimestamp",0,function(t){return t?("string"==typeof t?new Date(t):t).toISOString().replace(/\.\d{3}Z$/,"Z"):""},"formatTimestampNullable",0,function(t){return t?("string"==typeof t?new Date(t):t).toISOString().replace(/\.\d{3}Z$/,"Z"):null},"parseBody",0,s,"writeError",0,a,"writeJSON",0,function(t,a=200){return e.NextResponse.json(t,{status:a})}])},469187,t=>{"use strict";var e=t.i(704024);t.s(["isOnline",0,function(t){if(!t)return!1;let a=new Date(t.includes("T")||t.includes("Z")||t.includes("+")?t:t+"Z").getTime();return!isNaN(a)&&Date.now()-a<e.OFFLINE_THRESHOLD_MS}])},740580,t=>{"use strict";var e=t.i(776227);t.i(700598);var a=t.i(888247),s=t.i(469187),r=t.i(704024);t.s(["agentLinkToResponse",0,function(t){return{id:t.id,workspace_id:t.workspaceId,source_agent_id:t.sourceAgentId,target_agent_id:t.targetAgentId,instruction:t.instruction,created_at:(0,e.formatTimestamp)(t.createdAt),updated_at:(0,e.formatTimestamp)(t.updatedAt)}},"agentToResponse",0,function(t){let a=t.runtimeConfig;return a||(a={}),{id:t.id,workspace_id:t.workspaceId,runtime_id:t.runtimeId||"",name:t.name,description:t.description,instructions:t.instructions,runtime_mode:t.runtimeMode,runtime_config:a,status:t.status,max_concurrent_tasks:t.maxConcurrentTasks,email_handle:t.emailHandle||null,avatar_url:t.avatarUrl??null,visibility:t.visibility??"private",owner_id:t.ownerId??null,created_at:(0,e.formatTimestamp)(t.createdAt),updated_at:(0,e.formatTimestamp)(t.updatedAt)}},"calendarEventToResponse",0,function(t){let a=(0,e.formatTimestamp)(t.scheduledAt),s=t.occurrenceAt?(0,e.formatTimestamp)(t.occurrenceAt):a;return{id:t.id,agent_id:t.agentId,workspace_id:t.workspaceId,title:t.title,description:t.description??null,scheduled_at:a,occurrence_at:s,collapsed_count:t.collapsedCount??null,repeat_interval:t.repeatInterval??null,repeat_stop_at:(0,e.formatTimestampNullable)(t.repeatStopAt),last_triggered_at:(0,e.formatTimestampNullable)(t.lastTriggeredAt),created_at:(0,e.formatTimestamp)(t.createdAt),updated_at:(0,e.formatTimestamp)(t.updatedAt)}},"channelToResponse",0,function(t){return{id:t.id,workspace_id:t.workspaceId,name:t.name,position:t.position??0,created_at:(0,e.formatTimestamp)(t.createdAt)}},"conversationToResponse",0,function(t){let a={id:t.id,agent_id:t.agentId,title:t.title,type:t.type??r.TASK_TYPES.USER_DM_MESSAGE,channel:t.channel??"default",created_at:(0,e.formatTimestamp)(t.createdAt)};return void 0!==t.messageCount&&(a.message_count=t.messageCount),a},"emailToResponse",0,function(t){return{id:t.id,agent_id:t.agentId,from_email:t.fromEmail,to_email:t.toEmail,subject:t.subject,r2_key:t.r2Key,is_whitelisted:!!t.isWhitelisted,forwarded:!!t.forwarded,message_id:t.messageId??"",in_reply_to:t.inReplyTo??"",references:t.references??"",html_body:t.htmlBody??"",attachments:JSON.parse(t.attachments||"[]"),status:t.status??"unread",direction:t.direction??"inbound",created_at:(0,e.formatTimestamp)(t.createdAt)}},"inviteToResponse",0,function(t){return{id:t.id,token:t.token,created_by:t.createdBy,used_by:t.usedBy,expires_at:(0,e.formatTimestamp)(t.expiresAt),created_at:(0,e.formatTimestamp)(t.createdAt)}},"issueToResponse",0,function(t){return{id:t.id,workspace_id:t.workspaceId,agent_id:t.agentId,creator_user_id:t.creatorUserId,conversation_id:t.conversationId,latest_task_id:t.latestTaskId??null,title:t.title,description:t.description??"",status:t.status,created_at:(0,e.formatTimestamp)(t.createdAt),updated_at:(0,e.formatTimestamp)(t.updatedAt),completed_at:(0,e.formatTimestampNullable)(t.completedAt)}},"machineTokenToResponse",0,function(t){return{id:t.id,name:t.name,last_used_at:(0,e.formatTimestampNullable)(t.lastUsedAt),created_at:(0,e.formatTimestamp)(t.createdAt)}},"meetingToResponse",0,function(t){return{id:t.id,agent_id:t.agentId,workspace_id:t.workspaceId,title:t.title,meeting_url:t.meetingUrl,status:t.status,from_email:t.fromEmail??null,is_whitelisted:!!t.isWhitelisted,participants:t.participants??[],scheduled_at:(0,e.formatTimestampNullable)(t.scheduledAt),started_at:(0,e.formatTimestampNullable)(t.startedAt),completed_at:(0,e.formatTimestampNullable)(t.completedAt),transcript_r2_key:t.transcriptR2Key??null,summary:t.summary??null,error:t.error??null,worker_session_id:t.workerSessionId??null,created_at:(0,e.formatTimestamp)(t.createdAt),updated_at:(0,e.formatTimestamp)(t.updatedAt)}},"memberToResponse",0,function(t){return{id:t.id,user_id:t.userId,role:t.role,name:t.userName,email:t.userEmail,image:t.userImage,created_at:(0,e.formatTimestamp)(t.createdAt)}},"messageToResponse",0,function(t){let a={id:t.id,conversation_id:t.conversationId,role:t.role,content:t.content,task_id:t.taskId||null,attachment_ids:t.attachmentIds?JSON.parse(t.attachmentIds):null,metadata:t.metadata?JSON.parse(t.metadata):null,created_at:(0,e.formatTimestamp)(t.createdAt)};return t.status&&"active"!==t.status&&(a.status=t.status),a},"runtimeToResponse",0,function(t){let a=t.metadata;a||(a={});let r=t.machineLastSeenAt??null,i=r instanceof Date?r.toISOString():r;return{id:t.id,workspace_id:t.workspaceId,daemon_id:t.daemonId||null,runtime_mode:t.runtimeMode,provider:t.provider,status:(0,s.isOnline)(i)?"online":"offline",device_info:t.deviceInfo,metadata:a,pending_update_version:t.pendingUpdateVersion??null,pending_rescan:!!t.pendingRescan,last_seen_at:(0,e.formatTimestampNullable)(r),created_at:(0,e.formatTimestamp)(t.createdAt),updated_at:(0,e.formatTimestamp)(t.updatedAt)}},"taskMessageToResponse",0,function(t){let e={id:t.id,task_id:t.taskId,seq:t.seq,type:t.type,tool:t.tool,call_id:t.callId||"",content:t.content,output:t.output};return t.input&&(e.input=t.input),e},"taskToActivityResponse",0,function(t){let a=t.prompt.length>120?t.prompt.slice(0,120):t.prompt;return{id:t.id,conversation_id:t.conversationId,type:t.type??r.TASK_TYPES.USER_DM_MESSAGE,status:t.status,prompt:a,created_at:(0,e.formatTimestamp)(t.createdAt),started_at:(0,e.formatTimestampNullable)(t.startedAt),completed_at:(0,e.formatTimestampNullable)(t.completedAt),error:t.error||null}},"taskToResponse",0,function(t){return a.TaskApiBaseSchema.parse({id:t.id,agent_id:t.agentId,runtime_id:t.runtimeId,conversation_id:t.conversationId,workspace_id:t.workspaceId,prompt:t.prompt,type:t.type??r.TASK_TYPES.USER_DM_MESSAGE,context_key:t.contextKey??null,context:t.context??null,status:t.status,priority:t.priority,dispatched_at:(0,e.formatTimestampNullable)(t.dispatchedAt),started_at:(0,e.formatTimestampNullable)(t.startedAt),completed_at:(0,e.formatTimestampNullable)(t.completedAt),result:t.result??null,error:t.error||null,created_at:(0,e.formatTimestamp)(t.createdAt),trace_id:t.traceId??null,parent_task_id:t.parentTaskId??null})},"userToResponse",0,function(t){return{id:t.id,name:t.name,email:t.email,avatar_url:t.avatarUrl??null,created_at:(0,e.formatTimestamp)(t.createdAt),updated_at:(0,e.formatTimestamp)(t.updatedAt)}},"workspaceToResponse",0,function(t){return{id:t.id,name:t.name,slug:t.slug,created_at:(0,e.formatTimestamp)(t.createdAt),updated_at:(0,e.formatTimestamp)(t.updatedAt)}}])},726089,t=>{"use strict";var e=t.i(291484);t.i(700598);var a=t.i(704024);let s=(0,t.i(726527).createLogger)({service:"broadcast"});async function r(t,r,i){let n;try{let{env:a}=(0,e.getCloudflareContext)();n=a.DEV_WS_DO_URL;let o=await a.WS_DO_WORKER.fetch(`http://internal${t}`,{method:"POST",body:r});if(o.ok)return;s.warn("broadcast service-binding non-ok",{...i,status:o.status});return}catch{}let o=n||a.DEV_WS_DO_URL;try{let e=await fetch(`${o}${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:r});e.ok||s.warn("broadcast failed",{...i,status:e.status})}catch(t){s.warn("broadcast error",{...i,err:String(t)})}}t.s(["broadcastToUser",0,function(t,a){return function(t,a,s){let i=r(t,a,s);try{let{ctx:t}=(0,e.getCloudflareContext)();t.waitUntil(i)}catch{}return i}(`/broadcast/user/${t}`,JSON.stringify(a),{userId:t,type:a.type})}])},799579,t=>{"use strict";t.i(700598);let e=(0,t.i(726527).createLogger)({service:"web",level:process.env.ALOOK_LOG_LEVEL||"info",pretty:!1});t.s(["log",0,e])},205054,t=>{"use strict";t.i(700598);var e=t.i(291109),a=t.i(704024),s=t.i(799579),r=t.i(726089),i=t.i(740580),n=t.i(774078);let o=e.queries.task,d=e.queries.agent,c=e.queries.message,l=e.queries.conversation,u=e.queries.issue;t.s(["TaskService",0,class{db;constructor(t){this.db=t}async enqueueTask(t,e,s,r,i=a.TASK_TYPES.USER_DM_MESSAGE,c){let l=await d.getAgent(this.db,t,s);if(!l)throw Error("agent not found");if(!l.runtimeId)throw Error("agent has no runtime");if(c?.traceId&&c.parentTaskId&&await o.countTasksByTrace(this.db,c.traceId)>=a.MAX_TASKS_PER_TRACE)throw Error(`Trace limit reached (${a.MAX_TASKS_PER_TRACE} tasks). This may indicate an infinite loop between agents.`);let u=await o.createTask(this.db,{agentId:t,runtimeId:l.runtimeId,workspaceId:s,conversationId:e,prompt:r,type:i,contextKey:c?.contextKey??null,priority:0,context:c?.context,traceId:c?.traceId??null,parentTaskId:c?.parentTaskId??null});return(0,n.invalidate)(n.cacheKeys.activeTaskCounts(s)).catch(()=>{}),u}async claimTask(t,e){let a=await d.getAgent(this.db,t,e);if(!a)return null;if(await o.countRunningTasks(this.db,t,e)>=a.maxConcurrentTasks){let s=await o.findSteerableReplacement(this.db,t,e);if(!s||await o.countRunningTasks(this.db,t,e,s.predecessorId)>=a.maxConcurrentTasks)return null}let s=await o.claimTask(this.db,t,e);return s?(await d.updateAgentStatus(this.db,t,e,"working"),s):null}async claimTasksForRuntimes(t,e,a){let s=await o.claimKillTasks(this.db,t,a,e),r=e-s.length,i=r>0?await o.listPendingTasksByRuntimes(this.db,t,a):[],n=new Set(t),d=new Set,c=[...s],l=[];for(let t of i){if(l.length>=r)break;let e=`${t.agentId}:${t.workspaceId}`;d.has(e)||(d.add(e),l.push(t))}for(let t of(await Promise.all(l.map(t=>this.claimTask(t.agentId,t.workspaceId)))))t&&n.has(t.runtimeId)&&c.push(t);return c}async startTask(t,e){let a=await o.startTask(this.db,t,e);if(!a)throw Error("task not in dispatched status");return a}async completeTask(t,e,a,r){let i;try{i=JSON.parse(a)}catch{i={raw:a}}let n=await o.completeTask(this.db,t,e,{result:i,sessionId:r||null});if(!n){let e=await o.getTask(this.db,t),a=e?.status??"unknown";throw s.log.warn(`completeTask failed: task is in '${a}' status`,{taskId:t}),Error(`cannot complete task in '${a}' status`)}let d=i,l="string"==typeof d?.output?d.output:"";return l&&await c.createMessage(this.db,{conversationId:n.conversationId,role:"assistant",content:l,taskId:t}),await this.reconcileAgentStatus(n.agentId,n.workspaceId),await this.dispatchNextBufferedMessage(n.conversationId,n.workspaceId),n}async failTask(t,e,r){let i=await o.failTask(this.db,t,e,r);if(!i){let e=await o.getTask(this.db,t),a=e?.status??"unknown";throw s.log.warn(`failTask failed: task is in '${a}' status`,{taskId:t}),Error(`cannot fail task in '${a}' status`)}return i.type===a.TASK_TYPES.KILL_TASK||(r&&await c.createMessage(this.db,{conversationId:i.conversationId,role:"assistant",content:`Error: ${r}`,taskId:t}),await this.reconcileAgentStatus(i.agentId,i.workspaceId),await this.syncIssueStatusFromTask(i,"failed"),await this.dispatchNextBufferedMessage(i.conversationId,i.workspaceId)),i}async syncIssueStatusFromTask(t,e){if(t.type!==a.TASK_TYPES.ISSUE_EVENT)return;let s=await u.getIssueByConversation(this.db,t.conversationId,t.workspaceId);if(!s||s.status===e||!await u.updateIssue(this.db,s.id,t.workspaceId,{status:e}))return;let n=await c.createMessage(this.db,{conversationId:t.conversationId,role:"event",content:`Issue status changed: ${s.status} -> ${e}`,taskId:t.id,metadata:JSON.stringify({issueId:s.id})});try{let e=await l.getConversation(this.db,t.conversationId,t.workspaceId);e&&(0,r.broadcastToUser)(e.userId,{type:"conversation.message",conversationId:t.conversationId,message:(0,i.messageToResponse)(n)}).catch(()=>{})}catch{}}async supersedeTask(t,e){let a=await o.supersedeTask(this.db,t,e);if(!a){let e=await o.getTask(this.db,t),a=e?.status??"unknown";throw s.log.warn(`supersedeTask failed: task is in '${a}' status`,{taskId:t}),Error(`cannot supersede task in '${a}' status`)}return await this.reconcileAgentStatus(a.agentId,a.workspaceId),await this.dispatchNextBufferedMessage(a.conversationId,a.workspaceId),a}async retryTask(t,e){let a=await o.getTask(this.db,t);if(!a||a.workspaceId!==e)throw Error("task not found");if("failed"!==a.status)throw Error("only failed tasks can be retried");let s=await o.markFailedAsSuperseded(this.db,t,e);if(!s)throw Error("failed to mark task as superseded");return{oldTask:s,newTask:await this.enqueueTask(a.agentId,a.conversationId,e,a.prompt,a.type,{contextKey:a.contextKey??null,context:a.context,traceId:a.traceId??null,parentTaskId:a.parentTaskId??null})}}async cancelActiveTask(t,e,s){let r=await o.getActiveTaskByConversation(this.db,t,e);if(!r)return null;let i=await o.cancelTask(this.db,r.id,e);return i?(("dispatched"===r.status||"running"===r.status)&&await o.createTask(this.db,{agentId:r.agentId,runtimeId:r.runtimeId,workspaceId:e,conversationId:t,prompt:"",type:a.TASK_TYPES.KILL_TASK,context:{target_task_id:r.id}}),await c.createMessage(this.db,{conversationId:t,role:"assistant",content:s?.reason??"Task cancelled by user",taskId:r.id}),await this.reconcileAgentStatus(r.agentId,e),s?.skipDispatch||await this.dispatchNextBufferedMessage(t,e),i):null}async reconcileAgentStatus(t,e){let a=await o.countRunningTasks(this.db,t,e);await d.updateAgentStatus(this.db,t,e,a>0?"working":"idle"),(0,n.invalidate)(n.cacheKeys.activeTaskCounts(e)).catch(()=>{})}async dispatchNextBufferedMessage(t,e){let n=await c.activateNextBufferedMessage(this.db,t);if(!n)return null;let d=await l.getConversation(this.db,t,e);if(!d)return s.log.warn("dispatchNextBufferedMessage: conversation not found",{conversationId:t}),await c.revertToBuffered(this.db,n.id).catch(t=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:n.id,revertErr:t})}),null;let u=d.userId;try{let s=n.attachmentIds?JSON.parse(n.attachmentIds):[],l=await o.getLatestTaskForConversation(this.db,t),m=l?.traceId??null,p=await this.enqueueTask(d.agentId,t,e,n.content,a.TASK_TYPES.USER_DM_MESSAGE,{contextKey:t,context:s.length>0?{attachment_ids:s}:void 0,traceId:m,parentTaskId:null});return await c.updateMessageTaskId(this.db,n.id,p.id),(0,r.broadcastToUser)(u,{type:"followup.dispatched",conversationId:t,message:(0,i.messageToResponse)(n),task:(0,i.taskToResponse)(p)}).catch(()=>{}),p}catch(e){return s.log.warn("dispatchNextBufferedMessage: enqueueTask failed",{conversationId:t,err:e}),await c.revertToBuffered(this.db,n.id).catch(t=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:n.id,revertErr:t})}),(0,r.broadcastToUser)(u,{type:"followup.dispatch_failed",conversationId:t,messageId:n.id,error:e instanceof Error?e.message:"Failed to dispatch follow-up"}).catch(()=>{}),null}}async cancelTrace(t,e,a){for(let r of[...new Set((await o.getTraceTree(this.db,t,e)).filter(t=>["queued","dispatched","running"].includes(t.status)).map(t=>t.conversationId))])try{await this.cancelActiveTask(r,e,{skipDispatch:!0,reason:a?.reason})}catch(e){s.log.warn("cancelTrace: failed to cancel task",{traceId:t,convId:r,err:e})}}}])}];
1
+ module.exports=[776227,t=>{"use strict";var e=t.i(463421);function a(t,a){return e.NextResponse.json({error:t},{status:a})}async function s(t,s){let r;try{r=await t.json()}catch{return[null,a("invalid request body",400)]}try{return[s.parse(r),null]}catch(a){let t=(a.issues??a.errors??[]).map(t=>`${t.path.join(".")}: ${t.message}`);return[null,e.NextResponse.json({error:"validation error",details:t},{status:400})]}}t.s(["formatTimestamp",0,function(t){return t?("string"==typeof t?new Date(t):t).toISOString().replace(/\.\d{3}Z$/,"Z"):""},"formatTimestampNullable",0,function(t){return t?("string"==typeof t?new Date(t):t).toISOString().replace(/\.\d{3}Z$/,"Z"):null},"parseBody",0,s,"writeError",0,a,"writeJSON",0,function(t,a=200){return e.NextResponse.json(t,{status:a})}])},469187,t=>{"use strict";var e=t.i(704024);t.s(["isOnline",0,function(t){if(!t)return!1;let a=new Date(t.includes("T")||t.includes("Z")||t.includes("+")?t:t+"Z").getTime();return!isNaN(a)&&Date.now()-a<e.OFFLINE_THRESHOLD_MS}])},740580,t=>{"use strict";var e=t.i(776227);t.i(700598);var a=t.i(888247),s=t.i(469187),r=t.i(704024);t.s(["agentLinkToResponse",0,function(t){return{id:t.id,workspace_id:t.workspaceId,source_agent_id:t.sourceAgentId,target_agent_id:t.targetAgentId,instruction:t.instruction,created_at:(0,e.formatTimestamp)(t.createdAt),updated_at:(0,e.formatTimestamp)(t.updatedAt)}},"agentToResponse",0,function(t){let a=t.runtimeConfig;return a||(a={}),{id:t.id,workspace_id:t.workspaceId,runtime_id:t.runtimeId||"",name:t.name,description:t.description,instructions:t.instructions,runtime_mode:t.runtimeMode,runtime_config:a,status:t.status,max_concurrent_tasks:t.maxConcurrentTasks,email_handle:t.emailHandle||null,avatar_url:t.avatarUrl??null,visibility:t.visibility??"private",owner_id:t.ownerId??null,created_at:(0,e.formatTimestamp)(t.createdAt),updated_at:(0,e.formatTimestamp)(t.updatedAt)}},"calendarEventToResponse",0,function(t){let a=(0,e.formatTimestamp)(t.scheduledAt),s=t.occurrenceAt?(0,e.formatTimestamp)(t.occurrenceAt):a;return{id:t.id,agent_id:t.agentId,workspace_id:t.workspaceId,title:t.title,description:t.description??null,scheduled_at:a,occurrence_at:s,collapsed_count:t.collapsedCount??null,repeat_interval:t.repeatInterval??null,repeat_stop_at:(0,e.formatTimestampNullable)(t.repeatStopAt),last_triggered_at:(0,e.formatTimestampNullable)(t.lastTriggeredAt),created_at:(0,e.formatTimestamp)(t.createdAt),updated_at:(0,e.formatTimestamp)(t.updatedAt)}},"channelToResponse",0,function(t){return{id:t.id,workspace_id:t.workspaceId,name:t.name,position:t.position??0,created_at:(0,e.formatTimestamp)(t.createdAt)}},"conversationToResponse",0,function(t){let a={id:t.id,agent_id:t.agentId,title:t.title,type:t.type??r.TASK_TYPES.USER_DM_MESSAGE,channel:t.channel??"default",created_at:(0,e.formatTimestamp)(t.createdAt)};return void 0!==t.messageCount&&(a.message_count=t.messageCount),a},"emailToResponse",0,function(t){return{id:t.id,agent_id:t.agentId,from_email:t.fromEmail,to_email:t.toEmail,subject:t.subject,r2_key:t.r2Key,is_whitelisted:!!t.isWhitelisted,forwarded:!!t.forwarded,message_id:t.messageId??"",in_reply_to:t.inReplyTo??"",references:t.references??"",html_body:t.htmlBody??"",attachments:JSON.parse(t.attachments||"[]"),status:t.status??"unread",direction:t.direction??"inbound",created_at:(0,e.formatTimestamp)(t.createdAt)}},"inviteToResponse",0,function(t){return{id:t.id,token:t.token,created_by:t.createdBy,used_by:t.usedBy,expires_at:(0,e.formatTimestamp)(t.expiresAt),created_at:(0,e.formatTimestamp)(t.createdAt)}},"issueToResponse",0,function(t){return{id:t.id,workspace_id:t.workspaceId,agent_id:t.agentId,creator_user_id:t.creatorUserId,conversation_id:t.conversationId,latest_task_id:t.latestTaskId??null,title:t.title,description:t.description??"",status:t.status,created_at:(0,e.formatTimestamp)(t.createdAt),updated_at:(0,e.formatTimestamp)(t.updatedAt),completed_at:(0,e.formatTimestampNullable)(t.completedAt)}},"machineTokenToResponse",0,function(t){return{id:t.id,name:t.name,last_used_at:(0,e.formatTimestampNullable)(t.lastUsedAt),created_at:(0,e.formatTimestamp)(t.createdAt)}},"meetingToResponse",0,function(t){return{id:t.id,agent_id:t.agentId,workspace_id:t.workspaceId,title:t.title,meeting_url:t.meetingUrl,status:t.status,from_email:t.fromEmail??null,is_whitelisted:!!t.isWhitelisted,participants:t.participants??[],scheduled_at:(0,e.formatTimestampNullable)(t.scheduledAt),started_at:(0,e.formatTimestampNullable)(t.startedAt),completed_at:(0,e.formatTimestampNullable)(t.completedAt),transcript_r2_key:t.transcriptR2Key??null,summary:t.summary??null,error:t.error??null,worker_session_id:t.workerSessionId??null,created_at:(0,e.formatTimestamp)(t.createdAt),updated_at:(0,e.formatTimestamp)(t.updatedAt)}},"memberToResponse",0,function(t){return{id:t.id,user_id:t.userId,role:t.role,name:t.userName,email:t.userEmail,image:t.userImage,created_at:(0,e.formatTimestamp)(t.createdAt)}},"messageToResponse",0,function(t){let a={id:t.id,conversation_id:t.conversationId,role:t.role,content:t.content,task_id:t.taskId||null,attachment_ids:t.attachmentIds?JSON.parse(t.attachmentIds):null,metadata:t.metadata?JSON.parse(t.metadata):null,created_at:(0,e.formatTimestamp)(t.createdAt)};return t.status&&"active"!==t.status&&(a.status=t.status),a},"runtimeToResponse",0,function(t){let a=t.metadata;a||(a={});let r=t.machineLastSeenAt??null,i=r instanceof Date?r.toISOString():r;return{id:t.id,workspace_id:t.workspaceId,daemon_id:t.daemonId||null,runtime_mode:t.runtimeMode,provider:t.provider,status:(0,s.isOnline)(i)?"online":"offline",device_info:t.deviceInfo,metadata:a,pending_update_version:t.pendingUpdateVersion??null,pending_rescan:!!t.pendingRescan,last_seen_at:(0,e.formatTimestampNullable)(r),created_at:(0,e.formatTimestamp)(t.createdAt),updated_at:(0,e.formatTimestamp)(t.updatedAt)}},"taskMessageToResponse",0,function(t){let e={id:t.id,task_id:t.taskId,seq:t.seq,type:t.type,tool:t.tool,call_id:t.callId||"",content:t.content,output:t.output};return t.input&&(e.input=t.input),e},"taskToActivityResponse",0,function(t){let a=t.prompt.length>120?t.prompt.slice(0,120):t.prompt;return{id:t.id,conversation_id:t.conversationId,type:t.type??r.TASK_TYPES.USER_DM_MESSAGE,status:t.status,prompt:a,created_at:(0,e.formatTimestamp)(t.createdAt),started_at:(0,e.formatTimestampNullable)(t.startedAt),completed_at:(0,e.formatTimestampNullable)(t.completedAt),error:t.error||null}},"taskToResponse",0,function(t){return a.TaskApiBaseSchema.parse({id:t.id,agent_id:t.agentId,runtime_id:t.runtimeId,conversation_id:t.conversationId,workspace_id:t.workspaceId,prompt:t.prompt,type:t.type??r.TASK_TYPES.USER_DM_MESSAGE,context_key:t.contextKey??null,context:t.context??null,status:t.status,priority:t.priority,dispatched_at:(0,e.formatTimestampNullable)(t.dispatchedAt),started_at:(0,e.formatTimestampNullable)(t.startedAt),completed_at:(0,e.formatTimestampNullable)(t.completedAt),result:t.result??null,error:t.error||null,created_at:(0,e.formatTimestamp)(t.createdAt),trace_id:t.traceId??null,parent_task_id:t.parentTaskId??null})},"userToResponse",0,function(t){return{id:t.id,name:t.name,email:t.email,avatar_url:t.avatarUrl??null,created_at:(0,e.formatTimestamp)(t.createdAt),updated_at:(0,e.formatTimestamp)(t.updatedAt)}},"workspaceToResponse",0,function(t){return{id:t.id,name:t.name,slug:t.slug,created_at:(0,e.formatTimestamp)(t.createdAt),updated_at:(0,e.formatTimestamp)(t.updatedAt)}}])},726089,t=>{"use strict";var e=t.i(291484);t.i(700598);var a=t.i(704024);let s=(0,t.i(726527).createLogger)({service:"broadcast"});async function r(t,r,i){let n;try{let{env:a}=(0,e.getCloudflareContext)();n=a.DEV_WS_DO_URL;let o=await a.WS_DO_WORKER.fetch(`http://internal${t}`,{method:"POST",body:r});if(o.ok)return;s.warn("broadcast service-binding non-ok",{...i,status:o.status});return}catch{}let o=n||a.DEV_WS_DO_URL;try{let e=await fetch(`${o}${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:r});e.ok||s.warn("broadcast failed",{...i,status:e.status})}catch(t){s.warn("broadcast error",{...i,err:String(t)})}}t.s(["broadcastToUser",0,function(t,a){return function(t,a,s){let i=r(t,a,s);try{let{ctx:t}=(0,e.getCloudflareContext)();t.waitUntil(i)}catch{}return i}(`/broadcast/user/${t}`,JSON.stringify(a),{userId:t,type:a.type})}])},799579,t=>{"use strict";t.i(700598);let e=(0,t.i(726527).createLogger)({service:"web",level:process.env.ALOOK_LOG_LEVEL||"info",pretty:!1});t.s(["log",0,e])},205054,t=>{"use strict";t.i(700598);var e=t.i(291109),a=t.i(704024),s=t.i(799579),r=t.i(726089),i=t.i(740580),n=t.i(774078);let o=e.queries.task,d=e.queries.agent,c=e.queries.message,l=e.queries.conversation,u=e.queries.issue;t.s(["TaskService",0,class{db;constructor(t){this.db=t}async enqueueTask(t,e,s,r,i=a.TASK_TYPES.USER_DM_MESSAGE,c){let l=await d.getAgent(this.db,t,s);if(!l)throw Error("agent not found");if(!l.runtimeId)throw Error("agent has no runtime");if(c?.traceId&&c.parentTaskId&&await o.countTasksByTrace(this.db,c.traceId)>=a.MAX_TASKS_PER_TRACE)throw Error(`Trace limit reached (${a.MAX_TASKS_PER_TRACE} tasks). This may indicate an infinite loop between agents.`);let u=await o.createTask(this.db,{agentId:t,runtimeId:l.runtimeId,workspaceId:s,conversationId:e,prompt:r,type:i,contextKey:c?.contextKey??null,priority:0,context:c?.context,traceId:c?.traceId??null,parentTaskId:c?.parentTaskId??null});return(0,n.invalidate)(n.cacheKeys.activeTaskCounts(s)).catch(()=>{}),u}async claimTask(t,e){let a=await d.getAgent(this.db,t,e);if(!a)return null;if(await o.countRunningTasks(this.db,t,e)>=a.maxConcurrentTasks){let s=await o.findSteerableReplacement(this.db,t,e);if(!s||await o.countRunningTasks(this.db,t,e,s.predecessorId)>=a.maxConcurrentTasks)return null}let s=await o.claimTask(this.db,t,e);return s?(await d.updateAgentStatus(this.db,t,e,"working"),s):null}async claimTasksForRuntimes(t,e,a){let s=await o.claimKillTasks(this.db,t,a,e),r=e-s.length,i=r>0?await o.listPendingTasksByRuntimes(this.db,t,a):[],n=new Set(t),d=new Set,c=[...s],l=[];for(let t of i){if(l.length>=r)break;let e=`${t.agentId}:${t.workspaceId}`;d.has(e)||(d.add(e),l.push(t))}for(let t of(await Promise.all(l.map(t=>this.claimTask(t.agentId,t.workspaceId)))))t&&n.has(t.runtimeId)&&c.push(t);return c}async startTask(t,e){let a=await o.startTask(this.db,t,e);if(!a)throw Error("task not in dispatched status");return a}async completeTask(t,e,a,n){let d;try{d=JSON.parse(a)}catch{d={raw:a}}let u=await o.completeTask(this.db,t,e,{result:d,sessionId:n||null});if(!u){let e=await o.getTask(this.db,t),a=e?.status??"unknown";throw s.log.warn(`completeTask failed: task is in '${a}' status`,{taskId:t}),Error(`cannot complete task in '${a}' status`)}let m=d,p="string"==typeof m?.output?m.output:"";if(p){let a=await c.createMessage(this.db,{conversationId:u.conversationId,role:"assistant",content:p,taskId:t});try{let t=await l.getConversation(this.db,u.conversationId,e);t&&(0,r.broadcastToUser)(t.userId,{type:"conversation.message",conversationId:u.conversationId,message:(0,i.messageToResponse)(a)}).catch(()=>{})}catch{}}return await this.reconcileAgentStatus(u.agentId,u.workspaceId),await this.dispatchNextBufferedMessage(u.conversationId,u.workspaceId),u}async failTask(t,e,n){let d=await o.failTask(this.db,t,e,n);if(!d){let e=await o.getTask(this.db,t),a=e?.status??"unknown";throw s.log.warn(`failTask failed: task is in '${a}' status`,{taskId:t}),Error(`cannot fail task in '${a}' status`)}if(d.type===a.TASK_TYPES.KILL_TASK)return d;if(n){let a=await c.createMessage(this.db,{conversationId:d.conversationId,role:"assistant",content:`Error: ${n}`,taskId:t});try{let t=await l.getConversation(this.db,d.conversationId,e);t&&(0,r.broadcastToUser)(t.userId,{type:"conversation.message",conversationId:d.conversationId,message:(0,i.messageToResponse)(a)}).catch(()=>{})}catch{}}return await this.reconcileAgentStatus(d.agentId,d.workspaceId),await this.syncIssueStatusFromTask(d,"failed"),await this.dispatchNextBufferedMessage(d.conversationId,d.workspaceId),d}async syncIssueStatusFromTask(t,e){if(t.type!==a.TASK_TYPES.ISSUE_EVENT)return;let s=await u.getIssueByConversation(this.db,t.conversationId,t.workspaceId);if(!s||s.status===e||!await u.updateIssue(this.db,s.id,t.workspaceId,{status:e}))return;let n=await c.createMessage(this.db,{conversationId:t.conversationId,role:"event",content:`Issue status changed: ${s.status} -> ${e}`,taskId:t.id,metadata:JSON.stringify({issueId:s.id})});try{let e=await l.getConversation(this.db,t.conversationId,t.workspaceId);e&&(0,r.broadcastToUser)(e.userId,{type:"conversation.message",conversationId:t.conversationId,message:(0,i.messageToResponse)(n)}).catch(()=>{})}catch{}}async supersedeTask(t,e){let a=await o.supersedeTask(this.db,t,e);if(!a){let e=await o.getTask(this.db,t),a=e?.status??"unknown";throw s.log.warn(`supersedeTask failed: task is in '${a}' status`,{taskId:t}),Error(`cannot supersede task in '${a}' status`)}return await this.reconcileAgentStatus(a.agentId,a.workspaceId),await this.dispatchNextBufferedMessage(a.conversationId,a.workspaceId),a}async retryTask(t,e){let a=await o.getTask(this.db,t);if(!a||a.workspaceId!==e)throw Error("task not found");if("failed"!==a.status)throw Error("only failed tasks can be retried");let s=await o.markFailedAsSuperseded(this.db,t,e);if(!s)throw Error("failed to mark task as superseded");return{oldTask:s,newTask:await this.enqueueTask(a.agentId,a.conversationId,e,a.prompt,a.type,{contextKey:a.contextKey??null,context:a.context,traceId:a.traceId??null,parentTaskId:a.parentTaskId??null})}}async cancelActiveTask(t,e,s){let r=await o.getActiveTaskByConversation(this.db,t,e);if(!r)return null;let i=await o.cancelTask(this.db,r.id,e);return i?(("dispatched"===r.status||"running"===r.status)&&await o.createTask(this.db,{agentId:r.agentId,runtimeId:r.runtimeId,workspaceId:e,conversationId:t,prompt:"",type:a.TASK_TYPES.KILL_TASK,context:{target_task_id:r.id}}),await c.createMessage(this.db,{conversationId:t,role:"assistant",content:s?.reason??"Task cancelled by user",taskId:r.id}),await this.reconcileAgentStatus(r.agentId,e),s?.skipDispatch||await this.dispatchNextBufferedMessage(t,e),i):null}async reconcileAgentStatus(t,e){let a=await o.countRunningTasks(this.db,t,e);await d.updateAgentStatus(this.db,t,e,a>0?"working":"idle"),(0,n.invalidate)(n.cacheKeys.activeTaskCounts(e)).catch(()=>{})}async dispatchNextBufferedMessage(t,e){let n=await c.activateNextBufferedMessage(this.db,t);if(!n)return null;let d=await l.getConversation(this.db,t,e);if(!d)return s.log.warn("dispatchNextBufferedMessage: conversation not found",{conversationId:t}),await c.revertToBuffered(this.db,n.id).catch(t=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:n.id,revertErr:t})}),null;let u=d.userId;try{let s=n.attachmentIds?JSON.parse(n.attachmentIds):[],l=await o.getLatestTaskForConversation(this.db,t),m=l?.traceId??null,p=await this.enqueueTask(d.agentId,t,e,n.content,a.TASK_TYPES.USER_DM_MESSAGE,{contextKey:t,context:s.length>0?{attachment_ids:s}:void 0,traceId:m,parentTaskId:null});return await c.updateMessageTaskId(this.db,n.id,p.id),(0,r.broadcastToUser)(u,{type:"followup.dispatched",conversationId:t,message:(0,i.messageToResponse)(n),task:(0,i.taskToResponse)(p)}).catch(()=>{}),p}catch(e){return s.log.warn("dispatchNextBufferedMessage: enqueueTask failed",{conversationId:t,err:e}),await c.revertToBuffered(this.db,n.id).catch(t=>{s.log.error("dispatchNextBufferedMessage: failed to revert message status",{messageId:n.id,revertErr:t})}),(0,r.broadcastToUser)(u,{type:"followup.dispatch_failed",conversationId:t,messageId:n.id,error:e instanceof Error?e.message:"Failed to dispatch follow-up"}).catch(()=>{}),null}}async cancelTrace(t,e,a){for(let r of[...new Set((await o.getTraceTree(this.db,t,e)).filter(t=>["queued","dispatched","running"].includes(t.status)).map(t=>t.conversationId))])try{await this.cancelActiveTask(r,e,{skipDispatch:!0,reason:a?.reason})}catch(e){s.log.warn("cancelTrace: failed to cancel task",{traceId:t,convId:r,err:e})}}}])}];
2
2
 
3
3
  //# sourceMappingURL=src_0q3gvkd._.js.map