@pikku/cli 0.12.22 → 0.12.24
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/console-app/assets/{index-CAk106ji.js → index-BDOqBctb.js} +2 -2
- package/console-app/index.html +1 -1
- package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +1 -1
- package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +1 -1
- package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-channel.js +1 -1
- package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
- package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
- package/dist/.pikku/function/pikku-function-types.gen.d.ts +1 -1
- package/dist/.pikku/function/pikku-function-types.gen.js +1 -1
- package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
- package/dist/.pikku/function/pikku-functions-meta.gen.json +161 -269
- package/dist/.pikku/function/pikku-functions.gen.js +1 -1
- package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
- package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
- package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +1 -1
- package/dist/.pikku/http/pikku-http-wirings-meta.gen.json +1 -62
- package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -2
- package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -2
- package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
- package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
- package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -1
- package/dist/.pikku/pikku-bootstrap.gen.js +1 -1
- package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
- package/dist/.pikku/pikku-meta-service.gen.js +1 -1
- package/dist/.pikku/pikku-services.gen.d.ts +1 -1
- package/dist/.pikku/pikku-types.gen.d.ts +1 -1
- package/dist/.pikku/pikku-types.gen.js +1 -1
- package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
- package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +1 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
- package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
- package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +14 -20
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
- package/dist/.pikku/schemas/register.gen.js +5 -23
- package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
- package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
- package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
- package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
- package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
- package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
- package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
- package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
- package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
- package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
- package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +1 -1
- package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
- package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
- package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
- package/dist/bin/pikku-bin.mjs +2 -2
- package/dist/src/functions/commands/dev.js +17 -2
- package/dist/src/functions/db/local-db.js +1 -0
- package/dist/src/functions/runtimes/tanstack-start/pikku-command-tanstack-start.js +1 -1
- package/dist/src/scaffold/rpc-remote.gen.js +1 -1
- package/dist/src/utils/serialize-schemas.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/skills/pikku-i18n/SKILL.md +15 -6
- package/skills/pikku-rtl/SKILL.md +38 -24
- package/dist/.pikku/schemas/schemas/GraphStarterInput.schema.json +0 -1
- package/dist/.pikku/schemas/schemas/GraphStarterOutput.schema.json +0 -1
- package/dist/.pikku/schemas/schemas/WorkflowRunStatus.schema.json +0 -1
- package/dist/.pikku/schemas/schemas/WorkflowRunnerInput.schema.json +0 -1
- package/dist/.pikku/schemas/schemas/WorkflowStarterInput.schema.json +0 -1
- package/dist/.pikku/schemas/schemas/WorkflowStarterOutput.schema.json +0 -1
- package/dist/.pikku/schemas/schemas/WorkflowStatusCheckerInput.schema.json +0 -1
- package/dist/.pikku/schemas/schemas/WorkflowStatusStreamFullInput.schema.json +0 -1
- package/dist/.pikku/schemas/schemas/WorkflowStatusStreamInput.schema.json +0 -1
- package/dist/src/scaffold/workflow-routes.gen.d.ts +0 -84
- package/dist/src/scaffold/workflow-routes.gen.js +0 -229
|
@@ -170,7 +170,7 @@ Consider installing the package or pass your own 'workerFactory' to ELK's constr
|
|
|
170
170
|
`)}var tQe=({channelName:e,channelMeta:t,allChannelsMeta:n})=>{let r=Iy(),[i,a]=(0,D.useState)(null),o=(0,D.useCallback)(e=>{a(null),r(`/apis?tab=channels&id=${encodeURIComponent(e)}`)},[r]);return(0,k.jsxs)(A,{className:ix.flexRow,children:[(0,k.jsx)(A,{className:`${ix.listPaneFixed} ${ix.flexColumn}`,style:{width:280,minWidth:220},children:(0,k.jsx)(JZe,{channelName:e,channel:t,allChannelsMeta:n,selected:i,onSelect:a,onChannelSwitch:o})}),(0,k.jsx)(A,{className:`${ix.detailPane} ${ix.overflowHidden}`,children:(0,k.jsx)($Ze,{channelName:e,channel:t,selected:i})})]})};const nQe=()=>{let[e]=Ry(),t=e.get(`id`)||``,{meta:n}=nx(),r=n.channelsMeta||{},i=t||Object.keys(r)[0]||``,a=r[i];return a?(0,k.jsx)(ux,{children:(0,k.jsx)(tQe,{channelName:i,channelMeta:a,allChannelsMeta:r})}):(0,k.jsx)(Qf,{h:`100%`,children:(0,k.jsx)(M,{c:`dimmed`,children:`No channels found.`})})},rQe=()=>(0,k.jsx)(D.Suspense,{fallback:(0,k.jsx)(Qf,{h:`100%`,children:(0,k.jsx)(ff,{})}),children:(0,k.jsx)(nQe,{})}),CW=({list:e,detail:t,emptyMessage:n=`Select an item`,hasSelection:r,collapsible:i=!1,listWidth:a,height:o})=>(0,k.jsxs)(A,{className:ix.listDetailContainer,style:o?{height:o}:void 0,children:[(0,k.jsx)(A,{className:a?ix.listPaneFixed:ix.listPaneFlex,style:a?{width:a,minWidth:typeof a==`number`?Math.round(a*.78):void 0}:void 0,children:e}),(!i||r)&&(0,k.jsx)(A,{className:ix.detailPane,children:r?t:(0,k.jsx)(A,{className:ix.emptyState,children:(0,k.jsx)(M,{c:`dimmed`,ff:`monospace`,size:`sm`,children:n})})})]}),wW=({active:e,onClick:t,gridTemplateColumns:n,children:r,padding:i})=>(0,k.jsx)(Vd,{onClick:t,className:ix.listItemPadded,"data-active":e,style:n?{display:`grid`,gridTemplateColumns:n,...i?{padding:i}:{}}:i?{padding:i}:void 0,children:r});var TW={tool:`rgba(245,158,11,0.7)`,resource:`rgba(6,182,212,0.6)`,prompt:`rgba(124,58,237,0.7)`},iQe={tool:`yellow`,resource:`cyan`,prompt:`violet`},aQe=({item:e})=>{let{navigateInPanel:t}=lx(),n=e?.pikkuFuncId,{data:r}=Wk(n??``),i=r?.inputSchemaName,a=r?.outputSchemaName,o=r?.name||n,s=e?.method||`tool`;return(0,k.jsxs)(A,{className:ix.flexColumn,children:[(0,k.jsxs)(A,{className:ix.detailHeader,style:{padding:`10px 16px`,background:`rgba(255,255,255,0.01)`},children:[(0,k.jsxs)(A,{className:ix.flexGrow,children:[(0,k.jsx)(M,{size:`sm`,fw:600,ff:`monospace`,c:`var(--app-meta-value)`,children:e.name||e.wireId||`unnamed`}),o&&(0,k.jsxs)(M,{size:`sm`,ff:`monospace`,c:`var(--app-text-muted)`,children:[o,`()`]})]}),(0,k.jsx)(Kf,{size:`sm`,variant:`light`,color:iQe[s],children:s})]}),(0,k.jsxs)(A,{className:ix.flexRow,style:{flex:1,minHeight:0},children:[(0,k.jsxs)(A,{className:ix.splitLeft,children:[(0,k.jsx)(cA,{children:s}),(0,k.jsx)(sA,{label:`name`,children:(0,k.jsx)(M,{size:`sm`,ff:`monospace`,c:`var(--app-meta-value)`,children:e.name||e.wireId||`unnamed`})}),n&&(0,k.jsx)(sA,{label:`function`,children:(0,k.jsx)(M,{size:`sm`,fw:600,ff:`monospace`,c:`var(--app-meta-value)`,className:ix.clickableText,onClick:()=>t(`function`,n,o||n,r),children:o})}),e.description?(0,k.jsx)(sA,{label:`description`,align:`flex-start`,children:(0,k.jsx)(M,{size:`sm`,c:`var(--app-text)`,lh:1.6,children:e.description})}):(0,k.jsx)(A,{p:`xs`,mt:4,mb:4,style:{background:`rgba(245,158,11,0.08)`,borderRadius:6,border:`1px solid rgba(245,158,11,0.2)`},children:(0,k.jsxs)(M,{size:`sm`,c:`rgba(245,158,11,0.9)`,lh:1.6,children:[`Missing description — MCP clients won't know when to use this`,` `,s,`.`]})}),i&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(cA,{children:`Input Schema`}),(0,k.jsx)(dA,{schemaName:i})]}),a&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(cA,{children:`Output Schema`}),(0,k.jsx)(dA,{schemaName:a})]})]}),(0,k.jsxs)(A,{className:ix.splitRight,children:[(0,k.jsx)(M,{size:`sm`,fw:600,ff:`monospace`,c:`var(--app-meta-label)`,mb:4,children:`Connect your MCP client`}),(0,k.jsx)(M,{size:`sm`,c:`var(--app-text-muted)`,mb:`md`,lh:1.6,children:`All tools, resources, and prompts are available once connected.`}),(0,k.jsx)(yW,{label:`Claude Desktop · claude_desktop_config.json`,code:JSON.stringify({mcpServers:{pikku:{command:`npx`,args:[`-y`,`@pikku/mcp-server`,`http://localhost:4002`]}}},null,2),language:`json`}),(0,k.jsx)(A,{mt:`md`,children:(0,k.jsx)(yW,{label:`Cursor · .cursor/mcp.json`,code:JSON.stringify({mcpServers:{pikku:{command:`npx`,args:[`-y`,`@pikku/mcp-server`,`http://localhost:4002`]}}},null,2),language:`json`})}),(0,k.jsxs)(A,{mt:`md`,p:`sm`,className:ix.surfaceCard,children:[(0,k.jsx)(M,{size:`sm`,fw:600,ff:`monospace`,c:`var(--app-section-label)`,tt:`uppercase`,mb:8,children:`SSE endpoint · any client`}),(0,k.jsx)(A,{className:ix.codeInputBox,children:(0,k.jsx)(M,{size:`sm`,ff:`monospace`,c:`var(--app-tag-color)`,className:ix.flexGrow,children:`http://localhost:4002/mcp`})}),(0,k.jsx)(M,{size:`sm`,c:`var(--app-text-muted)`,mt:8,lh:1.6,children:`Use this URL directly in any MCP-compatible client that supports SSE transport.`})]})]})]})]})};const oQe=()=>{let{meta:e}=nx(),[t,n]=(0,D.useState)(null),[r,i]=(0,D.useState)(``),a=(0,D.useMemo)(()=>e.mcpMeta?[...e.mcpMeta].sort((e,t)=>(e.name||``).localeCompare(t.name||``)):[],[e.mcpMeta]),o=(0,D.useMemo)(()=>{let e={tool:[],resource:[],prompt:[]},t=r.toLowerCase();for(let n of a){let r=n.method||`tool`;t&&!n.name?.toLowerCase().includes(t)&&!n.pikkuFuncId?.toLowerCase().includes(t)||(e[r]||(e[r]=[]),e[r].push(n))}return e},[a,r]),s=(0,D.useMemo)(()=>t&&a.find(e=>`${e.method}::${e.wireId||e.name}`===t)||null,[a,t]);return(0,k.jsx)(CW,{listWidth:280,list:(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(xW,{value:r,onChange:i,label:`MCP`,count:a.length}),(0,k.jsx)(Bd,{className:ix.flexGrow,children:Object.entries(o).map(([e,r])=>r.length===0?null:(0,k.jsxs)(D.Fragment,{children:[(0,k.jsxs)(A,{className:ix.groupLabel,children:[(0,k.jsxs)(M,{size:`sm`,ff:`monospace`,c:`var(--app-section-label)`,tt:`uppercase`,className:ix.gridHeaderLabel,children:[e,`s`]}),(0,k.jsx)(A,{className:ix.separator})]}),r.map(e=>{let r=`${e.method}::${e.wireId||e.name}`,i=t===r;return(0,k.jsx)(wW,{active:i,onClick:()=>n(r),padding:`6px 12px`,children:(0,k.jsxs)(A,{style:{display:`flex`,alignItems:`center`,gap:7,width:`100%`},children:[(0,k.jsx)(A,{className:ix.typeDot,style:{background:TW[e.method||`tool`]}}),(0,k.jsxs)(A,{className:ix.flexGrow,children:[(0,k.jsx)(M,{size:`sm`,ff:`monospace`,c:i?`var(--app-meta-value)`:`var(--app-text)`,truncate:!0,children:e.name||e.wireId||`unnamed`}),e.pikkuFuncId&&(0,k.jsxs)(M,{size:`sm`,ff:`monospace`,c:i?`var(--app-meta-label)`:`var(--app-text-muted)`,truncate:!0,style:{fontSize:9},children:[e.pikkuFuncId,`()`]})]}),!e.description&&(0,k.jsx)(M,{size:`sm`,c:`rgba(245,158,11,0.8)`,title:`Missing description`,children:`⚠`})]})},r)})]},e))})]}),detail:s?(0,k.jsx)(aQe,{item:s}):null,hasSelection:!!s,emptyMessage:`Select a tool, resource, or prompt`})};var EW=Symbol(`@pikku/core/state`);const DW=()=>(globalThis[EW]||(globalThis[EW]=new Map),globalThis[EW]),OW=(e,t,n,r)=>{let i=e??`__main__`;DW().has(i)||kW(i);let a=DW().get(i);return r!==void 0&&(a[t][n]=r),a[t][n]};var sQe=()=>({function:{meta:{},functions:new Map},rpc:{meta:{},files:new Map},addons:{packages:new Map},http:{middleware:new Map,permissions:new Map,routes:new Map,meta:{post:{},get:{},delete:{},patch:{},head:{},put:{},options:{}}},channel:{channels:new Map,meta:{}},scheduler:{tasks:new Map,meta:[]},queue:{registrations:new Map,meta:{}},workflows:{registrations:new Map,meta:{}},trigger:{functions:new Map,triggers:new Map,triggerSources:new Map,meta:{},sourceMeta:{}},mcp:{resources:new Map,resourcesMeta:{},toolsMeta:{},prompts:new Map,promptsMeta:{}},agent:{agents:new Map,agentsMeta:{}},gateway:{gateways:new Map,meta:{}},cli:{meta:{programs:{},renderers:{}},programs:{}},middleware:{tagGroup:{},httpGroup:{},global:[]},channelMiddleware:{tagGroup:{}},permissions:{tagGroup:{},httpGroup:{},global:[]},misc:{errors:new Map,schemas:new Map,middleware:{},channelMiddleware:{},permissions:{}},package:{factories:null,singletonServices:null,credentialsMeta:null,requiredParentServices:null}});const kW=e=>{DW().has(e)||DW().set(e,sQe())};DW().has(`__main__`)||(()=>{let e=DW().get(`__main__`)?.misc.errors;if(globalThis[EW]=new Map,kW(`__main__`),e){let t=DW().get(`__main__`);t.misc.errors=e}})();const AW=()=>{let e=OW(null,`package`,`singletonServices`);if(!e)throw Error(`Singleton services not initialized`);return e};var jW=class extends Error{constructor(e=`An error occurred`){super(e),Object.setPrototypeOf(this,new.target.prototype)}};const MW=(e,{status:t,message:n,mcpCode:r})=>{OW(null,`misc`,`errors`).set(e,r===void 0?{status:t,message:n}:{status:t,message:n,mcpCode:r})};MW(class extends jW{},{status:500,message:`The middleware wire is invalid for the current wiring type.`}),MW(class extends jW{},{status:500,message:`Required metadata is missing`}),MW(class extends jW{},{status:500,message:`A required service is not configured`}),MW(class extends jW{},{status:403,message:`This operation is only available in local development mode`}),MW(class extends jW{},{status:400,mcpCode:-32600,message:`The server cannot or will not process the request due to client error (e.g., malformed request syntax).`});var cQe=class extends jW{},lQe=class extends jW{},NW=class extends jW{};MW(cQe,{status:401,message:`Authentication is required and has failed or has not yet been provided.`}),MW(lQe,{status:401,message:`Session missing.`}),MW(NW,{status:401,message:`The session provided is not valid.`}),MW(class extends jW{},{status:402,message:`Reserved for future use, often related to digital payment or subscription services.`});var PW=class extends jW{};MW(PW,{status:403,message:`The client does not have permission to access the requested resource.`}),MW(class extends jW{payload;constructor(e,t,n){super(`Missing credential: ${e}`),this.payload={error:`missing_credential`,credentialName:e,credentialType:t,connectUrl:n}}},{status:403,message:`A required credential is not configured.`});var uQe=class extends jW{};MW(uQe,{status:403,message:`The session is readonly and cannot access this function.`}),MW(class extends jW{},{status:403,message:`The request was made from an origin that is not permitted to access this resource.`}),MW(class extends jW{},{status:404,mcpCode:-32601,message:`The server cannot find the requested resource.`}),MW(class extends jW{},{status:405,message:`The request method is known by the server but is not supported by the resource.`}),MW(class extends jW{},{status:406,message:`The requested resource cannot produce a response matching the list of acceptable values in the request's headers.`}),MW(class extends jW{},{status:407,message:`The client must authenticate itself to get the requested response.`}),MW(class extends jW{},{status:408,message:`The request timeout has expired.`}),MW(class extends jW{},{status:409,message:`The request could not be completed due to a conflict with the current state of the target resource.`}),MW(class extends jW{},{status:410,message:`The resource that is being accessed is no longer available and will not be available again.`}),MW(class extends jW{},{status:411,message:`The request did not specify the length of its content, which is required by the requested resource.`}),MW(class extends jW{},{status:412,message:`The server does not meet one of the preconditions that the requester put on the request.`}),MW(class extends jW{},{status:413,message:`The request is larger than the server is willing or able to process.`}),MW(class extends jW{},{status:414,message:`The URI requested by the client is longer than the server is willing to interpret.`}),MW(class extends jW{},{status:415,message:`The server does not support the media format of the requested data.`}),MW(class extends jW{},{status:416,message:`The client has asked for a portion of the file, but the server cannot supply that portion.`}),MW(class extends jW{},{status:417,message:`The server cannot meet the requirements of the Expect request-header field.`});var dQe=class extends jW{};MW(dQe,{status:422,message:`The server understood the content type of the request content, and the syntax of the request content was correct, but it was unable to process the contained instructions..`}),MW(class extends jW{},{status:423,message:`The resource is locked, meaning it can't be accessed. Its response body should contain information in WebDAV's XML format.`}),MW(class extends jW{},{status:429,message:`The user has sent too many requests in a given amount of time ("rate limiting").`}),MW(class extends jW{},{status:500,message:`A generic error message, given when no more specific message is suitable.`}),MW(class extends jW{},{status:501,message:`The server does not recognize the request method and cannot support it.`}),MW(class extends jW{},{status:502,message:`The server was acting as a gateway or proxy and received an invalid response from the upstream server.`}),MW(class extends jW{},{status:503,message:`The server is currently unavailable (overloaded or down).`}),MW(class extends jW{},{status:504,message:`The server was acting as a gateway or proxy and did not receive a timely response from the upstream server.`}),MW(class extends jW{},{status:505,message:`The server does not support the HTTP protocol version used in the request.`}),MW(class extends jW{},{status:524,message:`The server took too long to complete the request, reaching the maximum compute time allowed.`});var fQe=class extends jW{};MW(fQe,{status:500,message:`A required schema was not found. Ensure schema generation has been run.`});var pQe=class extends jW{constructor(){super(`No AI provider configured. Please set up an AI provider (e.g. OpenAI, Anthropic) and provide a valid API key to use this agent.`)}};MW(pQe,{status:503,message:`No AI provider configured. Please set up an AI provider (e.g. OpenAI, Anthropic) and provide a valid API key to use this agent.`}),MW(class extends jW{constructor(e){super(e||`AI provider API key is missing or invalid. Please check your API key configuration.`)}},{status:401,message:`AI provider API key is missing or invalid. Please check your API key configuration.`});const mQe=async(e,t)=>{await Promise.all(Object.values(t).map(async t=>{if(t?.close)try{await t.close()}catch(t){e.error(t)}}))};Date.now().toString(36);const FW=(e,t)=>{let n=[],r=e[t];r&&n.push(r);let i=t.lastIndexOf(`:`);for(;i!==-1;){let r=t.slice(0,i),a=e[r];a&&n.push(a),i=r.lastIndexOf(`:`)}return n};var hQe=Object.freeze([]);const IW=e=>{if(!e||e.length===0)return hQe;if(e.length===1)return Object.freeze([e[0]]);let t=new Set,n=[];for(let r=0;r<e.length;r++){let i=e[r];t.has(i)||(t.add(i),n.push(i))}return Object.freeze(n)};var gQe={highest:0,high:1,medium:2,low:3,lowest:4},LW=e=>gQe[e.__priority??`medium`],_Qe=e=>e.sort((e,t)=>LW(e)-LW(t));const vQe=async(e,t,n,r)=>{let i=yQe(n)?n:[...n].sort((e,t)=>LW(e)-LW(t)),a,o=async n=>{if(i&&n<i.length)return await i[n](e,t,()=>o(n+1));r&&(a=await r())};return await o(0),a};var yQe=e=>{for(let t=1;t<e.length;t++)if(LW(e[t])<LW(e[t-1]))return!1;return!0},RW=e=>OW(null,`misc`,`middleware`)[e]?.[0],zW={http:{},rpc:{},channel:{},queue:{},scheduler:{},trigger:{},mcp:{},agent:{},cli:{},workflow:{},gateway:{}};const bQe=(e,t,{wireInheritedMiddleware:n,wireMiddleware:r,funcInheritedMiddleware:i,funcMiddleware:a,packageName:o=null}={})=>{if(zW[e][t])return zW[e][t];let s=[],c=OW(o,`middleware`,`global`);if(c&&c.length>0&&s.push(...c),n){for(let e of n)if(e.type===`http`){let t=OW(o,`middleware`,`httpGroup`)[e.route];t&&s.push(...t)}else if(e.type===`tag`){let t=FW(OW(o,`middleware`,`tagGroup`),e.tag);for(let e of t)s.push(...e)}else if(e.type===`wire`){let t=RW(e.name);t&&s.push(t)}}if(r&&s.push(...r),i){for(let e of i)if(e.type===`tag`){let t=FW(OW(o,`middleware`,`tagGroup`),e.tag);for(let e of t)s.push(...e)}}return a&&s.push(...a),_Qe(s),zW[e][t]=IW(s),zW[e][t]};var xQe=e=>OW(null,`misc`,`channelMiddleware`)[e]?.[0],SQe={};const BW=(e,t,{wireInheritedChannelMiddleware:n,wireChannelMiddleware:r,packageName:i=null}={})=>{let a=`${e}:${t}`;if(SQe[a])return SQe[a];let o=[];if(n){for(let e of n)if(e.type===`tag`){let t=FW(OW(i,`channelMiddleware`,`tagGroup`),e.tag);for(let e of t)o.push(...e)}else if(e.type===`wire`){let t=xQe(e.name);t&&o.push(t)}}return r&&o.push(...r),SQe[a]=IW(o),SQe[a]};function CQe(e,t,n){if(n.length===0||!e.channel)return e;let r=e.channel,i=r.send.bind(r),a=async(e,r)=>{if(e>=n.length){await i(r);return}let o=n[e];await o(t,r,async t=>{if(t!=null)if(Array.isArray(t))for(let n of t)await a(e+1,n);else await a(e+1,t)})};return{...e,channel:{...r,send:(e=>a(0,e)),sendBinary:r.sendBinary}}}var VW=async(e,t,n,r)=>{if(!e)return!0;let i=!1,a=Object.values(e);if(a.length===0)return!0;for(let e of a)if(e instanceof Array?(await Promise.all(e.map(e=>e(t,n,r)))).every(e=>e)&&(i=!0):i=await e(t,n,r),i)return!0;return!1},wQe=e=>{let t=OW(null,`misc`,`permissions`)[e];if(Array.isArray(t)&&t.length===1)return t[0]},HW={http:{},rpc:{},channel:{},queue:{},scheduler:{},trigger:{},mcp:{},agent:{},cli:{},workflow:{},gateway:{}},UW=(e,t,{wireInheritedPermissions:n,wirePermissions:r,funcInheritedPermissions:i,funcPermissions:a,packageName:o=null}={})=>{if(HW[e][t])return HW[e][t];let s=[],c=OW(o,`permissions`,`global`);if(c&&c.length>0&&s.push(...c),n){for(let e of n)if(e.type===`http`){let t=OW(o,`permissions`,`httpGroup`)[e.route];t&&(Array.isArray(t)?s.push(...t):s.push(t))}else if(e.type===`tag`){let t=FW(OW(o,`permissions`,`tagGroup`),e.tag);for(let e of t)Array.isArray(e)?s.push(...e):s.push(e)}else if(e.type===`wire`){let t=wQe(e.name);t&&s.push(t)}}if(r&&(Array.isArray(r)?s.push(...r):s.push(r)),i){for(let e of i)if(e.type===`tag`){let t=FW(OW(o,`permissions`,`tagGroup`),e.tag);for(let e of t)Array.isArray(e)?s.push(...e):s.push(e)}}return a&&(Array.isArray(a)?s.push(...a):s.push(a)),HW[e][t]=IW(s),HW[e][t]};const TQe=async(e,t,{wireInheritedPermissions:n,wirePermissions:r,funcInheritedPermissions:i,funcPermissions:a,services:o,wire:s,data:c,packageName:l=null})=>{let u=UW(e,t,{wireInheritedPermissions:n,wirePermissions:r,funcInheritedPermissions:i,funcPermissions:a,packageName:l});if(u.length>0){for(let e of u)if(await VW(typeof e==`function`?{permission:e}:e,o,c,s))return;throw o.logger.debug(`Permission denied - combined permissions`),new PW(`Permission denied`)}},EQe=async(e,t,n,r=null)=>{if(!e?.length)return!0;let i=UW(`agent`,`authcheck:${Math.random()}`,{funcInheritedPermissions:e,packageName:r});if(i.length===0)return!0;let a={session:t},o=[];for(let e of i)if(typeof e==`function`)e.__pikkuAuth&&o.push(e);else if(e&&typeof e==`object`)for(let t of Object.values(e)){let e=Array.isArray(t)?t:[t];for(let t of e)typeof t==`function`&&t.__pikkuAuth&&o.push(t)}if(o.length===0)return!0;for(let e of o)if(await e(n,null,a))return!0;return!1};var DQe=(e,t)=>t?`${t}:${e}`:e;const OQe=(e,t,n=null)=>{let r=OW(n,`misc`,`schemas`).get(e);if(r?.properties)for(let e in r.properties){let n=r.properties[e];if(typeof n==`boolean`)continue;let i=n.type;typeof i!=`boolean`&&(i===`array`&&typeof t[e]==`string`?t[e]=t[e].split(`,`):i===`string`&&n.format===`date-time`&&(t[e]=new Date(t[e])))}},kQe=async(e,t,n,r,i=null)=>{if(t){if(!n){if(r&&(r.length>0||Object.keys(r).length>0))throw e.warn(`No schema provided, but data was passed`),new dQe(`No data expected`);return}let a=DQe(n,i),o=OW(i,`misc`,`schemas`),s=o.get(n);if(s===void 0){let t=Array.from(o.keys());throw e.error(`Schema '${n}' not found for package '${i??`main`}'. Available schemas: ${t.join(`, `)||`(none)`}`),new fQe(`Schema '${n}' not found. Ensure schema generation has been run.`)}await t.compileSchema(a,s),await t.validateSchema(a,r??{})}};var WW=`@v`;function AQe(e){let t=e.lastIndexOf(WW);if(t===-1)return{baseName:e,version:null};let n=e.slice(t+2),r=Number(n);return!Number.isInteger(r)||r<1?{baseName:e,version:null}:{baseName:e.slice(0,t),version:r}}var jQe=class{sessionStore;sessionChanged=!1;initial;session;pikkuUserId;constructor(e){this.sessionStore=e}setPikkuUserId(e){this.pikkuUserId=e}getPikkuUserId(){return this.pikkuUserId}setInitial(e){this.session=e}freezeInitial(){return this.initial===void 0&&(this.initial=this.session),this.initial}async set(e){this.sessionChanged=!0,this.session=e,this.sessionStore&&this.pikkuUserId&&await this.sessionStore.set(this.pikkuUserId,e)}async clear(){this.sessionChanged=!0,this.session=void 0,this.sessionStore&&this.pikkuUserId&&await this.sessionStore.clear(this.pikkuUserId)}get(){return this.session}};function GW(e){return{session:e.get(),setSession:t=>e.setInitial(t),getSession:()=>e.get(),hasSessionChanged:()=>e.sessionChanged}}const MQe=e=>{if(e.pikkuUserId)return e.pikkuUserId;let t=e.session;if(t?.userId&&typeof t.userId==`string`)return t.userId;if(e.queue?.pikkuUserId)return e.queue.pikkuUserId;if(e.workflow?.pikkuUserId)return e.workflow.pikkuUserId};var NQe=class{credentialService;wire;credentials={};loaded=!1;loadPromise;constructor(e,t){this.credentialService=e,this.wire=t}set(e,t){this.credentials[e]=t}get(e){return this.loaded?this.credentials[e]??null:this.lazyLoad().then(()=>this.credentials[e]??null)}getAll(){return this.loaded?this.credentials:this.lazyLoad().then(()=>this.credentials)}getScoped(e){let t=()=>{let t={};for(let n of e)n in this.credentials&&(t[n]=this.credentials[n]);return t};return this.loaded?t():this.lazyLoad().then(t)}lazyLoad(){return this.loadPromise||=this.doLoad(),this.loadPromise}async doLoad(){if(this.loaded=!0,!this.credentialService||!this.wire)return;let e=MQe(this.wire);if(!e)return;this.wire.pikkuUserId=e;let t=await this.credentialService.getAll(e);for(let[e,n]of Object.entries(t))e in this.credentials||(this.credentials[e]=n)}};function PQe(e,t){return{setCredential:(t,n)=>e.set(t,n),getCredential:t=>e.get(t),getCredentials:()=>t?e.getScoped(t):e.getAll()}}const KW=()=>globalThis.crypto.randomUUID();globalThis.crypto;function FQe(e,t){let n=e.memory;return{storage:n?.storage?t[n.storage]:t.aiStorage}}function IQe(e,t){return!!e?.workingMemory&&!!t}function LQe(e,t){let n={...e};for(let e of Object.keys(t)){if(e===`__proto__`||e===`constructor`||e===`prototype`)continue;let r=t[e];r===null?delete n[e]:typeof r==`object`&&!Array.isArray(r)&&typeof n[e]==`object`&&n[e]!==null&&!Array.isArray(n[e])?n[e]=LQe(n[e],r):n[e]=r}return n}function RQe(e,t){let n=[];if(t?.properties){let e=t.properties,r=Object.entries(e).map(([e,t])=>` - ${e} (${t.type??`unknown`})${t.description?` - ${t.description}`:``}`);r.length>0&&n.push(`Working memory fields:\n${r.join(`
|
|
171
171
|
`)}`)}return e&&Object.keys(e).length>0?n.push(`Current working memory:\n${JSON.stringify(e)}`):n.push(`Current working memory: (empty)`),n.push(`When you learn new information, output a partial JSON update in <working_memory> tags. Only include durable facts you have actually derived or the user has confirmed. Do not output templates, placeholders, or narration. Only include changed fields. Leave unknown fields untouched. Set a field to null to delete it.`),n.join(`
|
|
172
172
|
|
|
173
|
-
`)}async function zQe(e,t,n,r){let i=[],a=IQe(e,t)?t:void 0;if(a){let e=RQe(await a.getWorkingMemory(n.threadId,`thread`),r);i.push({id:`wm-${KW()}`,role:`system`,content:e,createdAt:new Date})}return i}async function qW(e,t,n,r,i,a){let o=r?.workingMemory?JW(a.text).cleanedText:a.text;if(e){let n=i?[i]:[];for(let e of a.steps)if(e.toolCalls?.length){let t=e.toolCalls.map(()=>KW());n.push({id:KW(),role:`assistant`,toolCalls:e.toolCalls.map((e,n)=>({id:t[n],name:e.name,args:e.args})),createdAt:new Date}),n.push({id:KW(),role:`tool`,toolResults:e.toolCalls.map((e,n)=>({id:t[n],name:e.name,result:e.result})),createdAt:new Date})}let r=a.uiSpec==null?o:[...o?[{type:`text`,text:o}]:[],{type:`generative-ui`,spec:a.uiSpec}];n.push({id:KW(),role:`assistant`,content:r||void 0,createdAt:new Date}),await e.saveMessages(t,n)}return o}function BQe(e,t=1e5){let n=VQe(e),r=0,i=[];for(let e=n.length-1;e>=0;e--){let a=n[e],o=HQe(a);if(r+o>t&&i.length>0)break;r+=o,i.unshift(a)}if(i.length>0&&i[0].role!==`user`&&i[0].role!==`system`){let e=i.findIndex(e=>e.role===`user`||e.role===`system`);if(e>0)return i.slice(e)}return i}function VQe(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r.role===`assistant`&&r.toolCalls?.length){let i=e[n+1];if(!i||i.role!==`tool`||!i.toolResults?.length){r.content&&t.push({...r,toolCalls:void 0});continue}let a=new Set(r.toolCalls.map(e=>e.id)),o=new Set(i.toolResults.map(e=>e.id));if(![...a].every(e=>o.has(e))){r.content&&t.push({...r,toolCalls:void 0}),t.push({...i,toolResults:i.toolResults.filter(e=>!a.has(e.id))||void 0}),n++;continue}}t.push(r)}return t.filter(e=>e.role!==`tool`||e.toolResults&&e.toolResults.length>0)}function HQe(e){let t=0;if(e.content)if(typeof e.content==`string`)t+=e.content.length;else for(let n of e.content)n.type===`text`?t+=n.text.length:t+=1e3;return e.toolCalls&&(t+=JSON.stringify(e.toolCalls).length),e.toolResults&&(t+=JSON.stringify(e.toolResults).length),Math.ceil(t/4)}function UQe(e){let t=e.match(/<working_memory>([\s\S]*?)<\/working_memory>/);if(!t)return null;try{return JSON.parse(t[1].trim())}catch{return null}}function WQe(e){return e.replace(/<working_memory>[\s\S]*?<\/working_memory>/g,``).trim()}function JW(e){let t=UQe(e);return{workingMemory:t,cleanedText:t?WQe(e):e}}function GQe(e){let t=[`<working_memory>`,`</working_memory>`],n=e.lastIndexOf(`<`);if(n===-1)return 0;let r=e.slice(n);for(let e of t)if(e.startsWith(r))return r.length;return 0}function KQe(e){let t=``,n=0;for(;n<e.length;){let r=e.indexOf(`<working_memory>`,n);if(r===-1){let r=e.slice(n),i=GQe(r);return t+=i>0?r.slice(0,-i):r,t}t+=e.slice(n,r);let i=e.indexOf(`</working_memory>`,r);if(i===-1)return t;n=i+17}return t}function qQe(e){return{modifyOutputStream:async(e,{event:t,state:n})=>{if(t.type!==`text-delta`)return t;let r=`${n.rawText??``}${t.text}`;n.rawText=r;let i=KQe(r),a=n.emittedVisibleText??``;if(!i.startsWith(a))return n.emittedVisibleText=i,{...t,text:i};let o=i.slice(a.length);return n.emittedVisibleText=i,o?{...t,text:o}:null},modifyOutput:async(t,{text:n,messages:r,usage:i})=>{let{workingMemory:a,cleanedText:o}=JW(n);if(a&&e.storage){let t=LQe(await e.storage.getWorkingMemory(e.threadId,`thread`)??{},a),n=!0;if(e.schemaService&&e.workingMemorySchemaName)try{await e.schemaService.validateSchema(e.workingMemorySchemaName,t)}catch(t){n=!1,e.logger?.warn(`Working memory validation failed: ${t instanceof Error?t.message:String(t)}`)}n&&await e.storage.saveWorkingMemory(e.threadId,`thread`,t)}return{text:o,messages:r}}}}function YW(e,t,n){return IQe(e,t)?[qQe({storage:t,threadId:n.threadId,workingMemorySchemaName:n.workingMemorySchemaName,logger:n.logger,schemaService:n.schemaService})]:[]}function XW(e,t){return{model:t.model,temperature:t.temperature,maxSteps:t.maxSteps}}function JQe(e,t,n){let r=``,i=``,a=null,o=[],s=[],c={inputTokens:0,outputTokens:0},l=async()=>{if(!t)return;let e=i,r=a,c=o,l=s;if(i=``,a=null,o=[],s=[],e||r!=null||c.length>0){let i=[{id:KW(),role:`assistant`,content:r==null?e||void 0:[...e?[{type:`text`,text:e}]:[],{type:`generative-ui`,spec:r}],toolCalls:c.length>0?c:void 0,createdAt:new Date}];l.length>0&&i.push({id:KW(),role:`tool`,toolResults:l,createdAt:new Date}),await t.saveMessages(n,i)}};return{channelId:e.channelId,openingData:e.openingData,get state(){return e.state},get fullText(){return r},get totalUsage(){return c},flush:l,close:()=>e.close(),sendBinary:t=>e.sendBinary(t),send:n=>{if(t)switch(n.type){case`text-delta`:i+=n.text,r+=n.text;break;case`tool-call`:o.push({id:n.toolCallId,name:n.toolName,args:n.args});break;case`tool-result`:s.push({id:n.toolCallId,name:n.toolName,result:typeof n.result==`string`?n.result:JSON.stringify(n.result)});break;case`generative-ui`:a=n.spec;break;case`usage`:c.inputTokens+=n.tokens.input,c.outputTokens+=n.tokens.output,n.model&&(c.model=n.model),l();break;case`done`:l();break}e.send(n)},setState:t=>e.setState(t),getState:()=>e.getState(),clearState:()=>e.clearState()}}async function ZW(e,t,n,r,i,a){let o=e.totalUsage,s=e.fullText,c=r;for(let e=t.length-1;e>=0;e--){let r=t[e];if(r.modifyOutput){let e=await r.modifyOutput(n,{text:s,messages:c,usage:{inputTokens:o.inputTokens,outputTokens:o.outputTokens}});s=e.text,c=e.messages}}await i.updateRun(a,{status:`completed`,...o.model?{usage:{inputTokens:o.inputTokens,outputTokens:o.outputTokens,model:o.model}}:{}})}async function YQe(e){let{agent:t,runnerParams:n,maxSteps:r,agentRunner:i,streamChannel:a,channel:o,runId:s,aiMiddlewares:c}=e,l=AW();for(let e=0;e<r;e++){if(t.prepareStep){let r=!1;if(await t.prepareStep({stepNumber:e,messages:n.messages,tools:n.tools,toolChoice:n.toolChoice,model:n.model,stop:()=>{r=!0}}),r)break}o.send({type:`step-start`,stepNumber:e});let r=await i.stream(n,a);for(let t of c)t.afterStep&&await t.afterStep(l,{stepNumber:e,text:r.text,toolCalls:r.toolCalls,toolResults:r.toolResults,usage:r.usage,finishReason:r.finishReason});if(r.toolCalls.length===0)break;let u=XQe(r,n.tools,s);if(u.length>0){for(let e of u){let t=n.tools.find(t=>t.name===e.toolName);if(t?.approvalDescriptionFn&&!e.reason)try{e.reason=await t.approvalDescriptionFn(e.args)}catch{}}return{outcome:`approval`,approvals:u}}let d=ZQe(r,s);if(d.length>0)return QW(n,r),{outcome:`credential`,credentialRequests:d};QW(n,r)}return{outcome:`done`}}function XQe(e,t,n){let r=[];for(let n of e.toolCalls){if(t.find(e=>e.name===n.toolName)?.needsApproval){r.push(new eG(n.toolCallId,n.toolName,n.args));continue}let i=e.toolResults.find(e=>e.toolCallId===n.toolCallId);if(i?.result&&typeof i.result==`object`&&`__approvalRequired`in i.result){let e=i.result;if(e.subApprovals?.length)for(let t of e.subApprovals)r.push(new eG(t.toolCallId,e.toolName,e.args,void 0,t.toolName,t.args,e.agentRunId));else r.push(new eG(n.toolCallId,e.toolName,e.args,e.reason,e.displayToolName,e.displayArgs,e.agentRunId))}}return r}function ZQe(e,t){let n=[];for(let t of e.toolResults)if(t.result&&typeof t.result==`object`&&`__credentialRequired`in t.result){let r=t.result,i=e.toolCalls.find(e=>e.toolCallId===t.toolCallId);n.push(new n$e(t.toolCallId,i?.toolName??`unknown`,i?.args??{},r.credentialName,r.credentialType,r.connectUrl))}return n}function QW(e,t){let n=t.object&&typeof t.object==`object`?t.object:null,r=n?.ui==null?t.text||void 0:[...t.text?[{type:`text`,text:t.text}]:[],{type:`generative-ui`,spec:n.ui}],i={id:KW(),role:`assistant`,content:r,toolCalls:t.toolCalls.length>0?t.toolCalls.map(e=>({id:e.toolCallId,name:e.toolName,args:e.args})):void 0,...t.reasoningContent?{reasoningContent:t.reasoningContent}:{},createdAt:new Date};if(e.messages.push(i),t.toolResults.length>0){let n={id:KW(),role:`tool`,toolResults:t.toolResults.map(e=>({id:e.toolCallId,name:e.toolName,result:typeof e.result==`string`?e.result:JSON.stringify(e.result)})),createdAt:new Date};e.messages.push(n)}}function QQe(e,t,n,r,i){return(async()=>{await i.flush();let a=e.map(e=>e.agentRunId?{type:`agent-call`,toolCallId:e.toolCallId,agentName:e.toolName,agentRunId:e.agentRunId,displayToolName:e.displayToolName??e.toolName,displayArgs:e.displayArgs??e.args}:{type:`tool-call`,toolCallId:e.toolCallId,toolName:e.toolName,args:e.args});await r.updateRun(t,{status:`suspended`,suspendReason:`approval`,pendingApprovals:a});for(let r of e){let e={type:`approval-request`,toolCallId:r.toolCallId,toolName:r.displayToolName??r.toolName,args:r.displayArgs??r.args,reason:r.reason,runId:t};n.send(e)}n.send({type:`done`}),n.close()})()}function $W(e,t,n,r,i){return(async()=>{await i.flush();let a=e.map(e=>({type:`credential-request`,toolCallId:e.toolCallId,toolName:e.toolName,args:e.args,credentialName:e.credentialName,credentialType:e.credentialType,connectUrl:e.connectUrl}));await r.updateRun(t,{status:`suspended`,suspendReason:`credential`,pendingApprovals:a}),n.send({type:`done`}),n.close()})()}async function $Qe(e,t,n,r,i,a){let o=i??new Map,s=t,c={channel:n,options:a},{agent:l,packageName:u,resolvedName:d,agentRunner:f,storage:p,memoryConfig:m,threadId:h,userMessage:g,runnerParams:_,maxSteps:v,missingRpcs:y,workingMemorySchemaName:b}=await o$e(e,s,r,o,c),x=AW(),{aiRunState:S}=x;if(!S)throw Error(`AIRunStateService not available in singletonServices`);if(y.length>0)return await S.createRun({agentName:e,threadId:h,resourceId:s.resourceId,status:`suspended`,suspendReason:`rpc-missing`,missingRpcs:y,usage:{inputTokens:0,outputTokens:0,model:l.model},createdAt:new Date,updatedAt:new Date}),n.send({type:`suspended`,reason:`rpc-missing`,missingRpcs:y}),n.send({type:`done`}),``;let C=[...YW(m,p,{threadId:h,workingMemorySchemaName:b,logger:x.logger,schemaService:x.schema}),...l.aiMiddleware??[]],w=_.messages,T=_.instructions;for(let e of C)if(e.modifyInput){let t=await e.modifyInput(x,{messages:w,instructions:T});w=t.messages,T=t.instructions}_.messages=w,_.instructions=T;let E=await S.createRun({agentName:e,threadId:h,resourceId:s.resourceId,status:`running`,usage:{inputTokens:0,outputTokens:0,model:l.model},createdAt:new Date,updatedAt:new Date});p&&await p.saveMessages(h,[g]);let D=C.filter(e=>e.modifyOutputStream).map(e=>{let t={},n=[];return async(r,i,a)=>{n.push(i);let o=await e.modifyOutputStream(r,{event:i,allEvents:n,state:t});if(o!=null)if(Array.isArray(o))for(let e of o)await a(e);else await a(o)}}),O=OW(u,`agent`,`agentsMeta`)[d],ee=BW(`agent`,`stream:${e}`,{wireInheritedChannelMiddleware:O?.channelMiddleware,wireChannelMiddleware:[...l.channelMiddleware??[],...D]}),te=JQe(n,p,h),ne=ee.length>0?CQe({channel:te},x,ee).channel:te,re=l.agentMode!==`supervise`&&O.agents?.length,ie={delegated:!1};re&&(c.delegateState=ie);let ae=re?{...ne,send:e=>{ie.delegated&&(e.type===`text-delta`||e.type===`reasoning-delta`)||ne.send(e)},delegateState:ie}:ne;try{let e=await YQe({agent:l,runnerParams:_,maxSteps:v,agentRunner:f,streamChannel:ae,persistingChannel:te,channel:n,runId:E,aiMiddlewares:C});return e.outcome===`approval`?(await QQe(e.approvals,E,n,S,te),te.fullText):e.outcome===`credential`?(await $W(e.credentialRequests,E,n,S,te),te.fullText):(await ZW(te,C,x,_.messages,S,E),n.send({type:`done`}),n.close(),te.fullText)}catch(e){for(let t of C)if(t.onError)try{await t.onError(x,{error:e instanceof Error?e:Error(String(e)),stepNumber:-1,messages:_.messages})}catch{}return await S.updateRun(E,{status:`failed`,errorMessage:e instanceof Error?e.message:String(e)}),n.send({type:`error`,message:e instanceof Error?e.message:String(e)}),n.send({type:`done`}),n.close(),te.fullText}}async function e$e(e,t,n,r){let i=AW(),{aiRunState:a}=i;if(!a)throw Error(`AIRunStateService not available in singletonServices`);let o=await a.getRun(e.runId);if(!o)throw Error(`No run found for runId ${e.runId}`);let s=o.pendingApprovals?.find(t=>t.toolCallId===e.toolCallId);if(!s)throw Error(`No pending approval for toolCallId ${e.toolCallId} on run ${e.runId}`);await a.resolveApproval(e.toolCallId,e.approved?`approved`:`denied`);let{agent:c,packageName:l,resolvedName:u}=r$e(o.agentName),{storage:d}=FQe(c,i),f=c.memory,p=i.aiAgentRunner;if(!p)throw new pQe;if(!e.approved){if(s.type===`agent-call`&&await a.updateRun(s.agentRunId,{status:`failed`}),d&&await d.saveMessages(o.threadId,[{id:KW(),role:`tool`,toolResults:[{id:e.toolCallId,name:s.type===`tool-call`||s.type===`credential-request`?s.toolName:s.agentName,result:`The user explicitly declined this action. Inform them that it was declined and do not retry.`}],createdAt:new Date}]),((await a.getRun(o.runId))?.pendingApprovals??[]).length>0){t.send({type:`done`}),t.close();return}await a.updateRun(o.runId,{status:`running`}),await t$e(o,c,l,u,d,f,p,t,n,a,r);return}if(s.type===`agent-call`){let i=await a.getRun(s.agentRunId);if(!i)throw Error(`Sub-agent run not found: ${s.agentRunId}`);let c=i.pendingApprovals?.find(t=>t.toolCallId===e.toolCallId)??i.pendingApprovals?.[0];if(!c)throw Error(`No pending approval on sub-agent run ${s.agentRunId}`);let l=a$e(t,i.agentName,`resume`);t.send({type:`agent-call`,agentName:i.agentName,session:`resume`,input:null}),await e$e({runId:s.agentRunId,toolCallId:c.toolCallId,approved:!0},l,n,r),t.send({type:`agent-result`,agentName:i.agentName,session:`resume`,result:null}),d&&await d.saveMessages(o.threadId,[{id:KW(),role:`tool`,toolResults:[{id:e.toolCallId,name:s.agentName,result:`Sub-agent completed successfully`}],createdAt:new Date}])}else{let i={channel:t,options:{...r,requiresToolApproval:!1}},a=c.aiMiddleware??[],{tools:f}=await tG(n,new Map,o.resourceId,u,l,i,a),p=f.find(e=>e.name===s.toolName);if(!p)throw Error(`Tool "${s.toolName}" not found in agent definition`);let m=typeof s.args==`string`?JSON.parse(s.args):s.args,h,g=!1;try{h=await p.execute(m)}catch(e){h=e?.payload?.error===`missing_credential`?e.payload:`Error: ${e instanceof Error?e.message:String(e)}`,g=!0}let _=typeof h==`string`?h:JSON.stringify(h);d&&await d.saveMessages(o.threadId,[{id:KW(),role:`tool`,toolResults:[{id:e.toolCallId,name:s.toolName,result:_}],createdAt:new Date}]),t.send({type:`tool-result`,toolCallId:e.toolCallId,toolName:s.toolName,result:h,...g?{isError:!0}:{}})}if(((await a.getRun(o.runId))?.pendingApprovals??[]).length>0){t.send({type:`done`}),t.close();return}await a.updateRun(o.runId,{status:`running`}),await t$e(o,c,l,u,d,f,p,t,n,a,r)}async function t$e(e,t,n,r,i,a,o,s,c,l,u){let d=AW(),f=OW(n,`agent`,`agentsMeta`)[r],p=f?.workingMemorySchema??null,m=i?await i.getMessages(e.threadId,{lastN:a?.lastMessages??20}):[],h=p?OW(n,`misc`,`schemas`).get(p):void 0,g=BQe([...await zQe(a,i,{message:``,threadId:e.threadId,resourceId:e.resourceId},h),...m]),_=await i$e(r,n),v=[...YW(a,i,{threadId:e.threadId,workingMemorySchemaName:p,logger:d.logger,schemaService:d.schema}),...t.aiMiddleware??[]],y=g,b=_;for(let e of v)if(e.modifyInput){let t=await e.modifyInput(d,{messages:y,instructions:b});y=t.messages,b=t.instructions}let x=v.filter(e=>e.modifyOutputStream).map(e=>{let t={},n=[];return async(r,i,a)=>{n.push(i);let o=await e.modifyOutputStream(r,{event:i,allEvents:n,state:t});if(o!=null)if(Array.isArray(o))for(let e of o)await a(e);else await a(o)}}),S=BW(`agent`,`stream:${e.agentName}`,{wireInheritedChannelMiddleware:f?.channelMiddleware,wireChannelMiddleware:[...t.channelMiddleware??[],...x]}),C=JQe(s,i,e.threadId),w=S.length>0?CQe({channel:C},d,S).channel:C,T={channel:s,options:u},E=(await tG(c,new Map,e.resourceId,r,n,T,v)).tools,D=XW(r,t),O=D.maxSteps??10,ee={model:D.model,temperature:D.temperature,instructions:b,messages:y,tools:E,maxSteps:1,toolChoice:t.toolChoice??`auto`,outputSchema:f?.outputSchema?OW(n,`misc`,`schemas`).get(f.outputSchema):void 0};try{let n=await YQe({agent:t,runnerParams:ee,maxSteps:O,agentRunner:o,streamChannel:w,persistingChannel:C,channel:s,runId:e.runId,aiMiddlewares:v});if(n.outcome===`approval`){await QQe(n.approvals,e.runId,s,l,C);return}if(n.outcome===`credential`){await $W(n.credentialRequests,e.runId,s,l,C);return}await ZW(C,v,d,ee.messages,l,e.runId),s.send({type:`done`}),s.close()}catch(t){for(let e of v)if(e.onError)try{await e.onError(d,{error:t instanceof Error?t:Error(String(t)),stepNumber:-1,messages:ee.messages})}catch{}await l.updateRun(e.runId,{status:`failed`,errorMessage:t instanceof Error?t.message:String(t)}),s.send({type:`error`,message:t instanceof Error?t.message:String(t)}),s.send({type:`done`}),s.close()}}var eG=class extends jW{toolCallId;toolName;args;reason;displayToolName;displayArgs;agentRunId;constructor(e,t,n,r,i,a,o){super(`Tool '${i??t}' requires approval`),this.toolCallId=e,this.toolName=t,this.args=n,this.reason=r,this.displayToolName=i,this.displayArgs=a,this.agentRunId=o}},n$e=class extends jW{toolCallId;toolName;args;credentialName;credentialType;connectUrl;constructor(e,t,n,r,i,a){super(`Tool '${t}' requires credential '${r}'`),this.toolCallId=e,this.toolName=t,this.args=n,this.credentialName=r,this.credentialType=i,this.connectUrl=a}};const r$e=e=>{if(!e)throw console.error(`[resolveAgent] agentName is undefined/null! Stack:`,Error().stack),Error(`resolveAgent called with undefined agentName`);let t=OW(null,`agent`,`agents`).get(e);if(t)return{agent:t,packageName:null,resolvedName:e};let n=e.indexOf(`:`);if(n!==-1){let t=e.substring(0,n),r=e.substring(n+1),i=OW(null,`addons`,`packages`).get(t);if(i){let e=OW(i.package,`agent`,`agents`).get(r);if(e)return{agent:e,packageName:i.package,resolvedName:r}}}throw Error(`AI agent not found: ${e}`)};async function i$e(e,t){let n=OW(t,`agent`,`agentsMeta`)[e],r=[];n?.role&&r.push(n.role),n?.personality&&r.push(n.personality),n?.goal&&r.push(n.goal);let i=r.join(`
|
|
173
|
+
`)}async function zQe(e,t,n,r){let i=[],a=IQe(e,t)?t:void 0;if(a){let e=RQe(await a.getWorkingMemory(n.threadId,`thread`),r);i.push({id:`wm-${KW()}`,role:`system`,content:e,createdAt:new Date})}return i}async function qW(e,t,n,r,i,a){let o=r?.workingMemory?JW(a.text).cleanedText:a.text;if(e){let n=i?[i]:[];for(let e of a.steps)if(e.toolCalls?.length){let t=e.toolCalls.map(()=>KW());n.push({id:KW(),role:`assistant`,toolCalls:e.toolCalls.map((e,n)=>({id:t[n],name:e.name,args:e.args})),createdAt:new Date}),n.push({id:KW(),role:`tool`,toolResults:e.toolCalls.map((e,n)=>({id:t[n],name:e.name,result:e.result})),createdAt:new Date})}let r=a.uiSpec==null?o:[...o?[{type:`text`,text:o}]:[],{type:`generative-ui`,spec:a.uiSpec}];n.push({id:KW(),role:`assistant`,content:r||void 0,createdAt:new Date}),await e.saveMessages(t,n)}return o}function BQe(e,t=1e5){let n=VQe(e),r=0,i=[];for(let e=n.length-1;e>=0;e--){let a=n[e],o=HQe(a);if(r+o>t&&i.length>0)break;r+=o,i.unshift(a)}if(i.length>0&&i[0].role!==`user`&&i[0].role!==`system`){let e=i.findIndex(e=>e.role===`user`||e.role===`system`);if(e>0)return i.slice(e)}return i}function VQe(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r.role===`assistant`&&r.toolCalls?.length){let i=e[n+1];if(!i||i.role!==`tool`||!i.toolResults?.length){r.content&&t.push({...r,toolCalls:void 0});continue}let a=new Set(r.toolCalls.map(e=>e.id)),o=new Set(i.toolResults.map(e=>e.id));if(![...a].every(e=>o.has(e))){r.content&&t.push({...r,toolCalls:void 0}),t.push({...i,toolResults:i.toolResults.filter(e=>!a.has(e.id))||void 0}),n++;continue}}t.push(r)}return t.filter(e=>e.role!==`tool`||e.toolResults&&e.toolResults.length>0)}function HQe(e){let t=0;if(e.content)if(typeof e.content==`string`)t+=e.content.length;else for(let n of e.content)n.type===`text`?t+=n.text.length:t+=1e3;return e.toolCalls&&(t+=JSON.stringify(e.toolCalls).length),e.toolResults&&(t+=JSON.stringify(e.toolResults).length),Math.ceil(t/4)}function UQe(e){let t=e.match(/<working_memory>([\s\S]*?)<\/working_memory>/);if(!t)return null;try{return JSON.parse(t[1].trim())}catch{return null}}function WQe(e){return e.replace(/<working_memory>[\s\S]*?<\/working_memory>/g,``).trim()}function JW(e){let t=UQe(e);return{workingMemory:t,cleanedText:t?WQe(e):e}}function GQe(e){let t=[`<working_memory>`,`</working_memory>`],n=e.lastIndexOf(`<`);if(n===-1)return 0;let r=e.slice(n);for(let e of t)if(e.startsWith(r))return r.length;return 0}function KQe(e){let t=``,n=0;for(;n<e.length;){let r=e.indexOf(`<working_memory>`,n);if(r===-1){let r=e.slice(n),i=GQe(r);return t+=i>0?r.slice(0,-i):r,t}t+=e.slice(n,r);let i=e.indexOf(`</working_memory>`,r);if(i===-1)return t;n=i+17}return t}function qQe(e){return{modifyOutputStream:async(e,{event:t,state:n})=>{if(t.type!==`text-delta`)return t;let r=`${n.rawText??``}${t.text}`;n.rawText=r;let i=KQe(r),a=n.emittedVisibleText??``;if(!i.startsWith(a))return n.emittedVisibleText=i,{...t,text:i};let o=i.slice(a.length);return n.emittedVisibleText=i,o?{...t,text:o}:null},modifyOutput:async(t,{text:n,messages:r,usage:i})=>{let{workingMemory:a,cleanedText:o}=JW(n);if(a&&e.storage){let t=LQe(await e.storage.getWorkingMemory(e.threadId,`thread`)??{},a),n=!0;if(e.schemaService&&e.workingMemorySchemaName)try{await e.schemaService.validateSchema(e.workingMemorySchemaName,t)}catch(t){n=!1,e.logger?.warn(`Working memory validation failed: ${t instanceof Error?t.message:String(t)}`)}n&&await e.storage.saveWorkingMemory(e.threadId,`thread`,t)}return{text:o,messages:r}}}}function YW(e,t,n){return IQe(e,t)?[qQe({storage:t,threadId:n.threadId,workingMemorySchemaName:n.workingMemorySchemaName,logger:n.logger,schemaService:n.schemaService})]:[]}function XW(e,t){return{model:t.model,temperature:t.temperature,maxSteps:t.maxSteps}}function JQe(e,t,n){let r=``,i=``,a=null,o=[],s=[],c={inputTokens:0,outputTokens:0},l=async()=>{if(!t)return;let e=i,r=a,c=o,l=s;if(i=``,a=null,o=[],s=[],e||r!=null||c.length>0){let i=[{id:KW(),role:`assistant`,content:r==null?e||void 0:[...e?[{type:`text`,text:e}]:[],{type:`generative-ui`,spec:r}],toolCalls:c.length>0?c:void 0,createdAt:new Date}];l.length>0&&i.push({id:KW(),role:`tool`,toolResults:l,createdAt:new Date}),await t.saveMessages(n,i)}};return{channelId:e.channelId,openingData:e.openingData,get state(){return e.state},get fullText(){return r},get totalUsage(){return c},flush:l,close:()=>e.close(),sendBinary:t=>e.sendBinary(t),send:n=>{if(t)switch(n.type){case`text-delta`:i+=n.text,r+=n.text;break;case`tool-call`:o.push({id:n.toolCallId,name:n.toolName,args:n.args});break;case`tool-result`:s.push({id:n.toolCallId,name:n.toolName,result:typeof n.result==`string`?n.result:JSON.stringify(n.result)});break;case`generative-ui`:a=n.spec;break;case`usage`:c.inputTokens+=n.tokens.input,c.outputTokens+=n.tokens.output,n.model&&(c.model=n.model),l();break;case`done`:l();break}e.send(n)},setState:t=>e.setState(t),getState:()=>e.getState(),clearState:()=>e.clearState()}}async function ZW(e,t,n,r,i,a){let o=e.totalUsage,s=e.fullText,c=r;for(let e=t.length-1;e>=0;e--){let r=t[e];if(r.modifyOutput){let e=await r.modifyOutput(n,{text:s,messages:c,usage:{inputTokens:o.inputTokens,outputTokens:o.outputTokens}});s=e.text,c=e.messages}}await i.updateRun(a,{status:`completed`,...o.model?{usage:{inputTokens:o.inputTokens,outputTokens:o.outputTokens,model:o.model}}:{}})}async function YQe(e){let{agent:t,runnerParams:n,maxSteps:r,agentRunner:i,streamChannel:a,channel:o,runId:s,aiMiddlewares:c}=e,l=AW();for(let e=0;e<r;e++){if(t.prepareStep){let r=!1;if(await t.prepareStep({stepNumber:e,messages:n.messages,tools:n.tools,toolChoice:n.toolChoice,model:n.model,stop:()=>{r=!0}}),r)break}o.send({type:`step-start`,stepNumber:e});let r=await i.stream(n,a);for(let t of c)t.afterStep&&await t.afterStep(l,{stepNumber:e,text:r.text,toolCalls:r.toolCalls,toolResults:r.toolResults,usage:r.usage,finishReason:r.finishReason});if(r.toolCalls.length===0)break;let u=XQe(r,n.tools,s);if(u.length>0){for(let e of u){let t=n.tools.find(t=>t.name===e.toolName);if(t?.approvalDescriptionFn&&!e.reason)try{e.reason=await t.approvalDescriptionFn(e.args)}catch{}}return{outcome:`approval`,approvals:u}}let d=ZQe(r,s);if(d.length>0)return QW(n,r),{outcome:`credential`,credentialRequests:d};QW(n,r)}return{outcome:`done`}}function XQe(e,t,n){let r=[];for(let n of e.toolCalls){if(t.find(e=>e.name===n.toolName)?.needsApproval){r.push(new eG(n.toolCallId,n.toolName,n.args));continue}let i=e.toolResults.find(e=>e.toolCallId===n.toolCallId);if(i?.result&&typeof i.result==`object`&&`__approvalRequired`in i.result){let e=i.result;if(e.subApprovals?.length)for(let t of e.subApprovals)r.push(new eG(t.toolCallId,e.toolName,e.args,void 0,t.toolName,t.args,e.agentRunId));else r.push(new eG(n.toolCallId,e.toolName,e.args,e.reason,e.displayToolName,e.displayArgs,e.agentRunId))}}return r}function ZQe(e,t){let n=[];for(let t of e.toolResults)if(t.result&&typeof t.result==`object`&&`__credentialRequired`in t.result){let r=t.result,i=e.toolCalls.find(e=>e.toolCallId===t.toolCallId);n.push(new n$e(t.toolCallId,i?.toolName??`unknown`,i?.args??{},r.credentialName,r.credentialType,r.connectUrl))}return n}function QW(e,t){let n=t.object&&typeof t.object==`object`?t.object:null,r=n?.ui==null?t.text||void 0:[...t.text?[{type:`text`,text:t.text}]:[],{type:`generative-ui`,spec:n.ui}],i={id:KW(),role:`assistant`,content:r,toolCalls:t.toolCalls.length>0?t.toolCalls.map(e=>({id:e.toolCallId,name:e.toolName,args:e.args})):void 0,...t.reasoningContent?{reasoningContent:t.reasoningContent}:{},createdAt:new Date};if(e.messages.push(i),t.toolResults.length>0){let n={id:KW(),role:`tool`,toolResults:t.toolResults.map(e=>({id:e.toolCallId,name:e.toolName,result:typeof e.result==`string`?e.result:JSON.stringify(e.result)})),createdAt:new Date};e.messages.push(n)}}function QQe(e,t,n,r,i){return(async()=>{await i.flush();let a=e.map(e=>e.agentRunId?{type:`agent-call`,toolCallId:e.toolCallId,agentName:e.toolName,agentRunId:e.agentRunId,displayToolName:e.displayToolName??e.toolName,displayArgs:e.displayArgs??e.args}:{type:`tool-call`,toolCallId:e.toolCallId,toolName:e.toolName,args:e.args});await r.updateRun(t,{status:`suspended`,suspendReason:`approval`,pendingApprovals:a});for(let r of e){let e={type:`approval-request`,toolCallId:r.toolCallId,toolName:r.displayToolName??r.toolName,args:r.displayArgs??r.args,reason:r.reason,runId:t};n.send(e)}n.send({type:`done`}),n.close()})()}function $W(e,t,n,r,i){return(async()=>{await i.flush();let a=e.map(e=>({type:`credential-request`,toolCallId:e.toolCallId,toolName:e.toolName,args:e.args,credentialName:e.credentialName,credentialType:e.credentialType,connectUrl:e.connectUrl}));await r.updateRun(t,{status:`suspended`,suspendReason:`credential`,pendingApprovals:a}),n.send({type:`done`}),n.close()})()}async function $Qe(e,t,n,r,i,a){let o=i??new Map,s=t,c={channel:n,options:a},{agent:l,packageName:u,resolvedName:d,agentRunner:f,storage:p,memoryConfig:m,threadId:h,userMessage:g,runnerParams:_,maxSteps:v,missingRpcs:y,workingMemorySchemaName:b}=await o$e(e,s,r,o,c);_.agentId=e;let x=AW(),{aiRunState:S}=x;if(!S)throw Error(`AIRunStateService not available in singletonServices`);if(y.length>0)return await S.createRun({agentName:e,threadId:h,resourceId:s.resourceId,status:`suspended`,suspendReason:`rpc-missing`,missingRpcs:y,usage:{inputTokens:0,outputTokens:0,model:l.model},createdAt:new Date,updatedAt:new Date}),n.send({type:`suspended`,reason:`rpc-missing`,missingRpcs:y}),n.send({type:`done`}),``;let C=[...YW(m,p,{threadId:h,workingMemorySchemaName:b,logger:x.logger,schemaService:x.schema}),...l.aiMiddleware??[]],w=_.messages,T=_.instructions;for(let e of C)if(e.modifyInput){let t=await e.modifyInput(x,{messages:w,instructions:T});w=t.messages,T=t.instructions}_.messages=w,_.instructions=T;let E=await S.createRun({agentName:e,threadId:h,resourceId:s.resourceId,status:`running`,usage:{inputTokens:0,outputTokens:0,model:l.model},createdAt:new Date,updatedAt:new Date});p&&await p.saveMessages(h,[g]);let D=C.filter(e=>e.modifyOutputStream).map(e=>{let t={},n=[];return async(r,i,a)=>{n.push(i);let o=await e.modifyOutputStream(r,{event:i,allEvents:n,state:t});if(o!=null)if(Array.isArray(o))for(let e of o)await a(e);else await a(o)}}),O=OW(u,`agent`,`agentsMeta`)[d],ee=BW(`agent`,`stream:${e}`,{wireInheritedChannelMiddleware:O?.channelMiddleware,wireChannelMiddleware:[...l.channelMiddleware??[],...D]}),te=JQe(n,p,h),ne=ee.length>0?CQe({channel:te},x,ee).channel:te,re=l.agentMode!==`supervise`&&O.agents?.length,ie={delegated:!1};re&&(c.delegateState=ie);let ae=re?{...ne,send:e=>{ie.delegated&&(e.type===`text-delta`||e.type===`reasoning-delta`)||ne.send(e)},delegateState:ie}:ne;try{let e=await YQe({agent:l,runnerParams:_,maxSteps:v,agentRunner:f,streamChannel:ae,persistingChannel:te,channel:n,runId:E,aiMiddlewares:C});return e.outcome===`approval`?(await QQe(e.approvals,E,n,S,te),te.fullText):e.outcome===`credential`?(await $W(e.credentialRequests,E,n,S,te),te.fullText):(await ZW(te,C,x,_.messages,S,E),n.send({type:`done`}),n.close(),te.fullText)}catch(e){for(let t of C)if(t.onError)try{await t.onError(x,{error:e instanceof Error?e:Error(String(e)),stepNumber:-1,messages:_.messages})}catch{}return await S.updateRun(E,{status:`failed`,errorMessage:e instanceof Error?e.message:String(e)}),n.send({type:`error`,message:e instanceof Error?e.message:String(e)}),n.send({type:`done`}),n.close(),te.fullText}}async function e$e(e,t,n,r){let i=AW(),{aiRunState:a}=i;if(!a)throw Error(`AIRunStateService not available in singletonServices`);let o=await a.getRun(e.runId);if(!o)throw Error(`No run found for runId ${e.runId}`);let s=o.pendingApprovals?.find(t=>t.toolCallId===e.toolCallId);if(!s)throw Error(`No pending approval for toolCallId ${e.toolCallId} on run ${e.runId}`);await a.resolveApproval(e.toolCallId,e.approved?`approved`:`denied`);let{agent:c,packageName:l,resolvedName:u}=r$e(o.agentName),{storage:d}=FQe(c,i),f=c.memory,p=i.aiAgentRunner;if(!p)throw new pQe;if(!e.approved){if(s.type===`agent-call`&&await a.updateRun(s.agentRunId,{status:`failed`}),d&&await d.saveMessages(o.threadId,[{id:KW(),role:`tool`,toolResults:[{id:e.toolCallId,name:s.type===`tool-call`||s.type===`credential-request`?s.toolName:s.agentName,result:`The user explicitly declined this action. Inform them that it was declined and do not retry.`}],createdAt:new Date}]),((await a.getRun(o.runId))?.pendingApprovals??[]).length>0){t.send({type:`done`}),t.close();return}await a.updateRun(o.runId,{status:`running`}),await t$e(o,c,l,u,d,f,p,t,n,a,r);return}if(s.type===`agent-call`){let i=await a.getRun(s.agentRunId);if(!i)throw Error(`Sub-agent run not found: ${s.agentRunId}`);let c=i.pendingApprovals?.find(t=>t.toolCallId===e.toolCallId)??i.pendingApprovals?.[0];if(!c)throw Error(`No pending approval on sub-agent run ${s.agentRunId}`);let l=a$e(t,i.agentName,`resume`);t.send({type:`agent-call`,agentName:i.agentName,session:`resume`,input:null}),await e$e({runId:s.agentRunId,toolCallId:c.toolCallId,approved:!0},l,n,r),t.send({type:`agent-result`,agentName:i.agentName,session:`resume`,result:null}),d&&await d.saveMessages(o.threadId,[{id:KW(),role:`tool`,toolResults:[{id:e.toolCallId,name:s.agentName,result:`Sub-agent completed successfully`}],createdAt:new Date}])}else{let i={channel:t,options:{...r,requiresToolApproval:!1}},a=c.aiMiddleware??[],{tools:f}=await tG(n,new Map,o.resourceId,u,l,i,a),p=f.find(e=>e.name===s.toolName);if(!p)throw Error(`Tool "${s.toolName}" not found in agent definition`);let m=typeof s.args==`string`?JSON.parse(s.args):s.args,h,g=!1;try{h=await p.execute(m)}catch(e){h=e?.payload?.error===`missing_credential`?e.payload:`Error: ${e instanceof Error?e.message:String(e)}`,g=!0}let _=typeof h==`string`?h:JSON.stringify(h);d&&await d.saveMessages(o.threadId,[{id:KW(),role:`tool`,toolResults:[{id:e.toolCallId,name:s.toolName,result:_}],createdAt:new Date}]),t.send({type:`tool-result`,toolCallId:e.toolCallId,toolName:s.toolName,result:h,...g?{isError:!0}:{}})}if(((await a.getRun(o.runId))?.pendingApprovals??[]).length>0){t.send({type:`done`}),t.close();return}await a.updateRun(o.runId,{status:`running`}),await t$e(o,c,l,u,d,f,p,t,n,a,r)}async function t$e(e,t,n,r,i,a,o,s,c,l,u){let d=AW(),f=OW(n,`agent`,`agentsMeta`)[r],p=f?.workingMemorySchema??null,m=i?await i.getMessages(e.threadId,{lastN:a?.lastMessages??20}):[],h=p?OW(n,`misc`,`schemas`).get(p):void 0,g=BQe([...await zQe(a,i,{message:``,threadId:e.threadId,resourceId:e.resourceId},h),...m]),_=await i$e(r,n),v=[...YW(a,i,{threadId:e.threadId,workingMemorySchemaName:p,logger:d.logger,schemaService:d.schema}),...t.aiMiddleware??[]],y=g,b=_;for(let e of v)if(e.modifyInput){let t=await e.modifyInput(d,{messages:y,instructions:b});y=t.messages,b=t.instructions}let x=v.filter(e=>e.modifyOutputStream).map(e=>{let t={},n=[];return async(r,i,a)=>{n.push(i);let o=await e.modifyOutputStream(r,{event:i,allEvents:n,state:t});if(o!=null)if(Array.isArray(o))for(let e of o)await a(e);else await a(o)}}),S=BW(`agent`,`stream:${e.agentName}`,{wireInheritedChannelMiddleware:f?.channelMiddleware,wireChannelMiddleware:[...t.channelMiddleware??[],...x]}),C=JQe(s,i,e.threadId),w=S.length>0?CQe({channel:C},d,S).channel:C,T={channel:s,options:u},E=(await tG(c,new Map,e.resourceId,r,n,T,v)).tools,D=XW(r,t),O=D.maxSteps??10,ee={model:D.model,temperature:D.temperature,instructions:b,messages:y,tools:E,maxSteps:1,toolChoice:t.toolChoice??`auto`,outputSchema:f?.outputSchema?OW(n,`misc`,`schemas`).get(f.outputSchema):void 0};try{let n=await YQe({agent:t,runnerParams:ee,maxSteps:O,agentRunner:o,streamChannel:w,persistingChannel:C,channel:s,runId:e.runId,aiMiddlewares:v});if(n.outcome===`approval`){await QQe(n.approvals,e.runId,s,l,C);return}if(n.outcome===`credential`){await $W(n.credentialRequests,e.runId,s,l,C);return}await ZW(C,v,d,ee.messages,l,e.runId),s.send({type:`done`}),s.close()}catch(t){for(let e of v)if(e.onError)try{await e.onError(d,{error:t instanceof Error?t:Error(String(t)),stepNumber:-1,messages:ee.messages})}catch{}await l.updateRun(e.runId,{status:`failed`,errorMessage:t instanceof Error?t.message:String(t)}),s.send({type:`error`,message:t instanceof Error?t.message:String(t)}),s.send({type:`done`}),s.close()}}var eG=class extends jW{toolCallId;toolName;args;reason;displayToolName;displayArgs;agentRunId;constructor(e,t,n,r,i,a,o){super(`Tool '${i??t}' requires approval`),this.toolCallId=e,this.toolName=t,this.args=n,this.reason=r,this.displayToolName=i,this.displayArgs=a,this.agentRunId=o}},n$e=class extends jW{toolCallId;toolName;args;credentialName;credentialType;connectUrl;constructor(e,t,n,r,i,a){super(`Tool '${t}' requires credential '${r}'`),this.toolCallId=e,this.toolName=t,this.args=n,this.credentialName=r,this.credentialType=i,this.connectUrl=a}};const r$e=e=>{if(!e)throw console.error(`[resolveAgent] agentName is undefined/null! Stack:`,Error().stack),Error(`resolveAgent called with undefined agentName`);let t=OW(null,`agent`,`agents`).get(e);if(t)return{agent:t,packageName:null,resolvedName:e};let n=e.indexOf(`:`);if(n!==-1){let t=e.substring(0,n),r=e.substring(n+1),i=OW(null,`addons`,`packages`).get(t);if(i){let e=OW(i.package,`agent`,`agents`).get(r);if(e)return{agent:e,packageName:i.package,resolvedName:r}}}throw Error(`AI agent not found: ${e}`)};async function i$e(e,t){let n=OW(t,`agent`,`agentsMeta`)[e],r=[];n?.role&&r.push(n.role),n?.personality&&r.push(n.personality),n?.goal&&r.push(n.goal);let i=r.join(`
|
|
174
174
|
|
|
175
175
|
`);return n?.tools?.length&&(i+=`
|
|
176
176
|
|
|
@@ -181,7 +181,7 @@ Tool usage rules:
|
|
|
181
181
|
- Never stuff unrelated information into the wrong field.
|
|
182
182
|
- Keep responses concise.`),n?.agents?.length&&(i+=`
|
|
183
183
|
|
|
184
|
-
When calling a sub-agent, provide a short session name that describes the task. Use the same session name to continue a previous conversation with that agent. Use a new session name for a new independent task. When a request involves multiple actions for the same domain, combine them into a single sub-agent call rather than making separate calls.`),i}function a$e(e,t,n){let r=[];return{channelId:`${e.channelId}:${t}:${n}`,openingData:e.openingData,get state(){return e.state},get approvals(){return r},close:()=>{},sendBinary:t=>e.sendBinary(t),send:i=>{if(i.type!==`done`){if(i.type===`approval-request`){r.push({toolCallId:i.toolCallId,toolName:i.toolName,args:i.args,runId:i.runId});return}i.type===`step-start`||i.type===`text-delta`||i.type===`reasoning-delta`||i.type===`tool-call`||i.type===`tool-result`||i.type===`usage`||i.type===`error`||i.type===`workflow-created`?e.send({...i,agent:t,session:n}):e.send(i)}},setState:t=>e.setState(t),getState:()=>e.getState(),clearState:()=>e.clearState()}}async function tG(e,t,n,r,i,a,o,s){let c=AW(),l=[],u=[],d=a?.options?.requiresToolApproval??`explicit`,f=OW(i,`agent`,`agentsMeta`)[r];if(!f)return{tools:l,missingRpcs:u};let p=e.sessionService?await e.sessionService.get():null,m=f.tools,h=f.agents;if(m?.length)for(let t of m){let n,r=null,i,a=t.includes(`:`)?f$e(t):null,o;if(a)r=a.package,o=a.function,n=OW(r,`function`,`meta`)[o],i=OW(r,`misc`,`schemas`);else{if(o=OW(null,`rpc`,`meta`)[t],!o){u.push(t);continue}n=OW(null,`function`,`meta`)[o],i=OW(null,`misc`,`schemas`)}if(!n){u.push(t);continue}if(n.permissions?.length&&(!p||!await EQe(n.permissions,p,c,r)))continue;let s=n?.inputSchemaName,f=s?i.get(s):void 0;(!f||typeof f==`object`&&f.type===`object`&&!f.properties)&&(f={type:`object`,properties:{}});let m=d===`all`||d===`explicit`&&n?.approvalRequired,h;if(m&&o){let e=OW(r,`function`,`functions`).get(o);if(e?.approvalDescription){let t=e.approvalDescription,n=r;h=async e=>{let r=c;if(n){let e=OW(n,`package`,`singletonServices`);e&&(r=e)}return t(r,e)}}}l.push({name:t.replaceAll(`@`,`_`).replaceAll(`:`,`__`),description:n?.description||n?.title||t,inputSchema:f,needsApproval:m||void 0,approvalDescriptionFn:h,execute:async n=>new iG(c,e.sessionService?{...GW(e.sessionService)}:{},{sessionService:e.sessionService}).rpc(t,n)})}if(h?.length){let r=OW(null,`agent`,`agentsMeta`);for(let i of h){let o=r[i];if(!o){c.logger.warn(`Sub-agent '${i}' not found in agent registry`);continue}o.permissions?.length&&(!p||!await EQe(o.permissions,p,c))||l.push({name:i,description:o.description,inputSchema:{type:`object`,properties:{message:{type:`string`},session:{type:`string`,description:`Short session label for thread continuity`}},required:[`message`,`session`]},execute:async r=>{let{message:o,session:c}=r,l=`${i}::${c}`,u=t.get(l);if(u||(u=KW(),t.set(l,u)),a){let l=s!==`supervise`;l&&a.delegateState&&(a.delegateState.delegated=!0);let{channel:d}=a;d.send({type:`agent-call`,agentName:i,session:c,input:o});let f=a$e(d,i,c),p=l?f:{...f,send:e=>{e.type===`text-delta`||e.type===`reasoning-delta`||f.send(e)}},m=await $Qe(i,{message:o,threadId:u,resourceId:n},p,e,t,a.options);return f.approvals.length>0?{__approvalRequired:!0,toolName:i,args:r,agentRunId:f.approvals[0].runId,subApprovals:f.approvals}:(d.send({type:`agent-result`,agentName:i,session:c,result:m}),m)}let d=await l$e(i,{message:o,threadId:u,resourceId:n},e,t);return d.status===`suspended`&&d.pendingApprovals?.length?{__approvalRequired:!0,toolName:i,args:r,agentRunId:d.runId,subApprovals:d.pendingApprovals.map(e=>({toolCallId:e.toolCallId,toolName:e.toolName,args:e.args,runId:e.runId}))}:d.object??d.text}})}}if(o?.some(e=>e.beforeToolCall||e.afterToolCall))for(let e of l){let t=e.execute;e.execute=async n=>{let r=KW(),i=n??{};for(let t of o)if(t.beforeToolCall){let n=await t.beforeToolCall(c,{toolName:e.name,toolCallId:r,args:i});n&&`args`in n&&(i=n.args)}let a=Date.now(),s,l;try{s=await t(i)}catch(e){if(l=e,e?.payload?.error===`missing_credential`)throw e;s=e instanceof Error?e.message:String(e)}let u=Date.now()-a;for(let t=o.length-1;t>=0;t--){let n=o[t];if(n.afterToolCall){let t=await n.afterToolCall(c,{toolName:e.name,toolCallId:r,args:i,result:s,durationMs:u});t&&`result`in t&&(s=t.result)}}if(l)throw l;return s}}return{tools:l,missingRpcs:u}}async function o$e(e,t,n,r,i){let a=AW(),{agent:o,packageName:s,resolvedName:c}=r$e(e),l=a.aiAgentRunner;if(!l)throw new pQe;let{storage:u}=FQe(o,a),d=o.memory,f=t.threadId,p=OW(s,`agent`,`agentsMeta`)[c],m=p?.outputSchema,h=m?OW(s,`misc`,`schemas`).get(m):void 0,g=p?.workingMemorySchema??null,_=g?OW(s,`misc`,`schemas`).get(g):void 0;if(u)try{await u.getThread(f)}catch{await u.createThread(t.resourceId,{threadId:f})}let v=[];u&&(v=await u.getMessages(f,{lastN:d?.lastMessages??20}));let y=await zQe(d,u,t,_),b=t.attachments?.length?[{type:`text`,text:t.message},...t.attachments.map(e=>({type:e.type,data:e.data,url:e.url,mediaType:e.mediaType,...e.filename?{filename:e.filename}:{}}))]:t.message,x={id:KW(),role:`user`,content:b,createdAt:new Date},S=BQe([...y,...v,x]),C=o.aiMiddleware??[],{tools:w,missingRpcs:T}=await tG(n,r,t.resourceId,c,s,i,C,o.agentMode),E=await i$e(c,s),D=XW(c,o);t.model&&(D.model=XW(c,{...o,model:t.model}).model),t.temperature!==void 0&&(D.temperature=t.temperature);let O=D.maxSteps??10;return{agent:o,packageName:s,resolvedName:c,agentRunner:l,storage:u,memoryConfig:d,threadId:f,userMessage:x,runnerParams:{model:D.model,temperature:D.temperature,instructions:E,messages:S,tools:w,maxSteps:1,toolChoice:o.toolChoice??`auto`,outputSchema:h},maxSteps:O,missingRpcs:T,workingMemoryJsonSchema:_,workingMemorySchemaName:g}}function s$e(e){if(e===null)return;if(Array.isArray(e))return e.map(s$e);if(typeof e!=`object`)return e;let t={};for(let[n,r]of Object.entries(e))r!==null&&(t[n]=s$e(r));return t}function c$e(e){if(!e||typeof e!=`object`)return{text:null,uiSpec:null};let t=e;return{text:typeof t.text==`string`?t.text:null,uiSpec:t.ui??null}}async function l$e(e,t,n,r){let{agent:i,agentRunner:a,storage:o,memoryConfig:s,threadId:c,userMessage:l,runnerParams:u,maxSteps:d,missingRpcs:f,workingMemorySchemaName:p}=await o$e(e,t,n,r??new Map),m=AW(),{aiRunState:h}=m;if(!h)throw Error(`AIRunStateService not available in singletonServices`);if(f.length>0)return{runId:await h.createRun({agentName:e,threadId:c,resourceId:t.resourceId,status:`suspended`,suspendReason:`rpc-missing`,missingRpcs:f,usage:{inputTokens:0,outputTokens:0,model:i.model},createdAt:new Date,updatedAt:new Date}),text:``,threadId:c,steps:[],usage:{inputTokens:0,outputTokens:0}};let g=[...YW(s,o,{threadId:c,workingMemorySchemaName:p,logger:m.logger,schemaService:m.schema}),...i.aiMiddleware??[]],_=u.messages,v=u.instructions;for(let e of g)if(e.modifyInput){let t=await e.modifyInput(m,{messages:_,instructions:v});_=t.messages,v=t.instructions}u.messages=_,u.instructions=v;let y=await h.createRun({agentName:e,threadId:c,resourceId:t.resourceId,status:`running`,usage:{inputTokens:0,outputTokens:0,model:i.model},createdAt:new Date,updatedAt:new Date});try{let e=[],n={inputTokens:0,outputTokens:0},r=null;for(let f=0;f<d;f++){if(i.prepareStep){let e=!1;if(await i.prepareStep({stepNumber:f,messages:u.messages,tools:u.tools,toolChoice:u.toolChoice,model:u.model,stop:()=>{e=!0}}),e)break}let d=await a.run(u);r=d,n.inputTokens+=d.usage.inputTokens,n.outputTokens+=d.usage.outputTokens;for(let e of g)e.afterStep&&await e.afterStep(m,{stepNumber:f,text:d.text,toolCalls:d.toolCalls,toolResults:d.toolResults,usage:d.usage,finishReason:d.finishReason});if(e.push({usage:d.usage,toolCalls:d.toolCalls.map(e=>{let t=d.toolResults.find(t=>t.toolCallId===e.toolCallId);return{name:e.toolName,args:e.args,result:typeof t?.result==`string`?t.result:JSON.stringify(t?.result??``)}})}),d.toolCalls.length===0)break;let p=XQe(d,u.tools,y);if(p.length>0){for(let e of p){let t=u.tools.find(t=>t.name===e.toolName);if(t?.approvalDescriptionFn&&!e.reason)try{e.reason=await t.approvalDescriptionFn(e.args)}catch{}}let a=p.map(e=>e.agentRunId?{type:`agent-call`,toolCallId:e.toolCallId,agentName:e.toolName,agentRunId:e.agentRunId,displayToolName:e.displayToolName??e.toolName,displayArgs:e.displayArgs??e.args}:{type:`tool-call`,toolCallId:e.toolCallId,toolName:e.toolName,args:e.args}),f=e.slice(0,-1);return await qW(o,c,t.resourceId,s,l,{text:``,steps:f}),o&&await o.saveMessages(c,[{id:KW(),role:`assistant`,toolCalls:d.toolCalls.map(e=>({id:e.toolCallId,name:e.toolName,args:e.args})),createdAt:new Date}]),await h.updateRun(y,{status:`suspended`,suspendReason:`approval`,pendingApprovals:a,usage:{...n,model:i.model}}),{runId:y,text:r?.text??``,threadId:c,steps:e,usage:n,status:`suspended`,pendingApprovals:p.map(e=>({toolCallId:e.toolCallId,toolName:e.displayToolName??e.toolName,args:e.displayArgs??e.args,reason:e.reason,runId:y}))}}QW(u,d)}let f=r?.object,p=c$e(f),_=p.text??r?.text??``,v={text:_,steps:e},b=_,x=u.messages;for(let e=g.length-1;e>=0;e--){let t=g[e];if(t.modifyOutput){let e=await t.modifyOutput(m,{text:b,messages:x,usage:n});b=e.text,x=e.messages}}return await qW(o,c,t.resourceId,s,l,{...v,text:b,uiSpec:p.uiSpec}),await h.updateRun(y,{status:`completed`,usage:{...n,model:i.model}}),{runId:y,text:b,object:f,threadId:c,steps:e,usage:n}}catch(e){for(let t of g)if(t.onError)try{await t.onError(m,{error:e instanceof Error?e:Error(String(e)),stepNumber:-1,messages:u.messages})}catch{}throw await h.updateRun(y,{status:`failed`,errorMessage:e instanceof Error?e.message:String(e)}),e}}async function u$e(e,t,n,r){let i=AW(),{aiRunState:a}=i;if(!a)throw Error(`AIRunStateService not available in singletonServices`);let o=await a.getRun(e);if(!o)throw Error(`No run found for runId ${e}`);if(r&&o.agentName!==r)throw Error(`Run ${e} belongs to agent '${o.agentName}', not '${r}'`);if(o.status!==`suspended`)throw Error(`Run ${e} is not suspended (status: ${o.status})`);let{agent:s,packageName:c,resolvedName:l}=r$e(o.agentName),{storage:u}=FQe(s,i),d=s.memory,f=i.aiAgentRunner;if(!f)throw new pQe;let p=new Set(t.filter(e=>e.approved).map(e=>e.toolCallId)),m=new Set(t.filter(e=>!e.approved).map(e=>e.toolCallId)),h=[...o.pendingApprovals??[]];for(let{toolCallId:e,approved:n}of t)await a.resolveApproval(e,n?`approved`:`denied`);let{tools:g}=await tG(n,new Map,o.resourceId,l,c,void 0,s.aiMiddleware??[]),_=[];for(let e of h){if(e.type!==`tool-call`)continue;let t=e.toolCallId,n;if(m.has(t))n=`The user explicitly declined this action. Inform them that it was declined and do not retry.`;else if(p.has(t)){let t=g.find(t=>t.name===e.toolName);if(!t)throw Error(`Tool "${e.toolName}" not found in agent definition`);let r=s$e(typeof e.args==`string`?JSON.parse(e.args):e.args)??{};try{let e=await t.execute(r);n=typeof e==`string`?e:JSON.stringify(e)}catch(e){n=e?.payload?.error===`missing_credential`?JSON.stringify(e.payload):`Error: ${e instanceof Error?e.message:String(e)}`}}else continue;_.push({toolCallId:t,toolName:e.toolName,args:typeof e.args==`string`?JSON.parse(e.args):e.args,result:n})}return u&&_.length>0&&await u.saveMessages(o.threadId,[{id:KW(),role:`tool`,toolResults:_.map(e=>({id:e.toolCallId,name:e.toolName,result:e.result})),createdAt:new Date}]),await a.updateRun(e,{status:`running`}),d$e(o,s,c,l,u,d,f,n,a)}async function d$e(e,t,n,r,i,a,o,s,c){let l=AW(),u=OW(n,`agent`,`agentsMeta`)[r],d=u?.workingMemorySchema??null,f=i?await i.getMessages(e.threadId,{lastN:a?.lastMessages??20}):[],p=d?OW(n,`misc`,`schemas`).get(d):void 0,m=BQe([...await zQe(a,i,{message:``,threadId:e.threadId,resourceId:e.resourceId},p),...f]),h=await i$e(r,n),g=[...YW(a,i,{threadId:e.threadId,workingMemorySchemaName:d,logger:l.logger,schemaService:l.schema}),...t.aiMiddleware??[]],_=m,v=h;for(let e of g)if(e.modifyInput){let t=await e.modifyInput(l,{messages:_,instructions:v});_=t.messages,v=t.instructions}let{tools:y}=await tG(s,new Map,e.resourceId,r,n,void 0,g),b=XW(r,t),x=b.maxSteps??10,S={model:b.model,temperature:b.temperature,instructions:v,messages:_,tools:y,maxSteps:1,toolChoice:t.toolChoice??`auto`,outputSchema:u?.outputSchema?OW(n,`misc`,`schemas`).get(u.outputSchema):void 0};try{let n=[],r={inputTokens:0,outputTokens:0},s=null;for(let u=0;u<x;u++){let d=await o.run(S);s=d,r.inputTokens+=d.usage.inputTokens,r.outputTokens+=d.usage.outputTokens;for(let e of g)e.afterStep&&await e.afterStep(l,{stepNumber:u,text:d.text,toolCalls:d.toolCalls,toolResults:d.toolResults,usage:d.usage,finishReason:d.finishReason});if(n.push({usage:d.usage,toolCalls:d.toolCalls.map(e=>{let t=d.toolResults.find(t=>t.toolCallId===e.toolCallId);return{name:e.toolName,args:e.args,result:typeof t?.result==`string`?t.result:JSON.stringify(t?.result??``)}})}),d.toolCalls.length===0)break;let f=XQe(d,S.tools,e.runId);if(f.length>0){for(let e of f){let t=S.tools.find(t=>t.name===e.toolName);if(t?.approvalDescriptionFn&&!e.reason)try{e.reason=await t.approvalDescriptionFn(e.args)}catch{}}let o=f.map(e=>e.agentRunId?{type:`agent-call`,toolCallId:e.toolCallId,agentName:e.toolName,agentRunId:e.agentRunId,displayToolName:e.displayToolName??e.toolName,displayArgs:e.displayArgs??e.args}:{type:`tool-call`,toolCallId:e.toolCallId,toolName:e.toolName,args:e.args}),l=n.slice(0,-1);l.length>0&&await qW(i,e.threadId,e.resourceId,a,null,{text:``,steps:l}),i&&await i.saveMessages(e.threadId,[{id:KW(),role:`assistant`,toolCalls:d.toolCalls.map(e=>({id:e.toolCallId,name:e.toolName,args:e.args})),createdAt:new Date}]),await c.updateRun(e.runId,{status:`suspended`,suspendReason:`approval`,pendingApprovals:o,usage:{...r,model:t.model}});let u=s?.text??``;return{runId:e.runId,text:u,threadId:e.threadId,steps:n,usage:r,status:`suspended`,pendingApprovals:f.map(t=>({toolCallId:t.toolCallId,toolName:t.displayToolName??t.toolName,args:t.displayArgs??t.args,reason:t.reason,runId:e.runId}))}}QW(S,d)}let u=s?.text??``,d=s?.object,f={text:u,steps:n},p=u,m=S.messages;for(let e=g.length-1;e>=0;e--){let t=g[e];if(t.modifyOutput){let e=await t.modifyOutput(l,{text:p,messages:m,usage:r});p=e.text,m=e.messages}}return await qW(i,e.threadId,e.resourceId,a,null,{...f,text:p}),await c.updateRun(e.runId,{status:`completed`,usage:{...r,model:t.model}}),{runId:e.runId,text:p,object:d,threadId:e.threadId,steps:n,usage:r}}catch(t){for(let e of g)if(e.onError)try{await e.onError(l,{error:t instanceof Error?t:Error(String(t)),stepNumber:-1,messages:S.messages})}catch{}throw await c.updateRun(e.runId,{status:`failed`,errorMessage:t instanceof Error?t.message:String(t)}),t}}var nG=class extends jW{rpcName;constructor(e){super(`RPC function not found: ${e}`),this.rpcName=e}};MW(nG,{status:404,mcpCode:-32601,message:`RPC function not found.`});const f$e=e=>{let t=e.indexOf(`:`);if(t===-1)return null;let n=e.substring(0,t),r=e.substring(t+1),i=OW(null,`addons`,`packages`).get(n);return i?{package:i.package,function:r,addonConfig:i}:null};var rG=(e,t=null)=>{if(t){let n=OW(t,`function`,`meta`)?.[e];if(n)return{pikkuFuncId:n.pikkuFuncId||e,packageName:t}}let n=OW(null,`rpc`,`meta`),r=n[e];if(!r){let{baseName:t,version:i}=AQe(e);i!==null&&(r=n[t])}if(!r){let t=OW(null,`function`,`meta`)?.[e];if(t)return{pikkuFuncId:t.pikkuFuncId||e,packageName:null}}if(!r)throw new nG(e);return{pikkuFuncId:r,packageName:null}},iG=class{services;wire;options;packageName;constructor(e,t,n,r=null){this.services=e,this.wire=t,this.options=n,this.packageName=r}async rpcExposed(e,t){let n;if(e.includes(`:`)){let t=f$e(e);t&&(n=OW(t.package,`function`,`meta`)[t.function])}else{let t=rG(e,this.packageName);n=OW(t.packageName,`function`,`meta`)[t.pikkuFuncId]}if(!n||!n.expose)throw new nG(e);return await this.rpc(e,t)}async rpc(e,t){let n=this.wire.rpc?.depth||0,r={...this.wire,rpc:this.wire.rpc?{...this.wire.rpc,depth:n+1,global:!1}:void 0};if(e.includes(`:`))try{return await this.invokeAddonFunction(e,t,r)}catch(e){if(!(e instanceof nG))throw e}try{let n=rG(e,this.packageName);return await v$e(`rpc`,e,n.pikkuFuncId,{auth:this.options.requiresAuth,singletonServices:this.services,data:()=>t,wire:r,packageName:n.packageName})}catch(n){if(n instanceof nG&&this.services.deploymentService){let n=this.wire.getSession&&typeof this.wire.getSession==`function`?await this.wire.getSession():this.wire.session;return this.services.deploymentService.invoke(e,t,n,this.wire.traceId)}throw n}}async invokeAddonFunction(e,t,n){let r=f$e(e);if(!r)throw new nG(e);let i=OW(r.package,`function`,`meta`)[r.function];if(!i)throw new nG(e);let a=i.pikkuFuncId||r.function,o=r.addonConfig?.auth??this.options.requiresAuth,s=[...r.addonConfig?.tags??[],...i.tags??[]];return v$e(`rpc`,e,a,{auth:o,singletonServices:this.services,data:()=>t,wire:n,packageName:r.package,tags:s})}async rpcWithWire(e,t,n){let r=this.wire.rpc?.depth||0,i={...this.wire,...n,rpc:this.wire.rpc?{...this.wire.rpc,depth:r+1,global:!1}:void 0};if(e.includes(`:`))return this.invokeAddonFunction(e,t,i);try{let n=rG(e,this.packageName);return await v$e(`rpc`,e,n.pikkuFuncId,{auth:this.options.requiresAuth,singletonServices:this.services,data:()=>t,wire:i,packageName:n.packageName})}catch(n){if(n instanceof nG&&this.services.deploymentService){let n=this.wire.getSession&&typeof this.wire.getSession==`function`?await this.wire.getSession():this.wire.session;return this.services.deploymentService.invoke(e,t,n,this.wire.traceId)}throw n}}async startWorkflow(e,t,n){if(!this.services.workflowService)throw Error(`WorkflowService service not available`);let r=this.wire.workflowStep?.runId??this.wire.graph?.runId,i=n?.wire??{type:this.wire.wireType??`unknown`,id:this.wire.wireId,...r?{parentRunId:r}:{},...this.wire.pikkuUserId?{pikkuUserId:this.wire.pikkuUserId}:{}};return this.services.workflowService.startWorkflow(e,t,i,this,n)}get agent(){return{run:async(e,t)=>{let n=await l$e(e,t,{sessionService:this.options.sessionService});return{runId:n.runId,result:n.object??n.text,usage:n.usage,...n.status===`suspended`&&{status:`suspended`,pendingApprovals:n.pendingApprovals}}},stream:async(e,t,n)=>{let r=this.wire.channel;if(!r)throw Error(`No channel available for streaming`);await $Qe(e,t,r,{sessionService:this.options.sessionService},void 0,n)},resume:async(e,t,n)=>{let r=this.wire.channel;if(!r)throw Error(`No channel available for streaming`);await e$e({runId:e,...t},r,{sessionService:this.options.sessionService},n)},approve:async(e,t,n)=>{let r=await u$e(e,t,{sessionService:this.options.sessionService},n);return{runId:r.runId,result:r.object??r.text,usage:r.usage,...r.status===`suspended`&&{status:`suspended`,pendingApprovals:r.pendingApprovals}}}}}async remote(e,t){if(!this.services.deploymentService)throw Error(`No DeploymentService configured for remote RPC: ${e}. Set up a DeploymentService to enable remote function calls.`);let n=this.wire.getSession&&typeof this.wire.getSession==`function`?await this.wire.getSession():this.wire.session;return this.services.deploymentService.invoke(e,t,n,this.wire.traceId)}};const p$e=new class{getContextRPCService(e,t,n,r=0,i=null){let a=new iG(e,t,typeof n==`object`&&n?n:{requiresAuth:n},i);return{depth:r,global:!1,invoke:a.rpc.bind(a),remote:a.remote.bind(a),exposed:a.rpcExposed.bind(a),startWorkflow:a.startWorkflow.bind(a),get agent(){return a.agent},rpcWithWire:a.rpcWithWire.bind(a)}}};async function m$e(e,t,n){let r=MQe(e);r&&(e.pikkuUserId=r,n instanceof jQe&&n.setPikkuUserId(r));let{sessionStore:i}=t;if(!(!i||!r)&&!e.session){let t=await i.get(r);t&&(e.session=t,n?.setInitial(t))}}var h$e=e=>{let t=OW(null,`addons`,`packages`);if(!t)return null;for(let[n,r]of t.entries())if(r?.package===e)return n;return null},g$e=(e,t)=>new Proxy(e,{get(e,n,r){if(n===`startWorkflow`||n===`runToCompletion`){let i=Reflect.get(e,n,r);return function(e,...n){if(typeof e==`string`&&!e.includes(`:`)){let n=h$e(t);n&&(e=`${n}:${e}`)}return i.call(this,e,...n)}}return Reflect.get(e,n,r)}}),_$e=async(e,t)=>{let n=OW(e,`package`,`singletonServices`);if(n)return n;let r=OW(e,`package`,`factories`);if(!r||!r.createSingletonServices)return t;let i=t.config;r.createConfig&&(i=await r.createConfig(t.variables));let a=await r.createSingletonServices(i,t);return a.workflowService&&typeof a.workflowService==`object`&&(a.workflowService=g$e(a.workflowService,e)),OW(e,`package`,`singletonServices`,a),a};const v$e=async(e,t,n,{singletonServices:r,createWireServices:i,data:a,auth:o,inheritedMiddleware:s,wireMiddleware:c,inheritedChannelMiddleware:l,wireChannelMiddleware:u,inheritedPermissions:d,wirePermissions:f,coerceDataFromSchema:p,tags:m=[],wire:h,sessionService:g,credentialWireService:_,packageName:v=null})=>{h.wireType??=e,h.wireId??=t;let y=OW(v,`function`,`functions`),b=y.get(n),x=OW(v,`function`,`meta`),S=x[n];if(!b||!S){let{baseName:e,version:t}=AQe(n);t!==null&&(b||=y.get(e),S||=x[e],b&&S&&r.logger.warn(`Version '${n}' not registered, resolved to '${e}'`))}if(!b)throw Error(`Function not found: ${n}`);if(!S)throw Error(`Function meta not found: ${n}`);let C=v?await _$e(v,r):r,w=i;if(v){let e=OW(v,`package`,`factories`);e?.createWireServices&&(w=e.createWireServices)}let T=BW(e,t,{wireInheritedChannelMiddleware:l,wireChannelMiddleware:u,packageName:v}),E=T.length>0&&h.channel?CQe(h,C,T):h;if(!E.getCredentials){let e=_??new NQe(C.credentialService,E);Object.assign(E,PQe(e))}let D;D=m&&m.length>0?[...d||[],...m.map(e=>({type:`tag`,tag:e}))]:d||[];let O=async()=>{await m$e(E,C,g),g&&(E.session=g.freezeInitial(),E.setSession=e=>g.set(e),E.clearSession=()=>g.clear(),E.getSession=()=>g.get(),E.hasSessionChanged=()=>g.sessionChanged);let r=E.session;if(S.sessionless){if((o===!0||b.auth===!0)&&!r)throw new PW(`Authentication required`)}else if(S.sessionless===!1){if((o===!1||b.auth===!1)&&C.logger.warn(`Function '${n}' requires a session but auth was explicitly disabled — use pikkuSessionlessFunc instead.`),!r)throw new PW(`Authentication required`)}else if((o===!0||b.auth===!0)&&!r)throw new PW(`Authentication required`);if(r?.readonly&&!S.readonly)throw new uQe;let i=await a(),s=S.inputSchemaName;s&&(p&&OQe(s,i,v),await kQe(C.logger,C.schema,s,i,v)),(D.length>0||f||S.permissions||b.permissions)&&await TQe(e,t,{wireInheritedPermissions:D,wirePermissions:f,funcInheritedPermissions:S.permissions,funcPermissions:b.permissions,services:C,wire:E,data:i,packageName:v});let c;try{c=await w?.(C,E);let e=c&&Object.keys(c).length>0?{...C,...c}:C,t=v;return Object.defineProperty(E,`rpc`,{get(){let n=p$e.getContextRPCService(e,E,{sessionService:g},0,t);return Object.defineProperty(E,`rpc`,{value:n,writable:!0,configurable:!0}),n},configurable:!0,enumerable:!0}),await b.func(e,i,E)}finally{c&&Object.keys(c).length>0&&await mQe(C.logger,c)}},ee=bQe(e,t,{wireInheritedMiddleware:s,wireMiddleware:c,funcInheritedMiddleware:S.middleware,funcMiddleware:b.middleware,packageName:v});return ee.length>0?await vQe(C,E,ee,O):await O()};function y$e(e){return e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase()}function b$e(e,t){if(t.length===0)return null;let n=e.commands[t[0]];if(!n)return null;for(let e=1;e<t.length;e++){if(!n.subcommands||!n.subcommands[t[e]])return null;n=n.subcommands[t[e]]}return n}function x$e(e,t){let n={...e.options};if(t.length===0)return n;let r=e.commands[t[0]];if(r){n={...n,...r.options};for(let e=1;e<t.length;e++)r.subcommands&&r.subcommands[t[e]]&&(r=r.subcommands[t[e]],n={...n,...r.options})}return n}function aG(e,t,n=[]){let r=[],i=t.programs[e];if(!i)return`Program not found: ${e}`;if(n.length===0){r.push(`Usage: ${e} <command> [options]`),r.push(``),r.push(`Commands:`);for(let[e,t]of Object.entries(i.commands)){let n=t.description||``,i=t.isDefault?` (default)`:``;r.push(` ${e.padEnd(20)} ${n}${i}`)}Object.keys(i.options).length>0&&(r.push(``),r.push(`Options:`),S$e(i.options,r))}else{let t=b$e(i,n);if(!t)return`Unknown command: ${n.join(` `)}`;let a=`${e} ${n.join(` `)}`;if(t.parameters&&(a+=` `+t.parameters),r.push(`Usage: ${a} [options]`),t.description&&(r.push(``),r.push(t.description)),t.positionals.length>0){r.push(``),r.push(`Arguments:`);for(let e of t.positionals){let t=e.required?`<required>`:`[optional]`,n=e.variadic?`...`:``;r.push(` ${e.name}${n} ${t}`)}}if(t.subcommands&&Object.keys(t.subcommands).length>0){r.push(``),r.push(`Subcommands:`);for(let[e,n]of Object.entries(t.subcommands)){let t=n.description||``;r.push(` ${e.padEnd(20)} ${t}`)}}let o=x$e(i,n);Object.keys(o).length>0&&(r.push(``),r.push(`Options:`),S$e(o,r))}return r.join(`
|
|
184
|
+
When calling a sub-agent, provide a short session name that describes the task. Use the same session name to continue a previous conversation with that agent. Use a new session name for a new independent task. When a request involves multiple actions for the same domain, combine them into a single sub-agent call rather than making separate calls.`),i}function a$e(e,t,n){let r=[];return{channelId:`${e.channelId}:${t}:${n}`,openingData:e.openingData,get state(){return e.state},get approvals(){return r},close:()=>{},sendBinary:t=>e.sendBinary(t),send:i=>{if(i.type!==`done`){if(i.type===`approval-request`){r.push({toolCallId:i.toolCallId,toolName:i.toolName,args:i.args,runId:i.runId});return}i.type===`step-start`||i.type===`text-delta`||i.type===`reasoning-delta`||i.type===`tool-call`||i.type===`tool-result`||i.type===`usage`||i.type===`error`||i.type===`workflow-created`?e.send({...i,agent:t,session:n}):e.send(i)}},setState:t=>e.setState(t),getState:()=>e.getState(),clearState:()=>e.clearState()}}async function tG(e,t,n,r,i,a,o,s){let c=AW(),l=[],u=[],d=a?.options?.requiresToolApproval??`explicit`,f=OW(i,`agent`,`agentsMeta`)[r];if(!f)return{tools:l,missingRpcs:u};let p=e.sessionService?await e.sessionService.get():null,m=f.tools,h=f.agents;if(m?.length)for(let t of m){let n,r=null,i,a=t.includes(`:`)?f$e(t):null,o;if(a)r=a.package,o=a.function,n=OW(r,`function`,`meta`)[o],i=OW(r,`misc`,`schemas`);else{if(o=OW(null,`rpc`,`meta`)[t],!o){u.push(t);continue}n=OW(null,`function`,`meta`)[o],i=OW(null,`misc`,`schemas`)}if(!n){u.push(t);continue}if(n.permissions?.length&&(!p||!await EQe(n.permissions,p,c,r)))continue;let s=n?.inputSchemaName,f=s?i.get(s):void 0;(!f||typeof f==`object`&&f.type===`object`&&!f.properties)&&(f={type:`object`,properties:{}});let m=d===`all`||d===`explicit`&&n?.approvalRequired,h;if(m&&o){let e=OW(r,`function`,`functions`).get(o);if(e?.approvalDescription){let t=e.approvalDescription,n=r;h=async e=>{let r=c;if(n){let e=OW(n,`package`,`singletonServices`);e&&(r=e)}return t(r,e)}}}l.push({name:t.replaceAll(`@`,`_`).replaceAll(`:`,`__`),description:n?.description||n?.title||t,inputSchema:f,needsApproval:m||void 0,approvalDescriptionFn:h,execute:async n=>new iG(c,e.sessionService?{...GW(e.sessionService)}:{},{sessionService:e.sessionService}).rpc(t,n)})}if(h?.length){let r=OW(null,`agent`,`agentsMeta`);for(let i of h){let o=r[i];if(!o){c.logger.warn(`Sub-agent '${i}' not found in agent registry`);continue}o.permissions?.length&&(!p||!await EQe(o.permissions,p,c))||l.push({name:i,description:o.description,inputSchema:{type:`object`,properties:{message:{type:`string`},session:{type:`string`,description:`Short session label for thread continuity`}},required:[`message`,`session`]},execute:async r=>{let{message:o,session:c}=r,l=`${i}::${c}`,u=t.get(l);if(u||(u=KW(),t.set(l,u)),a){let l=s!==`supervise`;l&&a.delegateState&&(a.delegateState.delegated=!0);let{channel:d}=a;d.send({type:`agent-call`,agentName:i,session:c,input:o});let f=a$e(d,i,c),p=l?f:{...f,send:e=>{e.type===`text-delta`||e.type===`reasoning-delta`||f.send(e)}},m=await $Qe(i,{message:o,threadId:u,resourceId:n},p,e,t,a.options);return f.approvals.length>0?{__approvalRequired:!0,toolName:i,args:r,agentRunId:f.approvals[0].runId,subApprovals:f.approvals}:(d.send({type:`agent-result`,agentName:i,session:c,result:m}),m)}let d=await l$e(i,{message:o,threadId:u,resourceId:n},e,t);return d.status===`suspended`&&d.pendingApprovals?.length?{__approvalRequired:!0,toolName:i,args:r,agentRunId:d.runId,subApprovals:d.pendingApprovals.map(e=>({toolCallId:e.toolCallId,toolName:e.toolName,args:e.args,runId:e.runId}))}:d.object??d.text}})}}if(o?.some(e=>e.beforeToolCall||e.afterToolCall))for(let e of l){let t=e.execute;e.execute=async n=>{let r=KW(),i=n??{};for(let t of o)if(t.beforeToolCall){let n=await t.beforeToolCall(c,{toolName:e.name,toolCallId:r,args:i});n&&`args`in n&&(i=n.args)}let a=Date.now(),s,l;try{s=await t(i)}catch(e){if(l=e,e?.payload?.error===`missing_credential`)throw e;s=e instanceof Error?e.message:String(e)}let u=Date.now()-a;for(let t=o.length-1;t>=0;t--){let n=o[t];if(n.afterToolCall){let t=await n.afterToolCall(c,{toolName:e.name,toolCallId:r,args:i,result:s,durationMs:u});t&&`result`in t&&(s=t.result)}}if(l)throw l;return s}}return{tools:l,missingRpcs:u}}async function o$e(e,t,n,r,i){let a=AW(),{agent:o,packageName:s,resolvedName:c}=r$e(e),l=a.aiAgentRunner;if(!l)throw new pQe;let{storage:u}=FQe(o,a),d=o.memory,f=t.threadId,p=OW(s,`agent`,`agentsMeta`)[c],m=p?.outputSchema,h=m?OW(s,`misc`,`schemas`).get(m):void 0,g=p?.workingMemorySchema??null,_=g?OW(s,`misc`,`schemas`).get(g):void 0;if(u)try{await u.getThread(f)}catch{await u.createThread(t.resourceId,{threadId:f})}let v=[];u&&(v=await u.getMessages(f,{lastN:d?.lastMessages??20}));let y=await zQe(d,u,t,_),b=t.attachments?.length?[{type:`text`,text:t.message},...t.attachments.map(e=>({type:e.type,data:e.data,url:e.url,mediaType:e.mediaType,...e.filename?{filename:e.filename}:{}}))]:t.message,x={id:KW(),role:`user`,content:b,createdAt:new Date},S=BQe([...y,...v,x]),C=o.aiMiddleware??[],{tools:w,missingRpcs:T}=await tG(n,r,t.resourceId,c,s,i,C,o.agentMode),E=await i$e(c,s),D=XW(c,o);t.model&&(D.model=XW(c,{...o,model:t.model}).model),t.temperature!==void 0&&(D.temperature=t.temperature);let O=D.maxSteps??10;return{agent:o,packageName:s,resolvedName:c,agentRunner:l,storage:u,memoryConfig:d,threadId:f,userMessage:x,runnerParams:{model:D.model,temperature:D.temperature,instructions:E,messages:S,tools:w,maxSteps:1,toolChoice:o.toolChoice??`auto`,outputSchema:h},maxSteps:O,missingRpcs:T,workingMemoryJsonSchema:_,workingMemorySchemaName:g}}function s$e(e){if(e===null)return;if(Array.isArray(e))return e.map(s$e);if(typeof e!=`object`)return e;let t={};for(let[n,r]of Object.entries(e))r!==null&&(t[n]=s$e(r));return t}function c$e(e){if(!e||typeof e!=`object`)return{text:null,uiSpec:null};let t=e;return{text:typeof t.text==`string`?t.text:null,uiSpec:t.ui??null}}async function l$e(e,t,n,r){let{agent:i,agentRunner:a,storage:o,memoryConfig:s,threadId:c,userMessage:l,runnerParams:u,maxSteps:d,missingRpcs:f,workingMemorySchemaName:p}=await o$e(e,t,n,r??new Map);u.agentId=e;let m=AW(),{aiRunState:h}=m;if(!h)throw Error(`AIRunStateService not available in singletonServices`);if(f.length>0)return{runId:await h.createRun({agentName:e,threadId:c,resourceId:t.resourceId,status:`suspended`,suspendReason:`rpc-missing`,missingRpcs:f,usage:{inputTokens:0,outputTokens:0,model:i.model},createdAt:new Date,updatedAt:new Date}),text:``,threadId:c,steps:[],usage:{inputTokens:0,outputTokens:0}};let g=[...YW(s,o,{threadId:c,workingMemorySchemaName:p,logger:m.logger,schemaService:m.schema}),...i.aiMiddleware??[]],_=u.messages,v=u.instructions;for(let e of g)if(e.modifyInput){let t=await e.modifyInput(m,{messages:_,instructions:v});_=t.messages,v=t.instructions}u.messages=_,u.instructions=v;let y=await h.createRun({agentName:e,threadId:c,resourceId:t.resourceId,status:`running`,usage:{inputTokens:0,outputTokens:0,model:i.model},createdAt:new Date,updatedAt:new Date});try{let e=[],n={inputTokens:0,outputTokens:0},r=null;for(let f=0;f<d;f++){if(i.prepareStep){let e=!1;if(await i.prepareStep({stepNumber:f,messages:u.messages,tools:u.tools,toolChoice:u.toolChoice,model:u.model,stop:()=>{e=!0}}),e)break}let d=await a.run(u);r=d,n.inputTokens+=d.usage.inputTokens,n.outputTokens+=d.usage.outputTokens;for(let e of g)e.afterStep&&await e.afterStep(m,{stepNumber:f,text:d.text,toolCalls:d.toolCalls,toolResults:d.toolResults,usage:d.usage,finishReason:d.finishReason});if(e.push({usage:d.usage,toolCalls:d.toolCalls.map(e=>{let t=d.toolResults.find(t=>t.toolCallId===e.toolCallId);return{name:e.toolName,args:e.args,result:typeof t?.result==`string`?t.result:JSON.stringify(t?.result??``)}})}),d.toolCalls.length===0)break;let p=XQe(d,u.tools,y);if(p.length>0){for(let e of p){let t=u.tools.find(t=>t.name===e.toolName);if(t?.approvalDescriptionFn&&!e.reason)try{e.reason=await t.approvalDescriptionFn(e.args)}catch{}}let a=p.map(e=>e.agentRunId?{type:`agent-call`,toolCallId:e.toolCallId,agentName:e.toolName,agentRunId:e.agentRunId,displayToolName:e.displayToolName??e.toolName,displayArgs:e.displayArgs??e.args}:{type:`tool-call`,toolCallId:e.toolCallId,toolName:e.toolName,args:e.args}),f=e.slice(0,-1);return await qW(o,c,t.resourceId,s,l,{text:``,steps:f}),o&&await o.saveMessages(c,[{id:KW(),role:`assistant`,toolCalls:d.toolCalls.map(e=>({id:e.toolCallId,name:e.toolName,args:e.args})),createdAt:new Date}]),await h.updateRun(y,{status:`suspended`,suspendReason:`approval`,pendingApprovals:a,usage:{...n,model:i.model}}),{runId:y,text:r?.text??``,threadId:c,steps:e,usage:n,status:`suspended`,pendingApprovals:p.map(e=>({toolCallId:e.toolCallId,toolName:e.displayToolName??e.toolName,args:e.displayArgs??e.args,reason:e.reason,runId:y}))}}QW(u,d)}let f=r?.object,p=c$e(f),_=p.text??r?.text??``,v={text:_,steps:e},b=_,x=u.messages;for(let e=g.length-1;e>=0;e--){let t=g[e];if(t.modifyOutput){let e=await t.modifyOutput(m,{text:b,messages:x,usage:n});b=e.text,x=e.messages}}return await qW(o,c,t.resourceId,s,l,{...v,text:b,uiSpec:p.uiSpec}),await h.updateRun(y,{status:`completed`,usage:{...n,model:i.model}}),{runId:y,text:b,object:f,threadId:c,steps:e,usage:n}}catch(e){for(let t of g)if(t.onError)try{await t.onError(m,{error:e instanceof Error?e:Error(String(e)),stepNumber:-1,messages:u.messages})}catch{}throw await h.updateRun(y,{status:`failed`,errorMessage:e instanceof Error?e.message:String(e)}),e}}async function u$e(e,t,n,r){let i=AW(),{aiRunState:a}=i;if(!a)throw Error(`AIRunStateService not available in singletonServices`);let o=await a.getRun(e);if(!o)throw Error(`No run found for runId ${e}`);if(r&&o.agentName!==r)throw Error(`Run ${e} belongs to agent '${o.agentName}', not '${r}'`);if(o.status!==`suspended`)throw Error(`Run ${e} is not suspended (status: ${o.status})`);let{agent:s,packageName:c,resolvedName:l}=r$e(o.agentName),{storage:u}=FQe(s,i),d=s.memory,f=i.aiAgentRunner;if(!f)throw new pQe;let p=new Set(t.filter(e=>e.approved).map(e=>e.toolCallId)),m=new Set(t.filter(e=>!e.approved).map(e=>e.toolCallId)),h=[...o.pendingApprovals??[]];for(let{toolCallId:e,approved:n}of t)await a.resolveApproval(e,n?`approved`:`denied`);let{tools:g}=await tG(n,new Map,o.resourceId,l,c,void 0,s.aiMiddleware??[]),_=[];for(let e of h){if(e.type!==`tool-call`)continue;let t=e.toolCallId,n;if(m.has(t))n=`The user explicitly declined this action. Inform them that it was declined and do not retry.`;else if(p.has(t)){let t=g.find(t=>t.name===e.toolName);if(!t)throw Error(`Tool "${e.toolName}" not found in agent definition`);let r=s$e(typeof e.args==`string`?JSON.parse(e.args):e.args)??{};try{let e=await t.execute(r);n=typeof e==`string`?e:JSON.stringify(e)}catch(e){n=e?.payload?.error===`missing_credential`?JSON.stringify(e.payload):`Error: ${e instanceof Error?e.message:String(e)}`}}else continue;_.push({toolCallId:t,toolName:e.toolName,args:typeof e.args==`string`?JSON.parse(e.args):e.args,result:n})}return u&&_.length>0&&await u.saveMessages(o.threadId,[{id:KW(),role:`tool`,toolResults:_.map(e=>({id:e.toolCallId,name:e.toolName,result:e.result})),createdAt:new Date}]),await a.updateRun(e,{status:`running`}),d$e(o,s,c,l,u,d,f,n,a)}async function d$e(e,t,n,r,i,a,o,s,c){let l=AW(),u=OW(n,`agent`,`agentsMeta`)[r],d=u?.workingMemorySchema??null,f=i?await i.getMessages(e.threadId,{lastN:a?.lastMessages??20}):[],p=d?OW(n,`misc`,`schemas`).get(d):void 0,m=BQe([...await zQe(a,i,{message:``,threadId:e.threadId,resourceId:e.resourceId},p),...f]),h=await i$e(r,n),g=[...YW(a,i,{threadId:e.threadId,workingMemorySchemaName:d,logger:l.logger,schemaService:l.schema}),...t.aiMiddleware??[]],_=m,v=h;for(let e of g)if(e.modifyInput){let t=await e.modifyInput(l,{messages:_,instructions:v});_=t.messages,v=t.instructions}let{tools:y}=await tG(s,new Map,e.resourceId,r,n,void 0,g),b=XW(r,t),x=b.maxSteps??10,S={model:b.model,temperature:b.temperature,instructions:v,messages:_,tools:y,maxSteps:1,toolChoice:t.toolChoice??`auto`,outputSchema:u?.outputSchema?OW(n,`misc`,`schemas`).get(u.outputSchema):void 0,agentId:e.agentName};try{let n=[],r={inputTokens:0,outputTokens:0},s=null;for(let u=0;u<x;u++){let d=await o.run(S);s=d,r.inputTokens+=d.usage.inputTokens,r.outputTokens+=d.usage.outputTokens;for(let e of g)e.afterStep&&await e.afterStep(l,{stepNumber:u,text:d.text,toolCalls:d.toolCalls,toolResults:d.toolResults,usage:d.usage,finishReason:d.finishReason});if(n.push({usage:d.usage,toolCalls:d.toolCalls.map(e=>{let t=d.toolResults.find(t=>t.toolCallId===e.toolCallId);return{name:e.toolName,args:e.args,result:typeof t?.result==`string`?t.result:JSON.stringify(t?.result??``)}})}),d.toolCalls.length===0)break;let f=XQe(d,S.tools,e.runId);if(f.length>0){for(let e of f){let t=S.tools.find(t=>t.name===e.toolName);if(t?.approvalDescriptionFn&&!e.reason)try{e.reason=await t.approvalDescriptionFn(e.args)}catch{}}let o=f.map(e=>e.agentRunId?{type:`agent-call`,toolCallId:e.toolCallId,agentName:e.toolName,agentRunId:e.agentRunId,displayToolName:e.displayToolName??e.toolName,displayArgs:e.displayArgs??e.args}:{type:`tool-call`,toolCallId:e.toolCallId,toolName:e.toolName,args:e.args}),l=n.slice(0,-1);l.length>0&&await qW(i,e.threadId,e.resourceId,a,null,{text:``,steps:l}),i&&await i.saveMessages(e.threadId,[{id:KW(),role:`assistant`,toolCalls:d.toolCalls.map(e=>({id:e.toolCallId,name:e.toolName,args:e.args})),createdAt:new Date}]),await c.updateRun(e.runId,{status:`suspended`,suspendReason:`approval`,pendingApprovals:o,usage:{...r,model:t.model}});let u=s?.text??``;return{runId:e.runId,text:u,threadId:e.threadId,steps:n,usage:r,status:`suspended`,pendingApprovals:f.map(t=>({toolCallId:t.toolCallId,toolName:t.displayToolName??t.toolName,args:t.displayArgs??t.args,reason:t.reason,runId:e.runId}))}}QW(S,d)}let u=s?.text??``,d=s?.object,f={text:u,steps:n},p=u,m=S.messages;for(let e=g.length-1;e>=0;e--){let t=g[e];if(t.modifyOutput){let e=await t.modifyOutput(l,{text:p,messages:m,usage:r});p=e.text,m=e.messages}}return await qW(i,e.threadId,e.resourceId,a,null,{...f,text:p}),await c.updateRun(e.runId,{status:`completed`,usage:{...r,model:t.model}}),{runId:e.runId,text:p,object:d,threadId:e.threadId,steps:n,usage:r}}catch(t){for(let e of g)if(e.onError)try{await e.onError(l,{error:t instanceof Error?t:Error(String(t)),stepNumber:-1,messages:S.messages})}catch{}throw await c.updateRun(e.runId,{status:`failed`,errorMessage:t instanceof Error?t.message:String(t)}),t}}var nG=class extends jW{rpcName;constructor(e){super(`RPC function not found: ${e}`),this.rpcName=e}};MW(nG,{status:404,mcpCode:-32601,message:`RPC function not found.`});const f$e=e=>{let t=e.indexOf(`:`);if(t===-1)return null;let n=e.substring(0,t),r=e.substring(t+1),i=OW(null,`addons`,`packages`).get(n);return i?{package:i.package,function:r,addonConfig:i}:null};var rG=(e,t=null)=>{if(t){let n=OW(t,`function`,`meta`)?.[e];if(n)return{pikkuFuncId:n.pikkuFuncId||e,packageName:t}}let n=OW(null,`rpc`,`meta`),r=n[e];if(!r){let{baseName:t,version:i}=AQe(e);i!==null&&(r=n[t])}if(!r){let t=OW(null,`function`,`meta`)?.[e];if(t)return{pikkuFuncId:t.pikkuFuncId||e,packageName:null}}if(!r)throw new nG(e);return{pikkuFuncId:r,packageName:null}},iG=class{services;wire;options;packageName;constructor(e,t,n,r=null){this.services=e,this.wire=t,this.options=n,this.packageName=r}async rpcExposed(e,t){let n;if(e.includes(`:`)){let t=f$e(e);t&&(n=OW(t.package,`function`,`meta`)[t.function])}else{let t=rG(e,this.packageName);n=OW(t.packageName,`function`,`meta`)[t.pikkuFuncId]}if(!n||!n.expose)throw new nG(e);return await this.rpc(e,t)}async rpc(e,t){let n=this.wire.rpc?.depth||0,r={...this.wire,rpc:this.wire.rpc?{...this.wire.rpc,depth:n+1,global:!1}:void 0};if(e.includes(`:`))try{return await this.invokeAddonFunction(e,t,r)}catch(e){if(!(e instanceof nG))throw e}try{let n=rG(e,this.packageName);return await v$e(`rpc`,e,n.pikkuFuncId,{auth:this.options.requiresAuth,singletonServices:this.services,data:()=>t,wire:r,packageName:n.packageName})}catch(n){if(n instanceof nG&&this.services.deploymentService){let n=this.wire.getSession&&typeof this.wire.getSession==`function`?await this.wire.getSession():this.wire.session;return this.services.deploymentService.invoke(e,t,n,this.wire.traceId)}throw n}}async invokeAddonFunction(e,t,n){let r=f$e(e);if(!r)throw new nG(e);let i=OW(r.package,`function`,`meta`)[r.function];if(!i)throw new nG(e);let a=i.pikkuFuncId||r.function,o=r.addonConfig?.auth??this.options.requiresAuth,s=[...r.addonConfig?.tags??[],...i.tags??[]];return v$e(`rpc`,e,a,{auth:o,singletonServices:this.services,data:()=>t,wire:n,packageName:r.package,tags:s})}async rpcWithWire(e,t,n){let r=this.wire.rpc?.depth||0,i={...this.wire,...n,rpc:this.wire.rpc?{...this.wire.rpc,depth:r+1,global:!1}:void 0};if(e.includes(`:`))return this.invokeAddonFunction(e,t,i);try{let n=rG(e,this.packageName);return await v$e(`rpc`,e,n.pikkuFuncId,{auth:this.options.requiresAuth,singletonServices:this.services,data:()=>t,wire:i,packageName:n.packageName})}catch(n){if(n instanceof nG&&this.services.deploymentService){let n=this.wire.getSession&&typeof this.wire.getSession==`function`?await this.wire.getSession():this.wire.session;return this.services.deploymentService.invoke(e,t,n,this.wire.traceId)}throw n}}async startWorkflow(e,t,n){if(!this.services.workflowService)throw Error(`WorkflowService service not available`);let r=this.wire.workflowStep?.runId??this.wire.graph?.runId,i=n?.wire??{type:this.wire.wireType??`unknown`,id:this.wire.wireId,...r?{parentRunId:r}:{},...this.wire.pikkuUserId?{pikkuUserId:this.wire.pikkuUserId}:{}};return this.services.workflowService.startWorkflow(e,t,i,this,n)}get agent(){return{run:async(e,t)=>{let n=await l$e(e,t,{sessionService:this.options.sessionService});return{runId:n.runId,result:n.object??n.text,usage:n.usage,...n.status===`suspended`&&{status:`suspended`,pendingApprovals:n.pendingApprovals}}},stream:async(e,t,n)=>{let r=this.wire.channel;if(!r)throw Error(`No channel available for streaming`);await $Qe(e,t,r,{sessionService:this.options.sessionService},void 0,n)},resume:async(e,t,n)=>{let r=this.wire.channel;if(!r)throw Error(`No channel available for streaming`);await e$e({runId:e,...t},r,{sessionService:this.options.sessionService},n)},approve:async(e,t,n)=>{let r=await u$e(e,t,{sessionService:this.options.sessionService},n);return{runId:r.runId,result:r.object??r.text,usage:r.usage,...r.status===`suspended`&&{status:`suspended`,pendingApprovals:r.pendingApprovals}}}}}async remote(e,t){if(!this.services.deploymentService)throw Error(`No DeploymentService configured for remote RPC: ${e}. Set up a DeploymentService to enable remote function calls.`);let n=this.wire.getSession&&typeof this.wire.getSession==`function`?await this.wire.getSession():this.wire.session;return this.services.deploymentService.invoke(e,t,n,this.wire.traceId)}};const p$e=new class{getContextRPCService(e,t,n,r=0,i=null){let a=new iG(e,t,typeof n==`object`&&n?n:{requiresAuth:n},i);return{depth:r,global:!1,invoke:a.rpc.bind(a),remote:a.remote.bind(a),exposed:a.rpcExposed.bind(a),startWorkflow:a.startWorkflow.bind(a),get agent(){return a.agent},rpcWithWire:a.rpcWithWire.bind(a)}}};async function m$e(e,t,n){let r=MQe(e);r&&(e.pikkuUserId=r,n instanceof jQe&&n.setPikkuUserId(r));let{sessionStore:i}=t;if(!(!i||!r)&&!e.session){let t=await i.get(r);t&&(e.session=t,n?.setInitial(t))}}var h$e=e=>{let t=OW(null,`addons`,`packages`);if(!t)return null;for(let[n,r]of t.entries())if(r?.package===e)return n;return null},g$e=(e,t)=>new Proxy(e,{get(e,n,r){if(n===`startWorkflow`||n===`runToCompletion`){let i=Reflect.get(e,n,r);return function(e,...n){if(typeof e==`string`&&!e.includes(`:`)){let n=h$e(t);n&&(e=`${n}:${e}`)}return i.call(this,e,...n)}}return Reflect.get(e,n,r)}}),_$e=async(e,t)=>{let n=OW(e,`package`,`singletonServices`);if(n)return n;let r=OW(e,`package`,`factories`);if(!r||!r.createSingletonServices)return t;let i=t.config;r.createConfig&&(i=await r.createConfig(t.variables));let a=await r.createSingletonServices(i,t);return a.workflowService&&typeof a.workflowService==`object`&&(a.workflowService=g$e(a.workflowService,e)),OW(e,`package`,`singletonServices`,a),a};const v$e=async(e,t,n,{singletonServices:r,createWireServices:i,data:a,auth:o,inheritedMiddleware:s,wireMiddleware:c,inheritedChannelMiddleware:l,wireChannelMiddleware:u,inheritedPermissions:d,wirePermissions:f,coerceDataFromSchema:p,tags:m=[],wire:h,sessionService:g,credentialWireService:_,packageName:v=null})=>{h.wireType??=e,h.wireId??=t;let y=OW(v,`function`,`functions`),b=y.get(n),x=OW(v,`function`,`meta`),S=x[n];if(!b||!S){let{baseName:e,version:t}=AQe(n);t!==null&&(b||=y.get(e),S||=x[e],b&&S&&r.logger.warn(`Version '${n}' not registered, resolved to '${e}'`))}if(!b)throw Error(`Function not found: ${n}`);if(!S)throw Error(`Function meta not found: ${n}`);let C=v?await _$e(v,r):r,w=i;if(v){let e=OW(v,`package`,`factories`);e?.createWireServices&&(w=e.createWireServices)}let T=BW(e,t,{wireInheritedChannelMiddleware:l,wireChannelMiddleware:u,packageName:v}),E=T.length>0&&h.channel?CQe(h,C,T):h;if(!E.getCredentials){let e=_??new NQe(C.credentialService,E);Object.assign(E,PQe(e))}let D;D=m&&m.length>0?[...d||[],...m.map(e=>({type:`tag`,tag:e}))]:d||[];let O=async()=>{await m$e(E,C,g),g&&(E.session=g.freezeInitial(),E.setSession=e=>g.set(e),E.clearSession=()=>g.clear(),E.getSession=()=>g.get(),E.hasSessionChanged=()=>g.sessionChanged);let r=E.session;if(S.sessionless){if((o===!0||b.auth===!0)&&!r)throw new PW(`Authentication required`)}else if(S.sessionless===!1){if((o===!1||b.auth===!1)&&C.logger.warn(`Function '${n}' requires a session but auth was explicitly disabled — use pikkuSessionlessFunc instead.`),!r)throw new PW(`Authentication required`)}else if((o===!0||b.auth===!0)&&!r)throw new PW(`Authentication required`);if(r?.readonly&&!S.readonly)throw new uQe;let i=await a(),s=S.inputSchemaName;s&&(p&&OQe(s,i,v),await kQe(C.logger,C.schema,s,i,v)),(D.length>0||f||S.permissions||b.permissions)&&await TQe(e,t,{wireInheritedPermissions:D,wirePermissions:f,funcInheritedPermissions:S.permissions,funcPermissions:b.permissions,services:C,wire:E,data:i,packageName:v});let c;try{c=await w?.(C,E);let e=c&&Object.keys(c).length>0?{...C,...c}:C,t=v;return Object.defineProperty(E,`rpc`,{get(){let n=p$e.getContextRPCService(e,E,{sessionService:g},0,t);return Object.defineProperty(E,`rpc`,{value:n,writable:!0,configurable:!0}),n},configurable:!0,enumerable:!0}),await b.func(e,i,E)}finally{c&&Object.keys(c).length>0&&await mQe(C.logger,c)}},ee=bQe(e,t,{wireInheritedMiddleware:s,wireMiddleware:c,funcInheritedMiddleware:S.middleware,funcMiddleware:b.middleware,packageName:v});return ee.length>0?await vQe(C,E,ee,O):await O()};function y$e(e){return e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase()}function b$e(e,t){if(t.length===0)return null;let n=e.commands[t[0]];if(!n)return null;for(let e=1;e<t.length;e++){if(!n.subcommands||!n.subcommands[t[e]])return null;n=n.subcommands[t[e]]}return n}function x$e(e,t){let n={...e.options};if(t.length===0)return n;let r=e.commands[t[0]];if(r){n={...n,...r.options};for(let e=1;e<t.length;e++)r.subcommands&&r.subcommands[t[e]]&&(r=r.subcommands[t[e]],n={...n,...r.options})}return n}function aG(e,t,n=[]){let r=[],i=t.programs[e];if(!i)return`Program not found: ${e}`;if(n.length===0){r.push(`Usage: ${e} <command> [options]`),r.push(``),r.push(`Commands:`);for(let[e,t]of Object.entries(i.commands)){let n=t.description||``,i=t.isDefault?` (default)`:``;r.push(` ${e.padEnd(20)} ${n}${i}`)}Object.keys(i.options).length>0&&(r.push(``),r.push(`Options:`),S$e(i.options,r))}else{let t=b$e(i,n);if(!t)return`Unknown command: ${n.join(` `)}`;let a=`${e} ${n.join(` `)}`;if(t.parameters&&(a+=` `+t.parameters),r.push(`Usage: ${a} [options]`),t.description&&(r.push(``),r.push(t.description)),t.positionals.length>0){r.push(``),r.push(`Arguments:`);for(let e of t.positionals){let t=e.required?`<required>`:`[optional]`,n=e.variadic?`...`:``;r.push(` ${e.name}${n} ${t}`)}}if(t.subcommands&&Object.keys(t.subcommands).length>0){r.push(``),r.push(`Subcommands:`);for(let[e,n]of Object.entries(t.subcommands)){let t=n.description||``;r.push(` ${e.padEnd(20)} ${t}`)}}let o=x$e(i,n);Object.keys(o).length>0&&(r.push(``),r.push(`Options:`),S$e(o,r))}return r.join(`
|
|
185
185
|
`)}function S$e(e,t){for(let[n,r]of Object.entries(e)){let e=` `;r.short?e+=`-${r.short}, `:e+=` `,e+=`--${y$e(n)}`,r.default!==void 0&&typeof r.default!=`boolean`&&(e+=` <value>`),e=e.padEnd(30),e+=r.description||``,r.default!==void 0&&(e+=` (default: ${JSON.stringify(r.default)})`),r.choices&&(e+=` [choices: ${r.choices.join(`, `)}]`),t.push(e)}}var C$e=e=>{let t=e.split(`
|
|
186
186
|
`),n=[],r=!1;for(let e=0;e<t.length;e++){let i=t[e],a=i.trim();if(a===`Commands:`||a===`Subcommands:`||a===`Options:`||i.startsWith(`Usage:`)){r=a===`Commands:`||a===`Subcommands:`,n.push({text:i+`
|
|
187
187
|
`,type:`heading`});continue}if(r&&a===``&&(r=!1),r&&i.startsWith(` `)){let e=i.match(/^(\s{2})(\S+)(\s.*)?$/);if(e){let[,t,r,i]=e;n.push({text:t}),n.push({text:r,type:`command`}),n.push({text:(i||``)+`
|
package/console-app/index.html
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
}
|
|
22
22
|
} catch (e) {}
|
|
23
23
|
</script>
|
|
24
|
-
<script type="module" crossorigin src="/assets/index-
|
|
24
|
+
<script type="module" crossorigin src="/assets/index-BDOqBctb.js"></script>
|
|
25
25
|
<link rel="stylesheet" crossorigin href="/assets/index-C52h1B_L.css">
|
|
26
26
|
</head>
|
|
27
27
|
<body>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* This file was generated by @pikku/cli@0.12.
|
|
2
|
+
* This file was generated by @pikku/cli@0.12.24
|
|
3
3
|
*/
|
|
4
4
|
import { CoreAIAgent, PikkuAIMiddlewareHooks } from '@pikku/core/ai-agent';
|
|
5
5
|
import type { PikkuPermission, PikkuMiddleware, Services, PikkuFunctionConfig } from '../function/pikku-function-types.gen.js';
|