experimental-ash 0.7.6 → 0.8.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.
Files changed (78) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +79 -56
  3. package/dist/docs/public/channels/README.md +33 -23
  4. package/dist/docs/public/channels/attachments.md +42 -29
  5. package/dist/src/channel/adapter.d.ts +21 -28
  6. package/dist/src/channel/compiled-channel.d.ts +1 -1
  7. package/dist/src/channel/http.d.ts +29 -0
  8. package/dist/src/channel/http.js +30 -0
  9. package/dist/src/channel/schedule.d.ts +20 -0
  10. package/dist/src/channel/schedule.js +22 -1
  11. package/dist/src/channel/send.d.ts +1 -1
  12. package/dist/src/channel/send.js +22 -1
  13. package/dist/src/channel/types.d.ts +1 -1
  14. package/dist/src/chunks/{client-DBMG7iuf.js → client-BeZ_W7vl.js} +2 -2
  15. package/dist/src/chunks/{dev-authored-source-watcher-BcN7BUDE.js → dev-authored-source-watcher-BFC_yNcP.js} +1 -1
  16. package/dist/src/chunks/host-DMccRKcz.js +22 -0
  17. package/dist/src/chunks/{paths-BYIdCNw9.js → paths-B-aiDznc.js} +26 -26
  18. package/dist/src/chunks/{prewarm-DXhyk7i9.js → prewarm-CCbReSNm.js} +1 -1
  19. package/dist/src/chunks/types-MZUhN0Zy.js +1 -0
  20. package/dist/src/cli/commands/info.js +1 -1
  21. package/dist/src/cli/dev/repl.js +1 -1
  22. package/dist/src/cli/run.js +1 -1
  23. package/dist/src/compiled/.vendor-stamp.json +1 -1
  24. package/dist/src/compiled/@vercel/sandbox/index.d.ts +37 -3
  25. package/dist/src/evals/cli/eval.js +1 -1
  26. package/dist/src/execution/sandbox/bindings/local.d.ts +0 -2
  27. package/dist/src/execution/sandbox/bindings/local.js +1 -20
  28. package/dist/src/execution/sandbox/bindings/vercel.d.ts +2 -2
  29. package/dist/src/execution/sandbox/bindings/vercel.js +1 -12
  30. package/dist/src/harness/attachment-staging.js +54 -50
  31. package/dist/src/harness/emission.d.ts +14 -1
  32. package/dist/src/harness/emission.js +15 -2
  33. package/dist/src/harness/tool-loop.js +28 -2
  34. package/dist/src/internal/application/package.js +1 -1
  35. package/dist/src/internal/attachments/url-refs.d.ts +14 -0
  36. package/dist/src/internal/attachments/url-refs.js +20 -0
  37. package/dist/src/internal/nitro/host/configure-nitro-routes.d.ts +0 -1
  38. package/dist/src/internal/nitro/host/configure-nitro-routes.js +24 -17
  39. package/dist/src/internal/nitro/host/create-application-nitro.js +1 -16
  40. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.d.ts +87 -0
  41. package/dist/src/internal/nitro/routes/{home-page/build-home-page-response.js → agent-info/build-agent-info-response.js} +6 -6
  42. package/dist/src/internal/nitro/routes/{home-page/load-home-page-data.d.ts → agent-info/load-agent-info-data.d.ts} +8 -8
  43. package/dist/src/internal/nitro/routes/{home-page/load-home-page-data.js → agent-info/load-agent-info-data.js} +7 -8
  44. package/dist/src/internal/nitro/routes/index.d.ts +10 -5
  45. package/dist/src/internal/nitro/routes/index.js +225 -18
  46. package/dist/src/internal/nitro/routes/info.d.ts +14 -0
  47. package/dist/src/internal/nitro/routes/info.js +50 -0
  48. package/dist/src/protocol/routes.d.ts +8 -6
  49. package/dist/src/protocol/routes.js +8 -6
  50. package/dist/src/public/channels/ash.js +1 -6
  51. package/dist/src/public/channels/index.d.ts +1 -1
  52. package/dist/src/public/channels/slack/attachments.d.ts +14 -18
  53. package/dist/src/public/channels/slack/attachments.js +30 -36
  54. package/dist/src/public/channels/slack/index.d.ts +0 -1
  55. package/dist/src/public/channels/slack/slackChannel.js +3 -3
  56. package/dist/src/public/definitions/defineChannel.d.ts +9 -7
  57. package/dist/src/public/definitions/defineChannel.js +5 -11
  58. package/dist/src/public/definitions/sandbox.d.ts +3 -3
  59. package/dist/src/public/sandbox/backends/vercel.d.ts +2 -2
  60. package/dist/src/public/sandbox/index.d.ts +2 -2
  61. package/dist/src/public/sandbox/vercel-sandbox.d.ts +11 -10
  62. package/dist/src/runtime/channels/registry.js +9 -3
  63. package/dist/src/runtime/resolve-channel.js +2 -1
  64. package/dist/src/shared/sandbox-backend.d.ts +4 -4
  65. package/dist/src/shared/sandbox-definition.d.ts +6 -36
  66. package/package.json +1 -1
  67. package/dist/src/chunks/host-33-Sb6vq.js +0 -22
  68. package/dist/src/chunks/types-D9Uv7nU4.js +0 -1
  69. package/dist/src/internal/nitro/host/load-home-page-web-assets.d.ts +0 -12
  70. package/dist/src/internal/nitro/host/load-home-page-web-assets.js +0 -34
  71. package/dist/src/internal/nitro/routes/home-page/build-home-page-response.d.ts +0 -87
  72. package/dist/src/internal/nitro/routes/home.d.ts +0 -6
  73. package/dist/src/internal/nitro/routes/home.js +0 -21
  74. package/dist/src/internal/nitro/routes/web-ui/assets/index-BQa8fbHJ.js +0 -11
  75. package/dist/src/internal/nitro/routes/web-ui/assets/style-Kqb6YxTP.css +0 -2
  76. package/dist/src/internal/nitro/routes/web-ui/index.html +0 -17
  77. package/dist/src/public/sandboxes/vercel-sandbox.d.ts +0 -41
  78. package/dist/src/public/sandboxes/vercel-sandbox.js +0 -1
@@ -1,22 +0,0 @@
1
- import{n as e}from"./chunk-8L7ocgPr.js";import{C as t,T as n,i as r,r as i,w as a}from"./paths-BYIdCNw9.js";import{a as o,i as s,o as c,r as l}from"./authored-module-loader-Pt_g8xX2.js";import{a as u,i as d,n as f,o as p,r as m,t as h}from"./package-DmsQgn4v.js";import{_ as ee,h as g,m as te,p as ne}from"./types-D9Uv7nU4.js";import{a as re,c as ie,n as ae,o as oe,r as se,t as ce}from"./prewarm-DXhyk7i9.js";import{builtinModules as le}from"node:module";import{dirname as _,extname as ue,isAbsolute as de,join as v,relative as y,resolve as b,sep as fe}from"node:path";import{access as pe,cp as x,mkdir as S,readFile as C,readdir as me,realpath as he,rename as ge,rm as w,writeFile as T}from"node:fs/promises";import{randomUUID as _e}from"node:crypto";import{existsSync as ve,readFileSync as ye}from"node:fs";import{fileURLToPath as be}from"node:url";import{build as xe,copyPublicAssets as Se,createDevServer as Ce,createNitro as we,prepare as Te,prerender as Ee}from"nitro/builder";import{Buffer as De}from"node:buffer";const Oe=`ash-cache.json`;async function E(e){let t=await ke(e),n=h().version;t!==null&&t===n||await w(e,{force:!0,recursive:!0})}async function D(e){await S(e,{recursive:!0}),await T(v(e,Oe),`${JSON.stringify({ashVersion:h().version},null,2)}\n`)}async function ke(e){try{let t=JSON.parse(await C(v(e,Oe),`utf8`));return typeof t.ashVersion==`string`?t.ashVersion:null}catch(e){return e instanceof Error&&`code`in e&&e.code,null}}const Ae=new Set([`__builtin_response_array_buffer`,`__builtin_response_json`,`__builtin_response_text`]);async function je(e){if(e.mode===!1)return{code:e.source,workflowManifest:{}};let t=await Me(e.filename,e.source),n=Pe(t);if(n.length===0)return{code:e.source,workflowManifest:{}};let r=e.moduleSpecifier??`./${Ye(e.filename)}`,i={},a=[],o=[],s=!1;for(let t of n){if(t.directive===`use step`){let n=Xe(r,t.name);i.steps??={};let c=i.steps[e.filename]??={};if(c[t.name]={stepId:n},e.mode===`workflow`){let e=t.exportPrefix.length>0?`export `:``;a.push({end:t.rangeEnd,start:t.rangeStart,text:`${e}var ${t.name} = globalThis[Symbol.for("WORKFLOW_USE_STEP")](${JSON.stringify(n)});`})}else a.push({end:t.directiveEnd,start:t.directiveStart,text:``}),e.mode===`step`?(s=!0,o.push(`registerStepFunction(${JSON.stringify(n)}, ${t.name});`)):o.push(`${t.name}.stepId = ${JSON.stringify(n)};`);continue}let n=`workflow//${r}//${t.name}`;i.workflows??={};let c=i.workflows[e.filename]??={};c[t.name]={workflowId:n},e.mode===`workflow`?(a.push({end:t.directiveEnd,start:t.directiveStart,text:``}),o.push(`${t.name}.workflowId = ${JSON.stringify(n)};`),o.push(`globalThis.__private_workflows.set(${JSON.stringify(n)}, ${t.name});`)):(a.push({end:t.directiveEnd,start:t.directiveStart,text:`throw new Error(${JSON.stringify(`You attempted to execute workflow ${t.name} function directly. To start a workflow, use start(${t.name}) from workflow/api`)});`}),o.push(`${t.name}.workflowId = ${JSON.stringify(n)};`))}let c=`/**__internal_workflows${JSON.stringify(i)}*/;`,l=n.some(e=>e.directive===`use workflow`);if(e.mode===`workflow`&&!l)return{code:`${c}\n${Ne(e.source,t,n,r)}`,workflowManifest:i};let u=ze(e.source,a),d=e.mode===`workflow`?await Be(e.filename,u):u;return{code:`${s?`import { registerStepFunction } from "workflow/internal/private";\n${c}\n`:`${c}\n`}${d}${o.length>0?`\n${o.join(`
2
- `)}\n`:``}`,workflowManifest:i}}async function Me(e,t){let{parseAst:n}=await c();return n(t,{astType:`ts`,lang:Je(e),range:!0,sourceType:`module`},e)}function Ne(e,t,n,r){let i=Ve(e,t),a=n.filter(e=>e.directive===`use step`).map(e=>{let t=e.exportPrefix.length>0?`export `:``,n=Xe(r,e.name);return`${t}var ${e.name} = globalThis[Symbol.for("WORKFLOW_USE_STEP")](${JSON.stringify(n)});`}),o=[...i,...a];return o.length>0?`${o.join(`
3
- `)}\n`:``}function Pe(e){let t=[];for(let n of e.body??[]){let e=Fe(n);if(e===null)continue;let r=e.fn,i=r.id?.name,a=Le(r.body);if(r.async!==!0||i===void 0||a===void 0)continue;let o=Re(a[0]);o!==null&&t.push({directive:o.value,directiveEnd:o.end,directiveStart:o.start,exportPrefix:e.exported?`export `:``,name:i,rangeEnd:e.end,rangeStart:e.start})}return t}function Fe(e){return e.type===`FunctionDeclaration`?Ie(e,!1,e):e.type!==`ExportNamedDeclaration`||e.declaration?.type!==`FunctionDeclaration`?null:Ie(e.declaration,!0,e)}function Ie(e,t,n){return e.start===void 0||e.end===void 0||n.start===void 0||n.end===void 0?null:{end:n.end,exported:t,fn:e,start:n.start}}function Le(e){return e===void 0||Array.isArray(e)?e:e.body}function Re(e){let t=e?.directive??(e?.type===`ExpressionStatement`&&e.expression?.type===`Literal`?e.expression.value:void 0);return t!==`use workflow`&&t!==`use step`||e?.start===void 0||e.end===void 0?null:{end:e.end,start:e.start,value:t}}function ze(e,t){let n=``,r=0;for(let i of[...t].sort((e,t)=>e.start-t.start))n+=e.slice(r,i.start),n+=i.text,r=i.end;return n+e.slice(r)}async function Be(e,t){let n=await Me(e,t),r=Ge(n),i=[];for(let e of n.body??[]){if(e.type!==`ImportDeclaration`||e.start===void 0||e.end===void 0)continue;let n=We(e);n.length>0&&n.every(e=>!r.has(e))&&i.push({end:qe(t,e.end),start:e.start,text:``})}return i.length>0?ze(t,i):t}function Ve(e,t){let n=[];for(let r of t.body??[])r.type===`ExportNamedDeclaration`&&r.declaration?.type===`VariableDeclaration`&&r.declaration.kind===`const`&&r.start!==void 0&&r.end!==void 0&&(r.declaration.declarations??[]).every(He)&&n.push(e.slice(r.start,r.end).trim());return n}function He(e){return Ue(e.init)}function Ue(e){return e==null?!1:e.type===`Literal`?e.value===null||typeof e.value==`boolean`||typeof e.value==`number`||typeof e.value==`string`:e.type===`TSAsExpression`||e.type===`TSSatisfiesExpression`||e.type===`TSNonNullExpression`||e.type===`TSTypeAssertion`?Ue(e.expression):e.type===`UnaryExpression`&&e.argument?.type===`Literal`?typeof e.argument.value==`number`:!1}function We(e){return e.importKind===`type`?[]:(e.specifiers??[]).filter(e=>e.importKind!==`type`).map(e=>e.local?.name).filter(e=>e!==void 0)}function Ge(e){let t=new Set;return O(e,e=>{e.type===`Identifier`&&typeof e.name==`string`&&t.add(e.name)}),t}function O(e,t){if(!(e.type===`ImportDeclaration`||e.type?.startsWith(`TS`))){t(e);for(let n of Object.values(e))if(Array.isArray(n))for(let e of n)Ke(e)&&O(e,t);else Ke(n)&&O(n,t)}}function Ke(e){return typeof e==`object`&&!!e&&typeof e.type==`string`}function qe(e,t){let n=t;for(;n<e.length&&(e[n]===` `||e[n]===` `);)n+=1;return e[n]===`\r`&&e[n+1]===`
4
- `?n+2:e[n]===`
5
- `?n+1:n}function Je(e){return e.endsWith(`.tsx`)?`tsx`:e.endsWith(`.jsx`)?`jsx`:/\.[cm]?ts$/.test(e)?`ts`:`js`}function Ye(e){return e.replace(/\.(?:[cm]?[jt]sx?)$/,``)}function Xe(e,t){return Ae.has(t)?t:`step//${e}//${t}`}const Ze={type:`queue/v2beta`,topic:`__wkf_workflow_*`,consumer:`default`,retryAfterSeconds:5,initialDelaySeconds:0},k=new Map,Qe=new Map;async function A(e,t,n,r,i){let a=i??process.cwd(),{moduleSpecifier:o}=tt(r===void 0?de(e)?e:v(a,e):r,a);return je({filename:e,mode:n,moduleSpecifier:o,source:t})}function $e(e){return{hasSerde:e.includes(`workflow.serde`)||e.includes(`@serde`)||e.includes(`workflowSerde`)||e.includes(`__workflow_serde`),hasUseStep:/["']use step["']/.test(e),hasUseWorkflow:/["']use workflow["']/.test(e)}}function et(e,t){let n=N(e),r=!n&&at(e,t);if(n||r){let n=j(e);if(n!==null){let i=it(t).has(n.name);if(!(r||i))return{importPath:P(e,t),isPackage:!1};let a=nt(e,n);return a?{importPath:`${n.name}${a}`,isPackage:!0}:ct(e,n)?{importPath:n.name,isPackage:!0}:{importPath:P(e,t),isPackage:!1}}}return{importPath:P(e,t),isPackage:!1}}function tt(e,t){let n=N(e),r=!n&&at(e,t);if(!n&&!r)return{moduleSpecifier:void 0};let i=j(e);if(i===null)return{moduleSpecifier:void 0};let a=nt(e,i);return{moduleSpecifier:a?`${i.name}${a}@${i.version}`:`${i.name}@${i.version}`}}function j(e){let t=_(e),n=[];for(;t!==_(t);){let e=k.get(t);if(e!==void 0){for(let t of n)k.set(t,e);return e}n.push(t);let r=v(t,`package.json`);if(ve(r))try{let e=JSON.parse(ye(r,`utf8`));if(typeof e.name==`string`&&typeof e.version==`string`){let r={dir:t,exports:e.exports,main:e.main,module:e.module,name:e.name,version:e.version};k.set(t,r);for(let e of n)k.set(e,r);return r}}catch{}t=_(t)}for(let e of n)k.set(e,null);return null}function nt(e,t){if(t.exports===null||typeof t.exports!=`object`||Array.isArray(t.exports))return``;let n=e.replace(/\\/g,`/`),r=t.dir.replace(/\\/g,`/`),i=n.startsWith(`${r}/`)?`./${n.substring(r.length+1)}`:null;if(i===null)return``;for(let[e,n]of Object.entries(t.exports)){let t=M(n);if(t!==null&&rt(t)===i)return e===`.`?``:e.substring(1)}return``}function M(e){if(typeof e==`string`)return e;if(Array.isArray(e)){for(let t of e){let e=M(t);if(e!==null)return e}return null}if(typeof e==`object`&&e)for(let t of[`workflow`,`default`,`require`,`import`,`node`]){let n=e[t],r=M(n);if(r!==null)return r}return null}function rt(e){return e.startsWith(`./`)?e:`./${e}`}function N(e){return e.split(fe).join(`/`).includes(`/node_modules/`)}function it(e){let t=Qe.get(e);if(t!==void 0)return t;let n=new Set,r=v(e,`package.json`);if(ve(r))try{let e=JSON.parse(ye(r,`utf8`));for(let t of[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`]){let r=e[t];if(typeof r==`object`&&r&&!Array.isArray(r))for(let e of Object.keys(r))n.add(e)}}catch{}return Qe.set(e,n),n}function at(e,t){if(N(e))return!1;let n=j(e);return n===null||b(n.dir)===b(t)?!1:it(t).has(n.name)}function P(e,t){let n=t.replace(/\\/g,`/`),r=e.replace(/\\/g,`/`),i=r.startsWith(`${n}/`)?r.substring(n.length+1):y(t,e).replace(/\\/g,`/`);return i.startsWith(`.`)||(i=`./${i}`),i}function ot(e){if(typeof e==`string`||Array.isArray(e))return!0;if(typeof e!=`object`||!e)return!1;let t=Object.keys(e);return t.length>0&&t.every(e=>!e.startsWith(`.`))?!0:`.`in e}function st(e){let t=e.replace(/\\/g,`/`);return t.startsWith(`./`)?t.substring(2):t.startsWith(`/`)?t.substring(1):t}function ct(e,t){let n=e.replace(/\\/g,`/`),r=t.dir.replace(/\\/g,`/`);if(!n.startsWith(`${r}/`))return!1;let i=n.substring(r.length+1);if(t.exports!==void 0){let e;if(t.exports!==null&&typeof t.exports==`object`&&`.`in t.exports)e=t.exports[`.`];else if(ot(t.exports))e=t.exports;else return!1;let n=M(e);return n!==null&&st(n)===i}return[t.module,t.main,`index.js`,`index.mjs`,`index.cjs`,`index.ts`,`index.mts`,`index.cts`].flatMap(e=>typeof e==`string`?[st(e)]:[]).includes(i)}const lt=`\0ash-workflow-entry`,ut=new Set([`server-only`,`client-only`,`next/dist/compiled/server-only`,`next/dist/compiled/client-only`]);new Set([...le,...le.map(e=>`node:${e}`)]);const dt=new Set([`.ts`,`.tsx`,`.mts`,`.cts`,`.js`,`.jsx`,`.mjs`,`.cjs`]),ft=new Set([`node_modules`,`.git`,`.next`,`.nuxt`,`.output`,`.vercel`,`.workflow-data`,`.workflow-vitest`,`.well-known`,`.svelte-kit`,`.turbo`,`.cache`,`.yarn`,`.pnpm-store`]);async function pt(e){let t=[];async function n(e){let r;try{r=await me(e,{withFileTypes:!0})}catch(e){if(e instanceof Error&&`code`in e&&e.code===`ENOENT`)return;throw e}for(let i of r){if(i.isDirectory()){ft.has(i.name)||await n(v(e,i.name));continue}if(!i.isFile())continue;let r=i.name.match(/\.[^.]+$/)?.[0];r!==void 0&&dt.has(r)&&t.push(v(e,i.name))}}return await n(e),t}function mt(e,t){let{importPath:n,isPackage:r}=et(e,t);return r?`import ${JSON.stringify(n)};`:`import ${JSON.stringify(Ct(t,e))};`}function ht(e){return{name:`ash-workflow-virtual-entry`,resolveId(e){if(e===`\0ash-workflow-entry`)return{id:e}},load(t){if(t===`\0ash-workflow-entry`)return{code:e,moduleSideEffects:!0,moduleType:`js`}}}}function gt(){return{name:`ash-workflow-pseudo-packages`,resolveId(e){if(ut.has(e))return{id:`\0ash-workflow-pseudo-package:${e}`}},load(e){if(e.startsWith(`\0ash-workflow-pseudo-package:`))return{code:``,moduleType:`js`}}}}function _t(e,t={}){return{name:`ash-package-imports`,resolveId(n){let r=n.match(/^#compiled\/(.+)$/)?.[1];if(r!==void 0)return t.workflowCondition===!0&&r===`@workflow/core/index.js`?F([v(e,`src`,`internal`,`workflow-bundle`,`workflow-core-shim.ts`),v(e,`dist`,`src`,`internal`,`workflow-bundle`,`workflow-core-shim.js`)]):F([v(e,`.generated`,`compiled`,r),v(e,`dist`,`src`,`compiled`,r)]);let i=n.match(/^#(.+)\.js$/)?.[1];if(i!==void 0)return F([`.ts`,`.tsx`,`.mts`,`.cts`,`.js`,`.jsx`,`.mjs`,`.cjs`].flatMap(t=>[v(e,`src`,`${i}${t}`),v(e,`dist`,`src`,`${i}${t}`)]))}}}function vt(e){let t=new Set(e.sideEffectFiles?.map(e=>e.replaceAll(`\\`,`/`))??[]);return{name:`ash-workflow-transform`,async load(n){if(!Dt(n))return;let r=await C(n,`utf8`),i=await A(Et(e.workingDir,n),r.replace(/require\(\s*(['"])server-only\1\s*\)/g,`void 0`).replace(/require\(\s*(['"])client-only\1\s*\)/g,`void 0`),e.mode??`workflow`,n,e.projectRoot);return Tt(e.manifest,i.workflowManifest),{code:i.code,map:null,moduleSideEffects:t.has(n.replaceAll(`\\`,`/`))||void 0}}}}async function yt(e){let t=`// biome-ignore-all lint: generated file
6
- /* eslint-disable */
7
- import { workflowEntrypoint } from 'workflow/runtime';
8
-
9
- const workflowCode = \`${(e.code.endsWith(`
10
- `)?e.code:`${e.code}\n`).replace(/[\\`$]/g,`\\$&`)}\`;
11
-
12
- export const POST = workflowEntrypoint(workflowCode);`;if(!e.bundleFinalOutput){await wt(e.outfile,t);return}let n=o(await s({cwd:e.workingDir,input:lt,external:e=>e===`@aws-sdk/credential-provider-web-identity`,platform:`node`,plugins:[ht(t)],write:!1,output:{comments:!1,format:e.format,sourcemap:!1}}),`final workflow bundle for "${e.outfile}"`);await wt(e.outfile,n.code)}function bt(e){let t={};for(let[n,r]of Object.entries(e??{})){t[n]={};for(let[e,i]of Object.entries(r))t[n][e]={stepId:i.stepId}}return t}function xt(e){let t={};for(let[n,r]of Object.entries(e??{})){t[n]={};for(let[e,i]of Object.entries(r))t[n][e]={graph:{edges:[],nodes:[]},workflowId:i.workflowId}}return t}function St(e){let t={};for(let[n,r]of Object.entries(e??{})){t[n]={};for(let[e,i]of Object.entries(r))t[n][e]={classId:i.classId}}return t}function Ct(e,t){let n=y(e,t).replaceAll(`\\`,`/`);return n.startsWith(`./`)||n.startsWith(`../`)?n:`./${n}`}function F(e){for(let t of e)if(ve(t))return{id:b(t)}}async function wt(e,t){await S(_(e),{recursive:!0});let n=`${e}.${process.pid}.${Date.now()}.tmp`;await T(n,t),await ge(n,e)}function Tt(e,t){e.steps=I(e.steps,t.steps),e.workflows=I(e.workflows,t.workflows),e.classes=I(e.classes,t.classes)}function I(e,t){if(t===void 0)return e;let n={...e};for(let[e,r]of Object.entries(t))n[e]={...n[e],...r};return n}function Et(e,t){let n=t.replaceAll(`\\`,`/`),r=y(e.replaceAll(`\\`,`/`),n).replaceAll(`\\`,`/`);return r.startsWith(`../`)&&(r=r.split(`/`).filter(e=>e!==`..`).join(`/`)),r}function Dt(e){return/\.(?:[cm]?[jt]sx?)$/.test(e)}async function Ot(e){let t=[...e.discoveredEntries.discoveredSteps].sort(),n=new Set(t),r=[...e.discoveredEntries.discoveredSerdeFiles].sort().filter(e=>!n.has(e)),i=await At({projectRoot:e.projectRoot,stepFiles:t,serdeOnlyFiles:r,workingDir:e.workingDir}),a=_(e.outfile),o=[`// Generated by Ash. Do not edit by hand.`,...kt({builtinsImportSpecifier:e.builtinsPath===void 0?`workflow/internal/builtins`:L({outfileDirectory:a,preferAbsoluteFileImports:e.preferAbsoluteFileImports??!1,targetPath:e.builtinsPath}),outfileDirectory:a,preferAbsoluteFileImports:e.preferAbsoluteFileImports??!1,serdeOnlyFiles:r,stepFiles:t}),`export const __steps_registered = true;`,``].join(`
13
- `);return await S(a,{recursive:!0}),await Pt(e.outfile)!==o&&await T(e.outfile,o),i}function kt(e){return[e.builtinsImportSpecifier,...e.stepFiles.map(t=>L({outfileDirectory:e.outfileDirectory,preferAbsoluteFileImports:e.preferAbsoluteFileImports,targetPath:t})),...e.serdeOnlyFiles.map(t=>L({outfileDirectory:e.outfileDirectory,preferAbsoluteFileImports:e.preferAbsoluteFileImports,targetPath:t}))].map(e=>`import ${JSON.stringify(e)};`)}function L(e){return e.preferAbsoluteFileImports?t(e.targetPath):Nt(e.outfileDirectory,e.targetPath)}async function At(e){let t={},n=[...e.stepFiles,...e.serdeOnlyFiles];for(let r of n){let n=await C(r,`utf8`);jt(t,(await A(Mt(e.workingDir,r),n,`step`,r,e.projectRoot)).workflowManifest)}return t}function jt(e,t){e.steps=R(e.steps,t.steps),e.workflows=R(e.workflows,t.workflows),e.classes=R(e.classes,t.classes)}function R(e,t){if(t===void 0)return e;let n={...e};for(let[e,r]of Object.entries(t))n[e]={...n[e],...r};return n}function Mt(e,t){let n=t.replaceAll(`\\`,`/`),r=y(e.replaceAll(`\\`,`/`),n).replaceAll(`\\`,`/`);return r.startsWith(`../`)&&(r=r.split(`/`).filter(e=>e!==`..`).join(`/`)),r}function Nt(e,t){let n=y(e,t).replaceAll(`\\`,`/`);return n.startsWith(`.`)?n:`./${n}`}async function Pt(e){try{return await C(e,`utf8`)}catch(e){if(e instanceof Error&&`code`in e&&e.code===`ENOENT`)return null;throw e}}const Ft=[`@mongodb-js/zstd`,`node-liblzma`],It=[`@chat-adapter/slack`,`chat`];function Lt(e){let t={};return Rt(e)&&Object.assign(t,e),t.NODE_OPTIONS=`--experimental-require-module`,t}function Rt(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}async function zt(e){await w(e,{force:!0,recursive:!0}),await S(e,{recursive:!0})}async function Bt(e){try{return await he(e.sourcePath)}catch{return await he(e.fallbackPath)}}async function Vt(e){let t=await Bt({fallbackPath:e.fallbackPath,sourcePath:e.sourcePath});await zt(e.targetPath),await x(t,e.targetPath,{dereference:!0,recursive:!0})}function Ht(e){let t=y(e.fromDirectoryPath,e.toFilePath).replaceAll(`\\`,`/`);return t.startsWith(`.`)?t:`./${t}`}function Ut(e){return[`import nitroHandler from ${JSON.stringify(e.delegateImportPath)};`,``,`function invokeNitroHandler(request, context) {`,` if (typeof nitroHandler === "function") {`,` return nitroHandler(request, context);`,` }`,``,` if (nitroHandler !== null && typeof nitroHandler === "object" && "fetch" in nitroHandler) {`,` const fetch = nitroHandler.fetch;`,` if (typeof fetch === "function") {`,` return fetch.call(nitroHandler, request, context);`,` }`,` }`,``,` throw new TypeError("Expected Nitro handler to export a function or an object with fetch(request, context).");`,`}`,``,`const workflowRoutePath = ${JSON.stringify(e.workflowRoutePath)};`,``,`function rewriteRequestToWorkflowRoute(request) {`,` const sourceUrl = new URL(request.url);`,` const routedUrl = new URL(workflowRoutePath, sourceUrl);`,` routedUrl.search = sourceUrl.search;`,` return new Request(routedUrl, request);`,`}`,``,`export default {`,` fetch(request, context) {`,` return invokeNitroHandler(rewriteRequestToWorkflowRoute(request), context);`,` },`,`};`,``].join(`
14
- `)}async function Wt(e){try{let t=JSON.parse(await C(v(e,`.vc-config.json`),`utf8`));if(typeof t.handler==`string`&&t.handler.length>0)return t.handler}catch{}return`index.mjs`}async function Gt(e){let t=await Wt(e.functionDirectoryPath),n=v(e.functionDirectoryPath,t),r=_(n),i=ue(t),a=v(r,`__ash_nitro_handler__${i.length>0?i:`.mjs`}`),o=Ht({fromDirectoryPath:r,toFilePath:a});await ge(n,a),await T(n,Ut({delegateImportPath:o,workflowRoutePath:e.workflowRoutePath}))}const Kt=new Map;var qt=class{#e;#t;config;#n=new WeakMap;constructor(e){this.config={buildTarget:`standalone`,dirs:[m(`src/execution`)],externalPackages:[...Ft,...It],projectRoot:e.appRoot,watch:e.watch,workingDir:e.rootDir},this.#e=e.compiledArtifactsBootstrapPath,this.#t=e.outDir}async build(e={}){let t=(Kt.get(this.#t)??Promise.resolve()).then(()=>this.#r(e));Kt.set(this.#t,t.catch(()=>{})),await t}async#r(e){await E(this.#t);let t=await this.#i();if(t.length===0)throw Error(`Expected the execution workflow source file under "${m(`src/execution`)}".`);let n=await this.findTsConfigPath();await S(this.#t,{recursive:!0});let r=await this.discoverEntries(t,this.#t,n),i=v(this.#t,`workflows.mjs`),{manifest:a}=await this.createWorkflowsBundle({discoveredEntries:r,keepInterimBundleContext:!1,outfile:i,bundleFinalOutput:!1,format:`esm`,inputFiles:t,tsconfigPath:n}),o=v(this.#t,`steps.mjs`),s=await Ot({builtinsPath:u(`workflow/internal/builtins`),discoveredEntries:r,outfile:o,preferAbsoluteFileImports:!0,projectRoot:this.config.projectRoot??this.config.workingDir,workingDir:this.config.workingDir}),c=e.nitroStepOutfile;c!==void 0&&c!==o&&await Ot({builtinsPath:u(`workflow/internal/builtins`),discoveredEntries:r,outfile:c,preferAbsoluteFileImports:!0,projectRoot:this.config.projectRoot??this.config.workingDir,workingDir:this.config.workingDir}),await Jt(i,o),await Yt(i),await Xt(i);let l=e.nitroWorkflowOutfile;l!==void 0&&l!==i&&(await S(_(l),{recursive:!0}),await rn(i,l),c!==void 0&&(await Jt(l,c),await Yt(l),await Xt(l))),await this.createManifest({workflowBundlePath:v(this.#t,`workflows.mjs`),manifestDir:this.#t,manifest:{steps:{...s.steps,...a.steps},workflows:{...s.workflows,...a.workflows},classes:{...s.classes,...a.classes}}}),await D(this.#t)}get transformProjectRoot(){return this.config.projectRoot??this.config.workingDir}async findTsConfigPath(){let e=this.config.workingDir;for(;;){for(let t of[`tsconfig.json`,`jsconfig.json`]){let n=v(e,t);try{return await C(n),n}catch(e){if(!(e instanceof Error&&`code`in e&&e.code===`ENOENT`))throw e}}let t=_(e);if(t===e)return;e=t}}async getInputFiles(){let e=this.config.dirs.map(e=>b(this.config.workingDir,e));return(await Promise.all(e.map(e=>pt(e)))).flat()}async discoverEntries(e,t,n){let r=this.#n.get(e);if(r!==void 0)return r;let i={discoveredSerdeFiles:[],discoveredSteps:[],discoveredWorkflows:[]};for(let t of e){let e=$e(await C(t,`utf8`));e.hasUseStep&&i.discoveredSteps.push(t),e.hasUseWorkflow&&i.discoveredWorkflows.push(t),e.hasSerde&&i.discoveredSerdeFiles.push(t)}return this.#n.set(e,i),i}async createWorkflowsBundle({bundleFinalOutput:e=!0,discoveredEntries:t,format:n=`cjs`,inputFiles:r,keepInterimBundleContext:i=this.config.watch,outfile:a,tsconfigPath:c}){let l=t??await this.discoverEntries(r,_(a),c),u=[...l.discoveredWorkflows].sort(),d=new Set(u),f=[...l.discoveredSerdeFiles].sort().filter(e=>!d.has(e)),p={},m=[...u.map(e=>mt(e,this.config.workingDir)),...f.map(e=>mt(e,this.config.workingDir))].join(`
15
- `);return await yt({bundleFinalOutput:e,code:o(await s({cwd:this.config.workingDir,input:lt,platform:`neutral`,plugins:[ht(m),gt(),_t(this.config.workingDir,{workflowCondition:!0}),vt({manifest:p,projectRoot:this.transformProjectRoot,sideEffectFiles:[...u,...f],workingDir:this.config.workingDir})],resolve:{conditionNames:[`ash-source`,`workflow`,`node`,`import`,`default`],extensions:[`.ts`,`.tsx`,`.mts`,`.cts`,`.js`,`.jsx`,`.mjs`,`.cjs`],mainFields:[`module`,`main`]},tsconfig:c??!1,write:!1,output:{banner:`globalThis.__private_workflows = new Map();`,codeSplitting:!1,comments:!1,format:`cjs`,sourcemap:`inline`}}),`intermediate workflow bundle for "${a}"`).code,format:n,outfile:a,workingDir:this.config.workingDir}),i?{bundleFinal:async t=>{await yt({bundleFinalOutput:e,code:t,format:n,outfile:a,workingDir:this.config.workingDir})},interimBundleCtx:void 0,manifest:p}:{manifest:p}}async createManifest({manifest:e,manifestDir:t}){let n={version:`1.0.0`,steps:bt(e.steps),workflows:xt(e.workflows),classes:St(e.classes)},r=JSON.stringify(n,null,2);return await S(t,{recursive:!0}),await T(v(t,`manifest.json`),r),r}async buildVercelOutput(e){await this.build();let t=v(this.#t,`vercel-build-output`,`functions`,`.well-known`,`workflow`,`v1`),n=v(t,`flow.func`),r=v(e.outputDir,`functions`,`.well-known`,`workflow`,`v1`),i=v(e.flowNitroOutputDir,`functions`,`__server.func`),a=v(e.flowNitroOutputDir,`functions`,`.well-known`,`workflow`,`v1`,`flow.func`),o=v(r,`flow.func`),s=v(r,`step.func`),c=v(r,`webhook`,`[token].func`);await Vt({fallbackPath:i,sourcePath:a,targetPath:n}),await Promise.all([this.#a(n,{experimentalTriggers:Array.from([Ze]),maxDuration:`max`,runtime:e.runtime??null,shouldAddHelpers:!1}),x(v(this.#t,`manifest.json`),v(t,`manifest.json`))]),await Gt({functionDirectoryPath:n,workflowRoutePath:`/.well-known/workflow/v1/flow`}),await Promise.all([w(o,{force:!0,recursive:!0}),w(s,{force:!0,recursive:!0}),w(c,{force:!0,recursive:!0})]),await S(r,{recursive:!0}),await Promise.all([x(n,o,{recursive:!0}),x(v(t,`manifest.json`),v(r,`manifest.json`))])}async#i(){return[...await this.getInputFiles(),this.#e]}async#a(e,t){let n=v(e,`.vc-config.json`),r=await this.#o(n),i={...r};i.environment=Lt(r.environment),t.runtime!==null&&(i.runtime=t.runtime),t.maxDuration!==void 0&&(i.maxDuration=t.maxDuration),t.shouldAddHelpers!==void 0&&(i.shouldAddHelpers=t.shouldAddHelpers),t.shouldAddSourcemapSupport!==void 0&&(i.shouldAddSourcemapSupport=t.shouldAddSourcemapSupport),t.experimentalTriggers!==void 0&&(i.experimentalTriggers=[...t.experimentalTriggers]),await T(n,`${JSON.stringify(i,null,2)}\n`)}async#o(e){try{let t=JSON.parse(await C(e,`utf8`));if(typeof t==`object`&&t)return t}catch{}return{}}};async function Jt(e,t){let n=await z(e);if(n===null||n.includes(`__ashWorkflowStepsRegistered`))return;let r=tn(_(e),t),i=[`import { __steps_registered as __ashWorkflowStepsRegistered } from ${JSON.stringify(r)};`,`void __ashWorkflowStepsRegistered;`,``].join(`
16
- `),a=n.match(/^import\s.+?;\n/m);if(a===null||a.index===void 0){await T(e,`${i}${n}`);return}let o=a.index+a[0].length;await T(e,`${n.slice(0,o)}${i}${n.slice(o)}`)}async function Yt(e){let t=await z(e);if(t===null)return;let n=t;for(let e of[`workflow`,`workflow/api`,`workflow/internal/builtins`,`workflow/internal/private`,`workflow/runtime`]){let t=en(u(e));n=$t(n,e,t)}n!==t&&await T(e,n)}async function Xt(e){let t=await z(e);if(t===null)return;let n=t.indexOf(`const workflowCode = `),r=t.lastIndexOf(`;
17
-
18
- export const POST = workflowEntrypoint(workflowCode);`);if(n===-1||r===-1||r<=n)return;let i=n+21,a=t.slice(i,r);if(!a.trimStart().startsWith("`"))return;let o=Qt(a,e),s=`${t.slice(0,i)}${Zt(o)}${t.slice(r)}`;s!==t&&await T(e,s)}function Zt(e){let t=De.from(e,`utf8`).toString(`base64`).match(/.{1,16384}/g)??[``];return`Buffer.from(${JSON.stringify(t)}.join(""), "base64").toString("utf8")`}function Qt(e,t){let n=e.trim();if(!n.startsWith("`")||!n.endsWith("`"))throw Error(`Expected generated workflow code literal in "${t}" to be a template.`);let r=n.slice(1,-1),i=``;for(let e=0;e<r.length;e+=1){let t=r[e];if(t!==`\\`){i+=t;continue}let n=r[e+1];if(n===`\\`||n==="`"||n===`$`){i+=n,e+=1;continue}i+=t}return i}function $t(e,t,n){return e.replaceAll(JSON.stringify(t),JSON.stringify(n)).replaceAll(`'${t}'`,JSON.stringify(n))}function en(e){return t(e)}function tn(e,t){let n=y(e,t).replaceAll(`\\`,`/`);return n.startsWith(`.`)?n:`./${n}`}async function z(e){try{return await C(e,`utf8`)}catch(e){if(e instanceof Error&&`code`in e&&e.code===`ENOENT`)return null;throw e}}async function nn(e){try{return await C(e)}catch(e){if(e instanceof Error&&`code`in e&&e.code===`ENOENT`)return null;throw e}}async function rn(e,t){let n=await C(e),r=await nn(t);r!==null&&r.equals(n)||await T(t,n)}const an=`\0ash-pruned-local-sandbox-backend`,on=/[/\\]bindings[/\\]local\.js$/;function sn(){return{name:`ash-hosted-sandbox-backend-prune`,load(e){return e===an?[`export function createLocalSandboxBackend() {`,` throw new Error("The local sandbox backend is pruned from hosted server bundles.");`,`}`,``].join(`
19
- `):null},resolveId(e){return on.test(e)?an:null}}}function cn(e){return e===`all`||e===`app`}function ln(e){return B(e)}function B(e){return e===`all`||e===`flow`}function V(e,t){let r=`#ash-route-handler/${t.method??`ALL`} ${t.route}`,i=n(t.handlerPath);e.options.handlers.push({handler:r,method:t.method,route:t.route}),e.options.virtual[r]=[`import handler from ${i};`,`export default handler;`].join(`
20
- `)}function H(e){return v(e.options.buildDir,`workflow`)}function un(e,t){let n=y(e,t).replaceAll(`\\`,`/`);return n.startsWith(`.`)?n:`./${n}`}async function dn(e,t){let n=v(H(e),`${t.bundleName}-handler.mjs`),r=_(n),i=un(r,t.bundlePath),a=(t.directHandlers??[]).map(e=>{let t=un(r,e.bundlePath);return{importSpecifier:t,isOwnBundle:t===i,queuePrefix:e.queuePrefix}});await S(r,{recursive:!0}),await T(n,fn({bundlePath:i,directHandlers:a,runtimeImportSpecifier:t.runtimeImportSpecifier})),e.options.handlers.push({handler:n,route:t.route})}function fn(e){let t=[`// Generated by Ash. Do not edit by hand.`,`import { POST } from ${JSON.stringify(e.bundlePath)};`];if(e.directHandlers.length>0&&e.runtimeImportSpecifier!==void 0){let n=0,r=e.directHandlers.map(e=>{if(e.isOwnBundle)return{...e,binding:`POST`};let t=`__ashWorkflowDirectHandler${n}`;return n+=1,{...e,binding:t}});for(let e of r)e.isOwnBundle||t.push(`import { POST as ${e.binding} } from ${JSON.stringify(e.importSpecifier)};`);t.push(`import { getWorld as __ashGetWorkflowWorld } from ${JSON.stringify(e.runtimeImportSpecifier)};`,``,`try {`,` const __ashWorkflowWorld = __ashGetWorkflowWorld();`,` if (typeof __ashWorkflowWorld?.registerHandler === "function") {`);for(let e of r)t.push(` __ashWorkflowWorld.registerHandler(${JSON.stringify(e.queuePrefix)}, ${e.binding});`);t.push(` }`,`} catch (err) {`,` console.warn("[ash] Failed to register direct workflow queue handlers:", err);`,`}`)}return t.push(``,`export default async ({ req }) => {`,` return await POST(req);`,`};`,``),t.join(`
21
- `)}function pn(e,t){let r=`#ash-route${t.route}`,i=n(t.modulePath);e.options.handlers.push({handler:r,method:t.method,route:t.route}),e.options.virtual[r]=[`import { ${t.handlerExport} } from ${i};`,`export default () => ${t.handlerExport}(${t.args});`].join(`
22
- `)}async function mn(e,n,r){if(ln(r.surface)){let t=f(),i=new qt({appRoot:n.appRoot,compiledArtifactsBootstrapPath:n.compiledArtifacts.bootstrapPath,outDir:n.workflowBuildDir,rootDir:t,watch:e.options.dev}),a=Promise.resolve(),o=async()=>{await i.build({nitroStepOutfile:B(r.surface)?v(H(e),`steps.mjs`):void 0,nitroWorkflowOutfile:e.options.dev&&B(r.surface)?v(H(e),`workflows.mjs`):void 0})},s=async()=>{let e=a.then(o);a=e.catch(()=>{}),await e},c=!0;await s(),e.hooks.hook(`build:before`,async()=>{if(c){c=!1;return}await s()}),e.options.dev&&e.hooks.hook(`dev:reload`,async()=>{await s()})}let i=ie({appRoot:n.appRoot,dev:e.options.dev});cn(r.surface)&&(pn(e,{args:JSON.stringify({homePageHtml:r.homePageHtml}),handlerExport:`handleHomePageRequest`,method:`GET`,modulePath:d(`src/internal/nitro/routes/index.ts`),route:`/`}),pn(e,{args:JSON.stringify({appRoot:i.appRoot}),handlerExport:`handleHomePageDataRequest`,method:`GET`,modulePath:d(`src/internal/nitro/routes/home.ts`),route:g}),V(e,{handlerPath:d(`src/internal/nitro/routes/health.ts`),method:`GET`,route:ne}),V(e,{handlerPath:d(`src/internal/nitro/routes/workflow-runs.ts`),method:`GET`,route:`/api/runs`}),V(e,{handlerPath:d(`src/internal/nitro/routes/workflow-run.ts`),method:`GET`,route:`/api/runs/:runId`}),V(e,{handlerPath:d(`src/internal/nitro/routes/workflow-run-steps.ts`),method:`GET`,route:`/api/runs/:runId/steps`}),V(e,{handlerPath:d(`src/internal/nitro/routes/workflow-run-events.ts`),method:`GET`,route:`/api/runs/:runId/events`}),oe(e,{artifactsConfig:i,registrations:re(n)}));let a=H(e),o=B(r.surface)?e.options.dev?v(a,`workflows.mjs`):v(n.workflowBuildDir,`workflows.mjs`):void 0,s=e.options.dev&&o!==void 0?[{bundlePath:o,queuePrefix:`__wkf_workflow_`}]:[],c=s.length>0?t(u(`workflow/runtime`)):void 0;o&&await dn(e,{bundleName:`workflows`,bundlePath:o,directHandlers:s,route:`/.well-known/workflow/v1/flow`,runtimeImportSpecifier:c}),e.routing.sync()}function hn(){return`${ee}/cron/${_e()}`}function gn(e){e.options.vercel!==void 0&&(e.options.vercel.cronHandlerRoute=hn())}async function _n(e){try{return await pe(e),!0}catch{return!1}}async function vn(){let e=m(`src/internal/nitro/routes/web-ui`),t=v(f(),`..`,`web`,`dist`);for(let n of[e,t]){let e=v(n,`index.html`);if(await _n(e))return{assetsDirectoryPath:n,homePageHtml:await C(e,`utf8`)}}throw Error("Missing built Ash web UI assets. Run `pnpm --filter experimental-ash-web build` and rebuild `experimental-ash`.")}function yn(e){return{plugins:[l(),...e]}}function bn(e){e.hooks.hook(`rollup:before`,(e,t)=>{Array.isArray(t.plugins)&&t.plugins.unshift({name:`ash:nitro-routing-import-specifiers`,transform(e,t){if(t!==`#nitro/virtual/routing`&&t!==`#nitro/virtual/routing-meta`)return null;let n=a(e);return n===e?null:{code:n,map:null}}})})}const xn=`@alinea/generated.@appsignal/nodejs.@aws-sdk/client-s3.@aws-sdk/s3-presigned-post.@blockfrost/blockfrost-js.@highlight-run/node.@huggingface/transformers.@jpg-store/lucid-cardano.@libsql/client.@mikro-orm/core.@mikro-orm/knex.@node-rs/argon2.@node-rs/bcrypt.@prisma/client.@react-pdf/renderer.@sentry/profiling-node.@sparticuz/chromium.@sparticuz/chromium-min.@statsig/statsig-node-core.@swc/core.@xenova/transformers.@zenstackhq/runtime.argon2.autoprefixer.aws-crt.bcrypt.better-sqlite3.canvas.chromadb-default-embed.config.cpu-features.cypress.dd-trace.eslint.express.firebase-admin.htmlrewriter.import-in-the-middle.isolated-vm.jest.jsdom.keyv.libsql.mdx-bundler.mongodb.mongoose.newrelic.next-mdx-remote.next-seo.node-cron.node-pty.node-web-audio-api.onnxruntime-node.oslo.pg.pino.pino-pretty.pino-roll.playwright.playwright-core.postcss.prettier.prisma.puppeteer.puppeteer-core.ravendb.require-in-the-middle.rimraf.sharp.shiki.sqlite3.thread-stream.ts-morph.ts-node.typescript.vscode-oniguruma.webpack.websocket.zeromq`.split(`.`);function Sn(e){if(e)return{config:{version:3,framework:{version:h().version}}}}const Cn=[`workflow`,`workflow/api`,`workflow/errors`,`workflow/internal/builtins`,`workflow/internal/private`,`workflow/runtime`],wn=Symbol(`ash.workflow-transform-patched`),Tn=[`@napi-rs/keyring`];function En(){let e={};for(let t of Cn)e[t]=u(t);return e}function Dn(e){if(!e&&process.env.VERCEL)return`vercel`}function U(e){return e===`all`||e===`app`}function W(e){return e===`all`||e===`flow`}function G(e){return W(e)}function On(e,t){return e.options.dev?v(e.options.buildDir,`workflow`,`steps.mjs`):v(t.workflowBuildDir,`steps.mjs`)}function kn(e){let t=e.compileResult.manifest.config.build;return[...new Set([...Tn,...xn,...t?.externalDependencies??[]])].filter(e=>e!==p)}function K(e){return e.replaceAll(`\\`,`/`)}function q(e){let t=e.indexOf(`?`),n=e.indexOf(`#`),r=t===-1?n:n===-1?t:Math.min(t,n);return r===-1?e:e.slice(0,r)}function J(e){return e.startsWith(`/@fs/`)?e.slice(4):e}function Y(e,t){return t.startsWith(`file://`)?K(J(q(be(t)))):de(t)?K(J(q(t))):K(J(q(b(e,t))))}function An(e,t){let n=K(e);return n.startsWith(t)||n.includes(`/.ash/workflow-cache/`)}function jn(e){let t=K(e);return process.platform===`win32`?t.toLowerCase():t}function Mn(e){let t=/^\s*import\s+(?:.+?\s+from\s+)?["']([^"']+)["'];?\s*$/gm,n=[];for(let r of e.matchAll(t)){let e=r[1];e!==void 0&&n.push(e)}return n}function Nn(e,t,n){return t.startsWith(`workflow`)?u(t):t.startsWith(`.`)||t.startsWith(`/`)||t.startsWith(`file://`)?Y(n===void 0?e:_(Y(e,n)),t):null}async function Pn(e,t){let n=await C(e,`utf8`),r=new Set;for(let i of Mn(n)){let n=Nn(t,i,e);n!==null&&r.add(jn(n))}return r}async function Fn(e,t){if(e.options.noExternals===!0)return;let n;try{n=await Pn(t,e.options.rootDir)}catch(e){if(e instanceof Error&&`code`in e&&e.code===`ENOENT`)return;throw e}let r=Array.isArray(e.options.noExternals)?[...e.options.noExternals]:[];e.options.noExternals=[...new Set([...r,...n])]}function In(e,t){let n=K(e).replace(/\/$/,``),r=K(t),i=n.toLowerCase(),a=r.toLowerCase();if(a.startsWith(`${i}/`))return r.slice(n.length+1);if(a===i)return`.`;let o=y(n,r).replaceAll(`\\`,`/`);if(o.startsWith(`../`)&&(o=o.split(`/`).filter(e=>e!==`..`).join(`/`)),o.includes(`:`)||o.startsWith(`/`)){let e=r.split(`/`).pop();return e===void 0||e.length===0?`unknown.ts`:e}return o}function Ln(e,t){let n=[t,v(e.options.buildDir,`workflow`)].map(t=>Y(e.options.rootDir,t));e.hooks.hook(`rollup:before`,(t,r)=>{Array.isArray(r.plugins)&&r.plugins.unshift({name:`ash:workflow-module-side-effects`,resolveId(t,r){let i=Nn(e.options.rootDir,t,r)??Y(e.options.rootDir,t);return n.some(e=>An(i,e))?{id:i,moduleSideEffects:`no-treeshake`}:null}})})}function Rn(e,t){let n=null,r=async()=>(n===null&&(n=await Pn(t.stepEntrypointPath,e.options.rootDir)),n);e.hooks.hook(`build:before`,()=>{n=null}),e.options.dev&&e.hooks.hook(`dev:reload`,()=>{n=null}),e.hooks.hook(`rollup:before`,(t,n)=>{Array.isArray(n.plugins)&&n.plugins.unshift({name:`ash:workflow-step-module-side-effects`,async resolveId(t,n){let i=Nn(e.options.rootDir,t,n);return i===null||!(await r()).has(jn(i))?null:{id:i,moduleSideEffects:`no-treeshake`}}})})}function zn(e,t){let n=null,r=async()=>(n===null&&(n=await Pn(t.stepEntrypointPath,e.options.rootDir)),n);e.hooks.hook(`build:before`,()=>{n=null}),e.options.dev&&e.hooks.hook(`dev:reload`,()=>{n=null}),e.hooks.hook(`rollup:before`,(t,n)=>{Array.isArray(n.plugins)&&n.plugins.unshift({async transform(t,n){let i=await r(),a=Y(e.options.rootDir,n);return i.has(jn(a))?{code:(await A(In(e.options.rootDir,a),t,`step`,a,e.options.rootDir)).code,map:null}:null},name:`ash:workflow-step-transform`})})}function Bn(e,t){let n=K(t);e.hooks.hook(`rollup:before`,(e,t)=>{Array.isArray(t.plugins)&&t.plugins.unshift({name:`ash:instrumentation-module-side-effects`,resolveId(e){return K(e)===n?{id:e,moduleSideEffects:`no-treeshake`}:null}})})}function Vn(e,t){let n=K(t);e.hooks.hook(`rollup:before`,(e,t)=>{if(Array.isArray(t.plugins))for(let e of t.plugins){if(typeof e!=`object`||!e)continue;let t=e;if(t.name!==`workflow:transform`||t[wn]===!0||typeof t.transform!=`function`)continue;let r=t.transform;t.transform=function(e,t,...i){return An(t,n)?null:r.call(this,e,t,...i)},t[wn]=!0}})}async function X(e,t,n={}){let r=n.surface??`all`,a=await vn(),o=(!t||n.schedules===!0)&&U(r)&&e.scheduleRegistrations.length>0,s=Dn(t),c=s===`vercel`?sn():null,l=c===null?[]:[c],u=yn(l),f=yn(l),p=kn(e),h=i(e.appRoot,r),ee=e.compiledArtifacts.instrumentationPluginPath===void 0?[e.compiledArtifacts.bootstrapPath]:[e.compiledArtifacts.instrumentationPluginPath,e.compiledArtifacts.bootstrapPath];await E(h);let g=await we({_cli:{command:t?`dev`:`build`},buildDir:h,dev:t,logLevel:t?1:void 0,output:n.outputDir===void 0?void 0:{dir:n.outputDir},preset:s,plugins:ee,publicAssets:U(r)?Hn(a):[],scanDirs:G(r)?[m(`src/execution`)]:void 0,rolldownConfig:u,rollupConfig:f,rootDir:e.appRoot,serverDir:!1,traceDeps:p,vercel:Sn(s===`vercel`&&U(r))},t?{watch:!0}:void 0);if(await D(h),bn(g),W(r)){let t=En();for(let[e,n]of Object.entries(t))g.options.alias[e]=n;Ln(g,e.workflowBuildDir),Vn(g,e.workflowBuildDir)}if(G(r)){let t=On(g,e);Rn(g,{stepEntrypointPath:t}),zn(g,{stepEntrypointPath:t})}if(e.compiledArtifacts.instrumentationSourcePath!==void 0&&Bn(g,e.compiledArtifacts.instrumentationSourcePath),t&&W(r)){let t=e.workflowBuildDir,n=new Set([K(v(t,`workflows.mjs`))]);g.hooks.hook(`rollup:before`,(e,t)=>{let r=t.external;t.external=(e,...t)=>{if(n.has(K(e)))return!0;if(typeof r==`function`)return r(e,...t)}})}return o&&(gn(g),se(g,{artifactsConfig:ie({appRoot:e.appRoot,dev:g.options.dev}),dispatchModulePath:d(`src/internal/nitro/routes/schedule-task.ts`),registrations:e.scheduleRegistrations})),await mn(g,e,{homePageHtml:a.homePageHtml,surface:r}),G(r)&&await Fn(g,On(g,e)),g}function Hn(e){return[{baseURL:te,dir:e.assetsDirectoryPath,maxAge:3600*24*365}]}function Un(){let e=process.env.VERCEL?.trim(),t=process.env.VERCEL_DEPLOYMENT_ID?.trim();return typeof e==`string`&&e.length>0&&typeof t==`string`&&t.length>0}async function Wn(e){return Un()?(await ce(e),!0):!1}function Gn(e){return e.replace(/[\\/]+$/,``)}async function Kn(e){try{return JSON.parse(await C(v(e,`functions`,`__server.func`,`.vc-config.json`),`utf8`)).runtime}catch{return}}async function qn(e){let t=new qt({appRoot:e.appRoot,compiledArtifactsBootstrapPath:e.compiledArtifactsBootstrapPath,outDir:e.workflowBuildDir,rootDir:f(),watch:!1}),n=await Kn(e.outputDir);await t.buildVercelOutput({flowNitroOutputDir:e.flowNitroOutputDir,outputDir:e.outputDir,runtime:n})}async function Jn(e){let t=Gn(e.options.output.dir);return await E(t),await Te(e),await Se(e),await Ee(e),await xe(e),await D(t),t}async function Yn(e,t){let n=await X(e,!1,{outputDir:r(e.appRoot,t),surface:t});try{return await Jn(n)}finally{await n.close()}}async function Xn(e){let t=await ae(e);if(!process.env.VERCEL){let e=await X(t,!1);try{return await Jn(e)}finally{await e.close()}}let n=await X(t,!1,{surface:`app`});try{let e=await Jn(n);await Wn({appRoot:t.appRoot,log(e){console.log(e)}});let r=await Yn(t,`flow`);return await qn({appRoot:t.appRoot,compiledArtifactsBootstrapPath:t.compiledArtifacts.bootstrapPath,flowNitroOutputDir:r,outputDir:e,workflowBuildDir:t.workflowBuildDir}),e}finally{await n.close()}}const Z=65535,Q=`WORKFLOW_LOCAL_BASE_URL`,$=`PORT`,Zn=new Set([`[::]`,`::`,`0.0.0.0`]);function Qn(e){let t=new URL(e);return Zn.has(t.hostname)?(t.hostname=`127.0.0.1`,t.toString()):e}function $n(e){return e instanceof Error&&`code`in e&&e.code===`EADDRINUSE`}function er(e){let t=typeof e==`string`?Number(e):e??3e3;if(!Number.isInteger(t)||t<0||t>Z)throw Error(`Invalid development server port "${String(e)}". Expected an integer between 0 and ${Z}.`);return t}function tr(){let e=process.env[$];if(e===void 0||e.trim()===``)return;let t=Number(e);if(!Number.isInteger(t)||t<0||t>Z)throw Error(`Invalid ${$} environment variable "${e}". Expected an integer between 0 and ${Z}.`);return t}function nr(e){let t=er(e.port);if(t===0||!e.retryOnAddressInUse)return[t];let n=[];for(let e=0;e<10;e+=1){let r=t+e;if(r>65535)break;n.push(r)}return n}function rr(e){let t=process.env[Q],n=process.env[$],r=new URL(Qn(e));return process.env[Q]=r.origin,r.port&&(process.env[$]=r.port),()=>{t===void 0?delete process.env[Q]:process.env[Q]=t,n===void 0?delete process.env[$]:process.env[$]=n}}function ir(e){let t=()=>{};return e.once(`error`,t),()=>{e.off(`error`,t)}}function ar(e){let t=e.upgrade.bind(e);e.upgrade=async(e,n,r)=>{let i=ir(n);try{await t(e,n,r)}catch{n.destroyed||n.destroy()}finally{i()}}}async function or(e){let t=nr({port:e.port,retryOnAddressInUse:e.retryOnAddressInUse}),n;for(let r of t){let t=e.devServer.listen({hostname:e.host,port:r,silent:!0});try{return await t.ready(),t}catch(r){if(n=r,await t.close().catch(()=>{}),!$n(r)||!e.retryOnAddressInUse)throw r}}throw Error(`Failed to start Nitro dev server after ${t.length} attempts. Tried ports ${t.join(`, `)}.`,{cause:n})}async function sr(e,t={}){let n=t.schedules===!0,r=await ae(e);await ce({appRoot:r.appRoot,log:e=>console.log(e)});let i=await X(r,!0,{schedules:n}),a=Ce(i);ar(a);let o=t.host??i.options.devServer.hostname,s=t.port??tr(),c=s??i.options.devServer.port,l=s===void 0,u;try{let e=await or({devServer:a,host:o,port:c,retryOnAddressInUse:l});if(!e.url)throw Error(`Nitro dev server did not expose a URL.`);u=rr(e.url),await Te(i),await xe(i);let{startAuthoredSourceWatcher:t}=await import(`./dev-authored-source-watcher-BcN7BUDE.js`),s=await t({nitro:i,preparedHost:r,schedulesEnabled:n}),d=u;if(d===void 0)throw Error(`Workflow local queue environment was not initialized.`);return{async close(){try{await s.close(),await a.close(),await i.close()}finally{d()}},url:Qn(e.url)}}catch(e){throw u?.(),await a.close().catch(()=>{}),await i.close().catch(()=>{}),e}}var cr=e({buildHost:()=>lr,startHost:()=>ur});async function lr(e){return await Xn(e)}async function ur(e,t={}){return await sr(e,t)}export{ur as n,cr as t};
@@ -1 +0,0 @@
1
- import{z as e}from"#compiled/zod/index.js";const t=Symbol(`invalid-json-value-candidate`);function n(e){let n=i(e);if(n===t)throw TypeError(`Expected a JSON-serializable value.`);return n}function r(e){let t=n(e);if(!a(t))throw TypeError(`Expected a JSON-serializable object.`);return t}function i(e,n=new WeakSet){if(e===null||typeof e==`boolean`||typeof e==`string`)return e;if(typeof e==`number`)return Number.isFinite(e)?e:t;if(Array.isArray(e)){let r=[];for(let a of e){let e=i(a,n);if(e===t)return t;r.push(e)}return r}if(typeof e!=`object`||e===void 0||!o(e)||n.has(e))return t;n.add(e);let r={};for(let[a,o]of Object.entries(e)){if(o===void 0)continue;let e=i(o,n);if(e===t)return t;r[a]=e}return n.delete(e),r}function a(e){return e!==null&&!Array.isArray(e)&&typeof e==`object`}function o(e){let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}const s=e.unknown().transform((t,r)=>{try{return n(t)}catch(t){return r.addIssue({code:`custom`,message:l(t,`Expected a JSON-serializable value.`)}),e.NEVER}}),c=e.unknown().transform((t,n)=>{try{return r(t)}catch(t){return n.addIssue({code:`custom`,message:l(t,`Expected a JSON-serializable object.`)}),e.NEVER}});function l(e,t){return e instanceof Error?e.message:t}const u=`/ash/v1`,d=`${u}/health`,f=`${u}/home`,p=`${u}/session`,m=`${u}/session/:sessionId`,h=`${u}/session/:sessionId/stream`,g=`${u}/ui`,_=`${u}/connections/:name/callback/:token`;function v(e){return`${u}/session/${encodeURIComponent(e)}/stream`}function y(e){return`${u}/session/${encodeURIComponent(e)}`}const b=`x-ash-session-id`,x=`x-ash-stream-format`,S=`x-ash-stream-version`,C=`application/x-ndjson; charset=utf-8`,w=`ndjson`;new TextEncoder;function T(e){return v(e)}function E(e){return e.type===`session.completed`||e.type===`session.failed`||e.type===`session.waiting`}const D=e.object({callId:e.string(),input:c,kind:e.literal(`tool-call`),toolName:e.string()}).strict(),O=e.object({callId:e.string(),description:e.string(),input:c,kind:e.literal(`subagent-call`),name:e.string(),nodeId:e.string(),subagentName:e.string()}).strict(),k=e.object({callId:e.string(),input:c,kind:e.literal(`load-skill`)}).strict();e.discriminatedUnion(`kind`,[k,O,D]);const A=e.object({callId:e.string(),isError:e.boolean().optional(),kind:e.literal(`tool-result`),output:s,toolName:e.string()}).strict(),j=e.object({callId:e.string(),isError:e.boolean().optional(),kind:e.literal(`subagent-result`),output:s,subagentName:e.string()}).strict(),M=e.object({callId:e.string(),isError:e.boolean().optional(),kind:e.literal(`load-skill-result`),output:s,name:e.string().optional()}).strict();e.discriminatedUnion(`kind`,[M,j,A]);const N=e.object({description:e.string().describe(`Optional additional context for this option.`).optional(),id:e.string().describe(`Stable identifier for the option.`),label:e.string().describe(`User-facing label for the option.`),style:e.enum([`primary`,`danger`,`default`]).describe(`Visual treatment hint for the option.`).optional()}).strict(),P=e.object({action:D,allowFreeform:e.boolean().describe(`Whether the user may answer with freeform text instead of selecting one of the provided options.`).optional(),display:e.enum([`confirmation`,`select`,`text`]).describe(`Rendering hint — the channel uses this to pick a UX treatment.`).optional(),options:e.array(N).describe(`Selectable answer options to present to the user.`).optional(),prompt:e.string().describe(`The prompt to present to the user.`),requestId:e.string().describe(`Stable identifier for this request.`)}).strict(),F=e.object({optionId:e.string().optional(),requestId:e.string(),text:e.string().optional()}).strict();function I(e){return F.safeParse(e).success}export{u as _,b as a,c as b,T as c,m as d,p as f,h as g,f as h,w as i,E as l,g as m,I as n,x as o,d as p,C as r,S as s,P as t,_ as u,y as v,r as x,v as y};
@@ -1,12 +0,0 @@
1
- /**
2
- * Built home-page UI assets consumed by the Nitro host.
3
- */
4
- export interface HomePageWebAssets {
5
- readonly assetsDirectoryPath: string;
6
- readonly homePageHtml: string;
7
- }
8
- /**
9
- * Resolves and reads the built web UI artifacts used by Ash's package-owned
10
- * home page.
11
- */
12
- export declare function loadHomePageWebAssets(): Promise<HomePageWebAssets>;
@@ -1,34 +0,0 @@
1
- import { access, readFile } from "node:fs/promises";
2
- import { join } from "node:path";
3
- import { resolvePackageRoot, resolvePackageSourceDirectoryPath, } from "#internal/application/package.js";
4
- async function doesPathExist(path) {
5
- try {
6
- await access(path);
7
- return true;
8
- }
9
- catch {
10
- return false;
11
- }
12
- }
13
- /**
14
- * Resolves and reads the built web UI artifacts used by Ash's package-owned
15
- * home page.
16
- */
17
- export async function loadHomePageWebAssets() {
18
- const packageManagedAssetsDirectoryPath = resolvePackageSourceDirectoryPath("src/internal/nitro/routes/web-ui");
19
- const workspaceAssetsDirectoryPath = join(resolvePackageRoot(), "..", "web", "dist");
20
- for (const assetsDirectoryPath of [
21
- packageManagedAssetsDirectoryPath,
22
- workspaceAssetsDirectoryPath,
23
- ]) {
24
- const indexHtmlPath = join(assetsDirectoryPath, "index.html");
25
- if (!(await doesPathExist(indexHtmlPath))) {
26
- continue;
27
- }
28
- return {
29
- assetsDirectoryPath,
30
- homePageHtml: await readFile(indexHtmlPath, "utf8"),
31
- };
32
- }
33
- throw new Error("Missing built Ash web UI assets. Run `pnpm --filter experimental-ash-web build` and rebuild `experimental-ash`.");
34
- }
@@ -1,87 +0,0 @@
1
- import type { HomePageData } from "#internal/nitro/routes/home-page/load-home-page-data.js";
2
- /**
3
- * One summary count shown in the home-page overview.
4
- */
5
- export interface HomePageSummaryCount {
6
- readonly label: string;
7
- readonly value: number;
8
- }
9
- /**
10
- * One source-backed row displayed in the home-page tables.
11
- */
12
- export interface HomePageSourceRow {
13
- readonly details: string;
14
- readonly logicalPath: string;
15
- readonly name: string;
16
- readonly sourceKind: string;
17
- }
18
- /**
19
- * One schedule row displayed in the home-page schedule table.
20
- */
21
- export interface HomePageScheduleRow {
22
- readonly cron: string;
23
- readonly logicalPath: string;
24
- readonly name: string;
25
- readonly preview: string;
26
- }
27
- /**
28
- * One subagent row displayed in the home-page subagent table.
29
- */
30
- export interface HomePageSubagentRow {
31
- readonly details: string;
32
- readonly kind: "Local";
33
- readonly logicalPath: string;
34
- readonly name: string;
35
- }
36
- /**
37
- * One endpoint row displayed in the home-page endpoint table.
38
- */
39
- export interface HomePageEndpointRow {
40
- readonly method: "GET" | "POST";
41
- readonly name: string;
42
- readonly notes: string;
43
- readonly path: string;
44
- }
45
- /**
46
- * Runtime overview section returned by the home-page JSON route.
47
- */
48
- export interface HomePageOverview {
49
- readonly configMetadata: Readonly<Record<string, string>>;
50
- readonly configSource: string;
51
- readonly discoveryErrors: number;
52
- readonly discoveryWarnings: number;
53
- readonly modelId: string;
54
- readonly subagentCount: number;
55
- readonly instructionsPromptSource: string;
56
- }
57
- /**
58
- * Instructions prompt section returned by the home-page JSON route.
59
- */
60
- export interface HomePageInstructionsPrompt {
61
- readonly logicalPath: string;
62
- readonly markdownPreview: string;
63
- }
64
- /**
65
- * Full response payload returned by Ash's home-page JSON route.
66
- */
67
- export interface HomePageResponse {
68
- readonly agentId: string;
69
- readonly endpointRows: readonly HomePageEndpointRow[];
70
- readonly heroSummary: string;
71
- readonly messageRequestExample: string;
72
- readonly overview: HomePageOverview;
73
- readonly pageDescription: string;
74
- readonly pageTitle: string;
75
- readonly sandbox: HomePageSourceRow | null;
76
- readonly schedules: readonly HomePageScheduleRow[];
77
- readonly skills: readonly HomePageSourceRow[];
78
- readonly subagents: readonly HomePageSubagentRow[];
79
- readonly summaryCounts: readonly HomePageSummaryCount[];
80
- readonly instructions: HomePageSourceRow | null;
81
- readonly instructionsPrompt: HomePageInstructionsPrompt;
82
- readonly tools: readonly HomePageSourceRow[];
83
- }
84
- /**
85
- * Builds the JSON payload served to Ash's static Nitro home page.
86
- */
87
- export declare function buildHomePageResponse(data: HomePageData): HomePageResponse;
@@ -1,6 +0,0 @@
1
- /**
2
- * Builds the package-owned JSON response consumed by Ash's static home page.
3
- */
4
- export declare function handleHomePageDataRequest(input?: {
5
- appRoot?: string;
6
- }): Promise<Response>;
@@ -1,21 +0,0 @@
1
- import { buildHomePageResponse } from "#internal/nitro/routes/home-page/build-home-page-response.js";
2
- import { loadHomePageData, resolveHomePageCompiledArtifactsSource, } from "#internal/nitro/routes/home-page/load-home-page-data.js";
3
- async function createHomePagePayload(input) {
4
- const data = await loadHomePageData({
5
- compiledArtifactsSource: resolveHomePageCompiledArtifactsSource({
6
- appRoot: input.appRoot,
7
- }),
8
- });
9
- return buildHomePageResponse(data);
10
- }
11
- /**
12
- * Builds the package-owned JSON response consumed by Ash's static home page.
13
- */
14
- export async function handleHomePageDataRequest(input = {}) {
15
- return new Response(JSON.stringify(await createHomePagePayload(input)), {
16
- headers: {
17
- "cache-control": "no-store",
18
- "content-type": "application/json; charset=utf-8",
19
- },
20
- });
21
- }