1import{n as e}from"./rolldown-runtime-CMxvf4Kt.js";import{G as t,U as n}from"../vendor/vendor-data-runtime-nLFaCKB0.js";import{Ni as r,O as i,ii as a,k as o,mn as s,pi as c,ri as l}from"../vendor/vendor-ai-runtime-DrDK77gy.js";import{Wn as u,Yn as ee,ir as te,rr as ne}from"./agent-Dh3-_0ai.js";import{Dt as re,Et as ie,F as ae,Mt as d,O as f,Ot as oe,b as se,jt as ce,t as p}from"./selectors-IDJ5-Ts8.js";import{C as m,rn as le,tn as h}from"./agentDocument-GhemY2N0.js";import{C as ue,t as de}from"./selectors-BZArZxfP.js";import{c as fe,f as g,h as _,i as v,p as y,u as b}from"./ipc-XkRXMd72.js";import{Bo as pe,Hn as x,Lo as me,Ro as S,Un as he,Uo as C,Wn as ge,Wo as _e,Yo as ve,c as w,i as ye,l as be,n as xe,qo as Se,r as T,s as Ce,t as we,zo as E}from"./store-JX60g0Lu.js";import{n as D,t as O}from"./message-D0HRzm1P.js";import{r as k,t as A}from"./heterogeneousAgent-DjV9GlfG.js";var j,M,Te,N=e((()=>{j=5e3,M=(e,t)=>{let n=e.metadata||t.metadata?{...e.metadata,...t.metadata}:void 0;return{...e,...t,...n?{metadata:n}:{}}},Te=e=>{let t=[],n=Promise.resolve(),r,i=()=>{r&&=(clearTimeout(r),void 0)},a=(e,t)=>{e.onFailure?.(t)},o=async t=>{if(t.type===`createMessage`){await e.createMessage(t.message);return}if(t.type===`updateToolMessage`){let n=await e.updateToolMessage(t.id,t.value,t.ctx);n?.success===!1&&a(t,n);return}let n=await e.updateMessage(t.id,t.value,t.ctx);n?.success===!1&&a(t,n)},s=async t=>{if(e.batchMutate)try{let n=await e.batchMutate(t),r=new Set((n?.results??[]).filter(e=>!e.success).map(e=>e.index));if(n?.success===!1&&r.size===0)for(let[e]of t.entries())r.add(e);for(let e of r)a(t[e],n);return}catch(e){console.error(`[HeterogeneousAgent] Failed to flush message write batch:`,e);for(let n of t)a(n,e);return}for(let e of t)try{await o(e)}catch(t){console.error(`[HeterogeneousAgent] Failed to flush message write operation:`,t),a(e,t)}},c=async e=>{i(),n=n.then(async()=>{for(;t.length>0;){let e=t;t=[],await s(e)}}),await n},l=()=>{i(),r=setTimeout(()=>{c(`idle`)},j)},u=e=>{let n=t.at(-1);n?.type===`updateMessage`&&e.type===`updateMessage`&&n.id===e.id&&!n.onFailure&&!e.onFailure?n.value=M(n.value,e.value):t.push(e),t.length>=50?c(`max-ops`):l()};return{enqueueCreateMessage:(e,t)=>u({message:e,onFailure:t,type:`createMessage`}),enqueueToolMessageUpdate:(e,t,n,r)=>u({ctx:n,id:e,onFailure:r,type:`updateToolMessage`,value:t}),enqueueUpdateMessage:(e,t,n,r)=>u({ctx:n,id:e,onFailure:r,type:`updateMessage`,value:t}),flush:c}}})),Ee,P=e((()=>{Ee=e=>{let t=new Map,n=async()=>{for(let[n,r]of t)try{await e.createMessage(r),t.delete(n)}catch(e){console.error(`[HeterogeneousAgent] Failed to replay message create:`,e)}};return{add:(e,n)=>t.set(e,n),drain:n,ensureParentPersisted:async r=>{if(await e.flush(`before-subagent-write`),t.size>0&&await n(),r&&t.has(r))throw Error(`[HeterogeneousAgent] refusing to write a row against missing FK parent ${r}`)},has:e=>t.has(e),get size(){return t.size}}}})),De,F=e((()=>{De=(e,t)=>{if(!e||e.length===0)return[];let n=[];for(let t of e){let e=t.createdAt?new Date(t.createdAt).toISOString():void 0,r={clientId:t.id,content:t.content??``,...e?{createdAt:e}:{}};if(t.role===`user`){n.push({...r,role:`user`});continue}if(t.role===`assistant`){let e=(t.tools??[]).map(e=>({apiName:e.apiName,arguments:e.arguments,id:e.id,identifier:e.identifier,type:`default`}));n.push({...r,role:`assistant`,...e.length>0?{tools:e}:{}});continue}t.role===`tool`&&t.tool_call_id&&n.push({...r,role:`tool`,toolCallId:t.tool_call_id})}for(;n.length>0;){let e=n.at(-1),r=e.role===`assistant`&&!e.content.trim()&&(e.tools?.length??0)===0,i=e.role===`user`&&!!t&&e.content.trim()===t.trim();if(!r&&!i)break;n.pop()}return n}})),Oe,I=e((()=>{Oe=({agentId:e,operationId:t,topicId:n})=>{let r={};return e&&(r.LOBEHUB_AGENT_ID=e),t&&(r.LOBEHUB_OPERATION_ID=t),n&&(r.LOBEHUB_TOPIC_ID=n),r}})),ke,Ae,L,R,z,B,V,je,Me,H,Ne,Pe,Fe,Ie,Le,U,W,Re,ze,Be,Ve,He,Ue,G,We;e((()=>{v(),C(),m(),s(),i(),n(),ne(),x(),k(),O(),T(),p(),f(),ie(),we(),E(),ce(),u(),de(),S(),w(),N(),P(),F(),I(),ke=()=>`thd_${o(16)()}`,Ae=e=>{e.data={...e.data,skipMessageFetch:!0}},L=[/failed to authenticate/i,/invalid authentication credentials/i,/authentication[_ ]error/i,/not authenticated/i,/\bunauthorized\b/i,/\b401\b/],R=[/please (?:log|sign) in/i,/amp_api_key/i],z=(e,t)=>{switch(e){case`amp`:return{agentType:e,code:y.AuthRequired,docsUrl:fe,message:"Amp could not authenticate. Run `amp login` or configure AMP_API_KEY, then retry.",stderr:t};case`claude-code`:return{agentType:e,code:y.AuthRequired,docsUrl:b,message:`Claude Code could not authenticate. Sign in again or refresh its credentials, then retry.`,stderr:t};case`codex`:return{agentType:e,code:y.AuthRequired,docsUrl:g,message:`Codex could not authenticate. Sign in again or refresh its credentials, then retry.`,stderr:t};case`opencode`:return{agentType:e,code:y.AuthRequired,docsUrl:_,message:`OpenCode could not authenticate. Sign in again or refresh its credentials, then retry.`,stderr:t}}},B=e=>e?.replaceAll(/\s+/g,` `).trim(),V=(e,t)=>{if(t!==`amp`&&t!==`claude-code`&&t!==`codex`&&t!==`opencode`)return;let n=e instanceof Error?e.message:typeof e==`string`?e:typeof e==`object`&&e&&`message`in e&&typeof e.message==`string`?e.message:void 0;if(n&&(t===`amp`?[...L,...R]:L).some(e=>e.test(n)))return z(t,n)},je=(e,t)=>{let n=t.body;if(!n?.clearEchoedContent&&n?.code!==y.AuthRequired)return!1;let r=B(e),i=B(n?.stderr||n?.message||t.message);return!!r&&!!i&&r===i},Me=e=>{switch(e){case`amp`:return`amp`;case`codex`:return`codex`;case`opencode`:return`opencode`;default:return`claude`}},H=(e,t)=>{let n=V(e,t);if(n)return{body:n,message:n.message,type:c.AgentRuntimeError};if(typeof e==`object`&&e&&`message`in e&&typeof e.message==`string`&&(`agentType`in e||`code`in e||`docsUrl`in e||`installCommands`in e))return{body:e,message:e.message,type:c.AgentRuntimeError};let r=typeof e==`object`&&e&&`message`in e&&typeof e.message==`string`?e.message:void 0,i=e instanceof Error?e.message:typeof e==`string`?e:r??`Agent execution failed`,a=e instanceof Error?e.cause:void 0,o=a instanceof Error?{code:a.code,message:a.message,name:a.name}:a;return{body:o==null?{message:i}:{cause:o,message:i},message:i,type:c.AgentRuntimeError}},Ne=e=>!e||typeof e!=`object`||!(`code`in e)?!1:e.code===y.ResumeCwdMismatch||e.code===y.ResumeThreadNotFound,Pe=({agentSystemContext:e,contextSelections:t,pageSelections:n,workingDirectory:r})=>{let i=[];e?.trim()&&i.push(e.trim()),r?.trim()&&i.push([`## Workspace`,`You are running on the user's own machine. Your working directory is \`${r.trim()}\`.`].join(` 2`));let a=t&&t.length>0?le(t):n&&n.length>0?h(n):``;return a&&i.push(a),i.length>0?i.join(` 3 4`):void 0},Fe=(e,t)=>{if(t)for(let n of Object.values(e.topicDataMap??{})){let e=n?.items?.find(e=>e.id===t);if(e)return e.metadata}},Ie=e=>{if(e.type)return e.type;if(e.adapterType)return e.adapterType;let t=e.command||`claude`;return t.includes(`claude`)?`claude-code`:t.includes(`codex`)?`codex`:t.includes(`kimi`)?`kimi-cli`:`claude-code`},Le=e=>e&&typeof e==`object`?e:{},U=(...e)=>e.find(e=>typeof e==`string`&&e.length>0),W=(...e)=>e.find(e=>typeof e==`number`&&Number.isFinite(e)),Re=(e,t)=>{let n=Le(e.data);return{agentType:U(n.agentType,t),attempt:W(n.attempt),delayMs:W(n.delayMs),error:U(n.error,n.errorType,n.kind,n.message),errorStatus:W(n.errorStatus,n.status,n.statusCode,n.httpStatus),maxAttempts:W(n.maxAttempts),provider:U(n.provider)}},ze=(e,t)=>
4{if(!window.electron?.ipcRenderer)return()=>{};let n=window.electron.ipcRenderer,r=(n,r)=>{r.sessionId===e&&t.onStreamEvent(r.event)},i=(n,r)=>{r.sessionId===e&&t.onComplete()},a=(n,r)=>{r.sessionId===e&&t.onError(r.error)};return n.on(`heteroAgentEvent`,r),n.on(`heteroAgentSessionComplete`,i),n.on(`heteroAgentSessionError`,a),()=>{n.removeListener(`heteroAgentEvent`,r),n.removeListener(`heteroAgentSessionComplete`,i),n.removeListener(`heteroAgentSessionError`,a)}},Be=1e4,Ve=3e3,He=async(e,t,n=Be)=>{let r,i=await Promise.race([e.then(()=>({status:`resolved`}),e=>({error:e,status:`rejected`})),new Promise(e=>{r=setTimeout(()=>e({status:`timeout`}),n)})]);if(r&&clearTimeout(r),i.status===`rejected`)throw i.error;return i.status===`timeout`?(console.warn(`[HeterogeneousAgent] persistQueue did not drain within ${n}ms (${t}); continuing terminal flow.`),!1):!0},Ue=class extends Error{result;constructor(e){let t=e.results?.filter(e=>!e.success)??[],n=[...new Set(t.map(e=>e.error).filter(Boolean))];super(`messageService.batchMutate failed for ${t.length||`unknown`} operation(s)`+(n.length>0?`: ${n.join(`; `)}`:``)),this.result=e}},G=async e=>{let t=D.batchMutate;if(!t){for(let t of e)t.type===`createMessage`?await D.createMessage(t.message):t.type===`updateToolMessage`?await D.updateToolMessage(t.id,t.value):await D.updateMessage(t.id,t.value);return}let n=await t(e),r=(n?.results??[]).filter(e=>e.success===!1);if(n?.success===!1||r.length>0)throw new Ue(n)},We=async(e,n)=>{let{heterogeneousProvider:i,contextSelections:s,assistantMessageId:c,context:u,imageList:ne,message:ie,operationId:f,pageSelections:ce,resumeSessionId:p,workingDirectory:m,workingDirectoryConfig:le}=n,h=Ie(i),de=u.scope===`sub_agent`?`sub_agent`:`top_level`,fe=me(e,{context:u,parentMessageId:c,parentMessageType:`assistant`,runId:f,runScope:de,runtimeType:`hetero`}),g=Ce(e,{assistantMessageId:c,context:u,operationId:f,runtimeType:`hetero`}),_=async(t,n)=>{J(`failed`),e().internal_toggleToolCallingStreaming(N.currentAssistantId,void 0),e().completeOperation(f),n?.clearContent&&await D.updateMessage(N.currentAssistantId,{content:``},{agentId:u.agentId,topicId:u.topicId}).catch(console.error);let r=await D.updateMessageError(N.currentAssistantId,t,{agentId:u.agentId,groupId:u.groupId,threadId:u.threadId,topicId:u.topicId}).catch(console.error);r?.success&&r.messages?e().replaceMessages(r.messages,{context:u}):await e().refreshMessages().catch(console.error),e().internal_dispatchMessage({id:N.currentAssistantId,type:`updateMessage`,value:{...n?.clearContent?{content:``}:{},error:t}},{operationId:f})},v,y,b=!1,x,S=!1,C,w=e=>{let t={};return C&&(t.heteroSessionId=C),e&&(t.heteroMessageId=e),t},T=new Map,we=new Map,E=new Set,O=new Set,k=new Set,j=new Map,M=new Map,N=_e(c),P=new Map,F=new Map,I=new Map,L=new Map,R=(e,t)=>{I.set(e,{...I.get(e),...t})},z=Promise.resolve(),B=null,V=[],Le=()=>{let e=V;V=[];for(let t of e)t()},U=e=>B?Promise.resolve():new Promise(t=>{let n=!1,r=()=>{n||(n=!0,clearTimeout(i),V=V.filter(e=>e!==r),t())},i=setTimeout(r,e);V.push(r)}),W=null,Be=e=>W||(W=e().catch(e=>{console.error(`[HeterogeneousAgent] completion callback failed:`,e)}),W),Ge=async()=>{let e=W;e&&await e},Ke=!1,qe=!1,Je=()=>e().dbMessagesMap?.[d(u)]??e().messagesMap?.[d(u)]??[],Ye=e=>{if(e.type!==`stream_start`||e.data?.newStep)return;let t=e.data??{};t.assistantMessage?.id||(t.assistantMessage={agentId:u.agentId,id:N.currentAssistantId,model:t.model,provider:t.provider,role:`assistant`,topicId:u.topicId??void 0},e.data=t)},Xe=e=>{if(e.type!==`agent_runtime_end`)return;let t=e.data??{};if(Array.isArray(t.uiMessages))return;let n=Je();n.length!==0&&(e.data={...t,uiMessages:n})},Ze=e().operations?.[f]?.abortController?.signal,K=()=>!!Ze?.aborted,Qe=e().updateTopicMetadata,$e=e=>e?.workingDirectoryConfig??le??(m===void 0?void 0:{path:m}),et=()=>qe||!!N.accContent||!!N.accReasoning||N.toolState.payloads.length>0||T.size>0||N.subagents.runs.size>0,tt=async()=>{if(!u.topicId||!Qe)return;let t=Fe(e(),u.topicId);await Qe(u.topicId,{heteroSessionId:void 0,heteroSessionIdByWorkingDirectory:he(t,m),workingDirectory:m??``,workingDirectoryConfig:$e(t)})},nt,rt,q=Promise.resolve(),it=(t,n)=>{let r=u.topicId??void 0;return!r||!Qe||t===nt||t===rt?q:(rt=t,q=q.catch(()=>{}).then(async()=>{let n=Fe(e(),r);await Qe(r,{heteroSessionId:t,heteroSessionIdByWorkingDirectory:ge(n,m,t),workingDirectory:m??``,workingDirectoryConfig:$e(n)}),nt=t}).catch(e=>{console.error(`[HeterogeneousAgent] Failed to persist resume session id (${n}):`,e)}).finally(()=>{rt===t&&(rt=void 0)}),q)},J=t=>{u.topicId&&e().updateTopicStatus?.({agentId:u.agentId,groupId:u.groupId,status:t,topicId:u.topicId})},at=async(e,t)=>{if((await D.updateMessage(e,t,{agentId:u.agentId,topicId:u.topicId}))?.success===!1)throw Error(`messageService.updateMessage returned success=false for ${e}`)},Y={agentId:u.agentId,topicId:u.topicId},X=Te({batchMutate:D.batchMutate,createMessage:D.createMessage,updateMessage:D.updateMessage,updateToolMessage:D.updateToolMessage}),Z=Ee({createMessage:D.createMessage,flush:X.flush}),ot=(e,t,n,r)=>{if(!E.has(e))return;O.add(e);let i=T.get(e);if(!i){console.warn(`[HeterogeneousAgent] tool_result for unknown toolCallId:`,e);return}k.add(i),L.delete(i);let a={content:t,pluginError:n?{message:t}:void 0,pluginState:r};X.enqueueToolMessageUpdate(i,a,Y,e=>{console.error(`[HeterogeneousAgent] Failed to update tool message content:`,e),L.set(i,a)})},st=(t,n,r)=>
4{let i=ae.getDbMessageById(n)(e()),a=i?.metadata?.heterogeneousToolStateOperationId===f&&typeof i.metadata.heterogeneousToolStateSeq==`number`?i.metadata.heterogeneousToolStateSeq:0;if(!(r<=Math.max(a,we.get(t)??0)))return we.set(t,r),{heterogeneousToolStateOperationId:f,heterogeneousToolStateSeq:r}},ct=async t=>{let n=T.get(t.toolCallId);if(!n)return!1;await X.flush(`before-intervention-request`);try{await e().optimisticUpdateMessagePlugin(n,{intervention:{status:`pending`}},{operationId:f}),J(`waitingForHuman`),pe(e,u)}catch(e){console.error(`[HeterogeneousAgent] persist intervention pending failed:`,e)}return!0},lt=async t=>{let{cancelled:n,cancelReason:r,toolCallId:i}=t;if(!n||r===`user_cancelled`)return!0;let a=T.get(i);if(!a)return!1;await X.flush(`before-intervention-response`);try{await e().optimisticUpdateMessagePlugin(a,{intervention:{rejectedReason:r??`session_ended`,status:`rejected`}},{operationId:f}),J(`running`)}catch(e){console.error(`[HeterogeneousAgent] persist intervention rejection failed:`,e)}return!0},ut=async e=>{let t=j.get(e);t&&await ct(t)&&j.delete(e);let n=M.get(e);n&&await lt(n)&&M.delete(e)},dt=r=>S||!p||!Ne(r)||et()?!1:(S=!0,b=!0,x=(async()=>{await tt().catch(console.error),te?.info?.(t(`heteroAgent.resumeReset.resumeFailed`,{ns:`chat`})),await We(e,{...n,resumeSessionId:void 0})})(),!0),ft=()=>{let t=e().refreshThreads;typeof t==`function`&&t().catch(console.error)},pt=t=>{let n=e().startOperation({context:{...u,scope:`thread`,threadId:t},parentOperationId:f,type:`subagentThread`}),r={operationId:n.operationId};return{stream:{create(t){e().internal_dispatchMessage({id:t.id,type:`createMessage`,value:t},r)},replacePluginState(t,n,i){e().internal_dispatchMessage({id:t,metadata:i,type:`replaceMessagePluginState`,value:n},r)},update(t,n){e().internal_dispatchMessage({id:t,type:`updateMessage`,value:n},r)}},subOperationId:n.operationId}},Q=e=>{let t=P.get(e);if(t)return t;let n=pt(e);return P.set(e,n),n},mt=async()=>{if(u.topicId)try{let e=await ye.getThreads(u.topicId),t=[],n=[];for(let r of e){if(r.type!==a.Isolation)continue;let e=r.metadata?.sourceToolCallId;if(!e)continue;if(r.status!==l.Processing){n.push(e);continue}let i=await D.getMessages({threadId:r.id,topicId:u.topicId}),o=i.findLast(e=>e.role===`assistant`);if(!o)continue;let s=i.filter(e=>e.role===`tool`&&e.tool_call_id);for(let e of s)T.set(e.tool_call_id,e.id);let c=o.metadata?.subagentMessageId;t.push({currentAssistantId:o.id,currentSubagentMessageId:typeof c==`string`?c:void 0,lastChainParentId:o.id,lifetimeToolCallIds:s.map(e=>e.tool_call_id),parentToolCallId:e,threadId:r.id})}N={...N,subagents:ve(t,n)}}catch(e){console.error(`[HeterogeneousAgent] Failed to rehydrate client subagent runs:`,e)}},ht=t=>{e().completeOperation(t)},gt=async e=>{if(u.topicId)switch(e.kind===`createThread`&&await Z.ensureParentPersisted(e.sourceMessageId),e.kind===`createMessage`&&await Z.ensureParentPersisted(e.parentId),e.kind){case`createThread`:try{await ye.createThread({id:e.threadId,metadata:{operationId:f,sourceToolCallId:e.sourceToolCallId,startedAt:new Date().toISOString(),subagentType:e.subagentType},sourceMessageId:e.sourceMessageId,status:l.Processing,title:e.title,topicId:u.topicId,type:a.Isolation})}catch(e){throw console.error(`[HeterogeneousAgent] Failed to create subagent thread:`,e),e}ft(),P.set(e.threadId,pt(e.threadId));return;case`createMessage`:{let t=Q(e.threadId),n=w(e.subagentMessageId),r={agentId:e.agentId??void 0,content:e.content,id:e.messageId,...Object.keys(n).length>0?{metadata:n}:{},parentId:e.parentId,role:e.role,threadId:e.threadId,topicId:u.topicId};try{await G([{message:r,type:`createMessage`}])}catch(e){throw console.error(`[HeterogeneousAgent] Failed to create subagent message:`,e),e}t?.stream.create(r);return}case`streamContent`:{let t=Q(e.threadId),n={};e.content!==void 0&&(n.content=e.content),e.reasoning!==void 0&&(n.reasoning={content:e.reasoning}),t?.stream.update(e.messageId,n);return}
4case`persistContent`:{let t=Q(e.threadId),n={};if(e.content&&(n.content=e.content),e.reasoning&&(n.reasoning={content:e.reasoning}),Object.keys(n).length===0)return;try{await G([{id:e.messageId,type:`updateMessage`,value:n}]),F.delete(e.threadId),t?.stream.update(e.messageId,n)}catch(t){console.error(`[HeterogeneousAgent] Failed to flush subagent content:`,t),F.set(e.threadId,{content:e.content,messageId:e.messageId,reasoning:e.reasoning})}return}case`persistToolBatch`:{let t=Q(e.threadId),n=t=>{let n={tools:e.tools.map(e=>t?{...e.payload,result_msg_id:e.toolMessageId}:{...e.payload})};return e.content&&(n.content=e.content),e.reasoning&&(n.reasoning={content:e.reasoning}),n},r=[{id:e.assistantMessageId,type:`updateMessage`,value:n(!1)}],i=[];for(let t of e.tools){if(!t.isNew)continue;let n=w(e.subagentMessageId),a={agentId:u.agentId,content:``,id:t.toolMessageId,...Object.keys(n).length>0?{metadata:n}:{},parentId:e.assistantMessageId,plugin:{apiName:t.payload.apiName,arguments:t.payload.arguments,identifier:t.payload.identifier,type:t.payload.type},role:`tool`,threadId:e.threadId,tool_call_id:t.payload.id,topicId:u.topicId};r.push({message:a,type:`createMessage`}),i.push({message:a,operationIndex:r.length-1,toolCallId:t.payload.id})}r.push({id:e.assistantMessageId,type:`updateMessage`,value:n(!0)});let a=i;try{await G(r)}catch(e){if(console.error(`[HeterogeneousAgent] Failed to persist subagent tool batch:`,e),!(e instanceof Ue))return;let t=new Set(e.result.results?.filter(e=>e.success).map(e=>e.index)??[]);a=i.filter(({operationIndex:e})=>t.has(e))}for(let{message:e,toolCallId:n}of a)T.set(n,e.id),t?.stream.create(e),await ut(n);t?.stream.update(e.assistantMessageId,n(!0));return}case`resolveToolResult`:{let t=Q(e.threadId);O.add(e.toolCallId);let n=T.get(e.toolCallId);if(n){k.add(n),L.delete(n);let r={content:e.content,pluginError:e.isError?{message:e.content}:void 0,pluginState:e.pluginState};try{await G([{id:n,type:`updateToolMessage`,value:r}])}catch(e){console.error(`[HeterogeneousAgent] Failed to persist subagent tool result:`,e),L.set(n,r)}t?.stream.update(n,r)}return}case`updateToolState`:{if(O.has(e.toolCallId))return;let t=Q(e.threadId),n=T.get(e.toolCallId);if(!n){console.warn(`[HeterogeneousAgent] tool_state for unknown subagent toolCallId:`,e.toolCallId);return}let r=st(e.toolCallId,n,e.snapshotSeq);if(!r)return;let i={heterogeneousToolState:{operationId:f,snapshotSeq:e.snapshotSeq},pluginState:e.pluginState};try{await G([{id:n,type:`updateToolMessage`,value:i}])}catch(e){console.error(`[HeterogeneousAgent] Failed to persist subagent tool state:`,e),k.has(n)||L.set(n,{...L.get(n),...i})}t.stream.replacePluginState(n,e.pluginState,r);return}case`recordUsage`:{let t=Q(e.threadId),n={metadata:{...w(e.subagentMessageId),usage:e.usage},...e.model&&{model:e.model},...e.provider&&{provider:e.provider}};t?.stream.update(e.messageId,n);try{await D.updateMessage(e.messageId,n,{agentId:u.agentId,topicId:u.topicId})}catch(e){console.error(`[HeterogeneousAgent] Failed to record subagent usage:`,e)}return}case`finalizeThread`:{try{await ye.updateThread(e.threadId,{status:l.Active})}catch(e){console.error(`[HeterogeneousAgent] Failed to mark subagent thread complete:`,e)}let t=Q(e.threadId);t&&ht(t.subOperationId);return}}},_t=async t=>{switch(t.kind){case`createAssistant`:{let n={...w(t.mainMessageId)};t.signal&&(n.signal=t.signal);let r={agentId:t.agentId??u.agentId,content:``,id:t.messageId,...Object.keys(n).length>0?{metadata:n}:{},model:t.model,parentId:t.parentId,provider:t.provider,role:`assistant`,topicId:t.topicId??u.topicId??void 0};X.enqueueCreateMessage(r,e=>{console.error(`[HeterogeneousAgent] Failed to create step assistant:`,e),Z.add(t.messageId,r)}),e().internal_dispatchMessage({id:t.messageId,type:`createMessage`,value:r},{operationId:f}),e().associateMessageWithOperation(t.messageId,f);return}case`persistAssistant`:{let n={};if(t.content!==void 0&&(n.content=t.content),t.reasoning!==void 0&&(n.reasoning={content:t.reasoning}),t.model&&(n.model=t.model),t.provider&&(n.provider=t.provider),t.metadata&&(n.metadata=t.metadata),Object.keys(n).length===0)return;X.enqueueUpdateMessage(t.messageId,n,Y,e=>{console.error(`[HeterogeneousAgent] Failed to flush main assistant:`,e),R(t.messageId,n)});let r={};t.model&&(r.model=t.model),t.provider&&(r.provider=t.provider),Object.keys(r).length>0&&e().internal_dispatchMessage({id:t.messageId,type:`updateMessage`,value:r},{operationId:f});return}case`streamContent`:return;case`persistToolBatch`:{let n=e=>{let n={tools:t.tools.map(t=>e?{...t.payload,result_msg_id:t.toolMessageId}:{...t.payload})};return t.content&&(n.content=t.content),t.reasoning&&(n.reasoning={content:t.reasoning}),n},r=e=>{let n=w(N.currentMainMessageId);return{agentId:u.agentId,content:``,id:e.toolMessageId,...Object.keys(n).length>0?{metadata:n}:{},parentId:t.assistantMessageId,plugin:{apiName:e.payload.apiName,arguments:e.payload.arguments,identifier:e.payload.identifier,type:e.payload.type},role:`tool`,tool_call_id:e.payload.id,topicId:u.topicId??void 0}},i=n(!0);X.enqueueUpdateMessage(t.assistantMessageId,n(!1),Y,e=>{console.error(`[HeterogeneousAgent] Failed to pre-register main tools:`,e),R(t.assistantMessageId,i)});for(let n of t.tools){if(!n.isNew)continue;let t=r(n);X.enqueueCreateMessage(t,e=>{console.error(`[HeterogeneousAgent] Failed to create tool message:`,e),Z.add(n.toolMessageId,t)}),T.set(n.payload.id,n.toolMessageId),E.add(n.payload.id),e().internal_dispatchMessage({id:n.toolMessageId,type:`createMessage`,value:t},{operationId:f})}X.enqueueUpdateMessage(t.assistantMessageId,i,Y,e=>{console.error(`[HeterogeneousAgent] Failed to finalize main tools:`,e),R(t.assistantMessageId,i)}),e().internal_dispatchMessage({id:t.assistantMessageId,type:`updateMessage`,value:i},{operationId:f});for(let e of t.tools)e.isNew&&await ut(e.payload.id);return}case`resolveToolResult`:{ot(t.toolCallId,t.content,t.isError,t.pluginState);let n=T.get(t.toolCallId);if(n&&E.has(t.toolCallId)){let r={content:t.content};t.pluginState&&(r.pluginState=t.pluginState),t.isError&&(r.pluginError={message:t.content}),e().internal_dispatchMessage({id:n,type:`updateMessage`,value:r},{operationId:f})}return}case`updateToolState`:{if(!E.has(t.toolCallId)||O.has(t.toolCallId))return;let n=T.get(t.toolCallId);if(!n){console.warn(`[HeterogeneousAgent] tool_state for unknown main toolCallId:`,t.toolCallId);return}let r=st(t.toolCallId,n,t.snapshotSeq);if(!r)return;let i={heterogeneousToolState:{operationId:f,snapshotSeq:t.snapshotSeq},pluginState:t.pluginState};X.enqueueToolMessageUpdate(n,i,Y,e=>{console.error(`[HeterogeneousAgent] Failed to persist main tool state:`,e),k.has(n)||L.set(n,{...L.get(n),...i})}),e().internal_dispatchMessage({id:n,metadata:r,type:`replaceMessagePluginState`,value:t.pluginState},{operationId:f});return}case`recordUsage`:{let n={usage:t.usage,metadata:w(N.currentMainMessageId),...t.model&&{model:t.model},...t.provider&&{provider:t.provider}};X.enqueueUpdateMessage(t.messageId,n,Y,e=>{console.error(`[HeterogeneousAgent] Failed to record main usage:`,e),R(t.messageId,n)}),e().internal_dispatchMessage({id:t.messageId,type:`updateMessage`,value:n},{operationId:f});return}case`setError`:await _(H(t.errorData,h),{clearContent:t.clearContent});return}},$=async e=>{if(e.type===`stream_start`){let t=e.data?.sessionId;typeof t==`string`&&t.length>0&&(C=t,it(t,`stream_start`))}let t={agentId:u.agentId,newId:e=>e===`thread`?ke():`msg_${o(18)()}`,topicId:u.topicId??null},{intents:n,state:r}=Se(N,e,t);try{for(let e of n)`threadId`in e?await gt(e):await _t(e)}catch(e){console.error(`[HeterogeneousAgent] Intent failed, run state not advanced:`,e);return}N=r};await mt();try{if(v=(await A.startSession({agentType:h,args:r(i),command:i.command||Me(h),cwd:m,env:{...Oe({agentId:u.agentId,operationId:f,topicId:u.topicId}),...i.env},resumeSessionId:p,useClaudeCodeSdk:ue.enableClaudeCodeSdk(ee.getState())})).sessionId,!v)throw Error(`Agent session returned no sessionId`);J(`running`);let t=v;e().onOperationCancel?.(f,()=>{A.cancelSession(t).catch(()=>{})});let n=[];typeof window<`u`&&(window.__HETERO_AGENT_TRACE=n),y=ze(v,{onStreamEvent:t=>{if(K())return;if(n.push({event:t,timestamp:Date.now()}),t.type===`stream_retry`){e().updateOperationMetadata?.(f,{streamRetry:Re(t,h)});return}if(e().operations?.[f]?.metadata?.streamRetry&&e().updateOperationMetadata?.(f,{streamRetry:void 0}),t.type===`agent_intervention_request`){let e=t.data;z=z.then(async()=>{await ct(e)||(j.set(e.toolCallId,e),T.has(e.toolCallId)||console.warn(`[HeterogeneousAgent] deferred intervention_request for unknown toolCallId:`,e.toolCallId))});return}if(t.type===`agent_intervention_response`){let e=t.data;z=z.then(async()=>{await lt(e)||M.set(e.toolCallId,e)});return}if(t.type===`tool_start`){let e=t.data?.toolCallId;typeof e==`string`&&(z=z.then(()=>{O.delete(e)}))}if(t.type===`tool_result`){qe=!0,z=z.then(()=>$(t));return}if(t.type===`step_complete`&&t.data?.phase===`turn_metadata`){z=z.then(()=>$(t));return}if(t.type===`stream_start`&&t.data?.newStep){Ke=!0,z=z.then(()=>$(t)),z=z.then(()=>{t.data.assistantMessage={id:N.currentAssistantId},g(t),Ke=!1});return}if(t.type===`agent_runtime_end`||t.type===`error`){B=t,Le();return}if(t.type===`stream_chunk`&&t.data?.chunkType===`tool_state`){qe=!0,z=z.then(()=>$(t));return}if((t.type===`stream_chunk`||t.type===`stream_start`)&&(t.type===`stream_chunk`&&(qe=!0),z=z.then(()=>$(t))),t.data?.subagent)return;Ye(t);let r=t.type===`tool_end`||t.type===`step_complete`&&t.data?.phase===`execution_complete`,i=r||t.type===`stream_chunk`&&t.data?.toolMessageIds!==void 0;Ke||i?z=z.then(async()=>{r?Ae(t):i&&await X.flush(`before-fetch-replace`),g(t)}):g(t)},onComplete:()=>{Be(async()=>
4{if(b)return;b=!0,!K()&&!B&&await U(Ve);let t=B?.type===`error`;{let n=B?.data?.reason;t?J(`failed`):!K()&&be(n)?e().activeTopicId===u.topicId?J(`active`):e().markTopicUnread?.({agentId:u.agentId,groupId:u.groupId,topicId:u.topicId}):J(`active`)}let n=B??{data:{},operationId:f,stepIndex:0,timestamp:Date.now(),type:`agent_runtime_end`},r=``;z=z.then(async()=>{r=N.accContent,await $(n),await X.flush(`terminal`)});let i=await He(z,`terminal`);if(i){await Z.drain();for(let[e,t]of I)try{await at(e,t),I.delete(e)}catch(e){console.error(`[HeterogeneousAgent] Failed to replay main assistant flush:`,e)}for(let[e,t]of L)try{if((await D.updateToolMessage(e,t,{agentId:u.agentId,topicId:u.topicId}))?.success===!1)throw Error(`updateToolMessage returned success=false for ${e}`);L.delete(e)}catch(e){console.error(`[HeterogeneousAgent] Failed to replay tool flush:`,e)}for(let[e,t]of F){let n={};if(t.content&&(n.content=t.content),t.reasoning&&(n.reasoning={content:t.reasoning}),Object.keys(n).length!==0)try{await D.updateMessage(t.messageId,n,{agentId:u.agentId,topicId:u.topicId}),P.get(e)?.stream.update(t.messageId,n)}catch(e){console.error(`[HeterogeneousAgent] Failed to replay subagent flush:`,e)}}F.clear()}t||(Xe(n),g(n),i||e().completeOperation(f)),!K()&&!t&&await fe.afterRunComplete({context:u,notification:{content:r},operationId:f,runId:f,runScope:de,runtimeType:`hetero`})})},onError:e=>{Be(async()=>{if(b||dt(e))return;b=!0,J(K()?`active`:`failed`);let t=(B?.type===`error`?H(B.data,h):void 0)||H(e,h),n=!1;if(z=z.then(async()=>{n=je(N.accContent,t),N.accContent&&!n&&X.enqueueUpdateMessage(N.currentAssistantId,{content:N.accContent},Y,console.error),await X.flush(`error`)}),await He(z,`error`),K()){J(`active`);return}await _(t,{clearContent:n})})}});let a=Pe({agentSystemContext:i.systemContext,contextSelections:s,pageSelections:ce,workingDirectory:m}),o=p?De(e().dbMessagesMap?.[d(u)]??e().messagesMap?.[d(u)],ie):void 0;await A.sendPrompt({agentId:u.agentId,imageList:ne,operationId:f,prompt:ie,...o?.length?{resumeReplayMessages:o}:{},sessionId:v,systemContext:a||void 0,topicId:u.topicId??void 0}),await Ge();let c=await A.getSessionInfo(v).catch(()=>void 0);c?.agentSessionId&&u.topicId&&await it(c.agentSessionId,`success-path`);let l=B;if(!K()&&l?.type!==`error`){let t=d(u),n=e().drainQueuedMessages?.(t)??[];if(n.length>0){e().completeOperation(f);let t=e().operations?.[f];t?.context.agentId&&e().markTopicUnread?.({agentId:t.context.agentId,groupId:t.context.groupId,topicId:t.context.topicId});let r=re(n),i=r.filesPreview.length>0?oe(r.filesPreview):r.files.length>0?r.files.map(e=>({id:e})):void 0;setTimeout(()=>{xe.getState().sendMessage({context:{...u},editorData:r.editorData,files:i,...r.forceRuntime?{forceRuntime:r.forceRuntime}:{},message:r.content,metadata:r.metadata}).catch(e=>{console.error(`[heterogeneousAgentExecutor] sendMessage for queued content failed:`,e)})},100)}}}catch(e){if(!b){if(dt(e)){await x;return}if(b=!0,K()){J(`active`);return}let t=H(e,h);await _(t,{clearContent:je(N.accContent,t)})}}finally{if(await Ge(),y?.(),!S&&u.topicId)try{se.getTopicById(u.topicId)(e())?.status===`running`&&(J(B?.type===`error`?`failed`:`active`),e().completeOperation(f))}catch(e){console.error(`[HeterogeneousAgent] status reconcile backstop failed:`,e)}}x&&await x}}))();export{We as executeHeterogeneousAgent};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.