experimental-ash 0.40.0 → 0.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/dist/docs/public/tools.md +165 -0
- package/dist/src/compiled/.vendor-stamp.json +1 -1
- package/dist/src/compiled/@workflow/core/index.js +1 -1
- package/dist/src/compiled/@workflow/core/runtime.js +1 -1
- package/dist/src/compiled/_chunks/workflow/{resume-hook-D6dFbxMV.js → resume-hook-B2kqAsX6.js} +1 -1
- package/dist/src/compiler/manifest.d.ts +16 -2
- package/dist/src/compiler/manifest.js +1 -1
- package/dist/src/compiler/module-map.js +1 -1
- package/dist/src/compiler/normalize-agent-config.js +1 -1
- package/dist/src/compiler/normalize-manifest.js +1 -1
- package/dist/src/compiler/normalize-tool.d.ts +7 -3
- package/dist/src/compiler/normalize-tool.js +1 -1
- package/dist/src/context/dynamic-tool-lifecycle.d.ts +35 -0
- package/dist/src/context/dynamic-tool-lifecycle.js +1 -0
- package/dist/src/context/hook-lifecycle.js +1 -1
- package/dist/src/context/keys.d.ts +37 -0
- package/dist/src/context/keys.js +1 -1
- package/dist/src/context/providers/sandbox.js +1 -1
- package/dist/src/execution/dispatch-runtime-actions-step.js +1 -1
- package/dist/src/execution/node-step.js +1 -1
- package/dist/src/execution/workflow-steps.js +1 -1
- package/dist/src/harness/attachment-staging.js +1 -1
- package/dist/src/harness/code-mode.d.ts +1 -1
- package/dist/src/harness/code-mode.js +1 -1
- package/dist/src/harness/tool-loop.js +1 -1
- package/dist/src/harness/types.d.ts +7 -0
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/authored-definition/core.js +1 -1
- package/dist/src/internal/authored-definition/schema-backed.d.ts +9 -3
- package/dist/src/internal/authored-definition/schema-backed.js +1 -1
- package/dist/src/internal/authored-module.d.ts +4 -0
- package/dist/src/internal/authored-module.js +1 -1
- package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
- package/dist/src/internal/workflow-bundle/dynamic-tool-transform.d.ts +39 -0
- package/dist/src/internal/workflow-bundle/dynamic-tool-transform.js +4 -0
- package/dist/src/packages/ash-scaffold/src/channels.js +1 -1
- package/dist/src/public/definitions/agent.d.ts +1 -1
- package/dist/src/public/definitions/defineChannel.js +1 -1
- package/dist/src/public/definitions/tool.d.ts +67 -0
- package/dist/src/public/definitions/tool.js +1 -1
- package/dist/src/public/index.d.ts +1 -1
- package/dist/src/public/tools/index.d.ts +2 -1
- package/dist/src/public/tools/index.js +1 -1
- package/dist/src/runtime/framework-tools/connection-search.js +1 -1
- package/dist/src/runtime/framework-tools/connection-tools.js +1 -1
- package/dist/src/runtime/resolve-agent-graph.js +1 -1
- package/dist/src/runtime/resolve-agent.js +1 -1
- package/dist/src/runtime/resolve-dynamic-tool.d.ts +12 -0
- package/dist/src/runtime/resolve-dynamic-tool.js +1 -0
- package/dist/src/runtime/types.d.ts +12 -0
- package/dist/src/shared/agent-definition.d.ts +25 -0
- package/dist/src/shared/code-mode.d.ts +14 -1
- package/dist/src/shared/code-mode.js +1 -1
- package/dist/src/shared/dynamic-tool-definition.d.ts +132 -0
- package/dist/src/shared/dynamic-tool-definition.js +1 -0
- package/package.json +1 -1
package/dist/src/compiled/_chunks/workflow/{resume-hook-D6dFbxMV.js → resume-hook-B2kqAsX6.js}
RENAMED
|
@@ -9,4 +9,4 @@ import{i as e,n as t,t as n}from"./chunk-DSjMdhoD.js";import{A as r,C as i,F as
|
|
|
9
9
|
`)?e.split(`
|
|
10
10
|
`).map((e,t)=>t===0?e:` ${e}`).join(`
|
|
11
11
|
`):e;if(typeof e==`number`||typeof e==`boolean`)return String(e);try{return JSON.stringify(e)}catch{return String(e)}}var bn=class e extends Error{steps;globalThis;stepCount;hookCount;waitCount;hookDisposedCount;abortCount;constructor(e,t){let n=[...e.values()],r=0,i=0,o=0,s=0,c=0;for(let e of n)e.type===`step`?r++:e.type===`hook`?e.disposed?s++:e.abortRequested?c++:i++:e.type===`wait`&&o++;let l=[];r>0&&l.push(`${r} ${a(`step`,`steps`,r)}`),i>0&&l.push(`${i} ${a(`hook`,`hooks`,i)}`),o>0&&l.push(`${o} ${a(`wait`,`waits`,o)}`),s>0&&l.push(`${s} hook ${a(`disposal`,`disposals`,s)}`);let u=a(`has`,`have`,r+i+o+s),d=+(r>0)+ +(i>0)+ +(o>0)+ +(s>0),f;f=d>1?`processed`:r>0?`run`:i>0||o>0?`created`:s>0?`processed`:`received`;let p=l.length>0?`${l.join(` and `)} ${u} not been ${f} yet`:`0 steps have not been run yet`;super(p),this.name=`WorkflowSuspension`,this.steps=n,this.globalThis=t,this.stepCount=r,this.hookCount=i,this.waitCount=o,this.hookDisposedCount=s,this.abortCount=c}static is(t){return t instanceof e}};function xn(){throw new i(`This API is not available inside a workflow function. Workflow functions run in a deterministic VM; move the call to a step function for full Node.js access.`)}function q(...e){return t=>Object.fromEntries(e.map(e=>[e,t]))}const Sn=q(`workflow.name`),Cn=q(`workflow.operation`),wn=q(`workflow.run.id`),Tn=q(`workflow.run.status`),En=q(`workflow.started_at`),Dn=q(`workflow.events.count`),On=q(`workflow.arguments.count`),kn=q(`workflow.result.type`),An=q(`workflow.trace.propagated`),jn=q(`workflow.error.name`),Mn=q(`workflow.error.message`),Nn=q(`workflow.error.code`),Pn=q(`workflow.steps.created`),Fn=q(`workflow.hooks.created`),In=q(`workflow.waits.created`),Ln=q(`step.name`),Rn=q(`step.id`),zn=q(`step.attempt`),Bn=q(`step.status`),Vn=q(`step.max_retries`),Hn=q(`step.skipped`),Un=q(`step.skip_reason`),Wn=q(`step.arguments.count`),Gn=q(`step.result.type`),Kn=q(`step.error.name`),qn=q(`step.error.message`),Jn=q(`step.fatal_error`),Yn=q(`step.retry.exhausted`),Xn=q(`step.retry.timeout_seconds`),Zn=q(`step.retry.will_retry`),Qn=q(`messaging.system`),$n=q(`messaging.destination.name`),er=q(`messaging.message.id`),tr=q(`messaging.operation.type`),nr=q(`workflow.queue.overhead_ms`),rr=q(`deployment.id`),ir=q(`workflow.hook.token`),ar=q(`workflow.hook.id`),or=q(`workflow.hook.found`),sr=q(`workflow.suspension.state`),cr=q(`workflow.suspension.hook_count`),lr=q(`workflow.suspension.step_count`),ur=q(`workflow.suspension.wait_count`),dr=q(`error.type`),fr=q(`workflow.events.pages_loaded`),pr=q(`workflow.queue.deserialize_time_ms`),mr=q(`workflow.queue.execution_time_ms`),hr=q(`workflow.queue.serialize_time_ms`),gr=q(`peer.service`),_r=q(`rpc.system`),vr=q(`rpc.service`),yr=q(`rpc.method`),br=q(`error.retryable`),xr=q(`error.category`);async function Sr(){let e=await J.value;if(!e)return{};let t={};return e.propagation.inject(e.context.active(),t),t}async function Cr(e){let t=await J.value;if(t)return t.propagation.extract(t.context.active(),e)}async function wr(e,t){if(!e)return t();let n=await J.value;if(!n)return t();let r=await Cr(e);return r?n.context.with(r,async()=>await t()):t()}const J=p(async()=>{try{return await import(`./src-B54rYDvB.js`).then(t=>e(t.t(),1))}catch{return Lr.info(`OpenTelemetry not available, tracing will be disabled`),null}}),Tr=p(async()=>{let e=await J.value;return e?e.trace.getTracer(`workflow`):null});async function Er(e,...t){let[n,r]=await Promise.all([Tr.value,J.value]),{fn:i,opts:a}=typeof t[0]==`function`?{fn:t[0],opts:{}}:{fn:t[1],opts:t[0]};if(!i)throw Error(`Function to trace must be provided`);return!n||!r?await i():n.startActiveSpan(e,a,async e=>{try{let t=await i(e);return e.setStatus({code:r.SpanStatusCode.OK}),t}catch(t){throw e.setStatus({code:r.SpanStatusCode.ERROR,message:t.message}),Dr(t,r,e),t}finally{e.end()}})}function Dr(e,t,n){!e||!bn.is(e)||(n.setStatus({code:t.SpanStatusCode.OK}),n.setAttributes({...sr(`suspended`),...lr(e.stepCount),...cr(e.hookCount),...ur(e.waitCount)}))}async function Or(e){let[t,n]=await Promise.all([Cr(e),J.value]);if(!(!t||!n))return n.trace.getSpanContext(t)}async function kr(){return await jr(e=>e.trace.getActiveSpan())}async function Ar(e){return jr(t=>t.SpanKind[e])}async function jr(e){let t=await J.value;if(t)return await e(t)}function Mr(){return jr(e=>{let t=e.trace.getActiveSpan()?.spanContext();if(t)return[{context:t}]})}async function Nr(e,t){let n=await J.value;if(!n)return t();let r=n.propagation.createBaggage({"workflow.run_id":{value:e.workflowRunId},"workflow.name":{value:e.workflowName}}),i=n.propagation.setBaggage(n.context.active(),r);return n.context.with(i,()=>t())}function Pr(e,t){if(!t)return!1;let n=!1;for(let r of t.split(`,`)){let t=r.trim();if(!t)continue;let i=t.startsWith(`-`),a=i?t.slice(1):t;RegExp(`^${a.replace(/[|\\{}()[\]^$+?.]/g,`\\$&`).replace(/\*/g,`.*`)}$`).test(e)&&(n=!i)}return n}function Fr(e){let t=n=>{let r=t=>{let r=`workflow:${e}:${t}`;return(i,a)=>{let o=Object.keys(n).length>0,s=a&&Object.keys(a).length>0,c=o||s?{...n,...a??{}}:void 0;(t===`error`||t===`warn`)&&(t===`error`?console.error:console.warn)(pn(`[workflow-sdk]`,i,c)),Pr(r,process.env.DEBUG)&&(console.debug(`[${r}] ${i}`,c??``),kr().then(n=>{n?.addEvent(`${t}.${e}`,{message:i,...c})}).catch(()=>{}))}};return{debug:r(`debug`),info:r(`info`),warn:r(`warn`),error:r(`error`),child:e=>t({...n,...e}),forRun:(e,r,i)=>t({...n,workflowRunId:e,...r===void 0?{}:{workflowName:r},...i??{}})}};return t({})}const Ir=Fr(`step`),Lr=Fr(`runtime`),Rr=Fr(`webhook`),zr=Fr(`events`);Fr(`adapter`);function Br(e){if(v.is(e))throw e}function Y(e,t){let n=e.includes(`return value`)?`returning`:`passing`,r=`Failed to serialize ${e}`;t instanceof j&&t.path&&(r+=` at path "${t.path}"`);let i=`Ensure you're ${n} workflow serializable types. Check the serialization docs to see what's serializable: https://workflow-sdk.dev/docs/foundations/serialization`;return t instanceof j&&t.value!==void 0&&Lr.error(`Serialization failed`,{context:e,problematicValue:t.value}),{message:r,hint:i}}async function Vr(e,t,n){try{let r=U.serialize(e,`client`,n);return dn(W(H.DEVALUE_V1,r),t)}catch(e){Br(e);let{message:t,hint:n}=Y(`client value`,e);throw new u(t,{hint:n,cause:e})}}async function Hr(e,t,n){let r=await fn(e,t);if(!(r instanceof Uint8Array)){if(U.deserializeLegacy)return U.deserializeLegacy(r,`client`,n);throw Error(`Cannot deserialize non-binary data without legacy support`)}let{format:i,payload:a}=G(r);if(i===H.DEVALUE_V1)return U.deserialize(a,`client`,n);throw Error(`Unsupported serialization format: ${i}`)}async function Ur(e,t,n){try{let r=U.serialize(e,`step`,n);return dn(W(H.DEVALUE_V1,r),t)}catch(e){Br(e);let{message:t,hint:n}=Y(`step value`,e);throw new u(t,{hint:n,cause:e})}}async function Wr(e,t,n){let r=await fn(e,t);if(!(r instanceof Uint8Array)){if(U.deserializeLegacy)return U.deserializeLegacy(r,`step`,n);throw Error(`Cannot deserialize non-binary data without legacy support`)}let{format:i,payload:a}=G(r);if(i===H.DEVALUE_V1)return U.deserialize(a,`step`,n);throw Error(`Unsupported serialization format: ${i}`)}function Gr(e,t){if(!(e instanceof Uint8Array)){if(U.deserializeLegacy)return U.deserializeLegacy(e,`workflow`,t);throw Error(`Cannot deserialize non-binary data without legacy support`)}let{format:n,payload:r}=G(e);if(n===H.DEVALUE_V1)return U.deserialize(r,`workflow`,t);throw Error(`Unsupported serialization format: ${n}`)}const Kr=Symbol.for(`WORKFLOW_STEP_CONTEXT_STORAGE`),qr=globalThis[Kr]??(globalThis[Kr]=new pe);function Jr(e,t,n){if(e===0&&t===0&&n===0)return null;let r=[];e>0&&r.push(`${e} ${a(`step`,`steps`,e)}`),t>0&&r.push(`${t} ${a(`hook`,`hooks`,t)}`),n>0&&r.push(`${n} ${a(`timer`,`timers`,n)}`);let i=[];e>0&&i.push(`steps are completed`),t>0&&i.push(`hooks are received`),n>0&&i.push(`timers have elapsed`);let o=i.join(` and `);return`${r.join(` and `)} to be enqueued\n Workflow will suspend and resume when ${o}`}function Yr(e,t){let n=`${e.replace(`wrun_`,`strm_`)}_user`;return t?`${n}_${Buffer.from(t,`utf-8`).toString(`base64url`)}`:n}function Xr(e){return`strm_${e}_system_abort`}function Zr(e){if(!e.startsWith(`abrt_`))throw Error(`Invalid abort hook token format: expected "abrt_" prefix, got "${e}"`);return Xr(e.slice(5))}async function Qr(e){let t=e();return(0,jt.waitUntil)(t.catch(()=>{})),t}var X;(function(e){e[e.Consumed=0]=`Consumed`,e[e.NotConsumed=1]=`NotConsumed`,e[e.Finished=2]=`Finished`})(X||={});var $r=class{eventIndex;events=[];callbacks=[];onUnconsumedEvent;getPromiseQueue;pendingUnconsumedCheck=null;pendingUnconsumedTimeout=null;unconsumedCheckVersion=0;constructor(e,t){this.events=e,this.eventIndex=0,this.onUnconsumedEvent=t.onUnconsumedEvent,this.getPromiseQueue=t.getPromiseQueue}subscribe(e){this.callbacks.push(e),this.pendingUnconsumedCheck!==null&&(this.unconsumedCheckVersion++,this.pendingUnconsumedCheck=null,this.pendingUnconsumedTimeout!==null&&(clearTimeout(this.pendingUnconsumedTimeout),this.pendingUnconsumedTimeout=null)),process.nextTick(this.consume)}consume=()=>{let e=this.events[this.eventIndex]??null;for(let t=0;t<this.callbacks.length;t++){let n=this.callbacks[t],r=X.NotConsumed;try{r=n(e)}catch(e){zr.error(`EventConsumer callback threw an error`,{error:e})}if(r===X.Consumed||r===X.Finished){this.eventIndex++,r===X.Finished&&this.callbacks.splice(t,1),process.nextTick(this.consume);return}}if(e!==null){let t=++this.unconsumedCheckVersion;this.pendingUnconsumedCheck=this.getPromiseQueue().then(()=>new Promise(e=>setTimeout(e,0))).then(()=>this.getPromiseQueue()).then(()=>{this.pendingUnconsumedTimeout=setTimeout(()=>{this.pendingUnconsumedTimeout=null,this.unconsumedCheckVersion===t&&(this.pendingUnconsumedCheck=null,this.onUnconsumedEvent(e))},100)})}}},ei=class{aborted=!1;reason=void 0;[C];[T];#e=[];#t=null;get onabort(){return this.#t}set onabort(e){this.#t=e,e&&this.aborted&&e.call(this)}constructor(e,t){this[C]=e,this[T]=t}_setAborted(e){if(!this.aborted){this.aborted=!0,this.reason=e,this.#t&&this.#t.call(this);for(let e of this.#e)e();this.#e=[]}}addEventListener(e,t){if(e===`abort`){if(this.aborted){t();return}this.#e.push(t)}}removeEventListener(e,t){e===`abort`&&(this.#e=this.#e.filter(e=>e!==t))}throwIfAborted(){if(this.aborted)throw this.reason??new DOMException(`The operation was aborted.`,`AbortError`)}};function ti(e){return class{signal;[C];[T];constructor(){let t=e.generateUlid(),n=Xr(t),r=`abrt_${t}`;this[C]=n,this[T]=r,this.signal=new ei(n,r);let i=`hook_${e.generateUlid()}`;e.invocationsQueue.set(i,{type:`hook`,correlationId:i,token:r,isWebhook:!1,isSystem:!0}),e.eventsConsumer.subscribe(t=>{if(!t||t.correlationId!==i)return X.NotConsumed;let n=`eventData`in t&&t.eventData&&`token`in t.eventData?t.eventData.token:void 0;if(typeof n==`string`&&n!==this[T])return e.promiseQueue=e.promiseQueue.then(()=>{e.onWorkflowError(new _(`Corrupted event log: abort hook event ${t.eventType} for ${i} belongs to token "${n}", but the current abort hook expects "${this[T]}"`))}),X.Finished;if(t.eventType===`hook_created`){let t=e.invocationsQueue.get(i);return t&&t.type===`hook`&&(t.hasCreatedEvent=!0),X.Consumed}if(t.eventType===`hook_received`){let n=t.eventData?.payload;return e.promiseQueue=e.promiseQueue.then(async()=>{let t;if(n!==void 0)try{let r=await Ii(n,e.runId,e.encryptionKey,e.globalThis);r&&typeof r==`object`&&`reason`in r&&(t=r.reason)}catch{}this.signal._setAborted(t)}),e.invocationsQueue.delete(i),X.Consumed}return t.eventType===`hook_disposed`?(e.invocationsQueue.delete(i),X.Finished):X.NotConsumed})}abort(t){if(!this.signal.aborted){this.signal._setAborted(t);for(let[,n]of e.invocationsQueue)if(n.type===`hook`&&n.token===this[T]){n.abortRequested=!0,n.abortReason=t;break}}}}}function ni(){return{abort(e){let t=new ei(``,``);return t._setAborted(e??new DOMException(`The operation was aborted.`,`AbortError`)),t},any(e){let t=new ei(``,``),n=Array.from(e);for(let e of n)if(e.aborted)return t._setAborted(e.reason),t;let r=[],i=()=>{for(let{signal:e,listener:t}of r)e.removeEventListener&&e.removeEventListener(`abort`,t);r.length=0};for(let e of n){if(!e.addEventListener)continue;let n=()=>{t.aborted||(t._setAborted(e.reason),i())};r.push({signal:e,listener:n}),e.addEventListener(`abort`,n)}return t},timeout(){throw Error(`AbortSignal.timeout() is not supported in workflow functions. Use sleep() with an AbortController instead. See: /docs/errors/abort-signal-timeout-in-workflow`)}}}const ri=ee();function ii(e){try{return e.getReader({mode:`byob`}).releaseLock(),`bytes`}catch{}}function Z(e){return Br(e),e instanceof u&&e.cause!==void 0||e instanceof i&&e.cause!==void 0?e.cause:e}function ai(e,t){let n=new TextEncoder,r={resolved:!1,key:void 0};return new TransformStream({async transform(i,a){try{r.resolved||=(r.key=await t,!0);let o=N(i,e),s=n.encode(o),c=W(H.DEVALUE_V1,s);if(r.key){let e=await Nt(r.key,c);c=W(H.ENCRYPTED,e)}let l=new Uint8Array(4+c.length);new DataView(l.buffer).setUint32(0,c.length,!1),l.set(c,4),a.enqueue(l)}catch(e){if(v.is(e)){a.error(e);return}let{message:t,hint:n}=Y(`stream chunk`,e);a.error(new u(t,{hint:n,cause:e}))}}})}function oi(e,t){let n=new TextDecoder,r=new Uint8Array,i={resolved:!1,key:void 0};function a(e){let t=new Uint8Array(r.length+e.length);t.set(r,0),t.set(e,r.length),r=t}async function o(a){for(i.resolved||=(i.key=await t,!0);r.length>=4;){let t=new DataView(r.buffer,r.byteOffset,r.byteLength).getUint32(0,!1);if(r.length<4+t)break;let o=r.slice(4,4+t);r=r.slice(4+t);let{format:s,payload:c}=G(o);if(s===H.ENCRYPTED){if(!i.key){a.error(new v(`Encrypted stream data encountered but no encryption key is available. Encryption is not configured or no key was provided for this run.`,{context:{operation:`decrypt`,byteLength:c.byteLength,formatPrefix:`encr`}}));return}let e;try{e=await Pt(i.key,c)}catch(e){throw v.is(e)&&e.context&&(e.context.formatPrefix=s),e}({format:s,payload:c}=G(e))}if(s===H.DEVALUE_V1){let t=n.decode(c);a.enqueue(Ot(t,e))}}}return new TransformStream({async transform(t,i){if(r.length===0&&t.length>=4){let e=new DataView(t.buffer,t.byteOffset,t.byteLength).getUint32(0,!1);if(e>0&&e<1e8){a(t),await o(i);return}}else if(r.length>0){a(t),await o(i);return}let s=n.decode(t).split(`
|
|
12
|
-
`);for(let t of s)t.length>0&&i.enqueue(Ot(t,e))},async flush(e){r.length>0&&await o(e)}})}var si=class extends ReadableStream{#e;constructor(e,t,n){if(typeof t!=`string`||t.length===0)throw new i(`"name" is required, got "${t}"`);super({type:`bytes`,pull:async r=>{let i=this.#e;if(!i){let r=await(await L()).streams.get(e,t,n);i=this.#e=r.getReader()}if(!i){r.error(Error(`Failed to get reader`));return}let a=await i.read();a.done?(this.#e=void 0,r.close()):r.enqueue(a.value)},cancel:async e=>{this.#e&&=(await this.#e.cancel(e).catch(()=>{}),void 0)}})}},Q=class extends WritableStream{constructor(e,t){if(typeof e!=`string`)throw new i(`"runId" must be a string, got "${typeof e}"`);if(typeof t!=`string`||t.length===0)throw new i(`"name" is required, got "${t}"`);let n=L(),r=[],a=null,o=null,s,c=async()=>{if(a&&=(clearTimeout(a),null),r.length===0)return;let i=r.slice(),o=await n;if(s===void 0&&(s=o.streamFlushIntervalMs??10),typeof o.streams.writeMulti==`function`&&i.length>1)await o.streams.writeMulti(e,t,i);else for(let n of i)await o.streams.write(e,t,n);r=[]},l=[],u=()=>{a||=setTimeout(()=>{a=null;let e=l;l=[],o=c().then(()=>{for(let t of e)t.resolve()},t=>{for(let n of e)n.reject(t)})},s??10)};super({async write(e){o&&=(await o,null),r.push(e),u(),await new Promise((e,t)=>{l.push({resolve:e,reject:t})})},async close(){o&&=(await o,null),await c(),await(await n).streams.close(e,t)},abort(e){a&&=(clearTimeout(a),null),r=[];let t=l;l=[];let n=e??Error(`Stream aborted`);for(let e of t)e.reject(n)}})}};function ci(e=globalThis){return{...Kt(),...en(),...Qt(e),Request:t=>{if(!(t instanceof e.Request))return!1;let n={method:t.method,url:t.url,headers:t.headers,body:t.body,duplex:t.duplex},r=t[ue];return r&&(n.responseWritable=r),t.signal&&(t.signal.aborted||t.signal[C])&&(n.signal=t.signal),n},Response:t=>t instanceof e.Response?{type:t.type,url:t.url,status:t.status,statusText:t.statusText,headers:t.headers,body:t.body,redirected:t.redirected}:!1}}function li(e,t,n,r,i,a){let o=t[C],s=t[T];if(!o){let e=(n[se]||ri)();o=Xr(e),s=`abrt_${e}`,t[C]=o,t[T]=s,t.signal&&(t.signal[C]=o,t.signal[T]=s)}return di(e,o,i,a,r),{streamName:o,hookToken:s,aborted:e.aborted,reason:e.aborted?e.reason:void 0}}function ui(e,t){let n=t[C]??t.signal?.[C],r=t[T]??t.signal?.[T];if(!n)throw Error(`AbortController/AbortSignal stream name is not set`);return{streamName:n,hookToken:r,aborted:e.aborted,reason:e.aborted?e.reason:void 0}}function di(e,t,n,r,i){e.aborted||e[oe]||(e[oe]=!0,e.addEventListener(`abort`,()=>{i.push((async()=>{try{let i=await r,a=await ki({aborted:!0,reason:e.reason},n,i),o=new Q(n,t).getWriter();await o.write(a),await o.close()}catch{}})())},{once:!0}))}function fi(e=globalThis,t,n,r){return{...ci(e),ReadableStream:i=>{if(!(i instanceof e.ReadableStream))return!1;if(i.locked)throw new u(`ReadableStream is locked and cannot be passed across a workflow boundary.`,{hint:`Pass the stream before calling .getReader() / .pipeThrough() / .pipeTo(), or tee it with .tee() and pass one of the branches.`});let a=`strm_${(e[se]||ri)()}`,o=ii(i),s=new Q(n,a);o===`bytes`?t.push(i.pipeTo(s)):t.push(i.pipeThrough(ai(fi(e,t,n,r),r)).pipeTo(s));let c={name:a};return o&&(c.type=o),c},WritableStream:r=>{if(!(r instanceof e.WritableStream))return!1;let i=r[w],a=r[S];if(typeof i==`string`&&typeof a==`string`)return{name:i,runId:a};let o=`strm_${(e[se]||ri)()}`,s=new si(n,o);return t.push(s.pipeTo(r)),{name:o}},AbortController:i=>!e.AbortController||typeof e.AbortController!=`function`||!(i instanceof e.AbortController)?!1:li(i.signal,i,e,t,n,r),AbortSignal:i=>!e.AbortSignal||typeof e.AbortSignal!=`function`||!(i instanceof e.AbortSignal)?!1:li(i,i,e,t,n,r)}}function pi(e=globalThis){return{...ci(e),ReadableStream:t=>{if(!(t instanceof e.ReadableStream))return!1;let n=t[x];if(n!==void 0)return{bodyInit:n};let r=t[w];if(!r)throw new i("ReadableStream `name` is not set");let a={name:r},o=t[ie];return o&&(a.type=o),a},WritableStream:t=>{if(!(t instanceof e.WritableStream))return!1;let n=t[w];if(!n)throw new i("WritableStream `name` is not set");let r={name:n},a=t[S];return typeof a==`string`&&(r.runId=a),r},AbortController:t=>{if(!t||!t.signal)return!1;let n=t,r=n[C]??n.signal?.[C],i=e.AbortController&&typeof e.AbortController==`function`&&t instanceof e.AbortController;return!r&&!i?!1:ui(t.signal,n)},AbortSignal:t=>{let n=t?.[C],r=e.AbortSignal&&typeof e.AbortSignal==`function`&&t instanceof e.AbortSignal;return!n&&!r?!1:ui(t,t)}}}function mi(e=globalThis,t,n,r){return{...ci(e),ReadableStream:i=>{if(!(i instanceof e.ReadableStream))return!1;if(i.locked)throw new u(`ReadableStream is locked and cannot be passed across a workflow boundary.`,{hint:`Pass the stream before calling .getReader() / .pipeThrough() / .pipeTo(), or tee it with .tee() and pass one of the branches.`});let a=i[w],o=i[ie];if(!a){a=`strm_${(e[se]||ri)()}`,o=ii(i);let s=new Q(n,a);o===`bytes`?t.push(i.pipeTo(s)):t.push(i.pipeThrough(ai(mi(e,t,n,r),r)).pipeTo(s))}let s={name:a};return o&&(s.type=o),s},WritableStream:i=>{if(!(i instanceof e.WritableStream))return!1;let a=i[w],o=i[S];a||(a=`strm_${(e[se]||ri)()}`,t.push(new si(n,a).pipeThrough(oi(Si(e,t,n,r),r)).pipeTo(i)));let s={name:a};return typeof o==`string`&&(s.runId=o),s},AbortController:i=>!e.AbortController||typeof e.AbortController!=`function`||!(i instanceof e.AbortController)?!1:li(i.signal,i,e,t,n,r),AbortSignal:i=>!e.AbortSignal||typeof e.AbortSignal!=`function`||!(i instanceof e.AbortSignal)?!1:li(i,i,e,t,n,r)}}function hi(e,t,n,r){let i=new AbortController;return r.push((async()=>{try{let r=new si(t,n).getReader(),a=await Promise.race([r.read(),new Promise(e=>{if(i.signal.aborted){e({value:void 0,done:!0});return}i.signal.addEventListener(`abort`,()=>e({value:void 0,done:!0}),{once:!0})})]);if(r.releaseLock(),a.value&&!a.done)try{let n=qr.getStore(),r=await Ai(a.value,t,n?.encryptionKey);e.abort(r?.reason)}catch{e.abort()}}catch{}})()),i}function $(e,t,n){let r=e,i=e.signal;r[C]=t.streamName,r[T]=t.hookToken,i[C]=t.streamName,i[T]=t.hookToken,n&&(r[le]=n,i[le]=n)}function gi(e,t){let n=e,r=t;n[C]!==void 0&&(r[C]=n[C]),n[T]!==void 0&&(r[T]=n[T]),n[le]!==void 0&&(r[le]=n[le])}function _i(e,t,n){let r=new AbortController;e.aborted?($(r,e),r.abort(e.reason)):e.streamName?$(r,e,hi(r,n,e.streamName,t)):$(r,e);let i=r.abort.bind(r);return r.abort=t=>{if(r.signal.aborted)return;i(t);let n=qr.getStore();n&&(n.ops.push((async()=>{try{let r=await ki({aborted:!0,reason:t},n.workflowMetadata.workflowRunId,n.encryptionKey),i=new Q(n.workflowMetadata.workflowRunId,e.streamName).getWriter();await i.write(r),await i.close()}catch{}})()),e.hookToken&&n.ops.push((async()=>{try{let{resumeHook:n}=await Promise.resolve().then(()=>oa);await n(e.hookToken,{aborted:!0,reason:t})}catch{}})()))},r}function vi(e,t,n){let r=new AbortController;return e.aborted?($(r,e),r.abort(e.reason)):e.streamName?$(r,e,hi(r,n,e.streamName,t)):$(r,e),r.signal}function yi(e=globalThis){return{...qt(e),...$t(e)}}function bi(e=globalThis,t,n,r){return{...yi(e),StepFunction:()=>{throw new u(`Step functions cannot be deserialized in client context. Step functions should not be returned from workflows.`,{hint:`A step function reference reached the client. Return a serializable value (e.g. the step result) instead of the step itself.`})},WorkflowFunction:e=>Object.assign(()=>{throw new u(`Workflow functions cannot be called directly. Use start() to invoke them.`,{hint:"Wrap the workflow with `start(workflowFn, { ... })` from `workflow` to begin a run instead of invoking it like a normal function."})},{workflowId:e.workflowId}),Request:t=>{let n={method:t.method,headers:new e.Headers(t.headers),body:t.body,duplex:t.duplex};t.signal&&(n.signal=t.signal);let r=new e.Request(t.url,n);return t.signal&&gi(t.signal,r.signal),r},Response:t=>new e.Response(t.body,{status:t.status,statusText:t.statusText,headers:new e.Headers(t.headers)}),ReadableStream:i=>{if(`bodyInit`in i){let t=i.bodyInit;return new e.Response(t).body}let a=new si(n,i.name,i.startIndex);if(i.type===`bytes`){let n=F();t.push(n.promise);let{readable:r,writable:i}=new e.TransformStream;return I(a,i,n).catch(()=>{}),Rt(r,n),r}else{let i=oi(bi(e,t,n,r),r),o=F();return t.push(o.promise),I(a,i.writable,o).catch(()=>{}),Rt(i.readable,o),i.readable}},WritableStream:i=>{let a=typeof i.runId==`string`?i.runId:n,o=a===n?r:(async()=>{let e=await(await L()).getEncryptionKeyForRun?.(a);return e?await P(e,[`encrypt`]):void 0})(),s=ai(fi(e,t,a,o),o),c=new Q(a,i.name),l=F();return t.push(l.promise),I(s.readable,c,l).catch(()=>{}),Lt(s.writable,l),Object.defineProperty(s.writable,w,{value:i.name,writable:!1}),Object.defineProperty(s.writable,S,{value:a,writable:!1}),s.writable},AbortController:e=>_i(e,t,n),AbortSignal:e=>vi(e,t,n)}}function xi(e=globalThis){return{...yi(e),...tn(e),Request:t=>{Object.setPrototypeOf(t,e.Request.prototype);let n=t.responseWritable;return n&&(t[ue]=n,delete t.responseWritable,t.respondWith=()=>{throw new u("`respondWith()` must be called from within a step function.",{hint:'Move the `respondWith(...)` call inside a `"use step"` function — it cannot be invoked from a workflow context.'})}),t},WorkflowFunction:e=>Object.assign(()=>{throw new u(`Workflow functions cannot be called directly. Use start() to invoke them.`,{hint:"Wrap the workflow with `start(workflowFn, { ... })` from `workflow` to begin a run instead of invoking it like a normal function."})},{workflowId:e.workflowId}),Response:t=>(Object.setPrototypeOf(t,e.Response.prototype),t),ReadableStream:t=>`bodyInit`in t?Object.create(e.ReadableStream.prototype,{[x]:{value:t.bodyInit,writable:!1}}):Object.create(e.ReadableStream.prototype,{[w]:{value:t.name,writable:!1},[ie]:{value:t.type,writable:!1}}),WritableStream:t=>{let n={[w]:{value:t.name,writable:!1}};return typeof t.runId==`string`&&(n[S]={value:t.runId,writable:!1}),Object.create(e.WritableStream.prototype,n)},AbortController:e=>{let t=new ei(e.streamName,e.hookToken);return e.aborted&&t._setAborted(e.reason),{[C]:e.streamName,[T]:e.hookToken,signal:t,abort:()=>{}}},AbortSignal:e=>{let t=new ei(e.streamName,e.hookToken);return e.aborted&&t._setAborted(e.reason),t}}}function Si(e=globalThis,t,n,r){return{...yi(e),StepFunction:e=>{let t=e.stepId,n=e.closureVars,r=`boundThis`in e,a=r?e.boundThis:void 0,o=Array.isArray(e.boundArgs)?e.boundArgs:[],s=de(t);if(!s)throw new u(`Step function "${t}" not found. Make sure the step function is registered.`,{hint:`Make sure the step file is included in your build (i.e. it is listed in the workflow manifest), and that the SWC plugin is configured for the file.`});if(!n&&!r&&o.length===0)return s;let c=function(...e){let t=r?a:this,c=o.length>0?[...o,...e]:e;if(n){let e=qr.getStore();if(!e)throw new i(`Cannot call step function with closure variables outside step context`);let r={...e,closureVars:n};return qr.run(r,()=>s.apply(t,c))}return s.apply(t,c)};return Object.defineProperty(c,"name",{value:s.name}),Object.defineProperty(c,"stepId",{value:t,writable:!1,enumerable:!1,configurable:!1}),s.maxRetries!==void 0&&(c.maxRetries=s.maxRetries),c},WorkflowFunction:e=>Object.assign(()=>{throw new u(`Workflow functions cannot be called directly. Use start() to invoke them.`,{hint:"Wrap the workflow with `start(workflowFn, { ... })` from `workflow` to begin a run instead of invoking it like a normal function."})},{workflowId:e.workflowId}),Request:t=>{let n=t.responseWritable,r={method:t.method,headers:new e.Headers(t.headers),body:t.body,duplex:t.duplex};t.signal&&(r.signal=t.signal);let i=new e.Request(t.url,r);return t.signal&&gi(t.signal,i.signal),n&&(i.respondWith=async e=>{let t=n.getWriter();await t.write(e),await t.close()}),i},Response:t=>new e.Response(t.body,{status:t.status,statusText:t.statusText,headers:new e.Headers(t.headers)}),ReadableStream:i=>{if(`bodyInit`in i){let t=i.bodyInit;return new e.Response(t).body}let a=new si(n,i.name);if(i.type===`bytes`){let n=F();t.push(n.promise);let{readable:r,writable:i}=new e.TransformStream;return I(a,i,n).catch(()=>{}),Rt(r,n),r}else{let i=oi(Si(e,t,n,r),r),o=F();return t.push(o.promise),I(a,i.writable,o).catch(()=>{}),Rt(i.readable,o),i.readable}},WritableStream:i=>{let a=typeof i.runId==`string`?i.runId:n,o=a===n?r:(async()=>{let e=await(await L()).getEncryptionKeyForRun?.(a);return e?await P(e,[`encrypt`]):void 0})(),s=ai(mi(e,t,a,o),o),c=new Q(a,i.name),l=F();return t.push(l.promise),I(s.readable,c,l).catch(()=>{}),Lt(s.writable,l),Object.defineProperty(s.writable,w,{value:i.name,writable:!1}),Object.defineProperty(s.writable,S,{value:a,writable:!1}),s.writable},AbortController:e=>_i(e,t,n),AbortSignal:e=>vi(e,t,n)}}async function Ci(e,t){return await dn(e,t)}async function wi(e,t){return fn(e,t)}async function Ti(e,t,n,r=[],i=globalThis,a=!1){if(a)return Yt(N(e,fi(i,r,t,n)));try{return await Vr(e,n,{global:i,extraReducers:Ri(fi(i,r,t,n))})}catch(e){let t=Z(e),{message:n,hint:r}=Y(`workflow arguments`,t);throw new u(n,{hint:r,cause:t})}}async function Ei(e,t,n,r=globalThis,i={}){return Gr(await wi(e,n),{global:r,extraRevivers:{...zi(xi(r)),...i}})}async function Di(e,t,n,r=globalThis,i=!1){if(i)return Yt(N(e,pi(r)));try{return await Ur(e,n,{global:r,extraReducers:Ri(pi(r))})}catch(e){let t=Z(e),{message:n,hint:r}=Y(`workflow return value`,t);throw new u(n,{hint:r,cause:t})}}async function Oi(e,t,n,r=[],i=globalThis,a={}){return Hr(e,n,{global:i,extraRevivers:{...zi(bi(i,r,t,n)),...a}})}async function ki(e,t,n,r=globalThis,i=!1){if(i)return Yt(N(e,pi(r)));try{return await Ur(e,n,{global:r,extraReducers:Ri(pi(r))})}catch(e){let t=Z(e),{message:n,hint:r}=Y(`step arguments`,t);throw new u(n,{hint:r,cause:t})}}async function Ai(e,t,n,r=[],i=globalThis,a={}){return Wr(e,n,{global:i,extraRevivers:{...zi(Si(i,r,t,n)),...a}})}async function ji(e,t,n,r=[],i=globalThis,a=!1){if(a)return Yt(N(e,mi(i,r,t,n)));try{return await Ur(e,n,{global:i,extraReducers:Ri(mi(i,r,t,n))})}catch(e){let t=Z(e),{message:n,hint:r}=Y(`step return value`,t);throw new u(n,{hint:r,cause:t})}}async function Mi(e,t,n,r=[],i=globalThis){try{let a=N(e,mi(i,r,t,n)),o=new TextEncoder().encode(a);return await Ci(W(H.DEVALUE_V1,o),n)}catch(e){let t=Z(e),{message:n,hint:r}=Y(`step error`,t);throw new u(n,{hint:r,cause:t})}}async function Ni(e,t,n,r=globalThis,i={}){let a=await wi(e,n);if(!(a instanceof Uint8Array))return kt(a,{...xi(r),...i});let{format:o,payload:s}=G(a);if(o===H.DEVALUE_V1)return Ot(new TextDecoder().decode(s),{...xi(r),...i});throw Error(`Unsupported serialization format: ${o}`)}async function Pi(e,t,n,r=globalThis){try{let t=N(e,pi(r)),i=new TextEncoder().encode(t);return await Ci(W(H.DEVALUE_V1,i),n)}catch(e){let t=Z(e),{message:n,hint:r}=Y(`run error`,t);throw new u(n,{hint:r,cause:t})}}async function Fi(e,t,n,r=[],i=globalThis,a={}){let o=await wi(e,n);if(!(o instanceof Uint8Array))return kt(o,{...bi(i,r,t,n),...a});let{format:s,payload:c}=G(o);if(s===H.DEVALUE_V1)return Ot(new TextDecoder().decode(c),{...bi(i,r,t,n),...a});throw Error(`Unsupported serialization format: ${s}`)}async function Ii(e,t,n,r=globalThis,i={}){return Gr(await wi(e,n),{global:r,extraRevivers:{...zi(xi(r)),...i}})}const Li=[`ReadableStream`,`WritableStream`,`Request`,`Response`,`StepFunction`,`AbortController`,`AbortSignal`];function Ri(e){let t={};for(let n of Li)n in e&&(t[n]=e[n]);return t}function zi(e){let t={};for(let n of Li)n in e&&(t[n]=e[n]);return t}const Bi=[{format:H.ENCRYPTED,minVersion:`4.2.0-beta.64`}],Vi=new Set([H.DEVALUE_V1]);function Hi(e){if(!e||!Mt.default.valid(e))return{supportedFormats:Vi};let t=new Set(Vi);for(let{format:n,minVersion:r}of Bi)Mt.default.gte(e,r)&&t.add(n);return{supportedFormats:t}}const Ui=`5.0.0-beta.10`,Wi=/^[a-zA-Z0-9_\-./@]+$/;function Gi(e){if(!Wi.test(e))throw Error(`Invalid workflow name "${e}": must only contain alphanumeric characters, underscores, hyphens, dots, forward slashes, or at signs`);return`__wkf_workflow_${e}`}const Ki=ee();function qi(e){return`__health_check__${e}`}function Ji(e){let t=y.safeParse(e);if(t.success)return t.data}function Yi(e){return`wrun_hc_${e}`}async function Xi(e,t,n){let r=await L(),i=qi(e.correlationId),a=JSON.stringify({healthy:!0,endpoint:t,correlationId:e.correlationId,specVersion:n??3,workflowCoreVersion:Ui,timestamp:Date.now()}),o=Yi(e.correlationId);await r.streams.write(o,i,a),await r.streams.close(o,i)}async function Zi(e,t){let n=[],r=!1,i=!1;for(;!r&&!i;){let a=e.read(),o=new Promise(e=>setTimeout(()=>{i=!0,e({done:!0,value:void 0})},t)),s=await Promise.race([a,o]);r=s.done,s.value&&n.push(s.value)}return{chunks:n,timedOut:i}}function Qi(e){if(e.length===0)return null;let t=e.reduce((e,t)=>e+t.length,0),n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;let i=new TextDecoder().decode(n),a;try{a=JSON.parse(i)}catch{return i.length>0?{healthy:!0}:null}if(typeof a!=`object`||!a||!(`healthy`in a)||typeof a.healthy!=`boolean`)return null;let o=a,s={healthy:o.healthy};return typeof o.specVersion==`number`&&(s.specVersion=o.specVersion),s}async function $i(e,t,n){let r=n?.timeout??3e4,i=Ki(),a=qi(i),o=t===`workflow`?`__wkf_workflow_health_check`:`__wkf_step_health_check`,s=Date.now();try{for(await e.queue(o,{__healthCheck:!0,correlationId:i},{specVersion:1,deploymentId:n?.deploymentId});Date.now()-s<r;)try{let t=(await e.streams.get(Yi(i),a)).getReader(),{chunks:n,timedOut:r}=await Zi(t,500);if(r){try{t.cancel()}catch{}await new Promise(e=>setTimeout(e,100));continue}let o=Qi(n);if(o)return{...o,latencyMs:Date.now()-s};await new Promise(e=>setTimeout(e,100))}catch{await new Promise(e=>setTimeout(e,100))}return{healthy:!1,error:`Health check timed out after ${r}ms`}}catch(e){return{healthy:!1,error:e instanceof Error?e.message:String(e)}}}async function ea(e,t){let n=t!==void 0;return Er(n?`workflow.loadNewEvents`:`workflow.loadEvents`,async r=>{r?.setAttributes({...wn(e)});let i=[],a=t??null,o=!0,s=0,c=await L(),l=Date.now();for(;o;){let t=Date.now(),r=await c.events.list({runId:e,pagination:{sortOrder:`asc`,cursor:a??void 0}});i.push(...r.data),o=r.hasMore,a=r.cursor??a,s++,Lr.debug(`Loaded event page`,{workflowRunId:e,incremental:n,page:s,pageEvents:r.data.length,totalEvents:i.length,hasMore:o,pageMs:Date.now()-t})}return Lr.debug(`Event load complete`,{workflowRunId:e,incremental:n,totalEvents:i.length,pagesLoaded:s,totalMs:Date.now()-l}),r?.setAttributes({...Dn(i.length),...fr(s)}),{events:i,cursor:a}})}const ta={"Access-Control-Allow-Origin":`*`,"Access-Control-Allow-Methods":`POST, OPTIONS, GET, HEAD`,"Access-Control-Allow-Headers":`Content-Type`};function na(e,t){return async n=>{let r=new URL(n.url);return r.searchParams.has(`__health`)?n.method===`OPTIONS`?new Response(null,{status:204,headers:ta}):new Response(JSON.stringify({healthy:!0,endpoint:r.pathname,specVersion:t??3,workflowCoreVersion:Ui}),{status:200,headers:{"Content-Type":`application/json`,...ta}}):await e(n)}}async function ra(e,...t){let n=t[0];await Er(`queue.publish`,{attributes:{...Qn(`vercel-queue`),...$n(n),...tr(`publish`),...gr(`vercel-queue`),..._r(`vercel-queue`),...vr(`vqs`),...yr(`publish`)},kind:await Ar(`PRODUCER`)},async n=>{let{messageId:r}=await e.queue(...t);r&&n?.setAttributes(er(r))})}function ia(e){if(e.requestedAt)try{return nr(Date.now()-e.requestedAt.getTime())}catch{return}}function aa(e,t){let n;return()=>(n||=(async()=>{let n=await e.getEncryptionKeyForRun?.(t);return n?await P(n):void 0})(),n)}var oa=t({getHookByToken:()=>ca,resumeHook:()=>la,resumeWebhook:()=>ua});async function sa(e){let t=await L(),n=await t.hooks.getByToken(e),r=await t.runs.get(n.runId),i=await t.getEncryptionKeyForRun?.(r),a=i?await P(i):void 0;return n.metadata!==void 0&&(n.metadata=await Ai(n.metadata,n.runId,a)),{hook:n,run:r,encryptionKey:a}}async function ca(e){let{hook:t}=await sa(e);return t}async function la(e,t,n){return await Qr(()=>Er(`hook.resume`,async r=>{let i=await L();try{let a,o,s;if(typeof e==`string`){let t=await sa(e);a=t.hook,o=t.run,s=n??t.encryptionKey}else if(a=e,o=await i.runs.get(a.runId),n)s=n;else{let e=await i.getEncryptionKeyForRun?.(o);s=e?await P(e):void 0}r?.setAttributes({...ir(a.token),...ar(a.hookId),...wn(a.runId)});let c=o.executionContext?.workflowCoreVersion,{supportedFormats:l}=Hi(typeof c==`string`?c:void 0);l.has(H.ENCRYPTED)||(s=void 0);let u=[],d=b(a.specVersion),f=await ji(t,a.runId,s,u,globalThis,d);(0,jt.waitUntil)(Promise.all(u).catch(e=>{if(e!==void 0)throw e})),await i.events.create(a.runId,{eventType:`hook_received`,specVersion:3,correlationId:a.hookId,eventData:{...d?{}:{token:a.token},payload:f}},{v1Compat:d}),r?.setAttributes({...Sn(o.workflowName)});let p=o.executionContext?.traceCarrier;if(p){let e=await Or(p);e&&r?.addLink?.({context:e})}return await i.queue(Gi(o.workflowName),{runId:a.runId,traceCarrier:o.executionContext?.traceCarrier??void 0},{deploymentId:o.deploymentId,specVersion:o.specVersion??1}),a}catch(t){throw r?.setAttributes({...ir(typeof e==`string`?e:e.token),...or(!1)}),t}}))}async function ua(e,t){let{hook:n,encryptionKey:r}=await sa(e);if(n.isWebhook===!1)throw new h(e);let a,o;if(n.metadata&&typeof n.metadata==`object`&&`respondWith`in n.metadata)if(n.metadata.respondWith===`manual`){let{readable:e,writable:n}=new TransformStream;o=e,t[ue]=n}else if(n.metadata.respondWith instanceof Response)a=n.metadata.respondWith;else throw new i(`Invalid \`respondWith\` value: ${n.metadata.respondWith}`,{slug:m.WEBHOOK_INVALID_RESPOND_WITH_VALUE});else a=new Response(null,{status:202});if(await la(n,t,r),o){let e=o.getReader(),t=await e.read();t.value&&(a=t.value),e.cancel()}if(!a)throw new i(`Workflow run did not send a response`,{slug:m.WEBHOOK_RESPONSE_NOT_SENT});return a}export{tr as $,ni as A,En as At,Ir as B,I as Bt,ai as C,Dn as Ct,Ii as D,kn as Dt,Ni as E,Cn as Et,Zr as F,bn as Ft,wr as G,Mr as H,P as Ht,Yr as I,Ut as It,xr as J,Nr as K,Qr as L,Ht as Lt,X as M,An as Mt,$r as N,In as Nt,Ei as O,wn as Ot,Jr as P,xn as Pt,er as Q,qr as R,L as Rt,bi as S,jn as St,Ai as T,Sn as Tt,Sr as U,Te as Ut,Rr as V,Lt as Vt,Er as W,dr as X,br as Y,$n as Z,Mi as _,Hn as _t,Gi as a,zn as at,Di as b,Nn as bt,ea as c,Jn as ct,ra as d,Ln as dt,Qn as et,na as f,Gn as ft,ki as g,Un as gt,Pi as h,Zn as ht,ia as i,Wn as it,ti as j,Pn as jt,Oi as k,Tn as kt,aa as l,Rn as lt,Q as m,Xn as mt,la as n,mr as nt,Xi as o,qn as ot,Ui as p,Yn as pt,rr as q,ua as r,hr as rt,$i as s,Kn as st,ca as t,pr as tt,Ji as u,Vn as ut,ji as v,Bn as vt,Fi as w,Fn as wt,fi as x,Mn as xt,Ti as y,On as yt,Lr as z,F as zt};
|
|
12
|
+
`);for(let t of s)t.length>0&&i.enqueue(Ot(t,e))},async flush(e){r.length>0&&await o(e)}})}var si=class extends ReadableStream{#e;constructor(e,t,n){if(typeof t!=`string`||t.length===0)throw new i(`"name" is required, got "${t}"`);super({type:`bytes`,pull:async r=>{let i=this.#e;if(!i){let r=await(await L()).streams.get(e,t,n);i=this.#e=r.getReader()}if(!i){r.error(Error(`Failed to get reader`));return}let a=await i.read();a.done?(this.#e=void 0,r.close()):r.enqueue(a.value)},cancel:async e=>{this.#e&&=(await this.#e.cancel(e).catch(()=>{}),void 0)}})}},Q=class extends WritableStream{constructor(e,t){if(typeof e!=`string`)throw new i(`"runId" must be a string, got "${typeof e}"`);if(typeof t!=`string`||t.length===0)throw new i(`"name" is required, got "${t}"`);let n=L(),r=[],a=null,o=null,s,c=async()=>{if(a&&=(clearTimeout(a),null),r.length===0)return;let i=r.slice(),o=await n;if(s===void 0&&(s=o.streamFlushIntervalMs??10),typeof o.streams.writeMulti==`function`&&i.length>1)await o.streams.writeMulti(e,t,i);else for(let n of i)await o.streams.write(e,t,n);r=[]},l=[],u=()=>{a||=setTimeout(()=>{a=null;let e=l;l=[],o=c().then(()=>{for(let t of e)t.resolve()},t=>{for(let n of e)n.reject(t)})},s??10)};super({async write(e){o&&=(await o,null),r.push(e),u(),await new Promise((e,t)=>{l.push({resolve:e,reject:t})})},async close(){o&&=(await o,null),await c(),await(await n).streams.close(e,t)},abort(e){a&&=(clearTimeout(a),null),r=[];let t=l;l=[];let n=e??Error(`Stream aborted`);for(let e of t)e.reject(n)}})}};function ci(e=globalThis){return{...Kt(),...en(),...Qt(e),Request:t=>{if(!(t instanceof e.Request))return!1;let n={method:t.method,url:t.url,headers:t.headers,body:t.body,duplex:t.duplex},r=t[ue];return r&&(n.responseWritable=r),t.signal&&(t.signal.aborted||t.signal[C])&&(n.signal=t.signal),n},Response:t=>t instanceof e.Response?{type:t.type,url:t.url,status:t.status,statusText:t.statusText,headers:t.headers,body:t.body,redirected:t.redirected}:!1}}function li(e,t,n,r,i,a){let o=t[C],s=t[T];if(!o){let e=(n[se]||ri)();o=Xr(e),s=`abrt_${e}`,t[C]=o,t[T]=s,t.signal&&(t.signal[C]=o,t.signal[T]=s)}return di(e,o,i,a,r),{streamName:o,hookToken:s,aborted:e.aborted,reason:e.aborted?e.reason:void 0}}function ui(e,t){let n=t[C]??t.signal?.[C],r=t[T]??t.signal?.[T];if(!n)throw Error(`AbortController/AbortSignal stream name is not set`);return{streamName:n,hookToken:r,aborted:e.aborted,reason:e.aborted?e.reason:void 0}}function di(e,t,n,r,i){e.aborted||e[oe]||(e[oe]=!0,e.addEventListener(`abort`,()=>{i.push((async()=>{try{let i=await r,a=await ki({aborted:!0,reason:e.reason},n,i),o=new Q(n,t).getWriter();await o.write(a),await o.close()}catch{}})())},{once:!0}))}function fi(e=globalThis,t,n,r){return{...ci(e),ReadableStream:i=>{if(!(i instanceof e.ReadableStream))return!1;if(i.locked)throw new u(`ReadableStream is locked and cannot be passed across a workflow boundary.`,{hint:`Pass the stream before calling .getReader() / .pipeThrough() / .pipeTo(), or tee it with .tee() and pass one of the branches.`});let a=`strm_${(e[se]||ri)()}`,o=ii(i),s=new Q(n,a);o===`bytes`?t.push(i.pipeTo(s)):t.push(i.pipeThrough(ai(fi(e,t,n,r),r)).pipeTo(s));let c={name:a};return o&&(c.type=o),c},WritableStream:r=>{if(!(r instanceof e.WritableStream))return!1;let i=r[w],a=r[S];if(typeof i==`string`&&typeof a==`string`)return{name:i,runId:a};let o=`strm_${(e[se]||ri)()}`,s=new si(n,o);return t.push(s.pipeTo(r)),{name:o}},AbortController:i=>!e.AbortController||typeof e.AbortController!=`function`||!(i instanceof e.AbortController)?!1:li(i.signal,i,e,t,n,r),AbortSignal:i=>!e.AbortSignal||typeof e.AbortSignal!=`function`||!(i instanceof e.AbortSignal)?!1:li(i,i,e,t,n,r)}}function pi(e=globalThis){return{...ci(e),ReadableStream:t=>{if(!(t instanceof e.ReadableStream))return!1;let n=t[x];if(n!==void 0)return{bodyInit:n};let r=t[w];if(!r)throw new i("ReadableStream `name` is not set");let a={name:r},o=t[ie];return o&&(a.type=o),a},WritableStream:t=>{if(!(t instanceof e.WritableStream))return!1;let n=t[w];if(!n)throw new i("WritableStream `name` is not set");let r={name:n},a=t[S];return typeof a==`string`&&(r.runId=a),r},AbortController:t=>{if(!t||!t.signal)return!1;let n=t,r=n[C]??n.signal?.[C],i=e.AbortController&&typeof e.AbortController==`function`&&t instanceof e.AbortController;return!r&&!i?!1:ui(t.signal,n)},AbortSignal:t=>{let n=t?.[C],r=e.AbortSignal&&typeof e.AbortSignal==`function`&&t instanceof e.AbortSignal;return!n&&!r?!1:ui(t,t)}}}function mi(e=globalThis,t,n,r){return{...ci(e),ReadableStream:i=>{if(!(i instanceof e.ReadableStream))return!1;if(i.locked)throw new u(`ReadableStream is locked and cannot be passed across a workflow boundary.`,{hint:`Pass the stream before calling .getReader() / .pipeThrough() / .pipeTo(), or tee it with .tee() and pass one of the branches.`});let a=i[w],o=i[ie];if(!a){a=`strm_${(e[se]||ri)()}`,o=ii(i);let s=new Q(n,a);o===`bytes`?t.push(i.pipeTo(s)):t.push(i.pipeThrough(ai(mi(e,t,n,r),r)).pipeTo(s))}let s={name:a};return o&&(s.type=o),s},WritableStream:i=>{if(!(i instanceof e.WritableStream))return!1;let a=i[w],o=i[S];a||(a=`strm_${(e[se]||ri)()}`,t.push(new si(n,a).pipeThrough(oi(Si(e,t,n,r),r)).pipeTo(i)));let s={name:a};return typeof o==`string`&&(s.runId=o),s},AbortController:i=>!e.AbortController||typeof e.AbortController!=`function`||!(i instanceof e.AbortController)?!1:li(i.signal,i,e,t,n,r),AbortSignal:i=>!e.AbortSignal||typeof e.AbortSignal!=`function`||!(i instanceof e.AbortSignal)?!1:li(i,i,e,t,n,r)}}function hi(e,t,n,r){let i=new AbortController;return r.push((async()=>{try{let r=new si(t,n).getReader(),a=await Promise.race([r.read(),new Promise(e=>{if(i.signal.aborted){e({value:void 0,done:!0});return}i.signal.addEventListener(`abort`,()=>e({value:void 0,done:!0}),{once:!0})})]);if(r.releaseLock(),a.value&&!a.done)try{let n=qr.getStore(),r=await Ai(a.value,t,n?.encryptionKey);e.abort(r?.reason)}catch{e.abort()}}catch{}})()),i}function $(e,t,n){let r=e,i=e.signal;r[C]=t.streamName,r[T]=t.hookToken,i[C]=t.streamName,i[T]=t.hookToken,n&&(r[le]=n,i[le]=n)}function gi(e,t){let n=e,r=t;n[C]!==void 0&&(r[C]=n[C]),n[T]!==void 0&&(r[T]=n[T]),n[le]!==void 0&&(r[le]=n[le])}function _i(e,t,n){let r=new AbortController;e.aborted?($(r,e),r.abort(e.reason)):e.streamName?$(r,e,hi(r,n,e.streamName,t)):$(r,e);let i=r.abort.bind(r);return r.abort=t=>{if(r.signal.aborted)return;i(t);let n=qr.getStore();n&&(n.ops.push((async()=>{try{let r=await ki({aborted:!0,reason:t},n.workflowMetadata.workflowRunId,n.encryptionKey),i=new Q(n.workflowMetadata.workflowRunId,e.streamName).getWriter();await i.write(r),await i.close()}catch{}})()),e.hookToken&&n.ops.push((async()=>{try{let{resumeHook:n}=await Promise.resolve().then(()=>oa);await n(e.hookToken,{aborted:!0,reason:t})}catch{}})()))},r}function vi(e,t,n){let r=new AbortController;return e.aborted?($(r,e),r.abort(e.reason)):e.streamName?$(r,e,hi(r,n,e.streamName,t)):$(r,e),r.signal}function yi(e=globalThis){return{...qt(e),...$t(e)}}function bi(e=globalThis,t,n,r){return{...yi(e),StepFunction:()=>{throw new u(`Step functions cannot be deserialized in client context. Step functions should not be returned from workflows.`,{hint:`A step function reference reached the client. Return a serializable value (e.g. the step result) instead of the step itself.`})},WorkflowFunction:e=>Object.assign(()=>{throw new u(`Workflow functions cannot be called directly. Use start() to invoke them.`,{hint:"Wrap the workflow with `start(workflowFn, { ... })` from `workflow` to begin a run instead of invoking it like a normal function."})},{workflowId:e.workflowId}),Request:t=>{let n={method:t.method,headers:new e.Headers(t.headers),body:t.body,duplex:t.duplex};t.signal&&(n.signal=t.signal);let r=new e.Request(t.url,n);return t.signal&&gi(t.signal,r.signal),r},Response:t=>new e.Response(t.body,{status:t.status,statusText:t.statusText,headers:new e.Headers(t.headers)}),ReadableStream:i=>{if(`bodyInit`in i){let t=i.bodyInit;return new e.Response(t).body}let a=new si(n,i.name,i.startIndex);if(i.type===`bytes`){let n=F();t.push(n.promise);let{readable:r,writable:i}=new e.TransformStream;return I(a,i,n).catch(()=>{}),Rt(r,n),r}else{let i=oi(bi(e,t,n,r),r),o=F();return t.push(o.promise),I(a,i.writable,o).catch(()=>{}),Rt(i.readable,o),i.readable}},WritableStream:i=>{let a=typeof i.runId==`string`?i.runId:n,o=a===n?r:(async()=>{let e=await L(),t=await e.runs.get(a,{resolveData:`none`}),n=await e.getEncryptionKeyForRun?.(t);return n?await P(n,[`encrypt`]):void 0})(),s=ai(fi(e,t,a,o),o),c=new Q(a,i.name),l=F();return t.push(l.promise),I(s.readable,c,l).catch(()=>{}),Lt(s.writable,l),Object.defineProperty(s.writable,w,{value:i.name,writable:!1}),Object.defineProperty(s.writable,S,{value:a,writable:!1}),s.writable},AbortController:e=>_i(e,t,n),AbortSignal:e=>vi(e,t,n)}}function xi(e=globalThis){return{...yi(e),...tn(e),Request:t=>{Object.setPrototypeOf(t,e.Request.prototype);let n=t.responseWritable;return n&&(t[ue]=n,delete t.responseWritable,t.respondWith=()=>{throw new u("`respondWith()` must be called from within a step function.",{hint:'Move the `respondWith(...)` call inside a `"use step"` function — it cannot be invoked from a workflow context.'})}),t},WorkflowFunction:e=>Object.assign(()=>{throw new u(`Workflow functions cannot be called directly. Use start() to invoke them.`,{hint:"Wrap the workflow with `start(workflowFn, { ... })` from `workflow` to begin a run instead of invoking it like a normal function."})},{workflowId:e.workflowId}),Response:t=>(Object.setPrototypeOf(t,e.Response.prototype),t),ReadableStream:t=>`bodyInit`in t?Object.create(e.ReadableStream.prototype,{[x]:{value:t.bodyInit,writable:!1}}):Object.create(e.ReadableStream.prototype,{[w]:{value:t.name,writable:!1},[ie]:{value:t.type,writable:!1}}),WritableStream:t=>{let n={[w]:{value:t.name,writable:!1}};return typeof t.runId==`string`&&(n[S]={value:t.runId,writable:!1}),Object.create(e.WritableStream.prototype,n)},AbortController:e=>{let t=new ei(e.streamName,e.hookToken);return e.aborted&&t._setAborted(e.reason),{[C]:e.streamName,[T]:e.hookToken,signal:t,abort:()=>{}}},AbortSignal:e=>{let t=new ei(e.streamName,e.hookToken);return e.aborted&&t._setAborted(e.reason),t}}}function Si(e=globalThis,t,n,r){return{...yi(e),StepFunction:e=>{let t=e.stepId,n=e.closureVars,r=`boundThis`in e,a=r?e.boundThis:void 0,o=Array.isArray(e.boundArgs)?e.boundArgs:[],s=de(t);if(!s)throw new u(`Step function "${t}" not found. Make sure the step function is registered.`,{hint:`Make sure the step file is included in your build (i.e. it is listed in the workflow manifest), and that the SWC plugin is configured for the file.`});if(!n&&!r&&o.length===0)return s;let c=function(...e){let t=r?a:this,c=o.length>0?[...o,...e]:e;if(n){let e=qr.getStore();if(!e)throw new i(`Cannot call step function with closure variables outside step context`);let r={...e,closureVars:n};return qr.run(r,()=>s.apply(t,c))}return s.apply(t,c)};return Object.defineProperty(c,"name",{value:s.name}),Object.defineProperty(c,"stepId",{value:t,writable:!1,enumerable:!1,configurable:!1}),s.maxRetries!==void 0&&(c.maxRetries=s.maxRetries),c},WorkflowFunction:e=>Object.assign(()=>{throw new u(`Workflow functions cannot be called directly. Use start() to invoke them.`,{hint:"Wrap the workflow with `start(workflowFn, { ... })` from `workflow` to begin a run instead of invoking it like a normal function."})},{workflowId:e.workflowId}),Request:t=>{let n=t.responseWritable,r={method:t.method,headers:new e.Headers(t.headers),body:t.body,duplex:t.duplex};t.signal&&(r.signal=t.signal);let i=new e.Request(t.url,r);return t.signal&&gi(t.signal,i.signal),n&&(i.respondWith=async e=>{let t=n.getWriter();await t.write(e),await t.close()}),i},Response:t=>new e.Response(t.body,{status:t.status,statusText:t.statusText,headers:new e.Headers(t.headers)}),ReadableStream:i=>{if(`bodyInit`in i){let t=i.bodyInit;return new e.Response(t).body}let a=new si(n,i.name);if(i.type===`bytes`){let n=F();t.push(n.promise);let{readable:r,writable:i}=new e.TransformStream;return I(a,i,n).catch(()=>{}),Rt(r,n),r}else{let i=oi(Si(e,t,n,r),r),o=F();return t.push(o.promise),I(a,i.writable,o).catch(()=>{}),Rt(i.readable,o),i.readable}},WritableStream:i=>{let a=typeof i.runId==`string`?i.runId:n,o=a===n?r:(async()=>{let e=await L(),t=await e.runs.get(a,{resolveData:`none`}),n=await e.getEncryptionKeyForRun?.(t);return n?await P(n,[`encrypt`]):void 0})(),s=ai(mi(e,t,a,o),o),c=new Q(a,i.name),l=F();return t.push(l.promise),I(s.readable,c,l).catch(()=>{}),Lt(s.writable,l),Object.defineProperty(s.writable,w,{value:i.name,writable:!1}),Object.defineProperty(s.writable,S,{value:a,writable:!1}),s.writable},AbortController:e=>_i(e,t,n),AbortSignal:e=>vi(e,t,n)}}async function Ci(e,t){return await dn(e,t)}async function wi(e,t){return fn(e,t)}async function Ti(e,t,n,r=[],i=globalThis,a=!1){if(a)return Yt(N(e,fi(i,r,t,n)));try{return await Vr(e,n,{global:i,extraReducers:Ri(fi(i,r,t,n))})}catch(e){let t=Z(e),{message:n,hint:r}=Y(`workflow arguments`,t);throw new u(n,{hint:r,cause:t})}}async function Ei(e,t,n,r=globalThis,i={}){return Gr(await wi(e,n),{global:r,extraRevivers:{...zi(xi(r)),...i}})}async function Di(e,t,n,r=globalThis,i=!1){if(i)return Yt(N(e,pi(r)));try{return await Ur(e,n,{global:r,extraReducers:Ri(pi(r))})}catch(e){let t=Z(e),{message:n,hint:r}=Y(`workflow return value`,t);throw new u(n,{hint:r,cause:t})}}async function Oi(e,t,n,r=[],i=globalThis,a={}){return Hr(e,n,{global:i,extraRevivers:{...zi(bi(i,r,t,n)),...a}})}async function ki(e,t,n,r=globalThis,i=!1){if(i)return Yt(N(e,pi(r)));try{return await Ur(e,n,{global:r,extraReducers:Ri(pi(r))})}catch(e){let t=Z(e),{message:n,hint:r}=Y(`step arguments`,t);throw new u(n,{hint:r,cause:t})}}async function Ai(e,t,n,r=[],i=globalThis,a={}){return Wr(e,n,{global:i,extraRevivers:{...zi(Si(i,r,t,n)),...a}})}async function ji(e,t,n,r=[],i=globalThis,a=!1){if(a)return Yt(N(e,mi(i,r,t,n)));try{return await Ur(e,n,{global:i,extraReducers:Ri(mi(i,r,t,n))})}catch(e){let t=Z(e),{message:n,hint:r}=Y(`step return value`,t);throw new u(n,{hint:r,cause:t})}}async function Mi(e,t,n,r=[],i=globalThis){try{let a=N(e,mi(i,r,t,n)),o=new TextEncoder().encode(a);return await Ci(W(H.DEVALUE_V1,o),n)}catch(e){let t=Z(e),{message:n,hint:r}=Y(`step error`,t);throw new u(n,{hint:r,cause:t})}}async function Ni(e,t,n,r=globalThis,i={}){let a=await wi(e,n);if(!(a instanceof Uint8Array))return kt(a,{...xi(r),...i});let{format:o,payload:s}=G(a);if(o===H.DEVALUE_V1)return Ot(new TextDecoder().decode(s),{...xi(r),...i});throw Error(`Unsupported serialization format: ${o}`)}async function Pi(e,t,n,r=globalThis){try{let t=N(e,pi(r)),i=new TextEncoder().encode(t);return await Ci(W(H.DEVALUE_V1,i),n)}catch(e){let t=Z(e),{message:n,hint:r}=Y(`run error`,t);throw new u(n,{hint:r,cause:t})}}async function Fi(e,t,n,r=[],i=globalThis,a={}){let o=await wi(e,n);if(!(o instanceof Uint8Array))return kt(o,{...bi(i,r,t,n),...a});let{format:s,payload:c}=G(o);if(s===H.DEVALUE_V1)return Ot(new TextDecoder().decode(c),{...bi(i,r,t,n),...a});throw Error(`Unsupported serialization format: ${s}`)}async function Ii(e,t,n,r=globalThis,i={}){return Gr(await wi(e,n),{global:r,extraRevivers:{...zi(xi(r)),...i}})}const Li=[`ReadableStream`,`WritableStream`,`Request`,`Response`,`StepFunction`,`AbortController`,`AbortSignal`];function Ri(e){let t={};for(let n of Li)n in e&&(t[n]=e[n]);return t}function zi(e){let t={};for(let n of Li)n in e&&(t[n]=e[n]);return t}const Bi=[{format:H.ENCRYPTED,minVersion:`4.2.0-beta.64`}],Vi=new Set([H.DEVALUE_V1]);function Hi(e){if(!e||!Mt.default.valid(e))return{supportedFormats:Vi};let t=new Set(Vi);for(let{format:n,minVersion:r}of Bi)Mt.default.gte(e,r)&&t.add(n);return{supportedFormats:t}}const Ui=`5.0.0-beta.10`,Wi=/^[a-zA-Z0-9_\-./@]+$/;function Gi(e){if(!Wi.test(e))throw Error(`Invalid workflow name "${e}": must only contain alphanumeric characters, underscores, hyphens, dots, forward slashes, or at signs`);return`__wkf_workflow_${e}`}const Ki=ee();function qi(e){return`__health_check__${e}`}function Ji(e){let t=y.safeParse(e);if(t.success)return t.data}function Yi(e){return`wrun_hc_${e}`}async function Xi(e,t,n){let r=await L(),i=qi(e.correlationId),a=JSON.stringify({healthy:!0,endpoint:t,correlationId:e.correlationId,specVersion:n??3,workflowCoreVersion:Ui,timestamp:Date.now()}),o=Yi(e.correlationId);await r.streams.write(o,i,a),await r.streams.close(o,i)}async function Zi(e,t){let n=[],r=!1,i=!1;for(;!r&&!i;){let a=e.read(),o=new Promise(e=>setTimeout(()=>{i=!0,e({done:!0,value:void 0})},t)),s=await Promise.race([a,o]);r=s.done,s.value&&n.push(s.value)}return{chunks:n,timedOut:i}}function Qi(e){if(e.length===0)return null;let t=e.reduce((e,t)=>e+t.length,0),n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;let i=new TextDecoder().decode(n),a;try{a=JSON.parse(i)}catch{return i.length>0?{healthy:!0}:null}if(typeof a!=`object`||!a||!(`healthy`in a)||typeof a.healthy!=`boolean`)return null;let o=a,s={healthy:o.healthy};return typeof o.specVersion==`number`&&(s.specVersion=o.specVersion),s}async function $i(e,t,n){let r=n?.timeout??3e4,i=Ki(),a=qi(i),o=t===`workflow`?`__wkf_workflow_health_check`:`__wkf_step_health_check`,s=Date.now();try{for(await e.queue(o,{__healthCheck:!0,correlationId:i},{specVersion:1,deploymentId:n?.deploymentId});Date.now()-s<r;)try{let t=(await e.streams.get(Yi(i),a)).getReader(),{chunks:n,timedOut:r}=await Zi(t,500);if(r){try{t.cancel()}catch{}await new Promise(e=>setTimeout(e,100));continue}let o=Qi(n);if(o)return{...o,latencyMs:Date.now()-s};await new Promise(e=>setTimeout(e,100))}catch{await new Promise(e=>setTimeout(e,100))}return{healthy:!1,error:`Health check timed out after ${r}ms`}}catch(e){return{healthy:!1,error:e instanceof Error?e.message:String(e)}}}async function ea(e,t){let n=t!==void 0;return Er(n?`workflow.loadNewEvents`:`workflow.loadEvents`,async r=>{r?.setAttributes({...wn(e)});let i=[],a=t??null,o=!0,s=0,c=await L(),l=Date.now();for(;o;){let t=Date.now(),r=await c.events.list({runId:e,pagination:{sortOrder:`asc`,cursor:a??void 0}});i.push(...r.data),o=r.hasMore,a=r.cursor??a,s++,Lr.debug(`Loaded event page`,{workflowRunId:e,incremental:n,page:s,pageEvents:r.data.length,totalEvents:i.length,hasMore:o,pageMs:Date.now()-t})}return Lr.debug(`Event load complete`,{workflowRunId:e,incremental:n,totalEvents:i.length,pagesLoaded:s,totalMs:Date.now()-l}),r?.setAttributes({...Dn(i.length),...fr(s)}),{events:i,cursor:a}})}const ta={"Access-Control-Allow-Origin":`*`,"Access-Control-Allow-Methods":`POST, OPTIONS, GET, HEAD`,"Access-Control-Allow-Headers":`Content-Type`};function na(e,t){return async n=>{let r=new URL(n.url);return r.searchParams.has(`__health`)?n.method===`OPTIONS`?new Response(null,{status:204,headers:ta}):new Response(JSON.stringify({healthy:!0,endpoint:r.pathname,specVersion:t??3,workflowCoreVersion:Ui}),{status:200,headers:{"Content-Type":`application/json`,...ta}}):await e(n)}}async function ra(e,...t){let n=t[0];await Er(`queue.publish`,{attributes:{...Qn(`vercel-queue`),...$n(n),...tr(`publish`),...gr(`vercel-queue`),..._r(`vercel-queue`),...vr(`vqs`),...yr(`publish`)},kind:await Ar(`PRODUCER`)},async n=>{let{messageId:r}=await e.queue(...t);r&&n?.setAttributes(er(r))})}function ia(e){if(e.requestedAt)try{return nr(Date.now()-e.requestedAt.getTime())}catch{return}}function aa(e,t){let n;return()=>(n||=(async()=>{let n=await e.getEncryptionKeyForRun?.(t);return n?await P(n):void 0})(),n)}var oa=t({getHookByToken:()=>ca,resumeHook:()=>la,resumeWebhook:()=>ua});async function sa(e){let t=await L(),n=await t.hooks.getByToken(e),r=await t.runs.get(n.runId),i=await t.getEncryptionKeyForRun?.(r),a=i?await P(i):void 0;return n.metadata!==void 0&&(n.metadata=await Ai(n.metadata,n.runId,a)),{hook:n,run:r,encryptionKey:a}}async function ca(e){let{hook:t}=await sa(e);return t}async function la(e,t,n){return await Qr(()=>Er(`hook.resume`,async r=>{let i=await L();try{let a,o,s;if(typeof e==`string`){let t=await sa(e);a=t.hook,o=t.run,s=n??t.encryptionKey}else if(a=e,o=await i.runs.get(a.runId),n)s=n;else{let e=await i.getEncryptionKeyForRun?.(o);s=e?await P(e):void 0}r?.setAttributes({...ir(a.token),...ar(a.hookId),...wn(a.runId)});let c=o.executionContext?.workflowCoreVersion,{supportedFormats:l}=Hi(typeof c==`string`?c:void 0);l.has(H.ENCRYPTED)||(s=void 0);let u=[],d=b(a.specVersion),f=await ji(t,a.runId,s,u,globalThis,d);(0,jt.waitUntil)(Promise.all(u).catch(e=>{if(e!==void 0)throw e})),await i.events.create(a.runId,{eventType:`hook_received`,specVersion:3,correlationId:a.hookId,eventData:{...d?{}:{token:a.token},payload:f}},{v1Compat:d}),r?.setAttributes({...Sn(o.workflowName)});let p=o.executionContext?.traceCarrier;if(p){let e=await Or(p);e&&r?.addLink?.({context:e})}return await i.queue(Gi(o.workflowName),{runId:a.runId,traceCarrier:o.executionContext?.traceCarrier??void 0},{deploymentId:o.deploymentId,specVersion:o.specVersion??1}),a}catch(t){throw r?.setAttributes({...ir(typeof e==`string`?e:e.token),...or(!1)}),t}}))}async function ua(e,t){let{hook:n,encryptionKey:r}=await sa(e);if(n.isWebhook===!1)throw new h(e);let a,o;if(n.metadata&&typeof n.metadata==`object`&&`respondWith`in n.metadata)if(n.metadata.respondWith===`manual`){let{readable:e,writable:n}=new TransformStream;o=e,t[ue]=n}else if(n.metadata.respondWith instanceof Response)a=n.metadata.respondWith;else throw new i(`Invalid \`respondWith\` value: ${n.metadata.respondWith}`,{slug:m.WEBHOOK_INVALID_RESPOND_WITH_VALUE});else a=new Response(null,{status:202});if(await la(n,t,r),o){let e=o.getReader(),t=await e.read();t.value&&(a=t.value),e.cancel()}if(!a)throw new i(`Workflow run did not send a response`,{slug:m.WEBHOOK_RESPONSE_NOT_SENT});return a}export{tr as $,ni as A,En as At,Ir as B,I as Bt,ai as C,Dn as Ct,Ii as D,kn as Dt,Ni as E,Cn as Et,Zr as F,bn as Ft,wr as G,Mr as H,P as Ht,Yr as I,Ut as It,xr as J,Nr as K,Qr as L,Ht as Lt,X as M,An as Mt,$r as N,In as Nt,Ei as O,wn as Ot,Jr as P,xn as Pt,er as Q,qr as R,L as Rt,bi as S,jn as St,Ai as T,Sn as Tt,Sr as U,Te as Ut,Rr as V,Lt as Vt,Er as W,dr as X,br as Y,$n as Z,Mi as _,Hn as _t,Gi as a,zn as at,Di as b,Nn as bt,ea as c,Jn as ct,ra as d,Ln as dt,Qn as et,na as f,Gn as ft,ki as g,Un as gt,Pi as h,Zn as ht,ia as i,Wn as it,ti as j,Pn as jt,Oi as k,Tn as kt,aa as l,Rn as lt,Q as m,Xn as mt,la as n,mr as nt,Xi as o,qn as ot,Ui as p,Yn as pt,rr as q,ua as r,hr as rt,$i as s,Kn as st,ca as t,pr as tt,Ji as u,Vn as ut,ji as v,Bn as vt,Fi as w,Fn as wt,fi as x,Mn as xt,Ti as y,On as yt,Lr as z,F as zt};
|
|
@@ -18,7 +18,7 @@ export declare const ROOT_COMPILED_AGENT_NODE_ID = "__root__";
|
|
|
18
18
|
/**
|
|
19
19
|
* Current compiled manifest schema version.
|
|
20
20
|
*/
|
|
21
|
-
export declare const COMPILED_AGENT_MANIFEST_VERSION =
|
|
21
|
+
export declare const COMPILED_AGENT_MANIFEST_VERSION = 25;
|
|
22
22
|
/**
|
|
23
23
|
* Compiled channel entry preserved in the compiled manifest.
|
|
24
24
|
*/
|
|
@@ -100,6 +100,16 @@ export type CompiledConnectionDefinition = z.infer<typeof compiledConnectionDefi
|
|
|
100
100
|
* Normalized authored tool metadata preserved in the compiled manifest.
|
|
101
101
|
*/
|
|
102
102
|
export type CompiledToolDefinition = InternalToolDefinition & ModuleSourceRef;
|
|
103
|
+
/**
|
|
104
|
+
* Compiled dynamic tool resolver entry. The resolver function lives in the
|
|
105
|
+
* compiled module map; the manifest entry carries only the metadata needed
|
|
106
|
+
* to load and invoke it at runtime.
|
|
107
|
+
*/
|
|
108
|
+
export interface CompiledDynamicToolDefinition extends ModuleSourceRef {
|
|
109
|
+
readonly slug: string;
|
|
110
|
+
readonly identity: "single" | "multi";
|
|
111
|
+
readonly eventNames: readonly string[];
|
|
112
|
+
}
|
|
103
113
|
/**
|
|
104
114
|
* Normalized authored hook entry preserved in the compiled manifest.
|
|
105
115
|
*
|
|
@@ -213,6 +223,7 @@ declare const compiledAgentNodeManifestSchema: z.ZodObject<{
|
|
|
213
223
|
warnings: z.ZodNumber;
|
|
214
224
|
}, z.core.$strict>;
|
|
215
225
|
disabledFrameworkTools: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
226
|
+
dynamicTools: z.ZodDefault<z.ZodArray<z.ZodType<CompiledDynamicToolDefinition, unknown, z.core.$ZodTypeInternals<CompiledDynamicToolDefinition, unknown>>>>;
|
|
216
227
|
hooks: z.ZodArray<z.ZodType<CompiledHookDefinition, unknown, z.core.$ZodTypeInternals<CompiledHookDefinition, unknown>>>;
|
|
217
228
|
sandbox: z.ZodNullable<z.ZodObject<{
|
|
218
229
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -298,6 +309,7 @@ export declare const compiledAgentManifestSchema: z.ZodObject<{
|
|
|
298
309
|
warnings: z.ZodNumber;
|
|
299
310
|
}, z.core.$strict>;
|
|
300
311
|
disabledFrameworkTools: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
312
|
+
dynamicTools: z.ZodDefault<z.ZodArray<z.ZodType<CompiledDynamicToolDefinition, unknown, z.core.$ZodTypeInternals<CompiledDynamicToolDefinition, unknown>>>>;
|
|
301
313
|
hooks: z.ZodArray<z.ZodType<CompiledHookDefinition, unknown, z.core.$ZodTypeInternals<CompiledHookDefinition, unknown>>>;
|
|
302
314
|
kind: z.ZodLiteral<"ash-agent-compiled-manifest">;
|
|
303
315
|
remoteAgents: z.ZodArray<z.ZodType<Readonly<ModuleSourceRef & Node & {
|
|
@@ -368,7 +380,7 @@ export declare const compiledAgentManifestSchema: z.ZodObject<{
|
|
|
368
380
|
sourceId: z.ZodString;
|
|
369
381
|
sourceKind: z.ZodLiteral<"module">;
|
|
370
382
|
}, z.core.$strict>>;
|
|
371
|
-
version: z.ZodLiteral<
|
|
383
|
+
version: z.ZodLiteral<25>;
|
|
372
384
|
workspaceResourceRoot: z.ZodObject<{
|
|
373
385
|
logicalPath: z.ZodString;
|
|
374
386
|
rootEntries: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
@@ -385,6 +397,7 @@ export declare function createCompiledAgentNodeManifest(input: {
|
|
|
385
397
|
readonly connections?: readonly CompiledConnectionDefinition[];
|
|
386
398
|
readonly diagnosticsSummary?: DiscoverDiagnosticsSummary;
|
|
387
399
|
readonly disabledFrameworkTools?: readonly string[];
|
|
400
|
+
readonly dynamicTools?: readonly CompiledDynamicToolDefinition[];
|
|
388
401
|
readonly hooks?: readonly CompiledHookDefinition[];
|
|
389
402
|
readonly remoteAgents?: readonly CompiledRemoteAgentNode[];
|
|
390
403
|
readonly sandbox?: CompiledSandboxDefinition | null;
|
|
@@ -423,6 +436,7 @@ export declare function createCompiledAgentManifest(input: {
|
|
|
423
436
|
readonly connections?: readonly CompiledConnectionDefinition[];
|
|
424
437
|
readonly diagnosticsSummary?: DiscoverDiagnosticsSummary;
|
|
425
438
|
readonly disabledFrameworkTools?: readonly string[];
|
|
439
|
+
readonly dynamicTools?: readonly CompiledDynamicToolDefinition[];
|
|
426
440
|
readonly hooks?: readonly CompiledHookDefinition[];
|
|
427
441
|
readonly remoteAgents?: readonly CompiledRemoteAgentNode[];
|
|
428
442
|
readonly sandbox?: CompiledSandboxDefinition | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{z}from"#compiled/zod/index.js";import{discoverDiagnosticsSummarySchema}from"#discover/diagnostics.js";import{compiledRemoteAgentNodeSchema}from"#compiler/remote-agent-node.js";import{jsonObjectSchema}from"#shared/json-schemas.js";const COMPILED_AGENT_MANIFEST_KIND=`ash-agent-compiled-manifest`,ROOT_COMPILED_AGENT_NODE_ID=`__root__`,COMPILED_AGENT_MANIFEST_VERSION=
|
|
1
|
+
import{z}from"#compiled/zod/index.js";import{discoverDiagnosticsSummarySchema}from"#discover/diagnostics.js";import{compiledRemoteAgentNodeSchema}from"#compiler/remote-agent-node.js";import{jsonObjectSchema}from"#shared/json-schemas.js";const COMPILED_AGENT_MANIFEST_KIND=`ash-agent-compiled-manifest`,ROOT_COMPILED_AGENT_NODE_ID=`__root__`,COMPILED_AGENT_MANIFEST_VERSION=25,moduleSourceRefSchema=z.object({exportName:z.string().optional(),sourceKind:z.literal(`module`),logicalPath:z.string(),sourceId:z.string()}).strict(),channelMethodSchema=z.union([z.literal(`GET`),z.literal(`POST`),z.literal(`PUT`),z.literal(`PATCH`),z.literal(`DELETE`)]),compiledChannelDefinitionSchema=z.object({kind:z.literal(`channel`),name:z.string(),logicalPath:z.string(),method:channelMethodSchema,urlPath:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`),exportName:z.string().optional(),adapterKind:z.string().optional()}).strict(),disabledCompiledChannelEntrySchema=z.object({kind:z.literal(`disabled`),name:z.string(),logicalPath:z.string()}).strict(),compiledChannelEntrySchema=z.union([compiledChannelDefinitionSchema,disabledCompiledChannelEntrySchema]),compiledRuntimeModelReferenceSchema=z.object({contextWindowTokens:z.number().int().positive().optional(),id:z.string(),source:moduleSourceRefSchema.optional(),providerOptions:z.record(z.string(),jsonObjectSchema).optional()}).strict(),compiledAgentBuildDefinitionSchema=z.object({externalDependencies:z.array(z.string()).optional()}).strict(),compiledAgentCompactionDefinitionSchema=z.object({model:compiledRuntimeModelReferenceSchema.optional(),thresholdPercent:z.number().finite().min(0).max(1).optional()}).strict(),compiledAgentConfigSchema=z.object({build:compiledAgentBuildDefinitionSchema.optional(),compaction:compiledAgentCompactionDefinitionSchema.optional(),description:z.string().optional(),experimental:z.object({codeMode:z.boolean().optional()}).strict().optional(),model:compiledRuntimeModelReferenceSchema,name:z.string(),source:moduleSourceRefSchema.optional()}).strict(),compiledInstructionsSchema=z.object({name:z.string(),logicalPath:z.string(),markdown:z.string(),sourceId:z.string(),sourceKind:z.union([z.literal(`markdown`),z.literal(`module`)])}).strict(),compiledSkillBaseFields={name:z.string(),description:z.string(),license:z.string().optional(),markdown:z.string(),metadata:z.record(z.string(),z.string()).optional(),sourceId:z.string(),logicalPath:z.string()},compiledSkillSourceSchema=z.discriminatedUnion(`sourceKind`,[z.object({...compiledSkillBaseFields,sourceKind:z.literal(`markdown`)}).strict(),z.object({...compiledSkillBaseFields,sourceKind:z.literal(`module`),exportName:z.string().optional()}).strict(),z.object({...compiledSkillBaseFields,sourceKind:z.literal(`skill-package`),skillId:z.string(),skillFilePath:z.string(),rootPath:z.string(),assetsPath:z.string().optional(),referencesPath:z.string().optional(),scriptsPath:z.string().optional()}).strict()]),compiledScheduleDefinitionSchema=z.object({cron:z.string(),hasRun:z.boolean(),name:z.string(),logicalPath:z.string(),markdown:z.string().optional(),sourceId:z.string(),sourceKind:z.union([z.literal(`markdown`),z.literal(`module`)])}).strict(),compiledSandboxDefinitionSchema=z.object({description:z.string().optional(),exportName:z.string().optional(),logicalPath:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`)}).strict(),compiledSandboxWorkspaceSchema=z.object({logicalPath:z.string(),rootEntries:z.array(z.string()).readonly(),sourceId:z.string(),sourcePath:z.string()}).strict(),compiledWorkspaceResourceRootSchema=z.object({logicalPath:z.string(),rootEntries:z.array(z.string()).readonly()}).strict(),compiledConnectionDefinitionSchema=z.object({connectionName:z.string(),description:z.string(),exportName:z.string().optional(),logicalPath:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`),url:z.string(),vercelConnect:z.object({connector:z.string()}).strict().optional()}).strict(),compiledToolDefinitionSchema=z.object({description:z.string(),exportName:z.string().optional(),inputSchema:jsonObjectSchema.nullable(),logicalPath:z.string(),name:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`)}).strict(),compiledDynamicToolDefinitionSchema=z.object({eventNames:z.array(z.string()).readonly(),exportName:z.string().optional(),identity:z.enum([`single`,`multi`]),logicalPath:z.string(),slug:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`)}).strict(),compiledHookDefinitionSchema=z.object({exportName:z.string().optional(),logicalPath:z.string(),slug:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`)}).strict(),compiledAgentNodeManifestSchema=z.object({agentRoot:z.string(),appRoot:z.string(),channels:z.array(compiledChannelEntrySchema),config:compiledAgentConfigSchema,connections:z.array(compiledConnectionDefinitionSchema),diagnosticsSummary:discoverDiagnosticsSummarySchema,disabledFrameworkTools:z.array(z.string()).readonly(),dynamicTools:z.array(compiledDynamicToolDefinitionSchema).default([]),hooks:z.array(compiledHookDefinitionSchema),sandbox:compiledSandboxDefinitionSchema.nullable(),sandboxWorkspaces:z.array(compiledSandboxWorkspaceSchema),schedules:z.array(compiledScheduleDefinitionSchema),remoteAgents:z.array(compiledRemoteAgentNodeSchema),skills:z.array(compiledSkillSourceSchema).readonly(),instructions:compiledInstructionsSchema.optional(),tools:z.array(compiledToolDefinitionSchema),workspaceResourceRoot:compiledWorkspaceResourceRootSchema}).strict(),compiledSubagentNodeSchema=z.object({agent:compiledAgentNodeManifestSchema,description:z.string(),entryPath:z.string(),logicalPath:z.string(),name:z.string(),nodeId:z.string(),rootPath:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`),exportName:z.string().optional()}).strict(),compiledSubagentEdgeSchema=z.object({childNodeId:z.string(),parentNodeId:z.string()}).strict(),compiledAgentManifestSchema=z.object({agentRoot:z.string(),appRoot:z.string(),channels:z.array(compiledChannelEntrySchema),config:compiledAgentConfigSchema,connections:z.array(compiledConnectionDefinitionSchema),diagnosticsSummary:discoverDiagnosticsSummarySchema,disabledFrameworkTools:z.array(z.string()).readonly(),dynamicTools:z.array(compiledDynamicToolDefinitionSchema).default([]),hooks:z.array(compiledHookDefinitionSchema),kind:z.literal(COMPILED_AGENT_MANIFEST_KIND),remoteAgents:z.array(compiledRemoteAgentNodeSchema),sandbox:compiledSandboxDefinitionSchema.nullable(),sandboxWorkspaces:z.array(compiledSandboxWorkspaceSchema),schedules:z.array(compiledScheduleDefinitionSchema),skills:z.array(compiledSkillSourceSchema).readonly(),subagentEdges:z.array(compiledSubagentEdgeSchema),subagents:z.array(compiledSubagentNodeSchema),instructions:compiledInstructionsSchema.optional(),tools:z.array(compiledToolDefinitionSchema),version:z.literal(25),workspaceResourceRoot:compiledWorkspaceResourceRootSchema}).strict();function createCompiledAgentNodeManifest(e){let t={agentRoot:e.agentRoot,appRoot:e.appRoot,channels:[...e.channels??[]],connections:[...e.connections??[]],config:{build:e.config.build===void 0?void 0:{externalDependencies:e.config.build.externalDependencies===void 0?void 0:[...e.config.build.externalDependencies]},compaction:{model:e.config.compaction?.model===void 0?void 0:cloneCompiledRuntimeModelReference(e.config.compaction.model),thresholdPercent:e.config.compaction?.thresholdPercent},description:e.config.description,experimental:e.config.experimental===void 0?void 0:{codeMode:e.config.experimental.codeMode},model:cloneCompiledRuntimeModelReference(e.config.model),name:e.config.name,source:e.config.source===void 0?void 0:{...e.config.source}},diagnosticsSummary:e.diagnosticsSummary??{errors:0,warnings:0},disabledFrameworkTools:[...e.disabledFrameworkTools??[]],dynamicTools:[...e.dynamicTools??[]],hooks:[...e.hooks??[]],remoteAgents:[...e.remoteAgents??[]],sandbox:e.sandbox??null,sandboxWorkspaces:[...e.sandboxWorkspaces??[]],schedules:[...e.schedules??[]],skills:[...e.skills??[]],tools:[...e.tools??[]],workspaceResourceRoot:e.workspaceResourceRoot??{logicalPath:``,rootEntries:deriveResourceRootEntries({sandboxWorkspaces:e.sandboxWorkspaces,skills:e.skills})}};return e.instructions!==void 0&&(t.instructions=e.instructions),t}function deriveResourceRootEntries(e){let t=new Set;(e.skills??[]).length>0&&t.add(`skills/`);for(let n of e.sandboxWorkspaces??[])for(let e of n.rootEntries)t.add(e);return[...t].sort((e,t)=>e.localeCompare(t))}function createCompiledSubagentNodeId(e,t){return e===`__root__`?t:`${e}::${t}`}function createCompiledAgentManifest(e){return{...createCompiledAgentNodeManifest(e),kind:COMPILED_AGENT_MANIFEST_KIND,subagentEdges:[...e.subagentEdges??[]],subagents:[...e.subagents??[]],version:25}}function cloneCompiledRuntimeModelReference(e){return e.contextWindowTokens===void 0&&e.source===void 0&&e.providerOptions===void 0?{id:e.id}:e.source===void 0?e.providerOptions===void 0?{contextWindowTokens:e.contextWindowTokens,id:e.id}:{contextWindowTokens:e.contextWindowTokens,id:e.id,providerOptions:{...e.providerOptions}}:e.contextWindowTokens===void 0&&e.providerOptions===void 0?{id:e.id,source:{...e.source}}:{contextWindowTokens:e.contextWindowTokens,id:e.id,providerOptions:e.providerOptions===void 0?void 0:{...e.providerOptions},source:{...e.source}}}export{COMPILED_AGENT_MANIFEST_KIND,COMPILED_AGENT_MANIFEST_VERSION,ROOT_COMPILED_AGENT_NODE_ID,compiledAgentManifestSchema,createCompiledAgentManifest,createCompiledAgentNodeManifest,createCompiledSubagentNodeId,deriveResourceRootEntries};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import{z}from"#compiled/zod/index.js";import{ROOT_COMPILED_AGENT_NODE_ID}from"#compiler/manifest.js";import{normalizeEsmImportSpecifier}from"#internal/application/import-specifier.js";const compiledModuleNodeScopeSchema=z.object({modules:z.record(z.string(),z.object({}).passthrough())}).strict(),compiledModuleMapSchema=z.object({nodes:z.record(z.string(),compiledModuleNodeScopeSchema)}).strict();function createCompiledModuleMapSource(e){let n=dirnameFilesystemPath(e.moduleMapPath),r=e.importSpecifierStyle??`relative`,i=0,a=[collectModuleNodeScope({agentRoot:e.manifest.agentRoot,importSpecifierStyle:r,manifest:e.manifest,moduleMapDirectory:n,nextBindingName(){return`module_${i++}`},nodeId:ROOT_COMPILED_AGENT_NODE_ID}),...[...e.manifest.subagents].sort((e,t)=>e.nodeId.localeCompare(t.nodeId)).map(e=>collectModuleNodeScope({agentRoot:e.agent.agentRoot,importSpecifierStyle:r,manifest:e.agent,moduleMapDirectory:n,nextBindingName(){return`module_${i++}`},nodeId:e.nodeId}))],o=a.flatMap(e=>e.modules.map(e=>`import * as ${e.bindingName} from ${JSON.stringify(e.importSpecifier)};`));return[`// Generated by Ash. Do not edit by hand.`,``,...o,...o.length>0?[``]:[],`export const moduleMap = ${renderModuleMap(a)};`,``,`export default moduleMap;`,``].join(`
|
|
2
|
-
`)}function collectModuleNodeScope(e){return{modules:collectModuleRefsForManifest(e.manifest).sort((e,t)=>e.sourceId.localeCompare(t.sourceId)).map(t=>({bindingName:e.nextBindingName(),importSpecifier:createImportSpecifier({fromDirectory:e.moduleMapDirectory,importSpecifierStyle:e.importSpecifierStyle,targetPath:joinFilesystemPath(e.agentRoot,t.logicalPath)}),sourceId:t.sourceId})),nodeId:e.nodeId}}function collectModuleRefsForManifest(e){let t=new Map;e.config.source!==void 0&&t.set(e.config.source.sourceId,e.config.source),e.config.model.source!==void 0&&t.set(e.config.model.source.sourceId,e.config.model.source);for(let n of e.channels)n.kind!==`disabled`&&t.set(n.sourceId,{exportName:n.exportName,sourceKind:`module`,logicalPath:n.logicalPath,sourceId:n.sourceId});for(let n of e.connections)t.set(n.sourceId,{exportName:n.exportName,sourceKind:`module`,logicalPath:n.logicalPath,sourceId:n.sourceId});for(let n of e.tools)t.set(n.sourceId,{exportName:n.exportName,sourceKind:`module`,logicalPath:n.logicalPath,sourceId:n.sourceId});for(let n of e.remoteAgents)t.set(n.sourceId,{exportName:n.exportName,sourceKind:`module`,logicalPath:n.logicalPath,sourceId:n.sourceId});for(let n of e.hooks)t.set(n.sourceId,{exportName:n.exportName,sourceKind:`module`,logicalPath:n.logicalPath,sourceId:n.sourceId});for(let n of e.schedules)n.sourceKind!==`module`||!n.hasRun||t.set(n.sourceId,{sourceKind:`module`,logicalPath:n.logicalPath,sourceId:n.sourceId});return e.sandbox!==null&&t.set(e.sandbox.sourceId,{exportName:e.sandbox.exportName,sourceKind:`module`,logicalPath:e.sandbox.logicalPath,sourceId:e.sandbox.sourceId}),[...t.values()]}function createImportSpecifier(e){if(e.importSpecifierStyle===`absolute`)return normalizeEsmImportSpecifier(normalizeFilesystemPath(e.targetPath));let t=relativeFilesystemPath(e.fromDirectory,e.targetPath);return t.startsWith(`.`)?t:`./${t}`}function renderModuleMap(e){return renderFrozenObject([{key:`nodes`,value:renderFrozenObject(e.map(e=>({key:e.nodeId,value:renderFrozenObject([{key:`modules`,value:renderFrozenObject(e.modules.map(e=>({key:e.sourceId,value:e.bindingName})))}],3)})))}],0)}function renderFrozenObject(e,t=1){if(e.length===0)return`Object.freeze({})`;let n=` `.repeat(t),r=` `.repeat(t+1);return[`Object.freeze({`,e.map(e=>`${r}${JSON.stringify(e.key)}: ${e.value.replaceAll(`
|
|
2
|
+
`)}function collectModuleNodeScope(e){return{modules:collectModuleRefsForManifest(e.manifest).sort((e,t)=>e.sourceId.localeCompare(t.sourceId)).map(t=>({bindingName:e.nextBindingName(),importSpecifier:createImportSpecifier({fromDirectory:e.moduleMapDirectory,importSpecifierStyle:e.importSpecifierStyle,targetPath:joinFilesystemPath(e.agentRoot,t.logicalPath)}),sourceId:t.sourceId})),nodeId:e.nodeId}}function collectModuleRefsForManifest(e){let t=new Map;e.config.source!==void 0&&t.set(e.config.source.sourceId,e.config.source),e.config.model.source!==void 0&&t.set(e.config.model.source.sourceId,e.config.model.source);for(let n of e.channels)n.kind!==`disabled`&&t.set(n.sourceId,{exportName:n.exportName,sourceKind:`module`,logicalPath:n.logicalPath,sourceId:n.sourceId});for(let n of e.connections)t.set(n.sourceId,{exportName:n.exportName,sourceKind:`module`,logicalPath:n.logicalPath,sourceId:n.sourceId});for(let n of e.tools)t.set(n.sourceId,{exportName:n.exportName,sourceKind:`module`,logicalPath:n.logicalPath,sourceId:n.sourceId});for(let n of e.dynamicTools)t.set(n.sourceId,{exportName:n.exportName,sourceKind:`module`,logicalPath:n.logicalPath,sourceId:n.sourceId});for(let n of e.remoteAgents)t.set(n.sourceId,{exportName:n.exportName,sourceKind:`module`,logicalPath:n.logicalPath,sourceId:n.sourceId});for(let n of e.hooks)t.set(n.sourceId,{exportName:n.exportName,sourceKind:`module`,logicalPath:n.logicalPath,sourceId:n.sourceId});for(let n of e.schedules)n.sourceKind!==`module`||!n.hasRun||t.set(n.sourceId,{sourceKind:`module`,logicalPath:n.logicalPath,sourceId:n.sourceId});return e.sandbox!==null&&t.set(e.sandbox.sourceId,{exportName:e.sandbox.exportName,sourceKind:`module`,logicalPath:e.sandbox.logicalPath,sourceId:e.sandbox.sourceId}),[...t.values()]}function createImportSpecifier(e){if(e.importSpecifierStyle===`absolute`)return normalizeEsmImportSpecifier(normalizeFilesystemPath(e.targetPath));let t=relativeFilesystemPath(e.fromDirectory,e.targetPath);return t.startsWith(`.`)?t:`./${t}`}function renderModuleMap(e){return renderFrozenObject([{key:`nodes`,value:renderFrozenObject(e.map(e=>({key:e.nodeId,value:renderFrozenObject([{key:`modules`,value:renderFrozenObject(e.modules.map(e=>({key:e.sourceId,value:e.bindingName})))}],3)})))}],0)}function renderFrozenObject(e,t=1){if(e.length===0)return`Object.freeze({})`;let n=` `.repeat(t),r=` `.repeat(t+1);return[`Object.freeze({`,e.map(e=>`${r}${JSON.stringify(e.key)}: ${e.value.replaceAll(`
|
|
3
3
|
`,`\n${r}`)}`).join(`,
|
|
4
4
|
`),`${n}})`].join(`
|
|
5
5
|
`)}function dirnameFilesystemPath(e){let t=splitFilesystemPath(e);return t.segments.length===0?t.root.length===0?`.`:t.root:createFilesystemPath(t.root,t.segments.slice(0,-1))}function joinFilesystemPath(e,t){let n=splitFilesystemPath(e),r=splitFilesystemPath(t);return r.root.length>0?createFilesystemPath(r.root,r.segments):createFilesystemPath(n.root,[...n.segments,...r.segments])}function relativeFilesystemPath(e,t){let n=splitFilesystemPath(e),r=splitFilesystemPath(t);if(n.root!==r.root)return normalizeFilesystemPath(t);let i=0;for(;i<n.segments.length&&i<r.segments.length&&n.segments[i]===r.segments[i];)i+=1;let a=[...Array.from({length:n.segments.length-i},()=>`..`),...r.segments.slice(i)];return a.length===0?`.`:a.join(`/`)}function normalizeFilesystemPath(e){let t=splitFilesystemPath(e);return createFilesystemPath(t.root,t.segments)}function splitFilesystemPath(e){let t=e.replaceAll(`\\`,`/`),n=``,r=t,i=t.match(/^[A-Za-z]:/);i===null?t.startsWith(`/`)&&(n=`/`,r=t.slice(1)):(n=i[0],r=t.slice(n.length),r.startsWith(`/`)&&(n=`${n}/`,r=r.slice(1)));let a=[];for(let e of r.split(`/`))if(!(e.length===0||e===`.`)){if(e===`..`){if(a.length>0&&a[a.length-1]!==`..`){a.pop();continue}n.length===0&&a.push(e);continue}a.push(e)}return{root:n,segments:a}}function createFilesystemPath(e,t){return e===`/`?t.length===0?`/`:`/${t.join(`/`)}`:e.endsWith(`/`)?t.length===0?e:`${e}${t.join(`/`)}`:e.length>0?t.length===0?e:`${e}/${t.join(`/`)}`:t.length===0?`.`:t.join(`/`)}export{collectModuleRefsForManifest,compiledModuleMapSchema,createCompiledModuleMapSource};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{toErrorMessage}from"#shared/errors.js";import{normalizeAgentDefinition}from"#internal/authored-definition/core.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{parseJsonObject}from"#shared/json.js";import{loadModuleBackedDefinition}from"#compiler/normalize-helpers.js";var MissingAgentConfigModuleError=class extends Error{agentId;constructor(e){super(`Agent "${e}" does not have an agent.ts config module. The "model" field is required.`),this.name=`MissingAgentConfigModuleError`,this.agentId=e}};async function compileAgentConfig(e,n){if(e.configModule===void 0)throw new MissingAgentConfigModuleError(e.agentId);let r=normalizeAgentDefinition(await loadModuleBackedDefinition({agentRoot:e.agentRoot,kind:`agent config`,source:e.configModule}),`Expected the agent config export "${e.configModule.exportName??`default`}" from "${e.configModule.logicalPath}" to match the public Ash shape.`),a=await normalizeAuthoredModelReference({modelCatalog:n.modelCatalog,purpose:`the primary compaction trigger model`,contextWindowTokens:r.modelContextWindowTokens,providerOptions:r.modelOptions?.providerOptions,source:e.configModule,value:r.model}),o={},s={compaction:o,model:a,name:e.agentId};return r.description!==void 0&&(s.description=r.description),r.build!==void 0&&(s.build={externalDependencies:r.build.externalDependencies===void 0?void 0:[...r.build.externalDependencies]}),s.source={exportName:e.configModule.exportName,sourceKind:`module`,logicalPath:e.configModule.logicalPath,sourceId:e.configModule.sourceId},r.compaction?.model!==void 0&&(o.model=await normalizeAuthoredModelReference({modelCatalog:n.modelCatalog,purpose:`the compaction summary model`,contextWindowTokens:r.compaction.modelContextWindowTokens,providerOptions:r.modelOptions?.providerOptions,source:e.configModule,value:r.compaction.model})),r.compaction?.thresholdPercent!==void 0&&(o.thresholdPercent=r.compaction.thresholdPercent),s}async function normalizeAuthoredModelReference(e){if(typeof e.value==`string`)return await withCompiledRuntimeModelLimits({id:formatLanguageModelGatewayId(e.value),providerOptions:parseProviderOptionsRecord(e.providerOptions)},e);let t=e.source;if(t===void 0)throw Error(`Expected ${e.purpose} to provide a valid AI SDK language model reference.`);let r=e.value,i=r.specificationVersion;if(i!==`v2`&&i!==`v3`&&i!==`v4`||typeof r.provider!=`string`||typeof r.modelId!=`string`||typeof r.doGenerate!=`function`||typeof r.doStream!=`function`)throw Error(`Expected the authored agent config export "${t.exportName??`default`}" from "${t.logicalPath}" to provide a valid AI SDK language model.`);let a={id:formatLanguageModelGatewayId(r),source:{exportName:t.exportName,sourceKind:`module`,logicalPath:t.logicalPath,sourceId:t.sourceId},providerOptions:parseProviderOptionsRecord(e.providerOptions)};if(e.contextWindowTokens===void 0){let t=await e.modelCatalog.getByProviderModelId(r.provider,r.modelId);if(t)return{...a,id:t.slug,contextWindowTokens:t.limits.contextWindowTokens}}return await withCompiledRuntimeModelLimits(a,e)}async function withCompiledRuntimeModelLimits(t,n){if(n.contextWindowTokens!==void 0)return{...t,contextWindowTokens:n.contextWindowTokens};let r;try{r=await n.modelCatalog.getModelLimits(t.id)}catch(r){throw Error(`Failed to load AI Gateway model metadata for ${n.purpose} "${t.id}". ${toErrorMessage(r)}`)}if(r===null)throw Error(`Cannot compile agent compaction because ${n.purpose} "${t.id}" does not have known AI Gateway context window metadata.`);return{...t,contextWindowTokens:r.contextWindowTokens}}function parseProviderOptionsRecord(e){if(e===void 0)return;let t={};for(let[n,i]of Object.entries(e))t[n]=parseJsonObject(i);return t}export{MissingAgentConfigModuleError,compileAgentConfig};
|
|
1
|
+
import{toErrorMessage}from"#shared/errors.js";import{normalizeAgentDefinition}from"#internal/authored-definition/core.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{parseJsonObject}from"#shared/json.js";import{loadModuleBackedDefinition}from"#compiler/normalize-helpers.js";var MissingAgentConfigModuleError=class extends Error{agentId;constructor(e){super(`Agent "${e}" does not have an agent.ts config module. The "model" field is required.`),this.name=`MissingAgentConfigModuleError`,this.agentId=e}};async function compileAgentConfig(e,n){if(e.configModule===void 0)throw new MissingAgentConfigModuleError(e.agentId);let r=normalizeAgentDefinition(await loadModuleBackedDefinition({agentRoot:e.agentRoot,kind:`agent config`,source:e.configModule}),`Expected the agent config export "${e.configModule.exportName??`default`}" from "${e.configModule.logicalPath}" to match the public Ash shape.`),a=await normalizeAuthoredModelReference({modelCatalog:n.modelCatalog,purpose:`the primary compaction trigger model`,contextWindowTokens:r.modelContextWindowTokens,providerOptions:r.modelOptions?.providerOptions,source:e.configModule,value:r.model}),o={},s={compaction:o,model:a,name:e.agentId};return r.description!==void 0&&(s.description=r.description),r.experimental?.codeMode!==void 0&&(s.experimental={codeMode:r.experimental.codeMode}),r.build!==void 0&&(s.build={externalDependencies:r.build.externalDependencies===void 0?void 0:[...r.build.externalDependencies]}),s.source={exportName:e.configModule.exportName,sourceKind:`module`,logicalPath:e.configModule.logicalPath,sourceId:e.configModule.sourceId},r.compaction?.model!==void 0&&(o.model=await normalizeAuthoredModelReference({modelCatalog:n.modelCatalog,purpose:`the compaction summary model`,contextWindowTokens:r.compaction.modelContextWindowTokens,providerOptions:r.modelOptions?.providerOptions,source:e.configModule,value:r.compaction.model})),r.compaction?.thresholdPercent!==void 0&&(o.thresholdPercent=r.compaction.thresholdPercent),s}async function normalizeAuthoredModelReference(e){if(typeof e.value==`string`)return await withCompiledRuntimeModelLimits({id:formatLanguageModelGatewayId(e.value),providerOptions:parseProviderOptionsRecord(e.providerOptions)},e);let t=e.source;if(t===void 0)throw Error(`Expected ${e.purpose} to provide a valid AI SDK language model reference.`);let r=e.value,i=r.specificationVersion;if(i!==`v2`&&i!==`v3`&&i!==`v4`||typeof r.provider!=`string`||typeof r.modelId!=`string`||typeof r.doGenerate!=`function`||typeof r.doStream!=`function`)throw Error(`Expected the authored agent config export "${t.exportName??`default`}" from "${t.logicalPath}" to provide a valid AI SDK language model.`);let a={id:formatLanguageModelGatewayId(r),source:{exportName:t.exportName,sourceKind:`module`,logicalPath:t.logicalPath,sourceId:t.sourceId},providerOptions:parseProviderOptionsRecord(e.providerOptions)};if(e.contextWindowTokens===void 0){let t=await e.modelCatalog.getByProviderModelId(r.provider,r.modelId);if(t)return{...a,id:t.slug,contextWindowTokens:t.limits.contextWindowTokens}}return await withCompiledRuntimeModelLimits(a,e)}async function withCompiledRuntimeModelLimits(t,n){if(n.contextWindowTokens!==void 0)return{...t,contextWindowTokens:n.contextWindowTokens};let r;try{r=await n.modelCatalog.getModelLimits(t.id)}catch(r){throw Error(`Failed to load AI Gateway model metadata for ${n.purpose} "${t.id}". ${toErrorMessage(r)}`)}if(r===null)throw Error(`Cannot compile agent compaction because ${n.purpose} "${t.id}" does not have known AI Gateway context window metadata.`);return{...t,contextWindowTokens:r.contextWindowTokens}}function parseProviderOptionsRecord(e){if(e===void 0)return;let t={};for(let[n,i]of Object.entries(e))t[n]=parseJsonObject(i);return t}export{MissingAgentConfigModuleError,compileAgentConfig};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{compileChannelDefinition}from"#compiler/normalize-channel.js";import{ROOT_COMPILED_AGENT_NODE_ID,createCompiledAgentManifest,createCompiledAgentNodeManifest}from"#compiler/manifest.js";import{createCompiledRuntimeModelCatalogLoader}from"#compiler/model-catalog.js";import{compileAgentConfig}from"#compiler/normalize-agent-config.js";import{compileConnectionDefinition}from"#compiler/normalize-connection.js";import{compileHookEntry}from"#compiler/normalize-hook.js";import{compileSandboxDefinition}from"#compiler/normalize-sandbox.js";import{compileInstructions}from"#compiler/normalize-instructions.js";import{compileScheduleDefinition}from"#compiler/normalize-schedule.js";import{compileSkillSource}from"#compiler/normalize-skill.js";import{compileSubagentGraph}from"#compiler/normalize-subagent.js";import{compileToolEntry}from"#compiler/normalize-tool.js";async function compileAgentManifest(e){let r={modelCatalog:createCompiledRuntimeModelCatalogLoader(e.appRoot)},[a,o]=await Promise.all([compileAgentNodeManifest(e,r),compileSubagentGraph({appRoot:e.appRoot,compileAgentNodeManifest,context:r,parentNodeId:ROOT_COMPILED_AGENT_NODE_ID,subagents:e.subagents})]);return createCompiledAgentManifest({...a,remoteAgents:o.remoteAgents,subagentEdges:o.edges,subagents:o.nodes})}async function compileAgentNodeManifest(t,n){let i=await Promise.all(t.tools.map(e=>compileToolEntry(t.agentRoot,e))),s=[],c=[];for(let e of i)e.kind===`tool`?s.push(e.definition):c.push(e.name);let
|
|
1
|
+
import{compileChannelDefinition}from"#compiler/normalize-channel.js";import{ROOT_COMPILED_AGENT_NODE_ID,createCompiledAgentManifest,createCompiledAgentNodeManifest}from"#compiler/manifest.js";import{createCompiledRuntimeModelCatalogLoader}from"#compiler/model-catalog.js";import{compileAgentConfig}from"#compiler/normalize-agent-config.js";import{compileConnectionDefinition}from"#compiler/normalize-connection.js";import{compileHookEntry}from"#compiler/normalize-hook.js";import{compileSandboxDefinition}from"#compiler/normalize-sandbox.js";import{compileInstructions}from"#compiler/normalize-instructions.js";import{compileScheduleDefinition}from"#compiler/normalize-schedule.js";import{compileSkillSource}from"#compiler/normalize-skill.js";import{compileSubagentGraph}from"#compiler/normalize-subagent.js";import{compileToolEntry}from"#compiler/normalize-tool.js";async function compileAgentManifest(e){let r={modelCatalog:createCompiledRuntimeModelCatalogLoader(e.appRoot)},[a,o]=await Promise.all([compileAgentNodeManifest(e,r),compileSubagentGraph({appRoot:e.appRoot,compileAgentNodeManifest,context:r,parentNodeId:ROOT_COMPILED_AGENT_NODE_ID,subagents:e.subagents})]);return createCompiledAgentManifest({...a,remoteAgents:o.remoteAgents,subagentEdges:o.edges,subagents:o.nodes})}async function compileAgentNodeManifest(t,n){let i=await Promise.all(t.tools.map(e=>compileToolEntry(t.agentRoot,e))),s=[],c=[],l=[];for(let e of i)e.kind===`tool`?s.push(e.definition):e.kind===`dynamic-tool`?c.push(e.definition):l.push(e.name);let u=(await Promise.all(t.channels.map(n=>compileChannelDefinition(t.agentRoot,n)))).flat();return createCompiledAgentNodeManifest({agentRoot:t.agentRoot,appRoot:t.appRoot,channels:u,config:await compileAgentConfig(t,n),connections:await Promise.all(t.connections.map(e=>compileConnectionDefinition(t.agentRoot,e))),diagnosticsSummary:t.diagnosticsSummary,disabledFrameworkTools:l,dynamicTools:c,hooks:t.hooks.map(e=>compileHookEntry(e)),sandbox:t.sandbox===null?null:await compileSandboxDefinition(t.agentRoot,t.sandbox),sandboxWorkspaces:t.sandboxWorkspaces.map(e=>({logicalPath:e.logicalPath,rootEntries:[...e.rootEntries],sourceId:e.sourceId,sourcePath:e.sourcePath})),schedules:await Promise.all(t.schedules.map(e=>compileScheduleDefinition(t.agentRoot,e))),skills:await Promise.all(t.skills.map(e=>compileSkillSource(t.agentRoot,e))),instructions:t.instructions===void 0?void 0:await compileInstructions(t.agentRoot,t.instructions),tools:s})}export{compileAgentManifest};
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { ModuleSourceRef } from "#shared/source-ref.js";
|
|
2
|
-
import type { CompiledToolDefinition } from "#compiler/manifest.js";
|
|
2
|
+
import type { CompiledToolDefinition, CompiledDynamicToolDefinition } from "#compiler/manifest.js";
|
|
3
3
|
/**
|
|
4
4
|
* Compiled tool entry produced from one authored `tools/*.ts` file.
|
|
5
5
|
*
|
|
6
|
-
* Either a real tool definition
|
|
7
|
-
* named framework default during graph resolution
|
|
6
|
+
* Either a real tool definition, a `disabled` marker that removes the
|
|
7
|
+
* named framework default during graph resolution, or a dynamic tool
|
|
8
|
+
* resolver that produces tools at runtime.
|
|
8
9
|
*/
|
|
9
10
|
export type CompiledToolEntry = {
|
|
10
11
|
readonly kind: "tool";
|
|
@@ -12,6 +13,9 @@ export type CompiledToolEntry = {
|
|
|
12
13
|
} | {
|
|
13
14
|
readonly kind: "disabled";
|
|
14
15
|
readonly name: string;
|
|
16
|
+
} | {
|
|
17
|
+
readonly kind: "dynamic-tool";
|
|
18
|
+
readonly definition: CompiledDynamicToolDefinition;
|
|
15
19
|
};
|
|
16
20
|
/**
|
|
17
21
|
* Compiles one authored tool module into the normalized tool entry
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{stripLogicalPathExtension}from"#discover/filesystem.js";import{loadModuleBackedDefinition}from"#compiler/normalize-helpers.js";import{normalizeToolDefinition}from"#internal/authored-definition/schema-backed.js";async function compileToolEntry(e,t){let n=normalizeToolDefinition(await loadModuleBackedDefinition({agentRoot:e,kind:`tool`,source:t}),`Expected the tool export "${t.exportName??`default`}" from "${t.logicalPath}" to match the public Ash shape.`),r=stripLogicalPathExtension(t.logicalPath).replace(/^tools\//,``).replaceAll(`/`,`-`);return n.kind===`disabled`?{kind:`disabled`,name:r}:{kind:`tool`,definition:{description:n.definition.description,exportName:t.exportName,inputSchema:n.definition.inputSchema??null,logicalPath:t.logicalPath,name:r,sourceId:t.sourceId,sourceKind:`module`}}}export{compileToolEntry};
|
|
1
|
+
import{stripLogicalPathExtension}from"#discover/filesystem.js";import{loadModuleBackedDefinition}from"#compiler/normalize-helpers.js";import{normalizeToolDefinition}from"#internal/authored-definition/schema-backed.js";async function compileToolEntry(e,t){let n=normalizeToolDefinition(await loadModuleBackedDefinition({agentRoot:e,kind:`tool`,source:t}),`Expected the tool export "${t.exportName??`default`}" from "${t.logicalPath}" to match the public Ash shape.`),r=stripLogicalPathExtension(t.logicalPath).replace(/^tools\//,``).replaceAll(`/`,`-`);return n.kind===`disabled`?{kind:`disabled`,name:r}:n.kind===`dynamic-tool`?{kind:`dynamic-tool`,definition:{eventNames:[...n.eventNames],exportName:t.exportName,identity:n.identity,logicalPath:t.logicalPath,slug:r,sourceId:t.sourceId,sourceKind:`module`}}:{kind:`tool`,definition:{description:n.definition.description,exportName:t.exportName,inputSchema:n.definition.inputSchema??null,logicalPath:t.logicalPath,name:r,sourceId:t.sourceId,sourceKind:`module`}}}export{compileToolEntry};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { HarnessToolDefinition } from "#harness/execute-tool.js";
|
|
2
|
+
import type { ResolvedDynamicToolResolver } from "#runtime/types.js";
|
|
3
|
+
import type { AlsContext } from "#context/container.js";
|
|
4
|
+
import type { DurableDynamicToolMetadata } from "#context/keys.js";
|
|
5
|
+
type ReadableContext = Pick<AlsContext, "get">;
|
|
6
|
+
interface WritableContext extends ReadableContext {
|
|
7
|
+
set<T>(key: import("#context/key.js").ContextKey<T>, value: T): T;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Calls session/turn-scoped resolvers and produces both live tool
|
|
11
|
+
* definitions (for the current step) and durable metadata (for
|
|
12
|
+
* replay on subsequent steps).
|
|
13
|
+
*
|
|
14
|
+
* Resolvers run concurrently via `Promise.allSettled` — each
|
|
15
|
+
* resolver's I/O (database calls, API fetches) overlaps with the
|
|
16
|
+
* others. A single resolver throwing does not block the rest.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveAndStoreDynamicSessionTools(ctx: ReadableContext & WritableContext, resolvers: readonly ResolvedDynamicToolResolver[], eventName?: string): Promise<{
|
|
19
|
+
readonly tools: readonly HarnessToolDefinition[];
|
|
20
|
+
readonly metadata: readonly DurableDynamicToolMetadata[];
|
|
21
|
+
}>;
|
|
22
|
+
/**
|
|
23
|
+
* Reconstructs tool definitions from durable metadata using
|
|
24
|
+
* registered step functions. No resolver re-invocation — the
|
|
25
|
+
* execute function is looked up by step ID and called with stored
|
|
26
|
+
* closure vars.
|
|
27
|
+
*/
|
|
28
|
+
export declare function replayDynamicSessionTools(metadata: readonly DurableDynamicToolMetadata[], _resolvers: readonly ResolvedDynamicToolResolver[]): readonly HarnessToolDefinition[];
|
|
29
|
+
/**
|
|
30
|
+
* Resolves step-scoped dynamic tools. Called before every model call.
|
|
31
|
+
* No caching — each step gets a fresh resolution. Resolvers run
|
|
32
|
+
* concurrently.
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveDynamicStepTools(ctx: ReadableContext, resolvers: readonly ResolvedDynamicToolResolver[]): Promise<readonly HarnessToolDefinition[]>;
|
|
35
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createLogger}from"#internal/logging.js";import{AuthKey,ContinuationTokenKey,DynamicToolResolverCacheKey,InitiatorAuthKey,SessionIdKey}from"#context/keys.js";import{toErrorMessage}from"#shared/errors.js";import{jsonSchema,zodSchema}from"ai";import{normalizeJsonSchemaDefinition}from"#internal/json-schema.js";import{buildCallbackContext}from"#context/build-callback-context.js";import{ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{getAdapterKind}from"#channel/adapter.js";const log=createLogger(`dynamic-tools`);function buildResolveContext(e,o,s){let c=e.get(SessionIdKey)??``,l=e.get(AuthKey)??null,u=e.get(InitiatorAuthKey)??null,d=e.get(ChannelKey),f=e.get(ContinuationTokenKey);return{session:{id:c,auth:{current:l,initiator:u}},channel:{kind:d===void 0?void 0:getAdapterKind(d),continuationToken:f},async __cache(t,n){let i=`${o}:${t}`,a=e.get(DynamicToolResolverCacheKey)??{};if(i in a)return a[i];let c=await n();if(s){let e={...a,[i]:c};s.set(DynamicToolResolverCacheKey,e)}return c}}}function toHarnessToolDefinition(e,t){return{description:t.description,execute:e=>t.execute(e,buildCallbackContext()),inputSchema:convertInputSchema(t.inputSchema),name:e}}function convertInputSchema(e){return typeof e==`object`&&e&&`~standard`in e?zodSchema(e):jsonSchema(e)}function qualifyDynamicToolNames(e,t,n){let r=Object.keys(n),i=[];if(r.length===0)return i;if(t===`single`)return i.push({name:e,entryKey:r[0],entry:n[r[0]]}),i;for(let t of r)i.push({name:`${e}__${t}`,entryKey:t,entry:n[t]});return i}async function resolveAndStoreDynamicSessionTools(e,t,n=`session.started`){let r=t.filter(e=>e.eventNames.includes(n));if(r.length===0)return{tools:[],metadata:[]};let i={type:n,data:{}},a=await Promise.allSettled(r.map(async t=>{let r=t.events[n];if(r===void 0)return null;let a=await r(i,buildResolveContext(e,t.slug,e));return a==null?null:{resolver:t,result:a}})),s=[],c=[];for(let e of a){if(e.status===`rejected`){log.error(`Dynamic tool resolver (${n}) threw — skipping.`,{error:toErrorMessage(e.reason)});continue}if(e.value===null)continue;let{resolver:t,result:r}=e.value,i=qualifyDynamicToolNames(t.slug,t.identity,r);for(let{name:e,entryKey:n,entry:r}of i){s.push(toHarnessToolDefinition(e,r));let i=`__executeStepFn`in r?r.__executeStepFn:void 0,a=`__closureVars`in r?r.__closureVars:void 0;c.push({name:e,description:r.description,inputSchema:normalizeJsonSchemaDefinition(r.inputSchema),resolverSlug:t.slug,entryKey:n,executeStepFnName:i?.stepId,closureVars:a===void 0?void 0:safeSerialize(a)})}}return{tools:s,metadata:c}}function replayDynamicSessionTools(e,t){let n=[];for(let t of e){if(!t.executeStepFnName||!t.closureVars){log.warn(`Dynamic tool "${t.name}" has no registered step function — skipping on this step. The bundler transform may not have processed this tool file.`);continue}let e=lookupStepFunction(t.executeStepFnName);if(!e){log.warn(`Dynamic tool "${t.name}" references step function "${t.executeStepFnName}" which is not registered — skipping on this step.`);continue}n.push({description:t.description,execute:n=>e(t.closureVars,n,buildCallbackContext()),inputSchema:jsonSchema(t.inputSchema),name:t.name})}return n}function lookupStepFunction(e){try{let t=globalThis[Symbol.for(`@workflow/core//registeredSteps`)];return t===void 0?null:t.get(e)||null}catch{return null}}function safeSerialize(e){try{return JSON.parse(JSON.stringify(e))}catch{return{}}}async function resolveDynamicStepTools(e,t){let n=t.filter(e=>e.eventNames.includes(`step.started`));if(n.length===0)return[];let r={type:`step.started`,data:{}},i=await Promise.allSettled(n.map(async t=>{let n=t.events[`step.started`];if(n===void 0)return null;let i=await n(r,buildResolveContext(e,t.slug));return i==null?null:{resolver:t,result:i}})),a=[];for(let e of i){if(e.status===`rejected`){log.error(`Dynamic tool resolver (step.started) threw — skipping.`,{error:toErrorMessage(e.reason)});continue}if(e.value===null)continue;let{resolver:t,result:n}=e.value,r=qualifyDynamicToolNames(t.slug,t.identity,n);for(let{name:e,entry:t}of r)a.push(toHarnessToolDefinition(e,t))}return a}export{replayDynamicSessionTools,resolveAndStoreDynamicSessionTools,resolveDynamicStepTools};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ContinuationTokenKey,SandboxKey,SessionPreparedKey}from"./keys.js";import{createLogger}from"#internal/logging.js";import{toErrorMessage}from"#shared/errors.js";import{normalizeSkillPackage,writeSkillPackageToSandbox}from"#shared/skill-package.js";import{getAdapterKind}from"#channel/adapter.js";import{emitRecoverableFailedTurn,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{formatAvailableSkillsSection}from"#execution/skills/instructions.js";import{
|
|
1
|
+
import{ContinuationTokenKey,DynamicSessionToolMetadataKey,DynamicSessionToolsKey,SandboxKey,SessionPreparedKey}from"./keys.js";import{createLogger}from"#internal/logging.js";import{toErrorMessage}from"#shared/errors.js";import{normalizeSkillPackage,writeSkillPackageToSandbox}from"#shared/skill-package.js";import{buildCallbackContext}from"#context/build-callback-context.js";import{BundleKey,ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{getAdapterKind}from"#channel/adapter.js";import{emitRecoverableFailedTurn,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{formatAvailableSkillsSection}from"#execution/skills/instructions.js";import{replayDynamicSessionTools,resolveAndStoreDynamicSessionTools}from"#context/dynamic-tool-lifecycle.js";const log=createLogger(`hooks.lifecycle`);async function dispatchHookLifecycle(e){let{ctx:r,registry:a,emit:s}=e,c=getHarnessEmissionState(e.session.state),l=buildHookContext(r),u=[],d=e.session;if(a.session.length>0&&r.get(SessionPreparedKey)!==!0){r.set(SessionPreparedKey,!0);let e=[];for(let t of a.session){let n=await t.handler(l);n?.modelContext!==void 0&&n.modelContext.length>0&&u.push(...n.modelContext),e.push(...normalizeLifecycleSkillResults(r,n))}d=await materializeLifecycleSkills(r,d,e)}let f=r.require(BundleKey).resolvedAgent.dynamicToolResolvers??[];if(f.some(e=>e.eventNames.includes(`session.started`))){let e=r.get(DynamicSessionToolMetadataKey);if(e===void 0){let{tools:e,metadata:i}=await resolveAndStoreDynamicSessionTools(r,f);i.length>0&&r.set(DynamicSessionToolMetadataKey,i),e.length>0&&r.setVirtualContext(DynamicSessionToolsKey,e)}else if(e.length>0){let t=replayDynamicSessionTools(e,f);r.setVirtualContext(DynamicSessionToolsKey,[...t])}}let p=!1,m=c;try{let e=[];for(let t of a.turn){let n=await t.handler(l);n?.modelContext!==void 0&&n.modelContext.length>0&&u.push(...n.modelContext),e.push(...normalizeLifecycleSkillResults(r,n))}d=await materializeLifecycleSkills(r,d,e)}catch(t){let n=toErrorMessage(t);try{p||=(m=await emitTurnPreamble(s,{message:e.input.message},c,e.runtimeIdentity),!0);let t=await emitRecoverableFailedTurn(s,m,{code:`HOOK_TURN_FAILED`,message:n});return{kind:`turn-failed`,message:n,nextSession:setHarnessEmissionState(d,t)}}catch(e){throw log.error(`Event hook threw while emitting the turn.failed cascade for a lifecycle.turn failure — escalating to session.failed.`,{error:toErrorMessage(e)}),e}}if(f.some(e=>e.eventNames.includes(`turn.started`))){let{tools:e}=await resolveAndStoreDynamicSessionTools(r,f,`turn.started`),t=new Set(f.filter(e=>e.eventNames.includes(`turn.started`)).map(e=>e.slug)),i=(r.get(DynamicSessionToolsKey)??[]).filter(e=>{for(let n of t)if(e.name===n||e.name.startsWith(`${n}__`))return!1;return!0});r.setVirtualContext(DynamicSessionToolsKey,[...i,...e])}let h=e.input.modelContext??[],g=h.length===0?u:[...h,...u];return{kind:`proceed`,input:g.length>0?{...e.input,modelContext:g}:e.input,nextSession:d}}function normalizeLifecycleSkillResults(e,t){if(t?.skills===void 0||t.skills.length===0)return[];let n=new Set(e.require(BundleKey).resolvedAgent.skills.map(e=>e.name)),r=new Map;for(let e of t.skills){let t=normalizeSkillPackage(e);if(n.has(t.name))throw Error(`Hook-contributed skill "${t.name}" conflicts with an authored skill.`);r.set(t.name,t)}return[...r.values()]}async function materializeLifecycleSkills(e,t,n){if(n.length===0)return t;let i=new Map(n.map(e=>[e.name,e])),a=await e.require(SandboxKey).get();if(a===null)throw Error(`Dynamic skills require a sandbox for the current agent.`);for(let e of i.values())await writeSkillPackageToSandbox({sandbox:a,skill:e});let o=formatAvailableSkillsSection([...i.values()]);return o===null?t:{...t,history:[...t.history,{role:`system`,content:o}]}}async function dispatchStreamEventHooks(e){let t=e.registry.streamEventsByType.get(e.event.type)??[],n=e.registry.streamEventsWildcard;if(t.length===0&&n.length===0)return;let r=buildHookContext(e.ctx);for(let n of t)await n.handler(e.event,r);for(let t of n)await t.handler(e.event,r)}function buildHookContext(t){let n=t.require(BundleKey),r=t.get(ChannelKey),i=t.get(ContinuationTokenKey),a=r===void 0?void 0:getAdapterKind(r);return{...buildCallbackContext(),agent:{name:n.resolvedAgent.config.name??`agent`,nodeId:n.nodeId},channel:{kind:a,continuationToken:i}}}async function runHookLifecycleStep(e,t){let n=await dispatchHookLifecycle(e);return n.kind===`turn-failed`?{next:e.mode===`conversation`?null:{done:!0,output:n.message},session:n.nextSession}:t(n.nextSession,n.input)}export{dispatchHookLifecycle,dispatchStreamEventHooks,runHookLifecycleStep};
|
|
@@ -55,3 +55,40 @@ export declare const SessionCallbackKey: ContextKey<SessionCallback>;
|
|
|
55
55
|
export declare const SessionPreparedKey: ContextKey<boolean>;
|
|
56
56
|
export declare const SessionKey: ContextKey<Session>;
|
|
57
57
|
export declare const SandboxKey: ContextKey<SandboxAccess>;
|
|
58
|
+
/**
|
|
59
|
+
* Virtual (non-serialized) live dynamic tool definitions for the
|
|
60
|
+
* current step. Rebuilt per workflow step — either from live resolver
|
|
61
|
+
* results (first step) or from durable metadata with lazy execute
|
|
62
|
+
* wrappers (subsequent steps).
|
|
63
|
+
*/
|
|
64
|
+
export declare const DynamicSessionToolsKey: ContextKey<import("#harness/execute-tool.js").HarnessToolDefinition[]>;
|
|
65
|
+
/**
|
|
66
|
+
* Durable (serialized) metadata for session-scoped dynamic tools.
|
|
67
|
+
* Set on the first step when resolvers run. Read on subsequent steps
|
|
68
|
+
* to reconstruct tool definitions with lazy execute wrappers.
|
|
69
|
+
*/
|
|
70
|
+
export interface DurableDynamicToolMetadata {
|
|
71
|
+
readonly name: string;
|
|
72
|
+
readonly description: string;
|
|
73
|
+
readonly inputSchema: import("#shared/json.js").JsonObject;
|
|
74
|
+
readonly resolverSlug: string;
|
|
75
|
+
readonly entryKey: string;
|
|
76
|
+
/**
|
|
77
|
+
* Name of the hoisted execute step function (e.g.
|
|
78
|
+
* `__ash_dynamic_exec_0`). Used to look up the registered step
|
|
79
|
+
* function via `getStepFunction` on replay.
|
|
80
|
+
*/
|
|
81
|
+
readonly executeStepFnName?: string;
|
|
82
|
+
/**
|
|
83
|
+
* Serialized closure variables captured from the resolver scope on
|
|
84
|
+
* the first run. Passed as the `__vars` parameter to the hoisted
|
|
85
|
+
* step function on replay.
|
|
86
|
+
*/
|
|
87
|
+
readonly closureVars?: Record<string, unknown>;
|
|
88
|
+
}
|
|
89
|
+
export declare const DynamicSessionToolMetadataKey: ContextKey<readonly DurableDynamicToolMetadata[]>;
|
|
90
|
+
/**
|
|
91
|
+
* Durable cache for resolver I/O results. Keyed by resolver slug +
|
|
92
|
+
* await index. Populated on first resolver run, read on replay.
|
|
93
|
+
*/
|
|
94
|
+
export declare const DynamicToolResolverCacheKey: ContextKey<Record<string, unknown>>;
|
package/dist/src/context/keys.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ContextKey}from"#context/key.js";const AuthKey=new ContextKey(`ash.auth`),InitiatorAuthKey=new ContextKey(`ash.initiatorAuth`),SessionIdKey=new ContextKey(`ash.sessionId`),ContinuationTokenKey=new ContextKey(`ash.continuationToken`),ModeKey=new ContextKey(`ash.mode`),ParentSessionKey=new ContextKey(`ash.parentSession`),CapabilitiesKey=new ContextKey(`ash.capabilities`),SessionCallbackKey=new ContextKey(`ash.sessionCallback`),SessionPreparedKey=new ContextKey(`ash.sessionPrepared`),SessionKey=new ContextKey(`ash.session`),SandboxKey=new ContextKey(`ash.sandbox`);export{AuthKey,CapabilitiesKey,ContinuationTokenKey,InitiatorAuthKey,ModeKey,ParentSessionKey,SandboxKey,SessionCallbackKey,SessionIdKey,SessionKey,SessionPreparedKey};
|
|
1
|
+
import{ContextKey}from"#context/key.js";const AuthKey=new ContextKey(`ash.auth`),InitiatorAuthKey=new ContextKey(`ash.initiatorAuth`),SessionIdKey=new ContextKey(`ash.sessionId`),ContinuationTokenKey=new ContextKey(`ash.continuationToken`),ModeKey=new ContextKey(`ash.mode`),ParentSessionKey=new ContextKey(`ash.parentSession`),CapabilitiesKey=new ContextKey(`ash.capabilities`),SessionCallbackKey=new ContextKey(`ash.sessionCallback`),SessionPreparedKey=new ContextKey(`ash.sessionPrepared`),SessionKey=new ContextKey(`ash.session`),SandboxKey=new ContextKey(`ash.sandbox`),DynamicSessionToolsKey=new ContextKey(`ash.dynamicSessionTools`),DynamicSessionToolMetadataKey=new ContextKey(`ash.dynamicSessionToolMetadata`),DynamicToolResolverCacheKey=new ContextKey(`ash.dynamicToolResolverCache`);export{AuthKey,CapabilitiesKey,ContinuationTokenKey,DynamicSessionToolMetadataKey,DynamicSessionToolsKey,DynamicToolResolverCacheKey,InitiatorAuthKey,ModeKey,ParentSessionKey,SandboxKey,SessionCallbackKey,SessionIdKey,SessionKey,SessionPreparedKey};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{SandboxKey,SessionIdKey}from"#context/keys.js";import{contextStorage}from"#context/container.js";import{
|
|
1
|
+
import{SandboxKey,SessionIdKey}from"#context/keys.js";import{contextStorage}from"#context/container.js";import{BundleKey,ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{getAdapterKind}from"#channel/adapter.js";import{getActiveRuntimeNode}from"#context/node.js";import{ensureSandboxAccess}from"#execution/sandbox/ensure.js";const sandboxProvider={key:SandboxKey,async create(e,r){let i=e.get(BundleKey);if(i===void 0)return;let a=getActiveRuntimeNode(e),o=a.sandboxRegistry,s=e.require(SessionIdKey);return{value:await ensureSandboxAccess({compiledArtifactsSource:i.compiledArtifactsSource,nodeId:a.nodeId,registry:o,runOnSession:async t=>await contextStorage.run(e,t),sessionId:s,state:r.sandboxState??null,tags:{agent:resolveTagAgentName({bundle:i,node:a}),channel:resolveTagChannelKind(e.get(ChannelKey)),sessionId:s}})}},async commit(e,t){let n=await e.captureState();return{...t,sandboxState:n}}};function resolveTagAgentName(e){let t=e.node,n=e.bundle;return t.agent?.config?.name??n.resolvedAgent?.config?.name??t.nodeId??`unknown`}function resolveTagChannelKind(e){return e===void 0?`unknown`:getAdapterKind(e)}export{sandboxProvider};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createLogger,logError}from"#internal/logging.js";import{AuthKey,CapabilitiesKey,InitiatorAuthKey}from"#context/keys.js";import{createSubagentCalledEvent,encodeMessageStreamEvent,timestampHandleMessageStreamEvent}from"#protocol/message.js";import{toErrorMessage}from"#shared/errors.js";import{
|
|
1
|
+
import{createLogger,logError}from"#internal/logging.js";import{AuthKey,CapabilitiesKey,InitiatorAuthKey}from"#context/keys.js";import{createSubagentCalledEvent,encodeMessageStreamEvent,timestampHandleMessageStreamEvent}from"#protocol/message.js";import{toErrorMessage}from"#shared/errors.js";import{BundleKey,ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{callAdapterEventHandler}from"#channel/adapter.js";import{readDurableSession,writeDurableSession}from"#execution/durable-session-store.js";import{hydrateDurableSession}from"#execution/session.js";import{deserializeContext}from"#context/serialize.js";import{buildAdapterContext}from"#channel/adapter-context.js";import{getPendingRuntimeActionBatch,recordPendingSubagentChildToken}from"#harness/runtime-actions.js";import{resolveRemoteAgentForAction,startRemoteAgentSession}from"#execution/remote-agent-dispatch.js";import{buildSubagentRunInput}from"#execution/subagent-tool.js";import{createWorkflowRuntime,workflowEntryReference}from"#execution/workflow-runtime.js";const log=createLogger(`execution.dispatch-runtime-actions`);async function dispatchRuntimeActionsStep(e){"use step";let s=await readDurableSession(e.sessionState),u=getPendingRuntimeActionBatch(s.state);if(u===void 0||u.actions.length===0)return{results:[],sessionState:e.sessionState};let d=await deserializeContext(e.serializedContext),f=d.require(BundleKey),p=hydrateDurableSession({compactionOverrides:{thresholdPercent:f.resolvedAgent.config.compaction?.thresholdPercent},durable:s,turnAgent:f.turnAgent}),m=d.require(ChannelKey),h=d.get(AuthKey)??null,g=d.get(CapabilitiesKey),_=d.get(InitiatorAuthKey)??null,v=e.parentWritable.getWriter(),y=buildAdapterContext(m,d),b=p,x=[];try{for(let n of u.actions){let r,i,s,c;switch(n.kind){case`subagent-call`:{let e=createWorkflowRuntime({compiledArtifactsSource:f.compiledArtifactsSource,nodeId:n.nodeId}),{childContinuationToken:t,runInput:a}=buildSubagentRunInput({action:n,auth:h,batchEvent:u.event,capabilities:g,initiatorAuth:_,session:p}),o=await e.run(a);b=recordPendingSubagentChildToken({callId:n.callId,childContinuationToken:t,session:b}),r=o.sessionId,i=n.name,c=n.subagentName;break}case`remote-agent-call`:{let a;try{a=resolveRemoteAgentForAction({nodeId:n.nodeId,remoteAgentName:n.remoteAgentName,registry:f.subagentRegistry.subagentsByNodeId}),r=await startRemoteAgentSession({action:n,callbackBaseUrl:e.callbackBaseUrl,remote:a,session:p})}catch(e){logError(log,`remote agent start failed`,e,{remoteAgentName:n.remoteAgentName,nodeId:n.nodeId,callId:n.callId}),x.push(createRemoteAgentStartFailureResult({action:n,error:e}));continue}i=n.name,s={url:a.url},c=n.remoteAgentName;break}default:throw Error(`Unsupported runtime action kind "${n.kind}" in workflow runtime.`)}let l=await callAdapterEventHandler(m,createSubagentCalledEvent({callId:n.callId,childSessionId:r,name:i,remote:s,sequence:u.event.sequence,sessionId:p.sessionId,toolName:c,turnId:u.event.turnId,workflowId:workflowEntryReference.workflowId}),y);await v.write(encodeMessageStreamEvent(timestampHandleMessageStreamEvent(l)))}}finally{v.releaseLock()}return{results:x,sessionState:b===p?e.sessionState:await writeDurableSession({session:b,writable:e.sessionWritable})}}function createRemoteAgentStartFailureResult(e){return{callId:e.action.callId,isError:!0,kind:`subagent-result`,output:{code:`REMOTE_AGENT_START_FAILED`,message:toErrorMessage(e.error)},subagentName:e.action.remoteAgentName}}export{dispatchRuntimeActionsStep};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createLogger}from"#internal/logging.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{buildCallbackContext}from"#context/build-callback-context.js";import{
|
|
1
|
+
import{createLogger}from"#internal/logging.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{jsonSchema}from"ai";import{buildCallbackContext}from"#context/build-callback-context.js";import{createToolLoopHarness}from"#harness/tool-loop.js";import{resolveCodeModeEnabled}from"#shared/code-mode.js";import{resolveRuntimeModelReference}from"#runtime/agent/resolve-model.js";import{findRegisteredRuntimeTool}from"#runtime/tools/registry.js";import{createToolCompactionHandler}from"#execution/tool-compaction.js";const log=createLogger(`execution.node-step`);function createExecutionNodeStep(e){let t=createRuntimeModelResolver(e.compiledArtifactsSource),n=createNodeHarnessTools({node:e.node}),r=collectResolvedTools(e.node),o=createToolCompactionHandler(r),s=collectRetentionPolicies(r);return createToolLoopHarness({capabilities:e.capabilities,codeMode:resolveCodeModeEnabled(e.node.agent.config?.experimental?.codeMode),emit:e.emit,mode:e.mode,onCompaction:o,resolveModel:t,retentionPolicies:s,runtimeIdentity:buildRuntimeIdentity(e.node),tools:n})}function buildRuntimeIdentity(e){let n=resolveInstalledPackageInfo(),r={agentId:e.turnAgent.id,agentName:e.agent.config?.name,ashVersion:n.version,modelId:e.turnAgent.model.id},i=process.env.VERCEL_GIT_COMMIT_SHA?.trim(),a=process.env.VERCEL_GIT_COMMIT_REF?.trim(),o=process.env.VERCEL_DEPLOYMENT_CREATED_AT?.trim();return i||a||o?{...r,build:{deployedAt:o||void 0,gitBranch:a||void 0,gitSha:i||void 0}}:r}function createRuntimeModelResolver(e){return t=>resolveRuntimeModelReference(t,{compiledArtifactsSource:e})}function collectResolvedTools(e){return[...e.toolRegistry.toolsByName.values()].map(e=>e.definition)}function collectRetentionPolicies(e){let t=new Map;for(let n of e){let e=n.retentionPolicy;e===void 0||e===`auto`||t.set(n.name,e)}return t}function createNodeHarnessTools(e){let t=new Map;for(let n of e.node.turnAgent.tools){let r=resolveHarnessToolDefinition({node:e.node,tool:n});r!==null&&t.set(n.name,r)}return t}function resolveHarnessToolDefinition(e){if(e.tool.kind===`subagent`)return{description:e.tool.description??``,inputSchema:jsonSchema(e.tool.inputSchema??{}),name:e.tool.name,runtimeAction:{kind:`subagent-call`,nodeId:e.tool.nodeId,subagentName:e.tool.name}};if(e.tool.kind===`remote`)return{description:e.tool.description??``,inputSchema:jsonSchema(e.tool.inputSchema??{}),name:e.tool.name,runtimeAction:{kind:`remote-agent-call`,nodeId:e.tool.nodeId,remoteAgentName:e.tool.name,subagentName:e.tool.name}};let t=findRegisteredRuntimeTool(e.node.toolRegistry,e.tool.name);if(t===null)return log.warn(`declared tool is not registered — omitting from toolset`,{toolName:e.tool.name,nodeId:e.node.nodeId}),null;let i=t.definition,a=i.sourceId.startsWith(`ash:`),o=i.execute;return{approvalKey:i.approvalKey,description:i.description,execute:o===void 0?void 0:a?o:e=>o(e,buildCallbackContext()),inputSchema:i.inputStandardSchema??jsonSchema(i.inputSchema??{}),name:i.name,needsApproval:i.needsApproval,toModelOutput:i.toModelOutput}}export{createExecutionNodeStep,createNodeHarnessTools};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createLogger,formatError}from"#internal/logging.js";import{AuthKey,CapabilitiesKey,ContinuationTokenKey,ModeKey}from"#context/keys.js";import{createAuthorizationCompletedEvent,createSessionFailedEvent,encodeMessageStreamEvent,timestampHandleMessageStreamEvent}from"#protocol/message.js";import{
|
|
1
|
+
import{createLogger,formatError}from"#internal/logging.js";import{AuthKey,CapabilitiesKey,ContinuationTokenKey,ModeKey}from"#context/keys.js";import{createAuthorizationCompletedEvent,createSessionFailedEvent,encodeMessageStreamEvent,timestampHandleMessageStreamEvent}from"#protocol/message.js";import{BundleKey,ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{callAdapterEventHandler,defaultDeliverResult}from"#channel/adapter.js";import{getHarnessEmissionState,isHarnessBetweenTurns}from"#harness/emission.js";import{readDurableSession,writeDurableSession}from"#execution/durable-session-store.js";import{hydrateDurableSession,refreshSessionFromTurnAgent}from"#execution/session.js";import{deserializeContext,serializeContext}from"#context/serialize.js";import{buildAdapterContext}from"#channel/adapter-context.js";import{getPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{createWorkflowRuntime,startWorkflowPreferLatest}from"#execution/workflow-runtime.js";import{upsertProxyInputRequests}from"#harness/proxy-input-requests.js";import{coalesceTurnInputs}from"#harness/messages.js";import{dispatchStreamEventHooks,runHookLifecycleStep}from"#context/hook-lifecycle.js";import{runStep,withContextScope}from"#context/run-step.js";import{hasPendingInputBatch}from"#harness/input-requests.js";import{getRuntimeActionRequestKey}from"#runtime/actions/keys.js";import{CallbackBaseUrlKey,PendingAuthorizationResultKey,getPendingAuthorization}from"#harness/authorization.js";import{createExecutionNodeStep}from"#execution/node-step.js";import{emitProxiedInputRequest,routeDeliverPayload}from"#execution/subagent-hitl-proxy.js";import{turnWorkflow}from"#execution/turn-workflow.js";async function turnStep(e){"use step";let t=await readDurableSession(e.sessionState),i=await deserializeContext(e.serializedContext),s=i.require(ChannelKey),d=i.require(BundleKey),f=hydrateDurableSession({compactionOverrides:{thresholdPercent:d.resolvedAgent.config.compaction?.thresholdPercent},durable:t,turnAgent:d.turnAgent});try{let{getWorkflowMetadata:e}=await import(`#compiled/@workflow/core/index.js`),t=e();typeof t.url==`string`&&i.set(CallbackBaseUrlKey,t.url.replace(/\/$/,``))}catch{}let p=getPendingAuthorization(t.state),m;if(p&&e.input?.kind===`deliver`){let t=[],n=[];for(let r of e.input.payloads){let e=r.authorizationCallback;if(e){let n=p.challenges.find(t=>t.name===e.connectionName);n&&t.push({name:n.name,state:n.state,callback:e.request,hookUrl:n.hookUrl})}else n.push(r)}t.length>0&&(i.set(PendingAuthorizationResultKey,t),m=t.map(e=>e.name),e=n.length>0?{...e,input:{...e.input,payloads:n}}:{...e,input:void 0})}e.input?.kind===`deliver`&&e.input.auth!==void 0&&i.set(AuthKey,e.input.auth??null);let h=buildAdapterContext(s,i),g;if(e.input?.kind===`deliver`){let t=[];for(let n of e.input.payloads){let e=s.deliver?await s.deliver(n,h):defaultDeliverResult(n);e!=null&&t.push(e)}g=t.length===0?void 0:t.reduce(coalesceTurnInputs)}else e.input?.kind===`runtime-action-result`&&(g={runtimeActionResults:e.input.results});if(e.input?.kind===`deliver`){let e={...s,state:{...h.state}};i.set(ChannelKey,e)}if(e.input?.kind===`deliver`&&g===void 0){let t=reconcileSessionContinuationToken(i,f),n=serializeContext(i),r=t===f?e.sessionState:await writeDurableSession({session:t,writable:e.sessionWritable});return{action:`park`,...derivePendingState(t),serializedContext:n,sessionState:r}}let _=e.parentWritable.getWriter(),v=i.require(BundleKey).hookRegistry,emit=async e=>{let t=await callAdapterEventHandler(s,e,h);i.set(ChannelKey,{...s,state:{...h.state}}),await _.write(encodeMessageStreamEvent(timestampHandleMessageStreamEvent(t))),await dispatchStreamEventHooks({ctx:i,registry:v,event:t})},y=await runStep(i,f,async e=>{if(m){let t=getHarnessEmissionState(e.state);for(let e of m)await emit(createAuthorizationCompletedEvent({name:e,outcome:`authorized`,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId}))}let t=i.require(BundleKey),n=i.get(CapabilitiesKey),s=i.require(ModeKey),runHarnessStep=async(e,r)=>{let i=refreshSessionFromTurnAgent({compactionOverrides:{thresholdPercent:t.resolvedAgent.config.compaction?.thresholdPercent},session:e,turnAgent:t.turnAgent});return createExecutionNodeStep({capabilities:n,compiledArtifactsSource:t.compiledArtifactsSource,createRuntime:createWorkflowRuntime,emit,mode:s,node:t.graph.root})(i,r)};return g!==void 0&&isHarnessBetweenTurns(e)?runHookLifecycleStep({ctx:i,emit,input:g,mode:s,registry:t.hookRegistry,session:e},runHarnessStep):runHarnessStep(e,g)}),b=reconcileSessionContinuationToken(i,y.session),x=serializeContext(i);y={...y,session:b};let S=await writeDurableSession({session:y.session,writable:e.sessionWritable});return y.next!==null&&typeof y.next==`object`&&`done`in y.next?(await _.close(),{action:`done`,output:y.next.output,serializedContext:x,sessionState:S}):y.next===null?(_.releaseLock(),{action:`park`,...derivePendingState(y.session),serializedContext:x,sessionState:S}):(_.releaseLock(),{action:`continue`,serializedContext:x,sessionState:S})}function derivePendingState(e){let t=getPendingRuntimeActionBatch(e.state),n=getPendingAuthorization(e.state),r={authorizationNames:n?.challenges.map(e=>e.name),hasPendingAuthorization:n!==void 0,hasPendingInputBatch:hasPendingInputBatch(e.state)};return t===void 0?r:{...r,pendingRuntimeActionKeys:t.actions.map(e=>getRuntimeActionRequestKey(e))}}function reconcileSessionContinuationToken(e,t){let n=e.get(ContinuationTokenKey);return n===void 0||n===t.continuationToken?t:{...t,continuationToken:n}}const log=createLogger(`execution.workflow-entry`);async function emitTerminalSessionFailureStep(e){"use step";let n=formatError(e.error),r=typeof n.name==`string`?n.name:`WORKFLOW_EXECUTION_FAILED`,i=typeof n.message==`string`?n.message:String(e.error),a=e.serializedContext[`ash.sessionId`]??``;log.error(`workflow loop threw — emitting terminal session.failed`,{sessionId:a,errorId:typeof n.errorId==`string`?n.errorId:void 0,code:r,message:i,detail:typeof n.detail==`string`?n.detail:void 0});let o=createSessionFailedEvent({code:r,details:n,message:i,sessionId:a});try{let t=await deserializeContext(e.serializedContext),n=t.get(ChannelKey);n!==void 0&&await callAdapterEventHandler(n,o,buildAdapterContext(n,t))}catch(e){log.error(`adapter failed to handle terminal session.failed event`,{errorId:typeof n.errorId==`string`?n.errorId:void 0,sessionId:a,error:e})}try{let t=e.parentWritable.getWriter();try{await t.write(encodeMessageStreamEvent(timestampHandleMessageStreamEvent(o)))}finally{t.releaseLock()}}catch(e){log.error(`failed to write terminal session.failed event to durable stream`,{errorId:typeof n.errorId==`string`?n.errorId:void 0,sessionId:a,error:e})}}async function runProxyInputRequestStep(e){"use step";let t=await readDurableSession(e.sessionState),n=await deserializeContext(e.serializedContext),r=n.require(ChannelKey),i=buildAdapterContext(r,n),o=n.require(ModeKey),s=n.require(BundleKey),c=hydrateDurableSession({compactionOverrides:{thresholdPercent:s.resolvedAgent.config.compaction?.thresholdPercent},durable:t,turnAgent:s.turnAgent}),l=e.parentWritable.getWriter(),u;try{let emit=async e=>{let t=await callAdapterEventHandler(r,e,i);await l.write(encodeMessageStreamEvent(timestampHandleMessageStreamEvent(t)))};u=await withContextScope(n,c,async t=>{let n=await emitProxiedInputRequest({emit,hookPayload:e.hookPayload,mode:o,session:t});return{result:n.entries,session:n.session}})}finally{l.releaseLock()}return n.set(ChannelKey,{...r,state:{...i.state}}),{serializedContext:serializeContext(n),sessionState:await writeDurableSession({session:reconcileSessionContinuationToken(n,upsertProxyInputRequests({entries:u.result,forChildContinuationToken:e.hookPayload.childContinuationToken,session:u.session})),writable:e.sessionWritable})}}async function routeProxiedDeliverStep(e){"use step";let t=await readDurableSession(e.sessionState),n=routeDeliverPayload({payload:e.payload,state:t.state}),{resumeHook:r}=await import(`#compiled/@workflow/core/runtime.js`);for(let t of n.forChildren)await r(t.childContinuationToken,{auth:e.auth,kind:`deliver`,payloads:[t.payload]});return{remainder:n.forSelf}}async function dispatchTurnStep(e){"use step";return{runId:(await startWorkflowPreferLatest(turnWorkflow,[e])).runId}}export{dispatchTurnStep,emitTerminalSessionFailureStep,reconcileSessionContinuationToken,routeProxiedDeliverStep,runProxyInputRequestStep,turnStep};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{buildSessionHandle}from"#channel/session.js";import{deserializeUrlFilePart,isSerializedUrlFilePart}from"#internal/attachments/url-refs.js";import{SandboxKey}from"#context/keys.js";import{basename}from"node:path";import{toErrorMessage}from"#shared/errors.js";import{createHash}from"node:crypto";import{loadContext}from"#context/container.js";import{
|
|
1
|
+
import{buildSessionHandle}from"#channel/session.js";import{deserializeUrlFilePart,isSerializedUrlFilePart}from"#internal/attachments/url-refs.js";import{SandboxKey}from"#context/keys.js";import{basename}from"node:path";import{toErrorMessage}from"#shared/errors.js";import{createHash}from"node:crypto";import{loadContext}from"#context/container.js";import{ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{getAdapterKind}from"#channel/adapter.js";import{buildAdapterContext}from"#channel/adapter-context.js";import{fileDataToBytes}from"#internal/attachments/data.js";import{AshAttachmentError}from"#internal/attachments/errors.js";import{decodeSandboxRef,encodeSandboxRef,isSandboxRefUrl}from"#internal/attachments/sandbox-refs.js";const ATTACHMENTS_ROOT=`/workspace/attachments`,UNSAFE_FILENAME_CHARS=/[^\w.-]+/g;async function stageAttachmentsForAdapter(e,t,n){if(typeof e==`string`)return e;let r=reconstitueFilePartUrls(e);return Promise.all(r.map(async e=>e.type===`file`?stageFilePart(e,t,n):e))}async function stageAttachmentsToSandbox(t){if(typeof t==`string`||!Array.isArray(t)||!hasFileParts(t))return t;let n=loadContext(),i=n.get(SandboxKey);if(i===void 0)return t;let a=await i.get();if(a===null)return t;let o=n.get(ChannelKey);return stageAttachmentsForAdapter(t,a,o?buildAdapterContext(o,n):{ctx:n,state:{},session:buildSessionHandle(n)})}async function hydrateSandboxAttachments(e){if(!messagesContainSandboxRef(e))return e;let t=loadContext().get(SandboxKey);if(t===void 0)throw Error(`Cannot hydrate sandbox-ref FilePart: no SandboxKey is bound on the active Ash context. Hydration must run inside a step scope with the framework sandbox provider installed.`);let n=await t.get();if(n===null)throw Error(`Cannot hydrate sandbox-ref FilePart: SandboxKey is bound but no active sandbox session is available.`);return Promise.all(e.map(async e=>{if(!messageContainsSandboxRef(e))return e;let t=await hydrateMessageContent(e.content,n);return{...e,content:t}}))}function hasFileParts(e){for(let t of e)if(t.type===`file`)return!0;return!1}function messagesContainSandboxRef(e){for(let t of e)if(messageContainsSandboxRef(t))return!0;return!1}function messageContainsSandboxRef(e){let t=e.content;if(!Array.isArray(t))return!1;for(let e of t)if(isSandboxRefFilePart(e))return!0;return!1}function isSandboxRefFilePart(e){return typeof e==`object`&&!!e&&e.type===`file`&&isSandboxRefUrl(e.data)}async function hydrateMessageContent(e,t){return Array.isArray(e)?Promise.all(e.map(async e=>{if(!isSandboxRefFilePart(e))return e;let n=e,r=decodeSandboxRef(n.data);if(!shouldInlineSandboxRefAsBytes(r))return renderSandboxRefAsTextPart(r);let i=await t.readBinaryFile({path:r.path});if(i===null)throw Error(`Sandbox-ref FilePart references missing file: "${r.path}". The staging pipeline invariant (every ash-sandbox: ref has bytes on disk) was violated.`);return{...n,data:i,mediaType:r.mediaType}})):e}function shouldInlineSandboxRefAsBytes(e){return e.mediaType.startsWith(`image/`)?e.size<=3145728:e.mediaType===`application/pdf`?e.size<=20971520:!1}function renderSandboxRefAsTextPart(e){return{text:`Attached file ${e.path} (${e.mediaType})`,type:`text`}}async function stageFilePart(e,t,n){if(isSandboxRefUrl(e.data))return e;if(e.data instanceof URL&&e.data.protocol!==`data:`){let r=await tryFetchFile(e.data.href,n);return r===null?e:stageResolvedBytes(e,r,t)}let r=await fileDataToBytes(e.data);return r===null?e:stageResolvedBytes(e,{bytes:r},t)}async function stageResolvedBytes(e,t,n){let r=t.bytes,i=sha256Prefix(r),a=t.mediaType??e.mediaType??`application/octet-stream`,o=`${ATTACHMENTS_ROOT}/${i}/${safeFilename(t.filename??e.filename,i)}`;await n.writeBinaryFile({content:r,path:o});let s=n.resolvePath(o);return{...e,data:encodeSandboxRef({mediaType:a,path:s,size:r.byteLength}),filename:s,mediaType:a}}async function tryFetchFile(e,t){let n=t.ctx.get(ChannelKey);if(n?.fetchFile===void 0)return null;let r=getAdapterKind(n);try{let t=await n.fetchFile(e);return t===null?null:Buffer.isBuffer(t)?{bytes:t}:t}catch(e){throw e instanceof AshAttachmentError?e:new AshAttachmentError({adapterKind:r,cause:e,kind:`resolver-threw`,message:`fetchFile for adapter kind="${r}" threw: ${toErrorMessage(e)}`})}}function reconstitueFilePartUrls(e){let r=!1,i=e.map(e=>e.type===`file`&&isSerializedUrlFilePart(e.data)?(r=!0,{...e,data:deserializeUrlFilePart(e.data)}):e);return r?i:e}function sha256Prefix(e){return createHash(`sha256`).update(e).digest(`hex`).slice(0,16)}function safeFilename(e,t){if(e===void 0)return`file-${t}`;let n=basename(e).replace(UNSAFE_FILENAME_CHARS,`_`);return n.length>0?n:`file-${t}`}export{ATTACHMENTS_ROOT,hydrateSandboxAttachments,stageAttachmentsForAdapter,stageAttachmentsToSandbox};
|