@vibetonomy/agent 1.3.0 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bridge/dist/index.js +1 -1
- package/package.json +6 -6
package/bridge/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import{createInterface as ae}from"node:readline";import{readdir as J,readFile as
|
|
|
2
2
|
`)),s.indexOf("local-command-stdout")!==-1){let r=s.match(/<local-command-stdout>([\s\S]*?)<\/local-command-stdout>/);r&&a({type:"slash_command_result",text:r[1].trim()})}}if(Array.isArray(o)){for(let s of o)if(s.type==="tool_result"&&typeof s.tool_use_id=="string"&&!t.sentToolResults[s.tool_use_id]){t.activeTaskToolIds[s.tool_use_id]&&(a({type:"subagent_done",parentToolId:s.tool_use_id}),delete t.activeTaskToolIds[s.tool_use_id]);let r=t.teammateMap[s.tool_use_id];r&&(a({type:"teammate_status",parentToolId:s.tool_use_id,teammateName:r,status:s.is_error?"error":"idle"}),delete t.teammateMap[s.tool_use_id]);let l="";typeof s.content=="string"?l=s.content:Array.isArray(s.content)&&(l=s.content.filter(m=>m.type==="text").map(m=>m.text).join(`
|
|
3
3
|
`)),t.sentToolResults[s.tool_use_id]=!0,a({type:"tool_result",id:s.tool_use_id,content:l,is_error:s.is_error||!1})}}return}if(e.type==="result"){t.blocks={},t.sentToolResults={},t.activeTaskToolIds={},t.taskIdMap={},t.teammateMap={},t.isProcessing=!1,a({type:"result",cost:e.total_cost_usd??null,duration:e.duration_ms??null,usage:e.usage??null,modelUsage:e.modelUsage??null,sessionId:e.session_id}),e.fast_mode_state&&typeof e.fast_mode_state=="string"&&a({type:"fast_mode_state",state:e.fast_mode_state}),a({type:"done",code:0}),t.responsePreview="",t.streamedText=!1;return}if(e.type==="system"&&e.subtype==="status"){e.status==="compacting"?(a({type:"compacting",active:!0}),t.compacting=!0):t.compacting&&(a({type:"compacting",active:!1}),t.compacting=!1);return}if(e.type==="system"&&e.subtype==="task_started"){let i=e.tool_use_id;i&&(e.task_id&&(t.taskIdMap[i]=e.task_id),a({type:"task_started",parentToolId:i,taskId:e.task_id||"",description:e.description||""}));return}if(e.type==="system"&&e.subtype==="task_progress"){let i=e.tool_use_id||void 0,o=e.task_id,s=i||(o?Object.keys(t.taskIdMap).find(r=>t.taskIdMap[r]===o):void 0);if(s){a({type:"task_progress",parentToolId:s,taskId:o,usage:e.usage??null,lastToolName:e.last_tool_name||void 0,description:e.description||""});let r=t.teammateMap[s];if(r){let l=e.description||(e.last_tool_name?`Running ${e.last_tool_name}...`:void 0);a({type:"teammate_status",parentToolId:s,teammateName:r,status:"active",activityText:l})}}return}if(e.type==="tool_progress"){let i=e.parent_tool_use_id;if(i){a({type:"subagent_activity",parentToolId:i,text:e.content||""});let o=t.teammateMap[i];o&&a({type:"teammate_status",parentToolId:i,teammateName:o,status:"active",activityText:e.content||void 0})}return}if(e.type==="system"&&e.subtype==="task_notification"){let i=e.tool_use_id||void 0,o=e.task_id,s=i||(o?Object.keys(t.taskIdMap).find(r=>t.taskIdMap[r]===o):void 0);if(s){a({type:"subagent_done",parentToolId:s,status:e.status||"completed",summary:e.summary||"",usage:e.usage??null});let r=t.teammateMap[s];if(r){let l=e.status==="error"||e.status==="failed";a({type:"teammate_status",parentToolId:s,teammateName:r,status:l?"error":"idle",activityText:e.summary||void 0}),delete t.teammateMap[s]}}if(o){for(let r of Object.keys(t.taskIdMap))if(t.taskIdMap[r]===o){delete t.taskIdMap[r];break}}return}if(e.type==="rate_limit_event"&&e.rate_limit_info){let i=e.rate_limit_info;(i.status==="allowed_warning"||i.status==="rejected")&&a({type:"rate_limit",status:i.status,resetsAt:i.resetsAt?i.resetsAt*1e3:null,rateLimitType:i.rateLimitType||null,utilization:i.utilization||null});return}if(e.type==="prompt_suggestion"){a({type:"prompt_suggestion",suggestion:e.suggestion||""});return}}function V(t,e,a){if(e.type==="content_block_start"){let i=e.content_block,o=e.index;i.type==="tool_use"?(t.blocks[o]={type:"tool_use",id:i.id,name:i.name,inputJson:""},a({type:"tool_start",id:i.id,name:i.name})):i.type==="thinking"?(t.blocks[o]={type:"thinking",thinkingText:"",startTime:Date.now()},a({type:"thinking_start"})):i.type==="text"&&(t.blocks[o]={type:"text"});return}if(e.type==="content_block_delta"&&e.delta){let i=e.index,o=e.delta;if(o.type==="text_delta"&&typeof o.text=="string"){if(t.streamedText=!0,t.responsePreview.length<200&&(t.responsePreview+=o.text),a({type:"delta",text:o.text}),t.teamActive){let s=o.text.matchAll(/teammate_id="([^"]+)"/g);for(let r of s){let l=r[1];(o.text.includes("idle_notification")||o.text.includes('"idleReason"'))&&a({type:"teammate_status",parentToolId:"",teammateName:l,status:"idle",activityText:"Idle"})}}}else o.type==="input_json_delta"&&t.blocks[i]?t.blocks[i].inputJson=(t.blocks[i].inputJson||"")+o.partial_json:o.type==="thinking_delta"&&t.blocks[i]&&(t.blocks[i].thinkingText=(t.blocks[i].thinkingText||"")+o.thinking,a({type:"thinking_delta",text:o.thinking}));return}if(e.type==="content_block_stop"){let i=e.index,o=t.blocks[i];if(o&&o.type==="tool_use"){let s={};try{s=JSON.parse(o.inputJson||"{}")}catch{}a({type:"tool_executing",id:o.id,name:o.name,input:s});let r=o.name;if((r==="Task"||r==="Agent"||r==="TeammateTool")&&(t.activeTaskToolIds[o.id]=!0,t.teamActive)){let l=s;if(l){let m=l.teammate_name||l.name||l.subagent_type,_=l.team_name||void 0;m&&(t.teammateMap[o.id]=m,a({type:"teammate_spawned",parentToolId:o.id,teammateName:m,teamName:_,description:l.description||l.prompt||""}))}}if(t.teamActive&&r==="SendMessage"){let l=s;if(l){let m=l.to;m&&m!=="*"&&a({type:"teammate_status",parentToolId:o.id,teammateName:m,status:"active",activityText:"Processing message\u2026"})}}}else if(o&&o.type==="thinking"){let s=o.startTime?(Date.now()-o.startTime)/1e3:0;a({type:"thinking_stop",duration:s})}delete t.blocks[i];return}}function X(t,e,a){let i=e.parent_tool_use_id,s=e.message.content;if(Array.isArray(s)&&e.type==="assistant")for(let r of s)if(r.type==="tool_use"){let l=Z(r.name,r.input);a({type:"subagent_tool",parentToolId:i,toolName:r.name,toolId:r.id,text:l})}else r.type==="thinking"?a({type:"subagent_activity",parentToolId:i,text:"Thinking..."}):r.type==="text"&&r.text&&a({type:"subagent_activity",parentToolId:i,text:"Writing response..."})}function Z(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 L(){let t=[],e=null,a=!1;return{push(i){if(!a)if(e){let o=e;e=null,o({value:i,done:!1})}else t.push(i)},end(){if(a=!0,e){let i=e;e=null,i({value:void 0,done:!0})}},[Symbol.asyncIterator](){return{next(){return t.length>0?Promise.resolve({value:t.shift(),done:!1}):a?Promise.resolve({value:void 0,done:!0}):new Promise(i=>{e=i})}}}}}import{randomUUID as ee}from"node:crypto";function q(t){let e={},a={},i={};return{handleCanUseTool(o,s,r){return o==="AskUserQuestion"?new Promise(l=>{a[r.toolUseID]={resolve:l,input:s},r.signal&&r.signal.addEventListener("abort",()=>{delete a[r.toolUseID],t({type:"ask_user_answered",toolId:r.toolUseID}),l({behavior:"deny",message:"Cancelled"})})}):i[o]?Promise.resolve({behavior:"allow",updatedInput:s}):new Promise(l=>{let m=ee();e[m]={resolve:l,requestId:m,toolName:o,toolInput:s},t({type:"permission_request",requestId:m,toolName:o,toolInput:s,toolUseId:r.toolUseID,decisionReason:r.decisionReason||""}),r.signal&&r.signal.addEventListener("abort",()=>{delete e[m],t({type:"permission_cancel",requestId:m}),l({behavior:"deny",message:"Request cancelled"})})})},handlePermissionResponse(o,s,r){let l=e[o];l&&(delete e[o],t({type:"permission_resolved",requestId:o,decision:s}),s==="allow"?(r&&(i[l.toolName]=!0),l.resolve({behavior:"allow",updatedInput:l.toolInput})):l.resolve({behavior:"deny",message:"User denied"}))},handleAskUserResponse(o,s){let r=a[o];if(!r)return;delete a[o],t({type:"ask_user_answered",toolId:o});let l=Object.assign({},r.input,{answers:s});r.resolve({behavior:"allow",updatedInput:l})},clearPending(o){for(let s of Object.keys(a))o({type:"ask_user_answered",toolId:s}),a[s].resolve({behavior:"deny",message:"Session ended"}),delete a[s];for(let s of Object.keys(e))o({type:"permission_cancel",requestId:s}),e[s].resolve({behavior:"deny",message:"Session ended"}),delete e[s]}}}function R(){return{cliSessionId:null,relaySessionId:null,blocks:{},sentToolResults:{},streamedText:!1,responsePreview:"",activeTaskToolIds:{},taskIdMap:{},teammateMap:{},teamActive:!1,isProcessing:!1,compacting:!1}}var k={agents:[],teamName:null,leadSessionId:null,teamConfigDir:null};function B(t,e){let a=JSON.parse(t);if(!a.members||a.members.length===0)return k;let i=[];for(let o of a.members)o.agentType!=="team-lead"&&i.push({id:o.name.toLowerCase().replace(/\s+/g,"-"),name:o.name,description:o.prompt||`${o.agentType} agent`,systemPrompt:o.prompt||"",defaultModel:o.model,agentType:o.agentType,color:o.color});return{agents:i,teamName:a.name||null,leadSessionId:a.leadSessionId||null,teamConfigDir:e}}async function se(t){let e=S(oe(),".claude","teams"),a=F(t);try{let i=await J(e);for(let o of i)try{let s=S(e,o),r=await W(S(s,"config.json"),"utf-8");if(!JSON.parse(r).members?.some(_=>_.cwd&&F(_.cwd)===a))continue;return B(r,s)}catch{}return k}catch{return k}}async function ne(t){let e=S(t,".claude","teams");try{let a=await J(e);for(let i of a)try{let o=S(e,i),s=await W(S(o,"config.json"),"utf-8");return B(s,o)}catch{}return k}catch{return k}}function K(t){let e=null,a=null,i=null,o=null,s=R(),r=null,l="",m=[],_="acceptEdits",b="medium",N="",M=0,h=k,U=!1,x=null,y=t;t=n=>{if(n.type==="model_info"&&(n.models&&n.models.length>0&&(m=n.models),n.models=m,n.model&&(l=n.model)),x){x(n);return}y(n)};async function j(){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 $(n){return n.map(c=>({value:c.value,displayName:c.displayName,description:c.description,supportsEffort:c.supportsEffort,supportedEffortLevels:c.supportedEffortLevels}))}async function H(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 w=await Promise.race([u.initializationResult(),new Promise(A=>setTimeout(()=>A(null),5e3))]);w?.models?.length&&(p=w.models)}else if(u.supportedModels){let w=await Promise.race([u.supportedModels(),new Promise(A=>setTimeout(()=>A(null),5e3))]);w?.length&&(p=w)}p&&p.length>0&&(m=$(p),!l&&m.length>0&&(l=m[0].value),t({type:"model_info",model:l,models:m}))}catch{}finally{u?.close&&u.close()}}async function Q(){if(!i)return;let n=M;try{for await(let c of i)O(s,c,t)}catch(c){if(n!==M)return;let f=c;if(s.isProcessing)if(s.isProcessing=!1,f.name==="AbortError"||o&&o.signal.aborted)t({type:"info",text:"Interrupted"}),t({type:"done",code:0});else{let d=(f.message||String(f)).toLowerCase(),p=d.includes("prompt is too long")||d.includes("context_length")||d.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===M&&(i=null,a=null,o=null,r&&r.clearPending(t))}}let T="done",D="",E=0,P=0,C=null;function Y(){x=n=>{if(n.type==="delta"&&typeof n.text=="string"&&(D+=n.text),n.type==="delta"&&typeof n.text=="string"){let c=n.text,f=c.matchAll(/teammate_id="([^"]+)"/g);for(let u of f){let d=u[1];(c.includes("idle_notification")||c.includes("online"))&&y({type:"teammate_status",parentToolId:"",teammateName:d,status:"idle",activityText:"Online"})}}if(n.type==="done"||n.type==="result"){if(T==="broadcast_test"){let c=D.toUpperCase(),f=c.includes("TEAM_READY")||c.includes("BROADCAST")&&c.includes("SUCCESS")||c.includes("MESSAGE SENT"),u=c.includes("TEAM_NEEDS_REBUILD")||c.includes("NOT IN A TEAM")||c.includes("NO TEAM")||c.includes("ERROR");f&&!u?(T="done",x=null,y({type:"agent_mode_status",statusText:"Team is ready!"}),y({type:"agent_mode_ready",success:!0}),y(n)):(T="spawning",D="",y({type:"agent_mode_status",statusText:"Spawning teammates\u2026"}),z());return}if(T==="spawning"){U=!0,T="waiting_for_teammates",P=0,E=h.agents.filter(c=>c.agentType!=="team-lead").length,y({type:"agent_mode_status",statusText:`Waiting for ${E} teammates to come online\u2026`}),y(n),C=setTimeout(()=>{T==="waiting_for_teammates"&&(T="done",x=null,y({type:"agent_mode_status",statusText:"Team is ready!"}),y({type:"agent_mode_ready",success:!0}))},45e3);return}}if(T!=="done"){(n.type==="teammate_spawned"||n.type==="teammate_status"||n.type==="session_id")&&(y(n),T==="waiting_for_teammates"&&n.type==="teammate_spawned"&&(P++,y({type:"agent_mode_status",statusText:`Teammates online: ${P}/${E}\u2026`}),P>=E&&(C&&(clearTimeout(C),C=null),T="done",x=null,y({type:"agent_mode_status",statusText:"Team is ready!"}),y({type:"agent_mode_ready",success:!0}))));return}y(n)}}function z(){if(!a||!h.teamName){y({type:"agent_mode_ready",success:!1,error:"Cannot spawn team \u2014 no session or template"});return}(h.teamConfigDir?te(h.teamConfigDir,{recursive:!0,force:!0}).catch(()=>{}):Promise.resolve()).then(()=>{let c=h.agents.map(u=>{let d=u.defaultModel?` (model: ${u.defaultModel})`:"";return`- **${u.name}** \u2014 ${u.agentType||"general-purpose"}${d}: ${u.description}`}).join(`
|
|
4
4
|
`),f=[`Create an agent team called "${h.teamName.toLowerCase()}" with the following teammates, all using in-process mode:`,"",c,"","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(`
|
|
5
|
-
`);a.push({type:"user",message:{role:"user",content:[{type:"text",text:f}]}})})}return{async startSession(n){let c=await j();m.length===0&&H(c,n.cwd).catch(()=>{}),U=!1;let f=k;try{f=await ne(n.cwd)}catch{}let u=k;try{u=await se(n.cwd)}catch{}f.agents.length>0?h={agents:f.agents,teamName:f.teamName||u.teamName,leadSessionId:u.leadSessionId,teamConfigDir:u.teamConfigDir}:h={agents:[],teamName:u.teamName,leadSessionId:u.leadSessionId,teamConfigDir:u.teamConfigDir},t({type:"agent_team_loaded",agents:h.agents}),M++,s=R(),s.isProcessing=!0,s.teamActive=h.agents.length>0,n.relaySessionId&&(s.relaySessionId=n.relaySessionId),r=q(t),a=L(),o=new AbortController,N=n.cwd;let d={cwd:n.cwd,settingSources:["user","project","local"],includePartialMessages:!0,enableFileCheckpointing:!0,abortController:o,promptSuggestions:!0,canUseTool:(p,w,A)=>r.handleCanUseTool(p,w,A)};if(d.env={CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS:"1"
|
|
5
|
+
`);a.push({type:"user",message:{role:"user",content:[{type:"text",text:f}]}})})}return{async startSession(n){let c=await j();m.length===0&&H(c,n.cwd).catch(()=>{}),U=!1;let f=k;try{f=await ne(n.cwd)}catch{}let u=k;try{u=await se(n.cwd)}catch{}f.agents.length>0?h={agents:f.agents,teamName:f.teamName||u.teamName,leadSessionId:u.leadSessionId,teamConfigDir:u.teamConfigDir}:h={agents:[],teamName:u.teamName,leadSessionId:u.leadSessionId,teamConfigDir:u.teamConfigDir},t({type:"agent_team_loaded",agents:h.agents}),M++,s=R(),s.isProcessing=!0,s.teamActive=h.agents.length>0,n.relaySessionId&&(s.relaySessionId=n.relaySessionId),r=q(t),a=L(),o=new AbortController,N=n.cwd;let d={cwd:n.cwd,settingSources:["user","project","local"],includePartialMessages:!0,enableFileCheckpointing:!0,abortController:o,promptSuggestions:!0,canUseTool:(p,w,A)=>r.handleCanUseTool(p,w,A)};if(h.teamName&&(d.env={...process.env,CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS:"1",CLAUDE_CODE_TEAM_NAME:h.teamName.toLowerCase()}),n.model&&(d.model=n.model,l=n.model),n.permissionMode?(d.permissionMode=n.permissionMode,_=n.permissionMode):d.permissionMode=_,d.effort=b,n.resume){if(d.resume=n.resume,s.cliSessionId=n.resume,c.getSessionMessages)try{let p=await c.getSessionMessages(n.resume);p&&p.length>0&&t({type:"session_history",messages:p,...s.relaySessionId?{relaySessionId:s.relaySessionId}:{}})}catch(p){t({type:"info",text:`Could not restore session history: ${p.message}`})}t({type:"config_state",model:l,mode:_,effort:b,betas:[]})}try{i=c.query({prompt:a,options:d})}catch(p){let w=p;s.isProcessing=!1,i=null,a=null,o=null,t({type:"error",text:`Failed to start query: ${w.message}`}),t({type:"done",code:1});return}i?.supportedModels&&i.supportedModels().then(p=>{p&&p.length>0&&(m=$(p),!l&&m.length>0&&(l=m[0].value),t({type:"model_info",model:l,models:m}))}).catch(()=>{}),Q().catch(()=>{})},activateAgentMode(){if(!a){y({type:"agent_mode_ready",success:!1,error:"No active session"});return}if(h.agents.length===0||!h.teamName){y({type:"agent_mode_ready",success:!1,error:"No team template found"});return}if(T!=="done")return;y({type:"agent_mode_status",statusText:"Checking team status\u2026"}),T="broadcast_test",D="",Y();let n=['You are activating VibeAgent mode. First, try to broadcast a ping to the team using SendMessage with to="*".',"If the broadcast succeeds, respond with exactly: TEAM_READY",'If the broadcast fails (e.g. "Not in a team context" or no teammates found), respond with exactly: TEAM_NEEDS_REBUILD',"Do not explain anything else \u2014 just respond with one of those two phrases."].join(`
|
|
6
6
|
`);a.push({type:"user",message:{role:"user",content:[{type:"text",text:n}]}})},async requestHistory(n,c){let f=await j();if(!f.getSessionMessages)return;let u=c||s.relaySessionId;try{let d=await f.getSessionMessages(n);d&&d.length>0&&t({type:"session_history",messages:d,...u?{relaySessionId:u}:{}})}catch(d){t({type:"info",text:`Could not restore session history: ${d.message}`})}m.length>0&&t({type:"model_info",model:l,models:m}),t({type:"config_state",model:l,mode:_,effort:b,betas:[]})},pushUserMessage(n,c,f){if(f&&n&&(n=`Use SendMessage to send the following to teammate "${f}":
|
|
7
7
|
|
|
8
8
|
${n}`),n&&n.startsWith("/")){let d=n.split(/\s/)[0].toLowerCase();if(d==="/clear"){M++,o&&o.abort(),a&&a.end(),this.startSession({cwd:N,model:l||void 0,permissionMode:_||void 0}).then(()=>{t({type:"slash_command_result",command:"clear",text:"Conversation cleared."})}).catch(p=>{t({type:"error",text:`Failed to clear session: ${p.message}`})});return}if(d==="/status"){let p=["**Bridge Status**","",`**Model:** ${l||"(not set)"}`,`**Available Models:** ${m.length>0?m.map(w=>`${w.displayName} (${w.value})`).join(", "):"(none discovered yet)"}`,`**Effort:** ${b}`,`**Permission Mode:** ${_}`,`**Session Active:** ${i?"yes":"no"}`,`**CLI Session:** ${s.cliSessionId||"(none)"}`,`**Working Directory:** ${N||"(not set)"}`,"","**Raw SDK Model Data:**","```json",JSON.stringify(m,null,2),"```"];t({type:"slash_command_result",command:"status",text:p.join(`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibetonomy/agent",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.2",
|
|
4
4
|
"description": "Vibetonomy agent — managed Claude Code sessions via npx",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
"@anthropic-ai/claude-agent-sdk": "0.2.80"
|
|
16
16
|
},
|
|
17
17
|
"optionalDependencies": {
|
|
18
|
-
"@vibetonomy/agent-linux-x64": "1.3.
|
|
19
|
-
"@vibetonomy/agent-linux-arm64": "1.3.
|
|
20
|
-
"@vibetonomy/agent-darwin-arm64": "1.3.
|
|
21
|
-
"@vibetonomy/agent-darwin-x64": "1.3.
|
|
22
|
-
"@vibetonomy/agent-win-x64": "1.3.
|
|
18
|
+
"@vibetonomy/agent-linux-x64": "1.3.2",
|
|
19
|
+
"@vibetonomy/agent-linux-arm64": "1.3.2",
|
|
20
|
+
"@vibetonomy/agent-darwin-arm64": "1.3.2",
|
|
21
|
+
"@vibetonomy/agent-darwin-x64": "1.3.2",
|
|
22
|
+
"@vibetonomy/agent-win-x64": "1.3.2"
|
|
23
23
|
},
|
|
24
24
|
"engines": {
|
|
25
25
|
"node": ">=18.0.0"
|