broods 0.12.0 → 0.13.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/dist/cli/index.js CHANGED
@@ -151,7 +151,7 @@ ${e.errorText}`};case"output-denied":return{kind:"error",title:`Tool Denied · $
151
151
  Reason: ${(a=e.approval.reason)!=null?a:"denied"}`}}}function $p(e,t,r,o){switch(r){case"collapsed":return!0;case"auto-collapsed":return e.parts.slice(t+1).some((n)=>nx(n,o));case"full":case"hidden":return!1}}function nx(e,t){switch(e.type){case"text":return e.text.trim().length>0;case"reasoning":return t.reasoning!=="hidden"&&e.text.trim().length>0;default:return ie(e)&&t.tools!=="hidden"}}function ax(e){switch(e.type){case"text-start":case"text-delta":case"reasoning-start":case"reasoning-delta":case"tool-input-start":case"tool-input-delta":return!0;default:return!1}}function sx(e,{hasPendingToolResults:t}){switch(e.type){case"start-step":return t?Ep:_r;case"tool-output-available":case"tool-output-error":case"tool-output-denied":return Ep;case"tool-input-available":return kp;case"tool-approval-response":return e.approved?kp:void 0;default:return}}function ix(e){switch(e.type){case"tool-output-available":case"tool-output-error":case"tool-output-denied":return!0;default:return!1}}function lx(e){switch(e.state){case"input-streaming":return"waiting";case"approval-requested":return"approval requested";case"input-available":return"executing";case"approval-responded":return e.approval.approved?"executing":"denied";case"output-available":case"output-error":return"done";case"output-denied":return"denied"}}function Mp(e){if(typeof e==="string")return e;return JSON.stringify(e,null,2)}function cx(e){var t;return`tool ${(t=e.title)!=null?t:e.toolName}`}function ux(e,t){return`${e}:${t}`}function dx(e){if(e instanceof ReadableStream)return e;return new ReadableStream({async start(t){try{for await(let r of e)t.enqueue(r);t.close()}catch(r){t.error(r)}}})}async function*px(e){if(e instanceof ReadableStream){let t=e.getReader();try{while(!0){let{done:r,value:o}=await t.read();if(r)return;yield o}}finally{t.releaseLock()}return}yield*e}function Jp(e,t){if(e.cache&&Kp(e,e.cache,t))return e.cache.lines;let r=fx(e,t);return e.cache={width:t,kind:e.kind,title:e.title,rightTitle:e.rightTitle,content:e.content,collapsed:e.collapsed===!0,lines:r},r}function Kp(e,t,r=t.width){return t.width===r&&t.kind===e.kind&&t.title===e.title&&t.rightTitle===e.rightTitle&&t.content===e.content&&t.collapsed===(e.collapsed===!0)}function fx(e,t){let r=Xb[e.kind],o=Math.max(1,t-4),n=` ${e.title} `,a=e.rightTitle?` ${e.rightTitle} `:"";if(e.collapsed){let p=Math.max(0,t-2-n.length-a.length),f=`${r.color}╭${n}${r.border.repeat(p)}${a}╮${me.reset}`,h=`${r.color}╰${r.border.repeat(Math.max(0,t-2))}╯${me.reset}`;return[f,h]}let s=Math.max(0,t-2-n.length-a.length),i=`${r.color}╭${n}${r.border.repeat(s)}${a}╮${me.reset}`,u=`${r.color}╰${r.border.repeat(Math.max(0,t-2))}╯${me.reset}`,d=(e.content.length>0?Nb(e.content):me.dim+"(streaming...)"+me.reset).split(`
152
152
  `).flatMap((p)=>hx(p,o));return[i,...d.map((p)=>mx(p,o,r.color)),u]}function mx(e,t,r){let o=Zt(e,t),n=" ".repeat(Math.max(0,t-Xe(o)));return`${r}│${me.reset} ${o}${n} ${r}│${me.reset}`}function hx(e,t){if(e.length===0)return[""];let r=[],o=e;while(Xe(o)>t){let n=gx(o,t);r.push(o.slice(0,n).trimEnd()),o=o.slice(n).trimStart()}return r.push(o),r}function gx(e,t){let o=Zt(e,t+1).lastIndexOf(" ");if(o>0)return o;return Zt(e,t).length}function vx(e){var t,r;let o="usage"in e?e.usage:void 0,n="messageMetadata"in e?(t=e.messageMetadata)==null?void 0:t.usage:void 0,a="messageMetadata"in e?(r=e.messageMetadata)==null?void 0:r.performance:void 0;return{totalTokens:Gp(o!=null?o:n),outputTokens:_a(o!=null?o:n),outputTokensPerSecond:a==null?void 0:a.outputTokensPerSecond}}function yx(e){var t;let r=e;return{totalTokens:Gp(r==null?void 0:r.usage),outputTokens:_a(r==null?void 0:r.usage),outputTokensPerSecond:(t=r==null?void 0:r.performance)==null?void 0:t.outputTokensPerSecond}}function Gp(e){let t=e==null?void 0:e.totalTokens;if(typeof t==="number")return t;if(typeof(t==null?void 0:t.total)==="number")return t.total;let r=wx(e),o=_a(e);if(r!=null&&o!=null)return r+o;return}function wx(e){let t=e==null?void 0:e.inputTokens;if(typeof t==="number")return t;if(typeof(t==null?void 0:t.total)==="number")return t.total;return e==null?void 0:e.promptTokens}function _a(e){let t=e==null?void 0:e.outputTokens;if(typeof t==="number")return t;if(typeof(t==null?void 0:t.total)==="number")return t.total;return e==null?void 0:e.completionTokens}function Hp(e,t){if(e==null)return;let r=`${e.toLocaleString()} ${e===1?"token":"tokens"}`,o=bx(e,t);return o==null?r:`${r} ${o}`}function bx(e,t){if(t==null||t<=0||!Number.isFinite(t))return;return`${Math.round(e/t*100).toLocaleString()}%`}function xx(e,t){if(t==="outputTokensPerSecond")return _x(e.outputTokensPerSecond);return Hp(e.outputTokens)}function _x(e){if(e==null)return;return`${Sx(e)} tok/s`}function Sx(e){return Number.isInteger(e)?e.toLocaleString():e.toLocaleString(void 0,{maximumFractionDigits:1})}function bo(e){let t=e.toString("utf8");switch(t){case"\f":return{type:"ctrl-l"};case"\x03":return{type:"ctrl-c"};case"\x1B":return{type:"escape"};case"\r":case`
153
153
  `:return{type:"enter"};case"":case"\b":return{type:"backspace"};case"\x1B[A":return{type:"up"};case"\x1B[B":return{type:"down"};case"\x1B[5~":return{type:"page-up"};case"\x1B[6~":return{type:"page-down"};default:if(t>=" "&&t!=="")return{type:"character",value:t};return{type:"ignore"}}}var Tx="outputTokensPerSecond",Ix=class{constructor(e){this.chatId=Pt();var t,r,o,n;this.agent=e.agent,this.transport=e.transport,this.renderer=(t=kx(e))!=null?t:Ex(e),this.title=e.title,this.tools=(r=e.tools)!=null?r:"auto-collapsed",this.reasoning=(o=e.reasoning)!=null?o:"auto-collapsed",this.responseStatistics=(n=e.responseStatistics)!=null?n:Tx,this.contextSize=e.contextSize,this.sandbox=e.sandbox}async run(){let e=this.title,t=[],r=0,o=()=>`message-${++r}`,n,a=!1,s=!1;while(!0){if(!s){if(n==null){if(!this.renderer.readPrompt){if(a)return;throw Error("No prompt was provided and the renderer does not support prompt input.")}try{n=await this.renderer.readPrompt({title:e})}catch(u){if(Pp(u))return;throw u}if(n==null)return}t.push(Rx(o(),n)),a=!0}let i=await this.streamMessages([...t],o);try{let u=await this.renderer.renderStream(i,{title:e,submittedPrompt:n,continueSession:Boolean(this.renderer.readPrompt),tools:this.tools,reasoning:this.reasoning,responseStatistics:this.responseStatistics,contextSize:this.contextSize,waitForExit:!1});if(u&&u.parts.length>0){let c=Ax(u);if(c.length>0){if(!this.renderer.readToolApproval)throw Error("Tool approval was requested, but the renderer does not support tool approval input.");for(let d of c){let p=await this.renderer.readToolApproval(d,{title:e});Cx(u,d,p)}Ap(t,u,s),s=!0,n=void 0;continue}Ap(t,u,s)}}catch(u){if(Pp(u))return;throw u}s=!1,n=void 0}}async streamMessages(e,t){let r=new AbortController,o=()=>r.abort();if(this.transport)return{uiMessageStream:await this.transport.sendMessages({trigger:"submit-message",chatId:this.chatId,messageId:void 0,messages:e,abortSignal:r.signal}),message:ga(e),abort:o};let n=this.agent,a=await n.stream({prompt:await co(e,{tools:n.tools}),abortSignal:r.signal,options:void 0,experimental_sandbox:this.sandbox});return{uiMessageStream:$x(a.fullStream,t,e),message:ga(e),abort:o}}};function Ex(e){return e.tools===void 0&&e.reasoning===void 0&&e.responseStatistics===void 0&&e.contextSize===void 0?new ha:new ha({tools:e.tools,reasoning:e.reasoning,responseStatistics:e.responseStatistics,contextSize:e.contextSize})}function kx(e){if(e.renderer)return e.renderer;if(!e.screen&&!e.userInput)return;return new ha({tools:e.tools,reasoning:e.reasoning,responseStatistics:e.responseStatistics,contextSize:e.contextSize,input:e.userInput,output:e.screen})}async function*$x(e,t,r=[]){var o,n;let a=new Set,s=new Set,i=new Set,u,c,d=!1;yield{type:"start",messageId:(n=(o=ga(r))==null?void 0:o.id)!=null?n:t()};for await(let p of e)switch(p.type){case"text-start":a.add(p.id),yield{type:"text-start",id:p.id,providerMetadata:p.providerMetadata};break;case"text-delta":if(!a.has(p.id))a.add(p.id),yield{type:"text-start",id:p.id,providerMetadata:p.providerMetadata};yield{type:"text-delta",id:p.id,delta:p.text,providerMetadata:p.providerMetadata};break;case"text-end":a.delete(p.id),yield{type:"text-end",id:p.id,providerMetadata:p.providerMetadata};break;case"reasoning-start":s.add(p.id),yield{type:"reasoning-start",id:p.id,providerMetadata:p.providerMetadata};break;case"reasoning-delta":if(!s.has(p.id))s.add(p.id),yield{type:"reasoning-start",id:p.id,providerMetadata:p.providerMetadata};yield{type:"reasoning-delta",id:p.id,delta:p.text,providerMetadata:p.providerMetadata};break;case"reasoning-end":s.delete(p.id),yield{type:"reasoning-end",id:p.id,providerMetadata:p.providerMetadata};break;case"tool-input-start":yield{type:"tool-input-start",toolCallId:p.id,toolName:p.toolName,providerExecuted:p.providerExecuted,providerMetadata:p.providerMetadata,toolMetadata:p.toolMetadata,dynamic:p.dynamic,title:p.title};break;case"tool-input-delta":yield{type:"tool-input-delta",toolCallId:p.id,inputTextDelta:p.delta};break;case"tool-call":i.add(p.toolCallId),yield{type:"tool-input-available",toolCallId:p.toolCallId,toolName:p.toolName,input:p.input,providerExecuted:p.providerExecuted,providerMetadata:p.providerMetadata,toolMetadata:p.toolMetadata,dynamic:p.dynamic,title:p.title};break;case"tool-approval-request":if(!i.has(p.toolCall.toolCallId))i.add(p.toolCall.toolCallId),yield{type:"tool-input-available",toolCallId:p.toolCall.toolCallId,toolName:p.toolCall.toolName,input:p.toolCall.input,providerExecuted:p.toolCall.providerExecuted,providerMetadata:p.toolCall.providerMetadata,toolMetadata:p.toolCall.toolMetadata,dynamic:p.toolCall.dynamic,title:p.toolCall.title};yield{type:"tool-approval-request",approvalId:p.approvalId,toolCallId:p.toolCall.toolCallId,isAutomatic:p.isAutomatic};break;case"tool-approval-response":yield{type:"tool-approval-response",approvalId:p.approvalId,approved:p.approved,reason:p.reason,providerExecuted:p.providerExecuted};break;case"tool-result":yield{type:"tool-output-available",toolCallId:p.toolCallId,output:p.output,providerExecuted:p.providerExecuted,providerMetadata:p.providerMetadata,toolMetadata:p.toolMetadata,dynamic:p.dynamic,preliminary:p.preliminary};break;case"tool-error":yield{type:"tool-output-error",toolCallId:p.toolCallId,errorText:Cp(p.error),providerExecuted:p.providerExecuted,providerMetadata:p.providerMetadata,toolMetadata:p.toolMetadata,dynamic:p.dynamic};break;case"tool-output-denied":yield{type:"tool-output-denied",toolCallId:p.toolCallId};break;case"source":if(p.sourceType==="url")yield{type:"source-url",sourceId:p.id,url:p.url,title:p.title,providerMetadata:p.providerMetadata};else yield{type:"source-document",sourceId:p.id,mediaType:p.mediaType,title:p.title,filename:p.filename,providerMetadata:p.providerMetadata};break;case"file":yield{type:"file",url:Op(p.file.mediaType,p.file.base64),mediaType:p.file.mediaType,providerMetadata:p.providerMetadata};break;case"reasoning-file":yield{type:"reasoning-file",url:Op(p.file.mediaType,p.file.base64),mediaType:p.file.mediaType,providerMetadata:p.providerMetadata};break;case"start-step":yield{type:"start-step"};break;case"finish-step":u=p.usage,c=p.performance,yield{type:"finish-step"};break;case"finish":yield*Rp(a,s),d=!0,yield{type:"finish",finishReason:p.finishReason,messageMetadata:Mx(u!=null?u:p.totalUsage,c)};break;case"abort":yield{type:"abort",reason:p.reason};break;case"error":yield{type:"error",errorText:Cp(p.error)};break}if(!d)yield*Rp(a,s),yield{type:"finish"}}function Mx(e,t){if((e==null?void 0:e.totalTokens)==null&&(e==null?void 0:e.outputTokens)==null&&(t==null?void 0:t.outputTokensPerSecond)==null)return;return{...(e==null?void 0:e.totalTokens)==null&&(e==null?void 0:e.outputTokens)==null?{}:{usage:{...e.totalTokens==null?{}:{totalTokens:e.totalTokens},...e.outputTokens==null?{}:{outputTokens:e.outputTokens}}},...(t==null?void 0:t.outputTokensPerSecond)==null?{}:{performance:{outputTokensPerSecond:t.outputTokensPerSecond}}}}function*Rp(e,t){for(let r of e)yield{type:"text-end",id:r};e.clear();for(let r of t)yield{type:"reasoning-end",id:r};t.clear()}function Rx(e,t){return{id:e,role:"user",parts:[{type:"text",text:t}]}}function Ap(e,t,r){var o;if(r&&((o=e.at(-1))==null?void 0:o.role)==="assistant"){e[e.length-1]=t;return}e.push(t)}function ga(e){let t=e.at(-1);return(t==null?void 0:t.role)==="assistant"?t:void 0}function Ax(e){let t=[];for(let[r,o]of e.parts.entries()){if(!ie(o)||o.state!=="approval-requested"||o.approval.isAutomatic===!0)continue;t.push({approvalId:o.approval.id,toolCallId:o.toolCallId,toolName:He(o),title:o.title,input:o.input,providerExecuted:o.providerExecuted,messageId:e.id,partIndex:r})}return t}function Cx(e,t,r){let o=e.parts[t.partIndex];if(!o||!ie(o)||o.toolCallId!==t.toolCallId)throw Error(`Could not find tool approval request ${t.approvalId}.`);o.state="approval-responded",o.approval={id:t.approvalId,approved:r.approved,...r.reason?{reason:r.reason}:{}}}function Cp(e){if(e instanceof Error)return e.message;if(typeof e==="string")return e;return JSON.stringify(e)}function Op(e,t){return`data:${e};base64,${t}`}function Pp(e){return e instanceof Error&&e.message==="Interrupted"}async function Yp(e){await new Ix(e).run()}async function Xp(e){if(e.prompt!==void 0)Ox(e.prompt);await Yp({title:`broods · ${e.agent.name}`,tools:"full",transport:new ef(e.client,e.agent)})}async function Qp(e){let t=hp({stream:tf(e.client.stream(e.agent,{input:e.prompt}),void 0,()=>{})});for await(let r of t)process.stdout.write(r);process.stdout.write(`
154
- `)}async function Ox(e){let t=process.stdin.listenerCount("data"),r=Date.now()+1e4;while(process.stdin.listenerCount("data")<=t){if(Date.now()>r)return;await new Promise((o)=>setTimeout(o,20))}process.stdin.emit("data",Buffer.from(e)),process.stdin.emit("data",Buffer.from("\r"))}class ef{client;agent;conversationKey=`tui-${Pt()}`;sentApprovals=new Set;sentUserTurns=0;constructor(e,t){this.client=e;this.agent=t}async reconnectToStream(){return null}async sendMessages(e){let t=this.pendingEvents(await co(e.messages));if(t.events.length===0)throw Error("Nothing new to send: the agent already saw this turn.");let r=this.client.stream(this.agent,{conversationKey:this.conversationKey,events:t.events});return wp({stream:tf(r,e.abortSignal,t.commit),originalMessages:e.messages,generateMessageId:Pt,sendSources:!0})}pendingEvents(e){let t=[],r=[],o=0;for(let n of e){if(n.role==="user"){if(o+=1,o>this.sentUserTurns)t.push(n);continue}if(n.role!=="tool")continue;for(let a of n.content)if(a.type==="tool-approval-response"&&!this.sentApprovals.has(a.approvalId))r.push(a)}if(r.length>0)t.push({role:"tool",content:r});return{events:t,commit:()=>{this.sentUserTurns=o;for(let n of r)this.sentApprovals.add(n.approvalId)}}}}function tf(e,t,r){let o=!1,n=()=>void e.return(void 0);return new ReadableStream({pull:async function(a){let s=await Promise.race([e.next(),Px(t)]);if(t?.aborted){n(),a.close();return}if(!o)o=!0,r();if(s.done)a.close();else a.enqueue(s.value)},cancel:n})}function Px(e){return new Promise((t)=>{if(!e)return;let r=()=>t({done:!0,value:void 0});if(e.aborted)r();else e.addEventListener("abort",r,{once:!0})})}var rf={name:"broods",version:"0.12.0",description:"CLI + TypeScript SDK for the broods agent platform.",type:"module",license:"MIT",homepage:"https://github.com/beeblastco/broods#readme",repository:{type:"git",url:"git+https://github.com/beeblastco/broods.git",directory:"packages/broods"},bugs:{url:"https://github.com/beeblastco/broods/issues"},keywords:["agents","ai","sdk","cli","broods"],bin:{broods:"dist/cli/index.js"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./account":{types:"./dist/account.d.ts",import:"./dist/account.js"}},main:"./dist/index.js",types:"./dist/index.d.ts",files:["dist","README.md","LICENSE.md"],scripts:{build:"bun scripts/build.ts && rollup -c rollup.dts.config.mjs && bun scripts/clean-dts-side-effects.ts && rm -rf .dts-temp",check:"tsc --noEmit","pack:check":"bun run build && npm pack --dry-run",test:"bun test"},engines:{node:">=22"},dependencies:{esbuild:"^0.28.2"},peerDependencies:{ai:"^7.0.58"},devDependencies:{"@ai-sdk/tui":"^1.0.59",ai:"^7.0.58","@chat-adapter/discord":"^4.35.0","@chat-adapter/github":"^4.35.0","@chat-adapter/slack":"^4.35.0","@chat-adapter/telegram":"^4.35.0","@types/bun":"^1.3.14",rollup:"^4.62.2",typescript:"^6.0.3","rollup-plugin-dts":"^6.4.1"}};var Aa=rf.version,ot="https://dashboard.broods.app",Wt="eu-west-1",Bx=[{region:"eu-west-1",label:"eu-west-1 (Ireland)"},{region:"us-east-1",label:"us-east-1 (US East)"},{region:"ap-southeast-1",label:"ap-southeast-1 (Singapore)"}],ge=`Global options:
154
+ `)}async function Ox(e){let t=process.stdin.listenerCount("data"),r=Date.now()+1e4;while(process.stdin.listenerCount("data")<=t){if(Date.now()>r)return;await new Promise((o)=>setTimeout(o,20))}process.stdin.emit("data",Buffer.from(e)),process.stdin.emit("data",Buffer.from("\r"))}class ef{client;agent;conversationKey=`tui-${Pt()}`;sentApprovals=new Set;sentUserTurns=0;constructor(e,t){this.client=e;this.agent=t}async reconnectToStream(){return null}async sendMessages(e){let t=this.pendingEvents(await co(e.messages));if(t.events.length===0)throw Error("Nothing new to send: the agent already saw this turn.");let r=this.client.stream(this.agent,{conversationKey:this.conversationKey,events:t.events});return wp({stream:tf(r,e.abortSignal,t.commit),originalMessages:e.messages,generateMessageId:Pt,sendSources:!0})}pendingEvents(e){let t=[],r=[],o=0;for(let n of e){if(n.role==="user"){if(o+=1,o>this.sentUserTurns)t.push(n);continue}if(n.role!=="tool")continue;for(let a of n.content)if(a.type==="tool-approval-response"&&!this.sentApprovals.has(a.approvalId))r.push(a)}if(r.length>0)t.push({role:"tool",content:r});return{events:t,commit:()=>{this.sentUserTurns=o;for(let n of r)this.sentApprovals.add(n.approvalId)}}}}function tf(e,t,r){let o=!1,n=()=>void e.return(void 0);return new ReadableStream({pull:async function(a){let s=await Promise.race([e.next(),Px(t)]);if(t?.aborted){n(),a.close();return}if(!o)o=!0,r();if(s.done)a.close();else a.enqueue(s.value)},cancel:n})}function Px(e){return new Promise((t)=>{if(!e)return;let r=()=>t({done:!0,value:void 0});if(e.aborted)r();else e.addEventListener("abort",r,{once:!0})})}var rf={name:"broods",version:"0.13.0",description:"CLI + TypeScript SDK for the broods agent platform.",type:"module",license:"MIT",homepage:"https://github.com/beeblastco/broods#readme",repository:{type:"git",url:"git+https://github.com/beeblastco/broods.git",directory:"packages/broods"},bugs:{url:"https://github.com/beeblastco/broods/issues"},keywords:["agents","ai","sdk","cli","broods"],bin:{broods:"dist/cli/index.js"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./account":{types:"./dist/account.d.ts",import:"./dist/account.js"}},main:"./dist/index.js",types:"./dist/index.d.ts",files:["dist","README.md","LICENSE.md"],scripts:{build:"bun scripts/build.ts && rollup -c rollup.dts.config.mjs && bun scripts/clean-dts-side-effects.ts && rm -rf .dts-temp",check:"tsc --noEmit","pack:check":"bun run build && npm pack --dry-run",test:"bun test"},engines:{node:">=22"},dependencies:{esbuild:"^0.28.2"},peerDependencies:{ai:"^7.0.58"},devDependencies:{"@ai-sdk/tui":"^1.0.59",ai:"^7.0.58","@chat-adapter/discord":"^4.35.0","@chat-adapter/github":"^4.35.0","@chat-adapter/slack":"^4.35.0","@chat-adapter/telegram":"^4.35.0","@types/bun":"^1.3.14",rollup:"^4.62.2",typescript:"^6.0.3","rollup-plugin-dts":"^6.4.1"}};var Aa=rf.version,ot="https://dashboard.broods.app",Wt="eu-west-1",Bx=[{region:"eu-west-1",label:"eu-west-1 (Ireland)"},{region:"us-east-1",label:"us-east-1 (US East)"},{region:"ap-southeast-1",label:"ap-southeast-1 (Singapore)"}],ge=`Global options:
155
155
  --project <name> Project name override (default: package name or folder)
156
156
  --stage <name> Target stage override (BROODS_STAGE otherwise)
157
157
  --base-url <url> broods API base URL for sync/env calls (default: discovered at login)
package/dist/index.d.ts CHANGED
@@ -876,7 +876,7 @@ type ObservabilitySpanRow = {
876
876
  spanId: string;
877
877
  parentSpanId?: string;
878
878
  name: string;
879
- kind: "task" | "subtask" | "model.step" | "tool.call" | "phase";
879
+ kind: "task" | "cron" | "subtask" | "model.step" | "tool.call" | "phase";
880
880
  startTimeMs: number;
881
881
  endTimeMs: number;
882
882
  durationMs: number;
@@ -921,6 +921,8 @@ type ObservabilityErrorMessage = {
921
921
  };
922
922
  type ObservabilityServerMessage = ObservabilityReadyMessage | ObservabilityBackfillMessage | ObservabilityLogMessage | ObservabilitySpanMessage | ObservabilityErrorMessage;
923
923
  declare function isObservabilityClientMessage(v: unknown): v is ObservabilityClientMessage;
924
+ /** Whether a span is a top-level run, each of which owns its own trace. */
925
+ declare function isRootSpanKind(kind: ObservabilitySpanRow["kind"]): boolean;
924
926
 
925
927
  /**
926
928
  * Configurable client for running deployed agents over direct core SSE.
@@ -2021,5 +2023,5 @@ declare function isResource(value: unknown): value is AnyResource;
2021
2023
  declare function isChannelDefinition(value: unknown): value is AnyChannelDefinition;
2022
2024
  declare function isBroodsConfig(value: unknown): value is BroodsConfigDefinition;
2023
2025
 
2024
- export { BroodsAccountApiError, BroodsAccountClient, BroodsClient, BroodsWebSocketClient, DEFAULT_CORE_BASE_URL, IngressAcceptedError, MAX_OBSERVABILITY_BACKFILL, BroodsWebSocketClient as WebSocketClient, BroodsWebSocketClient as WebsocketClient, defineAgent, defineBroods, defineChannelRecord, defineCron, defineDiscordChannel, defineGitHubChannel, defineHarness, definePancakeChannel, definePolicy, defineSandbox, defineSkill, defineSlackChannel, defineTelegramChannel, defineTool, defineWorkspace, defineZaloChannel, env, envPlaceholder, isBroodsConfig, isChannelDefinition, isObservabilityClientMessage, isResource, normalizeHttpServiceUrl, readSseStream, resolveRunEvents, toWebSocketBaseUrl };
2026
+ export { BroodsAccountApiError, BroodsAccountClient, BroodsClient, BroodsWebSocketClient, DEFAULT_CORE_BASE_URL, IngressAcceptedError, MAX_OBSERVABILITY_BACKFILL, BroodsWebSocketClient as WebSocketClient, BroodsWebSocketClient as WebsocketClient, defineAgent, defineBroods, defineChannelRecord, defineCron, defineDiscordChannel, defineGitHubChannel, defineHarness, definePancakeChannel, definePolicy, defineSandbox, defineSkill, defineSlackChannel, defineTelegramChannel, defineTool, defineWorkspace, defineZaloChannel, env, envPlaceholder, isBroodsConfig, isChannelDefinition, isObservabilityClientMessage, isResource, isRootSpanKind, normalizeHttpServiceUrl, readSseStream, resolveRunEvents, toWebSocketBaseUrl };
2025
2027
  export type { Account, AccountAgent, AccountChannel, AccountEnvVar, AccountPolicy, AccountSandbox, AccountTool, AccountWorkspace, Agent, AgentChannelWorkspaceScope, AgentChannelsConfig, AgentCodeHookConfig, AgentConfig, AgentConfigDoc, AgentDefinitionConfig, AgentDiscordChannelConfig, AgentGitHubChannelConfig, AgentHandle, AgentHookEventName, AgentHooks, AgentHooksConfig, AgentPancakeChannelConfig, AgentPolicyConfig, AgentPolicyDefinitionConfig, AgentPolicyDocument, AgentProviderSettings, AgentReference, AgentResource, AgentRunEventInput, AgentRunInput, AgentRunModelOverrides, AgentRunOverrides, AgentRunResult, AgentSkillsDefinitionConfig, AgentSlackChannelConfig, AgentStreamPart, AgentSubagentDefinitionConfig, AgentTelegramChannelConfig, AgentWebhookHookConfig, AgentWorkspaceInput, AgentWorkspaceRef, AgentWorkspaceRefInput, AgentZaloChannelConfig, AnyChannelDefinition, AnyResource, AsyncAgentRun, AsyncPollOptions, AsyncRequestAccepted, AsyncStatus, BroodsAccount, BroodsAccountClientOptions, BroodsClientOptions, BroodsConfigDefinition, BroodsProjectConfig, BroodsWebSocketClientOptions, ChannelDefinition, ChannelMessageReceived, ChannelRecordConfig, ChannelRecordDefinitionConfig, ChannelRecordResource, ChannelReference, ChannelType, CliManifest, CliManifestResource, CliResourceKind, CreateAgentResult, CreateClientCronInput, CreateCronInput, CreateToolInput, Cron, CronDefinitionConfig, CronDoc, CronLastStatus, CronResource, CronRun, CronStatus, CustomTool, DeleteAccountResult, DiscordChannelDefinition, DiscordChannelInput, DiscordMessageSource, DiscordSource, Doc, EnvAccessor, EnvRef, EnvRefString, GeneratedIds, GitHubChannelDefinition, GitHubChannelInput, GitHubMessageSource, GitHubSource, HarnessDefinition, HarnessType, HookContext, Id, IngressMode, IngressStatus, LogLevel, ObservabilityBackfillMessage, ObservabilityClientMessage, ObservabilityErrorMessage, ObservabilityLogEntry, ObservabilityLogMessage, ObservabilityReadyMessage, ObservabilityServerMessage, ObservabilitySpanMessage, ObservabilitySpanRow, ObservabilitySubscribeMessage, ObservabilityUnsubscribeMessage, PancakeChannelDefinition, PancakeChannelInput, PancakeMessageSource, PancakeSource, PolicyDefinitionConfig, PolicyResource, ProjectDoc, ProviderConfigInput, ProviderSettingsInput, ResourceApi, ResourceDefinition, ResourceInput, ResourceKind, RotateSecretResult, Sandbox, SandboxConfig, SandboxConfigDoc, SandboxDefinitionConfig, SandboxLifecycleResult, SandboxResource, SandboxSnapshotResult, SandboxTerminalTicket, Skill, SkillDefinitionConfig, SkillResource, SkillUploadInput, SlackChannelDefinition, SlackChannelInput, SlackMessageSource, SlackSource, StageDoc, TelegramChannelDefinition, TelegramChannelInput, TelegramMessageSource, TelegramSource, ToolApprovalSummary, ToolDefinitionConfig, ToolExecuteContext, ToolExecuteOptions, ToolResource, ToolScope, UpdateAgentInput, UpdateCronInput, UpdateToolInput, WebSocketAttachInput, WebSocketClientAttachMessage, WebSocketClientCancelMessage, WebSocketClientControlMessage, WebSocketClientExecuteMessage, WebSocketClientMessage, WebSocketConstructorLike, WebSocketHandlers, WebSocketLike, WebSocketOutputMessage, WebSocketRunInput, WebSocketServerMessage, WebSocketStreamMessage, WebSocketSubscription, Workspace, WorkspaceConfig, WorkspaceConfigDoc, WorkspaceFileEntry, WorkspaceResource, ZaloChannelDefinition, ZaloChannelInput, ZaloMessageSource, ZaloSource };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{a as M,b as h,c as O}from"./chunk-ce3yb3yz.js";import{A as q,B as N,C as _,D as P,E as H,F as U,G as B,H as K,I as j,J as F,K as G,L as z,M as Z,N as V,O as X,d as x,e as I,p as v,q as k,r as S,s as A,t as R,u as W,v as L,w,x as E,y as D,z as T}from"./chunk-rr4srzb6.js";import"./chunk-pfhy5049.js";var o=500;function a(s){if(typeof s!=="object"||s===null)return!1;let e=s;if(e.type==="subscribe"){let t=e.stream;if(t!=="logs"&&t!=="traces")return!1;let r=e.backfill;if(r!==void 0&&(typeof r!=="number"||!Number.isSafeInteger(r)||r<0||r>500))return!1;if(e.liveOnly!==void 0&&typeof e.liveOnly!=="boolean")return!1;let n=e.minLevel;if(n!==void 0&&n!=="INFO"&&n!=="WARN"&&n!=="ERROR")return!1;return!0}if(e.type==="unsubscribe"){let t=e.stream;return t==="logs"||t==="traces"}return!1}export{h as BroodsAccountApiError,O as BroodsAccountClient,S as BroodsClient,R as BroodsWebSocketClient,v as DEFAULT_CORE_BASE_URL,k as IngressAcceptedError,o as MAX_OBSERVABILITY_BACKFILL,R as WebSocketClient,R as WebsocketClient,P as defineAgent,_ as defineBroods,G as defineChannelRecord,z as defineCron,T as defineDiscordChannel,E as defineGitHubChannel,H as defineHarness,q as definePancakeChannel,F as definePolicy,B as defineSandbox,K as defineSkill,D as defineSlackChannel,w as defineTelegramChannel,j as defineTool,U as defineWorkspace,N as defineZaloChannel,L as env,M as envPlaceholder,X as isBroodsConfig,V as isChannelDefinition,a as isObservabilityClientMessage,Z as isResource,A as normalizeHttpServiceUrl,I as readSseStream,x as resolveRunEvents,W as toWebSocketBaseUrl};
1
+ import{a as h,b as O,c as R}from"./chunk-ce3yb3yz.js";import{A as N,B as _,C as P,D as H,E as K,F as U,G as B,H as j,I as F,J as G,K as z,L as Z,M as V,N as X,O as Y,d as I,e as v,p as k,q as S,r as A,s as M,t as W,u as L,v as w,w as E,x as D,y as T,z as q}from"./chunk-rr4srzb6.js";import"./chunk-pfhy5049.js";var o=500;function a(t){if(typeof t!=="object"||t===null)return!1;let e=t;if(e.type==="subscribe"){let r=e.stream;if(r!=="logs"&&r!=="traces")return!1;let n=e.backfill;if(n!==void 0&&(typeof n!=="number"||!Number.isSafeInteger(n)||n<0||n>500))return!1;if(e.liveOnly!==void 0&&typeof e.liveOnly!=="boolean")return!1;let s=e.minLevel;if(s!==void 0&&s!=="INFO"&&s!=="WARN"&&s!=="ERROR")return!1;return!0}if(e.type==="unsubscribe"){let r=e.stream;return r==="logs"||r==="traces"}return!1}function i(t){return t==="task"||t==="cron"||t==="subtask"}export{O as BroodsAccountApiError,R as BroodsAccountClient,A as BroodsClient,W as BroodsWebSocketClient,k as DEFAULT_CORE_BASE_URL,S as IngressAcceptedError,o as MAX_OBSERVABILITY_BACKFILL,W as WebSocketClient,W as WebsocketClient,H as defineAgent,P as defineBroods,z as defineChannelRecord,Z as defineCron,q as defineDiscordChannel,D as defineGitHubChannel,K as defineHarness,N as definePancakeChannel,G as definePolicy,B as defineSandbox,j as defineSkill,T as defineSlackChannel,E as defineTelegramChannel,F as defineTool,U as defineWorkspace,_ as defineZaloChannel,w as env,h as envPlaceholder,Y as isBroodsConfig,X as isChannelDefinition,a as isObservabilityClientMessage,V as isResource,i as isRootSpanKind,M as normalizeHttpServiceUrl,v as readSseStream,I as resolveRunEvents,L as toWebSocketBaseUrl};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "broods",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "description": "CLI + TypeScript SDK for the broods agent platform.",
5
5
  "type": "module",
6
6
  "license": "MIT",