@robota-sdk/agent-cli 3.0.0-beta.99 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CHANGELOG.md +2181 -8
  2. package/dist/node/bin.js +22 -22
  3. package/dist/node/cli-core-Cus9ebuT.js +2920 -0
  4. package/dist/node/desktop-host.js +1 -1
  5. package/dist/node/headless.js +2 -2
  6. package/dist/node/host.d.ts +1 -1
  7. package/dist/node/host.js +1 -1
  8. package/dist/node/index.d.ts +1 -1
  9. package/dist/node/index.js +2 -2
  10. package/dist/node/index.js.map +1 -1
  11. package/dist/node/node-BsDZQcvi.js +67 -0
  12. package/dist/node/node-Ct446qHg.js +15 -0
  13. package/dist/node/node-Ct446qHg.js.map +1 -0
  14. package/dist/node/node-DdB-oeq6.js +100 -0
  15. package/dist/node/node-DdB-oeq6.js.map +1 -0
  16. package/dist/node/node-PhNl8kvo.js +15 -0
  17. package/dist/node/node-gdZ0H7su.js +100 -0
  18. package/dist/node/node-oHeP4vDn.js +67 -0
  19. package/dist/node/node-oHeP4vDn.js.map +1 -0
  20. package/dist/node/product-host-C-IQQ6ph.js +2954 -0
  21. package/dist/node/product-host-C-IQQ6ph.js.map +1 -0
  22. package/dist/node/{product-host-DYR8lHfh.d.ts → product-host-SaMRTzxB.d.ts} +3 -3
  23. package/dist/node/{product-host-DYR8lHfh.d.ts.map → product-host-SaMRTzxB.d.ts.map} +1 -1
  24. package/dist/node/src-B9UMvThT-C1A4E6i9.js +2 -0
  25. package/dist/node/src-B9UMvThT-C1A4E6i9.js.map +1 -0
  26. package/dist/node/src-B9UMvThT-fOIUDLqp.js +2 -0
  27. package/dist/node/src-BzaNFPZx-Cn-T7595.js +2 -0
  28. package/dist/node/src-BzaNFPZx-Cn-T7595.js.map +1 -0
  29. package/dist/node/src-BzaNFPZx-Df7aFS3N.js +2 -0
  30. package/dist/node/src-DwAfU-9z-B8gxThPt.js +2 -0
  31. package/dist/node/{node-BIcfIxK2.js → src-DwAfU-9z-DU29KIpt.js} +2 -2
  32. package/dist/node/src-DwAfU-9z-DU29KIpt.js.map +1 -0
  33. package/dist/node/src-UPsd6jNY-B387swGC.js +2 -0
  34. package/dist/node/src-UPsd6jNY-DPPw_--T.js +2 -0
  35. package/dist/node/src-UPsd6jNY-DPPw_--T.js.map +1 -0
  36. package/package.json +43 -43
  37. package/dist/node/cli-core-CrauPvKn.js +0 -2920
  38. package/dist/node/node-BIcfIxK2.js.map +0 -1
  39. package/dist/node/node-BRvqhy29.js +0 -165
  40. package/dist/node/node-BRvqhy29.js.map +0 -1
  41. package/dist/node/node-BTKWbzr0.js +0 -15
  42. package/dist/node/node-BZfTvzcV.js +0 -15
  43. package/dist/node/node-BZfTvzcV.js.map +0 -1
  44. package/dist/node/node-CI_NCC-t.js +0 -2
  45. package/dist/node/node-zABT8WBL.js +0 -165
  46. package/dist/node/product-host-DmP4TgQl.js +0 -2954
  47. package/dist/node/product-host-DmP4TgQl.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{D as e,O as t,k as n,t as r}from"./product-host-DmP4TgQl.js";import{join as i}from"node:path";const a=[`PATH`,`HOME`,`USERPROFILE`,`SystemRoot`,`TEMP`,`TMP`,`LANG`,`LC_ALL`,`XDG_RUNTIME_DIR`,`DISPLAY`,`WAYLAND_DISPLAY`,`XAUTHORITY`,`DBUS_SESSION_BUS_ADDRESS`,`APPDATA`,`LOCALAPPDATA`,`PROGRAMDATA`],o=/^ws:\/\/127\.0\.0\.1:([0-9]{1,5})\/?\?token=([A-Za-z0-9%._~-]+)$/u;function s(e){let t=e.split(/\r?\n/u).filter(e=>e.trim()!==``);if(t.length===1)try{let e=JSON.parse(t[0]);return typeof e==`object`&&e&&!Array.isArray(e)?e:void 0}catch{return}}function c(e){let t=s(e);if(t===void 0)return;let n=t.providerEnvRefs;if(!(n!==void 0&&(!Array.isArray(n)||n.length>128||!n.every(e=>typeof e==`string`&&/^[A-Za-z_][A-Za-z0-9_]*$/u.test(e))))){if(t.state===`trusted`)return t.askable===!1?{trusted:!0,providerEnvRefs:Object.freeze([...new Set(n??[])])}:void 0;if(t.askable===!0&&typeof t.workspace==`string`&&t.workspace.trim()!==``){let e=Array.isArray(t.loads)?t.loads.filter(e=>typeof e==`string`):[];return{trusted:!1,question:{folder:t.workspace,loads:e.slice(0,64)},providerEnvRefs:[]}}return{trusted:!1,providerEnvRefs:[]}}}function l(e){let t=s(e);if(typeof t?.id!=`string`||t.id.trim()===``||typeof t.url!=`string`)return;let n=o.exec(t.url);if(!n)return;let r=Number(n[1]);return Number.isInteger(r)&&r>0&&r<=65535?{id:t.id,url:t.url,port:r}:void 0}function u(e){return`default-src 'self'; connect-src ${e===void 0?`'none'`:`ws://127.0.0.1:${e}`}; img-src 'self' data:; style-src 'self' 'unsafe-inline'; script-src 'self'`}function d(o){let s=Object.freeze({...o.environment}),d=r(o.artifact).resolveRuntime({environment:s}).config,f=n(s,e(d)),p=null,m=null,h,g=!1,_=(e=[])=>{let n={};for(let e of a)f[e]!==void 0&&(n[e]=f[e]);for(let t of e)f[t]!==void 0&&(n[t]=f[t]);for(let{section:e,field:r,descriptor:i}of t()){if(i.exposure===`private`||!i.consumers.includes(`cli`))continue;let t=d[e][r];t!==void 0&&(n[i.variable]=typeof t==`string`?t:JSON.stringify(t))}return f.PRODUCT_CONFIG_FILE!==void 0&&(n.PRODUCT_CONFIG_FILE=f.PRODUCT_CONFIG_FILE),n};async function v(){let e=[],t=g?void 0:await o.execute([`trust`,`status`,`--json`],_()),n=t?.exitCode===0?c(t.stdout):void 0;if(!g&&n?.question!==void 0){let t=await o.chooseTrust(n.question);if(t!==`trust`&&t!==`restricted`&&t!==`quit`)return{ok:!1,detail:`Desktop trust answer was invalid.`};if(t===`quit`)return{ok:!1,detail:`Desktop launch cancelled.`};if(t===`restricted`&&(g=!0),t===`trust`){let t=await o.execute([`trust`,`--yes`],_());if(t.exitCode!==0)return{ok:!1,detail:t.stderr.trim()||`Workspace trust grant failed.`};let n=await o.execute([`trust`,`status`,`--json`],_()),r=n.exitCode===0?c(n.stdout):void 0;if(r?.trusted!==!0)return{ok:!1,detail:`Workspace trust could not be confirmed after grant.`};e=r.providerEnvRefs}}else e=n?.providerEnvRefs??[];let r=await o.execute([`daemon`,`start`,`--json`,...g?[`--restricted-workspace`]:[]],_(g?[]:e)),i=r.exitCode===0?l(r.stdout):void 0;return i===void 0?{ok:!1,detail:r.stderr.trim()||`Desktop daemon did not return a loopback endpoint.`}:{ok:!0,endpoint:i}}let y=()=>{if(m!==null)return m;let e=v().then(e=>(h=e.ok?e.endpoint.port:void 0,m=null,e),e=>{throw h=void 0,m=null,e});return p=m=e,e};return Object.freeze({config:d,userDataPath:i(d.storage.userRoot,`desktop`),start:y,reconnect:y,current:()=>p,port:()=>h,csp:()=>u(h)})}export{d as createDesktopCliController,u as desktopContentSecurityPolicy,l as parseDesktopDaemonStart,c as parseDesktopTrustStatus};
1
+ import{M as e,N as t,j as n,t as r}from"./product-host-C-IQQ6ph.js";import{join as i}from"node:path";const a=[`PATH`,`HOME`,`USERPROFILE`,`SystemRoot`,`TEMP`,`TMP`,`LANG`,`LC_ALL`,`XDG_RUNTIME_DIR`,`DISPLAY`,`WAYLAND_DISPLAY`,`XAUTHORITY`,`DBUS_SESSION_BUS_ADDRESS`,`APPDATA`,`LOCALAPPDATA`,`PROGRAMDATA`],o=/^ws:\/\/127\.0\.0\.1:([0-9]{1,5})\/?\?token=([A-Za-z0-9%._~-]+)$/u;function s(e){let t=e.split(/\r?\n/u).filter(e=>e.trim()!==``);if(t.length===1)try{let e=JSON.parse(t[0]);return typeof e==`object`&&e&&!Array.isArray(e)?e:void 0}catch{return}}function c(e){let t=s(e);if(t===void 0)return;let n=t.providerEnvRefs;if(!(n!==void 0&&(!Array.isArray(n)||n.length>128||!n.every(e=>typeof e==`string`&&/^[A-Za-z_][A-Za-z0-9_]*$/u.test(e))))){if(t.state===`trusted`)return t.askable===!1?{trusted:!0,providerEnvRefs:Object.freeze([...new Set(n??[])])}:void 0;if(t.askable===!0&&typeof t.workspace==`string`&&t.workspace.trim()!==``){let e=Array.isArray(t.loads)?t.loads.filter(e=>typeof e==`string`):[];return{trusted:!1,question:{folder:t.workspace,loads:e.slice(0,64)},providerEnvRefs:[]}}return{trusted:!1,providerEnvRefs:[]}}}function l(e){let t=s(e);if(typeof t?.id!=`string`||t.id.trim()===``||typeof t.url!=`string`)return;let n=o.exec(t.url);if(!n)return;let r=Number(n[1]);return Number.isInteger(r)&&r>0&&r<=65535?{id:t.id,url:t.url,port:r}:void 0}function u(e){return`default-src 'self'; connect-src ${e===void 0?`'none'`:`ws://127.0.0.1:${e}`}; img-src 'self' data:; style-src 'self' 'unsafe-inline'; script-src 'self'`}function d(o){let s=Object.freeze({...o.environment}),d=r(o.artifact).resolveRuntime({environment:s}).config,f=t(s,n(d)),p=null,m=null,h,g=!1,_=(t=[])=>{let n={};for(let e of a)f[e]!==void 0&&(n[e]=f[e]);for(let e of t)f[e]!==void 0&&(n[e]=f[e]);for(let{section:t,field:r,descriptor:i}of e()){if(i.exposure===`private`||!i.consumers.includes(`cli`))continue;let e=d[t][r];e!==void 0&&(n[i.variable]=typeof e==`string`?e:JSON.stringify(e))}return f.PRODUCT_CONFIG_FILE!==void 0&&(n.PRODUCT_CONFIG_FILE=f.PRODUCT_CONFIG_FILE),n};async function v(){let e=[],t=g?void 0:await o.execute([`trust`,`status`,`--json`],_()),n=t?.exitCode===0?c(t.stdout):void 0;if(!g&&n?.question!==void 0){let t=await o.chooseTrust(n.question);if(t!==`trust`&&t!==`restricted`&&t!==`quit`)return{ok:!1,detail:`Desktop trust answer was invalid.`};if(t===`quit`)return{ok:!1,detail:`Desktop launch cancelled.`};if(t===`restricted`&&(g=!0),t===`trust`){let t=await o.execute([`trust`,`--yes`],_());if(t.exitCode!==0)return{ok:!1,detail:t.stderr.trim()||`Workspace trust grant failed.`};let n=await o.execute([`trust`,`status`,`--json`],_()),r=n.exitCode===0?c(n.stdout):void 0;if(r?.trusted!==!0)return{ok:!1,detail:`Workspace trust could not be confirmed after grant.`};e=r.providerEnvRefs}}else e=n?.providerEnvRefs??[];let r=await o.execute([`daemon`,`start`,`--json`,...g?[`--restricted-workspace`]:[]],_(g?[]:e)),i=r.exitCode===0?l(r.stdout):void 0;return i===void 0?{ok:!1,detail:r.stderr.trim()||`Desktop daemon did not return a loopback endpoint.`}:{ok:!0,endpoint:i}}let y=()=>{if(m!==null)return m;let e=v().then(e=>(h=e.ok?e.endpoint.port:void 0,m=null,e),e=>{throw h=void 0,m=null,e});return p=m=e,e};return Object.freeze({config:d,userDataPath:i(d.storage.userRoot,`desktop`),start:y,reconnect:y,current:()=>p,port:()=>h,csp:()=>u(h)})}export{d as createDesktopCliController,u as desktopContentSecurityPolicy,l as parseDesktopDaemonStart,c as parseDesktopTrustStatus};
2
2
  //# sourceMappingURL=desktop-host.js.map
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
2
  ;(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);}})();
3
- import{R as e,c as t,g as n,h as r,l as i,m as a,o,p as s,s as c,t as l,u}from"./cli-core-CrauPvKn.js";if(r(c(process.argv)))try{let e=u({});s(e),a(e.config.identity.cliName),i(e.environment),n(o(e))}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1}else try{let n=u({});s(n),a(n.config.identity.cliName);let r=t();!r.serve||r.printMode||r.goal!==void 0||r.positional.length>0||r.reset||r.configure||r.configureProvider!==void 0||r.checkUpdate||r.help||r.version?(process.stderr.write(`This headless runtime accepts only --serve.
4
- `),process.exitCode=2):l({productRuntime:n},e).catch(e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1})}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=2}export{};
3
+ import{H as e,_ as t,b as n,d as r,f as i,m as a,p as o,t as s,u as c,v as l,y as u}from"./cli-core-Cus9ebuT.js";if(u(r(process.argv)))try{let e=a({});t(e),l(e.config.identity.cliName),o(e.environment),n(c(e))}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1}else try{let n=a({});t(n),l(n.config.identity.cliName);let r=i();!r.serve||r.printMode||r.goal!==void 0||r.positional.length>0||r.reset||r.configure||r.configureProvider!==void 0||r.checkUpdate||r.help||r.version?(process.stderr.write(`This headless runtime accepts only --serve.
4
+ `),process.exitCode=2):s({productRuntime:n},e).catch(e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1})}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=2}export{};
@@ -1,3 +1,3 @@
1
1
  import { t as IProductCliArtifact } from "./artifact-DrPhOb_v.js";
2
- import { n as createProductCliHost, t as IProductCliHost } from "./product-host-DYR8lHfh.js";
2
+ import { n as createProductCliHost, t as IProductCliHost } from "./product-host-SaMRTzxB.js";
3
3
  export { type IProductCliArtifact, IProductCliHost, createProductCliHost };
package/dist/node/host.js CHANGED
@@ -1 +1 @@
1
- import{t as e}from"./product-host-DmP4TgQl.js";export{e as createProductCliHost};
1
+ import{t as e}from"./product-host-C-IQQ6ph.js";export{e as createProductCliHost};
@@ -1,5 +1,5 @@
1
1
  import { t as IProductCliArtifact } from "./artifact-DrPhOb_v.js";
2
- import { _ as IEgressDeps, a as IHostedAdmissionOptions, c as IHostedRuntimeConfig, d as IHostedRuntimeInvocation, f as IHostedRuntimeUsage, g as ISandboxClient, h as THostedRuntimeExecutorFactory, i as IHostedAdmission, l as IHostedRuntimeControl, m as THostedBackendRole, n as createProductCliHost, o as IHostedAdmissionProof, p as IHostedSnapshot, r as IStartCliOptions, s as IHostedIdentity, t as IProductCliHost, u as IHostedRuntimeExecutor } from "./product-host-DYR8lHfh.js";
2
+ import { _ as IEgressDeps, a as IHostedAdmissionOptions, c as IHostedRuntimeConfig, d as IHostedRuntimeInvocation, f as IHostedRuntimeUsage, g as ISandboxClient, h as THostedRuntimeExecutorFactory, i as IHostedAdmission, l as IHostedRuntimeControl, m as THostedBackendRole, n as createProductCliHost, o as IHostedAdmissionProof, p as IHostedSnapshot, r as IStartCliOptions, s as IHostedIdentity, t as IProductCliHost, u as IHostedRuntimeExecutor } from "./product-host-SaMRTzxB.js";
3
3
  import { IncomingMessage, Server, ServerResponse } from "node:http";
4
4
  import { PassThrough, Readable, Writable } from "node:stream";
5
5
  //#region src/cli.d.ts
@@ -1,6 +1,6 @@
1
- import{C as e,E as t,S as n,T as r,_ as i,b as a,c as o,d as s,f as c,g as l,h as u,l as d,m as f,n as p,p as m,r as h,t as g,u as _,v,w as y,x as b,y as x}from"./product-host-DmP4TgQl.js";import"node:module";import{createHash as S,createPublicKey as C,randomBytes as w,randomUUID as T,verify as E}from"node:crypto";import{isAbsolute as ee,join as D,posix as O}from"node:path";import"node:child_process";import{open as k,realpath as te,rename as ne,stat as re,unlink as ie}from"node:fs/promises";import{closeSync as ae,constants as A,existsSync as oe,fstatSync as se,fsyncSync as ce,lstatSync as le,mkdirSync as ue,openSync as de,readFileSync as fe,realpathSync as pe,renameSync as me,rmdirSync as he,unlinkSync as ge,writeFileSync as _e}from"node:fs";import{isIP as ve}from"node:net";import{ServerResponse as ye}from"node:http";import{performance as j}from"node:perf_hooks";import{WebSocket as M,WebSocketServer as be}from"ws";var N=class extends Error{reason=`invalid-schema`;constructor(){super(`Invalid organization schema`)}};function xe(e){for(let t of e){let e=t.codePointAt(0);if(e>=55296&&e<=57343)throw new N}}function Se(e){let t=new Set,n=0;function r(e,i){if(++n>4096||i>32)throw new N;if(e===null||typeof e==`boolean`)return JSON.stringify(e);if(typeof e==`string`)return xe(e),JSON.stringify(e);if(typeof e==`number`){if(!Number.isSafeInteger(e)||Object.is(e,-0))throw new N;return JSON.stringify(e)}if(typeof e!=`object`||t.has(e))throw new N;t.add(e);try{if(Array.isArray(e)){if(Reflect.ownKeys(e).length!==e.length+1)throw new N;return`[${Array.from({length:e.length},(t,n)=>{let a=Object.getOwnPropertyDescriptor(e,String(n));if(a===void 0||!(`value`in a))throw new N;return r(a.value,i+1)}).join(`,`)}]`}if(Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)throw new N;let t=Reflect.ownKeys(e);if(t.some(e=>typeof e!=`string`))throw new N;return`{${t.sort().map(t=>{xe(t);let n=Object.getOwnPropertyDescriptor(e,t);if(!n.enumerable||!(`value`in n))throw new N;return`${JSON.stringify(t)}:${r(n.value,i+1)}`}).join(`,`)}}`}finally{t.delete(e)}}let i=r(e,0);if(new TextEncoder().encode(i).byteLength>64*1024)throw new N;return i}function Ce(e,t){if(Se(e),typeof e!=`object`||!e||Array.isArray(e))throw new N;let n=e;if(Object.keys(n).length!==t.length||t.some(e=>!Object.hasOwn(n,e)))throw new N;return n}function P(e,t=0){if(typeof e!=`number`||!Number.isSafeInteger(e)||Object.is(e,-0)||e<t)throw new N;return e}function we(e){let t=Ce(e,[`tokens`,`timeMs`,`costMicros`]);return Object.freeze({tokens:P(t.tokens),timeMs:P(t.timeMs),costMicros:P(t.costMicros)})}var F=class extends Error{reason;constructor(e){super(`Organization operation refused: ${e}`),this.reason=e}};function I(e){try{return Se(e)}catch(e){throw e instanceof N?new F(`invalid-schema`):e}}function Te(e,t){if(![`workload`,`request`,`approval`].includes(e))throw new F(`invalid-schema`);return Buffer.from(I([`robota/organization-${e}/v1`,t]),`utf8`)}function L(e){return S(`sha256`).update(I([`robota/organization-operation/v1`,e.grantId,e.tenant,e.task,e.actor,e.audience,e.epoch,e.operation]),`utf8`).digest(`hex`)}function R(e,t){if(I(e),typeof e!=`object`||!e||Array.isArray(e))throw new F(`invalid-schema`);let n=e;if(Object.keys(n).length!==t.length||t.some(e=>!Object.hasOwn(n,e)))throw new F(`invalid-schema`);return n}function z(e){if(typeof e!=`string`||e.length<1||e.length>256||[...e].some(e=>{let t=e.codePointAt(0);return t<32||t===127||t>=55296&&t<=57343}))throw new F(`invalid-schema`);return e}function B(e,t=0){if(typeof e!=`number`||!Number.isSafeInteger(e)||Object.is(e,-0)||e<t)throw new F(`invalid-schema`);return e}function V(e){try{return we(e)}catch(e){throw e instanceof N?new F(`invalid-schema`):e}}function Ee(e){let t=R(e,[`value`,`usage`]);return Object.freeze({value:H(JSON.parse(I(t.value))),usage:V(t.usage)})}function De(e){if(typeof e!=`string`||e.length>4096||!e.startsWith(`-----BEGIN PUBLIC KEY-----`))throw new F(`invalid-schema`);try{let t=C(e);if(t.asymmetricKeyType!==`ed25519`)throw Error(`wrong type`);return t}catch{throw new F(`invalid-proof`)}}function H(e){if(typeof e==`object`&&e){for(let t of Object.values(e))H(t);Object.freeze(e)}return e}function Oe(e){if(e.version!==1||B(e.expiresAt,1)<=B(e.notBefore))throw new F(`invalid-schema`);B(e.epoch,1)}function ke(e){let t=R(e,[`version`,`grantId`,`tenant`,`task`,`actor`,`audience`,`epoch`,`nonce`,`notBefore`,`expiresAt`,`operation`]);Oe(t);let n=R(t.operation,[`idempotencyKey`,`resource`,`operation`,`environment`,`parameters`]);return Object.freeze({version:1,grantId:z(t.grantId),tenant:z(t.tenant),task:z(t.task),actor:z(t.actor),audience:z(t.audience),epoch:B(t.epoch,1),nonce:z(t.nonce),notBefore:B(t.notBefore),expiresAt:B(t.expiresAt,1),operation:Object.freeze({idempotencyKey:z(n.idempotencyKey),resource:z(n.resource),operation:z(n.operation),environment:z(n.environment),parameters:H(JSON.parse(I(n.parameters)))})})}function Ae(e){let t=R(e,[`version`,`id`,`tenant`,`task`,`actor`,`audience`,`epoch`,`environment`,`operationDigest`,`notBefore`,`expiresAt`]);if(Oe(t),typeof t.operationDigest!=`string`||!/^[a-f0-9]{64}$/.test(t.operationDigest))throw new F(`invalid-schema`);return Object.freeze({version:1,id:z(t.id),tenant:z(t.tenant),task:z(t.task),actor:z(t.actor),audience:z(t.audience),epoch:B(t.epoch,1),environment:z(t.environment),operationDigest:t.operationDigest,notBefore:B(t.notBefore),expiresAt:B(t.expiresAt,1)})}var je=class extends Error{constructor(){super(`Organization audit append conflict`)}};const Me=/^[0-9a-f]{64}$/,Ne=[`dispatch`,`complete`,`refused`,`unknown`];function Pe(e){return S(`sha256`).update(I(e),`utf8`).digest(`hex`)}function U(e){if(typeof e!=`string`||!Me.test(e))throw new F(`invalid-schema`);return e}function Fe(e,t){let n=R(e,[`version`,`stream`,`sequence`,`hash`]);if(n.version!==1||n.stream!==t)throw new F(`invalid-schema`);return Object.freeze({version:1,stream:t,sequence:B(n.sequence),hash:U(n.hash)})}function Ie(e){let t=R(e,[`phase`,`operationDigest`,`tenantDigest`,`taskDigest`,`actorDigest`,`grantDigest`,`epoch`]);if(typeof t.phase!=`string`||!Ne.includes(t.phase))throw new F(`invalid-schema`);return Object.freeze({phase:t.phase,operationDigest:U(t.operationDigest),tenantDigest:U(t.tenantDigest),taskDigest:U(t.taskDigest),actorDigest:U(t.actorDigest),grantDigest:U(t.grantDigest),epoch:B(t.epoch,1)})}function W(e,t){if(!Ne.includes(t))throw new F(`invalid-schema`);let n=ke(e),r=(e,t)=>Pe([`robota/organization-audit-identity/v1`,e,t]);return Object.freeze({phase:t,operationDigest:L(n),tenantDigest:r(`tenant`,[n.tenant]),taskDigest:r(`task`,[n.tenant,n.task]),actorDigest:r(`actor`,[n.tenant,n.actor]),grantDigest:r(`grant`,[n.grantId]),epoch:n.epoch})}function Le(e){return z(e),Object.freeze({version:1,stream:e,sequence:0,hash:Pe([`robota/organization-audit-genesis/v1`,e])})}function Re(e,t,n,r){return Pe([`robota/organization-audit-entry/v1`,z(e),B(t,1),U(n),Ie(r)])}function ze(e){return Buffer.from(I([`robota/organization-audit-checkpoint/v1`,Fe(e,z(e.stream))]),`utf8`)}function G(e,t,n){let r=R(e,[`claims`,`signature`]),i=Fe(r.claims,t);if(typeof r.signature!=`string`||!/^[A-Za-z0-9_-]{86}$/.test(r.signature))throw new F(`invalid-proof`);let a=Buffer.from(r.signature,`base64url`);if(a.length!==64||a.toString(`base64url`)!==r.signature||!E(null,ze(i),n,a)||i.sequence===0&&i.hash!==Le(t).hash)throw new F(`invalid-proof`);return Object.freeze({claims:i,signature:r.signature})}function Be(e,t){let n=R(e,[`stream`,`sequence`,`previous`,`event`,`hash`]),r=Ie(n.event);if(n.stream!==t.stream||n.sequence!==t.sequence+1||n.previous!==t.hash)throw new F(`invalid-proof`);let i=Re(t.stream,B(n.sequence,1),t.hash,r);if(n.hash!==i)throw new F(`invalid-proof`);return Object.freeze({stream:t.stream,sequence:n.sequence,previous:t.hash,event:r,hash:i})}function K(e,t){return e.stream===t.stream&&e.sequence===t.sequence&&e.hash===t.hash}function q(e,t,n){let r=R(e,[`entries`,`head`]);if(!Array.isArray(r.entries)||r.entries.length>128)throw new F(`invalid-schema`);let i=G(r.head,t.stream,n),a=t;for(let e of r.entries){let t=Be(e,a);a={version:1,stream:t.stream,sequence:t.sequence,hash:t.hash}}if(!K(a,i.claims))throw new F(`invalid-proof`);return i}function J(e,t){return new Promise((n,r)=>{let i=()=>{clearTimeout(o),t.removeEventListener(`abort`,a)},a=()=>{i(),r(new F(`policy-unavailable`))},o=setTimeout(()=>{i(),n()},e);t.addEventListener(`abort`,a,{once:!0}),t.aborted&&a()})}function Y(e){if(e.aborted)throw new F(`policy-unavailable`)}var Ve=class{stream;key;sink;anchor;timeout;constructor(e){if(this.stream=z(e.stream),this.key=De(e.publicKey),this.timeout=B(e.timeoutMs??1e3,1),this.timeout>3e4||typeof e.sink?.read!=`function`||typeof e.sink?.append!=`function`||typeof e.anchor?.load!=`function`||typeof e.anchor?.compareAndSet!=`function`)throw new F(`invalid-schema`);this.sink=Object.freeze({read:e.sink.read.bind(e.sink),append:e.sink.append.bind(e.sink)}),this.anchor=Object.freeze({load:e.anchor.load.bind(e.anchor),compareAndSet:e.anchor.compareAndSet.bind(e.anchor)})}async bounded(e,t){let n=new AbortController,r=()=>n.abort();t?.addEventListener(`abort`,r,{once:!0}),t?.aborted&&n.abort();let i,a=new Promise((e,t)=>{i=()=>t(new F(`policy-unavailable`)),n.signal.addEventListener(`abort`,i,{once:!0}),n.signal.aborted&&i()}),o=setTimeout(r,this.timeout);try{return await Promise.race([Promise.resolve().then(()=>(Y(n.signal),e(n.signal))),a])}catch{throw new F(`policy-unavailable`)}finally{clearTimeout(o),t?.removeEventListener(`abort`,r),n.signal.removeEventListener(`abort`,i),n.abort()}}async record(e,t){let n=Ie(e);await this.bounded(async e=>{let t=5;for(;;){Y(e);let r=G(await this.anchor.load(e),this.stream,this.key);Y(e);let i=q(await this.sink.read(r.claims,e),r.claims,this.key);if(Y(e),!K(i.claims,r.claims)){await J(t,e),t=Math.min(t*2,50);continue}let a;try{a=R(await this.sink.append(r.claims,n,e),[`entry`,`head`])}catch(n){if(Y(e),!(n instanceof je))throw n;await J(t,e),t=Math.min(t*2,50);continue}Y(e);let o=Be(a.entry,r.claims),s=G(a.head,this.stream,this.key);if(I(o.event)!==I(n)||!K(s.claims,{version:1,stream:o.stream,sequence:o.sequence,hash:o.hash}))throw new F(`invalid-proof`);let c=await this.anchor.compareAndSet(r.claims,s,e);if(Y(e),c!==!0)throw new F(`policy-unavailable`);return}},t)}async recover(e){return this.bounded(async e=>{let t=G(await this.anchor.load(e),this.stream,this.key);Y(e);let n=q(await this.sink.read(t.claims,e),t.claims,this.key);if(Y(e),K(n.claims,t.claims))return n.claims;let r=await this.anchor.compareAndSet(t.claims,n,e);if(Y(e),r!==!0)throw new F(`policy-unavailable`);return n.claims},e)}async verify(e){return this.bounded(async e=>{let t=5;for(;;){let n=G(await this.anchor.load(e),this.stream,this.key);Y(e);let r=q(await this.sink.read(n.claims,e),n.claims,this.key);if(Y(e),K(r.claims,n.claims))return n.claims;await J(t,e),t=Math.min(t*2,50)}},e)}};const He=[`budget-exhausted`,`not-authorized`,`invalid-schema`,`expired`,`revoked`,`operation-conflict`,`operation-pending`];function Ue(e){if(typeof e!=`string`||!He.includes(e))throw new F(`invalid-schema`);return e}var We=class extends F{usage;constructor(e,t){super(Ue(e)),this.usage=V(t)}};function Ge(e){let t=R(e,[`request`,`approval`]),n=R(t.request,[`claims`,`signature`]),r=t.approval===null?null:R(t.approval,[`claims`,`signature`]);if(typeof n.signature!=`string`||r!==null&&typeof r.signature!=`string`)throw new F(`invalid-proof`);return Object.freeze({request:Object.freeze({claims:ke(n.claims),signature:n.signature}),approval:r===null?null:Object.freeze({claims:Ae(r.claims),signature:r.signature})})}var Ke=class{audience;ledger;actions=new Map;interval;now;active=new Set;audit;auditReadiness;closed=!1;constructor(e){if(this.ledger=e.ledger,e.hosted===!0){if(this.ledger.verifyAnchoredAuthority(),!(e.audit instanceof Ve))throw new F(`policy-unavailable`);this.auditReadiness=e.audit.verify.bind(e.audit)}if(e.audit!==void 0){if(typeof e.audit?.record!=`function`)throw new F(`invalid-schema`);this.audit=Object.freeze({record:e.audit.record.bind(e.audit)})}if(this.audience=e.ledger.audience,this.interval=B(e.policyIntervalMs??100,1),this.interval>1e3)throw new F(`invalid-schema`);this.now=e.now??Date.now;for(let t of e.actions){let e=z(t.resource),n=z(t.operation),r=t.roles.map(z);if(r.length===0||new Set(r).size!==r.length||typeof t.requiresApproval!=`boolean`||typeof t.reserve!=`function`||typeof t.execute!=`function`)throw new F(`invalid-schema`);let i=I([e,n]);if(this.actions.has(i))throw new F(`invalid-schema`);this.actions.set(i,Object.freeze({resource:e,operation:n,roles:Object.freeze(r),requiresApproval:t.requiresApproval,reserve:t.reserve.bind(t),execute:t.execute.bind(t)}))}}async apply(e,t){if(this.closed)throw new F(`policy-unavailable`);if(t?.aborted||(await this.auditReadiness?.(t),this.closed||t?.aborted))throw new F(`not-authorized`);let n=Ge(e),{request:r,grant:i}=this.ledger.authenticate(n.request),a=this.actions.get(I([r.operation.resource,r.operation.operation]));if(a===void 0||!a.roles.includes(i.role))throw new F(`not-authorized`);let o=V(a.reserve(r.operation));if(B(o.timeMs,1),o.timeMs>2147483647)throw new F(`invalid-schema`);let s=this.ledger.reserve(n.request,o,n.approval,a.requiresApproval);if(s.kind===`complete`)return s.receipt;if(s.kind===`refused`)throw new F(s.reason);return this.execute(n.request,a,s,t)}async auditRecord(e,t,n){if(this.audit===void 0)return;let r,i=new Promise((e,t)=>{r=()=>t(new F(`outcome-unknown`)),n.addEventListener(`abort`,r,{once:!0}),n.aborted&&r()});try{if(await Promise.race([Promise.resolve().then(()=>{if(n.aborted)throw new F(`outcome-unknown`);return this.audit.record(W(e,t),n)}),i]),n.aborted)throw new F(`outcome-unknown`)}finally{n.removeEventListener(`abort`,r)}}async execute(e,t,n,r){let i=e.claims,a=new AbortController;this.active.add(a);let o=()=>a.abort();r?.addEventListener(`abort`,o,{once:!0}),(r?.aborted||this.closed)&&a.abort();let s=Math.min(n.reservation.timeMs,i.expiresAt-this.now(),n.grant.expiresAt-this.now()),c=setTimeout(o,Math.max(0,s)),l=setInterval(()=>{try{this.ledger.authenticate(e)}catch{a.abort()}},this.interval),u=j.now(),d;try{let r=new Promise((e,t)=>{d=()=>t(new F(`outcome-unknown`)),a.signal.addEventListener(`abort`,d,{once:!0}),a.signal.aborted&&d()}),o=Promise.resolve().then(async()=>{if(a.signal.aborted||(this.ledger.authenticate(e),await this.auditRecord(i,`dispatch`,a.signal),a.signal.aborted||j.now()-u>s))throw new F(`outcome-unknown`);return this.ledger.authenticate(e),t.execute(i.operation,{signal:a.signal,proof:e,operationDigest:n.digest,identity:n.grant,reservation:n.reservation})}),c=Ee(await Promise.race([o,r]));if(this.ledger.authenticate(e),a.signal.aborted||j.now()-u>s||(await this.auditRecord(i,`complete`,a.signal),this.ledger.authenticate(e),a.signal.aborted||j.now()-u>s))throw new F(`outcome-unknown`);let l=Ee({value:c.value,usage:{...c.usage,timeMs:Math.max(c.usage.timeMs,Math.ceil(j.now()-u))}});return this.ledger.settle(i,l),l}catch(e){if(e instanceof We&&!a.signal.aborted&&j.now()-u<=s){try{if(await this.auditRecord(i,`refused`,a.signal),a.signal.aborted||j.now()-u>s)throw new F(`outcome-unknown`);this.ledger.confirmNoEffect(i,Ue(e.reason),{...e.usage,timeMs:Math.max(e.usage.timeMs,Math.ceil(j.now()-u))})}catch{a.abort();try{this.ledger.markUnknown(i)}catch{}throw new F(`outcome-unknown`)}throw new F(e.reason)}a.abort();try{this.ledger.markUnknown(i)}catch{}try{await this.auditRecord(i,`unknown`,AbortSignal.timeout(1e3))}catch{}throw new F(`outcome-unknown`)}finally{clearTimeout(c),clearInterval(l),r?.removeEventListener(`abort`,o),d!==void 0&&a.signal.removeEventListener(`abort`,d),this.active.delete(a)}}close(){this.closed=!0;for(let e of this.active)e.abort()}},qe=class{ledger;audit;broker;inventory;incidents;timeout;timer;calls=new Map;sweepPending;closed=!1;quarantined=!1;constructor(e){this.ledger=e.ledger,this.audit=e.audit,this.broker=new Ke({ledger:e.ledger,audit:e.audit,actions:e.actions,hosted:!0,policyIntervalMs:e.policyIntervalMs});let t=e.policyIntervalMs??100;if(this.timeout=e.providerTimeoutMs??1e4,!Number.isSafeInteger(this.timeout)||this.timeout<1||this.timeout>3e4||typeof e.inventory?.list!=`function`||typeof e.inventory.terminate!=`function`||typeof e.incidentOwners?.report!=`function`||[`detection`,`containment`,`assessment`,`recovery`].some(t=>{let n=e.incidentOwners[t];return typeof n!=`string`||n.trim().length===0}))throw new F(`invalid-schema`);this.inventory=Object.freeze({list:e.inventory.list.bind(e.inventory),terminate:e.inventory.terminate.bind(e.inventory)}),this.incidents=Object.freeze({...e.incidentOwners,report:e.incidentOwners.report.bind(e.incidentOwners)}),this.timer=setInterval(()=>{this.sweep().catch(()=>void 0)},t),this.timer.unref()}identity(e,t,n){let r=this.ledger.currentGrant(e);if(r.tenant!==t.tenant||r.task!==t.task||r.actor!==t.actor||r.epoch!==n)throw new F(`not-authorized`);return r}async admit(e,t){if(this.closed||this.quarantined)throw new F(`policy-unavailable`);this.ledger.verifyAnchoredAuthority();let n=this.identity(e.grantId,e.identity,e.epoch);if(await this.audit.verify(t),!(await this.inventory.list(t===void 0?AbortSignal.timeout(this.timeout):AbortSignal.any([t,AbortSignal.timeout(this.timeout)]))).some(t=>t.resource===e.resource&&t.grantId===e.grantId&&t.epoch===e.epoch&&Object.entries(e.identity).every(([e,n])=>t.identity[e]===n))||this.closed||this.quarantined||t?.aborted)throw new F(`not-authorized`);return this.identity(e.grantId,e.identity,e.epoch),n}async apply(e,t,n){if(this.closed||this.quarantined)throw new F(`policy-unavailable`);let r=new AbortController,i=()=>{n?.()};r.signal.addEventListener(`abort`,i,{once:!0});let a=()=>r.abort();t?.addEventListener(`abort`,a,{once:!0}),t?.aborted&&r.abort(),this.calls.set(r,e.request.claims.grantId);try{return await this.broker.apply(e,r.signal)}catch(t){throw t instanceof F&&t.reason===`outcome-unknown`&&await this.incidents.report({kind:`unknown-effect`,resources:[e.request.claims.operation.resource],operationDigest:L(e.request.claims)}).catch(()=>void 0),t}finally{this.calls.delete(r),t?.removeEventListener(`abort`,a),r.signal.removeEventListener(`abort`,i)}}async afterWithdrawal(){await this.sweepPending?.catch(()=>void 0),await this.sweep()}async stopGrant(e){this.ledger.revokeGrant(e),await this.afterWithdrawal()}async stopTask(e,t){this.ledger.stopTask(e,t),await this.afterWithdrawal()}async stopTenant(e){this.ledger.stopTenant(e),await this.afterWithdrawal()}async emergencyStop(){this.ledger.emergencyStop(),await this.afterWithdrawal()}async reconcileExternalOperation(e,t,n){this.ledger.verifyAnchoredAuthority();let r=W(e,`complete`),i=await t.confirm(r.operationDigest,n);return await this.audit.record(r,n),this.ledger.reconcileExternalOperation(e,i)}sweep(){return this.sweepPending===void 0&&(this.sweepPending=this.sweepOnce().finally(()=>{this.sweepPending=void 0})),this.sweepPending}async sweepOnce(){let e=!this.closed&&!this.quarantined,t=this.closed||this.quarantined;try{this.ledger.verifyAnchoredAuthority(),await this.audit.verify(AbortSignal.timeout(this.timeout))}catch{t=!0}t&&!this.closed&&(this.quarantined=!0,this.broker.close());for(let[e,n]of this.calls)try{if(t)throw new F(`policy-unavailable`);this.ledger.currentGrant(n)}catch{e.abort()}let n;try{n=await this.inventory.list(AbortSignal.timeout(this.timeout))}catch{this.quarantined=!0,this.broker.close();for(let e of this.calls.keys())e.abort();throw await this.incidents.report({kind:`cleanup-unresolved`,resources:[]}),new F(`policy-unavailable`)}let r=n.filter(e=>{try{return t?!0:(this.identity(e.grantId,e.identity,e.epoch),!1)}catch{return!0}}),i=await Promise.allSettled(r.map(e=>this.inventory.terminate(e,AbortSignal.timeout(this.timeout)))),a=r.filter((e,t)=>i[t].status===`rejected`).map(e=>e.resource);if(t&&e&&await this.incidents.report({kind:`authority-unavailable`,resources:r.map(e=>e.resource)}),a.length>0)throw await this.incidents.report({kind:`cleanup-unresolved`,resources:a}),new F(`policy-unavailable`)}async close(){this.closed=!0,clearInterval(this.timer),this.broker.close();for(let e of this.calls.keys())e.abort();await this.afterWithdrawal()}};function Je(e){let t=y(e.controlPlane,`organization control plane`),n=y(e.tenant,`organization tenant`),i={apiKey:y(e.apiKey,`E2B management credential`),requestTimeoutMs:r(e.requestTimeoutMs??1e4,`E2B request timeout`,3e4),apiUrl:`https://api.e2b.app`,sandboxUrl:`https://sandbox.e2b.app`,domain:`e2b.app`,debug:!1,retries:0};function o(e){if(e.metadata.organizationControlPlane!==t||e.metadata.tenant!==n)throw Error(`Organization inventory ownership mismatch`);return Object.freeze({resource:y(e.sandboxId,`organization worker`),grantId:y(e.metadata.organizationGrant,`organization grant`),epoch:r(Number(e.metadata.epoch),`organization epoch`),identity:a({tenant:e.metadata.tenant,task:e.metadata.task,rootTask:e.metadata.rootTask,actor:e.metadata.actor,runtime:e.metadata.runtime})})}return{async list(e){e.throwIfAborted();let{Sandbox:r}=await l();e.throwIfAborted();let a=r.list({...i,query:{metadata:{organizationControlPlane:t,tenant:n},state:[`running`,`paused`]},limit:100}),s=[],c=new Set;for(;a.hasNext;){e.throwIfAborted();for(let t of await a.nextItems({...i,signal:e})){let e=o(t);if(c.has(e.resource)||s.length>=1e4)throw Error(`Organization inventory is incomplete`);c.add(e.resource),s.push(e)}}return s},async terminate(e,t){t.throwIfAborted();let{Sandbox:n,SandboxNotFoundError:r}=await l();t.throwIfAborted();let a;try{a=await n.getInfo(e.resource,{...i,signal:t})}catch(e){if(e instanceof r)return;throw Error(`Organization cleanup is unresolved`)}let s=o(a);if(s.grantId!==e.grantId||s.epoch!==e.epoch||Object.entries(e.identity).some(([e,t])=>s.identity[e]!==t))throw Error(`Organization cleanup ownership mismatch`);await n.kill(e.resource,i)}}}function Ye(e){let t=[...e.bindings],n=new Set,r=new Set,i=new Set;for(let a of t){if(!/^[A-Za-z0-9_-]{32,256}$/u.test(a.token)||n.has(a.token)||r.has(a.config.identity.runtime)||i.has(a.grantId))throw new F(`invalid-schema`);let t=e.ledger.currentGrant(a.grantId);if(t.scopes.length!==1||t.scopes[0].resource!==e.modelResource||t.scopes[0].operations.length!==1||t.scopes[0].operations[0]!==`generate`)throw new F(`not-authorized`);n.add(a.token),r.add(a.config.identity.runtime),i.add(a.grantId)}let a=t=>{let n=e.ledger.budgetState(`grant`,t.grantId);return{sessions:1,modelCalls:e.ledger.grantOperationCount(t.grantId),modelTokens:n.spent.tokens,costMicros:n.spent.costMicros}};return(n,r)=>{let i=new AbortController,o=()=>{r.writableFinished||i.abort()};r.once(`close`,o);let s=setTimeout(()=>{i.abort(),n.destroy(),r.destroy()},3e4),c=(e,t)=>{r.destroyed||r.writableEnded||(r.writeHead(e,{"content-type":`application/json`,"cache-control":`no-store`}),r.end(JSON.stringify(t)))};(async()=>{try{let o=new Set;for(let e=0;e<n.rawHeaders.length;e+=2){let t=n.rawHeaders[e].toLowerCase();if([`host`,`authorization`,`idempotency-key`,`content-type`,`content-length`,`transfer-encoding`,`origin`].includes(t)){if(o.has(t))throw new F(`invalid-schema`);o.add(t)}}if(n.method!==`POST`||n.headers.origin!==void 0||n.headers[`content-type`]!==`application/json`||n.headers[`content-encoding`]!==void 0)throw new F(`not-authorized`);let s=[],l=0;for await(let e of n){let t=Buffer.from(e);if(l+=t.length,l>4*1024*1024)throw new F(`invalid-schema`);s.push(t)}let u=Buffer.concat(s),d=JSON.parse(new TextDecoder(`utf-8`,{fatal:!0}).decode(u));if(!d||Array.isArray(d))throw new F(`invalid-schema`);let f=[`/v1/chat/completions`,`/v1/responses`].includes(n.url??``),p=f?t.find(e=>n.headers.authorization===`Bearer ${e.token}`):t.find(e=>d.identity?.runtime===e.config.identity.runtime);if(!p||p.expiresAt<=Date.now())throw new F(`expired`);let m=p.config;if(n.headers.host!==new URL(m.broker.endpoint).host||new URL(m.worker.endpoint).origin!==new URL(m.broker.endpoint).origin)throw new F(`not-authorized`);let h=await e.control.admit({resource:m.worker.resource,grantId:p.grantId,identity:m.identity,epoch:m.epoch},i.signal);if(!f){let e=n.url===new URL(m.worker.endpoint).pathname?`worker`:n.url===new URL(m.broker.endpoint).pathname?`broker`:void 0;if(!e||typeof d.nonce!=`string`||d.version!==3||d.role!==e||d.resource!==m[e].resource||d.epoch!==m.epoch||Object.entries(m.identity).some(([e,t])=>d.identity?.[e]!==t)||JSON.stringify(d.snapshot)!==JSON.stringify(m.snapshot)||JSON.stringify(d.limits)!==JSON.stringify(m.limits))throw new F(`not-authorized`);let t=Date.now(),r={version:3,identity:m.identity,role:e,resource:m[e].resource,nonce:d.nonce,epoch:m.epoch,issuedAt:t,expiresAt:Math.min(t+6e4,p.expiresAt,h.expiresAt),snapshot:m.snapshot,ready:!0,limits:m.limits,usage:e===`broker`?a(p):null},i={...r,signature:p.signAdmission(e,v(r))};x(i,m,e,d.nonce,Date.now()),c(200,i);return}let g=n.headers[`idempotency-key`];if(typeof g!=`string`||!/^[A-Za-z0-9_-]{1,128}$/u.test(g))throw new F(`invalid-schema`);let _=await e.payloads.put(h.id,u),y=Date.now(),b={version:1,grantId:h.id,tenant:h.tenant,task:h.task,actor:h.actor,audience:h.audience,epoch:h.epoch,nonce:T(),notBefore:y,expiresAt:Math.min(y+25e3,p.expiresAt,h.expiresAt),operation:{idempotencyKey:g,resource:e.modelResource,operation:`generate`,environment:`hosted`,parameters:{request:_,surface:n.url===`/v1/responses`?`responses`:`chat-completions`}}},S={claims:b,signature:p.signRequest(Te(`request`,b))};await e.payloads.recordOperation(b);let C=(await e.control.apply({request:S,approval:null},i.signal,()=>r.destroy())).value?.response;if(typeof C!=`string`)throw new F(`outcome-unknown`);let w=await e.payloads.get(h.id,C),E=JSON.parse(w.toString(`utf8`));if(d.stream===!0)if(r.writeHead(200,{"content-type":`text/event-stream`,"cache-control":`no-store`}),n.url===`/v1/responses`){let e=E.output;if(Array.isArray(e)){for(let t of e)if(t.type===`message`&&Array.isArray(t.content))for(let e of t.content)e.type===`output_text`&&typeof e.text==`string`&&r.write(`data: ${JSON.stringify({type:`response.output_text.delta`,delta:e.text})}\n\n`)}r.end(`data: ${JSON.stringify({type:`response.completed`,response:E})}\n\n`)}else{let e=E.choices;if(!Array.isArray(e))throw new F(`outcome-unknown`);r.write(`data: ${JSON.stringify({...E,object:`chat.completion.chunk`,choices:e.map(e=>({index:e.index,delta:{...e.message,...Array.isArray(e.message.tool_calls)?{tool_calls:e.message.tool_calls.map((e,t)=>({...e,index:t}))}:{}},finish_reason:null}))})}\n\n`),r.end(`data: ${JSON.stringify({...E,object:`chat.completion.chunk`,choices:e.map(e=>({index:e.index,delta:{},finish_reason:e.finish_reason}))})}\n\ndata: [DONE]\n\n`)}else c(200,E)}catch(e){r.headersSent?r.destroy():c(e instanceof F&&[`policy-unavailable`,`outcome-unknown`].includes(e.reason)?503:403,{error:{message:e instanceof F?e.message:`Organization ingress refused`,type:`organization_refusal`}}),n.resume()}finally{clearTimeout(s),r.removeListener(`close`,o)}})()}}var Xe=class e{directory;constructor(e){this.directory=e}static async open(t){if(!ee(t))throw new F(`policy-unavailable`);let n=await te(t),r=await re(n);if(!r.isDirectory()||r.mode&63||process.getuid!==void 0&&r.uid!==process.getuid())throw new F(`policy-unavailable`);return new e(n)}path(e,t){if(!/^[a-f0-9]{64}$/u.test(t))throw new F(`invalid-schema`);let n=S(`sha256`).update(e).digest(`hex`);return D(this.directory,`${n}-${t}.json`)}async put(e,t){if(t.length>4*1024*1024)throw new F(`invalid-schema`);let n=S(`sha256`).update(t).digest(`hex`),r=this.path(e,n);return await this.persist(r,t),n}async persist(e,t){let n=D(this.directory,`${T()}.tmp`);try{let r=await k(n,`wx`,384);try{await r.writeFile(t),await r.sync()}finally{await r.close()}await ne(n,e);let i=await k(this.directory,A.O_RDONLY);try{await i.sync()}finally{await i.close()}}catch{throw new F(`policy-unavailable`)}finally{await ie(n).catch(()=>void 0)}}async recordOperation(e){let t=L(e),n=await this.put(e.grantId,Buffer.from(JSON.stringify(e)));await this.persist(`${this.path(e.grantId,t)}.operation`,Buffer.from(JSON.stringify({requestDigest:n})))}async operation(e,t){let n=await k(`${this.path(e,t)}.operation`,A.O_RDONLY|A.O_NOFOLLOW|A.O_NONBLOCK);try{let r=await n.stat();if(!r.isFile()||r.size>4096||r.mode&63||process.getuid!==void 0&&r.uid!==process.getuid())throw new F(`policy-unavailable`);let i=JSON.parse(await n.readFile(`utf8`));if(typeof i.requestDigest!=`string`)throw new F(`policy-unavailable`);let a=JSON.parse((await this.get(e,i.requestDigest)).toString(`utf8`));if(W(a,`complete`),a.grantId!==e||L(a)!==t)throw new F(`policy-unavailable`);return a}finally{await n.close()}}async get(e,t){try{let n=await k(this.path(e,t),A.O_RDONLY|A.O_NOFOLLOW|A.O_NONBLOCK);try{let e=await n.stat();if(!e.isFile()||e.size>4*1024*1024||e.mode&63||process.getuid!==void 0&&e.uid!==process.getuid())throw Error(`unowned content`);let r=await n.readFile();if(S(`sha256`).update(r).digest(`hex`)!==t)throw Error(`changed content`);return r}finally{await n.close()}}catch{throw new F(`policy-unavailable`)}}};function Ze(e){let t=new URL(e.endpoint);if(t.protocol!==`https:`&&!(t.protocol===`http:`&&[`127.0.0.1`,`[::1]`].includes(t.hostname))||t.username||t.password||t.search||t.hash||typeof e.apiKey!=`string`||/[\r\n]/u.test(e.apiKey)||e.apiKey.length===0||!Number.isSafeInteger(e.maxInputBytes)||e.maxInputBytes<1||e.maxInputBytes>4*1024*1024||!Number.isSafeInteger(e.maxOutputTokens)||e.maxOutputTokens<1||!Number.isSafeInteger(e.costMicrosPerToken)||e.costMicrosPerToken<0||typeof e.countInputTokens!=`function`)throw new F(`invalid-schema`);let n=Object.freeze({...e.reservation}),r=e.countInputTokens.bind(e),i=e=>{let t=e;if(!t||Object.keys(t).sort().join(`,`)!==`request,surface`||typeof t.request!=`string`||!/^[a-f0-9]{64}$/u.test(t.request)||![`responses`,`chat-completions`].includes(String(t.surface)))throw new F(`invalid-schema`);return t};return{resource:e.resource,operation:`generate`,roles:[...e.roles],requiresApproval:!1,reserve:e=>(i(e.parameters),n),execute:async(a,o)=>{let s=i(a.parameters),c=await e.payloads.get(o.identity.id,s.request);if(c.length>e.maxInputBytes)throw new F(`invalid-schema`);let l=JSON.parse(new TextDecoder(`utf-8`,{fatal:!0}).decode(c));if(!l||Array.isArray(l)||l.model!==e.model)throw new F(`not-authorized`);let u={...l,stream:!1};if([`conversation`,`previous_response_id`,`prompt`].some(e=>u[e]!=null)||Array.isArray(u.tools)&&u.tools.some(e=>e?.type!==`function`))throw new We(`not-authorized`,{tokens:0,timeMs:0,costMicros:0});delete u.max_tokens,delete u.max_completion_tokens,delete u.max_output_tokens,delete u.stream_options,u[s.surface===`responses`?`max_output_tokens`:`max_completion_tokens`]=e.maxOutputTokens,u.store=!1,u.n=s.surface===`chat-completions`?1:void 0,s.surface===`responses`&&(delete u.n,u.background=!1);let d=JSON.stringify(u),f=await r(s.surface,JSON.parse(d),o.signal),p=f+e.maxOutputTokens;if(!Number.isSafeInteger(f)||f<0||!Number.isSafeInteger(p)||p>n.tokens||!Number.isSafeInteger(p*e.costMicrosPerToken)||p*e.costMicrosPerToken>n.costMicros)throw new We(`budget-exhausted`,{tokens:0,timeMs:0,costMicros:0});o.signal.throwIfAborted();let m=await fetch(`${t.href.replace(/\/$/u,``)}/${s.surface===`responses`?`responses`:`chat/completions`}`,{method:`POST`,redirect:`error`,signal:o.signal,headers:{authorization:`Bearer ${e.apiKey}`,"content-type":`application/json`,...e.providerIdempotency?{"Idempotency-Key":o.operationDigest}:{}},body:d});if(!m.ok||m.body===null)throw await m.body?.cancel(),new F(`outcome-unknown`);let h=[],g=0,_=m.body.getReader();try{for(;;){let e=await _.read();if(e.done)break;if(g+=e.value.length,g>4*1024*1024)throw new F(`outcome-unknown`);h.push(e.value)}}finally{await _.cancel()}let v=Buffer.concat(h),y=JSON.parse(new TextDecoder(`utf-8`,{fatal:!0}).decode(v))?.usage?.total_tokens;if(typeof y!=`number`||!Number.isSafeInteger(y)||y<0||y>n.tokens||!Number.isSafeInteger(y*e.costMicrosPerToken)||y*e.costMicrosPerToken>n.costMicros)throw new F(`outcome-unknown`);return{value:{response:await e.payloads.put(o.identity.id,v)},usage:{tokens:y,timeMs:0,costMicros:y*e.costMicrosPerToken}}}}}function Qe(e){let t=new URL(e.endpoint);if(t.protocol!==`https:`&&!(t.protocol===`http:`&&[`127.0.0.1`,`[::1]`].includes(t.hostname))||t.username||t.password||t.search||t.hash||typeof e.encode!=`function`||typeof e.apiKey!=`string`||e.apiKey.length===0||/[\r\n]/u.test(e.apiKey))throw new F(`invalid-schema`);let n=e.apiKey,r=e.encode.bind(e);return async(e,i,a)=>{let o=await fetch(t,{method:`POST`,redirect:`error`,signal:a,headers:{authorization:`Bearer ${n}`,"content-type":`application/json`},body:JSON.stringify(r(e,i))});if(!o.ok||o.body===null)throw await o.body?.cancel(),new F(`policy-unavailable`);let s=[],c=0,l=o.body.getReader();try{for(;;){let e=await l.read();if(e.done)break;if(c+=e.value.length,c>64*1024)throw new F(`policy-unavailable`);s.push(e.value)}}finally{await l.cancel()}let u=JSON.parse(new TextDecoder(`utf-8`,{fatal:!0}).decode(Buffer.concat(s)));if(!Number.isSafeInteger(u?.input_tokens)||u.input_tokens<0)throw new F(`policy-unavailable`);return u.input_tokens}}function $e(i,o,s){if(i.byteLength>48*1024*1024||S(`sha256`).update(i).digest(`hex`)!==o.digest)throw e(`filesystem checkpoint digest or size is invalid`);let c;try{c=t(JSON.parse(new TextDecoder(`utf-8`,{fatal:!0}).decode(i)),`checkpoint`)}catch{throw e(`filesystem checkpoint is not valid UTF-8 JSON`)}if(n(c,[`version`,`id`,`identity`,`epoch`,`worker`,`files`,...c.version===2?[`session`]:[]],`checkpoint`),c.version!==1&&c.version!==2||c.id!==o.id)throw e(`filesystem checkpoint version or identity does not match`);let l=a(c.identity),u=r(c.epoch,`checkpoint epoch`),d=y(c.worker,`checkpoint worker`);if([`tenant`,`task`,`rootTask`].some(e=>l[e]!==s.identity[e])||l.runtime===s.identity.runtime||u>=s.epoch)throw e(`filesystem checkpoint requires the same task and a fresh identity/epoch`);if(!Array.isArray(c.files)||c.files.length>1e3)throw e(`filesystem checkpoint file inventory is invalid`);let p=new Set,m=0,h=c.files.map(r=>{let i=t(r,`checkpoint file`);n(i,[`path`,`base64`],`checkpoint file`);let a=y(i.path,`checkpoint file path`),o=a.split(`/`)[0];if(O.isAbsolute(a)||O.normalize(a)!==a||a===`.`||a===`..`||a.startsWith(`../`)||a.endsWith(`/`)||a.includes(`\\`)||o===`.home`||o===`.tmp`||p.has(a))throw e(`filesystem checkpoint path escapes or replaces private state`);if(typeof i.base64!=`string`||i.base64.length>44*1024*1024)throw e(`filesystem checkpoint file encoding is invalid`);let s=Buffer.from(i.base64,`base64`);if(m+=s.byteLength,s.toString(`base64`)!==i.base64||m>32*1024*1024)throw e(`filesystem checkpoint encoding or byte budget is invalid`);return p.add(a),Object.freeze({path:a,bytes:new Uint8Array(s)})});for(let t of p){let n=O.dirname(t);for(;n!==`.`;){if(p.has(n))throw e(`filesystem checkpoint file conflicts with a directory`);n=O.dirname(n)}}return Object.freeze({sourceWorker:d,sourceRuntime:l.runtime,sourceEpoch:u,files:h,...c.version===2?{session:f(c.session,`/`)}:{}})}var X=class extends Error{outcome;operationId;resource;constructor(e,t,n){super(`E2B worker provisioning ${e}; owner reconciliation is required`),this.outcome=e,this.operationId=t,this.resource=n,this.name=`E2BWorkerProvisioningError`}};async function et(t){let n=a(t.identity),i=r(t.epoch,`worker epoch`),o=y(t.templateId,`E2B clean template`),s=b(t.snapshot);if(s===null!=(t.checkpoint===void 0)||s?.id===o)throw e(`worker recovery requires checkpoint bytes and a separate clean template`);let c=s===null?void 0:$e(t.checkpoint,s,{identity:n,epoch:i}),u;try{u=new URL(t.brokerEndpoint)}catch{throw e(`worker broker endpoint is invalid`)}if(u.protocol!==`https:`&&!(u.protocol===`http:`&&[`127.0.0.1`,`[::1]`].includes(u.hostname))||u.username||u.password||u.search||u.hash)throw e(`worker broker endpoint requires owner-selected TLS or literal loopback`);let d={apiKey:y(t.apiKey,`E2B management credential`),requestTimeoutMs:r(t.requestTimeoutMs,`E2B request timeout`,3e4),apiUrl:`https://api.e2b.app`,sandboxUrl:`https://sandbox.e2b.app`,domain:`e2b.app`,debug:!1,retries:0},f=r(t.lifetimeMs,`E2B lifetime`,864e5),p=T(),h={...n,epoch:String(i),operationId:p,...t.organization===void 0?{}:{organizationControlPlane:y(t.organization.controlPlane,`organization control plane`),organizationGrant:y(t.organization.grantId,`organization grant`)},...s===null?{}:{restoreMode:`filesystem-v1`,checkpointId:s.id,checkpointDigest:s.digest,sourceWorker:c.sourceWorker,sourceRuntime:c.sourceRuntime,sourceEpoch:String(c.sourceEpoch)}};t.signal.throwIfAborted();let{Sandbox:g}=await l();t.signal.throwIfAborted();let _;try{_=await g.create(o,{...d,timeoutMs:f,metadata:h,envs:{},allowInternetAccess:!1,network:{allowPublicTraffic:!1,allowOut:[u.hostname]},lifecycle:{onTimeout:`kill`,autoResume:!1}})}catch{throw new X(`allocation-unknown`,p)}let v;try{v=y(_.sandboxId,`allocated worker`)}catch{throw new X(`allocation-unknown`,p)}let x,C=()=>(x===void 0&&(x=g.kill(v,d).then(()=>void 0).catch(()=>{throw new X(`cleanup-unresolved`,p,v)})),x);try{let n=await g.getInfo(v,d).catch(()=>{throw new X(`allocation-unknown`,p,v)});if(n.sandboxId!==v||Object.entries(h).some(([e,t])=>n.metadata[e]!==t))throw new X(`allocation-unknown`,p,v);if(v===c?.sourceWorker)throw e(`provider returned the checkpoint source instead of a fresh worker`);if(n.templateId!==o||n.state!==`running`||n.lifecycle?.onTimeout!==`kill`||n.lifecycle.autoResume!==!1||n.allowInternetAccess!==!1||n.network?.allowPublicTraffic!==!1||JSON.stringify(n.network.allowOut??[])!==JSON.stringify([u.hostname])||(n.volumeMounts?.length??0)!==0||n.network.egressProxy!==void 0||Object.keys(n.network.rules??{}).length!==0)throw e(`allocated worker ownership, clean template or network posture is invalid`);t.signal.throwIfAborted();let r=await _.commands.run(`umask 077; mktemp -d "\${TMPDIR:-/tmp}/agent-task-${p}-XXXXXXXXXX"`,{cwd:`/`,envs:{},timeoutMs:t.requestTimeoutMs,requestTimeoutMs:t.requestTimeoutMs});if(r.exitCode!==0||typeof r.stdout!=`string`)throw e(`fresh worker workspace creation failed`);let i=r.stdout.trim();if(!/^\/[A-Za-z0-9._/-]+$/u.test(i)||O.normalize(i)!==i||!RegExp(`^agent-task-${p}-[A-Za-z0-9]{10}$`,`u`).test(O.basename(i)))throw e(`fresh worker workspace receipt is invalid`);for(let n of c?.files??[]){t.signal.throwIfAborted();let r=O.join(i,n.path);await _.files.write(r,n.bytes.slice().buffer,{requestTimeoutMs:t.requestTimeoutMs});let a=await _.files.read(r,{format:`bytes`,requestTimeoutMs:t.requestTimeoutMs});if(!Buffer.from(a).equals(Buffer.from(n.bytes)))throw e(`restored filesystem checkpoint bytes do not match`)}let a;if(c?.session!==void 0){t.signal.throwIfAborted();let n={...c.session,cwd:i},r=m(n),o=O.join(i,`.home`,`.checkpoint-sessions`,`${n.id}.json`);await _.files.write(o,Uint8Array.from(r).buffer,{requestTimeoutMs:t.requestTimeoutMs});let s=await _.files.read(o,{format:`bytes`,requestTimeoutMs:t.requestTimeoutMs});if(!Buffer.from(s).equals(r))throw e(`restored conversation checkpoint bytes do not match`);a=Object.freeze({id:n.id,path:o,digest:S(`sha256`).update(r).digest(`hex`)})}return t.signal.throwIfAborted(),Object.freeze({resource:v,workspaceRoot:i,operationId:p,snapshot:s,release:C,...a===void 0?{}:{resumeSession:a}})}catch(n){throw n instanceof X&&n.outcome===`allocation-unknown`||(await C(),t.signal.aborted&&t.signal.throwIfAborted(),n instanceof Error&&n.message.startsWith(`Hosted runtime admission refused:`))?n:e(`fresh worker provisioning or filesystem restoration failed`)}}var Z=class extends Error{reason;constructor(e){super(`Remote desktop refused: ${e}`),this.reason=e}};function Q(e){return JSON.stringify([e.id,e.user,e.client,e.session,e.worker.resource,e.worker.grantId,e.worker.epoch,e.worker.identity.tenant,e.worker.identity.task,e.worker.identity.rootTask,e.worker.identity.actor,e.worker.identity.runtime])}var tt=class{options;url;now;bindings;constructor(e){if(this.options=e,this.url=o(e.publicUrl,`Desktop runtime`),o(e.issuer,`Desktop issuer`),this.now=e.now??Date.now,this.bindings=e.bindings.map(e=>{let t=structuredClone(e);return Object.freeze(t.worker.identity),Object.freeze(t.worker),Object.freeze(t)}),e.bindings.length===0||e.bindings.length>100||e.bindings.some(e=>[e.id,e.user,e.client,e.session].some(e=>typeof e!=`string`||e.length===0||e.length>256||/[\r\n]/u.test(e)))||new Set(e.bindings.map(e=>e.id)).size!==e.bindings.length)throw new Z(`owner-bindings`)}binding(e){let t=this.bindings.find(t=>t.id===e);if(!t)throw new Z(`owner-binding`);return t}async verify(e,t,n=!1,r){if(r?.throwIfAborted(),!this.bindings.some(e=>Q(e)===Q(t)))throw new Z(`owner-binding`);let i=await s({issuer:this.options.issuer,resource:n?`${this.url.href.replace(/\/$/u,``)}/approval`:this.url.href,algorithms:[`EdDSA`,`ES256`,`RS256`],allowedSubjects:[t.user],requiredScopes:n?[`desktop:approve`]:[`desktop:pair`,`desktop:drive`]},this.options.verifierDeps).verify(e);if(!i.admitted)throw new Z(i.refusal);let a=JSON.parse(Buffer.from(e.split(`.`)[1],`base64url`).toString(`utf8`)),o=this.now();if(typeof a.iat!=`number`||!Number.isSafeInteger(a.iat)||typeof a.exp!=`number`||!Number.isSafeInteger(a.exp)||a.iat*1e3>o||a.exp*1e3<=o||a.exp-a.iat>120||a.nbf!==void 0&&(typeof a.nbf!=`number`||!Number.isSafeInteger(a.nbf)||a.nbf*1e3>o)||typeof a.jti!=`string`||!/^[A-Za-z0-9_-]{8,256}$/u.test(a.jti))throw new Z(`short-lived-credential`);if(a.sub!==t.user||a.client_id!==t.client||a.tenant!==t.worker.identity.tenant||a.task!==t.worker.identity.task||a.session!==t.session||a.workload!==t.worker.identity.runtime||a.epoch!==t.worker.epoch)throw new Z(`session-ownership`);r?.throwIfAborted();let c=await this.options.control.admit(t.worker,r);return r?.throwIfAborted(),{binding:t,jti:a.jti,credentialExpiresAt:a.exp*1e3,expiresAt:Math.min(a.exp*1e3,c.expiresAt,o+6e4)}}async current(e,t){if(!this.bindings.some(t=>Q(t)===Q(e)))throw new Z(`owner-binding`);await this.options.control.admit(e.worker,t)}};const $=e=>S(`sha256`).update(e).digest(`hex`),nt=(e,t)=>e?.version===t.version&&e.ledger===t.ledger&&e.revision===t.revision&&e.digest===t.digest;var rt=class{now;directory;file;lock;constructor(e,t=Date.now){if(this.now=t,this.anchor=e.anchor,!ee(e.directory))throw new Z(`store-unavailable`);this.directory=pe(e.directory);let n=le(this.directory);if(!n.isDirectory()||n.mode&63||process.getuid!==void 0&&n.uid!==process.getuid())throw new Z(`store-unavailable`);if(this.file=D(this.directory,`desktop-authority.json`),this.lock=D(this.directory,`desktop-authority.lock`),e.create===!0){if(oe(this.file)||this.anchor.read()!==void 0)throw new Z(`store-unavailable`);this.locked(()=>this.write(void 0,{version:1,revision:1,spent:{},connections:{}}))}this.read()}anchor;head(e){return{version:1,ledger:this.anchor.ledger,revision:e.revision,digest:$(JSON.stringify(e))}}read(){let e=de(this.file,A.O_RDONLY|A.O_NOFOLLOW|A.O_NONBLOCK);try{let t=se(e);if(!t.isFile()||t.size>2*1024*1024||t.mode&63||process.getuid!==void 0&&t.uid!==process.getuid())throw new Z(`store-unavailable`);let n=JSON.parse(fe(e,`utf8`)),r=this.anchor.read();if(n.version!==1||!Number.isSafeInteger(n.revision)||n.revision<1||!n.spent||!n.connections||!nt(r,this.head(n)))throw new Z(`store-unavailable`);return n}finally{ae(e)}}locked(e){ue(this.lock,{mode:448});try{return e()}finally{he(this.lock)}}write(e,t){let n=D(this.directory,`desktop-${T()}.tmp`);try{let r=de(n,`wx`,384);try{_e(r,JSON.stringify(t)),ce(r)}finally{ae(r)}let i=this.head(t);if(this.anchor.compareAndSet(e===void 0?void 0:this.head(e),i),!nt(this.anchor.read(),i))throw new Z(`store-unavailable`);me(n,this.file);let a=de(this.directory,A.O_RDONLY);try{ce(a)}finally{ae(a)}}finally{oe(n)&&ge(n)}}change(e){return this.locked(()=>{let t=this.read(),n=structuredClone(t),r=e(n);return n.revision++,this.write(t,n),r})}pair(e,t,n,r){let i=w(32).toString(`base64url`),a=r?w(32).toString(`base64url`):null;return this.change(r=>{for(let[e,t]of Object.entries(r.spent))t<=this.now()&&delete r.spent[e];if(n<=this.now()||t.length===0||new Set(t.map(e=>e.id)).size!==t.length||t.some(e=>!Number.isSafeInteger(e.expiresAt)||e.expiresAt<n)||Object.keys(r.spent).length+t.length>4096||t.some(e=>r.spent[$(e.id)]!==void 0))throw new Z(`replayed-pairing`);let o=$(e);if(r.connections[o]===void 0&&Object.keys(r.connections).length>=100)throw new Z(`connection-capacity`);let s=(r.connections[o]?.generation??0)+1;r.connections[o]={generation:s,access:$(i),approval:a===null?null:$(a),expiresAt:n,connected:!1};for(let e of t)r.spent[$(e.id)]=e.expiresAt;return{key:e,generation:s,token:i,approvalToken:a,expiresAt:n}})}authorize(e,t,n,r=!1){let i=this.read().connections[$(e)];if(!i||i.generation!==t||i.expiresAt<=this.now()||(r?i.approval:i.access)!==$(n))throw new Z(`withdrawn-connection`)}connect(e,t,n){this.authorize(e,t,n),this.change(n=>{let r=n.connections[$(e)];if(r.generation!==t||r.expiresAt<=this.now()||r.connected)throw new Z(`replayed-connection`);r.connected=!0})}approveOnce(e,t,n,r){this.authorize(e,t,n,!0),this.change(i=>{let a=i.connections[$(e)];if(a.generation!==t||a.expiresAt<=this.now()||a.approval!==$(n))throw new Z(`withdrawn-connection`);let o=$(`approval:${e}:${r}`);if(i.spent[o]!==void 0)throw new Z(`replayed-approval`);if(Object.keys(i.spent).length>=4096)throw new Z(`approval-capacity`);i.spent[o]=2**53-1})}revoke(e){this.change(t=>{let n=t.connections[$(e)];n&&(n.generation++,n.expiresAt=0)})}};const it=128*1024,at=new Set([`get-messages`,`get-status`,`get-context`,`get-history`,`get-prompts`,`get-pending`,`get-executing`,`get-execution-workspace`,`get-execution-detail`,`project-status`,`project-diff`,`project-memory`,`get-usage-report`,`get-background-tasks`,`list-models`,`get-agent-definitions`]),ot=new Set([`sessions`,`session_list`,`session_renamed_in_list`,`session_deleted`,`ui_intent`,`settings`,`commands`]);function st(e){return S(`sha256`).update(`robota/desktop-permission/v1\0`).update(JSON.stringify(e)).digest(`hex`)}var ct=class e{socket;worker;session;listeners=new Set;ended=new Set;pending=new Map;constructor(e,t,n){this.socket=e,this.worker=n,this.session=t,e.on(`message`,(e,t)=>{try{if(t||Buffer.byteLength(String(e))>131072)throw new Z(`worker-frame`);let n=JSON.parse(String(e));if(!n||typeof n!=`object`||typeof n.type!=`string`)throw new Z(`worker-frame`);if(n.type===`session_status`&&n.status?.sessionId!==this.session||n.type===`session_switched`)throw new Z(`worker-session-changed`);if(ot.has(n.type))return;if(n.type===`permission_request`){let e=n.event;if(!e||typeof e.id!=`string`||e.id.length>256||typeof e.toolName!=`string`||this.pending.size>=32)throw new Z(`worker-prompt`);this.pending.set(e.id,{digest:st(e),event:e})}n.type===`prompt_resolved`&&this.pending.delete(n.event?.id);for(let e of this.listeners)e(n)}catch{this.close()}}),e.on(`error`,()=>this.close()),e.on(`close`,()=>{for(let e of this.ended)e();this.listeners.clear(),this.ended.clear(),this.pending.clear()})}static async connect(t){let n=new URL(t.endpoint);if(n.protocol!==`ws:`||![`127.0.0.1`,`[::1]`].includes(n.hostname)||n.username||n.password||n.search||n.hash||n.pathname!==`/`||typeof t.token!=`string`||t.token.length<16||t.token.length>8192)throw new Z(`owner-worker-endpoint`);let r=AbortSignal.any([AbortSignal.timeout(5e3),...t.signal?[t.signal]:[]]);await t.control.admit(t.worker,r),n.searchParams.set(`token`,t.token);let i=new M(n,{maxPayload:it,handshakeTimeout:5e3,followRedirects:!1});try{let n=await new Promise((e,n)=>{let a=0,o=()=>n(new Z(`worker-unavailable`)),s=(n,r)=>{try{if(a+=Buffer.byteLength(String(n)),r||a>1024*1024)return o();let i=JSON.parse(String(n));if(i.type!==`session_status`)return;let s=i.status?.sessionId;if(typeof s!=`string`||s.length===0||s.length>256||t.session!==void 0&&s!==t.session)return o();e(s)}catch{o()}};i.once(`open`,()=>i.send(JSON.stringify({type:`get-status`}))),i.on(`message`,s),i.once(`error`,o),i.once(`close`,o),r.addEventListener(`abort`,o,{once:!0});let c=()=>{i.off(`message`,s),i.off(`error`,o),i.off(`close`,o),r.removeEventListener(`abort`,o)};i.once(`close`,c),i.on(`message`,function e(t){try{JSON.parse(String(t)).type===`session_status`&&(c(),i.off(`message`,e))}catch{}})});return r.throwIfAborted(),await t.control.admit(t.worker,r),r.throwIfAborted(),new e(i,n,Object.freeze(structuredClone(t.worker)))}catch{throw i.terminate(),new Z(`worker-unavailable`)}}onFrame(e){return this.listeners.add(e),()=>this.listeners.delete(e)}onClose(e){return this.ended.add(e),()=>this.ended.delete(e)}ready(){if(this.socket.readyState!==M.OPEN)throw new Z(`worker-unavailable`)}send(e){this.ready();let t=JSON.stringify(e);if(Buffer.byteLength(t)>131072||this.socket.bufferedAmount>1024*1024)throw new Z(`frame-capacity`);if(e.type===`get-commands`)return{type:`commands`,commands:[],skills:[]};if(e.type===`list-sessions`&&typeof e.requestId==`string`)return{type:`sessions`,requestId:e.requestId,listing:{currentSessionId:this.session,sessions:[],unreadableSessionIds:[]}};if(e.type===`submit`){if(typeof e.prompt!=`string`||/^\s*\//u.test(e.prompt)||Object.keys(e).some(e=>![`type`,`prompt`].includes(e)))throw new Z(`remote-command`)}else if(!at.has(String(e.type))&&e.type!==`abort`&&e.type!==`ask-response`)throw new Z(`remote-capability`);if(`sessionId`in e||`driverId`in e||`tenant`in e||`task`in e)throw new Z(`remote-ownership`);this.socket.send(t)}prompt(e,t){if(this.pending.get(e)?.digest!==t)throw new Z(`stale-approval`)}approve(e,t,n){this.ready(),this.prompt(e,t),this.pending.delete(e),this.socket.send(JSON.stringify({type:`permission-response`,id:e,result:n}))}close(){this.socket.terminate()}};const lt=new Set([`authorization`,`x-desktop-operator-authorization`,`host`,`origin`,`x-forwarded-for`,`x-forwarded-host`,`x-forwarded-proto`]),ut=e=>(e??``).replace(/^::ffff:/u,``).toLowerCase();var dt=class{options;wss=new be({noServer:!0,maxPayload:it});paired=new Map;active=new Map;names;proxies;interval;closed=!1;upgrades=new Set;constructor(e){if(this.options=e,this.interval=e.policyIntervalMs??1e3,!Number.isSafeInteger(this.interval)||this.interval<100||this.interval>5e3||(e.trustedProxies??[]).some(e=>ve(e)===0))throw new Z(`gateway-configuration`);this.proxies=new Set((e.trustedProxies??[]).map(ut)),this.names=d({publicUrl:e.authorization.url.href,label:`Desktop runtime`,trustedProxies:e.trustedProxies});for(let[t,n]of e.ports){let r=e.authorization.binding(t);if(r.session!==n.session||JSON.stringify(r.worker)!==JSON.stringify(n.worker))throw new Z(`owner-worker-binding`);n.ready()}e.server.on(`request`,this.request),e.server.on(`upgrade`,this.upgrade)}boundary(e,t){let n=new Set;for(let r=0;r<e.rawHeaders.length;r+=2){let i=e.rawHeaders[r].toLowerCase();if(lt.has(i)&&n.has(i))return t.writeHead(403).end(),!1;n.add(i)}let r=[...n].some(e=>e.startsWith(`x-forwarded-`)),i=this.proxies.has(ut(e.socket.remoteAddress));return r&&!i||!e.socket.encrypted&&(!i||e.headers[`x-forwarded-proto`]!==`https`)||r&&(e.headers[`x-forwarded-proto`]!==`https`||e.headers[`x-forwarded-host`]!==this.names.url.host)?(t.writeHead(403).end(),!1):this.names.checkNames(e,t)}async bounded(e){let t=new AbortController,n;try{return await Promise.race([e(t.signal),new Promise((e,r)=>{n=setTimeout(()=>{t.abort(),r(new Z(`authority-timeout`))},5e3)})])}finally{n&&clearTimeout(n),t.abort()}}async body(e){let t=[],n=0;for await(let r of e){let e=Buffer.from(r);if(n+=e.length,n>8192)throw new Z(`request-capacity`);t.push(e)}let r=JSON.parse(Buffer.concat(t).toString(`utf8`));if(!r||typeof r!=`object`||Array.isArray(r))throw new Z(`request-shape`);return r}request=(e,t)=>{this.handle(e,t).catch(()=>{t.headersSent||t.writeHead(403),t.end()})};async handle(e,t){if(this.closed||!this.boundary(e,t))return;if(e.method!==`POST`||![`${this.names.url.pathname.replace(/\/$/u,``)}/pair`,`${this.names.url.pathname.replace(/\/$/u,``)}/approval`].includes(e.url??``)){t.writeHead(404).end();return}let n=setTimeout(()=>e.destroy(),5e3);try{let n=await this.body(e);if(e.url?.endsWith(`/pair`)){if(Object.keys(n).join(`,`)!==`binding`||typeof n.binding!=`string`)throw new Z(`request-shape`);let r=this.options.authorization.binding(n.binding),i=this.options.ports.get(r.id);if(!i)throw new Z(`worker-unavailable`);i.ready();let a=_(e.headers.authorization);if(!a)throw new Z(`missing-token`);let o=_(e.headers[`x-desktop-operator-authorization`]);if(e.headers[`x-desktop-operator-authorization`]!==void 0&&!o)throw new Z(`operator-token`);let{drive:s,operator:c}=await this.bounded(async e=>{let t=await this.options.authorization.verify(a,r,!1,e),n=o===void 0?void 0:await this.options.authorization.verify(o,r,!0,e);return e.throwIfAborted(),{drive:t,operator:n}});if(e.aborted||t.destroyed||this.closed)throw new Z(`connection-withdrawn`);let l=Q(r),u=this.options.store.pair(l,[s,...c?[c]:[]].map(e=>({id:e.jti,expiresAt:e.credentialExpiresAt})),Math.min(s.expiresAt,c?.expiresAt??s.expiresAt),c!==void 0);this.paired.set(r.id,{binding:r,access:u,jwt:a,operatorJwt:o,port:i});for(let[e,t]of this.active)t.binding.id===r.id&&e.terminate();t.setHeader(`cache-control`,`no-store`),t.setHeader(`content-type`,`application/json`),t.end(JSON.stringify({binding:r.id,generation:u.generation,token:u.token,approvalToken:u.approvalToken,expiresAt:u.expiresAt,session:r.session}))}else{if(Object.keys(n).sort().join(`,`)!==`allow,binding,digest,generation,id`||typeof n.binding!=`string`||!Number.isSafeInteger(n.generation)||typeof n.id!=`string`||typeof n.digest!=`string`||!/^[a-f0-9]{64}$/u.test(n.digest)||typeof n.allow!=`boolean`)throw new Z(`request-shape`);let r=this.paired.get(n.binding),i=_(e.headers.authorization);if(!r||r.access.generation!==n.generation||!i||!r.operatorJwt)throw new Z(`operator-token`);if(this.options.store.authorize(r.access.key,r.access.generation,i,!0),await this.bounded(e=>this.options.authorization.verify(r.operatorJwt,r.binding,!0,e)),e.aborted||t.destroyed||this.closed)throw new Z(`connection-withdrawn`);r.port.prompt(n.id,n.digest),this.options.store.approveOnce(r.access.key,r.access.generation,i,n.digest),r.port.approve(n.id,n.digest,n.allow),t.writeHead(204).end()}}finally{clearTimeout(n)}}upgrade=(e,t,n)=>{this.upgrades.add(t),t.once(`close`,()=>this.upgrades.delete(t)),t.once(`error`,()=>t.destroy());let r=new ye(e);if(r.assignSocket(t),!this.boundary(e,r)){r.on(`finish`,()=>t.destroy());return}r.detachSocket(t),this.connect(e,t,n).catch(()=>{t.end(`HTTP/1.1 403 Forbidden\r
1
+ import{A as e,C as t,D as n,E as r,O as i,S as a,T as o,_ as s,b as c,f as l,g as u,h as d,k as f,m as p,n as m,p as h,r as g,t as _,v,w as y,x as b,y as x}from"./product-host-C-IQQ6ph.js";import"node:module";import{createHash as S,createPublicKey as C,randomBytes as w,randomUUID as T,verify as ee}from"node:crypto";import{isAbsolute as E,join as D,posix as O}from"node:path";import"node:child_process";import{open as k,realpath as te,rename as ne,stat as re,unlink as ie}from"node:fs/promises";import{closeSync as A,constants as j,existsSync as ae,fstatSync as oe,fsyncSync as se,lstatSync as ce,mkdirSync as le,openSync as ue,readFileSync as de,realpathSync as fe,renameSync as pe,rmdirSync as me,unlinkSync as he,writeFileSync as ge}from"node:fs";import{isIP as _e}from"node:net";import{ServerResponse as ve}from"node:http";import{performance as M}from"node:perf_hooks";import{WebSocket as N,WebSocketServer as ye}from"ws";var P=class extends Error{reason=`invalid-schema`;constructor(){super(`Invalid organization schema`)}};function be(e){for(let t of e){let e=t.codePointAt(0);if(e>=55296&&e<=57343)throw new P}}function xe(e){let t=new Set,n=0;function r(e,i){if(++n>4096||i>32)throw new P;if(e===null||typeof e==`boolean`)return JSON.stringify(e);if(typeof e==`string`)return be(e),JSON.stringify(e);if(typeof e==`number`){if(!Number.isSafeInteger(e)||Object.is(e,-0))throw new P;return JSON.stringify(e)}if(typeof e!=`object`||t.has(e))throw new P;t.add(e);try{if(Array.isArray(e)){if(Reflect.ownKeys(e).length!==e.length+1)throw new P;return`[${Array.from({length:e.length},(t,n)=>{let a=Object.getOwnPropertyDescriptor(e,String(n));if(a===void 0||!(`value`in a))throw new P;return r(a.value,i+1)}).join(`,`)}]`}if(Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)throw new P;let t=Reflect.ownKeys(e);if(t.some(e=>typeof e!=`string`))throw new P;return`{${t.sort().map(t=>{be(t);let n=Object.getOwnPropertyDescriptor(e,t);if(!n.enumerable||!(`value`in n))throw new P;return`${JSON.stringify(t)}:${r(n.value,i+1)}`}).join(`,`)}}`}finally{t.delete(e)}}let i=r(e,0);if(new TextEncoder().encode(i).byteLength>64*1024)throw new P;return i}function Se(e,t){if(xe(e),typeof e!=`object`||!e||Array.isArray(e))throw new P;let n=e;if(Object.keys(n).length!==t.length||t.some(e=>!Object.hasOwn(n,e)))throw new P;return n}function F(e,t=0){if(typeof e!=`number`||!Number.isSafeInteger(e)||Object.is(e,-0)||e<t)throw new P;return e}function Ce(e){let t=Se(e,[`tokens`,`timeMs`,`costMicros`]);return Object.freeze({tokens:F(t.tokens),timeMs:F(t.timeMs),costMicros:F(t.costMicros)})}var I=class extends Error{reason;constructor(e){super(`Organization operation refused: ${e}`),this.reason=e}};function L(e){try{return xe(e)}catch(e){throw e instanceof P?new I(`invalid-schema`):e}}function we(e,t){if(![`workload`,`request`,`approval`].includes(e))throw new I(`invalid-schema`);return Buffer.from(L([`robota/organization-${e}/v1`,t]),`utf8`)}function R(e){return S(`sha256`).update(L([`robota/organization-operation/v1`,e.grantId,e.tenant,e.task,e.actor,e.audience,e.epoch,e.operation]),`utf8`).digest(`hex`)}function z(e,t){if(L(e),typeof e!=`object`||!e||Array.isArray(e))throw new I(`invalid-schema`);let n=e;if(Object.keys(n).length!==t.length||t.some(e=>!Object.hasOwn(n,e)))throw new I(`invalid-schema`);return n}function B(e){if(typeof e!=`string`||e.length<1||e.length>256||[...e].some(e=>{let t=e.codePointAt(0);return t<32||t===127||t>=55296&&t<=57343}))throw new I(`invalid-schema`);return e}function V(e,t=0){if(typeof e!=`number`||!Number.isSafeInteger(e)||Object.is(e,-0)||e<t)throw new I(`invalid-schema`);return e}function H(e){try{return Ce(e)}catch(e){throw e instanceof P?new I(`invalid-schema`):e}}function Te(e){let t=z(e,[`value`,`usage`]);return Object.freeze({value:U(JSON.parse(L(t.value))),usage:H(t.usage)})}function Ee(e){if(typeof e!=`string`||e.length>4096||!e.startsWith(`-----BEGIN PUBLIC KEY-----`))throw new I(`invalid-schema`);try{let t=C(e);if(t.asymmetricKeyType!==`ed25519`)throw Error(`wrong type`);return t}catch{throw new I(`invalid-proof`)}}function U(e){if(typeof e==`object`&&e){for(let t of Object.values(e))U(t);Object.freeze(e)}return e}function De(e){if(e.version!==1||V(e.expiresAt,1)<=V(e.notBefore))throw new I(`invalid-schema`);V(e.epoch,1)}function Oe(e){let t=z(e,[`version`,`grantId`,`tenant`,`task`,`actor`,`audience`,`epoch`,`nonce`,`notBefore`,`expiresAt`,`operation`]);De(t);let n=z(t.operation,[`idempotencyKey`,`resource`,`operation`,`environment`,`parameters`]);return Object.freeze({version:1,grantId:B(t.grantId),tenant:B(t.tenant),task:B(t.task),actor:B(t.actor),audience:B(t.audience),epoch:V(t.epoch,1),nonce:B(t.nonce),notBefore:V(t.notBefore),expiresAt:V(t.expiresAt,1),operation:Object.freeze({idempotencyKey:B(n.idempotencyKey),resource:B(n.resource),operation:B(n.operation),environment:B(n.environment),parameters:U(JSON.parse(L(n.parameters)))})})}function ke(e){let t=z(e,[`version`,`id`,`tenant`,`task`,`actor`,`audience`,`epoch`,`environment`,`operationDigest`,`notBefore`,`expiresAt`]);if(De(t),typeof t.operationDigest!=`string`||!/^[a-f0-9]{64}$/.test(t.operationDigest))throw new I(`invalid-schema`);return Object.freeze({version:1,id:B(t.id),tenant:B(t.tenant),task:B(t.task),actor:B(t.actor),audience:B(t.audience),epoch:V(t.epoch,1),environment:B(t.environment),operationDigest:t.operationDigest,notBefore:V(t.notBefore),expiresAt:V(t.expiresAt,1)})}var Ae=class extends Error{constructor(){super(`Organization audit append conflict`)}};const je=/^[0-9a-f]{64}$/,Me=[`dispatch`,`complete`,`refused`,`unknown`];function W(e){return S(`sha256`).update(L(e),`utf8`).digest(`hex`)}function G(e){if(typeof e!=`string`||!je.test(e))throw new I(`invalid-schema`);return e}function Ne(e,t){let n=z(e,[`version`,`stream`,`sequence`,`hash`]);if(n.version!==1||n.stream!==t)throw new I(`invalid-schema`);return Object.freeze({version:1,stream:t,sequence:V(n.sequence),hash:G(n.hash)})}function K(e){let t=z(e,[`phase`,`operationDigest`,`tenantDigest`,`taskDigest`,`actorDigest`,`grantDigest`,`epoch`]);if(typeof t.phase!=`string`||!Me.includes(t.phase))throw new I(`invalid-schema`);return Object.freeze({phase:t.phase,operationDigest:G(t.operationDigest),tenantDigest:G(t.tenantDigest),taskDigest:G(t.taskDigest),actorDigest:G(t.actorDigest),grantDigest:G(t.grantDigest),epoch:V(t.epoch,1)})}function Pe(e,t){if(!Me.includes(t))throw new I(`invalid-schema`);let n=Oe(e),r=(e,t)=>W([`robota/organization-audit-identity/v1`,e,t]);return Object.freeze({phase:t,operationDigest:R(n),tenantDigest:r(`tenant`,[n.tenant]),taskDigest:r(`task`,[n.tenant,n.task]),actorDigest:r(`actor`,[n.tenant,n.actor]),grantDigest:r(`grant`,[n.grantId]),epoch:n.epoch})}function Fe(e){return B(e),Object.freeze({version:1,stream:e,sequence:0,hash:W([`robota/organization-audit-genesis/v1`,e])})}function Ie(e,t,n,r){return W([`robota/organization-audit-entry/v1`,B(e),V(t,1),G(n),K(r)])}function Le(e){return Buffer.from(L([`robota/organization-audit-checkpoint/v1`,Ne(e,B(e.stream))]),`utf8`)}function q(e,t,n){let r=z(e,[`claims`,`signature`]),i=Ne(r.claims,t);if(typeof r.signature!=`string`||!/^[A-Za-z0-9_-]{86}$/.test(r.signature))throw new I(`invalid-proof`);let a=Buffer.from(r.signature,`base64url`);if(a.length!==64||a.toString(`base64url`)!==r.signature||!ee(null,Le(i),n,a)||i.sequence===0&&i.hash!==Fe(t).hash)throw new I(`invalid-proof`);return Object.freeze({claims:i,signature:r.signature})}function Re(e,t){let n=z(e,[`stream`,`sequence`,`previous`,`event`,`hash`]),r=K(n.event);if(n.stream!==t.stream||n.sequence!==t.sequence+1||n.previous!==t.hash)throw new I(`invalid-proof`);let i=Ie(t.stream,V(n.sequence,1),t.hash,r);if(n.hash!==i)throw new I(`invalid-proof`);return Object.freeze({stream:t.stream,sequence:n.sequence,previous:t.hash,event:r,hash:i})}function J(e,t){return e.stream===t.stream&&e.sequence===t.sequence&&e.hash===t.hash}function ze(e,t,n){let r=z(e,[`entries`,`head`]);if(!Array.isArray(r.entries)||r.entries.length>128)throw new I(`invalid-schema`);let i=q(r.head,t.stream,n),a=t;for(let e of r.entries){let t=Re(e,a);a={version:1,stream:t.stream,sequence:t.sequence,hash:t.hash}}if(!J(a,i.claims))throw new I(`invalid-proof`);return i}function Be(e,t){return new Promise((n,r)=>{let i=()=>{clearTimeout(o),t.removeEventListener(`abort`,a)},a=()=>{i(),r(new I(`policy-unavailable`))},o=setTimeout(()=>{i(),n()},e);t.addEventListener(`abort`,a,{once:!0}),t.aborted&&a()})}function Y(e){if(e.aborted)throw new I(`policy-unavailable`)}var Ve=class{stream;key;sink;anchor;timeout;constructor(e){if(this.stream=B(e.stream),this.key=Ee(e.publicKey),this.timeout=V(e.timeoutMs??1e3,1),this.timeout>3e4||typeof e.sink?.read!=`function`||typeof e.sink?.append!=`function`||typeof e.anchor?.load!=`function`||typeof e.anchor?.compareAndSet!=`function`)throw new I(`invalid-schema`);this.sink=Object.freeze({read:e.sink.read.bind(e.sink),append:e.sink.append.bind(e.sink)}),this.anchor=Object.freeze({load:e.anchor.load.bind(e.anchor),compareAndSet:e.anchor.compareAndSet.bind(e.anchor)})}async bounded(e,t){let n=new AbortController,r=()=>n.abort();t?.addEventListener(`abort`,r,{once:!0}),t?.aborted&&n.abort();let i,a=new Promise((e,t)=>{i=()=>t(new I(`policy-unavailable`)),n.signal.addEventListener(`abort`,i,{once:!0}),n.signal.aborted&&i()}),o=setTimeout(r,this.timeout);try{return await Promise.race([Promise.resolve().then(()=>(Y(n.signal),e(n.signal))),a])}catch{throw new I(`policy-unavailable`)}finally{clearTimeout(o),t?.removeEventListener(`abort`,r),n.signal.removeEventListener(`abort`,i),n.abort()}}async record(e,t){let n=K(e);await this.bounded(async e=>{let t=5;for(;;){Y(e);let r=q(await this.anchor.load(e),this.stream,this.key);Y(e);let i=ze(await this.sink.read(r.claims,e),r.claims,this.key);if(Y(e),!J(i.claims,r.claims)){await Be(t,e),t=Math.min(t*2,50);continue}let a;try{a=z(await this.sink.append(r.claims,n,e),[`entry`,`head`])}catch(n){if(Y(e),!(n instanceof Ae))throw n;await Be(t,e),t=Math.min(t*2,50);continue}Y(e);let o=Re(a.entry,r.claims),s=q(a.head,this.stream,this.key);if(L(o.event)!==L(n)||!J(s.claims,{version:1,stream:o.stream,sequence:o.sequence,hash:o.hash}))throw new I(`invalid-proof`);let c=await this.anchor.compareAndSet(r.claims,s,e);if(Y(e),c!==!0)throw new I(`policy-unavailable`);return}},t)}async recover(e){return this.bounded(async e=>{let t=q(await this.anchor.load(e),this.stream,this.key);Y(e);let n=ze(await this.sink.read(t.claims,e),t.claims,this.key);if(Y(e),J(n.claims,t.claims))return n.claims;let r=await this.anchor.compareAndSet(t.claims,n,e);if(Y(e),r!==!0)throw new I(`policy-unavailable`);return n.claims},e)}async verify(e){return this.bounded(async e=>{let t=5;for(;;){let n=q(await this.anchor.load(e),this.stream,this.key);Y(e);let r=ze(await this.sink.read(n.claims,e),n.claims,this.key);if(Y(e),J(r.claims,n.claims))return n.claims;await Be(t,e),t=Math.min(t*2,50)}},e)}};const He=[`budget-exhausted`,`not-authorized`,`invalid-schema`,`expired`,`revoked`,`operation-conflict`,`operation-pending`];function Ue(e){if(typeof e!=`string`||!He.includes(e))throw new I(`invalid-schema`);return e}var We=class extends I{usage;constructor(e,t){super(Ue(e)),this.usage=H(t)}};function Ge(e){let t=z(e,[`request`,`approval`]),n=z(t.request,[`claims`,`signature`]),r=t.approval===null?null:z(t.approval,[`claims`,`signature`]);if(typeof n.signature!=`string`||r!==null&&typeof r.signature!=`string`)throw new I(`invalid-proof`);return Object.freeze({request:Object.freeze({claims:Oe(n.claims),signature:n.signature}),approval:r===null?null:Object.freeze({claims:ke(r.claims),signature:r.signature})})}var Ke=class{audience;ledger;actions=new Map;interval;now;active=new Set;audit;auditReadiness;closed=!1;constructor(e){if(this.ledger=e.ledger,e.hosted===!0){if(this.ledger.verifyAnchoredAuthority(),!(e.audit instanceof Ve))throw new I(`policy-unavailable`);this.auditReadiness=e.audit.verify.bind(e.audit)}if(e.audit!==void 0){if(typeof e.audit?.record!=`function`)throw new I(`invalid-schema`);this.audit=Object.freeze({record:e.audit.record.bind(e.audit)})}if(this.audience=e.ledger.audience,this.interval=V(e.policyIntervalMs??100,1),this.interval>1e3)throw new I(`invalid-schema`);this.now=e.now??Date.now;for(let t of e.actions){let e=B(t.resource),n=B(t.operation),r=t.roles.map(B);if(r.length===0||new Set(r).size!==r.length||typeof t.requiresApproval!=`boolean`||typeof t.reserve!=`function`||typeof t.execute!=`function`)throw new I(`invalid-schema`);let i=L([e,n]);if(this.actions.has(i))throw new I(`invalid-schema`);this.actions.set(i,Object.freeze({resource:e,operation:n,roles:Object.freeze(r),requiresApproval:t.requiresApproval,reserve:t.reserve.bind(t),execute:t.execute.bind(t)}))}}async apply(e,t){if(this.closed)throw new I(`policy-unavailable`);if(t?.aborted||(await this.auditReadiness?.(t),this.closed||t?.aborted))throw new I(`not-authorized`);let n=Ge(e),{request:r,grant:i}=this.ledger.authenticate(n.request),a=this.actions.get(L([r.operation.resource,r.operation.operation]));if(a===void 0||!a.roles.includes(i.role))throw new I(`not-authorized`);let o=H(a.reserve(r.operation));if(V(o.timeMs,1),o.timeMs>2147483647)throw new I(`invalid-schema`);let s=this.ledger.reserve(n.request,o,n.approval,a.requiresApproval);if(s.kind===`complete`)return s.receipt;if(s.kind===`refused`)throw new I(s.reason);return this.execute(n.request,a,s,t)}async auditRecord(e,t,n){if(this.audit===void 0)return;let r,i=new Promise((e,t)=>{r=()=>t(new I(`outcome-unknown`)),n.addEventListener(`abort`,r,{once:!0}),n.aborted&&r()});try{if(await Promise.race([Promise.resolve().then(()=>{if(n.aborted)throw new I(`outcome-unknown`);return this.audit.record(Pe(e,t),n)}),i]),n.aborted)throw new I(`outcome-unknown`)}finally{n.removeEventListener(`abort`,r)}}async execute(e,t,n,r){let i=e.claims,a=new AbortController;this.active.add(a);let o=()=>a.abort();r?.addEventListener(`abort`,o,{once:!0}),(r?.aborted||this.closed)&&a.abort();let s=Math.min(n.reservation.timeMs,i.expiresAt-this.now(),n.grant.expiresAt-this.now()),c=setTimeout(o,Math.max(0,s)),l=setInterval(()=>{try{this.ledger.authenticate(e)}catch{a.abort()}},this.interval),u=M.now(),d;try{let r=new Promise((e,t)=>{d=()=>t(new I(`outcome-unknown`)),a.signal.addEventListener(`abort`,d,{once:!0}),a.signal.aborted&&d()}),o=Promise.resolve().then(async()=>{if(a.signal.aborted||(this.ledger.authenticate(e),await this.auditRecord(i,`dispatch`,a.signal),a.signal.aborted||M.now()-u>s))throw new I(`outcome-unknown`);return this.ledger.authenticate(e),t.execute(i.operation,{signal:a.signal,proof:e,operationDigest:n.digest,identity:n.grant,reservation:n.reservation})}),c=Te(await Promise.race([o,r]));if(this.ledger.authenticate(e),a.signal.aborted||M.now()-u>s||(await this.auditRecord(i,`complete`,a.signal),this.ledger.authenticate(e),a.signal.aborted||M.now()-u>s))throw new I(`outcome-unknown`);let l=Te({value:c.value,usage:{...c.usage,timeMs:Math.max(c.usage.timeMs,Math.ceil(M.now()-u))}});return this.ledger.settle(i,l),l}catch(e){if(e instanceof We&&!a.signal.aborted&&M.now()-u<=s){try{if(await this.auditRecord(i,`refused`,a.signal),a.signal.aborted||M.now()-u>s)throw new I(`outcome-unknown`);this.ledger.confirmNoEffect(i,Ue(e.reason),{...e.usage,timeMs:Math.max(e.usage.timeMs,Math.ceil(M.now()-u))})}catch{a.abort();try{this.ledger.markUnknown(i)}catch{}throw new I(`outcome-unknown`)}throw new I(e.reason)}a.abort();try{this.ledger.markUnknown(i)}catch{}try{await this.auditRecord(i,`unknown`,AbortSignal.timeout(1e3))}catch{}throw new I(`outcome-unknown`)}finally{clearTimeout(c),clearInterval(l),r?.removeEventListener(`abort`,o),d!==void 0&&a.signal.removeEventListener(`abort`,d),this.active.delete(a)}}close(){this.closed=!0;for(let e of this.active)e.abort()}},qe=class{ledger;audit;broker;inventory;incidents;timeout;timer;calls=new Map;sweepPending;closed=!1;quarantined=!1;constructor(e){this.ledger=e.ledger,this.audit=e.audit,this.broker=new Ke({ledger:e.ledger,audit:e.audit,actions:e.actions,hosted:!0,policyIntervalMs:e.policyIntervalMs});let t=e.policyIntervalMs??100;if(this.timeout=e.providerTimeoutMs??1e4,!Number.isSafeInteger(this.timeout)||this.timeout<1||this.timeout>3e4||typeof e.inventory?.list!=`function`||typeof e.inventory.terminate!=`function`||typeof e.incidentOwners?.report!=`function`||[`detection`,`containment`,`assessment`,`recovery`].some(t=>{let n=e.incidentOwners[t];return typeof n!=`string`||n.trim().length===0}))throw new I(`invalid-schema`);this.inventory=Object.freeze({list:e.inventory.list.bind(e.inventory),terminate:e.inventory.terminate.bind(e.inventory)}),this.incidents=Object.freeze({...e.incidentOwners,report:e.incidentOwners.report.bind(e.incidentOwners)}),this.timer=setInterval(()=>{this.sweep().catch(()=>void 0)},t),this.timer.unref()}identity(e,t,n){let r=this.ledger.currentGrant(e);if(r.tenant!==t.tenant||r.task!==t.task||r.actor!==t.actor||r.epoch!==n)throw new I(`not-authorized`);return r}async admit(e,t){if(this.closed||this.quarantined)throw new I(`policy-unavailable`);this.ledger.verifyAnchoredAuthority();let n=this.identity(e.grantId,e.identity,e.epoch);if(await this.audit.verify(t),!(await this.inventory.list(t===void 0?AbortSignal.timeout(this.timeout):AbortSignal.any([t,AbortSignal.timeout(this.timeout)]))).some(t=>t.resource===e.resource&&t.grantId===e.grantId&&t.epoch===e.epoch&&Object.entries(e.identity).every(([e,n])=>t.identity[e]===n))||this.closed||this.quarantined||t?.aborted)throw new I(`not-authorized`);return this.identity(e.grantId,e.identity,e.epoch),n}async apply(e,t,n){if(this.closed||this.quarantined)throw new I(`policy-unavailable`);let r=new AbortController,i=()=>{n?.()};r.signal.addEventListener(`abort`,i,{once:!0});let a=()=>r.abort();t?.addEventListener(`abort`,a,{once:!0}),t?.aborted&&r.abort(),this.calls.set(r,e.request.claims.grantId);try{return await this.broker.apply(e,r.signal)}catch(t){throw t instanceof I&&t.reason===`outcome-unknown`&&await this.incidents.report({kind:`unknown-effect`,resources:[e.request.claims.operation.resource],operationDigest:R(e.request.claims)}).catch(()=>void 0),t}finally{this.calls.delete(r),t?.removeEventListener(`abort`,a),r.signal.removeEventListener(`abort`,i)}}async afterWithdrawal(){await this.sweepPending?.catch(()=>void 0),await this.sweep()}async stopGrant(e){this.ledger.revokeGrant(e),await this.afterWithdrawal()}async stopTask(e,t){this.ledger.stopTask(e,t),await this.afterWithdrawal()}async stopTenant(e){this.ledger.stopTenant(e),await this.afterWithdrawal()}async emergencyStop(){this.ledger.emergencyStop(),await this.afterWithdrawal()}async reconcileExternalOperation(e,t,n){this.ledger.verifyAnchoredAuthority();let r=Pe(e,`complete`),i=await t.confirm(r.operationDigest,n);return await this.audit.record(r,n),this.ledger.reconcileExternalOperation(e,i)}sweep(){return this.sweepPending===void 0&&(this.sweepPending=this.sweepOnce().finally(()=>{this.sweepPending=void 0})),this.sweepPending}async sweepOnce(){let e=!this.closed&&!this.quarantined,t=this.closed||this.quarantined;try{this.ledger.verifyAnchoredAuthority(),await this.audit.verify(AbortSignal.timeout(this.timeout))}catch{t=!0}t&&!this.closed&&(this.quarantined=!0,this.broker.close());for(let[e,n]of this.calls)try{if(t)throw new I(`policy-unavailable`);this.ledger.currentGrant(n)}catch{e.abort()}let n;try{n=await this.inventory.list(AbortSignal.timeout(this.timeout))}catch{this.quarantined=!0,this.broker.close();for(let e of this.calls.keys())e.abort();throw await this.incidents.report({kind:`cleanup-unresolved`,resources:[]}),new I(`policy-unavailable`)}let r=n.filter(e=>{try{return t?!0:(this.identity(e.grantId,e.identity,e.epoch),!1)}catch{return!0}}),i=await Promise.allSettled(r.map(e=>this.inventory.terminate(e,AbortSignal.timeout(this.timeout)))),a=r.filter((e,t)=>i[t].status===`rejected`).map(e=>e.resource);if(t&&e&&await this.incidents.report({kind:`authority-unavailable`,resources:r.map(e=>e.resource)}),a.length>0)throw await this.incidents.report({kind:`cleanup-unresolved`,resources:a}),new I(`policy-unavailable`)}async close(){this.closed=!0,clearInterval(this.timer),this.broker.close();for(let e of this.calls.keys())e.abort();await this.afterWithdrawal()}};function Je(e){let t=i(e.controlPlane,`organization control plane`),n=i(e.tenant,`organization tenant`),r={apiKey:i(e.apiKey,`E2B management credential`),requestTimeoutMs:f(e.requestTimeoutMs??1e4,`E2B request timeout`,3e4),apiUrl:`https://api.e2b.app`,sandboxUrl:`https://sandbox.e2b.app`,domain:`e2b.app`,debug:!1,retries:0};function a(e){if(e.metadata.organizationControlPlane!==t||e.metadata.tenant!==n)throw Error(`Organization inventory ownership mismatch`);return Object.freeze({resource:i(e.sandboxId,`organization worker`),grantId:i(e.metadata.organizationGrant,`organization grant`),epoch:f(Number(e.metadata.epoch),`organization epoch`),identity:y({tenant:e.metadata.tenant,task:e.metadata.task,rootTask:e.metadata.rootTask,actor:e.metadata.actor,runtime:e.metadata.runtime})})}return{async list(e){e.throwIfAborted();let{Sandbox:i}=await c();e.throwIfAborted();let o=i.list({...r,query:{metadata:{organizationControlPlane:t,tenant:n},state:[`running`,`paused`]},limit:100}),s=[],l=new Set;for(;o.hasNext;){e.throwIfAborted();for(let t of await o.nextItems({...r,signal:e})){let e=a(t);if(l.has(e.resource)||s.length>=1e4)throw Error(`Organization inventory is incomplete`);l.add(e.resource),s.push(e)}}return s},async terminate(e,t){t.throwIfAborted();let{Sandbox:n,SandboxNotFoundError:i}=await c();t.throwIfAborted();let o;try{o=await n.getInfo(e.resource,{...r,signal:t})}catch(e){if(e instanceof i)return;throw Error(`Organization cleanup is unresolved`)}let s=a(o);if(s.grantId!==e.grantId||s.epoch!==e.epoch||Object.entries(e.identity).some(([e,t])=>s.identity[e]!==t))throw Error(`Organization cleanup ownership mismatch`);await n.kill(e.resource,r)}}}function Ye(e){let n=[...e.bindings],r=new Map,i=new Set,o=new Set,s=new Set;for(let t of n){if(!/^[A-Za-z0-9_-]{32,256}$/u.test(t.token)||i.has(t.token)||o.has(t.config.identity.runtime)||s.has(t.grantId))throw new I(`invalid-schema`);let n=e.ledger.currentGrant(t.grantId);if(n.scopes.length!==1||n.scopes[0].resource!==e.modelResource||n.scopes[0].operations.length!==1||n.scopes[0].operations[0]!==`generate`)throw new I(`not-authorized`);i.add(t.token),o.add(t.config.identity.runtime),s.add(t.grantId)}let c=t=>{let n=e.ledger.budgetState(`grant`,t.grantId);return{sessions:1,modelCalls:e.ledger.grantOperationCount(t.grantId),modelTokens:n.spent.tokens,costMicros:n.spent.costMicros}},l=async(t,n)=>{if(n.aborted)throw new I(`policy-unavailable`);let i=r.get(t.grantId);if(i===void 0){let n=new AbortController,a=setTimeout(()=>n.abort(),3e4);i=e.control.admit({resource:t.config.worker.resource,grantId:t.grantId,identity:t.config.identity,epoch:t.config.epoch},n.signal).finally(()=>{clearTimeout(a),r.delete(t.grantId)}),i.catch(()=>void 0),r.set(t.grantId,i)}return new Promise((e,t)=>{let r=()=>{n.removeEventListener(`abort`,r),t(new I(`policy-unavailable`))};if(n.aborted){r();return}n.addEventListener(`abort`,r,{once:!0}),i.then(t=>{n.removeEventListener(`abort`,r),e(t)},e=>{n.removeEventListener(`abort`,r),t(e)})})};return(r,i)=>{let o=new AbortController,s=()=>{i.writableFinished||o.abort()};i.once(`close`,s);let u=setTimeout(()=>{o.abort(),r.destroy(),i.destroy()},3e4),d=(e,t)=>{i.destroyed||i.writableEnded||(i.writeHead(e,{"content-type":`application/json`,"cache-control":`no-store`}),i.end(JSON.stringify(t)))};(async()=>{try{let s=new Set;for(let e=0;e<r.rawHeaders.length;e+=2){let t=r.rawHeaders[e].toLowerCase();if([`host`,`authorization`,`idempotency-key`,`content-type`,`content-length`,`transfer-encoding`,`origin`].includes(t)){if(s.has(t))throw new I(`invalid-schema`);s.add(t)}}if(r.method!==`POST`||r.headers.origin!==void 0||r.headers[`content-type`]!==`application/json`||r.headers[`content-encoding`]!==void 0)throw new I(`not-authorized`);let u=[],f=0;for await(let e of r){let t=Buffer.from(e);if(f+=t.length,f>4*1024*1024)throw new I(`invalid-schema`);u.push(t)}let p=Buffer.concat(u),m=JSON.parse(new TextDecoder(`utf-8`,{fatal:!0}).decode(p));if(!m||Array.isArray(m))throw new I(`invalid-schema`);let h=[`/v1/chat/completions`,`/v1/responses`].includes(r.url??``),g=h?n.find(e=>r.headers.authorization===`Bearer ${e.token}`):n.find(e=>m.identity?.runtime===e.config.identity.runtime);if(!g||g.expiresAt<=Date.now())throw new I(`expired`);let _=g.config;if(r.headers.host!==new URL(_.broker.endpoint).host||new URL(_.worker.endpoint).origin!==new URL(_.broker.endpoint).origin)throw new I(`not-authorized`);let v;if(h){let e=r.headers[`idempotency-key`];if(typeof e!=`string`||!/^[A-Za-z0-9_-]{1,128}$/u.test(e))throw new I(`invalid-schema`)}else if(v=r.url===new URL(_.worker.endpoint).pathname?`worker`:r.url===new URL(_.broker.endpoint).pathname?`broker`:void 0,!v||typeof m.nonce!=`string`||m.version!==3||m.role!==v||m.resource!==_[v].resource||m.epoch!==_.epoch||Object.entries(_.identity).some(([e,t])=>m.identity?.[e]!==t)||JSON.stringify(m.snapshot)!==JSON.stringify(_.snapshot)||JSON.stringify(m.limits)!==JSON.stringify(_.limits))throw new I(`not-authorized`);let y=await l(g,o.signal);if(!h){let e=Date.now(),n={version:3,identity:_.identity,role:v,resource:_[v].resource,nonce:m.nonce,epoch:_.epoch,issuedAt:e,expiresAt:Math.min(e+6e4,g.expiresAt,y.expiresAt),snapshot:_.snapshot,ready:!0,limits:_.limits,usage:v===`broker`?c(g):null},r={...n,signature:g.signAdmission(v,a(n))};t(r,_,v,m.nonce,Date.now()),d(200,r);return}let b=r.headers[`idempotency-key`],x=await e.payloads.put(y.id,p),S=Date.now(),C={version:1,grantId:y.id,tenant:y.tenant,task:y.task,actor:y.actor,audience:y.audience,epoch:y.epoch,nonce:T(),notBefore:S,expiresAt:Math.min(S+25e3,g.expiresAt,y.expiresAt),operation:{idempotencyKey:b,resource:e.modelResource,operation:`generate`,environment:`hosted`,parameters:{request:x,surface:r.url===`/v1/responses`?`responses`:`chat-completions`}}},w={claims:C,signature:g.signRequest(we(`request`,C))};await e.payloads.recordOperation(C);let ee=(await e.control.apply({request:w,approval:null},o.signal,()=>i.destroy())).value?.response;if(typeof ee!=`string`)throw new I(`outcome-unknown`);let E=await e.payloads.get(y.id,ee),D=JSON.parse(E.toString(`utf8`));if(m.stream===!0)if(i.writeHead(200,{"content-type":`text/event-stream`,"cache-control":`no-store`}),r.url===`/v1/responses`){let e=D.output;if(Array.isArray(e)){for(let t of e)if(t.type===`message`&&Array.isArray(t.content))for(let e of t.content)e.type===`output_text`&&typeof e.text==`string`&&i.write(`data: ${JSON.stringify({type:`response.output_text.delta`,delta:e.text})}\n\n`)}i.end(`data: ${JSON.stringify({type:`response.completed`,response:D})}\n\n`)}else{let e=D.choices;if(!Array.isArray(e))throw new I(`outcome-unknown`);i.write(`data: ${JSON.stringify({...D,object:`chat.completion.chunk`,choices:e.map(e=>({index:e.index,delta:{...e.message,...Array.isArray(e.message.tool_calls)?{tool_calls:e.message.tool_calls.map((e,t)=>({...e,index:t}))}:{}},finish_reason:null}))})}\n\n`),i.end(`data: ${JSON.stringify({...D,object:`chat.completion.chunk`,choices:e.map(e=>({index:e.index,delta:{},finish_reason:e.finish_reason}))})}\n\ndata: [DONE]\n\n`)}else d(200,D)}catch(e){i.headersSent?i.destroy():d(e instanceof I&&[`policy-unavailable`,`outcome-unknown`].includes(e.reason)?503:403,{error:{message:e instanceof I?e.message:`Organization ingress refused`,type:`organization_refusal`}}),r.resume()}finally{clearTimeout(u),i.removeListener(`close`,s)}})()}}var Xe=class e{directory;constructor(e){this.directory=e}static async open(t){if(!E(t))throw new I(`policy-unavailable`);let n=await te(t),r=await re(n);if(!r.isDirectory()||r.mode&63||process.getuid!==void 0&&r.uid!==process.getuid())throw new I(`policy-unavailable`);return new e(n)}path(e,t){if(!/^[a-f0-9]{64}$/u.test(t))throw new I(`invalid-schema`);let n=S(`sha256`).update(e).digest(`hex`);return D(this.directory,`${n}-${t}.json`)}async put(e,t){if(t.length>4*1024*1024)throw new I(`invalid-schema`);let n=S(`sha256`).update(t).digest(`hex`),r=this.path(e,n);return await this.persist(r,t),n}async persist(e,t){let n=D(this.directory,`${T()}.tmp`);try{let r=await k(n,`wx`,384);try{await r.writeFile(t),await r.sync()}finally{await r.close()}await ne(n,e);let i=await k(this.directory,j.O_RDONLY);try{await i.sync()}finally{await i.close()}}catch{throw new I(`policy-unavailable`)}finally{await ie(n).catch(()=>void 0)}}async recordOperation(e){let t=R(e),n=await this.put(e.grantId,Buffer.from(JSON.stringify(e)));await this.persist(`${this.path(e.grantId,t)}.operation`,Buffer.from(JSON.stringify({requestDigest:n})))}async operation(e,t){let n=await k(`${this.path(e,t)}.operation`,j.O_RDONLY|j.O_NOFOLLOW|j.O_NONBLOCK);try{let r=await n.stat();if(!r.isFile()||r.size>4096||r.mode&63||process.getuid!==void 0&&r.uid!==process.getuid())throw new I(`policy-unavailable`);let i=JSON.parse(await n.readFile(`utf8`));if(typeof i.requestDigest!=`string`)throw new I(`policy-unavailable`);let a=JSON.parse((await this.get(e,i.requestDigest)).toString(`utf8`));if(Pe(a,`complete`),a.grantId!==e||R(a)!==t)throw new I(`policy-unavailable`);return a}finally{await n.close()}}async get(e,t){try{let n=await k(this.path(e,t),j.O_RDONLY|j.O_NOFOLLOW|j.O_NONBLOCK);try{let e=await n.stat();if(!e.isFile()||e.size>4*1024*1024||e.mode&63||process.getuid!==void 0&&e.uid!==process.getuid())throw Error(`unowned content`);let r=await n.readFile();if(S(`sha256`).update(r).digest(`hex`)!==t)throw Error(`changed content`);return r}finally{await n.close()}}catch{throw new I(`policy-unavailable`)}}};function Ze(e){let t=new URL(e.endpoint);if(t.protocol!==`https:`&&!(t.protocol===`http:`&&[`127.0.0.1`,`[::1]`].includes(t.hostname))||t.username||t.password||t.search||t.hash||typeof e.apiKey!=`string`||/[\r\n]/u.test(e.apiKey)||e.apiKey.length===0||!Number.isSafeInteger(e.maxInputBytes)||e.maxInputBytes<1||e.maxInputBytes>4*1024*1024||!Number.isSafeInteger(e.maxOutputTokens)||e.maxOutputTokens<1||!Number.isSafeInteger(e.costMicrosPerToken)||e.costMicrosPerToken<0||typeof e.countInputTokens!=`function`)throw new I(`invalid-schema`);let n=Object.freeze({...e.reservation}),r=e.countInputTokens.bind(e),i=e=>{let t=e;if(!t||Object.keys(t).sort().join(`,`)!==`request,surface`||typeof t.request!=`string`||!/^[a-f0-9]{64}$/u.test(t.request)||![`responses`,`chat-completions`].includes(String(t.surface)))throw new I(`invalid-schema`);return t};return{resource:e.resource,operation:`generate`,roles:[...e.roles],requiresApproval:!1,reserve:e=>(i(e.parameters),n),execute:async(a,o)=>{let s=i(a.parameters),c=await e.payloads.get(o.identity.id,s.request);if(c.length>e.maxInputBytes)throw new I(`invalid-schema`);let l=JSON.parse(new TextDecoder(`utf-8`,{fatal:!0}).decode(c));if(!l||Array.isArray(l)||l.model!==e.model)throw new I(`not-authorized`);let u={...l,stream:!1};if([`conversation`,`previous_response_id`,`prompt`].some(e=>u[e]!=null)||Array.isArray(u.tools)&&u.tools.some(e=>e?.type!==`function`))throw new We(`not-authorized`,{tokens:0,timeMs:0,costMicros:0});delete u.max_tokens,delete u.max_completion_tokens,delete u.max_output_tokens,delete u.stream_options,u[s.surface===`responses`?`max_output_tokens`:`max_completion_tokens`]=e.maxOutputTokens,u.store=!1,u.n=s.surface===`chat-completions`?1:void 0,s.surface===`responses`&&(delete u.n,u.background=!1);let d=JSON.stringify(u),f=await r(s.surface,JSON.parse(d),o.signal),p=f+e.maxOutputTokens;if(!Number.isSafeInteger(f)||f<0||!Number.isSafeInteger(p)||p>n.tokens||!Number.isSafeInteger(p*e.costMicrosPerToken)||p*e.costMicrosPerToken>n.costMicros)throw new We(`budget-exhausted`,{tokens:0,timeMs:0,costMicros:0});o.signal.throwIfAborted();let m=await fetch(`${t.href.replace(/\/$/u,``)}/${s.surface===`responses`?`responses`:`chat/completions`}`,{method:`POST`,redirect:`error`,signal:o.signal,headers:{authorization:`Bearer ${e.apiKey}`,"content-type":`application/json`,...e.providerIdempotency?{"Idempotency-Key":o.operationDigest}:{}},body:d});if(!m.ok||m.body===null)throw await m.body?.cancel(),new I(`outcome-unknown`);let h=[],g=0,_=m.body.getReader();try{for(;;){let e=await _.read();if(e.done)break;if(g+=e.value.length,g>4*1024*1024)throw new I(`outcome-unknown`);h.push(e.value)}}finally{await _.cancel()}let v=Buffer.concat(h),y=JSON.parse(new TextDecoder(`utf-8`,{fatal:!0}).decode(v))?.usage?.total_tokens;if(typeof y!=`number`||!Number.isSafeInteger(y)||y<0||y>n.tokens||!Number.isSafeInteger(y*e.costMicrosPerToken)||y*e.costMicrosPerToken>n.costMicros)throw new I(`outcome-unknown`);return{value:{response:await e.payloads.put(o.identity.id,v)},usage:{tokens:y,timeMs:0,costMicros:y*e.costMicrosPerToken}}}}}function Qe(e){let t=new URL(e.endpoint);if(t.protocol!==`https:`&&!(t.protocol===`http:`&&[`127.0.0.1`,`[::1]`].includes(t.hostname))||t.username||t.password||t.search||t.hash||typeof e.encode!=`function`||typeof e.apiKey!=`string`||e.apiKey.length===0||/[\r\n]/u.test(e.apiKey))throw new I(`invalid-schema`);let n=e.apiKey,r=e.encode.bind(e);return async(e,i,a)=>{let o=await fetch(t,{method:`POST`,redirect:`error`,signal:a,headers:{authorization:`Bearer ${n}`,"content-type":`application/json`},body:JSON.stringify(r(e,i))});if(!o.ok||o.body===null)throw await o.body?.cancel(),new I(`policy-unavailable`);let s=[],c=0,l=o.body.getReader();try{for(;;){let e=await l.read();if(e.done)break;if(c+=e.value.length,c>64*1024)throw new I(`policy-unavailable`);s.push(e.value)}}finally{await l.cancel()}let u=JSON.parse(new TextDecoder(`utf-8`,{fatal:!0}).decode(Buffer.concat(s)));if(!Number.isSafeInteger(u?.input_tokens)||u.input_tokens<0)throw new I(`policy-unavailable`);return u.input_tokens}}function $e(t,a,o){if(t.byteLength>48*1024*1024||S(`sha256`).update(t).digest(`hex`)!==a.digest)throw n(`filesystem checkpoint digest or size is invalid`);let s;try{s=e(JSON.parse(new TextDecoder(`utf-8`,{fatal:!0}).decode(t)),`checkpoint`)}catch{throw n(`filesystem checkpoint is not valid UTF-8 JSON`)}if(r(s,[`version`,`id`,`identity`,`epoch`,`worker`,`files`,...s.version===2?[`session`]:[]],`checkpoint`),s.version!==1&&s.version!==2||s.id!==a.id)throw n(`filesystem checkpoint version or identity does not match`);let c=y(s.identity),l=f(s.epoch,`checkpoint epoch`),u=i(s.worker,`checkpoint worker`);if([`tenant`,`task`,`rootTask`].some(e=>c[e]!==o.identity[e])||c.runtime===o.identity.runtime||l>=o.epoch)throw n(`filesystem checkpoint requires the same task and a fresh identity/epoch`);if(!Array.isArray(s.files)||s.files.length>1e3)throw n(`filesystem checkpoint file inventory is invalid`);let d=new Set,p=0,m=s.files.map(t=>{let a=e(t,`checkpoint file`);r(a,[`path`,`base64`],`checkpoint file`);let o=i(a.path,`checkpoint file path`),s=o.split(`/`)[0];if(O.isAbsolute(o)||O.normalize(o)!==o||o===`.`||o===`..`||o.startsWith(`../`)||o.endsWith(`/`)||o.includes(`\\`)||s===`.home`||s===`.tmp`||d.has(o))throw n(`filesystem checkpoint path escapes or replaces private state`);if(typeof a.base64!=`string`||a.base64.length>44*1024*1024)throw n(`filesystem checkpoint file encoding is invalid`);let c=Buffer.from(a.base64,`base64`);if(p+=c.byteLength,c.toString(`base64`)!==a.base64||p>32*1024*1024)throw n(`filesystem checkpoint encoding or byte budget is invalid`);return d.add(o),Object.freeze({path:o,bytes:new Uint8Array(c)})});for(let e of d){let t=O.dirname(e);for(;t!==`.`;){if(d.has(t))throw n(`filesystem checkpoint file conflicts with a directory`);t=O.dirname(t)}}return Object.freeze({sourceWorker:u,sourceRuntime:c.runtime,sourceEpoch:l,files:m,...s.version===2?{session:v(s.session,`/`)}:{}})}var X=class extends Error{outcome;operationId;resource;constructor(e,t,n){super(`E2B worker provisioning ${e}; owner reconciliation is required`),this.outcome=e,this.operationId=t,this.resource=n,this.name=`E2BWorkerProvisioningError`}};async function et(e){let t=y(e.identity),r=f(e.epoch,`worker epoch`),a=i(e.templateId,`E2B clean template`),l=o(e.snapshot);if(l===null!=(e.checkpoint===void 0)||l?.id===a)throw n(`worker recovery requires checkpoint bytes and a separate clean template`);let u=l===null?void 0:$e(e.checkpoint,l,{identity:t,epoch:r}),d;try{d=new URL(e.brokerEndpoint)}catch{throw n(`worker broker endpoint is invalid`)}if(d.protocol!==`https:`&&!(d.protocol===`http:`&&[`127.0.0.1`,`[::1]`].includes(d.hostname))||d.username||d.password||d.search||d.hash)throw n(`worker broker endpoint requires owner-selected TLS or literal loopback`);let p={apiKey:i(e.apiKey,`E2B management credential`),requestTimeoutMs:f(e.requestTimeoutMs,`E2B request timeout`,3e4),apiUrl:`https://api.e2b.app`,sandboxUrl:`https://sandbox.e2b.app`,domain:`e2b.app`,debug:!1,retries:0},m=f(e.lifetimeMs,`E2B lifetime`,864e5),h=T(),g={...t,epoch:String(r),operationId:h,...e.organization===void 0?{}:{organizationControlPlane:i(e.organization.controlPlane,`organization control plane`),organizationGrant:i(e.organization.grantId,`organization grant`)},...l===null?{}:{restoreMode:`filesystem-v1`,checkpointId:l.id,checkpointDigest:l.digest,sourceWorker:u.sourceWorker,sourceRuntime:u.sourceRuntime,sourceEpoch:String(u.sourceEpoch)}};e.signal.throwIfAborted();let{Sandbox:_}=await c();e.signal.throwIfAborted();let v;try{v=await _.create(a,{...p,timeoutMs:m,metadata:g,envs:{},allowInternetAccess:!1,network:{allowPublicTraffic:!1,allowOut:[d.hostname]},lifecycle:{onTimeout:`kill`,autoResume:!1}})}catch{throw new X(`allocation-unknown`,h)}let b;try{b=i(v.sandboxId,`allocated worker`)}catch{throw new X(`allocation-unknown`,h)}let x,C=()=>(x===void 0&&(x=_.kill(b,p).then(()=>void 0).catch(()=>{throw new X(`cleanup-unresolved`,h,b)})),x);try{let t=await _.getInfo(b,p).catch(()=>{throw new X(`allocation-unknown`,h,b)});if(t.sandboxId!==b||Object.entries(g).some(([e,n])=>t.metadata[e]!==n))throw new X(`allocation-unknown`,h,b);if(b===u?.sourceWorker)throw n(`provider returned the checkpoint source instead of a fresh worker`);if(t.templateId!==a||t.state!==`running`||t.lifecycle?.onTimeout!==`kill`||t.lifecycle.autoResume!==!1||t.allowInternetAccess!==!1||t.network?.allowPublicTraffic!==!1||JSON.stringify(t.network.allowOut??[])!==JSON.stringify([d.hostname])||(t.volumeMounts?.length??0)!==0||t.network.egressProxy!==void 0||Object.keys(t.network.rules??{}).length!==0)throw n(`allocated worker ownership, clean template or network posture is invalid`);e.signal.throwIfAborted();let r=await v.commands.run(`umask 077; mktemp -d "\${TMPDIR:-/tmp}/agent-task-${h}-XXXXXXXXXX"`,{cwd:`/`,envs:{},timeoutMs:e.requestTimeoutMs,requestTimeoutMs:e.requestTimeoutMs});if(r.exitCode!==0||typeof r.stdout!=`string`)throw n(`fresh worker workspace creation failed`);let i=r.stdout.trim();if(!/^\/[A-Za-z0-9._/-]+$/u.test(i)||O.normalize(i)!==i||!RegExp(`^agent-task-${h}-[A-Za-z0-9]{10}$`,`u`).test(O.basename(i)))throw n(`fresh worker workspace receipt is invalid`);for(let t of u?.files??[]){e.signal.throwIfAborted();let r=O.join(i,t.path);await v.files.write(r,t.bytes.slice().buffer,{requestTimeoutMs:e.requestTimeoutMs});let a=await v.files.read(r,{format:`bytes`,requestTimeoutMs:e.requestTimeoutMs});if(!Buffer.from(a).equals(Buffer.from(t.bytes)))throw n(`restored filesystem checkpoint bytes do not match`)}let o;if(u?.session!==void 0){e.signal.throwIfAborted();let t={...u.session,cwd:i},r=s(t),a=O.join(i,`.home`,`.checkpoint-sessions`,`${t.id}.json`);await v.files.write(a,Uint8Array.from(r).buffer,{requestTimeoutMs:e.requestTimeoutMs});let c=await v.files.read(a,{format:`bytes`,requestTimeoutMs:e.requestTimeoutMs});if(!Buffer.from(c).equals(r))throw n(`restored conversation checkpoint bytes do not match`);o=Object.freeze({id:t.id,path:a,digest:S(`sha256`).update(r).digest(`hex`)})}return e.signal.throwIfAborted(),Object.freeze({resource:b,workspaceRoot:i,operationId:h,snapshot:l,release:C,...o===void 0?{}:{resumeSession:o}})}catch(t){throw t instanceof X&&t.outcome===`allocation-unknown`||(await C(),e.signal.aborted&&e.signal.throwIfAborted(),t instanceof Error&&t.message.startsWith(`Hosted runtime admission refused:`))?t:n(`fresh worker provisioning or filesystem restoration failed`)}}var Z=class extends Error{reason;constructor(e){super(`Remote desktop refused: ${e}`),this.reason=e}};function Q(e){return JSON.stringify([e.id,e.user,e.client,e.session,e.worker.resource,e.worker.grantId,e.worker.epoch,e.worker.identity.tenant,e.worker.identity.task,e.worker.identity.rootTask,e.worker.identity.actor,e.worker.identity.runtime])}var tt=class{options;url;now;bindings;constructor(e){if(this.options=e,this.url=l(e.publicUrl,`Desktop runtime`),l(e.issuer,`Desktop issuer`),this.now=e.now??Date.now,this.bindings=e.bindings.map(e=>{let t=structuredClone(e);return Object.freeze(t.worker.identity),Object.freeze(t.worker),Object.freeze(t)}),e.bindings.length===0||e.bindings.length>100||e.bindings.some(e=>[e.id,e.user,e.client,e.session].some(e=>typeof e!=`string`||e.length===0||e.length>256||/[\r\n]/u.test(e)))||new Set(e.bindings.map(e=>e.id)).size!==e.bindings.length)throw new Z(`owner-bindings`)}binding(e){let t=this.bindings.find(t=>t.id===e);if(!t)throw new Z(`owner-binding`);return t}async verify(e,t,n=!1,r){if(r?.throwIfAborted(),!this.bindings.some(e=>Q(e)===Q(t)))throw new Z(`owner-binding`);let i=await d({issuer:this.options.issuer,resource:n?`${this.url.href.replace(/\/$/u,``)}/approval`:this.url.href,algorithms:[`EdDSA`,`ES256`,`RS256`],allowedSubjects:[t.user],requiredScopes:n?[`desktop:approve`]:[`desktop:pair`,`desktop:drive`]},this.options.verifierDeps).verify(e);if(!i.admitted)throw new Z(i.refusal);let a=JSON.parse(Buffer.from(e.split(`.`)[1],`base64url`).toString(`utf8`)),o=this.now();if(typeof a.iat!=`number`||!Number.isSafeInteger(a.iat)||typeof a.exp!=`number`||!Number.isSafeInteger(a.exp)||a.iat*1e3>o||a.exp*1e3<=o||a.exp-a.iat>120||a.nbf!==void 0&&(typeof a.nbf!=`number`||!Number.isSafeInteger(a.nbf)||a.nbf*1e3>o)||typeof a.jti!=`string`||!/^[A-Za-z0-9_-]{8,256}$/u.test(a.jti))throw new Z(`short-lived-credential`);if(a.sub!==t.user||a.client_id!==t.client||a.tenant!==t.worker.identity.tenant||a.task!==t.worker.identity.task||a.session!==t.session||a.workload!==t.worker.identity.runtime||a.epoch!==t.worker.epoch)throw new Z(`session-ownership`);r?.throwIfAborted();let s=await this.options.control.admit(t.worker,r);return r?.throwIfAborted(),{binding:t,jti:a.jti,credentialExpiresAt:a.exp*1e3,expiresAt:Math.min(a.exp*1e3,s.expiresAt,o+6e4)}}async current(e,t){if(!this.bindings.some(t=>Q(t)===Q(e)))throw new Z(`owner-binding`);await this.options.control.admit(e.worker,t)}};const $=e=>S(`sha256`).update(e).digest(`hex`),nt=(e,t)=>e?.version===t.version&&e.ledger===t.ledger&&e.revision===t.revision&&e.digest===t.digest;var rt=class{now;directory;file;lock;constructor(e,t=Date.now){if(this.now=t,this.anchor=e.anchor,!E(e.directory))throw new Z(`store-unavailable`);this.directory=fe(e.directory);let n=ce(this.directory);if(!n.isDirectory()||n.mode&63||process.getuid!==void 0&&n.uid!==process.getuid())throw new Z(`store-unavailable`);if(this.file=D(this.directory,`desktop-authority.json`),this.lock=D(this.directory,`desktop-authority.lock`),e.create===!0){if(ae(this.file)||this.anchor.read()!==void 0)throw new Z(`store-unavailable`);this.locked(()=>this.write(void 0,{version:1,revision:1,spent:{},connections:{}}))}this.read()}anchor;head(e){return{version:1,ledger:this.anchor.ledger,revision:e.revision,digest:$(JSON.stringify(e))}}read(){let e=ue(this.file,j.O_RDONLY|j.O_NOFOLLOW|j.O_NONBLOCK);try{let t=oe(e);if(!t.isFile()||t.size>2*1024*1024||t.mode&63||process.getuid!==void 0&&t.uid!==process.getuid())throw new Z(`store-unavailable`);let n=JSON.parse(de(e,`utf8`)),r=this.anchor.read();if(n.version!==1||!Number.isSafeInteger(n.revision)||n.revision<1||!n.spent||!n.connections||!nt(r,this.head(n)))throw new Z(`store-unavailable`);return n}finally{A(e)}}locked(e){le(this.lock,{mode:448});try{return e()}finally{me(this.lock)}}write(e,t){let n=D(this.directory,`desktop-${T()}.tmp`);try{let r=ue(n,`wx`,384);try{ge(r,JSON.stringify(t)),se(r)}finally{A(r)}let i=this.head(t);if(this.anchor.compareAndSet(e===void 0?void 0:this.head(e),i),!nt(this.anchor.read(),i))throw new Z(`store-unavailable`);pe(n,this.file);let a=ue(this.directory,j.O_RDONLY);try{se(a)}finally{A(a)}}finally{ae(n)&&he(n)}}change(e){return this.locked(()=>{let t=this.read(),n=structuredClone(t),r=e(n);return n.revision++,this.write(t,n),r})}pair(e,t,n,r){let i=w(32).toString(`base64url`),a=r?w(32).toString(`base64url`):null;return this.change(r=>{for(let[e,t]of Object.entries(r.spent))t<=this.now()&&delete r.spent[e];if(n<=this.now()||t.length===0||new Set(t.map(e=>e.id)).size!==t.length||t.some(e=>!Number.isSafeInteger(e.expiresAt)||e.expiresAt<n)||Object.keys(r.spent).length+t.length>4096||t.some(e=>r.spent[$(e.id)]!==void 0))throw new Z(`replayed-pairing`);let o=$(e);if(r.connections[o]===void 0&&Object.keys(r.connections).length>=100)throw new Z(`connection-capacity`);let s=(r.connections[o]?.generation??0)+1;r.connections[o]={generation:s,access:$(i),approval:a===null?null:$(a),expiresAt:n,connected:!1};for(let e of t)r.spent[$(e.id)]=e.expiresAt;return{key:e,generation:s,token:i,approvalToken:a,expiresAt:n}})}authorize(e,t,n,r=!1){let i=this.read().connections[$(e)];if(!i||i.generation!==t||i.expiresAt<=this.now()||(r?i.approval:i.access)!==$(n))throw new Z(`withdrawn-connection`)}connect(e,t,n){this.authorize(e,t,n),this.change(n=>{let r=n.connections[$(e)];if(r.generation!==t||r.expiresAt<=this.now()||r.connected)throw new Z(`replayed-connection`);r.connected=!0})}approveOnce(e,t,n,r){this.authorize(e,t,n,!0),this.change(i=>{let a=i.connections[$(e)];if(a.generation!==t||a.expiresAt<=this.now()||a.approval!==$(n))throw new Z(`withdrawn-connection`);let o=$(`approval:${e}:${r}`);if(i.spent[o]!==void 0)throw new Z(`replayed-approval`);if(Object.keys(i.spent).length>=4096)throw new Z(`approval-capacity`);i.spent[o]=2**53-1})}revoke(e){this.change(t=>{let n=t.connections[$(e)];n&&(n.generation++,n.expiresAt=0)})}};const it=128*1024,at=new Set([`get-messages`,`get-status`,`get-context`,`get-history`,`get-prompts`,`get-pending`,`get-executing`,`get-execution-workspace`,`get-execution-detail`,`project-status`,`project-diff`,`project-memory`,`get-usage-report`,`get-background-tasks`,`list-models`,`get-agent-definitions`]),ot=new Set([`sessions`,`session_list`,`session_renamed_in_list`,`session_deleted`,`ui_intent`,`settings`,`commands`]);function st(e){return S(`sha256`).update(`robota/desktop-permission/v1\0`).update(JSON.stringify(e)).digest(`hex`)}var ct=class e{socket;worker;session;listeners=new Set;ended=new Set;pending=new Map;constructor(e,t,n){this.socket=e,this.worker=n,this.session=t,e.on(`message`,(e,t)=>{try{if(t||Buffer.byteLength(String(e))>131072)throw new Z(`worker-frame`);let n=JSON.parse(String(e));if(!n||typeof n!=`object`||typeof n.type!=`string`)throw new Z(`worker-frame`);if(n.type===`session_status`&&n.status?.sessionId!==this.session||n.type===`session_switched`)throw new Z(`worker-session-changed`);if(ot.has(n.type))return;if(n.type===`permission_request`){let e=n.event;if(!e||typeof e.id!=`string`||e.id.length>256||typeof e.toolName!=`string`||this.pending.size>=32)throw new Z(`worker-prompt`);this.pending.set(e.id,{digest:st(e),event:e})}n.type===`prompt_resolved`&&this.pending.delete(n.event?.id);for(let e of this.listeners)e(n)}catch{this.close()}}),e.on(`error`,()=>this.close()),e.on(`close`,()=>{for(let e of this.ended)e();this.listeners.clear(),this.ended.clear(),this.pending.clear()})}static async connect(t){let n=new URL(t.endpoint);if(n.protocol!==`ws:`||![`127.0.0.1`,`[::1]`].includes(n.hostname)||n.username||n.password||n.search||n.hash||n.pathname!==`/`||typeof t.token!=`string`||t.token.length<16||t.token.length>8192)throw new Z(`owner-worker-endpoint`);let r=AbortSignal.any([AbortSignal.timeout(5e3),...t.signal?[t.signal]:[]]);await t.control.admit(t.worker,r),n.searchParams.set(`token`,t.token);let i=new N(n,{maxPayload:it,handshakeTimeout:5e3,followRedirects:!1});try{let n=await new Promise((e,n)=>{let a=0,o=()=>n(new Z(`worker-unavailable`)),s=(n,r)=>{try{if(a+=Buffer.byteLength(String(n)),r||a>1024*1024)return o();let i=JSON.parse(String(n));if(i.type!==`session_status`)return;let s=i.status?.sessionId;if(typeof s!=`string`||s.length===0||s.length>256||t.session!==void 0&&s!==t.session)return o();e(s)}catch{o()}};i.once(`open`,()=>i.send(JSON.stringify({type:`get-status`}))),i.on(`message`,s),i.once(`error`,o),i.once(`close`,o),r.addEventListener(`abort`,o,{once:!0});let c=()=>{i.off(`message`,s),i.off(`error`,o),i.off(`close`,o),r.removeEventListener(`abort`,o)};i.once(`close`,c),i.on(`message`,function e(t){try{JSON.parse(String(t)).type===`session_status`&&(c(),i.off(`message`,e))}catch{}})});return r.throwIfAborted(),await t.control.admit(t.worker,r),r.throwIfAborted(),new e(i,n,Object.freeze(structuredClone(t.worker)))}catch{throw i.terminate(),new Z(`worker-unavailable`)}}onFrame(e){return this.listeners.add(e),()=>this.listeners.delete(e)}onClose(e){return this.ended.add(e),()=>this.ended.delete(e)}ready(){if(this.socket.readyState!==N.OPEN)throw new Z(`worker-unavailable`)}send(e){this.ready();let t=JSON.stringify(e);if(Buffer.byteLength(t)>131072||this.socket.bufferedAmount>1024*1024)throw new Z(`frame-capacity`);if(e.type===`get-commands`)return{type:`commands`,commands:[],skills:[]};if(e.type===`list-sessions`&&typeof e.requestId==`string`)return{type:`sessions`,requestId:e.requestId,listing:{currentSessionId:this.session,sessions:[],unreadableSessionIds:[]}};if(e.type===`submit`){if(typeof e.prompt!=`string`||/^\s*\//u.test(e.prompt)||Object.keys(e).some(e=>![`type`,`prompt`].includes(e)))throw new Z(`remote-command`)}else if(!at.has(String(e.type))&&e.type!==`abort`&&e.type!==`ask-response`)throw new Z(`remote-capability`);if(`sessionId`in e||`driverId`in e||`tenant`in e||`task`in e)throw new Z(`remote-ownership`);this.socket.send(t)}prompt(e,t){if(this.pending.get(e)?.digest!==t)throw new Z(`stale-approval`)}approve(e,t,n){this.ready(),this.prompt(e,t),this.pending.delete(e),this.socket.send(JSON.stringify({type:`permission-response`,id:e,result:n}))}close(){this.socket.terminate()}};const lt=new Set([`authorization`,`x-desktop-operator-authorization`,`host`,`origin`,`x-forwarded-for`,`x-forwarded-host`,`x-forwarded-proto`]),ut=e=>(e??``).replace(/^::ffff:/u,``).toLowerCase();var dt=class{options;wss=new ye({noServer:!0,maxPayload:it});paired=new Map;active=new Map;names;proxies;interval;closed=!1;upgrades=new Set;constructor(e){if(this.options=e,this.interval=e.policyIntervalMs??1e3,!Number.isSafeInteger(this.interval)||this.interval<100||this.interval>5e3||(e.trustedProxies??[]).some(e=>_e(e)===0))throw new Z(`gateway-configuration`);this.proxies=new Set((e.trustedProxies??[]).map(ut)),this.names=h({publicUrl:e.authorization.url.href,label:`Desktop runtime`,trustedProxies:e.trustedProxies});for(let[t,n]of e.ports){let r=e.authorization.binding(t);if(r.session!==n.session||JSON.stringify(r.worker)!==JSON.stringify(n.worker))throw new Z(`owner-worker-binding`);n.ready()}e.server.on(`request`,this.request),e.server.on(`upgrade`,this.upgrade)}boundary(e,t){let n=new Set;for(let r=0;r<e.rawHeaders.length;r+=2){let i=e.rawHeaders[r].toLowerCase();if(lt.has(i)&&n.has(i))return t.writeHead(403).end(),!1;n.add(i)}let r=[...n].some(e=>e.startsWith(`x-forwarded-`)),i=this.proxies.has(ut(e.socket.remoteAddress));return r&&!i||!e.socket.encrypted&&(!i||e.headers[`x-forwarded-proto`]!==`https`)||r&&(e.headers[`x-forwarded-proto`]!==`https`||e.headers[`x-forwarded-host`]!==this.names.url.host)?(t.writeHead(403).end(),!1):this.names.checkNames(e,t)}async bounded(e){let t=new AbortController,n;try{return await Promise.race([e(t.signal),new Promise((e,r)=>{n=setTimeout(()=>{t.abort(),r(new Z(`authority-timeout`))},5e3)})])}finally{n&&clearTimeout(n),t.abort()}}async body(e){let t=[],n=0;for await(let r of e){let e=Buffer.from(r);if(n+=e.length,n>8192)throw new Z(`request-capacity`);t.push(e)}let r=JSON.parse(Buffer.concat(t).toString(`utf8`));if(!r||typeof r!=`object`||Array.isArray(r))throw new Z(`request-shape`);return r}request=(e,t)=>{this.handle(e,t).catch(()=>{t.headersSent||t.writeHead(403),t.end()})};async handle(e,t){if(this.closed||!this.boundary(e,t))return;if(e.method!==`POST`||![`${this.names.url.pathname.replace(/\/$/u,``)}/pair`,`${this.names.url.pathname.replace(/\/$/u,``)}/approval`].includes(e.url??``)){t.writeHead(404).end();return}let n=setTimeout(()=>e.destroy(),5e3);try{let n=await this.body(e);if(e.url?.endsWith(`/pair`)){if(Object.keys(n).join(`,`)!==`binding`||typeof n.binding!=`string`)throw new Z(`request-shape`);let r=this.options.authorization.binding(n.binding),i=this.options.ports.get(r.id);if(!i)throw new Z(`worker-unavailable`);i.ready();let a=p(e.headers.authorization);if(!a)throw new Z(`missing-token`);let o=p(e.headers[`x-desktop-operator-authorization`]);if(e.headers[`x-desktop-operator-authorization`]!==void 0&&!o)throw new Z(`operator-token`);let{drive:s,operator:c}=await this.bounded(async e=>{let t=await this.options.authorization.verify(a,r,!1,e),n=o===void 0?void 0:await this.options.authorization.verify(o,r,!0,e);return e.throwIfAborted(),{drive:t,operator:n}});if(e.aborted||t.destroyed||this.closed)throw new Z(`connection-withdrawn`);let l=Q(r),u=this.options.store.pair(l,[s,...c?[c]:[]].map(e=>({id:e.jti,expiresAt:e.credentialExpiresAt})),Math.min(s.expiresAt,c?.expiresAt??s.expiresAt),c!==void 0);this.paired.set(r.id,{binding:r,access:u,jwt:a,operatorJwt:o,port:i});for(let[e,t]of this.active)t.binding.id===r.id&&e.terminate();t.setHeader(`cache-control`,`no-store`),t.setHeader(`content-type`,`application/json`),t.end(JSON.stringify({binding:r.id,generation:u.generation,token:u.token,approvalToken:u.approvalToken,expiresAt:u.expiresAt,session:r.session}))}else{if(Object.keys(n).sort().join(`,`)!==`allow,binding,digest,generation,id`||typeof n.binding!=`string`||!Number.isSafeInteger(n.generation)||typeof n.id!=`string`||typeof n.digest!=`string`||!/^[a-f0-9]{64}$/u.test(n.digest)||typeof n.allow!=`boolean`)throw new Z(`request-shape`);let r=this.paired.get(n.binding),i=p(e.headers.authorization);if(!r||r.access.generation!==n.generation||!i||!r.operatorJwt)throw new Z(`operator-token`);if(this.options.store.authorize(r.access.key,r.access.generation,i,!0),await this.bounded(e=>this.options.authorization.verify(r.operatorJwt,r.binding,!0,e)),e.aborted||t.destroyed||this.closed)throw new Z(`connection-withdrawn`);r.port.prompt(n.id,n.digest),this.options.store.approveOnce(r.access.key,r.access.generation,i,n.digest),r.port.approve(n.id,n.digest,n.allow),t.writeHead(204).end()}}finally{clearTimeout(n)}}upgrade=(e,t,n)=>{this.upgrades.add(t),t.once(`close`,()=>this.upgrades.delete(t)),t.once(`error`,()=>t.destroy());let r=new ve(e);if(r.assignSocket(t),!this.boundary(e,r)){r.on(`finish`,()=>t.destroy());return}r.detachSocket(t),this.connect(e,t,n).catch(()=>{t.end(`HTTP/1.1 403 Forbidden\r
2
2
  Connection: close\r
3
3
  Content-Length: 0\r
4
4
  \r
5
- `,()=>t.destroy())})};async connect(e,t,n){if(this.closed)throw new Z(`gateway-closed`);let r=new URL(e.url,this.names.url);if(e.method!==`GET`||r.pathname!==`${this.names.url.pathname.replace(/\/$/u,``)}/connect`||[...r.searchParams.keys()].sort().join(`,`)!==`binding,generation`)throw new Z(`connection-shape`);let i=this.paired.get(r.searchParams.get(`binding`)),a=Number(r.searchParams.get(`generation`)),o=_(e.headers.authorization);if(!i||!o||!Number.isSafeInteger(a)||a!==i.access.generation)throw new Z(`withdrawn-connection`);if(this.options.store.authorize(i.access.key,a,o),await this.bounded(e=>this.options.authorization.verify(i.jwt,i.binding,!1,e)),t.destroyed||this.closed)throw new Z(`connection-withdrawn`);i.port.ready(),this.options.store.connect(i.access.key,a,o),this.wss.handleUpgrade(e,t,n,e=>this.attach(e,i,o))}attach(e,t,n){this.active.set(e,t);let r=!1,i=Promise.resolve(),a=0,o=()=>e.terminate(),s=async()=>{this.options.store.authorize(t.access.key,t.access.generation,n),await this.bounded(e=>this.options.authorization.verify(t.jwt,t.binding,!1,e)),this.options.store.authorize(t.access.key,t.access.generation,n)},c=setInterval(()=>{r||(r=!0,s().catch(o).finally(()=>{r=!1}))},this.interval);c.unref();let l=t.port.onFrame(r=>{try{if(this.options.store.authorize(t.access.key,t.access.generation,n),e.readyState!==M.OPEN||e.bufferedAmount>1024*1024)throw new Z(`delivery-capacity`);e.send(JSON.stringify(r))}catch{o()}}),u=t.port.onClose(o);e.on(`message`,(n,r)=>{if(r||++a>16){o();return}i=i.then(async()=>{if(await s(),e.readyState!==M.OPEN)return;let r=JSON.parse(String(n)),i=t.port.send(r);i&&e.send(JSON.stringify(i))}).catch(o).finally(()=>{a--})}),e.on(`error`,o),e.once(`close`,()=>{clearInterval(c),l(),u(),this.active.delete(e)}),t.port.send({type:`get-messages`}),t.port.send({type:`get-status`}),t.port.send({type:`get-prompts`})}revoke(e){let t=Q(this.options.authorization.binding(e));this.options.store.revoke(t),this.paired.delete(e);for(let[t,n]of this.active)n.binding.id===e&&t.terminate()}async close(){this.closed=!0,this.options.server.off(`request`,this.request),this.options.server.off(`upgrade`,this.upgrade);for(let e of this.upgrades)e.destroy();for(let e of this.active.keys())e.terminate();for(let e of this.options.ports.values())e.close();this.paired.clear(),await new Promise(e=>this.wss.close(()=>e()))}};export{X as E2BWorkerProvisioningError,rt as HostedDesktopAuthorityStore,tt as HostedDesktopAuthorization,dt as HostedDesktopGateway,ct as HostedDesktopWorkerPort,qe as HostedOrganizationControl,Xe as HostedOrganizationPayloads,i as HostedRuntimeController,u as connectE2BTaskWorker,Je as createE2BOrganizationInventory,Ye as createHostedOrganizationGateway,Qe as createHostedOrganizationInputTokenCounter,Ze as createHostedOrganizationModelAction,g as createProductCliHost,v as hostedAdmissionBytes,c as hostedWorkerAccessBytes,et as provisionE2BTaskWorker,h as startCli,p as startCliEntry};
5
+ `,()=>t.destroy())})};async connect(e,t,n){if(this.closed)throw new Z(`gateway-closed`);let r=new URL(e.url,this.names.url);if(e.method!==`GET`||r.pathname!==`${this.names.url.pathname.replace(/\/$/u,``)}/connect`||[...r.searchParams.keys()].sort().join(`,`)!==`binding,generation`)throw new Z(`connection-shape`);let i=this.paired.get(r.searchParams.get(`binding`)),a=Number(r.searchParams.get(`generation`)),o=p(e.headers.authorization);if(!i||!o||!Number.isSafeInteger(a)||a!==i.access.generation)throw new Z(`withdrawn-connection`);if(this.options.store.authorize(i.access.key,a,o),await this.bounded(e=>this.options.authorization.verify(i.jwt,i.binding,!1,e)),t.destroyed||this.closed)throw new Z(`connection-withdrawn`);i.port.ready(),this.options.store.connect(i.access.key,a,o),this.wss.handleUpgrade(e,t,n,e=>this.attach(e,i,o))}attach(e,t,n){this.active.set(e,t);let r=!1,i=Promise.resolve(),a=0,o=()=>e.terminate(),s=async()=>{this.options.store.authorize(t.access.key,t.access.generation,n),await this.bounded(e=>this.options.authorization.verify(t.jwt,t.binding,!1,e)),this.options.store.authorize(t.access.key,t.access.generation,n)},c=setInterval(()=>{r||(r=!0,s().catch(o).finally(()=>{r=!1}))},this.interval);c.unref();let l=t.port.onFrame(r=>{try{if(this.options.store.authorize(t.access.key,t.access.generation,n),e.readyState!==N.OPEN||e.bufferedAmount>1024*1024)throw new Z(`delivery-capacity`);e.send(JSON.stringify(r))}catch{o()}}),u=t.port.onClose(o);e.on(`message`,(n,r)=>{if(r||++a>16){o();return}i=i.then(async()=>{if(await s(),e.readyState!==N.OPEN)return;let r=JSON.parse(String(n)),i=t.port.send(r);i&&e.send(JSON.stringify(i))}).catch(o).finally(()=>{a--})}),e.on(`error`,o),e.once(`close`,()=>{clearInterval(c),l(),u(),this.active.delete(e)}),t.port.send({type:`get-messages`}),t.port.send({type:`get-status`}),t.port.send({type:`get-prompts`})}revoke(e){let t=Q(this.options.authorization.binding(e));this.options.store.revoke(t),this.paired.delete(e);for(let[t,n]of this.active)n.binding.id===e&&t.terminate()}async close(){this.closed=!0,this.options.server.off(`request`,this.request),this.options.server.off(`upgrade`,this.upgrade);for(let e of this.upgrades)e.destroy();for(let e of this.active.keys())e.terminate();for(let e of this.options.ports.values())e.close();this.paired.clear(),await new Promise(e=>this.wss.close(()=>e()))}};export{X as E2BWorkerProvisioningError,rt as HostedDesktopAuthorityStore,tt as HostedDesktopAuthorization,dt as HostedDesktopGateway,ct as HostedDesktopWorkerPort,qe as HostedOrganizationControl,Xe as HostedOrganizationPayloads,b as HostedRuntimeController,x as connectE2BTaskWorker,Je as createE2BOrganizationInventory,Ye as createHostedOrganizationGateway,Qe as createHostedOrganizationInputTokenCounter,Ze as createHostedOrganizationModelAction,_ as createProductCliHost,a as hostedAdmissionBytes,u as hostedWorkerAccessBytes,et as provisionE2BTaskWorker,g as startCli,m as startCliEntry};
6
6
  //# sourceMappingURL=index.js.map