@pikku/cli 0.12.23 → 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.
Files changed (62) hide show
  1. package/console-app/assets/{index-CAk106ji.js → index-BDOqBctb.js} +2 -2
  2. package/console-app/index.html +1 -1
  3. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +1 -1
  4. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +1 -1
  5. package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
  6. package/dist/.pikku/cli/pikku-cli-channel.js +1 -1
  7. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
  8. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  9. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +1 -1
  10. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
  11. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
  12. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  13. package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
  14. package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
  15. package/dist/.pikku/function/pikku-function-types.gen.d.ts +1 -1
  16. package/dist/.pikku/function/pikku-function-types.gen.js +1 -1
  17. package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
  18. package/dist/.pikku/function/pikku-functions-meta.gen.json +34 -34
  19. package/dist/.pikku/function/pikku-functions.gen.js +1 -1
  20. package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
  21. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  22. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +1 -1
  23. package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -1
  24. package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -1
  25. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
  26. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
  27. package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -1
  28. package/dist/.pikku/pikku-bootstrap.gen.js +1 -1
  29. package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
  30. package/dist/.pikku/pikku-meta-service.gen.js +1 -1
  31. package/dist/.pikku/pikku-services.gen.d.ts +1 -1
  32. package/dist/.pikku/pikku-types.gen.d.ts +1 -1
  33. package/dist/.pikku/pikku-types.gen.js +1 -1
  34. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  35. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  36. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +1 -1
  37. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
  38. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
  39. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
  40. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +16 -16
  41. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  42. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  43. package/dist/.pikku/schemas/register.gen.js +3 -3
  44. package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
  45. package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
  46. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
  47. package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
  48. package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
  49. package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
  50. package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
  51. package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
  52. package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
  53. package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
  54. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +1 -1
  55. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
  56. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
  57. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
  58. package/dist/bin/pikku-bin.mjs +2 -2
  59. package/dist/src/functions/commands/dev.js +17 -2
  60. package/dist/src/functions/db/local-db.js +1 -0
  61. package/dist/src/scaffold/rpc-remote.gen.js +1 -1
  62. package/package.json +2 -2
@@ -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||``)+`
@@ -21,7 +21,7 @@
21
21
  }
22
22
  } catch (e) {}
23
23
  </script>
24
- <script type="module" crossorigin src="/assets/index-CAk106ji.js"></script>
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.23
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';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /**
5
5
  * Channel-specific type definitions for tree-shaking optimization
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /**
5
5
  * Channel-specific type definitions for tree-shaking optimization
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /**
5
5
  * WebSocket channel backend for 'pikku' CLI commands
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /**
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /**
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import { pikkuState } from '@pikku/core/internal';
5
5
  import metaData from './pikku-cli-wirings-meta.gen.json' with { type: 'json' };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import '../../src/cli.wiring.js';
5
5
  import '../../src/services.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /* The files with an wireCLI function call */
5
5
  import '../../src/cli.wiring.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import '../pikku-bootstrap.gen.js';
5
5
  export declare function PikkuCLI(args: string[]): Promise<void>;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import { executeCLI, CLIError } from '@pikku/core/cli';
5
5
  import { createConfig as createConfig } from '../../src/services.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import type { FlattenedRPCMap } from '../rpc/pikku-rpc-wirings-map.internal.gen.js';
5
5
  export type NodeCategory = never;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /**
5
5
  * Core function, middleware, and permission types for all wirings
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /**
5
5
  * Core function, middleware, and permission types for all wirings
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import { pikkuState } from '@pikku/core/internal';
5
5
  import metaData from './pikku-functions-meta.gen.json' with { type: 'json' };
@@ -826,7 +826,7 @@
826
826
  ],
827
827
  "outputs": [],
828
828
  "remote": true,
829
- "implementationHash": "0b67ce5d6620887c"
829
+ "implementationHash": "3e079cf6ecaaf8e4"
830
830
  },
831
831
  "dbMigrate": {
832
832
  "pikkuFuncId": "dbMigrate",
@@ -1812,6 +1812,28 @@
1812
1812
  "inputHash": "fef4d62b",
1813
1813
  "outputHash": "7d42c9e1"
1814
1814
  },
1815
+ "pikkuCredentials": {
1816
+ "pikkuFuncId": "pikkuCredentials",
1817
+ "functionType": "user",
1818
+ "funcWrapper": "pikkuSessionlessFunc",
1819
+ "sessionless": true,
1820
+ "name": "pikkuCredentials",
1821
+ "inputSchemaName": null,
1822
+ "outputSchemaName": null,
1823
+ "inputs": [],
1824
+ "outputs": [],
1825
+ "implementationHash": "a99a627856fd77bd",
1826
+ "middleware": [
1827
+ {
1828
+ "type": "wire",
1829
+ "name": "logCommandInfoAndTime",
1830
+ "inline": false
1831
+ }
1832
+ ],
1833
+ "contractHash": "8fa847acfa7ef407",
1834
+ "inputHash": "b98cb2ee",
1835
+ "outputHash": "9e33f562"
1836
+ },
1815
1837
  "pikkuConsoleFunctions": {
1816
1838
  "pikkuFuncId": "pikkuConsoleFunctions",
1817
1839
  "functionType": "user",
@@ -1882,17 +1904,19 @@
1882
1904
  "inputHash": "4be7b8bd",
1883
1905
  "outputHash": "fca2b5eb"
1884
1906
  },
1885
- "pikkuCredentials": {
1886
- "pikkuFuncId": "pikkuCredentials",
1907
+ "pikkuGateway": {
1908
+ "pikkuFuncId": "pikkuGateway",
1887
1909
  "functionType": "user",
1888
1910
  "funcWrapper": "pikkuSessionlessFunc",
1889
1911
  "sessionless": true,
1890
- "name": "pikkuCredentials",
1912
+ "name": "pikkuGateway",
1891
1913
  "inputSchemaName": null,
1892
- "outputSchemaName": null,
1914
+ "outputSchemaName": "PikkuGatewayOutput",
1893
1915
  "inputs": [],
1894
- "outputs": [],
1895
- "implementationHash": "a99a627856fd77bd",
1916
+ "outputs": [
1917
+ "PikkuGatewayOutput"
1918
+ ],
1919
+ "implementationHash": "cc85ec16d890311e",
1896
1920
  "middleware": [
1897
1921
  {
1898
1922
  "type": "wire",
@@ -1900,9 +1924,9 @@
1900
1924
  "inline": false
1901
1925
  }
1902
1926
  ],
1903
- "contractHash": "8fa847acfa7ef407",
1904
- "inputHash": "b98cb2ee",
1905
- "outputHash": "9e33f562"
1927
+ "contractHash": "8c9fc7c18aeb2212",
1928
+ "inputHash": "a5477eae",
1929
+ "outputHash": "b5ea8b47"
1906
1930
  },
1907
1931
  "pikkuFunctionTypesSplit": {
1908
1932
  "pikkuFuncId": "pikkuFunctionTypesSplit",
@@ -1994,30 +2018,6 @@
1994
2018
  "inputHash": "a3e730d9",
1995
2019
  "outputHash": "e0b61e49"
1996
2020
  },
1997
- "pikkuGateway": {
1998
- "pikkuFuncId": "pikkuGateway",
1999
- "functionType": "user",
2000
- "funcWrapper": "pikkuSessionlessFunc",
2001
- "sessionless": true,
2002
- "name": "pikkuGateway",
2003
- "inputSchemaName": null,
2004
- "outputSchemaName": "PikkuGatewayOutput",
2005
- "inputs": [],
2006
- "outputs": [
2007
- "PikkuGatewayOutput"
2008
- ],
2009
- "implementationHash": "cc85ec16d890311e",
2010
- "middleware": [
2011
- {
2012
- "type": "wire",
2013
- "name": "logCommandInfoAndTime",
2014
- "inline": false
2015
- }
2016
- ],
2017
- "contractHash": "8c9fc7c18aeb2212",
2018
- "inputHash": "a5477eae",
2019
- "outputHash": "b5ea8b47"
2020
- },
2021
2021
  "pikkuHTTPMap": {
2022
2022
  "pikkuFuncId": "pikkuHTTPMap",
2023
2023
  "functionType": "user",
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /* Import and register functions used by RPCs */
5
5
  import { addFunction } from '@pikku/core/function';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /**
5
5
  * HTTP-specific type definitions for tree-shaking optimization
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /**
5
5
  * HTTP-specific type definitions for tree-shaking optimization
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import { pikkuState } from '@pikku/core/internal';
5
5
  import metaData from './pikku-http-wirings-meta.gen.json' with { type: 'json' };
@@ -1,4 +1,4 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import '../../src/scaffold/rpc-remote.gen.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /* The files with an wireHTTP function call */
5
5
  import '../../src/scaffold/rpc-remote.gen.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /**
5
5
  * MCP-specific type definitions for tree-shaking optimization
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /**
5
5
  * MCP-specific type definitions for tree-shaking optimization
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import './rpc/pikku-rpc-wirings-meta.internal.gen.js';
5
5
  import './http/pikku-http-wirings-meta.gen.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import './rpc/pikku-rpc-wirings-meta.internal.gen.js';
5
5
  import './http/pikku-http-wirings-meta.gen.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import { LocalMetaService } from '@pikku/core/services/local-meta';
5
5
  export declare class PikkuMetaService extends LocalMetaService {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import { LocalMetaService } from '@pikku/core/services/local-meta';
5
5
  export class PikkuMetaService extends LocalMetaService {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import type { SingletonServices } from '../types/application-types.d.js';
5
5
  import type { Services } from '../types/application-types.d.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /**
5
5
  * Main type export hub - re-exports all wiring-specific types
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /**
5
5
  * Main type export hub - re-exports all wiring-specific types
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /**
5
5
  * Queue-specific type definitions for tree-shaking optimization
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /**
5
5
  * Queue-specific type definitions for tree-shaking optimization
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import { pikkuState } from '@pikku/core/internal';
5
5
  import metaData from './pikku-queue-workers-wirings-meta.gen.json' with { type: 'json' };
@@ -1,4 +1,4 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import '../../src/scaffold/rpc-remote.gen.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /* The files with an addQueueWorkers function call */
5
5
  import '../../src/scaffold/rpc-remote.gen.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import { pikkuState } from '@pikku/core/internal';
5
5
  import metaData from './pikku-rpc-wirings-meta.internal.gen.json' with { type: 'json' };
@@ -88,24 +88,25 @@
88
88
  "pikkuMetaClients": "pikkuMetaClients",
89
89
  "remoteRPCHandler": "remoteRPCHandler",
90
90
  "pikkuSummary": "pikkuSummary",
91
- "pikkuAIAgentTypes": "pikkuAIAgentTypes",
92
- "pikkuAIAgent": "pikkuAIAgent",
93
- "pikkuPublicAgent": "pikkuPublicAgent",
94
- "pikkuCLIEntry": "pikkuCLIEntry",
95
- "pikkuCLI": "pikkuCLI",
96
- "pikkuConsoleFunctions": "pikkuConsoleFunctions",
97
- "pikkuNodeTypes": "pikkuNodeTypes",
98
- "pikkuNodesMeta": "pikkuNodesMeta",
99
91
  "pikkuChannels": "pikkuChannels",
100
92
  "pikkuChannelTypes": "pikkuChannelTypes",
101
93
  "pikkuChannelsMap": "pikkuChannelsMap",
102
94
  "pikkuCommandChannels": "pikkuCommandChannels",
95
+ "pikkuCLIEntry": "pikkuCLIEntry",
96
+ "pikkuCLI": "pikkuCLI",
103
97
  "pikkuCredentials": "pikkuCredentials",
98
+ "pikkuConsoleFunctions": "pikkuConsoleFunctions",
99
+ "pikkuNodeTypes": "pikkuNodeTypes",
100
+ "pikkuNodesMeta": "pikkuNodesMeta",
101
+ "pikkuGateway": "pikkuGateway",
104
102
  "pikkuFunctionTypesSplit": "pikkuFunctionTypesSplit",
105
103
  "pikkuFunctionTypes": "pikkuFunctionTypes",
106
104
  "pikkuFunctions": "pikkuFunctions",
107
105
  "pikkuServices": "pikkuServices",
108
- "pikkuGateway": "pikkuGateway",
106
+ "pikkuHTTPMap": "pikkuHTTPMap",
107
+ "pikkuCommandHTTP": "pikkuCommandHTTP",
108
+ "pikkuHTTPTypes": "pikkuHTTPTypes",
109
+ "pikkuHTTP": "pikkuHTTP",
109
110
  "pikkuMCPJSON": "pikkuMCPJSON",
110
111
  "pikkuMCPTypes": "pikkuMCPTypes",
111
112
  "pikkuMCP": "pikkuMCP",
@@ -113,10 +114,6 @@
113
114
  "pikkuSecretDefinitionTypes": "pikkuSecretDefinitionTypes",
114
115
  "pikkuVariableDefinitionTypes": "pikkuVariableDefinitionTypes",
115
116
  "pikkuPackage": "pikkuPackage",
116
- "pikkuHTTPMap": "pikkuHTTPMap",
117
- "pikkuCommandHTTP": "pikkuCommandHTTP",
118
- "pikkuHTTPTypes": "pikkuHTTPTypes",
119
- "pikkuHTTP": "pikkuHTTP",
120
117
  "pikkuPermissions": "pikkuPermissions",
121
118
  "pikkuCommandQueueMap": "pikkuCommandQueueMap",
122
119
  "pikkuQueueTypes": "pikkuQueueTypes",
@@ -124,16 +121,19 @@
124
121
  "pikkuQueueMap": "pikkuQueueMap",
125
122
  "pikkuQueue": "pikkuQueue",
126
123
  "pikkuEventsScaffold": "pikkuEventsScaffold",
124
+ "pikkuSchedulerTypes": "pikkuSchedulerTypes",
125
+ "pikkuScheduler": "pikkuScheduler",
127
126
  "pikkuPublicRPC": "pikkuPublicRPC",
128
127
  "pikkuRemoteRPC": "pikkuRemoteRPC",
129
128
  "pikkuRPCInternalMap": "pikkuRPCInternalMap",
130
129
  "pikkuRPCExposedMap": "pikkuRPCExposedMap",
131
130
  "pikkuRPC": "pikkuRPC",
132
- "pikkuSchedulerTypes": "pikkuSchedulerTypes",
133
- "pikkuScheduler": "pikkuScheduler",
134
131
  "pikkuSecrets": "pikkuSecrets",
135
132
  "pikkuTriggerTypes": "pikkuTriggerTypes",
136
133
  "pikkuTrigger": "pikkuTrigger",
137
134
  "pikkuVariables": "pikkuVariables",
138
- "pikkuWorkflowRoutes": "pikkuWorkflowRoutes"
135
+ "pikkuWorkflowRoutes": "pikkuWorkflowRoutes",
136
+ "pikkuAIAgentTypes": "pikkuAIAgentTypes",
137
+ "pikkuAIAgent": "pikkuAIAgent",
138
+ "pikkuPublicAgent": "pikkuPublicAgent"
139
139
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /**
5
5
  * Scheduler-specific type definitions for tree-shaking optimization
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /**
5
5
  * Scheduler-specific type definitions for tree-shaking optimization
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import { addSchema } from '@pikku/core/schema';
5
5
  import * as PikkuSchemasOutput from './schemas/PikkuSchemasOutput.schema.json' with { type: 'json' };
@@ -184,10 +184,10 @@ import * as PikkuConsoleFunctionsOutput from './schemas/PikkuConsoleFunctionsOut
184
184
  addSchema('PikkuConsoleFunctionsOutput', PikkuConsoleFunctionsOutput);
185
185
  import * as PikkuNodesMetaOutput from './schemas/PikkuNodesMetaOutput.schema.json' with { type: 'json' };
186
186
  addSchema('PikkuNodesMetaOutput', PikkuNodesMetaOutput);
187
- import * as PikkuFunctionsOutput from './schemas/PikkuFunctionsOutput.schema.json' with { type: 'json' };
188
- addSchema('PikkuFunctionsOutput', PikkuFunctionsOutput);
189
187
  import * as PikkuGatewayOutput from './schemas/PikkuGatewayOutput.schema.json' with { type: 'json' };
190
188
  addSchema('PikkuGatewayOutput', PikkuGatewayOutput);
189
+ import * as PikkuFunctionsOutput from './schemas/PikkuFunctionsOutput.schema.json' with { type: 'json' };
190
+ addSchema('PikkuFunctionsOutput', PikkuFunctionsOutput);
191
191
  import * as PikkuCommandHTTPOutput from './schemas/PikkuCommandHTTPOutput.schema.json' with { type: 'json' };
192
192
  addSchema('PikkuCommandHTTPOutput', PikkuCommandHTTPOutput);
193
193
  import * as PikkuHTTPOutput from './schemas/PikkuHTTPOutput.schema.json' with { type: 'json' };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  export { wireSecret } from '@pikku/core/secret';
5
5
  export type { CoreSecret, SecretDefinitionMeta, SecretDefinitionsMeta } from '@pikku/core/secret';
@@ -1,4 +1,4 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  export { wireSecret } from '@pikku/core/secret';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import { TypedSecretService as CoreTypedSecretService } from '@pikku/core/services';
5
5
  import type { SecretService } from '@pikku/core/services';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import { TypedSecretService as CoreTypedSecretService } from '@pikku/core/services';
5
5
  const CREDENTIALS_META = {};
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /**
5
5
  * Trigger-specific type definitions for tree-shaking optimization
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /**
5
5
  * Trigger-specific type definitions for tree-shaking optimization
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  export { wireVariable } from '@pikku/core/variable';
5
5
  export type { CoreVariable, VariableDefinitionMeta, VariableDefinitionsMeta } from '@pikku/core/variable';
@@ -1,4 +1,4 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  export { wireVariable } from '@pikku/core/variable';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import { TypedVariablesService as CoreTypedVariablesService } from '@pikku/core/services';
5
5
  import type { VariablesService } from '@pikku/core/services';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import { TypedVariablesService as CoreTypedVariablesService } from '@pikku/core/services';
5
5
  const VARIABLES_META = {};
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import { WorkflowCancelledException } from '@pikku/core/workflow';
5
5
  import { template } from '@pikku/core/workflow';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import { WorkflowCancelledException } from '@pikku/core/workflow';
5
5
  import { template } from '@pikku/core/workflow';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import { pikkuState } from '@pikku/core/internal';
5
5
  import allWorkflowMeta from './meta/allWorkflow.gen.json' with { type: 'json' };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  import { addWorkflow } from '@pikku/core/workflow';
5
5
  import './pikku-workflow-wirings-meta.gen.js';
@@ -11,8 +11,8 @@ async function checkForUpdate() {
11
11
  })
12
12
  if (!res.ok) return
13
13
  const { version: latest } = await res.json()
14
- if (latest !== '0.12.23') {
15
- process.stderr.write(`\n Update available 0.12.23 → ${latest}\n brew upgrade pikku or npm install -g @pikku/cli\n\n`)
14
+ if (latest !== '0.12.24') {
15
+ process.stderr.write(`\n Update available 0.12.24 → ${latest}\n brew upgrade pikku or npm install -g @pikku/cli\n\n`)
16
16
  }
17
17
  } catch {}
18
18
  }
@@ -49,7 +49,22 @@ export const dev = pikkuSessionlessFunc({
49
49
  const previousRPCMeta = pikkuState(null, 'rpc', 'meta');
50
50
  const previousWorkflowsMeta = pikkuState(null, 'workflows', 'meta');
51
51
  const previousWorkflowRegistrations = pikkuState(null, 'workflows', 'registrations');
52
- pikkuState(null, 'package', 'singletonServices', commandSingletonServices);
52
+ // During hot-reload (when user services are already live), build a hybrid services
53
+ // object: user services (so in-flight requests keep kysely/content/etc.) overlaid
54
+ // with the CLI config (outDir, scaffold, schemaDirectory, etc. — required by
55
+ // allWorkflow for code generation paths). Replacing the entire services object with
56
+ // commandSingletonServices during hot-reload caused a race condition where concurrent
57
+ // auth requests saw CLI services (no kysely) and crashed.
58
+ const isHotReload = previousSingletonServices !== commandSingletonServices &&
59
+ !!previousSingletonServices;
60
+ const codegenServices = isHotReload
61
+ ? {
62
+ ...previousSingletonServices,
63
+ config: commandSingletonServices?.config ??
64
+ previousSingletonServices.config,
65
+ }
66
+ : commandSingletonServices;
67
+ pikkuState(null, 'package', 'singletonServices', codegenServices);
53
68
  pikkuState(null, 'function', 'functions', new Map([...previousFunctions.entries(), ...commandFunctions.entries()]));
54
69
  pikkuState(null, 'function', 'meta', {
55
70
  ...previousFunctionMeta,
@@ -98,7 +113,7 @@ export const dev = pikkuSessionlessFunc({
98
113
  const userCreateConfig = configModule[pikkuConfigFactory.variable];
99
114
  const userCreateSingletonServices = servicesModule[singletonServicesFactory.variable];
100
115
  const userConfig = await userCreateConfig();
101
- const resolvedLocalDb = resolveLocalDb(userConfig.dev?.db, config.rootDir, config.outDir, config.runtimeDir);
116
+ const resolvedLocalDb = resolveLocalDb(userConfig.dev?.db ?? true, config.rootDir, config.outDir, config.runtimeDir);
102
117
  const kysely = resolvedLocalDb
103
118
  ? await createKysely(resolvedLocalDb)
104
119
  : undefined;
@@ -90,6 +90,7 @@ export function reset(resolved, rootDir) {
90
90
  * Wires the coercion plugin when db/coercion.gen.ts exists.
91
91
  */
92
92
  export async function createKysely(resolved) {
93
+ mkdirSync(dirname(resolved.dbFile), { recursive: true });
93
94
  let coercionMap;
94
95
  try {
95
96
  const mod = await import(resolved.coercionFile);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.23
2
+ * This file was generated by @pikku/cli@0.12.24
3
3
  */
4
4
  /**
5
5
  * Auto-generated remote internal RPC queue worker and HTTP endpoint
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pikku/cli",
3
- "version": "0.12.23",
3
+ "version": "0.12.24",
4
4
  "author": "yasser.fadl@gmail.com",
5
5
  "license": "BUSL-1.1",
6
6
  "imports": {
@@ -26,7 +26,7 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "@openapi-contrib/json-schema-to-openapi-schema": "^4.3.1",
29
- "@pikku/core": "^0.12.22",
29
+ "@pikku/core": "^0.12.23",
30
30
  "@pikku/deploy-cloudflare": "^0.12.3",
31
31
  "@pikku/fetch": "^0.12.2",
32
32
  "@pikku/inspector": "^0.12.12",