@robota-sdk/agent-cli 3.0.0-beta.81 → 3.0.0-beta.83
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 +2478 -0
- package/README.md +70 -18
- package/dist/node/bin.js +33 -2
- package/dist/node/cli-core-CfQhvbx3.js +2850 -0
- package/dist/node/headless.js +2 -2
- package/dist/node/index.d.ts +131 -14
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +402 -316
- package/dist/node/index.js.map +1 -1
- package/dist/node/{node-ChG9Tg1I.js → node-B8BhZ3NW.js} +1 -1
- package/dist/node/{node-bJ0lEuNF.js → node-C4_FOvnk.js} +2 -2
- package/dist/node/{node-bJ0lEuNF.js.map → node-C4_FOvnk.js.map} +1 -1
- package/dist/node/{node-DIRGC_1P.js → node-CC5tfdMu.js} +17 -17
- package/dist/node/node-CC5tfdMu.js.map +1 -0
- package/dist/node/{node-C-hnFnOP.js → node-CsbnL0Yf.js} +4 -4
- package/dist/node/{node-2-nrieFn.js → node-DENLEmMT.js} +2 -2
- package/dist/node/{node-2-nrieFn.js.map → node-DENLEmMT.js.map} +1 -1
- package/dist/node/node-DtKU0MUr.js +14 -0
- package/dist/node/node-DtKU0MUr.js.map +1 -0
- package/dist/node/node-j7KM8r3b.js +14 -0
- package/dist/web/assets/PretendardVariable.subset.0-BHUkWNFR.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.1-C-__qv6_.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.10-DzSWztS8.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.11-CqVmlKJn.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.12-BHuZSgT0.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.13-C42mj_j2.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.14-Bl512uUX.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.15-D04iXIE3.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.16-BQUnS2GX.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.17-BfZSA-Xc.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.18-CwAxMC3C.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.19-CJu4Zcdo.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.2-dCZkyKLw.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.20-Ig1-z3n5.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.21-yKPEdLXC.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.22-CSqxKoOs.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.23-DK80wi0t.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.24-CmkE8Q8D.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.25-CsoWBIZB.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.26-Sozl8dw8.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.27-CT6nuW9L.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.28-CpO0Y96p.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.29-D6hjrUWm.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.3-Dqw33sf4.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.30-CWDM1c0J.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.31-CdmyZ5mm.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.32-CGnFWD2i.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.33--0OT__YQ.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.34-CaCS33Md.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.35-DWFYRGLp.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.36-Dn5IBRQB.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.37-BD6FyOtY.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.38-D4hu443z.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.39-B_7wfth9.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.4-Bvh2YGoc.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.40-BDaOfdUe.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.41-BUACvzZC.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.42-Dp-5mnyL.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.43-DHdpry7N.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.44-qHopVhdd.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.45-BniyRFfm.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.46-BMRq7xC-.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.47-B-cWO2pw.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.48-Ct-fWrPO.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.49-BblQVys9.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.5-K_MNGNCe.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.50-C8IyFH7L.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.51-Bxd0gTAs.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.52-CNgqKOOJ.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.53-BSRnyb-u.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.54-Dt2-cQkx.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.55-jFgflYjX.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.56-BwZdvJZQ.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.57-BwFDg-Fs.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.58-DlucQts_.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.59-CMkWjhdo.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.6-Bxhohlcm.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.60-CeHezjjf.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.61-PUuTnod4.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.62-DGSAWCfb.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.63-B35xsm4O.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.64-CTbrgYF9.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.65-B66rjuyf.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.66-C3HqaDeY.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.67-BmuXdlDy.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.68-DS9B48d0.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.69-YT16ymcp.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.7-E2HaA55t.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.70-BUXiAGMT.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.71-DuPZj8us.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.72-pYYGrEQR.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.73-DMrK970F.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.74-D4tQnymK.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.75-CxKdrRNf.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.76-DhPm2b_q.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.77-DwaxqOC8.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.78-DhqRbBzT.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.79-XpoyPP38.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.8-CRbJhhyA.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.80-DsV9Qp_h.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.81-BZzF9Hb3.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.82-BgAHe30u.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.83-DF-zBLLe.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.84-Brb8EsYQ.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.85-Byo_x2hf.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.86-XG7lTN_6.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.87-Lzui2vbK.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.88-CqX6JSgh.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.89-DOzqWPpX.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.9-Btb3bmS6.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.90-BF7RiZjm.woff2 +0 -0
- package/dist/web/assets/PretendardVariable.subset.91-Csm0YNoH.woff2 +0 -0
- package/dist/web/assets/index-DbAewVPM.js +244 -0
- package/dist/web/assets/index-DzQQd7ql.css +1 -0
- package/dist/web/index.html +6 -4
- package/package.json +44 -46
- package/dist/node/bounded-output-DpjpS98g-yPybHprY.cjs +0 -1
- package/dist/node/cli-core-Bah38oug.js +0 -2795
- package/dist/node/command-executor-DV-H2oD6-iQAXtTLY.cjs +0 -1
- package/dist/node/http-executor-cWzI2svn-C7F17ZGz.cjs +0 -1
- package/dist/node/index.cjs +0 -2793
- package/dist/node/index.d.cts +0 -3421
- package/dist/node/index.d.cts.map +0 -1
- package/dist/node/node-CFTax5Wl.cjs +0 -1
- package/dist/node/node-CJnrbkAS.js +0 -14
- package/dist/node/node-CJnrbkAS.js.map +0 -1
- package/dist/node/node-DDl02brx.cjs +0 -66
- package/dist/node/node-DIRGC_1P.js.map +0 -1
- package/dist/node/node-OBnZskvR.cjs +0 -1
- package/dist/node/node-tf433Aey.cjs +0 -13
- package/dist/node/node-uwhEt6sT.js +0 -14
- package/dist/node/rolldown-runtime-DK3Fl9T5-BIInC43l.cjs +0 -1
- package/dist/node/verdict-decoder-Dk_w2NG9-DNTeVdQ8.cjs +0 -1
- package/dist/web/assets/index-8_Slbxe7.css +0 -1
- package/dist/web/assets/index-Cgu5C1kn.js +0 -77
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
;(function(){var v=parseInt(process.versions.node.split('.')[0],10);if(v<22){process.stderr.write('\n✗ Node.js 22+ is required (current: '+process.version+')\n\nUpgrade:\n nvm: nvm install 22 && nvm use 22\n Volta: volta install node@22\n Download: https://nodejs.org/en/download\n\n');process.exit(1);}})();
|
|
2
|
-
import{E as e,Ft as t,V as n,bt as r,ct as i,o as a,tt as o}from"./node-uwhEt6sT.js";import{a as s,d as c,n as l,s as u,v as d}from"./bounded-output-DpjpS98g-DoRuRGhV.js";import"./command-executor-DV-H2oD6-BfKoGoFw.js";import"./http-executor-cWzI2svn-Ype0naht.js";import{spawn as f,spawnSync as p}from"node:child_process";import{accessSync as m,chmodSync as h,constants as g,cpSync as _,createReadStream as ee,existsSync as v,lstatSync as y,mkdirSync as b,readFileSync as te,readdirSync as ne,readlinkSync as re,realpathSync as x,renameSync as ie,rmSync as ae,statSync as S,symlinkSync as oe,unlinkSync as se,writeFileSync as ce}from"node:fs";import{basename as C,dirname as w,isAbsolute as T,join as E,posix as le,relative as ue,resolve as D,sep as de}from"node:path";import{randomBytes as fe,randomUUID as pe}from"node:crypto";import{chmod as me,mkdir as he,open as ge,readFile as _e,readdir as ve,rename as ye,rm as be,stat as O,writeFile as xe}from"node:fs/promises";import{homedir as Se,tmpdir as Ce}from"node:os";import{z as k}from"zod";import{lookup as we}from"node:dns/promises";import{isIP as Te}from"node:net";import Ee from"fast-glob";import De from"p-limit";import{EventEmitter as Oe}from"node:events";import{Worker as ke}from"node:worker_threads";const Ae=2e3,je=process.platform===`win32`;function A(e){return e.exitCode!==null||e.signalCode!==null}function Me(e,t,n){if(n&&!je&&typeof e.pid==`number`)try{process.kill(-e.pid,t);return}catch{}try{e.kill(t)}catch{}}function Ne(e,t){if(je&&typeof e.pid==`number`){p(`taskkill`,[`/pid`,String(e.pid),`/T`,`/F`],{stdio:`ignore`});return}Me(e,`SIGKILL`,t)}async function Pe(e,t={}){let n=t.graceMs??2e3,r=t.signal??`SIGTERM`,i=t.processGroup??!1;if(!A(e)){if(typeof e.pid!=`number`)throw Error(`[agent-process] killProcessTree called with an unspawned child (no pid)`);if(t.preKill){try{await t.preKill()}catch{}if(A(e))return}return new Promise(t=>{let a,o=()=>{a&&clearTimeout(a),t()};if(e.once(`exit`,o),A(e)){e.removeListener(`exit`,o),t();return}Me(e,r,i),a=setTimeout(()=>{A(e)||Ne(e,i)},n),a.unref?.()})}}function Fe(e){if(typeof e!=`string`)throw TypeError(`executionRoot must be a string`);if(e.trim().length===0)throw TypeError(`executionRoot must be a non-empty string`);if(!T(e))throw TypeError(`executionRoot must be an absolute path`);let t;try{t=x(e)}catch{throw TypeError(`executionRoot must name an existing accessible directory`)}if(!S(t).isDirectory())throw TypeError(`executionRoot must name a directory`);try{m(t,g.R_OK|g.X_OK)}catch{throw TypeError(`executionRoot directory must be readable and traversable`)}return t}function Ie(e){let t=[],n=D(e);for(;;)try{return E(x(n),...t)}catch{let r=w(n);if(r===n)return D(e);t.unshift(C(n)),n=r}}function Le(e,t){let n=Ie(e),r=Ie(t);return r===n||r.startsWith(n+de)}var Re=class extends Error{constructor(e){super(e),this.name=`OwnerOnlyModeError`}};function j(e=process.platform){return e===`win32`?`windows-acl`:`posix-mode`}function ze(e,t){let n=ue(e,t);if(n.startsWith(`..`)||T(n))throw new Re(`withinRoot ${e} is not an ancestor of ${t}, so this call cannot own the path between them.`);let r=n.split(de).filter(e=>e.length>0),i=[e],a=e;for(let e of r)a=E(a,e),i.push(a);return i}function M(e,t,n={}){if(j()!==`posix-mode`)return;let r=(n.readMode??(e=>S(e).mode&4095))(e);if(r&63)throw new Re(`${t} ${e} is mode 0${r.toString(8)} after being set owner-only; group or other permissions survived, so its contents are readable by another account.`)}function Be(e,t={}){let n=t.makeDirectory??((e,t)=>{b(e,{recursive:!0,mode:t})}),r=t.setMode??((e,t)=>h(e,t));n(e,448);let i=t.withinRoot===void 0?[e]:ze(t.withinRoot,e);for(let e of i)j()===`posix-mode`&&r(e,448),M(e,`directory`,t)}function Ve(e,t){Be(w(e));let n=`${e}.${process.pid}.tmp`;ae(n,{force:!0}),ce(n,t,{encoding:`utf8`,mode:384,flag:`wx`});try{M(n,`file`),ie(n,e)}catch(e){try{se(n)}catch{}throw e}M(e,`file`)}function He(e){if(j()!==`posix-mode`)return;let t;try{t=S(e).mode&4095}catch{return}t&63&&(h(e,384),M(e,`file`))}function Ue(e){let t=Te(e);return t===4?We(e.split(`.`).map(Number)):t!==6||Ge(e)}function We(e){let[t=0,n=0,r=0]=e;return t===0||t===10||t===127||t===100&&n>=64&&n<=127||t===169&&n===254||t===172&&n>=16&&n<=31||t===192&&n===0&&r===0||t===192&&n===168||t===198&&(n===18||n===19)||t>=224}function Ge(e){let t=qe(e);if(t===void 0)return!0;let[n=0,r=0,i=0,a=0,o=0,s=0,c=0,l=0]=t;return n===0&&r===0&&i===0&&a===0&&o===0&&s===65535||n===100&&r===65435&&i===0&&a===0&&o===0&&s===0?We([c>>8,c&255,l>>8,l&255]):n===0&&r===0&&i===0&&a===0&&o===0&&s===0||(n&65024)==64512||(n&65472)==65152||(n&65472)==65216||(n&65280)==65280}function Ke(e){let t=e.lastIndexOf(`:`),n=e.slice(t+1);if(!n.includes(`.`))return e;if(t<0||Te(n)!==4)return;let[r=0,i=0,a=0,o=0]=n.split(`.`).map(Number),s=(r<<8|i).toString(16),c=(a<<8|o).toString(16);return`${e.slice(0,t+1)}${s}:${c}`}function qe(e){let t=Ke(e.split(`%`)[0]??e);if(t===void 0)return;let n=t.split(`::`);if(n.length>2)return;let r=e=>e.length===0?[]:e.split(`:`).map(e=>Number.parseInt(e,16)),i=r(n[0]??``),a=n.length===2?r(n[1]??``):[],o=8-i.length-a.length;if(o<0||n.length===1&&o!==0)return;let s=[...i,...Array(o).fill(0),...a];return s.some(e=>Number.isNaN(e)||e<0||e>65535)?void 0:s}const Je=3e4,Ye=5e6,Xe=new Set([301,302,303,307,308]),Ze=new Set([`localhost`,`metadata`,`metadata.google.internal`,`metadata.goog`,`instance-data`,`instance-data.ec2.internal`]),Qe=async e=>(await we(e,{all:!0,verbatim:!0})).map(e=>e.address);async function $e(e,t={},n=Qe){let r=e.href;if(e.protocol!==`http:`&&e.protocol!==`https:`)return{reason:`unsupported_scheme`,url:r,message:`Only http(s) URLs may be fetched.`};if(t.allowPrivateAddresses===!0)return;let i=e.hostname.replace(/^\[|\]$/g,``).toLowerCase();if(t.allowedHosts?.includes(i))return;if(Ze.has(i)||i.endsWith(`.localhost`))return{reason:`metadata_host`,url:r,message:`Destination "${i}" is a loopback or cloud-metadata host and is not reachable from tools.`};let a=Te(i)?[i]:await et(i,n);if(a===void 0||a.length===0)return{reason:`unresolvable`,url:r,message:`Destination "${i}" did not resolve.`};let o=a.find(Ue);if(o!==void 0)return{reason:`private_destination`,url:r,message:`Destination "${i}" resolves to ${o}, a private, loopback or link-local address, and is not reachable from tools.`}}async function et(e,t){try{return await t(e)}catch{return}}async function tt(e,t={},n={},r={}){let i=r.fetch??((e,t)=>globalThis.fetch(e,t)),a=r.lookup??Qe,o=t.maxResponseBytes??Ye,s=n.maxRedirects??5,c=AbortSignal.timeout(t.timeoutMs??Je),l=t.signal?AbortSignal.any([c,t.signal]):c,u=new URL(e),d={...t.headers??{}};for(let e=0;;e+=1){let t=await $e(u,n,a);if(t!==void 0)return{ok:!1,rejection:t};let r=await i(u.href,{headers:d,signal:l,redirect:`manual`});if(!Xe.has(r.status))return it(r,u.href,o,l);let c=r.headers.get(`location`);if(c===null)return{ok:!1,rejection:{reason:`redirect_without_location`,url:u.href,message:`HTTP ${r.status} without a Location header.`}};if(e>=s)return{ok:!1,rejection:{reason:`redirect_limit`,url:u.href,message:`More than ${s} redirects.`}};let f=new URL(c,u);f.origin!==u.origin&&(d=rt(d)),u=f}}async function nt(e,t,n={},r={}){let i=r.fetch??((e,t)=>globalThis.fetch(e,t)),a=t.maxResponseBytes??Ye,o=AbortSignal.timeout(t.timeoutMs??Je),s=t.signal?AbortSignal.any([o,t.signal]):o,c=new URL(e),l=await $e(c,n,r.lookup??Qe);if(l!==void 0)return{ok:!1,rejection:l};let u=await i(c.href,{method:`POST`,headers:{...t.headers??{}},body:t.body,signal:s,redirect:`manual`});return u.status>=300&&u.status<400?(await u.body?.cancel().catch(()=>void 0),{ok:!1,rejection:{reason:`redirect_refused`,url:c.href,message:`HTTP ${u.status}: a POST is never redirected.`}}):it(u,c.href,a,s)}function rt(e){let t={};for(let[n,r]of Object.entries(e))n.toLowerCase()===`user-agent`&&(t[n]=r);return t}async function it(e,t,n,r){let i=e=>({ok:!1,rejection:{reason:`response_too_large`,url:t,message:`Response exceeds ${n} bytes (${e} seen).`}}),a=Number(e.headers.get(`content-length`));if(Number.isFinite(a)&&a>n)return await e.body?.cancel(),i(a);let o=[],s=0;if(!e.body&&typeof e.arrayBuffer==`function`){let t=new Uint8Array(await e.arrayBuffer());if(t.byteLength>n)return i(t.byteLength);o.push(t),s=t.byteLength}else if(e.body){let t=e.body.getReader();for(;;){r.throwIfAborted();let{done:e,value:a}=await t.read();if(e)break;if(s+=a.byteLength,s>n)return await t.cancel(),i(s);o.push(a)}}let c=new Uint8Array(s),l=0;for(let e of o)c.set(e,l),l+=e.byteLength;return{ok:!0,status:e.status,statusText:e.statusText,headers:e.headers,body:c,finalUrl:t}}function at(e){return e===void 0?`host`:`sandbox-${e.filesystem??`separate`}`}function ot(e){return at(e)===`sandbox-separate`}function st(e){let t=[];e.environment&&Object.keys(e.environment).length>0&&t.push(`environment`);let n=e.permissions;if(n&&Object.values(n).some(e=>Array.isArray(e)?e.length>0:e!==void 0)&&t.push(`permissions`),t.length!==0)throw Error(`workspace manifest requests ${t.join(` and `)}, which this sandbox client cannot enforce. The built-in applicator applies entries only. Supply a sandbox client that implements applyManifest and honours these fields, or remove them from the manifest — they were previously accepted and silently ignored, which reported a sandbox policy that was never applied (issue #2027).`)}const ct=/^[A-Za-z]:[\\/]/,lt=/'/g;async function ut(e,t,n={}){if(e.applyManifest)return e.applyManifest(t,n);st(t);let r=xt(n.targetRoot??`/workspace`),i=[];for(let[a,o]of Object.entries(t.entries)){let t=dt(a),s=St(r,t);i.push(await ft(e,t,s,r,o,n))}return{entries:i}}function dt(e){if(e.length===0)throw Error(`workspace manifest path must not be empty`);if(e.includes(`\0`))throw Error(`workspace manifest path must not contain NUL bytes`);if(e.startsWith(`/`)||e.startsWith(`\\`)||ct.test(e))throw Error(`workspace manifest path must be workspace-relative`);let t=e.replace(/\\/g,`/`).split(`/`).filter(Boolean);if(t.length===0)throw Error(`workspace manifest path must not resolve to the workspace root`);if(t.some(e=>e===`..`))throw Error(`workspace manifest path cannot contain traversal segments`);let n=t.filter(e=>e!==`.`);if(n.length===0)throw Error(`workspace manifest path must not resolve to the workspace root`);return n.join(`/`)}async function ft(e,t,n,r,i,a){switch(i.type){case`file`:return await _t(e,n,r,i.content),N(t,i.type);case`dir`:return await P(e,n),N(t,i.type);case`localFile`:return await pt(e,i.src,n,r,a),N(t,i.type);case`localDir`:return await mt(e,i.src,n,a),N(t,i.type);case`gitRepo`:return await gt(e,i,n),N(t,i.type);case`s3Mount`:case`gcsMount`:case`r2Mount`:case`azureBlobMount`:return{path:t,type:i.type,status:`unsupported`,message:`${i.type} requires a provider-specific sandbox adapter.`};default:return Ct(i)}}function N(e,t){return{path:e,type:t,status:`applied`}}async function pt(e,t,n,r,i){await _t(e,n,r,await _e(yt(t,i.hostRoot),`utf8`))}async function mt(e,t,n,r){await ht(e,yt(t,r.hostRoot),n)}async function ht(e,t,n){await P(e,n);let r=await ve(t,{withFileTypes:!0});for(let i of r){let r=E(t,i.name),a=St(n,i.name);if(i.isDirectory()){await ht(e,r,a);continue}if(i.isFile()){let t=await _e(r,`utf8`);await e.writeFile(a,t)}}}async function gt(e,t,n){await vt(e,`git clone${t.shallow===!1?``:` --depth 1`}${t.ref?` --branch ${F(t.ref)}`:``} ${F(t.url)} ${F(n)}`)}async function _t(e,t,n,r){let i=le.dirname(t);i!==n&&await P(e,i),await e.writeFile(t,r)}async function P(e,t){await vt(e,`mkdir -p ${F(t)}`)}async function vt(e,t){let n=await e.run(t);if(n.exitCode!==0)throw Error(`workspace manifest command failed: ${t}\n${n.stderr??n.stdout}`)}function yt(e,t){return T(e)?D(e):D(t??process.cwd(),e)}function bt(e){let t=e.length;for(;t>0&&e[t-1]===`/`;)--t;return e.slice(0,t)}function xt(e){let t=bt(e.replace(/\\/g,`/`));if(!t.startsWith(`/`))throw Error(`workspace manifest targetRoot must be an absolute sandbox path`);return t.length===0?`/`:t}function St(e,t){let n=xt(e);return n===`/`?`/${t}`:`${n}/${t}`}function F(e){return`'${e.replace(lt,`'\\''`)}'`}function Ct(e){throw Error(`unsupported workspace manifest entry: ${JSON.stringify(e)}`)}const I=[`.robota/worktrees`,`.claude/worktrees`];function L(e,t){let n=e.length;for(;n>0&&e[n-1]===`/`;)--n;return`${e.slice(0,n)}/${t}`}function R(){return[...i,...r]}function wt(e){let{policy:t}=e,n=[`--ro-bind`,`/`,`/`,`--dev`,`/dev`,`--proc`,`/proc`];for(let e of[t.root,...t.tempDirectories,...t.allowWrite])n.push(`--bind-try`,e,e);for(let r of R()){let i=L(t.root,r);e.exists(i)&&n.push(`--ro-bind`,i,i)}for(let r of I){let i=L(t.root,r);if(e.exists(i)){n.push(`--bind`,i,i);for(let t of e.listDirectory(i)){let r=L(i,`${t}/.git`);e.exists(r)&&n.push(`--ro-bind`,r,r)}}}for(let r of t.denyRead)e.exists(r.path)&&(r.directory?n.push(`--tmpfs`,r.path):n.push(`--ro-bind`,`/dev/null`,r.path));if(!t.network){if(e.seccompDescriptor===void 0)throw Error(`A sandbox without network needs the Unix-socket seccomp filter.`);n.push(`--unshare-net`,`--seccomp`,String(e.seccompDescriptor))}return n.push(`--unshare-pid`,`--die-with-parent`,`--new-session`,`--chdir`,e.cwd),n.push(`--`,e.command),[...n,...e.args]}function Tt(e){return e.replace(/[\\^$.*+?()[\]{}|"]/g,e=>`\\${e}`)}function z(e){return`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function Et(e){let t=[e.root,...e.tempDirectories,...e.allowWrite].map(e=>`(subpath ${z(e)})`).join(` `),n=R().map(t=>{let n=L(e.root,t);return r.includes(t)?`(literal ${z(n)})`:`(subpath ${z(n)})`}),i=I.map(t=>`(subpath ${z(L(e.root,t))})`),a=[`(literal ${z(L(e.root,`.git`))})`,...I.map(t=>`(regex #"^${Tt(L(e.root,t))}/[^/]+/\\.git$")`)],o=[`(version 1)`,`(allow default)`,`(deny file-write*)`,`(allow file-write* ${t} (literal "/dev/null") (regex #"^/dev/tty") (regex #"^/dev/fd/"))`,`(deny file-write* ${n.join(` `)})`,`(allow file-write* ${i.join(` `)})`,`(deny file-write* ${a.join(` `)})`];if(e.denyRead.length>0){let t=e.denyRead.map(e=>e.directory?`(subpath ${z(e.path)})`:`(literal ${z(e.path)})`);o.push(`(deny file-read* ${t.join(` `)})`)}return e.network||o.push(`(deny network*)`),o.join(`
|
|
2
|
+
import{$ as e,O as t,a as n,gt as r,i,st as a,ut as o}from"./node-j7KM8r3b.js";import{a as s,d as c,n as l,s as u,v as d}from"./bounded-output-DpjpS98g-DoRuRGhV.js";import"./command-executor-DV-H2oD6-BfKoGoFw.js";import"./http-executor-cWzI2svn-Ype0naht.js";import{spawn as f,spawnSync as p}from"node:child_process";import{accessSync as m,chmodSync as h,constants as g,cpSync as _,createReadStream as ee,existsSync as v,lstatSync as y,mkdirSync as b,readFileSync as te,readdirSync as ne,readlinkSync as re,realpathSync as x,renameSync as ie,rmSync as ae,statSync as S,symlinkSync as oe,unlinkSync as se,writeFileSync as ce}from"node:fs";import{basename as C,dirname as w,isAbsolute as T,join as E,posix as le,relative as ue,resolve as D,sep as de}from"node:path";import{randomBytes as fe,randomUUID as pe}from"node:crypto";import{chmod as me,mkdir as he,open as ge,readFile as _e,readdir as ve,rename as ye,rm as be,stat as O,writeFile as xe}from"node:fs/promises";import{homedir as Se,tmpdir as Ce}from"node:os";import{z as k}from"zod";import{lookup as we}from"node:dns/promises";import{isIP as Te}from"node:net";import Ee from"fast-glob";import De from"p-limit";import{EventEmitter as Oe}from"node:events";import{Worker as ke}from"node:worker_threads";const Ae=2e3,je=process.platform===`win32`;function A(e){return e.exitCode!==null||e.signalCode!==null}function Me(e,t,n){if(n&&!je&&typeof e.pid==`number`)try{process.kill(-e.pid,t);return}catch{}try{e.kill(t)}catch{}}function Ne(e,t){if(je&&typeof e.pid==`number`){p(`taskkill`,[`/pid`,String(e.pid),`/T`,`/F`],{stdio:`ignore`});return}Me(e,`SIGKILL`,t)}async function Pe(e,t={}){let n=t.graceMs??2e3,r=t.signal??`SIGTERM`,i=t.processGroup??!1;if(!A(e)){if(typeof e.pid!=`number`)throw Error(`[agent-process] killProcessTree called with an unspawned child (no pid)`);if(t.preKill){try{await t.preKill()}catch{}if(A(e))return}return new Promise(t=>{let a,o=()=>{a&&clearTimeout(a),t()};if(e.once(`exit`,o),A(e)){e.removeListener(`exit`,o),t();return}Me(e,r,i),a=setTimeout(()=>{A(e)||Ne(e,i)},n),a.unref?.()})}}function Fe(e){if(typeof e!=`string`)throw TypeError(`executionRoot must be a string`);if(e.trim().length===0)throw TypeError(`executionRoot must be a non-empty string`);if(!T(e))throw TypeError(`executionRoot must be an absolute path`);let t;try{t=x(e)}catch{throw TypeError(`executionRoot must name an existing accessible directory`)}if(!S(t).isDirectory())throw TypeError(`executionRoot must name a directory`);try{m(t,g.R_OK|g.X_OK)}catch{throw TypeError(`executionRoot directory must be readable and traversable`)}return t}function Ie(e){let t=[],n=D(e);for(;;)try{return E(x(n),...t)}catch{let r=w(n);if(r===n)return D(e);t.unshift(C(n)),n=r}}function Le(e,t){let n=Ie(e),r=Ie(t);return r===n||r.startsWith(n+de)}var Re=class extends Error{constructor(e){super(e),this.name=`OwnerOnlyModeError`}};function j(e=process.platform){return e===`win32`?`windows-acl`:`posix-mode`}function ze(e,t){let n=ue(e,t);if(n.startsWith(`..`)||T(n))throw new Re(`withinRoot ${e} is not an ancestor of ${t}, so this call cannot own the path between them.`);let r=n.split(de).filter(e=>e.length>0),i=[e],a=e;for(let e of r)a=E(a,e),i.push(a);return i}function M(e,t,n={}){if(j()!==`posix-mode`)return;let r=(n.readMode??(e=>S(e).mode&4095))(e);if(r&63)throw new Re(`${t} ${e} is mode 0${r.toString(8)} after being set owner-only; group or other permissions survived, so its contents are readable by another account.`)}function Be(e,t={}){let n=t.makeDirectory??((e,t)=>{b(e,{recursive:!0,mode:t})}),r=t.setMode??((e,t)=>h(e,t));n(e,448);let i=t.withinRoot===void 0?[e]:ze(t.withinRoot,e);for(let e of i)j()===`posix-mode`&&r(e,448),M(e,`directory`,t)}function Ve(e,t){Be(w(e));let n=`${e}.${process.pid}.tmp`;ae(n,{force:!0}),ce(n,t,{encoding:`utf8`,mode:384,flag:`wx`});try{M(n,`file`),ie(n,e)}catch(e){try{se(n)}catch{}throw e}M(e,`file`)}function He(e){if(j()!==`posix-mode`)return;let t;try{t=S(e).mode&4095}catch{return}t&63&&(h(e,384),M(e,`file`))}function Ue(e){let t=Te(e);return t===4?We(e.split(`.`).map(Number)):t!==6||Ge(e)}function We(e){let[t=0,n=0,r=0]=e;return t===0||t===10||t===127||t===100&&n>=64&&n<=127||t===169&&n===254||t===172&&n>=16&&n<=31||t===192&&n===0&&r===0||t===192&&n===168||t===198&&(n===18||n===19)||t>=224}function Ge(e){let t=qe(e);if(t===void 0)return!0;let[n=0,r=0,i=0,a=0,o=0,s=0,c=0,l=0]=t;return n===0&&r===0&&i===0&&a===0&&o===0&&s===65535||n===100&&r===65435&&i===0&&a===0&&o===0&&s===0?We([c>>8,c&255,l>>8,l&255]):n===0&&r===0&&i===0&&a===0&&o===0&&s===0||(n&65024)==64512||(n&65472)==65152||(n&65472)==65216||(n&65280)==65280}function Ke(e){let t=e.lastIndexOf(`:`),n=e.slice(t+1);if(!n.includes(`.`))return e;if(t<0||Te(n)!==4)return;let[r=0,i=0,a=0,o=0]=n.split(`.`).map(Number),s=(r<<8|i).toString(16),c=(a<<8|o).toString(16);return`${e.slice(0,t+1)}${s}:${c}`}function qe(e){let t=Ke(e.split(`%`)[0]??e);if(t===void 0)return;let n=t.split(`::`);if(n.length>2)return;let r=e=>e.length===0?[]:e.split(`:`).map(e=>Number.parseInt(e,16)),i=r(n[0]??``),a=n.length===2?r(n[1]??``):[],o=8-i.length-a.length;if(o<0||n.length===1&&o!==0)return;let s=[...i,...Array(o).fill(0),...a];return s.some(e=>Number.isNaN(e)||e<0||e>65535)?void 0:s}const Je=3e4,Ye=5e6,Xe=new Set([301,302,303,307,308]),Ze=new Set([`localhost`,`metadata`,`metadata.google.internal`,`metadata.goog`,`instance-data`,`instance-data.ec2.internal`]),Qe=async e=>(await we(e,{all:!0,verbatim:!0})).map(e=>e.address);async function $e(e,t={},n=Qe){let r=e.href;if(e.protocol!==`http:`&&e.protocol!==`https:`)return{reason:`unsupported_scheme`,url:r,message:`Only http(s) URLs may be fetched.`};if(t.allowPrivateAddresses===!0)return;let i=e.hostname.replace(/^\[|\]$/g,``).toLowerCase();if(t.allowedHosts?.includes(i))return;if(Ze.has(i)||i.endsWith(`.localhost`))return{reason:`metadata_host`,url:r,message:`Destination "${i}" is a loopback or cloud-metadata host and is not reachable from tools.`};let a=Te(i)?[i]:await et(i,n);if(a===void 0||a.length===0)return{reason:`unresolvable`,url:r,message:`Destination "${i}" did not resolve.`};let o=a.find(Ue);if(o!==void 0)return{reason:`private_destination`,url:r,message:`Destination "${i}" resolves to ${o}, a private, loopback or link-local address, and is not reachable from tools.`}}async function et(e,t){try{return await t(e)}catch{return}}async function tt(e,t={},n={},r={}){let i=r.fetch??((e,t)=>globalThis.fetch(e,t)),a=r.lookup??Qe,o=t.maxResponseBytes??Ye,s=n.maxRedirects??5,c=AbortSignal.timeout(t.timeoutMs??Je),l=t.signal?AbortSignal.any([c,t.signal]):c,u=new URL(e),d={...t.headers??{}};for(let e=0;;e+=1){let t=await $e(u,n,a);if(t!==void 0)return{ok:!1,rejection:t};let r=await i(u.href,{headers:d,signal:l,redirect:`manual`});if(!Xe.has(r.status))return it(r,u.href,o,l);let c=r.headers.get(`location`);if(c===null)return{ok:!1,rejection:{reason:`redirect_without_location`,url:u.href,message:`HTTP ${r.status} without a Location header.`}};if(e>=s)return{ok:!1,rejection:{reason:`redirect_limit`,url:u.href,message:`More than ${s} redirects.`}};let f=new URL(c,u);f.origin!==u.origin&&(d=rt(d)),u=f}}async function nt(e,t,n={},r={}){let i=r.fetch??((e,t)=>globalThis.fetch(e,t)),a=t.maxResponseBytes??Ye,o=AbortSignal.timeout(t.timeoutMs??Je),s=t.signal?AbortSignal.any([o,t.signal]):o,c=new URL(e),l=await $e(c,n,r.lookup??Qe);if(l!==void 0)return{ok:!1,rejection:l};let u=await i(c.href,{method:`POST`,headers:{...t.headers??{}},body:t.body,signal:s,redirect:`manual`});return u.status>=300&&u.status<400?(await u.body?.cancel().catch(()=>void 0),{ok:!1,rejection:{reason:`redirect_refused`,url:c.href,message:`HTTP ${u.status}: a POST is never redirected.`}}):it(u,c.href,a,s)}function rt(e){let t={};for(let[n,r]of Object.entries(e))n.toLowerCase()===`user-agent`&&(t[n]=r);return t}async function it(e,t,n,r){let i=e=>({ok:!1,rejection:{reason:`response_too_large`,url:t,message:`Response exceeds ${n} bytes (${e} seen).`}}),a=Number(e.headers.get(`content-length`));if(Number.isFinite(a)&&a>n)return await e.body?.cancel(),i(a);let o=[],s=0;if(!e.body&&typeof e.arrayBuffer==`function`){let t=new Uint8Array(await e.arrayBuffer());if(t.byteLength>n)return i(t.byteLength);o.push(t),s=t.byteLength}else if(e.body){let t=e.body.getReader();for(;;){r.throwIfAborted();let{done:e,value:a}=await t.read();if(e)break;if(s+=a.byteLength,s>n)return await t.cancel(),i(s);o.push(a)}}let c=new Uint8Array(s),l=0;for(let e of o)c.set(e,l),l+=e.byteLength;return{ok:!0,status:e.status,statusText:e.statusText,headers:e.headers,body:c,finalUrl:t}}function at(e){return e===void 0?`host`:`sandbox-${e.filesystem??`separate`}`}function ot(e){return at(e)===`sandbox-separate`}function st(e){let t=[];e.environment&&Object.keys(e.environment).length>0&&t.push(`environment`);let n=e.permissions;if(n&&Object.values(n).some(e=>Array.isArray(e)?e.length>0:e!==void 0)&&t.push(`permissions`),t.length!==0)throw Error(`workspace manifest requests ${t.join(` and `)}, which this sandbox client cannot enforce. The built-in applicator applies entries only. Supply a sandbox client that implements applyManifest and honours these fields, or remove them from the manifest — they were previously accepted and silently ignored, which reported a sandbox policy that was never applied (issue #2027).`)}const ct=/^[A-Za-z]:[\\/]/,lt=/'/g;async function ut(e,t,n={}){if(e.applyManifest)return e.applyManifest(t,n);st(t);let r=xt(n.targetRoot??`/workspace`),i=[];for(let[a,o]of Object.entries(t.entries)){let t=dt(a),s=St(r,t);i.push(await ft(e,t,s,r,o,n))}return{entries:i}}function dt(e){if(e.length===0)throw Error(`workspace manifest path must not be empty`);if(e.includes(`\0`))throw Error(`workspace manifest path must not contain NUL bytes`);if(e.startsWith(`/`)||e.startsWith(`\\`)||ct.test(e))throw Error(`workspace manifest path must be workspace-relative`);let t=e.replace(/\\/g,`/`).split(`/`).filter(Boolean);if(t.length===0)throw Error(`workspace manifest path must not resolve to the workspace root`);if(t.some(e=>e===`..`))throw Error(`workspace manifest path cannot contain traversal segments`);let n=t.filter(e=>e!==`.`);if(n.length===0)throw Error(`workspace manifest path must not resolve to the workspace root`);return n.join(`/`)}async function ft(e,t,n,r,i,a){switch(i.type){case`file`:return await _t(e,n,r,i.content),N(t,i.type);case`dir`:return await P(e,n),N(t,i.type);case`localFile`:return await pt(e,i.src,n,r,a),N(t,i.type);case`localDir`:return await mt(e,i.src,n,a),N(t,i.type);case`gitRepo`:return await gt(e,i,n),N(t,i.type);case`s3Mount`:case`gcsMount`:case`r2Mount`:case`azureBlobMount`:return{path:t,type:i.type,status:`unsupported`,message:`${i.type} requires a provider-specific sandbox adapter.`};default:return Ct(i)}}function N(e,t){return{path:e,type:t,status:`applied`}}async function pt(e,t,n,r,i){await _t(e,n,r,await _e(yt(t,i.hostRoot),`utf8`))}async function mt(e,t,n,r){await ht(e,yt(t,r.hostRoot),n)}async function ht(e,t,n){await P(e,n);let r=await ve(t,{withFileTypes:!0});for(let i of r){let r=E(t,i.name),a=St(n,i.name);if(i.isDirectory()){await ht(e,r,a);continue}if(i.isFile()){let t=await _e(r,`utf8`);await e.writeFile(a,t)}}}async function gt(e,t,n){await vt(e,`git clone${t.shallow===!1?``:` --depth 1`}${t.ref?` --branch ${F(t.ref)}`:``} ${F(t.url)} ${F(n)}`)}async function _t(e,t,n,r){let i=le.dirname(t);i!==n&&await P(e,i),await e.writeFile(t,r)}async function P(e,t){await vt(e,`mkdir -p ${F(t)}`)}async function vt(e,t){let n=await e.run(t);if(n.exitCode!==0)throw Error(`workspace manifest command failed: ${t}\n${n.stderr??n.stdout}`)}function yt(e,t){return T(e)?D(e):D(t??process.cwd(),e)}function bt(e){let t=e.length;for(;t>0&&e[t-1]===`/`;)--t;return e.slice(0,t)}function xt(e){let t=bt(e.replace(/\\/g,`/`));if(!t.startsWith(`/`))throw Error(`workspace manifest targetRoot must be an absolute sandbox path`);return t.length===0?`/`:t}function St(e,t){let n=xt(e);return n===`/`?`/${t}`:`${n}/${t}`}function F(e){return`'${e.replace(lt,`'\\''`)}'`}function Ct(e){throw Error(`unsupported workspace manifest entry: ${JSON.stringify(e)}`)}const I=[`.robota/worktrees`,`.claude/worktrees`];function L(e,t){let n=e.length;for(;n>0&&e[n-1]===`/`;)--n;return`${e.slice(0,n)}/${t}`}function R(){return[...r,...o]}function wt(e){let{policy:t}=e,n=[`--ro-bind`,`/`,`/`,`--dev`,`/dev`,`--proc`,`/proc`];for(let e of[t.root,...t.tempDirectories,...t.allowWrite])n.push(`--bind-try`,e,e);for(let r of R()){let i=L(t.root,r);e.exists(i)&&n.push(`--ro-bind`,i,i)}for(let r of I){let i=L(t.root,r);if(e.exists(i)){n.push(`--bind`,i,i);for(let t of e.listDirectory(i)){let r=L(i,`${t}/.git`);e.exists(r)&&n.push(`--ro-bind`,r,r)}}}for(let r of t.denyRead)e.exists(r.path)&&(r.directory?n.push(`--tmpfs`,r.path):n.push(`--ro-bind`,`/dev/null`,r.path));if(!t.network){if(e.seccompDescriptor===void 0)throw Error(`A sandbox without network needs the Unix-socket seccomp filter.`);n.push(`--unshare-net`,`--seccomp`,String(e.seccompDescriptor))}return n.push(`--unshare-pid`,`--die-with-parent`,`--new-session`,`--chdir`,e.cwd),n.push(`--`,e.command),[...n,...e.args]}function Tt(e){return e.replace(/[\\^$.*+?()[\]{}|"]/g,e=>`\\${e}`)}function z(e){return`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function Et(e){let t=[e.root,...e.tempDirectories,...e.allowWrite].map(e=>`(subpath ${z(e)})`).join(` `),n=R().map(t=>{let n=L(e.root,t);return o.includes(t)?`(literal ${z(n)})`:`(subpath ${z(n)})`}),r=I.map(t=>`(subpath ${z(L(e.root,t))})`),i=[`(literal ${z(L(e.root,`.git`))})`,...I.map(t=>`(regex #"^${Tt(L(e.root,t))}/[^/]+/\\.git$")`)],a=[`(version 1)`,`(allow default)`,`(deny file-write*)`,`(allow file-write* ${t} (literal "/dev/null") (regex #"^/dev/tty") (regex #"^/dev/fd/"))`,`(deny file-write* ${n.join(` `)})`,`(allow file-write* ${r.join(` `)})`,`(deny file-write* ${i.join(` `)})`];if(e.denyRead.length>0){let t=e.denyRead.map(e=>e.directory?`(subpath ${z(e.path)})`:`(literal ${z(e.path)})`);a.push(`(deny file-read* ${t.join(` `)})`)}return e.network||a.push(`(deny network*)`),a.join(`
|
|
3
3
|
`)}const Dt={x64:{audit:3221225534,socket:41,ioUringSetup:425},arm64:{audit:3221225655,socket:198,ioUringSetup:425}};function B(e,t,n,r){return[e,t,n,r]}function Ot(e=process.arch){let t=Dt[e];if(t===void 0)return;let n=e=>327680|e,r=[B(32,0,0,4),B(21,1,0,t.audit),B(6,0,0,n(1)),B(32,0,0,0),B(69,0,1,1073741824),B(6,0,0,n(1)),B(21,0,1,t.ioUringSetup),B(6,0,0,n(1)),B(21,0,3,t.socket),B(32,0,0,16),B(21,0,1,1),B(6,0,0,n(97)),B(6,0,0,2147418112)],i=new Uint8Array(r.length*8),a=new DataView(i.buffer);return r.forEach(([e,t,n,r],i)=>{a.setUint16(i*8,e,!0),a.setUint8(i*8+2,t),a.setUint8(i*8+3,n),a.setUint32(i*8+4,r>>>0,!0)}),i}const kt=Object.freeze({enabled:!1,autoAllowBashIfSandboxed:!0,excludedCommands:[],allowWrite:[],denyRead:[],network:!1}),At=`/usr/bin/sandbox-exec`;function jt(e,t){let n=p(e,[...t],{timeout:5e3,encoding:`utf8`});if(n.error!==void 0)return{ok:!1,detail:n.error.message};let r=(n.stderr??``).trim().split(`
|
|
4
|
-
`)[0];return n.status===0?{ok:!0}:{ok:!1,...r?{detail:r}:{}}}function Mt(e={}){let t=e.platform??process.platform,n=e.probe??jt;if(t===`linux`){if(Ot(e.arch??process.arch)===void 0)return{backend:`bubblewrap`,missing:[`a seccomp filter for ${e.arch??process.arch} (x64 and arm64 are supported)`]};let t=n(`bwrap`,[`--ro-bind`,`/`,`/`,`--dev`,`/dev`,`--unshare-pid`,`true`]);return t.ok?{backend:`bubblewrap`,executable:`bwrap`,missing:[]}:{backend:`bubblewrap`,missing:[t.detail?.includes(`ENOENT`)?"bubblewrap (install the `bubblewrap` package)":`bubblewrap cannot create a sandbox here${t.detail?`: ${t.detail}`:``}`]}}if(t===`darwin`){let e=n(At,[`-p`,`(version 1)(allow default)`,`/usr/bin/true`]);return e.ok?{backend:`seatbelt`,executable:At,missing:[]}:{backend:`seatbelt`,missing:[`sandbox-exec cannot run${e.detail?`: ${e.detail}`:``}`]}}return{missing:[],unsupportedPlatform:t}}function V(e){try{return x(e)}catch{return e}}function Nt(e){try{return S(e).isDirectory()}catch{return!1}}function Pt(e){let t=y(e);if(!t.isSymbolicLink()&&(h(e,t.mode|448),t.isDirectory()))for(let t of ne(e))Pt(`${e}/${t}`)}function Ft(e){try{return y(e).isSymbolicLink()}catch{return!1}}function It(e){return e.trim().split(/\s+/)[0]}var Lt=class{filesystem=`shared`;root;availability;homeDirectory;current;inFlight=0;baseline=[];unresolved=new Map;constructor(e){this.root=V(e.root),this.availability=e.availability,this.homeDirectory=e.homeDirectory??Se(),this.current={...kt,...e.settings}}status(){return{settings:this.current,availability:this.availability,active:this.current.enabled&&this.availability.executable!==void 0}}configure(e){this.current={...this.current,...e}}confines(e){if(!this.status().active)return!1;if(
|
|
4
|
+
`)[0];return n.status===0?{ok:!0}:{ok:!1,...r?{detail:r}:{}}}function Mt(e={}){let t=e.platform??process.platform,n=e.probe??jt;if(t===`linux`){if(Ot(e.arch??process.arch)===void 0)return{backend:`bubblewrap`,missing:[`a seccomp filter for ${e.arch??process.arch} (x64 and arm64 are supported)`]};let t=n(`bwrap`,[`--ro-bind`,`/`,`/`,`--dev`,`/dev`,`--unshare-pid`,`true`]);return t.ok?{backend:`bubblewrap`,executable:`bwrap`,missing:[]}:{backend:`bubblewrap`,missing:[t.detail?.includes(`ENOENT`)?"bubblewrap (install the `bubblewrap` package)":`bubblewrap cannot create a sandbox here${t.detail?`: ${t.detail}`:``}`]}}if(t===`darwin`){let e=n(At,[`-p`,`(version 1)(allow default)`,`/usr/bin/true`]);return e.ok?{backend:`seatbelt`,executable:At,missing:[]}:{backend:`seatbelt`,missing:[`sandbox-exec cannot run${e.detail?`: ${e.detail}`:``}`]}}return{missing:[],unsupportedPlatform:t}}function V(e){try{return x(e)}catch{return e}}function Nt(e){try{return S(e).isDirectory()}catch{return!1}}function Pt(e){let t=y(e);if(!t.isSymbolicLink()&&(h(e,t.mode|448),t.isDirectory()))for(let t of ne(e))Pt(`${e}/${t}`)}function Ft(e){try{return y(e).isSymbolicLink()}catch{return!1}}function It(e){return e.trim().split(/\s+/)[0]}var Lt=class{filesystem=`shared`;root;availability;homeDirectory;current;inFlight=0;baseline=[];unresolved=new Map;watchers=new Set;constructor(e){this.root=V(e.root),this.availability=e.availability,this.homeDirectory=e.homeDirectory??Se(),this.current={...kt,...e.settings}}status(){return{settings:this.current,availability:this.availability,active:this.current.enabled&&this.availability.executable!==void 0}}configure(e){this.current={...this.current,...e};for(let e of this.watchers)e(this.current)}watchSettings(e){return this.watchers.add(e),()=>{this.watchers.delete(e)}}confines(e){if(!this.status().active)return!1;if(n(e).length!==1)return!0;let t=It(e);return t===void 0||!this.current.excludedCommands.includes(t)}autoApproves(e){return!this.current.autoAllowBashIfSandboxed||!this.confines(e)||this.unresolved.size>0?!1:!this.protectedEntryStates().some(e=>e.kind===`symlink`&&!this.resolvesOutsideWritableWorkspace(e.path))}wrapCommand(e,t){if(!this.confines(t))return e;let n=this.policy(),r=this.availability.executable;if(this.availability.backend===`seatbelt`)return{command:r,args:[`-p`,Et(n),e.command,...e.args],cwd:e.cwd};let i=n.network?void 0:Ot();this.protectedEntryStates().some(e=>e.path.endsWith(`/.robota`)&&e.kind===`symlink`)||b(`${this.root}/.robota`,{recursive:!0});let a=wt({policy:n,exists:e=>v(e)&&!Ft(e),listDirectory:e=>ne(e),cwd:e.cwd,command:e.command,args:e.args,...i===void 0?{}:{seccompDescriptor:3}});this.inFlight===0&&(this.baseline=this.protectedEntryStates().map(e=>this.unresolved.get(e.path)??e)),this.inFlight+=1;let o=!1;return{command:r,args:a,cwd:e.cwd,...i===void 0?{}:{inputDescriptors:[i]},afterExit:()=>{if(!o)return o=!0,--this.inFlight,this.restoreProtectedEntries(this.baseline)}}}protectedEntryStates(){return R().map(e=>{let t=`${this.root}/${e}`;try{return y(t).isSymbolicLink()?{path:t,kind:`symlink`,target:re(t)}:{path:t,kind:`present`}}catch{return{path:t,kind:`missing`}}})}resolvesOutsideWritableWorkspace(e){let t;try{t=x(e)}catch{return!1}let n=this.policy();return![n.root,...n.tempDirectories,...n.allowWrite].some(e=>t===e||t.startsWith(`${e}/`))}restoreProtectedEntries(e){let t=`${this.quarantineRoot(e)}/${Date.now()}-${pe()}`,n=[];for(let r of e)if(r.kind!==`present`)try{let e=this.protectedEntryStates().find(e=>e.path===r.path);if(r.kind===`missing`&&e.kind===`missing`){this.unresolved.delete(r.path);continue}if(r.kind===`symlink`&&e.kind===`symlink`&&e.target===r.target){this.unresolved.delete(r.path);continue}e.kind!==`missing`&&n.push(this.setAside(r.path,t)),r.kind===`symlink`&&oe(r.target,r.path),this.unresolved.delete(r.path)}catch(e){this.unresolved.set(r.path,r),n.push(`could not restore ${r.path} (${e instanceof Error?e.message:String(e)}); commands will ask until it is removed`)}if(n.length!==0)return`[sandbox] A confined command may not create or replace git, agent, MCP or shell configuration: ${n.join(`; `)}.`}quarantineRoot(e){let t=`${this.root}/.robota`;return e.some(e=>e.path===t&&e.kind===`present`)?`${t}/sandbox-quarantine`:`${this.homeDirectory}/.robota/sandbox-quarantine`}setAside(e,t){let n=`${t}/${C(e)}`;b(t,{recursive:!0});try{ie(e,n)}catch(t){if(this.inFlight>0)throw t;Pt(e),t.code===`EXDEV`?(_(e,n,{recursive:!0,verbatimSymlinks:!0}),ae(e,{recursive:!0,force:!0})):ie(e,n)}return`moved ${e} to ${n}`}policy(){let e=e=>{let t=e===`~`||e.startsWith(`~/`)?`${this.homeDirectory}${e.slice(1)}`:e;return V(T(t)?t:D(this.root,t))},t=[...new Set([Ce(),`/tmp`].filter(v).map(V))];return{root:this.root,tempDirectories:t,allowWrite:this.current.allowWrite.map(e),denyRead:this.current.denyRead.map(t=>{let n=e(t);return{path:n,directory:Nt(n)}}),network:this.current.network}}run(e,t={}){let n=l(),r=t.workingDirectory??this.root,i=this.wrapCommand({command:n.command,args:n.commandArgs(e),cwd:r},e);return new Promise((e,n)=>{let r=i.inputDescriptors??[],a;try{a=f(i.command,[...i.args],{cwd:i.cwd,stdio:[`ignore`,`pipe`,`pipe`,...r.map(()=>`pipe`)],...t.timeoutMs===void 0?{}:{timeout:t.timeoutMs}})}catch(e){i.afterExit?.(),n(e instanceof Error?e:Error(String(e)));return}r.forEach((e,t)=>{let n=a.stdio[t+3];n?.on(`error`,()=>void 0),n?.end(Buffer.from(e))});let o=``,s=``;a.stdout?.on(`data`,e=>o+=e.toString()),a.stderr?.on(`data`,e=>s+=e.toString()),a.on(`error`,e=>{i.afterExit?.(),n(e)}),a.on(`close`,t=>{let n=i.afterExit?.();e({stdout:n===void 0?o:`${o}\n${n}`,...s?{stderr:s}:{},exitCode:t??1})})})}readFile(e){return Promise.resolve(te(e,`utf8`))}writeFile(e,t){return ce(e,t,`utf8`),Promise.resolve()}};function H(t,n,r,a,o={}){return new i({name:t,description:n,parameters:e(r),...o.deferLoading!==void 0&&{deferLoading:o.deferLoading}},async(e,t)=>{let n=r.safeParse(e);if(!n.success)throw new d(`Zod validation failed: ${n.error}`);let i=await a(n.data,t);return typeof i==`string`?i:JSON.stringify(i)})}const Rt={Read:{argument:{key:`filePath`,kind:`path`},riskClass:`inspect`},Glob:{argument:{key:`pattern`,kind:`text`},riskClass:`inspect`},Grep:{argument:{key:`pattern`,kind:`text`},riskClass:`inspect`},WebFetch:{argument:{key:`url`,kind:`url`},riskClass:`inspect`},WebSearch:{argument:{key:`query`,kind:`text`},riskClass:`inspect`},CodebaseRetrieval:{riskClass:`inspect`},AskUserQuestion:{riskClass:`inspect`},ToolSearch:{argument:{key:`query`,kind:`text`},riskClass:`inspect`},ComputerView:{riskClass:`inspect`},Write:{argument:{key:`filePath`,kind:`path`},riskClass:`modify`},Edit:{argument:{key:`filePath`,kind:`path`},riskClass:`modify`},Shell:{argument:{key:`command`,kind:`command`},riskClass:`execute`,aliases:[`Bash`]},Bash:{argument:{key:`command`,kind:`command`},riskClass:`execute`,aliases:[`Shell`]},Computer:{riskClass:`execute`}};function zt(){for(let[e,t]of Object.entries(Rt))a(e,t)}zt();const Bt=1e3,Vt=k.object({activeFiles:k.array(k.string()).optional().describe(`Repo-relative files currently in focus; the map is ranked toward what they reference.`),mentionedIdentifiers:k.array(k.string()).optional().describe(`Symbol names to bias the map toward (e.g. identifiers named in the task).`),tokenBudget:k.number().int().positive().optional().describe(`Maximum tokens for the returned map (default ${Bt}).`)});function Ht(e){return e.map(e=>`${e.file}:${e.line} ${e.kind} ${e.name}`).join(`
|
|
5
5
|
`)}async function Ut(e,t={}){if(!t.adapter)return`Codebase retrieval is not available in this session.`;let n=await t.adapter.retrieve({...e.activeFiles?{activeFiles:e.activeFiles}:{},...e.mentionedIdentifiers?{mentionedIdentifiers:e.mentionedIdentifiers}:{},tokenBudget:e.tokenBudget??Bt});return n.symbols.length===0?`No relevant symbols found within the token budget.`:`Most relevant symbols (~${n.totalTokens} tokens):\n${Ht(n.symbols)}`}function Wt(e={}){return H(`CodebaseRetrieval`,`Retrieve the most relevant slice of the codebase (a ranked repo map of symbols) for the current task, within a token budget. Provide the files you are focused on and/or identifiers named in the task; returns the highest-centrality definitions first.`,Vt,async t=>Ut(t,e))}const Gt=`Computer use is not available in this session (no driver injected).`,Kt=k.enum([`left`,`right`,`middle`]),qt=k.object({x:k.number(),y:k.number()}),Jt=k.object({type:k.enum([`click`,`double_click`,`type`,`keypress`,`scroll`,`drag`,`wait`,`takeover`]).describe(`Which action to perform.`),x:k.number().optional().describe(`X coordinate (click/double_click/scroll).`),y:k.number().optional().describe(`Y coordinate (click/double_click/scroll).`),button:Kt.optional().describe(`Mouse button (click/double_click/drag).`),text:k.string().optional().describe(`Text to type (type).`),keys:k.array(k.string()).optional().describe(`Keys to press as a chord (keypress).`),deltaX:k.number().optional().describe(`Horizontal wheel delta (scroll).`),deltaY:k.number().optional().describe(`Vertical wheel delta (scroll).`),path:k.array(qt).optional().describe(`Points to drag through (drag).`),ms:k.number().optional().describe(`Milliseconds to wait (wait).`),reason:k.string().optional().describe(`Human-readable reason surfaced to the user (takeover).`)}),Yt=k.object({action:Jt.describe(`The single mutating action to perform.`)}),Xt=k.object({});var U=class extends Error{};function W(e,t,n){if(typeof e!=`number`)throw new U(`Action '${n}' requires numeric '${t}'.`);return e}function Zt(e){let t=e.button;switch(e.type){case`click`:return{type:`click`,x:W(e.x,`x`,`click`),y:W(e.y,`y`,`click`),...t?{button:t}:{}};case`double_click`:return{type:`double_click`,x:W(e.x,`x`,`double_click`),y:W(e.y,`y`,`double_click`),...t?{button:t}:{}};case`type`:if(typeof e.text!=`string`)throw new U(`Action 'type' requires 'text'.`);return{type:`type`,text:e.text};case`keypress`:if(!e.keys||e.keys.length===0)throw new U(`Action 'keypress' requires non-empty 'keys'.`);return{type:`keypress`,keys:e.keys};case`scroll`:return{type:`scroll`,x:W(e.x,`x`,`scroll`),y:W(e.y,`y`,`scroll`),deltaX:W(e.deltaX,`deltaX`,`scroll`),deltaY:W(e.deltaY,`deltaY`,`scroll`)};case`drag`:if(!e.path||e.path.length<2)throw new U(`Action 'drag' requires a 'path' of at least two points.`);return{type:`drag`,path:e.path,...t?{button:t}:{}};case`wait`:return{type:`wait`,...typeof e.ms==`number`?{ms:e.ms}:{}};case`takeover`:return{type:`takeover`,...e.reason?{reason:e.reason}:{}};default:{let t=e.type;throw new U(`Unknown action type: ${String(t)}`)}}}async function Qt(e){if(!e.driver)return JSON.stringify({success:!1,error:Gt});let t=await e.driver.screenshot();return JSON.stringify(t?{success:!0,screenshot:t}:{success:!0,takeover:!0})}async function $t(e,t){if(!t.driver)return JSON.stringify({success:!1,error:Gt});let n;try{n=Zt(e.action)}catch(e){return JSON.stringify({success:!1,error:e instanceof Error?e.message:String(e)})}let r=await t.driver.act(n),i={success:!0,...r.screenshot?{screenshot:r.screenshot}:{},...r.takeover?{takeover:!0}:{}};return JSON.stringify(i)}function en(e={}){return H(`ComputerView`,`Perceive the computer/browser surface: capture and return a screenshot of the current screen so you can reason about what to do next. Read-only — it never changes anything.`,Xt,async()=>Qt(e))}function tn(e={}){return H(`Computer`,"Perform one mutating action on the computer/browser surface (click, double_click, type, keypress, scroll, drag, wait, or takeover) and return the resulting screenshot. Use `takeover` to hand control to the human for sensitive input (credentials/payment); perception is paused during a takeover.",Yt,async t=>$t(t,e))}function nn(e={}){return[en(e),tn(e)]}const rn=[{toolName:`Glob`,hint:` - File search: Use Glob (NOT find or ls)`},{toolName:`Grep`,hint:` - Content search: Use Grep (NOT grep or rg)`},{toolName:`Read`,hint:` - Read files: Use Read (NOT cat/head/tail)`},{toolName:`Edit`,hint:` - Edit files: Use Edit (NOT sed/awk)`}];function an(e,t){let n=t?rn.filter(e=>t.includes(e.toolName)):rn,r=n.length>0?["IMPORTANT: Avoid using this tool to run `find`, `grep`, `cat`, `head`, `tail`, `sed`, `awk`, or `echo` commands. Instead, use the appropriate dedicated tool:",...n.map(e=>e.hint)]:[];return[`Executes a command in the host shell and returns its output.`,``,`Active shell: ${e.label}. ${e.syntaxHint}`,``,`Each command runs in a fresh shell in workingDirectory (default: the configured working directory); no shell state carries over between calls.`,``,...r].join(`
|
|
6
6
|
`)}const G=process.platform!==`win32`,on=2e6,sn=k.object({command:k.string().describe(`The shell command to execute`),timeout:k.number().optional().describe(`Optional timeout in milliseconds (max 600000). Default is 120000 (2 minutes)`),workingDirectory:k.string().optional().describe(`Working directory for the command. Defaults to the current working directory`)});async function cn(e,t,n,r){try{let i=await r.sandboxClient.run(e,{timeoutMs:t,workingDirectory:n}),a={success:!0,output:i.stderr?`${i.stdout}\nstderr:\n${i.stderr}`:i.stdout,exitCode:i.exitCode};return JSON.stringify(a)}catch(e){let t={success:!1,output:``,error:e instanceof Error?e.message:String(e)};return JSON.stringify(t)}}async function ln(e,t,n,r,i){let{command:a,timeout:o=12e4,workingDirectory:c}=e,l=Math.min(o,6e5),d=c??t.cwd;if(d===void 0)return JSON.stringify({success:!1,output:``,error:"Shell tool has no working directory: it was constructed without a `cwd` (ARCH-010). This is an assembly bug — the tool would otherwise run in whatever directory the host process was started in."});if(t.sandboxClient&&t.sandboxClient.wrapCommand===void 0)return cn(a,l,c??t.cwd,t);let p={command:n.command,args:n.commandArgs(a),cwd:d},m=t.sandboxClient?.wrapCommand?.(p,a)??p,h=!1,g=()=>{if(!h){h=!0;try{return m.afterExit?.()}catch(e){return`[sandbox] clean-up failed: ${e instanceof Error?e.message:String(e)}`}}};return r?.aborted?(g(),JSON.stringify({success:!1,output:``,error:`Aborted before start`})):new Promise(e=>{let t=s({maxBytes:on}),n=s({maxBytes:on}),a=!1,o=!1,c;try{c=f(m.command,[...m.args],{cwd:m.cwd,env:i===void 0?process.env:u(process.env,i),stdio:[`pipe`,`pipe`,`pipe`,...(m.inputDescriptors??[]).map(()=>`pipe`)],detached:G})}catch(t){let n=g(),r=t instanceof Error?t.message:String(t);e(JSON.stringify({success:!1,output:n??``,error:r}));return}(m.inputDescriptors??[]).forEach((e,t)=>{let n=c.stdio[t+3];n?.on(`error`,()=>void 0),n?.end(Buffer.from(e))}),c.stdin?.end(),c.stdout?.on(`data`,e=>{t.append(e)}),c.stderr?.on(`data`,e=>{n.append(e)});let d=setTimeout(()=>{a=!0,Pe(c,{processGroup:G}),p({success:!1,output:t.toString(),error:`Command timed out after ${l}ms`})},l);function p(t){o||(o=!0,clearTimeout(d),r?.removeEventListener(`abort`,h),e(JSON.stringify(t)))}function h(){Pe(c,{processGroup:G}),p({success:!1,output:t.toString(),error:`Aborted`})}r?.addEventListener(`abort`,h,{once:!0}),c.on(`error`,e=>{c.pid===void 0&&g(),p({success:!1,output:``,error:e.message})}),c.on(`close`,e=>{let r=g();if(a){p({success:!1,output:t.toString(),error:`Command timed out after ${l}ms`,exitCode:e??void 0});return}let i=t.toString(),o=n.toString(),s=e??0,c=o?`${i}\nstderr:\n${o}`:i;p({success:!0,output:r===void 0?c:`${c}\n${r}`,exitCode:s})})})}function un(e,t){let n=l({executable:t.shellExecutable});return H(e,t.description??an(n,t.availableTools),sn,async(e,r)=>ln(e,t,n,r?.signal,r?.shellTraceEnv))}function dn(e){return un(`Shell`,e)}function fn(e){return un(`Bash`,e)}function K(e,t){return t!==void 0&&Le(t,e)}function pn(e,t){return t===void 0?e:D(t,e)}function q(e,t){if(t===void 0){let t={success:!1,output:``,error:`Access denied: "${e}" cannot be checked because no containment root is configured for this tool. This is an assembly bug, not a path problem — the tool was constructed without a \`cwd\`, so it has no boundary to enforce (ARCH-010).`};return JSON.stringify(t)}if(!K(e,t)){let t={success:!1,output:``,error:`Access denied: "${e}" is outside the working directory`};return JSON.stringify(t)}}function mn(e,t){if(t===void 0)return{root:``,error:q(e??``,void 0)};let n=e?D(t,e):t;return{root:n,error:q(n,t)}}const hn=2e3,J=4*1024*1024;var Y=class extends c{boundary;constructor(e){super(`Read ${e} exceeds its UTF-8 byte limit`,`Read`),this.boundary=e}},X=class extends c{constructor(){super(`Read cancelled`,`Read`)}};const gn=k.object({filePath:k.string().describe(`The absolute path to the file to read`),offset:k.number().optional().describe(`The line number to start reading from (1-based). Only provide if the file is too large to read at once`),limit:k.number().optional().describe(`The number of lines to read (default: ${hn}). Only provide if the file is too large to read at once`)});function _n(e){let t=Math.min(e.length,8192);for(let n=0;n<t;n++)if(e[n]===0)return!0;return!1}function vn(e,t){let n=t+e.length-1,r=String(n).length;return e.map((e,n)=>`${String(t+n).padStart(r,` `)}\t${e}`).join(`
|
|
7
7
|
`)}function yn(e,t,n,r){let i=[],a=0,o=0,s=0,c=Math.trunc(n-1),l=Math.trunc(n-1+r);for(;s<t.length;){let e=t.indexOf(`
|
|
8
|
-
`,s),r=e===-1?t.length:e;if(o++,o>c&&o<=l){let e=t.slice(s,r);if(a+=Buffer.byteLength(e,`utf8`)+String(n+i.length).length+1,a>J)throw new Y(`output`);i.push(e)}if(e===-1)break;s=e+1}let u=i.length,d=u<o?`[File: ${e} (lines ${n}-${n+u-1} of ${o})]\n`:`[File: ${e} (${o} lines)]\n`,f=String(n+u-1).length,p=Buffer.byteLength(d,`utf8`)+Math.max(0,u-1);for(let e of i)p+=f+1+Buffer.byteLength(e,`utf8`);if(p>J)throw new Y(`output`);let m={success:!0,output:d+vn(i,n)};return JSON.stringify(m)}async function bn(e,t){if(t.signal?.aborted)throw new X;let{offset:n,limit:r=hn}=e,i=t.sandboxClient?e.filePath:pn(e.filePath,t.cwd),a=n!==void 0&&n>0?n:1;if(t.sandboxClient)try{let e=await t.sandboxClient.readFile(i);if(t.signal?.aborted)throw new X;if(Buffer.byteLength(e,`utf8`)>J)throw new Y(`input`);return yn(i,e,a,r)}catch(e){if(e instanceof Y||e instanceof X)throw e;let t={success:!1,output:``,error:e instanceof Error?e.message:String(e)};return JSON.stringify(t)}let o=q(i,t.cwd);if(o!==void 0)return o;let s;try{
|
|
8
|
+
`,s),r=e===-1?t.length:e;if(o++,o>c&&o<=l){let e=t.slice(s,r);if(a+=Buffer.byteLength(e,`utf8`)+String(n+i.length).length+1,a>J)throw new Y(`output`);i.push(e)}if(e===-1)break;s=e+1}let u=i.length,d=u<o?`[File: ${e} (lines ${n}-${n+u-1} of ${o})]\n`:`[File: ${e} (${o} lines)]\n`,f=String(n+u-1).length,p=Buffer.byteLength(d,`utf8`)+Math.max(0,u-1);for(let e of i)p+=f+1+Buffer.byteLength(e,`utf8`);if(p>J)throw new Y(`output`);let m={success:!0,output:d+vn(i,n)};return JSON.stringify(m)}async function bn(e,t){if(t.signal?.aborted)throw new X;let{offset:n,limit:r=hn}=e,i=t.sandboxClient?e.filePath:pn(e.filePath,t.cwd),a=n!==void 0&&n>0?n:1;if(t.sandboxClient)try{let e=await t.sandboxClient.readFile(i);if(t.signal?.aborted)throw new X;if(Buffer.byteLength(e,`utf8`)>J)throw new Y(`input`);return yn(i,e,a,r)}catch(e){if(e instanceof Y||e instanceof X)throw e;let t={success:!1,output:``,error:e instanceof Error?e.message:String(e)};return JSON.stringify(t)}let o=q(i,t.cwd);if(o!==void 0)return o;let s=e=>JSON.stringify({success:!1,output:``,error:e}),c;try{c=await ge(i,g.O_RDONLY|g.O_NONBLOCK,384)}catch(e){let t=await O(i).catch(()=>void 0);return t===void 0?s(`File not found: ${i}`):t.isFile()?s(e instanceof Error?e.message:String(e)):s(`Path is not a file: ${i}`)}let l=Buffer.alloc(0),u=!1;try{if(!(await c.stat()).isFile())return s(`Path is not a file: ${i}`);let e=[],n=Buffer.allocUnsafe(65536),r=0,a=0;for(;r<=J;){if(t.signal?.aborted)throw new X;let{bytesRead:i}=await c.read(n,0,Math.min(n.length,4194305-r),null);if(i===0)break;let o=Math.min(i,8192-a);if(o>0&&_n(n.subarray(0,o))){u=!0;break}if(a+=o,r+=i,r>J)throw new Y(`input`);e.push(Buffer.from(n.subarray(0,i)))}u||(l=Buffer.concat(e,r))}catch(e){if(e instanceof Y||e instanceof X)throw e;return s(e instanceof Error?e.message:String(e))}finally{await c.close()}if(t.signal?.aborted)throw new X;if(u){let e={success:!1,output:``,error:`Binary file not supported: ${i}`};return JSON.stringify(e)}return yn(i,l.toString(`utf8`),a,r)}function xn(e){return H(`Read`,e.description??`Reads a file from the local filesystem.
|
|
9
9
|
|
|
10
10
|
By default, reads up to 2000 lines from the beginning of the file. You can optionally specify offset and limit for partial reads.
|
|
11
11
|
|
|
@@ -63,5 +63,5 @@ readline.createInterface({ input: process.stdin }).on('line', line => {
|
|
|
63
63
|
`))>=0;){let t=e.slice(0,n);e=e.slice(n+1);try{this.emit(`message`,JSON.parse(t))}catch{this.emit(`error`)}}}),this.child.stderr.resume(),this.child.on(`error`,()=>this.emit(`error`)),this.child.stdin.on(`error`,()=>this.emit(`error`)),this.closed=new Promise(e=>{this.child.once(`close`,()=>{this.emit(`exit`),e()})})}postMessage(e){this.child.stdin.write(JSON.stringify(e)+`
|
|
64
64
|
`)}async terminate(){this.child.exitCode===null&&this.child.signalCode===null&&this.child.kill(`SIGKILL`),await this.closed}},Gn=class{pattern;signal;worker=process.versions.bun?new Wn:new ke(Un,{eval:!0,execArgv:[],resourceLimits:{maxOldGenerationSizeMb:128,maxYoungGenerationSizeMb:32}});pending=new Map;nextId=0;stopped=!1;termination;timer;abort=()=>{this.stop(Error(`Grep search cancelled`))};constructor(e,t){this.pattern=e,this.signal=t,this.worker.on(`message`,e=>{let t=this.pending.get(e.id);!t||this.stopped||(this.pending.delete(e.id),Array.isArray(e.matches)&&e.matches.every(e=>typeof e==`string`)?t.resolve(e.matches):t.reject(Error(e.error??`Invalid grep worker response`)))}),this.worker.on(`error`,()=>{this.stop(Error(`Grep search worker failed`))}),this.worker.once(`exit`,()=>{this.stop(Error(`Grep search worker exited`))}),this.timer=setTimeout(()=>{this.stop(Error(`Grep search timed out`))},2e3),t?.addEventListener(`abort`,this.abort,{once:!0}),t?.aborted&&this.abort()}search(e,t,n,r){if(this.stopped)return Promise.reject(Error(this.signal?.aborted?`Grep search cancelled`:`Grep search timed out`));let i=this.nextId++;return new Promise((a,o)=>{this.pending.set(i,{resolve:a,reject:o});try{this.worker.postMessage({id:i,content:e,filePath:t,pattern:this.pattern,contextLines:n,outputMode:r})}catch{this.stop(Error(`Grep search worker failed`))}})}async stop(e){return this.termination?this.termination:(this.stopped=!0,clearTimeout(this.timer),this.signal?.removeEventListener(`abort`,this.abort),this.termination=(async()=>{try{await this.worker.terminate()}catch{}for(let t of this.pending.values())t.reject(e??Error(`Grep search stopped`));this.pending.clear()})(),this.termination)}};const Kn=k.object({pattern:k.string().describe(`The regular expression pattern to search for in file contents`),path:k.string().optional().describe(`File or directory to search in. Defaults to the current working directory`),glob:k.string().optional().describe(`Glob pattern to filter files (e.g. "*.ts", "*.{ts,tsx}"). Only files matching this pattern will be searched`),contextLines:k.number().optional().describe(`Number of context lines to show before and after each match. Only applies when outputMode is "content". Default: 0`),outputMode:k.enum([`files_with_matches`,`content`,`count`]).optional().describe(`Output mode: "files_with_matches" shows only file paths (default), "content" shows matching lines with context, "count" shows per-file match counts`),headLimit:k.number().int().positive().optional().describe(`Maximum number of result lines (file paths, content lines, or count rows) to return. Excess results are truncated with a marker line`)}),qn=4*1024*1024;var Q=class extends c{reason;constructor(e){super(`Grep search ${e===`timeout`?`timed out`:e===`cancelled`?`cancelled`:e===`limit`?`exceeded its byte limit`:`worker failed`}`,`Grep`),this.reason=e}};async function Jn(e,t){let{pattern:n,path:r,glob:i,contextLines:a=0,outputMode:o=`files_with_matches`,headLimit:s}=e,c=t.cwd,{root:l,error:u}=mn(r,c);if(u)return u;try{new RegExp(n)}catch{let e={success:!1,output:``,error:`Invalid regex pattern: ${n}`};return JSON.stringify(e)}let d;try{d=await O(l)}catch{let e={success:!1,output:``,error:`Path not found: ${l}`};return JSON.stringify(e)}let f,p=!1;if(d.isFile())f=[l];else{let e=await Vn(l,i,c);f=e.files,p=e.truncated}let m=new Gn(n,t.signal),h=new AbortController,g=()=>h.abort();t.signal?.addEventListener(`abort`,g,{once:!0}),t.signal?.aborted&&g();let _;try{if(h.signal.aborted)throw new Q(`cancelled`);let e=Array(f.length),t=0,n,r=async e=>{let t;try{if((await O(e)).size>qn)throw new Q(`limit`);let n=ee(e,{highWaterMark:65536,signal:h.signal}),r=[],i=0;try{for await(let e of n){if(h.signal.aborted)throw new Q(`cancelled`);let t=Buffer.isBuffer(e)?e:Buffer.from(e);if(i+=t.length,i>qn)throw new Q(`limit`);r.push(t)}}finally{n.destroy()}let a=Buffer.concat(r,i),o=Math.min(a.length,8192),s=!1;for(let e=0;e<o;e++)if(a[e]===0){s=!0;break}if(s)return[];t=a.toString(`utf8`)}catch(e){if(e instanceof Q)throw e;if(h.signal.aborted)throw new Q(`cancelled`);return[]}return m.search(t,e,a,o)};if(await Promise.all(Array.from({length:Math.min(8,f.length)},async()=>{for(;n===void 0&&t<f.length;){let i=t++;try{e[i]=await r(f[i])}catch(e){n===void 0&&(n=e,h.abort(),m.stop(e instanceof Error?e:Error(`Grep search failed`)))}}})),n!==void 0)throw n;_=e}catch(e){let t=e instanceof Error?e.message:``;throw e instanceof Q?e:new Q(t.includes(`timed out`)?`timeout`:t.includes(`cancelled`)?`cancelled`:t.includes(`byte limit`)?`limit`:`failed`)}finally{t.signal?.removeEventListener(`abort`,g),await m.stop()}let v=0;for(let e of _)for(let t of e)if(v+=Buffer.byteLength(t,`utf8`)+1,v>4*1024*1024)throw new Q(`limit`);let y=_.flat();if(s!==void 0&&y.length>s){let e=y.length-s;y=[...y.slice(0,s),`(+${e} more results truncated by headLimit)`]}p&&(y=[...y,`[File enumeration stopped early; the search tree has more files than this tool scans in one call. Results may be incomplete — narrow the path or glob.]`]);let b={success:!0,output:y.length>0?y.join(`
|
|
65
65
|
`):`(no matches)`};return JSON.stringify(b)}function Yn(e){return`A powerful search tool built on regex matching.\n\nSupports full regex syntax (e.g., 'log.*Error', 'function\\\\s+\\\\w+'). Filter files with glob parameter (e.g., '*.js', '**/*.tsx').\n\nOutput modes: 'content' shows matching lines with context, 'files_with_matches' shows only file paths (default), 'count' shows per-file match counts.\n\nPrefer this tool over running grep or rg through the ${e} tool — it returns structured results directly.\n\nUse headLimit to control result size and save context space.`}function Xn(e){return H(`Grep`,e.description??Yn(e.shellToolName??`Shell`),Kn,async t=>Jn(t,e))}const Zn=3e4,Qn=5e6,$n=k.object({url:k.string().describe(`The URL to fetch`),headers:k.record(k.string()).optional().describe(`Optional HTTP headers as key-value pairs`)});function er(e,t){let n=`<${t}`,r=`</${t}>`,i=e.replace(/[A-Z]/g,e=>e.toLowerCase()),a=[],o=0;for(;;){let t=i.indexOf(n,o);if(t<0)break;let s=i.indexOf(r,t+n.length);if(s<0)break;a.push(e.slice(o,t)),o=s+r.length}return a.push(e.slice(o)),a.join(``)}function tr(e){let t=[],n=0;for(;;){let r=e.indexOf(`<`,n);if(r<0)break;let i=e.indexOf(`>`,r+1);if(i<0)break;if(i===r+1){t.push(e.slice(n,r+1)),n=r+1;continue}t.push(e.slice(n,r),` `),n=i+1}return t.push(e.slice(n)),t.join(``)}const nr={"&":`&`,"<":`<`,">":`>`,""":`"`,"'":`'`," ":` `},rr=/&(?:amp|lt|gt|quot|nbsp|#39);/g;function ir(e){return tr(er(er(e,`script`),`style`)).replace(rr,e=>nr[e]).replace(/\s+/g,` `).trim()}function ar(e){if(!(e instanceof Error))return String(e);if(e.name===`AbortError`)return`Request timed out after ${Zn/1e3}s. The server did not respond in time.`;let t=e.code;return t===`ENOTFOUND`||t===`EAI_AGAIN`?`Network error: DNS resolution failed for this host. The URL may be incorrect or the host does not exist. Do not retry with the same URL.`:t===`ECONNREFUSED`?`Network error: Connection refused. The server is not accepting connections at this address. Do not retry with the same URL.`:t===`ECONNRESET`?`Network error: Connection was reset by the server. The server may be temporarily unavailable.`:t===`ETIMEDOUT`?`Network error: Connection timed out. The server is not reachable within the expected time.`:t===`CERT_HAS_EXPIRED`||t===`UNABLE_TO_VERIFY_LEAF_SIGNATURE`?`Network error: SSL certificate error (${t}). The server's certificate is invalid. Do not retry with the same URL.`:`Network error: ${e.message} Check that the URL is correct and the server is reachable.`}async function or(e,t,n){let{url:r,headers:i}=e;try{new URL(r)}catch{let e={success:!1,output:``,error:`Invalid URL: "${r}". Fix the URL format before retrying.`};return JSON.stringify(e)}try{let e=await tt(r,{headers:{"User-Agent":`Robota-CLI/3.0`,...i??{}},signal:n,timeoutMs:Zn,maxResponseBytes:Qn},t.policy,t.deps);if(!e.ok){let{rejection:t}=e,n={success:!1,output:``,error:t.reason===`response_too_large`?`Response too large (max ${Qn} bytes). Consider fetching a more specific URL or a paginated endpoint.`:`Blocked by egress policy: ${t.message} Do not retry with the same URL.`};return JSON.stringify(n)}if(e.status<200||e.status>=300){let t=e.status>=500?` The server is temporarily unavailable — retrying may help.`:` Do not retry with the same URL.`,n={success:!1,output:``,error:`HTTP ${e.status} ${e.statusText}.${t}`};return JSON.stringify(n)}let a=e.headers.get(`content-type`)??``,o=new TextDecoder().decode(e.body);return a.includes(`html`)&&(o=ir(o)),JSON.stringify({success:!0,output:o})}catch(e){let t={success:!1,output:``,error:ar(e)};return JSON.stringify(t)}}function sr(e={}){let t=e.egress??{};return H(`WebFetch`,e.description??`Fetch a URL and return its content as text. HTML pages are converted to plain text.`,$n,async(e,n)=>or(e,t,n?.signal))}const cr=sr();function lr(){return{async search({query:e,limit:t},n){let r=process.env.BRAVE_API_KEY;if(!r)throw Error(`Web search requires BRAVE_API_KEY environment variable for the default Brave Search provider, or inject a custom search provider at the composition root.`);let i=new URLSearchParams({q:e,count:String(Math.min(t,20))}),a=await fetch(`https://api.search.brave.com/res/v1/web/search?${i}`,{headers:{Accept:`application/json`,"Accept-Encoding":`gzip`,"X-Subscription-Token":r},...n?{signal:n}:{}});if(!a.ok)throw Error(`Brave Search API error: HTTP ${a.status} ${a.statusText}`);return((await a.json()).web?.results??[]).map(e=>({title:e.title,url:e.url,snippet:e.description}))}}}const ur=k.object({query:k.string().describe(`The search query`),limit:k.number().optional().describe(`Maximum number of results to return (default: 10)`)});async function dr(e,t,n){let{query:r,limit:i=10}=e;try{let e=new AbortController,a=setTimeout(()=>e.abort(),15e3),o=n?AbortSignal.any([e.signal,n]):e.signal;try{let e=await t.search({query:r,limit:i},o),n={success:!0,output:JSON.stringify(e,null,2)};return JSON.stringify(n)}finally{clearTimeout(a)}}catch(e){let t={success:!1,output:``,error:e instanceof Error?e.message:String(e)};return JSON.stringify(t)}}function fr(e={}){let t=e.provider??lr();return H(`WebSearch`,e.description??`Search the web and return results with title, URL, and snippet.`,ur,async(e,n)=>dr(e,t,n?.signal))}const pr=fr(),mr=k.object({question:k.string().min(1).describe(`The complete question to ask the user.`),header:k.string().optional().describe(`Very short topic label for the question (e.g. "Auth method").`),options:k.array(k.union([k.string().min(1).describe(`Display text of this choice.`),k.object({label:k.string().min(1).describe(`Display text of this choice.`),description:k.string().optional().describe(`What choosing this option means.`)})])).optional().describe(`Predefined choices (strings or {label, description}). Omit for pure free text.`),multiSelect:k.boolean().optional().describe(`Allow selecting multiple options (default: single select).`),allowFreeText:k.boolean().optional().describe(`Allow a typed custom answer besides the options (default: true).`)}),hr=k.object({questions:k.array(mr).min(1).max(4).describe(`Questions to ask the user (1-4), rendered one at a time.`)}),gr=[`Ask the user one or more structured questions and wait for their answers.`,``,`Use this when you are blocked on a decision only the user can make — ambiguous requirements,`,`mutually exclusive approaches, or choices with real trade-offs. Do not use it for decisions with`,`a conventional default or facts you can verify yourself.`,``,`Provide 1-4 questions. Each question offers predefined options and/or free text:`,` - options + default: user picks one option (or types a custom answer unless allowFreeText: false)`,` - multiSelect: true: user may pick several options`,` - no options: pure free-text entry`,``,"The result is a JSON array with one entry per question: the selected option labels in `values`","and/or the typed answer in `text`, or `cancelled: true` if the user dismissed the question.","If no interactive user is attached (headless run), the result is `{ unavailable: true }` —",`continue autonomously with your best judgment and say what you assumed.`].join(`
|
|
66
|
-
`);function _r(e){let t=(e.options??[]).map(e=>typeof e==`string`?{label:e}:e),n=e.multiSelect===!0&&t.length>1;return{id:`ask_${pe()}`,title:e.question,...e.header===void 0?{}:{description:e.header},...t.length>0?{options:t.map(e=>({value:e.label,label:e.label,...e.description===void 0?{}:{description:e.description}}))}:{},minSelect:+(t.length>0),maxSelect:n?t.length:1,allowFreeText:e.allowFreeText!==!1||t.length===0}}async function vr(e,t){let n=[],r=!1;for(let i of e.questions){if(r){n.push({question:i.question,cancelled:!0});continue}let e=await t(_r(i));if(e.type===`cancelled`){r=!0,n.push({question:i.question,cancelled:!0});continue}n.push({question:i.question,values:[...e.values],...e.text===void 0?{}:{text:e.text}})}return{answers:n}}function yr(e={}){return H(`AskUserQuestion`,e.description??gr,hr,async(e,t)=>{let n=e,r=t?.ask,i=r?await vr(n,r):{unavailable:!0,reason:`no interactive user attached`},a={success:!0,output:JSON.stringify(i)};return JSON.stringify(a)})}yr();const br=1/0;function $(e,t){e.description!==void 0&&t.push(e.description);for(let[n,r]of Object.entries(e.properties??{}))t.push(n),$(r,t);e.items!==void 0&&$(e.items,t);for(let n of e.anyOf??[])$(n,t)}function xr(e,t){let n=e.name.toLowerCase();if(n===t)return 0;if(n.includes(t))return 1;if(e.description.toLowerCase().includes(t))return 2;let r=[];return $(e.parameters,r),r.some(e=>e.toLowerCase().includes(t))?3:br}function Sr(e,t,n){let r=t.trim().toLowerCase();return r.length===0?[]:e.map(e=>({schema:e,rank:xr(e,r)})).filter(e=>e.rank!==br).sort((e,t)=>e.rank-t.rank||(e.schema.name<t.schema.name?-1:1)).slice(0,n).map(e=>e.schema)}const Cr=
|
|
66
|
+
`);function _r(e){let t=(e.options??[]).map(e=>typeof e==`string`?{label:e}:e),n=e.multiSelect===!0&&t.length>1;return{id:`ask_${pe()}`,title:e.question,...e.header===void 0?{}:{description:e.header},...t.length>0?{options:t.map(e=>({value:e.label,label:e.label,...e.description===void 0?{}:{description:e.description}}))}:{},minSelect:+(t.length>0),maxSelect:n?t.length:1,allowFreeText:e.allowFreeText!==!1||t.length===0}}async function vr(e,t){let n=[],r=!1;for(let i of e.questions){if(r){n.push({question:i.question,cancelled:!0});continue}let e=await t(_r(i));if(e.type===`cancelled`){r=!0,n.push({question:i.question,cancelled:!0});continue}n.push({question:i.question,values:[...e.values],...e.text===void 0?{}:{text:e.text}})}return{answers:n}}function yr(e={}){return H(`AskUserQuestion`,e.description??gr,hr,async(e,t)=>{let n=e,r=t?.ask,i=r?await vr(n,r):{unavailable:!0,reason:`no interactive user attached`},a={success:!0,output:JSON.stringify(i)};return JSON.stringify(a)})}yr();const br=1/0;function $(e,t){e.description!==void 0&&t.push(e.description);for(let[n,r]of Object.entries(e.properties??{}))t.push(n),$(r,t);e.items!==void 0&&$(e.items,t);for(let n of e.anyOf??[])$(n,t)}function xr(e,t){let n=e.name.toLowerCase();if(n===t)return 0;if(n.includes(t))return 1;if(e.description.toLowerCase().includes(t))return 2;let r=[];return $(e.parameters,r),r.some(e=>e.toLowerCase().includes(t))?3:br}function Sr(e,t,n){let r=t.trim().toLowerCase();return r.length===0?[]:e.map(e=>({schema:e,rank:xr(e,r)})).filter(e=>e.rank!==br).sort((e,t)=>e.rank-t.rank||(e.schema.name<t.schema.name?-1:1)).slice(0,n).map(e=>e.schema)}const Cr=t,wr=k.object({query:k.string().optional().describe(`Text matched case-insensitively against each withheld tool's name, description, and its parameters' names and descriptions. An exact tool name is a valid query.`),names:k.array(k.string().min(1)).optional().describe(`Exact tool names to load, skipping the search. An unknown name is an error naming it.`),limit:k.number().int().positive().optional().describe(`Maximum tools to load from a query match (default 5).`)}),Tr=[`Load tools whose definitions are withheld from your tool list, so you can call them.`,``,`Some tools are deferred: they exist and are callable, but their schemas are not sent to you until`,`you load them here. If a capability you need is not in your tool list, search for it before`,`concluding it is unavailable — and if a tool call fails as "deferred and not yet loaded", load it`,`with this tool and call it again.`,``,` - query: what you are trying to do (e.g. "read a spreadsheet", "postgres"). Matched against tool`,` names, descriptions, and parameter names and descriptions. An exact tool name works too.`,` - names: load exactly these tools, skipping the search. Unknown names are an error.`,` - limit: how many matches to load (default 5).`,``,`The result lists what is now loaded; those tools appear in your tool list from your next turn and`,`stay available. A query that matches nothing returns an empty list — that is a normal answer, not`,"a failure. `unavailableSources` names any tool source that could not be consulted."].join(`
|
|
67
67
|
`);function Er(e){let t=e?.deferredTools;if(!t)throw Error(`${Cr} requires the deferred-tool catalog, which the execution runtime injects; it was not present, so this tool was called outside the agent execution loop.`);return t}function Dr(e,t){if(e.names!==void 0)return t.loadDeferredTools(e.names);if(e.query===void 0)throw Error(`${Cr} needs either "query" to search for tools or "names" to load exact ones.`);let n=Sr(t.listDeferredTools(),e.query,e.limit??5);return t.loadDeferredTools(n.map(e=>e.name))}function Or(e={}){return H(Cr,e.description??Tr,wr,async(e,t)=>{let n={loaded:Dr(e,Er(t)).map(({name:e,description:t})=>({name:e,description:t})),unavailableSources:[]},r={success:!0,output:JSON.stringify(n)};return JSON.stringify(r)})}Or();export{$e as A,pr as C,tt as D,j as E,Fe as M,Pe as N,nt as O,Ae as P,cr as S,Le as T,On as _,X as a,Mt as b,fn as c,Rn as d,Xn as f,Or as g,dn as h,Y as i,Ve as j,He as k,nn as l,Wt as m,Q as n,ut as o,xn as p,Lt as r,yr as s,kt as t,Nn as u,H as v,Be as w,ot as x,at as y};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{z as e}from"zod";import{zodToJsonSchema as t}from"zod-to-json-schema";function n(e,t,n,r,i,a,o){return{code:t,category:e,message:n,retryable:r,context:i,fix:a,agentHint:o}}function r(e,t,r,i,a){return n(`validation`,e,t,!1,r,i,a)}function i(e,t,r,i,a){return n(`dispatch`,e,t,!0,r,i,a)}function a(e,t,r,i,a,o){return n(`task_execution`,e,t,r,i,a,o)}function o(e){return a(`DAG_TASK_EXECUTION_CANCELLED`,`Task execution was cancelled`,!1,{taskRunId:e})}function s(e,t){let n=[],r=``,i=0,a=(e,a)=>{if(a>t-i)throw c;i+=a,r+=e,r.length>=8192&&(n.push(r),r=``)},o=e=>{a(`"`,1);for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n===34||n===92)a(`\\${e[t]}`,2);else if(n<32){let e=u[n]??`\\u${n.toString(16).padStart(4,`0`)}`;a(e,e.length)}else n<128?a(e[t],1):n<2048?a(e[t],2):n>=55296&&n<=56319&&t+1<e.length&&e.charCodeAt(t+1)>=56320&&e.charCodeAt(t+1)<=57343?(a(e.slice(t,t+2),4),t++):n>=55296&&n<=57343?a(`\\u${n.toString(16)}`,6):a(e[t],3)}a(`"`,1)},s=[],d=new Set,f=e=>{if(e===null)return a(`null`,4);if(typeof e==`string`)return o(e);if(typeof e==`boolean`)return a(e?`true`:`false`,e?4:5);if(typeof e==`number`){let t=JSON.stringify(e);return a(t,t.length)}if(typeof e!=`object`||d.has(e))throw l;if(Array.isArray(e))d.add(e),a(`[`,1),s.push({kind:`array`,value:e,index:0});else{let t=Object.getPrototypeOf(e);if(t!==Object.prototype&&t!==null)throw l;d.add(e),a(`{`,1),s.push({kind:`object`,value:e,keys:Object.keys(e),index:0,first:!0})}};try{for(f(e);s.length>0;){let e=s[s.length-1];if(e.kind===`array`){if(e.index===e.value.length){a(`]`,1),d.delete(e.value),s.pop();continue}e.index&&a(`,`,1);let t=Object.getOwnPropertyDescriptor(e.value,String(e.index++));if(t&&!(`value`in t))throw l;let n=t?.value;n===void 0||typeof n==`function`||typeof n==`symbol`?a(`null`,4):f(n)}else{if(e.index===e.keys.length){a(`}`,1),d.delete(e.value),s.pop();continue}let t=e.keys[e.index++],n=Object.getOwnPropertyDescriptor(e.value,t);if(!n||!(`value`in n))throw l;let r=n.value;if(r===void 0||typeof r==`function`||typeof r==`symbol`)continue;e.first||a(`,`,1),e.first=!1,o(t),a(`:`,1),f(r)}}return r&&n.push(r),n.join(``)}catch(e){if(e===c)return;throw e===l?TypeError(`Snapshot must contain plain JSON data without accessors or cycles`):e}}const c=Symbol(`snapshot limit`),l=Symbol(`invalid snapshot`),u={8:`\\b`,9:`\\t`,10:`\\n`,12:`\\f`,13:`\\r`},d=Object.freeze({inputBytes:16*1024*1024,outputBytes:16*1024*1024});function f(e=d){if(!e||!Number.isSafeInteger(e.inputBytes)||e.inputBytes<0||!Number.isSafeInteger(e.outputBytes)||e.outputBytes<0)throw RangeError(`Task snapshot limits must be nonnegative safe integers`);return Object.freeze({inputBytes:e.inputBytes,outputBytes:e.outputBytes})}function p(e){let t=0;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);r<128?t++:r<2048?t+=2:r>=55296&&r<=56319&&e.charCodeAt(n+1)>=56320&&e.charCodeAt(n+1)<=57343?(t+=4,n++):t+=3}return t}var m=class{limits;occupied={input:0,output:0};poisoned=!1;constructor(e){this.limits=f(e)}close(){this.poisoned=!0}error(e){return a(this.poisoned?`DAG_TASK_SNAPSHOT_BUDGET_CLOSED`:`DAG_TASK_SNAPSHOT_BUDGET_EXCEEDED`,this.poisoned?`Task snapshot budget is closed`:`Task ${e} snapshot budget exceeded`,!1)}encode(e,t){if(this.poisoned)return{ok:!1,error:this.error(e)};let n=this.limits[e===`input`?`inputBytes`:`outputBytes`]-this.occupied[e];try{let r=s(t,n);return r===void 0?{ok:!1,error:this.error(e)}:{ok:!0,value:{snapshot:r,bytes:p(r)}}}catch{return{ok:!1,error:a(`DAG_TASK_SNAPSHOT_INVALID`,`Task snapshot must contain plain JSON data`,!1)}}}async admitValue(e,t,n){let r=this.encode(e,t);return r.ok?this.admit(e,r.value.snapshot,()=>n(r.value.snapshot)):r}async admitRun(e,t,n){let r=this.encode(`input`,e);if(!r.ok)return r;this.occupied.input+=r.value.bytes;let i=this.encode(`input`,t);if(!i.ok)return this.occupied.input-=r.value.bytes,i;this.occupied.input+=i.value.bytes;try{return await n(r.value.snapshot,i.value.snapshot),{ok:!0,value:void 0}}catch(e){throw this.poisoned=!0,e}}async admit(e,t,n){let r=p(t),i=e===`input`?this.limits.inputBytes:this.limits.outputBytes;if(this.poisoned||r>i-this.occupied[e])return{ok:!1,error:this.error(e)};this.occupied[e]+=r;try{let t=await n();return t.applied||(this.occupied[e]-=r),{ok:!0,value:t}}catch(e){throw this.poisoned=!0,e}}},h=class{limit;committed=0;reserved=0;closed=!1;constructor(e){if(this.limit=e,e!==void 0&&(!Number.isFinite(e)||e<=0))throw RangeError(`Root credit limit must be positive and finite`)}close(){this.closed=!0}reserve(e){if(!Number.isFinite(e)||e<0)return{ok:!1,error:r(`DAG_VALIDATION_NEGATIVE_ESTIMATED_CREDITS`,`estimatedCredits must be finite and zero or positive`,{estimatedCredits:e})};if(this.closed||this.limit!==void 0&&e>this.limit-this.committed-this.reserved)return{ok:!1,error:r(`DAG_VALIDATION_CREDIT_LIMIT_EXCEEDED`,`Estimated run credits exceeds root runCreditLimit`,{estimatedCredits:e,...this.limit===void 0?{}:{runCreditLimit:this.limit}})};this.reserved+=e;let t=!1;return{ok:!0,value:{commit:()=>(t||(t=!0,this.reserved-=e,this.committed+=e),this.committed),release:()=>{t||(t=!0,this.reserved-=e)}}}}};function g(e){if(e==null)return;if(typeof e!=`object`||Array.isArray(e))throw Error(`Invalid persisted DAG execution lineage`);let t=e,n=t.parentRunId!==void 0,r=!n||typeof t.parentRunId==`string`&&t.parentRunId.length>0;if(typeof t.rootRunId!=`string`||t.rootRunId.length===0||!r||!Number.isSafeInteger(t.depth)||t.depth<0||t.maxDepth!==void 0&&(!Number.isSafeInteger(t.maxDepth)||t.maxDepth<1)||!Array.isArray(t.ancestorCompositeNodeTypes)||!t.ancestorCompositeNodeTypes.every(e=>typeof e==`string`&&e.length>0))throw Error(`Invalid persisted DAG execution lineage`);let i=t.depth,a=t.ancestorCompositeNodeTypes.length;if(!(i===0?!n&&a===0:n&&a===i))throw Error(`Invalid persisted DAG execution lineage`);return{rootRunId:t.rootRunId,...n?{parentRunId:t.parentRunId}:{},depth:i,...t.maxDepth===void 0?{}:{maxDepth:t.maxDepth},ancestorCompositeNodeTypes:[...t.ancestorCompositeNodeTypes]}}const _=Object.freeze({maxTextRepeatOutputBytes:4*1024*1024,maxTextReplaceOutputBytes:4*1024*1024,maxTextTemplateOutputBytes:4*1024*1024,maxTextJoinOutputBytes:4*1024*1024,maxTextSplitOutputBytes:4*1024*1024,maxTextTransformOutputBytes:4*1024*1024,maxTextUpperOutputBytes:4*1024*1024,maxTextLowerOutputBytes:4*1024*1024,maxHttpResponseBodyBytes:4*1024*1024});function ee(e){let t=e===void 0?_.maxTextRepeatOutputBytes:e.maxTextRepeatOutputBytes;if(!Number.isSafeInteger(t)||t<0||t>_.maxTextRepeatOutputBytes)throw RangeError(`maxTextRepeatOutputBytes must be a safe integer between 0 and 4194304`);let n=e&&`maxTextReplaceOutputBytes`in e?e.maxTextReplaceOutputBytes:4*1024*1024;if(typeof n!=`number`||!Number.isSafeInteger(n)||n<0||n>4*1024*1024)throw RangeError(`maxTextReplaceOutputBytes must be a safe integer between 0 and 4194304`);let r=e&&`maxTextTemplateOutputBytes`in e?e.maxTextTemplateOutputBytes:4*1024*1024;if(typeof r!=`number`||!Number.isSafeInteger(r)||r<0||r>4*1024*1024)throw RangeError(`maxTextTemplateOutputBytes must be a safe integer between 0 and 4194304`);let i=e&&`maxTextJoinOutputBytes`in e?e.maxTextJoinOutputBytes:4*1024*1024;if(typeof i!=`number`||!Number.isSafeInteger(i)||i<0||i>4*1024*1024)throw RangeError(`maxTextJoinOutputBytes must be a safe integer between 0 and 4194304`);let a=e&&`maxTextSplitOutputBytes`in e?e.maxTextSplitOutputBytes:4*1024*1024;if(typeof a!=`number`||!Number.isSafeInteger(a)||a<0||a>4*1024*1024)throw RangeError(`maxTextSplitOutputBytes must be a safe integer between 0 and 4194304`);let o=e&&`maxTextTransformOutputBytes`in e?e.maxTextTransformOutputBytes:4*1024*1024;if(typeof o!=`number`||!Number.isSafeInteger(o)||o<0||o>4*1024*1024)throw RangeError(`maxTextTransformOutputBytes must be a safe integer between 0 and 4194304`);let s=e&&`maxTextUpperOutputBytes`in e?e.maxTextUpperOutputBytes:4*1024*1024;if(typeof s!=`number`||!Number.isSafeInteger(s)||s<0||s>4*1024*1024)throw RangeError(`maxTextUpperOutputBytes must be a safe integer between 0 and 4194304`);let c=e&&`maxTextLowerOutputBytes`in e?e.maxTextLowerOutputBytes:4*1024*1024;if(typeof c!=`number`||!Number.isSafeInteger(c)||c<0||c>4*1024*1024)throw RangeError(`maxTextLowerOutputBytes must be a safe integer between 0 and 4194304`);let l=e&&`maxHttpResponseBodyBytes`in e?e.maxHttpResponseBodyBytes:4*1024*1024;if(typeof l!=`number`||!Number.isSafeInteger(l)||l<0||l>4*1024*1024)throw RangeError(`maxHttpResponseBodyBytes must be a safe integer between 0 and 4194304`);return Object.freeze({maxTextRepeatOutputBytes:t,maxTextReplaceOutputBytes:n,maxTextTemplateOutputBytes:r,maxTextJoinOutputBytes:i,maxTextSplitOutputBytes:a,maxTextTransformOutputBytes:o,maxTextUpperOutputBytes:s,maxTextLowerOutputBytes:c,maxHttpResponseBodyBytes:l})}function v(e){let t=e.lastIndexOf(`[`);if(t<=0||!e.endsWith(`]`))return;let n=e.slice(0,t),r=e.slice(t+1,e.length-1);if(/^\d+$/.test(r))return{portKey:n,index:Number.parseInt(r,10)}}const y={CREATED:`created`,QUEUED:`queued`,RUNNING:`running`,SUCCESS:`success`,FAILED:`failed`,CANCELLED:`cancelled`},b={CREATED:`created`,QUEUED:`queued`,RUNNING:`running`,SUCCESS:`success`,FAILED:`failed`,UPSTREAM_FAILED:`upstream_failed`,SKIPPED:`skipped`,CANCELLED:`cancelled`},te={STARTED:`execution.started`,COMPLETED:`execution.completed`,FAILED:`execution.failed`},ne={STARTED:`task.started`,COMPLETED:`task.completed`,FAILED:`task.failed`},re={[`${y.CREATED}:QUEUE`]:y.QUEUED,[`${y.CREATED}:CANCEL`]:y.CANCELLED,[`${y.QUEUED}:START`]:y.RUNNING,[`${y.QUEUED}:CANCEL`]:y.CANCELLED,[`${y.RUNNING}:COMPLETE_SUCCESS`]:y.SUCCESS,[`${y.RUNNING}:COMPLETE_FAILURE`]:y.FAILED,[`${y.RUNNING}:CANCEL`]:y.CANCELLED};function x(e,t){return{code:`DAG_STATE_TRANSITION_INVALID`,category:`state_transition`,message:`DagRun transition is not allowed: ${e} -> ${t}`,retryable:!1,context:{currentStatus:e,event:t}}}function ie(e){return`run.${e}`}var S=class{static transition(e,t){let n=`${e}:${t}`,r=re[n];return r?{ok:!0,value:{nextStatus:r,domainEvents:[ie(r)]}}:{ok:!1,error:x(e,t)}}};const ae={[`${b.CREATED}:QUEUE`]:b.QUEUED,[`${b.CREATED}:CANCEL`]:b.CANCELLED,[`${b.QUEUED}:START`]:b.RUNNING,[`${b.QUEUED}:UPSTREAM_FAIL`]:b.UPSTREAM_FAILED,[`${b.QUEUED}:SKIP`]:b.SKIPPED,[`${b.QUEUED}:CANCEL`]:b.CANCELLED,[`${b.RUNNING}:COMPLETE_SUCCESS`]:b.SUCCESS,[`${b.RUNNING}:COMPLETE_FAILURE`]:b.FAILED,[`${b.RUNNING}:CANCEL`]:b.CANCELLED,[`${b.FAILED}:RETRY`]:b.QUEUED,[`${b.RUNNING}:RECLAIM`]:b.QUEUED};function oe(e,t){return{code:`DAG_STATE_TRANSITION_INVALID`,category:`state_transition`,message:`TaskRun transition is not allowed: ${e} -> ${t}`,retryable:!1,context:{currentStatus:e,event:t}}}function se(e){return`task.${e}`}var C=class{static transition(e,t){let n=`${e}:${t}`,r=ae[n];return r?{ok:!0,value:{nextStatus:r,domainEvents:[se(r)]}}:{ok:!1,error:oe(e,t)}}};function w(e,t,n){e.push({path:t,message:n})}function T(e,t){return typeof t==`number`?`${e}[${t}]`:e===``?t:`${e}.${t}`}function E(e,t,n){return typeof e!=`object`||!e||Array.isArray(e)?w(n,t,`expected an object, got ${P(e)}`):e}function D(e,t,n){return typeof e==`string`?e:w(n,t,`expected a string, got ${P(e)}`)}function O(e,t,n){return typeof e==`number`&&Number.isFinite(e)?e:w(n,t,`expected a finite number, got ${P(e)}`)}function k(e,t,n){return typeof e==`boolean`?e:w(n,t,`expected a boolean, got ${P(e)}`)}function A(e,t,n,r){return typeof e==`string`&&t.includes(e)?e:w(r,n,`expected one of ${t.map(e=>`'${e}'`).join(`, `)}, got ${P(e)}`)}function j(e,t,n,r){return e===void 0?void 0:r(e,t,n)}function M(e,t,n,r){if(!Array.isArray(e))return w(n,t,`expected an array, got ${P(e)}`);let i=n.length,a=e.map((e,i)=>r(e,T(t,i),n));return n.length===i?a:void 0}function N(e,t,n){return M(e,t,n,D)}function P(e){return e===null?`null`:Array.isArray(e)?`an array`:typeof e==`string`?`string '${e.length>40?`${e.slice(0,40)}…`:e}'`:typeof e}function F(e){return e.map(e=>`${e.path===``?`$`:e.path}: ${e.message}`).join(`; `)}function ce(e,t,n,i={}){return r(e,`${t}: ${F(n)}`,{...i,issueCount:n.length,firstIssuePath:n[0]?.path??``})}const le=[`draft`,`published`,`deprecated`],ue=[`string`,`number`,`boolean`,`object`,`array`,`binary`],de=[`image`,`video`,`audio`,`file`];function I(e,t={}){let n=[],r=fe(e,``,n,t);return r!==void 0&&n.length===0?{ok:!0,value:r}:{ok:!1,error:n}}function L(e,t,n,r={},i={}){let a=I(e,i);return a.ok?a:{ok:!1,error:ce(t,n,a.error,r)}}function fe(e,t,n,r){let i=E(e,t,n);if(i===void 0)return;let a=D(i.dagId,T(t,`dagId`),n),o=O(i.version,T(t,`version`),n),s=i.status===void 0&&r.absentStatus!==void 0?r.absentStatus:A(i.status,le,T(t,`status`),n),c=M(i.nodes,T(t,`nodes`),n,me),l=i.edges===void 0&&r.absentEdgesAsEmpty?[]:M(i.edges,T(t,`edges`),n,ge),u=j(i.costPolicy,T(t,`costPolicy`),n,R),d=j(i.inputSchema,T(t,`inputSchema`),n,D),f=j(i.outputSchema,T(t,`outputSchema`),n,D);if(a===void 0||o===void 0||s===void 0||c===void 0||l===void 0)return;let p={dagId:a,version:o,status:s,nodes:c,edges:l};return u!==void 0&&(p.costPolicy=u),d!==void 0&&(p.inputSchema=d),f!==void 0&&(p.outputSchema=f),p}function R(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i=O(r.runCreditLimit,T(t,`runCreditLimit`),n),a=O(r.costPolicyVersion,T(t,`costPolicyVersion`),n);return i===void 0||a===void 0?void 0:{runCreditLimit:i,costPolicyVersion:a}}function pe(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i=O(r.x,T(t,`x`),n),a=O(r.y,T(t,`y`),n);return i===void 0||a===void 0?void 0:{x:i,y:a}}function z(e,t,n){return e===null||[`string`,`number`,`boolean`].includes(typeof e)?e:Array.isArray(e)?M(e,t,n,z):typeof e==`object`?B(e,t,n):w(n,t,`expected a JSON value, got ${typeof e}`)}function B(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i={},a=n.length;for(let[e,a]of Object.entries(r)){let r=z(a,T(t,e),n);r!==void 0&&(i[e]=r)}return n.length===a?i:void 0}function V(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i=e=>T(t,e),a=D(r.key,i(`key`),n),o=A(r.type,ue,i(`type`),n),s=k(r.required,i(`required`),n),c=j(r.label,i(`label`),n,D),l=j(r.order,i(`order`),n,O),u=j(r.description,i(`description`),n,D),d=j(r.binaryKind,i(`binaryKind`),n,(e,t,n)=>A(e,de,t,n)),f=j(r.mimeTypes,i(`mimeTypes`),n,N),p=j(r.isList,i(`isList`),n,k),m=j(r.minItems,i(`minItems`),n,O),h=j(r.maxItems,i(`maxItems`),n,O);if(a===void 0||o===void 0||s===void 0)return;let g={key:a,type:o,required:s};return c!==void 0&&(g.label=c),l!==void 0&&(g.order=l),u!==void 0&&(g.description=u),d!==void 0&&(g.binaryKind=d),f!==void 0&&(g.mimeTypes=f),p!==void 0&&(g.isList=p),m!==void 0&&(g.minItems=m),h!==void 0&&(g.maxItems=h),g}function me(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i=e=>T(t,e),a=D(r.nodeId,i(`nodeId`),n),o=D(r.nodeType,i(`nodeType`),n),s=N(r.dependsOn,i(`dependsOn`),n),c=B(r.config,i(`config`),n),l=j(r.position,i(`position`),n,pe),u=j(r.triggerPolicy,i(`triggerPolicy`),n,D),d=j(r.retryPolicy,i(`retryPolicy`),n,D),f=j(r.timeoutMs,i(`timeoutMs`),n,O),p=j(r.inputs,i(`inputs`),n,(e,t,n)=>M(e,t,n,V)),m=j(r.outputs,i(`outputs`),n,(e,t,n)=>M(e,t,n,V)),h=j(r.costPolicy,i(`costPolicy`),n,R);if(a===void 0||o===void 0||s===void 0||c===void 0)return;let g={nodeId:a,nodeType:o,dependsOn:s,config:c};return l!==void 0&&(g.position=l),u!==void 0&&(g.triggerPolicy=u),d!==void 0&&(g.retryPolicy=d),f!==void 0&&(g.timeoutMs=f),p!==void 0&&(g.inputs=p),m!==void 0&&(g.outputs=m),h!==void 0&&(g.costPolicy=h),g}function he(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i=D(r.outputKey,T(t,`outputKey`),n),a=D(r.inputKey,T(t,`inputKey`),n);return i===void 0||a===void 0?void 0:{outputKey:i,inputKey:a}}function ge(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i=D(r.from,T(t,`from`),n),a=D(r.to,T(t,`to`),n),o=j(r.bindings,T(t,`bindings`),n,(e,t,n)=>M(e,t,n,he));if(i===void 0||a===void 0)return;let s={from:i,to:a};return o!==void 0&&(s.bindings=o),s}function _e(e){let t=[],n=Se(e,``,t);return n!==void 0&&t.length===0?{ok:!0,value:n}:{ok:!1,error:t}}function H(e,t,n){if(!Array.isArray(e)||e.length!==2)return w(n,t,`expected a [number, number] pair`);let r=O(e[0],T(t,0),n),i=O(e[1],T(t,1),n);return r===void 0||i===void 0?void 0:[r,i]}function ve(e,t,n){if(!Array.isArray(e)||e.length!==6)return w(n,t,`expected a 6-tuple [linkId, srcId, srcSlot, tgtId, tgtSlot, type]`);let r=[0,1,2,3,4].map(r=>O(e[r],T(t,r),n)),i=D(e[5],T(t,5),n);if(r.some(e=>e===void 0)||i===void 0)return;let[a,o,s,c,l]=r;return[a,o,s,c,l,i]}function ye(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i=D(r.name,T(t,`name`),n),a=D(r.type,T(t,`type`),n),o=r.link,s=o===null?null:O(o,T(t,`link`),n);return i===void 0||a===void 0||s===void 0?void 0:{name:i,type:a,link:s}}function be(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i=D(r.name,T(t,`name`),n),a=D(r.type,T(t,`type`),n),o=M(r.links,T(t,`links`),n,O),s=j(r.slot_index,T(t,`slot_index`),n,O);if(i===void 0||a===void 0||o===void 0)return;let c={name:i,type:a,links:o};return s!==void 0&&(c.slot_index=s),c}function xe(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i=e=>T(t,e),a=O(r.id,i(`id`),n),o=D(r.type,i(`type`),n),s=H(r.pos,i(`pos`),n),c=j(r.size,i(`size`),n,H),l=j(r.flags,i(`flags`),n,E),u=j(r.order,i(`order`),n,O),d=j(r.mode,i(`mode`),n,O),f=j(r.inputs,i(`inputs`),n,(e,t,n)=>M(e,t,n,ye)),p=j(r.outputs,i(`outputs`),n,(e,t,n)=>M(e,t,n,be)),m=j(r.properties,i(`properties`),n,E),h=j(r.widgets_values,i(`widgets_values`),n,(e,t,n)=>Array.isArray(e)?e:w(n,t,`expected an array`));if(a===void 0||o===void 0||s===void 0)return;let g={id:a,type:o,pos:s};return c!==void 0&&(g.size=c),l!==void 0&&(g.flags=l),u!==void 0&&(g.order=u),d!==void 0&&(g.mode=d),f!==void 0&&(g.inputs=f),p!==void 0&&(g.outputs=p),m!==void 0&&(g.properties=m),h!==void 0&&(g.widgets_values=h),g}function Se(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i=e=>T(t,e);if(`dagId`in r)return w(n,i(`dagId`),`a workflow file carries no dagId — that is a definition file`);let a=O(r.last_node_id,i(`last_node_id`),n),o=O(r.last_link_id,i(`last_link_id`),n),s=M(r.nodes,i(`nodes`),n,xe),c=M(r.links,i(`links`),n,ve),l=O(r.version,i(`version`),n),u=j(r.groups,i(`groups`),n,(e,t,n)=>Array.isArray(e)?e:w(n,t,`expected an array`)),d=j(r.config,i(`config`),n,E),f=j(r.extra,i(`extra`),n,E);if(a===void 0||o===void 0||s===void 0||c===void 0||l===void 0)return;let p={last_node_id:a,last_link_id:o,nodes:s,links:c,version:l};return u!==void 0&&(p.groups=u),d!==void 0&&(p.config=d),f!==void 0&&(p.extra=f),p}function U(e){let t=Date.parse(e);return Number.isNaN(t)?{ok:!1,error:r(`DAG_VALIDATION_INVALID_LOGICAL_DATE`,`logicalDate must be a valid ISO-8601 datetime string`,{logicalDate:e})}:{ok:!0,value:new Date(t).toISOString()}}var Ce=class{clock;constructor(e){this.clock=e}resolve(e,t){let n=this.clock.nowIso();if(e===`scheduled`){if(!t)return{ok:!1,error:r(`DAG_VALIDATION_MISSING_LOGICAL_DATE`,`scheduled trigger requires logicalDate`,{trigger:e})};let i=U(t);return i.ok?{ok:!0,value:{trigger:e,logicalDate:i.value,requestedAt:n}}:i}if(!t)return{ok:!0,value:{trigger:e,logicalDate:n,requestedAt:n}};let i=U(t);return i.ok?{ok:!0,value:{trigger:e,logicalDate:i.value,requestedAt:n}}:i}},we=class{assertWithinBudget(e,t,n){if(t<0)return{ok:!1,error:r(`DAG_VALIDATION_NEGATIVE_ESTIMATED_CREDITS`,`estimatedCredits must be zero or positive`,{nextEstimatedCredits:t})};let i=e+t;return typeof n==`number`&&i>n?{ok:!1,error:r(`DAG_VALIDATION_CREDIT_LIMIT_EXCEEDED`,`Estimated run credits exceeds runCreditLimit`,{nextTotalCredits:i,runCreditLimit:n})}:{ok:!0,value:i}}},Te=class{lifecycleFactory;costPolicyEvaluator;constructor(e,t){this.lifecycleFactory=e,this.costPolicyEvaluator=t}async runNode(e){let t=()=>({ok:!1,error:o(e.context.taskRunId)});if(e.context.signal?.aborted)return t();let n=this.lifecycleFactory.create(e.context.nodeDefinition.nodeType);if(!n.ok)return n;let r=await n.value.initialize(e.context);if(e.context.signal?.aborted)return await n.value.dispose(e.context),t();if(!r.ok)return r;let i=await n.value.validateInput(e.input,e.context);if(e.context.signal?.aborted)return await n.value.dispose(e.context),t();if(!i.ok)return await n.value.dispose(e.context),i;let s=await n.value.estimateCost(e.input,e.context);if(e.context.signal?.aborted)return await n.value.dispose(e.context),t();if(!s.ok)return await n.value.dispose(e.context),s;let c=this.costPolicyEvaluator.assertWithinBudget(e.context.currentTotalCredits,s.value.estimatedCredits,e.context.runCreditLimit);if(!c.ok)return await n.value.dispose(e.context),c;if(e.context.reserveCredits){let r=await e.context.reserveCredits(s.value.estimatedCredits);if(!r.ok)return await n.value.dispose(e.context),r;if(e.context.signal?.aborted)return await n.value.dispose(e.context),t()}let l=e.context.rootCreditBudget?.reserve(s.value.estimatedCredits);if(l&&!l.ok)return await n.value.dispose(e.context),l;try{let r=await n.value.execute(e.input,e.context);if(e.context.signal?.aborted)return await n.value.dispose(e.context),t();if(!r.ok)return await n.value.dispose(e.context),r;let i=await n.value.validateOutput(r.value,e.context);if(e.context.signal?.aborted)return await n.value.dispose(e.context),t();if(!i.ok)return await n.value.dispose(e.context),i;let o=await n.value.dispose(e.context);return e.context.signal?.aborted?t():o.ok?(l?.value.commit(),{ok:!0,value:{output:r.value,estimatedCredits:s.value.estimatedCredits,totalCredits:c.value}}):{ok:!1,error:a(`DAG_TASK_EXECUTION_DISPOSE_FAILED`,`Node dispose step failed after execution`,!1,{nodeType:e.context.nodeDefinition.nodeType,taskRunId:e.context.taskRunId})}}finally{l?.ok&&l.value.release()}}},Ee=class{create(e){return{ok:!1,error:r(`DAG_VALIDATION_NODE_LIFECYCLE_NOT_REGISTERED`,`Node lifecycle is not registered for nodeType`,{nodeType:e})}}},De=class{nodeManifestRegistry;lineage;lifecycleFactory;runner;constructor(e,t,n){this.nodeManifestRegistry=e,this.lineage=n,this.lifecycleFactory=t??new Ee,this.runner=new Te(this.lifecycleFactory,new we)}async execute(e){if(!e.nodeDefinition)return{ok:!1,error:r(`DAG_VALIDATION_NODE_DEFINITION_MISSING`,`Task execution requires nodeDefinition in execution input`,{nodeId:e.nodeId})};let t=this.nodeManifestRegistry.getManifest(e.nodeDefinition.nodeType);if(!t)return{ok:!1,error:r(`DAG_VALIDATION_NODE_MANIFEST_NOT_FOUND`,`Node manifest is not registered for nodeType`,{nodeType:e.nodeDefinition.nodeType})};let n=await this.runner.runNode({input:e.input,context:{executionRoot:e.executionRoot,regexReplaceOperation:e.regexReplaceOperation,snapshotBudget:e.snapshotBudget,rootCreditBudget:e.rootCreditBudget,reserveCredits:e.reserveCredits,...e.byteLimits===void 0?{}:{byteLimits:e.byteLimits},...e.signal===void 0?{}:{signal:e.signal},dagId:e.dagId,dagRunId:e.dagRunId,taskRunId:e.taskRunId,nodeDefinition:e.nodeDefinition,nodeManifest:t,attempt:e.attempt,executionPath:e.executionPath,lineage:e.lineage??this.lineage??{rootRunId:e.dagRunId,depth:0,ancestorCompositeNodeTypes:[]},runCreditLimit:e.costPolicy?.runCreditLimit,currentTotalCredits:e.currentTotalCredits??0,...e.runtimeBaseUrl===void 0?{}:{runtimeBaseUrl:e.runtimeBaseUrl}}});return n.ok?{ok:!0,output:n.value.output,estimatedCredits:n.value.estimatedCredits,totalCredits:n.value.totalCredits}:n}};const Oe={root:`.workflows`,workflowExt:`.json`};function W(e,t,n){let i={result:{applied:!1,runStatus:e?.status}};if(!e)return i;if(n.kind===`transition-run`){if(e.status!==n.expectedStatus)return i;let t=S.transition(e.status,n.event);if(!t.ok)return i;let r={...e,status:t.value.nextStatus,endedAt:n.endedAt};return{dagRun:r,result:{applied:!0,runStatus:r.status}}}if(n.kind===`finalize`){if(e.status!==`running`||t.some(e=>[`created`,`queued`,`running`].includes(e.status)))return i;let r=ke(e,t);if(!r.ok)return{result:{...i.result,error:r.error}};if(r.value)return i;let a=S.transition(e.status,t.some(e=>e.status===`failed`)?`COMPLETE_FAILURE`:`COMPLETE_SUCCESS`);if(!a.ok)return i;let o=a.value.nextStatus;return{dagRun:{...e,status:o,endedAt:n.endedAt},result:{applied:!0,runStatus:o}}}if(n.kind===`admit`)return e.status!==`running`||n.taskRun.dagRunId!==e.dagRunId||t.some(e=>e.nodeId===n.taskRun.nodeId||e.taskRunId===n.taskRun.taskRunId)||!n.dependsOn.every(e=>t.some(t=>t.nodeId===e&&t.status===`success`))?i:{taskRun:n.taskRun,result:{applied:!0,runStatus:e.status,taskRun:n.taskRun}};let a=t.find(e=>e.taskRunId===n.taskRunId);if(n.kind===`cancel-task`){if(!a||![`failed`,`cancelled`].includes(e.status))return i;let t=C.transition(a.status,`CANCEL`);if(!t.ok)return i;let r={...a,status:t.value.nextStatus,leaseOwner:void 0,leaseUntil:void 0,reservedCredits:void 0,reservationAttempt:void 0,reservationOwner:void 0,errorCode:n.error?.code,errorMessage:n.error?.message};return{taskRun:r,result:{applied:!0,runStatus:e.status,taskRun:r}}}if(!a||a.status!==`running`||a.attempt!==n.attempt||a.leaseOwner!==n.leaseOwner)return i;if(e.status!==`running`){if(e.status!==`cancelled`||a.status!==`running`)return i;let t={...a,status:`cancelled`,leaseOwner:void 0,leaseUntil:void 0,reservedCredits:void 0,reservationAttempt:void 0,reservationOwner:void 0};return{taskRun:t,result:{applied:!1,runStatus:e.status,taskRun:t}}}if(n.kind===`snapshot-input`){let t={...a,inputSnapshot:n.inputSnapshot};return{taskRun:t,result:{applied:!0,runStatus:e.status,taskRun:t}}}if(n.kind===`reserve-credits`){let o=n.estimatedCredits;if(!Number.isFinite(o)||o<0||e.definitionSnapshot===void 0)return i;let s;try{s=JSON.parse(e.definitionSnapshot)}catch{return i}let c=L(s,`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`DagRun definition snapshot has invalid shape`,{dagRunId:e.dagRunId});if(!c.ok||c.value.costPolicy===void 0)return i;let l=c.value.costPolicy.runCreditLimit;if(a.reservedCredits!==void 0)return{result:{...i.result,applied:a.reservationAttempt===n.attempt&&a.reservationOwner===n.leaseOwner&&a.reservedCredits===o}};let u=G(t);if(!u.ok)return{result:{...i.result,error:u.error}};let d=u.value+t.reduce((e,t)=>e+(t.reservedCredits??0),0);if(d+o>l)return{result:{...i.result,error:r(`DAG_VALIDATION_CREDIT_LIMIT_EXCEEDED`,`Estimated run credits exceeds runCreditLimit`,{nextTotalCredits:d+o,runCreditLimit:l})}};let f={...a,reservedCredits:o,reservationAttempt:n.attempt,reservationOwner:n.leaseOwner};return{taskRun:f,result:{applied:!0,runStatus:e.status,taskRun:f}}}let o=C.transition(a.status,n.status===`success`?`COMPLETE_SUCCESS`:`COMPLETE_FAILURE`);if(!o.ok)return i;if(n.status===`success`&&e.definitionSnapshot!==void 0){let t;try{t=JSON.parse(e.definitionSnapshot)}catch{return i}let n=L(t,`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`DagRun definition snapshot has invalid shape`,{dagRunId:e.dagRunId});if(!n.ok||n.value.costPolicy!==void 0&&a.reservedCredits===void 0)return i}if(n.status===`success`&&a.reservedCredits!==void 0&&(a.reservationAttempt!==n.attempt||a.reservationOwner!==n.leaseOwner||n.estimatedCredits!==a.reservedCredits))return i;let s=n.status===`success`&&a.reservedCredits!==void 0?G(t):void 0;if(s&&!s.ok)return{result:{...i.result,error:s.error}};let c=n.status===`failed`&&n.reserveRetry===!0,l=c?C.transition(o.value.nextStatus,`RETRY`):void 0;if(l&&!l.ok)return i;let u={...a,status:l?.ok?l.value.nextStatus:o.value.nextStatus,attempt:c?a.attempt+1:a.attempt,reservedCredits:void 0,reservationAttempt:void 0,reservationOwner:void 0,errorCode:c?void 0:n.error?.code,errorMessage:c?void 0:n.error?.message,...n.outputSnapshot===void 0?{}:{outputSnapshot:n.outputSnapshot},...n.estimatedCredits===void 0?{}:{estimatedCredits:n.estimatedCredits},...n.status!==`success`||a.reservedCredits===void 0?n.totalCredits===void 0?{}:{totalCredits:n.totalCredits}:{totalCredits:s.value+a.reservedCredits}};return{taskRun:u,result:{applied:!0,runStatus:e.status,taskRun:u}}}function G(e){let t=0,n=0;for(let r of e)if(r.status===`success`){if(r.totalCredits!==void 0){if(!Number.isFinite(r.totalCredits)||r.totalCredits<0)return K(r);n=Math.max(n,r.totalCredits)}if(r.estimatedCredits===void 0&&r.totalCredits===void 0)return K(r);if(r.estimatedCredits!==void 0){if(!Number.isFinite(r.estimatedCredits)||r.estimatedCredits<0)return K(r);t+=r.estimatedCredits}}return{ok:!0,value:Math.max(t,n)}}function K(e){return{ok:!1,error:r(`DAG_VALIDATION_CREDIT_HISTORY_AMBIGUOUS`,`Prior task credits cannot be accounted for safely`,{taskRunId:e.taskRunId})}}function ke(e,t){if(e.definitionSnapshot===void 0)return{ok:!0,value:!1};let n;try{n=JSON.parse(e.definitionSnapshot)}catch{return{ok:!1,error:r(`DAG_VALIDATION_DEFINITION_SNAPSHOT_PARSE_FAILED`,`Failed to parse DagRun definition snapshot`,{dagRunId:e.dagRunId})}}let i=L(n,`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`DagRun definition snapshot has invalid shape`,{dagRunId:e.dagRunId});return i.ok?{ok:!0,value:i.value.nodes.some(e=>!t.some(t=>t.nodeId===e.nodeId)&&e.dependsOn.every(e=>t.some(t=>t.nodeId===e&&t.status===`success`)))}:i}function Ae(e,t,n){let i=n.issues[0];return r(`DAG_VALIDATION_NODE_CONFIG_SCHEMA_INVALID`,`Node config does not satisfy schema: ${i?.path.join(`.`)??`config`} ${i?.message??`Invalid config`}`,{nodeId:t.nodeDefinition.nodeId,nodeType:e,issueCount:n.issues.length})}var je=class{defaultInputPort;defaultOutputPort;taskHandler;constructor(){this.taskHandler={initialize:async e=>{let t=this.parseNodeConfig(e);return t.ok?this.initializeWithConfig(e,t.value):t},validateInput:async(e,t)=>{let n=this.parseNodeConfig(t);return n.ok?this.validateInputWithConfig(e,t,n.value):n},estimateCost:async(e,t)=>{let n=this.parseNodeConfig(t);return n.ok?this.estimateCostWithConfig(e,t,n.value):n},execute:async(e,t)=>{let n=this.parseNodeConfig(t);return n.ok?this.executeWithConfig(e,t,n.value):n},validateOutput:async(e,t)=>{let n=this.parseNodeConfig(t);return n.ok?this.validateOutputWithConfig(e,t,n.value):n},dispose:async e=>{let t=this.parseNodeConfig(e);return t.ok?this.disposeWithConfig(e,t.value):t}}}parseNodeConfig(e){let t=this.configSchemaDefinition.safeParse(e.nodeDefinition.config);return t.success?{ok:!0,value:t.data}:{ok:!1,error:Ae(this.nodeType,e,t.error)}}async initializeWithConfig(e,t){return{ok:!0,value:void 0}}async validateInputWithConfig(e,t,n){return{ok:!0,value:void 0}}async validateOutputWithConfig(e,t,n){return{ok:!0,value:void 0}}async disposeWithConfig(e,t){return{ok:!0,value:void 0}}};const q=`asset://`;var J=class e{value;constructor(e){this.value=e}static fromAssetReference(t){return t.referenceType===`asset`?new e({referenceType:`asset`,assetId:t.assetId,mediaType:t.mediaType,name:t.name,sizeBytes:t.sizeBytes}):new e({referenceType:`uri`,uri:t.uri,mediaType:t.mediaType,name:t.name,sizeBytes:t.sizeBytes})}static fromBinary(t){if(typeof t.assetId==`string`&&t.assetId.trim().length>0)return{ok:!0,value:new e({referenceType:`asset`,assetId:t.assetId.trim(),mediaType:t.mimeType,sizeBytes:t.sizeBytes})};if(t.uri.startsWith(q)){let n=t.uri.slice(8).trim();return n.length===0?{ok:!1,error:r(`DAG_VALIDATION_MEDIA_REFERENCE_INVALID`,`Binary asset URI must include non-empty assetId`)}:{ok:!0,value:new e({referenceType:`asset`,assetId:n,mediaType:t.mimeType,sizeBytes:t.sizeBytes})}}return{ok:!0,value:new e({referenceType:`uri`,uri:t.uri,mediaType:t.mimeType,sizeBytes:t.sizeBytes})}}static fromCandidate(e,t){let n=typeof e.assetId==`string`&&(t?.allowEmptyAssetId===!0||e.assetId.trim().length>0),i=typeof e.uri==`string`&&(t?.allowEmptyUri===!0||e.uri.trim().length>0);return n===i?{ok:!1,error:r(`DAG_VALIDATION_MEDIA_REFERENCE_XOR_REQUIRED`,`Exactly one of assetId or uri must be provided`)}:e.referenceType===`asset`&&!n?{ok:!1,error:r(`DAG_VALIDATION_MEDIA_REFERENCE_TYPE_MISMATCH`,`referenceType asset requires assetId`)}:e.referenceType===`uri`&&!i?{ok:!1,error:r(`DAG_VALIDATION_MEDIA_REFERENCE_TYPE_MISMATCH`,`referenceType uri requires uri`)}:this.buildFromValidatedCandidate(e,n)}static buildFromValidatedCandidate(t,n){return n&&typeof t.assetId==`string`?{ok:!0,value:new e({referenceType:`asset`,assetId:t.assetId.trim(),mediaType:t.mediaType,name:t.name,sizeBytes:t.sizeBytes})}:typeof t.uri==`string`?{ok:!0,value:new e({referenceType:`uri`,uri:t.uri,mediaType:t.mediaType,name:t.name,sizeBytes:t.sizeBytes})}:{ok:!1,error:r(`DAG_VALIDATION_MEDIA_REFERENCE_INVALID`,`uri must be a string when referenceType is uri`)}}isAsset(){return this.value.referenceType===`asset`}isUri(){return this.value.referenceType===`uri`}assetId(){return this.value.assetId}uri(){return this.value.uri}mediaType(){return this.value.mediaType}toAssetIdOrUri(){return this.value.referenceType===`asset`&&typeof this.value.assetId==`string`?{referenceType:`asset`,assetId:this.value.assetId}:{referenceType:`uri`,uri:this.value.uri??``}}toAssetContentUrl(e){if(!(!this.isAsset()||typeof this.value.assetId!=`string`))return`${e.replace(/\/$/,``)}/view?filename=${encodeURIComponent(this.value.assetId)}`}toBinary(e,t){let n=typeof this.value.mediaType==`string`&&this.value.mediaType.trim().length>0?this.value.mediaType:t;return this.value.referenceType===`asset`&&typeof this.value.assetId==`string`?{kind:e,mimeType:n,uri:`${q}${this.value.assetId}`,referenceType:`asset`,assetId:this.value.assetId,sizeBytes:this.value.sizeBytes}:{kind:e,mimeType:n,uri:this.value.uri??``,referenceType:`uri`,sizeBytes:this.value.sizeBytes}}};function Y(e,t,n,i){if(typeof e!=`object`||!e||Array.isArray(e))return{ok:!1,error:r(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be binary payload object`,{nodeId:t,key:n,expectedType:`binary`})};let a=e;if(a.kind!==`image`&&a.kind!==`video`&&a.kind!==`audio`&&a.kind!==`file`||typeof a.mimeType!=`string`||typeof a.uri!=`string`)return{ok:!1,error:r(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be valid binary payload`,{nodeId:t,key:n,expectedType:`binary`})};let o=a.kind;return i&&o!==i?{ok:!1,error:r(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input binary kind does not match expected kind`,{nodeId:t,key:n,expectedKind:i,actualKind:o})}:{ok:!0,value:{kind:o,mimeType:a.mimeType,uri:a.uri,referenceType:a.referenceType===`asset`||a.referenceType===`uri`?a.referenceType:void 0,assetId:typeof a.assetId==`string`?a.assetId:void 0,sizeBytes:typeof a.sizeBytes==`number`?a.sizeBytes:void 0}}}var Me=class{input;nodeId;output={};constructor(e,t){this.input=e,this.nodeId=t}getInput(e){return this.input[e]}requireInput(e){let t=this.getInput(e);return t===void 0?{ok:!1,error:r(`DAG_VALIDATION_NODE_INPUT_MISSING`,`Node input key is missing`,{nodeId:this.nodeId,key:e})}:{ok:!0,value:t}}requireInputString(e){let t=this.requireInput(e);return t.ok?typeof t.value==`string`?{ok:!0,value:t.value}:{ok:!1,error:r(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be string`,{nodeId:this.nodeId,key:e,expectedType:`string`})}:t}requireInputArray(e){let t=this.getInput(e);if(Array.isArray(t))return{ok:!0,value:t};let n=this.collectListHandleValues(e);return n?{ok:!0,value:n}:t===void 0?{ok:!1,error:r(`DAG_VALIDATION_NODE_INPUT_MISSING`,`Node input key is missing`,{nodeId:this.nodeId,key:e})}:{ok:!1,error:r(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be array`,{nodeId:this.nodeId,key:e,expectedType:`array`})}}requireInputBinary(e,t){let n=this.requireInput(e);return n.ok?Y(n.value,this.nodeId,e,t):n}requireInputBinaryList(e,t,n){let i=this.requireInputArray(e);if(!i.ok)return i;let a=i.value;if(typeof n?.minItems==`number`&&a.length<n.minItems)return{ok:!1,error:r(`DAG_VALIDATION_NODE_INPUT_MIN_ITEMS_NOT_SATISFIED`,`Node input list does not satisfy minItems`,{nodeId:this.nodeId,key:e,minItems:n.minItems,actualItems:a.length})};if(typeof n?.maxItems==`number`&&a.length>n.maxItems)return{ok:!1,error:r(`DAG_VALIDATION_NODE_INPUT_MAX_ITEMS_EXCEEDED`,`Node input list exceeds maxItems`,{nodeId:this.nodeId,key:e,maxItems:n.maxItems,actualItems:a.length})};let o=[];for(let[n,r]of a.entries()){let i=Y(r,this.nodeId,`${e}[${n}]`,t);if(!i.ok)return i;o.push(i.value)}return{ok:!0,value:o}}requireInputMediaReference(e,t){let n=this.requireInput(e);return n.ok?this.parseMediaReferenceValue(n.value,e,t):n}requireInputBinaryReference(e,t){let n=this.requireInputBinary(e,t);if(!n.ok)return n;let i=J.fromBinary(n.value);return i.ok?i:{ok:!1,error:r(i.error.code,i.error.message,{nodeId:this.nodeId,key:e,...i.error.context??{}})}}setOutput(e,t){this.output[e]=t}toOutput(){return{...this.output}}collectListHandleValues(e){let t=new Map;for(let[n,r]of Object.entries(this.input)){let i=v(n);!i||i.portKey!==e||t.set(i.index,r)}if(t.size===0)return;let n=[...t.keys()].sort((e,t)=>e-t),r=n[n.length-1]+1;if(n.length!==r)return;let i=[];for(let e=0;e<r;e+=1){let n=t.get(e);if(n===void 0)return;i.push(n)}return i}parseMediaReferenceValue(e,t,n){if(typeof e==`string`){if(n?.allowStringAssetUri===!0&&e.startsWith(`asset://`))return this.wrapMediaReferenceError(J.fromCandidate({referenceType:`asset`,assetId:e.slice(8)}),t);if(n?.allowStringUri===!0)return this.wrapMediaReferenceError(J.fromCandidate({referenceType:`uri`,uri:e}),t)}return typeof e!=`object`||!e||Array.isArray(e)?{ok:!1,error:r(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be media reference object`,{nodeId:this.nodeId,key:t,expectedType:`media-reference`})}:this.wrapMediaReferenceError(J.fromCandidate(e),t)}wrapMediaReferenceError(e,t){return e.ok?e:{ok:!1,error:r(e.error.code,e.error.message,{nodeId:this.nodeId,key:t,...e.error.context??{}})}}};function X(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return typeof t.kind==`string`&&typeof t.mimeType==`string`&&typeof t.uri==`string`}function Z(e,t){if(e.isList)return Array.isArray(t)?t.every(t=>Z({...e,isList:!1},t)):!1;switch(e.type){case`string`:return typeof t==`string`;case`number`:return typeof t==`number`;case`boolean`:return typeof t==`boolean`;case`object`:return typeof t==`object`&&!!t&&!Array.isArray(t)&&!X(t);case`array`:return Array.isArray(t);case`binary`:return!(!X(t)||e.binaryKind&&t.kind!==e.binaryKind||e.mimeTypes&&e.mimeTypes.length>0&&!e.mimeTypes.includes(t.mimeType));default:return!1}}function Q(e,t,n,i){for(let a of t){let t=e[a.key];if(t===void 0){if(a.required)return{ok:!1,error:r(n===`input`?`DAG_VALIDATION_NODE_REQUIRED_INPUT_MISSING`:`DAG_VALIDATION_NODE_REQUIRED_OUTPUT_MISSING`,n===`input`?`Required input port "${a.key}" (${a.type}) is missing on node "${i}"`:`Required output port "${a.key}" (${a.type}) was not set by node "${i}"`,{nodeId:i,key:a.key,type:a.type},n===`input`?{action:`connect_port`,suggestion:`Connect a "${a.type}" output to the "${a.key}" input of node "${i}"`}:void 0)};continue}if(a.isList){if(!Array.isArray(t))return{ok:!1,error:r(n===`input`?`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`:`DAG_VALIDATION_NODE_OUTPUT_TYPE_MISMATCH`,n===`input`?`List input port must receive array payload`:`List output port must emit array payload`,{nodeId:i,key:a.key,type:a.type})};if(typeof a.minItems==`number`&&t.length<a.minItems)return{ok:!1,error:r(n===`input`?`DAG_VALIDATION_NODE_INPUT_MIN_ITEMS_NOT_SATISFIED`:`DAG_VALIDATION_NODE_OUTPUT_MIN_ITEMS_NOT_SATISFIED`,n===`input`?`List input port does not satisfy minItems`:`List output port does not satisfy minItems`,{nodeId:i,key:a.key,minItems:a.minItems,actualItems:t.length})};if(typeof a.maxItems==`number`&&t.length>a.maxItems)return{ok:!1,error:r(n===`input`?`DAG_VALIDATION_NODE_INPUT_MAX_ITEMS_EXCEEDED`:`DAG_VALIDATION_NODE_OUTPUT_MAX_ITEMS_EXCEEDED`,n===`input`?`List input port exceeds maxItems`:`List output port exceeds maxItems`,{nodeId:i,key:a.key,maxItems:a.maxItems,actualItems:t.length})}}if(!Z(a,t))return{ok:!1,error:r(n===`input`?`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`:`DAG_VALIDATION_NODE_OUTPUT_TYPE_MISMATCH`,n===`input`?`Input port "${a.key}" on node "${i}" expects type "${a.type}" but received incompatible value`:`Output port "${a.key}" on node "${i}" emitted value incompatible with type "${a.type}"`,{nodeId:i,key:a.key,type:a.type},n===`input`?{action:`check_port_type`,suggestion:`Ensure the upstream output connected to "${a.key}" produces a "${a.type}" value`}:void 0)}}return{ok:!0,value:void 0}}var Ne=class{handler;constructor(e){this.handler=e}async initialize(e){return this.handler.initialize?this.handler.initialize(e):{ok:!0,value:void 0}}async validateInput(e,t){let n=Q(e,t.nodeManifest.inputs,`input`,t.nodeDefinition.nodeId);return n.ok?this.handler.validateInput?this.handler.validateInput(e,t):{ok:!0,value:void 0}:n}async estimateCost(e,t){return this.handler.estimateCost?this.handler.estimateCost(e,t):{ok:!0,value:{estimatedCredits:0}}}async execute(e,t){return this.handler.execute(e,t)}async validateOutput(e,t){let n=Q(e,t.nodeManifest.outputs,`output`,t.nodeDefinition.nodeId);return n.ok?this.handler.validateOutput?this.handler.validateOutput(e,t):{ok:!0,value:void 0}:n}async dispose(e){return this.handler.dispose?this.handler.dispose(e):{ok:!0,value:void 0}}},Pe=class{handlersByType;constructor(e){this.handlersByType=e}getHandler(e){return this.handlersByType[e]}listNodeTypes(){return Object.keys(this.handlersByType)}},Fe=class{taskHandlerRegistry;constructor(e){this.taskHandlerRegistry=e}create(e){let t=this.taskHandlerRegistry.getHandler(e);return t?{ok:!0,value:new Ne(t)}:{ok:!1,error:r(`DAG_VALIDATION_NODE_LIFECYCLE_NOT_REGISTERED`,`Node lifecycle is not registered for nodeType`,{nodeType:e})}}},Ie=class{manifestByType=new Map;constructor(e){for(let t of e)this.manifestByType.set(t.nodeType,t)}getManifest(e){return this.manifestByType.get(e)}listManifests(){return[...this.manifestByType.values()]}};const $=e.string().trim().min(1),Le=e.object({referenceType:e.literal(`asset`),assetId:$,mediaType:e.string().optional(),name:e.string().optional(),sizeBytes:e.number().int().nonnegative().optional()}),Re=e.object({referenceType:e.literal(`uri`),uri:$,mediaType:e.string().optional(),name:e.string().optional(),sizeBytes:e.number().int().nonnegative().optional()}),ze=e.union([Le,Re]);function Be(){return e.object({asset:ze})}function Ve(t){return typeof t!=`object`||!t?!1:t instanceof e.ZodType}function He(e){return e==null?{ok:!0,value:{}}:Ve(e)?{ok:!0,value:t(e,{target:`jsonSchema7`})}:{ok:!1,error:r(`DAG_VALIDATION_CONFIG_SCHEMA_INVALID`,`configSchemaDefinition must be a Zod schema instance.`)}}function Ue(e){let t=[],n={};for(let r of e){let e=He(r.configSchemaDefinition);if(!e.ok)return e;let i={nodeType:r.nodeType,displayName:r.displayName,category:r.category,inputs:r.inputs,outputs:r.outputs,configSchema:e.value,...r.defaultInputPort===void 0?{}:{defaultInputPort:r.defaultInputPort},...r.defaultOutputPort===void 0?{}:{defaultOutputPort:r.defaultOutputPort}};t.push(i),n[i.nodeType]=r.taskHandler}return{ok:!0,value:{manifests:t,handlersByType:n}}}const We={IMAGE_PNG:{binaryKind:`image`,mimeTypes:[`image/png`]},IMAGE_COMMON:{binaryKind:`image`,mimeTypes:[`image/png`,`image/jpeg`,`image/webp`]},VIDEO_MP4:{binaryKind:`video`,mimeTypes:[`video/mp4`]},AUDIO_MPEG:{binaryKind:`audio`,mimeTypes:[`audio/mpeg`]},FILE_GENERIC:{binaryKind:`file`,mimeTypes:[]}};function Ge(e){return{key:e.key,label:e.label,order:e.order,type:`binary`,required:e.required,description:e.description,binaryKind:e.preset.binaryKind,mimeTypes:[...e.preset.mimeTypes],isList:e.isList,minItems:e.minItems,maxItems:e.maxItems}}export{v as A,r as C,g as D,L as E,f as M,_e as O,a as S,I as T,C as _,Fe as a,i as b,Ue as c,Oe as d,S as f,ne as g,h,Me as i,ee as j,F as k,Ge as l,De as m,We as n,Ie as o,te as p,J as r,Pe as s,je as t,Be as u,m as v,W as w,o as x,Ce as y};
|
|
2
|
-
//# sourceMappingURL=node-
|
|
1
|
+
import{z as e}from"zod";import{zodToJsonSchema as t}from"zod-to-json-schema";function n(e,t,n,r,i,a,o){return{code:t,category:e,message:n,retryable:r,context:i,fix:a,agentHint:o}}function r(e,t,r,i,a){return n(`validation`,e,t,!1,r,i,a)}function i(e,t,r,i,a){return n(`dispatch`,e,t,!0,r,i,a)}function a(e,t,r,i,a,o){return n(`task_execution`,e,t,r,i,a,o)}function o(e){return a(`DAG_TASK_EXECUTION_CANCELLED`,`Task execution was cancelled`,!1,{taskRunId:e})}function s(e,t){let n=[],r=``,i=0,a=(e,a)=>{if(a>t-i)throw c;i+=a,r+=e,r.length>=8192&&(n.push(r),r=``)},o=e=>{a(`"`,1);for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n===34||n===92)a(`\\${e[t]}`,2);else if(n<32){let e=u[n]??`\\u${n.toString(16).padStart(4,`0`)}`;a(e,e.length)}else n<128?a(e[t],1):n<2048?a(e[t],2):n>=55296&&n<=56319&&t+1<e.length&&e.charCodeAt(t+1)>=56320&&e.charCodeAt(t+1)<=57343?(a(e.slice(t,t+2),4),t++):n>=55296&&n<=57343?a(`\\u${n.toString(16)}`,6):a(e[t],3)}a(`"`,1)},s=[],d=new Set,f=e=>{if(e===null)return a(`null`,4);if(typeof e==`string`)return o(e);if(typeof e==`boolean`)return a(e?`true`:`false`,e?4:5);if(typeof e==`number`){let t=JSON.stringify(e);return a(t,t.length)}if(typeof e!=`object`||d.has(e))throw l;if(Array.isArray(e))d.add(e),a(`[`,1),s.push({kind:`array`,value:e,index:0});else{let t=Object.getPrototypeOf(e);if(t!==Object.prototype&&t!==null)throw l;d.add(e),a(`{`,1),s.push({kind:`object`,value:e,keys:Object.keys(e),index:0,first:!0})}};try{for(f(e);s.length>0;){let e=s[s.length-1];if(e.kind===`array`){if(e.index===e.value.length){a(`]`,1),d.delete(e.value),s.pop();continue}e.index&&a(`,`,1);let t=Object.getOwnPropertyDescriptor(e.value,String(e.index++));if(t&&!(`value`in t))throw l;let n=t?.value;n===void 0||typeof n==`function`||typeof n==`symbol`?a(`null`,4):f(n)}else{if(e.index===e.keys.length){a(`}`,1),d.delete(e.value),s.pop();continue}let t=e.keys[e.index++],n=Object.getOwnPropertyDescriptor(e.value,t);if(!n||!(`value`in n))throw l;let r=n.value;if(r===void 0||typeof r==`function`||typeof r==`symbol`)continue;e.first||a(`,`,1),e.first=!1,o(t),a(`:`,1),f(r)}}return r&&n.push(r),n.join(``)}catch(e){if(e===c)return;throw e===l?TypeError(`Snapshot must contain plain JSON data without accessors or cycles`):e}}const c=Symbol(`snapshot limit`),l=Symbol(`invalid snapshot`),u={8:`\\b`,9:`\\t`,10:`\\n`,12:`\\f`,13:`\\r`},d=Object.freeze({inputBytes:16*1024*1024,outputBytes:16*1024*1024});function f(e=d){if(!e||!Number.isSafeInteger(e.inputBytes)||e.inputBytes<0||!Number.isSafeInteger(e.outputBytes)||e.outputBytes<0)throw RangeError(`Task snapshot limits must be nonnegative safe integers`);return Object.freeze({inputBytes:e.inputBytes,outputBytes:e.outputBytes})}function p(e){let t=0;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);r<128?t++:r<2048?t+=2:r>=55296&&r<=56319&&e.charCodeAt(n+1)>=56320&&e.charCodeAt(n+1)<=57343?(t+=4,n++):t+=3}return t}var m=class{limits;occupied={input:0,output:0};poisoned=!1;constructor(e){this.limits=f(e)}close(){this.poisoned=!0}error(e){return a(this.poisoned?`DAG_TASK_SNAPSHOT_BUDGET_CLOSED`:`DAG_TASK_SNAPSHOT_BUDGET_EXCEEDED`,this.poisoned?`Task snapshot budget is closed`:`Task ${e} snapshot budget exceeded`,!1)}encode(e,t){if(this.poisoned)return{ok:!1,error:this.error(e)};let n=this.limits[e===`input`?`inputBytes`:`outputBytes`]-this.occupied[e];try{let r=s(t,n);return r===void 0?{ok:!1,error:this.error(e)}:{ok:!0,value:{snapshot:r,bytes:p(r)}}}catch{return{ok:!1,error:a(`DAG_TASK_SNAPSHOT_INVALID`,`Task snapshot must contain plain JSON data`,!1)}}}async admitValue(e,t,n){let r=this.encode(e,t);return r.ok?this.admit(e,r.value.snapshot,()=>n(r.value.snapshot)):r}async admitRun(e,t,n){let r=this.encode(`input`,e);if(!r.ok)return r;this.occupied.input+=r.value.bytes;let i=this.encode(`input`,t);if(!i.ok)return this.occupied.input-=r.value.bytes,i;this.occupied.input+=i.value.bytes;try{return await n(r.value.snapshot,i.value.snapshot),{ok:!0,value:void 0}}catch(e){throw this.poisoned=!0,e}}async admit(e,t,n){let r=p(t),i=e===`input`?this.limits.inputBytes:this.limits.outputBytes;if(this.poisoned||r>i-this.occupied[e])return{ok:!1,error:this.error(e)};this.occupied[e]+=r;try{let t=await n();return t.applied||(this.occupied[e]-=r),{ok:!0,value:t}}catch(e){throw this.poisoned=!0,e}}},h=class{limit;committed=0;reserved=0;closed=!1;constructor(e){if(this.limit=e,e!==void 0&&(!Number.isFinite(e)||e<=0))throw RangeError(`Root credit limit must be positive and finite`)}close(){this.closed=!0}reserve(e){if(!Number.isFinite(e)||e<0)return{ok:!1,error:r(`DAG_VALIDATION_NEGATIVE_ESTIMATED_CREDITS`,`estimatedCredits must be finite and zero or positive`,{estimatedCredits:e})};if(this.closed||this.limit!==void 0&&e>this.limit-this.committed-this.reserved)return{ok:!1,error:r(`DAG_VALIDATION_CREDIT_LIMIT_EXCEEDED`,`Estimated run credits exceeds root runCreditLimit`,{estimatedCredits:e,...this.limit===void 0?{}:{runCreditLimit:this.limit}})};this.reserved+=e;let t=!1;return{ok:!0,value:{commit:()=>(t||(t=!0,this.reserved-=e,this.committed+=e),this.committed),release:()=>{t||(t=!0,this.reserved-=e)}}}}};function g(e){if(e==null)return;if(typeof e!=`object`||Array.isArray(e))throw Error(`Invalid persisted DAG execution lineage`);let t=e,n=t.parentRunId!==void 0,r=!n||typeof t.parentRunId==`string`&&t.parentRunId.length>0;if(typeof t.rootRunId!=`string`||t.rootRunId.length===0||!r||!Number.isSafeInteger(t.depth)||t.depth<0||t.maxDepth!==void 0&&(!Number.isSafeInteger(t.maxDepth)||t.maxDepth<1)||!Array.isArray(t.ancestorCompositeNodeTypes)||!t.ancestorCompositeNodeTypes.every(e=>typeof e==`string`&&e.length>0))throw Error(`Invalid persisted DAG execution lineage`);let i=t.depth,a=t.ancestorCompositeNodeTypes.length;if(!(i===0?!n&&a===0:n&&a===i))throw Error(`Invalid persisted DAG execution lineage`);return{rootRunId:t.rootRunId,...n?{parentRunId:t.parentRunId}:{},depth:i,...t.maxDepth===void 0?{}:{maxDepth:t.maxDepth},ancestorCompositeNodeTypes:[...t.ancestorCompositeNodeTypes]}}const _=Object.freeze({maxTextRepeatOutputBytes:4*1024*1024,maxTextReplaceOutputBytes:4*1024*1024,maxTextTemplateOutputBytes:4*1024*1024,maxTextJoinOutputBytes:4*1024*1024,maxTextSplitOutputBytes:4*1024*1024,maxTextTransformOutputBytes:4*1024*1024,maxTextUpperOutputBytes:4*1024*1024,maxTextLowerOutputBytes:4*1024*1024,maxHttpResponseBodyBytes:4*1024*1024});function ee(e){let t=e===void 0?_.maxTextRepeatOutputBytes:e.maxTextRepeatOutputBytes;if(!Number.isSafeInteger(t)||t<0||t>_.maxTextRepeatOutputBytes)throw RangeError(`maxTextRepeatOutputBytes must be a safe integer between 0 and 4194304`);let n=e&&`maxTextReplaceOutputBytes`in e?e.maxTextReplaceOutputBytes:4*1024*1024;if(typeof n!=`number`||!Number.isSafeInteger(n)||n<0||n>4*1024*1024)throw RangeError(`maxTextReplaceOutputBytes must be a safe integer between 0 and 4194304`);let r=e&&`maxTextTemplateOutputBytes`in e?e.maxTextTemplateOutputBytes:4*1024*1024;if(typeof r!=`number`||!Number.isSafeInteger(r)||r<0||r>4*1024*1024)throw RangeError(`maxTextTemplateOutputBytes must be a safe integer between 0 and 4194304`);let i=e&&`maxTextJoinOutputBytes`in e?e.maxTextJoinOutputBytes:4*1024*1024;if(typeof i!=`number`||!Number.isSafeInteger(i)||i<0||i>4*1024*1024)throw RangeError(`maxTextJoinOutputBytes must be a safe integer between 0 and 4194304`);let a=e&&`maxTextSplitOutputBytes`in e?e.maxTextSplitOutputBytes:4*1024*1024;if(typeof a!=`number`||!Number.isSafeInteger(a)||a<0||a>4*1024*1024)throw RangeError(`maxTextSplitOutputBytes must be a safe integer between 0 and 4194304`);let o=e&&`maxTextTransformOutputBytes`in e?e.maxTextTransformOutputBytes:4*1024*1024;if(typeof o!=`number`||!Number.isSafeInteger(o)||o<0||o>4*1024*1024)throw RangeError(`maxTextTransformOutputBytes must be a safe integer between 0 and 4194304`);let s=e&&`maxTextUpperOutputBytes`in e?e.maxTextUpperOutputBytes:4*1024*1024;if(typeof s!=`number`||!Number.isSafeInteger(s)||s<0||s>4*1024*1024)throw RangeError(`maxTextUpperOutputBytes must be a safe integer between 0 and 4194304`);let c=e&&`maxTextLowerOutputBytes`in e?e.maxTextLowerOutputBytes:4*1024*1024;if(typeof c!=`number`||!Number.isSafeInteger(c)||c<0||c>4*1024*1024)throw RangeError(`maxTextLowerOutputBytes must be a safe integer between 0 and 4194304`);let l=e&&`maxHttpResponseBodyBytes`in e?e.maxHttpResponseBodyBytes:4*1024*1024;if(typeof l!=`number`||!Number.isSafeInteger(l)||l<0||l>4*1024*1024)throw RangeError(`maxHttpResponseBodyBytes must be a safe integer between 0 and 4194304`);return Object.freeze({maxTextRepeatOutputBytes:t,maxTextReplaceOutputBytes:n,maxTextTemplateOutputBytes:r,maxTextJoinOutputBytes:i,maxTextSplitOutputBytes:a,maxTextTransformOutputBytes:o,maxTextUpperOutputBytes:s,maxTextLowerOutputBytes:c,maxHttpResponseBodyBytes:l})}function v(e){let t=e.lastIndexOf(`[`);if(t<=0||!e.endsWith(`]`))return;let n=e.slice(0,t),r=e.slice(t+1,e.length-1);if(/^\d+$/.test(r))return{portKey:n,index:Number.parseInt(r,10)}}const y={CREATED:`created`,QUEUED:`queued`,RUNNING:`running`,SUCCESS:`success`,FAILED:`failed`,CANCELLED:`cancelled`},b={CREATED:`created`,QUEUED:`queued`,RUNNING:`running`,SUCCESS:`success`,FAILED:`failed`,UPSTREAM_FAILED:`upstream_failed`,SKIPPED:`skipped`,CANCELLED:`cancelled`},te={STARTED:`execution.started`,COMPLETED:`execution.completed`,FAILED:`execution.failed`},ne={STARTED:`task.started`,COMPLETED:`task.completed`,FAILED:`task.failed`},re={[`${y.CREATED}:QUEUE`]:y.QUEUED,[`${y.CREATED}:CANCEL`]:y.CANCELLED,[`${y.QUEUED}:START`]:y.RUNNING,[`${y.QUEUED}:CANCEL`]:y.CANCELLED,[`${y.RUNNING}:COMPLETE_SUCCESS`]:y.SUCCESS,[`${y.RUNNING}:COMPLETE_FAILURE`]:y.FAILED,[`${y.RUNNING}:CANCEL`]:y.CANCELLED};function x(e,t){return{code:`DAG_STATE_TRANSITION_INVALID`,category:`state_transition`,message:`DagRun transition is not allowed: ${e} -> ${t}`,retryable:!1,context:{currentStatus:e,event:t}}}function ie(e){return`run.${e}`}var S=class{static transition(e,t){let n=`${e}:${t}`,r=re[n];return r?{ok:!0,value:{nextStatus:r,domainEvents:[ie(r)]}}:{ok:!1,error:x(e,t)}}};const ae={[`${b.CREATED}:QUEUE`]:b.QUEUED,[`${b.CREATED}:CANCEL`]:b.CANCELLED,[`${b.QUEUED}:START`]:b.RUNNING,[`${b.QUEUED}:UPSTREAM_FAIL`]:b.UPSTREAM_FAILED,[`${b.QUEUED}:SKIP`]:b.SKIPPED,[`${b.QUEUED}:CANCEL`]:b.CANCELLED,[`${b.RUNNING}:COMPLETE_SUCCESS`]:b.SUCCESS,[`${b.RUNNING}:COMPLETE_FAILURE`]:b.FAILED,[`${b.RUNNING}:CANCEL`]:b.CANCELLED,[`${b.FAILED}:RETRY`]:b.QUEUED,[`${b.RUNNING}:RECLAIM`]:b.QUEUED};function oe(e,t){return{code:`DAG_STATE_TRANSITION_INVALID`,category:`state_transition`,message:`TaskRun transition is not allowed: ${e} -> ${t}`,retryable:!1,context:{currentStatus:e,event:t}}}function se(e){return`task.${e}`}var C=class{static transition(e,t){let n=`${e}:${t}`,r=ae[n];return r?{ok:!0,value:{nextStatus:r,domainEvents:[se(r)]}}:{ok:!1,error:oe(e,t)}}};function w(e,t,n){e.push({path:t,message:n})}function T(e,t){return typeof t==`number`?`${e}[${t}]`:e===``?t:`${e}.${t}`}function E(e,t,n){return typeof e!=`object`||!e||Array.isArray(e)?w(n,t,`expected an object, got ${P(e)}`):e}function D(e,t,n){return typeof e==`string`?e:w(n,t,`expected a string, got ${P(e)}`)}function O(e,t,n){return typeof e==`number`&&Number.isFinite(e)?e:w(n,t,`expected a finite number, got ${P(e)}`)}function k(e,t,n){return typeof e==`boolean`?e:w(n,t,`expected a boolean, got ${P(e)}`)}function A(e,t,n,r){return typeof e==`string`&&t.includes(e)?e:w(r,n,`expected one of ${t.map(e=>`'${e}'`).join(`, `)}, got ${P(e)}`)}function j(e,t,n,r){return e===void 0?void 0:r(e,t,n)}function M(e,t,n,r){if(!Array.isArray(e))return w(n,t,`expected an array, got ${P(e)}`);let i=n.length,a=e.map((e,i)=>r(e,T(t,i),n));return n.length===i?a:void 0}function N(e,t,n){return M(e,t,n,D)}function P(e){return e===null?`null`:Array.isArray(e)?`an array`:typeof e==`string`?`string '${e.length>40?`${e.slice(0,40)}…`:e}'`:typeof e}function F(e){return e.map(e=>`${e.path===``?`$`:e.path}: ${e.message}`).join(`; `)}function ce(e,t,n,i={}){return r(e,`${t}: ${F(n)}`,{...i,issueCount:n.length,firstIssuePath:n[0]?.path??``})}const le=[`draft`,`published`,`deprecated`],ue=[`string`,`number`,`boolean`,`object`,`array`,`binary`],de=[`image`,`video`,`audio`,`file`];function I(e,t={}){let n=[],r=fe(e,``,n,t);return r!==void 0&&n.length===0?{ok:!0,value:r}:{ok:!1,error:n}}function L(e,t,n,r={},i={}){let a=I(e,i);return a.ok?a:{ok:!1,error:ce(t,n,a.error,r)}}function fe(e,t,n,r){let i=E(e,t,n);if(i===void 0)return;let a=D(i.dagId,T(t,`dagId`),n),o=O(i.version,T(t,`version`),n),s=i.status===void 0&&r.absentStatus!==void 0?r.absentStatus:A(i.status,le,T(t,`status`),n),c=M(i.nodes,T(t,`nodes`),n,me),l=i.edges===void 0&&r.absentEdgesAsEmpty?[]:M(i.edges,T(t,`edges`),n,ge),u=j(i.costPolicy,T(t,`costPolicy`),n,R),d=j(i.inputSchema,T(t,`inputSchema`),n,D),f=j(i.outputSchema,T(t,`outputSchema`),n,D);if(a===void 0||o===void 0||s===void 0||c===void 0||l===void 0)return;let p={dagId:a,version:o,status:s,nodes:c,edges:l};return u!==void 0&&(p.costPolicy=u),d!==void 0&&(p.inputSchema=d),f!==void 0&&(p.outputSchema=f),p}function R(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i=O(r.runCreditLimit,T(t,`runCreditLimit`),n),a=O(r.costPolicyVersion,T(t,`costPolicyVersion`),n);return i===void 0||a===void 0?void 0:{runCreditLimit:i,costPolicyVersion:a}}function pe(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i=O(r.x,T(t,`x`),n),a=O(r.y,T(t,`y`),n);return i===void 0||a===void 0?void 0:{x:i,y:a}}function z(e,t,n){return e===null||[`string`,`number`,`boolean`].includes(typeof e)?e:Array.isArray(e)?M(e,t,n,z):typeof e==`object`?B(e,t,n):w(n,t,`expected a JSON value, got ${typeof e}`)}function B(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i={},a=n.length;for(let[e,a]of Object.entries(r)){let r=z(a,T(t,e),n);r!==void 0&&(i[e]=r)}return n.length===a?i:void 0}function V(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i=e=>T(t,e),a=D(r.key,i(`key`),n),o=A(r.type,ue,i(`type`),n),s=k(r.required,i(`required`),n),c=j(r.label,i(`label`),n,D),l=j(r.order,i(`order`),n,O),u=j(r.description,i(`description`),n,D),d=j(r.binaryKind,i(`binaryKind`),n,(e,t,n)=>A(e,de,t,n)),f=j(r.mimeTypes,i(`mimeTypes`),n,N),p=j(r.isList,i(`isList`),n,k),m=j(r.minItems,i(`minItems`),n,O),h=j(r.maxItems,i(`maxItems`),n,O);if(a===void 0||o===void 0||s===void 0)return;let g={key:a,type:o,required:s};return c!==void 0&&(g.label=c),l!==void 0&&(g.order=l),u!==void 0&&(g.description=u),d!==void 0&&(g.binaryKind=d),f!==void 0&&(g.mimeTypes=f),p!==void 0&&(g.isList=p),m!==void 0&&(g.minItems=m),h!==void 0&&(g.maxItems=h),g}function me(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i=e=>T(t,e),a=D(r.nodeId,i(`nodeId`),n),o=D(r.nodeType,i(`nodeType`),n),s=N(r.dependsOn,i(`dependsOn`),n),c=B(r.config,i(`config`),n),l=j(r.position,i(`position`),n,pe),u=j(r.triggerPolicy,i(`triggerPolicy`),n,D),d=j(r.retryPolicy,i(`retryPolicy`),n,D),f=j(r.timeoutMs,i(`timeoutMs`),n,O),p=j(r.inputs,i(`inputs`),n,(e,t,n)=>M(e,t,n,V)),m=j(r.outputs,i(`outputs`),n,(e,t,n)=>M(e,t,n,V)),h=j(r.costPolicy,i(`costPolicy`),n,R);if(a===void 0||o===void 0||s===void 0||c===void 0)return;let g={nodeId:a,nodeType:o,dependsOn:s,config:c};return l!==void 0&&(g.position=l),u!==void 0&&(g.triggerPolicy=u),d!==void 0&&(g.retryPolicy=d),f!==void 0&&(g.timeoutMs=f),p!==void 0&&(g.inputs=p),m!==void 0&&(g.outputs=m),h!==void 0&&(g.costPolicy=h),g}function he(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i=D(r.outputKey,T(t,`outputKey`),n),a=D(r.inputKey,T(t,`inputKey`),n);return i===void 0||a===void 0?void 0:{outputKey:i,inputKey:a}}function ge(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i=D(r.from,T(t,`from`),n),a=D(r.to,T(t,`to`),n),o=j(r.bindings,T(t,`bindings`),n,(e,t,n)=>M(e,t,n,he));if(i===void 0||a===void 0)return;let s={from:i,to:a};return o!==void 0&&(s.bindings=o),s}function _e(e){let t=[],n=Se(e,``,t);return n!==void 0&&t.length===0?{ok:!0,value:n}:{ok:!1,error:t}}function H(e,t,n){if(!Array.isArray(e)||e.length!==2)return w(n,t,`expected a [number, number] pair`);let r=O(e[0],T(t,0),n),i=O(e[1],T(t,1),n);return r===void 0||i===void 0?void 0:[r,i]}function ve(e,t,n){if(!Array.isArray(e)||e.length!==6)return w(n,t,`expected a 6-tuple [linkId, srcId, srcSlot, tgtId, tgtSlot, type]`);let r=[0,1,2,3,4].map(r=>O(e[r],T(t,r),n)),i=D(e[5],T(t,5),n);if(r.some(e=>e===void 0)||i===void 0)return;let[a,o,s,c,l]=r;return[a,o,s,c,l,i]}function ye(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i=D(r.name,T(t,`name`),n),a=D(r.type,T(t,`type`),n),o=r.link,s=o===null?null:O(o,T(t,`link`),n);return i===void 0||a===void 0||s===void 0?void 0:{name:i,type:a,link:s}}function be(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i=D(r.name,T(t,`name`),n),a=D(r.type,T(t,`type`),n),o=M(r.links,T(t,`links`),n,O),s=j(r.slot_index,T(t,`slot_index`),n,O);if(i===void 0||a===void 0||o===void 0)return;let c={name:i,type:a,links:o};return s!==void 0&&(c.slot_index=s),c}function xe(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i=e=>T(t,e),a=O(r.id,i(`id`),n),o=D(r.type,i(`type`),n),s=H(r.pos,i(`pos`),n),c=j(r.size,i(`size`),n,H),l=j(r.flags,i(`flags`),n,E),u=j(r.order,i(`order`),n,O),d=j(r.mode,i(`mode`),n,O),f=j(r.inputs,i(`inputs`),n,(e,t,n)=>M(e,t,n,ye)),p=j(r.outputs,i(`outputs`),n,(e,t,n)=>M(e,t,n,be)),m=j(r.properties,i(`properties`),n,E),h=j(r.widgets_values,i(`widgets_values`),n,(e,t,n)=>Array.isArray(e)?e:w(n,t,`expected an array`));if(a===void 0||o===void 0||s===void 0)return;let g={id:a,type:o,pos:s};return c!==void 0&&(g.size=c),l!==void 0&&(g.flags=l),u!==void 0&&(g.order=u),d!==void 0&&(g.mode=d),f!==void 0&&(g.inputs=f),p!==void 0&&(g.outputs=p),m!==void 0&&(g.properties=m),h!==void 0&&(g.widgets_values=h),g}function Se(e,t,n){let r=E(e,t,n);if(r===void 0)return;let i=e=>T(t,e);if(`dagId`in r)return w(n,i(`dagId`),`a workflow file carries no dagId — that is a definition file`);let a=O(r.last_node_id,i(`last_node_id`),n),o=O(r.last_link_id,i(`last_link_id`),n),s=M(r.nodes,i(`nodes`),n,xe),c=M(r.links,i(`links`),n,ve),l=O(r.version,i(`version`),n),u=j(r.groups,i(`groups`),n,(e,t,n)=>Array.isArray(e)?e:w(n,t,`expected an array`)),d=j(r.config,i(`config`),n,E),f=j(r.extra,i(`extra`),n,E);if(a===void 0||o===void 0||s===void 0||c===void 0||l===void 0)return;let p={last_node_id:a,last_link_id:o,nodes:s,links:c,version:l};return u!==void 0&&(p.groups=u),d!==void 0&&(p.config=d),f!==void 0&&(p.extra=f),p}function U(e){let t=Date.parse(e);return Number.isNaN(t)?{ok:!1,error:r(`DAG_VALIDATION_INVALID_LOGICAL_DATE`,`logicalDate must be a valid ISO-8601 datetime string`,{logicalDate:e})}:{ok:!0,value:new Date(t).toISOString()}}var Ce=class{clock;constructor(e){this.clock=e}resolve(e,t){let n=this.clock.nowIso();if(e===`scheduled`){if(!t)return{ok:!1,error:r(`DAG_VALIDATION_MISSING_LOGICAL_DATE`,`scheduled trigger requires logicalDate`,{trigger:e})};let i=U(t);return i.ok?{ok:!0,value:{trigger:e,logicalDate:i.value,requestedAt:n}}:i}if(!t)return{ok:!0,value:{trigger:e,logicalDate:n,requestedAt:n}};let i=U(t);return i.ok?{ok:!0,value:{trigger:e,logicalDate:i.value,requestedAt:n}}:i}},we=class{assertWithinBudget(e,t,n){if(t<0)return{ok:!1,error:r(`DAG_VALIDATION_NEGATIVE_ESTIMATED_CREDITS`,`estimatedCredits must be zero or positive`,{nextEstimatedCredits:t})};let i=e+t;return typeof n==`number`&&i>n?{ok:!1,error:r(`DAG_VALIDATION_CREDIT_LIMIT_EXCEEDED`,`Estimated run credits exceeds runCreditLimit`,{nextTotalCredits:i,runCreditLimit:n})}:{ok:!0,value:i}}},Te=class{lifecycleFactory;costPolicyEvaluator;constructor(e,t){this.lifecycleFactory=e,this.costPolicyEvaluator=t}async runNode(e){let t=()=>({ok:!1,error:o(e.context.taskRunId)});if(e.context.signal?.aborted)return t();let n=this.lifecycleFactory.create(e.context.nodeDefinition.nodeType);if(!n.ok)return n;let r=await n.value.initialize(e.context);if(e.context.signal?.aborted)return await n.value.dispose(e.context),t();if(!r.ok)return r;let i=await n.value.validateInput(e.input,e.context);if(e.context.signal?.aborted)return await n.value.dispose(e.context),t();if(!i.ok)return await n.value.dispose(e.context),i;let s=await n.value.estimateCost(e.input,e.context);if(e.context.signal?.aborted)return await n.value.dispose(e.context),t();if(!s.ok)return await n.value.dispose(e.context),s;let c=this.costPolicyEvaluator.assertWithinBudget(e.context.currentTotalCredits,s.value.estimatedCredits,e.context.runCreditLimit);if(!c.ok)return await n.value.dispose(e.context),c;if(e.context.reserveCredits){let r=await e.context.reserveCredits(s.value.estimatedCredits);if(!r.ok)return await n.value.dispose(e.context),r;if(e.context.signal?.aborted)return await n.value.dispose(e.context),t()}let l=e.context.rootCreditBudget?.reserve(s.value.estimatedCredits);if(l&&!l.ok)return await n.value.dispose(e.context),l;try{let r=await n.value.execute(e.input,e.context);if(e.context.signal?.aborted)return await n.value.dispose(e.context),t();if(!r.ok)return await n.value.dispose(e.context),r;let i=await n.value.validateOutput(r.value,e.context);if(e.context.signal?.aborted)return await n.value.dispose(e.context),t();if(!i.ok)return await n.value.dispose(e.context),i;let o=await n.value.dispose(e.context);return e.context.signal?.aborted?t():o.ok?(l?.value.commit(),{ok:!0,value:{output:r.value,estimatedCredits:s.value.estimatedCredits,totalCredits:c.value}}):{ok:!1,error:a(`DAG_TASK_EXECUTION_DISPOSE_FAILED`,`Node dispose step failed after execution`,!1,{nodeType:e.context.nodeDefinition.nodeType,taskRunId:e.context.taskRunId})}}finally{l?.ok&&l.value.release()}}},Ee=class{create(e){return{ok:!1,error:r(`DAG_VALIDATION_NODE_LIFECYCLE_NOT_REGISTERED`,`Node lifecycle is not registered for nodeType`,{nodeType:e})}}},De=class{nodeManifestRegistry;lineage;lifecycleFactory;runner;constructor(e,t,n){this.nodeManifestRegistry=e,this.lineage=n,this.lifecycleFactory=t??new Ee,this.runner=new Te(this.lifecycleFactory,new we)}async execute(e){if(!e.nodeDefinition)return{ok:!1,error:r(`DAG_VALIDATION_NODE_DEFINITION_MISSING`,`Task execution requires nodeDefinition in execution input`,{nodeId:e.nodeId})};let t=this.nodeManifestRegistry.getManifest(e.nodeDefinition.nodeType);if(!t)return{ok:!1,error:r(`DAG_VALIDATION_NODE_MANIFEST_NOT_FOUND`,`Node manifest is not registered for nodeType`,{nodeType:e.nodeDefinition.nodeType})};let n=await this.runner.runNode({input:e.input,context:{executionRoot:e.executionRoot,regexReplaceOperation:e.regexReplaceOperation,snapshotBudget:e.snapshotBudget,rootCreditBudget:e.rootCreditBudget,reserveCredits:e.reserveCredits,...e.byteLimits===void 0?{}:{byteLimits:e.byteLimits},...e.signal===void 0?{}:{signal:e.signal},dagId:e.dagId,dagRunId:e.dagRunId,taskRunId:e.taskRunId,nodeDefinition:e.nodeDefinition,nodeManifest:t,attempt:e.attempt,executionPath:e.executionPath,lineage:e.lineage??this.lineage??{rootRunId:e.dagRunId,depth:0,ancestorCompositeNodeTypes:[]},runCreditLimit:e.costPolicy?.runCreditLimit,currentTotalCredits:e.currentTotalCredits??0,...e.runtimeBaseUrl===void 0?{}:{runtimeBaseUrl:e.runtimeBaseUrl}}});return n.ok?{ok:!0,output:n.value.output,estimatedCredits:n.value.estimatedCredits,totalCredits:n.value.totalCredits}:n}};const Oe={root:`.workflows`,workflowExt:`.json`};function W(e,t,n){let i={result:{applied:!1,runStatus:e?.status}};if(!e)return i;if(n.kind===`transition-run`){if(e.status!==n.expectedStatus)return i;let t=S.transition(e.status,n.event);if(!t.ok)return i;let r={...e,status:t.value.nextStatus,endedAt:n.endedAt};return{dagRun:r,result:{applied:!0,runStatus:r.status}}}if(n.kind===`finalize`){if(e.status!==`running`||t.some(e=>[`created`,`queued`,`running`].includes(e.status)))return i;let r=ke(e,t);if(!r.ok)return{result:{...i.result,error:r.error}};if(r.value)return i;let a=S.transition(e.status,t.some(e=>e.status===`failed`)?`COMPLETE_FAILURE`:`COMPLETE_SUCCESS`);if(!a.ok)return i;let o=a.value.nextStatus;return{dagRun:{...e,status:o,endedAt:n.endedAt},result:{applied:!0,runStatus:o}}}if(n.kind===`admit`)return e.status!==`running`||n.taskRun.dagRunId!==e.dagRunId||t.some(e=>e.nodeId===n.taskRun.nodeId||e.taskRunId===n.taskRun.taskRunId)||!n.dependsOn.every(e=>t.some(t=>t.nodeId===e&&t.status===`success`))?i:{taskRun:n.taskRun,result:{applied:!0,runStatus:e.status,taskRun:n.taskRun}};let a=t.find(e=>e.taskRunId===n.taskRunId);if(n.kind===`cancel-task`){if(!a||![`failed`,`cancelled`].includes(e.status))return i;let t=C.transition(a.status,`CANCEL`);if(!t.ok)return i;let r={...a,status:t.value.nextStatus,leaseOwner:void 0,leaseUntil:void 0,reservedCredits:void 0,reservationAttempt:void 0,reservationOwner:void 0,errorCode:n.error?.code,errorMessage:n.error?.message};return{taskRun:r,result:{applied:!0,runStatus:e.status,taskRun:r}}}if(!a||a.status!==`running`||a.attempt!==n.attempt||a.leaseOwner!==n.leaseOwner)return i;if(e.status!==`running`){if(e.status!==`cancelled`||a.status!==`running`)return i;let t={...a,status:`cancelled`,leaseOwner:void 0,leaseUntil:void 0,reservedCredits:void 0,reservationAttempt:void 0,reservationOwner:void 0};return{taskRun:t,result:{applied:!1,runStatus:e.status,taskRun:t}}}if(n.kind===`snapshot-input`){let t={...a,inputSnapshot:n.inputSnapshot};return{taskRun:t,result:{applied:!0,runStatus:e.status,taskRun:t}}}if(n.kind===`reserve-credits`){let o=n.estimatedCredits;if(!Number.isFinite(o)||o<0||e.definitionSnapshot===void 0)return i;let s;try{s=JSON.parse(e.definitionSnapshot)}catch{return i}let c=L(s,`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`DagRun definition snapshot has invalid shape`,{dagRunId:e.dagRunId});if(!c.ok||c.value.costPolicy===void 0)return i;let l=c.value.costPolicy.runCreditLimit;if(a.reservedCredits!==void 0)return{result:{...i.result,applied:a.reservationAttempt===n.attempt&&a.reservationOwner===n.leaseOwner&&a.reservedCredits===o}};let u=G(t);if(!u.ok)return{result:{...i.result,error:u.error}};let d=u.value+t.reduce((e,t)=>e+(t.reservedCredits??0),0);if(d+o>l)return{result:{...i.result,error:r(`DAG_VALIDATION_CREDIT_LIMIT_EXCEEDED`,`Estimated run credits exceeds runCreditLimit`,{nextTotalCredits:d+o,runCreditLimit:l})}};let f={...a,reservedCredits:o,reservationAttempt:n.attempt,reservationOwner:n.leaseOwner};return{taskRun:f,result:{applied:!0,runStatus:e.status,taskRun:f}}}let o=C.transition(a.status,n.status===`success`?`COMPLETE_SUCCESS`:`COMPLETE_FAILURE`);if(!o.ok)return i;if(n.status===`success`&&e.definitionSnapshot!==void 0){let t;try{t=JSON.parse(e.definitionSnapshot)}catch{return i}let n=L(t,`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`DagRun definition snapshot has invalid shape`,{dagRunId:e.dagRunId});if(!n.ok||n.value.costPolicy!==void 0&&a.reservedCredits===void 0)return i}if(n.status===`success`&&a.reservedCredits!==void 0&&(a.reservationAttempt!==n.attempt||a.reservationOwner!==n.leaseOwner||n.estimatedCredits!==a.reservedCredits))return i;let s=n.status===`success`&&a.reservedCredits!==void 0?G(t):void 0;if(s&&!s.ok)return{result:{...i.result,error:s.error}};let c=n.status===`failed`&&n.reserveRetry===!0,l=c?C.transition(o.value.nextStatus,`RETRY`):void 0;if(l&&!l.ok)return i;let u={...a,status:l?.ok?l.value.nextStatus:o.value.nextStatus,attempt:c?a.attempt+1:a.attempt,reservedCredits:void 0,reservationAttempt:void 0,reservationOwner:void 0,errorCode:c?void 0:n.error?.code,errorMessage:c?void 0:n.error?.message,...n.outputSnapshot===void 0?{}:{outputSnapshot:n.outputSnapshot},...n.estimatedCredits===void 0?{}:{estimatedCredits:n.estimatedCredits},...n.status!==`success`||a.reservedCredits===void 0?n.totalCredits===void 0?{}:{totalCredits:n.totalCredits}:{totalCredits:s.value+a.reservedCredits}};return{taskRun:u,result:{applied:!0,runStatus:e.status,taskRun:u}}}function G(e){let t=0,n=0;for(let r of e)if(r.status===`success`){if(r.totalCredits!==void 0){if(!Number.isFinite(r.totalCredits)||r.totalCredits<0)return K(r);n=Math.max(n,r.totalCredits)}if(r.estimatedCredits===void 0&&r.totalCredits===void 0)return K(r);if(r.estimatedCredits!==void 0){if(!Number.isFinite(r.estimatedCredits)||r.estimatedCredits<0)return K(r);t+=r.estimatedCredits}}return{ok:!0,value:Math.max(t,n)}}function K(e){return{ok:!1,error:r(`DAG_VALIDATION_CREDIT_HISTORY_AMBIGUOUS`,`Prior task credits cannot be accounted for safely`,{taskRunId:e.taskRunId})}}function ke(e,t){if(e.definitionSnapshot===void 0)return{ok:!0,value:!1};let n;try{n=JSON.parse(e.definitionSnapshot)}catch{return{ok:!1,error:r(`DAG_VALIDATION_DEFINITION_SNAPSHOT_PARSE_FAILED`,`Failed to parse DagRun definition snapshot`,{dagRunId:e.dagRunId})}}let i=L(n,`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`DagRun definition snapshot has invalid shape`,{dagRunId:e.dagRunId});return i.ok?{ok:!0,value:i.value.nodes.some(e=>!t.some(t=>t.nodeId===e.nodeId)&&e.dependsOn.every(e=>t.some(t=>t.nodeId===e&&t.status===`success`)))}:i}function Ae(e,t,n){let i=n.issues[0];return r(`DAG_VALIDATION_NODE_CONFIG_SCHEMA_INVALID`,`Node config does not satisfy schema: ${i?.path.join(`.`)??`config`} ${i?.message??`Invalid config`}`,{nodeId:t.nodeDefinition.nodeId,nodeType:e,issueCount:n.issues.length})}var je=class{defaultInputPort;defaultOutputPort;taskHandler;constructor(){this.taskHandler={initialize:async e=>{let t=this.parseNodeConfig(e);return t.ok?this.initializeWithConfig(e,t.value):t},validateInput:async(e,t)=>{let n=this.parseNodeConfig(t);return n.ok?this.validateInputWithConfig(e,t,n.value):n},estimateCost:async(e,t)=>{let n=this.parseNodeConfig(t);return n.ok?this.estimateCostWithConfig(e,t,n.value):n},execute:async(e,t)=>{let n=this.parseNodeConfig(t);return n.ok?this.executeWithConfig(e,t,n.value):n},validateOutput:async(e,t)=>{let n=this.parseNodeConfig(t);return n.ok?this.validateOutputWithConfig(e,t,n.value):n},dispose:async e=>{let t=this.parseNodeConfig(e);return t.ok?this.disposeWithConfig(e,t.value):t}}}parseNodeConfig(e){let t=this.configSchemaDefinition.safeParse(e.nodeDefinition.config);return t.success?{ok:!0,value:t.data}:{ok:!1,error:Ae(this.nodeType,e,t.error)}}async initializeWithConfig(e,t){return{ok:!0,value:void 0}}async validateInputWithConfig(e,t,n){return{ok:!0,value:void 0}}async validateOutputWithConfig(e,t,n){return{ok:!0,value:void 0}}async disposeWithConfig(e,t){return{ok:!0,value:void 0}}};const q=`asset://`;var J=class e{value;constructor(e){this.value=e}static fromAssetReference(t){return t.referenceType===`asset`?new e({referenceType:`asset`,assetId:t.assetId,mediaType:t.mediaType,name:t.name,sizeBytes:t.sizeBytes}):new e({referenceType:`uri`,uri:t.uri,mediaType:t.mediaType,name:t.name,sizeBytes:t.sizeBytes})}static fromBinary(t){if(typeof t.assetId==`string`&&t.assetId.trim().length>0)return{ok:!0,value:new e({referenceType:`asset`,assetId:t.assetId.trim(),mediaType:t.mimeType,sizeBytes:t.sizeBytes})};if(t.uri.startsWith(q)){let n=t.uri.slice(8).trim();return n.length===0?{ok:!1,error:r(`DAG_VALIDATION_MEDIA_REFERENCE_INVALID`,`Binary asset URI must include non-empty assetId`)}:{ok:!0,value:new e({referenceType:`asset`,assetId:n,mediaType:t.mimeType,sizeBytes:t.sizeBytes})}}return{ok:!0,value:new e({referenceType:`uri`,uri:t.uri,mediaType:t.mimeType,sizeBytes:t.sizeBytes})}}static fromCandidate(e,t){let n=typeof e.assetId==`string`&&(t?.allowEmptyAssetId===!0||e.assetId.trim().length>0),i=typeof e.uri==`string`&&(t?.allowEmptyUri===!0||e.uri.trim().length>0);return n===i?{ok:!1,error:r(`DAG_VALIDATION_MEDIA_REFERENCE_XOR_REQUIRED`,`Exactly one of assetId or uri must be provided`)}:e.referenceType===`asset`&&!n?{ok:!1,error:r(`DAG_VALIDATION_MEDIA_REFERENCE_TYPE_MISMATCH`,`referenceType asset requires assetId`)}:e.referenceType===`uri`&&!i?{ok:!1,error:r(`DAG_VALIDATION_MEDIA_REFERENCE_TYPE_MISMATCH`,`referenceType uri requires uri`)}:this.buildFromValidatedCandidate(e,n)}static buildFromValidatedCandidate(t,n){return n&&typeof t.assetId==`string`?{ok:!0,value:new e({referenceType:`asset`,assetId:t.assetId.trim(),mediaType:t.mediaType,name:t.name,sizeBytes:t.sizeBytes})}:typeof t.uri==`string`?{ok:!0,value:new e({referenceType:`uri`,uri:t.uri,mediaType:t.mediaType,name:t.name,sizeBytes:t.sizeBytes})}:{ok:!1,error:r(`DAG_VALIDATION_MEDIA_REFERENCE_INVALID`,`uri must be a string when referenceType is uri`)}}isAsset(){return this.value.referenceType===`asset`}isUri(){return this.value.referenceType===`uri`}assetId(){return this.value.assetId}uri(){return this.value.uri}mediaType(){return this.value.mediaType}toAssetIdOrUri(){return this.value.referenceType===`asset`&&typeof this.value.assetId==`string`?{referenceType:`asset`,assetId:this.value.assetId}:{referenceType:`uri`,uri:this.value.uri??``}}toAssetContentUrl(e){if(!(!this.isAsset()||typeof this.value.assetId!=`string`))return`${e.replace(/\/$/,``)}/view?filename=${encodeURIComponent(this.value.assetId)}`}toBinary(e,t){let n=typeof this.value.mediaType==`string`&&this.value.mediaType.trim().length>0?this.value.mediaType:t;return this.value.referenceType===`asset`&&typeof this.value.assetId==`string`?{kind:e,mimeType:n,uri:`${q}${this.value.assetId}`,referenceType:`asset`,assetId:this.value.assetId,sizeBytes:this.value.sizeBytes}:{kind:e,mimeType:n,uri:this.value.uri??``,referenceType:`uri`,sizeBytes:this.value.sizeBytes}}};function Y(e,t,n,i){if(typeof e!=`object`||!e||Array.isArray(e))return{ok:!1,error:r(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be binary payload object`,{nodeId:t,key:n,expectedType:`binary`})};let a=e;if(a.kind!==`image`&&a.kind!==`video`&&a.kind!==`audio`&&a.kind!==`file`||typeof a.mimeType!=`string`||typeof a.uri!=`string`)return{ok:!1,error:r(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be valid binary payload`,{nodeId:t,key:n,expectedType:`binary`})};let o=a.kind;return i&&o!==i?{ok:!1,error:r(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input binary kind does not match expected kind`,{nodeId:t,key:n,expectedKind:i,actualKind:o})}:{ok:!0,value:{kind:o,mimeType:a.mimeType,uri:a.uri,referenceType:a.referenceType===`asset`||a.referenceType===`uri`?a.referenceType:void 0,assetId:typeof a.assetId==`string`?a.assetId:void 0,sizeBytes:typeof a.sizeBytes==`number`?a.sizeBytes:void 0}}}var Me=class{input;nodeId;output={};constructor(e,t){this.input=e,this.nodeId=t}getInput(e){return this.input[e]}requireInput(e){let t=this.getInput(e);return t===void 0?{ok:!1,error:r(`DAG_VALIDATION_NODE_INPUT_MISSING`,`Node input key is missing`,{nodeId:this.nodeId,key:e})}:{ok:!0,value:t}}requireInputString(e){let t=this.requireInput(e);return t.ok?typeof t.value==`string`?{ok:!0,value:t.value}:{ok:!1,error:r(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be string`,{nodeId:this.nodeId,key:e,expectedType:`string`})}:t}requireInputArray(e){let t=this.getInput(e);if(Array.isArray(t))return{ok:!0,value:t};let n=this.collectListHandleValues(e);return n?{ok:!0,value:n}:t===void 0?{ok:!1,error:r(`DAG_VALIDATION_NODE_INPUT_MISSING`,`Node input key is missing`,{nodeId:this.nodeId,key:e})}:{ok:!1,error:r(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be array`,{nodeId:this.nodeId,key:e,expectedType:`array`})}}requireInputBinary(e,t){let n=this.requireInput(e);return n.ok?Y(n.value,this.nodeId,e,t):n}requireInputBinaryList(e,t,n){let i=this.requireInputArray(e);if(!i.ok)return i;let a=i.value;if(typeof n?.minItems==`number`&&a.length<n.minItems)return{ok:!1,error:r(`DAG_VALIDATION_NODE_INPUT_MIN_ITEMS_NOT_SATISFIED`,`Node input list does not satisfy minItems`,{nodeId:this.nodeId,key:e,minItems:n.minItems,actualItems:a.length})};if(typeof n?.maxItems==`number`&&a.length>n.maxItems)return{ok:!1,error:r(`DAG_VALIDATION_NODE_INPUT_MAX_ITEMS_EXCEEDED`,`Node input list exceeds maxItems`,{nodeId:this.nodeId,key:e,maxItems:n.maxItems,actualItems:a.length})};let o=[];for(let[n,r]of a.entries()){let i=Y(r,this.nodeId,`${e}[${n}]`,t);if(!i.ok)return i;o.push(i.value)}return{ok:!0,value:o}}requireInputMediaReference(e,t){let n=this.requireInput(e);return n.ok?this.parseMediaReferenceValue(n.value,e,t):n}requireInputBinaryReference(e,t){let n=this.requireInputBinary(e,t);if(!n.ok)return n;let i=J.fromBinary(n.value);return i.ok?i:{ok:!1,error:r(i.error.code,i.error.message,{nodeId:this.nodeId,key:e,...i.error.context??{}})}}setOutput(e,t){this.output[e]=t}toOutput(){return{...this.output}}collectListHandleValues(e){let t=new Map;for(let[n,r]of Object.entries(this.input)){let i=v(n);!i||i.portKey!==e||t.set(i.index,r)}if(t.size===0)return;let n=[...t.keys()].sort((e,t)=>e-t),r=n[n.length-1]+1;if(n.length!==r)return;let i=[];for(let e=0;e<r;e+=1){let n=t.get(e);if(n===void 0)return;i.push(n)}return i}parseMediaReferenceValue(e,t,n){if(typeof e==`string`){if(n?.allowStringAssetUri===!0&&e.startsWith(`asset://`))return this.wrapMediaReferenceError(J.fromCandidate({referenceType:`asset`,assetId:e.slice(8)}),t);if(n?.allowStringUri===!0)return this.wrapMediaReferenceError(J.fromCandidate({referenceType:`uri`,uri:e}),t)}return typeof e!=`object`||!e||Array.isArray(e)?{ok:!1,error:r(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be media reference object`,{nodeId:this.nodeId,key:t,expectedType:`media-reference`})}:this.wrapMediaReferenceError(J.fromCandidate(e),t)}wrapMediaReferenceError(e,t){return e.ok?e:{ok:!1,error:r(e.error.code,e.error.message,{nodeId:this.nodeId,key:t,...e.error.context??{}})}}};function X(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return typeof t.kind==`string`&&typeof t.mimeType==`string`&&typeof t.uri==`string`}function Z(e,t){if(e.isList)return Array.isArray(t)?t.every(t=>Z({...e,isList:!1},t)):!1;switch(e.type){case`string`:return typeof t==`string`;case`number`:return typeof t==`number`;case`boolean`:return typeof t==`boolean`;case`object`:return typeof t==`object`&&!!t&&!Array.isArray(t)&&!X(t);case`array`:return Array.isArray(t);case`binary`:return!(!X(t)||e.binaryKind&&t.kind!==e.binaryKind||e.mimeTypes&&e.mimeTypes.length>0&&!e.mimeTypes.includes(t.mimeType));default:return!1}}function Q(e,t,n,i){for(let a of t){let t=e[a.key];if(t===void 0){if(a.required)return{ok:!1,error:r(n===`input`?`DAG_VALIDATION_NODE_REQUIRED_INPUT_MISSING`:`DAG_VALIDATION_NODE_REQUIRED_OUTPUT_MISSING`,n===`input`?`Required input port "${a.key}" (${a.type}) is missing on node "${i}"`:`Required output port "${a.key}" (${a.type}) was not set by node "${i}"`,{nodeId:i,key:a.key,type:a.type},n===`input`?{action:`connect_port`,suggestion:`Connect a "${a.type}" output to the "${a.key}" input of node "${i}"`}:void 0)};continue}if(a.isList){if(!Array.isArray(t))return{ok:!1,error:r(n===`input`?`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`:`DAG_VALIDATION_NODE_OUTPUT_TYPE_MISMATCH`,n===`input`?`List input port must receive array payload`:`List output port must emit array payload`,{nodeId:i,key:a.key,type:a.type})};if(typeof a.minItems==`number`&&t.length<a.minItems)return{ok:!1,error:r(n===`input`?`DAG_VALIDATION_NODE_INPUT_MIN_ITEMS_NOT_SATISFIED`:`DAG_VALIDATION_NODE_OUTPUT_MIN_ITEMS_NOT_SATISFIED`,n===`input`?`List input port does not satisfy minItems`:`List output port does not satisfy minItems`,{nodeId:i,key:a.key,minItems:a.minItems,actualItems:t.length})};if(typeof a.maxItems==`number`&&t.length>a.maxItems)return{ok:!1,error:r(n===`input`?`DAG_VALIDATION_NODE_INPUT_MAX_ITEMS_EXCEEDED`:`DAG_VALIDATION_NODE_OUTPUT_MAX_ITEMS_EXCEEDED`,n===`input`?`List input port exceeds maxItems`:`List output port exceeds maxItems`,{nodeId:i,key:a.key,maxItems:a.maxItems,actualItems:t.length})}}if(!Z(a,t))return{ok:!1,error:r(n===`input`?`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`:`DAG_VALIDATION_NODE_OUTPUT_TYPE_MISMATCH`,n===`input`?`Input port "${a.key}" on node "${i}" expects type "${a.type}" but received incompatible value`:`Output port "${a.key}" on node "${i}" emitted value incompatible with type "${a.type}"`,{nodeId:i,key:a.key,type:a.type},n===`input`?{action:`check_port_type`,suggestion:`Ensure the upstream output connected to "${a.key}" produces a "${a.type}" value`}:void 0)}}return{ok:!0,value:void 0}}var Ne=class{handler;constructor(e){this.handler=e}async initialize(e){return this.handler.initialize?this.handler.initialize(e):{ok:!0,value:void 0}}async validateInput(e,t){let n=Q(e,t.nodeManifest.inputs,`input`,t.nodeDefinition.nodeId);return n.ok?this.handler.validateInput?this.handler.validateInput(e,t):{ok:!0,value:void 0}:n}async estimateCost(e,t){return this.handler.estimateCost?this.handler.estimateCost(e,t):{ok:!0,value:{estimatedCredits:0}}}async execute(e,t){return this.handler.execute(e,t)}async validateOutput(e,t){let n=Q(e,t.nodeManifest.outputs,`output`,t.nodeDefinition.nodeId);return n.ok?this.handler.validateOutput?this.handler.validateOutput(e,t):{ok:!0,value:void 0}:n}async dispose(e){return this.handler.dispose?this.handler.dispose(e):{ok:!0,value:void 0}}},Pe=class{handlersByType;constructor(e){this.handlersByType=e}getHandler(e){return this.handlersByType[e]}listNodeTypes(){return Object.keys(this.handlersByType)}},Fe=class{taskHandlerRegistry;constructor(e){this.taskHandlerRegistry=e}create(e){let t=this.taskHandlerRegistry.getHandler(e);return t?{ok:!0,value:new Ne(t)}:{ok:!1,error:r(`DAG_VALIDATION_NODE_LIFECYCLE_NOT_REGISTERED`,`Node lifecycle is not registered for nodeType`,{nodeType:e})}}},Ie=class{manifestByType=new Map;constructor(e){for(let t of e)this.manifestByType.set(t.nodeType,t)}getManifest(e){return this.manifestByType.get(e)}listManifests(){return[...this.manifestByType.values()]}};const $=e.string().trim().min(1),Le=e.object({referenceType:e.literal(`asset`),assetId:$,mediaType:e.string().optional(),name:e.string().optional(),sizeBytes:e.number().int().nonnegative().optional()}),Re=e.object({referenceType:e.literal(`uri`),uri:$,mediaType:e.string().optional(),name:e.string().optional(),sizeBytes:e.number().int().nonnegative().optional()}),ze=e.union([Le,Re]);function Be(){return e.object({asset:ze})}function Ve(t){return t instanceof e.ZodType}function He(e){return e==null?{ok:!0,value:{}}:Ve(e)?{ok:!0,value:t(e,{target:`jsonSchema7`})}:{ok:!1,error:r(`DAG_VALIDATION_CONFIG_SCHEMA_INVALID`,`configSchemaDefinition must be a Zod schema instance.`)}}function Ue(e){let t=[],n={};for(let r of e){let e=He(r.configSchemaDefinition);if(!e.ok)return e;let i={nodeType:r.nodeType,displayName:r.displayName,category:r.category,inputs:r.inputs,outputs:r.outputs,configSchema:e.value,...r.defaultInputPort===void 0?{}:{defaultInputPort:r.defaultInputPort},...r.defaultOutputPort===void 0?{}:{defaultOutputPort:r.defaultOutputPort}};t.push(i),n[i.nodeType]=r.taskHandler}return{ok:!0,value:{manifests:t,handlersByType:n}}}const We={IMAGE_PNG:{binaryKind:`image`,mimeTypes:[`image/png`]},IMAGE_COMMON:{binaryKind:`image`,mimeTypes:[`image/png`,`image/jpeg`,`image/webp`]},VIDEO_MP4:{binaryKind:`video`,mimeTypes:[`video/mp4`]},AUDIO_MPEG:{binaryKind:`audio`,mimeTypes:[`audio/mpeg`]},FILE_GENERIC:{binaryKind:`file`,mimeTypes:[]}};function Ge(e){return{key:e.key,label:e.label,order:e.order,type:`binary`,required:e.required,description:e.description,binaryKind:e.preset.binaryKind,mimeTypes:[...e.preset.mimeTypes],isList:e.isList,minItems:e.minItems,maxItems:e.maxItems}}export{v as A,r as C,g as D,L as E,f as M,_e as O,a as S,I as T,C as _,Fe as a,i as b,Ue as c,Oe as d,S as f,ne as g,h,Me as i,ee as j,F as k,Ge as l,De as m,We as n,Ie as o,te as p,J as r,Pe as s,je as t,Be as u,m as v,W as w,o as x,Ce as y};
|
|
2
|
+
//# sourceMappingURL=node-DENLEmMT.js.map
|