@vibetonomy/agent 1.5.40 → 1.5.42

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,6 +1,8 @@
1
- import{createInterface as Ce}from"node:readline";import{readdir as ie,readFile as le,rm as Me,stat as ve}from"node:fs/promises";import{join as P,basename as je,resolve as ne}from"node:path";import{homedir as xe}from"node:os";function se(t,e,s){if(e.session_id&&typeof e.session_id=="string"&&e.session_id!==t.cliSessionId&&(t.cliSessionId=e.session_id,s({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?s({type:"message_uuid",uuid:e.uuid,messageType:"user"}):e.type==="assistant"&&s({type:"message_uuid",uuid:e.uuid,messageType:"assistant"})),e.type==="system"&&e.subtype==="init"){e.slash_commands&&Array.isArray(e.slash_commands)&&s({type:"slash_commands",commands:e.slash_commands}),e.model&&typeof e.model=="string"&&s({type:"model_info",model:e.model,models:[]}),e.fast_mode_state&&typeof e.fast_mode_state=="string"&&s({type:"fast_mode_state",state:e.fast_mode_state});return}if(e.type==="stream_event"&&e.event){we(t,e.event,s);return}if((e.type==="assistant"||e.type==="user")&&e.message&&typeof e.message=="object"){let r=e.message.content;if(e.parent_tool_use_id&&typeof e.parent_tool_use_id=="string"){be(t,e,s);return}if(e.type==="assistant"&&!t.streamedText&&Array.isArray(r)){let a=r.filter(u=>u.type==="text").map(u=>u.text).join("");a&&s({type:"delta",text:a})}if(e.type==="user"){let a="";if(typeof r=="string"?a=r:Array.isArray(r)&&(a=r.filter(u=>u.type==="text").map(u=>u.text).join(`
2
- `)),a.indexOf("local-command-stdout")!==-1){let u=a.match(/<local-command-stdout>([\s\S]*?)<\/local-command-stdout>/);u&&s({type:"slash_command_result",text:u[1].trim()})}}if(Array.isArray(r)){for(let a of r)if(a.type==="tool_result"&&typeof a.tool_use_id=="string"&&!t.sentToolResults[a.tool_use_id]){t.activeTaskToolIds[a.tool_use_id]&&(s({type:"subagent_done",parentToolId:a.tool_use_id}),delete t.activeTaskToolIds[a.tool_use_id]);let u=t.teammateMap[a.tool_use_id];u&&(s({type:"teammate_status",parentToolId:a.tool_use_id,teammateName:u,status:a.is_error?"error":"idle"}),delete t.teammateMap[a.tool_use_id]);let m="";typeof a.content=="string"?m=a.content:Array.isArray(a.content)&&(m=a.content.filter(c=>c.type==="text").map(c=>c.text).join(`
3
- `)),t.sentToolResults[a.tool_use_id]=!0,s({type:"tool_result",id:a.tool_use_id,content:m,is_error:a.is_error||!1})}}return}if(e.type==="result"){t.blocks={},t.sentToolResults={},t.activeTaskToolIds={},t.taskIdMap={},t.teammateMap={},t.isProcessing=!1,s({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"&&s({type:"fast_mode_state",state:e.fast_mode_state}),s({type:"done",code:0}),t.responsePreview="",t.streamedText=!1;return}if(e.type==="system"&&e.subtype==="status"){e.status==="compacting"?(s({type:"compacting",active:!0}),t.compacting=!0):t.compacting&&(s({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),s({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,r=e.task_id,a=n||(r?Object.keys(t.taskIdMap).find(u=>t.taskIdMap[u]===r):void 0);if(a){s({type:"task_progress",parentToolId:a,taskId:r,usage:e.usage??null,lastToolName:e.last_tool_name||void 0,description:e.description||""});let u=t.teammateMap[a];if(u){let m=e.description||(e.last_tool_name?`Running ${e.last_tool_name}...`:void 0);s({type:"teammate_status",parentToolId:a,teammateName:u,status:"active",activityText:m})}}return}if(e.type==="tool_progress"){let n=e.parent_tool_use_id;if(n){s({type:"subagent_activity",parentToolId:n,text:e.content||""});let r=t.teammateMap[n];r&&s({type:"teammate_status",parentToolId:n,teammateName:r,status:"active",activityText:e.content||void 0})}return}if(e.type==="system"&&e.subtype==="task_notification"){let n=e.tool_use_id||void 0,r=e.task_id,a=n||(r?Object.keys(t.taskIdMap).find(u=>t.taskIdMap[u]===r):void 0);if(a){s({type:"subagent_done",parentToolId:a,status:e.status||"completed",summary:e.summary||"",usage:e.usage??null});let u=t.teammateMap[a];if(u){let m=e.status==="error"||e.status==="failed";s({type:"teammate_status",parentToolId:a,teammateName:u,status:m?"error":"idle",activityText:e.summary||void 0}),delete t.teammateMap[a]}}if(r){for(let u of Object.keys(t.taskIdMap))if(t.taskIdMap[u]===r){delete t.taskIdMap[u];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")&&s({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"){s({type:"prompt_suggestion",suggestion:e.suggestion||""});return}}function we(t,e,s){if(e.type==="content_block_start"){let n=e.content_block,r=e.index;n.type==="tool_use"?(t.blocks[r]={type:"tool_use",id:n.id,name:n.name,inputJson:""},s({type:"tool_start",id:n.id,name:n.name})):n.type==="thinking"?(t.blocks[r]={type:"thinking",thinkingText:"",startTime:Date.now()},s({type:"thinking_start"})):n.type==="text"&&(t.blocks[r]={type:"text"});return}if(e.type==="content_block_delta"&&e.delta){let n=e.index,r=e.delta;if(r.type==="text_delta"&&typeof r.text=="string"){if(t.streamedText=!0,t.responsePreview.length<200&&(t.responsePreview+=r.text),s({type:"delta",text:r.text}),t.teamActive){let a=r.text.matchAll(/teammate_id="([^"]+)"/g);for(let u of a){let m=u[1];(r.text.includes("idle_notification")||r.text.includes('"idleReason"'))&&s({type:"teammate_status",parentToolId:"",teammateName:m,status:"idle",activityText:"Idle"})}}}else r.type==="input_json_delta"&&t.blocks[n]?t.blocks[n].inputJson=(t.blocks[n].inputJson||"")+r.partial_json:r.type==="thinking_delta"&&t.blocks[n]&&(t.blocks[n].thinkingText=(t.blocks[n].thinkingText||"")+r.thinking,s({type:"thinking_delta",text:r.thinking}));return}if(e.type==="content_block_stop"){let n=e.index,r=t.blocks[n];if(r&&r.type==="tool_use"){let a={};try{a=JSON.parse(r.inputJson||"{}")}catch{}s({type:"tool_executing",id:r.id,name:r.name,input:a});let u=r.name;if((u==="Task"||u==="Agent"||u==="TeammateTool")&&(t.activeTaskToolIds[r.id]=!0,t.teamActive)){let m=a;if(m){let c=m.teammate_name||m.name||m.subagent_type,g=m.team_name||void 0;c&&(t.teammateMap[r.id]=c,s({type:"teammate_spawned",parentToolId:r.id,teammateName:c,teamName:g,description:m.description||m.prompt||""}))}}if(t.teamActive&&u==="SendMessage"){let m=a;if(m){let c=m.to;c&&c!=="*"&&s({type:"teammate_status",parentToolId:r.id,teammateName:c,status:"active",activityText:"Processing message\u2026"})}}}else if(r&&r.type==="thinking"){let a=r.startTime?(Date.now()-r.startTime)/1e3:0;s({type:"thinking_stop",duration:a})}delete t.blocks[n];return}}function be(t,e,s){let n=e.parent_tool_use_id,a=e.message.content;if(Array.isArray(a)&&e.type==="assistant")for(let u of a)if(u.type==="tool_use"){let m=Te(u.name,u.input);s({type:"subagent_tool",parentToolId:n,toolName:u.name,toolId:u.id,text:m})}else u.type==="thinking"?s({type:"subagent_activity",parentToolId:n,text:"Thinking..."}):u.type==="text"&&u.text&&s({type:"subagent_activity",parentToolId:n,text:"Writing response..."})}function Te(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 j(){let t=[],e=null,s=!1;return{push(n){if(!s)if(e){let r=e;e=null,r({value:n,done:!1})}else t.push(n)},end(){if(s=!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}):s?Promise.resolve({value:void 0,done:!0}):new Promise(n=>{e=n})}}}}}import{randomUUID as Ie}from"node:crypto";function re(t,e){let s={},n={},r={},a=c=>{let g=e?.();return g?{...c,relaySessionId:g}:c},u=(c,g)=>c(a(g)),m=c=>u(t,c);return{handleCanUseTool(c,g,h){return c==="AskUserQuestion"?new Promise(_=>{n[h.toolUseID]={resolve:_,input:g},h.signal&&h.signal.addEventListener("abort",()=>{delete n[h.toolUseID],m({type:"ask_user_answered",toolId:h.toolUseID}),_({behavior:"deny",message:"Cancelled"})})}):r[c]?Promise.resolve({behavior:"allow",updatedInput:g}):new Promise(_=>{let I=Ie();s[I]={resolve:_,requestId:I,toolName:c,toolInput:g,toolUseId:h.toolUseID},m({type:"permission_request",requestId:I,toolName:c,toolInput:g,toolUseId:h.toolUseID,decisionReason:h.decisionReason||""}),h.signal&&h.signal.addEventListener("abort",()=>{delete s[I],m({type:"permission_cancel",requestId:I}),_({behavior:"deny",message:"Request cancelled"})})})},handlePermissionResponse(c,g,h){let _=s[c];if(!_&&c.startsWith("hydrated-")){let I=c.slice(9),E=Object.keys(s).find(S=>s[S].toolUseId===I);E&&(_=s[E])}_&&(delete s[_.requestId],m({type:"permission_resolved",requestId:_.requestId,decision:g}),c!==_.requestId&&m({type:"permission_resolved",requestId:c,decision:g}),g==="allow"?(h&&(r[_.toolName]=!0),_.resolve({behavior:"allow",updatedInput:_.toolInput})):_.resolve({behavior:"deny",message:"User denied"}))},handleAskUserResponse(c,g){let h=n[c];if(!h)return;delete n[c],m({type:"ask_user_answered",toolId:c});let _=Object.assign({},h.input,{answers:g});h.resolve({behavior:"allow",updatedInput:_})},clearPending(c){for(let g of Object.keys(n))u(c,{type:"ask_user_answered",toolId:g}),n[g].resolve({behavior:"deny",message:"Session ended"}),delete n[g];for(let g of Object.keys(s))u(c,{type:"permission_cancel",requestId:g}),s[g].resolve({behavior:"deny",message:"Session ended"}),delete s[g]}}}function H(){return{cliSessionId:null,resumeToken:null,relaySessionId:null,sessionName:null,blocks:{},sentToolResults:{},streamedText:!1,responsePreview:"",activeTaskToolIds:{},taskIdMap:{},teammateMap:{},teamActive:!1,isProcessing:!1,compacting:!1}}var Se=`## Sending a file to the user
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(i=>i.type==="text").map(i=>i.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(i=>i.type==="text").map(i=>i.text).join(`
2
+ `)),c.indexOf("local-command-stdout")!==-1){let i=c.match(/<local-command-stdout>([\s\S]*?)<\/local-command-stdout>/);i&&a({type:"slash_command_result",text:i[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 i=t.teammateMap[c.tool_use_id];i&&(a({type:"teammate_status",parentToolId:c.tool_use_id,teammateName:i,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(i=>t.taskIdMap[i]===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 i=t.teammateMap[c];if(i){let g=e.description||(e.last_tool_name?`Running ${e.last_tool_name}...`:void 0);a({type:"teammate_status",parentToolId:c,teammateName:i,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(i=>t.taskIdMap[i]===o):void 0);if(c){a({type:"subagent_done",parentToolId:c,status:e.status||"completed",summary:e.summary||"",usage:e.usage??null});let i=t.teammateMap[c];if(i){let g=e.status==="error"||e.status==="failed";a({type:"teammate_status",parentToolId:c,teammateName:i,status:g?"error":"idle",activityText:e.summary||void 0}),delete t.teammateMap[c]}}if(o){for(let i of Object.keys(t.taskIdMap))if(t.taskIdMap[i]===o){delete t.taskIdMap[i];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 i of c){let g=i[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 i=o.name;if((i==="Task"||i==="Agent"||i==="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&&i==="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 i of c)if(i.type==="tool_use"){let g=je(i.name,i.input);a({type:"subagent_tool",parentToolId:n,toolName:i.name,toolId:i.id,text:g})}else i.type==="thinking"?a({type:"subagent_activity",parentToolId:n,text:"Thinking..."}):i.type==="text"&&i.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 J(){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},i=(u,f)=>u(c(f)),g=u=>i(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))i(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))i(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),i=He(n.annotations);e.push({name:o,...c?{description:c}:{},...i?{annotations:i}:{}})}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 i=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}:{},...i?{error:i}:{},...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:i}=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 i?.(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
4
6
 
5
7
  When the user asks you to send, download, or give them a file, emit this marker
6
8
  on a line of its own:
@@ -13,12 +15,12 @@ The agent replaces the marker with a downloadable chip in the chat. Rules:
13
15
  anything outside the workspace are refused.
14
16
  - Do NOT also paste the file's contents \u2014 the chip IS the delivery.
15
17
  - Only emit it when the user asked for the file. Never on your own initiative.
16
- - Files over 5 MB are refused; say so rather than emitting the marker.`,J=Se;var C={agents:[],teamName:null,leadSessionId:null,teamConfigDir:null};function ce(t,e){let s=JSON.parse(t);if(!s.members||s.members.length===0)return C;let n=[];for(let r of s.members)r.agentType!=="team-lead"&&n.push({id:r.name.toLowerCase().replace(/\s+/g,"-"),name:r.name,description:r.prompt||`${r.agentType} agent`,systemPrompt:r.prompt||"",defaultModel:r.model,agentType:r.agentType,color:r.color});return{agents:n,teamName:s.name||null,leadSessionId:s.leadSessionId||null,teamConfigDir:e}}async function Ae(t){let e=P(xe(),".claude","teams"),s=ne(t);try{let n=await ie(e);for(let r of n)try{let a=P(e,r),u=await le(P(a,"config.json"),"utf-8");if(!JSON.parse(u).members?.some(g=>g.cwd&&ne(g.cwd)===s))continue;return ce(u,a)}catch{}return C}catch{return C}}async function Ee(t){let e=P(t,".claude","teams");try{let s=await ie(e);for(let n of s)try{let r=P(e,n),a=await le(P(r,"config.json"),"utf-8");return ce(a,r)}catch{}return C}catch{return C}}var B=3,G=[2e3,5e3,1e4],ae=5e3,L="working directory no longer exists";function K(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(L)}async function z(t){if(!t)return!1;try{return!(await ve(t)).isDirectory()}catch{return!0}}function ue(t){let e=null,s=null,n=null,r=null,a=H(),u=null,m="",c=[],g=[],h="acceptEdits",_="medium",I="",E=0,S=C,Q=!1,N=null,b=t;t=o=>{if(o.type==="model_info"&&(o.models&&o.models.length>0&&(c=o.models),o.models=c,o.model&&(m=o.model)),o.type==="slash_commands"&&!o.commandDetails&&g.length>0&&(o.commandDetails=g),N){N(o);return}b(o)};async function Y(){if(e)return e;try{return e=await import("@anthropic-ai/claude-agent-sdk"),e}catch(o){let i=o;throw new Error(`Failed to load Claude SDK: ${i.message}`)}}async function X(o,i,f,l=B){let p;for(let d=0;d<l;d++){let y=G[d]??G[G.length-1];if(t({type:"info",text:`Reconnecting to Claude session (attempt ${d+1}/${l})...`}),await new Promise(T=>setTimeout(T,y)),i!==E)return console.error(`[sdk-runner] session generation changed during ${f}, aborting`),{ok:!1,reason:"generation-changed"};try{return o(d),console.error(`[sdk-runner] ${f} succeeded on attempt ${d+1}`),t({type:"info",text:"Reconnected to Claude session."}),{ok:!0}}catch(T){if(p=T,console.error(`[sdk-runner] ${f} attempt ${d+1} failed: ${p.message}`),K(p.message))return console.error(`[sdk-runner] non-retryable error during ${f}, giving up`),{ok:!1,reason:"non-retryable",error:p}}}return console.error(`[sdk-runner] ${f} all attempts exhausted`),{ok:!1,reason:"exhausted",error:p}}function me(o,i){if(i.length===0||i.find(d=>d.value===o))return o;let l=o.toLowerCase(),p=i.find(d=>d.value.toLowerCase().split("-").some(y=>y===l));return p?p.value:o}function V(o){return o.map(i=>({value:i.value,displayName:i.displayName,description:i.description,supportsEffort:i.supportsEffort,supportedEffortLevels:i.supportedEffortLevels}))}let fe={clear:""};function pe(o){let i=[];for(let f of o){if(!f||typeof f!="object")continue;let l=f,p=typeof l.name=="string"?l.name.replace(/^\/+/,"").trim():"";if(!p)continue;let d=typeof l.argumentHint=="string"?l.argumentHint:"";i.push({name:p,description:typeof l.description=="string"?l.description:"",argumentHint:fe[p]??d,...Array.isArray(l.aliases)?{aliases:l.aliases.filter(y=>typeof y=="string")}:{}})}return i}function Z(o){return o.length===0||JSON.stringify(o)===JSON.stringify(g)?!1:(g=o,t({type:"slash_commands",commands:o.map(i=>i.name),commandDetails:o}),!0)}async function ee(o,i){if(!o.supportedCommands)return null;let f;try{let l=await Promise.race([o.supportedCommands(),new Promise(p=>{f=setTimeout(()=>p(null),i)})]);return!l||!Array.isArray(l)||l.length===0?null:pe(l)}catch(l){return console.error(`[sdk-runner] supportedCommands failed: ${l.message}`),null}finally{f&&clearTimeout(f)}}let te=Promise.resolve();async function F(){let o=te.then(async()=>{if(!n)return;let i=await ee(n,ae);i&&Z(i)});return te=o.catch(()=>{}),o}async function ye(o,i){let f={[Symbol.asyncIterator](){return{next:()=>Promise.resolve({value:void 0,done:!0})}}},l=null;try{l=o.query({prompt:f,options:{cwd:i}}),l[Symbol.asyncIterator]().next().catch(()=>{});let d=null,y=!!l.initializationResult,T=!!l.supportedModels;if(console.error(`[sdk-runner] probe: initializationResult=${y}, supportedModels=${T}`),l.initializationResult){let k=await Promise.race([l.initializationResult(),new Promise(v=>setTimeout(()=>v(null),8e3))]);if(k?.models?.length)d=k.models,console.error(`[sdk-runner] probe: initializationResult returned ${d.length} models`);else if(console.error("[sdk-runner] probe: initializationResult returned no models, trying supportedModels fallback"),l.supportedModels){let v=await Promise.race([l.supportedModels(),new Promise(q=>setTimeout(()=>q(null),8e3))]);v?.length?(d=v,console.error(`[sdk-runner] probe: supportedModels fallback returned ${d.length} models`)):console.error("[sdk-runner] probe: supportedModels fallback returned no models")}}else if(l.supportedModels){let k=await Promise.race([l.supportedModels(),new Promise(v=>setTimeout(()=>v(null),8e3))]);k?.length?(d=k,console.error(`[sdk-runner] probe: supportedModels returned ${d.length} models`)):console.error("[sdk-runner] probe: supportedModels returned no models")}else console.error("[sdk-runner] probe: neither initializationResult nor supportedModels available");d&&d.length>0?(c=V(d),!m&&c.length>0&&(m=c[0].value),console.error(`[sdk-runner] probe: sending model_info with ${c.length} models`),t({type:"model_info",model:m,models:c})):console.error("[sdk-runner] probe: no models found from any method");let w=await ee(l,ae);w&&Z(w)}catch(p){console.error(`[sdk-runner] probe: error fetching models: ${p.message}`)}finally{l?.close&&l.close()}}async function oe(){if(!n)return;let o=E;try{for await(let i of n)se(a,i,t),i.type==="system"&&i.subtype==="init"&&F().catch(()=>{})}catch(i){if(o!==E)return;let f=i,l=f.name==="AbortError"||r&&r.signal.aborted,p=f.message||String(f),d=K(p);if(!l&&!d&&a.resumeToken&&(console.error(`[sdk-runner] query stream crashed: ${f.message}, attempting recovery`),await he(o)))return;let y=!l&&await z(I);a.isProcessing&&(a.isProcessing=!1,l?(t({type:"info",text:"Interrupted"}),t({type:"done",code:0})):y?(t({type:"error",text:`${L}: ${I}`}),t({type:"done",code:1})):d?(t({type:"error",text:"Conversation too long to continue."}),t({type:"done",code:1})):(t({type:"error",text:`Claude process error: ${f.message}`}),t({type:"done",code:1})))}finally{o===E&&(n=null,s=null,r=null,u&&u.clearPending(t))}}function ge(o,i){let f={cwd:I,settingSources:["user","project","local"],systemPrompt:J,includePartialMessages:!0,enableFileCheckpointing:!0,enableAutoMode:!0,abortController:i,promptSuggestions:!0,resume:o,permissionMode:h,effort:_};return m&&(f.model=m),u&&(f.canUseTool=(l,p,d)=>u.handleCanUseTool(l,p,d)),S.teamName&&(f.env={...process.env,CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS:"1",CLAUDE_CODE_TEAM_NAME:S.teamName.toLowerCase()}),f}async function he(o){if(!e)return!1;let i=e,f=a.resumeToken;return f?await z(I)?(console.error(`[sdk-runner] skipping recovery \u2014 ${L}: ${I}`),!1):(await X(()=>{s=j(),r=new AbortController;let p=ge(f,r);n=i.query({prompt:s,options:p}),a.isProcessing=!0,E++,oe().catch(d=>{console.error("[sdk-runner] recovered stream error:",d)})},o,"stream-crash-recovery")).ok:!1}let x="done",R="",D=0,U=0,O=null;function _e(){N=o=>{if(o.type==="delta"&&typeof o.text=="string"&&(R+=o.text),o.type==="delta"&&typeof o.text=="string"){let i=o.text,f=i.matchAll(/teammate_id="([^"]+)"/g);for(let l of f){let p=l[1];(i.includes("idle_notification")||i.includes("online"))&&b({type:"teammate_status",parentToolId:"",teammateName:p,status:"idle",activityText:"Online"})}}if(o.type==="done"||o.type==="result"){if(x==="broadcast_test"){let i=R.toUpperCase(),f=i.includes("TEAM_READY")||i.includes("BROADCAST")&&i.includes("SUCCESS")||i.includes("MESSAGE SENT"),l=i.includes("TEAM_NEEDS_REBUILD")||i.includes("NOT IN A TEAM")||i.includes("NO TEAM")||i.includes("ERROR");f&&!l?(x="done",N=null,b({type:"agent_mode_status",statusText:"Team is ready!"}),b({type:"agent_mode_ready",success:!0}),b(o)):(x="spawning",R="",b({type:"agent_mode_status",statusText:"Spawning teammates\u2026"}),ke());return}if(x==="spawning"){Q=!0,x="waiting_for_teammates",U=0,D=S.agents.filter(i=>i.agentType!=="team-lead").length,b({type:"agent_mode_status",statusText:`Waiting for ${D} teammates to come online\u2026`}),b(o),O=setTimeout(()=>{x==="waiting_for_teammates"&&(x="done",N=null,b({type:"agent_mode_status",statusText:"Team is ready!"}),b({type:"agent_mode_ready",success:!0}))},45e3);return}}if(x!=="done"){(o.type==="teammate_spawned"||o.type==="teammate_status"||o.type==="session_id")&&(b(o),x==="waiting_for_teammates"&&o.type==="teammate_spawned"&&(U++,b({type:"agent_mode_status",statusText:`Teammates online: ${U}/${D}\u2026`}),U>=D&&(O&&(clearTimeout(O),O=null),x="done",N=null,b({type:"agent_mode_status",statusText:"Team is ready!"}),b({type:"agent_mode_ready",success:!0}))));return}b(o)}}function ke(){if(!s||!S.teamName){b({type:"agent_mode_ready",success:!1,error:"Cannot spawn team \u2014 no session or template"});return}(S.teamConfigDir?Me(S.teamConfigDir,{recursive:!0,force:!0}).catch(()=>{}):Promise.resolve()).then(()=>{let i=S.agents.map(l=>{let p=l.defaultModel?` (model: ${l.defaultModel})`:"";return`- **${l.name}** \u2014 ${l.agentType||"general-purpose"}${p}: ${l.description}`}).join(`
17
- `),f=[`Create an agent team called "${S.teamName.toLowerCase()}" with the following teammates, all using in-process mode:`,"",i,"","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(`
18
- `);s.push({type:"user",message:{role:"user",content:[{type:"text",text:f}]}})})}let W={async startSession(o){if(await z(o.cwd)){let y=`${L}: ${o.cwd}`;console.error(`[sdk-runner] startSession: ${y}`),t({type:"error",text:y}),t({type:"done",code:1}),t({type:"session_ready",error:y});return}let i=await Y();c.length===0?(console.error("[sdk-runner] startSession: no cached models, launching probe"),ye(i,o.cwd).catch(y=>{console.error(`[sdk-runner] startSession: probe failed: ${y.message}`)})):console.error(`[sdk-runner] startSession: ${c.length} models already cached, skipping probe`),Q=!1;let f=C;try{f=await Ee(o.cwd)}catch{}let l=C;try{l=await Ae(o.cwd)}catch{}f.agents.length>0?S={agents:f.agents,teamName:f.teamName||l.teamName,leadSessionId:l.leadSessionId,teamConfigDir:l.teamConfigDir}:S={agents:[],teamName:l.teamName,leadSessionId:l.leadSessionId,teamConfigDir:l.teamConfigDir},t({type:"agent_team_loaded",agents:S.agents}),E++;let p=E;a=H(),a.isProcessing=!0,a.teamActive=S.agents.length>0,o.relaySessionId&&(a.relaySessionId=o.relaySessionId),o.sessionName&&(a.sessionName=o.sessionName),u=re(t,()=>a.relaySessionId),s=j(),o.initialMessage&&s.push(o.initialMessage),r=new AbortController,I=o.cwd;let d={cwd:o.cwd,settingSources:["user","project","local"],systemPrompt:J,includePartialMessages:!0,enableFileCheckpointing:!0,enableAutoMode:!0,abortController:r,promptSuggestions:!0,canUseTool:(y,T,w)=>u.handleCanUseTool(y,T,w)};if(S.teamName&&(d.env={...process.env,CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS:"1",CLAUDE_CODE_TEAM_NAME:S.teamName.toLowerCase()}),o.model&&(d.model=o.model,m=o.model),o.permissionMode?(d.permissionMode=o.permissionMode,h=o.permissionMode):d.permissionMode=h,d.effort=_,o.sessionName&&!o.resume&&(d.title=o.sessionName),o.resume){if(d.resume=o.resume,a.cliSessionId=o.resume,a.resumeToken=o.resume,i.getSessionMessages)try{let y=await i.getSessionMessages(o.resume);y&&y.length>0&&t({type:"session_history",messages:y,...a.relaySessionId?{relaySessionId:a.relaySessionId}:{}})}catch(y){t({type:"info",text:`Could not restore session history: ${y.message}`})}t({type:"config_state",model:m,mode:h,effort:_,betas:[]})}try{n=i.query({prompt:s,options:d})}catch(y){let T=y;if(console.error(`[sdk-runner] query start failed (attempt 1/${B+1}): ${T.message}`),K(T.message)){a.isProcessing=!1,n=null,s=null,r=null,t({type:"error",text:`Failed to start query: ${T.message}`}),t({type:"done",code:1}),t({type:"session_ready",error:T.message});return}let w=await X(()=>{s=j(),r=new AbortController,d.abortController=r,n=i.query({prompt:s,options:d})},p,"query-start-retry");if(!w.ok){if(w.reason!=="generation-changed"){a.isProcessing=!1,n=null,s=null,r=null;let k=w.reason==="exhausted"?`Failed to start query after ${B+1} attempts: ${w.error?.message??T.message}`:`Failed to start query: ${w.error?.message??T.message}`;t({type:"error",text:k}),t({type:"done",code:1}),t({type:"session_ready",error:k})}return}}if(n?.supportedModels){let y=n;(async()=>{let w=[500,1500,3e3,5e3];for(let k=0;k<w.length;k++){if(c.length>0){console.error(`[sdk-runner] real query: models already populated (attempt ${k}), skipping`);return}try{console.error(`[sdk-runner] real query: calling supportedModels() attempt ${k}`);let v=await Promise.race([y.supportedModels(),new Promise(q=>setTimeout(()=>q(null),w[k]))]);if(v&&v.length>0){c=V(v),!m&&c.length>0&&(m=c[0].value),console.error(`[sdk-runner] real query: supportedModels returned ${c.length} models on attempt ${k}`),t({type:"model_info",model:m,models:c});return}console.error(`[sdk-runner] real query: supportedModels returned empty on attempt ${k}`)}catch(v){console.error(`[sdk-runner] real query: supportedModels error on attempt ${k}: ${v.message}`)}k<w.length-1&&await new Promise(v=>setTimeout(v,w[k]))}console.error("[sdk-runner] real query: all supportedModels attempts exhausted")})().catch(()=>{})}else console.error("[sdk-runner] real query: supportedModels not available on query instance");F().catch(()=>{}),oe().catch(()=>{}),t({type:"session_ready"})},activateAgentMode(){if(!s){b({type:"agent_mode_ready",success:!1,error:"No active session"});return}if(S.agents.length===0||!S.teamName){b({type:"agent_mode_ready",success:!1,error:"No team template found"});return}if(x!=="done")return;b({type:"agent_mode_status",statusText:"Checking team status\u2026"}),x="broadcast_test",R="",_e();let o=['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(`
19
- `);s.push({type:"user",message:{role:"user",content:[{type:"text",text:o}]}})},async requestHistory(o,i){let f=await Y(),l=i||a.relaySessionId,p=o||a.cliSessionId;if(p&&f.getSessionMessages)try{let d=await f.getSessionMessages(p);if(d&&d.length>0)t({type:"session_history",messages:d,...l?{relaySessionId:l}:{}});else if(a.cliSessionId&&a.cliSessionId!==p){let y=await f.getSessionMessages(a.cliSessionId);y&&y.length>0&&(t({type:"session_history",messages:y,...l?{relaySessionId:l}:{}}),t({type:"session_id",cliSessionId:a.cliSessionId,...l?{relaySessionId:l}:{}}))}}catch(d){t({type:"info",text:`Could not restore session history: ${d.message}`})}c.length>0&&t({type:"model_info",model:m,models:c,...l?{relaySessionId:l}:{}}),t({type:"config_state",model:m,mode:h,effort:_,betas:[],...l?{relaySessionId:l}:{}})},pushUserMessage(o,i,f){if(f&&o&&(o=`Use SendMessage to send the following to teammate "${f}":
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),i=await be(L(c,"config.json"),"utf-8");if(!JSON.parse(i).members?.some(f=>f.cwd&&we(f.cwd)===a))continue;return Me(i,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,B="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(B)}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,i=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,l=re){let y;for(let m=0;m<l;m++){let h=oe[m]??oe[oe.length-1];if(t({type:"info",text:`Reconnecting to Claude session (attempt ${m+1}/${l})...`}),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 l=r.toLowerCase(),y=s.find(m=>m.value.toLowerCase().split("-").some(h=>h===l));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 l=d,y=typeof l.name=="string"?l.name.replace(/^\/+/,"").trim():"";if(!y)continue;let m=typeof l.argumentHint=="string"?l.argumentHint:"";s.push({name:y,description:typeof l.description=="string"?l.description:"",argumentHint:Ae[y]??m,...Array.isArray(l.aliases)?{aliases:l.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 l=await Promise.race([r.supportedCommands(),new Promise(y=>{d=setTimeout(()=>y(null),s)})]);return!l||!Array.isArray(l)||l.length===0?null:Ee(l)}catch(l){return console.error(`[sdk-runner] supportedCommands failed: ${l.message}`),null}finally{d&&clearTimeout(d)}}let de=Promise.resolve();async function K(){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(),l=ee(d,Y());return t({type:"mcp_status_result",servers:l}),l.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 q(r,s,d,l){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=l?.(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})}}},l=null;try{l=r.query({prompt:d,options:{cwd:s}}),l[Symbol.asyncIterator]().next().catch(()=>{});let m=null,h=!!l.initializationResult,I=!!l.supportedModels;if(console.error(`[sdk-runner] probe: initializationResult=${h}, supportedModels=${I}`),l.initializationResult){let x=await Promise.race([l.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"),l.supportedModels){let $=await Promise.race([l.supportedModels(),new Promise(G=>setTimeout(()=>G(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(l.supportedModels){let x=await Promise.race([l.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(l,ke);E&&ce(E)}catch(y){console.error(`[sdk-runner] probe: error fetching models: ${y.message}`)}finally{l?.close&&l.close()}}async function pe(){if(!o)return;let r=P;try{for await(let s of o)ye(i,s,t),s.type==="system"&&s.subtype==="init"&&K().catch(()=>{})}catch(s){if(r!==P)return;let d=s,l=d.name==="AbortError"||c&&c.signal.aborted,y=d.message||String(d),m=se(y);if(!l&&!m&&i.resumeToken&&(console.error(`[sdk-runner] query stream crashed: ${d.message}, attempting recovery`),await $e(r)))return;let h=!l&&await ne(R);i.isProcessing&&(i.isProcessing=!1,l?(t({type:"info",text:"Interrupted"}),t({type:"done",code:0})):h?(t({type:"error",text:`${B}: ${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=(l,y,m)=>g.handleCanUseTool(l,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=i.resumeToken;return d?await ne(R)?(console.error(`[sdk-runner] skipping recovery \u2014 ${B}: ${R}`),!1):(await ie(()=>{n=J(),c=new AbortController;let y=Pe(d,c);o=s.query({prompt:n,options:y}),i.isProcessing=!0,P++,pe().catch(m=>{console.error("[sdk-runner] recovered stream error:",m)})},r,"stream-crash-recovery")).ok:!1}let N="done",F="",z=0,W=0,H=null;function Ne(){S=r=>{if(r.type==="delta"&&typeof r.text=="string"&&(F+=r.text),r.type==="delta"&&typeof r.text=="string"){let s=r.text,d=s.matchAll(/teammate_id="([^"]+)"/g);for(let l of d){let y=l[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=F.toUpperCase(),d=s.includes("TEAM_READY")||s.includes("BROADCAST")&&s.includes("SUCCESS")||s.includes("MESSAGE SENT"),l=s.includes("TEAM_NEEDS_REBUILD")||s.includes("NOT IN A TEAM")||s.includes("NO TEAM")||s.includes("ERROR");d&&!l?(N="done",S=null,v({type:"agent_mode_status",statusText:"Team is ready!"}),v({type:"agent_mode_ready",success:!0}),v(r)):(N="spawning",F="",v({type:"agent_mode_status",statusText:"Spawning teammates\u2026"}),Oe());return}if(N==="spawning"){k=!0,N="waiting_for_teammates",W=0,z=p.agents.filter(s=>s.agentType!=="team-lead").length,v({type:"agent_mode_status",statusText:`Waiting for ${z} teammates to come online\u2026`}),v(r),H=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"&&(W++,v({type:"agent_mode_status",statusText:`Teammates online: ${W}/${z}\u2026`}),W>=z&&(H&&(clearTimeout(H),H=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(l=>{let y=l.defaultModel?` (model: ${l.defaultModel})`:"";return`- **${l.name}** \u2014 ${l.agentType||"general-purpose"}${y}: ${l.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=`${B}: ${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 l=D;try{l=await at(r.cwd)}catch{}d.agents.length>0?p={agents:d.agents,teamName:d.teamName||l.teamName,leadSessionId:l.leadSessionId,teamConfigDir:l.teamConfigDir}:p={agents:[],teamName:l.teamName,leadSessionId:l.leadSessionId,teamConfigDir:l.teamConfigDir},t({type:"agent_team_loaded",agents:p.agents}),P++;let y=P;i=Z(),i.isProcessing=!0,i.teamActive=p.agents.length>0,r.relaySessionId&&(i.relaySessionId=r.relaySessionId),r.sessionName&&(i.sessionName=r.sessionName),g=ge(t,()=>i.relaySessionId),n=J(),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,i.cliSessionId=r.resume,i.resumeToken=r.resume,s.getSessionMessages)try{let h=await s.getSessionMessages(r.resume);h&&h.length>0&&t({type:"session_history",messages:h,...i.relaySessionId?{relaySessionId:i.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)){i.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=J(),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"){i.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(G=>setTimeout(()=>G(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");K().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",F="",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(),l=s||i.relaySessionId,y=r||i.cliSessionId;if(y&&d.getSessionMessages)try{let m=await d.getSessionMessages(y);if(m&&m.length>0)t({type:"session_history",messages:m,...l?{relaySessionId:l}:{}});else if(i.cliSessionId&&i.cliSessionId!==y){let h=await d.getSessionMessages(i.cliSessionId);h&&h.length>0&&(t({type:"session_history",messages:h,...l?{relaySessionId:l}:{}}),t({type:"session_id",cliSessionId:i.cliSessionId,...l?{relaySessionId:l}:{}}))}}catch(m){t({type:"info",text:`Could not restore session history: ${m.message}`})}f.length>0&&t({type:"model_info",model:u,models:f,...l?{relaySessionId:l}:{}}),t({type:"config_state",model:u,mode:_,effort:A,betas:[],...l?{relaySessionId:l}:{}})},pushUserMessage(r,s,d){if(d&&r&&(r=`Use SendMessage to send the following to teammate "${d}":
20
22
 
21
- ${o}`),o&&o.startsWith("/")){let p=o.split(/\s/)[0].toLowerCase();if(p==="/clear"){E++,r&&r.abort(),s&&s.end(),this.startSession({cwd:I,model:m||void 0,permissionMode:h||void 0}).then(()=>{t({type:"slash_command_result",command:"clear",text:"Conversation cleared."})}).catch(d=>{t({type:"error",text:`Failed to clear session: ${d.message}`})});return}if(p==="/status"){let d=["**Bridge Status**","",`**Model:** ${m||"(not set)"}`,`**Available Models:** ${c.length>0?c.map(y=>`${y.displayName} (${y.value})`).join(", "):"(none discovered yet)"}`,`**Effort:** ${_}`,`**Permission Mode:** ${h}`,`**Session Active:** ${n?"yes":"no"}`,`**CLI Session:** ${a.cliSessionId||"(none)"}`,`**Working Directory:** ${I||"(not set)"}`,"","**Raw SDK Model Data:**","```json",JSON.stringify(c,null,2),"```"];t({type:"slash_command_result",command:"status",text:d.join(`
22
- `)});return}}if(!s){if(I){console.error("[sdk-runner] pushUserMessage: no active stream, restarting bridge"),t({type:"info",text:"Reconnecting..."});let p=[];if(i&&i.length>0)for(let w of i)p.push({type:"image",source:{type:"base64",media_type:w.mediaType,data:w.data}});o&&p.push({type:"text",text:o});let d={type:"user",message:{role:"user",content:p}},y={cwd:I,model:m||void 0,permissionMode:h||void 0};(async()=>{try{await W.startSession({...y,...a.resumeToken?{resume:a.resumeToken}:{},initialMessage:d})}catch(w){console.error(`[sdk-runner] resume restart failed: ${w.message}, trying fresh`);try{await W.startSession({...y,initialMessage:d})}catch(k){t({type:"error",text:`Session restart failed: ${k.message}`}),t({type:"done",code:1})}}})();return}t({type:"error",text:"No active session"});return}let l=[];if(i&&i.length>0)for(let p of i)l.push({type:"image",source:{type:"base64",media_type:p.mediaType,data:p.data}});o&&l.push({type:"text",text:o}),o&&t({type:"user_message",text:o}),a.isProcessing=!0,a.streamedText=!1,a.responsePreview="",a.blocks={},a.sentToolResults={},s.push({type:"user",message:{role:"user",content:l}})},interrupt(){n?.interrupt?n.interrupt().catch(()=>{r&&r.abort()}):r&&r.abort()},async setModel(o){let i=me(o,c);if(!n?.setModel){m=i,t({type:"model_info",model:i,models:c});return}try{await n.setModel(i),m=i,t({type:"model_info",model:i,models:[]}),t({type:"config_state",model:m,mode:h,effort:_,betas:[]})}catch(f){t({type:"error",text:`Failed to switch model: ${f.message}`})}},async setMode(o){if(!n?.setPermissionMode){h=o,t({type:"config_state",model:m,mode:h,effort:_,betas:[]});return}try{await n.setPermissionMode(o),h=o,t({type:"config_state",model:m,mode:h,effort:_,betas:[]})}catch(i){t({type:"error",text:`Failed to set permission mode: ${i.message}`})}},setEffort(o){["low","medium","high","xhigh","max"].includes(o)||(console.warn(`[sdk-runner] Unknown effort level "${o}", defaulting to medium`),o="medium"),_=o,t({type:"config_state",model:m,mode:h,effort:_,betas:[]})},handlePermissionResponse(o,i,f){u?.handlePermissionResponse(o,i,f)},handleAskUserResponse(o,i){u?.handleAskUserResponse(o,i)},refreshSlashCommands:F,shutdown(){n?.close?n.close():r&&r.abort(),s&&s.end()}};return W}function $(t){let e=JSON.stringify(t);process.stdout.write(e+`
23
- `)}function M(t,e,s){let n={level:t,message:e,ts:new Date().toISOString(),...s};process.stderr.write(JSON.stringify(n)+`
24
- `)}var A=ue($),de=Ce({input:process.stdin,crlfDelay:1/0});de.on("line",async t=>{if(!t.trim())return;let e;try{e=JSON.parse(t)}catch{M("error","Failed to parse inbound message",{raw:t.slice(0,200)});return}try{switch(e.type){case"start_session":M("info","Starting session",{cwd:e.cwd,model:e.model});try{await A.startSession({cwd:e.cwd,model:e.model,permissionMode:e.permissionMode,resume:e.resume,relaySessionId:e.relaySessionId,sessionName:e.sessionName}),$({type:"session_ready"})}catch(s){$({type:"session_ready",error:String(s)})}break;case"user_message":M("info","User message received",{textLength:e.text?.length??0,targetAgentId:e.targetAgentId}),A.pushUserMessage(e.text,e.images,e.targetAgentId);break;case"interrupt":M("info","Interrupt requested"),A.interrupt();break;case"permission_response":M("info","Permission response",{requestId:e.requestId,decision:e.decision}),A.handlePermissionResponse(e.requestId,e.decision,e.allowForSession);break;case"ask_user_response":M("info","Ask user response",{toolId:e.toolId}),A.handleAskUserResponse(e.toolId,e.answers);break;case"set_model":M("info","Set model",{model:e.model}),await A.setModel(e.model);break;case"set_mode":M("info","Set mode",{mode:e.mode}),await A.setMode(e.mode);break;case"set_effort":M("info","Set effort",{effort:e.effort}),A.setEffort(e.effort);break;case"activate_agent_mode":M("info","Activate agent mode requested"),A.activateAgentMode();break;case"request_history":M("info","History request",{resume:e.resume}),await A.requestHistory(e.resume,e.relaySessionId);break;case"ping":$({type:"pong"});break;case"shutdown":M("info","Shutdown requested"),A.shutdown(),setTimeout(()=>process.exit(0),500);break;default:M("warn","Unknown message type",{type:e.type})}}catch(s){let n=s;M("error",`Error handling message type=${e.type}`,{error:n.message}),$({type:"error",text:`Internal bridge error: ${n.message}`})}});de.on("close",()=>{M("info","stdin closed, shutting down"),A.shutdown(),setTimeout(()=>process.exit(0),500)});process.on("uncaughtException",t=>{M("error","Uncaught exception",{error:t.message,stack:t.stack}),$({type:"error",text:`Bridge crash: ${t.message}`}),$({type:"done",code:1}),process.exit(1)});process.on("unhandledRejection",t=>{let e=t instanceof Error?t.message:String(t);M("error","Unhandled rejection",{error:e})});$({type:"ready"});M("info","SDK bridge ready");
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:** ${i.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,...i.resumeToken?{resume:i.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 l=[];if(s&&s.length>0)for(let y of s)l.push({type:"image",source:{type:"base64",media_type:y.mediaType,data:y.data}});r&&l.push({type:"text",text:r}),r&&t({type:"user_message",text:r}),i.isProcessing=!0,i.streamedText=!1,i.responsePreview="",i.blocks={},i.sentToolResults={},n.push({type:"user",message:{role:"user",content:l}})},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:K,mcpStatus:V,async mcpToggle(r,s){await q("toggle",r,d=>d.toggleMcpServer?.(r,s))},async mcpReconnect(r){await q("reconnect",r,s=>s.reconnectMcpServer?.(r))},async mcpSetServers(r){await q("set_servers",void 0,s=>s.setMcpServers?.(r),s=>{let d=s?.errors;if(!d)return null;let l=Object.entries(d);return l.length===0?null:l.map(([y,m])=>`${y}: ${m}`).join("; ")})},async mcpPermissionMode(r,s){let d=he(s),l=Y(),y=l.get(r)??null;d===null?l.delete(r):l.set(r,d),await q("permission_mode",r,h=>h.setMcpPermissionModeOverride?.(r,d))||(y===null?l.delete(r):l.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");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibetonomy/agent",
3
- "version": "1.5.40",
3
+ "version": "1.5.42",
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.248"
16
16
  },
17
17
  "optionalDependencies": {
18
- "@vibetonomy/agent-linux-x64": "1.5.40",
19
- "@vibetonomy/agent-linux-arm64": "1.5.40",
20
- "@vibetonomy/agent-darwin-arm64": "1.5.40",
21
- "@vibetonomy/agent-darwin-x64": "1.5.40",
22
- "@vibetonomy/agent-win-x64": "1.5.40"
18
+ "@vibetonomy/agent-linux-x64": "1.5.42",
19
+ "@vibetonomy/agent-linux-arm64": "1.5.42",
20
+ "@vibetonomy/agent-darwin-arm64": "1.5.42",
21
+ "@vibetonomy/agent-darwin-x64": "1.5.42",
22
+ "@vibetonomy/agent-win-x64": "1.5.42"
23
23
  },
24
24
  "engines": {
25
25
  "node": ">=18.0.0"