@reason-machines/cli-linux-x64 0.2.504 → 0.2.505
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/THIRD_PARTY_NOTICES.txt +7 -8
- package/bin/reason +2 -2
- package/bin/runtime/srt/sandbox-runtime.mjs +52 -52
- package/bin/vm-hands/api-credentials-23k36ayh.js +2 -0
- package/bin/vm-hands/api-jd29p2kc.js +2 -0
- package/bin/vm-hands/ask-relay-zpp0rkhg.js +4 -0
- package/bin/vm-hands/connect-cli-xyxgcg6z.js +2 -0
- package/bin/vm-hands/credentials-byna24dv.js +2 -0
- package/bin/vm-hands/custom-endpoint-device-p2agcsk0.js +2 -0
- package/bin/vm-hands/desktop-account-z16mmkxg.js +2 -0
- package/bin/vm-hands/device-workspace-y0tk3ne8.js +2 -0
- package/bin/vm-hands/hands-worker-source-0qa16xzj.js +2 -0
- package/bin/vm-hands/index-h6xkz48h.js +12818 -0
- package/bin/vm-hands/install-receipt-nnragt7p.js +2 -0
- package/bin/vm-hands/local-automation-xbpca0f3.js +2 -0
- package/bin/vm-hands/local-capabilities-30m8pzpv.js +2 -0
- package/bin/vm-hands/local-desktop-users-gxfywsan.js +2 -0
- package/bin/vm-hands/local-display-mac-n236gkpe.js +2 -0
- package/bin/vm-hands/local-display-session-ddafdm8k.js +2 -0
- package/bin/vm-hands/local-display-video-gha54xwa.js +2 -0
- package/bin/vm-hands/local-managed-process-0zwxyqxd.js +2 -0
- package/bin/vm-hands/local-pty-session-w1yrmjm0.js +2 -0
- package/bin/vm-hands/managed-runtime-8y90twae.js +2 -0
- package/bin/vm-hands/network-contract-v0fkg94d.js +2 -0
- package/bin/vm-hands/network-sign-in-3dkdkh3a.js +34 -0
- package/bin/vm-hands/package-z2dk6xva.js +2 -0
- package/bin/vm-hands/permissions-ga1ax8wd.js +2 -0
- package/bin/vm-hands/reason-hands-protocol-vzgxd159.js +2 -0
- package/bin/vm-hands/serve-service-42nqanvr.js +2 -0
- package/bin/vm-hands/status-m0g7k47a.js +96 -0
- package/bin/vm-hands/version-ye6800p2.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-00y3kn86.js +7 -0
- package/bin/vm-hands/vm-hands-entry-lite-0572m6cr.js +344 -0
- package/bin/vm-hands/vm-hands-entry-lite-07q2xvk1.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-0a4cy8gw.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-1nj03gbj.js +4 -0
- package/bin/vm-hands/vm-hands-entry-lite-26xb026c.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-33h8294z.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-3882raa5.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-3rg3znp8.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-4swa18qz.js +10 -0
- package/bin/vm-hands/vm-hands-entry-lite-56v9haps.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-6x5pj2y0.js +4 -0
- package/bin/vm-hands/{vm-hands-entry-lite-fcvf8md1.js → vm-hands-entry-lite-8p8hz0j1.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-8twscwtw.js +112 -0
- package/bin/vm-hands/vm-hands-entry-lite-8xe0wzp9.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-ah2ep922.js +4 -0
- package/bin/vm-hands/vm-hands-entry-lite-b0p8f295.js +52 -0
- package/bin/vm-hands/{vm-hands-entry-lite-77j164ps.js → vm-hands-entry-lite-b7wy89y0.js} +54 -54
- package/bin/vm-hands/vm-hands-entry-lite-c5gt0086.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-wrvz9jxy.js → vm-hands-entry-lite-c8bf82tx.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-dgmap6z4.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-dhqmbqsh.js +9 -0
- package/bin/vm-hands/vm-hands-entry-lite-e1xjfj57.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-e4hwb89r.js +66 -0
- package/bin/vm-hands/vm-hands-entry-lite-g6r5xrk0.js +105 -0
- package/bin/vm-hands/vm-hands-entry-lite-ghhpgt3v.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-h5smacqn.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-jd31as70.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-k9n1pk42.js +4 -0
- package/bin/vm-hands/vm-hands-entry-lite-kqbats5n.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-p9fwt68c.js +42 -0
- package/bin/vm-hands/vm-hands-entry-lite-pkk555dx.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-pmw3ycgc.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-q9g11dbj.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-r374pchj.js +9 -0
- package/bin/vm-hands/vm-hands-entry-lite-r665z809.js +4 -0
- package/bin/vm-hands/vm-hands-entry-lite-rck5h8fr.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-rj8yq6gp.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-c11fg8gx.js → vm-hands-entry-lite-s8ty42st.js} +9 -5
- package/bin/vm-hands/vm-hands-entry-lite-s8zfzv0k.js +6 -0
- package/bin/vm-hands/vm-hands-entry-lite-tafgty5k.js +4 -0
- package/bin/vm-hands/vm-hands-entry-lite-tbdcmq09.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-td309c1y.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-v0bp1v66.js +128 -0
- package/bin/vm-hands/vm-hands-entry-lite-v0k8b768.js +452 -0
- package/bin/vm-hands/vm-hands-entry-lite-v4r1fggm.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-vqr3zrqr.js +539 -0
- package/bin/vm-hands/vm-hands-entry-lite-wbfmc0xn.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-x3pbyg92.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-rfz60hb3.js → vm-hands-entry-lite-xd2dn3n8.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-yqn8h1p0.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-zj3hb5jk.js +127 -0
- package/bin/vm-hands/vm-hands-entry-lite-zz8tr0bm.js +12 -0
- package/bin/vm-hands/vm-hands-entry-lite.js +1 -3
- package/bin/vm-hands/vm-hands-executor-6tncheya.js +12 -0
- package/bin/vm-hands/vm-hands-op-runner-s1ghsym7.js +2 -0
- package/bin/vm-hands/vm-hands-runtime-k6egwk2t.js +4 -0
- package/bin/vm-hands/worker-preview-readiness-wh0yg1dz.js +2 -0
- package/bin/vm-hands/worker-sandbox-s054x4zw.js +2 -0
- package/package.json +1 -1
- package/bin/vm-hands/api-credentials-gnefpvc1.js +0 -2
- package/bin/vm-hands/api-mjzanhf1.js +0 -2
- package/bin/vm-hands/connect-cli-dy7mdehx.js +0 -2
- package/bin/vm-hands/credentials-drj5ktpt.js +0 -2
- package/bin/vm-hands/custom-endpoint-device-j1x988g0.js +0 -2
- package/bin/vm-hands/desktop-account-4525j7h3.js +0 -2
- package/bin/vm-hands/device-workspace-pt07525s.js +0 -2
- package/bin/vm-hands/fsevents-8zxmv89w.js +0 -2
- package/bin/vm-hands/hands-worker-source-atg5dc7b.js +0 -2
- package/bin/vm-hands/index-ttmxy9nd.js +0 -12818
- package/bin/vm-hands/install-receipt-6v65enmf.js +0 -2
- package/bin/vm-hands/local-automation-wfa3dpbs.js +0 -2
- package/bin/vm-hands/local-capabilities-3v7x217d.js +0 -2
- package/bin/vm-hands/local-desktop-users-ar6xpadb.js +0 -2
- package/bin/vm-hands/local-display-mac-fnp3317m.js +0 -2
- package/bin/vm-hands/local-display-session-2064d8k8.js +0 -2
- package/bin/vm-hands/local-display-video-1hxqy3xj.js +0 -2
- package/bin/vm-hands/local-managed-process-trmeeyh2.js +0 -2
- package/bin/vm-hands/local-pty-session-5yh2a63r.js +0 -2
- package/bin/vm-hands/managed-runtime-hhk63f61.js +0 -2
- package/bin/vm-hands/network-contract-rzw769gw.js +0 -2
- package/bin/vm-hands/package-r7sgmw4t.js +0 -2
- package/bin/vm-hands/permissions-xwyhbnjc.js +0 -2
- package/bin/vm-hands/reason-hands-protocol-8fgk2s53.js +0 -2
- package/bin/vm-hands/serve-service-aye42qtb.js +0 -2
- package/bin/vm-hands/status-qtm9gb55.js +0 -10
- package/bin/vm-hands/version-gnb213c3.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-0y9n06b6.js +0 -14
- package/bin/vm-hands/vm-hands-entry-lite-38g65s5x.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-3sjkzhf6.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-545m8hm0.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-57v7y0km.js +0 -105
- package/bin/vm-hands/vm-hands-entry-lite-5gevvgec.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-5tbntcyq.js +0 -42
- package/bin/vm-hands/vm-hands-entry-lite-61y11rrd.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-6x1an7es.js +0 -7
- package/bin/vm-hands/vm-hands-entry-lite-7777m86y.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-87vmbt38.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-8e5djf5y.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-8wcyveeh.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-e1z3y9rs.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-eabever7.js +0 -112
- package/bin/vm-hands/vm-hands-entry-lite-ewr54tpc.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-ex69qn9q.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-f62fvme8.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-f69t48dj.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-gvjffc5t.js +0 -65
- package/bin/vm-hands/vm-hands-entry-lite-hmaazqdr.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-kq7hrjch.js +0 -128
- package/bin/vm-hands/vm-hands-entry-lite-mcjca0ez.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-mk5ayds8.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-mqzr55mw.js +0 -126
- package/bin/vm-hands/vm-hands-entry-lite-ncbzy69k.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-np07qyeq.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-nqdstx24.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-psywfz8m.js +0 -9
- package/bin/vm-hands/vm-hands-entry-lite-pydgnx8a.js +0 -539
- package/bin/vm-hands/vm-hands-entry-lite-qpdpzg8g.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-qt71vz32.js +0 -52
- package/bin/vm-hands/vm-hands-entry-lite-qxsqx6hz.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-qy9xg6em.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-rmabryke.js +0 -452
- package/bin/vm-hands/vm-hands-entry-lite-rzr2ncf5.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-sss0m3yn.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-swrymqj9.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-tebh7dcm.js +0 -6
- package/bin/vm-hands/vm-hands-entry-lite-txd50spx.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-wg0cykk2.js +0 -9
- package/bin/vm-hands/vm-hands-entry-lite-x39tmj7j.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-xdjrdkh2.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-yretc2th.js +0 -3
- package/bin/vm-hands/vm-hands-executor-8c542krk.js +0 -12
- package/bin/vm-hands/vm-hands-op-runner-88e10ptt.js +0 -2
- package/bin/vm-hands/vm-hands-runtime-njh3th64.js +0 -4
- package/bin/vm-hands/worker-preview-readiness-7xtgxsar.js +0 -2
- package/bin/vm-hands/worker-sandbox-s9pyac8p.js +0 -2
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{Af as SJ,If as mJ,Jf as wJ,Kf as cJ,Lf as pJ,tg as hJ}from"./vm-hands-entry-lite-p9fwt68c.js";import{createHash as u,randomBytes as NJ}from"crypto";import{closeSync as HJ,fsyncSync as VJ,mkdirSync as QQ,openSync as kJ,renameSync as ZQ,rmSync as $Q,statSync as vJ,writeSync as gJ,constants as p}from"fs";import{join as $J}from"path";var zQ=1;var zJ=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function EJ(J){if(J.environment!==void 0||J.payload.environment!==void 0)throw new F("vm_hands_bind_invalid","bind carries a plaintext environment");if(J.payload.vm_hands_env_deferred===!0&&J.environment_sealed!==void 0)throw new F("vm_hands_bind_invalid","split bind carries an environment");return J.environment_sealed!==void 0}function xJ(J,Q){let{payload:$,authority:z}=J;if(!$||typeof $!=="object"||Array.isArray($)||!z||typeof z!=="object"||Array.isArray(z)||!Q.deviceId||!Q.rootId||$.run_id!==Q.runId||$.device_id!==Q.deviceId||z.device_id!==Q.deviceId||$.root_id!==Q.rootId||Q.snapshotId!==void 0&&$.snapshot_id!==Q.snapshotId)throw new F("vm_hands_env_invalid","environment does not match this Hands");return $}function UJ(J){if(J.capability!=="hands.connect")throw new F("vm_hands_bind_invalid","not a hands.connect claim");let Q=J.payload;return{kind:"vm_hands.bind",v:1,bind_id:J.attempt_id,attempt_id:J.attempt_id,attempt_token:J.attempt_token,run_id:J.run_id,session_id:typeof Q.workspace_id==="string"&&zJ.test(Q.workspace_id)?Q.workspace_id:J.run_id,brain_generation:Q.target_generation,fence_id:Q.target_fence_id,lease_until:J.lease_until,policy:{agent_profile:"",confinement_key:String(Q.hands_confinement??""),browser_egress:Q.browser_egress??null,policy_digest:Q.vm_hands_policy_digest},cwd:typeof Q.cwd==="string"?Q.cwd:"",claim:J,env:EJ(J)?J.environment_sealed:null,workspace_deferred:XQ(J)}}function XQ(J){let Q=J.payload[wJ];if(Q===void 0)return!1;if(Q!==!0||J.payload.vm_hands_env_deferred!==!0||J.environment_sealed!==void 0)throw new F("vm_hands_bind_invalid","a pre-bind must be environment-less");return!0}class F extends Error{code;constructor(J,Q){super(Q);this.code=J}}function qJ(J,Q){if(J instanceof F)return J;let $=J&&typeof J==="object"&&"code"in J&&typeof J.code==="string"&&/^[a-z][a-z0-9_]{2,63}$/.test(J.code)?J.code:"vm_hands_bind_failed";return new F($,Q)}var c=(J)=>Buffer.from(J instanceof Uint8Array?J:new Uint8Array(J)).toString("base64url"),l=(J)=>new Uint8Array(Buffer.from(J,"base64url"));function o(J){if(J===null||typeof J!=="object")return JSON.stringify(J);if(Array.isArray(J))return`[${J.map(o).join(",")}]`;return`{${Object.keys(J).sort().map((Q)=>`${JSON.stringify(Q)}:${o(J[Q])}`).join(",")}}`}async function IQ(J){let Q=await crypto.subtle.importKey("pkcs8",l(J.device_key.pkcs8),{name:"ECDSA",namedCurve:"P-256"},!1,["sign"]),$=l(J.device_key.spki),z=await crypto.subtle.generateKey({name:"ECDH",namedCurve:"P-256"},!1,["deriveKey"]),E=new Uint8Array(await crypto.subtle.exportKey("spki",z.publicKey)),U=u("sha256").update($).digest("base64url");return{signing:{privateKey:Q},agreement:z,signingSpki:$,agreementSpki:E,fingerprint:U}}var YQ=16;class WQ{init;keys;hooks;options;identity="identity_free";lastBrainGeneration=new Map;rebindableGeneration=new Map;bound=new Map;binding=new Map;unbinding=new Set;servedRun=!1;bootKillPending=!1;unverified=new Set;unverifiedTeardowns=new Map;grants=new Map;structural=Promise.resolve();exclusive(J){let Q=this.structural.then(J,J);return this.structural=Q.catch(()=>{return}),Q}constructor(J,Q,$,z){this.init=J;this.keys=Q;this.hooks=$;this.options=z;if(!zJ.test(J.workspace_id)&&!/^ws-[a-z0-9]{8,64}$/.test(J.workspace_id))throw new F("vm_hands_layout_invalid","bad workspace id");if(!Number.isSafeInteger(J.instance_generation)||J.instance_generation<1)throw new F("vm_hands_layout_invalid","bad generation")}get phase(){if(this.identity==="identity_free")return"identity_free";if(this.unbinding.size)return"unbinding";return this.bound.size||this.binding.size?"bound":"registered"}isBoundRun(J){for(let Q of this.bound.values())if(Q.runId===J)return!0;return!1}bindIdForRun(J){for(let Q of this.bound.values())if(Q.runId===J)return Q.bindId;return null}get liveBindIds(){return[...new Set([...this.bound.keys(),...this.binding.keys(),...this.unbinding])]}get liveSessionIds(){return[...new Set([...this.bound.values()].map((J)=>J.sessionId.toLowerCase()))]}get settingUp(){return this.binding.size>0}async environmentInstalled(J,Q,$){for(let z=Date.now()+Q;;){let E=this.bound.get(J);if(!E)return!1;if(E.envInstalled)return!0;if(Date.now()>=z||$?.aborted)return!1;await new Promise((U)=>setTimeout(U,25))}}canSpawn(J){for(let Q of this.bound.values())if(Q.runId===J)return Q.envInstalled;return!1}async registerFrame(J){if(this.identity!=="identity_free")throw new F("vm_hands_register_twice","already registered");if(typeof J!=="string"||J.length<16||J.length>256)throw new F("vm_hands_challenge_invalid","bad register challenge");let Q={challenge:J,t:"register",v:zQ,workspace_id:this.init.workspace_id,instance_generation:this.init.instance_generation,credential:this.init.credential,device_public_key:c(this.keys.signingSpki),env_public_key:c(this.keys.agreementSpki),key_fingerprint:this.keys.fingerprint,manifest_digest:this.init.manifest_digest,nonce:c(NJ(32)),timestamp_ms:(this.options.now??Date.now)(),vm_hands_attest_hold:!0},$=await crypto.subtle.sign({name:"ECDSA",hash:"SHA-256"},this.keys.signing.privateKey,new TextEncoder().encode(o(Q)));return{...Q,device_signature:c($)}}async helloFrame(J,Q){if(this.identity==="identity_free")throw new F("vm_hands_not_registered","hello before register");let $=String((this.options.now??Date.now)()),z=c(NJ(32)),E=hJ({method:"GET",pathAndQuery:SJ,timestamp:$,nonce:z,challenge:J,bodySha256:u("sha256").update("").digest("hex")}),U=new Uint8Array(await crypto.subtle.sign({name:"ECDSA",hash:"SHA-256"},this.keys.signing.privateKey,new Uint8Array(E)));return{t:"hello",timestamp:$,nonce:z,signature:c(KQ(U)),...Q?{vm_hands_previous_connection:Q}:{}}}registered(){if(this.identity!=="identity_free")throw new F("vm_hands_register_unexpected","registered twice");this.identity="registered"}async bind(J){if(this.identity!=="registered")throw new F("vm_hands_not_registered","bind before register");if(J.kind!=="vm_hands.bind"||J.v!==1)throw new F("vm_hands_bind_invalid","bad bind");for(let z of[J.bind_id,J.attempt_id,J.run_id,J.session_id,J.fence_id])if(!zJ.test(z))throw new F("vm_hands_bind_invalid","bad id");let Q=this.lastBrainGeneration.get(J.run_id)??0;if(!Number.isSafeInteger(J.brain_generation)||J.brain_generation<Q||J.brain_generation===Q&&this.rebindableGeneration.get(J.run_id)!==Q)throw new F("vm_hands_generation_stale","brain generation not strictly higher");if(J.env&&(J.env.aad!==J.bind_id||J.env.alg!=="ECDH-P256+A256GCM"))throw new F("vm_hands_bind_invalid","bad env envelope");if(!/^[0-9a-f]{64}$/.test(J.policy.policy_digest))throw new F("vm_hands_bind_invalid","bad policy or nonce");if(u("sha256").update(o({hands_confinement:J.policy.confinement_key||null,browser_egress:J.policy.browser_egress??null})).digest("hex")!==J.policy.policy_digest)throw new F("vm_hands_policy_mismatch","policy digest does not match the claim");if(this.liveBindIds.includes(J.bind_id)||[...this.bound.values()].some((z)=>z.runId===J.run_id)||[...this.binding.values()].includes(J.run_id))throw new F("vm_hands_busy","this run already holds a bind here");if(this.liveBindIds.length>=YQ)throw new F("vm_hands_busy","every bind slot is held");if([...this.grants.values()].some((z)=>z.sessionId===J.session_id))throw new F("vm_hands_busy","a bind of this Session waits for its workspace beside the setup");if(this.lastBrainGeneration.set(J.run_id,J.brain_generation),this.rebindableGeneration.delete(J.run_id),this.binding.set(J.bind_id,J.run_id),J.workspace_deferred){let z,E,U=new Promise((C,M)=>{z=C,E=M});return U.catch(()=>{return}),this.grants.set(J.bind_id,{sessionId:J.session_id,promise:U,resolve:z,reject:E}),this.setUpDeferred(J)}return this.exclusive(()=>this.setUp(J))}liveCgroupBindsBut(J){return[...new Set([...this.bound.keys(),...this.binding.keys()])].filter((Q)=>Q!==J)}async setUpDeferred(J){let Q=this.grants.get(J.bind_id);try{await this.exclusive(()=>this.prepareBind(J))}catch(L){throw this.binding.delete(J.bind_id),this.grants.delete(J.bind_id),this.rebindableGeneration.set(J.run_id,J.brain_generation),qJ(L,"the bind's kill-verify failed")}let $,z=new Promise((L)=>{$=L}),E=!1,U=!1,C=()=>{U=!0,$()},M=Q.promise.then(()=>new Promise((L,D)=>{this.exclusive(async()=>{if(U){D(new F("vm_hands_bind_lost","the pre-bind ended before its turn"));return}E=!0;try{if(this.unverified.size>0)await this.hooks.killAndVerifyPayload({keep:[...this.liveCgroupBindsBut(J.bind_id),J.bind_id]}),this.unverified.clear();L()}catch(_){D(_)}await z})}));M.catch(()=>{return});try{return await this.setUp(J,{workspaceGrant:M,inTurn:()=>E,leave:C})}finally{C()}}async prepareBind(J){if(this.bootKillPending&&!this.servedRun){try{await this.hooks.killProbe()}catch{throw new F("vm_hands_kill_unverified","the boot's scoped kill did not verify")}this.bootKillPending=!1}let Q=this.liveCgroupBindsBut(J.bind_id);if(this.unverified.size>0)await this.hooks.killAndVerifyPayload(Q.length?{keep:Q}:void 0),this.unverified.clear();this.servedRun=!0}async setUp(J,Q){let $=null,z=!1;try{if(!Q)await this.prepareBind(J);z=!0;let{launchId:E,applied:U,readyData:C}=await this.hooks.startExecutor({bindId:J.bind_id,sessionId:J.session_id,policyDigest:J.policy.policy_digest,confinementKey:J.policy.confinement_key,browserEgress:J.policy.browser_egress,cwd:J.cwd,claim:J.claim,...Q?{workspaceGrant:Q.workspaceGrant}:{}}),M=this.hooks.restatLayout(J.session_id);this.hooks.verifyMounts?.(J.session_id);let L=null,D=null;if(J.env){let _=J.claim?.owner??{},q=xJ(await this.openSealed(J.env,J.bind_id),{runId:J.run_id,deviceId:typeof _.device_id==="string"?_.device_id:"",rootId:J.claim?.root_id??""});L=this.hooks.installEnvironment(J.bind_id,q),D=typeof q.snapshot_id==="string"&&q.snapshot_id?q.snapshot_id:null,$=this.writeJobEnvRootOnly(J.bind_id,q)}if(this.unbinding.has(J.bind_id))throw new F("vm_hands_bind_lost","unbound while binding");return this.bound.set(J.bind_id,{bindId:J.bind_id,runId:J.run_id,sessionId:J.session_id,brainGeneration:J.brain_generation,policyDigest:J.policy.policy_digest,launchId:E,envInstalled:L!==null,rootId:J.claim?.root_id??"",envDirectory:$}),this.binding.delete(J.bind_id),this.grants.delete(J.bind_id),{bind_id:J.bind_id,attempt_id:J.attempt_id,attempt_token:J.attempt_token,launch_id:E,snapshot_revision:L,snapshot_id:D,layout:M,...C?{ready_data:C}:{},policy_digest:u("sha256").update(o({hands_confinement:U.hands_confinement??null,browser_egress:U.browser_egress??null})).digest("hex")}}catch(E){if($)BJ($);if(z){let U=()=>this.hooks.killAndVerifyPayload({bindId:J.bind_id,keep:this.liveCgroupBindsBut(J.bind_id),own:!0}).catch(()=>{this.unverified.add(J.bind_id)});if(Q&&!Q.inTurn())Q.leave(),await this.exclusive(U);else await U()}throw this.binding.delete(J.bind_id),this.grants.delete(J.bind_id),this.rebindableGeneration.set(J.run_id,J.brain_generation),qJ(E,"executor refused the bind")}}grantWorkspace(J){let Q=this.grants.get(J);if(!Q)throw new F("vm_hands_not_binding","no pre-bind waits for a workspace grant");Q.resolve()}abandonWorkspaceGrant(J){this.grants.get(J)?.reject(new F("vm_hands_bind_lost","the pre-bind ended before its workspace grant"))}async deliverEnvironment(J){let Q=this.bound.get(J.attemptId);if(!Q||this.unbinding.has(J.attemptId))throw new F("vm_hands_not_bound","environment delivered while not bound");if(!zJ.test(J.attemptId)||typeof J.snapshotId!=="string"||!J.snapshotId||J.snapshotId.length>128||J.snapshotId.includes("/"))throw new F("vm_hands_env_invalid","bad snapshot id");let $=`${J.attemptId}/${J.snapshotId}`;if(J.sealed?.alg!=="ECDH-P256+A256GCM"||J.sealed.aad!==$)throw new F("vm_hands_env_invalid","bad env envelope");let z=xJ(await this.openSealed(J.sealed,$),{runId:Q.runId,deviceId:J.deviceId,rootId:Q.rootId,snapshotId:J.snapshotId}),E=this.hooks.installEnvironment(Q.bindId,z);if(Q.envInstalled=!0,Q.envDirectory)BJ(Q.envDirectory);return Q.envDirectory=null,Q.envDirectory=this.writeJobEnvRootOnly(`${Q.bindId}-r${E}`,z),{snapshot_id:J.snapshotId,installed_revision:E,installed:!0}}async attestFrame(J,Q){if(this.identity==="identity_free")throw new F("vm_hands_not_registered","attest before register");if(!J||J.length>65536)throw new F("vm_hands_attest_invalid","no probe script");return this.exclusive(async()=>{if(this.liveBindIds.length)throw new F("vm_hands_attest_invalid","attest beside a bind");let $=await this.hooks.runProbe({nonce:Q,script:J});try{await this.hooks.killProbe()}catch{this.bootKillPending=!0}return{t:"attest",nonce:Q,exit_code:$.exitCode,markers:$.markers,proof_dir_inode:$.proofDirInode,script_sha256:u("sha256").update(J).digest("hex")}})}executorExited(J){return this.hooks.executorExited?.(J)??new Promise(()=>{})}async boundRefused(J){await this.unbind(J)}async unbind(J){let Q=this.bound.get(J)??null;if(this.unbinding.add(J),this.bound.delete(J),this.abandonWorkspaceGrant(J),Q)try{this.hooks.freezeBind?.(J)}catch{}return this.exclusive(()=>this.tearDown(J,Q))}async retryUnbind(J){if(!this.unverifiedTeardowns.has(J))throw new F("vm_hands_unbind_unknown","no unverified unbind of this bind");return this.exclusive(async()=>{if(!this.unverifiedTeardowns.has(J))throw new F("vm_hands_unbind_unknown","no unverified unbind of this bind");return this.tearDown(J,this.unverifiedTeardowns.get(J)??null,!0)})}async tearDown(J,Q,$=!1){try{this.bound.delete(J);let z=this.liveCgroupBindsBut(J);try{await this.hooks.killAndVerifyPayload({bindId:J,keep:z})}catch(E){if(this.unverified.add(J),!this.unverifiedTeardowns.has(J))this.unverifiedTeardowns.set(J,Q);throw E}if(this.unverified.delete(J),!z.length&&!$)this.unverified.clear();if(Q?.envDirectory)BJ(Q.envDirectory);if(this.unverifiedTeardowns.delete(J),Q&&this.lastBrainGeneration.get(Q.runId)===Q.brainGeneration)this.rebindableGeneration.set(Q.runId,Q.brainGeneration);return{bind_id:Q?J:null,killed_verified:!0,shredded:!0,srt_fallbacks:z.length||$?null:this.hooks.takeSrtFallbacks?.()??null}}finally{this.unbinding.delete(J)}}async openSealed(J,Q){let $=()=>{throw new F("vm_hands_env_invalid","env did not decrypt")},z=await crypto.subtle.importKey("spki",l(J.epk),{name:"ECDH",namedCurve:"P-256"},!1,[]).catch($),E=await crypto.subtle.deriveKey({name:"ECDH",public:z},this.keys.agreement.privateKey,{name:"AES-GCM",length:256},!1,["decrypt"]),U=await crypto.subtle.decrypt({name:"AES-GCM",iv:l(J.iv),additionalData:new TextEncoder().encode(Q)},E,l(J.ct)).catch($),C=JSON.parse(new TextDecoder().decode(U));if(!C||typeof C!=="object"||Array.isArray(C))throw new F("vm_hands_env_invalid","env not an object");return C}writeJobEnvRootOnly(J,Q){let $=$J(this.options.envRoot,`bind-${J}`);QQ($,{mode:448});let z=vJ($);if(!z.isDirectory()||(z.mode&63)!==0||z.uid!==(process.getuid?.()??-1))throw new F("vm_hands_env_dir_unsafe","env directory is not root's 0700");let E=Q.variables&&typeof Q.variables==="object"?Q.variables:{},U=Object.entries(E).filter(([L,D])=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(L)&&typeof D==="string").map(([L,D])=>`export ${L}='${String(D).replaceAll("'","'\\''")}'`).join(`
|
|
3
|
+
`)+`
|
|
4
|
+
`,C=$J($,`.job.env.${NJ(8).toString("hex")}`),M=kJ(C,p.O_WRONLY|p.O_CREAT|p.O_EXCL|p.O_NOFOLLOW,384);try{gJ(M,U),VJ(M)}finally{HJ(M)}return ZQ(C,$J($,"job.env")),$}}function BJ(J){try{let Q=$J(J,"job.env"),$=vJ(Q).size,z=kJ(Q,p.O_WRONLY|p.O_NOFOLLOW);try{gJ(z,Buffer.alloc($)),VJ(z)}finally{HJ(z)}}catch{}$Q(J,{recursive:!0,force:!0})}function KQ(J){if(J.length!==64)throw new F("vm_hands_signature_invalid","unexpected ECDSA signature length");let Q=(E)=>{let U=0;while(U<E.length-1&&E[U]===0)U++;let C=E.subarray(U),M=C[0]&128?Uint8Array.of(0,...C):C;return Uint8Array.of(2,M.length,...M)},$=Q(J.subarray(0,32)),z=Q(J.subarray(32));return Uint8Array.of(48,$.length+z.length,...$,...z)}import{randomUUID as GQ}from"crypto";var FQ="/app/local-runtime/session?register=vm_hands_v1",PQ="/app/local-runtime",RJ=25000,AJ=20000,CQ=1e4,bJ=5000,NQ=new Set(["pty.start","jobs.control","tunnel.open","tunnel.close"]),BQ="preview.serve.v1",EQ=60000,LJ=75000,UQ=2000,AQ=1e4,LQ=new Set(["vm_hands_no_register","vm_hands_register_failed"]),_Q=3,OQ=20000,jQ=250,MQ=2000;function uJ(J){let Q=Math.min(jQ*2**(J-1),MQ);return Math.round(Q/2+Math.random()*Q/2)}var TQ=5000;function DQ(J){return J>=500||J===408||J===429}var XJ=20000;function IJ(J,Q){return typeof J==="string"&&/^[A-Za-z0-9._:-]{1,160}$/.test(J)?J:Q}class k extends Error{}var xQ=64,yJ=[1000,2000,4000,8000,15000,30000,60000,120000];function lJ(J){let Q=J&&typeof J==="object"&&"code"in J?J.code:null;return typeof Q==="string"&&/^[a-z][a-z0-9_]{2,63}$/.test(Q)?Q:"vm_hands_unbind_failed"}function qQ(J,Q,$,z,E){let U=$.turn.claim.attempt_id,C=J.healing??=new Set;if(C.has(U))return;C.add(U);let M=$.turn.claim.operation_id;(async()=>{for(let[L,D]of yJ.entries()){if(z.aborted)return;if(await new Promise((_)=>{let q=setTimeout(_,D);q.unref?.(),z.addEventListener("abort",()=>{clearTimeout(q),_()},{once:!0})}),z.aborted)return;try{let _=await Q.retryUnbind(U);E("vm_hands.unbind_healed",{operation_id:M,attempt:L+1}),J.receipts.push({...$,unbound:_}),J.flushReceipts?.();return}catch(_){let q=lJ(_);if(E("vm_hands.unbind_unverified",{operation_id:M,code:q,attempt:L+1}),q==="vm_hands_unbind_unknown")return}}E("vm_hands.unbind_heal_exhausted",{operation_id:M,attempts:yJ.length})})().finally(()=>C.delete(U))}async function oJ(J,Q){let $=[...J.modelOps.get(Q)??[]];for(let z of $)z.abort.abort();await Promise.race([Promise.all($.map((z)=>z.settled)),new Promise((z)=>setTimeout(z,bJ))])}async function SQ(J,Q){let $=[...J.personTerminals].filter((z)=>z.session===null||z.session===Q);for(let z of $)z.abort.abort();if($.length)await Promise.race([Promise.all($.map((z)=>z.settled)),new Promise((z)=>setTimeout(z,bJ))]);return $.length}function wQ(J){let Q=J.payload,$=Q?.workspace?.kind==="managed"?Q.workspace.workspaceId:void 0;return typeof $==="string"&&/^[0-9a-f-]{36}$/i.test($)?$.toLowerCase():null}async function d(J,Q,$){return await oJ(J,$),Q.unbind($)}function YJ(J){for(let Q of J.outbox?.splice(0)??[])Q.reject(Error("vm_hands_attempt_ended"))}var fJ=15000,hQ=1e4,HQ=1000;async function bQ(J){let Q=Date.now(),$={deviceId:null,connection:null,turns:new Map,lostAt:0,receipts:[],attest:"pending",attestWaiters:[],modelOps:new Map,personTerminals:new Set,bindsStarting:new Map},z=J.log??(()=>{}),E=async(M)=>{for(let[L,D]of[...$.turns]){$.turns.delete(L),J.onTurn?.(L,null),YJ(D);let _=await d($,J.agent,L).catch(()=>null);if(_)$.receipts.push({turn:D,failure:"vm_hands_bind_lost",unbound:_});z("vm_hands.bound_dropped",{reason:M})}},U=0,C=0;try{for(let M=0;!J.signal.aborted;M++){let L=await VQ(J,$).catch((_)=>{if(_ instanceof F&&$.deviceId===null&&_.code==="vm_hands_no_session"&&Date.now()-Q<AQ)return{closeCode:0,closeReason:"vm_hands_no_session"};if(_ instanceof F&&$.deviceId===null&&LQ.has(_.code)&&U<_Q&&Date.now()-Q<OQ)return U++,C=uJ(U),z("vm_hands.register_retry",{attempt:U,code:_.code,delay_ms:C}),{closeCode:0,closeReason:"vm_hands_register_retry"};if(_ instanceof F&&$.deviceId===null)throw _;return{closeCode:0,closeReason:_ instanceof Error?_.message:String(_)}});if(z("vm_hands.session_closed",{close_code:L.closeCode,reason:L.closeReason.slice(0,120),registered:$.deviceId!==null}),L.closeCode===4401||$.attest==="refused")return;if(J.signal.aborted)return;if($.turns.size&&Date.now()-$.lostAt>=LJ)await E("reconnect_deadline");if($.served)$.served=!1,M=0;let D=L.closeReason==="drain_reconnect"?0:L.closeReason==="vm_hands_register_retry"?C:L.closeReason==="vm_hands_no_session"?Math.min(250*2**Math.min(M,5),2000):$.turns.size?Math.min(250*2**Math.min(M,5),5000,Math.max(0,$.lostAt+LJ-Date.now())):Math.min(500*2**M,30000);if(await new Promise((_)=>setTimeout(_,D)),$.turns.size&&Date.now()-$.lostAt>=LJ)await E("reconnect_deadline")}}finally{await E("session_ended")}}async function VQ(J,Q){let $=Q.deviceId,z=J.log??(()=>{}),E=$?`/app/local-runtime/session?device_id=${encodeURIComponent($)}`:FQ,U=`${J.apiOrigin.replace(/^http/,"ws")}${E}`,C=new WebSocket(U),M=0,L="",D=new Map,_=[],q=null,WJ=new Promise((Z)=>{C.onclose=(Y)=>{M=Y.code,L=Y.reason;for(let X of D.values())X.reject(new k(`session closed ${Y.code}`));for(let X of Q.attestWaiters.splice(0))X(!1);D.clear(),Z()}});C.onmessage=(Z)=>{let Y;try{Y=JSON.parse(String(Z.data))}catch{C.close(4400);return}if(Y.t==="res"){let X=Y;D.get(X.id)?.resolve({status:X.status,body:X.body}),D.delete(X.id);return}if(Y.t==="reconnect"){let X=Math.max(0,Math.min(Number(Y.after_ms)||0,HQ));z("vm_hands.drain_reconnect",{after_ms:X}),setTimeout(()=>{try{C.close(4001,"drain_reconnect")}catch{}},X).unref?.();return}if(!q?.(Y))_.push(Y)};let s=(Z,Y)=>new Promise((X,W)=>{let P=_.findIndex((A)=>Z.includes(A.t));if(P>=0){X(_.splice(P,1)[0]);return}let B=setTimeout(()=>{q=null,W(new F("vm_hands_no_register",`no ${Z.join("/")} in ${Y} ms`))},Y);q=(A)=>{if(!Z.includes(A.t))return!1;return clearTimeout(B),q=null,X(A),!0}}),i=(Z)=>C.send(JSON.stringify(Z)),I=(Z,Y)=>new Promise((X,W)=>{if(C.readyState!==WebSocket.OPEN){W(new k("session closed"));return}let P=GQ(),B=typeof Y.wait_ms==="number"?Y.wait_ms:0,A=setTimeout(()=>{if(!D.delete(P))return;W(new k(`no answer to ${Z.split("/").pop()} in ${B+fJ} ms`)),C.close(4000,"request_timeout")},B+fJ);D.set(P,{reject:(G)=>{clearTimeout(A),W(G)},resolve:({status:G,body:K})=>{clearTimeout(A);let N=null;try{N=K?JSON.parse(K):null}catch{}X({status:G,json:N})}}),i({t:"req",id:P,path:`${PQ}${Z}`,body:JSON.stringify(Y)})}),_J=()=>C.close(1001,"stopping");J.signal.addEventListener("abort",_J,{once:!0});let KJ,r=new Map,a=new Map,GJ=!1,FJ=new Set,PJ=Promise.resolve(),OJ=()=>{e().catch(()=>{return})},n=!1;try{await new Promise((G,K)=>{let N=setTimeout(()=>K(Error("session open timeout")),hQ);C.onopen=()=>{clearTimeout(N),z("vm_hands.ws_open",{}),G()},C.onerror=()=>{clearTimeout(N),K(Error("session socket error"))}});let Z=await s(["challenge"],5000);z("vm_hands.challenge",{});let Y=[],X=null,W;if($){i(await J.agent.helloFrame(Z.challenge,Q.connection));let G=await s(["ready"],1e4);if(typeof G.vm_hands_connection==="string")Q.connection=G.vm_hands_connection;if(W={device_id:$,...G.cadence?{cadence:G.cadence}:{}},typeof G.vm_hands_probe_script==="string"){if(X=G.vm_hands_probe_script,n=!0,J.agent.phase==="registered"&&!Q.turns.size)Q.attest="pending"}Q.served=!0,z("vm_hands.reconnected",{device_id:$});let K=Array.isArray(G.vm_hands_binds)?G.vm_hands_binds:G.vm_hands_bind?[G.vm_hands_bind]:[];for(let[N,T]of[...Q.turns]){if(K.some((S)=>S&&S.operation_id===T.claim.operation_id&&S.attempt_id===T.claim.attempt_id)){Y.push(T),z("vm_hands.bound_resumed",{operation_id:T.claim.operation_id});continue}Q.turns.delete(N),J.onTurn?.(N,null),YJ(T);let x=await d(Q,J.agent,N).catch((S)=>t(S,T,"vm_hands_bind_lost"));if(x)Q.receipts.push({turn:T,failure:"vm_hands_bind_lost",unbound:x});z("vm_hands.bound_dropped",{reason:"not_named_on_reconnect"})}}else{i(await J.agent.registerFrame(Z.challenge)),z("vm_hands.register_sent",{});let G=await Promise.race([s(["registered","register_refused"],1e4),WJ.then(()=>{throw new F(L==="register_failed"?"vm_hands_register_failed":"vm_hands_register_closed","session closed before the register was answered")})]);if(G.t==="register_refused")throw new F(G.code,"register refused");J.agent.registered();let K=G;if(W=K,Q.deviceId=K.device_id,typeof K.vm_hands_connection==="string")Q.connection=K.vm_hands_connection;if(typeof K.vm_hands_probe_script==="string"){if(X=K.vm_hands_probe_script,n=!0,J.agent.phase==="registered"&&!Q.turns.size)Q.attest="pending"}Q.served=!0,z("vm_hands.registered",{device_id:W.device_id})}let P=async()=>{let G=await I("/heartbeat",await J.heartbeat());if(G.status>=300)throw Error(`heartbeat ${G.status}`)};await P();let B=W.cadence?.presence_interval_ms??30000;if(KJ=setInterval(()=>{P().catch(()=>C.close())},B),J.onHeartbeatNow?.(()=>{P().catch(()=>C.close())}),Q.request=I,WJ.then(()=>{if(Q.request===I)Q.request=null}),X&&Q.attest!=="accepted"&&J.agent.phase==="registered"&&!Q.turns.size)sJ(X,Z.challenge);let A=(G,K)=>{a.set(G,K().catch(async(N)=>{if(await jJ(N,G),N instanceof k)C.close();else await e().catch(()=>{return})}).finally(()=>{a.delete(G)}))};Q.flushReceipts=OJ;try{await e();for(let G of Y)G.flush=()=>MJ(G),G.flush(),A(G.claim.attempt_id,()=>TJ(G));while(!J.signal.aborted&&C.readyState===WebSocket.OPEN){let G=await I("/operations/claim",{wait_ms:Math.min(W.cadence?.claim_wait_ms??RJ,RJ)});if(G.status===204||!G.json)continue;if(G.status>=300)throw Error(`claim ${G.status}`);let K=G.json;if(K.capability==="hands.connect"){if(a.has(K.attempt_id)){V({claim:K,eventSeq:0}).complete("failed",{error_code:"vm_hands_busy"}).catch(()=>{return});continue}A(K.attempt_id,()=>iJ(K))}else aJ(K).catch(()=>{return})}}catch(G){await jJ(G,null)}}finally{if(KJ)clearInterval(KJ);J.signal.removeEventListener("abort",_J);for(let Z of Q.turns.values())Z.flush=null;if(Q.flushReceipts===OJ)Q.flushReceipts=null;C.close(),await WJ,await Promise.all([...a.values()]);for(let Z of J.agent.liveBindIds){if(Q.turns.has(Z))continue;let Y=r.get(Z),X=Y?{...Y,eventSeq:Y.eventSeq+1}:null,W=await d(Q,J.agent,Z).catch((P)=>X?t(P,X,"vm_hands_bind_lost"):null);if(W&&X)Q.receipts.push({turn:X,failure:"vm_hands_bind_lost",unbound:W});z("vm_hands.bound_dropped",{reason:"bound_after_loss"})}}return{closeCode:M,closeReason:L};async function jJ(Z,Y){if(Z instanceof k){if(!GJ&&Q.turns.size)Q.lostAt=Date.now();GJ=!0}else{let X=Y!==null?[Y]:[...new Set([...Q.turns.keys(),...J.agent.liveBindIds])];if(Y===null)GJ=!0;for(let W of X){let P=Q.turns.get(W);if(Q.turns.delete(W),P)YJ(P),J.onTurn?.(W,null);if(J.agent.liveBindIds.includes(W)){let B=r.get(W)??P,A=B?{...B,eventSeq:B.eventSeq+1}:null,G=await d(Q,J.agent,W).catch((K)=>A?t(K,A,"vm_hands_bind_lost"):null);if(G&&A)Q.receipts.push({turn:A,failure:"vm_hands_bind_lost",unbound:G})}}}z("vm_hands.session_lost",{error:Z instanceof Error?Z.message:String(Z),bound_kept:Q.turns.size})}function V(Z,Y=I){let X=Y,W=Z.claim,P={attempt_id:W.attempt_id,attempt_token:W.attempt_token},B=encodeURIComponent(W.operation_id);return{fence:P,op:B,complete:(G,K={})=>X(`/operations/${B}/complete`,{...P,status:G,...K}),emit:(G,K)=>{let N=(Z.chain??Promise.resolve()).catch(()=>{return}).then(()=>A(G,K));return Z.chain=N,N}};async function A(G,K){let N=Z.eventSeq,T=(w)=>X(`/operations/${B}/events`,{...P,event_seq_start:w,events:[{kind:G,payload:{sequence:w,capability:String(W.capability??"hands.connect"),data:K}}]}),x=N,S=await T(x),v=S.status===409?S.json?.expected_event_seq:void 0;if(typeof v==="number"&&v>=0&&v!==N)x=v,S=await T(x);if(S.status<300)Z.eventSeq=x+1;return S}}function dJ(Z){return(Y,X)=>new Promise((W,P)=>{if(Q.turns.get(Z.claim.attempt_id)!==Z){P(Error("vm_hands_attempt_ended"));return}if(Z.outbox??=[],Z.outbox.length>=xQ){P(Error("vm_hands_outbox_full"));return}Z.outbox.push({kind:Y,data:X,resolve:W,reject:P}),Z.flush?.()})}function MJ(Z){if(FJ.has(Z))return;FJ.add(Z),(async()=>{try{while(Z.outbox?.length&&Q.turns.get(Z.claim.attempt_id)===Z&&C.readyState===WebSocket.OPEN){let Y=Z.outbox[0],X;try{X=await V(Z).emit(Y.kind,Y.data)}catch(W){if(W instanceof k)return;X={status:500}}if(Z.outbox.shift(),X.status<300)Y.resolve();else Y.reject(Error(`${Y.kind} refused ${X.status}`))}}finally{FJ.delete(Z)}})()}async function sJ(Z,Y){try{let X=await J.agent.attestFrame(Z,Y);if(C.readyState!==WebSocket.OPEN)return;i(X);let W=await s(["attested","attest_refused"],15000);Q.attest=W.t==="attested"?"accepted":"refused";for(let P of Q.attestWaiters.splice(0))P(Q.attest==="accepted");if(z("vm_hands.attest",{result:Q.attest,exit_code:X.exit_code,...W.t==="attest_refused"?{code:String(W.code??"")}:{}}),Q.attest==="refused")C.close(4401,"attest_refused")}catch(X){z("vm_hands.attest_failed",{code:X instanceof F?X.code:"probe_error"});for(let W of Q.attestWaiters.splice(0))W(!1);if(Q.attest!=="accepted")C.close(4000,"attest_unanswered")}}async function iJ(Z){let Y=n&&Q.attest==="pending",X=Z.vm_hands_attest,W=X;if(Q.attest==="refused"){z("vm_hands.claim_attest_refused",{said:typeof X==="string"?X.slice(0,16):typeof X,local:Q.attest}),await V({claim:Z,eventSeq:0}).complete("failed",{error_code:"vm_hands_unattested"}).catch(()=>{return});return}if(W==="accepted"){if(!Y&&Q.attest!=="accepted"){Q.attest="accepted";for(let j of Q.attestWaiters.splice(0))j(!0)}}else if(W!=="pending"||!Y&&Q.attest!=="accepted"){z("vm_hands.claim_attest_refused",{said:typeof X==="string"?X.slice(0,16):typeof X,local:Q.attest}),await V({claim:Z,eventSeq:0}).complete("failed",{error_code:"vm_hands_unattested"}).catch(()=>{return});return}if(Q.attest!=="accepted"){let j=Date.parse(Z.lease_until)-Date.now()-5000,R=Math.max(0,Math.min(XJ,Number.isFinite(j)?j:XJ));if(!await new Promise((QJ)=>{let O=setTimeout(()=>QJ(!1),R);Q.attestWaiters.push((H)=>{clearTimeout(O),QJ(H)})})){await V({claim:Z,eventSeq:0}).complete("failed",{error_code:"vm_hands_unattested"}).catch(()=>{return});return}}let P={claim:Z,eventSeq:0},{complete:B,emit:A}=V(P),G;try{if(Z.capability!=="hands.connect")throw new F("vm_hands_bind_invalid","not hands.connect");G=!EJ(Z)}catch(j){z("vm_hands.bind_refused",{code:j instanceof F?j.code:"unexpected"}),await B("failed",{error_code:j instanceof F?j.code:"vm_hands_bind_invalid"});return}let K,N=null,T=!1,x=(()=>{try{return UJ(Z).session_id.toLowerCase()}catch{return String(Z.run_id)}})();Q.bindsStarting.set(x,(Q.bindsStarting.get(x)??0)+1);try{let j=await SQ(Q,x);if(j)z("vm_hands.person_terminals_closed",{count:j});let R=UJ(Z),m=J.agent.bind(R);if(R.workspace_deferred)T=!0,N=rJ(P,()=>T);K=await m}catch(j){z("vm_hands.bind_refused",{code:j instanceof F?j.code:"unexpected"}),await B("failed",{error_code:j instanceof F?j.code:"vm_hands_bind_failed"});return}finally{T=!1;let j=(Q.bindsStarting.get(x)??1)-1;if(j>0)Q.bindsStarting.set(x,j);else Q.bindsStarting.delete(x)}let S=N?await N:-1,v={...K.ready_data??J.readyData({launchId:K.launch_id,claim:Z})};if(G)delete v.environment_installed;let w=!G&&K.snapshot_revision!==null&&K.snapshot_id!==null?{environment_installed:{snapshot_id:K.snapshot_id,installed_revision:K.snapshot_revision}}:{};r.set(Z.attempt_id,{claim:Z,launchId:K.launch_id,readyData:v,eventSeq:P.eventSeq,ackSeq:-1});let b={...v,...w,vm_hands:{layout:K.layout,policy_digest:K.policy_digest,launch_id:K.launch_id}},JJ=Date.now()+TQ,f=1,y=await A("hands.ready",b);while(DQ(y.status)&&!J.signal.aborted){let j=uJ(f);if(Date.now()+j>=JJ)break;await new Promise((R)=>setTimeout(R,j)),f++,y=await A("hands.ready",b)}if(f>1)z("vm_hands.ready_retried",{attempts:f,status_class:`${Math.floor(y.status/100)}xx`});if(r.delete(Z.attempt_id),y.status>=300){await oJ(Q,Z.attempt_id),await J.agent.boundRefused(Z.attempt_id),await B("failed",{error_code:IJ(y.json?.error,"vm_hands_probe_failed")});return}let g={claim:Z,launchId:K.launch_id,readyData:v,eventSeq:P.eventSeq,ackSeq:S};Q.turns.set(Z.attempt_id,g),g.flush=()=>MJ(g),J.onTurn?.(Z.attempt_id,dJ(g)),await TJ(g)}async function rJ(Z,Y){let{fence:X,op:W}=V(Z),P=Z.claim.attempt_id,B=-1;try{for(;;){let A=await I(`/operations/${W}/heartbeat`,{...X,control_ack_seq:B,wait_ms:AJ});if(!Y())return B;if(A.status>=300)return J.agent.abandonWorkspaceGrant(P),B;let G=(A.json?.controls??[]).slice().sort((K,N)=>K.seq-N.seq);for(let K of G){if(K.seq<=B)continue;if(B=K.seq,K.kind===cJ)return z("vm_hands.workspace_granted",{}),J.agent.grantWorkspace(P),B;return z("vm_hands.workspace_grant_abandoned",{control:/^[a-z][a-z0-9._-]{0,63}$/.test(K.kind)?K.kind:"other"}),J.agent.abandonWorkspaceGrant(P),B}}}catch{return J.agent.abandonWorkspaceGrant(P),B}}async function TJ(Z){let{fence:Y,op:X}=V(Z),W=null,P=null,B=J.agent.executorExited(Z.claim.attempt_id).then((A)=>{return P=A,null});J:for(;;){let A=await Promise.race([B,I(`/operations/${X}/heartbeat`,{...Y,control_ack_seq:Z.ackSeq,wait_ms:AJ})]);if(!A){W="vm_hands_executor_exited",z("vm_hands.executor_exited",{reason:P});break}if(A.status>=300)break;let G=(A.json?.controls??[]).slice().sort((K,N)=>K.seq-N.seq);for(let K of G){if(K.seq<=Z.ackSeq)continue;if(K.kind==="operation.cancel"||K.kind==="cancel"){Z.ackSeq=K.seq;break J}if(K.kind===mJ)try{await tJ(Z,K.payload??{})}catch(N){if(N instanceof k)throw N;W=N instanceof F?N.code:"environment_unavailable";let T=N&&typeof N==="object"&&"code"in N&&typeof N.code==="string"&&/^[a-z][a-z0-9_]{2,63}$/.test(N.code)?N.code:null;z("vm_hands.environment_refused",{code:W,cause:T});break J}Z.ackSeq=K.seq}}await nJ(Z,W)}async function CJ(Z,Y){let X=Date.now()+EQ;for(;;){let W=Q.request;if(W)try{return await W(Z,Y)}catch(P){if(!(P instanceof k))throw P}if(Date.now()>=X||J.signal.aborted)throw new k("kept operation has no live session");await new Promise((P)=>setTimeout(P,500))}}async function aJ(Z){let Y=Z,X={claim:Y,eventSeq:0},W=String(Z.capability??""),P=W===BQ,{complete:B,emit:A,fence:G,op:K}={...V(X,CJ)},N=Z.vm_hands_origin==="person"?"person":"model";if(!J.executeOp){await B("failed",{error_code:"vm_hands_op_unsupported"});return}if(Z.vm_hands_attest==="accepted"&&Q.attest==="pending"&&!(n&&Q.attest==="pending")){Q.attest="accepted";for(let O of Q.attestWaiters.splice(0))O(!0)}if(Q.attest!=="accepted"){let O=Date.parse(String(Z.lease_until??""))-Date.now()-5000,H=Q.attest==="refused"?0:Math.max(0,Math.min(XJ,Number.isFinite(O)?O:XJ));if(!(H>0&&await new Promise((ZJ)=>{let eJ=setTimeout(()=>ZJ(!1),H);Q.attestWaiters.push((JQ)=>{clearTimeout(eJ),ZJ(JQ)})}))){await B("failed",{error_code:"vm_hands_unattested"});return}}let T=J.agent.bindIdForRun(Y.run_id);if(N==="model"&&T===null){await B("failed",{error_code:"vm_hands_not_bound"});return}let x=W==="pty.start"&&N==="person"&&!Z.authority,S=x?wQ(Z):null;if(x&&((O)=>O===null?J.agent.liveBindIds.length>0||Q.bindsStarting.size>0:J.agent.liveSessionIds.includes(O)||Q.bindsStarting.has(O))(S)){await B("failed",{error_code:"vm_hands_bound"});return}if(NQ.has(W)&&!x&&J.agent.liveBindIds.length===0){await B("failed",{error_code:"vm_hands_not_bound"});return}let w=new AbortController,b=()=>w.abort();J.signal.addEventListener("abort",b,{once:!0});let JJ,f=new Promise((O)=>{JJ=O}),y={abort:w,settled:f},g=x?{...y,session:S}:null;if(g)Q.personTerminals.add(g);if(N==="model"&&T&&W!=="preview.serve.v1"){let O=Q.modelOps.get(T)??new Set;O.add(y),Q.modelOps.set(T,O),await J.agent.environmentInstalled(T,UQ,w.signal)}let j=-1,R=!1,m=!1,QJ=P?void 0:setInterval(()=>{if(m)return;m=!0,CJ(`/operations/${K}/heartbeat`,{...G,control_ack_seq:j,wait_ms:0}).then((O)=>{if(O.status>=300){w.abort();return}let H=O.json?.controls??[];for(let h of H)if(j=Math.max(j,h.seq),h.kind==="operation.cancel"||h.kind==="cancel")w.abort()},()=>w.abort()).finally(()=>{m=!1})},CQ);if(P)(async()=>{while(!R&&!w.signal.aborted){let O;try{O=await CJ(`/operations/${K}/heartbeat`,{...G,control_ack_seq:j,wait_ms:AJ})}catch{w.abort();return}if(R)return;if(O.status>=300){w.abort();return}let H=(O.json?.controls??[]).slice().sort((h,ZJ)=>h.seq-ZJ.seq);for(let h of H){if(h.seq<=j)continue;if(h.kind==="operation.cancel"||h.kind==="cancel")w.abort();else await J.controlOp?.({claim:Z,control:h}).catch(()=>!1);j=h.seq}}})();try{let O=await J.executeOp({kind:N,claim:Z,...N==="model"&&T?{bindId:T}:{},signal:w.signal,emit:async(h)=>{await A(h.kind,h.data??{})}}),H=await B(O.status,{...O.result?{result:O.result}:{},...O.error_code?{error_code:IJ(O.error_code,"vm_hands_op_failed")}:{}});J.opCompleted?.({claim:Z,status:O.status,acknowledged:H.status<300}),z("vm_hands.op",{capability:W,kind:N,status:O.status,code:O.error_code??null,...H.status>=300?{complete_status:H.status,complete_error:String(H.json?.error??"").slice(0,64)}:{}})}finally{if(R=!0,clearInterval(QJ),J.signal.removeEventListener("abort",b),T)Q.modelOps.get(T)?.delete(y);if(g)Q.personTerminals.delete(g);JJ()}}async function nJ(Z,Y){let X=Z.claim.attempt_id;if(Q.turns.get(X)===Z)Q.turns.delete(X);J.onTurn?.(X,null),YJ(Z);let W=await d(Q,J.agent,X).catch((P)=>t(P,Z,Y));if(!W)return;Q.receipts.push({turn:Z,failure:Y,unbound:W}),await e()}function t(Z,Y,X){let W=lJ(Z);return z("vm_hands.unbind_unverified",{operation_id:Y.claim.operation_id,code:W,attempt:0}),V(Y).emit(pJ,{code:W}).catch(()=>{return}),qQ(Q,J.agent,{turn:Y,failure:X},J.signal,z),null}function e(){return PJ=PJ.then(DJ,DJ),PJ}async function DJ(){while(Q.receipts.length){let{turn:Z,failure:Y,unbound:X}=Q.receipts[0],{complete:W,emit:P}=V(Z);try{if(await P("hands.stopped",{...Z.readyData,reason_code:Y?"failed":"cancelled",killed_verified:X.killed_verified,shredded:X.shredded,...X.srt_fallbacks?{vm_hands_srt_fallbacks:X.srt_fallbacks}:{}}),Y)await W("failed",{error_code:Y});else await W("cancelled",{error_code:"driver_stopped"})}catch(B){if(B instanceof k)return}Q.receipts.shift()}}async function tJ(Z,Y){let{fence:X,op:W}=V(Z),P=Y.snapshot_id;if(Y.version!==1||typeof P!=="string"||Object.keys(Y).length!==2)throw new F("vm_hands_env_invalid","invalid environment delivery");let B=await I(`/operations/${W}/environment`,{...X,snapshot_id:P}),A=B.json?.environment_sealed;if(B.status!==200||!A||B.json?.payload!==void 0)throw new F("vm_hands_env_invalid","environment not delivered sealed");let G=await J.agent.deliverEnvironment({attemptId:Z.claim.attempt_id,snapshotId:P,deviceId:Q.deviceId??"",sealed:A});if((await I(`/operations/${W}/environment-ack`,{...X,...G})).status>=300)throw new F("vm_hands_env_ack_refused","environment ack refused")}}
|
|
5
|
+
export{IQ as Ta,WQ as Ua,bQ as Va};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{hk as Q}from"./vm-hands-entry-lite-3rg3znp8.js";import{Tk as L,Yk as M}from"./vm-hands-entry-lite-e1xjfj57.js";import{randomBytes as X}from"crypto";import{chmodSync as R,existsSync as T,lstatSync as Y,mkdirSync as Z,readFileSync as U,renameSync as _,unlinkSync as V,writeFileSync as W}from"fs";import{homedir as $}from"os";import{dirname as B,join as K}from"path";function J(q=process.env,z=$()){let b=q.XDG_CONFIG_HOME?.trim()||K(z,".config"),G=L({env:q})==="staging"?["staging"]:[];return K(Q(b,...G),"credentials.json")}function k(q,z=J()){return Z(B(z),{recursive:!0,mode:448}),W(z,`${JSON.stringify(q,null,2)}
|
|
3
|
+
`,{mode:384}),R(z,384),z}function u(q=J()){if(!T(q))return null;try{let z=U(q,"utf8"),b=JSON.parse(z);if(typeof b.apiOrigin!=="string"||typeof b.clientId!=="string"||typeof b.accessToken!=="string"||typeof b.refreshToken!=="string"||typeof b.expiresAt!=="string"||typeof b.orgId!=="string"||!Array.isArray(b.scopes))return null;let E=new URL(b.apiOrigin).origin,G=M(E);if(G!==E)D(q,z,G);return{apiOrigin:G,clientId:b.clientId,accessToken:b.accessToken,refreshToken:b.refreshToken,expiresAt:b.expiresAt,scopes:b.scopes.filter((I)=>typeof I==="string"),orgId:b.orgId}}catch{return null}}function D(q,z,b){let E=`${q}.${process.pid}.${X(6).toString("hex")}.tmp`;try{let G=Y(q);if(!G.isFile()||process.platform!=="win32"&&G.uid!==process.geteuid?.())return;let I=JSON.parse(z);if(W(E,`${JSON.stringify({...I,apiOrigin:b},null,2)}
|
|
4
|
+
`,{mode:384,flag:"wx"}),R(E,384),U(q,"utf8")!==z)throw Error("credentials_changed");_(E,q)}catch{try{V(E)}catch{}}}function C(q=J()){if(!T(q))return!1;return V(q),!0}
|
|
5
|
+
export{J as S,k as T,u as U,C as V};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{Ak as h}from"./vm-hands-entry-lite-jd31as70.js";var P=["Click browser element","Double click browser element","Type text","Clear browser field","Press key","Scroll browser element into view","Drag on computer","Select browser option","Check browser control","Uncheck browser control","Hover browser element","Focus browser element","Open browser page","Reload browser page","Go back in browser","Go forward in browser","Take browser screenshot"],IA=32;function R(x){if(!Array.isArray(x)||x.length>32||!x.every((A)=>typeof A==="string"&&P.includes(A)))return;return x.slice()}var MA="__ARA_PI_TOOL_CONFINED_SCRIPT_5f0c9e2a__",VA=262144;function Y(x){if(!x||typeof x!=="object"||Array.isArray(x))return!1;let A=x,W=Object.keys(A);return W.length===2&&W.includes("template")&&W.includes("quoteDepth")&&typeof A.template==="string"&&A.template.length<=262144&&!A.template.includes("\x00")&&A.template.split("__ARA_PI_TOOL_CONFINED_SCRIPT_5f0c9e2a__").length===2&&(A.quoteDepth===1||A.quoteDepth===2||A.quoteDepth===3)}var I=2,j=33554432,Q=200000,C=4000000,D=240000,QA=`
|
|
3
|
+
...[executor output truncated]`,b=2000,f=1,p=16384,i=32768,q=128,_A=64,s=2097152,g=1,w=16384,d=32768,CA=8388608,c=1000,n=2500,t=2000,DA=n+t,r=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$/,o=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,v={text_only:4430,invalid_json:4431,invalid_cancel_request:4432,invalid_sdk_response:4433,claim_required:4434,invalid_claim:4435,executor_mismatch:4436,stale_generation:4437,fence_conflict:4438,frame_too_large:4439,result_too_large:4440,progress_too_large:4441,terminal_cleanup_started:4442,job_journal_unavailable:4443},l=new Map(Object.entries(v).map(([x,A])=>[A,x]));function RA(x,A){return A||(l.get(x)??"")}var u=["cancelled","command_failed","duplicate_request_id","duplicate_result_evicted","invalid_repl_response","invalid_request","process_group_cleanup_unconfirmed","repl_failed","result_too_large","repl_response_too_large","repl_transport_failed","request_ledger_full","request_journal_unavailable","request_outcome_uncertain","maintenance_held","request_not_found","resume_digest_mismatch","spawn_failed","stale_generation","timeout"],a=new Set(u),y=16384,e=["maintenance_held","invalid_job_request","jobs_disabled","job_not_found","job_conflict","job_capacity","job_journal_unavailable","job_not_running","job_lease_expired","job_input_sequence","job_input_backpressure","stale_generation","pty_unsupported","job_mode_mismatch"];class G extends Error{code;constructor(x){super(x);this.name="HandsProtocolError",this.code=x}}function k(x){return new TextEncoder().encode(x).byteLength}function F(x){return typeof x==="object"&&x!==null&&!Array.isArray(x)}function B(x,A){let W=new Set(A);return Object.keys(x).every((N)=>W.has(N))}function V(x){return typeof x==="string"&&r.test(x)}function Z(x){return Number.isSafeInteger(x)&&Number(x)>=1}function J(x){return typeof x==="string"&&o.test(x)}function _(x){return typeof x==="string"&&x.startsWith("pty-")&&J(x.slice(4))}function O(x){return[x.cols,x.rows].every((A)=>Number.isSafeInteger(A)&&Number(A)>=1&&Number(A)<=c)}function H(x){if(typeof x!=="string"||x.length>Math.ceil(w/3)*4||x.length%4!==0||!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(x))return-1;let A=x.endsWith("==")?2:x.endsWith("=")?1:0;if(A&&"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(x[x.length-A-1])&(A===2?15:3))return-1;let N=x.length/4*3-A;return N<=w?N:-1}function z(x){return typeof x==="string"&&/^[0-9a-f]{64}$/.test(x)}function $(x){if(k(x)>j)throw new G("frame_too_large");try{return JSON.parse(x)}catch{throw new G("invalid_json")}}function AA(x){let A=$(x);if(!F(A)||!B(A,["version","generation","id","tool","input","semanticDigest","lifecycleLeaseId","workspaceBefore"])||A.version!==I||!Z(A.generation)||!V(A.id)||!["bash","repl","resume","read","edit","write","pi_tool"].includes(String(A.tool))||!F(A.input)||A.lifecycleLeaseId!==void 0&&(A.tool!=="bash"||!J(A.lifecycleLeaseId))||A.workspaceBefore!==void 0&&(!(A.tool==="bash"||A.tool==="repl"||A.tool==="pi_tool"&&A.input.tool==="bash")||!F(A.workspaceBefore)||!B(A.workspaceBefore,["script"])||typeof A.workspaceBefore.script!=="string"||A.workspaceBefore.script.length>Q))throw new G("invalid_request");let W=F(A.workspaceBefore)&&typeof A.workspaceBefore.script==="string"?{workspaceBefore:{script:A.workspaceBefore.script}}:{};if(A.tool==="bash"){if(!B(A.input,["script","retainBackground","machineSdk"])||typeof A.input.script!=="string"||A.input.script.length>Q||A.input.retainBackground!==void 0&&A.input.retainBackground!==!0||A.input.machineSdk!==void 0&&A.input.machineSdk!==!0||A.semanticDigest!==void 0&&!z(A.semanticDigest))throw new G("invalid_request");return{version:I,generation:A.generation,id:A.id,tool:"bash",input:{script:A.input.script,...A.input.retainBackground===!0?{retainBackground:!0}:{},...A.input.machineSdk===!0?{machineSdk:!0}:{}},...A.semanticDigest===void 0?{}:{semanticDigest:A.semanticDigest},...A.lifecycleLeaseId===void 0?{}:{lifecycleLeaseId:A.lifecycleLeaseId},...W}}if(A.tool==="resume"){if(A.semanticDigest!==void 0||!B(A.input,["semanticDigest"])||!z(A.input.semanticDigest))throw new G("invalid_request");return{version:I,generation:A.generation,id:A.id,tool:"resume",input:{semanticDigest:A.input.semanticDigest}}}if(A.tool==="repl"){if(!B(A.input,["code"])||typeof A.input.code!=="string"||A.input.code.length>Q||A.semanticDigest!==void 0)throw new G("invalid_request");return{version:I,generation:A.generation,id:A.id,tool:"repl",input:{code:A.input.code},...W}}if(A.tool==="pi_tool"){let N=A.semanticDigest===void 0?xA(A.input):null;if(!N)throw new G("invalid_request");return{version:I,generation:A.generation,id:A.id,tool:"pi_tool",input:N,...W}}if(A.tool==="read"){if(!B(A.input,["path","offset","limit"])||typeof A.input.path!=="string"||A.input.path.length<1||A.input.path.length>Q||A.semanticDigest!==void 0||A.input.offset!==void 0&&(!Number.isSafeInteger(A.input.offset)||Number(A.input.offset)<1)||A.input.limit!==void 0&&(!Number.isSafeInteger(A.input.limit)||Number(A.input.limit)<1||Number(A.input.limit)>2000))throw new G("invalid_request");return{version:I,generation:A.generation,id:A.id,tool:"read",input:{path:A.input.path,...A.input.offset===void 0?{}:{offset:Number(A.input.offset)},...A.input.limit===void 0?{}:{limit:Number(A.input.limit)}}}}if(A.tool==="edit"){if(!B(A.input,["path","edits"])||typeof A.input.path!=="string"||A.input.path.length<1||!Array.isArray(A.input.edits)||A.input.edits.length<1||A.input.edits.length>128||A.semanticDigest!==void 0)throw new G("invalid_request");let N=A.input.path.length,X=[];for(let M of A.input.edits){if(!F(M)||!B(M,["oldText","newText"])||typeof M.oldText!=="string"||M.oldText.length<1||typeof M.newText!=="string")throw new G("invalid_request");if(N+=M.oldText.length+M.newText.length,N>C)throw new G("invalid_request");X.push({oldText:M.oldText,newText:M.newText})}return{version:I,generation:A.generation,id:A.id,tool:"edit",input:{path:A.input.path,edits:X}}}if(A.tool!=="write"||!B(A.input,["path","content"])||typeof A.input.path!=="string"||A.input.path.length<1||typeof A.input.content!=="string"||A.input.path.length+A.input.content.length>C||A.semanticDigest!==void 0)throw new G("invalid_request");return{version:I,generation:A.generation,id:A.id,tool:"write",input:{path:A.input.path,content:A.input.content}}}function L(x){return x===void 0||typeof x==="number"&&Number.isFinite(x)}function xA(x){let A=x.args;if(!B(x,["tool","args"])||!F(A))return null;if(x.tool==="bash")return B(A,["command","timeout"])&&typeof A.command==="string"&&A.command.length<=Q&&L(A.timeout)?{tool:"bash",args:{command:A.command,...A.timeout===void 0?{}:{timeout:Number(A.timeout)}}}:null;if(typeof A.path!=="string"||A.path.length>Q)return null;if(x.tool==="read")return B(A,["path","offset","limit"])&&L(A.offset)&&L(A.limit)?{tool:"read",args:{path:A.path,...A.offset===void 0?{}:{offset:Number(A.offset)},...A.limit===void 0?{}:{limit:Number(A.limit)}}}:null;if(x.tool==="write")return B(A,["path","content"])&&typeof A.content==="string"&&A.path.length+A.content.length<=C?{tool:"write",args:{path:A.path,content:A.content}}:null;if(x.tool!=="edit"||!B(A,["path","edits"])||!Array.isArray(A.edits))return null;let W=A.path.length,N=[];for(let X of A.edits){if(!F(X)||!B(X,["oldText","newText"])||typeof X.oldText!=="string"||typeof X.newText!=="string")return null;if(W+=X.oldText.length+X.newText.length,W>C)return null;N.push({oldText:X.oldText,newText:X.newText})}return{tool:"edit",args:{path:A.path,edits:N}}}function WA(x){if(!F(x))return null;if("thrown"in x)return B(x,["thrown"])&&typeof x.thrown==="string"?{thrown:x.thrown}:null;let A=x.structuredContent;if(!B(x,["content","details","structuredContent","isError"])||!Array.isArray(x.content)||x.isError!==void 0&&x.isError!==!0||A!==void 0&&(!F(A)||!B(A,["output","truncated","full_output_path","exit_code","wall_time_seconds"])||typeof A.output!=="string"||typeof A.truncated!=="boolean"||A.full_output_path!==void 0&&typeof A.full_output_path!=="string"||typeof A.exit_code!=="number"||typeof A.wall_time_seconds!=="number"))return null;let W=[];for(let N of x.content)if(F(N)&&N.type==="text"&&B(N,["type","text"])&&typeof N.text==="string")W.push({type:"text",text:N.text});else if(F(N)&&N.type==="image"&&B(N,["type","data","mimeType"])&&typeof N.data==="string"&&typeof N.mimeType==="string")W.push({type:"image",data:N.data,mimeType:N.mimeType});else return null;return{content:W,...x.details===void 0?{}:{details:x.details},...F(A)?{structuredContent:{output:String(A.output),truncated:A.truncated===!0,...typeof A.full_output_path==="string"?{full_output_path:A.full_output_path}:{},exit_code:Number(A.exit_code),wall_time_seconds:Number(A.wall_time_seconds)}}:{},...x.isError===!0?{isError:!0}:{}}}function BA(x){let A=$(x);if(!F(A)||!B(A,["version","generation","id","ok","exitCode","stdout","stderr","cwd","error","resumed","browserActions","automaticProgressImage","piToolOutcome","workerElapsedMs","environmentWaitMs","workspaceBefore"])||A.version!==I||!Z(A.generation)||!V(A.id)||typeof A.ok!=="boolean"||!Number.isSafeInteger(A.exitCode)||Number(A.exitCode)<0||Number(A.exitCode)>255||typeof A.stdout!=="string"||A.stdout.length>D||typeof A.stderr!=="string"||A.stderr.length>D||A.cwd!==void 0&&(typeof A.cwd!=="string"||A.cwd.length<1||A.cwd.length>4096||!A.cwd.startsWith("/")||A.cwd.includes("\x00"))||A.error!==void 0&&(typeof A.error!=="string"||A.error.length<1||A.error.length>b||!a.has(A.error))||A.browserActions!==void 0&&!R(A.browserActions)||A.automaticProgressImage!==void 0&&(A.automaticProgressImage!==!0||!A.ok)||A.resumed!==void 0&&A.resumed!==!0||A.workerElapsedMs!==void 0&&(!Number.isSafeInteger(A.workerElapsedMs)||Number(A.workerElapsedMs)<0)||A.environmentWaitMs!==void 0&&(!Number.isSafeInteger(A.environmentWaitMs)||Number(A.environmentWaitMs)<0)||A.workspaceBefore!==void 0&&!m(A.workspaceBefore)||A.ok&&(A.exitCode!==0||A.error!==void 0)||!A.ok&&A.exitCode===0)throw new G("invalid_result");let W=A.piToolOutcome===void 0?void 0:WA(A.piToolOutcome);if(W===null||W&&!A.ok)throw new G("invalid_result");return{version:I,generation:A.generation,id:A.id,ok:A.ok,exitCode:Number(A.exitCode),stdout:A.stdout,stderr:A.stderr,...typeof A.cwd==="string"?{cwd:A.cwd}:{},...A.browserActions!==void 0?{browserActions:R(A.browserActions)}:{},...typeof A.error==="string"?{error:A.error}:{},...A.automaticProgressImage===!0?{automaticProgressImage:!0}:{},...A.resumed===!0?{resumed:!0}:{},...W?{piToolOutcome:W}:{},...A.workerElapsedMs!==void 0?{workerElapsedMs:Number(A.workerElapsedMs)}:{},...A.environmentWaitMs!==void 0?{environmentWaitMs:Number(A.environmentWaitMs)}:{},...m(A.workspaceBefore)?{workspaceBefore:{exitCode:A.workspaceBefore.exitCode,stdout:A.workspaceBefore.stdout,stderr:A.workspaceBefore.stderr}}:{}}}function m(x){return F(x)&&B(x,["exitCode","stdout","stderr"])&&Number.isSafeInteger(x.exitCode)&&Number(x.exitCode)>=0&&Number(x.exitCode)<=255&&typeof x.stdout==="string"&&x.stdout.length<=y&&typeof x.stderr==="string"&&x.stderr.length<=y}function GA(x){let A=$(x);if(!F(A)||!B(A,["type","version","generation","id","sequence","stdout","stderr"])||A.type!=="progress"||A.version!==I||!Z(A.generation)||!V(A.id)||!Number.isSafeInteger(A.sequence)||Number(A.sequence)<1||typeof A.stdout!=="string"||A.stdout.length>D||typeof A.stderr!=="string"||A.stderr.length>D)throw new G("invalid_progress");return{type:"progress",version:I,generation:Number(A.generation),id:A.id,sequence:Number(A.sequence),stdout:A.stdout,stderr:A.stderr}}function NA(x){let A=$(x);if(!F(A)||!B(A,["type","version","generation","fenceId","executorLaunchId","requestCancelVersion","managedJobsVersion","browserRunEnvelopeVersion","terminalCleanupVersion","guestMemoryVersion","guestMemoryDiagnosticsVersion","piToolsVersion","piToolsConfinement","backgroundBashVersion","machineSdkVersion","executionTimingVersion","environmentWaitVersion","workspaceBeforeVersion"])||A.type!=="claim"||A.version!==I||!Z(A.generation)||!J(A.fenceId)||!J(A.executorLaunchId)||A.requestCancelVersion!==void 0&&A.requestCancelVersion!==1||A.managedJobsVersion!==void 0&&A.managedJobsVersion!==f||A.guestMemoryVersion!==void 0&&A.guestMemoryVersion!==1||A.guestMemoryDiagnosticsVersion!==void 0&&(A.guestMemoryDiagnosticsVersion!==1||A.guestMemoryVersion!==1)||A.terminalCleanupVersion!==void 0&&A.terminalCleanupVersion!==1||A.browserRunEnvelopeVersion!==void 0&&A.browserRunEnvelopeVersion!==1||A.piToolsVersion!==void 0&&A.piToolsVersion!==1||A.piToolsConfinement!==void 0&&(!Y(A.piToolsConfinement)||A.piToolsVersion!==1)||A.backgroundBashVersion!==void 0&&A.backgroundBashVersion!==1||A.machineSdkVersion!==void 0&&A.machineSdkVersion!==1||A.executionTimingVersion!==void 0&&A.executionTimingVersion!==1||A.environmentWaitVersion!==void 0&&(A.environmentWaitVersion!==1||A.executionTimingVersion!==1)||A.workspaceBeforeVersion!==void 0&&A.workspaceBeforeVersion!==1)throw new G("invalid_claim");return{type:"claim",version:I,generation:A.generation,fenceId:A.fenceId,executorLaunchId:A.executorLaunchId,...A.requestCancelVersion===1?{requestCancelVersion:1}:{},...A.managedJobsVersion===1?{managedJobsVersion:1}:{},...A.guestMemoryVersion===1?{guestMemoryVersion:1}:{},...A.guestMemoryDiagnosticsVersion===1?{guestMemoryDiagnosticsVersion:1}:{},...A.terminalCleanupVersion===1?{terminalCleanupVersion:1}:{},...A.browserRunEnvelopeVersion===1?{browserRunEnvelopeVersion:1}:{},...A.piToolsVersion===1?{piToolsVersion:1}:{},...Y(A.piToolsConfinement)?{piToolsConfinement:{template:A.piToolsConfinement.template,quoteDepth:A.piToolsConfinement.quoteDepth}}:{},...A.backgroundBashVersion===1?{backgroundBashVersion:1}:{},...A.machineSdkVersion===1?{machineSdkVersion:1}:{},...A.executionTimingVersion===1?{executionTimingVersion:1}:{},...A.environmentWaitVersion===1?{environmentWaitVersion:1}:{},...A.workspaceBeforeVersion===1?{workspaceBeforeVersion:1}:{}}}function UA(x){let A=$(x);if(!F(A)||!B(A,["type","version","generation","fenceId","executorLaunchId","workerVersion","workerArtifactSha256","requestCancelVersion","managedJobsVersion","lifecycleVersion","browserRunEnvelopeVersion","terminalCleanupVersion","guestMemoryVersion","guestMemoryDiagnosticsVersion","piToolsVersion","piToolsConfinementVersion","backgroundBashVersion","machineSdkVersion","executionTimingVersion","environmentWaitVersion","workspaceBeforeVersion"])||A.lifecycleVersion!==void 0&&A.lifecycleVersion!==1||A.workspaceBeforeVersion!==void 0&&A.workspaceBeforeVersion!==1||A.piToolsVersion!==void 0&&A.piToolsVersion!==1||A.piToolsConfinementVersion!==void 0&&(A.piToolsConfinementVersion!==1||A.piToolsVersion!==1)||A.backgroundBashVersion!==void 0&&A.backgroundBashVersion!==1||A.machineSdkVersion!==void 0&&A.machineSdkVersion!==1||A.executionTimingVersion!==void 0&&A.executionTimingVersion!==1||A.environmentWaitVersion!==void 0&&(A.environmentWaitVersion!==1||A.executionTimingVersion!==1)||A.guestMemoryVersion!==void 0&&A.guestMemoryVersion!==1||A.guestMemoryDiagnosticsVersion!==void 0&&(A.guestMemoryDiagnosticsVersion!==1||A.guestMemoryVersion!==1)||A.terminalCleanupVersion!==void 0&&A.terminalCleanupVersion!==1||A.browserRunEnvelopeVersion!==void 0&&A.browserRunEnvelopeVersion!==1||A.type!=="claim_ack"||A.version!==I||!Z(A.generation)||!J(A.fenceId)||!J(A.executorLaunchId)||!Number.isSafeInteger(A.workerVersion)||Number(A.workerVersion)<1||!z(A.workerArtifactSha256)||A.requestCancelVersion!==void 0&&A.requestCancelVersion!==1||A.managedJobsVersion!==void 0&&A.managedJobsVersion!==f)throw new G("invalid_claim_ack");return{type:"claim_ack",...A.guestMemoryVersion===1?{guestMemoryVersion:1}:{},...A.guestMemoryDiagnosticsVersion===1?{guestMemoryDiagnosticsVersion:1}:{},...A.terminalCleanupVersion===1?{terminalCleanupVersion:1}:{},...A.browserRunEnvelopeVersion===1?{browserRunEnvelopeVersion:1}:{},...A.lifecycleVersion===1?{lifecycleVersion:1}:{},...A.piToolsVersion===1?{piToolsVersion:1}:{},...A.piToolsConfinementVersion===1?{piToolsConfinementVersion:1}:{},...A.backgroundBashVersion===1?{backgroundBashVersion:1}:{},...A.machineSdkVersion===1?{machineSdkVersion:1}:{},...A.executionTimingVersion===1?{executionTimingVersion:1}:{},...A.environmentWaitVersion===1?{environmentWaitVersion:1}:{},...A.workspaceBeforeVersion===1?{workspaceBeforeVersion:1}:{},version:I,generation:A.generation,fenceId:A.fenceId,executorLaunchId:A.executorLaunchId,workerVersion:Number(A.workerVersion),workerArtifactSha256:A.workerArtifactSha256,...A.requestCancelVersion===1?{requestCancelVersion:1}:{},...A.managedJobsVersion===1?{managedJobsVersion:1}:{}}}function YA(x){let A=$(x);if(!F(A)||!B(A,["type","version","generation","id","jobId","action","input"])||A.type!=="job"||A.version!==I||!Z(A.generation)||!V(A.id)||!V(A.jobId)||!F(A.input))throw new G("invalid_job_request");let W=A.input,N=Number.isSafeInteger(W.leaseExpiresAtMs)&&Number(W.leaseExpiresAtMs)>0,X=Number.isSafeInteger(W.sequence)&&Number(W.sequence)>=1;if(!(A.action==="start"?W.mode==="pty"?B(W,["mode","cols","rows","leaseExpiresAtMs"])&&_(A.jobId)&&O(W)&&N:B(W,["script","leaseExpiresAtMs"])&&typeof W.script==="string"&&W.script.length<=Q&&N:A.action==="inspect"?B(W,["after"])&&Number.isSafeInteger(W.after)&&Number(W.after)>=0:A.action==="input"?"dataBase64"in W?B(W,["sequence","dataBase64"])&&_(A.jobId)&&X&&H(W.dataBase64)>0:B(W,["sequence","data","eof"])&&X&&typeof W.data==="string"&&W.data.length<=p&&typeof W.eof==="boolean":A.action==="resize"?B(W,["sequence","cols","rows"])&&_(A.jobId)&&X&&O(W):A.action==="renew"?B(W,["leaseExpiresAtMs"])&&N:A.action==="cancel"&&B(W,[])))throw new G("invalid_job_request");return A}function FA(x){let A=$(x);if(!F(A)||!B(A,["type","version","generation","id","ok","job","error"])||A.type!=="job_result"||A.version!==I||!Z(A.generation)||!V(A.id))throw new G("invalid_job_result");if(A.ok===!1&&A.job===void 0&&typeof A.error==="string"&&e.some((U)=>U===A.error))return A;let W=A.job;if(A.ok!==!0||A.error!==void 0||!F(W)||!B(W,["jobId","state","startedAtMs","finishedAtMs","leaseExpiresAtMs","exitCode","inputSequence","output","firstCursor","nextCursor","truncated","process","environmentRevision","environmentSnapshotId","pty"])||!V(W.jobId)||!["starting","running","exited","cancelled","expired","uncertain"].includes(String(W.state))||!Number.isSafeInteger(W.startedAtMs)||Number(W.startedAtMs)<1||!Number.isSafeInteger(W.leaseExpiresAtMs)||Number(W.leaseExpiresAtMs)<1||W.finishedAtMs!==null&&(!Number.isSafeInteger(W.finishedAtMs)||Number(W.finishedAtMs)<Number(W.startedAtMs))||W.exitCode!==null&&(!Number.isSafeInteger(W.exitCode)||Number(W.exitCode)<0||Number(W.exitCode)>255)||!Number.isSafeInteger(W.inputSequence)||Number(W.inputSequence)<0||!Number.isSafeInteger(W.firstCursor)||Number(W.firstCursor)<1||!Number.isSafeInteger(W.nextCursor)||Number(W.nextCursor)<Number(W.firstCursor)-1||typeof W.truncated!=="boolean"||!Array.isArray(W.output)||W.output.length>q)throw new G("invalid_job_result");if(W.environmentRevision===void 0!==(W.environmentSnapshotId===void 0)||W.environmentRevision!==void 0&&(!Number.isSafeInteger(W.environmentRevision)||Number(W.environmentRevision)<1||!J(W.environmentSnapshotId)))throw new G("invalid_job_result");let N=Number(W.firstCursor)-1,X=0;for(let U of W.output){if(!F(U)||!B(U,["cursor","stream","text"])||!Number.isSafeInteger(U.cursor)||Number(U.cursor)<=N||Number(U.cursor)>Number(W.nextCursor)||!["stdout","stderr"].includes(String(U.stream))||typeof U.text!=="string")throw new G("invalid_job_result");X+=U.text.length,N=Number(U.cursor)}if(X>i)throw new G("invalid_job_result");let M=W.state==="starting"||W.state==="running";if(M&&(W.finishedAtMs!==null||W.exitCode!==null)||!M&&W.finishedAtMs===null||W.state==="uncertain"&&W.exitCode!==null||W.state==="exited"&&W.exitCode===null||W.state==="cancelled"&&W.exitCode!==130||W.state==="expired"&&W.exitCode!==124)throw new G("invalid_job_result");if(W.process!==void 0){let U=W.process;if(!F(U)||!B(U,["pid","processGroupId","executorLaunchId"])||!Number.isSafeInteger(U.pid)||Number(U.pid)<1||U.processGroupId!==U.pid||!J(U.executorLaunchId)||!["starting","running"].includes(String(W.state)))throw new G("invalid_job_result")}if(W.pty!==void 0){let U=W.pty;if(!F(U)||!B(U,["version","cols","rows","output","cleanup"])||U.version!==g||!_(W.jobId)||!O(U)||W.output.length!==0||!Array.isArray(U.output)||U.output.length>q||(M?U.cleanup!=="pending":W.state==="uncertain"?U.cleanup!=="unconfirmed":U.cleanup!=="confirmed")||W.state==="running"&&(W.process===void 0||W.environmentRevision===void 0))throw new G("invalid_job_result");let S=Number(W.firstCursor)-1,E=0;for(let K of U.output){if(!F(K)||!B(K,["cursor","dataBase64"])||!Number.isSafeInteger(K.cursor)||Number(K.cursor)<=S||Number(K.cursor)>Number(W.nextCursor))throw new G("invalid_job_result");let T=H(K.dataBase64);if(T<=0||(E+=T)>d)throw new G("invalid_job_result");S=Number(K.cursor)}}return A}function LA(x){if(k(x)>s)throw new G("frame_too_large");let A=$(x);if(!F(A)||!B(A,["version","sessionId","operationId","runId","deviceId","rootId","workspace","binding","targetRevision","rootGrantRevision","generation","fenceId","executorLaunchId","job"])||A.version!==g||![A.sessionId,A.operationId,A.runId].every(V)||![A.deviceId,A.rootId,A.fenceId,A.executorLaunchId].every(J)||!Z(A.generation)||!Number.isSafeInteger(A.rootGrantRevision)||Number(A.rootGrantRevision)<1||!["workspace_source","mcp_control"].includes(String(A.binding))||!Number.isSafeInteger(A.targetRevision)||Number(A.targetRevision)<0||A.binding==="workspace_source"&&A.targetRevision!==0||!F(A.workspace))throw new G("invalid_pty_receipt");if(!h(A.workspace))throw new G("invalid_pty_receipt");let W=FA(JSON.stringify({type:"job_result",version:I,generation:A.generation,id:A.operationId,ok:!0,job:A.job}));if(!W.ok||!W.job.pty||W.job.pty.output.length!==0||W.job.process&&W.job.process.executorLaunchId!==A.executorLaunchId)throw new G("invalid_pty_receipt");return A}function OA(x){let A=$(x);if(!F(A)||!B(A,["type","version","generation","id","targetId"])||A.type!=="cancel_request"||A.version!==I||!Z(A.generation)||!V(A.id)||!V(A.targetId))throw new G("invalid_cancel_request");return A}function zA(x){let A=$(x);if(!F(A)||!B(A,["type","version","generation","id","targetId","status"])||A.type!=="cancel_ack"||A.version!==I||!Z(A.generation)||!V(A.id)||!V(A.targetId)||!["cancelled","settled","not_found","unsupported","unconfirmed"].includes(String(A.status)))throw new G("invalid_cancel_ack");return A}function SA(x){let A=JSON.stringify(x);return AA(A),A}function TA(x){let A=JSON.stringify(x);return BA(A),A}function qA(x){let A=JSON.stringify(x);return GA(A),A}function wA(x){let A=JSON.stringify(x);return NA(A),A}function yA(x){let A=JSON.stringify(x);return UA(A),A}
|
|
4
|
+
export{IA as wi,MA as xi,VA as yi,I as zi,j as Ai,Q as Bi,C as Ci,D as Di,QA as Ei,b as Fi,f as Gi,p as Hi,i as Ii,q as Ji,_A as Ki,s as Li,g as Mi,w as Ni,d as Oi,CA as Pi,c as Qi,n as Ri,t as Si,DA as Ti,v as Ui,RA as Vi,u as Wi,y as Xi,e as Yi,G as Zi,V as _i,Z as $i,J as aj,_ as bj,z as cj,AA as dj,BA as ej,GA as fj,NA as gj,UA as hj,YA as ij,FA as jj,LA as kj,OA as lj,zA as mj,SA as nj,TA as oj,qA as pj,wA as qj,yA as rj};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{resolve as H,sep as J}from"path";var K=[[".ssh"],[".gnupg"],[".aws"],[".azure"],[".kube"],[".docker"],[".infisical"],[".password-store"],[".terraform.d"],[".config","ara"],[".config","reason"],[".config","gh"],[".config","gcloud"],[".config","infisical"],[".config","op"],[".config","1password"],[".config","pass"],[".local","share","keyrings"],["library","keychains"],["library","application support","so.ara.desktop"],["appdata","roaming","github cli"],["appdata","roaming","gcloud"],["appdata","roaming","microsoft","credentials"],["appdata","local","microsoft","credentials"],["appdata","roaming","microsoft","protect"],["appdata","roaming","1password"],["appdata","local","1password"],["appdata","roaming","microsoft","windows","start menu","programs","startup"],["documents","windowspowershell"],["documents","powershell"],["appdata","local","reason"]],V=[[".codex","config.toml"],[".cursor","mcp.json"],[".claude","settings.json"],[".claude","settings.local.json"],[".cargo","credentials"],[".cargo","credentials.toml"],[".gem","credentials"],[".config","git","config"],[".config","git","credentials"],[".config","pip","pip.conf"]],Z=new Set([".bash_login",".bash_profile",".bashrc",".bunfig.toml",".claude.json",".env",".envrc",".git-credentials",".gitconfig",".mcp.json",".netrc",".npmrc",".profile",".pypirc",".terraformrc",".yarnrc",".yarnrc.yml",".zlogin",".zlogout",".zprofile",".zshenv",".zshrc","auth.json","credentials.json","credentials.tfrc.json","local-daemon.json","local-device.json","mcp.json"]),$=[".key",".p12",".pfx",".pem"];function B(z,j){if(z.length<j.length)return!1;for(let k=0;k<=z.length-j.length;k+=1)if(j.every((b,G)=>z[k+G]===b))return!0;return!1}function A(z){let j=H(z).split(J).filter(Boolean).map((b)=>b.toLowerCase());if(K.some((b)=>B(j,b)))return!0;if(V.some((b)=>B(j,b)))return!0;let k=j.at(-1)??"";return Z.has(k)||k.startsWith(".env.")||$.some((b)=>k.endsWith(b))}
|
|
3
|
+
export{K as wh,V as xh,Z as yh,$ as zh,A as Ah};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{dl as j}from"./vm-hands-entry-lite-e4hwb89r.js";var x=25,q=1e5,B=/^[0-9a-f]{64}$/,F=j.object({day:j.string().regex(/^\d{4}-\d{2}-\d{2}$/),sent:j.number().int().min(0).max(q),received:j.number().int().min(0).max(q)}),W=j.object({machine:j.string().min(1).max(200),person:j.string().min(1).max(200),team:j.string().min(1).max(200),team_id:j.string().min(1).max(200).optional(),workspace:j.boolean().optional(),version:j.string().max(64).optional(),wait_seconds:j.number().int().min(0).max(x).optional(),message_counts:j.array(F).max(14).optional().catch(void 0),endpoint:j.string().regex(B).optional().catch(void 0)}),H=j.discriminatedUnion("kind",[j.object({id:j.string(),kind:j.literal("who"),all:j.boolean().optional()}),j.object({id:j.string(),kind:j.literal("send"),to:j.string(),body:j.string(),from_name:j.string(),from_agent:j.string(),wake:j.boolean(),reply_to:j.string().max(100).optional(),notify:j.boolean().optional()})]),Y=j.object({job:H.nullable(),retry_after_seconds:j.number().optional()}),K=j.object({address:j.string(),person:j.string(),machine:j.string(),agent:j.string(),repo:j.string().nullable(),branch:j.string().nullable(),status:j.string(),since:j.number().nullable(),doing:j.string().nullable(),worker:j.boolean(),tier:j.string().max(10).optional()}),Q=j.object({person:j.string(),machine:j.string(),online:j.boolean()}),V=j.object({team:j.string().nullable(),sessions:j.array(K).max(2000),machines:j.array(Q).max(500),all:j.boolean().optional()}),Z=j.object({address:j.string().max(300),state:j.string().max(40),note:j.string().max(500)}),b=j.union([j.object({who:V}),j.object({sent:j.object({ids:j.array(j.string().max(100)).max(500),recipients:j.array(j.string().max(300)).max(500),from:j.string().max(300),deliveries:j.array(Z).max(500).optional()})}),j.object({error:j.string().min(1).max(2000)})]),$=j.object({id:j.string().max(100),from:j.string().max(300),from_agent:j.string().max(100).nullable(),to:j.string().max(300),reply_to:j.string().max(100).nullable(),body:j.string().max(64000),sent_at:j.number()}),f=j.object({messages:j.array($).max(100),team:j.string().min(1).max(200).optional(),team_id:j.string().min(1).max(200).optional(),workspace:j.boolean().optional()});
|
|
3
|
+
export{x as Qa,F as Ra,Y as Sa};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{randomBytes as a}from"crypto";import{chmodSync as o,closeSync as y,constants as Lz,linkSync as n,lstatSync as H,mkdirSync as t,openSync as Rz,readdirSync as P,readFileSync as s,readlinkSync as D,renameSync as C,rmdirSync as e,symlinkSync as O,unlinkSync as W}from"fs";import{createRequire as Wz}from"module";import{constants as Az}from"os";import{basename as k,join as q,sep as _z}from"path";import{existsSync as N,lstatSync as g,readdirSync as Mz,readFileSync as Xz,readlinkSync as Kz,realpathSync as Yz}from"fs";import{join as R,sep as Bz}from"path";function d(z,...J){let Q=R(z,"ara"),V=R(z,"reason");if(!p(Q))return R(V,...J);if(!N(V))return R(Q,...J);return N(R(Q,...J))&&!N(R(V,...J))?R(Q,...J):R(V,...J)}function p(z){try{let J=g(z);if(!J.isSymbolicLink())return J.isDirectory();return Kz(z)!=="reason"&&N(z)}catch{return!1}}function m(z,J=[]){if(!p(z))return!1;let Q;try{Q=[z,...Mz(z,{withFileTypes:!0}).filter((V)=>V.isDirectory()).map((V)=>R(z,V.name))]}catch{return!1}return Q.some((V)=>["connect","connect-once"].filter((Z)=>!J.includes(R(V,Z))).some((Z)=>{let G=R(V,Z,"worker.json");try{g(G)}catch{return!1}try{let M=JSON.parse(Xz(G,"utf8"))?.stateDirectory;if(typeof M!=="string")return!0;let X=($,K)=>$===K||$.startsWith(K+Bz);return X(M,z)||X(x(M),x(z))}catch{return!0}}))}function x(z){try{return Yz(z)}catch{return z}}var u=new Set(["credentials.json","local-device.json","local-device.revoked.json","local-device.auth-migration.json","local-device.json.registration-pending.json","local-daemon.json","local-daemon.json.workspaces.json","local-root-fingerprint-key.json","instances","workspaces"]),S=new Set(["local-device.proxy.json"]),Ez=new Set(["local-device.key","local-device.binding"]),c=new Map;function Pz(z,J,Q){let V=q(z,"ara");if(process.platform==="win32"||/[/\\]\.reason-ssh[/\\][^/\\]+[/\\]installer-home[/\\]\.config$/.test(z))return{state:Y(V)?.isDirectory()?"kept":"absent"};return Jz(V,q(z,"reason"),{linkAlways:!0,kept:(Z)=>m(Z,Q??[]),native:J===void 0?Gz:()=>J},Q!==void 0)}function mz(z,...J){return Pz(z),d(z,...J)}function yz(z,J=process.platform){if(J==="win32")return q(z,"AppData","Local","Reason","Logs");let Q=q(z,"Library","Logs");if(J==="darwin")for(let V of[""," Staging"," Development"])Jz(q(Q,`Ara${V}`),q(Q,`Reason${V}`),{linkAlways:!1,kept:()=>!1,native:Gz});return q(Q,"Reason")}var zz="config_rename_unavailable:busy";function Jz(z,J,Q,V=!1){let Z=V?void 0:c.get(z);if(Z)return Z;let G;try{G=wz(z,J,Q)}catch(M){let X=`config_rename_unavailable:${E(M)??"failed"}`;try{return{state:Y(z)?.isDirectory()?"kept":"absent",problem:X}}catch{return{state:"kept",problem:X}}}if(!(G.state==="absent"&&Q.linkAlways)&&G.problem!==zz&&!(G.state==="kept"&&!G.problem))c.set(z,G);return G}function wz(z,J,Q){Uz(J,Q.native);let V=!1;for(let Z=0;Z<8;Z+=1){let G=Y(z);if(G?.isSymbolicLink())return D(z)===k(J)?{state:V?"renamed":"linked"}:{state:"kept"};if(!G){if(j(J))B(()=>W(J),"ENOENT");if(!(V||Q.linkAlways)||!U(J))return{state:"absent"};let $=T(J,"link");O(k(J),$);try{B(()=>C($,z),"EISDIR","ENOTEMPTY","EEXIST","ENOTDIR")}finally{B(()=>W($),"ENOENT")}continue}if(!G.isDirectory())return{state:"absent"};if(Q.kept(z))return i(J),{state:"kept"};let M=Q.native();if(!M)return i(J),{state:"kept",problem:"config_rename_unavailable:no_native"};let X=Oz(M,z);if(!X)return{state:"kept",problem:zz};try{if(H(z).isSymbolicLink())continue;let $=Dz(M,z,J);if($)return{state:"kept",problem:$};V=!0}finally{X()}}throw Object.assign(Error("legacy directory rename did not settle"),{code:"unsettled"})}function Dz(z,J,Q){let V=Y(Q);if(!V||j(Q)){if(!V)O(k(Q),Q);try{z.exchange(J,Q)}catch($){if(j(Q))B(()=>W(Q),"ENOENT");return`config_rename_unavailable:${E($)??"exchange_failed"}`}return null}if(!V.isDirectory())return"config_rename_unavailable:ENOTDIR";if(V.dev!==H(J).dev)return"config_rename_unavailable:EXDEV";let Z=[T(Q,"probe"),T(Q,"probe")];try{O("a",Z[0]),O("b",Z[1]),z.exchange(Z[0],Z[1])}catch($){return`config_rename_unavailable:${E($)??"exchange_failed"}`}finally{for(let $ of Z)B(()=>W($),"ENOENT")}let G=qz(Q);for(let $ of Ez){let K=Y(q(Q,$)),L=Y(q(J,$));if(K&&L&&K.ino!==L.ino)t(`${G}-replaced`,{mode:448,recursive:!0}),C(q(Q,$),q(`${G}-replaced`,$))}let M={linked:new Map,unitsKept:new Set};Qz(J,Q,"",M);let X=T(Q,"rename");O(k(Q),X);try{z.exchange(J,X)}catch($){return B(()=>W(X),"ENOENT"),`config_rename_unavailable:${E($)??"exchange_failed"}`}return Vz(X,Q,M,G),null}function v(z){return z===""||!z.includes(_z)}function Qz(z,J,Q,V){let Z=v(Q)&&b(q(J,Q),q(z,Q));if(Z)V.unitsKept.add(Q);for(let G of P(q(z,Q))){if(Z&&(u.has(G)||S.has(G)))continue;let M=q(Q,G),X=q(z,M),$=q(J,M),K=Y(X);if(!K)continue;let L=Y($);if(K.isDirectory()){if(!L)B(()=>t($,{mode:K.mode&4095}),"EEXIST"),o($,K.mode&4095);if(U($))Qz(z,J,M,V)}else if(!L){if(K.isSymbolicLink())B(()=>O(D(X),$),"EEXIST");else if(B(()=>n(X,$),"EEXIST","ENOENT"))V.linked.set(M,K.ino)}}}function Uz(z,J){let Q;try{if(!U(z))return;Q=P(z)}catch{return}for(let V of Q){let Z=/^\.(rename|link|probe|claim)-(\d+)-[0-9a-f]+$/.exec(V);if(!Z)continue;let G=q(z,V),M=Y(G);if(!M)continue;if(!M.isDirectory()){if(!l(Number(Z[2])))B(()=>W(G),"ENOENT");continue}let X=J(),$=null;if(X){try{$=X.lock(G)}catch{continue}if(!$)continue}else if(l(Number(Z[2])))continue;try{let K=T(z,"claim");if(B(()=>C(G,K),"ENOENT"))Vz(K,z,null,qz(z))}finally{$?.()}}}function Vz(z,J,Q,V){for(let[Z,G]of Q?.linked??[])if(!Y(q(z,Z))&&Y(q(J,Z))?.ino===G)B(()=>W(q(J,Z)),"ENOENT");if(Zz(z,J,"",Q),B(()=>e(z),"ENOTEMPTY","EEXIST"))return;C(z,V),o(V,448)}function Zz(z,J,Q,V){let Z=v(Q)&&(V?V.unitsKept.has(Q):b(q(J,Q),q(z,Q)));for(let G of P(q(z,Q))){let M=q(Q,G),X=q(z,M),$=q(J,M),K=H(X),L=Y($);if(L&&K.ino===L.ino&&K.dev===L.dev){W(X);continue}if(K.isFile()&&L?.isFile()&&V?.linked.get(M)===L.ino){C(X,$);continue}if(Z&&(u.has(G)||S.has(G)))continue;if(!L){if(K.isFile()){if(B(()=>n(X,$),"EEXIST"))W(X)}else B(()=>C(X,$),"EEXIST","ENOTEMPTY");continue}if(K.isDirectory()&&L.isDirectory())Zz(z,J,M,V),B(()=>e(X),"ENOTEMPTY","EEXIST")}}function sz(z){let J=q(z,"ara"),Q=q(z,"reason");if(!U(J)||!U(Q))return null;let V=["",...P(J,{withFileTypes:!0}).filter((Z)=>Z.isDirectory()&&!Z.name.startsWith(".")).map((Z)=>Z.name)];for(let Z of V){let G=q(J,Z),M=q(Q,Z);if(!b(G,M)||!b(M,G))continue;if([...u,...S].some(($)=>f(q(G,$),q(M,$))===!1))return Z}return null}function cz(z){let J=q(z,"ara"),Q=q(z,"reason");if(!U(J)||!U(Q))return null;let V=(Z)=>{for(let G of P(q(J,Z))){let M=q(Z,G);if(v(Z)&&(G==="connect"||G==="connect-once"))continue;let X=H(q(J,M)),$=Y(q(Q,M));if(!$||X.ino===$.ino&&X.dev===$.dev)continue;if(X.isDirectory()&&$.isDirectory()&&!$.isSymbolicLink()){let K=V(M);if(K!==null)return K}else if(X.isSymbolicLink()||$.isSymbolicLink()){if(!(X.isSymbolicLink()&&$.isSymbolicLink()&&D(q(J,M))===D(q(Q,M))))return M}else if(f(q(J,M),q(Q,M))!==!0)return M}return null};return V("")}function f(z,J){let Q=Y(z),V=Y(J);if(!Q&&!V)return null;if(!Q||!V||Q.isDirectory()!==V.isDirectory())return!1;if(Q.ino===V.ino&&Q.dev===V.dev)return!0;if(Q.isDirectory())return[...new Set([...P(z),...P(J)])].every((G)=>f(q(z,G),q(J,G))===!0);try{return s(z).equals(s(J))}catch{return!1}}function b(z,J){for(let Q of u)if($z(q(z,Q),q(J,Q)))return!0;return!1}function $z(z,J){let Q=Y(z);if(!Q)return!1;let V=Y(J);if(!V)return!0;if(Q.isDirectory()){if(!V.isDirectory())return!0;return P(z).some((Z)=>$z(q(z,Z),q(J,Z)))}if(Q.isSymbolicLink())return!V.isSymbolicLink()||D(z)!==D(J);return Q.ino!==V.ino||Q.dev!==V.dev}function i(z){if(j(z))B(()=>W(z),"ENOENT")}function qz(z){return q(z,`.pre-rename-${new Date().toISOString().replace(/[:.]/g,"-")}-${a(3).toString("hex")}`)}function j(z){try{return H(z).isSymbolicLink()&&D(z)===k(z)}catch{return!1}}function U(z){let J=Y(z);return J!==null&&J.isDirectory()}function Oz(z,J){for(let Q=0;Q<40;Q+=1){let V=z.lock(J);if(V)return V;Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,50)}return null}function T(z,J){return q(z,`.${J}-${process.pid}-${a(6).toString("hex")}`)}function l(z){if(z===process.pid)return!1;try{return process.kill(z,0),!0}catch(J){return E(J)==="EPERM"}}function Y(z){try{return H(z)}catch(J){if(E(J)==="ENOENT"||E(J)==="ENOTDIR")return null;throw J}}function B(z,...J){try{return z(),!0}catch(Q){if(J.includes(E(Q)??""))return!1;throw Q}}function E(z){return z instanceof Error&&"code"in z&&typeof z.code==="string"?z.code:void 0}var I,Cz=2,Hz=4,Iz=2,Tz=2,r=-100;function Gz(){if(I!==void 0)return I;if(I=null,process.platform!=="linux"&&process.platform!=="darwin")return null;let z;try{z=Wz(import.meta.url)("bun:ffi")}catch{return null}let J=process.platform==="darwin",Q=J?"__error":"__errno_location",V=J?["/usr/lib/libSystem.B.dylib"]:["libc.so.6",`libc.musl-${process.arch==="arm64"?"aarch64":"x86_64"}.so.1`],{FFIType:Z}=z;for(let G of V)try{let M=J?"renamex_np":"renameat2",$=z.dlopen(G,{flock:{args:[Z.i32,Z.i32],returns:Z.i32},[Q]:{args:[],returns:Z.ptr},[M]:J?{args:[Z.ptr,Z.ptr,Z.u32],returns:Z.i32}:{args:[Z.i32,Z.ptr,Z.i32,Z.ptr,Z.u32],returns:Z.i32}}).symbols,K=$[Q]();if(K===null)continue;let L=(w)=>{let _=z.read.i32(K),A=Object.entries(Az.errno).find(([,F])=>F===_)?.[0]??`errno_${_}`;return Object.assign(Error(`${w} failed: ${A}`),{code:A})},h=(w)=>Buffer.from(`${w}\x00`,"utf8");return I={exchange(w,_){let A=h(w),F=h(_);if((J?$[M](z.ptr(A),z.ptr(F),Iz):$[M](r,z.ptr(A),r,z.ptr(F),Tz))!==0)throw L("exchange")},lock(w){let _=Rz(w,Lz.O_RDONLY);if($.flock(_,Cz|Hz)===0)return()=>y(_);let A=L("lock");if(y(_),A.code==="EWOULDBLOCK"||A.code==="EAGAIN")return null;throw A}},I}catch{}return null}
|
|
3
|
+
export{p as fk,Pz as gk,mz as hk,yz as ik,sz as jk,cz as kk,Gz as lk};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{Ra as X1}from"./vm-hands-entry-lite-33h8294z.js";import{Tk as H1}from"./vm-hands-entry-lite-e1xjfj57.js";import{Gl as j1}from"./vm-hands-entry-lite-pkk555dx.js";var D1=new Set(["<","\u02C2","\u1438","\u2039","\u3008","\u276C","\u276E","\u2770","\u16B2","\u2D66","\uD800\uDF2D","\uD81A\uDEEC","\uD834\uDE36","\u27E8","\u27EA","\u29FC","\u3008","\u300A","\uFE64","\uFF1C"]),m=(q)=>q===" "||q==="\t"||q===`
|
|
3
|
+
`||q==="\f"||q==="\r",x1=(q)=>q.length===1&&q>="!"&&q<="~",l=(q)=>q.length===1&&/[A-Za-z]/.test(q);function p(q){let X=Array.from(q),Y=(Z)=>{let $=Z+Math.min(X.length-Z,64),Q=Z;while(Q<$&&(m(X[Q])||X[Q]==="/"))Q+=1;let z=Q-Z,B=[];while(Q<$&&!m(X[Q])&&X[Q]!==">"&&X[Q]!=="\uFF1E")B.push(X[Q++]);return z+B.length===$-Z&&X.length-Z>64||!B.every(x1)||L1(B)};return X.map((Z,$)=>D1.has(Z)&&Y($+1)?"[":Z).join("")}function L1(q){let X=1;for(let Y of q){let Z=Y==="0"?"o":Y==="3"?"e":Y==="4"||Y==="@"?"a":Y==="5"||Y==="$"?"s":l(Y)?Y.toLowerCase():Y,$="reason".indexOf(Z),Q=$<0?0:1<<$;if(X=1|(l(Y)?0:X)|(X&Q)<<1,X&64)return!0}return!1}var G1=/[\u0000-\u0008\u000B-\u001F\u007F-\u009F]/g;function c(q){return p(q.replace(G1," ").replace(/[\u2028\u2029]/g," "))}var M1=["CLAUDECODE","CLAUDE_CODE_SESSION_ID","CODEX_THREAD_ID","CODEX_SESSION_ID","GROK_SESSION_ID","GROK_WORKSPACE_ROOT","GEMINI_CLI","CURSOR_AGENT","OPENCODE","COPILOT_CLI","COPILOT_AGENT_SESSION_ID","AI_AGENT"];function U1(q=process.env,X=Boolean(process.stderr.isTTY)){let Y=M1.some((Z)=>q[Z]!==void 0)||Object.keys(q).some((Z)=>Z.startsWith("CODEX_SANDBOX"))||Boolean(q.REASON_NETWORK_AGENT)||Boolean(q.TINCAN_AGENT);return X&&!Y}function E(q,X=U1()){return X?q:c(q)}import{spawnSync as C}from"child_process";import{createHash as P1}from"crypto";import{chmodSync as O1,closeSync as T1,existsSync as L,linkSync as R1,lstatSync as _1,mkdirSync as Y1,mkdtempSync as b1,openSync as f1,readdirSync as I1,readFileSync as A1,readSync as y1,realpathSync as S1,renameSync as M,rmSync as U,statSync as Z1,symlinkSync as s,writeFileSync as g}from"fs";import{connect as E1}from"net";import{homedir as G}from"os";import{basename as $1,dirname as O,join as W}from"path";import{inflateRawSync as u1}from"zlib";class V extends Error{}var F="reason-network",x="0.12.3",N1={"aarch64-apple-darwin":"3a5c5000707ca5f28801606b1d84337edc7f6b0cb68e2d2940866719acb6d90c","x86_64-apple-darwin":"24bcd9fc754a402ad1a641ad697b762438ebe393820b5614cc5e9bb40af809a2","aarch64-unknown-linux-musl":"2622036dbb91dd145dc3ae9c99ed7d5e70b5b07df3d3e4fc2af296816db0e7d5","x86_64-unknown-linux-musl":"3040984c59b3d9fe293a153f547bc1e6035d2a7997e5d124db9751210401c716","aarch64-pc-windows-msvc":"be7923587184ec7385a695e91e1f4c61c03989436d8eb4c645c524176da5fabf","x86_64-pc-windows-msvc":"a45a16dab0b5b4ed4d6fe2cf42428b2fd636b2bf5ec1fff2a9b793360d25a052"},g1="https://reasonmachines.com/cli/engine",T="REASON_AGENT_NETWORK_BIN";function v1(q=process.platform,X=process.arch){let Y=X==="arm64"?"aarch64":X==="x64"?"x86_64":null,Z=q==="darwin"?"apple-darwin":q==="linux"?"unknown-linux-musl":q==="win32"?"pc-windows-msvc":null;return Y&&Z?`${Y}-${Z}`:null}function Q1(q){return`${F}-${q}${q.endsWith("-windows-msvc")?".zip":".tar.gz"}`}function k1(q){let X=N1[q];return X?{url:`${g1}/${x}/${Q1(q)}`,sha256:X}:null}function i(q){let X=C(q,["--version"],{encoding:"utf8",timeout:5000}),[Y,Z]=X.status===0?X.stdout.trim().split(/\s+/):[];return Y===F?Z??null:null}function u(q,X){let Y=q.split(".").map(Number),Z=X.split(".").map(Number);for(let $=0;$<3;$+=1)if((Y[$]??0)!==(Z[$]??0))return(Y[$]??0)>(Z[$]??0);return!0}function R(q=G(),X=process.platform){return W(q,".reason","bin",`${F}${X==="win32"?".exe":""}`)}var _=process.platform==="win32"?`~\\.local\\bin\\${F}.exe`:`~/.local/bin/${F}`;async function w1(q=process.env,X=()=>{}){if(q[T])return q[T];let Y=R(),Z=d(),$=Z?.path===Y&&b(Y)===Z.fingerprint?Z:null,Q=$?.kept,z=k(q)?null:h1(Q);if($?.version===x&&!z)return Y;let B=L(Y)?i(Y):null;if(z){let J=i(z.path),H=B&&u(B,x)?B:x;if(!J||!u(H,J)){if(J)X(`Reason Network: ${_} (${J}) is newer than the version \`reason network\` keeps up to date (${H}), so it was left as it is.`);Q=z.fingerprint,z=null}}if($?.version===x&&!z)return t(Y,Q);if(!B||!u(B,x))await m1(Y);let K=C(Y,["setup",...k(q)?["--no-service"]:[]],{env:await v(q),encoding:"utf8",timeout:60000});if(K.status!==0){let J=j((K.stderr||K.stdout||"").trim().split(`
|
|
4
|
+
`).pop()??"");if($)return z1(G(),{...$,fingerprint:b(Y)??$.fingerprint,...Q?{kept:Q}:{}}),X(z?`Reason Network: couldn't move your agents off ${_}${J?` (${J})`:""}; they keep using it. Run reason network to try again.`:`Reason Network: couldn't finish setting up on this computer${J?` (${J})`:""}. Run reason network to try again.`),Y;throw new V(`Couldn't connect this computer's agents to the network${J?` (${J})`:""}. Run reason network to try again.`)}if(z)Q=d1(z,Y,X);return t(Y,Q),C(Y,["stop"],{env:q,stdio:"ignore",timeout:15000}),Y}function h1(q){let X=W(G(),".local","bin",$1(R())),Y;try{Y=_1(X)}catch{return null}let Z=`${Y.size}:${Y.mtimeMs}:${Y.ino}`;if(!Y.isFile()||Z===q)return null;try{let $=Z1(R());if($.ino===Y.ino&&$.dev===Y.dev)return null}catch{}try{let $=Buffer.alloc(2),Q=f1(X,"r");try{y1(Q,$,0,2,0)}finally{T1(Q)}if($.toString("latin1")==="#!")return null}catch{return null}return{path:X,fingerprint:Z}}function d1(q,X,Y){let Z=`${q.path}.reason-${process.pid}`;try{if(U(Z,{force:!0}),process.platform==="win32"){try{s(X,Z,"file")}catch{R1(X,Z)}B1(Z,q.path,"win32")}else s(X,Z),M(Z,q.path);Y(`Reason Network: your agents on this computer now use the version \`reason network\` keeps up to date (${_} points to it). Restart a running agent to pick it up.`);return}catch($){return U(Z,{force:!0}),Y(`Reason Network: your agents on this computer now use the version \`reason network\` keeps up to date, but ${_} couldn't be pointed to it (${$ instanceof Error?$.message:String($)}). Remove that copy so it can't take them back.`),q.fingerprint}}async function v(q){if(q[a])return q;try{let{defaultWorkerServiceHost:X,workerServiceLauncher:Y}=await import("./serve-service-42nqanvr.js");return{...q,[a]:Y(X(G()),q)}}catch{return q}}var a="REASON_NETWORK_REASON_BIN";function k(q=process.env){return Boolean(q.REASON_NETWORK_NO_SERVICE||q.TINCAN_NO_SERVICE)}var w=(q)=>W(q,".reason","ask-engine.json");function b(q){try{let X=Z1(q);return`${X.size}:${X.mtimeMs}:${X.ino}`}catch{return null}}function L3(){return d()?.version??null}function d(q=G()){try{let X=JSON.parse(A1(w(q),"utf8"));if(typeof X.path!=="string"||typeof X.fingerprint!=="string"||typeof X.version!=="string")return null;return{path:X.path,fingerprint:X.fingerprint,version:X.version,...typeof X.kept==="string"?{kept:X.kept}:{}}}catch{return null}}function z1(q,X){Y1(O(w(q)),{recursive:!0}),g(w(q),JSON.stringify(X))}function t(q,X){let Y=b(q);if(Y)z1(G(),{path:q,fingerprint:Y,version:x,...X?{kept:X}:{}});return q}async function m1(q){let X=v1(),Y=X?k1(X):null;if(!X||!Y)throw new V(`Reason Network runs on macOS, Linux and Windows (arm64 or x64); this is ${process.platform} ${process.arch}.`);let{url:Z,sha256:$}=Y,Q;try{let B=await fetch(Z,{signal:AbortSignal.timeout(120000)});if(!B.ok)throw Error(`HTTP ${B.status}`);Q=Buffer.from(await B.arrayBuffer())}catch(B){let K=B instanceof Error&&B.name==="TimeoutError"?"no download within 2 minutes":B instanceof Error?B.message.replace(/\.$/,""):String(B);throw new V(`Couldn't download Reason Network from ${new URL(Z).host} (${K}). Check the connection and run reason network again.`)}if(P1("sha256").update(Q).digest("hex")!==$)throw new V("The Reason Network download didn't match its checksum, so it wasn't installed.");l1(Q,X,q)}var h="Couldn't unpack the Reason Network download.";function l1(q,X,Y,Z=process.platform){Y1(O(Y),{recursive:!0});let $=b1(W(O(Y),".reason-engine-"));try{let Q=W($,F);if(Q1(X).endsWith(".zip"))Q=W($,`${F}.exe`),g(Q,p1(q,`${F}.exe`));else if(g(W($,"engine.tar.gz"),q),C("tar",["-xzf",W($,"engine.tar.gz"),"-C",$]).status!==0||!L(Q))throw new V(h);O1(Q,493),B1(Q,Y,Z)}finally{U($,{recursive:!0,force:!0})}}function p1(q,X){let Y=q.lastIndexOf(Buffer.from("PK\x05\x06","latin1"));if(Y<0||Y+22>q.length)throw new V(h);let Z=q.readUInt32LE(Y+16);for(let $=q.readUInt16LE(Y+10);$>0;$-=1){if(Z+46>q.length||q.readUInt32LE(Z)!==33639248)break;let Q=q.readUInt16LE(Z+28);if(q.toString("utf8",Z+46,Z+46+Q)===X){let z=q.readUInt16LE(Z+10),B=q.readUInt32LE(Z+20),K=q.readUInt32LE(Z+24),J=q.readUInt32LE(Z+42);if(J+30>q.length||q.readUInt32LE(J)!==67324752)break;let H=J+30+q.readUInt16LE(J+26)+q.readUInt16LE(J+28);if(H+B>q.length)break;let D=q.subarray(H,H+B),S;try{S=z===0?Buffer.from(D):z===8?u1(D):Buffer.alloc(0)}catch{break}if(z!==0&&z!==8||S.length!==K)break;return S}Z+=46+Q+q.readUInt16LE(Z+30)+q.readUInt16LE(Z+32)}throw new V(h)}function B1(q,X,Y){if(Y!=="win32"||!L(X)){M(q,X);return}let Z=O(X),$=(z)=>z.startsWith(`${$1(X)}.`)&&z.endsWith(".old");for(let z of I1(Z).filter($))try{U(W(Z,z),{force:!0})}catch{}let Q=`${X}.${process.pid}-${Date.now()}.old`;M(X,Q);try{M(q,X)}catch(z){throw M(Q,X),z}try{U(Q,{force:!0})}catch{}}function c1(q=process.env,X=G()){let Y=q.REASON_NETWORK_HOME?.trim()||q.TINCAN_HOME?.trim();if(Y)return Y;let Z=W(X,".reason","network"),$=W(X,".tincan");return!r(Z)&&r($)?$:Z}var r=(q)=>L(W(q,"network.db"))||L(W(q,"tincan.db"));function s1(q,X=process.platform,Y=S1.native){let Z=L(W(q,"network.db"))||!L(W(q,"tincan.db"));if(X==="win32"){let Q=q;try{Q=Y(q),Q=Q.startsWith("\\\\?\\")?Q.slice(4):Q.startsWith("\\\\")?`UNC\\${Q.slice(2)}`:Q}catch{}return`\\\\.\\pipe\\${Z?"reason-network":"tincan"}-${o(Q)}`}let $=W(q,Z?"network.sock":"tincan.sock");if(Buffer.byteLength($)<100)return $;return W("/tmp",`${Z?"reason-network":"tincan"}-${process.getuid?.()??0}`,`${o($)}.sock`)}function o(q){let X=0xcbf29ce484222325n;for(let Y of Buffer.from(q))X=BigInt.asUintN(64,(X^BigInt(Y))*0x100000001b3n);return X.toString(16).padStart(16,"0")}class f extends Error{code;constructor(q,X){super(q);this.code=X}}var J1="not_in_team",K1=15000,i1=new Set(["who","team","inbox","unread","held"]),a1=90000,t1="Reason Network on this computer closed the connection";class I{socket;nextId=1;buffer="";pending=new Map;closed=null;hungUp=!1;constructor(q){this.socket=q;q.setEncoding("utf8"),q.on("data",(Y)=>this.read(Y));let X=(Y)=>{this.closed=Y;for(let Z of this.pending.values())Z.reject(Y);this.pending.clear()};q.on("error",(Y)=>X(Y)),q.on("close",()=>X(Error(this.hungUp?"the connection to Reason Network on this computer was closed here":t1)))}static open(q){return new Promise((X,Y)=>{let Z=E1(q);Z.once("connect",()=>X(new I(Z))),Z.once("error",Y)})}read(q){this.buffer+=q;let X=this.buffer.indexOf(`
|
|
5
|
+
`);while(X>=0){let Y=this.buffer.slice(0,X);if(this.buffer=this.buffer.slice(X+1),X=this.buffer.indexOf(`
|
|
6
|
+
`),!Y.trim())continue;let Z;try{Z=JSON.parse(Y)}catch{continue}if(typeof Z.id!=="number")continue;let $=this.pending.get(Z.id);if(!$)continue;if(this.pending.delete(Z.id),Z.ok){$.resolve(Z.result);continue}let Q=Z.error??"Reason Network on this computer refused the request",z=typeof Z.code==="string"?Z.code:/not (in|connected to) a team/i.test(Q)?J1:null;$.reject(new f(j(Q),z))}}call(q,X={},Y=K1){if(this.closed)return Promise.reject(this.closed);let Z=this.nextId++;return this.socket.write(`${JSON.stringify({id:Z,op:q,...X})}
|
|
7
|
+
`),new Promise(($,Q)=>{let z=setTimeout(()=>{this.pending.delete(Z),Q(Error(`Reason Network on this computer didn't answer ${q} within ${Math.round(Y/1000)}s`))},Y);this.pending.set(Z,{resolve:(B)=>{clearTimeout(z),$(B)},reject:(B)=>{clearTimeout(z),Q(B)}})})}get isClosed(){return this.closed!==null}close(){this.hungUp=!0,this.socket.end()}}var N=/^(Claude Code|Grok|Codex) \u00B7 (.*)$/,r1={"Claude Code":"claude-code",Grok:"grok",Codex:"codex"},o1=/^ask-[0-9a-f]{6}$/;function n(q){return{id:q.id,from:q.from,fromAgent:q.from_agent,to:q.to,replyTo:q.reply_to,body:q.body,sentAt:q.sent_at}}function e(q){return{person:q.person,machine:q.machine,isMe:q.is_me,online:q.online,link:q.link,rttMs:q.rtt_ms}}class P{engine;env;connection=null;waits=new Set;constructor(q,X){this.engine=q;this.env=X}static async open(q=process.env,X){return new P(await w1(q,X),q)}static openInstalled(q=process.env){if(q[T])return new P(q[T],q);let X=R(),Y=d();return Y?.path===X&&b(X)===Y.fingerprint?new P(X,q):null}socketPath(){return s1(c1(this.env))}async open(){try{return await I.open(this.socketPath())}catch{return C(this.engine,["who","--json"],{env:this.env,stdio:"ignore",timeout:15000}),await I.open(this.socketPath())}}async call(q,X={},Y){if(!this.connection||this.connection.isClosed)this.connection=await this.open();try{return await this.connection.call(q,X,Y)}catch(Z){if(!/closed|ECONNRESET|EPIPE/.test(String(Z)))throw Z;if(this.connection=await this.open(),!i1.has(q))throw Z;return await this.connection.call(q,X)}}async waitOn(q,X){let Y=await this.open();this.waits.add(Y);try{return await Y.call(q,X,X.wait_secs*1000+K1)}finally{this.waits.delete(Y),Y.close()}}close(){this.connection?.close(),this.connection=null;for(let q of this.waits)q.close();this.waits.clear()}async team(){try{let{team_id:q,messages:X,...Y}=await this.call("team"),Z=Y.machines.find((Q)=>Q.is_me)?.endpoint,$=Array.isArray(X)?X.flatMap((Q)=>{let z=X1.safeParse(Q);return z.success?[z.data]:[]}):null;return{...Y,...typeof q==="string"&&q?{teamId:q}:{},machines:Y.machines.map(e),...typeof Z==="string"&&Z?{endpoint:Z}:{},...$?{messageCounts:$}:{}}}catch(q){if(q instanceof f&&q.code===J1)return null;throw q}}async snapshot(q={}){let X=await this.call("who",{all:Boolean(q.all),...q.filter?{filter:q.filter}:{}}),Y=new Set(X.sessions.filter(($)=>N.test($.doing??"")).map(($)=>`${$.person}/${$.machine}:${$.cwd}`)),Z=X.sessions.filter(($)=>q.all||!o1.test($.name)).filter(($)=>N.test($.doing??"")||!Y.has(`${$.person}/${$.machine}:${$.cwd}`)).map(($)=>{let Q=N.exec($.doing??"");return{address:$.address,name:$.name,person:$.person,machine:$.machine,agent:Q?r1[Q[1]]:$.agent,cwd:$.cwd,repo:$.repo,branch:$.branch,status:Q?Q[2]==="ready for work"?"idle":Q[2]==="stopped"?"offline":"busy":$.status,since:$.since,doing:Q?Q[2]:$.doing,isMe:$.is_me,worker:Boolean(Q),tier:$.tier??null}});return{team:X.team,person:X.person,machine:X.machine,machines:X.machines.map(e),sessions:Z}}async send(q,X,Y={}){if(!Y.from)await this.call("hook",{agent:"cli",event:"stop",session_id:"terminal",name:"terminal",cwd:process.cwd(),mail:!1});let Z=await this.call("send",{from:Y.from??"cli:terminal",to:q,body:X,...Y.replyTo?{reply_to:Y.replyTo}:{},wake:Y.wake??!0,...Y.notify?{notify:!0}:{}});return{ids:Z.ids,recipients:Z.recipients.map(($)=>$.address),deliveries:Z.recipients.map(($)=>({address:$.address,state:$.state,note:$.note??""}))}}async session(q,X={}){let Y=X.agent??"cli",Z=(z,B={})=>this.call("hook",{agent:Y,event:z,session_id:q,name:q,cwd:process.cwd(),mail:!1,...B}),$=await Z("stop"),Q=`${Y}:${q}`;return{name:q,address:$.address??q,next:async(z)=>{return(await this.waitOn("inbox",{key:Q,wait_secs:z,peek:!0})).messages.map(n)},ack:async(z)=>{if(z.length)await this.call("delivered",{key:Q,ids:z})},busy:async(z)=>{if(await Z("prompt"),z)await Z("doing",{doing:z})},idle:async(z)=>{if(await Z("stop"),z)await Z("doing",{doing:z})},doing:async(z)=>{await Z("doing",{doing:z})},send:(z,B,K,J)=>this.send(z,B,{from:Q,...K?{replyTo:K}:{},...J?.notify?{notify:!0}:{}})}}async inbox(q={}){let Y=(await this.waitOn("inbox",{key:"cli:terminal",wait_secs:q.waitSeconds??0,peek:!0}).catch((Z)=>{if(/isn't registered/.test(String(Z)))return{messages:[]};throw Z})).messages.map(n);if(Y.length&&!q.peek)await this.call("delivered",{key:"cli:terminal",ids:Y.map((Z)=>Z.id)});return Y}async link(q={}){return await this.call("link",{new:Boolean(q.new)})}async changeTeam(q,X){try{return await this.call(q,X,a1)}finally{this.close()}}async changeOntoTeam(q,X){try{await this.changeTeam(q,X)}catch(Y){if(!/closed|ECONNRESET|EPIPE/.test(String(Y)))throw Y;if(await this.team())return;await this.changeTeam(q,X)}}async createTeam(q,X){await this.changeOntoTeam("create_team",{name:q,person:X})}async join(q,X){await this.changeOntoTeam("join",{ticket:q,person:X})}async leave(){return await this.changeTeam("leave",{force:!0})}async remove(q){return await this.call("remove",{who:q})}endpoint(){let q=C(this.engine,["endpoint"],{encoding:"utf8",env:this.env,timeout:30000}),X=q.status===0?q.stdout.trim():"";if(!X)throw new V(`Reason Network on this computer couldn't say its endpoint${q1(q)}.`);return X}async enterTeam(q,X,Y){let Z=Y?{proof:Y}:{},[$,Q]="create"in q?["create_team",{name:q.create,person:X,...Z}]:["join",{ticket:q.join,person:X,...Z}],z=null;for(let B=0;B<2&&!z?.person;B+=1)try{z=await this.changeTeam($,Q)}catch(K){let J=String(K),H=K instanceof f&&K.code?K.code:/\(same_account_needs_owner\)/.test(J)?"same_account_needs_owner":/already in this team/.test(J)?"name_taken":null;if(H==="same_account_needs_owner")return{state:"needs_owner"};if(H==="name_taken")return{state:"name_taken"};if(!/closed|ECONNRESET|EPIPE/.test(J))throw K;let D=await this.team();if(D)z={name:D.name,person:D.person,machine:D.machine}}if(!z?.person)throw new V("Reason Network on this computer didn't join the team. Run reason network again.");return{state:"entered",teamId:z.team_id??"",teamName:z.team_name||z.name||"",person:z.person??X,machine:z.machine??""}}async setupAgents(){this.close();let q=C(this.engine,["setup",...k(this.env)?["--no-service"]:[]],{encoding:"utf8",env:await v(this.env),timeout:60000});if(q.status!==0)throw new V(`Couldn't connect this computer's agents to the network${q1(q)}.`);return[...q.stdout.matchAll(/^ {2}([^:\n]+): (?!skipped)/gm)].map((X)=>X[1]).filter((X)=>X!=="service")}async setup(q,X={}){return this.passthrough(["setup",...q],X,await v(this.env))}passthrough(q,X={},Y=this.env){this.close();let Z=C(this.engine,q,{stdio:["inherit","pipe",X.person?"inherit":"pipe"],encoding:"utf8",env:Y});if(!X.quiet||Z.status!==0)process.stdout.write(E(j(Z.stdout??""))),process.stderr.write(E(j(Z.stderr??"")));return Z.status??1}}function q1(q){let X=j(((q.stderr||q.stdout)??"").trim().split(`
|
|
8
|
+
`).pop()??"");return X?` (${X})`:""}function j(q){return q.replace(/not in a team yet:[^\n]*/g,"this computer isn't on a network yet: run `reason network`").replace(/`tincan (\w+)/g,"`reason network $1").replace(/\btincan (who|send|inbox|invite|join|team|link|setup|doctor|remove|leave|listen)\b/g,"reason network $1").replace(/(?<![\w./-])tincan(?![\w./-])/gi,"Reason Network")}import{existsSync as _3,mkdirSync as n1,readFileSync as V1,rmSync as e1,writeFileSync as q3}from"fs";import{homedir as y,hostname as f3}from"os";import{dirname as X3,join as C1}from"path";function W1(q){let X=q.trim().slice(q.trim().indexOf("#")+1),Y=["rn1-","tincan1"].find((J)=>X.startsWith(J));if(!Y)return null;let Z=Buffer.from(X.slice(Y.length),"base64url"),$=32,Q=(J)=>{return $+=J,$<=Z.length},z=()=>{let J=Z[$];if(J===void 0||!Q(1))return!1;if(J!==255)return Q(J);let H=Z[$];return H!==void 0&&Q(1)&&Q(H)};if(Z.length<32||!z()||!z()||!z())return null;let B=Z[$];if(B===void 0||!Q(1))return null;for(let J=0;J<B;J+=1){let H=Z[$];if(!Q(1)||!Q(H===4?4:H===6?16:Number.NaN)||!Q(2))return null}let K=[];for(;$+32<=Z.length;$+=32)K.push(Z.subarray($,$+32).toString("hex"));return{team:Z.subarray(0,16).toString("hex"),name:Z.subarray(33,33+Z[32]).toString("utf8"),secret:Z.subarray(16,32).toString("hex"),machines:K}}var F1=(q)=>C1(q,".reason","ask.json");function Y3(q){try{let X=JSON.parse(V1(F1(q),"utf8"));if(typeof X.orgId!=="string"||typeof X.team!=="string")return null;let Y=X.pendingRotation;return{orgId:X.orgId,team:X.team,...typeof X.checkedAt==="number"?{checkedAt:X.checkedAt}:{},...Y&&typeof Y.link==="string"&&typeof Y.team==="string"&&typeof Y.replaces==="string"?{pendingRotation:Y}:{}}}catch{return null}}var A=(q)=>{let X=H1();return C1(q,".reason",X==="production"?"network-team.json":`network-team.${X}.json`)};function u3(q=y()){return A(q).replace(/\.json$/,"-login.json")}function N3(q=y()){try{let X=JSON.parse(V1(A(q),"utf8"));return typeof X.team==="string"?{team:X.team,setupDone:X.setupDone===!0,registered:typeof X.registered==="string"?X.registered:null,account:typeof X.account==="string"?X.account:null}:null}catch{return null}}function g3(q,X=y()){n1(X3(A(X)),{recursive:!0}),q3(A(X),`${JSON.stringify(q)}
|
|
9
|
+
`,{mode:384}),e1(F1(X),{force:!0})}function v3(q=y()){let X=Y3(q);return X?{orgId:X.orgId,team:X.team}:null}function k3(q){let X=W1(q);return X&&X.machines.length>0?{teamId:X.team,teamName:X.name,secret:X.secret}:null}
|
|
10
|
+
export{E as Ia,L3 as Ja,P as Ka,u3 as La,N3 as Ma,g3 as Na,v3 as Oa,k3 as Pa};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{vk as X,xk as Y,zk as Z}from"./vm-hands-entry-lite-jd31as70.js";import{execFileSync as z}from"child_process";import{existsSync as V,realpathSync as M}from"fs";import{userInfo as D}from"os";import{isAbsolute as $,join as C,normalize as F,parse as K}from"path";function Q(){let q=F(D().homedir);if(!$(q)||q===K(q).root)throw Error("Could not resolve the canonical user home.");return q}function O(q,B,J=Q()){let L=Z(B);if(B.kind==="managed"&&B.base){let G=M(J);return{anchor:G,boundary:C(G,B.base),path:C(G,L)}}if(B.kind==="root"&&Y(B.path)){let G=M(J);return{anchor:G,boundary:C(G,X),path:C(G,L)}}return{anchor:q,boundary:q,path:C(q,L)}}function _(q=Q()){return C(q,".config")}function b(){if(process.platform!=="darwin")return null;try{let q=z("/usr/bin/getconf",["DARWIN_USER_DIR"],{encoding:"utf8",timeout:5000}).trim();return $(q)?M(q):null}catch{return null}}function g(q=Q()){let B=C(q,"Library","Application Support","Ara"),J=C(q,"Library","Application Support","Reason");return V(B)&&!V(J)?B:J}
|
|
3
|
+
export{Q as mk,O as nk,_ as ok,b as pk,g as qk};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{S as F,T as O,U as N,V as y}from"./vm-hands-entry-lite-0a4cy8gw.js";import{Sa as R}from"./vm-hands-entry-lite-33h8294z.js";import{Nk as A}from"./vm-hands-entry-lite-q9g11dbj.js";import{Zk as b}from"./vm-hands-entry-lite-e1xjfj57.js";import{bl as T}from"./vm-hands-entry-lite-8p8hz0j1.js";import{dl as $}from"./vm-hands-entry-lite-e4hwb89r.js";import{sl as L}from"./vm-hands-entry-lite-kqbats5n.js";var E=/^(0|[1-9][0-9]{0,5})\.(0|[1-9][0-9]{0,5})$/;function U(x){let w=typeof x==="string"?E.exec(x):null;return w?{major:Number(w[1]),minor:Number(w[2])}:null}import{spawn as f}from"child_process";import{createHash as m,randomBytes as q}from"crypto";import{createInterface as g}from"readline";var _=["run","mcp:read","mcp:write","secrets:read","secrets:write","sessions:read","sessions:debug","devices:read","devices:write","devices:use","ssh:write","knowledge:read","memory:read","memory:write","skills:read","skills:write","repos:read","repos:write","reviews:read","reviews:write","deployment:read","analytics:read","org:read","org:write","attachments:read","attachments:write","guardrails:read","guardrails:write","network:read","network:write","automations:read","automations:write","agent_auth:read"];var hx=_.filter((x)=>x!=="network:read"&&x!=="network:write");class B extends Error{oauthCode;constructor(x,w=null){super(x);this.oauthCode=w;this.name="LoginError"}}function Ex(x){let w=new URL(x);if(w.protocol!=="https:"&&w.hostname!=="127.0.0.1"&&w.hostname!=="localhost")throw new B("Reason API URL must use HTTPS, except for localhost development.");return w.origin}function fx(){let x=q(48).toString("base64url"),w=m("sha256").update(x).digest("base64url");return{verifier:x,challenge:w,state:q(32).toString("base64url")}}function I(x,w){let H=typeof x.error==="string"?x.error:null,G=typeof x.error_description==="string"?x.error_description:H?H:w;return new B(G,H)}async function c(x,w,H,G){let J=await H(`${x}/mcp/oauth/token`,{method:"POST",redirect:"error",headers:{"content-type":"application/x-www-form-urlencoded"},body:w,signal:G}),Q=await J.json().catch(()=>({}));if(!J.ok)throw I(Q,`OAuth token request failed (${J.status})`);return Q}var d=1e4;async function u(x,w={}){let H=w.fetchImpl??fetch,G=await c(x.apiOrigin,new URLSearchParams({grant_type:"refresh_token",client_id:x.clientId,refresh_token:x.refreshToken}),H,AbortSignal.timeout(d)).catch((Q)=>{if(Q instanceof Error&&Q.name==="TimeoutError")throw new B("Reason did not answer the login refresh in time. Check the network and retry.");throw Q});if(typeof G.access_token!=="string"||typeof G.refresh_token!=="string"||typeof G.expires_in!=="number")throw new B("Reason returned an incomplete refreshed login.");let J={...x,accessToken:G.access_token,refreshToken:G.refresh_token,expiresAt:new Date(Date.now()+G.expires_in*1000).toISOString(),scopes:typeof G.scope==="string"?G.scope.split(/\s+/).filter(Boolean):x.scopes};return O(J,w.path??F()),J}var z=new Map,l=2000,a=100;function C(x,w){if(!w)return x;if(w.aborted)return Promise.reject(w.reason);return new Promise((H,G)=>{let J=()=>G(w.reason);w.addEventListener("abort",J,{once:!0}),x.then(H,G).finally(()=>w.removeEventListener("abort",J))})}async function K(x={}){let w=x.path??F(),H=N(w);if(!H)return null;let G=x.apiOrigin??T(process.env,"REASON_API_URL")?.trim();if(G&&!b(H.apiOrigin,new URL(G).origin))return null;if(!(Date.parse(H.expiresAt)<=Date.now()+60000)&&(!x.forceRefresh||x.refused!==void 0&&H.accessToken!==x.refused))return H;let Q=[w,H.apiOrigin,H.clientId,H.refreshToken].join("\x00"),Z=z.get(Q);if(Z)return C(Z,x.signal);let V;return V=u(H,{fetchImpl:x.fetchImpl,path:w}).catch(async(Y)=>{if(!(Y instanceof B)||Y.oauthCode!=="invalid_grant"&&Y.oauthCode!=="invalid_client")throw Y;let M=(D)=>D!==null&&(Y.oauthCode==="invalid_client"?D.clientId!==H.clientId:D.refreshToken!==H.refreshToken),h=Date.now()+l;while(!M(N(w))&&Date.now()<h)await new Promise((D)=>setTimeout(D,a));if(M(N(w)))return K({fetchImpl:x.fetchImpl,path:w});return y(w),null}).finally(()=>{if(z.get(Q)===V)z.delete(Q)}),z.set(Q,V),C(V,x.signal)}function mx(x,w){return new Promise((H)=>{let G=g({input:x}),J=!1,Q=(V)=>{if(J)return;J=!0,w.removeEventListener("abort",Z),G.close(),x.pause(),H(V)},Z=()=>Q(null);w.addEventListener("abort",Z,{once:!0}),G.once("line",(V)=>Q(V)),G.once("close",()=>Q(null))})}async function gx(x){let w=process.platform,H=w==="darwin"?["open",x]:w==="win32"?[L("rundll32",w),"url.dll,FileProtocolHandler",x]:["xdg-open",x],G=f(H[0],H.slice(1),{stdio:"ignore",windowsHide:!0});if(await new Promise((Q)=>{G.once("error",()=>Q(-1)),G.once("close",(Z)=>Q(Z??-1))})!==0)throw new B(`Open this URL in a browser:
|
|
3
|
+
${x}`)}var p=$.object({label:$.string(),used_percent:$.number().min(0).max(100).nullable(),resets_at:$.string().nullable(),exhausted:$.boolean().nullable()}),t=$.object({groups:$.array($.object({selectable:$.boolean().optional(),accounts:$.array($.object({source_id:$.string().min(1),model_ids:$.array($.string().min(1)).optional()}))}))});function i(x){let w=t.safeParse(x);if(!w.success)return;return w.data.groups.some((H)=>H.selectable!==!1&&H.accounts.some((G)=>G.model_ids===void 0||G.model_ids.length>0))}class X extends Error{status;code;suggestedModel;retryAfterMs;resolutionReason;constructor(x,w,H,G,J,Q){super(H);this.status=x;this.code=w;this.suggestedModel=G;this.retryAfterMs=J;this.resolutionReason=Q;this.name="ApiError"}static rateLimitDelayMs(x,w){if(!(x instanceof X)||x.status!==429)return null;return Math.min(60000,Math.max(w,x.retryAfterMs??0))}}var n=["minimal","low","medium","high","xhigh","max"],s=$.object({id:$.string().min(1),kind:$.string(),name:$.string(),custom_name:$.string().nullish(),status:$.string(),online:$.boolean(),compatible:$.boolean().optional(),compatibility_reason:$.string().nullish(),folder_lane_of:$.string().nullish(),roots:$.array($.object({id:$.string().min(1),label:$.string()}))}),r=$.object({devices:$.array(s),end_cursor:$.string().nullish(),has_next_page:$.boolean().optional()}),o=$.object({id:$.string().min(1),name:$.string()}),e=$.object({items:$.array(o)}),xx=$.object({id:$.string().min(1),name:$.string(),main:$.boolean(),mine:$.boolean(),session_id:$.string().nullish(),appearance:$.object({color:$.string().nullish()}).nullish().catch(null)}),wx=$.object({items:$.array(xx)}),$x=$.object({skill_id:$.string().min(1),name:$.string(),description:$.string().nullish(),activation_keywords:$.array($.string()).default([]),is_enabled:$.boolean().default(!0)}),Hx=$.object({items:$.array($x).default([])}),Gx=$.object({id:$.string().min(1),kind:$.string(),enabled:$.boolean(),schedule:$.object({expression:$.string().nullish(),every_seconds:$.number().nullish(),next_run_at:$.string().nullish()}).nullish(),github:$.object({event:$.string().nullish(),action:$.string().nullish(),repo:$.string().nullish()}).nullish(),last_fired_at:$.string().nullish()}),k=$.object({id:$.string().min(1),name:$.string().nullish(),instructions:$.string().nullish(),enabled:$.boolean(),triggers:$.array(Gx).default([])}),Jx=$.object({items:$.array(k).default([]),end_cursor:$.string().nullish(),has_next_page:$.boolean().optional()}),Qx=$.object({id:$.string().min(1),slug:$.string().nullish(),name:$.string(),description:$.string().nullish(),transport:$.string().nullish(),url:$.string().nullish(),enabled:$.boolean()}),Wx=$.object({items:$.array(Qx).default([])}),Zx=$.object({status:$.string(),summary:$.string().nullish(),category:$.string().nullish(),outcome:$.string().nullish(),message_count:$.number().nullish(),pr_url:$.string().nullish(),cost_usd:$.number().nullish(),generated_at:$.string().nullish()}),S=$.object({tags:$.array($.string()).default([])}),Vx=$.enum(["linux","macos"]),v=$.object({id:$.string().min(1),name:$.string().min(1),platform:Vx.nullable(),workers:$.object({total:$.number().int(),online:$.number().int(),busy:$.number().int(),idle:$.number().int()}),sessions:$.object({queued:$.number().int(),running:$.number().int()})}),Xx=$.object({machines:$.array(v)}),Yx=$.object({machine:v}),Bx=$.object({deleted:$.literal(!0),revoked_workers:$.number().int(),revoked_tokens:$.number().int()}),Dx=$.object({token:$.object({id:$.string().min(1),machine_id:$.string().min(1),token_prefix:$.string()}),secret:$.string().startsWith("rmt_")}),j=$.looseObject({machine_id:$.string().min(1),machine_name:$.string().min(1)}),zx=j.extend({organization_id:$.string().min(1)}),Nx=$.object({id:$.string().min(1),name:$.string().min(1),state:$.enum(["waiting","placed"]),queue_position:$.number().int().nullable()});function px(x){let w=Nx.safeParse(x.machine);return w.success?w.data:null}var Fx=$.union([$.object({kind:$.literal("cloud")}),$.object({kind:$.enum(["mac","headless"]),device_id:$.string().min(1),root_id:$.string().min(1)})]);function tx(x){let w=Fx.safeParse(x.runs_on);return w.success?w.data:null}function W(x,w,H){let G=x.safeParse(w);if(!G.success)throw new X(502,H,"Reason returned an unexpected response.");return G.data}var Kx=$.object({error:$.object({type:$.string(),message:$.string()})});function P(x,w,H){let G=Kx.safeParse(w),J=typeof w.error==="string"?w.error:G.success?G.data.error.type:`http_${x}`,Q=typeof w.detail==="string"?w.detail:typeof w.message==="string"?w.message:G.success?G.data.error.message:`Reason request failed (${x}${typeof w.error==="string"?` ${w.error}`:""})`,Z=J==="github_connection_required"&&typeof w.connect_url==="string"&&/^https?:\/\//.test(w.connect_url)?` Connect it at ${w.connect_url}`:"",V=H===null||H.trim()===""?NaN:Number(H);return new X(x,J,`${Q}${Z}`,typeof w.suggested_model==="string"?w.suggested_model:void 0,Number.isFinite(V)&&V>=0?V*1000:void 0,typeof w.resolution_reason==="string"?w.resolution_reason:void 0)}async function ix(x){let w=await(x.fetchImpl??fetch)(`${x.apiOrigin}/v3/machines/enrollment-tickets`,{method:"POST",headers:{authorization:`Bearer ${x.token}`,accept:"application/json","content-type":"application/json"},body:JSON.stringify(x.body),signal:AbortSignal.timeout(30000),redirect:"error"}),H=await w.json().catch(()=>({}));if(!w.ok)throw P(w.status,H,w.headers.get("retry-after"));return W(zx,H,"invalid_machine_ticket")}class Px{options;credentials;constructor(x,w={}){this.options=w;this.credentials=x}trackEvent(x,w={}){}async request(x,w={}){let{status:H,headers:G,json:J}=await this.exchange(x,w);if(H<200||H>299)throw P(H,J,G.get("retry-after"));return J}async exchange(x,w={},H=!1){let G=this.options.fetchImpl??fetch,J=await G(`${this.credentials.apiOrigin}/v3${x}`,{method:w.method??"GET",headers:{authorization:`Bearer ${this.credentials.accessToken}`,accept:"application/json","user-agent":A,"x-reason-agent":"Reason CLI","x-client-surface":this.options.clientSurface??"direct_cli",...w.raw?{"content-type":w.raw.contentType}:w.body===void 0?{}:{"content-type":"application/json"},...w.headers,...w.ifNoneMatch?{"if-none-match":w.ifNoneMatch}:{}},body:w.raw?w.raw.bytes:w.body===void 0?void 0:JSON.stringify(w.body),signal:w.signal,redirect:w.ifNoneMatch?"manual":"error"}),Q=await J.json().catch(()=>({}));if(J.status===401&&!H&&w.retryUnauthorized!==!1&&this.credentials.credentialKind!=="api_key"){let Z=await K({fetchImpl:G,path:this.options.credentialsPath,forceRefresh:!0,refused:this.credentials.accessToken,signal:w.signal});if(Z)return this.credentials=Z,this.exchange(x,w,!0)}return{status:J.status,headers:J.headers,json:Q}}createHeadlessDeviceEnrollmentTicket(x){return this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/devices/enrollment-tickets`,{method:"POST",body:x,signal:AbortSignal.timeout(30000),retryUnauthorized:!1})}async enrollHeadlessDevice(x){try{return await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/devices/enrollments`,{method:"POST",body:x,signal:AbortSignal.timeout(30000),retryUnauthorized:!1})}catch(w){if(w instanceof X&&(w.status===404||w.status===405||w.status===403&&w.code==="endpoint_not_available"))return null;throw w}}addDeviceRoot(x,w){return this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/devices/${encodeURIComponent(x)}/roots`,{method:"POST",body:w,signal:AbortSignal.timeout(30000)})}removeDeviceRoot(x,w){return this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/devices/${encodeURIComponent(x)}/roots/${encodeURIComponent(w)}`,{method:"DELETE",signal:AbortSignal.timeout(30000)})}machinePath(x,w=""){let H=`/organizations/${encodeURIComponent(this.credentials.orgId)}/machines`;return x===void 0?H:`${H}/${encodeURIComponent(x)}${w}`}async listMachines(){return W(Xx,await this.request(this.machinePath()),"invalid_machine_list").machines}async createMachine(x){let w=await this.request(this.machinePath(),{method:"POST",body:{name:x.name,...x.platform?{platform:x.platform}:{}}});return W(Yx,w,"invalid_machine").machine}async deleteMachine(x){let w=await this.request(this.machinePath(x),{method:"DELETE"});return W(Bx,w,"invalid_machine_deletion")}async createMachineToken(x){let w=await this.request(this.machinePath(x,"/tokens"),{method:"POST",body:{}});return W(Dx,w,"invalid_machine_token")}async createMachineEnrollmentTicket(x,w){let H=await this.request(this.machinePath(x,"/enrollment-tickets"),{method:"POST",body:w,signal:AbortSignal.timeout(30000),retryUnauthorized:!1});return W(j,H,"invalid_machine_ticket")}self(x){return this.request("/self",{signal:x})}submitFeedback(x){return this.request("/feedback",{method:"POST",body:x,signal:AbortSignal.timeout(30000)})}agentNetwork(){return this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/agent-network`,{signal:AbortSignal.timeout(30000)})}startAgentNetwork(x){return this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/agent-network`,{method:"POST",body:x,signal:AbortSignal.timeout(30000)})}rotateAgentNetwork(x){return this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/agent-network`,{method:"PUT",body:x,signal:AbortSignal.timeout(30000)})}async claimAgentNetworkRelayJob(x,w){let H=await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/agent-network/relay/claim`,{method:"POST",body:x,signal:w});return W(R,H,"invalid_agent_network_job")}async completeAgentNetworkRelayJob(x,w){await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/agent-network/relay/jobs/${encodeURIComponent(x)}`,{method:"POST",body:w,signal:AbortSignal.timeout(30000)})}async recordAgentNetworkRelayReplies(x){await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/agent-network/relay/replies`,{method:"POST",body:x,signal:AbortSignal.timeout(30000)})}async workspaceMembers(){return((await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/members/users`,{signal:AbortSignal.timeout(30000)})).items??[]).flatMap((w)=>typeof w.email==="string"?[{email:w.email,role:typeof w.role==="string"?w.role:"member"}]:[])}claimExistingCliPairing(x){return this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/onboarding/import/pairing/claim-existing`,{method:"POST",body:{pairing_code:x}})}async claudeCodeSignIn(x){return(await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/provider-credentials`,{retryUnauthorized:!1,signal:x?AbortSignal.any([x,AbortSignal.timeout(15000)]):AbortSignal.timeout(15000)})).claude_code_sign_in===!0}connectAnthropicProvider(x,w,H={}){let G=x.kind==="setup_token"?{setup_token:x.token}:{access_token:x.credential.access,refresh_token:x.credential.refresh,expires_at:new Date(x.credential.expires).toISOString()};return this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/provider-credentials/anthropic`,{method:"POST",retryUnauthorized:H.retryUnauthorized,signal:H.signal,body:{...G,...w?{account_key:w}:{}}})}async listRepositories(){return((await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/repositories`)).items??[]).flatMap((w)=>{let H=typeof w.full_name==="string"?w.full_name:typeof w.repo_full_name==="string"?w.repo_full_name:null;if(!H)return[];return[{repo_id:typeof w.repo_id==="string"?w.repo_id:void 0,full_name:H,provider:w.provider==="gitlab"?"gitlab":"github",default_branch:typeof w.default_branch==="string"?w.default_branch:null,private:typeof w.private==="boolean"?w.private:void 0}]})}async listProjects(){let x=await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/projects`),w=e.safeParse(x);if(!w.success)throw new X(502,"invalid_project_list","Reason returned an unexpected project list.");return w.data.items}async listReasons(){let x=await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/reasons`);return W(wx,x,"invalid_reason_list").items}async openReasonConversation(x){let w=await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/reasons/${encodeURIComponent(x)}/conversation`,{method:"POST"});return W($.object({session_id:$.string().min(1)}),w,"invalid_reason_conversation").session_id}async listSkills(){try{let x=await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/skills`);return W(Hx,x,"invalid_skill_list").items}catch(x){if(x instanceof X&&(x.status===403||x.status===404))return[];throw x}}async listDevices(){let x=[],w=null;for(let H=0;H<50;H+=1){let G=await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/devices${w?`?after=${encodeURIComponent(w)}`:""}`),J=r.safeParse(G);if(!J.success)throw new X(502,"invalid_device_list","Reason returned an unexpected machine list.");if(x.push(...J.data.devices),w=J.data.has_next_page?J.data.end_cursor??null:null,!w)break}return x}async listModels(){try{let w=((await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/agent-auth/models`)).models??[]).filter((J)=>J.hidden!==!0),H=w.filter((J)=>J.available!==!1).map(({reasoning_efforts:J,hidden:Q,available:Z,...V})=>({...V,...Array.isArray(J)?{reasoning_efforts:n.filter((Y)=>J.includes(Y))}:{}})),G=new Set(H.map((J)=>J.detail));return{models:H.length>1&&G.size===1?H.map(({detail:J,...Q})=>Q):H,runnable:H.length>0||w.length===0}}catch(x){if(x instanceof X&&(x.status===403||x.status===404))return{models:[],runnable:!0};throw x}}async getAgentVersion(x){try{let w=await this.request("/deployment",{signal:x,retryUnauthorized:!1});return U(w.reason_version)?w.reason_version:null}catch{return null}}async getUsageQuota(){try{let x=p.safeParse(await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/usage/quota`));if(!x.success)return null;let w;try{w=i(await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/agent-auth/models`))}catch{}return{...x.data,own_inference:w}}catch(x){if(x instanceof X&&(x.status===403||x.status===404))return null;throw x}}async listSessionFields(x){let w=new URLSearchParams({first:String(Math.min(Math.max(x.first,1),200)),status:x.status??"active"});if(x.origin)w.set("origin",x.origin);w.set("fields",x.fields.join(","));let H=`/organizations/${encodeURIComponent(this.credentials.orgId)}/sessions?${w.toString()}`,{status:G,headers:J,json:Q}=await this.exchange(H,x.etag?{ifNoneMatch:x.etag}:{});if(G===304)return null;if(G<200||G>299)throw P(G,Q,J.get("retry-after"));return{items:Array.isArray(Q.items)?Q.items:[],etag:J.get("etag")}}async listSessions(x=50,w,H={}){let G=new URLSearchParams({first:String(Math.min(Math.max(x,1),200)),status:H.status??"active"});if(w)G.set("project_id",w);if(H.origin)G.set("origin",H.origin);return(await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/sessions?${G.toString()}`)).items??[]}getSession(x,w){let H=w?.fields.length?`?fields=${encodeURIComponent(w.fields.join(","))}`:"";return this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/sessions/${encodeURIComponent(x)}${H}`)}async prestartSession(x){let w=await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/sessions/prestart`,{method:"POST",body:{client_session_id:x}});return w?.status==="starting"||w?.status==="ready"}async createSession(x){let w=x.mode==="ephemeral"||x.workspaceOwnership==="externally-managed";if(x.attachments?.length)await this.requireSessionAttachments();if(w||x.runtimeProfile){let J=await this.request("/deployment");if(w&&(!Array.isArray(J.session_modes)||!J.session_modes.includes(x.mode??"standard")||!Array.isArray(J.workspace_ownerships)||!J.workspace_ownerships.includes(x.workspaceOwnership??"managed")))throw Error("Deployment does not support the requested Session policy; refusing to create a Session.");if(x.runtimeProfile&&(!Array.isArray(J.experimental_runtime_profiles)||!J.experimental_runtime_profiles.includes(x.runtimeProfile)))throw Error("Deployment does not support the requested runtime profile; refusing to create a Session.")}let H=await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/sessions`,{method:"POST",body:{prompt:x.prompt,...x.attachments?.length?{attachments:x.attachments}:{},...x.mode?{mode:x.mode}:{},...x.workspaceOwnership?{workspace_ownership:x.workspaceOwnership}:{},...x.target?{target:x.target}:{},...x.repo?{repo:x.repo}:{},...x.provider?{provider:x.provider}:{},...x.model?{model:x.model}:{},...x.reasoningEffort?{reasoning_effort:x.reasoningEffort}:{},...x.runtimeProfile?{experimental_runtime_profile:x.runtimeProfile}:{},...x.ref?{ref:x.ref}:{},...x.branch?{branch:x.branch}:{},...x.completionMode?{completion_mode:x.completionMode}:{},...x.env&&Object.keys(x.env).length>0?{env:x.env}:{},...x.clientSessionId?{client_session_id:x.clientSessionId}:{},...x.longRunning?{long_running:{enabled:!0}}:{},...x.spendLimitRcu?{spend_limit_rcu:x.spendLimitRcu}:{},idempotency_key:`cli-${crypto.randomUUID()}`}}),G=await this.getSession(H.session_id);if(w){let J=G.session_policy,Q=["memoryRead","memoryWrite","skills","inheritedInstructions","integrations","secretInjection"];if(!J||J.version!==1||J.mode!==(x.mode??"standard")||J.workspaceOwnership!==(x.workspaceOwnership??"managed")||!J.components||Q.some((Z)=>J.components[Z]!==!0))throw await this.cancelSession(H.session_id),Error("Server did not attest the requested Session policy; cancellation requested.")}if(x.runtimeProfile&&G.experimental_runtime_profile!==x.runtimeProfile)throw await this.cancelSession(H.session_id),Error("Server did not attest the requested runtime profile; cancellation requested.");return G}async getEvents(x,w=-1,H={}){try{return await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/sessions/${encodeURIComponent(x)}/events?after_seq=${w}&limit=500${H.waitMs?`&wait_ms=${H.waitMs}`:""}`,H.signal?{signal:H.signal}:{})}catch(G){if(!(G instanceof X)||G.status!==403&&G.status!==404)throw G;return{session:await this.getSession(x),items:[],next_seq:w}}}async getMessages(x,w){return this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/sessions/${encodeURIComponent(x)}/messages?first=500${w===void 0?"":`&after_seq=${w}`}`)}async getAttachments(x,w){try{return(await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/sessions/${encodeURIComponent(x)}/attachments${w?`?view=${w}`:""}`)).items??[]}catch(H){if(H instanceof X&&(H.status===403||H.status===404))return[];throw H}}async requireSessionAttachments(){let x=await this.request("/deployment",{headers:{"cache-control":"no-cache"}});if(x.session_attachments!==!0){let w=typeof x.reason_version==="string"&&/^\d+\.\d+(?:\.\d+)?$/.test(x.reason_version)?`Agent ${x.reason_version}`:null,H=typeof x.commit_sha==="string"&&/^[a-f0-9]{40,64}$/i.test(x.commit_sha)?`server ${x.commit_sha.slice(0,12)}`:null,G=[w,H].filter(Boolean).join(", ");throw Error(`This server does not support Session image attachments: ${new URL(this.credentials.apiOrigin).host}${G?` (${G})`:""}. The API server needs an attachment-capable deployment; updating the Agent version alone is not enough. Your image was not sent; retry after the server update.`)}}async sendMessage(x,w,H={}){if(H.attachments?.length)await this.requireSessionAttachments();return this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/sessions/${encodeURIComponent(x)}/messages`,{method:"POST",body:{message:w,...H.attachments?.length?{attachments:H.attachments}:{},...H.model?{model:H.model}:{},...H.reasoningEffort?{reasoning_effort:H.reasoningEffort}:{},...H.target?{target:H.target}:{},...H.delivery?{delivery:H.delivery}:{}}})}async steerQueuedMessage(x,w){await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/sessions/${encodeURIComponent(x)}/messages/${encodeURIComponent(w)}/steer`,{method:"POST",body:{}})}async withdrawQueuedMessage(x,w){await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/sessions/${encodeURIComponent(x)}/messages/${encodeURIComponent(w)}/queued`,{method:"DELETE"})}async getConversation(x){let w=[],H=null;for(let G=0;G<50;G+=1){let J=await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/sessions/${encodeURIComponent(x)}/conversation${H?`?after=${encodeURIComponent(H)}`:""}`);if(w.push(...J.items??[]),!J.has_next_page||!J.end_cursor)break;H=J.end_cursor}return w}createSharedLink(x,w){return this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/sessions/${encodeURIComponent(x)}/shared-links`,{method:"POST",body:{url:w.url,...w.label?{label:w.label}:{},...w.expiresInSeconds!==void 0?{expires_in_seconds:w.expiresInSeconds}:{}}})}sessionAction(x,w,H={}){return this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/sessions/${encodeURIComponent(x)}/${w}`,{method:"POST",body:H})}renameSession(x,w){return this.sessionAction(x,"rename",{title:w||null})}moveSessionToProject(x,w){return this.sessionAction(x,"project",{project_id:w})}compactSession(x){return this.sessionAction(x,"compact")}retrySession(x){return this.sessionAction(x,"retry")}rewindSession(x,w){return this.sessionAction(x,"rewind",{message_id:w.messageId,content:w.content,request_id:w.requestId})}forkSession(x,w){return this.sessionAction(x,"fork",{...w.message?{message:w.message}:{},client_session_id:w.clientSessionId})}cancelSession(x,w={}){return this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/sessions/${encodeURIComponent(x)}/cancel`,{method:"POST",body:w.mode==="hard"?{mode:"hard"}:{}})}sessionPath(x,w=""){return`/organizations/${encodeURIComponent(this.credentials.orgId)}/sessions/${encodeURIComponent(x)}${w}`}async archiveSession(x){await this.request(this.sessionPath(x,"/archive"),{method:"POST",body:{}})}async unarchiveSession(x){await this.request(this.sessionPath(x,"/unarchive"),{method:"POST",body:{}})}async deleteSession(x){await this.request(this.sessionPath(x),{method:"DELETE"})}async listSessionTags(x){return W(S,await this.request(this.sessionPath(x,"/tags")),"invalid_session_tags").tags}async appendSessionTags(x,w){let H=await this.request(this.sessionPath(x,"/tags"),{method:"POST",body:{tags:w}});return W(S,H,"invalid_session_tags").tags}async sessionInsight(x,w=!1){let H=await this.request(this.sessionPath(x,w?"/insights/generate":"/insights"),w?{method:"POST",body:{}}:{});return W(Zx,H,"invalid_session_insight")}async listAutomations(){let x=[],w=null;for(let H=0;H<20;H+=1){let G=await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/automations?first=100${w?`&after=${encodeURIComponent(w)}`:""}`),J=W(Jx,G,"invalid_automation_list");if(x.push(...J.items),w=J.has_next_page?J.end_cursor??null:null,!w)break}return x}async createScheduledAutomation(x,w){let H=`/organizations/${encodeURIComponent(this.credentials.orgId)}/automations`,G=W(k,await this.request(H,{method:"POST",body:{name:x.name,instructions:x.instructions,...x.repo?{repo:x.repo.full_name,provider:x.repo.provider}:{}}}),"invalid_automation");try{await this.request(`${H}/${encodeURIComponent(G.id)}/triggers`,{method:"POST",body:w})}catch(J){throw await this.deleteAutomation(G.id).catch(()=>{return}),J}return G}async setAutomationEnabled(x,w){await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/automations/${encodeURIComponent(x)}`,{method:"PATCH",body:{enabled:w}})}async deleteAutomation(x){await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/automations/${encodeURIComponent(x)}`,{method:"DELETE"})}async transcribe(x,w){let H=await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/transcribe`,{method:"POST",raw:{bytes:x,contentType:w}});return W($.object({transcript:$.string()}),H,"invalid_transcript").transcript}async listMcpServers(){let x=await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/mcp-servers`);return W(Wx,x,"invalid_mcp_server_list").items}async setSkillEnabled(x,w){await this.request(`/organizations/${encodeURIComponent(this.credentials.orgId)}/skills/${encodeURIComponent(x)}`,{method:"PUT",body:{is_enabled:w}})}}
|
|
4
|
+
export{hx as F,B as G,Ex as H,fx as I,K as J,mx as K,gx as L,X as M,n as N,px as O,tx as P,ix as Q,Px as R};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var
|
|
3
|
-
export{
|
|
2
|
+
var p={REASON_API_KEY:"ARA_API_KEY",REASON_API_URL:"ARA_API_URL",REASON_CLI_CHANNEL:"ARA_CLI_CHANNEL",REASON_CLI_LAUNCHER_PATH:"ARA_CLI_LAUNCHER_PATH",REASON_MANAGED_RUNTIME_ROOT:"ARA_MANAGED_RUNTIME_ROOT",REASON_INSTALL_ALIAS_PATH:"ARA_INSTALL_ALIAS_PATH",REASON_INSTALL_DIR:"ARA_INSTALL_DIR",REASON_INSTALL_METHOD:"ARA_INSTALL_METHOD",REASON_INSTALL_PINNED_VERSION:"ARA_INSTALL_PINNED_VERSION",REASON_INSTALL_UPGRADE:"ARA_INSTALL_UPGRADE"},z=Object.values(p),x=new Set;function B(k,j){let q=k[j];if(q?.trim())return q;let w=k[p[j]];if(w?.trim())x.add(p[j]);return w}function D(k,j){return{[k]:j,[p[k]]:j}}
|
|
3
|
+
export{B as bl,D as cl};
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{ll as l}from"./vm-hands-entry-lite-v4r1fggm.js";import{execFile as zj,spawn as I}from"child_process";var Cj="h264_ws_v1",kj="video",h=["smooth","sharp","data_saver","balanced"];var Yj="video_presets";var V=8388608,Y=65536,Aj="control",Lj="v1",d=200;function s(q){if(!q||typeof q!=="object"||Array.isArray(q))return null;let j=q,J=(Q)=>typeof Q==="string"&&Q.length>0&&Q.length<=d;if(Object.keys(j).length!==2||!J(j.user_id)||!J(j.name))return null;return{user_id:j.user_id,name:j.name}}var xj="windows",Mj="v1",x=200,o=(q)=>typeof q==="string"&&h.includes(q);function fj(q){if(!q||typeof q!=="object"||Array.isArray(q))return null;let j=q;if(Object.keys(j).length!==2||j.format!=="h264_ws_v1"||!o(j.preset))return null;return{format:"h264_ws_v1",preset:j.preset}}var $={hello:1,frame:2,stats:3,pong:4,serverClipboard:5,error:6,audioHello:7,audio:8,control:9,windows:10,pointer:16,key:17,config:18,ping:19,clientClipboard:20,keyframeRequest:21,ack:22,audioEnable:23,resize:24};class U extends Error{constructor(q){super(q);this.name="DisplayVideoProtocolError"}}var e=new TextEncoder,jj=new TextDecoder("utf-8",{fatal:!0});function H(q,j){if(j.byteLength+1>V)throw new U("message_too_large");let J=new Uint8Array(5+j.byteLength),Q=new DataView(J.buffer);return Q.setUint32(0,j.byteLength+1),Q.setUint8(4,q),J.set(j,5),J}function C(q){let j=e.encode(q);if(j.byteLength>Y)throw new U("text_too_large");return j}function L(q,j){if(!Number.isInteger(q)||q<0||q>65535)throw new U(`invalid_${j}`);return q}function qj(q){if(!Number.isFinite(q))throw new U("invalid_window");return Math.max(-2147483648,Math.min(2147483647,Math.round(q)))}function hj(q){switch(q.type){case"hello":{let j=C(q.codec),J=new Uint8Array(6+j.byteLength),Q=new DataView(J.buffer);return Q.setUint16(0,L(q.width,"width")),Q.setUint16(2,L(q.height,"height")),Q.setUint8(4,Math.max(1,Math.min(240,Math.round(q.fps)))),Q.setUint8(5,h.indexOf(q.preset)),J.set(j,6),H($.hello,J)}case"frame":{let j=new Uint8Array(13+q.data.byteLength),J=new DataView(j.buffer);return J.setUint8(0,q.key?1:0),J.setUint32(1,q.seq>>>0),J.setBigUint64(5,BigInt(Math.max(0,Math.floor(q.captureMicros)))),j.set(q.data,13),H($.frame,j)}case"stats":return H($.stats,C(JSON.stringify(q.stats)));case"pong":case"ping":{let j=new Uint8Array(8);return new DataView(j.buffer).setFloat64(0,q.token),H(q.type==="ping"?$.ping:$.pong,j)}case"serverClipboard":return H($.serverClipboard,C(q.text));case"clientClipboard":return H($.clientClipboard,C(q.text));case"error":return H($.error,C(q.code));case"pointer":{let j=new Uint8Array(5),J=new DataView(j.buffer);return J.setUint16(0,L(q.x,"x")),J.setUint16(2,L(q.y,"y")),J.setUint8(4,q.buttons&255),H($.pointer,j)}case"key":{let j=new Uint8Array(5),J=new DataView(j.buffer);return J.setUint8(0,q.down?1:0),J.setUint32(1,q.keysym>>>0),H($.key,j)}case"config":return H($.config,Uint8Array.of(h.indexOf(q.preset)));case"keyframeRequest":return H($.keyframeRequest,new Uint8Array(0));case"audioHello":{let j=C(q.codec),J=new Uint8Array(5+j.byteLength),Q=new DataView(J.buffer);return Q.setUint32(0,q.sampleRate>>>0),Q.setUint8(4,q.channels&255),J.set(j,5),H($.audioHello,J)}case"audio":{let j=new Uint8Array(8+q.data.byteLength);return new DataView(j.buffer).setBigUint64(0,BigInt(Math.max(0,Math.floor(q.captureMicros)))),j.set(q.data,8),H($.audio,j)}case"control":return H($.control,C(JSON.stringify(q.control)));case"windows":{let j=q.bounds.slice(0,x),J=new Uint8Array(j.length*16),Q=new DataView(J.buffer);return j.forEach((Z,z)=>{[Z.x,Z.y,Z.width,Z.height].forEach((G,F)=>Q.setInt32(z*16+F*4,qj(G)))}),H($.windows,J)}case"audioEnable":return H($.audioEnable,Uint8Array.of(q.on?1:0));case"resize":{let j=new Uint8Array(4),J=new DataView(j.buffer);return J.setUint16(0,L(q.width,"width")),J.setUint16(2,L(q.height,"height")),H($.resize,j)}case"ack":{let j=new Uint8Array(4);return new DataView(j.buffer).setUint32(0,q.seq>>>0),H($.ack,j)}}}function T(q){let j=h[q];if(!j)throw new U("invalid_preset");return j}function R(q,j){if(q.byteLength!==j)throw new U("invalid_length")}function k(q){if(q.byteLength>Y)throw new U("text_too_large");try{return jj.decode(q)}catch{throw new U("invalid_text")}}function Jj(q){let j;try{j=JSON.parse(k(q))}catch{throw new U("invalid_stats")}let J=j;if(!J||typeof J!=="object"||["fps","kbps","dropped","restarts","queued_bytes"].some((Z)=>typeof J[Z]!=="number"||!Number.isFinite(J[Z])))throw new U("invalid_stats");return{fps:J.fps,kbps:J.kbps,dropped:J.dropped,restarts:J.restarts,queued_bytes:J.queued_bytes}}function Qj(q){let j;try{j=JSON.parse(k(q))}catch{throw new U("invalid_control")}let J=j;if(!J||typeof J!=="object"||typeof J.you!=="boolean"||typeof J.same_user!=="boolean")throw new U("invalid_control");let Q=J.holder===null?null:s(J.holder);if(Q===null&&J.holder!==null)throw new U("invalid_control");return{holder:Q,you:J.you,same_user:J.same_user}}function Zj(q,j){let J=new DataView(j.buffer,j.byteOffset,j.byteLength);switch(q){case $.hello:if(j.byteLength<6)throw new U("invalid_length");return{type:"hello",width:J.getUint16(0),height:J.getUint16(2),fps:J.getUint8(4),preset:T(J.getUint8(5)),codec:k(j.subarray(6))};case $.frame:if(j.byteLength<14)throw new U("invalid_length");if(J.getUint8(0)>1)throw new U("invalid_frame_flags");return{type:"frame",key:J.getUint8(0)===1,seq:J.getUint32(1),captureMicros:Number(J.getBigUint64(5)),data:j.subarray(13)};case $.stats:return{type:"stats",stats:Jj(j)};case $.ping:case $.pong:return R(j,8),{type:q===$.ping?"ping":"pong",token:J.getFloat64(0)};case $.serverClipboard:return{type:"serverClipboard",text:k(j)};case $.clientClipboard:return{type:"clientClipboard",text:k(j)};case $.error:return{type:"error",code:k(j)};case $.pointer:return R(j,5),{type:"pointer",x:J.getUint16(0),y:J.getUint16(2),buttons:J.getUint8(4)};case $.key:if(R(j,5),J.getUint8(0)>1)throw new U("invalid_key_flags");return{type:"key",down:J.getUint8(0)===1,keysym:J.getUint32(1)};case $.config:return R(j,1),{type:"config",preset:T(J.getUint8(0))};case $.keyframeRequest:return R(j,0),{type:"keyframeRequest"};case $.audioHello:if(j.byteLength<5)throw new U("invalid_length");return{type:"audioHello",sampleRate:J.getUint32(0),channels:J.getUint8(4),codec:k(j.subarray(5))};case $.audio:if(j.byteLength<9)throw new U("invalid_length");return{type:"audio",captureMicros:Number(J.getBigUint64(0)),data:j.subarray(8)};case $.audioEnable:if(R(j,1),J.getUint8(0)>1)throw new U("invalid_audio_flags");return{type:"audioEnable",on:J.getUint8(0)===1};case $.resize:return R(j,4),{type:"resize",width:J.getUint16(0),height:J.getUint16(2)};case $.control:return{type:"control",control:Qj(j)};case $.windows:{if(j.byteLength%16!==0||j.byteLength>x*16)throw new U("invalid_length");let Q=[];for(let Z=0;Z<j.byteLength;Z+=16)Q.push({x:J.getInt32(Z),y:J.getInt32(Z+4),width:J.getInt32(Z+8),height:J.getInt32(Z+12)});return{type:"windows",bounds:Q}}case $.ack:return R(j,4),{type:"ack",seq:J.getUint32(0)};default:return null}}class $j{buffer=new Uint8Array(0);push(q){let j=new Uint8Array(this.buffer.byteLength+q.byteLength);j.set(this.buffer),j.set(q,this.buffer.byteLength);let J=[],Q=0;while(j.byteLength-Q>=4){let Z=new DataView(j.buffer,j.byteOffset+Q,4).getUint32(0);if(Z<1||Z>V)throw new U("invalid_message_length");if(j.byteLength-Q-4<Z)break;let z=j[Q+4],G=j.slice(Q+5,Q+4+Z),F=Zj(z,G);if(F)J.push(F);Q+=4+Z}return this.buffer=j.slice(Q),J}}var t="/usr/bin/osascript",Gj=5000,Kj=1048576,Uj=String.raw`
|
|
3
|
+
ObjC.import("CoreGraphics");
|
|
4
|
+
ObjC.import("ApplicationServices");
|
|
5
|
+
ObjC.import("AppKit");
|
|
6
|
+
ObjC.bindFunction("CGPreflightScreenCaptureAccess", ["bool", []]);
|
|
7
|
+
ObjC.bindFunction("CGRequestScreenCaptureAccess", ["bool", []]);
|
|
8
|
+
ObjC.bindFunction("getppid", ["int", []]);
|
|
9
|
+
function run(argv) {
|
|
10
|
+
const bounds = $.CGDisplayBounds($.CGMainDisplayID());
|
|
11
|
+
const stdout = $.NSFileHandle.fileHandleWithStandardOutput;
|
|
12
|
+
const screen = $.CGPreflightScreenCaptureAccess(), accessibility = $.AXIsProcessTrusted();
|
|
13
|
+
stdout.writeData($(JSON.stringify({ screen, accessibility,
|
|
14
|
+
width: bounds.size.width, height: bounds.size.height }) + "\n").dataUsingEncoding($.NSUTF8StringEncoding));
|
|
15
|
+
if (argv[0] === "request") {
|
|
16
|
+
if (!screen && argv[1] !== "accessibility") $.CGRequestScreenCaptureAccess();
|
|
17
|
+
if (!accessibility && argv[1] !== "screen") $.AXIsProcessTrustedWithOptions($({ AXTrustedCheckOptionPrompt: true }));
|
|
18
|
+
}
|
|
19
|
+
if (argv[0] === "probe" || argv[0] === "request") return;
|
|
20
|
+
if (argv[0] === "clipboard") {
|
|
21
|
+
const parent = $.getppid(), clipboard = $.NSPasteboard.generalPasteboard;
|
|
22
|
+
// Only changes made during this pairing: never export the initial pasteboard.
|
|
23
|
+
let last = Number(clipboard.changeCount);
|
|
24
|
+
while ($.getppid() === parent) {
|
|
25
|
+
$.NSThread.sleepForTimeInterval(0.1);
|
|
26
|
+
const count = Number(clipboard.changeCount);
|
|
27
|
+
if (count === last) continue;
|
|
28
|
+
last = count;
|
|
29
|
+
const text = clipboard.stringForType($.NSPasteboardTypeString);
|
|
30
|
+
if (!text) continue;
|
|
31
|
+
const bytes = text.dataUsingEncoding($.NSUTF8StringEncoding);
|
|
32
|
+
if (Number(bytes.length) > ${Y}) continue;
|
|
33
|
+
stdout.writeData($("c " + bytes.base64EncodedStringWithOptions(0).js + "\n").dataUsingEncoding($.NSUTF8StringEncoding));
|
|
34
|
+
}
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const stdin = $.NSFileHandle.fileHandleWithStandardInput;
|
|
38
|
+
let pending = "";
|
|
39
|
+
for (;;) {
|
|
40
|
+
const data = stdin.availableData;
|
|
41
|
+
if (Number(data.length) === 0) return;
|
|
42
|
+
pending += $.NSString.alloc.initWithDataEncoding(data, $.NSUTF8StringEncoding).js;
|
|
43
|
+
for (let end = pending.indexOf("\n"); end >= 0; end = pending.indexOf("\n")) {
|
|
44
|
+
const [kind, ...rest] = pending.slice(0, end).split(" ");
|
|
45
|
+
pending = pending.slice(end + 1);
|
|
46
|
+
const n = rest.map(Number);
|
|
47
|
+
let event = null;
|
|
48
|
+
if (kind === "m") {
|
|
49
|
+
event = $.CGEventCreateMouseEvent($(), n[0], { x: n[1], y: n[2] }, n[3]);
|
|
50
|
+
$.CGEventSetIntegerValueField(event, $.kCGMouseEventClickState, n[4]);
|
|
51
|
+
} else if (kind === "w") {
|
|
52
|
+
event = $.CGEventCreateScrollWheelEvent($(), $.kCGScrollEventUnitPixel, 2, n[0], n[1]);
|
|
53
|
+
} else if (kind === "k") {
|
|
54
|
+
event = $.CGEventCreateKeyboardEvent($(), n[0], n[1] === 1);
|
|
55
|
+
} else if (kind === "u") {
|
|
56
|
+
event = $.CGEventCreateKeyboardEvent($(), 0, n[0] === 1);
|
|
57
|
+
const unit = Ref("unsigned short");
|
|
58
|
+
unit[0] = n[1];
|
|
59
|
+
$.CGEventKeyboardSetUnicodeString(event, 1, unit);
|
|
60
|
+
} else if (kind === "c") {
|
|
61
|
+
const bytes = $.NSData.alloc.initWithBase64EncodedStringOptions($(rest[0] || ""), 0);
|
|
62
|
+
$.NSPasteboard.generalPasteboard.clearContents;
|
|
63
|
+
$.NSPasteboard.generalPasteboard.setStringForType($.NSString.alloc.initWithDataEncoding(bytes, $.NSUTF8StringEncoding), $.NSPasteboardTypeString);
|
|
64
|
+
}
|
|
65
|
+
if (event) {
|
|
66
|
+
$.CGEventSetFlags(event, n[n.length - 1]);
|
|
67
|
+
$.CGEventPost($.kCGHIDEventTap, event);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
`;function r(q){let j;try{j=JSON.parse(q)}catch{return null}if(!j||typeof j!=="object")return null;let J=j,Q=(G)=>typeof G==="number"&&Number.isFinite(G)?Math.min(65535,Math.round(G)):0;if(typeof J.screen!=="boolean"||typeof J.accessibility!=="boolean")return null;let Z=Q(J.width),z=Q(J.height);return Z>0&&z>0?{screen:J.screen,accessibility:J.accessibility,width:Z,height:z}:null}function w(q,...j){let[J,...Q]=[...q,t,"-l","JavaScript","-e",Uj,...j];return[J,Q]}function y(q,...j){return new Promise((J)=>{zj(...w(q,...j),{env:{},timeout:Gj,killSignal:"SIGKILL",maxBuffer:65536,encoding:"utf8"},(Q,Z)=>J(Q?null:r(Z.split(`
|
|
73
|
+
`)[0]??"")))})}function Sj(q=[]){return y(q,"probe")}function _j(q,j){return y(q,"request",...j?[j]:[])}var u=2,Fj=8,Bj=String.raw`
|
|
74
|
+
ObjC.import("CoreGraphics");
|
|
75
|
+
ObjC.import("Foundation");
|
|
76
|
+
ObjC.bindFunction("getppid", ["int", []]);
|
|
77
|
+
function run() {
|
|
78
|
+
const stdout = $.NSFileHandle.fileHandleWithStandardOutput;
|
|
79
|
+
const parent = $.getppid();
|
|
80
|
+
let last = "";
|
|
81
|
+
let wait = ${u};
|
|
82
|
+
// Ends with the worker that started it, even one that never got to kill it.
|
|
83
|
+
while ($.getppid() === parent) {
|
|
84
|
+
const list = ObjC.castRefToObject($.CGWindowListCopyWindowInfo($.kCGWindowListOptionOnScreenOnly | $.kCGWindowListExcludeDesktopElements, 0));
|
|
85
|
+
const bounds = [];
|
|
86
|
+
const count = Number(list.count);
|
|
87
|
+
for (let i = 0; i < count && bounds.length < ${x}; i++) {
|
|
88
|
+
const window = list.objectAtIndex(i);
|
|
89
|
+
if (Number(window.objectForKey("kCGWindowLayer").js) !== 0) continue;
|
|
90
|
+
const b = window.objectForKey("kCGWindowBounds");
|
|
91
|
+
bounds.push(["X", "Y", "Width", "Height"].map((key) => Math.round(Number(b.objectForKey(key).js))));
|
|
92
|
+
}
|
|
93
|
+
const line = JSON.stringify(bounds);
|
|
94
|
+
if (line !== last) {
|
|
95
|
+
last = line;
|
|
96
|
+
wait = ${u};
|
|
97
|
+
stdout.writeData($(line + "\n").dataUsingEncoding($.NSUTF8StringEncoding));
|
|
98
|
+
} else {
|
|
99
|
+
wait = Math.min(wait * 2, ${Fj});
|
|
100
|
+
}
|
|
101
|
+
$.NSThread.sleepForTimeInterval(wait);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
`;function Hj(q){let j;try{j=JSON.parse(q)}catch{return null}if(!Array.isArray(j))return null;let J=[];for(let Q of j.slice(0,x)){if(!Array.isArray(Q)||Q.length!==4||!Q.every((K)=>typeof K==="number"&&Number.isFinite(K)))return null;let[Z,z,G,F]=Q.map(Math.round);if(G>0&&F>0)J.push({x:Z,y:z,width:G,height:F})}return J}function Tj(q){let j=Date.now(),J=0,Q=!1,Z=(K,W={})=>{try{process.stderr.write(`${JSON.stringify({event:"display.windows_helper",state:K,...W})}
|
|
105
|
+
`)}catch{}},z=(K,W={})=>{if(Q)return;Q=!0,Z(K,{updates:J,duration_ms:Date.now()-j,...W})},G=I(t,["-l","JavaScript","-e",Bj],{env:{},stdio:["ignore","pipe","ignore"]});Z("started");let F="";return G.stdout.on("data",(K)=>{if(Q)return;F+=K.toString("utf8");for(let W=F.indexOf(`
|
|
106
|
+
`);W>=0;W=F.indexOf(`
|
|
107
|
+
`)){let A=Hj(F.slice(0,W));if(F=F.slice(W+1),A)J++,q(A)}if(F.length>65536)F=""}),G.once("error",(K)=>z("failed",{code:K.code??"spawn_failed"})),G.once("exit",(K,W)=>z("failed",{code:"exited",exit_code:K,signal:W})),{close(){z("stopped"),G.kill("SIGKILL")}}}var b=5,m=[{bit:1,button:0,down:1,up:2,drag:6},{bit:4,button:1,down:3,up:4,drag:7},{bit:2,button:2,down:25,up:26,drag:27}],Wj=[[8,1,0],[16,-1,0],[32,0,1],[64,0,-1]],v=50,Xj=500,E=4,P=131072,g=262144,M=524288,D=1048576,c=new Map([[65505,[56,P]],[65506,[60,P]],[65507,[59,g]],[65508,[62,g]],[65511,[58,M]],[65512,[61,M]],[65513,[58,M]],[65514,[61,M]],[65027,[61,M]],[65515,[55,D]],[65516,[54,D]]]),Nj=new Map([[65288,51],[65289,48],[65056,48],[65293,36],[65307,53],[65535,117],[65509,57],[65360,115],[65361,123],[65362,126],[65363,124],[65364,125],[65365,116],[65366,121],[65367,119],[65379,114],[65386,114],[65291,71],[65408,49],[65421,76],[65429,115],[65430,123],[65431,126],[65432,124],[65433,125],[65434,116],[65435,121],[65436,119],[65437,71],[65438,114],[65439,117],[65450,67],[65451,69],[65452,65],[65453,78],[65454,65],[65455,75],[65469,81],...[82,83,84,85,86,87,88,89,91,92].map((q,j)=>[65456+j,q]),...[122,120,99,118,96,97,98,100,101,109,103,111,105,107,113,106,64,79,80,90].map((q,j)=>[65470+j,q])]),p="asdfhgzxcv\x00bqweryt123465=97-80]ou[ip\x00lj'k;\\,/nm.\x00 `",n='~!@#$%^&*()_+{}|:"<>?',Rj="`1234567890-=[]\\;',./",f=new Map;for(let q=0;q<p.length;q++){let j=p[q];if(j==="\x00")continue;if(f.set(j.charCodeAt(0),[q,!1]),j>="a"&&j<="z")f.set(j.toUpperCase().charCodeAt(0),[q,!0])}for(let q=0;q<n.length;q++)f.set(n.charCodeAt(q),[f.get(Rj.charCodeAt(q))[0],!0]);class a{now;x=-1;y=-1;mask=0;clicks=0;lastDown=null;held=new Set;constructor(q=()=>performance.now()){this.now=q}flags(){let q=0;for(let j of this.held)q|=c.get(j)[1];return q}mouse(q,j){return`m ${q} ${this.x} ${this.y} ${j} ${q===b?0:this.clicks} ${this.flags()}`}pointer(q,j,J){let Q=[];if(q!==this.x||j!==this.y){this.x=q,this.y=j;let Z=m.find((z)=>this.mask&z.bit);Q.push(Z?this.mouse(Z.drag,Z.button):this.mouse(b,0))}for(let Z of m){let z=(this.mask&Z.bit)!==0,G=(J&Z.bit)!==0;if(!z&&G){let F=this.now(),K=this.lastDown;this.clicks=K&&K.button===Z.button&&F-K.at<=Xj&&Math.abs(q-K.x)<=E&&Math.abs(j-K.y)<=E?this.clicks+1:1,this.lastDown={button:Z.button,at:F,x:q,y:j},Q.push(this.mouse(Z.down,Z.button))}else if(z&&!G)Q.push(this.mouse(Z.up,Z.button))}for(let[Z,z,G]of Wj)if(!(this.mask&Z)&&J&Z)Q.push(`w ${z*v} ${G*v} ${this.flags()}`);return this.mask=J,Q}key(q,j){let J=q?1:0,Q=c.get(j);if(Q){if(q)this.held.add(j);else this.held.delete(j);return[`k ${Q[0]} ${J} ${this.flags()}`]}let Z=Nj.get(j);if(Z!==void 0)return[`k ${Z} ${J} ${this.flags()}`];let z=j<256?j:(j&4278190080)===16777216?j&16777215:0,G=f.get(z);if(G)return[`k ${G[0]} ${J} ${this.flags()|(G[1]?P:0)}`];if(z<160||z>65535||z>=55296&&z<57344)return[];return[`u ${J} ${z} ${this.flags()}`]}}function Vj(q,j=[]){let J=I(...w(j),{env:{},stdio:["pipe","pipe","ignore"]}),Q=new a,Z="",z=!1,G=null,F=()=>{J.kill("SIGKILL"),G?.kill("SIGKILL")},K=(B)=>{if(z)return;z=!0,F(),q.end(B)},W=(B)=>K({error:new l("display_unavailable",B)}),A=(B)=>{if(z||B.length===0)return;if(J.stdin.write(B.map((N)=>`${N}
|
|
108
|
+
`).join("")),J.stdin.writableLength>Kj)K({reason:"input_backpressure"})},i=()=>{G=I(...w(j,"clipboard"),{env:{},stdio:["ignore","pipe","ignore"]});let B="";G.stdout?.on("data",(N)=>{if(z)return;B+=N.toString("ascii");for(let X=B.indexOf(`
|
|
109
|
+
`);X>=0;X=B.indexOf(`
|
|
110
|
+
`)){let S=B.slice(0,X);if(B=B.slice(X+1),!S.startsWith("c "))continue;let O=S.slice(2);if(O.length>Math.ceil(Y/3)*4||!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(O)){K({reason:"display_protocol"});return}let _=Buffer.from(O,"base64");if(_.byteLength<=Y)q.clipboard(_.toString("utf8"));if(z)return}if(B.length>Math.ceil(Y/3)*4+2)K({reason:"display_protocol"})}),G.once("error",()=>W("Reason could not watch this Mac's desktop clipboard.")),G.once("exit",()=>{if(!z)W("Reason could not watch this Mac's desktop clipboard.")})};return J.stdout.on("data",(B)=>{if(z||Z===null)return;Z+=B.toString("utf8");let N=Z.indexOf(`
|
|
111
|
+
`);if(N<0){if(Z.length>4096)K({reason:"display_protocol"});return}let X=r(Z.slice(0,N));if(Z=null,!X)K({reason:"display_protocol"});else if(!X.screen||!X.accessibility)W(j.length>0?"Reason's background worker needs Screen Recording and Accessibility on this Mac (its own Reason entry in System Settings > Privacy & Security, not the Reason app's): run `reason permissions allow` on this Mac.":"Allow Screen Recording and Accessibility for this Mac's Reason worker, then restart it.");else i(),q.ready({width:X.width,height:X.height})}),J.stdin.on("error",()=>{return}),J.once("error",()=>W("Reason could not start this Mac's desktop input.")),J.once("exit",()=>{if(Z!==null)W("Reason could not start this Mac's desktop input.");else K({reason:"display_closed"})}),{pointer:(B,N,X)=>A(Q.pointer(B,N,X)),key:(B,N)=>A(Q.key(B,N)),clipboard:(B)=>A([`c ${Buffer.from(B,"utf8").toString("base64")}`]),close(){z=!0,F()}}}
|
|
112
|
+
export{Cj as Bh,kj as Ch,h as Dh,Yj as Eh,Y as Fh,Aj as Gh,Lj as Hh,s as Ih,xj as Jh,Mj as Kh,fj as Lh,hj as Mh,$j as Nh,r as Oh,Sj as Ph,_j as Qh,Hj as Rh,Tj as Sh,a as Th,Vj as Uh};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{dl as A}from"./vm-hands-entry-lite-e4hwb89r.js";var b="inference.custom.v1",K=32768,U=67108864,V=16384,W=204800,k=600000,X=["content-type","anthropic-version","user-agent"],L=A.enum(["openai-completions","openai-responses","anthropic-messages"]),Y=new Set(X),Z=A.record(A.string(),A.string().max(2048)).refine((j)=>Object.keys(j).every((w)=>Y.has(w))&&Object.values(j).every((w)=>!/[\r\n\0]/.test(w)),"Only non-secret custom endpoint request headers are permitted");function F(j){try{let w=new URL(j);return["http:","https:"].includes(w.protocol)&&!w.username&&!w.password&&!w.search&&!w.hash?w:null}catch{return null}}function _(j,w){let B=F(j.baseUrl),H=F(w.baseUrl),D=F(j.url);if(!B||!H||!D||j.method!=="POST"||w.execution!=="device")return!1;let I=(J)=>J.origin+J.pathname.replace(/\/+$/,"");if(I(B)!==I(H)||D.origin!==B.origin)return!1;let T=w.api==="openai-completions"?"/chat/completions":w.api==="openai-responses"?"/responses":"/v1/messages";return D.pathname===B.pathname.replace(/\/+$/,"")+T}var y=A.object({baseUrl:A.string().max(2048),url:A.string().max(4096),method:A.literal("POST"),body:A.string().refine((j)=>new TextEncoder().encode(j).byteLength<=W).optional(),headers:Z,credentialOrganizationId:A.string().uuid(),accountKey:A.string().min(1).max(256).optional()}).strict().refine((j)=>L.options.some((w)=>_(j,{baseUrl:j.baseUrl,api:w,execution:"device"})),"Invalid custom endpoint inference URL"),M=A.object({status:A.number().int().min(200).max(599),statusText:A.string().max(256).refine((j)=>!/[\r\n\0]/.test(j)),headers:A.record(A.string(),A.string().max(4096)).refine((j)=>Object.keys(j).every((w)=>["content-type","retry-after","x-request-id","request-id"].includes(w))&&Object.values(j).every((w)=>!/[\r\n\0]/.test(w)))}).strict(),p=A.union([A.object({eof:A.literal(!0)}).strict(),A.object({eof:A.literal(!1),data:A.string().max(Math.ceil(K/3)*4).regex(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/).refine((j)=>j.length>0&&j.length*3/4-(j.endsWith("==")?2:j.endsWith("=")?1:0)<=K)}).strict()]),c=A.object({bytes:A.number().int().min(0).max(U),chunks:A.number().int().min(0).max(V)}).strict(),q=A.object({apiKey:A.string().min(1).max(16384).refine((j)=>!/[\r\n\0]/.test(j)),api:L}).strict(),$=["custom_endpoint_host_not_found","custom_endpoint_connection_failed","custom_endpoint_tls_failed"];function h(j){return typeof j==="string"&&$.includes(j)}var x="Ollama listens only on 127.0.0.1 unless it is started with OLLAMA_HOST=0.0.0.0.",G={custom_endpoint_host_not_found:"Your computer couldn't resolve your model server's hostname. Check the hostname in the Base URL, and that this computer is on the network or tailnet that resolves it.",custom_endpoint_connection_failed:`Your computer's connection to your model server was refused or timed out. Check that the server is running and listening on the Base URL's address and port. ${x}`,custom_endpoint_tls_failed:"Your computer couldn't make a secure (TLS) connection to your model server. Check the server's https certificate, or use an http:// Base URL for a server on your computer or private network.",401:"Your model server refused the request (HTTP 401). Check the API key saved for it in Models.",403:"Your model server refused the request (HTTP 403). Ollama refuses requests addressed to a hostname other than localhost, such as a *.ts.net name from tailscale serve or funnel: restart it with OLLAMA_HOST=0.0.0.0, or use http://localhost:11434/v1 when it runs on the session's computer. For another server, check the API key and its access rules.",404:"Your model server answered HTTP 404 (not found). Check that the Base URL is the API root (for Ollama, http://localhost:11434/v1) and that each model ID is one the server lists."},v="Local custom endpoints require a session on your connected computer. This custom endpoint's Execution location is Your computer, so Reason cloud never calls it. Connect your computer with the Reason desktop app or CLI and run this session there, or set the endpoint's Execution location to Reason cloud with a public https Base URL in Models, or choose another model.";function C(j){return typeof j==="string"&&j.startsWith("Local custom endpoints require a session on your connected computer.")}var E=new Set(Object.values(G));function d(j){return Object.hasOwn(G,j)?G[j]:null}function n(j){return typeof j==="string"&&(E.has(j)||C(j))}var N="returned HTTP 403: its firewall blocked Reason cloud",O="answered without a completion stream",P="answered with a stream event that is not JSON",R=/^Your model endpoint \S+ (?:returned HTTP 40[34]|returned HTTP 403: its firewall blocked Reason cloud|was unreachable: it refused the connection|answered without a completion stream|answered with a stream event that is not JSON)\.$/,S=/Attention Required! \| Cloudflare|Sorry, you have been blocked|cf-error-details/i;function f(j,w,B){if(!/^[a-z0-9.-]+$/i.test(j))return null;if(w==="connection_refused")return`Your model endpoint ${j} was unreachable: it refused the connection.`;if(w==="no_completion")return`Your model endpoint ${j} ${O}.`;if(w==="malformed_stream")return`Your model endpoint ${j} ${P}.`;if(w===403&&B&&S.test(B))return`Your model endpoint ${j} ${N}.`;return w===403||w===404?`Your model endpoint ${j} returned HTTP ${w}.`:null}function Q(j){return typeof j==="string"&&R.test(j)}function o(j){return Q(j)&&(j.includes(O)||j.includes(P))}function t(j){return Q(j)&&j.includes(N)}
|
|
3
|
+
export{b as Pd,K as Qd,U as Rd,V as Sd,W as Td,k as Ud,X as Vd,_ as Wd,y as Xd,M as Yd,p as Zd,c as _d,q as $d,$ as ae,h as be,v as ce,C as de,d as ee,n as fe,f as ge,Q as he,o as ie,t as je};
|