@robota-sdk/agent-cli 3.0.0-beta.93 → 3.0.0-beta.95
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +221 -0
- package/README.md +7 -1
- package/dist/node/bin.js +16 -16
- package/dist/node/cli-core-DJIgDK0t.js +2920 -0
- package/dist/node/desktop-host.js +1 -1
- package/dist/node/headless.js +1 -1
- package/dist/node/host.d.ts +1 -1
- package/dist/node/host.js +1 -1
- package/dist/node/index.d.ts +2 -1
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +2 -2
- package/dist/node/{node-DDxqAmr9.js → node-BBey07fn.js} +7 -7
- package/dist/node/node-BBey07fn.js.map +1 -0
- package/dist/node/{node-CVEUtnXS.js → node-BOLpvRke.js} +2 -2
- package/dist/node/{node-CVEUtnXS.js.map → node-BOLpvRke.js.map} +1 -1
- package/dist/node/{node-DAf6oQNY.js → node-Bxcf0vqP.js} +6 -6
- package/dist/node/{node-DXIaHonc.js → node-CV7kyP4U.js} +1 -1
- package/dist/node/{node-BrAmtuTw.js → node-Dr_K99X7.js} +5 -5
- package/dist/node/{node-BrAmtuTw.js.map → node-Dr_K99X7.js.map} +1 -1
- package/dist/node/{node-1Kk9kvit.js → node-DsYjDBKf.js} +4 -4
- package/dist/node/{product-host-DqZRpcAh.d.ts → product-host-BACfuTu4.d.ts} +40 -11
- package/dist/node/product-host-BACfuTu4.d.ts.map +1 -0
- package/dist/node/product-host-BwV-X6oS.js +2954 -0
- package/dist/node/product-host-BwV-X6oS.js.map +1 -0
- package/dist/web/assets/index-DB915Rm-.js +314 -0
- package/dist/web/index.html +1 -1
- package/package.json +43 -37
- package/dist/node/cli-core-DutvpRdJ.js +0 -2921
- package/dist/node/node-DDxqAmr9.js.map +0 -1
- package/dist/node/product-host-DqZRpcAh.d.ts.map +0 -1
- package/dist/node/product-host-zZ2TTtQk.js +0 -2955
- package/dist/node/product-host-zZ2TTtQk.js.map +0 -1
- package/dist/web/assets/index-BQP0NBgG.js +0 -309
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{D as e,E as t,O as n,t as r}from"./product-host-
|
|
1
|
+
import{D as e,E as t,O as n,t as r}from"./product-host-BwV-X6oS.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,t(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
|
package/dist/node/headless.js
CHANGED
|
@@ -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-
|
|
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-DJIgDK0t.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
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{};
|
package/dist/node/host.d.ts
CHANGED
|
@@ -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-
|
|
2
|
+
import { n as createProductCliHost, t as IProductCliHost } from "./product-host-BACfuTu4.js";
|
|
3
3
|
export { type IProductCliArtifact, IProductCliHost, createProductCliHost };
|
package/dist/node/host.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./product-host-
|
|
1
|
+
import{t as e}from"./product-host-BwV-X6oS.js";export{e as createProductCliHost};
|
package/dist/node/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
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-
|
|
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-BACfuTu4.js";
|
|
3
3
|
import { IncomingMessage, Server, ServerResponse } from "node:http";
|
|
4
|
+
import { PassThrough, Readable, Writable } from "node:stream";
|
|
4
5
|
import { Sandbox } from "e2b/dist/index.mjs";
|
|
5
6
|
//#region src/cli.d.ts
|
|
6
7
|
/** Full CLI entry: supplies its terminal presentation to the shared serve/bootstrap path. */
|
package/dist/node/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/cli.ts","../../src/cli-entry.ts","../../src/hosted/hosted-runtime-controller.ts","../../src/hosted/hosted-runtime-admission.ts","../../../agent-organization/dist/node/index.d.ts","../../../agent-organization-host/dist/node/index.d.ts","../../src/hosted/hosted-organization-control.ts","../../src/hosted/e2b-organization-inventory.ts","../../src/hosted/hosted-organization-payloads.ts","../../src/hosted/hosted-organization-gateway.ts","../../src/hosted/hosted-organization-model.ts","../../src/hosted/hosted-organization-token-counter.ts","../../src/hosted/e2b-worker-process.ts","../../src/hosted/e2b-task-worker.ts","../../src/hosted/hosted-worker-execution-config.ts","../../src/hosted/e2b-worker-provisioning.ts","../../../agent-transport/dist/node/node.d.ts","../../src/hosted/desktop/authorization.ts","../../src/hosted/desktop/authority-store.ts","../../src/hosted/desktop/worker-port.ts","../../src/hosted/desktop/gateway.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/cli.ts","../../src/cli-entry.ts","../../src/hosted/hosted-runtime-controller.ts","../../src/hosted/hosted-runtime-admission.ts","../../../agent-organization/dist/node/index.d.ts","../../../agent-organization-host/dist/node/index.d.ts","../../src/hosted/hosted-organization-control.ts","../../src/hosted/e2b-organization-inventory.ts","../../src/hosted/hosted-organization-payloads.ts","../../src/hosted/hosted-organization-gateway.ts","../../src/hosted/hosted-organization-model.ts","../../src/hosted/hosted-organization-token-counter.ts","../../src/hosted/e2b-worker-process.ts","../../src/hosted/e2b-task-worker.ts","../../src/hosted/hosted-worker-execution-config.ts","../../src/hosted/e2b-worker-provisioning.ts","../../../agent-transport/dist/node/node.d.ts","../../src/hosted/desktop/authorization.ts","../../src/hosted/desktop/authority-store.ts","../../src/hosted/desktop/worker-port.ts","../../src/hosted/desktop/gateway.ts"],"mappings":"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"}
|
package/dist/node/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{C as e,S as t,T as n,_ as r,b as i,c as a,d as o,f as s,g as c,h as l,l as u,m as d,n as f,p,r as m,t as h,u as g,v as _,w as v,x as y,y as b}from"./product-host-zZ2TTtQk.js";import"node:module";import{createHash as x,createPublicKey as ee,randomBytes as S,randomUUID as C,verify as te}from"node:crypto";import{isAbsolute as w,join as T,posix as E}from"node:path";import"node:child_process";import{open as D,realpath as ne,rename as re,stat as ie,unlink as ae}from"node:fs/promises";import{closeSync as O,constants as k,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 A}from"node:perf_hooks";import{Sandbox as j,SandboxNotFoundError as be}from"e2b/dist/index.mjs";import{WebSocket as M,WebSocketServer as xe}from"ws";var N=class extends Error{reason=`invalid-schema`;constructor(){super(`Invalid organization schema`)}};function Se(e){for(let t of e){let e=t.codePointAt(0);if(e>=55296&&e<=57343)throw new N}}function Ce(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 Se(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=>{Se(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 we(e,t){if(Ce(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 Te(e){let t=we(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 Ce(e)}catch(e){throw e instanceof N?new F(`invalid-schema`):e}}function Ee(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 x(`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 Te(e)}catch(e){throw e instanceof N?new F(`invalid-schema`):e}}function De(e){let t=R(e,[`value`,`usage`]);return Object.freeze({value:H(JSON.parse(I(t.value))),usage:V(t.usage)})}function Oe(e){if(typeof e!=`string`||e.length>4096||!e.startsWith(`-----BEGIN PUBLIC KEY-----`))throw new F(`invalid-schema`);try{let t=ee(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 ke(e){if(e.version!==1||B(e.expiresAt,1)<=B(e.notBefore))throw new F(`invalid-schema`);B(e.epoch,1)}function Ae(e){let t=R(e,[`version`,`grantId`,`tenant`,`task`,`actor`,`audience`,`epoch`,`nonce`,`notBefore`,`expiresAt`,`operation`]);ke(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 je(e){let t=R(e,[`version`,`id`,`tenant`,`task`,`actor`,`audience`,`epoch`,`environment`,`operationDigest`,`notBefore`,`expiresAt`]);if(ke(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 Me=class extends Error{constructor(){super(`Organization audit append conflict`)}};const Ne=/^[0-9a-f]{64}$/,Pe=[`dispatch`,`complete`,`refused`,`unknown`];function U(e){return x(`sha256`).update(I(e),`utf8`).digest(`hex`)}function W(e){if(typeof e!=`string`||!Ne.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:W(n.hash)})}function G(e){let t=R(e,[`phase`,`operationDigest`,`tenantDigest`,`taskDigest`,`actorDigest`,`grantDigest`,`epoch`]);if(typeof t.phase!=`string`||!Pe.includes(t.phase))throw new F(`invalid-schema`);return Object.freeze({phase:t.phase,operationDigest:W(t.operationDigest),tenantDigest:W(t.tenantDigest),taskDigest:W(t.taskDigest),actorDigest:W(t.actorDigest),grantDigest:W(t.grantDigest),epoch:B(t.epoch,1)})}function K(e,t){if(!Pe.includes(t))throw new F(`invalid-schema`);let n=Ae(e),r=(e,t)=>U([`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 Ie(e){return z(e),Object.freeze({version:1,stream:e,sequence:0,hash:U([`robota/organization-audit-genesis/v1`,e])})}function Le(e,t,n,r){return U([`robota/organization-audit-entry/v1`,z(e),B(t,1),W(n),G(r)])}function Re(e){return Buffer.from(I([`robota/organization-audit-checkpoint/v1`,Fe(e,z(e.stream))]),`utf8`)}function q(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||!te(null,Re(i),n,a)||i.sequence===0&&i.hash!==Ie(t).hash)throw new F(`invalid-proof`);return Object.freeze({claims:i,signature:r.signature})}function ze(e,t){let n=R(e,[`stream`,`sequence`,`previous`,`event`,`hash`]),r=G(n.event);if(n.stream!==t.stream||n.sequence!==t.sequence+1||n.previous!==t.hash)throw new F(`invalid-proof`);let i=Le(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 J(e,t){return e.stream===t.stream&&e.sequence===t.sequence&&e.hash===t.hash}function Be(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=q(r.head,t.stream,n),a=t;for(let e of r.entries){let t=ze(e,a);a={version:1,stream:t.stream,sequence:t.sequence,hash:t.hash}}if(!J(a,i.claims))throw new F(`invalid-proof`);return i}function Ve(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 He=class{stream;key;sink;anchor;timeout;constructor(e){if(this.stream=z(e.stream),this.key=Oe(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=G(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=Be(await this.sink.read(r.claims,e),r.claims,this.key);if(Y(e),!J(i.claims,r.claims)){await Ve(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 Me))throw n;await Ve(t,e),t=Math.min(t*2,50);continue}Y(e);let o=ze(a.entry,r.claims),s=q(a.head,this.stream,this.key);if(I(o.event)!==I(n)||!J(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=q(await this.anchor.load(e),this.stream,this.key);Y(e);let n=Be(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 F(`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=Be(await this.sink.read(n.claims,e),n.claims,this.key);if(Y(e),J(r.claims,n.claims))return n.claims;await Ve(t,e),t=Math.min(t*2,50)}},e)}};const Ue=[`budget-exhausted`,`not-authorized`,`invalid-schema`,`expired`,`revoked`,`operation-conflict`,`operation-pending`];function We(e){if(typeof e!=`string`||!Ue.includes(e))throw new F(`invalid-schema`);return e}var Ge=class extends F{usage;constructor(e,t){super(We(e)),this.usage=V(t)}};function Ke(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:Ae(n.claims),signature:n.signature}),approval:r===null?null:Object.freeze({claims:je(r.claims),signature:r.signature})})}var qe=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 He))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=Ke(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(K(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=A.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||A.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=De(await Promise.race([o,r]));if(this.ledger.authenticate(e),a.signal.aborted||A.now()-u>s||(await this.auditRecord(i,`complete`,a.signal),this.ledger.authenticate(e),a.signal.aborted||A.now()-u>s))throw new F(`outcome-unknown`);let l=De({value:c.value,usage:{...c.usage,timeMs:Math.max(c.usage.timeMs,Math.ceil(A.now()-u))}});return this.ledger.settle(i,l),l}catch(e){if(e instanceof Ge&&!a.signal.aborted&&A.now()-u<=s){try{if(await this.auditRecord(i,`refused`,a.signal),a.signal.aborted||A.now()-u>s)throw new F(`outcome-unknown`);this.ledger.confirmNoEffect(i,We(e.reason),{...e.usage,timeMs:Math.max(e.usage.timeMs,Math.ceil(A.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()}},Je=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 qe({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=K(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 Ye(t){let n=e(t.controlPlane,`organization control plane`),r=e(t.tenant,`organization tenant`),i={apiKey:e(t.apiKey,`E2B management credential`),requestTimeoutMs:v(t.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(t){if(t.metadata.organizationControlPlane!==n||t.metadata.tenant!==r)throw Error(`Organization inventory ownership mismatch`);return Object.freeze({resource:e(t.sandboxId,`organization worker`),grantId:e(t.metadata.organizationGrant,`organization grant`),epoch:v(Number(t.metadata.epoch),`organization epoch`),identity:b({tenant:t.metadata.tenant,task:t.metadata.task,rootTask:t.metadata.rootTask,actor:t.metadata.actor,runtime:t.metadata.runtime})})}return{async list(e){let t=j.list({...i,query:{metadata:{organizationControlPlane:n,tenant:r},state:[`running`,`paused`]},limit:100}),o=[],s=new Set;for(;t.hasNext;){e.throwIfAborted();for(let n of await t.nextItems({...i,signal:e})){let e=a(n);if(s.has(e.resource)||o.length>=1e4)throw Error(`Organization inventory is incomplete`);s.add(e.resource),o.push(e)}}return o},async terminate(e,t){t.throwIfAborted();let n;try{n=await j.getInfo(e.resource,{...i,signal:t})}catch(e){if(e instanceof be)return;throw Error(`Organization cleanup is unresolved`)}let r=a(n);if(r.grantId!==e.grantId||r.epoch!==e.epoch||Object.entries(e.identity).some(([e,t])=>r.identity[e]!==t))throw Error(`Organization cleanup ownership mismatch`);await j.kill(e.resource,i)}}}function Xe(e){let t=[...e.bindings],n=new Set,i=new Set,a=new Set;for(let r of t){if(!/^[A-Za-z0-9_-]{32,256}$/u.test(r.token)||n.has(r.token)||i.has(r.config.identity.runtime)||a.has(r.grantId))throw new F(`invalid-schema`);let t=e.ledger.currentGrant(r.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(r.token),i.add(r.config.identity.runtime),a.add(r.grantId)}let o=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,i)=>{let a=new AbortController,s=()=>{i.writableFinished||a.abort()};i.once(`close`,s);let c=setTimeout(()=>{a.abort(),n.destroy(),i.destroy()},3e4),l=(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<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(s.has(t))throw new F(`invalid-schema`);s.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 c=[],u=0;for await(let e of n){let t=Buffer.from(e);if(u+=t.length,u>4*1024*1024)throw new F(`invalid-schema`);c.push(t)}let d=Buffer.concat(c),f=JSON.parse(new TextDecoder(`utf-8`,{fatal:!0}).decode(d));if(!f||Array.isArray(f))throw new F(`invalid-schema`);let p=[`/v1/chat/completions`,`/v1/responses`].includes(n.url??``),m=p?t.find(e=>n.headers.authorization===`Bearer ${e.token}`):t.find(e=>f.identity?.runtime===e.config.identity.runtime);if(!m||m.expiresAt<=Date.now())throw new F(`expired`);let h=m.config;if(n.headers.host!==new URL(h.broker.endpoint).host||new URL(h.worker.endpoint).origin!==new URL(h.broker.endpoint).origin)throw new F(`not-authorized`);let g=await e.control.admit({resource:h.worker.resource,grantId:m.grantId,identity:h.identity,epoch:h.epoch},a.signal);if(!p){let e=n.url===new URL(h.worker.endpoint).pathname?`worker`:n.url===new URL(h.broker.endpoint).pathname?`broker`:void 0;if(!e||typeof f.nonce!=`string`||f.version!==3||f.role!==e||f.resource!==h[e].resource||f.epoch!==h.epoch||Object.entries(h.identity).some(([e,t])=>f.identity?.[e]!==t)||JSON.stringify(f.snapshot)!==JSON.stringify(h.snapshot)||JSON.stringify(f.limits)!==JSON.stringify(h.limits))throw new F(`not-authorized`);let t=Date.now(),i={version:3,identity:h.identity,role:e,resource:h[e].resource,nonce:f.nonce,epoch:h.epoch,issuedAt:t,expiresAt:Math.min(t+6e4,m.expiresAt,g.expiresAt),snapshot:h.snapshot,ready:!0,limits:h.limits,usage:e===`broker`?o(m):null},a={...i,signature:m.signAdmission(e,r(i))};_(a,h,e,f.nonce,Date.now()),l(200,a);return}let v=n.headers[`idempotency-key`];if(typeof v!=`string`||!/^[A-Za-z0-9_-]{1,128}$/u.test(v))throw new F(`invalid-schema`);let y=await e.payloads.put(g.id,d),b=Date.now(),x={version:1,grantId:g.id,tenant:g.tenant,task:g.task,actor:g.actor,audience:g.audience,epoch:g.epoch,nonce:C(),notBefore:b,expiresAt:Math.min(b+25e3,m.expiresAt,g.expiresAt),operation:{idempotencyKey:v,resource:e.modelResource,operation:`generate`,environment:`hosted`,parameters:{request:y,surface:n.url===`/v1/responses`?`responses`:`chat-completions`}}},ee={claims:x,signature:m.signRequest(Ee(`request`,x))};await e.payloads.recordOperation(x);let S=(await e.control.apply({request:ee,approval:null},a.signal,()=>i.destroy())).value?.response;if(typeof S!=`string`)throw new F(`outcome-unknown`);let te=await e.payloads.get(g.id,S),w=JSON.parse(te.toString(`utf8`));if(f.stream===!0)if(i.writeHead(200,{"content-type":`text/event-stream`,"cache-control":`no-store`}),n.url===`/v1/responses`){let e=w.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:w})}\n\n`)}else{let e=w.choices;if(!Array.isArray(e))throw new F(`outcome-unknown`);i.write(`data: ${JSON.stringify({...w,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({...w,object:`chat.completion.chunk`,choices:e.map(e=>({index:e.index,delta:{},finish_reason:e.finish_reason}))})}\n\ndata: [DONE]\n\n`)}else l(200,w)}catch(e){i.headersSent?i.destroy():l(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(c),i.removeListener(`close`,s)}})()}}var Ze=class e{directory;constructor(e){this.directory=e}static async open(t){if(!w(t))throw new F(`policy-unavailable`);let n=await ne(t),r=await ie(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=x(`sha256`).update(e).digest(`hex`);return T(this.directory,`${n}-${t}.json`)}async put(e,t){if(t.length>4*1024*1024)throw new F(`invalid-schema`);let n=x(`sha256`).update(t).digest(`hex`),r=this.path(e,n);return await this.persist(r,t),n}async persist(e,t){let n=T(this.directory,`${C()}.tmp`);try{let r=await D(n,`wx`,384);try{await r.writeFile(t),await r.sync()}finally{await r.close()}await re(n,e);let i=await D(this.directory,k.O_RDONLY);try{await i.sync()}finally{await i.close()}}catch{throw new F(`policy-unavailable`)}finally{await ae(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 D(`${this.path(e,t)}.operation`,k.O_RDONLY|k.O_NOFOLLOW|k.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(K(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 D(this.path(e,t),k.O_RDONLY|k.O_NOFOLLOW|k.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(x(`sha256`).update(r).digest(`hex`)!==t)throw Error(`changed content`);return r}finally{await n.close()}}catch{throw new F(`policy-unavailable`)}}};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.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 Ge(`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 Ge(`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 $e(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 et(r,i,a){if(r.byteLength>48*1024*1024||x(`sha256`).update(r).digest(`hex`)!==i.digest)throw t(`filesystem checkpoint digest or size is invalid`);let o;try{o=n(JSON.parse(new TextDecoder(`utf-8`,{fatal:!0}).decode(r)),`checkpoint`)}catch{throw t(`filesystem checkpoint is not valid UTF-8 JSON`)}if(y(o,[`version`,`id`,`identity`,`epoch`,`worker`,`files`,...o.version===2?[`session`]:[]],`checkpoint`),o.version!==1&&o.version!==2||o.id!==i.id)throw t(`filesystem checkpoint version or identity does not match`);let s=b(o.identity),c=v(o.epoch,`checkpoint epoch`),l=e(o.worker,`checkpoint worker`);if([`tenant`,`task`,`rootTask`].some(e=>s[e]!==a.identity[e])||s.runtime===a.identity.runtime||c>=a.epoch)throw t(`filesystem checkpoint requires the same task and a fresh identity/epoch`);if(!Array.isArray(o.files)||o.files.length>1e3)throw t(`filesystem checkpoint file inventory is invalid`);let u=new Set,f=0,p=o.files.map(r=>{let i=n(r,`checkpoint file`);y(i,[`path`,`base64`],`checkpoint file`);let a=e(i.path,`checkpoint file path`),o=a.split(`/`)[0];if(E.isAbsolute(a)||E.normalize(a)!==a||a===`.`||a===`..`||a.startsWith(`../`)||a.endsWith(`/`)||a.includes(`\\`)||o===`.home`||o===`.tmp`||u.has(a))throw t(`filesystem checkpoint path escapes or replaces private state`);if(typeof i.base64!=`string`||i.base64.length>44*1024*1024)throw t(`filesystem checkpoint file encoding is invalid`);let s=Buffer.from(i.base64,`base64`);if(f+=s.byteLength,s.toString(`base64`)!==i.base64||f>32*1024*1024)throw t(`filesystem checkpoint encoding or byte budget is invalid`);return u.add(a),Object.freeze({path:a,bytes:new Uint8Array(s)})});for(let e of u){let n=E.dirname(e);for(;n!==`.`;){if(u.has(n))throw t(`filesystem checkpoint file conflicts with a directory`);n=E.dirname(n)}}return Object.freeze({sourceWorker:l,sourceRuntime:s.runtime,sourceEpoch:c,files:p,...o.version===2?{session:d(o.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 tt(n){let r=b(n.identity),a=v(n.epoch,`worker epoch`),o=e(n.templateId,`E2B clean template`),s=i(n.snapshot);if(s===null!=(n.checkpoint===void 0)||s?.id===o)throw t(`worker recovery requires checkpoint bytes and a separate clean template`);let c=s===null?void 0:et(n.checkpoint,s,{identity:r,epoch:a}),l;try{l=new URL(n.brokerEndpoint)}catch{throw t(`worker broker endpoint is invalid`)}if(l.protocol!==`https:`&&!(l.protocol===`http:`&&[`127.0.0.1`,`[::1]`].includes(l.hostname))||l.username||l.password||l.search||l.hash)throw t(`worker broker endpoint requires owner-selected TLS or literal loopback`);let u={apiKey:e(n.apiKey,`E2B management credential`),requestTimeoutMs:v(n.requestTimeoutMs,`E2B request timeout`,3e4),apiUrl:`https://api.e2b.app`,sandboxUrl:`https://sandbox.e2b.app`,domain:`e2b.app`,debug:!1,retries:0},d=v(n.lifetimeMs,`E2B lifetime`,864e5),f=C(),m={...r,epoch:String(a),operationId:f,...n.organization===void 0?{}:{organizationControlPlane:e(n.organization.controlPlane,`organization control plane`),organizationGrant:e(n.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)}};n.signal.throwIfAborted();let h;try{h=await j.create(o,{...u,timeoutMs:d,metadata:m,envs:{},allowInternetAccess:!1,network:{allowPublicTraffic:!1,allowOut:[l.hostname]},lifecycle:{onTimeout:`kill`,autoResume:!1}})}catch{throw new X(`allocation-unknown`,f)}let g;try{g=e(h.sandboxId,`allocated worker`)}catch{throw new X(`allocation-unknown`,f)}let _,y=()=>(_===void 0&&(_=j.kill(g,u).then(()=>void 0).catch(()=>{throw new X(`cleanup-unresolved`,f,g)})),_);try{let e=await j.getInfo(g,u).catch(()=>{throw new X(`allocation-unknown`,f,g)});if(e.sandboxId!==g||Object.entries(m).some(([t,n])=>e.metadata[t]!==n))throw new X(`allocation-unknown`,f,g);if(g===c?.sourceWorker)throw t(`provider returned the checkpoint source instead of a fresh worker`);if(e.templateId!==o||e.state!==`running`||e.lifecycle?.onTimeout!==`kill`||e.lifecycle.autoResume!==!1||e.allowInternetAccess!==!1||e.network?.allowPublicTraffic!==!1||JSON.stringify(e.network.allowOut??[])!==JSON.stringify([l.hostname])||(e.volumeMounts?.length??0)!==0||e.network.egressProxy!==void 0||Object.keys(e.network.rules??{}).length!==0)throw t(`allocated worker ownership, clean template or network posture is invalid`);n.signal.throwIfAborted();let r=await h.commands.run(`umask 077; mktemp -d "\${TMPDIR:-/tmp}/agent-task-${f}-XXXXXXXXXX"`,{cwd:`/`,envs:{},timeoutMs:n.requestTimeoutMs,requestTimeoutMs:n.requestTimeoutMs});if(r.exitCode!==0||typeof r.stdout!=`string`)throw t(`fresh worker workspace creation failed`);let i=r.stdout.trim();if(!/^\/[A-Za-z0-9._/-]+$/u.test(i)||E.normalize(i)!==i||!RegExp(`^agent-task-${f}-[A-Za-z0-9]{10}$`,`u`).test(E.basename(i)))throw t(`fresh worker workspace receipt is invalid`);for(let e of c?.files??[]){n.signal.throwIfAborted();let r=E.join(i,e.path);await h.files.write(r,e.bytes.slice().buffer,{requestTimeoutMs:n.requestTimeoutMs});let a=await h.files.read(r,{format:`bytes`,requestTimeoutMs:n.requestTimeoutMs});if(!Buffer.from(a).equals(Buffer.from(e.bytes)))throw t(`restored filesystem checkpoint bytes do not match`)}let a;if(c?.session!==void 0){n.signal.throwIfAborted();let e={...c.session,cwd:i},r=p(e),o=E.join(i,`.home`,`.checkpoint-sessions`,`${e.id}.json`);await h.files.write(o,Uint8Array.from(r).buffer,{requestTimeoutMs:n.requestTimeoutMs});let s=await h.files.read(o,{format:`bytes`,requestTimeoutMs:n.requestTimeoutMs});if(!Buffer.from(s).equals(r))throw t(`restored conversation checkpoint bytes do not match`);a=Object.freeze({id:e.id,path:o,digest:x(`sha256`).update(r).digest(`hex`)})}return n.signal.throwIfAborted(),Object.freeze({resource:g,workspaceRoot:i,operationId:f,snapshot:s,release:y,...a===void 0?{}:{resumeSession:a}})}catch(e){throw e instanceof X&&e.outcome===`allocation-unknown`||(await y(),n.signal.aborted&&n.signal.throwIfAborted(),e instanceof Error&&e.message.startsWith(`Hosted runtime admission refused:`))?e:t(`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 nt=class{options;url;now;bindings;constructor(e){if(this.options=e,this.url=u(e.publicUrl,`Desktop runtime`),u(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 g({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=>x(`sha256`).update(e).digest(`hex`),rt=(e,t)=>e?.version===t.version&&e.ledger===t.ledger&&e.revision===t.revision&&e.digest===t.digest;var it=class{now;directory;file;lock;constructor(e,t=Date.now){if(this.now=t,this.anchor=e.anchor,!w(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=T(this.directory,`desktop-authority.json`),this.lock=T(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,k.O_RDONLY|k.O_NOFOLLOW|k.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||!rt(r,this.head(n)))throw new Z(`store-unavailable`);return n}finally{O(e)}}locked(e){ue(this.lock,{mode:448});try{return e()}finally{he(this.lock)}}write(e,t){let n=T(this.directory,`desktop-${C()}.tmp`);try{let r=de(n,`wx`,384);try{_e(r,JSON.stringify(t)),ce(r)}finally{O(r)}let i=this.head(t);if(this.anchor.compareAndSet(e===void 0?void 0:this.head(e),i),!rt(this.anchor.read(),i))throw new Z(`store-unavailable`);me(n,this.file);let a=de(this.directory,k.O_RDONLY);try{ce(a)}finally{O(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=S(32).toString(`base64url`),a=r?S(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 at=128*1024,ot=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`]),st=new Set([`sessions`,`session_list`,`session_renamed_in_list`,`session_deleted`,`ui_intent`,`settings`,`commands`]);function ct(e){return x(`sha256`).update(`robota/desktop-permission/v1\0`).update(JSON.stringify(e)).digest(`hex`)}var lt=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(st.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:ct(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:at,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(!ot.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 ut=new Set([`authorization`,`x-desktop-operator-authorization`,`host`,`origin`,`x-forwarded-for`,`x-forwarded-host`,`x-forwarded-proto`]),dt=e=>(e??``).replace(/^::ffff:/u,``).toLowerCase();var ft=class{options;wss=new xe({noServer:!0,maxPayload:at});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(dt)),this.names=a({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(ut.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(dt(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=o(e.headers.authorization);if(!a)throw new Z(`missing-token`);let s=o(e.headers[`x-desktop-operator-authorization`]);if(e.headers[`x-desktop-operator-authorization`]!==void 0&&!s)throw new Z(`operator-token`);let{drive:c,operator:l}=await this.bounded(async e=>{let t=await this.options.authorization.verify(a,r,!1,e),n=s===void 0?void 0:await this.options.authorization.verify(s,r,!0,e);return e.throwIfAborted(),{drive:t,operator:n}});if(e.aborted||t.destroyed||this.closed)throw new Z(`connection-withdrawn`);let u=Q(r),d=this.options.store.pair(u,[c,...l?[l]:[]].map(e=>({id:e.jti,expiresAt:e.credentialExpiresAt})),Math.min(c.expiresAt,l?.expiresAt??c.expiresAt),l!==void 0);this.paired.set(r.id,{binding:r,access:d,jwt:a,operatorJwt:s,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:d.generation,token:d.token,approvalToken:d.approvalToken,expiresAt:d.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=o(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{C as e,S as t,T as n,_ as r,b as i,c as a,d as o,f as s,g as c,h as l,l as u,m as d,n as f,p,r as m,t as h,u as g,v as _,w as v,x as y,y as b}from"./product-host-BwV-X6oS.js";import"node:module";import{createHash as x,createPublicKey as ee,randomBytes as S,randomUUID as C,verify as te}from"node:crypto";import{isAbsolute as w,join as T,posix as E}from"node:path";import"node:child_process";import{open as D,realpath as ne,rename as re,stat as ie,unlink as ae}from"node:fs/promises";import{closeSync as O,constants as k,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 A}from"node:perf_hooks";import{Sandbox as j,SandboxNotFoundError as be}from"e2b/dist/index.mjs";import{WebSocket as M,WebSocketServer as xe}from"ws";var N=class extends Error{reason=`invalid-schema`;constructor(){super(`Invalid organization schema`)}};function Se(e){for(let t of e){let e=t.codePointAt(0);if(e>=55296&&e<=57343)throw new N}}function Ce(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 Se(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=>{Se(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 we(e,t){if(Ce(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 Te(e){let t=we(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 Ce(e)}catch(e){throw e instanceof N?new F(`invalid-schema`):e}}function Ee(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 x(`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 Te(e)}catch(e){throw e instanceof N?new F(`invalid-schema`):e}}function De(e){let t=R(e,[`value`,`usage`]);return Object.freeze({value:H(JSON.parse(I(t.value))),usage:V(t.usage)})}function Oe(e){if(typeof e!=`string`||e.length>4096||!e.startsWith(`-----BEGIN PUBLIC KEY-----`))throw new F(`invalid-schema`);try{let t=ee(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 ke(e){if(e.version!==1||B(e.expiresAt,1)<=B(e.notBefore))throw new F(`invalid-schema`);B(e.epoch,1)}function Ae(e){let t=R(e,[`version`,`grantId`,`tenant`,`task`,`actor`,`audience`,`epoch`,`nonce`,`notBefore`,`expiresAt`,`operation`]);ke(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 je(e){let t=R(e,[`version`,`id`,`tenant`,`task`,`actor`,`audience`,`epoch`,`environment`,`operationDigest`,`notBefore`,`expiresAt`]);if(ke(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 Me=class extends Error{constructor(){super(`Organization audit append conflict`)}};const Ne=/^[0-9a-f]{64}$/,Pe=[`dispatch`,`complete`,`refused`,`unknown`];function U(e){return x(`sha256`).update(I(e),`utf8`).digest(`hex`)}function W(e){if(typeof e!=`string`||!Ne.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:W(n.hash)})}function G(e){let t=R(e,[`phase`,`operationDigest`,`tenantDigest`,`taskDigest`,`actorDigest`,`grantDigest`,`epoch`]);if(typeof t.phase!=`string`||!Pe.includes(t.phase))throw new F(`invalid-schema`);return Object.freeze({phase:t.phase,operationDigest:W(t.operationDigest),tenantDigest:W(t.tenantDigest),taskDigest:W(t.taskDigest),actorDigest:W(t.actorDigest),grantDigest:W(t.grantDigest),epoch:B(t.epoch,1)})}function K(e,t){if(!Pe.includes(t))throw new F(`invalid-schema`);let n=Ae(e),r=(e,t)=>U([`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 Ie(e){return z(e),Object.freeze({version:1,stream:e,sequence:0,hash:U([`robota/organization-audit-genesis/v1`,e])})}function Le(e,t,n,r){return U([`robota/organization-audit-entry/v1`,z(e),B(t,1),W(n),G(r)])}function Re(e){return Buffer.from(I([`robota/organization-audit-checkpoint/v1`,Fe(e,z(e.stream))]),`utf8`)}function q(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||!te(null,Re(i),n,a)||i.sequence===0&&i.hash!==Ie(t).hash)throw new F(`invalid-proof`);return Object.freeze({claims:i,signature:r.signature})}function ze(e,t){let n=R(e,[`stream`,`sequence`,`previous`,`event`,`hash`]),r=G(n.event);if(n.stream!==t.stream||n.sequence!==t.sequence+1||n.previous!==t.hash)throw new F(`invalid-proof`);let i=Le(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 J(e,t){return e.stream===t.stream&&e.sequence===t.sequence&&e.hash===t.hash}function Be(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=q(r.head,t.stream,n),a=t;for(let e of r.entries){let t=ze(e,a);a={version:1,stream:t.stream,sequence:t.sequence,hash:t.hash}}if(!J(a,i.claims))throw new F(`invalid-proof`);return i}function Ve(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 He=class{stream;key;sink;anchor;timeout;constructor(e){if(this.stream=z(e.stream),this.key=Oe(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=G(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=Be(await this.sink.read(r.claims,e),r.claims,this.key);if(Y(e),!J(i.claims,r.claims)){await Ve(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 Me))throw n;await Ve(t,e),t=Math.min(t*2,50);continue}Y(e);let o=ze(a.entry,r.claims),s=q(a.head,this.stream,this.key);if(I(o.event)!==I(n)||!J(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=q(await this.anchor.load(e),this.stream,this.key);Y(e);let n=Be(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 F(`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=Be(await this.sink.read(n.claims,e),n.claims,this.key);if(Y(e),J(r.claims,n.claims))return n.claims;await Ve(t,e),t=Math.min(t*2,50)}},e)}};const Ue=[`budget-exhausted`,`not-authorized`,`invalid-schema`,`expired`,`revoked`,`operation-conflict`,`operation-pending`];function We(e){if(typeof e!=`string`||!Ue.includes(e))throw new F(`invalid-schema`);return e}var Ge=class extends F{usage;constructor(e,t){super(We(e)),this.usage=V(t)}};function Ke(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:Ae(n.claims),signature:n.signature}),approval:r===null?null:Object.freeze({claims:je(r.claims),signature:r.signature})})}var qe=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 He))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=Ke(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(K(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=A.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||A.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=De(await Promise.race([o,r]));if(this.ledger.authenticate(e),a.signal.aborted||A.now()-u>s||(await this.auditRecord(i,`complete`,a.signal),this.ledger.authenticate(e),a.signal.aborted||A.now()-u>s))throw new F(`outcome-unknown`);let l=De({value:c.value,usage:{...c.usage,timeMs:Math.max(c.usage.timeMs,Math.ceil(A.now()-u))}});return this.ledger.settle(i,l),l}catch(e){if(e instanceof Ge&&!a.signal.aborted&&A.now()-u<=s){try{if(await this.auditRecord(i,`refused`,a.signal),a.signal.aborted||A.now()-u>s)throw new F(`outcome-unknown`);this.ledger.confirmNoEffect(i,We(e.reason),{...e.usage,timeMs:Math.max(e.usage.timeMs,Math.ceil(A.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()}},Je=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 qe({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=K(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 Ye(t){let n=e(t.controlPlane,`organization control plane`),r=e(t.tenant,`organization tenant`),i={apiKey:e(t.apiKey,`E2B management credential`),requestTimeoutMs:v(t.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(t){if(t.metadata.organizationControlPlane!==n||t.metadata.tenant!==r)throw Error(`Organization inventory ownership mismatch`);return Object.freeze({resource:e(t.sandboxId,`organization worker`),grantId:e(t.metadata.organizationGrant,`organization grant`),epoch:v(Number(t.metadata.epoch),`organization epoch`),identity:b({tenant:t.metadata.tenant,task:t.metadata.task,rootTask:t.metadata.rootTask,actor:t.metadata.actor,runtime:t.metadata.runtime})})}return{async list(e){let t=j.list({...i,query:{metadata:{organizationControlPlane:n,tenant:r},state:[`running`,`paused`]},limit:100}),o=[],s=new Set;for(;t.hasNext;){e.throwIfAborted();for(let n of await t.nextItems({...i,signal:e})){let e=a(n);if(s.has(e.resource)||o.length>=1e4)throw Error(`Organization inventory is incomplete`);s.add(e.resource),o.push(e)}}return o},async terminate(e,t){t.throwIfAborted();let n;try{n=await j.getInfo(e.resource,{...i,signal:t})}catch(e){if(e instanceof be)return;throw Error(`Organization cleanup is unresolved`)}let r=a(n);if(r.grantId!==e.grantId||r.epoch!==e.epoch||Object.entries(e.identity).some(([e,t])=>r.identity[e]!==t))throw Error(`Organization cleanup ownership mismatch`);await j.kill(e.resource,i)}}}function Xe(e){let t=[...e.bindings],n=new Set,i=new Set,a=new Set;for(let r of t){if(!/^[A-Za-z0-9_-]{32,256}$/u.test(r.token)||n.has(r.token)||i.has(r.config.identity.runtime)||a.has(r.grantId))throw new F(`invalid-schema`);let t=e.ledger.currentGrant(r.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(r.token),i.add(r.config.identity.runtime),a.add(r.grantId)}let o=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,i)=>{let a=new AbortController,s=()=>{i.writableFinished||a.abort()};i.once(`close`,s);let c=setTimeout(()=>{a.abort(),n.destroy(),i.destroy()},3e4),l=(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<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(s.has(t))throw new F(`invalid-schema`);s.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 c=[],u=0;for await(let e of n){let t=Buffer.from(e);if(u+=t.length,u>4*1024*1024)throw new F(`invalid-schema`);c.push(t)}let d=Buffer.concat(c),f=JSON.parse(new TextDecoder(`utf-8`,{fatal:!0}).decode(d));if(!f||Array.isArray(f))throw new F(`invalid-schema`);let p=[`/v1/chat/completions`,`/v1/responses`].includes(n.url??``),m=p?t.find(e=>n.headers.authorization===`Bearer ${e.token}`):t.find(e=>f.identity?.runtime===e.config.identity.runtime);if(!m||m.expiresAt<=Date.now())throw new F(`expired`);let h=m.config;if(n.headers.host!==new URL(h.broker.endpoint).host||new URL(h.worker.endpoint).origin!==new URL(h.broker.endpoint).origin)throw new F(`not-authorized`);let g=await e.control.admit({resource:h.worker.resource,grantId:m.grantId,identity:h.identity,epoch:h.epoch},a.signal);if(!p){let e=n.url===new URL(h.worker.endpoint).pathname?`worker`:n.url===new URL(h.broker.endpoint).pathname?`broker`:void 0;if(!e||typeof f.nonce!=`string`||f.version!==3||f.role!==e||f.resource!==h[e].resource||f.epoch!==h.epoch||Object.entries(h.identity).some(([e,t])=>f.identity?.[e]!==t)||JSON.stringify(f.snapshot)!==JSON.stringify(h.snapshot)||JSON.stringify(f.limits)!==JSON.stringify(h.limits))throw new F(`not-authorized`);let t=Date.now(),i={version:3,identity:h.identity,role:e,resource:h[e].resource,nonce:f.nonce,epoch:h.epoch,issuedAt:t,expiresAt:Math.min(t+6e4,m.expiresAt,g.expiresAt),snapshot:h.snapshot,ready:!0,limits:h.limits,usage:e===`broker`?o(m):null},a={...i,signature:m.signAdmission(e,r(i))};_(a,h,e,f.nonce,Date.now()),l(200,a);return}let v=n.headers[`idempotency-key`];if(typeof v!=`string`||!/^[A-Za-z0-9_-]{1,128}$/u.test(v))throw new F(`invalid-schema`);let y=await e.payloads.put(g.id,d),b=Date.now(),x={version:1,grantId:g.id,tenant:g.tenant,task:g.task,actor:g.actor,audience:g.audience,epoch:g.epoch,nonce:C(),notBefore:b,expiresAt:Math.min(b+25e3,m.expiresAt,g.expiresAt),operation:{idempotencyKey:v,resource:e.modelResource,operation:`generate`,environment:`hosted`,parameters:{request:y,surface:n.url===`/v1/responses`?`responses`:`chat-completions`}}},ee={claims:x,signature:m.signRequest(Ee(`request`,x))};await e.payloads.recordOperation(x);let S=(await e.control.apply({request:ee,approval:null},a.signal,()=>i.destroy())).value?.response;if(typeof S!=`string`)throw new F(`outcome-unknown`);let te=await e.payloads.get(g.id,S),w=JSON.parse(te.toString(`utf8`));if(f.stream===!0)if(i.writeHead(200,{"content-type":`text/event-stream`,"cache-control":`no-store`}),n.url===`/v1/responses`){let e=w.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:w})}\n\n`)}else{let e=w.choices;if(!Array.isArray(e))throw new F(`outcome-unknown`);i.write(`data: ${JSON.stringify({...w,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({...w,object:`chat.completion.chunk`,choices:e.map(e=>({index:e.index,delta:{},finish_reason:e.finish_reason}))})}\n\ndata: [DONE]\n\n`)}else l(200,w)}catch(e){i.headersSent?i.destroy():l(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(c),i.removeListener(`close`,s)}})()}}var Ze=class e{directory;constructor(e){this.directory=e}static async open(t){if(!w(t))throw new F(`policy-unavailable`);let n=await ne(t),r=await ie(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=x(`sha256`).update(e).digest(`hex`);return T(this.directory,`${n}-${t}.json`)}async put(e,t){if(t.length>4*1024*1024)throw new F(`invalid-schema`);let n=x(`sha256`).update(t).digest(`hex`),r=this.path(e,n);return await this.persist(r,t),n}async persist(e,t){let n=T(this.directory,`${C()}.tmp`);try{let r=await D(n,`wx`,384);try{await r.writeFile(t),await r.sync()}finally{await r.close()}await re(n,e);let i=await D(this.directory,k.O_RDONLY);try{await i.sync()}finally{await i.close()}}catch{throw new F(`policy-unavailable`)}finally{await ae(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 D(`${this.path(e,t)}.operation`,k.O_RDONLY|k.O_NOFOLLOW|k.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(K(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 D(this.path(e,t),k.O_RDONLY|k.O_NOFOLLOW|k.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(x(`sha256`).update(r).digest(`hex`)!==t)throw Error(`changed content`);return r}finally{await n.close()}}catch{throw new F(`policy-unavailable`)}}};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.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 Ge(`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 Ge(`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 $e(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 et(r,i,a){if(r.byteLength>48*1024*1024||x(`sha256`).update(r).digest(`hex`)!==i.digest)throw t(`filesystem checkpoint digest or size is invalid`);let o;try{o=n(JSON.parse(new TextDecoder(`utf-8`,{fatal:!0}).decode(r)),`checkpoint`)}catch{throw t(`filesystem checkpoint is not valid UTF-8 JSON`)}if(y(o,[`version`,`id`,`identity`,`epoch`,`worker`,`files`,...o.version===2?[`session`]:[]],`checkpoint`),o.version!==1&&o.version!==2||o.id!==i.id)throw t(`filesystem checkpoint version or identity does not match`);let s=b(o.identity),c=v(o.epoch,`checkpoint epoch`),l=e(o.worker,`checkpoint worker`);if([`tenant`,`task`,`rootTask`].some(e=>s[e]!==a.identity[e])||s.runtime===a.identity.runtime||c>=a.epoch)throw t(`filesystem checkpoint requires the same task and a fresh identity/epoch`);if(!Array.isArray(o.files)||o.files.length>1e3)throw t(`filesystem checkpoint file inventory is invalid`);let u=new Set,f=0,p=o.files.map(r=>{let i=n(r,`checkpoint file`);y(i,[`path`,`base64`],`checkpoint file`);let a=e(i.path,`checkpoint file path`),o=a.split(`/`)[0];if(E.isAbsolute(a)||E.normalize(a)!==a||a===`.`||a===`..`||a.startsWith(`../`)||a.endsWith(`/`)||a.includes(`\\`)||o===`.home`||o===`.tmp`||u.has(a))throw t(`filesystem checkpoint path escapes or replaces private state`);if(typeof i.base64!=`string`||i.base64.length>44*1024*1024)throw t(`filesystem checkpoint file encoding is invalid`);let s=Buffer.from(i.base64,`base64`);if(f+=s.byteLength,s.toString(`base64`)!==i.base64||f>32*1024*1024)throw t(`filesystem checkpoint encoding or byte budget is invalid`);return u.add(a),Object.freeze({path:a,bytes:new Uint8Array(s)})});for(let e of u){let n=E.dirname(e);for(;n!==`.`;){if(u.has(n))throw t(`filesystem checkpoint file conflicts with a directory`);n=E.dirname(n)}}return Object.freeze({sourceWorker:l,sourceRuntime:s.runtime,sourceEpoch:c,files:p,...o.version===2?{session:d(o.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 tt(n){let r=b(n.identity),a=v(n.epoch,`worker epoch`),o=e(n.templateId,`E2B clean template`),s=i(n.snapshot);if(s===null!=(n.checkpoint===void 0)||s?.id===o)throw t(`worker recovery requires checkpoint bytes and a separate clean template`);let c=s===null?void 0:et(n.checkpoint,s,{identity:r,epoch:a}),l;try{l=new URL(n.brokerEndpoint)}catch{throw t(`worker broker endpoint is invalid`)}if(l.protocol!==`https:`&&!(l.protocol===`http:`&&[`127.0.0.1`,`[::1]`].includes(l.hostname))||l.username||l.password||l.search||l.hash)throw t(`worker broker endpoint requires owner-selected TLS or literal loopback`);let u={apiKey:e(n.apiKey,`E2B management credential`),requestTimeoutMs:v(n.requestTimeoutMs,`E2B request timeout`,3e4),apiUrl:`https://api.e2b.app`,sandboxUrl:`https://sandbox.e2b.app`,domain:`e2b.app`,debug:!1,retries:0},d=v(n.lifetimeMs,`E2B lifetime`,864e5),f=C(),m={...r,epoch:String(a),operationId:f,...n.organization===void 0?{}:{organizationControlPlane:e(n.organization.controlPlane,`organization control plane`),organizationGrant:e(n.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)}};n.signal.throwIfAborted();let h;try{h=await j.create(o,{...u,timeoutMs:d,metadata:m,envs:{},allowInternetAccess:!1,network:{allowPublicTraffic:!1,allowOut:[l.hostname]},lifecycle:{onTimeout:`kill`,autoResume:!1}})}catch{throw new X(`allocation-unknown`,f)}let g;try{g=e(h.sandboxId,`allocated worker`)}catch{throw new X(`allocation-unknown`,f)}let _,y=()=>(_===void 0&&(_=j.kill(g,u).then(()=>void 0).catch(()=>{throw new X(`cleanup-unresolved`,f,g)})),_);try{let e=await j.getInfo(g,u).catch(()=>{throw new X(`allocation-unknown`,f,g)});if(e.sandboxId!==g||Object.entries(m).some(([t,n])=>e.metadata[t]!==n))throw new X(`allocation-unknown`,f,g);if(g===c?.sourceWorker)throw t(`provider returned the checkpoint source instead of a fresh worker`);if(e.templateId!==o||e.state!==`running`||e.lifecycle?.onTimeout!==`kill`||e.lifecycle.autoResume!==!1||e.allowInternetAccess!==!1||e.network?.allowPublicTraffic!==!1||JSON.stringify(e.network.allowOut??[])!==JSON.stringify([l.hostname])||(e.volumeMounts?.length??0)!==0||e.network.egressProxy!==void 0||Object.keys(e.network.rules??{}).length!==0)throw t(`allocated worker ownership, clean template or network posture is invalid`);n.signal.throwIfAborted();let r=await h.commands.run(`umask 077; mktemp -d "\${TMPDIR:-/tmp}/agent-task-${f}-XXXXXXXXXX"`,{cwd:`/`,envs:{},timeoutMs:n.requestTimeoutMs,requestTimeoutMs:n.requestTimeoutMs});if(r.exitCode!==0||typeof r.stdout!=`string`)throw t(`fresh worker workspace creation failed`);let i=r.stdout.trim();if(!/^\/[A-Za-z0-9._/-]+$/u.test(i)||E.normalize(i)!==i||!RegExp(`^agent-task-${f}-[A-Za-z0-9]{10}$`,`u`).test(E.basename(i)))throw t(`fresh worker workspace receipt is invalid`);for(let e of c?.files??[]){n.signal.throwIfAborted();let r=E.join(i,e.path);await h.files.write(r,e.bytes.slice().buffer,{requestTimeoutMs:n.requestTimeoutMs});let a=await h.files.read(r,{format:`bytes`,requestTimeoutMs:n.requestTimeoutMs});if(!Buffer.from(a).equals(Buffer.from(e.bytes)))throw t(`restored filesystem checkpoint bytes do not match`)}let a;if(c?.session!==void 0){n.signal.throwIfAborted();let e={...c.session,cwd:i},r=p(e),o=E.join(i,`.home`,`.checkpoint-sessions`,`${e.id}.json`);await h.files.write(o,Uint8Array.from(r).buffer,{requestTimeoutMs:n.requestTimeoutMs});let s=await h.files.read(o,{format:`bytes`,requestTimeoutMs:n.requestTimeoutMs});if(!Buffer.from(s).equals(r))throw t(`restored conversation checkpoint bytes do not match`);a=Object.freeze({id:e.id,path:o,digest:x(`sha256`).update(r).digest(`hex`)})}return n.signal.throwIfAborted(),Object.freeze({resource:g,workspaceRoot:i,operationId:f,snapshot:s,release:y,...a===void 0?{}:{resumeSession:a}})}catch(e){throw e instanceof X&&e.outcome===`allocation-unknown`||(await y(),n.signal.aborted&&n.signal.throwIfAborted(),e instanceof Error&&e.message.startsWith(`Hosted runtime admission refused:`))?e:t(`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 nt=class{options;url;now;bindings;constructor(e){if(this.options=e,this.url=a(e.publicUrl,`Desktop runtime`),a(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 o({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`)),s=this.now();if(typeof a.iat!=`number`||!Number.isSafeInteger(a.iat)||typeof a.exp!=`number`||!Number.isSafeInteger(a.exp)||a.iat*1e3>s||a.exp*1e3<=s||a.exp-a.iat>120||a.nbf!==void 0&&(typeof a.nbf!=`number`||!Number.isSafeInteger(a.nbf)||a.nbf*1e3>s)||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,s+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=>x(`sha256`).update(e).digest(`hex`),rt=(e,t)=>e?.version===t.version&&e.ledger===t.ledger&&e.revision===t.revision&&e.digest===t.digest;var it=class{now;directory;file;lock;constructor(e,t=Date.now){if(this.now=t,this.anchor=e.anchor,!w(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=T(this.directory,`desktop-authority.json`),this.lock=T(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,k.O_RDONLY|k.O_NOFOLLOW|k.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||!rt(r,this.head(n)))throw new Z(`store-unavailable`);return n}finally{O(e)}}locked(e){ue(this.lock,{mode:448});try{return e()}finally{he(this.lock)}}write(e,t){let n=T(this.directory,`desktop-${C()}.tmp`);try{let r=de(n,`wx`,384);try{_e(r,JSON.stringify(t)),ce(r)}finally{O(r)}let i=this.head(t);if(this.anchor.compareAndSet(e===void 0?void 0:this.head(e),i),!rt(this.anchor.read(),i))throw new Z(`store-unavailable`);me(n,this.file);let a=de(this.directory,k.O_RDONLY);try{ce(a)}finally{O(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=S(32).toString(`base64url`),a=r?S(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 at=128*1024,ot=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`]),st=new Set([`sessions`,`session_list`,`session_renamed_in_list`,`session_deleted`,`ui_intent`,`settings`,`commands`]);function ct(e){return x(`sha256`).update(`robota/desktop-permission/v1\0`).update(JSON.stringify(e)).digest(`hex`)}var lt=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(st.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:ct(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:at,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(!ot.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 ut=new Set([`authorization`,`x-desktop-operator-authorization`,`host`,`origin`,`x-forwarded-for`,`x-forwarded-host`,`x-forwarded-proto`]),dt=e=>(e??``).replace(/^::ffff:/u,``).toLowerCase();var ft=class{options;wss=new xe({noServer:!0,maxPayload:at});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(dt)),this.names=u({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(ut.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(dt(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=g(e.headers.authorization);if(!a)throw new Z(`missing-token`);let o=g(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=g(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
|
|
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`)),
|
|
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=g(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,it as HostedDesktopAuthorityStore,nt as HostedDesktopAuthorization,ft as HostedDesktopGateway,lt as HostedDesktopWorkerPort,Je as HostedOrganizationControl,Ze as HostedOrganizationPayloads,c as HostedRuntimeController,l as connectE2BTaskWorker,Ye as createE2BOrganizationInventory,Xe as createHostedOrganizationGateway,$e as createHostedOrganizationInputTokenCounter,Qe as createHostedOrganizationModelAction,h as createProductCliHost,r as hostedAdmissionBytes,s as hostedWorkerAccessBytes,tt as provisionE2BTaskWorker,m as startCli,f as startCliEntry};
|
|
6
6
|
//# sourceMappingURL=index.js.map
|