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