@vibetonomy/agent 1.6.0 → 1.6.2

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.
@@ -1,8 +1,8 @@
1
- import{createInterface as lt}from"node:readline";import{readdir as Te,readFile as be,rm as ot,stat as st}from"node:fs/promises";import{join as L,basename as wt,resolve as we}from"node:path";import{homedir as nt}from"node:os";function ye(t,e,a){if(e.session_id&&typeof e.session_id=="string"&&e.session_id!==t.cliSessionId&&(t.cliSessionId=e.session_id,a({type:"session_id",cliSessionId:t.cliSessionId,...t.relaySessionId?{relaySessionId:t.relaySessionId}:{},...t.sessionName?{sessionName:t.sessionName}:{}})),e.uuid&&typeof e.uuid=="string"&&(e.type==="user"&&!e.parent_tool_use_id?a({type:"message_uuid",uuid:e.uuid,messageType:"user"}):e.type==="assistant"&&a({type:"message_uuid",uuid:e.uuid,messageType:"assistant"})),e.type==="system"&&e.subtype==="init"){e.slash_commands&&Array.isArray(e.slash_commands)&&a({type:"slash_commands",commands:e.slash_commands}),e.model&&typeof e.model=="string"&&a({type:"model_info",model:e.model,models:[]}),e.fast_mode_state&&typeof e.fast_mode_state=="string"&&a({type:"fast_mode_state",state:e.fast_mode_state});return}if(e.type==="stream_event"&&e.event){De(t,e.event,a);return}if((e.type==="assistant"||e.type==="user")&&e.message&&typeof e.message=="object"){let o=e.message.content;if(e.parent_tool_use_id&&typeof e.parent_tool_use_id=="string"){Ue(t,e,a);return}if(e.type==="assistant"&&!t.streamedText&&Array.isArray(o)){let c=o.filter(l=>l.type==="text").map(l=>l.text).join("");c&&a({type:"delta",text:c})}if(e.type==="user"){let c="";if(typeof o=="string"?c=o:Array.isArray(o)&&(c=o.filter(l=>l.type==="text").map(l=>l.text).join(`
2
- `)),c.indexOf("local-command-stdout")!==-1){let l=c.match(/<local-command-stdout>([\s\S]*?)<\/local-command-stdout>/);l&&a({type:"slash_command_result",text:l[1].trim()})}}if(Array.isArray(o)){for(let c of o)if(c.type==="tool_result"&&typeof c.tool_use_id=="string"&&!t.sentToolResults[c.tool_use_id]){t.activeTaskToolIds[c.tool_use_id]&&(a({type:"subagent_done",parentToolId:c.tool_use_id}),delete t.activeTaskToolIds[c.tool_use_id]);let l=t.teammateMap[c.tool_use_id];l&&(a({type:"teammate_status",parentToolId:c.tool_use_id,teammateName:l,status:c.is_error?"error":"idle"}),delete t.teammateMap[c.tool_use_id]);let g="";typeof c.content=="string"?g=c.content:Array.isArray(c.content)&&(g=c.content.filter(u=>u.type==="text").map(u=>u.text).join(`
3
- `)),t.sentToolResults[c.tool_use_id]=!0,a({type:"tool_result",id:c.tool_use_id,content:g,is_error:c.is_error||!1})}}return}if(e.type==="result"){t.blocks={},t.sentToolResults={},t.activeTaskToolIds={},t.taskIdMap={},t.teammateMap={},t.isProcessing=!1,a({type:"result",cost:e.total_cost_usd??null,duration:e.duration_ms??null,usage:e.usage??null,modelUsage:e.modelUsage??null,sessionId:e.session_id}),e.fast_mode_state&&typeof e.fast_mode_state=="string"&&a({type:"fast_mode_state",state:e.fast_mode_state}),a({type:"done",code:0}),t.responsePreview="",t.streamedText=!1;return}if(e.type==="system"&&e.subtype==="status"){e.status==="compacting"?(a({type:"compacting",active:!0}),t.compacting=!0):t.compacting&&(a({type:"compacting",active:!1}),t.compacting=!1);return}if(e.type==="system"&&e.subtype==="task_started"){let n=e.tool_use_id;n&&(e.task_id&&(t.taskIdMap[n]=e.task_id),a({type:"task_started",parentToolId:n,taskId:e.task_id||"",description:e.description||""}));return}if(e.type==="system"&&e.subtype==="task_progress"){let n=e.tool_use_id||void 0,o=e.task_id,c=n||(o?Object.keys(t.taskIdMap).find(l=>t.taskIdMap[l]===o):void 0);if(c){a({type:"task_progress",parentToolId:c,taskId:o,usage:e.usage??null,lastToolName:e.last_tool_name||void 0,description:e.description||""});let l=t.teammateMap[c];if(l){let g=e.description||(e.last_tool_name?`Running ${e.last_tool_name}...`:void 0);a({type:"teammate_status",parentToolId:c,teammateName:l,status:"active",activityText:g})}}return}if(e.type==="tool_progress"){let n=e.parent_tool_use_id;if(n){a({type:"subagent_activity",parentToolId:n,text:e.content||""});let o=t.teammateMap[n];o&&a({type:"teammate_status",parentToolId:n,teammateName:o,status:"active",activityText:e.content||void 0})}return}if(e.type==="system"&&e.subtype==="task_notification"){let n=e.tool_use_id||void 0,o=e.task_id,c=n||(o?Object.keys(t.taskIdMap).find(l=>t.taskIdMap[l]===o):void 0);if(c){a({type:"subagent_done",parentToolId:c,status:e.status||"completed",summary:e.summary||"",usage:e.usage??null});let l=t.teammateMap[c];if(l){let g=e.status==="error"||e.status==="failed";a({type:"teammate_status",parentToolId:c,teammateName:l,status:g?"error":"idle",activityText:e.summary||void 0}),delete t.teammateMap[c]}}if(o){for(let l of Object.keys(t.taskIdMap))if(t.taskIdMap[l]===o){delete t.taskIdMap[l];break}}return}if(e.type==="rate_limit_event"&&e.rate_limit_info){let n=e.rate_limit_info;(n.status==="allowed_warning"||n.status==="rejected")&&a({type:"rate_limit",status:n.status,resetsAt:n.resetsAt?n.resetsAt*1e3:null,rateLimitType:n.rateLimitType||null,utilization:n.utilization||null});return}if(e.type==="prompt_suggestion"){a({type:"prompt_suggestion",suggestion:e.suggestion||""});return}}function De(t,e,a){if(e.type==="content_block_start"){let n=e.content_block,o=e.index;n.type==="tool_use"?(t.blocks[o]={type:"tool_use",id:n.id,name:n.name,inputJson:""},a({type:"tool_start",id:n.id,name:n.name})):n.type==="thinking"?(t.blocks[o]={type:"thinking",thinkingText:"",startTime:Date.now()},a({type:"thinking_start"})):n.type==="text"&&(t.blocks[o]={type:"text"});return}if(e.type==="content_block_delta"&&e.delta){let n=e.index,o=e.delta;if(o.type==="text_delta"&&typeof o.text=="string"){if(t.streamedText=!0,t.responsePreview.length<200&&(t.responsePreview+=o.text),a({type:"delta",text:o.text}),t.teamActive){let c=o.text.matchAll(/teammate_id="([^"]+)"/g);for(let l of c){let g=l[1];(o.text.includes("idle_notification")||o.text.includes('"idleReason"'))&&a({type:"teammate_status",parentToolId:"",teammateName:g,status:"idle",activityText:"Idle"})}}}else o.type==="input_json_delta"&&t.blocks[n]?t.blocks[n].inputJson=(t.blocks[n].inputJson||"")+o.partial_json:o.type==="thinking_delta"&&t.blocks[n]&&(t.blocks[n].thinkingText=(t.blocks[n].thinkingText||"")+o.thinking,a({type:"thinking_delta",text:o.thinking}));return}if(e.type==="content_block_stop"){let n=e.index,o=t.blocks[n];if(o&&o.type==="tool_use"){let c={};try{c=JSON.parse(o.inputJson||"{}")}catch{}a({type:"tool_executing",id:o.id,name:o.name,input:c});let l=o.name;if((l==="Task"||l==="Agent"||l==="TeammateTool")&&(t.activeTaskToolIds[o.id]=!0,t.teamActive)){let g=c;if(g){let u=g.teammate_name||g.name||g.subagent_type,f=g.team_name||void 0;u&&(t.teammateMap[o.id]=u,a({type:"teammate_spawned",parentToolId:o.id,teammateName:u,teamName:f,description:g.description||g.prompt||""}))}}if(t.teamActive&&l==="SendMessage"){let g=c;if(g){let u=g.to;u&&u!=="*"&&a({type:"teammate_status",parentToolId:o.id,teammateName:u,status:"active",activityText:"Processing message\u2026"})}}}else if(o&&o.type==="thinking"){let c=o.startTime?(Date.now()-o.startTime)/1e3:0;a({type:"thinking_stop",duration:c})}delete t.blocks[n];return}}function Ue(t,e,a){let n=e.parent_tool_use_id,c=e.message.content;if(Array.isArray(c)&&e.type==="assistant")for(let l of c)if(l.type==="tool_use"){let g=je(l.name,l.input);a({type:"subagent_tool",parentToolId:n,toolName:l.name,toolId:l.id,text:g})}else l.type==="thinking"?a({type:"subagent_activity",parentToolId:n,text:"Thinking..."}):l.type==="text"&&l.text&&a({type:"subagent_activity",parentToolId:n,text:"Writing response..."})}function je(t,e){return t==="Bash"&&e?.description?e.description:t==="Read"&&e?.file_path?"Reading "+e.file_path.split("/").pop():t==="Edit"&&e?.file_path?"Editing "+e.file_path.split("/").pop():t==="Write"&&e?.file_path?"Writing "+e.file_path.split("/").pop():t==="Grep"&&e?.pattern?"Searching for "+e.pattern:t==="Glob"&&e?.pattern?"Finding "+e.pattern:t==="WebSearch"&&e?.query?"Searching: "+e.query:t==="WebFetch"?"Fetching URL...":t==="Task"&&e?.description?e.description:"Running "+t+"..."}function B(){let t=[],e=null,a=!1;return{push(n){if(!a)if(e){let o=e;e=null,o({value:n,done:!1})}else t.push(n)},end(){if(a=!0,e){let n=e;e=null,n({value:void 0,done:!0})}},[Symbol.asyncIterator](){return{next(){return t.length>0?Promise.resolve({value:t.shift(),done:!1}):a?Promise.resolve({value:void 0,done:!0}):new Promise(n=>{e=n})}}}}}import{randomUUID as Le}from"node:crypto";function ge(t,e){let a={},n={},o={},c=u=>{let f=e?.();return f?{...u,relaySessionId:f}:u},l=(u,f)=>u(c(f)),g=u=>l(t,u);return{handleCanUseTool(u,f,w){return u==="AskUserQuestion"?new Promise(_=>{n[w.toolUseID]={resolve:_,input:f},w.signal&&w.signal.addEventListener("abort",()=>{delete n[w.toolUseID],g({type:"ask_user_answered",toolId:w.toolUseID}),_({behavior:"deny",message:"Cancelled"})})}):o[u]?Promise.resolve({behavior:"allow",updatedInput:f}):new Promise(_=>{let A=Le();a[A]={resolve:_,requestId:A,toolName:u,toolInput:f,toolUseId:w.toolUseID},g({type:"permission_request",requestId:A,toolName:u,toolInput:f,toolUseId:w.toolUseID,decisionReason:w.decisionReason||""}),w.signal&&w.signal.addEventListener("abort",()=>{delete a[A],g({type:"permission_cancel",requestId:A}),_({behavior:"deny",message:"Request cancelled"})})})},handlePermissionResponse(u,f,w){let _=a[u];if(!_&&u.startsWith("hydrated-")){let A=u.slice(9),R=Object.keys(a).find(P=>a[P].toolUseId===A);R&&(_=a[R])}_&&(delete a[_.requestId],g({type:"permission_resolved",requestId:_.requestId,decision:f}),u!==_.requestId&&g({type:"permission_resolved",requestId:u,decision:f}),f==="allow"?(w&&(o[_.toolName]=!0),_.resolve({behavior:"allow",updatedInput:_.toolInput})):_.resolve({behavior:"deny",message:"User denied"}))},handleAskUserResponse(u,f){let w=n[u];if(!w)return;delete n[u],g({type:"ask_user_answered",toolId:u});let _=Object.assign({},w.input,{answers:f});w.resolve({behavior:"allow",updatedInput:_})},clearPending(u){for(let f of Object.keys(n))l(u,{type:"ask_user_answered",toolId:f}),n[f].resolve({behavior:"deny",message:"Session ended"}),delete n[f];for(let f of Object.keys(a))l(u,{type:"permission_cancel",requestId:f}),a[f].resolve({behavior:"deny",message:"Session ended"}),delete a[f]}}}function Z(){return{cliSessionId:null,resumeToken:null,relaySessionId:null,sessionName:null,blocks:{},sentToolResults:{},streamedText:!1,responsePreview:"",activeTaskToolIds:{},taskIdMap:{},teammateMap:{},teamActive:!1,isProcessing:!1,compacting:!1}}var qe=["connected","failed","needs-auth","pending","disabled"],Fe=["project","user","local","claudeai","managed"];function O(t){return typeof t=="string"&&t.length>0?t:void 0}function ze(t){return qe.includes(t)?t:"pending"}function We(t){return Fe.includes(t)?t:void 0}function he(t){return t==="default"||t==="auto"?t:null}function He(t){if(!t||typeof t!="object")return;let e=t,a={};return typeof e.readOnly=="boolean"&&(a.readOnly=e.readOnly),typeof e.destructive=="boolean"&&(a.destructive=e.destructive),typeof e.openWorld=="boolean"&&(a.openWorld=e.openWorld),Object.keys(a).length>0?a:void 0}function Ge(t){if(!Array.isArray(t))return;let e=[];for(let a of t){if(!a||typeof a!="object")continue;let n=a,o=O(n.name);if(!o)continue;let c=O(n.description),l=He(n.annotations);e.push({name:o,...c?{description:c}:{},...l?{annotations:l}:{}})}return e}function Je(t){if(!t||typeof t!="object")return;let e=t,a={},n=O(e.type),o=O(e.url),c=O(e.command);return n&&(a.type=n),o&&(a.url=o),c&&(a.command=c),Object.keys(a).length>0?a:void 0}function Be(t){if(!t||typeof t!="object")return;let e=t,a=O(e.name);if(a)return{name:a,version:O(e.version)??""}}function ee(t,e=new Map){if(!Array.isArray(t))return[];let a=[];for(let n of t){if(!n||typeof n!="object")continue;let o=n,c=O(o.name);if(!c)continue;let l=O(o.error),g=Je(o.config),u=We(o.scope),f=Ge(o.tools),w=Be(o.serverInfo),_=e.get(c)??null;a.push({name:c,status:ze(o.status),...w?{serverInfo:w}:{},...l?{error:l}:{},...g?{config:g}:{},...u?{scope:u}:{},...f?{tools:f}:{},..._?{permissionMode:_}:{}})}return a.sort((n,o)=>n.name.localeCompare(o.name)),a}import{spawn as Ke}from"node:child_process";var Ye=3e4,Qe=10*6e4,Ve="Finish authorizing in your browser. This connector is picked up when the session restarts \u2014 use Check again once you are done.",Xe="`claude mcp login --no-browser` produced no authorization URL \u2014 the CLI may be too old or the server may not support OAuth",_e=/\[[0-9;]*[a-zA-Z]/g,Ze=/https?:\/\/[^\s"'<>`\u0000-\u001f\u007f]+/,et=/error|invalid|denied|mismatch|unauthor|forbidden|refus|fail|expired/i;function tt(t){let a=t.replace(_e,"").match(Ze);return a?a[0].replace(/[.,;:)\]}]+$/,""):null}function Se(t){let{send:e,spawnFn:a=(p,k)=>Ke(p,k,{env:{...process.env,NO_COLOR:"1",FORCE_COLOR:"0"}}),cliPath:n="claude",urlTimeoutMs:o=Ye,totalTimeoutMs:c=Qe,verify:l}=t,g=new Map;function u(p,k,S,M){let T=g.get(p);!T||T.settled||(T.settled=!0,T.urlTimer&&clearTimeout(T.urlTimer),T.totalTimer&&clearTimeout(T.totalTimer),g.delete(p),e({type:"mcp_auth_result",name:p,ok:k,...S?{error:S}:{},...M?.serverStatus?{serverStatus:M.serverStatus}:{},...M?.browserOnly?{browserOnly:!0}:{}}))}function f(p){try{p.child.kill("SIGTERM")}catch{}}function w(p,k){let S=g.get(p);if(!S||S.urlSent)return;let M=tt(String(k));M&&(S.urlSent=!0,S.urlTimer&&clearTimeout(S.urlTimer),e({type:"mcp_auth_url",name:p,url:M}))}function _(p){R(p);let k;try{k=a(n,["mcp","login",p,"--no-browser"])}catch(M){e({type:"mcp_auth_result",name:p,ok:!1,error:`failed to launch \`${n} mcp login\`: ${M.message}`});return}let S={child:k,urlSent:!1,settled:!1,redirectSubmitted:!1,stderrTail:"",diagnosis:""};g.set(p,S),k.stdout?.on("data",M=>w(p,M)),k.stderr?.on("data",M=>{let T=String(M).replace(_e,"");if(S.stderrTail=(S.stderrTail+T).slice(-500),!S.diagnosis){let j=T.split(`
4
- `).map(v=>v.trim()).find(v=>et.test(v));j&&(S.diagnosis=j.slice(0,300))}w(p,M)}),k.on("error",M=>{u(p,!1,`\`${n} mcp login\` failed to start: ${M.message}`)}),k.on("close",M=>{if(M!==0){let T=S.diagnosis||S.stderrTail.trim()||`exit code ${M??"unknown"}`;u(p,!1,`\`${n} mcp login ${p}\` failed: ${T}`);return}if(!S.redirectSubmitted){u(p,!1,Ve,{browserOnly:!0});return}(async()=>{let T=null;try{T=await l?.(p)??null}catch{}if(T==="connected"){u(p,!0,void 0,{serverStatus:T});return}u(p,!1,T?`Authorization did not complete \u2014 ${p} still reports "${T}".`:`Authorization could not be confirmed for ${p}.`,{...T?{serverStatus:T}:{}})})()}),S.urlTimer=setTimeout(()=>{f(S),u(p,!1,Xe)},o),S.totalTimer=setTimeout(()=>{f(S),u(p,!1,"authorization timed out waiting for the redirect URL")},c)}function A(p,k){let S=g.get(p);if(!S){e({type:"mcp_auth_result",name:p,ok:!1,error:"no authorization is in progress for this server \u2014 start it again"});return}let M=k.trim();if(!M){e({type:"mcp_auth_result",name:p,ok:!1,error:"the pasted redirect URL was empty"});return}try{S.child.stdin?.write(M+`
5
- `),S.redirectSubmitted=!0}catch(T){u(p,!1,`could not hand the redirect URL to the CLI: ${T.message}`)}}function R(p){let k=g.get(p);k&&(k.settled=!0,k.urlTimer&&clearTimeout(k.urlTimer),k.totalTimer&&clearTimeout(k.totalTimer),g.delete(p),f(k))}function P(){for(let p of[...g.keys()])R(p)}return{start:_,submitRedirect:A,cancel:R,cancelAll:P}}var rt=`## Sending a file to the user
1
+ import{createInterface as zt}from"node:readline";import{readdir as He,readFile as Be,rm as Ut,stat as Dt}from"node:fs/promises";import{join as G,basename as tn,resolve as ze}from"node:path";import{homedir as Lt}from"node:os";function Ce(t,e,o){if(e.session_id&&typeof e.session_id=="string"&&e.session_id!==t.cliSessionId&&(t.cliSessionId=e.session_id,o({type:"session_id",cliSessionId:t.cliSessionId,...t.relaySessionId?{relaySessionId:t.relaySessionId}:{},...t.sessionName?{sessionName:t.sessionName}:{}})),e.uuid&&typeof e.uuid=="string"&&(e.type==="user"&&!e.parent_tool_use_id?o({type:"message_uuid",uuid:e.uuid,messageType:"user"}):e.type==="assistant"&&o({type:"message_uuid",uuid:e.uuid,messageType:"assistant"})),e.type==="system"&&e.subtype==="init"){e.slash_commands&&Array.isArray(e.slash_commands)&&o({type:"slash_commands",commands:e.slash_commands}),e.model&&typeof e.model=="string"&&o({type:"model_info",model:e.model,models:[]}),e.fast_mode_state&&typeof e.fast_mode_state=="string"&&o({type:"fast_mode_state",state:e.fast_mode_state});return}if(e.type==="stream_event"&&e.event){ut(t,e.event,o);return}if((e.type==="assistant"||e.type==="user")&&e.message&&typeof e.message=="object"){let a=e.message.content;if(e.parent_tool_use_id&&typeof e.parent_tool_use_id=="string"){dt(t,e,o);return}if(e.type==="assistant"&&!t.streamedText&&Array.isArray(a)){let i=a.filter(c=>c.type==="text").map(c=>c.text).join("");i&&o({type:"delta",text:i})}if(e.type==="user"){let i="";if(typeof a=="string"?i=a:Array.isArray(a)&&(i=a.filter(c=>c.type==="text").map(c=>c.text).join(`
2
+ `)),i.indexOf("local-command-stdout")!==-1){let c=i.match(/<local-command-stdout>([\s\S]*?)<\/local-command-stdout>/);c&&o({type:"slash_command_result",text:c[1].trim()})}}if(Array.isArray(a)){for(let i of a)if(i.type==="tool_result"&&typeof i.tool_use_id=="string"&&!t.sentToolResults[i.tool_use_id]){t.activeTaskToolIds[i.tool_use_id]&&(o({type:"subagent_done",parentToolId:i.tool_use_id}),delete t.activeTaskToolIds[i.tool_use_id]);let c=t.teammateMap[i.tool_use_id];c&&(o({type:"teammate_status",parentToolId:i.tool_use_id,teammateName:c,status:i.is_error?"error":"idle"}),delete t.teammateMap[i.tool_use_id]);let p="";typeof i.content=="string"?p=i.content:Array.isArray(i.content)&&(p=i.content.filter(d=>d.type==="text").map(d=>d.text).join(`
3
+ `)),t.sentToolResults[i.tool_use_id]=!0,o({type:"tool_result",id:i.tool_use_id,content:p,is_error:i.is_error||!1})}}return}if(e.type==="result"){t.blocks={},t.sentToolResults={},t.activeTaskToolIds={},t.taskIdMap={},t.teammateMap={},t.isProcessing=!1,o({type:"result",cost:e.total_cost_usd??null,duration:e.duration_ms??null,usage:e.usage??null,modelUsage:e.modelUsage??null,sessionId:e.session_id}),e.fast_mode_state&&typeof e.fast_mode_state=="string"&&o({type:"fast_mode_state",state:e.fast_mode_state}),o({type:"done",code:0}),t.responsePreview="",t.streamedText=!1;return}if(e.type==="system"&&e.subtype==="status"){e.status==="compacting"?(o({type:"compacting",active:!0}),t.compacting=!0):t.compacting&&(o({type:"compacting",active:!1}),t.compacting=!1);return}if(e.type==="system"&&e.subtype==="task_started"){let s=e.tool_use_id;s&&(e.task_id&&(t.taskIdMap[s]=e.task_id),o({type:"task_started",parentToolId:s,taskId:e.task_id||"",description:e.description||""}));return}if(e.type==="system"&&e.subtype==="task_progress"){let s=e.tool_use_id||void 0,a=e.task_id,i=s||(a?Object.keys(t.taskIdMap).find(c=>t.taskIdMap[c]===a):void 0);if(i){o({type:"task_progress",parentToolId:i,taskId:a,usage:e.usage??null,lastToolName:e.last_tool_name||void 0,description:e.description||""});let c=t.teammateMap[i];if(c){let p=e.description||(e.last_tool_name?`Running ${e.last_tool_name}...`:void 0);o({type:"teammate_status",parentToolId:i,teammateName:c,status:"active",activityText:p})}}return}if(e.type==="tool_progress"){let s=e.parent_tool_use_id;if(s){o({type:"subagent_activity",parentToolId:s,text:e.content||""});let a=t.teammateMap[s];a&&o({type:"teammate_status",parentToolId:s,teammateName:a,status:"active",activityText:e.content||void 0})}return}if(e.type==="system"&&e.subtype==="task_notification"){let s=e.tool_use_id||void 0,a=e.task_id,i=s||(a?Object.keys(t.taskIdMap).find(c=>t.taskIdMap[c]===a):void 0);if(i){o({type:"subagent_done",parentToolId:i,status:e.status||"completed",summary:e.summary||"",usage:e.usage??null});let c=t.teammateMap[i];if(c){let p=e.status==="error"||e.status==="failed";o({type:"teammate_status",parentToolId:i,teammateName:c,status:p?"error":"idle",activityText:e.summary||void 0}),delete t.teammateMap[i]}}if(a){for(let c of Object.keys(t.taskIdMap))if(t.taskIdMap[c]===a){delete t.taskIdMap[c];break}}return}if(e.type==="rate_limit_event"&&e.rate_limit_info){let s=e.rate_limit_info;(s.status==="allowed_warning"||s.status==="rejected")&&o({type:"rate_limit",status:s.status,resetsAt:s.resetsAt?s.resetsAt*1e3:null,rateLimitType:s.rateLimitType||null,utilization:s.utilization||null});return}if(e.type==="prompt_suggestion"){o({type:"prompt_suggestion",suggestion:e.suggestion||""});return}}function ut(t,e,o){if(e.type==="content_block_start"){let s=e.content_block,a=e.index;s.type==="tool_use"?(t.blocks[a]={type:"tool_use",id:s.id,name:s.name,inputJson:""},o({type:"tool_start",id:s.id,name:s.name})):s.type==="thinking"?(t.blocks[a]={type:"thinking",thinkingText:"",startTime:Date.now()},o({type:"thinking_start"})):s.type==="text"&&(t.blocks[a]={type:"text"});return}if(e.type==="content_block_delta"&&e.delta){let s=e.index,a=e.delta;if(a.type==="text_delta"&&typeof a.text=="string"){if(t.streamedText=!0,t.responsePreview.length<200&&(t.responsePreview+=a.text),o({type:"delta",text:a.text}),t.teamActive){let i=a.text.matchAll(/teammate_id="([^"]+)"/g);for(let c of i){let p=c[1];(a.text.includes("idle_notification")||a.text.includes('"idleReason"'))&&o({type:"teammate_status",parentToolId:"",teammateName:p,status:"idle",activityText:"Idle"})}}}else a.type==="input_json_delta"&&t.blocks[s]?t.blocks[s].inputJson=(t.blocks[s].inputJson||"")+a.partial_json:a.type==="thinking_delta"&&t.blocks[s]&&(t.blocks[s].thinkingText=(t.blocks[s].thinkingText||"")+a.thinking,o({type:"thinking_delta",text:a.thinking}));return}if(e.type==="content_block_stop"){let s=e.index,a=t.blocks[s];if(a&&a.type==="tool_use"){let i={};try{i=JSON.parse(a.inputJson||"{}")}catch{}o({type:"tool_executing",id:a.id,name:a.name,input:i});let c=a.name;if((c==="Task"||c==="Agent"||c==="TeammateTool")&&(t.activeTaskToolIds[a.id]=!0,t.teamActive)){let p=i;if(p){let d=p.teammate_name||p.name||p.subagent_type,m=p.team_name||void 0;d&&(t.teammateMap[a.id]=d,o({type:"teammate_spawned",parentToolId:a.id,teammateName:d,teamName:m,description:p.description||p.prompt||""}))}}if(t.teamActive&&c==="SendMessage"){let p=i;if(p){let d=p.to;d&&d!=="*"&&o({type:"teammate_status",parentToolId:a.id,teammateName:d,status:"active",activityText:"Processing message\u2026"})}}}else if(a&&a.type==="thinking"){let i=a.startTime?(Date.now()-a.startTime)/1e3:0;o({type:"thinking_stop",duration:i})}delete t.blocks[s];return}}function dt(t,e,o){let s=e.parent_tool_use_id,i=e.message.content;if(Array.isArray(i)&&e.type==="assistant")for(let c of i)if(c.type==="tool_use"){let p=mt(c.name,c.input);o({type:"subagent_tool",parentToolId:s,toolName:c.name,toolId:c.id,text:p})}else c.type==="thinking"?o({type:"subagent_activity",parentToolId:s,text:"Thinking..."}):c.type==="text"&&c.text&&o({type:"subagent_activity",parentToolId:s,text:"Writing response..."})}function mt(t,e){return t==="Bash"&&e?.description?e.description:t==="Read"&&e?.file_path?"Reading "+e.file_path.split("/").pop():t==="Edit"&&e?.file_path?"Editing "+e.file_path.split("/").pop():t==="Write"&&e?.file_path?"Writing "+e.file_path.split("/").pop():t==="Grep"&&e?.pattern?"Searching for "+e.pattern:t==="Glob"&&e?.pattern?"Finding "+e.pattern:t==="WebSearch"&&e?.query?"Searching: "+e.query:t==="WebFetch"?"Fetching URL...":t==="Task"&&e?.description?e.description:"Running "+t+"..."}function Z(){let t=[],e=null,o=!1;return{push(s){if(!o)if(e){let a=e;e=null,a({value:s,done:!1})}else t.push(s)},end(){if(o=!0,e){let s=e;e=null,s({value:void 0,done:!0})}},[Symbol.asyncIterator](){return{next(){return t.length>0?Promise.resolve({value:t.shift(),done:!1}):o?Promise.resolve({value:void 0,done:!0}):new Promise(s=>{e=s})}}}}}import{randomUUID as ft}from"node:crypto";function Re(t,e){let o={},s={},a={},i=d=>{let m=e?.();return m?{...d,relaySessionId:m}:d},c=(d,m)=>d(i(m)),p=d=>c(t,d);return{handleCanUseTool(d,m,S){return d==="AskUserQuestion"?new Promise(_=>{s[S.toolUseID]={resolve:_,input:m},S.signal&&S.signal.addEventListener("abort",()=>{delete s[S.toolUseID],p({type:"ask_user_answered",toolId:S.toolUseID}),_({behavior:"deny",message:"Cancelled"})})}):a[d]?Promise.resolve({behavior:"allow",updatedInput:m}):new Promise(_=>{let P=ft();o[P]={resolve:_,requestId:P,toolName:d,toolInput:m,toolUseId:S.toolUseID},p({type:"permission_request",requestId:P,toolName:d,toolInput:m,toolUseId:S.toolUseID,decisionReason:S.decisionReason||""}),S.signal&&S.signal.addEventListener("abort",()=>{delete o[P],p({type:"permission_cancel",requestId:P}),_({behavior:"deny",message:"Request cancelled"})})})},handlePermissionResponse(d,m,S){let _=o[d];if(!_&&d.startsWith("hydrated-")){let P=d.slice(9),E=Object.keys(o).find(C=>o[C].toolUseId===P);E&&(_=o[E])}_&&(delete o[_.requestId],p({type:"permission_resolved",requestId:_.requestId,decision:m}),d!==_.requestId&&p({type:"permission_resolved",requestId:d,decision:m}),m==="allow"?(S&&(a[_.toolName]=!0),_.resolve({behavior:"allow",updatedInput:_.toolInput})):_.resolve({behavior:"deny",message:"User denied"}))},handleAskUserResponse(d,m){let S=s[d];if(!S)return;delete s[d],p({type:"ask_user_answered",toolId:d});let _=Object.assign({},S.input,{answers:m});S.resolve({behavior:"allow",updatedInput:_})},clearPending(d){for(let m of Object.keys(s))c(d,{type:"ask_user_answered",toolId:m}),s[m].resolve({behavior:"deny",message:"Session ended"}),delete s[m];for(let m of Object.keys(o))c(d,{type:"permission_cancel",requestId:m}),o[m].resolve({behavior:"deny",message:"Session ended"}),delete o[m]}}}function de(){return{cliSessionId:null,resumeToken:null,relaySessionId:null,sessionName:null,blocks:{},sentToolResults:{},streamedText:!1,responsePreview:"",activeTaskToolIds:{},taskIdMap:{},teammateMap:{},teamActive:!1,isProcessing:!1,compacting:!1}}var pt=["connected","failed","needs-auth","pending","disabled"],yt=["project","user","local","claudeai","managed"];function U(t){return typeof t=="string"&&t.length>0?t:void 0}function gt(t){return pt.includes(t)?t:"pending"}function ht(t){return yt.includes(t)?t:void 0}function $e(t){return t==="default"||t==="auto"?t:null}function _t(t){if(!t||typeof t!="object")return;let e=t,o={};return typeof e.readOnly=="boolean"&&(o.readOnly=e.readOnly),typeof e.destructive=="boolean"&&(o.destructive=e.destructive),typeof e.openWorld=="boolean"&&(o.openWorld=e.openWorld),Object.keys(o).length>0?o:void 0}function St(t){if(!Array.isArray(t))return;let e=[];for(let o of t){if(!o||typeof o!="object")continue;let s=o,a=U(s.name);if(!a)continue;let i=U(s.description),c=_t(s.annotations);e.push({name:a,...i?{description:i}:{},...c?{annotations:c}:{}})}return e}function bt(t){if(!t||typeof t!="object")return;let e=t,o={},s=U(e.type),a=U(e.url),i=U(e.command);return s&&(o.type=s),a&&(o.url=a),i&&(o.command=i),Object.keys(o).length>0?o:void 0}function Tt(t){if(!t||typeof t!="object")return;let e=t,o=U(e.name);if(o)return{name:o,version:U(e.version)??""}}function ee(t,e=new Map){if(!Array.isArray(t))return[];let o=[];for(let s of t){if(!s||typeof s!="object")continue;let a=s,i=U(a.name);if(!i)continue;let c=U(a.error),p=bt(a.config),d=ht(a.scope),m=St(a.tools),S=Tt(a.serverInfo),_=e.get(i)??null;o.push({name:i,status:gt(a.status),...S?{serverInfo:S}:{},...c?{error:c}:{},...p?{config:p}:{},...d?{scope:d}:{},...m?{tools:m}:{},..._?{permissionMode:_}:{}})}return o.sort((s,a)=>s.name.localeCompare(a.name)),o}var wt=/[\u0000-\u001F\u007F-\u009F​-‏‪-‮⁦-⁩]/g,vt="builtin",kt="builtin",It=["adds","may-add","removes","may-remove"];function $(t,e=200){if(typeof t!="string")return;let o=t.replace(wt,"").trim();if(o.length!==0)return o.length>e?o.slice(0,e):o}function z(t){if(typeof t!="string")return null;let e=t.lastIndexOf("@");return e<=0||e===t.length-1?null:{name:t.slice(0,e),marketplace:t.slice(e+1)}}function Oe(t){if(!Array.isArray(t))return[];let e=[];for(let o of t){let s=$(o);s&&e.push(s)}return e}function me(t){if(!Array.isArray(t))return[];let e=[],o=new Set;for(let s of t){if(!s||typeof s!="object")continue;let a=s,i=$(a.name);if(!i)continue;let c=$(a.source),p=c&&z(c)?c:void 0,d=p??`name:${i}`;if(o.has(d))continue;o.add(d);let m=$(a.path,1e3),S=m&&m!==kt?m:void 0,_=$(a.version,64);e.push({name:i,...S?{path:S}:{},...p?{id:p}:{},..._?{version:_}:{}})}return e}function Mt(t){let e=t&&typeof t=="object"?t:{},o=e.lsp_tool_change;return{mcpServersAdded:Oe(e.mcp_servers_added),mcpServersRemoved:Oe(e.mcp_servers_removed),lspToolChange:It.includes(o)?o:null}}function De(t){if(!Array.isArray(t))return[];let e=[];for(let o of t){let s=typeof o=="string"?$(o):o&&typeof o=="object"?$(o.name):void 0;s&&e.push(s)}return e}function te(t){let e=t&&typeof t=="object"?t:{},o=typeof e.error_count=="number"&&Number.isFinite(e.error_count)&&e.error_count>0?Math.floor(e.error_count):0,s=typeof e.held=="boolean"?e.held:void 0;return{plugins:me(e.plugins),commands:Array.isArray(e.commands)?e.commands:[],agentNames:De(e.agents),mcpServers:Array.isArray(e.mcpServers)?e.mcpServers:[],errorCount:o,...s!==void 0?{held:s}:{},...s===!0?{cacheImpact:Mt(e.cache_impact)}:{}}}function Le(t){return De(t)}function fe(t){if(!Array.isArray(t))return[];let e=[];for(let o of t){if(!o||typeof o!="object")continue;let s=o.name;typeof s=="string"&&s.length>0&&e.push(s)}return e}function Ue(t){return z(t)?.marketplace===vt}function je(t){let e=[],o=new Set;for(let i of t.loaded){i.id&&o.add(i.id);let c=`${i.name}:`,p=`plugin:${i.name}:`,d=z(i.id);e.push({name:i.name,...i.id?{id:i.id}:{},...d?{source:d.marketplace}:{},...i.version?{version:i.version}:{},...i.path?{path:i.path}:{},builtin:Ue(i.id),enabled:!0,commands:t.commandNames.filter(m=>m.startsWith(c)),agents:t.agentNames.filter(m=>m.startsWith(c)),mcpServers:t.mcpServerNames.filter(m=>m.startsWith(p)).map(m=>$(m.slice(p.length))).filter(m=>m!==void 0)})}let s=new Set;for(let[i,c]of t.overrides)c===!1&&s.add(i);let a=t.enabledSettings;if(a&&typeof a=="object"&&!Array.isArray(a))for(let[i,c]of Object.entries(a))c===!1&&t.overrides.get(i)!==!0&&s.add(i);for(let i of s){if(o.has(i)||$(i,400)!==i)continue;let c=z(i);if(!c)continue;let p=t.known.get(i),d=p?.name??$(c.name);if(!d)continue;let m=$(c.marketplace);e.push({name:d,id:i,...m?{source:m}:{},...p?.version?{version:p.version}:{},...p?.path?{path:p.path}:{},builtin:Ue(i),enabled:!1,commands:[],agents:[],mcpServers:[]})}return e.sort((i,c)=>i.name.localeCompare(c.name)||(i.id??"").localeCompare(c.id??"")),e}import{spawn as At}from"node:child_process";var xt=3e4,Pt=10*6e4,Nt="Finish authorizing in your browser. This connector is picked up when the session restarts \u2014 use Check again once you are done.",Et="`claude mcp login --no-browser` produced no authorization URL \u2014 the CLI may be too old or the server may not support OAuth",qe=/\[[0-9;]*[a-zA-Z]/g,Ct=/https?:\/\/[^\s"'<>`\u0000-\u001f\u007f]+/,Rt=/error|invalid|denied|mismatch|unauthor|forbidden|refus|fail|expired/i;function $t(t){let o=t.replace(qe,"").match(Ct);return o?o[0].replace(/[.,;:)\]}]+$/,""):null}function Fe(t){let{send:e,spawnFn:o=(g,v)=>At(g,v,{env:{...process.env,NO_COLOR:"1",FORCE_COLOR:"0"}}),cliPath:s="claude",urlTimeoutMs:a=xt,totalTimeoutMs:i=Pt,verify:c}=t,p=new Map;function d(g,v,b,M){let k=p.get(g);!k||k.settled||(k.settled=!0,k.urlTimer&&clearTimeout(k.urlTimer),k.totalTimer&&clearTimeout(k.totalTimer),p.delete(g),e({type:"mcp_auth_result",name:g,ok:v,...b?{error:b}:{},...M?.serverStatus?{serverStatus:M.serverStatus}:{},...M?.browserOnly?{browserOnly:!0}:{}}))}function m(g){try{g.child.kill("SIGTERM")}catch{}}function S(g,v){let b=p.get(g);if(!b||b.urlSent)return;let M=$t(String(v));M&&(b.urlSent=!0,b.urlTimer&&clearTimeout(b.urlTimer),e({type:"mcp_auth_url",name:g,url:M}))}function _(g){E(g);let v;try{v=o(s,["mcp","login",g,"--no-browser"])}catch(M){e({type:"mcp_auth_result",name:g,ok:!1,error:`failed to launch \`${s} mcp login\`: ${M.message}`});return}let b={child:v,urlSent:!1,settled:!1,redirectSubmitted:!1,stderrTail:"",diagnosis:""};p.set(g,b),v.stdout?.on("data",M=>S(g,M)),v.stderr?.on("data",M=>{let k=String(M).replace(qe,"");if(b.stderrTail=(b.stderrTail+k).slice(-500),!b.diagnosis){let q=k.split(`
4
+ `).map(F=>F.trim()).find(F=>Rt.test(F));q&&(b.diagnosis=q.slice(0,300))}S(g,M)}),v.on("error",M=>{d(g,!1,`\`${s} mcp login\` failed to start: ${M.message}`)}),v.on("close",M=>{if(M!==0){let k=b.diagnosis||b.stderrTail.trim()||`exit code ${M??"unknown"}`;d(g,!1,`\`${s} mcp login ${g}\` failed: ${k}`);return}if(!b.redirectSubmitted){d(g,!1,Nt,{browserOnly:!0});return}(async()=>{let k=null;try{k=await c?.(g)??null}catch{}if(k==="connected"){d(g,!0,void 0,{serverStatus:k});return}d(g,!1,k?`Authorization did not complete \u2014 ${g} still reports "${k}".`:`Authorization could not be confirmed for ${g}.`,{...k?{serverStatus:k}:{}})})()}),b.urlTimer=setTimeout(()=>{m(b),d(g,!1,Et)},a),b.totalTimer=setTimeout(()=>{m(b),d(g,!1,"authorization timed out waiting for the redirect URL")},i)}function P(g,v){let b=p.get(g);if(!b){e({type:"mcp_auth_result",name:g,ok:!1,error:"no authorization is in progress for this server \u2014 start it again"});return}let M=v.trim();if(!M){e({type:"mcp_auth_result",name:g,ok:!1,error:"the pasted redirect URL was empty"});return}try{b.child.stdin?.write(M+`
5
+ `),b.redirectSubmitted=!0}catch(k){d(g,!1,`could not hand the redirect URL to the CLI: ${k.message}`)}}function E(g){let v=p.get(g);v&&(v.settled=!0,v.urlTimer&&clearTimeout(v.urlTimer),v.totalTimer&&clearTimeout(v.totalTimer),p.delete(g),m(v))}function C(){for(let g of[...p.keys()])E(g)}return{start:_,submitRedirect:P,cancel:E,cancelAll:C}}var Ot=`## Sending a file to the user
6
6
 
7
7
  When the user asks you to send, download, or give them a file, emit this marker
8
8
  on a line of its own:
@@ -15,12 +15,12 @@ The agent replaces the marker with a downloadable chip in the chat. Rules:
15
15
  anything outside the workspace are refused.
16
16
  - Do NOT also paste the file's contents \u2014 the chip IS the delivery.
17
17
  - Only emit it when the user asked for the file. Never on your own initiative.
18
- - Files over 5 MB are refused; say so rather than emitting the marker.`,te=rt;var D={agents:[],teamName:null,leadSessionId:null,teamConfigDir:null};function Me(t,e){let a=JSON.parse(t);if(!a.members||a.members.length===0)return D;let n=[];for(let o of a.members)o.agentType!=="team-lead"&&n.push({id:o.name.toLowerCase().replace(/\s+/g,"-"),name:o.name,description:o.prompt||`${o.agentType} agent`,systemPrompt:o.prompt||"",defaultModel:o.model,agentType:o.agentType,color:o.color});return{agents:n,teamName:a.name||null,leadSessionId:a.leadSessionId||null,teamConfigDir:e}}async function at(t){let e=L(nt(),".claude","teams"),a=we(t);try{let n=await Te(e);for(let o of n)try{let c=L(e,o),l=await be(L(c,"config.json"),"utf-8");if(!JSON.parse(l).members?.some(f=>f.cwd&&we(f.cwd)===a))continue;return Me(l,c)}catch{}return D}catch{return D}}async function it(t){let e=L(t,".claude","teams");try{let a=await Te(e);for(let n of a)try{let o=L(e,n),c=await be(L(o,"config.json"),"utf-8");return Me(c,o)}catch{}return D}catch{return D}}var re=3,oe=[2e3,5e3,1e4],ke=5e3,K="working directory no longer exists";function se(t){let e=t.toLowerCase();return e.includes("prompt is too long")||e.includes("context_length")||e.includes("maximum context length")||e.includes("no conversation found with session id")||e.includes(K)}async function ne(t){if(!t)return!1;try{return!(await st(t)).isDirectory()}catch{return!0}}function ve(t,e={}){let a=null,n=null,o=null,c=null,l=Z(),g=null,u="",f=[],w=[],_="acceptEdits",A="medium",R="",P=0,p=D,k=!1,S=null,M=new Map,T=-1,j=null,v=t;t=r=>{if(r.type==="model_info"&&(r.models&&r.models.length>0&&(f=r.models),r.models=f,r.model&&(u=r.model)),r.type==="slash_commands"&&!r.commandDetails&&w.length>0&&(r.commandDetails=w),S){S(r);return}v(r)};async function ae(){if(a)return a;try{return a=await import("@anthropic-ai/claude-agent-sdk"),a}catch(r){let s=r;throw new Error(`Failed to load Claude SDK: ${s.message}`)}}async function ie(r,s,d,i=re){let y;for(let m=0;m<i;m++){let h=oe[m]??oe[oe.length-1];if(t({type:"info",text:`Reconnecting to Claude session (attempt ${m+1}/${i})...`}),await new Promise(I=>setTimeout(I,h)),s!==P)return console.error(`[sdk-runner] session generation changed during ${d}, aborting`),{ok:!1,reason:"generation-changed"};try{return r(m),console.error(`[sdk-runner] ${d} succeeded on attempt ${m+1}`),t({type:"info",text:"Reconnected to Claude session."}),{ok:!0}}catch(I){if(y=I,console.error(`[sdk-runner] ${d} attempt ${m+1} failed: ${y.message}`),se(y.message))return console.error(`[sdk-runner] non-retryable error during ${d}, giving up`),{ok:!1,reason:"non-retryable",error:y}}}return console.error(`[sdk-runner] ${d} all attempts exhausted`),{ok:!1,reason:"exhausted",error:y}}function xe(r,s){if(s.length===0||s.find(m=>m.value===r))return r;let i=r.toLowerCase(),y=s.find(m=>m.value.toLowerCase().split("-").some(h=>h===i));return y?y.value:r}function le(r){return r.map(s=>({value:s.value,displayName:s.displayName,description:s.description,supportsEffort:s.supportsEffort,supportedEffortLevels:s.supportedEffortLevels}))}let Ae={clear:""};function Ee(r){let s=[];for(let d of r){if(!d||typeof d!="object")continue;let i=d,y=typeof i.name=="string"?i.name.replace(/^\/+/,"").trim():"";if(!y)continue;let m=typeof i.argumentHint=="string"?i.argumentHint:"";s.push({name:y,description:typeof i.description=="string"?i.description:"",argumentHint:Ae[y]??m,...Array.isArray(i.aliases)?{aliases:i.aliases.filter(h=>typeof h=="string")}:{}})}return s}function ce(r){return r.length===0||JSON.stringify(r)===JSON.stringify(w)?!1:(w=r,t({type:"slash_commands",commands:r.map(s=>s.name),commandDetails:r}),!0)}async function ue(r,s){if(!r.supportedCommands)return null;let d;try{let i=await Promise.race([r.supportedCommands(),new Promise(y=>{d=setTimeout(()=>y(null),s)})]);return!i||!Array.isArray(i)||i.length===0?null:Ee(i)}catch(i){return console.error(`[sdk-runner] supportedCommands failed: ${i.message}`),null}finally{d&&clearTimeout(d)}}let de=Promise.resolve();async function q(){let r=de.then(async()=>{if(!o)return;let s=await ue(o,ke);s&&ce(s)});return de=r.catch(()=>{}),r}function Y(){return T!==P&&(M.clear(),T=P),M}let me="no active session \u2014 open a chat before managing MCP servers",fe="this Claude Agent SDK build does not expose MCP server controls";async function Ce(r){let s=o;if(!s?.mcpServerStatus)return null;try{await s.reconnectMcpServer?.(r)}catch{}try{let d=await s.mcpServerStatus(),i=ee(d,Y());return t({type:"mcp_status_result",servers:i}),i.find(y=>y.name===r)?.status??null}catch{return null}}function Q(){return j||(j=Se({send:r=>t(r),verify:Ce,...e.mcpAuthSpawn?{spawnFn:e.mcpAuthSpawn}:{},...e.mcpCliPath?{cliPath:e.mcpCliPath}:{}})),j}async function V(){let r=o;if(!r){t({type:"mcp_status_result",servers:[],error:me});return}if(!r.mcpServerStatus){t({type:"mcp_status_result",servers:[],error:fe});return}try{let s=await r.mcpServerStatus();t({type:"mcp_status_result",servers:ee(s,Y())})}catch(s){t({type:"mcp_status_result",servers:[],error:s.message})}}async function F(r,s,d,i){let y=o;if(!y)return t({type:"mcp_action_result",action:r,...s?{name:s}:{},ok:!1,error:me}),!1;try{let m=d(y);if(m===void 0)return t({type:"mcp_action_result",action:r,...s?{name:s}:{},ok:!1,error:fe}),!1;let h=await m,I=i?.(h)??null;return I!==null?(t({type:"mcp_action_result",action:r,...s?{name:s}:{},ok:!1,error:I}),await V(),!1):(t({type:"mcp_action_result",action:r,...s?{name:s}:{},ok:!0}),await V(),!0)}catch(m){return t({type:"mcp_action_result",action:r,...s?{name:s}:{},ok:!1,error:m.message}),!1}}async function Re(r,s){let d={[Symbol.asyncIterator](){return{next:()=>Promise.resolve({value:void 0,done:!0})}}},i=null;try{i=r.query({prompt:d,options:{cwd:s}}),i[Symbol.asyncIterator]().next().catch(()=>{});let m=null,h=!!i.initializationResult,I=!!i.supportedModels;if(console.error(`[sdk-runner] probe: initializationResult=${h}, supportedModels=${I}`),i.initializationResult){let x=await Promise.race([i.initializationResult(),new Promise($=>setTimeout(()=>$(null),8e3))]);if(x?.models?.length)m=x.models,console.error(`[sdk-runner] probe: initializationResult returned ${m.length} models`);else if(console.error("[sdk-runner] probe: initializationResult returned no models, trying supportedModels fallback"),i.supportedModels){let $=await Promise.race([i.supportedModels(),new Promise(J=>setTimeout(()=>J(null),8e3))]);$?.length?(m=$,console.error(`[sdk-runner] probe: supportedModels fallback returned ${m.length} models`)):console.error("[sdk-runner] probe: supportedModels fallback returned no models")}}else if(i.supportedModels){let x=await Promise.race([i.supportedModels(),new Promise($=>setTimeout(()=>$(null),8e3))]);x?.length?(m=x,console.error(`[sdk-runner] probe: supportedModels returned ${m.length} models`)):console.error("[sdk-runner] probe: supportedModels returned no models")}else console.error("[sdk-runner] probe: neither initializationResult nor supportedModels available");m&&m.length>0?(f=le(m),!u&&f.length>0&&(u=f[0].value),console.error(`[sdk-runner] probe: sending model_info with ${f.length} models`),t({type:"model_info",model:u,models:f})):console.error("[sdk-runner] probe: no models found from any method");let E=await ue(i,ke);E&&ce(E)}catch(y){console.error(`[sdk-runner] probe: error fetching models: ${y.message}`)}finally{i?.close&&i.close()}}async function pe(){if(!o)return;let r=P;try{for await(let s of o)ye(l,s,t),s.type==="system"&&s.subtype==="init"&&q().catch(()=>{})}catch(s){if(r!==P)return;let d=s,i=d.name==="AbortError"||c&&c.signal.aborted,y=d.message||String(d),m=se(y);if(!i&&!m&&l.resumeToken&&(console.error(`[sdk-runner] query stream crashed: ${d.message}, attempting recovery`),await $e(r)))return;let h=!i&&await ne(R);l.isProcessing&&(l.isProcessing=!1,i?(t({type:"info",text:"Interrupted"}),t({type:"done",code:0})):h?(t({type:"error",text:`${K}: ${R}`}),t({type:"done",code:1})):m?(t({type:"error",text:"Conversation too long to continue."}),t({type:"done",code:1})):(t({type:"error",text:`Claude process error: ${d.message}`}),t({type:"done",code:1})))}finally{r===P&&(o=null,n=null,c=null,g&&g.clearPending(t))}}function Pe(r,s){let d={cwd:R,settingSources:["user","project","local"],systemPrompt:te,includePartialMessages:!0,enableFileCheckpointing:!0,enableAutoMode:!0,abortController:s,promptSuggestions:!0,resume:r,permissionMode:_,effort:A};return u&&(d.model=u),g&&(d.canUseTool=(i,y,m)=>g.handleCanUseTool(i,y,m)),p.teamName&&(d.env={...process.env,CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS:"1",CLAUDE_CODE_TEAM_NAME:p.teamName.toLowerCase()}),d}async function $e(r){if(!a)return!1;let s=a,d=l.resumeToken;return d?await ne(R)?(console.error(`[sdk-runner] skipping recovery \u2014 ${K}: ${R}`),!1):(await ie(()=>{n=B(),c=new AbortController;let y=Pe(d,c);o=s.query({prompt:n,options:y}),l.isProcessing=!0,P++,pe().catch(m=>{console.error("[sdk-runner] recovered stream error:",m)})},r,"stream-crash-recovery")).ok:!1}let N="done",z="",W=0,H=0,G=null;function Ne(){S=r=>{if(r.type==="delta"&&typeof r.text=="string"&&(z+=r.text),r.type==="delta"&&typeof r.text=="string"){let s=r.text,d=s.matchAll(/teammate_id="([^"]+)"/g);for(let i of d){let y=i[1];(s.includes("idle_notification")||s.includes("online"))&&v({type:"teammate_status",parentToolId:"",teammateName:y,status:"idle",activityText:"Online"})}}if(r.type==="done"||r.type==="result"){if(N==="broadcast_test"){let s=z.toUpperCase(),d=s.includes("TEAM_READY")||s.includes("BROADCAST")&&s.includes("SUCCESS")||s.includes("MESSAGE SENT"),i=s.includes("TEAM_NEEDS_REBUILD")||s.includes("NOT IN A TEAM")||s.includes("NO TEAM")||s.includes("ERROR");d&&!i?(N="done",S=null,v({type:"agent_mode_status",statusText:"Team is ready!"}),v({type:"agent_mode_ready",success:!0}),v(r)):(N="spawning",z="",v({type:"agent_mode_status",statusText:"Spawning teammates\u2026"}),Oe());return}if(N==="spawning"){k=!0,N="waiting_for_teammates",H=0,W=p.agents.filter(s=>s.agentType!=="team-lead").length,v({type:"agent_mode_status",statusText:`Waiting for ${W} teammates to come online\u2026`}),v(r),G=setTimeout(()=>{N==="waiting_for_teammates"&&(N="done",S=null,v({type:"agent_mode_status",statusText:"Team is ready!"}),v({type:"agent_mode_ready",success:!0}))},45e3);return}}if(N!=="done"){(r.type==="teammate_spawned"||r.type==="teammate_status"||r.type==="session_id")&&(v(r),N==="waiting_for_teammates"&&r.type==="teammate_spawned"&&(H++,v({type:"agent_mode_status",statusText:`Teammates online: ${H}/${W}\u2026`}),H>=W&&(G&&(clearTimeout(G),G=null),N="done",S=null,v({type:"agent_mode_status",statusText:"Team is ready!"}),v({type:"agent_mode_ready",success:!0}))));return}v(r)}}function Oe(){if(!n||!p.teamName){v({type:"agent_mode_ready",success:!1,error:"Cannot spawn team \u2014 no session or template"});return}(p.teamConfigDir?ot(p.teamConfigDir,{recursive:!0,force:!0}).catch(()=>{}):Promise.resolve()).then(()=>{let s=p.agents.map(i=>{let y=i.defaultModel?` (model: ${i.defaultModel})`:"";return`- **${i.name}** \u2014 ${i.agentType||"general-purpose"}${y}: ${i.description}`}).join(`
19
- `),d=[`Create an agent team called "${p.teamName.toLowerCase()}" with the following teammates, all using in-process mode:`,"",s,"","Use teammate-mode in-process. Spawn all teammates now. After they are all running, confirm the team is ready.","Do NOT start any tasks yet \u2014 just set up the team."].join(`
20
- `);n.push({type:"user",message:{role:"user",content:[{type:"text",text:d}]}})})}let X={async startSession(r){if(await ne(r.cwd)){let h=`${K}: ${r.cwd}`;console.error(`[sdk-runner] startSession: ${h}`),t({type:"error",text:h}),t({type:"done",code:1}),t({type:"session_ready",error:h});return}let s=await ae();f.length===0?(console.error("[sdk-runner] startSession: no cached models, launching probe"),Re(s,r.cwd).catch(h=>{console.error(`[sdk-runner] startSession: probe failed: ${h.message}`)})):console.error(`[sdk-runner] startSession: ${f.length} models already cached, skipping probe`),k=!1;let d=D;try{d=await it(r.cwd)}catch{}let i=D;try{i=await at(r.cwd)}catch{}d.agents.length>0?p={agents:d.agents,teamName:d.teamName||i.teamName,leadSessionId:i.leadSessionId,teamConfigDir:i.teamConfigDir}:p={agents:[],teamName:i.teamName,leadSessionId:i.leadSessionId,teamConfigDir:i.teamConfigDir},t({type:"agent_team_loaded",agents:p.agents}),P++;let y=P;l=Z(),l.isProcessing=!0,l.teamActive=p.agents.length>0,r.relaySessionId&&(l.relaySessionId=r.relaySessionId),r.sessionName&&(l.sessionName=r.sessionName),g=ge(t,()=>l.relaySessionId),n=B(),r.initialMessage&&n.push(r.initialMessage),c=new AbortController,R=r.cwd;let m={cwd:r.cwd,settingSources:["user","project","local"],systemPrompt:te,includePartialMessages:!0,enableFileCheckpointing:!0,enableAutoMode:!0,abortController:c,promptSuggestions:!0,canUseTool:(h,I,E)=>g.handleCanUseTool(h,I,E)};if(p.teamName&&(m.env={...process.env,CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS:"1",CLAUDE_CODE_TEAM_NAME:p.teamName.toLowerCase()}),r.model&&(m.model=r.model,u=r.model),r.permissionMode?(m.permissionMode=r.permissionMode,_=r.permissionMode):m.permissionMode=_,m.effort=A,r.sessionName&&!r.resume&&(m.title=r.sessionName),r.resume){if(m.resume=r.resume,l.cliSessionId=r.resume,l.resumeToken=r.resume,s.getSessionMessages)try{let h=await s.getSessionMessages(r.resume);h&&h.length>0&&t({type:"session_history",messages:h,...l.relaySessionId?{relaySessionId:l.relaySessionId}:{}})}catch(h){t({type:"info",text:`Could not restore session history: ${h.message}`})}t({type:"config_state",model:u,mode:_,effort:A,betas:[]})}try{o=s.query({prompt:n,options:m})}catch(h){let I=h;if(console.error(`[sdk-runner] query start failed (attempt 1/${re+1}): ${I.message}`),se(I.message)){l.isProcessing=!1,o=null,n=null,c=null,t({type:"error",text:`Failed to start query: ${I.message}`}),t({type:"done",code:1}),t({type:"session_ready",error:I.message});return}let E=await ie(()=>{n=B(),c=new AbortController,m.abortController=c,o=s.query({prompt:n,options:m})},y,"query-start-retry");if(!E.ok){if(E.reason!=="generation-changed"){l.isProcessing=!1,o=null,n=null,c=null;let x=E.reason==="exhausted"?`Failed to start query after ${re+1} attempts: ${E.error?.message??I.message}`:`Failed to start query: ${E.error?.message??I.message}`;t({type:"error",text:x}),t({type:"done",code:1}),t({type:"session_ready",error:x})}return}}if(o?.supportedModels){let h=o;(async()=>{let E=[500,1500,3e3,5e3];for(let x=0;x<E.length;x++){if(f.length>0){console.error(`[sdk-runner] real query: models already populated (attempt ${x}), skipping`);return}try{console.error(`[sdk-runner] real query: calling supportedModels() attempt ${x}`);let $=await Promise.race([h.supportedModels(),new Promise(J=>setTimeout(()=>J(null),E[x]))]);if($&&$.length>0){f=le($),!u&&f.length>0&&(u=f[0].value),console.error(`[sdk-runner] real query: supportedModels returned ${f.length} models on attempt ${x}`),t({type:"model_info",model:u,models:f});return}console.error(`[sdk-runner] real query: supportedModels returned empty on attempt ${x}`)}catch($){console.error(`[sdk-runner] real query: supportedModels error on attempt ${x}: ${$.message}`)}x<E.length-1&&await new Promise($=>setTimeout($,E[x]))}console.error("[sdk-runner] real query: all supportedModels attempts exhausted")})().catch(()=>{})}else console.error("[sdk-runner] real query: supportedModels not available on query instance");q().catch(()=>{}),pe().catch(()=>{}),t({type:"session_ready"})},activateAgentMode(){if(!n){v({type:"agent_mode_ready",success:!1,error:"No active session"});return}if(p.agents.length===0||!p.teamName){v({type:"agent_mode_ready",success:!1,error:"No team template found"});return}if(N!=="done")return;v({type:"agent_mode_status",statusText:"Checking team status\u2026"}),N="broadcast_test",z="",Ne();let r=['You are activating VibeAgent mode. First, try to broadcast a ping to the team using SendMessage with to="*".',"If the broadcast succeeds, respond with exactly: TEAM_READY",'If the broadcast fails (e.g. "Not in a team context" or no teammates found), respond with exactly: TEAM_NEEDS_REBUILD',"Do not explain anything else \u2014 just respond with one of those two phrases."].join(`
21
- `);n.push({type:"user",message:{role:"user",content:[{type:"text",text:r}]}})},async requestHistory(r,s){let d=await ae(),i=s||l.relaySessionId,y=r||l.cliSessionId;if(y&&d.getSessionMessages)try{let m=await d.getSessionMessages(y);if(m&&m.length>0)t({type:"session_history",messages:m,...i?{relaySessionId:i}:{}});else if(l.cliSessionId&&l.cliSessionId!==y){let h=await d.getSessionMessages(l.cliSessionId);h&&h.length>0&&(t({type:"session_history",messages:h,...i?{relaySessionId:i}:{}}),t({type:"session_id",cliSessionId:l.cliSessionId,...i?{relaySessionId:i}:{}}))}}catch(m){t({type:"info",text:`Could not restore session history: ${m.message}`})}f.length>0&&t({type:"model_info",model:u,models:f,...i?{relaySessionId:i}:{}}),w.length>0?t({type:"slash_commands",commands:w.map(m=>m.name),commandDetails:w,...i?{relaySessionId:i}:{}}):q().catch(()=>{}),t({type:"config_state",model:u,mode:_,effort:A,betas:[],...i?{relaySessionId:i}:{}})},pushUserMessage(r,s,d){if(d&&r&&(r=`Use SendMessage to send the following to teammate "${d}":
18
+ - Files over 5 MB are refused; say so rather than emitting the marker.`,pe=Ot;var L={agents:[],teamName:null,leadSessionId:null,teamConfigDir:null};function Je(t,e){let o=JSON.parse(t);if(!o.members||o.members.length===0)return L;let s=[];for(let a of o.members)a.agentType!=="team-lead"&&s.push({id:a.name.toLowerCase().replace(/\s+/g,"-"),name:a.name,description:a.prompt||`${a.agentType} agent`,systemPrompt:a.prompt||"",defaultModel:a.model,agentType:a.agentType,color:a.color});return{agents:s,teamName:o.name||null,leadSessionId:o.leadSessionId||null,teamConfigDir:e}}async function jt(t){let e=G(Lt(),".claude","teams"),o=ze(t);try{let s=await He(e);for(let a of s)try{let i=G(e,a),c=await Be(G(i,"config.json"),"utf-8");if(!JSON.parse(c).members?.some(m=>m.cwd&&ze(m.cwd)===o))continue;return Je(c,i)}catch{}return L}catch{return L}}async function qt(t){let e=G(t,".claude","teams");try{let o=await He(e);for(let s of o)try{let a=G(e,s),i=await Be(G(a,"config.json"),"utf-8");return Je(i,a)}catch{}return L}catch{return L}}var ye=3,ge=[2e3,5e3,1e4],Ge=5e3,ne="working directory no longer exists";function he(t){let e=t.toLowerCase();return e.includes("prompt is too long")||e.includes("context_length")||e.includes("maximum context length")||e.includes("no conversation found with session id")||e.includes(ne)}async function _e(t){if(!t)return!1;try{return!(await Dt(t)).isDirectory()}catch{return!0}}function We(t){return{generation:t,overrides:new Map,loaded:null,agentNames:[],mcpServerNames:[],commandNames:null}}var Ft=5e3;function Ke(t,e={}){let o=null,s=null,a=null,i=null,c=de(),p=null,d="",m=[],S=[],_="acceptEdits",P="medium",E="",C=0,g=L,v=!1,b=null,M=new Map,k=-1,q=null,F=We(-1),Se=new Map,N=t;t=n=>{if(n.type==="model_info"&&(n.models&&n.models.length>0&&(m=n.models),n.models=m,n.model&&(d=n.model)),n.type==="slash_commands"&&!n.commandDetails&&S.length>0&&(n.commandDetails=S),b){b(n);return}N(n)};async function be(){if(o)return o;try{return o=await import("@anthropic-ai/claude-agent-sdk"),o}catch(n){let r=n;throw new Error(`Failed to load Claude SDK: ${r.message}`)}}async function Te(n,r,u,l=ye){let y;for(let f=0;f<l;f++){let h=ge[f]??ge[ge.length-1];if(t({type:"info",text:`Reconnecting to Claude session (attempt ${f+1}/${l})...`}),await new Promise(I=>setTimeout(I,h)),r!==C)return console.error(`[sdk-runner] session generation changed during ${u}, aborting`),{ok:!1,reason:"generation-changed"};try{return n(f),console.error(`[sdk-runner] ${u} succeeded on attempt ${f+1}`),t({type:"info",text:"Reconnected to Claude session."}),{ok:!0}}catch(I){if(y=I,console.error(`[sdk-runner] ${u} attempt ${f+1} failed: ${y.message}`),he(y.message))return console.error(`[sdk-runner] non-retryable error during ${u}, giving up`),{ok:!1,reason:"non-retryable",error:y}}}return console.error(`[sdk-runner] ${u} all attempts exhausted`),{ok:!1,reason:"exhausted",error:y}}function Qe(n,r){if(r.length===0||r.find(f=>f.value===n))return n;let l=n.toLowerCase(),y=r.find(f=>f.value.toLowerCase().split("-").some(h=>h===l));return y?y.value:n}function we(n){return n.map(r=>({value:r.value,displayName:r.displayName,description:r.description,supportsEffort:r.supportsEffort,supportedEffortLevels:r.supportedEffortLevels}))}let Xe={clear:""};function ve(n){let r=[];for(let u of n){if(!u||typeof u!="object")continue;let l=u,y=typeof l.name=="string"?l.name.replace(/^\/+/,"").trim():"";if(!y)continue;let f=typeof l.argumentHint=="string"?l.argumentHint:"";r.push({name:y,description:typeof l.description=="string"?l.description:"",argumentHint:Xe[y]??f,...Array.isArray(l.aliases)?{aliases:l.aliases.filter(h=>typeof h=="string")}:{}})}return r}function re(n){return n.length===0||JSON.stringify(n)===JSON.stringify(S)?!1:(S=n,t({type:"slash_commands",commands:n.map(r=>r.name),commandDetails:n}),!0)}async function ke(n,r){if(!n.supportedCommands)return null;let u;try{let l=await Promise.race([n.supportedCommands(),new Promise(y=>{u=setTimeout(()=>y(null),r)})]);return!l||!Array.isArray(l)||l.length===0?null:ve(l)}catch(l){return console.error(`[sdk-runner] supportedCommands failed: ${l.message}`),null}finally{u&&clearTimeout(u)}}let Ie=Promise.resolve();async function H(){let n=Ie.then(async()=>{if(!a)return;let r=await ke(a,Ge);r&&re(r)});return Ie=n.catch(()=>{}),n}function B(){return k!==C&&(M.clear(),k=C),M}let Me="no active session \u2014 open a chat before managing MCP servers",Ae="this Claude Agent SDK build does not expose MCP server controls";async function Ve(n){let r=a;if(!r?.mcpServerStatus)return null;try{await r.reconnectMcpServer?.(n)}catch{}try{let u=await r.mcpServerStatus(),l=ee(u,B());return t({type:"mcp_status_result",servers:l}),l.find(y=>y.name===n)?.status??null}catch{return null}}function oe(){return q||(q=Fe({send:n=>t(n),verify:Ve,...e.mcpAuthSpawn?{spawnFn:e.mcpAuthSpawn}:{},...e.mcpCliPath?{cliPath:e.mcpCliPath}:{}})),q}async function se(){let n=a;if(!n){t({type:"mcp_status_result",servers:[],error:Me});return}if(!n.mcpServerStatus){t({type:"mcp_status_result",servers:[],error:Ae});return}try{let r=await n.mcpServerStatus();t({type:"mcp_status_result",servers:ee(r,B())})}catch(r){t({type:"mcp_status_result",servers:[],error:r.message})}}async function J(n,r,u,l){let y=a;if(!y)return t({type:"mcp_action_result",action:n,...r?{name:r}:{},ok:!1,error:Me}),!1;try{let f=u(y);if(f===void 0)return t({type:"mcp_action_result",action:n,...r?{name:r}:{},ok:!1,error:Ae}),!1;let h=await f,I=l?.(h)??null;return I!==null?(t({type:"mcp_action_result",action:n,...r?{name:r}:{},ok:!1,error:I}),await se(),!1):(t({type:"mcp_action_result",action:n,...r?{name:r}:{},ok:!0}),await se(),!0)}catch(f){return t({type:"mcp_action_result",action:n,...r?{name:r}:{},ok:!1,error:f.message}),!1}}let ae="no active session \u2014 open a chat before managing plugins",xe="this Claude Agent SDK build does not expose plugin controls",Ze="this Claude Agent SDK build cannot toggle plugins \u2014 use `claude plugin enable` or `claude plugin disable`",Pe=Promise.resolve();function ie(n){let r=Pe.then(n);return Pe=r.catch(()=>{}),r}function W(){return F.generation!==C&&(F=We(C)),F}function Ne(n){for(let r of n)r.id&&Se.set(r.id,r)}function et(n){if(!Array.isArray(n.plugins))return;let r=W();r.loaded=me(n.plugins),Ne(r.loaded),r.agentNames=Le(n.agents),r.mcpServerNames=fe(n.mcp_servers),r.commandNames=Array.isArray(n.slash_commands)?n.slash_commands.filter(u=>typeof u=="string"):null}function le(n){let r=W(),u=ve(n.commands);r.loaded=n.plugins,Ne(n.plugins),r.agentNames=n.agentNames,r.mcpServerNames=fe(n.mcpServers),r.commandNames=u.map(l=>l.name),n.held!==!0&&(re(u),t({type:"mcp_status_result",servers:ee(n.mcpServers,B())}))}async function tt(n){if(!n.getSettings)return;let r;try{let y=(await Promise.race([n.getSettings(),new Promise(f=>{r=setTimeout(()=>f(null),Ft)})]))?.effective?.enabledPlugins;return y&&typeof y=="object"&&!Array.isArray(y)?y:void 0}catch{return}finally{r&&clearTimeout(r)}}async function ce(n){let r=await tt(n),u=W();t({type:"plugins_status_result",plugins:je({loaded:u.loaded??[],commandNames:u.commandNames??S.map(l=>l.name),agentNames:u.agentNames,mcpServerNames:u.mcpServerNames,enabledSettings:r,overrides:u.overrides,known:Se}),canToggle:!!n.applyFlagSettings})}async function nt(){let n=a;if(!n){t({type:"plugins_status_result",plugins:[],canToggle:!1,error:ae});return}if(!n.reloadPlugins){t({type:"plugins_status_result",plugins:[],canToggle:!1,error:xe});return}try{W().loaded===null&&le(te(await n.reloadPlugins({holdOnCacheImpact:!0}))),await ce(n)}catch(r){t({type:"plugins_status_result",plugins:[],canToggle:!1,error:r.message})}}function D(n,r,u){t({type:"plugins_action_result",action:n,...r?{id:r}:{},ok:!1,error:u})}async function rt(n){let r=a;if(!r)return D("reload",void 0,ae);if(!r.reloadPlugins)return D("reload",void 0,xe);try{let u=n?await r.reloadPlugins():await r.reloadPlugins({holdOnCacheImpact:!0}),l=te(u);le(l),t({type:"plugins_action_result",action:"reload",ok:!0,held:l.held===!0,...l.cacheImpact?{cacheImpact:l.cacheImpact}:{},...!n&&l.held===void 0?{unchecked:!0}:{},errorCount:l.errorCount}),await ce(r)}catch(u){D("reload",void 0,u.message)}}async function ot(n,r){if(typeof n!="string"||!z(n)||$(n,400)!==n)return D("toggle",void 0,"expected a plugin@marketplace id");let u=a;if(!u)return D("toggle",n,ae);if(!u.applyFlagSettings||!u.reloadPlugins)return D("toggle",n,Ze);let l=W(),y=l.overrides.has(n),f=l.overrides.get(n);l.overrides.set(n,r);try{await u.applyFlagSettings({enabledPlugins:Object.fromEntries(l.overrides)})}catch(h){return y?l.overrides.set(n,f):l.overrides.delete(n),D("toggle",n,h.message)}try{let h=te(await u.reloadPlugins());le(h);let I=h.plugins.some(A=>A.id===n),w=null;r&&!I?w="Enabled for this session, but the plugin did not load. It may not be installed on this machine.":!r&&I&&(w="Disabled for this session, but the plugin is still loaded. A managed policy may be keeping it on."),t({type:"plugins_action_result",action:"toggle",id:n,ok:w===null,...w?{error:w}:{}}),await ce(u)}catch(h){D("toggle",n,h.message)}}async function st(n,r){let u={[Symbol.asyncIterator](){return{next:()=>Promise.resolve({value:void 0,done:!0})}}},l=null;try{l=n.query({prompt:u,options:{cwd:r}}),l[Symbol.asyncIterator]().next().catch(()=>{});let f=null,h=!!l.initializationResult,I=!!l.supportedModels;if(console.error(`[sdk-runner] probe: initializationResult=${h}, supportedModels=${I}`),l.initializationResult){let A=await Promise.race([l.initializationResult(),new Promise(R=>setTimeout(()=>R(null),8e3))]);if(A?.models?.length)f=A.models,console.error(`[sdk-runner] probe: initializationResult returned ${f.length} models`);else if(console.error("[sdk-runner] probe: initializationResult returned no models, trying supportedModels fallback"),l.supportedModels){let R=await Promise.race([l.supportedModels(),new Promise(V=>setTimeout(()=>V(null),8e3))]);R?.length?(f=R,console.error(`[sdk-runner] probe: supportedModels fallback returned ${f.length} models`)):console.error("[sdk-runner] probe: supportedModels fallback returned no models")}}else if(l.supportedModels){let A=await Promise.race([l.supportedModels(),new Promise(R=>setTimeout(()=>R(null),8e3))]);A?.length?(f=A,console.error(`[sdk-runner] probe: supportedModels returned ${f.length} models`)):console.error("[sdk-runner] probe: supportedModels returned no models")}else console.error("[sdk-runner] probe: neither initializationResult nor supportedModels available");f&&f.length>0?(m=we(f),!d&&m.length>0&&(d=m[0].value),console.error(`[sdk-runner] probe: sending model_info with ${m.length} models`),t({type:"model_info",model:d,models:m})):console.error("[sdk-runner] probe: no models found from any method");let w=await ke(l,Ge);w&&re(w)}catch(y){console.error(`[sdk-runner] probe: error fetching models: ${y.message}`)}finally{l?.close&&l.close()}}async function Ee(){if(!a)return;let n=C;try{for await(let r of a)Ce(c,r,t),r.type==="system"&&r.subtype==="init"&&(n===C&&et(r),H().catch(()=>{}))}catch(r){if(n!==C)return;let u=r,l=u.name==="AbortError"||i&&i.signal.aborted,y=u.message||String(u),f=he(y);if(!l&&!f&&c.resumeToken&&(console.error(`[sdk-runner] query stream crashed: ${u.message}, attempting recovery`),await it(n)))return;let h=!l&&await _e(E);c.isProcessing&&(c.isProcessing=!1,l?(t({type:"info",text:"Interrupted"}),t({type:"done",code:0})):h?(t({type:"error",text:`${ne}: ${E}`}),t({type:"done",code:1})):f?(t({type:"error",text:"Conversation too long to continue."}),t({type:"done",code:1})):(t({type:"error",text:`Claude process error: ${u.message}`}),t({type:"done",code:1})))}finally{n===C&&(a=null,s=null,i=null,p&&p.clearPending(t))}}function at(n,r){let u={cwd:E,settingSources:["user","project","local"],systemPrompt:pe,includePartialMessages:!0,enableFileCheckpointing:!0,enableAutoMode:!0,abortController:r,promptSuggestions:!0,resume:n,permissionMode:_,effort:P};return d&&(u.model=d),p&&(u.canUseTool=(l,y,f)=>p.handleCanUseTool(l,y,f)),g.teamName&&(u.env={...process.env,CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS:"1",CLAUDE_CODE_TEAM_NAME:g.teamName.toLowerCase()}),u}async function it(n){if(!o)return!1;let r=o,u=c.resumeToken;return u?await _e(E)?(console.error(`[sdk-runner] skipping recovery \u2014 ${ne}: ${E}`),!1):(await Te(()=>{s=Z(),i=new AbortController;let y=at(u,i);a=r.query({prompt:s,options:y}),c.isProcessing=!0,C++,Ee().catch(f=>{console.error("[sdk-runner] recovered stream error:",f)})},n,"stream-crash-recovery")).ok:!1}let O="done",K="",Y=0,Q=0,X=null;function lt(){b=n=>{if(n.type==="delta"&&typeof n.text=="string"&&(K+=n.text),n.type==="delta"&&typeof n.text=="string"){let r=n.text,u=r.matchAll(/teammate_id="([^"]+)"/g);for(let l of u){let y=l[1];(r.includes("idle_notification")||r.includes("online"))&&N({type:"teammate_status",parentToolId:"",teammateName:y,status:"idle",activityText:"Online"})}}if(n.type==="done"||n.type==="result"){if(O==="broadcast_test"){let r=K.toUpperCase(),u=r.includes("TEAM_READY")||r.includes("BROADCAST")&&r.includes("SUCCESS")||r.includes("MESSAGE SENT"),l=r.includes("TEAM_NEEDS_REBUILD")||r.includes("NOT IN A TEAM")||r.includes("NO TEAM")||r.includes("ERROR");u&&!l?(O="done",b=null,N({type:"agent_mode_status",statusText:"Team is ready!"}),N({type:"agent_mode_ready",success:!0}),N(n)):(O="spawning",K="",N({type:"agent_mode_status",statusText:"Spawning teammates\u2026"}),ct());return}if(O==="spawning"){v=!0,O="waiting_for_teammates",Q=0,Y=g.agents.filter(r=>r.agentType!=="team-lead").length,N({type:"agent_mode_status",statusText:`Waiting for ${Y} teammates to come online\u2026`}),N(n),X=setTimeout(()=>{O==="waiting_for_teammates"&&(O="done",b=null,N({type:"agent_mode_status",statusText:"Team is ready!"}),N({type:"agent_mode_ready",success:!0}))},45e3);return}}if(O!=="done"){(n.type==="teammate_spawned"||n.type==="teammate_status"||n.type==="session_id")&&(N(n),O==="waiting_for_teammates"&&n.type==="teammate_spawned"&&(Q++,N({type:"agent_mode_status",statusText:`Teammates online: ${Q}/${Y}\u2026`}),Q>=Y&&(X&&(clearTimeout(X),X=null),O="done",b=null,N({type:"agent_mode_status",statusText:"Team is ready!"}),N({type:"agent_mode_ready",success:!0}))));return}N(n)}}function ct(){if(!s||!g.teamName){N({type:"agent_mode_ready",success:!1,error:"Cannot spawn team \u2014 no session or template"});return}(g.teamConfigDir?Ut(g.teamConfigDir,{recursive:!0,force:!0}).catch(()=>{}):Promise.resolve()).then(()=>{let r=g.agents.map(l=>{let y=l.defaultModel?` (model: ${l.defaultModel})`:"";return`- **${l.name}** \u2014 ${l.agentType||"general-purpose"}${y}: ${l.description}`}).join(`
19
+ `),u=[`Create an agent team called "${g.teamName.toLowerCase()}" with the following teammates, all using in-process mode:`,"",r,"","Use teammate-mode in-process. Spawn all teammates now. After they are all running, confirm the team is ready.","Do NOT start any tasks yet \u2014 just set up the team."].join(`
20
+ `);s.push({type:"user",message:{role:"user",content:[{type:"text",text:u}]}})})}let ue={async startSession(n){if(await _e(n.cwd)){let h=`${ne}: ${n.cwd}`;console.error(`[sdk-runner] startSession: ${h}`),t({type:"error",text:h}),t({type:"done",code:1}),t({type:"session_ready",error:h});return}let r=await be();m.length===0?(console.error("[sdk-runner] startSession: no cached models, launching probe"),st(r,n.cwd).catch(h=>{console.error(`[sdk-runner] startSession: probe failed: ${h.message}`)})):console.error(`[sdk-runner] startSession: ${m.length} models already cached, skipping probe`),v=!1;let u=L;try{u=await qt(n.cwd)}catch{}let l=L;try{l=await jt(n.cwd)}catch{}u.agents.length>0?g={agents:u.agents,teamName:u.teamName||l.teamName,leadSessionId:l.leadSessionId,teamConfigDir:l.teamConfigDir}:g={agents:[],teamName:l.teamName,leadSessionId:l.leadSessionId,teamConfigDir:l.teamConfigDir},t({type:"agent_team_loaded",agents:g.agents}),C++;let y=C;c=de(),c.isProcessing=!0,c.teamActive=g.agents.length>0,n.relaySessionId&&(c.relaySessionId=n.relaySessionId),n.sessionName&&(c.sessionName=n.sessionName),p=Re(t,()=>c.relaySessionId),s=Z(),n.initialMessage&&s.push(n.initialMessage),i=new AbortController,E=n.cwd;let f={cwd:n.cwd,settingSources:["user","project","local"],systemPrompt:pe,includePartialMessages:!0,enableFileCheckpointing:!0,enableAutoMode:!0,abortController:i,promptSuggestions:!0,canUseTool:(h,I,w)=>p.handleCanUseTool(h,I,w)};if(g.teamName&&(f.env={...process.env,CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS:"1",CLAUDE_CODE_TEAM_NAME:g.teamName.toLowerCase()}),n.model&&(f.model=n.model,d=n.model),n.permissionMode?(f.permissionMode=n.permissionMode,_=n.permissionMode):f.permissionMode=_,f.effort=P,n.sessionName&&!n.resume&&(f.title=n.sessionName),n.resume){if(f.resume=n.resume,c.cliSessionId=n.resume,c.resumeToken=n.resume,r.getSessionMessages)try{let h=await r.getSessionMessages(n.resume);h&&h.length>0&&t({type:"session_history",messages:h,...c.relaySessionId?{relaySessionId:c.relaySessionId}:{}})}catch(h){t({type:"info",text:`Could not restore session history: ${h.message}`})}t({type:"config_state",model:d,mode:_,effort:P,betas:[]})}try{a=r.query({prompt:s,options:f})}catch(h){let I=h;if(console.error(`[sdk-runner] query start failed (attempt 1/${ye+1}): ${I.message}`),he(I.message)){c.isProcessing=!1,a=null,s=null,i=null,t({type:"error",text:`Failed to start query: ${I.message}`}),t({type:"done",code:1}),t({type:"session_ready",error:I.message});return}let w=await Te(()=>{s=Z(),i=new AbortController,f.abortController=i,a=r.query({prompt:s,options:f})},y,"query-start-retry");if(!w.ok){if(w.reason!=="generation-changed"){c.isProcessing=!1,a=null,s=null,i=null;let A=w.reason==="exhausted"?`Failed to start query after ${ye+1} attempts: ${w.error?.message??I.message}`:`Failed to start query: ${w.error?.message??I.message}`;t({type:"error",text:A}),t({type:"done",code:1}),t({type:"session_ready",error:A})}return}}if(a?.supportedModels){let h=a;(async()=>{let w=[500,1500,3e3,5e3];for(let A=0;A<w.length;A++){if(m.length>0){console.error(`[sdk-runner] real query: models already populated (attempt ${A}), skipping`);return}try{console.error(`[sdk-runner] real query: calling supportedModels() attempt ${A}`);let R=await Promise.race([h.supportedModels(),new Promise(V=>setTimeout(()=>V(null),w[A]))]);if(R&&R.length>0){m=we(R),!d&&m.length>0&&(d=m[0].value),console.error(`[sdk-runner] real query: supportedModels returned ${m.length} models on attempt ${A}`),t({type:"model_info",model:d,models:m});return}console.error(`[sdk-runner] real query: supportedModels returned empty on attempt ${A}`)}catch(R){console.error(`[sdk-runner] real query: supportedModels error on attempt ${A}: ${R.message}`)}A<w.length-1&&await new Promise(R=>setTimeout(R,w[A]))}console.error("[sdk-runner] real query: all supportedModels attempts exhausted")})().catch(()=>{})}else console.error("[sdk-runner] real query: supportedModels not available on query instance");H().catch(()=>{}),Ee().catch(()=>{}),t({type:"session_ready"})},activateAgentMode(){if(!s){N({type:"agent_mode_ready",success:!1,error:"No active session"});return}if(g.agents.length===0||!g.teamName){N({type:"agent_mode_ready",success:!1,error:"No team template found"});return}if(O!=="done")return;N({type:"agent_mode_status",statusText:"Checking team status\u2026"}),O="broadcast_test",K="",lt();let n=['You are activating VibeAgent mode. First, try to broadcast a ping to the team using SendMessage with to="*".',"If the broadcast succeeds, respond with exactly: TEAM_READY",'If the broadcast fails (e.g. "Not in a team context" or no teammates found), respond with exactly: TEAM_NEEDS_REBUILD',"Do not explain anything else \u2014 just respond with one of those two phrases."].join(`
21
+ `);s.push({type:"user",message:{role:"user",content:[{type:"text",text:n}]}})},async requestHistory(n,r){let u=await be(),l=r||c.relaySessionId,y=n||c.cliSessionId;if(y&&u.getSessionMessages)try{let f=await u.getSessionMessages(y);if(f&&f.length>0)t({type:"session_history",messages:f,...l?{relaySessionId:l}:{}});else if(c.cliSessionId&&c.cliSessionId!==y){let h=await u.getSessionMessages(c.cliSessionId);h&&h.length>0&&(t({type:"session_history",messages:h,...l?{relaySessionId:l}:{}}),t({type:"session_id",cliSessionId:c.cliSessionId,...l?{relaySessionId:l}:{}}))}}catch(f){t({type:"info",text:`Could not restore session history: ${f.message}`})}m.length>0&&t({type:"model_info",model:d,models:m,...l?{relaySessionId:l}:{}}),S.length>0?t({type:"slash_commands",commands:S.map(f=>f.name),commandDetails:S,...l?{relaySessionId:l}:{}}):H().catch(()=>{}),t({type:"config_state",model:d,mode:_,effort:P,betas:[],...l?{relaySessionId:l}:{}})},pushUserMessage(n,r,u){if(u&&n&&(n=`Use SendMessage to send the following to teammate "${u}":
22
22
 
23
- ${r}`),r&&r.startsWith("/")){let y=r.split(/\s/)[0].toLowerCase();if(y==="/clear"){P++,c&&c.abort(),n&&n.end(),this.startSession({cwd:R,model:u||void 0,permissionMode:_||void 0}).then(()=>{t({type:"slash_command_result",command:"clear",text:"Conversation cleared."})}).catch(m=>{t({type:"error",text:`Failed to clear session: ${m.message}`})});return}if(y==="/status"){let m=["**Bridge Status**","",`**Model:** ${u||"(not set)"}`,`**Available Models:** ${f.length>0?f.map(h=>`${h.displayName} (${h.value})`).join(", "):"(none discovered yet)"}`,`**Effort:** ${A}`,`**Permission Mode:** ${_}`,`**Session Active:** ${o?"yes":"no"}`,`**CLI Session:** ${l.cliSessionId||"(none)"}`,`**Working Directory:** ${R||"(not set)"}`,"","**Raw SDK Model Data:**","```json",JSON.stringify(f,null,2),"```"];t({type:"slash_command_result",command:"status",text:m.join(`
24
- `)});return}}if(!n){if(R){console.error("[sdk-runner] pushUserMessage: no active stream, restarting bridge"),t({type:"info",text:"Reconnecting..."});let y=[];if(s&&s.length>0)for(let E of s)y.push({type:"image",source:{type:"base64",media_type:E.mediaType,data:E.data}});r&&y.push({type:"text",text:r});let m={type:"user",message:{role:"user",content:y}},h={cwd:R,model:u||void 0,permissionMode:_||void 0};(async()=>{try{await X.startSession({...h,...l.resumeToken?{resume:l.resumeToken}:{},initialMessage:m})}catch(E){console.error(`[sdk-runner] resume restart failed: ${E.message}, trying fresh`);try{await X.startSession({...h,initialMessage:m})}catch(x){t({type:"error",text:`Session restart failed: ${x.message}`}),t({type:"done",code:1})}}})();return}t({type:"error",text:"No active session"});return}let i=[];if(s&&s.length>0)for(let y of s)i.push({type:"image",source:{type:"base64",media_type:y.mediaType,data:y.data}});r&&i.push({type:"text",text:r}),r&&t({type:"user_message",text:r}),l.isProcessing=!0,l.streamedText=!1,l.responsePreview="",l.blocks={},l.sentToolResults={},n.push({type:"user",message:{role:"user",content:i}})},interrupt(){o?.interrupt?o.interrupt().catch(()=>{c&&c.abort()}):c&&c.abort()},async setModel(r){let s=xe(r,f);if(!o?.setModel){u=s,t({type:"model_info",model:s,models:f});return}try{await o.setModel(s),u=s,t({type:"model_info",model:s,models:[]}),t({type:"config_state",model:u,mode:_,effort:A,betas:[]})}catch(d){t({type:"error",text:`Failed to switch model: ${d.message}`})}},async setMode(r){if(!o?.setPermissionMode){_=r,t({type:"config_state",model:u,mode:_,effort:A,betas:[]});return}try{await o.setPermissionMode(r),_=r,t({type:"config_state",model:u,mode:_,effort:A,betas:[]})}catch(s){t({type:"error",text:`Failed to set permission mode: ${s.message}`})}},setEffort(r){["low","medium","high","xhigh","max"].includes(r)||(console.warn(`[sdk-runner] Unknown effort level "${r}", defaulting to medium`),r="medium"),A=r,t({type:"config_state",model:u,mode:_,effort:A,betas:[]})},handlePermissionResponse(r,s,d){g?.handlePermissionResponse(r,s,d)},handleAskUserResponse(r,s){g?.handleAskUserResponse(r,s)},refreshSlashCommands:q,mcpStatus:V,async mcpToggle(r,s){await F("toggle",r,d=>d.toggleMcpServer?.(r,s))},async mcpReconnect(r){await F("reconnect",r,s=>s.reconnectMcpServer?.(r))},async mcpSetServers(r){await F("set_servers",void 0,s=>s.setMcpServers?.(r),s=>{let d=s?.errors;if(!d)return null;let i=Object.entries(d);return i.length===0?null:i.map(([y,m])=>`${y}: ${m}`).join("; ")})},async mcpPermissionMode(r,s){let d=he(s),i=Y(),y=i.get(r)??null;d===null?i.delete(r):i.set(r,d),await F("permission_mode",r,h=>h.setMcpPermissionModeOverride?.(r,d))||(y===null?i.delete(r):i.set(r,y))},mcpAuthStart(r){Q().start(r)},mcpAuthRedirect(r,s){Q().submitRedirect(r,s)},mcpAuthCancel(r){Q().cancel(r)},shutdown(){j?.cancelAll(),o?.close?o.close():c&&c.abort(),n&&n.end()}};return X}function U(t){let e=JSON.stringify(t);process.stdout.write(e+`
25
- `)}function b(t,e,a){let n={level:t,message:e,ts:new Date().toISOString(),...a};process.stderr.write(JSON.stringify(n)+`
26
- `)}var C=ve(U),Ie=lt({input:process.stdin,crlfDelay:1/0});Ie.on("line",async t=>{if(!t.trim())return;let e;try{e=JSON.parse(t)}catch{b("error","Failed to parse inbound message",{raw:t.slice(0,200)});return}try{switch(e.type){case"start_session":b("info","Starting session",{cwd:e.cwd,model:e.model});try{await C.startSession({cwd:e.cwd,model:e.model,permissionMode:e.permissionMode,resume:e.resume,relaySessionId:e.relaySessionId,sessionName:e.sessionName}),U({type:"session_ready"})}catch(a){U({type:"session_ready",error:String(a)})}break;case"user_message":b("info","User message received",{textLength:e.text?.length??0,targetAgentId:e.targetAgentId}),C.pushUserMessage(e.text,e.images,e.targetAgentId);break;case"interrupt":b("info","Interrupt requested"),C.interrupt();break;case"permission_response":b("info","Permission response",{requestId:e.requestId,decision:e.decision}),C.handlePermissionResponse(e.requestId,e.decision,e.allowForSession);break;case"ask_user_response":b("info","Ask user response",{toolId:e.toolId}),C.handleAskUserResponse(e.toolId,e.answers);break;case"set_model":b("info","Set model",{model:e.model}),await C.setModel(e.model);break;case"set_mode":b("info","Set mode",{mode:e.mode}),await C.setMode(e.mode);break;case"set_effort":b("info","Set effort",{effort:e.effort}),C.setEffort(e.effort);break;case"mcp_status":await C.mcpStatus();break;case"mcp_toggle":b("info","MCP toggle",{name:e.name,enabled:e.enabled}),await C.mcpToggle(e.name,e.enabled);break;case"mcp_reconnect":b("info","MCP reconnect",{name:e.name}),await C.mcpReconnect(e.name);break;case"mcp_set_servers":b("info","MCP set servers",{count:Object.keys(e.servers??{}).length}),await C.mcpSetServers(e.servers??{});break;case"mcp_permission_mode":b("info","MCP permission mode",{name:e.name,mode:e.mode}),await C.mcpPermissionMode(e.name,e.mode);break;case"mcp_auth_start":b("info","MCP auth start",{name:e.name}),C.mcpAuthStart(e.name);break;case"mcp_auth_redirect":b("info","MCP auth redirect received",{name:e.name}),C.mcpAuthRedirect(e.name,e.redirectUrl);break;case"mcp_auth_cancel":b("info","MCP auth cancelled",{name:e.name}),C.mcpAuthCancel(e.name);break;case"activate_agent_mode":b("info","Activate agent mode requested"),C.activateAgentMode();break;case"request_history":b("info","History request",{resume:e.resume}),await C.requestHistory(e.resume,e.relaySessionId);break;case"ping":U({type:"pong"});break;case"shutdown":b("info","Shutdown requested"),C.shutdown(),setTimeout(()=>process.exit(0),500);break;default:b("warn","Unknown message type",{type:e.type})}}catch(a){let n=a;b("error",`Error handling message type=${e.type}`,{error:n.message}),U({type:"error",text:`Internal bridge error: ${n.message}`})}});Ie.on("close",()=>{b("info","stdin closed, shutting down"),C.shutdown(),setTimeout(()=>process.exit(0),500)});process.on("uncaughtException",t=>{b("error","Uncaught exception",{error:t.message,stack:t.stack}),U({type:"error",text:`Bridge crash: ${t.message}`}),U({type:"done",code:1}),process.exit(1)});process.on("unhandledRejection",t=>{let e=t instanceof Error?t.message:String(t);b("error","Unhandled rejection",{error:e})});U({type:"ready"});b("info","SDK bridge ready");
23
+ ${n}`),n&&n.startsWith("/")){let y=n.split(/\s/)[0].toLowerCase();if(y==="/clear"){C++,i&&i.abort(),s&&s.end(),this.startSession({cwd:E,model:d||void 0,permissionMode:_||void 0}).then(()=>{t({type:"slash_command_result",command:"clear",text:"Conversation cleared."})}).catch(f=>{t({type:"error",text:`Failed to clear session: ${f.message}`})});return}if(y==="/status"){let f=["**Bridge Status**","",`**Model:** ${d||"(not set)"}`,`**Available Models:** ${m.length>0?m.map(h=>`${h.displayName} (${h.value})`).join(", "):"(none discovered yet)"}`,`**Effort:** ${P}`,`**Permission Mode:** ${_}`,`**Session Active:** ${a?"yes":"no"}`,`**CLI Session:** ${c.cliSessionId||"(none)"}`,`**Working Directory:** ${E||"(not set)"}`,"","**Raw SDK Model Data:**","```json",JSON.stringify(m,null,2),"```"];t({type:"slash_command_result",command:"status",text:f.join(`
24
+ `)});return}}if(!s){if(E){console.error("[sdk-runner] pushUserMessage: no active stream, restarting bridge"),t({type:"info",text:"Reconnecting..."});let y=[];if(r&&r.length>0)for(let w of r)y.push({type:"image",source:{type:"base64",media_type:w.mediaType,data:w.data}});n&&y.push({type:"text",text:n});let f={type:"user",message:{role:"user",content:y}},h={cwd:E,model:d||void 0,permissionMode:_||void 0};(async()=>{try{await ue.startSession({...h,...c.resumeToken?{resume:c.resumeToken}:{},initialMessage:f})}catch(w){console.error(`[sdk-runner] resume restart failed: ${w.message}, trying fresh`);try{await ue.startSession({...h,initialMessage:f})}catch(A){t({type:"error",text:`Session restart failed: ${A.message}`}),t({type:"done",code:1})}}})();return}t({type:"error",text:"No active session"});return}let l=[];if(r&&r.length>0)for(let y of r)l.push({type:"image",source:{type:"base64",media_type:y.mediaType,data:y.data}});n&&l.push({type:"text",text:n}),n&&t({type:"user_message",text:n}),c.isProcessing=!0,c.streamedText=!1,c.responsePreview="",c.blocks={},c.sentToolResults={},s.push({type:"user",message:{role:"user",content:l}})},interrupt(){a?.interrupt?a.interrupt().catch(()=>{i&&i.abort()}):i&&i.abort()},async setModel(n){let r=Qe(n,m);if(!a?.setModel){d=r,t({type:"model_info",model:r,models:m});return}try{await a.setModel(r),d=r,t({type:"model_info",model:r,models:[]}),t({type:"config_state",model:d,mode:_,effort:P,betas:[]})}catch(u){t({type:"error",text:`Failed to switch model: ${u.message}`})}},async setMode(n){if(!a?.setPermissionMode){_=n,t({type:"config_state",model:d,mode:_,effort:P,betas:[]});return}try{await a.setPermissionMode(n),_=n,t({type:"config_state",model:d,mode:_,effort:P,betas:[]})}catch(r){t({type:"error",text:`Failed to set permission mode: ${r.message}`})}},setEffort(n){["low","medium","high","xhigh","max"].includes(n)||(console.warn(`[sdk-runner] Unknown effort level "${n}", defaulting to medium`),n="medium"),P=n,t({type:"config_state",model:d,mode:_,effort:P,betas:[]})},handlePermissionResponse(n,r,u){p?.handlePermissionResponse(n,r,u)},handleAskUserResponse(n,r){p?.handleAskUserResponse(n,r)},refreshSlashCommands:H,mcpStatus:se,async mcpToggle(n,r){await J("toggle",n,u=>u.toggleMcpServer?.(n,r))},async mcpReconnect(n){await J("reconnect",n,r=>r.reconnectMcpServer?.(n))},async mcpSetServers(n){await J("set_servers",void 0,r=>r.setMcpServers?.(n),r=>{let u=r?.errors;if(!u)return null;let l=Object.entries(u);return l.length===0?null:l.map(([y,f])=>`${y}: ${f}`).join("; ")})},async mcpPermissionMode(n,r){let u=$e(r),l=B(),y=l.get(n)??null;u===null?l.delete(n):l.set(n,u),await J("permission_mode",n,h=>h.setMcpPermissionModeOverride?.(n,u))||(y===null?l.delete(n):l.set(n,y))},mcpAuthStart(n){oe().start(n)},mcpAuthRedirect(n,r){oe().submitRedirect(n,r)},mcpAuthCancel(n){oe().cancel(n)},pluginsStatus:()=>ie(nt),pluginsReload:n=>ie(()=>rt(n)),pluginToggle:(n,r)=>ie(()=>ot(n,r)),shutdown(){q?.cancelAll(),a?.close?a.close():i&&i.abort(),s&&s.end()}};return ue}function j(t){let e=JSON.stringify(t);process.stdout.write(e+`
25
+ `)}function T(t,e,o){let s={level:t,message:e,ts:new Date().toISOString(),...o};process.stderr.write(JSON.stringify(s)+`
26
+ `)}var x=Ke(j),Ye=zt({input:process.stdin,crlfDelay:1/0});Ye.on("line",async t=>{if(!t.trim())return;let e;try{e=JSON.parse(t)}catch{T("error","Failed to parse inbound message",{raw:t.slice(0,200)});return}try{switch(e.type){case"start_session":T("info","Starting session",{cwd:e.cwd,model:e.model});try{await x.startSession({cwd:e.cwd,model:e.model,permissionMode:e.permissionMode,resume:e.resume,relaySessionId:e.relaySessionId,sessionName:e.sessionName}),j({type:"session_ready"})}catch(o){j({type:"session_ready",error:String(o)})}break;case"user_message":T("info","User message received",{textLength:e.text?.length??0,targetAgentId:e.targetAgentId}),x.pushUserMessage(e.text,e.images,e.targetAgentId);break;case"interrupt":T("info","Interrupt requested"),x.interrupt();break;case"permission_response":T("info","Permission response",{requestId:e.requestId,decision:e.decision}),x.handlePermissionResponse(e.requestId,e.decision,e.allowForSession);break;case"ask_user_response":T("info","Ask user response",{toolId:e.toolId}),x.handleAskUserResponse(e.toolId,e.answers);break;case"set_model":T("info","Set model",{model:e.model}),await x.setModel(e.model);break;case"set_mode":T("info","Set mode",{mode:e.mode}),await x.setMode(e.mode);break;case"set_effort":T("info","Set effort",{effort:e.effort}),x.setEffort(e.effort);break;case"mcp_status":await x.mcpStatus();break;case"mcp_toggle":T("info","MCP toggle",{name:e.name,enabled:e.enabled}),await x.mcpToggle(e.name,e.enabled);break;case"mcp_reconnect":T("info","MCP reconnect",{name:e.name}),await x.mcpReconnect(e.name);break;case"mcp_set_servers":T("info","MCP set servers",{count:Object.keys(e.servers??{}).length}),await x.mcpSetServers(e.servers??{});break;case"mcp_permission_mode":T("info","MCP permission mode",{name:e.name,mode:e.mode}),await x.mcpPermissionMode(e.name,e.mode);break;case"mcp_auth_start":T("info","MCP auth start",{name:e.name}),x.mcpAuthStart(e.name);break;case"mcp_auth_redirect":T("info","MCP auth redirect received",{name:e.name}),x.mcpAuthRedirect(e.name,e.redirectUrl);break;case"mcp_auth_cancel":T("info","MCP auth cancelled",{name:e.name}),x.mcpAuthCancel(e.name);break;case"plugins_status":await x.pluginsStatus();break;case"plugins_reload":T("info","Plugins reload",{force:e.force===!0}),await x.pluginsReload(e.force===!0);break;case"plugin_toggle":T("info","Plugin toggle",{id:e.id,enabled:e.enabled}),await x.pluginToggle(e.id,e.enabled===!0);break;case"activate_agent_mode":T("info","Activate agent mode requested"),x.activateAgentMode();break;case"request_history":T("info","History request",{resume:e.resume}),await x.requestHistory(e.resume,e.relaySessionId);break;case"ping":j({type:"pong"});break;case"shutdown":T("info","Shutdown requested"),x.shutdown(),setTimeout(()=>process.exit(0),500);break;default:T("warn","Unknown message type",{type:e.type})}}catch(o){let s=o;T("error",`Error handling message type=${e.type}`,{error:s.message}),j({type:"error",text:`Internal bridge error: ${s.message}`})}});Ye.on("close",()=>{T("info","stdin closed, shutting down"),x.shutdown(),setTimeout(()=>process.exit(0),500)});process.on("uncaughtException",t=>{T("error","Uncaught exception",{error:t.message,stack:t.stack}),j({type:"error",text:`Bridge crash: ${t.message}`}),j({type:"done",code:1}),process.exit(1)});process.on("unhandledRejection",t=>{let e=t instanceof Error?t.message:String(t);T("error","Unhandled rejection",{error:e})});j({type:"ready"});T("info","SDK bridge ready");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibetonomy/agent",
3
- "version": "1.6.0",
3
+ "version": "1.6.2",
4
4
  "description": "Vibetonomy agent — managed Claude Code sessions via npx",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
@@ -15,11 +15,11 @@
15
15
  "@anthropic-ai/claude-agent-sdk": "0.3.285"
16
16
  },
17
17
  "optionalDependencies": {
18
- "@vibetonomy/agent-linux-x64": "1.6.0",
19
- "@vibetonomy/agent-linux-arm64": "1.6.0",
20
- "@vibetonomy/agent-darwin-arm64": "1.6.0",
21
- "@vibetonomy/agent-darwin-x64": "1.6.0",
22
- "@vibetonomy/agent-win-x64": "1.6.0"
18
+ "@vibetonomy/agent-linux-x64": "1.6.2",
19
+ "@vibetonomy/agent-linux-arm64": "1.6.2",
20
+ "@vibetonomy/agent-darwin-arm64": "1.6.2",
21
+ "@vibetonomy/agent-darwin-x64": "1.6.2",
22
+ "@vibetonomy/agent-win-x64": "1.6.2"
23
23
  },
24
24
  "engines": {
25
25
  "node": ">=18.0.0"