@vibetonomy/agent 0.9.0 → 1.1.0
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 +6 -5
- package/package.json +6 -6
package/bridge/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import{createInterface as
|
|
2
|
-
`)),i.indexOf("local-command-stdout")!==-1){let
|
|
3
|
-
`)),t.sentToolResults[i.tool_use_id]=!0,r({type:"tool_result",id:i.tool_use_id,content:n,is_error:i.is_error||!1})}}return}if(e.type==="result"){t.blocks={},t.sentToolResults={},t.activeTaskToolIds={},t.taskIdMap={},t.isProcessing=!1,r({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"&&r({type:"fast_mode_state",state:e.fast_mode_state}),r({type:"done",code:0}),t.responsePreview="",t.streamedText=!1;return}if(e.type==="system"&&e.subtype==="status"){e.status==="compacting"?(r({type:"compacting",active:!0}),t.compacting=!0):t.compacting&&(r({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),r({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;s&&r({type:"task_progress",parentToolId:s,taskId:e.task_id,usage:e.usage??null,lastToolName:e.last_tool_name||void 0,description:e.description||""});return}if(e.type==="tool_progress"){let s=e.parent_tool_use_id;s&&r({type:"subagent_activity",parentToolId:s,text:e.content||""});return}if(e.type==="task_notification"){let s=e.parent_tool_use_id;if(s&&r({type:"subagent_done",parentToolId:s,status:e.status||"completed",summary:e.summary||"",usage:e.usage??null}),e.task_id&&typeof e.task_id=="string"){for(let o of Object.keys(t.taskIdMap))if(t.taskIdMap[o]===e.task_id){delete t.taskIdMap[o];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")&&r({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"){r({type:"prompt_suggestion",suggestion:e.suggestion||""});return}}function P(t,e,r){if(e.type==="content_block_start"){let s=e.content_block,o=e.index;s.type==="tool_use"?(t.blocks[o]={type:"tool_use",id:s.id,name:s.name,inputJson:""},r({type:"tool_start",id:s.id,name:s.name})):s.type==="thinking"?(t.blocks[o]={type:"thinking",thinkingText:"",startTime:Date.now()},r({type:"thinking_start"})):s.type==="text"&&(t.blocks[o]={type:"text"});return}if(e.type==="content_block_delta"&&e.delta){let s=e.index,o=e.delta;o.type==="text_delta"&&typeof o.text=="string"?(t.streamedText=!0,t.responsePreview.length<200&&(t.responsePreview+=o.text),r({type:"delta",text:o.text})):o.type==="input_json_delta"&&t.blocks[s]?t.blocks[s].inputJson=(t.blocks[s].inputJson||"")+o.partial_json:o.type==="thinking_delta"&&t.blocks[s]&&(t.blocks[s].thinkingText=(t.blocks[s].thinkingText||"")+o.thinking,r({type:"thinking_delta",text:o.thinking}));return}if(e.type==="content_block_stop"){let s=e.index,o=t.blocks[s];if(o&&o.type==="tool_use"){let i={};try{i=JSON.parse(o.inputJson||"{}")}catch{}r({type:"tool_executing",id:o.id,name:o.name,input:i}),o.name==="Task"&&(t.activeTaskToolIds[o.id]=!0)}else if(o&&o.type==="thinking"){let i=o.startTime?(Date.now()-o.startTime)/1e3:0;r({type:"thinking_stop",duration:i})}delete t.blocks[s];return}}function U(t,e,r){let s=e.parent_tool_use_id,i=e.message.content;if(Array.isArray(i)&&e.type==="assistant")for(let n of i)if(n.type==="tool_use"){let l=A(n.name,n.input);r({type:"subagent_tool",parentToolId:s,toolName:n.name,toolId:n.id,text:l})}else n.type==="thinking"?r({type:"subagent_activity",parentToolId:s,text:"Thinking..."}):n.type==="text"&&n.text&&r({type:"subagent_activity",parentToolId:s,text:"Writing response..."})}function A(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 S(){let t=[],e=null,r=!1;return{push(s){if(!r)if(e){let o=e;e=null,o({value:s,done:!1})}else t.push(s)},end(){if(r=!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}):r?Promise.resolve({value:void 0,done:!0}):new Promise(s=>{e=s})}}}}}import{randomUUID as R}from"node:crypto";function w(t){let e={},r={},s={};return{handleCanUseTool(o,i,n){return o==="AskUserQuestion"?new Promise(l=>{r[n.toolUseID]={resolve:l,input:i},n.signal&&n.signal.addEventListener("abort",()=>{delete r[n.toolUseID],t({type:"ask_user_answered",toolId:n.toolUseID}),l({behavior:"deny",message:"Cancelled"})})}):s[o]?Promise.resolve({behavior:"allow",updatedInput:i}):new Promise(l=>{let y=R();e[y]={resolve:l,requestId:y,toolName:o,toolInput:i},t({type:"permission_request",requestId:y,toolName:o,toolInput:i,toolUseId:n.toolUseID,decisionReason:n.decisionReason||""}),n.signal&&n.signal.addEventListener("abort",()=>{delete e[y],t({type:"permission_cancel",requestId:y}),l({behavior:"deny",message:"Request cancelled"})})})},handlePermissionResponse(o,i,n){let l=e[o];l&&(delete e[o],t({type:"permission_resolved",requestId:o,decision:i}),i==="allow"?(n&&(s[l.toolName]=!0),l.resolve({behavior:"allow",updatedInput:l.toolInput})):l.resolve({behavior:"deny",message:"User denied"}))},handleAskUserResponse(o,i){let n=r[o];if(!n)return;delete r[o],t({type:"ask_user_answered",toolId:o});let l=Object.assign({},n.input,{answers:i});n.resolve({behavior:"allow",updatedInput:l})},clearPending(o){for(let i of Object.keys(r))o({type:"ask_user_answered",toolId:i}),r[i].resolve({behavior:"deny",message:"Session ended"}),delete r[i];for(let i of Object.keys(e))o({type:"permission_cancel",requestId:i}),e[i].resolve({behavior:"deny",message:"Session ended"}),delete e[i]}}}function k(){return{cliSessionId:null,relaySessionId:null,blocks:{},sentToolResults:{},streamedText:!1,responsePreview:"",activeTaskToolIds:{},taskIdMap:{},isProcessing:!1,compacting:!1}}function T(t){let e=null,r=null,s=null,o=null,i=k(),n=null,l="",y="acceptEdits",b="",_=0;async function I(){if(e)return e;try{return e=await import("@anthropic-ai/claude-agent-sdk"),e}catch(a){let c=a;throw new Error(`Failed to load Claude SDK: ${c.message}`)}}async function M(){if(!s)return;let a=_;try{for await(let c of s)x(i,c,t)}catch(c){if(a!==_)return;let u=c;if(i.isProcessing)if(i.isProcessing=!1,u.name==="AbortError"||o&&o.signal.aborted)t({type:"info",text:"Interrupted"}),t({type:"done",code:0});else{let f=(u.message||String(u)).toLowerCase(),h=f.includes("prompt is too long")||f.includes("context_length")||f.includes("maximum context length");t(h?{type:"error",text:"Conversation too long to continue."}:{type:"error",text:`Claude process error: ${u.message}`}),t({type:"done",code:1})}}finally{a===_&&(s=null,r=null,o=null,n&&n.clearPending(t))}}return{async startSession(a){let c=await I();_++,i=k(),i.isProcessing=!0,a.relaySessionId&&(i.relaySessionId=a.relaySessionId),n=w(t),r=S(),o=new AbortController,b=a.cwd;let u={cwd:a.cwd,settingSources:["user","project","local"],includePartialMessages:!0,enableFileCheckpointing:!0,abortController:o,promptSuggestions:!0,canUseTool:(d,f,h)=>n.handleCanUseTool(d,f,h)};if(a.model&&(u.model=a.model,l=a.model),a.permissionMode?(u.permissionMode=a.permissionMode,y=a.permissionMode):u.permissionMode=y,a.resume&&(u.resume=a.resume,i.cliSessionId=a.resume,c.getSessionMessages))try{let d=await c.getSessionMessages(a.resume);d&&d.length>0&&t({type:"session_history",messages:d,...i.relaySessionId?{relaySessionId:i.relaySessionId}:{}})}catch(d){t({type:"info",text:`Could not restore session history: ${d.message}`})}try{s=c.query({prompt:r,options:u})}catch(d){let f=d;i.isProcessing=!1,s=null,r=null,o=null,t({type:"error",text:`Failed to start query: ${f.message}`}),t({type:"done",code:1});return}M().catch(()=>{})},async requestHistory(a,c){let u=await I();if(!u.getSessionMessages)return;let d=c||i.relaySessionId;try{let f=await u.getSessionMessages(a);f&&f.length>0&&t({type:"session_history",messages:f,...d?{relaySessionId:d}:{}})}catch(f){t({type:"info",text:`Could not restore session history: ${f.message}`})}},pushUserMessage(a,c){if(a&&a.startsWith("/")&&a.split(/\s/)[0].toLowerCase()==="/clear"){_++,o&&o.abort(),r&&r.end(),this.startSession({cwd:b,model:l||void 0,permissionMode:y||void 0}).then(()=>{t({type:"slash_command_result",command:"clear",text:"Conversation cleared."})}).catch(f=>{t({type:"error",text:`Failed to clear session: ${f.message}`})});return}if(!r){t({type:"error",text:"No active session"});return}let u=[];if(c&&c.length>0)for(let d of c)u.push({type:"image",source:{type:"base64",media_type:d.mediaType,data:d.data}});a&&u.push({type:"text",text:a}),i.isProcessing=!0,i.streamedText=!1,i.responsePreview="",i.blocks={},i.sentToolResults={},r.push({type:"user",message:{role:"user",content:u}})},interrupt(){s?.interrupt?s.interrupt().catch(()=>{o&&o.abort()}):o&&o.abort()},async setModel(a){if(!s?.setModel){l=a,t({type:"model_info",model:a,models:[]});return}try{await s.setModel(a),l=a,t({type:"model_info",model:a,models:[]}),t({type:"config_state",model:l,mode:y,effort:"medium",betas:[]})}catch(c){t({type:"error",text:`Failed to switch model: ${c.message}`})}},async setMode(a){if(!s?.setPermissionMode){y=a,t({type:"config_state",model:l,mode:y,effort:"medium",betas:[]});return}try{await s.setPermissionMode(a),y=a,t({type:"config_state",model:l,mode:y,effort:"medium",betas:[]})}catch(c){t({type:"error",text:`Failed to set permission mode: ${c.message}`})}},handlePermissionResponse(a,c,u){n?.handlePermissionResponse(a,c,u)},handleAskUserResponse(a,c){n?.handleAskUserResponse(a,c)},shutdown(){s?.close?s.close():o&&o.abort(),r&&r.end()}}}function g(t){let e=JSON.stringify(t);process.stdout.write(e+`
|
|
4
|
-
`)}
|
|
5
|
-
`)}
|
|
1
|
+
import{createInterface as L}from"node:readline";function M(t,e,r){if(e.session_id&&typeof e.session_id=="string"&&e.session_id!==t.cliSessionId&&(t.cliSessionId=e.session_id,r({type:"session_id",cliSessionId:t.cliSessionId,...t.relaySessionId?{relaySessionId:t.relaySessionId}:{}})),e.uuid&&typeof e.uuid=="string"&&(e.type==="user"&&!e.parent_tool_use_id?r({type:"message_uuid",uuid:e.uuid,messageType:"user"}):e.type==="assistant"&&r({type:"message_uuid",uuid:e.uuid,messageType:"assistant"})),e.type==="system"&&e.subtype==="init"){e.slash_commands&&Array.isArray(e.slash_commands)&&r({type:"slash_commands",commands:e.slash_commands}),e.model&&typeof e.model=="string"&&r({type:"model_info",model:e.model,models:[]}),e.fast_mode_state&&typeof e.fast_mode_state=="string"&&r({type:"fast_mode_state",state:e.fast_mode_state});return}if(e.type==="stream_event"&&e.event){q(t,e.event,r);return}if((e.type==="assistant"||e.type==="user")&&e.message&&typeof e.message=="object"){let s=e.message.content;if(e.parent_tool_use_id&&typeof e.parent_tool_use_id=="string"){j(t,e,r);return}if(e.type==="assistant"&&!t.streamedText&&Array.isArray(s)){let i=s.filter(a=>a.type==="text").map(a=>a.text).join("");i&&r({type:"delta",text:i})}if(e.type==="user"){let i="";if(typeof s=="string"?i=s:Array.isArray(s)&&(i=s.filter(a=>a.type==="text").map(a=>a.text).join(`
|
|
2
|
+
`)),i.indexOf("local-command-stdout")!==-1){let a=i.match(/<local-command-stdout>([\s\S]*?)<\/local-command-stdout>/);a&&r({type:"slash_command_result",text:a[1].trim()})}}if(Array.isArray(s)){for(let i of s)if(i.type==="tool_result"&&typeof i.tool_use_id=="string"&&!t.sentToolResults[i.tool_use_id]){t.activeTaskToolIds[i.tool_use_id]&&(r({type:"subagent_done",parentToolId:i.tool_use_id}),delete t.activeTaskToolIds[i.tool_use_id]);let a="";typeof i.content=="string"?a=i.content:Array.isArray(i.content)&&(a=i.content.filter(l=>l.type==="text").map(l=>l.text).join(`
|
|
3
|
+
`)),t.sentToolResults[i.tool_use_id]=!0,r({type:"tool_result",id:i.tool_use_id,content:a,is_error:i.is_error||!1})}}return}if(e.type==="result"){t.blocks={},t.sentToolResults={},t.activeTaskToolIds={},t.taskIdMap={},t.isProcessing=!1,r({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"&&r({type:"fast_mode_state",state:e.fast_mode_state}),r({type:"done",code:0}),t.responsePreview="",t.streamedText=!1;return}if(e.type==="system"&&e.subtype==="status"){e.status==="compacting"?(r({type:"compacting",active:!0}),t.compacting=!0):t.compacting&&(r({type:"compacting",active:!1}),t.compacting=!1);return}if(e.type==="system"&&e.subtype==="task_started"){let o=e.tool_use_id;o&&(e.task_id&&(t.taskIdMap[o]=e.task_id),r({type:"task_started",parentToolId:o,taskId:e.task_id||"",description:e.description||""}));return}if(e.type==="system"&&e.subtype==="task_progress"){let o=e.tool_use_id;o&&r({type:"task_progress",parentToolId:o,taskId:e.task_id,usage:e.usage??null,lastToolName:e.last_tool_name||void 0,description:e.description||""});return}if(e.type==="tool_progress"){let o=e.parent_tool_use_id;o&&r({type:"subagent_activity",parentToolId:o,text:e.content||""});return}if(e.type==="task_notification"){let o=e.parent_tool_use_id;if(o&&r({type:"subagent_done",parentToolId:o,status:e.status||"completed",summary:e.summary||"",usage:e.usage??null}),e.task_id&&typeof e.task_id=="string"){for(let s of Object.keys(t.taskIdMap))if(t.taskIdMap[s]===e.task_id){delete t.taskIdMap[s];break}}return}if(e.type==="rate_limit_event"&&e.rate_limit_info){let o=e.rate_limit_info;(o.status==="allowed_warning"||o.status==="rejected")&&r({type:"rate_limit",status:o.status,resetsAt:o.resetsAt?o.resetsAt*1e3:null,rateLimitType:o.rateLimitType||null,utilization:o.utilization||null});return}if(e.type==="prompt_suggestion"){r({type:"prompt_suggestion",suggestion:e.suggestion||""});return}}function q(t,e,r){if(e.type==="content_block_start"){let o=e.content_block,s=e.index;o.type==="tool_use"?(t.blocks[s]={type:"tool_use",id:o.id,name:o.name,inputJson:""},r({type:"tool_start",id:o.id,name:o.name})):o.type==="thinking"?(t.blocks[s]={type:"thinking",thinkingText:"",startTime:Date.now()},r({type:"thinking_start"})):o.type==="text"&&(t.blocks[s]={type:"text"});return}if(e.type==="content_block_delta"&&e.delta){let o=e.index,s=e.delta;s.type==="text_delta"&&typeof s.text=="string"?(t.streamedText=!0,t.responsePreview.length<200&&(t.responsePreview+=s.text),r({type:"delta",text:s.text})):s.type==="input_json_delta"&&t.blocks[o]?t.blocks[o].inputJson=(t.blocks[o].inputJson||"")+s.partial_json:s.type==="thinking_delta"&&t.blocks[o]&&(t.blocks[o].thinkingText=(t.blocks[o].thinkingText||"")+s.thinking,r({type:"thinking_delta",text:s.thinking}));return}if(e.type==="content_block_stop"){let o=e.index,s=t.blocks[o];if(s&&s.type==="tool_use"){let i={};try{i=JSON.parse(s.inputJson||"{}")}catch{}r({type:"tool_executing",id:s.id,name:s.name,input:i}),s.name==="Task"&&(t.activeTaskToolIds[s.id]=!0)}else if(s&&s.type==="thinking"){let i=s.startTime?(Date.now()-s.startTime)/1e3:0;r({type:"thinking_stop",duration:i})}delete t.blocks[o];return}}function j(t,e,r){let o=e.parent_tool_use_id,i=e.message.content;if(Array.isArray(i)&&e.type==="assistant")for(let a of i)if(a.type==="tool_use"){let l=C(a.name,a.input);r({type:"subagent_tool",parentToolId:o,toolName:a.name,toolId:a.id,text:l})}else a.type==="thinking"?r({type:"subagent_activity",parentToolId:o,text:"Thinking..."}):a.type==="text"&&a.text&&r({type:"subagent_activity",parentToolId:o,text:"Writing response..."})}function C(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 P(){let t=[],e=null,r=!1;return{push(o){if(!r)if(e){let s=e;e=null,s({value:o,done:!1})}else t.push(o)},end(){if(r=!0,e){let o=e;e=null,o({value:void 0,done:!0})}},[Symbol.asyncIterator](){return{next(){return t.length>0?Promise.resolve({value:t.shift(),done:!1}):r?Promise.resolve({value:void 0,done:!0}):new Promise(o=>{e=o})}}}}}import{randomUUID as O}from"node:crypto";function R(t){let e={},r={},o={};return{handleCanUseTool(s,i,a){return s==="AskUserQuestion"?new Promise(l=>{r[a.toolUseID]={resolve:l,input:i},a.signal&&a.signal.addEventListener("abort",()=>{delete r[a.toolUseID],t({type:"ask_user_answered",toolId:a.toolUseID}),l({behavior:"deny",message:"Cancelled"})})}):o[s]?Promise.resolve({behavior:"allow",updatedInput:i}):new Promise(l=>{let d=O();e[d]={resolve:l,requestId:d,toolName:s,toolInput:i},t({type:"permission_request",requestId:d,toolName:s,toolInput:i,toolUseId:a.toolUseID,decisionReason:a.decisionReason||""}),a.signal&&a.signal.addEventListener("abort",()=>{delete e[d],t({type:"permission_cancel",requestId:d}),l({behavior:"deny",message:"Request cancelled"})})})},handlePermissionResponse(s,i,a){let l=e[s];l&&(delete e[s],t({type:"permission_resolved",requestId:s,decision:i}),i==="allow"?(a&&(o[l.toolName]=!0),l.resolve({behavior:"allow",updatedInput:l.toolInput})):l.resolve({behavior:"deny",message:"User denied"}))},handleAskUserResponse(s,i){let a=r[s];if(!a)return;delete r[s],t({type:"ask_user_answered",toolId:s});let l=Object.assign({},a.input,{answers:i});a.resolve({behavior:"allow",updatedInput:l})},clearPending(s){for(let i of Object.keys(r))s({type:"ask_user_answered",toolId:i}),r[i].resolve({behavior:"deny",message:"Session ended"}),delete r[i];for(let i of Object.keys(e))s({type:"permission_cancel",requestId:i}),e[i].resolve({behavior:"deny",message:"Session ended"}),delete e[i]}}}function w(){return{cliSessionId:null,relaySessionId:null,blocks:{},sentToolResults:{},streamedText:!1,responsePreview:"",activeTaskToolIds:{},taskIdMap:{},isProcessing:!1,compacting:!1}}function A(t){let e=null,r=null,o=null,s=null,i=w(),a=null,l="",d=[],g="acceptEdits",h="medium",S="",b=0,D=t;t=n=>{n.type==="model_info"&&(n.models&&n.models.length>0&&(d=n.models),n.models=d,n.model&&(l=n.model)),D(n)};async function v(){if(e)return e;try{return e=await import("@anthropic-ai/claude-agent-sdk"),e}catch(n){let c=n;throw new Error(`Failed to load Claude SDK: ${c.message}`)}}function T(n){return n.map(c=>({value:c.value,displayName:c.displayName,description:c.description,supportsEffort:c.supportsEffort,supportedEffortLevels:c.supportedEffortLevels}))}async function $(n,c){let f={[Symbol.asyncIterator](){return{next:()=>Promise.resolve({value:void 0,done:!0})}}},u=null;try{u=n.query({prompt:f,options:{cwd:c}}),u[Symbol.asyncIterator]().next().catch(()=>{});let p=null;if(u.initializationResult){let I=await Promise.race([u.initializationResult(),new Promise(x=>setTimeout(()=>x(null),5e3))]);I?.models?.length&&(p=I.models)}else if(u.supportedModels){let I=await Promise.race([u.supportedModels(),new Promise(x=>setTimeout(()=>x(null),5e3))]);I?.length&&(p=I)}p&&p.length>0&&(d=T(p),!l&&d.length>0&&(l=d[0].value),t({type:"model_info",model:l,models:d}))}catch{}finally{u?.close&&u.close()}}async function E(){if(!o)return;let n=b;try{for await(let c of o)M(i,c,t)}catch(c){if(n!==b)return;let f=c;if(i.isProcessing)if(i.isProcessing=!1,f.name==="AbortError"||s&&s.signal.aborted)t({type:"info",text:"Interrupted"}),t({type:"done",code:0});else{let m=(f.message||String(f)).toLowerCase(),p=m.includes("prompt is too long")||m.includes("context_length")||m.includes("maximum context length");t(p?{type:"error",text:"Conversation too long to continue."}:{type:"error",text:`Claude process error: ${f.message}`}),t({type:"done",code:1})}}finally{n===b&&(o=null,r=null,s=null,a&&a.clearPending(t))}}return{async startSession(n){let c=await v();d.length===0&&$(c,n.cwd).catch(()=>{}),b++,i=w(),i.isProcessing=!0,n.relaySessionId&&(i.relaySessionId=n.relaySessionId),a=R(t),r=P(),s=new AbortController,S=n.cwd;let f={cwd:n.cwd,settingSources:["user","project","local"],includePartialMessages:!0,enableFileCheckpointing:!0,abortController:s,promptSuggestions:!0,canUseTool:(u,m,p)=>a.handleCanUseTool(u,m,p)};if(n.model&&(f.model=n.model,l=n.model),n.permissionMode?(f.permissionMode=n.permissionMode,g=n.permissionMode):f.permissionMode=g,f.effort=h,n.resume){if(f.resume=n.resume,i.cliSessionId=n.resume,c.getSessionMessages)try{let u=await c.getSessionMessages(n.resume);u&&u.length>0&&t({type:"session_history",messages:u,...i.relaySessionId?{relaySessionId:i.relaySessionId}:{}})}catch(u){t({type:"info",text:`Could not restore session history: ${u.message}`})}t({type:"config_state",model:l,mode:g,effort:h,betas:[]})}try{o=c.query({prompt:r,options:f})}catch(u){let m=u;i.isProcessing=!1,o=null,r=null,s=null,t({type:"error",text:`Failed to start query: ${m.message}`}),t({type:"done",code:1});return}o?.supportedModels&&o.supportedModels().then(u=>{u&&u.length>0&&(d=T(u),!l&&d.length>0&&(l=d[0].value),t({type:"model_info",model:l,models:d}))}).catch(()=>{}),E().catch(()=>{})},async requestHistory(n,c){let f=await v();if(!f.getSessionMessages)return;let u=c||i.relaySessionId;try{let m=await f.getSessionMessages(n);m&&m.length>0&&t({type:"session_history",messages:m,...u?{relaySessionId:u}:{}})}catch(m){t({type:"info",text:`Could not restore session history: ${m.message}`})}d.length>0&&t({type:"model_info",model:l,models:d}),t({type:"config_state",model:l,mode:g,effort:h,betas:[]})},pushUserMessage(n,c){if(n&&n.startsWith("/")){let u=n.split(/\s/)[0].toLowerCase();if(u==="/clear"){b++,s&&s.abort(),r&&r.end(),this.startSession({cwd:S,model:l||void 0,permissionMode:g||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(u==="/status"){let m=["**Bridge Status**","",`**Model:** ${l||"(not set)"}`,`**Available Models:** ${d.length>0?d.map(p=>`${p.displayName} (${p.value})`).join(", "):"(none discovered yet)"}`,`**Effort:** ${h}`,`**Permission Mode:** ${g}`,`**Session Active:** ${o?"yes":"no"}`,`**CLI Session:** ${i.cliSessionId||"(none)"}`,`**Working Directory:** ${S||"(not set)"}`,"","**Raw SDK Model Data:**","```json",JSON.stringify(d,null,2),"```"];t({type:"slash_command_result",command:"status",text:m.join(`
|
|
4
|
+
`)});return}}if(!r){t({type:"error",text:"No active session"});return}let f=[];if(c&&c.length>0)for(let u of c)f.push({type:"image",source:{type:"base64",media_type:u.mediaType,data:u.data}});n&&f.push({type:"text",text:n}),i.isProcessing=!0,i.streamedText=!1,i.responsePreview="",i.blocks={},i.sentToolResults={},r.push({type:"user",message:{role:"user",content:f}})},interrupt(){o?.interrupt?o.interrupt().catch(()=>{s&&s.abort()}):s&&s.abort()},async setModel(n){if(!o?.setModel){l=n,t({type:"model_info",model:n,models:d});return}try{await o.setModel(n),l=n,t({type:"model_info",model:n,models:[]}),t({type:"config_state",model:l,mode:g,effort:h,betas:[]})}catch(c){t({type:"error",text:`Failed to switch model: ${c.message}`})}},async setMode(n){if(!o?.setPermissionMode){g=n,t({type:"config_state",model:l,mode:g,effort:h,betas:[]});return}try{await o.setPermissionMode(n),g=n,t({type:"config_state",model:l,mode:g,effort:h,betas:[]})}catch(c){t({type:"error",text:`Failed to set permission mode: ${c.message}`})}},setEffort(n){["low","medium","high","max"].includes(n)||(console.warn(`[sdk-runner] Unknown effort level "${n}", defaulting to medium`),n="medium"),h=n,t({type:"config_state",model:l,mode:g,effort:h,betas:[]})},handlePermissionResponse(n,c,f){a?.handlePermissionResponse(n,c,f)},handleAskUserResponse(n,c){a?.handleAskUserResponse(n,c)},shutdown(){o?.close?o.close():s&&s.abort(),r&&r.end()}}}function k(t){let e=JSON.stringify(t);process.stdout.write(e+`
|
|
5
|
+
`)}function y(t,e,r){let o={level:t,message:e,ts:new Date().toISOString(),...r};process.stderr.write(JSON.stringify(o)+`
|
|
6
|
+
`)}var _=A(k),U=L({input:process.stdin,crlfDelay:1/0});U.on("line",async t=>{if(!t.trim())return;let e;try{e=JSON.parse(t)}catch{y("error","Failed to parse inbound message",{raw:t.slice(0,200)});return}try{switch(e.type){case"start_session":y("info","Starting session",{cwd:e.cwd,model:e.model}),await _.startSession({cwd:e.cwd,model:e.model,permissionMode:e.permissionMode,resume:e.resume,relaySessionId:e.relaySessionId});break;case"user_message":y("info","User message received",{textLength:e.text?.length??0}),_.pushUserMessage(e.text,e.images);break;case"interrupt":y("info","Interrupt requested"),_.interrupt();break;case"permission_response":y("info","Permission response",{requestId:e.requestId,decision:e.decision}),_.handlePermissionResponse(e.requestId,e.decision,e.allowForSession);break;case"ask_user_response":y("info","Ask user response",{toolId:e.toolId}),_.handleAskUserResponse(e.toolId,e.answers);break;case"set_model":y("info","Set model",{model:e.model}),await _.setModel(e.model);break;case"set_mode":y("info","Set mode",{mode:e.mode}),await _.setMode(e.mode);break;case"set_effort":y("info","Set effort",{effort:e.effort}),_.setEffort(e.effort);break;case"request_history":y("info","History request",{resume:e.resume}),await _.requestHistory(e.resume,e.relaySessionId);break;case"ping":k({type:"pong"});break;case"shutdown":y("info","Shutdown requested"),_.shutdown(),setTimeout(()=>process.exit(0),500);break;default:y("warn","Unknown message type",{type:e.type})}}catch(r){let o=r;y("error",`Error handling message type=${e.type}`,{error:o.message}),k({type:"error",text:`Internal bridge error: ${o.message}`})}});U.on("close",()=>{y("info","stdin closed, shutting down"),_.shutdown(),setTimeout(()=>process.exit(0),500)});process.on("uncaughtException",t=>{y("error","Uncaught exception",{error:t.message,stack:t.stack}),k({type:"error",text:`Bridge crash: ${t.message}`}),k({type:"done",code:1}),process.exit(1)});process.on("unhandledRejection",t=>{let e=t instanceof Error?t.message:String(t);y("error","Unhandled rejection",{error:e})});k({type:"ready"});y("info","SDK bridge ready");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibetonomy/agent",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.0",
|
|
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.2.63"
|
|
16
16
|
},
|
|
17
17
|
"optionalDependencies": {
|
|
18
|
-
"@vibetonomy/agent-linux-x64": "
|
|
19
|
-
"@vibetonomy/agent-linux-arm64": "
|
|
20
|
-
"@vibetonomy/agent-darwin-arm64": "
|
|
21
|
-
"@vibetonomy/agent-darwin-x64": "
|
|
22
|
-
"@vibetonomy/agent-win-x64": "
|
|
18
|
+
"@vibetonomy/agent-linux-x64": "1.1.0",
|
|
19
|
+
"@vibetonomy/agent-linux-arm64": "1.1.0",
|
|
20
|
+
"@vibetonomy/agent-darwin-arm64": "1.1.0",
|
|
21
|
+
"@vibetonomy/agent-darwin-x64": "1.1.0",
|
|
22
|
+
"@vibetonomy/agent-win-x64": "1.1.0"
|
|
23
23
|
},
|
|
24
24
|
"engines": {
|
|
25
25
|
"node": ">=18.0.0"
|