@vibetonomy/agent 1.0.0 → 1.2.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 +7 -7
package/bridge/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import{createInterface as
|
|
2
|
-
`)),
|
|
3
|
-
`)),t.sentToolResults[r.tool_use_id]=!0,i({type:"tool_result",id:r.tool_use_id,content:n,is_error:r.is_error||!1})}}return}if(e.type==="result"){t.blocks={},t.sentToolResults={},t.activeTaskToolIds={},t.taskIdMap={},t.isProcessing=!1,i({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"&&i({type:"fast_mode_state",state:e.fast_mode_state}),i({type:"done",code:0}),t.responsePreview="",t.streamedText=!1;return}if(e.type==="system"&&e.subtype==="status"){e.status==="compacting"?(i({type:"compacting",active:!0}),t.compacting=!0):t.compacting&&(i({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),i({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&&i({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&&i({type:"subagent_activity",parentToolId:o,text:e.content||""});return}if(e.type==="task_notification"){let o=e.parent_tool_use_id;if(o&&i({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")&&i({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"){i({type:"prompt_suggestion",suggestion:e.suggestion||""});return}}function U(t,e,i){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:""},i({type:"tool_start",id:o.id,name:o.name})):o.type==="thinking"?(t.blocks[s]={type:"thinking",thinkingText:"",startTime:Date.now()},i({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),i({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,i({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 r={};try{r=JSON.parse(s.inputJson||"{}")}catch{}i({type:"tool_executing",id:s.id,name:s.name,input:r}),s.name==="Task"&&(t.activeTaskToolIds[s.id]=!0)}else if(s&&s.type==="thinking"){let r=s.startTime?(Date.now()-s.startTime)/1e3:0;i({type:"thinking_stop",duration:r})}delete t.blocks[o];return}}function A(t,e,i){let o=e.parent_tool_use_id,r=e.message.content;if(Array.isArray(r)&&e.type==="assistant")for(let n of r)if(n.type==="tool_use"){let l=R(n.name,n.input);i({type:"subagent_tool",parentToolId:o,toolName:n.name,toolId:n.id,text:l})}else n.type==="thinking"?i({type:"subagent_activity",parentToolId:o,text:"Thinking..."}):n.type==="text"&&n.text&&i({type:"subagent_activity",parentToolId:o,text:"Writing response..."})}function R(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,i=!1;return{push(o){if(!i)if(e){let s=e;e=null,s({value:o,done:!1})}else t.push(o)},end(){if(i=!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}):i?Promise.resolve({value:void 0,done:!0}):new Promise(o=>{e=o})}}}}}import{randomUUID as q}from"node:crypto";function T(t){let e={},i={},o={};return{handleCanUseTool(s,r,n){return s==="AskUserQuestion"?new Promise(l=>{i[n.toolUseID]={resolve:l,input:r},n.signal&&n.signal.addEventListener("abort",()=>{delete i[n.toolUseID],t({type:"ask_user_answered",toolId:n.toolUseID}),l({behavior:"deny",message:"Cancelled"})})}):o[s]?Promise.resolve({behavior:"allow",updatedInput:r}):new Promise(l=>{let f=q();e[f]={resolve:l,requestId:f,toolName:s,toolInput:r},t({type:"permission_request",requestId:f,toolName:s,toolInput:r,toolUseId:n.toolUseID,decisionReason:n.decisionReason||""}),n.signal&&n.signal.addEventListener("abort",()=>{delete e[f],t({type:"permission_cancel",requestId:f}),l({behavior:"deny",message:"Request cancelled"})})})},handlePermissionResponse(s,r,n){let l=e[s];l&&(delete e[s],t({type:"permission_resolved",requestId:s,decision:r}),r==="allow"?(n&&(o[l.toolName]=!0),l.resolve({behavior:"allow",updatedInput:l.toolInput})):l.resolve({behavior:"deny",message:"User denied"}))},handleAskUserResponse(s,r){let n=i[s];if(!n)return;delete i[s],t({type:"ask_user_answered",toolId:s});let l=Object.assign({},n.input,{answers:r});n.resolve({behavior:"allow",updatedInput:l})},clearPending(s){for(let r of Object.keys(i))s({type:"ask_user_answered",toolId:r}),i[r].resolve({behavior:"deny",message:"Session ended"}),delete i[r];for(let r of Object.keys(e))s({type:"permission_cancel",requestId:r}),e[r].resolve({behavior:"deny",message:"Session ended"}),delete e[r]}}}function b(){return{cliSessionId:null,relaySessionId:null,blocks:{},sentToolResults:{},streamedText:!1,responsePreview:"",activeTaskToolIds:{},taskIdMap:{},isProcessing:!1,compacting:!1}}function v(t){let e=null,i=null,o=null,s=null,r=b(),n=null,l="",f="acceptEdits",g="medium",I="",h=0;async function x(){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 P(){if(!o)return;let a=h;try{for await(let c of o)w(r,c,t)}catch(c){if(a!==h)return;let u=c;if(r.isProcessing)if(r.isProcessing=!1,u.name==="AbortError"||s&&s.signal.aborted)t({type:"info",text:"Interrupted"}),t({type:"done",code:0});else{let y=(u.message||String(u)).toLowerCase(),k=y.includes("prompt is too long")||y.includes("context_length")||y.includes("maximum context length");t(k?{type:"error",text:"Conversation too long to continue."}:{type:"error",text:`Claude process error: ${u.message}`}),t({type:"done",code:1})}}finally{a===h&&(o=null,i=null,s=null,n&&n.clearPending(t))}}return{async startSession(a){let c=await x();h++,r=b(),r.isProcessing=!0,a.relaySessionId&&(r.relaySessionId=a.relaySessionId),n=T(t),i=S(),s=new AbortController,I=a.cwd;let u={cwd:a.cwd,settingSources:["user","project","local"],includePartialMessages:!0,enableFileCheckpointing:!0,abortController:s,promptSuggestions:!0,canUseTool:(d,y,k)=>n.handleCanUseTool(d,y,k)};if(a.model&&(u.model=a.model,l=a.model),a.permissionMode?(u.permissionMode=a.permissionMode,f=a.permissionMode):u.permissionMode=f,u.effort=g,a.resume){if(u.resume=a.resume,r.cliSessionId=a.resume,c.getSessionMessages)try{let d=await c.getSessionMessages(a.resume);d&&d.length>0&&t({type:"session_history",messages:d,...r.relaySessionId?{relaySessionId:r.relaySessionId}:{}})}catch(d){t({type:"info",text:`Could not restore session history: ${d.message}`})}t({type:"config_state",model:l,mode:f,effort:g,betas:[]})}try{o=c.query({prompt:i,options:u})}catch(d){let y=d;r.isProcessing=!1,o=null,i=null,s=null,t({type:"error",text:`Failed to start query: ${y.message}`}),t({type:"done",code:1});return}P().catch(()=>{})},async requestHistory(a,c){let u=await x();if(!u.getSessionMessages)return;let d=c||r.relaySessionId;try{let y=await u.getSessionMessages(a);y&&y.length>0&&t({type:"session_history",messages:y,...d?{relaySessionId:d}:{}})}catch(y){t({type:"info",text:`Could not restore session history: ${y.message}`})}t({type:"config_state",model:l,mode:f,effort:g,betas:[]})},pushUserMessage(a,c){if(a&&a.startsWith("/")&&a.split(/\s/)[0].toLowerCase()==="/clear"){h++,s&&s.abort(),i&&i.end(),this.startSession({cwd:I,model:l||void 0,permissionMode:f||void 0}).then(()=>{t({type:"slash_command_result",command:"clear",text:"Conversation cleared."})}).catch(y=>{t({type:"error",text:`Failed to clear session: ${y.message}`})});return}if(!i){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}),r.isProcessing=!0,r.streamedText=!1,r.responsePreview="",r.blocks={},r.sentToolResults={},i.push({type:"user",message:{role:"user",content:u}})},interrupt(){o?.interrupt?o.interrupt().catch(()=>{s&&s.abort()}):s&&s.abort()},async setModel(a){if(!o?.setModel){l=a,t({type:"model_info",model:a,models:[]});return}try{await o.setModel(a),l=a,t({type:"model_info",model:a,models:[]}),t({type:"config_state",model:l,mode:f,effort:g,betas:[]})}catch(c){t({type:"error",text:`Failed to switch model: ${c.message}`})}},async setMode(a){if(!o?.setPermissionMode){f=a,t({type:"config_state",model:l,mode:f,effort:g,betas:[]});return}try{await o.setPermissionMode(a),f=a,t({type:"config_state",model:l,mode:f,effort:g,betas:[]})}catch(c){t({type:"error",text:`Failed to set permission mode: ${c.message}`})}},setEffort(a){["low","medium","high","max"].includes(a)||(console.warn(`[sdk-runner] Unknown effort level "${a}", defaulting to medium`),a="medium"),g=a,t({type:"config_state",model:l,mode:f,effort:g,betas:[]})},handlePermissionResponse(a,c,u){n?.handlePermissionResponse(a,c,u)},handleAskUserResponse(a,c){n?.handleAskUserResponse(a,c)},shutdown(){o?.close?o.close():s&&s.abort(),i&&i.end()}}}function _(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": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Vibetonomy agent — managed Claude Code sessions via npx",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
"bridge/dist/index.js"
|
|
13
13
|
],
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@anthropic-ai/claude-agent-sdk": "
|
|
15
|
+
"@anthropic-ai/claude-agent-sdk": "latest"
|
|
16
16
|
},
|
|
17
17
|
"optionalDependencies": {
|
|
18
|
-
"@vibetonomy/agent-linux-x64": "1.
|
|
19
|
-
"@vibetonomy/agent-linux-arm64": "1.
|
|
20
|
-
"@vibetonomy/agent-darwin-arm64": "1.
|
|
21
|
-
"@vibetonomy/agent-darwin-x64": "1.
|
|
22
|
-
"@vibetonomy/agent-win-x64": "1.
|
|
18
|
+
"@vibetonomy/agent-linux-x64": "1.2.0",
|
|
19
|
+
"@vibetonomy/agent-linux-arm64": "1.2.0",
|
|
20
|
+
"@vibetonomy/agent-darwin-arm64": "1.2.0",
|
|
21
|
+
"@vibetonomy/agent-darwin-x64": "1.2.0",
|
|
22
|
+
"@vibetonomy/agent-win-x64": "1.2.0"
|
|
23
23
|
},
|
|
24
24
|
"engines": {
|
|
25
25
|
"node": ">=18.0.0"
|