@trayai/helix-sdk 1.6.0 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-D44IVAUR.js +7 -0
- package/dist/{define-agent-CICJokmS.d.ts → define-agent-C0qXub7P.d.ts} +24 -13
- package/dist/index.d.ts +4 -4
- package/dist/index.js +1 -1
- package/dist/internal/index.d.ts +14 -14
- package/dist/internal/index.js +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/{types-Ci9SeHOE.d.ts → types-CRUtefiq.d.ts} +59 -14
- package/package.json +1 -1
- package/dist/chunk-7R345MR6.js +0 -7
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import{a as mn,b as ze}from"./chunk-WUCX7RZO.js";import{A as yn,B as pe,C as z,D as ne,E as hn,G as wn,H as Sn,I as bn,J as vn,a as U,b as le,d as A,e as de,f as $,h as un,j,k as pn,o as fn,r as d,t as Ie,u as Ge,v as te,w as Re,x as Je,y as ue,z as gn}from"./chunk-3T2WZMJJ.js";var rc="tray-config-bridge",oc="tray-dev-token-bridge",We=null;function sc(e){We=e}function x(){if(!We)throw new Error("Active tray config not seeded. Worker boot must call setActiveConfig() before handlers run.");return We}function ic(){We=null}import{AsyncLocalStorage as Bn}from"async_hooks";import{trace as cs,SpanKind as ls,SpanStatusCode as et}from"@opentelemetry/api";import{ExportResultCode as ds,W3CTraceContextPropagator as us}from"@opentelemetry/core";import{NodeTracerProvider as ps,SimpleSpanProcessor as fs,BatchSpanProcessor as ms}from"@opentelemetry/sdk-trace-node";import{OTLPTraceExporter as Jo}from"@opentelemetry/exporter-trace-otlp-proto";import{OTLPLogExporter as Wo}from"@opentelemetry/exporter-logs-otlp-proto";function Ct(e){return j(e).hosts.ingest}function Xo(){return $()??""}function xn(){return{[U]:Xo()}}function An(){let e=Ct(x().region);return new Jo({url:`${e}/v1/traces`,headers:()=>Promise.resolve(xn())})}function En(){let e=Ct(x().region);return new Wo({url:`${e}/v1/logs`,headers:()=>Promise.resolve(xn())})}import{logs as Cn,SeverityNumber as Xe}from"@opentelemetry/api-logs";import{LoggerProvider as Zo,BatchLogRecordProcessor as es}from"@opentelemetry/sdk-logs";function Ce(e){try{return JSON.stringify(e)}catch(t){return JSON.stringify({_serialization_error:t instanceof Error?t.message:String(t)})}}function Yo(e){return new TextEncoder().encode(e).length}var In="\u2026[truncated]",Qo=Yo(In),Te=4096;function re(e,t=Te){let n=new TextEncoder().encode(e);if(n.length<=t)return e;let r=n.subarray(0,t-Qo);return new TextDecoder("utf-8").decode(r).replace(/�$/,"")+In}function k(e,t=Te){return re(Ce(e),t)}var ts="@trayai/helix-sdk",ke,Rn={debug:{number:Xe.DEBUG,text:"DEBUG"},info:{number:Xe.INFO,text:"INFO"},warn:{number:Xe.WARN,text:"WARN"},error:{number:Xe.ERROR,text:"ERROR"}};function ns(){return A().mode==="lambda"?[new es({exporter:En()})]:[]}function Tn(){if(ke!==void 0)return;let e=ns();e.length!==0&&(ke=new Zo({processors:e}),Cn.setGlobalLoggerProvider(ke))}function rs(e,t,n){let r=Rn[e]??Rn.info;return{severityNumber:r.number,severityText:r.text,body:t,...n?{attributes:{"tray.log.meta":k(n)}}:{}}}function kn(e,t,n){Cn.getLogger(ts).emit(rs(e,t,n))}async function Pn(e=2e3){if(ke===void 0)return;let t;try{await Promise.race([ke.forceFlush(),new Promise(n=>{t=setTimeout(n,e)})])}catch(n){process.stderr.write(`[helix-sdk] otel log flush failed: ${n instanceof Error?n.message:String(n)}
|
|
2
|
+
`)}finally{t!==void 0&&clearTimeout(t)}}function Tt(){let e=process.env.TRAY_PRETTY_LOGS;return e==="1"||e==="true"}function os(){if(process.env.NO_COLOR!==void 0)return!1;let e=process.env.FORCE_COLOR;return e!==void 0&&e!=="0"&&e!=="false"?!0:!!process.stdout.isTTY&&process.env.TERM!=="dumb"}function D(e,t){return os()?`\x1B[${e}m${t}\x1B[0m`:t}var ss=5,is={FN:"1;35",INFO:"34",AUTH:"35",API:"36",AGENT:"1;36",TOOL:"36",WARN:"33",ERROR:"31",DEBUG:"90"},Ye="32",Qe="31",as="33",oe="2",Ze="1";function se(e){return D(is[e]??"0",e.padEnd(ss))}function On(e,t){return`${se("FN")} ${D(Ze,`${e} ${t}`.trim())}`}function _n(e,t,n,r){let o=e.toUpperCase(),i=`${r?`${D(oe,r)} `:""}${se(o)} ${t}`;return n&&Object.keys(n).length>0&&(i+=` ${D(oe,Ce(n))}`),i}function Dn(e){return new Date(e[0]*1e3).toTimeString().slice(0,8)}function Mn(e){return`${se("AUTH")} ${e}`}function Fn(e,t,n,r,o){let s=n===void 0?"ERR":String(n),i=D(o==="error"?Qe:Ye,s);return`${se("API")} ${e} ${t} \u2192 ${i} ${D(oe,`${r}ms`)}`}function Ln(e){return`${se("AGENT")} ${D(Ze,e)}`}function Nn(e,t,n,r){let o=t==="error"?Qe:t==="awaiting-approval"?as:Ye,s=n!==void 0?`${D(oe,`${n} step${n===1?"":"s"}`)} `:"";return`${se("AGENT")} ${D(Ze,e)} \u2192 ${D(o,t)} ${s}${D(oe,`${r}ms`)}`}function Un(e,t,n){let r=t==="error"?D(Qe,"error"):D(Ye,"ok");return`${se("TOOL")} ${e} \u2192 ${r} ${D(oe,`${n}ms`)}`}function $n(e,t,n){let r=t?Qe:Ye,o=D(r,"\u25CF"),s=D(r,t?"error":"success");return`${o} ${D(Ze,e)} ${s} ${D(oe,`${n}ms`)}`}function H(e){try{process.stdout.write(e+`
|
|
3
|
+
`)}catch{}}var Kn=new Bn,gs=new Bn;function O(e){let t=gs.getStore();t&&(t[e]=!0)}var ys=/^[0-9a-f]{32}$/;function hs(e){let t=e.replace(/-/g,"").toLowerCase();return ys.test(t)?t:null}var ws={0:"STATUS_CODE_UNSET",1:"STATUS_CODE_OK",2:"STATUS_CODE_ERROR"},fe=new Map;function Hn(e,t,n){let r=fe.get(e);r?r[t]=n:fe.set(e,{[t]:n})}function q(e,t,n){e.setAttribute(t,k(n))}var Pe;function jn(e){return`${e[0]}${String(e[1]).padStart(9,"0")}`}function kt(e){return Math.round(e[0]*1e3+e[1]/1e6)}function qn(e){try{process.stdout.write(Ce(e)+`
|
|
4
|
+
`)}catch{}}var Pt=class{export(t,n){for(let r of t){let o=r.spanContext().spanId,s=fe.get(o),i={...r.attributes};if(s!==void 0){for(let[l,u]of Object.entries(s))typeof u=="string"?i[l]=re(u):typeof u=="object"&&u!==null?i[l]=k(u):i[l]=u;fe.delete(o)}let a=Kn.getStore(),c=a?hs(a):null;qn({_otel:"span",traceId:c??r.spanContext().traceId,spanId:o,parentSpanId:r.parentSpanContext?.spanId??"",name:r.name,kind:r.kind,startTimeUnixNano:jn(r.startTime),endTimeUnixNano:jn(r.endTime),attributes:i,status:{code:ws[r.status.code]??"STATUS_CODE_UNSET",...r.status.message?{message:re(r.status.message)}:{}}})}n({code:ds.SUCCESS})}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}},Ot=class{onStart(t,n){}onEnd(t){fe.delete(t.spanContext().spanId)}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}},_t=class{onStart(t){let n=t;(n.name==="function"||n.name==="App")&&H(`
|
|
5
|
+
`+On(String(n.attributes.method??""),String(n.attributes.route??""))),(n.name==="agent.generate"||n.name==="agent.stream")&&H(Ln(String(n.attributes.agent??"")))}onEnd(t){let n=t.attributes;switch(t.name){case"log":{let r=t.spanContext().spanId,o=fe.get(r)?.properties;H(_n(String(n.level??"info"),String(n.message??""),o,Dn(t.startTime)));break}case"auth":H(Mn(String(n.alias??"")));break;case"externalApi":{let r=typeof n.statusCode=="number"?n.statusCode:void 0;H(Fn(String(n.method??""),String(n.host??""),r,kt(t.duration),n.status==="error"?"error":"success"));break}case"agent.tool":{H(Un(String(n.tool??""),n.status==="error"?"error":"success",kt(t.duration)));break}case"agent.generate":case"agent.stream":{let r=typeof n.status=="string"?n.status:t.status.code===et.ERROR?"error":"completed";H(Nn(String(n.agent??""),r,typeof n.steps=="number"?n.steps:void 0,kt(t.duration)));break}}}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}},Dt=class{constructor(t){this.inner=t}inner;onStart(t,n){this.inner.onStart(t,n)}onEnd(t){t.name!=="log"&&this.inner.onEnd(t)}forceFlush(){return this.inner.forceFlush()}shutdown(){return this.inner.shutdown()}};function Ss(){let t=[Tt()?new _t:new fs(new Pt)];return A().mode==="lambda"&&t.push(new Dt(new ms(An()))),t.push(new Ot),t}function bs(){Pe===void 0&&(Pe=new ps({spanProcessors:Ss()}),Pe.register({propagator:new us}),Tn())}async function vs(e=2e3){let t=[Pn(e)];Pe!==void 0&&t.push((async()=>{let n;try{await Promise.race([Pe.forceFlush(),new Promise(r=>{n=setTimeout(r,e)})])}catch(r){process.stderr.write(`[helix-sdk] otel flush failed: ${r instanceof Error?r.message:String(r)}
|
|
6
|
+
`)}finally{n!==void 0&&clearTimeout(n)}})()),await Promise.all(t)}var F=cs.getTracer("@trayai/helix-sdk");function xs({executionId:e,deploymentId:t,triggerType:n="http",routeOrJob:r,startedAt:o,startMs:s,errored:i,errorMessage:a,userId:c,flags:l}){let u=new Date().toISOString(),p=Date.now()-s;if(Tt()){H(`
|
|
7
|
+
`+$n(r,i,p));return}qn({_otel:"summary",executionId:e,deploymentId:t,triggerType:n,routeOrJob:r,status:i?"error":"success",startedAt:o,finishedAt:u,durationMs:p,userId:c,hasError:i||l.hasError,hasAuth:l.hasAuth,hasAi:l.hasAi,hasExternal:l.hasExternal,hasDb:l.hasDb,errorSummary:i&&a!==null?re(a):null})}async function Mc(e,t){let n=e.startMs??Date.now();bs();let r=!1,o=null;try{return await Kn.run(e.executionId,()=>F.startActiveSpan("App",{kind:ls.SERVER,attributes:{method:e.method,route:e.route,...e.deploymentId?{deploymentId:e.deploymentId}:{}}},async s=>{try{let i=await t(),a=i?.httpResponse?.status??404;return r=a>=400,s.setAttribute("http.response.status_code",a),s.setAttribute("helix.status",r?"error":"success"),s.setStatus({code:r?et.ERROR:et.OK}),i}catch(i){throw r=!0,o=i instanceof Error?i.message:String(i),s.setAttribute("http.response.status_code",500),s.setAttribute("helix.status","error"),s.setStatus({code:et.ERROR,message:o}),i}finally{s.end()}}))}finally{xs({executionId:e.executionId,deploymentId:e.deploymentId,routeOrJob:`${e.method} ${e.route}`,startedAt:e.startedAt,startMs:n,errored:r,errorMessage:o,userId:e.userId,flags:{hasDb:!1,hasExternal:!1,hasAuth:!1,hasAi:!1,hasError:!1}}),await vs()}}var Gn=1024,G=100*1024*1024,Vn=250,As=3600,Es=As*1e3,zn=new TextEncoder,Is=/(^|\/)\.\.(\/|$)/,Rs=/[?#]/;function Cs(e){for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<=31||n===127)return!0}return!1}function ie(e,t=Gn){if(e.length===0)throw d.filesPathInvalid("Path must be a non-empty string");tt(e,t)}function Mt(e){return e.endsWith("/")?e.slice(0,-1):e}function tt(e,t=Gn){if(e.length===0)return;if(Is.test(e))throw d.filesPathInvalid("Path contains path traversal segment");if(Rs.test(e)||Cs(e))throw d.filesPathInvalid("Path contains illegal characters");let n=e.split("/");if(e.startsWith("/")||e.endsWith("/")||n.some(o=>o===""))throw d.filesPathInvalid("Path must not contain empty path segments");for(let o of n){let s=zn.encode(o).length;if(s>Vn)throw d.filesPathInvalid(`Path segment exceeds ${Vn} UTF-8 bytes (got ${s})`)}let r=zn.encode(e).length;if(r<1||r>t)throw d.filesPathInvalid(`Path must be between 1 and ${t} UTF-8 bytes (got ${r})`)}function Jn(e){if(e>G)throw d.filesValueTooLarge(`File exceeds maximum size of ${G} bytes (got ${e})`,G)}function me(e){let t=e!==void 0?e*1e3:Es;return new Date(Date.now()+t)}import{join as _e}from"path";var Ts="files",ks="files-meta",Ps=1023,Os=1,_s=5;function Wn(e){let t=Math.max(Buffer.byteLength(nt(e),"utf8"),Buffer.byteLength(Oe(e),"utf8"));return Math.max(0,Ps-t-Os-_s)}function nt(e){return _e(e,".helix",Ts)}function Oe(e){return _e(e,".helix",ks)}function De(e,t){return _e(nt(e),...t.split("/"))}function rt(e,t){return _e(Oe(e),...t.split("/"))+".json"}function ot(e,t){return t.length===0?nt(e):De(e,t)}function Xn(e,t){return t.length===0?Oe(e):_e(Oe(e),...t.split("/"))}import{z as Ds}from"zod";var Kc=["us1","eu1","ap1","ap2"],Ft=Ds.string().refine(e=>un(e),e=>({message:`Invalid enum value. Expected ${pn().map(t=>`'${t}'`).join(" | ")}, received '${e}'`}));import{resolve as J}from"path";import{existsSync as st,realpathSync as Yn}from"fs";import{loadConfig as Ms}from"c12";import{z as b}from"zod";var Zn=b.string().uuid("projectId must be a valid UUID"),er=b.string().min(1,"workspaceId must be a non-empty string"),tr=b.discriminatedUnion("store",[b.object({store:b.literal("managed")}),b.object({store:b.literal("dynamodb"),auth:b.string().min(1,"agentSessions.auth is required"),table:b.string().min(1,"agentSessions.table is required"),region:b.string().min(1,"agentSessions.region is required")})]),Me=["openai","anthropic","google","mistral","cohere","openai-compatible"],Fs=["openai","anthropic","google","mistral","cohere"],nr=b.union([b.enum(Fs),b.object({service:b.enum(Me),baseUrl:b.string().url().optional()}).refine(e=>e.service!=="openai-compatible"||e.baseUrl!==void 0,{message:'aiProviders: baseUrl is required when service is "openai-compatible"'}).refine(e=>e.baseUrl===void 0?!0:new URL(e.baseUrl).protocol==="https:",{message:"aiProviders: baseUrl must use https \u2014 ctx.ai requests route through the credentials broker's proxy, which rejects non-https destinations on every call (a plain-http endpoint, e.g. a local Ollama/vLLM instance over http, is not supported)"})]),Ls=b.object({name:b.string().min(1,"name is required"),projectId:Zn.optional(),workspaceId:er.optional(),region:Ft.optional(),env:b.literal("production").optional(),authentications:b.record(b.string()).optional().default({}),config:b.record(b.unknown()).optional().default({}),agentSessions:tr.optional(),aiProviders:b.record(nr).optional()}).transform(({env:e,region:t,...n})=>({...n,region:t??"us1"})),Qn=b.object({name:b.string().min(1,"name is required"),workspaceId:er.optional(),region:Ft,authentications:b.record(b.string()),config:b.record(b.unknown()),agentSessions:tr.optional(),aiProviders:b.record(nr).optional()}),Yc=b.discriminatedUnion("kind",[Qn.extend({kind:b.literal("provisioned"),projectId:Zn}),Qn.extend({kind:b.literal("unprovisioned")})]),rr=["helix","tray"],or=["ts","mts","cts","js","mjs","cjs"],sr="HELIX_CONFIG";function Lt(e){let t=e?.trim();return t||process.env[sr]?.trim()||void 0}function Ns(e,t){let n=Lt(t?.configFile);if(n!==void 0){let r=J(e,n);return st(r)?r:void 0}for(let r of rr)for(let o of or){let s=J(e,`${r}.config.${o}`);if(st(s))return s}}function Us(e){for(let t of rr)if(or.some(n=>st(J(e,`${t}.config.${n}`))))return t;return"helix"}function $s(e,t){return J(e,t).replace(/\.(?:m|c)?[jt]s$/,"")}function js(e,t){let n=Lt(t?.configFile);return{name:Us(e),cwd:e,...n!==void 0?{configFile:$s(e,n)}:{},rcFile:!1,globalRc:!1,packageJson:!1,dotenv:!1,extend:!1}}function Bs(e,t){if(e!==null&&typeof e=="object"&&"extends"in e)throw d.configLoadFailed(`helix.config.ts at ${t}: 'extends' is not supported \u2014 remove the field`);let n=Ls.safeParse(e);if(!n.success){let l=n.error.issues.map(u=>u.message).join("; ");throw d.configLoadFailed(`Invalid helix.config.ts at ${t}: ${l}`)}let{projectId:r,workspaceId:o,...s}=n.data,i=o!==void 0?{workspaceId:o}:{},a=fn(),c=a!==void 0?{...s,region:a}:s;return r!==void 0?{kind:"provisioned",projectId:r,...c,...i}:{kind:"unprovisioned",...c,...i}}async function Qc(e,t){let n=e??process.cwd(),r=Lt(t?.configFile),o=r!==void 0?J(n,r):void 0;if(o!==void 0&&!st(o)){let a=t?.configFile?.trim()?"":` (from ${sr})`;throw d.configLoadFailed(`Config file not found: ${o}${a}`)}let s;try{s=await Ms(js(n,t))}catch(a){throw d.configLoadFailed(`Failed to load helix.config.ts: ${a instanceof Error?a.message:String(a)}`)}let i=s._configFile??Ns(n,t);if(!i)throw d.configLoadFailed(`helix.config.ts not found at ${J(n,"helix.config.ts")}`);if(o!==void 0&&s._configFile!==void 0){let a=Yn(o);if(Yn(J(s._configFile))!==a)throw d.configLoadFailed(`Config file conflict: requested ${o} but ${J(s._configFile)} takes extension-resolution precedence \u2014 remove or rename the sibling file`)}return Bs(s.config,i)}var Ks="WORKSPACE_ID_REQUIRED";function Zc(e){if(e.workspaceId===void 0)throw Object.assign(new Error("No workspaceId found in helix.config.ts. Discover & choose one \u2014 self-serve fix: run `helix workspace select`; agent-driven fix: call the `tray_list_workspaces` MCP tool. Already know the id? Run `helix workspace set <id>` or call the `tray_set_workspace_id` MCP tool. deploy cannot proceed without a workspace."),{code:Ks});return e.workspaceId}var ir="helix-tool",Hs=/^[a-z][a-z0-9_]{0,63}$/;function rl(e){if(typeof e.name!="string"||!Hs.test(e.name))throw new Error(`defineTool: invalid tool name ${JSON.stringify(e.name)} \u2014 use snake_case (e.g. "lookup_customer")`);if(typeof e.description!="string"||e.description.trim().length===0)throw new Error(`defineTool("${e.name}"): description is required`);if(!e.input||typeof e.input.safeParse!="function")throw new Error(`defineTool("${e.name}"): input must be a Zod schema`);if(typeof e.handler!="function")throw new Error(`defineTool("${e.name}"): handler must be a function`);let t=async(r,o)=>{let s=e.input.safeParse(r);if(!s.success)throw d.inputValidationFailed(s.error.issues.map(i=>i.path.join(".")||"(root)"));return e.handler({...o,input:s.data})},n=(async r=>t(r,ze()));return Object.defineProperties(n,{kind:{value:ir,enumerable:!0},name:{value:e.name,enumerable:!0},description:{value:e.description,enumerable:!0},inputSchema:{value:e.input,enumerable:!0},needsApproval:{value:e.needsApproval,enumerable:!0},execute:{value:t,enumerable:!0}}),n}function ar(e){return typeof e=="function"&&e.kind===ir&&typeof e.name=="string"}var I=class extends Error{constructor(t){super(t),this.name="AgentCallerError"}};import{readFileSync as qs}from"fs";import{isAbsolute as Vs,resolve as zs}from"path";var B=new Map;function cr(e){B.set(e.name,{definition:e});for(let t of B.values())t.referencesValidated=void 0}function ll(e,t){let n=B.get(e);n&&(n.baseDir=t,n.resolvedInstructions=void 0)}function dl(e,t){let n=B.get(e);n&&(n.resolvedInstructions=t)}function Fe(e){let t=B.get(e);if(!t){let n=[...B.keys()].sort();throw new I(`Unknown agent "${e}". Registered agents: ${n.join(", ")||"(none \u2014 are the functions/_agents/ modules imported?)"}`)}return t.definition}function ul(){return[...B.values()].map(e=>e.definition)}function lr(e){let t=B.get(e);if(!t)throw new I(`Unknown agent "${e}"`);if(t.resolvedInstructions!==void 0)return t.resolvedInstructions;let{definition:n}=t;if(n.instructions!==void 0)return t.resolvedInstructions=n.instructions,n.instructions;let r=n.instructionsFile,o=Vs(r)?r:t.baseDir!==void 0?zs(t.baseDir,r):void 0;if(o===void 0)throw new Error(`Agent "${e}" uses instructionsFile "${r}" but its base directory is unknown \u2014 load the agent through helix dev (which records it), or use inline \`instructions\`.`);let s;try{s=qs(o,"utf-8")}catch(i){throw new Error(`Agent "${e}": failed to read instructionsFile ${o}: ${i instanceof Error?i.message:String(i)}`)}if(s.trim().length===0)throw new Error(`Agent "${e}": instructionsFile ${o} is empty`);return t.resolvedInstructions=s,s}function dr(e){let t=B.get(e);if(t?.referencesValidated)return;let n=Fe(e);for(let r of n.agents??[]){let s=(Fe(r).tools??[]).filter(i=>i.needsApproval);if(s.length>0)throw new Error(`Agent "${e}" delegates to "${r}", which has needsApproval tools (${s.map(i=>i.name).join(", ")}) \u2014 approval cannot pause a parent's loop through delegation in v1. Put approval-gated tools on the orchestrating agent.`)}t&&(t.referencesValidated=!0)}function pl(){B.clear()}import{z as P}from"zod";var ur="helix-agent",Gs=/^[a-z][a-z0-9-]{0,63}$/,Js=P.object({model:P.string().min(1),auth:P.string().min(1)}),Ws=P.object({name:P.string().regex(Gs,'agent name must be kebab-case (e.g. "support-agent"); name is required in v1'),description:P.string().min(1,"description is required"),model:P.string().min(1,"model is required"),auth:P.string().min(1,"auth (authentication alias) is required"),fallbacks:P.array(Js).optional(),instructions:P.string().min(1).optional(),instructionsFile:P.string().min(1).optional(),tools:P.array(P.custom(ar,"tools entries must be defineTool exports")).optional(),agents:P.array(P.string().min(1)).optional(),memory:P.object({maxSessionMessages:P.number().int().positive().optional(),ttl:P.number().int().positive().optional(),scope:P.enum(["user","project"]).optional()}).optional(),limits:P.object({maxIterations:P.number().int().positive().optional(),maxToolCalls:P.number().int().positive().optional()}).optional()}).refine(e=>e.instructions===void 0!=(e.instructionsFile===void 0),{message:"exactly one of instructions / instructionsFile must be set"}),pr=200,fr=25,mr=50,Nt=3;function hl(e){let t=Ws.safeParse(e);if(!t.success){let o=typeof e?.name=="string"?e.name:"(unnamed)",s=t.error.issues.map(i=>`${i.path.join(".")||"(root)"}: ${i.message}`).join("; ");throw new Error(`defineAgent(${o}): invalid definition \u2014 ${s}`)}let n=new Set;for(let o of t.data.tools??[]){if(n.has(o.name))throw new Error(`defineAgent(${t.data.name}): duplicate tool "${o.name}"`);n.add(o.name)}let r={kind:ur,...t.data};return cr(r),r}function wl(e){return typeof e=="object"&&e!==null&&e.kind===ur&&typeof e.name=="string"}var Xs=50,gr=500;function Le(e){let t=e?.limit??Xs;if(!Number.isInteger(t)||t<1||t>gr)throw new I(`session.page(): limit must be an integer from 1 to ${gr}.`);let n=e?.order??"asc";if(n!=="asc"&&n!=="desc")throw new I('session.page(): order must be "asc" or "desc".');return{limit:t,order:n,cursor:e?.cursor}}function $t(){return new I("session.page(): invalid cursor \u2014 pass the `nextCursor` of the previous page, with the same `order`.")}var W=new Map;function jt(e,t,n){let r=encodeURIComponent;return n!==void 0?`agent:${r(e)}:user:${r(n)}:session:${r(t)}`:`agent:${r(e)}:session:${r(t)}`}function Ys(e,t,n){let r=Math.max(0,e.length-t);for(let s=r;s<e.length;s++)if(e[s]?.role==="user")return e.slice(s);for(let s=r-1;s>=0;s--)if(e[s]?.role==="user")return e.slice(s);if(!n)return;let o=r;for(;o<e.length&&e[o]?.role==="tool";)o++;return e.slice(o)}var Qs=32;async function Bt(e,t){let n=t+Qs;for(;;){let r=await e.messages({limit:n}),o=Ys(r,t,r.length<n);if(o!==void 0)return o;n*=2}}function Kt(e,t){return e.ttlSeconds!==void 0&&t-e.lastActiveAt>e.ttlSeconds*1e3}var Zs=6e4,Ut=0;function ei(e){if(!(e-Ut<Zs)){Ut=e;for(let[t,n]of W)if(Kt(n,e)){if(n.pendingApprovals.length>0){n.messages=[];continue}W.delete(t)}}}var X=class extends Error{constructor(t){super(`Agent session "${t}" has expired (session-expired)`),this.name="SessionExpiredError"}};function yr(e,t,n,r){let o=Date.now();ei(o);let s=n?.ttl,i=t??`ses_${crypto.randomUUID().replaceAll("-","")}`,a=jt(e,i,r),c=W.get(a);if(c&&(c.ttlSeconds=s),c&&Kt(c,o)){if(W.delete(a),c.pendingApprovals.length>0)throw new X(i);c=void 0}c||(c={id:i,agentName:e,...r!==void 0?{ownerUserId:r}:{},messages:[],createdAt:o,lastActiveAt:o,pendingApprovals:[],ttlSeconds:s},W.set(a,c));let l=c,u=()=>{l.lastActiveAt=Date.now()};return{id:i,async messages(p){u();let f=l.messages;return p?.limit!==void 0?f.slice(-p.limit):[...f]},async page(p){let{limit:f,order:m,cursor:S}=Le(p);u();let E=S===void 0?0:Number(S);if(!Number.isInteger(E)||E<0)throw $t();let g=m==="desc"?[...l.messages].reverse():l.messages,h=g.slice(E,E+f),y=E+h.length;return{messages:h,nextCursor:y<g.length?String(y):null}},async append(...p){u(),l.messages.push(...p)},async clear(){W.delete(a)},async truncated(){return!1},async pendingApprovals(){return u(),[...l.pendingApprovals]},async addPendingApprovals(p){u(),l.pendingApprovals.push(...p)},async resolveApproval(p){u();let f=l.pendingApprovals.findIndex(m=>m.approvalId===p);return f===-1?"already-resolved":(l.pendingApprovals.splice(f,1),"resolved")}}}function hr(e,t,n={}){let r=Date.now(),o=n.first??20,s=n.cursor!==void 0&&Number.parseInt(n.cursor,10)||0,i=[...W.values()].filter(c=>c.agentName===e&&c.ownerUserId===t&&!Kt(c,r)).sort((c,l)=>l.lastActiveAt-c.lastActiveAt);return{sessions:i.slice(s,s+o).map(c=>({id:c.id,createdAt:c.createdAt,lastActivityAt:c.lastActiveAt,messageCount:c.messages.length,pendingApprovals:c.pendingApprovals.length})),nextCursor:s+o<i.length?String(s+o):null}}function vl(){W.clear(),Ut=0}import{AsyncLocalStorage as Ei}from"async_hooks";import{z as zr}from"zod";import{generateText as Ii,streamText as Ri,tool as Gr,stepCountIs as Ci}from"ai";import{SpanKind as zt,SpanStatusCode as Se,context as Jr,trace as Ti}from"@opentelemetry/api";import{embed as xr,embedMany as Ar,generateImage as Er,generateObject as Ir,generateSpeech as Rr,generateText as Cr,streamObject as Tr,streamText as kr,transcribe as Pr}from"ai";import{SpanKind as ui,SpanStatusCode as vr}from"@opentelemetry/api";import{createOpenAI as oi}from"@ai-sdk/openai";import{createAnthropic as si}from"@ai-sdk/anthropic";import{createGoogle as ii}from"@ai-sdk/google";import{createMistral as ai}from"@ai-sdk/mistral";import{createCohere as ci}from"@ai-sdk/cohere";import{createOpenAICompatible as li}from"@ai-sdk/openai-compatible";var ti=new Set(["x-api-key","x-goog-api-key"]);function ni(e){return gn(e)||ti.has(e.toLowerCase())}function ri(e){return typeof e=="string"?e:e instanceof URL?e.toString():e.url}function wr(e){return async(t,n)=>{let r=ri(t),o=new URL(r);if(o.protocol!=="https:")throw d.unsupportedScheme(o.protocol.replace(/:$/,""));let s=A(),{region:i}=x(),a=new Headers(n?.headers??(t instanceof Request?t.headers:void 0)),c=new Headers;for(let[g,h]of a.entries())ni(g)||c.append(g,h);c.set(Ie,r),c.set(Ge,e),s.executionId&&c.set(Re,s.executionId);let{headers:l,deploymentId:u}=z(s);for(let[g,h]of Object.entries(l))c.set(g,h);u&&c.set(te,u);let p=pe(i,s.mode==="lambda"?"runtime":"dev"),f=n?.body??(t instanceof Request?t.clone().body:void 0),m={method:n?.method??(t instanceof Request?t.method:"GET"),headers:c,redirect:"manual",signal:n?.signal??void 0};f!=null&&(m.body=f,typeof ReadableStream<"u"&&f instanceof ReadableStream&&(m.duplex="half"));let S;try{S=await fetch(p,m)}catch(g){if(g instanceof Error&&g.name==="AbortError")throw g;let h=g instanceof Error?g.message??String(g):String(g);throw d.brokerError(0,h)}let E=S.headers.get(Je);if(E!==null){let g=await S.text(),h=g||E;try{let y=yn.safeParse(JSON.parse(g));y.success&&(h=y.data.error.message)}catch{}throw E===ue&&(h="credential broker does not support the raw proxy endpoint required by ctx.ai \u2014 deploy a newer broker or pin an older SDK"),d.brokerError(S.status,h,g||void 0,E)}return S}}var ge="helix-broker";function Sr(e){let{alias:t,service:n,baseUrl:r,authenticationId:o}=e,s=wr(o);switch(n){case"openai":return oi({apiKey:ge,fetch:s});case"anthropic":return si({apiKey:ge,fetch:s});case"google":return ii({apiKey:ge,fetch:s});case"mistral":return ai({apiKey:ge,fetch:s});case"cohere":return ci({apiKey:ge,fetch:s});case"openai-compatible":{if(!r)throw d.aiUnsupportedService(t,n,[...Me]);return li({name:t,baseURL:r,apiKey:ge,fetch:s})}}}var br={"gpt-4o-mini":{input:.15,output:.6},"gpt-4o":{input:2.5,output:10},"gpt-4.1-mini":{input:.4,output:1.6},"gpt-4.1-nano":{input:.1,output:.4},"gpt-4.1":{input:2,output:8},"text-embedding-3-small":{input:.02,output:0},"text-embedding-3-large":{input:.13,output:0},"gpt-image-1":{input:5,output:40},"claude-opus-4":{input:15,output:75},"claude-sonnet-4":{input:3,output:15},"claude-haiku-4":{input:1,output:5},"claude-3-5-haiku":{input:.8,output:4},"gemini-2.5-pro":{input:1.25,output:10},"gemini-2.5-flash":{input:.3,output:2.5},"text-embedding-004":{input:0,output:0},"mistral-large":{input:2,output:6},"mistral-small":{input:.1,output:.3},"command-r-plus":{input:2.5,output:10},"command-r":{input:.15,output:.6}},di=Object.keys(br).sort((e,t)=>t.length-e.length);function it(e,t){let n=di.find(s=>e.startsWith(s));if(!n||!t)return{amount:0,currency:"USD"};let r=br[n],o=((t.inputTokens??0)*r.input+(t.outputTokens??0)*r.output)/1e6;return{amount:Number(o.toFixed(8)),currency:"USD"}}function L(e,t,n){return F.startActiveSpan("ai",{kind:ui.CLIENT},async r=>{r.setAttributes({operation:e.operation,model:e.model,...e.alias!==void 0?{alias:e.alias}:{}}),O("hasAi");try{let o=await t(),s=n?.(o);return s&&r.setAttributes({...s.inputTokens!==void 0?{inputTokens:s.inputTokens}:{},...s.outputTokens!==void 0?{outputTokens:s.outputTokens}:{}}),r.setAttribute("status","success"),r.setStatus({code:vr.OK}),o}catch(o){let s=o instanceof Error?o.message:String(o);throw r.setAttribute("status","error"),r.setStatus({code:vr.ERROR,message:s}),o}finally{r.end()}})}function pi(){return`aireq_${crypto.randomUUID().replaceAll("-","")}`}function he(e,t){return{cost:it(e,t),requestId:pi()}}function ae(e){return typeof e=="object"&&e!==null&&"modelId"in e?String(e.modelId):String(e)}var Or=new WeakSet;function ye(e){return Or.add(e),e}function _r(e){return ye(e)}function V(e){if(typeof e!="object"||e===null)throw d.aiModelInstanceRequired(typeof e=="string"?e:String(e));if(!Or.has(e))throw d.aiForeignModelRejected()}function at(e){return e.totalUsage??e.usage}function ct(e){return e.usage?.tokens!==void 0?{inputTokens:e.usage.tokens}:void 0}function lt(e){return e.usage}function Ht(e){let t=x(),n=t.authentications??{};if(!n[e])throw d.unknownAlias(e,Object.keys(n));let r=n[e],o=(t.aiProviders??{})[e];if(o===void 0)throw d.aiProviderNotConfigured(e,[...Me]);let{service:s,baseUrl:i}=typeof o=="string"?{service:o,baseUrl:void 0}:o,a=Sr({alias:e,service:s,baseUrl:i,authenticationId:r}),c=g=>ye(a.languageModel(g)),l=g=>ye(a.embeddingModel(g)),u=g=>ye(a.imageModel(g)),p=g=>{if(!a.transcriptionModel)throw new Error(`AI provider "${s}" (alias "${e}") has no transcription models`);return ye(a.transcriptionModel(g))},f=g=>{if(!a.speechModel)throw new Error(`AI provider "${s}" (alias "${e}") has no speech models`);return ye(a.speechModel(g))},m=(g=>c(g)),S=(g,h)=>{let y=g.model;if(typeof y!="string")throw d.aiModelIdRequired(e,h);return y};return Object.assign(m,{specificationVersion:"v4",languageModel:c,embeddingModel:l,textEmbeddingModel:l,imageModel:u,transcriptionModel:p,speechModel:f,async generateText(g){let h=S(g,"generateText"),y=await L({operation:"generateText",model:h,alias:e},()=>Cr({...g,model:c(h)}),at);return Object.assign(y,{helix:he(h,at(y))})},streamText(g){let h=S(g,"streamText");return O("hasAi"),kr({...g,model:c(h)})},async generateObject(g){let h=S(g,"generateObject"),y=await L({operation:"generateObject",model:h,alias:e},()=>Ir({...g,model:c(h)}),v=>v.usage),w=y.usage;return Object.assign(y,{helix:he(h,w)})},streamObject(g){let h=S(g,"streamObject");return O("hasAi"),Tr({...g,model:c(h)})},async embed(g){let h=S(g,"embed");return L({operation:"embed",model:h,alias:e},()=>xr({...g,model:l(h)}),ct)},async embedMany(g){let h=S(g,"embedMany");return L({operation:"embedMany",model:h,alias:e},()=>Ar({...g,model:l(h)}),ct)},async generateImage(g){let h=S(g,"generateImage"),y=await L({operation:"generateImage",model:h,alias:e},()=>Er({...g,model:u(h)}),lt);return Object.assign(y,{helix:he(h,lt(y))})},async transcribe(g){let h=S(g,"transcribe");return L({operation:"transcribe",model:h,alias:e},()=>Pr({...g,model:p(h)}))},async generateSpeech(g){let h=S(g,"generateSpeech");return L({operation:"generateSpeech",model:h,alias:e},()=>Rr({...g,model:f(h)}))}})}function Gl(){let e=new Map;return Object.assign((r=>{let o=e.get(r);return o||(o=Ht(r),e.set(r,o)),o}),{async generateText(r){V(r.model);let o=ae(r.model),s=await L({operation:"generateText",model:o},()=>Cr(r),at);return Object.assign(s,{helix:he(o,at(s))})},streamText(r){return V(r.model),O("hasAi"),kr(r)},async generateObject(r){V(r.model);let o=ae(r.model),s=await L({operation:"generateObject",model:o},()=>Ir(r),a=>a.usage),i=s.usage;return Object.assign(s,{helix:he(o,i)})},streamObject(r){return V(r.model),O("hasAi"),Tr(r)},async embed(r){return V(r.model),L({operation:"embed",model:ae(r.model)},()=>xr(r),ct)},async embedMany(r){return V(r.model),L({operation:"embedMany",model:ae(r.model)},()=>Ar(r),ct)},async generateImage(r){V(r.model);let o=ae(r.model),s=await L({operation:"generateImage",model:o},()=>Er(r),lt);return Object.assign(s,{helix:he(o,lt(s))})},async transcribe(r){return V(r.model),L({operation:"transcribe",model:ae(r.model)},()=>Pr(r))},async generateSpeech(r){return V(r.model),L({operation:"generateSpeech",model:ae(r.model)},()=>Rr(r))}})}var qt=class extends Error{errors;constructor(t){super(`all ${t.length} models in the fallback chain failed \u2014 `+t.map(({modelId:n,error:r})=>`${n}: ${r instanceof Error?r.message:String(r)}`).join("; ")),this.name="FallbackExhaustedError",this.errors=t.map(n=>n.error)}};function Dr(e){if(e.length===0)throw new Error("createFallbackModel: at least one model required");if(e.length===1)return e[0];let t=e[0];async function n(r){let o=[];for(let s of e)try{return await r(s)}catch(i){if(i instanceof Error&&i.name==="AbortError")throw i;o.push({modelId:s.modelId,error:i})}throw new qt(o)}return{specificationVersion:"v4",provider:t.provider,modelId:t.modelId,get supportedUrls(){return Promise.resolve(t.supportedUrls)},doGenerate:r=>n(o=>o.doGenerate(r)),doStream:r=>n(o=>o.doStream(r))}}function Vt(e){let t=e.code===ue?"credential broker does not support the raw proxy endpoints required by this SDK version \u2014 deploy a newer broker or pin an older SDK":e.message;throw d.brokerError(e.status,t,k(e.body),e.code)}async function we(e,t={}){let n=A(),{region:r}=x(),{headers:o,deploymentId:s}=z(n);s&&(o[te]=s);let i=pe(r,n.mode==="lambda"?"runtime":"dev"),a;try{a=await wn({proxyUrl:i,credentialHeaders:o,request:e,timeoutMs:t.timeout,executionId:n.executionId})}catch(c){let l=c instanceof Error?c.message??String(c):String(c);throw d.brokerError(0,l)}return a.kind==="brokerError"&&Vt(a),a.response}var fi=8,ut="msg#",mi="meta",Mr=25,Fr=3,gi=400*1024-1024;function yi(e){let t=new Set,n=new Set;for(let r of e)if(Array.isArray(r?.content))for(let o of r.content){if(typeof o!="object"||o===null)continue;let{type:s,approvalId:i,isAutomatic:a}=o;typeof i=="string"&&(s==="tool-approval-request"&&a!==!0&&t.add(i),s==="tool-approval-response"&&n.add(i))}for(let r of n)t.delete(r);return t}var N=e=>({S:e}),dt=e=>({N:String(e)});function Ne(e,t){let n=e?.[t]?.S;return typeof n=="string"?n:void 0}function Lr(e,t){let n=e?.[t]?.N;return typeof n=="string"?Number(n):void 0}function hi(e,t){return e?.[t]?.BOOL===!0}function Nr(e,t){let n=e?.[t]?.M;return typeof n=="object"&&n!==null?n:{}}function wi(e){return`${ut}${String(e).padStart(fi,"0")}`}function Si(e){let t=null;if(typeof e=="string")try{t=JSON.parse(e)}catch{return}else e!==null&&typeof e=="object"&&(t=e);let n=t?.__type;return typeof n=="string"?n.split("#").pop():void 0}function Ur(e){let{agentName:t,table:n,region:r,authenticationId:o}=e,s=e.options?.ttl,i=e.sessionId??`ses_${crypto.randomUUID().replaceAll("-","")}`,a=jt(t,i,e.ownerUserId),c={pk:N(a),sk:N(mi)};async function l(y,w){let v=ne({authenticationId:o,method:"POST",url:`https://dynamodb.${r}.amazonaws.com/`,body:w,headers:{"Content-Type":"application/x-amz-json-1.0","X-Amz-Target":`DynamoDB_20120810.${y}`}}),C,T;try{({status:C,body:T}=await we(v))}catch(R){throw R instanceof d?R:d.agentSessionsFailed(R instanceof Error?R.message:String(R))}if(C>=400){let R=Si(T);throw R==="ConditionalCheckFailedException"?new pt:d.agentSessionsFailed(`DynamoDB ${y} failed (${C}): ${R??JSON.stringify(T).slice(0,300)}`)}if(typeof T=="string")try{return JSON.parse(T)}catch{throw d.agentSessionsFailed(`DynamoDB ${y}: non-JSON response body`)}return T??{}}async function u(){return(await l("GetItem",{TableName:n,Key:c,ConsistentRead:!0})).Item}let p=!1;async function f(){p||(await m(),p=!0)}async function m(){let y=await u();if(!y){let v=await S({ascending:!0});if(v.length===0||await u())return;let C=v.map(T=>JSON.parse(Ne(T,"message")??"null"));if(await E(v.map(T=>({DeleteRequest:{Key:{pk:N(a),sk:T.sk}}}))),yi(C).size>0)throw new X(i);return}if(s===void 0)return;let w=Lr(y,"lastActiveAt")??0;if(!(Date.now()-w<=s*1e3)){if(Object.keys(Nr(y,"pendingApprovals")).length>0)throw new X(i);await g()}}async function S(y){let w=[],v;do{let C=await l("Query",{TableName:n,KeyConditionExpression:"pk = :pk AND begins_with(sk, :prefix)",ExpressionAttributeValues:{":pk":N(a),":prefix":N(ut)},ConsistentRead:!0,ScanIndexForward:y.ascending,...y.limit!==void 0?{Limit:y.limit}:{},...y.projection!==void 0?{ProjectionExpression:y.projection}:{},...v!==void 0?{ExclusiveStartKey:v}:{}});if(w.push(...C.Items??[]),v=C.LastEvaluatedKey,y.limit!==void 0&&w.length>=y.limit)break}while(v!==void 0);return w}async function E(y){for(let w=0;w<y.length;w+=Mr){let v=y.slice(w,w+Mr);for(let C=0;v.length>0;C++){let R=(await l("BatchWriteItem",{RequestItems:{[n]:v}})).UnprocessedItems?.[n];if(!R||R.length===0)break;if(C>=Fr)throw d.agentSessionsFailed(`DynamoDB BatchWriteItem: ${R.length} items still unprocessed after ${Fr} retries`);v=R}}}async function g(){let w=(await S({ascending:!0,projection:"sk"})).map(v=>({DeleteRequest:{Key:{pk:N(a),sk:v.sk}}}));w.push({DeleteRequest:{Key:c}}),await E(w)}async function h(y){let w=Date.now();return(await l("UpdateItem",{TableName:n,Key:c,UpdateExpression:"ADD nextSeq :reserve, messageCount :reserve SET lastActiveAt = :now, "+(s!==void 0?"expiresAt = :expires, ":"")+"createdAt = if_not_exists(createdAt, :now), truncated = if_not_exists(truncated, :false), pendingApprovals = if_not_exists(pendingApprovals, :emptyMap)"+(s===void 0?" REMOVE expiresAt":""),ExpressionAttributeValues:{":reserve":dt(y),":now":dt(w),...s!==void 0?{":expires":dt(Math.floor(w/1e3)+s)}:{},":false":{BOOL:!1},":emptyMap":{M:{}}},ReturnValues:"ALL_NEW"})).Attributes??{}}return{id:i,async messages(y){await f();let w=y?.limit;return w!==void 0?(await S({ascending:!1,limit:w})).reverse().map(T=>JSON.parse(Ne(T,"message")??"null")):(await S({ascending:!0})).map(C=>JSON.parse(Ne(C,"message")??"null"))},async page(y){let{limit:w,order:v,cursor:C}=Le(y);await f();let T;if(C!==void 0&&(T=Buffer.from(C,"base64url").toString("utf8"),!T.startsWith(ut)))throw $t();let R=await l("Query",{TableName:n,KeyConditionExpression:"pk = :pk AND begins_with(sk, :prefix)",ExpressionAttributeValues:{":pk":N(a),":prefix":N(ut)},ConsistentRead:!0,ScanIndexForward:v==="asc",Limit:w,...T!==void 0?{ExclusiveStartKey:{pk:N(a),sk:N(T)}}:{}}),ee=R.Items??[],Ve=Ne(R.LastEvaluatedKey,"sk");return{messages:ee.map(Go=>JSON.parse(Ne(Go,"message")??"null")),nextCursor:Ve!==void 0?Buffer.from(Ve,"utf8").toString("base64url"):null}},async append(...y){if(y.length===0)return;let w=y.map(ee=>JSON.stringify(ee)),v=w.findIndex(ee=>Buffer.byteLength(ee,"utf8")>gi);if(v!==-1)throw d.agentSessionsFailed(`a ${y[v].role} message of ${Buffer.byteLength(w[v],"utf8")} bytes exceeds DynamoDB's 400 KB item limit \u2014 the session store keeps one item per message; have tools summarise or offload (ctx.files) large results`);await f();let C=await h(y.length),R=(Lr(C,"nextSeq")??y.length)-y.length+1;await E(w.map((ee,Ve)=>({PutRequest:{Item:{pk:N(a),sk:N(wi(R+Ve)),message:N(ee)}}})))},async clear(){await g()},async truncated(){return await f(),hi(await u(),"truncated")},async pendingApprovals(){await f();let y=Nr(await u(),"pendingApprovals");return Object.values(y).map(w=>{let v=w.S;return v!==void 0?JSON.parse(v):void 0}).filter(w=>w!==void 0)},async addPendingApprovals(y){if(y.length===0)return;await f(),await h(0);let w={},v={},C=[];y.forEach((T,R)=>{w[`#a${R}`]=T.approvalId,v[`:v${R}`]=N(JSON.stringify(T)),C.push(`pendingApprovals.#a${R} = :v${R}`)}),await l("UpdateItem",{TableName:n,Key:c,UpdateExpression:`SET ${C.join(", ")}`,ExpressionAttributeNames:w,ExpressionAttributeValues:v})},async resolveApproval(y){await f();try{return await l("UpdateItem",{TableName:n,Key:c,UpdateExpression:"REMOVE pendingApprovals.#id SET lastActiveAt = :now",ConditionExpression:"attribute_exists(pendingApprovals.#id)",ExpressionAttributeNames:{"#id":y},ExpressionAttributeValues:{":now":dt(Date.now())}}),"resolved"}catch(w){if(w instanceof pt)return"already-resolved";throw w}}}}var pt=class extends Error{constructor(){super("ConditionalCheckFailedException"),this.name="ConditionalCheckFailed"}};import bi from"ky";async function K(e){let t=e.headers.get("content-type")??"",n=await e.text();if(n.length!==0)return t.includes("application/json")?JSON.parse(n):n}var vi=6e4,xi=500,$r=500;function jr(e){let t=x();if(t.kind!=="provisioned")throw d.agentSessionsFailed("the managed session store requires a provisioned project (projectId in helix.config.ts)");return`${j(t.region).hosts.api}/private/v1/helix/projects/${encodeURIComponent(t.projectId)}/storage/agent-sessions/${encodeURIComponent(e)}`}function Ai(){let e=de(),t=$(),n={Accept:"application/json"};if(e&&e.trim().length>0&&(n[le]=e),t&&t.trim().length>0&&(n[U]=t),Object.keys(n).length===1)throw d.missingExecutionCredentials();return n}async function Y(e,t,n){try{let r=await bi(t,{method:e,headers:Ai(),...n!==void 0?{json:n}:{},throwHttpErrors:!1,timeout:vi});return{status:r.status,body:await K(r)}}catch(r){throw r instanceof d?r:d.agentSessionsFailed(`managed session store unreachable: ${r instanceof Error?r.message:String(r)}`)}}function ft(e){if(e!==null&&typeof e=="object"){let t=e;if(typeof t.message=="string")return t.message}return String(e??"unknown error")}function ce(e,t,n){throw t===410?new X(e):t===404?new I(`Agent session "${e}" was not found (it may belong to a different user or have expired).`):d.agentSessionsFailed(`managed session store error ${t}: ${ft(n)}`)}function Br(e){let t=jr(e.agentName),n=e.sessionId??`ses_${crypto.randomUUID().replaceAll("-","")}`,r=e.options?.scope,o=e.options?.ttl,s=async c=>{let l=new URL(`${t}/${encodeURIComponent(n)}/messages`);c.first!==void 0&&l.searchParams.set("first",String(c.first)),c.cursor!==void 0&&l.searchParams.set("cursor",c.cursor),c.order!==void 0&&l.searchParams.set("order",c.order);let{status:u,body:p}=await Y("get",l.toString());if(u!==404){if(u===400&&c.cursor!==void 0)throw new I(`session.page(): ${ft(p)}`);return(u<200||u>=300)&&ce(n,u,p),p}},i=c=>c.elements.length<2||c.elements[0].id>c.elements[1].id,a=async()=>{let c=[],l;for(;;){let u=await s({...l!==void 0?{cursor:l}:{}});if(u===void 0)return[];if(c.push(...u.elements.map(p=>p.message)),!u.pageInfo.hasNextPage||u.pageInfo.endCursor===null)break;l=u.pageInfo.endCursor}return c};return{id:n,async messages(c){let l=c?.limit;if(l===void 0)return a();let u=[],p;for(;u.length<l;){let f=await s({order:"desc",first:Math.min(l-u.length,xi),...p!==void 0?{cursor:p}:{}});if(f===void 0)return[];if(!i(f))return(await a()).slice(-l);if(u.push(...f.elements.map(m=>m.message)),!f.pageInfo.hasNextPage||f.pageInfo.endCursor===null)break;p=f.pageInfo.endCursor}return u.slice(0,l).reverse()},async page(c){let{limit:l,order:u,cursor:p}=Le(c),f=await s({first:l,order:u,...p!==void 0?{cursor:p}:{}});if(f===void 0)return{messages:[],nextCursor:null};if(u==="desc"&&!i(f))throw d.agentSessionsFailed('the managed session store in this environment does not support newest-first paging yet \u2014 page with order: "asc", or read the latest messages with session.messages({ limit }).');return{messages:f.elements.map(m=>m.message),nextCursor:f.pageInfo.hasNextPage?f.pageInfo.endCursor:null}},async append(...c){if(c.length===0)return;let{status:l,body:u}=await Y("post",`${t}/${encodeURIComponent(n)}/messages`,{messages:c,...r!==void 0?{scope:r}:{},...o!==void 0?{ttl:o}:{}});(l<200||l>=300)&&ce(n,l,u)},async clear(){for(let c=0;c<$r;c++){let{status:l,body:u}=await Y("delete",`${t}/${encodeURIComponent(n)}`);if(l===204||l===404)return;if(!(l===200&&u?.more===!0)){if(l===200)return;ce(n,l,u)}}throw d.agentSessionsFailed(`clearing session "${n}" did not complete after ${$r} calls \u2014 call clear() again to continue.`)},async truncated(){let{status:c,body:l}=await Y("get",`${t}/${encodeURIComponent(n)}`);return c===404?!1:((c<200||c>=300)&&ce(n,c,l),l.truncated===!0)},async pendingApprovals(){let{status:c,body:l}=await Y("get",`${t}/${encodeURIComponent(n)}`);return c===404?[]:((c<200||c>=300)&&ce(n,c,l),l.pendingApprovals)},async addPendingApprovals(c){if(c.length===0)return;let{status:l,body:u}=await Y("post",`${t}/${encodeURIComponent(n)}/approvals`,{approvals:c});l!==204&&ce(n,l,u)},async resolveApproval(c){let{status:l,body:u}=await Y("post",`${t}/${encodeURIComponent(n)}/approvals/${encodeURIComponent(c)}/resolve`);return(l<200||l>=300)&&ce(n,l,u),u.status}}}async function Kr(e,t={}){let n=jr(e),r=new URL(n);t.first!==void 0&&r.searchParams.set("first",String(t.first)),t.cursor!==void 0&&r.searchParams.set("cursor",t.cursor);let{status:o,body:s}=await Y("get",r.toString());if(o===400)throw new I(ft(s));if(o<200||o>=300)throw d.agentSessionsFailed(`managed session store error ${o}: ${ft(s)}`);let i=s;return{sessions:i.elements.map(a=>({id:a.sessionId,createdAt:a.createdAt,lastActivityAt:a.lastActivityAt,messageCount:a.messageCount,pendingApprovals:a.pendingApprovalCount})),nextCursor:i.pageInfo.endCursor}}function Hr(e){if(e?.scope!=="user")return;let t=mn.getStore()?.userId;if(typeof t!="string"||t.length===0)throw new I('This agent is user-scoped (memory.scope: "user") \u2014 it can only run in a user execution with a user identity (ctx.userId); schedules have none.');return t}function qr(){return A().mode==="lambda"}function mt(e,t,n){let r=x(),o=r.agentSessions,s=Hr(n);if(o?.store==="dynamodb"){let i=r.authentications??{},a=i[o.auth];if(!a)throw d.unknownAlias(o.auth,Object.keys(i));return Ur({agentName:e,sessionId:t,authenticationId:a,table:o.table,region:o.region,options:n,...s!==void 0?{ownerUserId:s}:{}})}return qr()?Br({agentName:e,sessionId:t,options:n}):yr(e,t,n,s)}async function Vr(e,t,n={}){if(t?.scope!=="user")throw new I(`agent.sessions() lists the calling user's sessions \u2014 the agent must declare memory.scope: "user".`);if(x().agentSessions?.store==="dynamodb")throw new I('agent.sessions() is not supported on the bring-your-own DynamoDB session store \u2014 use the managed store (agentSessions: { store: "managed" }).');let o=Hr(t);return qr()?Kr(e,n):hr(e,o,n)}var Wr=new Ei;function ki(e){return({steps:t})=>t.reduce((n,r)=>n+r.toolCalls.length,0)>=e}function Xr(e,t,n,r){return F.startActiveSpan("agent.tool",{kind:zt.INTERNAL,attributes:{agent:e,tool:t,...n}},async o=>{try{let s=await r();return o.setAttribute("status","success"),o.setStatus({code:Se.OK}),s}catch(s){throw o.setAttribute("status","error"),o.setStatus({code:Se.ERROR,message:s instanceof Error?s.message:String(s)}),s}finally{o.end()}})}function Pi(e){let t={};for(let n of e.tools??[]){let r=n.needsApproval;t[n.name]=Gr({description:n.description,inputSchema:n.inputSchema,...r!==void 0?{needsApproval:typeof r=="function"?o=>r(o):r}:{},execute:o=>Xr(e.name,n.name,{},()=>n.execute(o,ze()))})}for(let n of e.agents??[]){let r=Fe(n),o=`agent_${n.replaceAll("-","_")}`;t[o]=Gr({description:r.description,inputSchema:zr.object({prompt:zr.string().describe("The task or question for the agent")}),execute:({prompt:s})=>Xr(e.name,o,{delegateAgent:n},async()=>{let i=Wr.getStore()??0;return i>=Nt?{error:"delegation_depth_exceeded",message:`Delegation depth limit (${Nt}) reached \u2014 answer with what you have instead of delegating further.`}:(await Wr.run(i+1,()=>Li(n).generate({prompt:s}))).text})})}return t}function Oi(e){let t=[{model:e.model,auth:e.auth},...e.fallbacks??[]];return _r(Dr(t.map(n=>Ht(n.auth)(n.model))))}function Gt(e){return e.filter(t=>typeof t=="object"&&t!==null&&t.type==="tool-approval-request"&&!t.isAutomatic)}function Yr(e){return{approvalId:e.approvalId,toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,input:e.toolCall.input,requestedAt:new Date().toISOString()}}function _i(e){return{id:e.approvalId,toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,input:e.toolCall.input}}function Di(e){let t=new Set;for(let n of e)if(Array.isArray(n.content))for(let r of Gt(n.content))t.add(r.approvalId);return t}function Mi(e,t){let n=e.reduce((r,o)=>r+it(o.response.modelId??t,o.usage).amount,0);return{amount:Number(n.toFixed(8)),currency:"USD"}}async function Fi(e,t,n){let r=[],o=[];if(n.approvals&&n.approvals.length>0){if(n.prompt!==void 0||(n.messages?.length??0)>0)throw new I("agent.generate() cannot combine `approvals` with `prompt` or `messages` \u2014 send the approvals on their own, then send new input on the next call.");let s=new Map((await e.pendingApprovals()).map(p=>[p.approvalId,p]));if(s.size===0&&t.length===0)throw new I(`Session "${e.id}" has no history and nothing awaiting approval \u2014 it does not exist, has expired, or belongs to a different user.`);let i=Di(t),a=new Set(n.approvals.map(p=>p.id)),c=[...a].filter(p=>!s.has(p)&&!i.has(p));if(c.length>0)throw new I(`Unknown approval id(s) for session "${e.id}": ${c.join(", ")} \u2014 use the ids from \`pendingApprovals\` on the paused result.`);let l=[...s.keys()].filter(p=>!a.has(p));if(l.length>0)throw new I(`Session "${e.id}" has ${l.length} pending approval(s) not decided in this call: ${l.join(", ")} \u2014 decide every pending approval in one generate() call.`);let u=[];for(let p of n.approvals){let f=s.get(p.id);!f||await e.resolveApproval(p.id)==="already-resolved"||(o.push(f),u.push({type:"tool-approval-response",approvalId:p.id,approved:p.approved,...p.reason!==void 0?{reason:p.reason}:{}}))}u.length>0&&r.push({role:"tool",content:u})}if(n.prompt!==void 0?r.push({role:"user",content:n.prompt}):n.messages&&r.push(...n.messages),r.length===0)throw new I("agent.generate() requires `prompt`, `messages`, or `approvals` \u2014 nothing to do.");return{turn:r,claimed:o}}function Li(e){let t=Fe(e);dr(e);let n=lr(e),r=Oi(t),o=Pi(t),s=t.limits?.maxIterations??fr,i=t.limits?.maxToolCalls??mr,a=t.memory?.maxSessionMessages??pr,c=l=>({model:r,system:n,tools:o,stopWhen:l.stopWhen??[Ci(s),ki(i)],...l.prepareStep!==void 0?{prepareStep:l.prepareStep}:{},...l.activeTools!==void 0?{activeTools:l.activeTools}:{},...l.toolChoice!==void 0?{toolChoice:l.toolChoice}:{},...l.providerOptions!==void 0?{providerOptions:l.providerOptions}:{}});return{model:r,tools:o,instructions:n,session(l){return mt(e,l,t.memory)},sessions(l){return Vr(e,t.memory,l)},async generate(l){return F.startActiveSpan("agent.generate",{kind:zt.INTERNAL,attributes:{agent:e,model:t.model}},async u=>{let p=mt(e,l.sessionId,t.memory);u.setAttribute("sessionId",p.id),O("hasAi");let f=[];try{let m=await Bt(p,a),S=await Fi(p,m,l);f=S.claimed;let E;try{E=await Ii({...c(l),messages:[...m,...S.turn]})}catch(y){if(f.length>0)try{await p.addPendingApprovals(f),f=[]}catch(w){console.error(`[helix-sdk] agent "${e}" session "${p.id}": failed to restore ${f.length} pending approval(s) after a failed resume \u2014 ${w instanceof Error?w.message:String(w)}`)}throw y}let g=Gt(E.content),h=g.length>0?"awaiting-approval":"completed";return await p.append(...S.turn,...E.responseMessages),g.length>0&&await p.addPendingApprovals(g.map(Yr)),u.setAttributes({steps:E.steps.length,status:h}),u.setStatus({code:Se.OK}),Object.assign(E,{sessionId:p.id,status:h,...g.length>0?{pendingApprovals:g.map(_i)}:{},helix:{cost:Mi(E.steps,t.model),model:E.response.modelId??t.model}})}catch(m){throw u.setAttribute("status","error"),u.setStatus({code:Se.ERROR,message:m instanceof Error?m.message:String(m)}),m}finally{u.end()}})},async stream(l){let u=F.startSpan("agent.stream",{kind:zt.INTERNAL,attributes:{agent:e,model:t.model}}),p=!1,f=(m,S)=>{p||(p=!0,u.setAttribute("status",m),u.setStatus(m==="error"?{code:Se.ERROR,...S!==void 0?{message:S}:{}}:{code:Se.OK}),u.end())};try{let m=mt(e,l.sessionId,t.memory);if(u.setAttribute("sessionId",m.id),O("hasAi"),l.approvals&&l.approvals.length>0)throw new I("agent.stream() does not accept approvals \u2014 resume paused runs with generate().");if(l.prompt===void 0&&!l.messages)throw new I("agent.stream() requires `prompt` or `messages`.");let S=l.prompt!==void 0?[{role:"user",content:l.prompt}]:[...l.messages],E=await Bt(m,a),g=Jr.with(Ti.setSpan(Jr.active(),u),()=>Ri({...c(l),messages:[...E,...S],onFinish:async h=>{try{await m.append(...S,...h.responseMessages);let y=Gt(h.content);y.length>0&&await m.addPendingApprovals(y.map(Yr)),f(y.length>0?"awaiting-approval":"completed")}catch(y){let w=y instanceof Error?y.message:String(y);console.error(`[helix-sdk] agent "${e}" session "${m.id}": failed to persist the streamed turn \u2014 ${w}`),f("error",w)}},onError:({error:h})=>{f("error",h instanceof Error?h.message:String(h))},onAbort:()=>{f("error","stream aborted")}}));return Object.assign(g,{sessionId:m.id})}catch(m){throw f("error",m instanceof Error?m.message:String(m)),m}}}}var Qr="helix-schedule",Q=class extends Error{constructor(t){super(`defineSchedule: ${t}`),this.name="ScheduleConfigError"}};function Kd(e){if(typeof e!="object"||e===null)throw new Q("expected a config object");let{cron:t,timezone:n="UTC",concurrent:r=!1,handler:o}=e;if(typeof t!="string"||t.trim()==="")throw new Q("`cron` must be a non-empty string");let s=t.trim().split(/\s+/).length;if(s!==5)throw new Q(`\`cron\` must be a 5-field standard expression (minute hour day-of-month month day-of-week); got ${s} field(s) in "${t}"`);if(typeof n!="string"||!Ni(n))throw new Q(`\`timezone\` must be a valid IANA timezone name (e.g. "Europe/London"); got "${String(n)}"`);if(typeof r!="boolean")throw new Q("`concurrent` must be a boolean");if(typeof o!="function")throw new Q("`handler` must be a function");return Object.freeze({kind:Qr,cron:t.trim(),timezone:n,concurrent:r,handler:o})}function Hd(e){return typeof e=="object"&&e!==null&&e.kind===Qr&&typeof e.handler=="function"}function Ni(e){if(!/^[A-Za-z]/.test(e))return!1;try{return new Intl.DateTimeFormat(void 0,{timeZone:e}),!0}catch{return!1}}import{SpanKind as Ui}from"@opentelemetry/api";function gt(e,t,n){let r=F.startSpan("log",{kind:Ui.INTERNAL});r.setAttribute("message",t),r.setAttribute("level",e),n&&Hn(r.spanContext().spanId,"properties",n),r.end(),kn(e,t,n)}function Zr(){return{info:(e,t)=>gt("info",e,t),warn:(e,t)=>gt("warn",e,t),error:(e,t)=>gt("error",e,t),debug:(e,t)=>gt("debug",e,t)}}function Xd(){try{return x().config??{}}catch(e){return console.warn(`[helix-sdk] Config not loaded: ${e instanceof Error?e.message:String(e)}. Using empty config.`),{}}}import $i from"ky";import{context as Jt,trace as ji,SpanKind as $e,SpanStatusCode as to}from"@opentelemetry/api";async function eo(e){Sn(e.url);let t=A(),{region:n}=x(),r={authenticationId:e.authenticationId,url:e.url,...e.method!==void 0?{method:e.method}:{},...e.expiresIn!==void 0?{expiresIn:e.expiresIn}:{}},{headers:o,deploymentId:s}=z(t);s&&(r.deploymentId=s);let i=bn(n,t.mode==="lambda"?"runtime":"dev"),a;try{a=await vn({signUrl:i,credentialHeaders:o,body:r,timeoutMs:e.timeout,executionId:t.executionId})}catch(c){let l=c instanceof Error?c.message??String(c):String(c);throw d.brokerError(0,l)}if(a.kind==="brokerError"){let c=a.code===ue?"credential broker does not support the s3 sign endpoint required by this SDK version \u2014 deploy a newer broker or pin an older SDK":a.message;throw d.brokerError(a.status,c,k(a.body),a.code)}return a.result}var Bi=new Set([Ie,Ge,te,Re,"authorization","x-tray-token","x-helix-project-execution-token","host","content-length","connection","transfer-encoding","te","upgrade","keep-alive","expect","proxy-authorization","proxy-connection","accept-encoding","x-request-id"]);function Ki(e){let t=e.toLowerCase();return Bi.has(t)||t.startsWith("x-tray-internal-")}async function Hi(e,t){let n=e instanceof Request?e:new Request(e,t),r=new URL(n.url);if(r.protocol!=="https:")throw d.unsupportedScheme(r.protocol.replace(/:$/,""));let o=A(),{region:s}=x(),{headers:i,deploymentId:a}=z(o),c=pe(s,o.mode==="lambda"?"runtime":"dev"),l=new Headers;for(let[m,S]of n.headers.entries())Ki(m)||l.append(m,S);l.set(Ie,n.url);for(let[m,S]of Object.entries(i))l.set(m,S);a&&l.set(te,a),o.executionId&&l.set(Re,o.executionId);let u={method:n.method,headers:l,redirect:"manual",signal:n.signal};n.body&&(u.body=n.body,u.duplex="half");let p;try{p=await fetch(c,u)}catch(m){throw m instanceof Error&&m.name==="AbortError"?m:d.brokerError(0,m instanceof Error?m.message:String(m))}let f=p.headers.get(Je);return f!==null&&Vt(await hn(p,f)),p}var qi=["get","post","put","patch","delete","head","options"],ro="[stream body omitted]";function oo(e){return typeof ReadableStream<"u"&&e instanceof ReadableStream?ro:e instanceof ArrayBuffer?`[binary body: ${e.byteLength} bytes]`:ArrayBuffer.isView(e)?`[binary body: ${e.byteLength} bytes]`:typeof Blob<"u"&&e instanceof Blob?`[binary body: ${e.size} bytes]`:e}function Wt(e){try{return new URL(e).hostname}catch{return e}}function no(e,t,n,r,o){let s=Wt(t),i="externalApi",a={kind:$e.CLIENT};return F.startActiveSpan(i,a,async c=>(c.setAttributes({method:e,host:s,"peer.service":r}),q(c,"request",{url:t,method:e,...n!==void 0?{body:oo(n)}:{}}),o(c)))}function Ue(e,t,n){e.setAttribute("status",t),e.setStatus(t==="success"?{code:to.OK}:{code:to.ERROR,message:n}),e.end()}var Vi=16;async function zi(e,t){let n=e.clone().body;return n?so(n,t):new Uint8Array(0)}async function so(e,t){let n=e.getReader(),r=[],o=0,s=0;try{for(;;){let{done:c,value:l}=await n.read();if(c)break;if(!l||l.byteLength===0){if(s+=1,s>=Vi)break;continue}s=0;let u=t+1-o;if(l.byteLength>=u){r.push(l.slice(0,u)),o+=u;break}r.push(l),o+=l.byteLength}}finally{n.cancel().catch(()=>{}),n.releaseLock()}let i=new Uint8Array(o),a=0;for(let c of r)i.set(c,a),a+=c.byteLength;return i}async function io(e,t,n){if("kyResponse"in n)try{let r=await zi(n.kyResponse,Te),o=new TextDecoder("utf-8").decode(r,{stream:!0}),s;try{s=JSON.parse(o)}catch{s=o}q(e,"response",s)}catch{q(e,"response",{status:t})}else q(e,"response",oo(n.bodyValue))}async function Gi(e,t){if(t instanceof ReadableStream){let n=e.body??t;try{let[r,o]=n.tee(),s=new Request(e,{body:r,duplex:"half"}),i=await so(o,Te);return{body:new TextDecoder("utf-8").decode(i,{stream:!0}),request:s}}catch{return{body:ro}}}return typeof t=="string"?{body:t}:{}}function gu(){let e=$i.create({fetch:Hi,retry:{shouldRetry:({error:r})=>r instanceof d?!1:void 0}});function t(r){return(o,s)=>{let i=Jt.active(),a,c=!1,l=(p,f)=>{a&&!c&&(c=!0,Ue(a,p,f))},u=e.extend({hooks:{beforeRequest:[async(p,f)=>{let m=await Gi(p,f.body),S=m.body;if(a||(a=F.startSpan("externalApi",{kind:$e.CLIENT},i)),a.setAttributes({method:p.method.toUpperCase(),host:Wt(p.url)}),q(a,"request",{url:p.url,method:p.method.toUpperCase(),...S!==void 0?{body:S}:{}}),c=!1,O("hasExternal"),m.request)return m.request}],beforeRetry:[p=>{l("error","retry"),a=void 0,c=!1}],afterResponse:[async(p,f,m)=>{a&&(a.setAttribute("statusCode",m.status),await io(a,m.status,{kyResponse:m}),m.ok?l("success"):s?.throwHttpErrors===!1&&(O("hasError"),l("error",`HTTP ${m.status}`)))}],beforeError:[p=>(O("hasError"),l("error",p.message),p)]}});return a=F.startSpan("externalApi",{kind:$e.CLIENT},i),a.setAttributes({method:r.toUpperCase(),host:Wt(String(o))}),Jt.with(ji.setSpan(Jt.active(),a),()=>{let p=r==="options"?u(o,{...s,method:"OPTIONS"}):u[r](o,s);return p.catch(f=>{O("hasError"),l("error",f instanceof Error?f.message:String(f))}),p})}}let n=Object.fromEntries(qi.map(r=>[r,t(r)]));return{...e,...n,authed(r){return Ji(r)}}}function Ji(e){let n=x().authentications??{};if(!n[e])throw d.unknownAlias(e,Object.keys(n));let r=n[e];function o(i){return(a,c={})=>{let l=i.toUpperCase();return no(l,a,c.body,e,async u=>{O("hasAuth");let p=F.startSpan("auth",{kind:$e.INTERNAL});p.setAttribute("alias",e),p.setAttribute("id",r),p.end();try{let f=ne({authenticationId:r,method:l,url:a,body:c.body,headers:c.headers,query:c.query}),m=await we(f,{timeout:c.timeout});return u.setAttribute("statusCode",m.status),await io(u,m.status,{bodyValue:m.body}),Ue(u,"success"),m}catch(f){throw O("hasError"),f instanceof d&&f.detail.kind==="broker_error"&&f.detail.status>0&&u.setAttribute("statusCode",f.detail.status),Ue(u,"error",f instanceof Error?f.message:String(f)),f}})}}function s(i,a={}){let c=a.method??"GET";return no(c,i,void 0,e,async l=>{O("hasAuth");let u=F.startSpan("auth",{kind:$e.INTERNAL});u.setAttribute("alias",e),u.setAttribute("id",r),u.end();try{let p=await eo({authenticationId:r,url:i,method:c,...a.expiresIn!==void 0?{expiresIn:a.expiresIn}:{},...a.timeout!==void 0?{timeout:a.timeout}:{}});return l.setAttribute("statusCode",200),Ue(l,"success"),p}catch(p){throw O("hasError"),p instanceof d&&p.detail.kind==="broker_error"&&p.detail.status>0&&l.setAttribute("statusCode",p.detail.status),Ue(l,"error",p instanceof Error?p.message:String(p)),p}})}return{get:o("get"),post:o("post"),put:o("put"),patch:o("patch"),delete:o("delete"),head:o("head"),options:o("options"),s3Sign:s}}import{SpanKind as ra,SpanStatusCode as uo}from"@opentelemetry/api";function je(e){let t=e.trimStart().match(/^([A-Za-z]+)/);return t?t[1].toUpperCase():"QUERY"}var Wi=18e4,ao=Wi-1e4,Xi=2e3;async function co(e,t,n){let r=new Set(["FINISHED","FAILED","ABORTED"]),o=Date.now(),s=0;for(;Date.now()-o<ao;){let i=await e(t,"DescribeStatement",{Id:n}),a=i.Status;if(r.has(a))return i;let c=Math.min(Xi,200*2**s),l=c/2+Math.random()*(c/2),u=ao-(Date.now()-o);await new Promise(p=>setTimeout(p,Math.min(l,u))),s++}throw d.dbCallFailed(`statement polling exceeded budget after ${Date.now()-o}ms`)}var Yi=new Set(["SELECT","WITH","SHOW"]),Qi=new Set(["INSERT","UPDATE","DELETE","MERGE"]);function Zi(e){if(!e.clusterIdentifier&&!e.workgroupName)throw d.dbInvalidParameters("either clusterIdentifier or workgroupName is required");if(e.clusterIdentifier&&e.workgroupName)throw d.dbInvalidParameters("clusterIdentifier and workgroupName are mutually exclusive (Provisioned vs Serverless)");if(!e.database)throw d.dbInvalidParameters("database is required");if(e.clusterIdentifier&&!e.dbUser)throw d.dbInvalidParameters("dbUser is required when using clusterIdentifier (Provisioned)");if(!e.region)throw d.dbInvalidParameters("region is required")}function ea(e,t){let n=null;if(typeof t=="string")try{n=JSON.parse(t)}catch{}else t!==null&&typeof t=="object"&&(n=t);let r=typeof n?.__type=="string"?n.__type:void 0,o=typeof n?.message=="string"?n.message:void 0;if(r&&o)return d.dbQueryFailed(`${r}: ${o}`);let s=typeof t=="string"?re(t):k(t);return d.dbCallFailed(s)}function ta(e){if(e==null||typeof e!="string")return e;try{return JSON.parse(e)}catch{throw d.dbCallFailed("upstream body not JSON: "+e.slice(0,200))}}function na(e,t){return typeof t!="number"||t<0?{}:Yi.has(e)?{rowsRead:t}:Qi.has(e)?{rowsWritten:t}:{}}function lo(e){async function t(n,r,o){let s=ne({authenticationId:e,method:"POST",url:`https://redshift-data.${n}.amazonaws.com/`,body:o,headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`RedshiftData.${r}`}});try{let{status:i,body:a}=await we(s);if(i>=400)throw ea(i,a);return ta(a)}catch(i){if(i instanceof d)throw i;let a=i instanceof Error?i.message??String(i):String(i);throw d.dbCallFailed(a,i instanceof Error?i:void 0)}}return{system:"redshift",validate:Zi,async execute(n,r){let o=je(r),s={Sql:r,Database:n.database,...n.clusterIdentifier&&{ClusterIdentifier:n.clusterIdentifier,DbUser:n.dbUser},...n.workgroupName&&{WorkgroupName:n.workgroupName},...n.statementName&&{StatementName:n.statementName}},i=await t(n.region,"ExecuteStatement",s),a=i,c=typeof a?.Id=="string"?a.Id:void 0;if(!c){let m=k(i);throw d.dbCallFailed(`ExecuteStatement response missing Id; got: ${m}`)}let l=await co(t,n.region,c),u=l.Status;if(u==="FAILED"){let m=typeof l.Error=="string"?l.Error:"statement failed";throw d.dbQueryFailed(`${m} (statement: ${c})`)}if(u==="ABORTED")throw d.dbQueryFailed(`statement aborted (statement: ${c})`);let p=na(o,l.ResultRows);return l.HasResultSet===!1?{result:{rowsAffected:l.ResultRows??0},metadata:p}:{result:await t(n.region,"GetStatementResult",{Id:c}),metadata:p}}}}var Xt=64*1024;function oa(e){return e.length>Xt?`${e.slice(0,Xt)}...[truncated]`:e}function sa(e,t,n,r,o){e.setAttributes({system:t.system,statement:o,namespace:n.database,operation:r})}function ia(e,t,n){let r=typeof t=="string"?t:JSON.stringify(t);return r.length>Xt?q(e,"result",{truncated:!0,size:r.length}):q(e,"result",t),n.rowsRead!==void 0&&e.setAttribute("rowsRead",n.rowsRead),n.rowsWritten!==void 0&&e.setAttribute("rowsWritten",n.rowsWritten),r}async function aa(e,t,n){let r=je(n),o=oa(n);return F.startActiveSpan("database",{kind:ra.CLIENT},async s=>{sa(s,e,t,r,o);try{O("hasDb");let{result:i,metadata:a}=await e.execute(t,n),c=ia(s,i,a);return s.setAttribute("status","success"),s.setStatus({code:uo.OK}),c}catch(i){O("hasError");let a=i instanceof Error?i.message:String(i);throw s.setAttribute("status","error"),s.setStatus({code:uo.ERROR,message:a}),i}finally{s.end()}})}function ca(e){let n=x().authentications??{};if(!n[e])throw d.unknownAlias(e,Object.keys(n));let r=n[e],o=lo(r);function s(i,a){return o.validate(i),aa(o,i,a)}return{parameters(i){return{sql(a){return s(i,a)}}},sql(i){return s({},i)}}}import{createStorage as fa}from"unstorage";var po=1024,Yt=250*1024,la=new TextEncoder,da=/(^|\/)\.\.(\/|$)/,ua=/[?#]/,pa=/[\u0000-\u001F\u007F]/;function fo(e){if(e.length===0)throw d.kvKeyInvalid("Key must be a non-empty string");if(da.test(e))throw d.kvKeyInvalid("Key contains path traversal segment");if(ua.test(e)||pa.test(e))throw d.kvKeyInvalid("Key contains illegal characters");if(e.startsWith("/")||e.endsWith("/")||e.split("/").some(n=>n===""))throw d.kvKeyInvalid("Key must not contain empty path segments");let t=la.encode(e).length;if(t<1||t>po)throw d.kvKeyInvalid(`Key must be between 1 and ${po} UTF-8 bytes (got ${t})`)}function mo(e){if(!Number.isInteger(e)||e<=0)throw d.kvTtlInvalid(`ttl must be a positive integer number of seconds (got ${e})`)}function go(e){let t;try{t=JSON.stringify(e)}catch{throw d.kvValueInvalid("Value must be JSON-serializable")}if(t===void 0)throw d.kvValueInvalid("Value must be JSON-serializable");let n=Buffer.byteLength(t,"utf8");if(n>Yt)throw d.kvValueTooLarge(`Value exceeds maximum size of ${Yt} bytes (got ${n})`,Yt)}function Be(e){fo(e)}function yt(e,t){let n=e[t];if(typeof n!="function")throw new Error(`KV driver is missing ${t}`);return n}function yo(e){let t=yt(e,"getItem"),n=yt(e,"setItem"),r=yt(e,"removeItem"),o=yt(e,"hasItem"),s=e.getKeys;return{...e,getItem(i,a){return Be(i),t(i,a)},setItem(i,a,c){return Be(i),n(i,a,c)},removeItem(i,a){return Be(i),r(i,a)},hasItem(i,a){return Be(i),o(i,a)},getKeys(i,a){return i.length>0&&Be(i),s(i,a)}}}function ht(e){return fa({driver:yo(e)})}import{defineDriver as ma}from"unstorage";function ga(e){try{return JSON.parse(e)}catch{return e}}var ya=ma(e=>{let{client:t}=e;return{name:"helix-kv",async getItem(n){let r=await t.get(n);return r===null?null:JSON.stringify(r)},async setItem(n,r,o){let s=o?.ttl,i=ga(r);s!==void 0?await t.set(n,i,{ttl:s}):await t.set(n,i)},async removeItem(n){await t.delete(n)},async hasItem(n){return await t.has(n)},async getKeys(){throw new Error("KV key listing is not supported")}}});function ho(e){return ya({client:e})}import Sa from"ky";import{z as M}from"zod";function wo(e){return j(e).hosts.api}function ha(e){return`/private/v1/helix/projects/${encodeURIComponent(e)}/storage/kv`}function wa(e){return e.split("/").map(encodeURIComponent).join("/")}function Ke(e,t,n){return`${e}${ha(t)}/${wa(n)}`}var ba=6e4,Qt=M.lazy(()=>M.union([M.string(),M.number(),M.boolean(),M.null(),M.array(Qt),M.record(Qt)])),va=M.object({projectId:M.string(),key:M.string(),value:Qt,type:M.enum(["string","number","boolean","null","array","object"]),organizationId:M.string(),scope:M.string(),createdBy:M.string(),createdAt:M.number(),updatedBy:M.string(),updatedAt:M.number()});function xa(){let e=de(),t=$(),n=!!(e&&e.trim().length>0),r=!!(t&&t.trim().length>0);if(!n&&!r)throw d.missingExecutionCredentials();let o={Accept:"application/json"};return n&&(o[le]=e),r&&(o[U]=t),o}function Aa(e){if(e!==null&&typeof e=="object"){let t=e;if(typeof t.message=="string")return t.message;if(typeof t.error=="string")return t.error}return String(e??"unknown error")}function wt(e,t){throw d.kvCallFailed(e,Aa(t),k(t))}async function St(e,t,n={}){try{let r=await Sa(t,{method:e,headers:xa(),...n.json!==void 0?{json:n.json}:{},throwHttpErrors:!1,timeout:ba}),o=e==="head"?void 0:await K(r);return{status:r.status,body:o}}catch(r){if(r instanceof d)throw r;let o=r instanceof Error?r.message??String(r):String(r);throw d.kvCallFailed(0,o)}}function So(e){let t=wo(e.env),{projectId:n}=e;return{async get(r){let{status:o,body:s}=await St("get",Ke(t,n,r));if(o===404)return null;(o<200||o>=300)&&wt(o,s);let i=va.safeParse(s);if(!i.success)throw d.kvCallFailed(o,"platform returned malformed KeyValueEntry",k(s));return i.data.value},async set(r,o,s){let{status:i,body:a}=await St("put",Ke(t,n,r),{json:s?.ttl!==void 0?{value:o,ttl:s.ttl}:{value:o}});(i<200||i>=300)&&wt(i,a)},async delete(r){let{status:o,body:s}=await St("delete",Ke(t,n,r));o!==204&&wt(o,s)},async has(r){let{status:o,body:s}=await St("head",Ke(t,n,r));if(o===200)return!0;if(o===404)return!1;wt(o,s)}}}function bt(e){return{getItem:t=>e.getItem(t),removeItem:t=>e.removeItem(t),hasItem:t=>e.hasItem(t),setItem:async(t,n,r)=>{let o=r?.ttl;go(n),typeof o=="number"&&mo(o),await e.setItem(t,n,o!==void 0?{ttl:o}:void 0)}}}function Ea(){let e=x();if(e.kind!=="provisioned")throw d.kvRequiresProvisioning();return{projectId:e.projectId,env:e.region}}function bo(e){let t=Ea(),n=e??So(t),r=ht(ho(n));return bt(r)}import{defineDriver as Ia}from"unstorage";var Ra=Ia(e=>{let t=new Map;function n(r){let o=t.get(r);if(o&&o.expiresAt!==void 0&&o.expiresAt<=Date.now()){t.delete(r);return}return o}return{name:"memory-ttl",getItem(r){return n(r)?.value??null},setItem(r,o,s){let i=s?.ttl,a=n(r),c=typeof i=="number"?Date.now()+i*1e3:i===null?void 0:a?.expiresAt;t.set(r,{value:o,expiresAt:c})},removeItem(r){t.delete(r)},hasItem(r){return n(r)!==void 0},getKeys(){return[...t.keys()].filter(r=>n(r)!==void 0)},clear(){t.clear()}}});function vo(){return Ra({})}var Zt;function Ca(){return Zt||(Zt=ht(vo())),Zt}function xo(){return bt(Ca())}function Ta(){return typeof __TRAY_SDK_MODE__<"u"?__TRAY_SDK_MODE__==="lambda":A().mode==="lambda"}function Sp(){return Ta()?bo():xo()}import{createHash as Oa}from"crypto";import{mkdir as _a,readFile as Co,readdir as To,rm as Eo,unlink as Da,writeFile as Io}from"fs/promises";import{dirname as Ma}from"path";async function ka(e){let t=e.getReader(),n=[],r=0;for(;;){let{done:o,value:s}=await t.read();if(o)break;if(s){if(r+=s.byteLength,r>G)throw await t.cancel(),d.filesValueTooLarge(`File exceeds maximum size of ${G} bytes (got more than ${G})`,G);n.push(s)}}return Buffer.concat(n)}async function be(e){return Buffer.isBuffer(e)?e:typeof e=="string"?Buffer.from(e,"utf-8"):e instanceof ReadableStream?ka(e):Buffer.from(e)}var Pa={pdf:"application/pdf",csv:"text/csv",png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",svg:"image/svg+xml",json:"application/json",txt:"text/plain",html:"text/html",htm:"text/html",css:"text/css",js:"application/javascript",xml:"application/xml",zip:"application/zip"},Ao="application/octet-stream";function vt(e){let t=e.lastIndexOf(".");if(t===-1||t===e.length-1)return Ao;let n=e.slice(t+1).toLowerCase();return Pa[n]??Ao}function xe(){let e=A().projectRoot;if(!e)throw d.filesNotAvailable();return e}async function ve(e){try{return await e()}catch(t){if(t instanceof d)throw t;let n=t?.code;throw n?d.filesCallFailed(0,`Local file storage operation failed: ${n}`):d.filesCallFailed(0,"Local file storage operation failed: unknown error")}}function xt(e,t){return{path:e,size:t.size,contentType:t.contentType,lastModified:new Date(t.lastModified),etag:t.etag}}async function en(e){try{let t=await Co(rt(xe(),e),"utf-8");return JSON.parse(t)}catch(t){if(t.code==="ENOENT")return null;throw t}}async function Ro(e){await _a(Ma(e),{recursive:!0})}async function Fa(e,t){let n=ot(e,t),r;try{r=await To(n,{withFileTypes:!0})}catch(o){if(o.code==="ENOENT")return[];throw o}return r.filter(o=>o.isFile()).map(o=>t.length===0?o.name:`${t}/${o.name}`)}async function ko(e,t){let n=ot(e,t),r;try{r=await To(n,{withFileTypes:!0})}catch(s){if(s.code==="ENOENT")return[];throw s}let o=[];for(let s of r){let i=t.length===0?s.name:`${t}/${s.name}`;s.isDirectory()?o.push(...await ko(e,i)):s.isFile()&&o.push(i)}return o}function Po(){return{async put(e,t,n){return ve(async()=>{let r=xe(),o=await be(t),s=n?.contentType??vt(e),i=Oa("sha1").update(o).digest("hex"),a=new Date,c=De(r,e);await Ro(c),await Io(c,o);let l={size:o.byteLength,contentType:s,lastModified:a.toISOString(),etag:i},u=rt(r,e);return await Ro(u),await Io(u,JSON.stringify(l)),xt(e,l)})},async get(e){return ve(async()=>{let t=await en(e);return t?{data:await Co(De(xe(),e)),metadata:xt(e,t)}:null})},async head(e){return ve(async()=>{let t=await en(e);return t?xt(e,t):null})},async delete(e){return ve(async()=>{let t=xe();await Promise.all([De(t,e),rt(t,e)].map(async n=>{try{await Da(n)}catch(r){if(r.code!=="ENOENT")throw r}}))})},async deleteMany(e){return ve(async()=>{let t=xe(),n=await ko(t,e);return await Promise.all([Eo(ot(t,e),{recursive:!0,force:!0}),Eo(Xn(t,e),{recursive:!0,force:!0})]),{deleted:n.length}})},async list(e,t){return ve(async()=>{let n=xe(),r=t?.limit??100,s=(await Fa(n,e??"")).slice(0,r);return{files:(await Promise.all(s.map(async a=>{let c=await en(a);return c?xt(a,c):null}))).filter(a=>a!==null),cursor:null}})},async getUploadUrl(e,t){let n=A().devServerUrl;if(!n)throw d.filesNotAvailable();return{url:`${n}/_helix/files/${e}`,expiresAt:me(t?.expiresIn)}},async getDownloadUrl(e,t){let n=A().devServerUrl;if(!n)throw d.filesNotAvailable();return{url:`${n}/_helix/files/${e}`,expiresAt:me(t?.expiresIn)}}}}import{createHash as Ka}from"crypto";function At(e){return j(e).hosts.api}function La(e){return`/private/v1/helix/files/projects/${encodeURIComponent(e)}`}function He(e,t){return`${e}${La(t)}`}function Ae(e,t,n){return`${He(e,t)}/${encodeURIComponent(n)}`}function Et(e,t,n){return`${Ae(e,t,n)}/upload`}function Oo(e,t,n){return`${Ae(e,t,n)}/download`}function _o(e,t,n){return`${Ae(e,t,n)}/signed-url`}function Do(e,t,n,r){let o=new URLSearchParams({name:r});return n&&o.set("parentFolder",n),`${He(e,t)}/file?${o.toString()}`}function Mo(e,t,n,r){let o=new URLSearchParams({limit:String(r)});return n&&o.set("id",n),`${He(e,t)}?${o.toString()}`}import nn from"ky";import{z as _}from"zod";var rn=6e4,Fo=_.object({id:_.string(),workspaceId:_.string(),projectId:_.string(),parentFolder:_.string().nullable().optional(),name:_.string(),size:_.number().nullable().optional(),objectType:_.enum(["Folder","File"]),contentType:_.string().nullable().optional(),createdAt:_.string(),updatedAt:_.string()}),Na=_.object({signedURL:_.string()}),Ua=_.object({path:_.array(_.object({id:_.string(),name:_.string()})),elements:_.array(Fo)});function on(){let e=de(),t=$(),n=!!(e&&e.trim().length>0),r=!!(t&&t.trim().length>0);if(!n&&!r)throw d.missingExecutionCredentials();let o={Accept:"application/json"};return n&&(o[le]=e),r&&(o[U]=t),o}function Lo(e){if(e!==null&&typeof e=="object"){let t=e;if(typeof t.message=="string")return t.message;if(typeof t.error=="string")return t.error}return String(e??"unknown error")}function Z(e,t){throw d.filesCallFailed(e,Lo(t),k(t))}function $a(e,t){return e===400&&Lo(t).toLowerCase()==="resource not found"}async function ja(e){let t=new Response(e),n=t.headers.get("content-type")??"multipart/form-data",r=await t.arrayBuffer();return{body:Buffer.from(r),contentType:n}}async function Ee(e,t,n={}){try{let r=await nn(t,{method:e,headers:on(),...n.json!==void 0?{json:n.json}:{},throwHttpErrors:!1,timeout:rn}),o=await K(r);return{status:r.status,body:o}}catch(r){if(r instanceof d)throw r;let o=r instanceof Error?r.message:String(r);throw d.filesCallFailed(0,o)}}function tn(e,t){let n=Fo.safeParse(t);if(!n.success)throw d.filesCallFailed(e,"platform returned malformed ObjectMetadata",k(t));return n.data}function No(e){let t=At(e.env),{projectId:n}=e;return{async createMetadata(r){let{status:o,body:s}=await Ee("post",He(t,n),{json:r});return(o<200||o>=300)&&Z(o,s),tn(o,s)},async getByName(r,o){let{status:s,body:i}=await Ee("get",Do(t,n,r,o));return s===404||$a(s,i)?null:((s<200||s>=300)&&Z(s,i),tn(s,i))},async getById(r){let{status:o,body:s}=await Ee("get",Ae(t,n,r));return o===404?null:((o<200||o>=300)&&Z(o,s),tn(o,s))},async listChildren(r,o){let{status:s,body:i}=await Ee("get",Mo(t,n,r,o));(s<200||s>=300)&&Z(s,i);let a=Ua.safeParse(i);if(!a.success)throw d.filesCallFailed(s,"platform returned malformed listing",k(i));return a.data},async uploadContent(r,o,s,i){let a=new FormData;a.append("fileUploadContentInput",new Blob([new Uint8Array(o)],{type:i}),s);let{body:c,contentType:l}=await ja(a),u;try{u=await nn(Et(t,n,r),{method:"post",headers:{...on(),"content-type":l},body:new Uint8Array(c),throwHttpErrors:!1,timeout:rn})}catch(f){if(f instanceof d)throw f;let m=f instanceof Error?f.message:String(f);throw d.filesCallFailed(0,m)}let p=await K(u);(u.status<200||u.status>=300)&&Z(u.status,p)},async downloadContent(r){let o;try{o=await nn(Oo(t,n,r),{method:"get",headers:on(),throwHttpErrors:!1,timeout:rn})}catch(i){if(i instanceof d)throw i;let a=i instanceof Error?i.message:String(i);throw d.filesCallFailed(0,a)}if(o.status<200||o.status>=300){let i=await K(o);Z(o.status,i)}let s=await o.arrayBuffer();return Buffer.from(s)},async getSignedDownloadUrl(r){let{status:o,body:s}=await Ee("get",_o(t,n,r));(o<200||o>=300)&&Z(o,s);let i=Na.safeParse(s);if(!i.success)throw d.filesCallFailed(o,"platform returned malformed signed URL response",k(s));return i.data.signedURL},async deleteById(r){let{status:o,body:s}=await Ee("delete",Ae(t,n,r));o===204||o===404||(o<200||o>=300)&&Z(o,s)}}}function sn(e){return e.split("/").filter(t=>t.length>0)}function an(e){return e instanceof d&&e.detail.kind==="files_call_failed"&&e.detail.status===409}async function Ba(e,t,n){let r=await e.getByName(t,n);if(r)return r;try{return await e.createMetadata({parentFolder:t,objectType:"Folder",name:n})}catch(o){if(an(o)){let s=await e.getByName(t,n);if(s)return s}throw o}}async function cn(e,t){let n=sn(t),r=n[n.length-1],o;for(let s of n.slice(0,-1))o=(await Ba(e,o,s)).id;return{parentFolder:o,name:r}}async function qe(e,t){let n=sn(t),r=n[n.length-1],o;for(let s of n.slice(0,-1)){let i=await e.getByName(o,s);if(!i||i.objectType!=="Folder")return null;o=i.id}return{parentFolder:o,name:r}}async function ln(e,t){if(t.length===0)return;let n=sn(t),r;for(let o of n){let s=await e.getByName(r,o);if(!s||s.objectType!=="Folder")return null;r=s.id}return r}var Ha=500,qa=8;async function Va(e,t,n){let r=new Array(e.length),o=0;async function s(){for(;o<e.length;){let i=o++;r[i]=await n(e[i])}}return await Promise.all(Array.from({length:Math.min(t,e.length)},s)),r}function za(){let e=x();if(e.kind!=="provisioned")throw d.filesRequiresProvisioning();return{projectId:e.projectId,env:e.region}}function Ga(e){return Ka("sha1").update(`${e.id}:${e.updatedAt}:${e.size??0}`).digest("hex")}function It(e,t,n){return{path:e,size:t.size??0,contentType:t.contentType??n??"application/octet-stream",lastModified:new Date(t.updatedAt),etag:Ga(t)}}async function Uo(e,t,n,r){try{return await e.createMetadata({parentFolder:t,objectType:"File",contentType:r,name:n})}catch(o){if(an(o)){let s=await e.getByName(t,n);if(s)return s}throw o}}async function $o(e,t){let{elements:n}=await e.listChildren(t,Ha);return(await Va(n,qa,async o=>{let s=o.objectType==="Folder"?await $o(e,o.id):1;return await e.deleteById(o.id),s})).reduce((o,s)=>o+s,0)}function jo(e){let t=za(),n=e??No(t),r=At(t.env),{projectId:o}=t;return{async put(s,i,a){let{parentFolder:c,name:l}=await cn(n,s),u=await be(i),p=a?.contentType??vt(s),f=await n.getByName(c,l);if(f&&f.objectType!=="File")throw d.filesCallFailed(409,`A folder already exists at "${s}"`);let m=f??await Uo(n,c,l,p);await n.uploadContent(m.id,u,l,p);let S=await n.getById(m.id);return It(s,S??m,p)},async get(s){let i=await qe(n,s);if(!i)return null;let a=await n.getByName(i.parentFolder,i.name);return!a||a.objectType!=="File"?null:{data:await n.downloadContent(a.id),metadata:It(s,a)}},async head(s){let i=await qe(n,s);if(!i)return null;let a=await n.getByName(i.parentFolder,i.name);return!a||a.objectType!=="File"?null:It(s,a)},async delete(s){let i=await qe(n,s);if(!i)return;let a=await n.getByName(i.parentFolder,i.name);a&&await n.deleteById(a.id)},async deleteMany(s){let i=await ln(n,s);if(i===null)return{deleted:0};let a=await $o(n,i);return s.length>0&&i!==void 0&&await n.deleteById(i),{deleted:a}},async list(s,i){let a=await ln(n,s??"");if(a===null)return{files:[],cursor:null};let c=i?.limit??100,{elements:l}=await n.listChildren(a,c);return{files:l.filter(p=>p.objectType==="File").map(p=>It(s?`${s}/${p.name}`:p.name,p)),cursor:null}},async getUploadUrl(s,i){let{parentFolder:a,name:c}=await cn(n,s),u=await n.getByName(a,c)??await Uo(n,a,c,i?.contentType);return{url:Et(r,o,u.id),expiresAt:me(i?.expiresIn)}},async getDownloadUrl(s,i){let a=await qe(n,s),c=a?await n.getByName(a.parentFolder,a.name):null;if(!c||c.objectType!=="File")throw d.filesCallFailed(404,`File not found: ${s}`);return{url:await n.getSignedDownloadUrl(c.id),expiresAt:me(i?.expiresIn)}}}}function dn(e,t){let n=t?.maxPathBytes;return{async put(r,o,s){ie(r,n);let i=await be(o);return Jn(i.byteLength),e.put(r,i,s)},async get(r){return ie(r,n),e.get(r)},async head(r){return ie(r,n),e.head(r)},async delete(r){return ie(r,n),e.delete(r)},async deleteMany(r){let o=Mt(r);return tt(o,n),e.deleteMany(o)},async list(r,o){let s=Mt(r??"");return tt(s,n),e.list(s,o)},async getUploadUrl(r,o){return ie(r,n),e.getUploadUrl(r,o)},async getDownloadUrl(r,o){return ie(r,n),e.getDownloadUrl(r,o)}}}function Ja(){return typeof __TRAY_SDK_MODE__<"u"?__TRAY_SDK_MODE__==="lambda":A().mode==="lambda"}function pf(){if(Ja())return dn(jo());let e=A().projectRoot;return dn(Po(),{maxPathBytes:e?Wn(e):void 0})}import Xa from"ky";function Bo(e){return j(e).hosts.api}function Wa(){return"/private/v1/helix/function-calls"}function Ko(e){return`${e}${Wa()}`}var Ya=5e3;function Qa(){let e=$();if(!!!(e&&e.trim().length>0))throw d.callFunctionMissingExecutionJwt();return{Accept:"application/json",[U]:e}}function Za(e,t){throw d.callFunctionCallFailed(e,ec(t),k(t))}function ec(e){if(e!==null&&typeof e=="object"){let t=e;if(typeof t.message=="string")return t.message;if(typeof t.error=="string")return t.error}return String(e??"unknown error")}function Ho(e){let t=Bo(e.env);return{async callAsync(n,r){let o,s;try{let i=await Xa(Ko(t),{method:"post",headers:Qa(),json:{functionPath:n,input:r},throwHttpErrors:!1,timeout:Ya});o=i.status,s=await K(i)}catch(i){if(i instanceof d)throw i;let a=i instanceof Error?i.message??String(i):String(i);throw d.callFunctionCallFailed(0,a)}(o<200||o>=300)&&Za(o,s)}}}var qo=1024;function Rt(e){if(typeof e!="string"||e.trim().length===0)throw d.callFunctionPathInvalid("functionPath must be a non-empty string");if(e.length>qo)throw d.callFunctionPathInvalid(`functionPath must be at most ${qo} characters`)}function tc(){let e=x();if(e.kind!=="provisioned")throw d.callFunctionRequiresProvisioning();return{env:e.region}}function Vo(e){return async function(n,r){Rt(n),await(e??Ho(tc())).callAsync(n,r)}}function zo(){return async function(t,n){Rt(t);let r=A().devServerUrl;if(!r)throw d.callFunctionNotAvailable();let o=t.startsWith("/")?t:`/${t}`,s=Zr();fetch(`${r}${o}`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(n??{})}).then(i=>{i.ok||s.warn("ctx.callFunctionAsync: dev-mode dispatch returned a non-2xx response",{functionPath:t,status:i.status})}).catch(i=>{s.warn("ctx.callFunctionAsync: dev-mode dispatch failed",{functionPath:t,error:i instanceof Error?i.message:String(i)})})}}function nc(){return typeof __TRAY_SDK_MODE__<"u"?__TRAY_SDK_MODE__==="lambda":A().mode==="lambda"}function Uf(){return nc()?Vo():zo()}export{rc as a,oc as b,sc as c,x as d,ic as e,Kn as f,gs as g,O as h,q as i,bs as j,vs as k,F as l,xs as m,Mc as n,Zr as o,Xd as p,gu as q,ca as r,Sp as s,ie as t,De as u,rt as v,pf as w,Uf as x,Kc as y,Ft as z,Zn as A,er as B,tr as C,Me as D,nr as E,Yc as F,sr as G,Lt as H,Ns as I,js as J,Bs as K,Qc as L,Ks as M,Zc as N,Gl as O,ir as P,rl as Q,ar as R,I as S,ll as T,dl as U,Fe as V,ul as W,pl as X,ur as Y,hl as Z,wl as _,X as $,vl as aa,ki as ba,Li as ca,Qr as da,Q as ea,Kd as fa,Hd as ga};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z, ZodType } from 'zod';
|
|
2
|
-
import { P as PlatformContext } from './types-
|
|
2
|
+
import { P as PlatformContext } from './types-CRUtefiq.js';
|
|
3
3
|
|
|
4
4
|
interface SdkRuntimeConfig {
|
|
5
5
|
/**
|
|
@@ -658,7 +658,18 @@ declare const agentConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
658
658
|
tools: z.ZodOptional<z.ZodArray<z.ZodType<HelixToolLike, z.ZodTypeDef, HelixToolLike>, "many">>;
|
|
659
659
|
agents: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
660
660
|
memory: z.ZodOptional<z.ZodObject<{
|
|
661
|
+
/**
|
|
662
|
+
* Cap on the messages the MODEL is sent each turn (default 200) — the
|
|
663
|
+
* latest stretch of the conversation, always starting on a user
|
|
664
|
+
* message so no turn is cut in half. It does not limit what is
|
|
665
|
+
* stored: the session keeps the whole conversation.
|
|
666
|
+
*/
|
|
661
667
|
maxSessionMessages: z.ZodOptional<z.ZodNumber>;
|
|
668
|
+
/**
|
|
669
|
+
* Opt-in idle retention, in seconds: a session untouched for this
|
|
670
|
+
* long expires. Omitted (the default) = sessions never expire, so a
|
|
671
|
+
* user can always return to an earlier conversation.
|
|
672
|
+
*/
|
|
662
673
|
ttl: z.ZodOptional<z.ZodNumber>;
|
|
663
674
|
/**
|
|
664
675
|
* `"user"` declares the agent is executed BY a user: sessions are
|
|
@@ -670,13 +681,13 @@ declare const agentConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
670
681
|
*/
|
|
671
682
|
scope: z.ZodOptional<z.ZodEnum<["user", "project"]>>;
|
|
672
683
|
}, "strip", z.ZodTypeAny, {
|
|
673
|
-
maxSessionMessages?: number | undefined;
|
|
674
|
-
ttl?: number | undefined;
|
|
675
684
|
scope?: "user" | "project" | undefined;
|
|
676
|
-
}, {
|
|
677
|
-
maxSessionMessages?: number | undefined;
|
|
678
685
|
ttl?: number | undefined;
|
|
686
|
+
maxSessionMessages?: number | undefined;
|
|
687
|
+
}, {
|
|
679
688
|
scope?: "user" | "project" | undefined;
|
|
689
|
+
ttl?: number | undefined;
|
|
690
|
+
maxSessionMessages?: number | undefined;
|
|
680
691
|
}>>;
|
|
681
692
|
limits: z.ZodOptional<z.ZodObject<{
|
|
682
693
|
maxIterations: z.ZodOptional<z.ZodNumber>;
|
|
@@ -702,9 +713,9 @@ declare const agentConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
702
713
|
instructionsFile?: string | undefined;
|
|
703
714
|
agents?: string[] | undefined;
|
|
704
715
|
memory?: {
|
|
705
|
-
maxSessionMessages?: number | undefined;
|
|
706
|
-
ttl?: number | undefined;
|
|
707
716
|
scope?: "user" | "project" | undefined;
|
|
717
|
+
ttl?: number | undefined;
|
|
718
|
+
maxSessionMessages?: number | undefined;
|
|
708
719
|
} | undefined;
|
|
709
720
|
limits?: {
|
|
710
721
|
maxIterations?: number | undefined;
|
|
@@ -724,9 +735,9 @@ declare const agentConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
724
735
|
instructionsFile?: string | undefined;
|
|
725
736
|
agents?: string[] | undefined;
|
|
726
737
|
memory?: {
|
|
727
|
-
maxSessionMessages?: number | undefined;
|
|
728
|
-
ttl?: number | undefined;
|
|
729
738
|
scope?: "user" | "project" | undefined;
|
|
739
|
+
ttl?: number | undefined;
|
|
740
|
+
maxSessionMessages?: number | undefined;
|
|
730
741
|
} | undefined;
|
|
731
742
|
limits?: {
|
|
732
743
|
maxIterations?: number | undefined;
|
|
@@ -746,9 +757,9 @@ declare const agentConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
746
757
|
instructionsFile?: string | undefined;
|
|
747
758
|
agents?: string[] | undefined;
|
|
748
759
|
memory?: {
|
|
749
|
-
maxSessionMessages?: number | undefined;
|
|
750
|
-
ttl?: number | undefined;
|
|
751
760
|
scope?: "user" | "project" | undefined;
|
|
761
|
+
ttl?: number | undefined;
|
|
762
|
+
maxSessionMessages?: number | undefined;
|
|
752
763
|
} | undefined;
|
|
753
764
|
limits?: {
|
|
754
765
|
maxIterations?: number | undefined;
|
|
@@ -768,9 +779,9 @@ declare const agentConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
768
779
|
instructionsFile?: string | undefined;
|
|
769
780
|
agents?: string[] | undefined;
|
|
770
781
|
memory?: {
|
|
771
|
-
maxSessionMessages?: number | undefined;
|
|
772
|
-
ttl?: number | undefined;
|
|
773
782
|
scope?: "user" | "project" | undefined;
|
|
783
|
+
ttl?: number | undefined;
|
|
784
|
+
maxSessionMessages?: number | undefined;
|
|
774
785
|
} | undefined;
|
|
775
786
|
limits?: {
|
|
776
787
|
maxIterations?: number | undefined;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as h3 from 'h3';
|
|
2
2
|
import { ZodType } from 'zod';
|
|
3
|
-
import { F as FunctionHandler, D as DefineFunctionOptions, a as DefineScheduleConfig, S as ScheduleDefinition, P as PlatformContext } from './types-
|
|
4
|
-
export { A as AgentApprovalDecision, b as AgentCallOptions, c as AgentClient, d as AgentPendingApproval, e as AgentResult, f as AgentSession, g as
|
|
5
|
-
import { T as TrayConfig, L as LoadedTrayConfig, W as WatchErrorPhase } from './define-agent-
|
|
6
|
-
export { A as AGENT_DEFINITION_KIND, a as AI_SERVICES, b as AgentDefinition, c as AgentDefinitionConfig, d as AgentSessionsConfig, e as AiProviderEntry, f as AiService, C as ConfigFileOptions, D as DefineToolConfig, H as HELIX_CONFIG_ENV, g as HelixTool, h as HelixToolLike, P as ProvisionedTrayConfig, S as SdkRuntimeConfig, i as TOOL_DEFINITION_KIND, U as UnprovisionedTrayConfig, j as WORKSPACE_ID_REQUIRED_CODE, k as WorkspaceIdRequiredError, l as agentSessionsSchema, m as aiProviderEntrySchema, n as defineAgent, o as defineTool, p as getSdkConfig, q as isAgentDefinition, r as isToolDefinition, s as loadConfig, t as loadedTrayConfigSchema, u as projectIdSchema, v as requireWorkspaceId, w as resolveConfigFile, x as resolveConfigOverride, y as workspaceIdSchema } from './define-agent-
|
|
3
|
+
import { F as FunctionHandler, D as DefineFunctionOptions, a as DefineScheduleConfig, S as ScheduleDefinition, P as PlatformContext } from './types-CRUtefiq.js';
|
|
4
|
+
export { A as AgentApprovalDecision, b as AgentCallOptions, c as AgentClient, d as AgentPendingApproval, e as AgentResult, f as AgentSession, g as AgentSessionPage, h as AgentSessionPageOptions, i as AgentSessionSummary, j as AgentSessionsList, k as AgentStreamResult, l as AiEmbeddingModelInstance, m as AiImageModelInstance, n as AiLanguageModelInstance, o as AiSpeechModelInstance, p as AiTranscriptionModelInstance, B as BrokerAuthedClient, q as BrokerCallOptions, r as BrokerCallResult, C as CallFunctionAsync, s as DbCallParameters, t as DbClient, u as FileSystemClient, H as HelixAI, v as HelixAIProvider, w as HelixAgent, x as HelixCost, y as HelixResultMeta, z as HttpClient, K as KeyValueStore, L as Logger, E as S3SignOptions, G as S3SignResult, I as ScheduleContext, J as ScheduleHandler, M as ScheduleTrigger, N as SqlBuilder, T as TrayContext, U as UnvalidatedInput } from './types-CRUtefiq.js';
|
|
5
|
+
import { T as TrayConfig, L as LoadedTrayConfig, W as WatchErrorPhase } from './define-agent-C0qXub7P.js';
|
|
6
|
+
export { A as AGENT_DEFINITION_KIND, a as AI_SERVICES, b as AgentDefinition, c as AgentDefinitionConfig, d as AgentSessionsConfig, e as AiProviderEntry, f as AiService, C as ConfigFileOptions, D as DefineToolConfig, H as HELIX_CONFIG_ENV, g as HelixTool, h as HelixToolLike, P as ProvisionedTrayConfig, S as SdkRuntimeConfig, i as TOOL_DEFINITION_KIND, U as UnprovisionedTrayConfig, j as WORKSPACE_ID_REQUIRED_CODE, k as WorkspaceIdRequiredError, l as agentSessionsSchema, m as aiProviderEntrySchema, n as defineAgent, o as defineTool, p as getSdkConfig, q as isAgentDefinition, r as isToolDefinition, s as loadConfig, t as loadedTrayConfigSchema, u as projectIdSchema, v as requireWorkspaceId, w as resolveConfigFile, x as resolveConfigOverride, y as workspaceIdSchema } from './define-agent-C0qXub7P.js';
|
|
7
7
|
export { a as REGION_VALUES, R as Region, r as regionSchema } from './region-schema-COfWyGI9.js';
|
|
8
8
|
import { StopCondition, ToolSet } from 'ai';
|
|
9
9
|
export { EmbedManyResult, EmbedResult, EmbeddingModel, FinishReason, GenerateImageResult, GenerateObjectResult, GenerateTextResult, ImageModel, LanguageModel, LanguageModelUsage, ModelMessage, Output, PrepareStepFunction, SpeechModel, SpeechResult, StopCondition, StreamObjectResult, StreamTextResult, TextStreamPart, ToolChoice, ToolSet, TranscriptionModel, TranscriptionResult, UIMessage, convertToModelMessages, cosineSimilarity, dynamicTool, hasToolCall, jsonSchema, smoothStream, stepCountIs, tool, zodSchema } from 'ai';
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{A as le,B as fe,C as pe,D as ge,E as me,F as he,G as ye,H as x,I as k,J as V,K as z,L as y,M as Ce,N as ve,O as B,P as Se,Q as we,R as Ee,Y as _e,Z as xe,_ as ke,ba as Te,ca as G,da as be,ea as Ie,f as A,fa as Re,g as _,ga as Ae,h as P,i as h,j as H,k as F,l as D,m as
|
|
1
|
+
import{A as le,B as fe,C as pe,D as ge,E as me,F as he,G as ye,H as x,I as k,J as V,K as z,L as y,M as Ce,N as ve,O as B,P as Se,Q as we,R as Ee,Y as _e,Z as xe,_ as ke,ba as Te,ca as G,da as be,ea as Ie,f as A,fa as Re,g as _,ga as Ae,h as P,i as h,j as H,k as F,l as D,m as O,n as ae,o as j,p as M,q,r as N,s as Z,w as K,x as $,y as ue,z as ce}from"./chunk-D44IVAUR.js";import{a as L,b as de}from"./chunk-WUCX7RZO.js";import{d as E,r as W,s as U}from"./chunk-3T2WZMJJ.js";import{randomUUID as We}from"crypto";import{SpanStatusCode as ee,SpanKind as Ue}from"@opentelemetry/api";import{defineEventHandler as qe,getMethod as Ne,getRequestURL as Ze,getHeaders as re,getHeader as te}from"h3";import{readBody as Pe,getQuery as He,getRouterParams as Fe}from"h3";async function J(e,t){let r=await De(e),n=He(e),o=Fe(e)??{},s={...n,...r,...o};return t?Oe(s,t):s}async function De(e){try{let t=await Pe(e);return t&&typeof t=="object"?t:(t!=null&&t!==""&&console.warn("[helix-sdk] Request body present but not a JSON object \u2014 ignored"),{})}catch(t){if(t instanceof Error&&"statusCode"in t&&t.statusCode===400){let n=new Error("Malformed request body");throw n.statusCode=400,n.data={message:"Request body is not valid JSON"},n}let r=e.method?.toUpperCase();if(r==="GET"||r==="HEAD"||r==="DELETE")return{};throw t}}function Oe(e,t){let r=t.safeParse(e);if(!r.success){let n=new Error("Input validation failed");throw n.statusCode=400,n.data=r.error.flatten(),n}return r.data}var C=class extends Error{statusCode;constructor(t,r){super(r),this.statusCode=t,this.name="HttpError"}};function Q(e){return t=>{e.node.res.statusCode=t}}function X(){return(e,t)=>{throw new C(e,t)}}function Y(e,t){let{statusCode:r,message:n}=Le(t.detail);return e.node.res.statusCode=r,{error:n,statusCode:r}}function Le(e){switch(e.kind){case"unknown_alias":return{statusCode:400,message:"Unknown authentication alias"};case"input_validation_failed":return{statusCode:400,message:"Input validation failed"};case"output_validation_failed":return{statusCode:500,message:"Internal server error"};case"config_load_failed":return{statusCode:500,message:"Configuration error"};case"broker_error":return{statusCode:502,message:"Broker error"};case"unsupported_body_type":return{statusCode:400,message:"Unsupported request body type"};case"unsupported_scheme":return{statusCode:400,message:"Unsupported URL scheme"};case"missing_execution_credentials":return{statusCode:401,message:"Missing execution credentials"};case"missing_tray_token":return{statusCode:500,message:"Missing Tray token"};case"db_call_failed":return{statusCode:502,message:e.message};case"db_query_failed":return{statusCode:502,message:`Database query failed: ${e.message}`};case"db_invalid_parameters":return{statusCode:400,message:e.message};case"kv_key_invalid":return{statusCode:400,message:e.message};case"kv_value_invalid":return{statusCode:400,message:e.message};case"kv_value_too_large":return{statusCode:400,message:e.message};case"kv_ttl_invalid":return{statusCode:400,message:e.message};case"kv_not_available":return{statusCode:501,message:"Key-value store is not available in this environment"};case"kv_call_failed":return{statusCode:502,message:"Key-value store request failed"};case"kv_requires_provisioning":return{statusCode:500,message:"Internal server error"};case"files_path_invalid":return{statusCode:400,message:e.message};case"files_value_invalid":return{statusCode:400,message:e.message};case"files_value_too_large":return{statusCode:400,message:e.message};case"files_not_available":return{statusCode:501,message:"File storage is not available in this environment"};case"files_call_failed":return{statusCode:502,message:"File storage request failed"};case"files_requires_provisioning":return{statusCode:500,message:"Internal server error"};case"call_function_path_invalid":return{statusCode:400,message:e.message};case"call_function_call_failed":return{statusCode:502,message:"Async function call failed"};case"call_function_requires_provisioning":return{statusCode:500,message:"Internal server error"};case"call_function_not_available":return{statusCode:501,message:"callFunctionAsync is not available in this environment"};case"call_function_missing_execution_jwt":return{statusCode:401,message:"Missing execution credentials"};case"ai_unsupported_service":case"ai_model_id_required":case"ai_model_instance_required":case"ai_provider_not_configured":case"ai_foreign_model_rejected":case"agent_sessions_failed":return{statusCode:500,message:e.kind==="ai_unsupported_service"?`AI service not supported for alias "${e.alias}"`:"Internal server error"};default:return{statusCode:500,message:`Unhandled error kind: ${e.kind}`}}}var je=["authorization","x-tray-token","set-cookie","x-kong-request-id","traceparent","x-real-ip","cookie"];function Me(e){return e.toLowerCase().includes("tray_lid")}function T(e){let t={};for(let[r,n]of Object.entries(e))if(!je.includes(r.toLowerCase())){if(r.toLowerCase()==="cookie"&&n){let o=n.split(";").map(s=>s.trim()).filter(s=>{let d=s.split("=")[0].trim();return!Me(d)}).join("; ");o&&(t[r]=o);continue}t[r]=n}return t}function Ke(e,t){let{inputSchema:r,outputSchema:n}=Je(t),o=e;return qe(async s=>{let d=E(),{executionId:a,userId:i,deploymentId:f}=Qe(d,s),c=d.mode==="lambda"?d.parentExecutionId??null:null,p=Date.now(),v=new Date().toISOString(),l=Ne(s),u=Ze(s).pathname,g=M(),m=j(),se=`${l} ${u}`;H();let R={hasDb:!1,hasExternal:!1,hasAuth:!1,hasAi:!1,hasError:!1};return $e(()=>_.run(R,()=>A.run(a,async()=>{let S=await Ve(s,r);if(!S.ok)return{response:S.response,errored:!1,errorMessage:null};let ie=Ye(s,S.input,g,m,l,u,a,f,i,c);return ze(o,ie,n,s,m,a,f,{method:l,path:u,rawInput:S.input})})),{executionId:a,deploymentId:f,routeOrJob:se,startedAt:v,startMs:p,userId:i,flags:R})})}async function $e(e,t){let r=!1,n=null;try{let o=await e();return r=o.errored,n=o.errorMessage,o.response}finally{O({...t,errored:r,errorMessage:n}),await F()}}async function Ve(e,t){try{return{ok:!0,input:await J(e,t)}}catch(r){let n=Xe(e,r);if(n)return{ok:!1,response:n};throw r}}async function ze(e,t,r,n,o,s,d,a){return D.startActiveSpan("function",{root:!0,kind:Ue.SERVER,attributes:{method:a.method,route:a.path,executionId:s,...d?{deploymentId:d}:{}}},async i=>{t.traceId=i.spanContext().traceId;let f=T(re(n));h(i,"input",a.rawInput),h(i,"request",{method:a.method,path:a.path,headers:f,body:a.rawInput});let c=!1,p=null,v,l;try{let u=await L.run(t,()=>e(t));if(v=u,u==null)n.node.res.statusCode=204,l="";else if(u instanceof Response)l=u;else if(r){let g=r.safeParse(u);if(!g.success){let m=Object.keys(g.error.flatten().fieldErrors);throw o.error("Output validation failed",{fields:m,executionId:s}),W.outputValidationFailed(m)}l=g.data}else l=u}catch(u){c=!0,p=u instanceof Error?u.message:String(u),P("hasError"),l=Be(u,n,o,s)}finally{Ge(i,n,{errored:c,errorMessage:p,handlerResult:v,response:l})}return{response:l,errored:c,errorMessage:p}})}function Be(e,t,r,n){if(e instanceof C)return t.node.res.statusCode=e.statusCode,{error:e.message,statusCode:e.statusCode};if(U(e))return Y(t,e);r.error("Unhandled error in handler",{error:e instanceof Error?e.message:String(e),executionId:n}),t.node.res.statusCode=500;let o=process.env.NODE_ENV==="development";return{error:o&&e instanceof Error?e.message:"Internal server error",statusCode:500,...o&&e instanceof Error&&e.stack?{stack:e.stack}:{}}}function Ge(e,t,r){e.setAttribute("statusCode",t.node.res.statusCode),!r.errored&&r.handlerResult!==void 0&&h(e,"output",r.handlerResult),h(e,"response",r.response);let n=_.getStore();e.setAttribute("hasAuth",n?.hasAuth??!1),e.setAttribute("hasAi",n?.hasAi??!1),e.setAttribute("hasExternal",n?.hasExternal??!1),e.setAttribute("hasDb",n?.hasDb??!1),e.setAttribute("status",r.errored?"error":"success");let o=r.errored||(n?.hasError??!1);e.setStatus({code:o?ee.ERROR:ee.OK,...r.errorMessage?{message:r.errorMessage}:{}}),e.end()}function Je(e){if(!e)return{inputSchema:void 0,outputSchema:void 0};if(e instanceof Object&&"_def"in e)return{inputSchema:e,outputSchema:void 0};if(typeof e=="object"&&("input"in e||"output"in e)){let t=e;return{inputSchema:t.input,outputSchema:t.output}}return{inputSchema:e,outputSchema:void 0}}function Qe(e,t){let r=e.mode==="lambda",n=(r?e.executionId:te(t,"x-tray-execution-id"))??We(),o=(r?e.userId:te(t,"x-tray-user-id"))??null,s=r?e.deploymentId??null:null;return{executionId:n,userId:o,deploymentId:s}}function Xe(e,t){if(!(t instanceof Error)||!("statusCode"in t)||!("data"in t))return null;let r=t.statusCode,n=t.data;e.node.res.statusCode=r;let o=n&&typeof n=="object"&&"fieldErrors"in n?n.fieldErrors:void 0;return{error:"Input validation failed",statusCode:r,...o?{fields:Object.keys(o)}:{}}}function Ye(e,t,r,n,o,s,d,a,i,f){return{input:t,method:o,path:s,headers:T(re(e)),http:q(),db:c=>N(c),kv:()=>Z(),files:()=>K(),callFunctionAsync:$(),ai:B(),agent:c=>G(c),log:n,config:r,status:Q(e),error:X(),state:{},request:e,executionId:d,deploymentId:a,userId:i,parentExecutionId:f,identity:i!==null?{user:{id:i}}:null,traceId:""}}function et(e){return e}import{existsSync as tt,watch as rt,writeSync as nt}from"fs";import{basename as ot,dirname as st,join as it,resolve as w}from"path";import{watchConfig as at}from"c12";function dt(e,t){let r=e instanceof Error?e.message:String(e);nt(2,`[helix-watch] ${t.phase} error: ${r}
|
|
2
2
|
`)}function b(){return{kind:"unprovisioned",name:"",authentications:{},config:{},region:"us1"}}var ut=/^(?:helix|tray)\.config\.(?:m|c)?[jt]s$/,ne=new Set;function oe(e,t){return k(e,{configFile:t})!==void 0}async function ct(e,t,r){if(oe(e.cwd,t))try{return{current:await y(e.cwd,{configFile:t}),initialLoadSucceeded:!0}}catch(n){return r(n,{phase:"reload"}),{current:b(),initialLoadSucceeded:!1}}if(e.watch){let n=t!==void 0?w(e.cwd,t):w(e.cwd);ne.has(n)||(process.stderr.write(t!==void 0?`warning: config file ${w(e.cwd,t)} not found; tray running with default config
|
|
3
3
|
`:`warning: no helix.config.ts found at ${e.cwd}; tray running with default config \u2014 create one via \`helix init\`
|
|
4
4
|
`),ne.add(n))}return{current:b(),initialLoadSucceeded:!1}}var I=class{constructor(t,r,n,o){this.cwd=t;this.configFile=r;this.onError=n;this.emit=o}cwd;configFile;onError;emit;stopped=!1;directoryWatcher=null;c12Unwatch=null;c12AttachPromise=null;updateChain=Promise.resolve();start(t){t?this.attachC12Watcher():this.attachCreationWatcher()}watcherReady(){return this.c12AttachPromise===null?Promise.resolve():this.c12AttachPromise.catch(()=>{})}async stop(){this.stopped=!0,this.directoryWatcher&&(this.directoryWatcher.close(),this.directoryWatcher=null),this.c12AttachPromise&&await this.c12AttachPromise.catch(t=>this.onError(t,{phase:"attach"})),this.c12Unwatch&&(await this.c12Unwatch(),this.c12Unwatch=null)}attachC12Watcher(){this.c12AttachPromise===null&&(this.c12AttachPromise=at({...V(this.cwd,{configFile:this.configFile}),onUpdate:({newConfig:t})=>{this.stopped||(this.updateChain=this.updateChain.then(async()=>{if(this.stopped)return;let r;try{r=z(t.config,this.cwd)}catch(n){this.onError(n,{phase:"validation"});return}try{this.emit(r)}catch(n){this.onError(n,{phase:"reload"})}}))}}).then(async t=>{if(this.stopped){t.unwatch();return}this.c12Unwatch=t.unwatch;let{watch:r}=await import("chokidar"),n=r(this.cwd,{persistent:!1,depth:0});try{await new Promise((o,s)=>{n.once("ready",o),n.once("error",s)})}finally{await n.close()}}).catch(t=>{this.onError(t,{phase:"attach"})}))}attachCreationWatcher(){let t=this.configFile!==void 0?w(this.cwd,this.configFile):void 0,r=t!==void 0?st(t):this.cwd;try{this.directoryWatcher=rt(r,{persistent:!1},(n,o)=>{if(this.stopped||!o)return;let s=o.toString();if(t!==void 0){if(s!==ot(t))return}else if(!ut.test(s))return;tt(it(r,s))&&(this.updateChain=this.updateChain.then(async()=>{if(this.stopped)return;let d;try{d=await y(this.cwd,{configFile:this.configFile})}catch(i){this.onError(i,{phase:"reload"});return}if(this.stopped)return;this.emit(d);let a=this.directoryWatcher;a&&(this.directoryWatcher=null,a.close()),this.attachC12Watcher()}))}),this.directoryWatcher.on("error",n=>{this.onError(n,{phase:"attach"})})}catch(n){this.onError(n,{phase:"attach"})}}};async function lt(e){let t=e.onError??dt,r=new Set,n=x(e.configFile),o=await ct(e,n,t),s=o.current;function d(i){s=i;for(let f of[...r])try{f(i)}catch(c){t(c,{phase:"reload"})}}let a=new I(e.cwd,n,t,d);return e.watch&&a.start(o.initialLoadSucceeded),{get(){return s},async reload(){if(!oe(e.cwd,n)){let i=b();return d(i),i}try{let i=await y(e.cwd,{configFile:n});return d(i),i}catch(i){return t(i,{phase:"reload"}),s}},subscribe(i){return r.add(i),()=>{r.delete(i)}},async stop(){r.clear(),await a.stop()},ready(){return a.watcherReady()}}}import{tool as sr,dynamicTool as ir,jsonSchema as ar,zodSchema as dr,stepCountIs as ur,hasToolCall as cr,convertToModelMessages as lr,cosineSimilarity as fr,smoothStream as pr,Output as gr}from"ai";export{_e as AGENT_DEFINITION_KIND,ge as AI_SERVICES,ye as HELIX_CONFIG_ENV,gr as Output,ue as REGION_VALUES,be as SCHEDULE_DEFINITION_KIND,Ie as ScheduleConfigError,Se as TOOL_DEFINITION_KIND,Ce as WORKSPACE_ID_REQUIRED_CODE,pe as agentSessionsSchema,me as aiProviderEntrySchema,lr as convertToModelMessages,fr as cosineSimilarity,lt as createConfigService,xe as defineAgent,et as defineConfig,Ke as defineFunction,Re as defineSchedule,we as defineTool,ir as dynamicTool,de as getContext,E as getSdkConfig,cr as hasToolCall,ke as isAgentDefinition,Ae as isScheduleDefinition,Ee as isToolDefinition,ar as jsonSchema,y as loadConfig,he as loadedTrayConfigSchema,le as projectIdSchema,ce as regionSchema,ve as requireWorkspaceId,k as resolveConfigFile,x as resolveConfigOverride,ae as runWithinAppSpan,pr as smoothStream,ur as stepCountIs,sr as tool,Te as totalToolCallsIs,fe as workspaceIdSchema,dr as zodSchema};
|
package/dist/internal/index.d.ts
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
|
-
import { L as LoadedTrayConfig, b as AgentDefinition } from '../define-agent-
|
|
2
|
-
export { z as SdkConfigInput, B as setSdkConfig } from '../define-agent-
|
|
3
|
-
import {
|
|
4
|
-
export {
|
|
1
|
+
import { L as LoadedTrayConfig, b as AgentDefinition } from '../define-agent-C0qXub7P.js';
|
|
2
|
+
export { z as SdkConfigInput, B as setSdkConfig } from '../define-agent-C0qXub7P.js';
|
|
3
|
+
import { j as AgentSessionsList, b as AgentCallOptions, e as AgentResult } from '../types-CRUtefiq.js';
|
|
4
|
+
export { O as SessionExpiredError, Q as clearAgentSessions } from '../types-CRUtefiq.js';
|
|
5
5
|
import 'zod';
|
|
6
6
|
import 'h3';
|
|
7
7
|
import 'ky';
|
|
8
8
|
import 'ai';
|
|
9
9
|
import '@ai-sdk/provider';
|
|
10
10
|
|
|
11
|
+
/**
|
|
12
|
+
* Caller-fault agent errors — a typed contract for hosts (the dev route, the
|
|
13
|
+
* future lambda agent surface) to classify failures without string-matching
|
|
14
|
+
* messages: `AgentCallerError` / `SessionExpiredError` (see sessions.ts) mean
|
|
15
|
+
* "your request", everything else means "the runtime".
|
|
16
|
+
*/
|
|
17
|
+
declare class AgentCallerError extends Error {
|
|
18
|
+
constructor(message: string);
|
|
19
|
+
}
|
|
20
|
+
|
|
11
21
|
/** BroadcastChannel name for parent→worker config updates. */
|
|
12
22
|
declare const CONFIG_BRIDGE_CHANNEL = "tray-config-bridge";
|
|
13
23
|
/** BroadcastChannel name for parent→worker dev-token updates. */
|
|
@@ -89,16 +99,6 @@ declare function listAgents(): AgentDefinition[];
|
|
|
89
99
|
/** Test seam. */
|
|
90
100
|
declare function clearAgentRegistry(): void;
|
|
91
101
|
|
|
92
|
-
/**
|
|
93
|
-
* Caller-fault agent errors — a typed contract for hosts (the dev route, the
|
|
94
|
-
* future lambda agent surface) to classify failures without string-matching
|
|
95
|
-
* messages: `AgentCallerError` / `SessionExpiredError` (see sessions.ts) mean
|
|
96
|
-
* "your request", everything else means "the runtime".
|
|
97
|
-
*/
|
|
98
|
-
declare class AgentCallerError extends Error {
|
|
99
|
-
constructor(message: string);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
102
|
declare function assertValidPath(path: string, maxPathBytes?: number): void;
|
|
103
103
|
|
|
104
104
|
type SdkErrorDetail = {
|
package/dist/internal/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as At,O as E,S as ft,T as dt,U as mt,V as gt,W as pt,X as ht,a as J,aa as St,b as V,c as q,ca as l,d as R,e as z,f as g,g as P,ga as v,h as F,i as N,j as p,k as O,l as k,m as j,o as A,p as M,q as S,r as x,s as y,t as lt,u as ct,v as ut,w as I,x as C}from"../chunk-
|
|
1
|
+
import{$ as At,O as E,S as ft,T as dt,U as mt,V as gt,W as pt,X as ht,a as J,aa as St,b as V,c as q,ca as l,d as R,e as z,f as g,g as P,ga as v,h as F,i as N,j as p,k as O,l as k,m as j,o as A,p as M,q as S,r as x,s as y,t as lt,u as ct,v as ut,w as I,x as C}from"../chunk-D44IVAUR.js";import{a as h}from"../chunk-WUCX7RZO.js";import{c as G,d as D,g as Q,h as W,i as X,j as Y,k as Z,l as tt,m as et,n as rt,o as ot,p as nt,q as it,r as st,s as at}from"../chunk-3T2WZMJJ.js";import{randomUUID as xt}from"crypto";import{SpanStatusCode as H,SpanKind as yt}from"@opentelemetry/api";var i=class extends Error{constructor(t){super(`runScheduledFunction: ${t}`),this.name="ScheduleInvocationError"}};async function It(e,t){if(typeof t!="object"||t===null)throw new i("`invocation` must be an object");let{schedulePath:r}=t;if(typeof r!="string"||r.length===0)throw new i("`schedulePath` must be a non-empty string");if(typeof t.isManual!="boolean")throw new i("`isManual` must be a boolean");if(!v(e))throw new i(`default export of "${r}" is not a defineSchedule definition`);let c=L("scheduledAt",t.scheduledAt),b=L("firedAt",t.firedAt),a=D(),u=a.executionId??xt(),f=a.deploymentId??null,K=Date.now(),$=new Date().toISOString(),U=M(),_=A();p();let s={hasDb:!1,hasExternal:!1,hasAuth:!1,hasAi:!1,hasError:!1},d=!1,m=null;try{await P.run(s,()=>g.run(u,()=>k.startActiveSpan("schedule",{root:!0,kind:yt.SERVER,attributes:{method:"SCHEDULE",route:r,executionId:u,...f?{deploymentId:f}:{}}},async n=>{let B={type:"schedule",scheduledAt:c,firedAt:b,isManual:t.isManual},w={http:S(),db:o=>x(o),kv:()=>y(),files:()=>I(),callFunctionAsync:C(),ai:E(),agent:o=>l(o),log:_,config:U,state:{},executionId:u,deploymentId:f,traceId:n.spanContext().traceId,parentExecutionId:null,trigger:B};N(n,"input",{scheduledAt:t.scheduledAt,firedAt:t.firedAt,isManual:t.isManual});try{await h.run(w,()=>e.handler(w))}catch(o){throw d=!0,m=o instanceof Error?o.message:String(o),F("hasError"),o}finally{n.setAttribute("hasAuth",s.hasAuth),n.setAttribute("hasAi",s.hasAi),n.setAttribute("hasExternal",s.hasExternal),n.setAttribute("hasDb",s.hasDb),n.setAttribute("status",d?"error":"success");let o=d||s.hasError;n.setStatus({code:o?H.ERROR:H.OK,...m?{message:m}:{}}),n.end()}})))}finally{j({executionId:u,deploymentId:f,triggerType:"schedule",routeOrJob:r,startedAt:$,startMs:K,errored:d,errorMessage:m,userId:null,flags:s}),await O()}}function L(e,t){if(typeof t!="string"||t.length===0)throw new i(`\`${e}\` must be a timestamp string; got ${JSON.stringify(t)}`);let r=new Date(t);if(Number.isNaN(r.getTime()))throw new i(`\`${e}\` must be a Date-parseable timestamp; got ${JSON.stringify(t)}`);return r}function T(e,t){p();let r=R(),c=crypto.randomUUID(),b={http:S(),db:a=>x(a),kv:()=>y(),files:()=>I(),callFunctionAsync:C(),ai:E(),agent:a=>l(a),log:A(),config:r.config??{},state:{},executionId:c,deploymentId:null,traceId:"",parentExecutionId:null,userId:e.userId??null};return g.run(c,()=>h.run(b,t))}async function Ct(e,t,r={}){return T(r,()=>l(e).generate(t))}async function Et(e,t){return T({userId:t.userId},()=>l(e).sessions({...t.first!==void 0?{first:t.first}:{},...t.cursor!==void 0?{cursor:t.cursor}:{}}))}export{ft as AgentCallerError,J as CONFIG_BRIDGE_CHANNEL,V as DEV_TOKEN_BRIDGE_CHANNEL,i as ScheduleInvocationError,st as SdkError,At as SessionExpiredError,lt as assertValidPath,z as clearActiveConfig,ht as clearAgentRegistry,St as clearAgentSessions,ct as contentFilePath,R as getActiveConfig,nt as getAdditionalRegionProfiles,gt as getAgentDefinition,X as getRegionProfile,W as isKnownRegion,at as isSdkError,Et as listAgentSessionsStandalone,pt as listAgents,tt as listExposedRegionNames,Z as listRegionNames,ut as metaFilePath,et as parseExposedRegionName,Q as registerRegionProfile,Y as requireRegionProfile,it as resetRegionRegistryForTests,ot as resolveForcedRegion,Ct as runAgentStandalone,It as runScheduledFunction,q as setActiveConfig,dt as setAgentBaseDir,mt as setAgentInstructions,rt as setForcedRegion,G as setSdkConfig};
|
package/dist/testing/index.d.ts
CHANGED
|
@@ -230,12 +230,17 @@ interface HelixAI {
|
|
|
230
230
|
/**
|
|
231
231
|
* Agent session store (helix-spec 14 → Sessions & Memory).
|
|
232
232
|
*
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
*
|
|
236
|
-
*
|
|
237
|
-
* behind the same interface
|
|
238
|
-
*
|
|
233
|
+
* This file holds the shared session contract, the **model window** every
|
|
234
|
+
* backend's history passes through on its way to the model, and the
|
|
235
|
+
* **in-memory** backend — the `helix dev` behaviour (sessions reset on server
|
|
236
|
+
* restart), emulating the managed store's contract. The managed service and
|
|
237
|
+
* DynamoDB backends sit behind the same interface — see README_INTERNAL.md §
|
|
238
|
+
* Agent harness.
|
|
239
|
+
*
|
|
240
|
+
* A session is the RECORD of a conversation: appends never delete, and by
|
|
241
|
+
* default nothing expires, so an app can always show a user their earlier
|
|
242
|
+
* conversations in full. What the model is sent each turn is a separate,
|
|
243
|
+
* smaller thing — see `planModelWindow`.
|
|
239
244
|
*
|
|
240
245
|
* Loop state IS the session: tool-approval requests/responses are ordinary
|
|
241
246
|
* ModelMessage content parts, so a paused agent needs no storage beyond its
|
|
@@ -248,19 +253,54 @@ interface PendingApproval {
|
|
|
248
253
|
input: unknown;
|
|
249
254
|
requestedAt: string;
|
|
250
255
|
}
|
|
256
|
+
/** One page of a session's stored messages (see `AgentSession.page`). */
|
|
257
|
+
interface AgentSessionPage {
|
|
258
|
+
/** In the requested order: oldest first for "asc", newest first for "desc". */
|
|
259
|
+
messages: ModelMessage[];
|
|
260
|
+
/** Pass back as `cursor` for the next page in the same order; null at the end. */
|
|
261
|
+
nextCursor: string | null;
|
|
262
|
+
}
|
|
263
|
+
interface AgentSessionPageOptions {
|
|
264
|
+
/** Messages per page: 1–500, default 50. */
|
|
265
|
+
limit?: number;
|
|
266
|
+
/** `nextCursor` from the previous page. Omit to start from the beginning
|
|
267
|
+
("asc") or from the latest message ("desc"). */
|
|
268
|
+
cursor?: string;
|
|
269
|
+
/** "asc" (default) pages oldest → newest; "desc" pages newest → oldest,
|
|
270
|
+
which is what a chat view loading "the latest, then older on scroll"
|
|
271
|
+
wants. */
|
|
272
|
+
order?: "asc" | "desc";
|
|
273
|
+
}
|
|
251
274
|
interface AgentSession {
|
|
252
275
|
readonly id: string;
|
|
253
276
|
/**
|
|
254
|
-
*
|
|
255
|
-
*
|
|
256
|
-
*
|
|
277
|
+
* The stored conversation, oldest first — ALL of it (or the latest `limit`
|
|
278
|
+
* messages). This is the record, not what the model sees: `memory.
|
|
279
|
+
* maxSessionMessages` caps the model's window (`loadModelWindow`), never
|
|
280
|
+
* what is kept here.
|
|
257
281
|
*/
|
|
258
282
|
messages(opts?: {
|
|
259
283
|
limit?: number;
|
|
260
284
|
}): Promise<ModelMessage[]>;
|
|
285
|
+
/**
|
|
286
|
+
* Read the stored conversation a page at a time — for long conversations
|
|
287
|
+
* where `messages()` would load everything. Pages never overlap; pass each
|
|
288
|
+
* page's `nextCursor` to get the next, keeping the same `order`.
|
|
289
|
+
*/
|
|
290
|
+
page(opts?: AgentSessionPageOptions): Promise<AgentSessionPage>;
|
|
261
291
|
append(...messages: ModelMessage[]): Promise<void>;
|
|
292
|
+
/**
|
|
293
|
+
* Delete the session: every stored message and any pending approvals.
|
|
294
|
+
* Permanent. The id can be reused afterwards and starts empty. Use it for
|
|
295
|
+
* session management ("delete this conversation") or to clean up after a
|
|
296
|
+
* run that is finished and does not need to be kept.
|
|
297
|
+
*/
|
|
262
298
|
clear(): Promise<void>;
|
|
263
|
-
/**
|
|
299
|
+
/**
|
|
300
|
+
* Whether the STORE has dropped older messages. The SDK's own backends never
|
|
301
|
+
* do (the cap limits the model window, not storage); the managed store
|
|
302
|
+
* reports its service-side flag.
|
|
303
|
+
*/
|
|
264
304
|
truncated(): Promise<boolean>;
|
|
265
305
|
pendingApprovals(): Promise<PendingApproval[]>;
|
|
266
306
|
addPendingApprovals(approvals: PendingApproval[]): Promise<void>;
|
|
@@ -312,8 +352,11 @@ interface AgentCallOptions {
|
|
|
312
352
|
messages?: ModelMessage[];
|
|
313
353
|
/** Continue an existing session; omit to create one. */
|
|
314
354
|
sessionId?: string;
|
|
315
|
-
/** Resolve pending tool-approval requests before the loop re-enters.
|
|
316
|
-
|
|
355
|
+
/** Resolve pending tool-approval requests before the loop re-enters. Sent on
|
|
356
|
+
its own (no `prompt`/`messages` in the same call — the loop only acts on
|
|
357
|
+
decisions that are the last message) and deciding EVERY pending request
|
|
358
|
+
(an undecided tool call has no result for the model). New input goes on
|
|
359
|
+
the next call. */
|
|
317
360
|
approvals?: AgentApprovalDecision[];
|
|
318
361
|
/** Overrides limits.maxIterations / maxToolCalls for this call. */
|
|
319
362
|
stopWhen?: StopCondition<ToolSet> | Array<StopCondition<ToolSet>>;
|
|
@@ -362,7 +405,9 @@ interface HelixAgent {
|
|
|
362
405
|
readonly model: LanguageModelV4;
|
|
363
406
|
readonly tools: ToolSet;
|
|
364
407
|
readonly instructions: string;
|
|
365
|
-
/**
|
|
408
|
+
/** The stored conversation for a session — the full record, readable and
|
|
409
|
+
clearable without running the agent. `memory.maxSessionMessages` caps
|
|
410
|
+
what the model is sent each turn, not what this returns. */
|
|
366
411
|
session(sessionId?: string): AgentSession;
|
|
367
412
|
/**
|
|
368
413
|
* The calling user's recent sessions with this agent, newest activity
|
|
@@ -594,4 +639,4 @@ interface ScheduleDefinition {
|
|
|
594
639
|
handler: ScheduleHandler;
|
|
595
640
|
}
|
|
596
641
|
|
|
597
|
-
export { type AgentApprovalDecision as A, type BrokerAuthedClient as B, type CallFunctionAsync as C, type DefineFunctionOptions as D, type
|
|
642
|
+
export { type AgentApprovalDecision as A, type BrokerAuthedClient as B, type CallFunctionAsync as C, type DefineFunctionOptions as D, type S3SignOptions as E, type FunctionHandler as F, type S3SignResult as G, type HelixAI as H, type ScheduleContext as I, type ScheduleHandler as J, type KeyValueStore as K, type Logger as L, type ScheduleTrigger as M, type SqlBuilder as N, SessionExpiredError as O, type PlatformContext as P, clearAgentSessions as Q, type ScheduleDefinition as S, type TrayContext as T, type UnvalidatedInput as U, type DefineScheduleConfig as a, type AgentCallOptions as b, type AgentClient as c, type AgentPendingApproval as d, type AgentResult as e, type AgentSession as f, type AgentSessionPage as g, type AgentSessionPageOptions as h, type AgentSessionSummary as i, type AgentSessionsList as j, type AgentStreamResult as k, type AiEmbeddingModelInstance as l, type AiImageModelInstance as m, type AiLanguageModelInstance as n, type AiSpeechModelInstance as o, type AiTranscriptionModelInstance as p, type BrokerCallOptions as q, type BrokerCallResult as r, type DbCallParameters as s, type DbClient as t, type FileSystemClient as u, type HelixAIProvider as v, type HelixAgent as w, type HelixCost as x, type HelixResultMeta as y, type HttpClient as z };
|
package/package.json
CHANGED
package/dist/chunk-7R345MR6.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{a as hn,b as Xe}from"./chunk-WUCX7RZO.js";import{A as Sn,B as me,C as G,D as ne,E as bn,G as vn,H as xn,I as An,J as En,a as U,b as ue,d as A,e as de,f as $,h as fn,j,k as gn,o as yn,r as u,t as Ce,u as Ye,v as te,w as ke,x as We,y as pe,z as wn}from"./chunk-3T2WZMJJ.js";var Za="tray-config-bridge",ec="tray-dev-token-bridge",Qe=null;function tc(e){Qe=e}function v(){if(!Qe)throw new Error("Active tray config not seeded. Worker boot must call setActiveConfig() before handlers run.");return Qe}function nc(){Qe=null}import{AsyncLocalStorage as qn}from"async_hooks";import{trace as as,SpanKind as cs,SpanStatusCode as rt}from"@opentelemetry/api";import{ExportResultCode as ls,W3CTraceContextPropagator as us}from"@opentelemetry/core";import{NodeTracerProvider as ds,SimpleSpanProcessor as ps,BatchSpanProcessor as ms}from"@opentelemetry/sdk-trace-node";import{OTLPTraceExporter as Go}from"@opentelemetry/exporter-trace-otlp-proto";import{OTLPLogExporter as Jo}from"@opentelemetry/exporter-logs-otlp-proto";function Tt(e){return j(e).hosts.ingest}function Xo(){return $()??""}function In(){return{[U]:Xo()}}function Rn(){let e=Tt(v().region);return new Go({url:`${e}/v1/traces`,headers:()=>Promise.resolve(In())})}function Tn(){let e=Tt(v().region);return new Jo({url:`${e}/v1/logs`,headers:()=>Promise.resolve(In())})}import{logs as Pn,SeverityNumber as Ze}from"@opentelemetry/api-logs";import{LoggerProvider as Qo,BatchLogRecordProcessor as Zo}from"@opentelemetry/sdk-logs";function Pe(e){try{return JSON.stringify(e)}catch(t){return JSON.stringify({_serialization_error:t instanceof Error?t.message:String(t)})}}function Yo(e){return new TextEncoder().encode(e).length}var Cn="\u2026[truncated]",Wo=Yo(Cn),Oe=4096;function re(e,t=Oe){let n=new TextEncoder().encode(e);if(n.length<=t)return e;let r=n.subarray(0,t-Wo);return new TextDecoder("utf-8").decode(r).replace(/�$/,"")+Cn}function R(e,t=Oe){return re(Pe(e),t)}var es="@trayai/helix-sdk",_e,kn={debug:{number:Ze.DEBUG,text:"DEBUG"},info:{number:Ze.INFO,text:"INFO"},warn:{number:Ze.WARN,text:"WARN"},error:{number:Ze.ERROR,text:"ERROR"}};function ts(){return A().mode==="lambda"?[new Zo({exporter:Tn()})]:[]}function On(){if(_e!==void 0)return;let e=ts();e.length!==0&&(_e=new Qo({processors:e}),Pn.setGlobalLoggerProvider(_e))}function ns(e,t,n){let r=kn[e]??kn.info;return{severityNumber:r.number,severityText:r.text,body:t,...n?{attributes:{"tray.log.meta":R(n)}}:{}}}function _n(e,t,n){Pn.getLogger(es).emit(ns(e,t,n))}async function Dn(e=2e3){if(_e===void 0)return;let t;try{await Promise.race([_e.forceFlush(),new Promise(n=>{t=setTimeout(n,e)})])}catch(n){process.stderr.write(`[helix-sdk] otel log flush failed: ${n instanceof Error?n.message:String(n)}
|
|
2
|
-
`)}finally{t!==void 0&&clearTimeout(t)}}function Ct(){let e=process.env.TRAY_PRETTY_LOGS;return e==="1"||e==="true"}function rs(){if(process.env.NO_COLOR!==void 0)return!1;let e=process.env.FORCE_COLOR;return e!==void 0&&e!=="0"&&e!=="false"?!0:!!process.stdout.isTTY&&process.env.TERM!=="dumb"}function O(e,t){return rs()?`\x1B[${e}m${t}\x1B[0m`:t}var os=5,ss={FN:"1;35",INFO:"34",AUTH:"35",API:"36",AGENT:"1;36",TOOL:"36",WARN:"33",ERROR:"31",DEBUG:"90"},et="32",tt="31",is="33",oe="2",nt="1";function se(e){return O(ss[e]??"0",e.padEnd(os))}function Fn(e,t){return`${se("FN")} ${O(nt,`${e} ${t}`.trim())}`}function Mn(e,t,n,r){let o=e.toUpperCase(),i=`${r?`${O(oe,r)} `:""}${se(o)} ${t}`;return n&&Object.keys(n).length>0&&(i+=` ${O(oe,Pe(n))}`),i}function Ln(e){return new Date(e[0]*1e3).toTimeString().slice(0,8)}function Nn(e){return`${se("AUTH")} ${e}`}function Un(e,t,n,r,o){let s=n===void 0?"ERR":String(n),i=O(o==="error"?tt:et,s);return`${se("API")} ${e} ${t} \u2192 ${i} ${O(oe,`${r}ms`)}`}function $n(e){return`${se("AGENT")} ${O(nt,e)}`}function jn(e,t,n,r){let o=t==="error"?tt:t==="awaiting-approval"?is:et,s=n!==void 0?`${O(oe,`${n} step${n===1?"":"s"}`)} `:"";return`${se("AGENT")} ${O(nt,e)} \u2192 ${O(o,t)} ${s}${O(oe,`${r}ms`)}`}function Bn(e,t,n){let r=t==="error"?O(tt,"error"):O(et,"ok");return`${se("TOOL")} ${e} \u2192 ${r} ${O(oe,`${n}ms`)}`}function Kn(e,t,n){let r=t?tt:et,o=O(r,"\u25CF"),s=O(r,t?"error":"success");return`${o} ${O(nt,e)} ${s} ${O(oe,`${n}ms`)}`}function q(e){try{process.stdout.write(e+`
|
|
3
|
-
`)}catch{}}var Vn=new qn,fs=new qn;function k(e){let t=fs.getStore();t&&(t[e]=!0)}var gs=/^[0-9a-f]{32}$/;function ys(e){let t=e.replace(/-/g,"").toLowerCase();return gs.test(t)?t:null}var hs={0:"STATUS_CODE_UNSET",1:"STATUS_CODE_OK",2:"STATUS_CODE_ERROR"},fe=new Map;function zn(e,t,n){let r=fe.get(e);r?r[t]=n:fe.set(e,{[t]:n})}function V(e,t,n){e.setAttribute(t,R(n))}var De;function Hn(e){return`${e[0]}${String(e[1]).padStart(9,"0")}`}function kt(e){return Math.round(e[0]*1e3+e[1]/1e6)}function Gn(e){try{process.stdout.write(Pe(e)+`
|
|
4
|
-
`)}catch{}}var Pt=class{export(t,n){for(let r of t){let o=r.spanContext().spanId,s=fe.get(o),i={...r.attributes};if(s!==void 0){for(let[l,d]of Object.entries(s))typeof d=="string"?i[l]=re(d):typeof d=="object"&&d!==null?i[l]=R(d):i[l]=d;fe.delete(o)}let a=Vn.getStore(),c=a?ys(a):null;Gn({_otel:"span",traceId:c??r.spanContext().traceId,spanId:o,parentSpanId:r.parentSpanContext?.spanId??"",name:r.name,kind:r.kind,startTimeUnixNano:Hn(r.startTime),endTimeUnixNano:Hn(r.endTime),attributes:i,status:{code:hs[r.status.code]??"STATUS_CODE_UNSET",...r.status.message?{message:re(r.status.message)}:{}}})}n({code:ls.SUCCESS})}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}},Ot=class{onStart(t,n){}onEnd(t){fe.delete(t.spanContext().spanId)}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}},_t=class{onStart(t){let n=t;(n.name==="function"||n.name==="App")&&q(`
|
|
5
|
-
`+Fn(String(n.attributes.method??""),String(n.attributes.route??""))),(n.name==="agent.generate"||n.name==="agent.stream")&&q($n(String(n.attributes.agent??"")))}onEnd(t){let n=t.attributes;switch(t.name){case"log":{let r=t.spanContext().spanId,o=fe.get(r)?.properties;q(Mn(String(n.level??"info"),String(n.message??""),o,Ln(t.startTime)));break}case"auth":q(Nn(String(n.alias??"")));break;case"externalApi":{let r=typeof n.statusCode=="number"?n.statusCode:void 0;q(Un(String(n.method??""),String(n.host??""),r,kt(t.duration),n.status==="error"?"error":"success"));break}case"agent.tool":{q(Bn(String(n.tool??""),n.status==="error"?"error":"success",kt(t.duration)));break}case"agent.generate":case"agent.stream":{let r=typeof n.status=="string"?n.status:t.status.code===rt.ERROR?"error":"completed";q(jn(String(n.agent??""),r,typeof n.steps=="number"?n.steps:void 0,kt(t.duration)));break}}}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}},Dt=class{constructor(t){this.inner=t}inner;onStart(t,n){this.inner.onStart(t,n)}onEnd(t){t.name!=="log"&&this.inner.onEnd(t)}forceFlush(){return this.inner.forceFlush()}shutdown(){return this.inner.shutdown()}};function ws(){let t=[Ct()?new _t:new ps(new Pt)];return A().mode==="lambda"&&t.push(new Dt(new ms(Rn()))),t.push(new Ot),t}function Ss(){De===void 0&&(De=new ds({spanProcessors:ws()}),De.register({propagator:new us}),On())}async function bs(e=2e3){let t=[Dn(e)];De!==void 0&&t.push((async()=>{let n;try{await Promise.race([De.forceFlush(),new Promise(r=>{n=setTimeout(r,e)})])}catch(r){process.stderr.write(`[helix-sdk] otel flush failed: ${r instanceof Error?r.message:String(r)}
|
|
6
|
-
`)}finally{n!==void 0&&clearTimeout(n)}})()),await Promise.all(t)}var F=as.getTracer("@trayai/helix-sdk");function vs({executionId:e,deploymentId:t,triggerType:n="http",routeOrJob:r,startedAt:o,startMs:s,errored:i,errorMessage:a,userId:c,flags:l}){let d=new Date().toISOString(),p=Date.now()-s;if(Ct()){q(`
|
|
7
|
-
`+Kn(r,i,p));return}Gn({_otel:"summary",executionId:e,deploymentId:t,triggerType:n,routeOrJob:r,status:i?"error":"success",startedAt:o,finishedAt:d,durationMs:p,userId:c,hasError:i||l.hasError,hasAuth:l.hasAuth,hasAi:l.hasAi,hasExternal:l.hasExternal,hasDb:l.hasDb,errorSummary:i&&a!==null?re(a):null})}async function Pc(e,t){let n=e.startMs??Date.now();Ss();let r=!1,o=null;try{return await Vn.run(e.executionId,()=>F.startActiveSpan("App",{kind:cs.SERVER,attributes:{method:e.method,route:e.route,...e.deploymentId?{deploymentId:e.deploymentId}:{}}},async s=>{try{let i=await t(),a=i?.httpResponse?.status??404;return r=a>=400,s.setAttribute("http.response.status_code",a),s.setAttribute("helix.status",r?"error":"success"),s.setStatus({code:r?rt.ERROR:rt.OK}),i}catch(i){throw r=!0,o=i instanceof Error?i.message:String(i),s.setAttribute("http.response.status_code",500),s.setAttribute("helix.status","error"),s.setStatus({code:rt.ERROR,message:o}),i}finally{s.end()}}))}finally{vs({executionId:e.executionId,deploymentId:e.deploymentId,routeOrJob:`${e.method} ${e.route}`,startedAt:e.startedAt,startMs:n,errored:r,errorMessage:o,userId:e.userId,flags:{hasDb:!1,hasExternal:!1,hasAuth:!1,hasAi:!1,hasError:!1}}),await bs()}}var Yn=1024,J=100*1024*1024,Jn=250,xs=3600,As=xs*1e3,Xn=new TextEncoder,Es=/(^|\/)\.\.(\/|$)/,Is=/[?#]/;function Rs(e){for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<=31||n===127)return!0}return!1}function ie(e,t=Yn){if(e.length===0)throw u.filesPathInvalid("Path must be a non-empty string");ot(e,t)}function Ft(e){return e.endsWith("/")?e.slice(0,-1):e}function ot(e,t=Yn){if(e.length===0)return;if(Es.test(e))throw u.filesPathInvalid("Path contains path traversal segment");if(Is.test(e)||Rs(e))throw u.filesPathInvalid("Path contains illegal characters");let n=e.split("/");if(e.startsWith("/")||e.endsWith("/")||n.some(o=>o===""))throw u.filesPathInvalid("Path must not contain empty path segments");for(let o of n){let s=Xn.encode(o).length;if(s>Jn)throw u.filesPathInvalid(`Path segment exceeds ${Jn} UTF-8 bytes (got ${s})`)}let r=Xn.encode(e).length;if(r<1||r>t)throw u.filesPathInvalid(`Path must be between 1 and ${t} UTF-8 bytes (got ${r})`)}function Wn(e){if(e>J)throw u.filesValueTooLarge(`File exceeds maximum size of ${J} bytes (got ${e})`,J)}function ge(e){let t=e!==void 0?e*1e3:As;return new Date(Date.now()+t)}import{join as Me}from"path";var Ts="files",Cs="files-meta",ks=1023,Ps=1,Os=5;function Qn(e){let t=Math.max(Buffer.byteLength(st(e),"utf8"),Buffer.byteLength(Fe(e),"utf8"));return Math.max(0,ks-t-Ps-Os)}function st(e){return Me(e,".helix",Ts)}function Fe(e){return Me(e,".helix",Cs)}function Le(e,t){return Me(st(e),...t.split("/"))}function it(e,t){return Me(Fe(e),...t.split("/"))+".json"}function at(e,t){return t.length===0?st(e):Le(e,t)}function Zn(e,t){return t.length===0?Fe(e):Me(Fe(e),...t.split("/"))}import{z as _s}from"zod";var Uc=["us1","eu1","ap1","ap2"],Mt=_s.string().refine(e=>fn(e),e=>({message:`Invalid enum value. Expected ${gn().map(t=>`'${t}'`).join(" | ")}, received '${e}'`}));import{resolve as X}from"path";import{existsSync as ct,realpathSync as er}from"fs";import{loadConfig as Ds}from"c12";import{z as b}from"zod";var nr=b.string().uuid("projectId must be a valid UUID"),rr=b.string().min(1,"workspaceId must be a non-empty string"),or=b.discriminatedUnion("store",[b.object({store:b.literal("managed")}),b.object({store:b.literal("dynamodb"),auth:b.string().min(1,"agentSessions.auth is required"),table:b.string().min(1,"agentSessions.table is required"),region:b.string().min(1,"agentSessions.region is required")})]),Ne=["openai","anthropic","google","mistral","cohere","openai-compatible"],Fs=["openai","anthropic","google","mistral","cohere"],sr=b.union([b.enum(Fs),b.object({service:b.enum(Ne),baseUrl:b.string().url().optional()}).refine(e=>e.service!=="openai-compatible"||e.baseUrl!==void 0,{message:'aiProviders: baseUrl is required when service is "openai-compatible"'}).refine(e=>e.baseUrl===void 0?!0:new URL(e.baseUrl).protocol==="https:",{message:"aiProviders: baseUrl must use https \u2014 ctx.ai requests route through the credentials broker's proxy, which rejects non-https destinations on every call (a plain-http endpoint, e.g. a local Ollama/vLLM instance over http, is not supported)"})]),Ms=b.object({name:b.string().min(1,"name is required"),projectId:nr.optional(),workspaceId:rr.optional(),region:Mt.optional(),env:b.literal("production").optional(),authentications:b.record(b.string()).optional().default({}),config:b.record(b.unknown()).optional().default({}),agentSessions:or.optional(),aiProviders:b.record(sr).optional()}).transform(({env:e,region:t,...n})=>({...n,region:t??"us1"})),tr=b.object({name:b.string().min(1,"name is required"),workspaceId:rr.optional(),region:Mt,authentications:b.record(b.string()),config:b.record(b.unknown()),agentSessions:or.optional(),aiProviders:b.record(sr).optional()}),Gc=b.discriminatedUnion("kind",[tr.extend({kind:b.literal("provisioned"),projectId:nr}),tr.extend({kind:b.literal("unprovisioned")})]),ir=["helix","tray"],ar=["ts","mts","cts","js","mjs","cjs"],cr="HELIX_CONFIG";function Lt(e){let t=e?.trim();return t||process.env[cr]?.trim()||void 0}function Ls(e,t){let n=Lt(t?.configFile);if(n!==void 0){let r=X(e,n);return ct(r)?r:void 0}for(let r of ir)for(let o of ar){let s=X(e,`${r}.config.${o}`);if(ct(s))return s}}function Ns(e){for(let t of ir)if(ar.some(n=>ct(X(e,`${t}.config.${n}`))))return t;return"helix"}function Us(e,t){return X(e,t).replace(/\.(?:m|c)?[jt]s$/,"")}function $s(e,t){let n=Lt(t?.configFile);return{name:Ns(e),cwd:e,...n!==void 0?{configFile:Us(e,n)}:{},rcFile:!1,globalRc:!1,packageJson:!1,dotenv:!1,extend:!1}}function js(e,t){if(e!==null&&typeof e=="object"&&"extends"in e)throw u.configLoadFailed(`helix.config.ts at ${t}: 'extends' is not supported \u2014 remove the field`);let n=Ms.safeParse(e);if(!n.success){let l=n.error.issues.map(d=>d.message).join("; ");throw u.configLoadFailed(`Invalid helix.config.ts at ${t}: ${l}`)}let{projectId:r,workspaceId:o,...s}=n.data,i=o!==void 0?{workspaceId:o}:{},a=yn(),c=a!==void 0?{...s,region:a}:s;return r!==void 0?{kind:"provisioned",projectId:r,...c,...i}:{kind:"unprovisioned",...c,...i}}async function Jc(e,t){let n=e??process.cwd(),r=Lt(t?.configFile),o=r!==void 0?X(n,r):void 0;if(o!==void 0&&!ct(o)){let a=t?.configFile?.trim()?"":` (from ${cr})`;throw u.configLoadFailed(`Config file not found: ${o}${a}`)}let s;try{s=await Ds($s(n,t))}catch(a){throw u.configLoadFailed(`Failed to load helix.config.ts: ${a instanceof Error?a.message:String(a)}`)}let i=s._configFile??Ls(n,t);if(!i)throw u.configLoadFailed(`helix.config.ts not found at ${X(n,"helix.config.ts")}`);if(o!==void 0&&s._configFile!==void 0){let a=er(o);if(er(X(s._configFile))!==a)throw u.configLoadFailed(`Config file conflict: requested ${o} but ${X(s._configFile)} takes extension-resolution precedence \u2014 remove or rename the sibling file`)}return js(s.config,i)}var Bs="WORKSPACE_ID_REQUIRED";function Xc(e){if(e.workspaceId===void 0)throw Object.assign(new Error("No workspaceId found in helix.config.ts. Discover & choose one \u2014 self-serve fix: run `helix workspace select`; agent-driven fix: call the `tray_list_workspaces` MCP tool. Already know the id? Run `helix workspace set <id>` or call the `tray_set_workspace_id` MCP tool. deploy cannot proceed without a workspace."),{code:Bs});return e.workspaceId}var lr="helix-tool",Ks=/^[a-z][a-z0-9_]{0,63}$/;function Zc(e){if(typeof e.name!="string"||!Ks.test(e.name))throw new Error(`defineTool: invalid tool name ${JSON.stringify(e.name)} \u2014 use snake_case (e.g. "lookup_customer")`);if(typeof e.description!="string"||e.description.trim().length===0)throw new Error(`defineTool("${e.name}"): description is required`);if(!e.input||typeof e.input.safeParse!="function")throw new Error(`defineTool("${e.name}"): input must be a Zod schema`);if(typeof e.handler!="function")throw new Error(`defineTool("${e.name}"): handler must be a function`);let t=async(r,o)=>{let s=e.input.safeParse(r);if(!s.success)throw u.inputValidationFailed(s.error.issues.map(i=>i.path.join(".")||"(root)"));return e.handler({...o,input:s.data})},n=(async r=>t(r,Xe()));return Object.defineProperties(n,{kind:{value:lr,enumerable:!0},name:{value:e.name,enumerable:!0},description:{value:e.description,enumerable:!0},inputSchema:{value:e.input,enumerable:!0},needsApproval:{value:e.needsApproval,enumerable:!0},execute:{value:t,enumerable:!0}}),n}function ur(e){return typeof e=="function"&&e.kind===lr&&typeof e.name=="string"}var M=class extends Error{constructor(t){super(t),this.name="AgentCallerError"}};import{readFileSync as Hs}from"fs";import{isAbsolute as qs,resolve as Vs}from"path";var B=new Map;function dr(e){B.set(e.name,{definition:e});for(let t of B.values())t.referencesValidated=void 0}function sl(e,t){let n=B.get(e);n&&(n.baseDir=t,n.resolvedInstructions=void 0)}function il(e,t){let n=B.get(e);n&&(n.resolvedInstructions=t)}function Ue(e){let t=B.get(e);if(!t){let n=[...B.keys()].sort();throw new M(`Unknown agent "${e}". Registered agents: ${n.join(", ")||"(none \u2014 are the functions/_agents/ modules imported?)"}`)}return t.definition}function al(){return[...B.values()].map(e=>e.definition)}function pr(e){let t=B.get(e);if(!t)throw new M(`Unknown agent "${e}"`);if(t.resolvedInstructions!==void 0)return t.resolvedInstructions;let{definition:n}=t;if(n.instructions!==void 0)return t.resolvedInstructions=n.instructions,n.instructions;let r=n.instructionsFile,o=qs(r)?r:t.baseDir!==void 0?Vs(t.baseDir,r):void 0;if(o===void 0)throw new Error(`Agent "${e}" uses instructionsFile "${r}" but its base directory is unknown \u2014 load the agent through helix dev (which records it), or use inline \`instructions\`.`);let s;try{s=Hs(o,"utf-8")}catch(i){throw new Error(`Agent "${e}": failed to read instructionsFile ${o}: ${i instanceof Error?i.message:String(i)}`)}if(s.trim().length===0)throw new Error(`Agent "${e}": instructionsFile ${o} is empty`);return t.resolvedInstructions=s,s}function mr(e){let t=B.get(e);if(t?.referencesValidated)return;let n=Ue(e);for(let r of n.agents??[]){let s=(Ue(r).tools??[]).filter(i=>i.needsApproval);if(s.length>0)throw new Error(`Agent "${e}" delegates to "${r}", which has needsApproval tools (${s.map(i=>i.name).join(", ")}) \u2014 approval cannot pause a parent's loop through delegation in v1. Put approval-gated tools on the orchestrating agent.`)}t&&(t.referencesValidated=!0)}function cl(){B.clear()}import{z as T}from"zod";var fr="helix-agent",zs=/^[a-z][a-z0-9-]{0,63}$/,Gs=T.object({model:T.string().min(1),auth:T.string().min(1)}),Js=T.object({name:T.string().regex(zs,'agent name must be kebab-case (e.g. "support-agent"); name is required in v1'),description:T.string().min(1,"description is required"),model:T.string().min(1,"model is required"),auth:T.string().min(1,"auth (authentication alias) is required"),fallbacks:T.array(Gs).optional(),instructions:T.string().min(1).optional(),instructionsFile:T.string().min(1).optional(),tools:T.array(T.custom(ur,"tools entries must be defineTool exports")).optional(),agents:T.array(T.string().min(1)).optional(),memory:T.object({maxSessionMessages:T.number().int().positive().optional(),ttl:T.number().int().positive().optional(),scope:T.enum(["user","project"]).optional()}).optional(),limits:T.object({maxIterations:T.number().int().positive().optional(),maxToolCalls:T.number().int().positive().optional()}).optional()}).refine(e=>e.instructions===void 0!=(e.instructionsFile===void 0),{message:"exactly one of instructions / instructionsFile must be set"}),ye=200,he=3600*24*30,gr=25,yr=50,Nt=3;function ml(e){let t=Js.safeParse(e);if(!t.success){let o=typeof e?.name=="string"?e.name:"(unnamed)",s=t.error.issues.map(i=>`${i.path.join(".")||"(root)"}: ${i.message}`).join("; ");throw new Error(`defineAgent(${o}): invalid definition \u2014 ${s}`)}let n=new Set;for(let o of t.data.tools??[]){if(n.has(o.name))throw new Error(`defineAgent(${t.data.name}): duplicate tool "${o.name}"`);n.add(o.name)}let r={kind:fr,...t.data};return dr(r),r}function fl(e){return typeof e=="object"&&e!==null&&e.kind===fr&&typeof e.name=="string"}var Y=new Map;function $t(e,t,n){let r=encodeURIComponent;return n!==void 0?`agent:${r(e)}:user:${r(n)}:session:${r(t)}`:`agent:${r(e)}:session:${r(t)}`}function hr(e,t){return!e||!Array.isArray(e.content)?!1:e.content.some(n=>typeof n=="object"&&n!==null&&n.type==="tool-approval-request"&&t.has(String(n.approvalId)))}function jt(e,t,n){let r=new Set;if(t<=0)return r;let o=t,s=0;for(;s<e.length&&o>0;s++)hr(e[s],n)||(r.add(s),o-=1);let i=[];for(;s<e.length;s++){let a=e[s];if(!hr(a,n)){if(a?.role==="user"){for(let c of i)r.add(c);break}i.push(s)}}return r}function Xs(e){let t=e.messages.length-e.maxSessionMessages;if(t<=0)return;let n=new Set(e.pendingApprovals.map(o=>o.approvalId)),r=jt(e.messages,t,n);r.size!==0&&(e.truncated=!0,e.messages=e.messages.filter((o,s)=>!r.has(s)))}function Bt(e,t){return t-e.lastActiveAt>e.ttlSeconds*1e3}var Ys=6e4,Ut=0;function Ws(e){if(!(e-Ut<Ys)){Ut=e;for(let[t,n]of Y)if(Bt(n,e)){if(n.pendingApprovals.length>0){n.messages=[];continue}Y.delete(t)}}}var ae=class extends Error{constructor(t){super(`Agent session "${t}" has expired (session-expired)`),this.name="SessionExpiredError"}};function wr(e,t,n,r){let o=Date.now();Ws(o);let s=n?.maxSessionMessages??ye,i=n?.ttl??he,a=t??`ses_${crypto.randomUUID().replaceAll("-","")}`,c=$t(e,a,r),l=Y.get(c);if(l&&Bt(l,o)){if(Y.delete(c),l.pendingApprovals.length>0)throw new ae(a);l=void 0}l||(l={id:a,agentName:e,...r!==void 0?{ownerUserId:r}:{},messages:[],createdAt:o,lastActiveAt:o,truncated:!1,pendingApprovals:[],maxSessionMessages:s,ttlSeconds:i},Y.set(c,l));let d=l,p=()=>{d.lastActiveAt=Date.now()};return{id:a,async messages(m){p();let g=d.messages;return m?.limit!==void 0?g.slice(-m.limit):[...g]},async append(...m){p(),d.messages.push(...m),Xs(d)},async clear(){Y.delete(c)},async truncated(){return d.truncated},async pendingApprovals(){return p(),[...d.pendingApprovals]},async addPendingApprovals(m){p(),d.pendingApprovals.push(...m)},async resolveApproval(m){p();let g=d.pendingApprovals.findIndex(w=>w.approvalId===m);return g===-1?"already-resolved":(d.pendingApprovals.splice(g,1),"resolved")}}}function Sr(e,t,n={}){let r=Date.now(),o=n.first??20,s=n.cursor!==void 0&&Number.parseInt(n.cursor,10)||0,i=[...Y.values()].filter(c=>c.agentName===e&&c.ownerUserId===t&&!Bt(c,r)).sort((c,l)=>l.lastActiveAt-c.lastActiveAt);return{sessions:i.slice(s,s+o).map(c=>({id:c.id,createdAt:c.createdAt,lastActivityAt:c.lastActiveAt,messageCount:c.messages.length,pendingApprovals:c.pendingApprovals.length})),nextCursor:s+o<i.length?String(s+o):null}}function hl(){Y.clear(),Ut=0}import{AsyncLocalStorage as bi}from"async_hooks";import{z as Vr}from"zod";import{generateText as vi,streamText as xi,tool as zr,stepCountIs as Ai}from"ai";import{SpanKind as Xt,SpanStatusCode as ve,context as Gr,trace as Ei}from"@opentelemetry/api";import{embed as Er,embedMany as Ir,generateImage as Rr,generateObject as Tr,generateSpeech as Cr,generateText as kr,streamObject as Pr,streamText as Or,transcribe as _r}from"ai";import{SpanKind as ci,SpanStatusCode as Ar}from"@opentelemetry/api";import{createOpenAI as ti}from"@ai-sdk/openai";import{createAnthropic as ni}from"@ai-sdk/anthropic";import{createGoogle as ri}from"@ai-sdk/google";import{createMistral as oi}from"@ai-sdk/mistral";import{createCohere as si}from"@ai-sdk/cohere";import{createOpenAICompatible as ii}from"@ai-sdk/openai-compatible";var Qs=new Set(["x-api-key","x-goog-api-key"]);function Zs(e){return wn(e)||Qs.has(e.toLowerCase())}function ei(e){return typeof e=="string"?e:e instanceof URL?e.toString():e.url}function br(e){return async(t,n)=>{let r=ei(t),o=new URL(r);if(o.protocol!=="https:")throw u.unsupportedScheme(o.protocol.replace(/:$/,""));let s=A(),{region:i}=v(),a=new Headers(n?.headers??(t instanceof Request?t.headers:void 0)),c=new Headers;for(let[f,y]of a.entries())Zs(f)||c.append(f,y);c.set(Ce,r),c.set(Ye,e),s.executionId&&c.set(ke,s.executionId);let{headers:l,deploymentId:d}=G(s);for(let[f,y]of Object.entries(l))c.set(f,y);d&&c.set(te,d);let p=me(i,s.mode==="lambda"?"runtime":"dev"),m=n?.body??(t instanceof Request?t.clone().body:void 0),g={method:n?.method??(t instanceof Request?t.method:"GET"),headers:c,redirect:"manual",signal:n?.signal??void 0};m!=null&&(g.body=m,typeof ReadableStream<"u"&&m instanceof ReadableStream&&(g.duplex="half"));let w;try{w=await fetch(p,g)}catch(f){if(f instanceof Error&&f.name==="AbortError")throw f;let y=f instanceof Error?f.message??String(f):String(f);throw u.brokerError(0,y)}let D=w.headers.get(We);if(D!==null){let f=await w.text(),y=f||D;try{let E=Sn.safeParse(JSON.parse(f));E.success&&(y=E.data.error.message)}catch{}throw D===pe&&(y="credential broker does not support the raw proxy endpoint required by ctx.ai \u2014 deploy a newer broker or pin an older SDK"),u.brokerError(w.status,y,f||void 0,D)}return w}}var we="helix-broker";function vr(e){let{alias:t,service:n,baseUrl:r,authenticationId:o}=e,s=br(o);switch(n){case"openai":return ti({apiKey:we,fetch:s});case"anthropic":return ni({apiKey:we,fetch:s});case"google":return ri({apiKey:we,fetch:s});case"mistral":return oi({apiKey:we,fetch:s});case"cohere":return si({apiKey:we,fetch:s});case"openai-compatible":{if(!r)throw u.aiUnsupportedService(t,n,[...Ne]);return ii({name:t,baseURL:r,apiKey:we,fetch:s})}}}var xr={"gpt-4o-mini":{input:.15,output:.6},"gpt-4o":{input:2.5,output:10},"gpt-4.1-mini":{input:.4,output:1.6},"gpt-4.1-nano":{input:.1,output:.4},"gpt-4.1":{input:2,output:8},"text-embedding-3-small":{input:.02,output:0},"text-embedding-3-large":{input:.13,output:0},"gpt-image-1":{input:5,output:40},"claude-opus-4":{input:15,output:75},"claude-sonnet-4":{input:3,output:15},"claude-haiku-4":{input:1,output:5},"claude-3-5-haiku":{input:.8,output:4},"gemini-2.5-pro":{input:1.25,output:10},"gemini-2.5-flash":{input:.3,output:2.5},"text-embedding-004":{input:0,output:0},"mistral-large":{input:2,output:6},"mistral-small":{input:.1,output:.3},"command-r-plus":{input:2.5,output:10},"command-r":{input:.15,output:.6}},ai=Object.keys(xr).sort((e,t)=>t.length-e.length);function lt(e,t){let n=ai.find(s=>e.startsWith(s));if(!n||!t)return{amount:0,currency:"USD"};let r=xr[n],o=((t.inputTokens??0)*r.input+(t.outputTokens??0)*r.output)/1e6;return{amount:Number(o.toFixed(8)),currency:"USD"}}function N(e,t,n){return F.startActiveSpan("ai",{kind:ci.CLIENT},async r=>{r.setAttributes({operation:e.operation,model:e.model,...e.alias!==void 0?{alias:e.alias}:{}}),k("hasAi");try{let o=await t(),s=n?.(o);return s&&r.setAttributes({...s.inputTokens!==void 0?{inputTokens:s.inputTokens}:{},...s.outputTokens!==void 0?{outputTokens:s.outputTokens}:{}}),r.setAttribute("status","success"),r.setStatus({code:Ar.OK}),o}catch(o){let s=o instanceof Error?o.message:String(o);throw r.setAttribute("status","error"),r.setStatus({code:Ar.ERROR,message:s}),o}finally{r.end()}})}function li(){return`aireq_${crypto.randomUUID().replaceAll("-","")}`}function Se(e,t){return{cost:lt(e,t),requestId:li()}}function ce(e){return typeof e=="object"&&e!==null&&"modelId"in e?String(e.modelId):String(e)}var Dr=new WeakSet;function $e(e){return Dr.add(e),e}function z(e){if(typeof e!="object"||e===null)throw u.aiModelInstanceRequired(typeof e=="string"?e:String(e));if(!Dr.has(e))throw u.aiForeignModelRejected()}function ut(e){return e.totalUsage??e.usage}function dt(e){return e.usage?.tokens!==void 0?{inputTokens:e.usage.tokens}:void 0}function pt(e){return e.usage}function Kt(e){let t=v(),n=t.authentications??{};if(!n[e])throw u.unknownAlias(e,Object.keys(n));let r=n[e],o=(t.aiProviders??{})[e];if(o===void 0)throw u.aiProviderNotConfigured(e,[...Ne]);let{service:s,baseUrl:i}=typeof o=="string"?{service:o,baseUrl:void 0}:o,a=vr({alias:e,service:s,baseUrl:i,authenticationId:r}),c=f=>$e(a.languageModel(f)),l=f=>$e(a.embeddingModel(f)),d=f=>$e(a.imageModel(f)),p=f=>{if(!a.transcriptionModel)throw new Error(`AI provider "${s}" (alias "${e}") has no transcription models`);return $e(a.transcriptionModel(f))},m=f=>{if(!a.speechModel)throw new Error(`AI provider "${s}" (alias "${e}") has no speech models`);return $e(a.speechModel(f))},g=(f=>c(f)),w=(f,y)=>{let E=f.model;if(typeof E!="string")throw u.aiModelIdRequired(e,y);return E};return Object.assign(g,{specificationVersion:"v4",languageModel:c,embeddingModel:l,textEmbeddingModel:l,imageModel:d,transcriptionModel:p,speechModel:m,async generateText(f){let y=w(f,"generateText"),E=await N({operation:"generateText",model:y,alias:e},()=>kr({...f,model:c(y)}),ut);return Object.assign(E,{helix:Se(y,ut(E))})},streamText(f){let y=w(f,"streamText");return k("hasAi"),Or({...f,model:c(y)})},async generateObject(f){let y=w(f,"generateObject"),E=await N({operation:"generateObject",model:y,alias:e},()=>Tr({...f,model:c(y)}),S=>S.usage),h=E.usage;return Object.assign(E,{helix:Se(y,h)})},streamObject(f){let y=w(f,"streamObject");return k("hasAi"),Pr({...f,model:c(y)})},async embed(f){let y=w(f,"embed");return N({operation:"embed",model:y,alias:e},()=>Er({...f,model:l(y)}),dt)},async embedMany(f){let y=w(f,"embedMany");return N({operation:"embedMany",model:y,alias:e},()=>Ir({...f,model:l(y)}),dt)},async generateImage(f){let y=w(f,"generateImage"),E=await N({operation:"generateImage",model:y,alias:e},()=>Rr({...f,model:d(y)}),pt);return Object.assign(E,{helix:Se(y,pt(E))})},async transcribe(f){let y=w(f,"transcribe");return N({operation:"transcribe",model:y,alias:e},()=>_r({...f,model:p(y)}))},async generateSpeech(f){let y=w(f,"generateSpeech");return N({operation:"generateSpeech",model:y,alias:e},()=>Cr({...f,model:m(y)}))}})}function Hl(){let e=new Map;return Object.assign((r=>{let o=e.get(r);return o||(o=Kt(r),e.set(r,o)),o}),{async generateText(r){z(r.model);let o=ce(r.model),s=await N({operation:"generateText",model:o},()=>kr(r),ut);return Object.assign(s,{helix:Se(o,ut(s))})},streamText(r){return z(r.model),k("hasAi"),Or(r)},async generateObject(r){z(r.model);let o=ce(r.model),s=await N({operation:"generateObject",model:o},()=>Tr(r),a=>a.usage),i=s.usage;return Object.assign(s,{helix:Se(o,i)})},streamObject(r){return z(r.model),k("hasAi"),Pr(r)},async embed(r){return z(r.model),N({operation:"embed",model:ce(r.model)},()=>Er(r),dt)},async embedMany(r){return z(r.model),N({operation:"embedMany",model:ce(r.model)},()=>Ir(r),dt)},async generateImage(r){z(r.model);let o=ce(r.model),s=await N({operation:"generateImage",model:o},()=>Rr(r),pt);return Object.assign(s,{helix:Se(o,pt(s))})},async transcribe(r){return z(r.model),N({operation:"transcribe",model:ce(r.model)},()=>_r(r))},async generateSpeech(r){return z(r.model),N({operation:"generateSpeech",model:ce(r.model)},()=>Cr(r))}})}var Ht=class extends Error{errors;constructor(t){super(`all ${t.length} models in the fallback chain failed \u2014 `+t.map(({modelId:n,error:r})=>`${n}: ${r instanceof Error?r.message:String(r)}`).join("; ")),this.name="FallbackExhaustedError",this.errors=t.map(n=>n.error)}};function Fr(e){if(e.length===0)throw new Error("createFallbackModel: at least one model required");if(e.length===1)return e[0];let t=e[0];async function n(r){let o=[];for(let s of e)try{return await r(s)}catch(i){if(i instanceof Error&&i.name==="AbortError")throw i;o.push({modelId:s.modelId,error:i})}throw new Ht(o)}return{specificationVersion:"v4",provider:t.provider,modelId:t.modelId,get supportedUrls(){return Promise.resolve(t.supportedUrls)},doGenerate:r=>n(o=>o.doGenerate(r)),doStream:r=>n(o=>o.doStream(r))}}function qt(e){let t=e.code===pe?"credential broker does not support the raw proxy endpoints required by this SDK version \u2014 deploy a newer broker or pin an older SDK":e.message;throw u.brokerError(e.status,t,R(e.body),e.code)}async function be(e,t={}){let n=A(),{region:r}=v(),{headers:o,deploymentId:s}=G(n);s&&(o[te]=s);let i=me(r,n.mode==="lambda"?"runtime":"dev"),a;try{a=await vn({proxyUrl:i,credentialHeaders:o,request:e,timeoutMs:t.timeout,executionId:n.executionId})}catch(c){let l=c instanceof Error?c.message??String(c):String(c);throw u.brokerError(0,l)}return a.kind==="brokerError"&&qt(a),a.response}var ui=8,Nr="msg#",di="meta",Mr=25,Lr=3,pi=400*1024-1024,mi=32,K=e=>({S:e}),je=e=>({N:String(e)});function Vt(e,t){let n=e?.[t]?.S;return typeof n=="string"?n:void 0}function zt(e,t){let n=e?.[t]?.N;return typeof n=="string"?Number(n):void 0}function fi(e,t){return e?.[t]?.BOOL===!0}function Gt(e,t){let n=e?.[t]?.M;return typeof n=="object"&&n!==null?n:{}}function gi(e){return`${Nr}${String(e).padStart(ui,"0")}`}function yi(e){let t=null;if(typeof e=="string")try{t=JSON.parse(e)}catch{return}else e!==null&&typeof e=="object"&&(t=e);let n=t?.__type;return typeof n=="string"?n.split("#").pop():void 0}function Ur(e){let{agentName:t,table:n,region:r,authenticationId:o}=e,s=e.options?.maxSessionMessages??ye,i=e.options?.ttl??he,a=e.sessionId??`ses_${crypto.randomUUID().replaceAll("-","")}`,c=$t(t,a,e.ownerUserId),l={pk:K(c),sk:K(di)};async function d(h,S){let x=ne({authenticationId:o,method:"POST",url:`https://dynamodb.${r}.amazonaws.com/`,body:S,headers:{"Content-Type":"application/x-amz-json-1.0","X-Amz-Target":`DynamoDB_20120810.${h}`}}),C,L;try{({status:C,body:L}=await be(x))}catch(I){throw I instanceof u?I:u.agentSessionsFailed(I instanceof Error?I.message:String(I))}if(C>=400){let I=yi(L);throw I==="ConditionalCheckFailedException"?new mt:u.agentSessionsFailed(`DynamoDB ${h} failed (${C}): ${I??JSON.stringify(L).slice(0,300)}`)}if(typeof L=="string")try{return JSON.parse(L)}catch{throw u.agentSessionsFailed(`DynamoDB ${h}: non-JSON response body`)}return L??{}}async function p(){return(await d("GetItem",{TableName:n,Key:l,ConsistentRead:!0})).Item}let m=!1;async function g(){if(m)return;m=!0;let h=await p();if(!h)return;let S=zt(h,"lastActiveAt")??0;if(!(Date.now()-S<=i*1e3)){if(Object.keys(Gt(h,"pendingApprovals")).length>0)throw new ae(a);await f()}}async function w(h){let S=[],x;do{let C=await d("Query",{TableName:n,KeyConditionExpression:"pk = :pk AND begins_with(sk, :prefix)",ExpressionAttributeValues:{":pk":K(c),":prefix":K(Nr)},ConsistentRead:!0,ScanIndexForward:h.ascending,...h.limit!==void 0?{Limit:h.limit}:{},...h.projection!==void 0?{ProjectionExpression:h.projection}:{},...x!==void 0?{ExclusiveStartKey:x}:{}});if(S.push(...C.Items??[]),x=C.LastEvaluatedKey,h.limit!==void 0&&S.length>=h.limit)break}while(x!==void 0);return S}async function D(h){for(let S=0;S<h.length;S+=Mr){let x=h.slice(S,S+Mr);for(let C=0;x.length>0;C++){let I=(await d("BatchWriteItem",{RequestItems:{[n]:x}})).UnprocessedItems?.[n];if(!I||I.length===0)break;if(C>=Lr)throw u.agentSessionsFailed(`DynamoDB BatchWriteItem: ${I.length} items still unprocessed after ${Lr} retries`);x=I}}}async function f(){let S=(await w({ascending:!0,projection:"sk"})).map(x=>({DeleteRequest:{Key:{pk:K(c),sk:x.sk}}}));S.push({DeleteRequest:{Key:l}}),await D(S)}async function y(h){let S=Date.now();return(await d("UpdateItem",{TableName:n,Key:l,UpdateExpression:"ADD nextSeq :reserve, messageCount :reserve SET lastActiveAt = :now, expiresAt = :expires, createdAt = if_not_exists(createdAt, :now), truncated = if_not_exists(truncated, :false), pendingApprovals = if_not_exists(pendingApprovals, :emptyMap)",ExpressionAttributeValues:{":reserve":je(h),":now":je(S),":expires":je(Math.floor(S/1e3)+i),":false":{BOOL:!1},":emptyMap":{M:{}}},ReturnValues:"ALL_NEW"})).Attributes??{}}async function E(h){let x=(zt(h,"messageCount")??0)-s;if(x<=0)return;let C=new Set(Object.keys(Gt(h,"pendingApprovals"))),L=await w({ascending:!0,limit:x+C.size+mi}),I=L.map(Je=>JSON.parse(Vt(Je,"message")??"null")),ee=jt(I,x,C),Te=L.filter((Je,zo)=>ee.has(zo));Te.length!==0&&(await D(Te.map(Je=>({DeleteRequest:{Key:{pk:K(c),sk:Je.sk}}}))),await d("UpdateItem",{TableName:n,Key:l,UpdateExpression:"ADD messageCount :delta SET truncated = :true",ExpressionAttributeValues:{":delta":je(-Te.length),":true":{BOOL:!0}}}))}return{id:a,async messages(h){await g();let S=h?.limit;return S!==void 0?(await w({ascending:!1,limit:S})).reverse().map(L=>JSON.parse(Vt(L,"message")??"null")):(await w({ascending:!0})).map(C=>JSON.parse(Vt(C,"message")??"null"))},async append(...h){if(h.length===0)return;let S=h.map(ee=>JSON.stringify(ee)),x=S.findIndex(ee=>Buffer.byteLength(ee,"utf8")>pi);if(x!==-1)throw u.agentSessionsFailed(`a ${h[x].role} message of ${Buffer.byteLength(S[x],"utf8")} bytes exceeds DynamoDB's 400 KB item limit \u2014 the session store keeps one item per message; have tools summarise or offload (ctx.files) large results`);await g();let C=await y(h.length),I=(zt(C,"nextSeq")??h.length)-h.length+1;await D(S.map((ee,Te)=>({PutRequest:{Item:{pk:K(c),sk:K(gi(I+Te)),message:K(ee)}}}))),await E(C)},async clear(){await f()},async truncated(){return await g(),fi(await p(),"truncated")},async pendingApprovals(){await g();let h=Gt(await p(),"pendingApprovals");return Object.values(h).map(S=>{let x=S.S;return x!==void 0?JSON.parse(x):void 0}).filter(S=>S!==void 0)},async addPendingApprovals(h){if(h.length===0)return;await g(),await y(0);let S={},x={},C=[];h.forEach((L,I)=>{S[`#a${I}`]=L.approvalId,x[`:v${I}`]=K(JSON.stringify(L)),C.push(`pendingApprovals.#a${I} = :v${I}`)}),await d("UpdateItem",{TableName:n,Key:l,UpdateExpression:`SET ${C.join(", ")}`,ExpressionAttributeNames:S,ExpressionAttributeValues:x})},async resolveApproval(h){await g();try{return await d("UpdateItem",{TableName:n,Key:l,UpdateExpression:"REMOVE pendingApprovals.#id SET lastActiveAt = :now",ConditionExpression:"attribute_exists(pendingApprovals.#id)",ExpressionAttributeNames:{"#id":h},ExpressionAttributeValues:{":now":je(Date.now())}}),"resolved"}catch(S){if(S instanceof mt)return"already-resolved";throw S}}}}var mt=class extends Error{constructor(){super("ConditionalCheckFailedException"),this.name="ConditionalCheckFailed"}};import hi from"ky";async function H(e){let t=e.headers.get("content-type")??"",n=await e.text();if(n.length!==0)return t.includes("application/json")?JSON.parse(n):n}var wi=6e4;function $r(e){let t=v();if(t.kind!=="provisioned")throw u.agentSessionsFailed("the managed session store requires a provisioned project (projectId in helix.config.ts)");return`${j(t.region).hosts.api}/private/v1/helix/projects/${encodeURIComponent(t.projectId)}/storage/agent-sessions/${encodeURIComponent(e)}`}function Si(){let e=de(),t=$(),n={Accept:"application/json"};if(e&&e.trim().length>0&&(n[ue]=e),t&&t.trim().length>0&&(n[U]=t),Object.keys(n).length===1)throw u.missingExecutionCredentials();return n}async function W(e,t,n){try{let r=await hi(t,{method:e,headers:Si(),...n!==void 0?{json:n}:{},throwHttpErrors:!1,timeout:wi});return{status:r.status,body:await H(r)}}catch(r){throw r instanceof u?r:u.agentSessionsFailed(`managed session store unreachable: ${r instanceof Error?r.message:String(r)}`)}}function Jt(e){if(e!==null&&typeof e=="object"){let t=e;if(typeof t.message=="string")return t.message}return String(e??"unknown error")}function le(e,t,n){throw t===410?new ae(e):t===404?new M(`Agent session "${e}" was not found (it may belong to a different user or have expired).`):u.agentSessionsFailed(`managed session store error ${t}: ${Jt(n)}`)}function jr(e){let t=$r(e.agentName),n=e.sessionId??`ses_${crypto.randomUUID().replaceAll("-","")}`,r=e.options?.scope,o=e.options?.ttl??he,s=e.options?.maxSessionMessages??ye,i=async a=>{let c=new URL(`${t}/${encodeURIComponent(n)}/messages`);a!==void 0&&c.searchParams.set("cursor",a);let{status:l,body:d}=await W("get",c.toString());if(l!==404)return(l<200||l>=300)&&le(n,l,d),d};return{id:n,async messages(a){let c=[],l;for(;;){let p=await i(l);if(p===void 0)return[];if(c.push(...p.elements),!p.pageInfo.hasNextPage||p.pageInfo.endCursor===null)break;l=p.pageInfo.endCursor}let d=c.map(p=>p.message);return a?.limit!==void 0?d.slice(-a.limit):d},async append(...a){if(a.length===0)return;let{status:c,body:l}=await W("post",`${t}/${encodeURIComponent(n)}/messages`,{messages:a,...r!==void 0?{scope:r}:{},ttl:o,maxMessages:s});(c<200||c>=300)&&le(n,c,l)},async clear(){let{status:a,body:c}=await W("delete",`${t}/${encodeURIComponent(n)}`);a!==204&&a!==404&&le(n,a,c)},async truncated(){let{status:a,body:c}=await W("get",`${t}/${encodeURIComponent(n)}`);return a===404?!1:((a<200||a>=300)&&le(n,a,c),c.truncated===!0)},async pendingApprovals(){let{status:a,body:c}=await W("get",`${t}/${encodeURIComponent(n)}`);return(a<200||a>=300)&&le(n,a,c),c.pendingApprovals},async addPendingApprovals(a){if(a.length===0)return;let{status:c,body:l}=await W("post",`${t}/${encodeURIComponent(n)}/approvals`,{approvals:a});c!==204&&le(n,c,l)},async resolveApproval(a){let{status:c,body:l}=await W("post",`${t}/${encodeURIComponent(n)}/approvals/${encodeURIComponent(a)}/resolve`);return(c<200||c>=300)&&le(n,c,l),l.status}}}async function Br(e,t={}){let n=$r(e),r=new URL(n);t.first!==void 0&&r.searchParams.set("first",String(t.first)),t.cursor!==void 0&&r.searchParams.set("cursor",t.cursor);let{status:o,body:s}=await W("get",r.toString());if(o===400)throw new M(Jt(s));if(o<200||o>=300)throw u.agentSessionsFailed(`managed session store error ${o}: ${Jt(s)}`);let i=s;return{sessions:i.elements.map(a=>({id:a.sessionId,createdAt:a.createdAt,lastActivityAt:a.lastActivityAt,messageCount:a.messageCount,pendingApprovals:a.pendingApprovalCount})),nextCursor:i.pageInfo.endCursor}}function Kr(e){if(e?.scope!=="user")return;let t=hn.getStore()?.userId;if(typeof t!="string"||t.length===0)throw new M('This agent is user-scoped (memory.scope: "user") \u2014 it can only run in a user execution with a user identity (ctx.userId); schedules have none.');return t}function Hr(){return A().mode==="lambda"}function ft(e,t,n){let r=v(),o=r.agentSessions,s=Kr(n);if(o?.store==="dynamodb"){let i=r.authentications??{},a=i[o.auth];if(!a)throw u.unknownAlias(o.auth,Object.keys(i));return Ur({agentName:e,sessionId:t,authenticationId:a,table:o.table,region:o.region,options:n,...s!==void 0?{ownerUserId:s}:{}})}return Hr()?jr({agentName:e,sessionId:t,options:n}):wr(e,t,n,s)}async function qr(e,t,n={}){if(t?.scope!=="user")throw new M(`agent.sessions() lists the calling user's sessions \u2014 the agent must declare memory.scope: "user".`);if(v().agentSessions?.store==="dynamodb")throw new M('agent.sessions() is not supported on the bring-your-own DynamoDB session store \u2014 use the managed store (agentSessions: { store: "managed" }).');let o=Kr(t);return Hr()?Br(e,n):Sr(e,o,n)}var Jr=new bi;function Ii(e){return({steps:t})=>t.reduce((n,r)=>n+r.toolCalls.length,0)>=e}function Xr(e,t,n,r){return F.startActiveSpan("agent.tool",{kind:Xt.INTERNAL,attributes:{agent:e,tool:t,...n}},async o=>{try{let s=await r();return o.setAttribute("status","success"),o.setStatus({code:ve.OK}),s}catch(s){throw o.setAttribute("status","error"),o.setStatus({code:ve.ERROR,message:s instanceof Error?s.message:String(s)}),s}finally{o.end()}})}function Ri(e){let t={};for(let n of e.tools??[]){let r=n.needsApproval;t[n.name]=zr({description:n.description,inputSchema:n.inputSchema,...r!==void 0?{needsApproval:typeof r=="function"?o=>r(o):r}:{},execute:o=>Xr(e.name,n.name,{},()=>n.execute(o,Xe()))})}for(let n of e.agents??[]){let r=Ue(n),o=`agent_${n.replaceAll("-","_")}`;t[o]=zr({description:r.description,inputSchema:Vr.object({prompt:Vr.string().describe("The task or question for the agent")}),execute:({prompt:s})=>Xr(e.name,o,{delegateAgent:n},async()=>{let i=Jr.getStore()??0;return i>=Nt?{error:"delegation_depth_exceeded",message:`Delegation depth limit (${Nt}) reached \u2014 answer with what you have instead of delegating further.`}:(await Jr.run(i+1,()=>_i(n).generate({prompt:s}))).text})})}return t}function Ti(e){let t=[{model:e.model,auth:e.auth},...e.fallbacks??[]];return Fr(t.map(n=>Kt(n.auth)(n.model)))}function Yt(e){return e.filter(t=>typeof t=="object"&&t!==null&&t.type==="tool-approval-request"&&!t.isAutomatic)}function Yr(e){return{approvalId:e.approvalId,toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,input:e.toolCall.input,requestedAt:new Date().toISOString()}}function Ci(e){return{id:e.approvalId,toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId,input:e.toolCall.input}}function ki(e){let t=new Set;for(let n of e)if(Array.isArray(n.content))for(let r of Yt(n.content))t.add(r.approvalId);return t}function Pi(e,t){let n=e.reduce((r,o)=>r+lt(o.response.modelId??t,o.usage).amount,0);return{amount:Number(n.toFixed(8)),currency:"USD"}}async function Oi(e,t,n){let r=[],o=[];if(n.approvals&&n.approvals.length>0){let s=new Map((await e.pendingApprovals()).map(l=>[l.approvalId,l])),i=ki(t),a=n.approvals.map(l=>l.id).filter(l=>!s.has(l)&&!i.has(l));if(a.length>0)throw new M(`Unknown approval id(s) for session "${e.id}": ${a.join(", ")} \u2014 use the ids from \`pendingApprovals\` on the paused result.`);let c=[];for(let l of n.approvals){let d=s.get(l.id);!d||await e.resolveApproval(l.id)==="already-resolved"||(o.push(d),c.push({type:"tool-approval-response",approvalId:l.id,approved:l.approved,...l.reason!==void 0?{reason:l.reason}:{}}))}c.length>0&&r.push({role:"tool",content:c})}if(n.prompt!==void 0?r.push({role:"user",content:n.prompt}):n.messages&&r.push(...n.messages),r.length===0)throw new M("agent.generate() requires `prompt`, `messages`, or `approvals` \u2014 nothing to do.");return{turn:r,claimed:o}}function _i(e){let t=Ue(e);mr(e);let n=pr(e),r=Ti(t),o=Ri(t),s=t.limits?.maxIterations??gr,i=t.limits?.maxToolCalls??yr,a=c=>({model:r,system:n,tools:o,stopWhen:c.stopWhen??[Ai(s),Ii(i)],...c.prepareStep!==void 0?{prepareStep:c.prepareStep}:{},...c.activeTools!==void 0?{activeTools:c.activeTools}:{},...c.toolChoice!==void 0?{toolChoice:c.toolChoice}:{},...c.providerOptions!==void 0?{providerOptions:c.providerOptions}:{}});return{model:r,tools:o,instructions:n,session(c){return ft(e,c,t.memory)},sessions(c){return qr(e,t.memory,c)},async generate(c){return F.startActiveSpan("agent.generate",{kind:Xt.INTERNAL,attributes:{agent:e,model:t.model}},async l=>{let d=ft(e,c.sessionId,t.memory);l.setAttribute("sessionId",d.id),k("hasAi");let p=[];try{let m=await d.messages(),g=await Oi(d,m,c);p=g.claimed;let w;try{w=await vi({...a(c),messages:[...m,...g.turn]})}catch(y){if(p.length>0)try{await d.addPendingApprovals(p),p=[]}catch(E){console.error(`[helix-sdk] agent "${e}" session "${d.id}": failed to restore ${p.length} pending approval(s) after a failed resume \u2014 ${E instanceof Error?E.message:String(E)}`)}throw y}let D=Yt(w.content),f=D.length>0?"awaiting-approval":"completed";return await d.append(...g.turn,...w.response.messages),D.length>0&&await d.addPendingApprovals(D.map(Yr)),l.setAttributes({steps:w.steps.length,status:f}),l.setStatus({code:ve.OK}),Object.assign(w,{sessionId:d.id,status:f,...D.length>0?{pendingApprovals:D.map(Ci)}:{},helix:{cost:Pi(w.steps,t.model),model:w.response.modelId??t.model}})}catch(m){throw l.setAttribute("status","error"),l.setStatus({code:ve.ERROR,message:m instanceof Error?m.message:String(m)}),m}finally{l.end()}})},async stream(c){let l=F.startSpan("agent.stream",{kind:Xt.INTERNAL,attributes:{agent:e,model:t.model}}),d=!1,p=(m,g)=>{d||(d=!0,l.setAttribute("status",m),l.setStatus(m==="error"?{code:ve.ERROR,...g!==void 0?{message:g}:{}}:{code:ve.OK}),l.end())};try{let m=ft(e,c.sessionId,t.memory);if(l.setAttribute("sessionId",m.id),k("hasAi"),c.approvals&&c.approvals.length>0)throw new M("agent.stream() does not accept approvals \u2014 resume paused runs with generate().");if(c.prompt===void 0&&!c.messages)throw new M("agent.stream() requires `prompt` or `messages`.");let g=c.prompt!==void 0?[{role:"user",content:c.prompt}]:[...c.messages],w=await m.messages(),D=Gr.with(Ei.setSpan(Gr.active(),l),()=>xi({...a(c),messages:[...w,...g],onFinish:async f=>{try{await m.append(...g,...f.response.messages);let y=Yt(f.content);y.length>0&&await m.addPendingApprovals(y.map(Yr)),p(y.length>0?"awaiting-approval":"completed")}catch(y){let E=y instanceof Error?y.message:String(y);console.error(`[helix-sdk] agent "${e}" session "${m.id}": failed to persist the streamed turn \u2014 ${E}`),p("error",E)}},onError:({error:f})=>{p("error",f instanceof Error?f.message:String(f))},onAbort:()=>{p("error","stream aborted")}}));return Object.assign(D,{sessionId:m.id})}catch(m){throw p("error",m instanceof Error?m.message:String(m)),m}}}}var Wr="helix-schedule",Q=class extends Error{constructor(t){super(`defineSchedule: ${t}`),this.name="ScheduleConfigError"}};function $u(e){if(typeof e!="object"||e===null)throw new Q("expected a config object");let{cron:t,timezone:n="UTC",concurrent:r=!1,handler:o}=e;if(typeof t!="string"||t.trim()==="")throw new Q("`cron` must be a non-empty string");let s=t.trim().split(/\s+/).length;if(s!==5)throw new Q(`\`cron\` must be a 5-field standard expression (minute hour day-of-month month day-of-week); got ${s} field(s) in "${t}"`);if(typeof n!="string"||!Di(n))throw new Q(`\`timezone\` must be a valid IANA timezone name (e.g. "Europe/London"); got "${String(n)}"`);if(typeof r!="boolean")throw new Q("`concurrent` must be a boolean");if(typeof o!="function")throw new Q("`handler` must be a function");return Object.freeze({kind:Wr,cron:t.trim(),timezone:n,concurrent:r,handler:o})}function ju(e){return typeof e=="object"&&e!==null&&e.kind===Wr&&typeof e.handler=="function"}function Di(e){if(!/^[A-Za-z]/.test(e))return!1;try{return new Intl.DateTimeFormat(void 0,{timeZone:e}),!0}catch{return!1}}import{SpanKind as Fi}from"@opentelemetry/api";function gt(e,t,n){let r=F.startSpan("log",{kind:Fi.INTERNAL});r.setAttribute("message",t),r.setAttribute("level",e),n&&zn(r.spanContext().spanId,"properties",n),r.end(),_n(e,t,n)}function Qr(){return{info:(e,t)=>gt("info",e,t),warn:(e,t)=>gt("warn",e,t),error:(e,t)=>gt("error",e,t),debug:(e,t)=>gt("debug",e,t)}}function Gu(){try{return v().config??{}}catch(e){return console.warn(`[helix-sdk] Config not loaded: ${e instanceof Error?e.message:String(e)}. Using empty config.`),{}}}import Mi from"ky";import{context as Wt,trace as Li,SpanKind as Ke,SpanStatusCode as eo}from"@opentelemetry/api";async function Zr(e){xn(e.url);let t=A(),{region:n}=v(),r={authenticationId:e.authenticationId,url:e.url,...e.method!==void 0?{method:e.method}:{},...e.expiresIn!==void 0?{expiresIn:e.expiresIn}:{}},{headers:o,deploymentId:s}=G(t);s&&(r.deploymentId=s);let i=An(n,t.mode==="lambda"?"runtime":"dev"),a;try{a=await En({signUrl:i,credentialHeaders:o,body:r,timeoutMs:e.timeout,executionId:t.executionId})}catch(c){let l=c instanceof Error?c.message??String(c):String(c);throw u.brokerError(0,l)}if(a.kind==="brokerError"){let c=a.code===pe?"credential broker does not support the s3 sign endpoint required by this SDK version \u2014 deploy a newer broker or pin an older SDK":a.message;throw u.brokerError(a.status,c,R(a.body),a.code)}return a.result}var Ni=new Set([Ce,Ye,te,ke,"authorization","x-tray-token","x-helix-project-execution-token","host","content-length","connection","transfer-encoding","te","upgrade","keep-alive","expect","proxy-authorization","proxy-connection","accept-encoding","x-request-id"]);function Ui(e){let t=e.toLowerCase();return Ni.has(t)||t.startsWith("x-tray-internal-")}async function $i(e,t){let n=e instanceof Request?e:new Request(e,t),r=new URL(n.url);if(r.protocol!=="https:")throw u.unsupportedScheme(r.protocol.replace(/:$/,""));let o=A(),{region:s}=v(),{headers:i,deploymentId:a}=G(o),c=me(s,o.mode==="lambda"?"runtime":"dev"),l=new Headers;for(let[g,w]of n.headers.entries())Ui(g)||l.append(g,w);l.set(Ce,n.url);for(let[g,w]of Object.entries(i))l.set(g,w);a&&l.set(te,a),o.executionId&&l.set(ke,o.executionId);let d={method:n.method,headers:l,redirect:"manual",signal:n.signal};n.body&&(d.body=n.body,d.duplex="half");let p;try{p=await fetch(c,d)}catch(g){throw g instanceof Error&&g.name==="AbortError"?g:u.brokerError(0,g instanceof Error?g.message:String(g))}let m=p.headers.get(We);return m!==null&&qt(await bn(p,m)),p}var ji=["get","post","put","patch","delete","head","options"],no="[stream body omitted]";function ro(e){return typeof ReadableStream<"u"&&e instanceof ReadableStream?no:e instanceof ArrayBuffer?`[binary body: ${e.byteLength} bytes]`:ArrayBuffer.isView(e)?`[binary body: ${e.byteLength} bytes]`:typeof Blob<"u"&&e instanceof Blob?`[binary body: ${e.size} bytes]`:e}function Qt(e){try{return new URL(e).hostname}catch{return e}}function to(e,t,n,r,o){let s=Qt(t),i="externalApi",a={kind:Ke.CLIENT};return F.startActiveSpan(i,a,async c=>(c.setAttributes({method:e,host:s,"peer.service":r}),V(c,"request",{url:t,method:e,...n!==void 0?{body:ro(n)}:{}}),o(c)))}function Be(e,t,n){e.setAttribute("status",t),e.setStatus(t==="success"?{code:eo.OK}:{code:eo.ERROR,message:n}),e.end()}var Bi=16;async function Ki(e,t){let n=e.clone().body;return n?oo(n,t):new Uint8Array(0)}async function oo(e,t){let n=e.getReader(),r=[],o=0,s=0;try{for(;;){let{done:c,value:l}=await n.read();if(c)break;if(!l||l.byteLength===0){if(s+=1,s>=Bi)break;continue}s=0;let d=t+1-o;if(l.byteLength>=d){r.push(l.slice(0,d)),o+=d;break}r.push(l),o+=l.byteLength}}finally{n.cancel().catch(()=>{}),n.releaseLock()}let i=new Uint8Array(o),a=0;for(let c of r)i.set(c,a),a+=c.byteLength;return i}async function so(e,t,n){if("kyResponse"in n)try{let r=await Ki(n.kyResponse,Oe),o=new TextDecoder("utf-8").decode(r,{stream:!0}),s;try{s=JSON.parse(o)}catch{s=o}V(e,"response",s)}catch{V(e,"response",{status:t})}else V(e,"response",ro(n.bodyValue))}async function Hi(e,t){if(t instanceof ReadableStream){let n=e.body??t;try{let[r,o]=n.tee(),s=new Request(e,{body:r,duplex:"half"}),i=await oo(o,Oe);return{body:new TextDecoder("utf-8").decode(i,{stream:!0}),request:s}}catch{return{body:no}}}return typeof t=="string"?{body:t}:{}}function pd(){let e=Mi.create({fetch:$i,retry:{shouldRetry:({error:r})=>r instanceof u?!1:void 0}});function t(r){return(o,s)=>{let i=Wt.active(),a,c=!1,l=(p,m)=>{a&&!c&&(c=!0,Be(a,p,m))},d=e.extend({hooks:{beforeRequest:[async(p,m)=>{let g=await Hi(p,m.body),w=g.body;if(a||(a=F.startSpan("externalApi",{kind:Ke.CLIENT},i)),a.setAttributes({method:p.method.toUpperCase(),host:Qt(p.url)}),V(a,"request",{url:p.url,method:p.method.toUpperCase(),...w!==void 0?{body:w}:{}}),c=!1,k("hasExternal"),g.request)return g.request}],beforeRetry:[p=>{l("error","retry"),a=void 0,c=!1}],afterResponse:[async(p,m,g)=>{a&&(a.setAttribute("statusCode",g.status),await so(a,g.status,{kyResponse:g}),g.ok?l("success"):s?.throwHttpErrors===!1&&(k("hasError"),l("error",`HTTP ${g.status}`)))}],beforeError:[p=>(k("hasError"),l("error",p.message),p)]}});return a=F.startSpan("externalApi",{kind:Ke.CLIENT},i),a.setAttributes({method:r.toUpperCase(),host:Qt(String(o))}),Wt.with(Li.setSpan(Wt.active(),a),()=>{let p=r==="options"?d(o,{...s,method:"OPTIONS"}):d[r](o,s);return p.catch(m=>{k("hasError"),l("error",m instanceof Error?m.message:String(m))}),p})}}let n=Object.fromEntries(ji.map(r=>[r,t(r)]));return{...e,...n,authed(r){return qi(r)}}}function qi(e){let n=v().authentications??{};if(!n[e])throw u.unknownAlias(e,Object.keys(n));let r=n[e];function o(i){return(a,c={})=>{let l=i.toUpperCase();return to(l,a,c.body,e,async d=>{k("hasAuth");let p=F.startSpan("auth",{kind:Ke.INTERNAL});p.setAttribute("alias",e),p.setAttribute("id",r),p.end();try{let m=ne({authenticationId:r,method:l,url:a,body:c.body,headers:c.headers,query:c.query}),g=await be(m,{timeout:c.timeout});return d.setAttribute("statusCode",g.status),await so(d,g.status,{bodyValue:g.body}),Be(d,"success"),g}catch(m){throw k("hasError"),m instanceof u&&m.detail.kind==="broker_error"&&m.detail.status>0&&d.setAttribute("statusCode",m.detail.status),Be(d,"error",m instanceof Error?m.message:String(m)),m}})}}function s(i,a={}){let c=a.method??"GET";return to(c,i,void 0,e,async l=>{k("hasAuth");let d=F.startSpan("auth",{kind:Ke.INTERNAL});d.setAttribute("alias",e),d.setAttribute("id",r),d.end();try{let p=await Zr({authenticationId:r,url:i,method:c,...a.expiresIn!==void 0?{expiresIn:a.expiresIn}:{},...a.timeout!==void 0?{timeout:a.timeout}:{}});return l.setAttribute("statusCode",200),Be(l,"success"),p}catch(p){throw k("hasError"),p instanceof u&&p.detail.kind==="broker_error"&&p.detail.status>0&&l.setAttribute("statusCode",p.detail.status),Be(l,"error",p instanceof Error?p.message:String(p)),p}})}return{get:o("get"),post:o("post"),put:o("put"),patch:o("patch"),delete:o("delete"),head:o("head"),options:o("options"),s3Sign:s}}import{SpanKind as Zi,SpanStatusCode as lo}from"@opentelemetry/api";function He(e){let t=e.trimStart().match(/^([A-Za-z]+)/);return t?t[1].toUpperCase():"QUERY"}var Vi=18e4,io=Vi-1e4,zi=2e3;async function ao(e,t,n){let r=new Set(["FINISHED","FAILED","ABORTED"]),o=Date.now(),s=0;for(;Date.now()-o<io;){let i=await e(t,"DescribeStatement",{Id:n}),a=i.Status;if(r.has(a))return i;let c=Math.min(zi,200*2**s),l=c/2+Math.random()*(c/2),d=io-(Date.now()-o);await new Promise(p=>setTimeout(p,Math.min(l,d))),s++}throw u.dbCallFailed(`statement polling exceeded budget after ${Date.now()-o}ms`)}var Gi=new Set(["SELECT","WITH","SHOW"]),Ji=new Set(["INSERT","UPDATE","DELETE","MERGE"]);function Xi(e){if(!e.clusterIdentifier&&!e.workgroupName)throw u.dbInvalidParameters("either clusterIdentifier or workgroupName is required");if(e.clusterIdentifier&&e.workgroupName)throw u.dbInvalidParameters("clusterIdentifier and workgroupName are mutually exclusive (Provisioned vs Serverless)");if(!e.database)throw u.dbInvalidParameters("database is required");if(e.clusterIdentifier&&!e.dbUser)throw u.dbInvalidParameters("dbUser is required when using clusterIdentifier (Provisioned)");if(!e.region)throw u.dbInvalidParameters("region is required")}function Yi(e,t){let n=null;if(typeof t=="string")try{n=JSON.parse(t)}catch{}else t!==null&&typeof t=="object"&&(n=t);let r=typeof n?.__type=="string"?n.__type:void 0,o=typeof n?.message=="string"?n.message:void 0;if(r&&o)return u.dbQueryFailed(`${r}: ${o}`);let s=typeof t=="string"?re(t):R(t);return u.dbCallFailed(s)}function Wi(e){if(e==null||typeof e!="string")return e;try{return JSON.parse(e)}catch{throw u.dbCallFailed("upstream body not JSON: "+e.slice(0,200))}}function Qi(e,t){return typeof t!="number"||t<0?{}:Gi.has(e)?{rowsRead:t}:Ji.has(e)?{rowsWritten:t}:{}}function co(e){async function t(n,r,o){let s=ne({authenticationId:e,method:"POST",url:`https://redshift-data.${n}.amazonaws.com/`,body:o,headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`RedshiftData.${r}`}});try{let{status:i,body:a}=await be(s);if(i>=400)throw Yi(i,a);return Wi(a)}catch(i){if(i instanceof u)throw i;let a=i instanceof Error?i.message??String(i):String(i);throw u.dbCallFailed(a,i instanceof Error?i:void 0)}}return{system:"redshift",validate:Xi,async execute(n,r){let o=He(r),s={Sql:r,Database:n.database,...n.clusterIdentifier&&{ClusterIdentifier:n.clusterIdentifier,DbUser:n.dbUser},...n.workgroupName&&{WorkgroupName:n.workgroupName},...n.statementName&&{StatementName:n.statementName}},i=await t(n.region,"ExecuteStatement",s),a=i,c=typeof a?.Id=="string"?a.Id:void 0;if(!c){let g=R(i);throw u.dbCallFailed(`ExecuteStatement response missing Id; got: ${g}`)}let l=await ao(t,n.region,c),d=l.Status;if(d==="FAILED"){let g=typeof l.Error=="string"?l.Error:"statement failed";throw u.dbQueryFailed(`${g} (statement: ${c})`)}if(d==="ABORTED")throw u.dbQueryFailed(`statement aborted (statement: ${c})`);let p=Qi(o,l.ResultRows);return l.HasResultSet===!1?{result:{rowsAffected:l.ResultRows??0},metadata:p}:{result:await t(n.region,"GetStatementResult",{Id:c}),metadata:p}}}}var Zt=64*1024;function ea(e){return e.length>Zt?`${e.slice(0,Zt)}...[truncated]`:e}function ta(e,t,n,r,o){e.setAttributes({system:t.system,statement:o,namespace:n.database,operation:r})}function na(e,t,n){let r=typeof t=="string"?t:JSON.stringify(t);return r.length>Zt?V(e,"result",{truncated:!0,size:r.length}):V(e,"result",t),n.rowsRead!==void 0&&e.setAttribute("rowsRead",n.rowsRead),n.rowsWritten!==void 0&&e.setAttribute("rowsWritten",n.rowsWritten),r}async function ra(e,t,n){let r=He(n),o=ea(n);return F.startActiveSpan("database",{kind:Zi.CLIENT},async s=>{ta(s,e,t,r,o);try{k("hasDb");let{result:i,metadata:a}=await e.execute(t,n),c=na(s,i,a);return s.setAttribute("status","success"),s.setStatus({code:lo.OK}),c}catch(i){k("hasError");let a=i instanceof Error?i.message:String(i);throw s.setAttribute("status","error"),s.setStatus({code:lo.ERROR,message:a}),i}finally{s.end()}})}function oa(e){let n=v().authentications??{};if(!n[e])throw u.unknownAlias(e,Object.keys(n));let r=n[e],o=co(r);function s(i,a){return o.validate(i),ra(o,i,a)}return{parameters(i){return{sql(a){return s(i,a)}}},sql(i){return s({},i)}}}import{createStorage as la}from"unstorage";var uo=1024,en=250*1024,sa=new TextEncoder,ia=/(^|\/)\.\.(\/|$)/,aa=/[?#]/,ca=/[\u0000-\u001F\u007F]/;function po(e){if(e.length===0)throw u.kvKeyInvalid("Key must be a non-empty string");if(ia.test(e))throw u.kvKeyInvalid("Key contains path traversal segment");if(aa.test(e)||ca.test(e))throw u.kvKeyInvalid("Key contains illegal characters");if(e.startsWith("/")||e.endsWith("/")||e.split("/").some(n=>n===""))throw u.kvKeyInvalid("Key must not contain empty path segments");let t=sa.encode(e).length;if(t<1||t>uo)throw u.kvKeyInvalid(`Key must be between 1 and ${uo} UTF-8 bytes (got ${t})`)}function mo(e){if(!Number.isInteger(e)||e<=0)throw u.kvTtlInvalid(`ttl must be a positive integer number of seconds (got ${e})`)}function fo(e){let t;try{t=JSON.stringify(e)}catch{throw u.kvValueInvalid("Value must be JSON-serializable")}if(t===void 0)throw u.kvValueInvalid("Value must be JSON-serializable");let n=Buffer.byteLength(t,"utf8");if(n>en)throw u.kvValueTooLarge(`Value exceeds maximum size of ${en} bytes (got ${n})`,en)}function qe(e){po(e)}function yt(e,t){let n=e[t];if(typeof n!="function")throw new Error(`KV driver is missing ${t}`);return n}function go(e){let t=yt(e,"getItem"),n=yt(e,"setItem"),r=yt(e,"removeItem"),o=yt(e,"hasItem"),s=e.getKeys;return{...e,getItem(i,a){return qe(i),t(i,a)},setItem(i,a,c){return qe(i),n(i,a,c)},removeItem(i,a){return qe(i),r(i,a)},hasItem(i,a){return qe(i),o(i,a)},getKeys(i,a){return i.length>0&&qe(i),s(i,a)}}}function ht(e){return la({driver:go(e)})}import{defineDriver as ua}from"unstorage";function da(e){try{return JSON.parse(e)}catch{return e}}var pa=ua(e=>{let{client:t}=e;return{name:"helix-kv",async getItem(n){let r=await t.get(n);return r===null?null:JSON.stringify(r)},async setItem(n,r,o){let s=o?.ttl,i=da(r);s!==void 0?await t.set(n,i,{ttl:s}):await t.set(n,i)},async removeItem(n){await t.delete(n)},async hasItem(n){return await t.has(n)},async getKeys(){throw new Error("KV key listing is not supported")}}});function yo(e){return pa({client:e})}import ga from"ky";import{z as _}from"zod";function ho(e){return j(e).hosts.api}function ma(e){return`/private/v1/helix/projects/${encodeURIComponent(e)}/storage/kv`}function fa(e){return e.split("/").map(encodeURIComponent).join("/")}function Ve(e,t,n){return`${e}${ma(t)}/${fa(n)}`}var ya=6e4,tn=_.lazy(()=>_.union([_.string(),_.number(),_.boolean(),_.null(),_.array(tn),_.record(tn)])),ha=_.object({projectId:_.string(),key:_.string(),value:tn,type:_.enum(["string","number","boolean","null","array","object"]),organizationId:_.string(),scope:_.string(),createdBy:_.string(),createdAt:_.number(),updatedBy:_.string(),updatedAt:_.number()});function wa(){let e=de(),t=$(),n=!!(e&&e.trim().length>0),r=!!(t&&t.trim().length>0);if(!n&&!r)throw u.missingExecutionCredentials();let o={Accept:"application/json"};return n&&(o[ue]=e),r&&(o[U]=t),o}function Sa(e){if(e!==null&&typeof e=="object"){let t=e;if(typeof t.message=="string")return t.message;if(typeof t.error=="string")return t.error}return String(e??"unknown error")}function wt(e,t){throw u.kvCallFailed(e,Sa(t),R(t))}async function St(e,t,n={}){try{let r=await ga(t,{method:e,headers:wa(),...n.json!==void 0?{json:n.json}:{},throwHttpErrors:!1,timeout:ya}),o=e==="head"?void 0:await H(r);return{status:r.status,body:o}}catch(r){if(r instanceof u)throw r;let o=r instanceof Error?r.message??String(r):String(r);throw u.kvCallFailed(0,o)}}function wo(e){let t=ho(e.env),{projectId:n}=e;return{async get(r){let{status:o,body:s}=await St("get",Ve(t,n,r));if(o===404)return null;(o<200||o>=300)&&wt(o,s);let i=ha.safeParse(s);if(!i.success)throw u.kvCallFailed(o,"platform returned malformed KeyValueEntry",R(s));return i.data.value},async set(r,o,s){let{status:i,body:a}=await St("put",Ve(t,n,r),{json:s?.ttl!==void 0?{value:o,ttl:s.ttl}:{value:o}});(i<200||i>=300)&&wt(i,a)},async delete(r){let{status:o,body:s}=await St("delete",Ve(t,n,r));o!==204&&wt(o,s)},async has(r){let{status:o,body:s}=await St("head",Ve(t,n,r));if(o===200)return!0;if(o===404)return!1;wt(o,s)}}}function bt(e){return{getItem:t=>e.getItem(t),removeItem:t=>e.removeItem(t),hasItem:t=>e.hasItem(t),setItem:async(t,n,r)=>{let o=r?.ttl;fo(n),typeof o=="number"&&mo(o),await e.setItem(t,n,o!==void 0?{ttl:o}:void 0)}}}function ba(){let e=v();if(e.kind!=="provisioned")throw u.kvRequiresProvisioning();return{projectId:e.projectId,env:e.region}}function So(e){let t=ba(),n=e??wo(t),r=ht(yo(n));return bt(r)}import{defineDriver as va}from"unstorage";var xa=va(e=>{let t=new Map;function n(r){let o=t.get(r);if(o&&o.expiresAt!==void 0&&o.expiresAt<=Date.now()){t.delete(r);return}return o}return{name:"memory-ttl",getItem(r){return n(r)?.value??null},setItem(r,o,s){let i=s?.ttl,a=n(r),c=typeof i=="number"?Date.now()+i*1e3:i===null?void 0:a?.expiresAt;t.set(r,{value:o,expiresAt:c})},removeItem(r){t.delete(r)},hasItem(r){return n(r)!==void 0},getKeys(){return[...t.keys()].filter(r=>n(r)!==void 0)},clear(){t.clear()}}});function bo(){return xa({})}var nn;function Aa(){return nn||(nn=ht(bo())),nn}function vo(){return bt(Aa())}function Ea(){return typeof __TRAY_SDK_MODE__<"u"?__TRAY_SDK_MODE__==="lambda":A().mode==="lambda"}function yp(){return Ea()?So():vo()}import{createHash as Ta}from"crypto";import{mkdir as Ca,readFile as Ro,readdir as To,rm as Ao,unlink as ka,writeFile as Eo}from"fs/promises";import{dirname as Pa}from"path";async function Ia(e){let t=e.getReader(),n=[],r=0;for(;;){let{done:o,value:s}=await t.read();if(o)break;if(s){if(r+=s.byteLength,r>J)throw await t.cancel(),u.filesValueTooLarge(`File exceeds maximum size of ${J} bytes (got more than ${J})`,J);n.push(s)}}return Buffer.concat(n)}async function xe(e){return Buffer.isBuffer(e)?e:typeof e=="string"?Buffer.from(e,"utf-8"):e instanceof ReadableStream?Ia(e):Buffer.from(e)}var Ra={pdf:"application/pdf",csv:"text/csv",png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",svg:"image/svg+xml",json:"application/json",txt:"text/plain",html:"text/html",htm:"text/html",css:"text/css",js:"application/javascript",xml:"application/xml",zip:"application/zip"},xo="application/octet-stream";function vt(e){let t=e.lastIndexOf(".");if(t===-1||t===e.length-1)return xo;let n=e.slice(t+1).toLowerCase();return Ra[n]??xo}function Ee(){let e=A().projectRoot;if(!e)throw u.filesNotAvailable();return e}async function Ae(e){try{return await e()}catch(t){if(t instanceof u)throw t;let n=t?.code;throw n?u.filesCallFailed(0,`Local file storage operation failed: ${n}`):u.filesCallFailed(0,"Local file storage operation failed: unknown error")}}function xt(e,t){return{path:e,size:t.size,contentType:t.contentType,lastModified:new Date(t.lastModified),etag:t.etag}}async function rn(e){try{let t=await Ro(it(Ee(),e),"utf-8");return JSON.parse(t)}catch(t){if(t.code==="ENOENT")return null;throw t}}async function Io(e){await Ca(Pa(e),{recursive:!0})}async function Oa(e,t){let n=at(e,t),r;try{r=await To(n,{withFileTypes:!0})}catch(o){if(o.code==="ENOENT")return[];throw o}return r.filter(o=>o.isFile()).map(o=>t.length===0?o.name:`${t}/${o.name}`)}async function Co(e,t){let n=at(e,t),r;try{r=await To(n,{withFileTypes:!0})}catch(s){if(s.code==="ENOENT")return[];throw s}let o=[];for(let s of r){let i=t.length===0?s.name:`${t}/${s.name}`;s.isDirectory()?o.push(...await Co(e,i)):s.isFile()&&o.push(i)}return o}function ko(){return{async put(e,t,n){return Ae(async()=>{let r=Ee(),o=await xe(t),s=n?.contentType??vt(e),i=Ta("sha1").update(o).digest("hex"),a=new Date,c=Le(r,e);await Io(c),await Eo(c,o);let l={size:o.byteLength,contentType:s,lastModified:a.toISOString(),etag:i},d=it(r,e);return await Io(d),await Eo(d,JSON.stringify(l)),xt(e,l)})},async get(e){return Ae(async()=>{let t=await rn(e);return t?{data:await Ro(Le(Ee(),e)),metadata:xt(e,t)}:null})},async head(e){return Ae(async()=>{let t=await rn(e);return t?xt(e,t):null})},async delete(e){return Ae(async()=>{let t=Ee();await Promise.all([Le(t,e),it(t,e)].map(async n=>{try{await ka(n)}catch(r){if(r.code!=="ENOENT")throw r}}))})},async deleteMany(e){return Ae(async()=>{let t=Ee(),n=await Co(t,e);return await Promise.all([Ao(at(t,e),{recursive:!0,force:!0}),Ao(Zn(t,e),{recursive:!0,force:!0})]),{deleted:n.length}})},async list(e,t){return Ae(async()=>{let n=Ee(),r=t?.limit??100,s=(await Oa(n,e??"")).slice(0,r);return{files:(await Promise.all(s.map(async a=>{let c=await rn(a);return c?xt(a,c):null}))).filter(a=>a!==null),cursor:null}})},async getUploadUrl(e,t){let n=A().devServerUrl;if(!n)throw u.filesNotAvailable();return{url:`${n}/_helix/files/${e}`,expiresAt:ge(t?.expiresIn)}},async getDownloadUrl(e,t){let n=A().devServerUrl;if(!n)throw u.filesNotAvailable();return{url:`${n}/_helix/files/${e}`,expiresAt:ge(t?.expiresIn)}}}}import{createHash as Ua}from"crypto";function At(e){return j(e).hosts.api}function _a(e){return`/private/v1/helix/files/projects/${encodeURIComponent(e)}`}function ze(e,t){return`${e}${_a(t)}`}function Ie(e,t,n){return`${ze(e,t)}/${encodeURIComponent(n)}`}function Et(e,t,n){return`${Ie(e,t,n)}/upload`}function Po(e,t,n){return`${Ie(e,t,n)}/download`}function Oo(e,t,n){return`${Ie(e,t,n)}/signed-url`}function _o(e,t,n,r){let o=new URLSearchParams({name:r});return n&&o.set("parentFolder",n),`${ze(e,t)}/file?${o.toString()}`}function Do(e,t,n,r){let o=new URLSearchParams({limit:String(r)});return n&&o.set("id",n),`${ze(e,t)}?${o.toString()}`}import sn from"ky";import{z as P}from"zod";var an=6e4,Fo=P.object({id:P.string(),workspaceId:P.string(),projectId:P.string(),parentFolder:P.string().nullable().optional(),name:P.string(),size:P.number().nullable().optional(),objectType:P.enum(["Folder","File"]),contentType:P.string().nullable().optional(),createdAt:P.string(),updatedAt:P.string()}),Da=P.object({signedURL:P.string()}),Fa=P.object({path:P.array(P.object({id:P.string(),name:P.string()})),elements:P.array(Fo)});function cn(){let e=de(),t=$(),n=!!(e&&e.trim().length>0),r=!!(t&&t.trim().length>0);if(!n&&!r)throw u.missingExecutionCredentials();let o={Accept:"application/json"};return n&&(o[ue]=e),r&&(o[U]=t),o}function Mo(e){if(e!==null&&typeof e=="object"){let t=e;if(typeof t.message=="string")return t.message;if(typeof t.error=="string")return t.error}return String(e??"unknown error")}function Z(e,t){throw u.filesCallFailed(e,Mo(t),R(t))}function Ma(e,t){return e===400&&Mo(t).toLowerCase()==="resource not found"}async function La(e){let t=new Response(e),n=t.headers.get("content-type")??"multipart/form-data",r=await t.arrayBuffer();return{body:Buffer.from(r),contentType:n}}async function Re(e,t,n={}){try{let r=await sn(t,{method:e,headers:cn(),...n.json!==void 0?{json:n.json}:{},throwHttpErrors:!1,timeout:an}),o=await H(r);return{status:r.status,body:o}}catch(r){if(r instanceof u)throw r;let o=r instanceof Error?r.message:String(r);throw u.filesCallFailed(0,o)}}function on(e,t){let n=Fo.safeParse(t);if(!n.success)throw u.filesCallFailed(e,"platform returned malformed ObjectMetadata",R(t));return n.data}function Lo(e){let t=At(e.env),{projectId:n}=e;return{async createMetadata(r){let{status:o,body:s}=await Re("post",ze(t,n),{json:r});return(o<200||o>=300)&&Z(o,s),on(o,s)},async getByName(r,o){let{status:s,body:i}=await Re("get",_o(t,n,r,o));return s===404||Ma(s,i)?null:((s<200||s>=300)&&Z(s,i),on(s,i))},async getById(r){let{status:o,body:s}=await Re("get",Ie(t,n,r));return o===404?null:((o<200||o>=300)&&Z(o,s),on(o,s))},async listChildren(r,o){let{status:s,body:i}=await Re("get",Do(t,n,r,o));(s<200||s>=300)&&Z(s,i);let a=Fa.safeParse(i);if(!a.success)throw u.filesCallFailed(s,"platform returned malformed listing",R(i));return a.data},async uploadContent(r,o,s,i){let a=new FormData;a.append("fileUploadContentInput",new Blob([new Uint8Array(o)],{type:i}),s);let{body:c,contentType:l}=await La(a),d;try{d=await sn(Et(t,n,r),{method:"post",headers:{...cn(),"content-type":l},body:new Uint8Array(c),throwHttpErrors:!1,timeout:an})}catch(m){if(m instanceof u)throw m;let g=m instanceof Error?m.message:String(m);throw u.filesCallFailed(0,g)}let p=await H(d);(d.status<200||d.status>=300)&&Z(d.status,p)},async downloadContent(r){let o;try{o=await sn(Po(t,n,r),{method:"get",headers:cn(),throwHttpErrors:!1,timeout:an})}catch(i){if(i instanceof u)throw i;let a=i instanceof Error?i.message:String(i);throw u.filesCallFailed(0,a)}if(o.status<200||o.status>=300){let i=await H(o);Z(o.status,i)}let s=await o.arrayBuffer();return Buffer.from(s)},async getSignedDownloadUrl(r){let{status:o,body:s}=await Re("get",Oo(t,n,r));(o<200||o>=300)&&Z(o,s);let i=Da.safeParse(s);if(!i.success)throw u.filesCallFailed(o,"platform returned malformed signed URL response",R(s));return i.data.signedURL},async deleteById(r){let{status:o,body:s}=await Re("delete",Ie(t,n,r));o===204||o===404||(o<200||o>=300)&&Z(o,s)}}}function ln(e){return e.split("/").filter(t=>t.length>0)}function un(e){return e instanceof u&&e.detail.kind==="files_call_failed"&&e.detail.status===409}async function Na(e,t,n){let r=await e.getByName(t,n);if(r)return r;try{return await e.createMetadata({parentFolder:t,objectType:"Folder",name:n})}catch(o){if(un(o)){let s=await e.getByName(t,n);if(s)return s}throw o}}async function dn(e,t){let n=ln(t),r=n[n.length-1],o;for(let s of n.slice(0,-1))o=(await Na(e,o,s)).id;return{parentFolder:o,name:r}}async function Ge(e,t){let n=ln(t),r=n[n.length-1],o;for(let s of n.slice(0,-1)){let i=await e.getByName(o,s);if(!i||i.objectType!=="Folder")return null;o=i.id}return{parentFolder:o,name:r}}async function pn(e,t){if(t.length===0)return;let n=ln(t),r;for(let o of n){let s=await e.getByName(r,o);if(!s||s.objectType!=="Folder")return null;r=s.id}return r}var $a=500,ja=8;async function Ba(e,t,n){let r=new Array(e.length),o=0;async function s(){for(;o<e.length;){let i=o++;r[i]=await n(e[i])}}return await Promise.all(Array.from({length:Math.min(t,e.length)},s)),r}function Ka(){let e=v();if(e.kind!=="provisioned")throw u.filesRequiresProvisioning();return{projectId:e.projectId,env:e.region}}function Ha(e){return Ua("sha1").update(`${e.id}:${e.updatedAt}:${e.size??0}`).digest("hex")}function It(e,t,n){return{path:e,size:t.size??0,contentType:t.contentType??n??"application/octet-stream",lastModified:new Date(t.updatedAt),etag:Ha(t)}}async function No(e,t,n,r){try{return await e.createMetadata({parentFolder:t,objectType:"File",contentType:r,name:n})}catch(o){if(un(o)){let s=await e.getByName(t,n);if(s)return s}throw o}}async function Uo(e,t){let{elements:n}=await e.listChildren(t,$a);return(await Ba(n,ja,async o=>{let s=o.objectType==="Folder"?await Uo(e,o.id):1;return await e.deleteById(o.id),s})).reduce((o,s)=>o+s,0)}function $o(e){let t=Ka(),n=e??Lo(t),r=At(t.env),{projectId:o}=t;return{async put(s,i,a){let{parentFolder:c,name:l}=await dn(n,s),d=await xe(i),p=a?.contentType??vt(s),m=await n.getByName(c,l);if(m&&m.objectType!=="File")throw u.filesCallFailed(409,`A folder already exists at "${s}"`);let g=m??await No(n,c,l,p);await n.uploadContent(g.id,d,l,p);let w=await n.getById(g.id);return It(s,w??g,p)},async get(s){let i=await Ge(n,s);if(!i)return null;let a=await n.getByName(i.parentFolder,i.name);return!a||a.objectType!=="File"?null:{data:await n.downloadContent(a.id),metadata:It(s,a)}},async head(s){let i=await Ge(n,s);if(!i)return null;let a=await n.getByName(i.parentFolder,i.name);return!a||a.objectType!=="File"?null:It(s,a)},async delete(s){let i=await Ge(n,s);if(!i)return;let a=await n.getByName(i.parentFolder,i.name);a&&await n.deleteById(a.id)},async deleteMany(s){let i=await pn(n,s);if(i===null)return{deleted:0};let a=await Uo(n,i);return s.length>0&&i!==void 0&&await n.deleteById(i),{deleted:a}},async list(s,i){let a=await pn(n,s??"");if(a===null)return{files:[],cursor:null};let c=i?.limit??100,{elements:l}=await n.listChildren(a,c);return{files:l.filter(p=>p.objectType==="File").map(p=>It(s?`${s}/${p.name}`:p.name,p)),cursor:null}},async getUploadUrl(s,i){let{parentFolder:a,name:c}=await dn(n,s),d=await n.getByName(a,c)??await No(n,a,c,i?.contentType);return{url:Et(r,o,d.id),expiresAt:ge(i?.expiresIn)}},async getDownloadUrl(s,i){let a=await Ge(n,s),c=a?await n.getByName(a.parentFolder,a.name):null;if(!c||c.objectType!=="File")throw u.filesCallFailed(404,`File not found: ${s}`);return{url:await n.getSignedDownloadUrl(c.id),expiresAt:ge(i?.expiresIn)}}}}function mn(e,t){let n=t?.maxPathBytes;return{async put(r,o,s){ie(r,n);let i=await xe(o);return Wn(i.byteLength),e.put(r,i,s)},async get(r){return ie(r,n),e.get(r)},async head(r){return ie(r,n),e.head(r)},async delete(r){return ie(r,n),e.delete(r)},async deleteMany(r){let o=Ft(r);return ot(o,n),e.deleteMany(o)},async list(r,o){let s=Ft(r??"");return ot(s,n),e.list(s,o)},async getUploadUrl(r,o){return ie(r,n),e.getUploadUrl(r,o)},async getDownloadUrl(r,o){return ie(r,n),e.getDownloadUrl(r,o)}}}function qa(){return typeof __TRAY_SDK_MODE__<"u"?__TRAY_SDK_MODE__==="lambda":A().mode==="lambda"}function cm(){if(qa())return mn($o());let e=A().projectRoot;return mn(ko(),{maxPathBytes:e?Qn(e):void 0})}import za from"ky";function jo(e){return j(e).hosts.api}function Va(){return"/private/v1/helix/function-calls"}function Bo(e){return`${e}${Va()}`}var Ga=5e3;function Ja(){let e=$();if(!!!(e&&e.trim().length>0))throw u.callFunctionMissingExecutionJwt();return{Accept:"application/json",[U]:e}}function Xa(e,t){throw u.callFunctionCallFailed(e,Ya(t),R(t))}function Ya(e){if(e!==null&&typeof e=="object"){let t=e;if(typeof t.message=="string")return t.message;if(typeof t.error=="string")return t.error}return String(e??"unknown error")}function Ko(e){let t=jo(e.env);return{async callAsync(n,r){let o,s;try{let i=await za(Bo(t),{method:"post",headers:Ja(),json:{functionPath:n,input:r},throwHttpErrors:!1,timeout:Ga});o=i.status,s=await H(i)}catch(i){if(i instanceof u)throw i;let a=i instanceof Error?i.message??String(i):String(i);throw u.callFunctionCallFailed(0,a)}(o<200||o>=300)&&Xa(o,s)}}}var Ho=1024;function Rt(e){if(typeof e!="string"||e.trim().length===0)throw u.callFunctionPathInvalid("functionPath must be a non-empty string");if(e.length>Ho)throw u.callFunctionPathInvalid(`functionPath must be at most ${Ho} characters`)}function Wa(){let e=v();if(e.kind!=="provisioned")throw u.callFunctionRequiresProvisioning();return{env:e.region}}function qo(e){return async function(n,r){Rt(n),await(e??Ko(Wa())).callAsync(n,r)}}function Vo(){return async function(t,n){Rt(t);let r=A().devServerUrl;if(!r)throw u.callFunctionNotAvailable();let o=t.startsWith("/")?t:`/${t}`,s=Qr();fetch(`${r}${o}`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(n??{})}).then(i=>{i.ok||s.warn("ctx.callFunctionAsync: dev-mode dispatch returned a non-2xx response",{functionPath:t,status:i.status})}).catch(i=>{s.warn("ctx.callFunctionAsync: dev-mode dispatch failed",{functionPath:t,error:i instanceof Error?i.message:String(i)})})}}function Qa(){return typeof __TRAY_SDK_MODE__<"u"?__TRAY_SDK_MODE__==="lambda":A().mode==="lambda"}function Fm(){return Qa()?qo():Vo()}export{Za as a,ec as b,tc as c,v as d,nc as e,Vn as f,fs as g,k as h,V as i,Ss as j,bs as k,F as l,vs as m,Pc as n,Qr as o,Gu as p,pd as q,oa as r,yp as s,ie as t,Le as u,it as v,cm as w,Fm as x,Uc as y,Mt as z,nr as A,rr as B,or as C,Ne as D,sr as E,Gc as F,cr as G,Lt as H,Ls as I,$s as J,js as K,Jc as L,Bs as M,Xc as N,Hl as O,lr as P,Zc as Q,ur as R,M as S,sl as T,il as U,Ue as V,al as W,cl as X,fr as Y,ml as Z,fl as _,ae as $,hl as aa,Ii as ba,_i as ca,Wr as da,Q as ea,$u as fa,ju as ga};
|