@oracle-agent/oracle 0.35.24 → 0.35.26

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.
@@ -0,0 +1,15 @@
1
+ import{homedir as E}from"node:os";import{join as w}from"node:path";var v=process.env.ORACLE_PUBLIC_DESKTOP==="1",X=v?process.env.ORACLE_CONFIG_DIR||w(E(),".config","oracle"):w(E(),".config","oracle"),xe=v?X:w(E(),".config","mad-desk");var A={robinhood:{chainId:4663,name:"Robinhood Chain",rpcEnv:["RH_CHAIN_RPC"],evm:!0},ethereum:{chainId:1,name:"Ethereum",rpcEnv:["ETH_RPC_URL","ETHEREUM_RPC_URL","MAINNET_RPC_URL"],evm:!0},polygon:{chainId:137,name:"Polygon",rpcEnv:["POLYGON_RPC_URL","POLYGON_RPC"],evm:!0},arbitrum:{chainId:42161,name:"Arbitrum One",rpcEnv:["ARBITRUM_RPC_URL","ARB_RPC_URL"],evm:!0},base:{chainId:8453,name:"Base",rpcEnv:["BASE_RPC_URL"],evm:!0},hyperevm:{chainId:999,name:"HyperEVM",rpcEnv:["HYPEREVM_RPC_URL","HYPER_EVM_RPC"],evm:!0},bsc:{chainId:56,name:"BNB Smart Chain",rpcEnv:["BSC_RPC_URL","BNB_RPC_URL"],evm:!0},avalanche:{chainId:43114,name:"Avalanche C-Chain",rpcEnv:["AVALANCHE_RPC_URL","AVAX_RPC_URL"],evm:!0},optimism:{chainId:10,name:"OP Mainnet",rpcEnv:["OPTIMISM_RPC_URL","OP_RPC_URL"],evm:!0},abstract:{chainId:2741,name:"Abstract",rpcEnv:["ABSTRACT_RPC_URL","ABS_RPC_URL"],evm:!0},stable:{chainId:988,name:"Stable Mainnet",rpcEnv:["STABLE_RPC_URL","STABLE_RPC"],evm:!0}},ge=new Map(Object.values(A).map(e=>[e.chainId,e]));function K(e,t="value"){if(typeof e=="number"){if(!Number.isFinite(e))throw new Error(`${t} must be a finite number`);if(Math.abs(e)>Number.MAX_SAFE_INTEGER)throw new Error(`${t} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);if(Number.isInteger(e)&&!Number.isSafeInteger(e))throw new Error(`${t} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);return String(e)}if(typeof e=="string"){if(e!==e.trim())throw new Error(`${t} must be a number or decimal string`);return e}throw new Error(`${t} must be a number or decimal string`)}function p(e,t="amount"){if(typeof e=="bigint")return e;if(typeof e=="number"){if(!Number.isInteger(e))throw new Error(`${t} must be an integer`);if(!Number.isSafeInteger(e))throw new Error(`${t} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);return BigInt(e)}let n=K(e,t);if(n==="")throw new Error(`${t} is required`);if(!/^-?\d+$/.test(n)&&!/^0x[0-9a-fA-F]+$/.test(n))throw new Error(`${t} must be an integer in decimal or 0x-hex form, got ${JSON.stringify(n)}`);try{return BigInt(n)}catch{throw new Error(`${t} must be an integer, got ${JSON.stringify(n)}`)}}var _=Object.freeze({SAFE:"safe",KERNEL_ZERODEV:"kernel-zerodev",BICONOMY_NEXUS:"biconomy-nexus",PERMISSIONLESS_VIEM:"permissionless-viem"}),Ae=Object.freeze(Object.values(_)),_e=Object.freeze({ACTIVE:"active",EXPIRED:"expired",REVOKED:"revoked"}),Ne=1440*60*1e3;var N=["0x000000000022d473030f116ddee9f6b43ac78ba3"],O={4663:["0xcaf681a66d020601342297493863e78c959e5cb2","0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7","0x1f7d7550b1b028f7571e69a784071f0205fd2efa","0x0bd7d308f8e1639fab988df18a8011f41eacad73","0x5fc5360d0400a0fd4f2af552add042d716f1d168","0xb477751b76cf82d00a686a1232f5fcd772414af3","0xff5cb29241f002ffed2eaa224e3e996d24a6e8d1"],8453:["0x2626664c2603336e57b271c5c0b26f421741e481","0x6ff5693b99212da76ad316178a184ab56d299b43","0x3d4e44eb1374240ce5f1b871ab261cd16335b76a","0x33128a8fc17869897dce68ed026d694621f6fdfd","0x4200000000000000000000000000000000000006","0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","0xbe6d8f0d05cc4be24d5167a3ef062215be6d18a5","0x254cf9e1e6e233aa1ac962cb9b05b2cfeaae15b0","0x5e7bb104d84c7cb9b682aac2f3d509f5f406809a","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x888888888889758f76e7103c6cbf23abbf58f946","0x3f170631ed9821ca51a59d996ab095162438dc10","0x4f37a9d177470499a2dd084621020b023fcffc1f","0xc92e8bdf79f0507f65a392b0ab4667716bfe0110"],42161:["0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","0x61ffe014ba17989e743c5f6cb21bf9697530b21e","0x82af49447d8a07e3bd95bd0d56f35241523fbab1","0xaf88d065e77c8cc2239327c5edb3a432268e5831","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9","0x888888888889758f76e7103c6cbf23abbf58f946","0xeaedc32a51c510d35ebc11088fd5ff2b47aacf2e","0x2191718cd32d02b8e60badffea33e4b5dd9a0a0d","0xc92e8bdf79f0507f65a392b0ab4667716bfe0110","0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41","0x7452c558d45f8afc8c83dae62c3f8a5be19c71f6"],1:["0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x4cd00e387622c35bddb9b4c962c136462338bc31","0x6a000f20005980200259b80c5102003040001068","0xae563e3f8219521950555f5962419c8919758ea2","0x45312ea0eff7e09c83cbe249fa1d7598c4c8cd4e","0xc92e8bdf79f0507f65a392b0ab4667716bfe0110"],137:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x0dcded3545d565ba3b19e683431381007245d983"],10:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xe2fa4e1d17725e72dcdafe943ecf45df4b9e285b","0x0dcded3545d565ba3b19e683431381007245d983"],56:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xa72c85c258a81761433b4e8da60505fe3dd551cc"],43114:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xf39ca6ede9bf7820a952b52f3c94af526bab9015","0x0dcded3545d565ba3b19e683431381007245d983","0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2","0x820f5ffc5b525cd4d88cd91acf2c28f16530cc68"],999:["0x0a0758d937d1059c356d4714e57f5df0239bce1a","0xd2002373543ce3527023c75e7518c274a51ce712"],2741:["0x4f8c9056bb8a3616693a76922fa35d53c056e5b3"],988:["0x026f252016a7c47cdef1f05a3fc9e20c92a49c37","0xff5cb29241f002ffed2eaa224e3e996d24a6e8d1","0x817997ca8394e26cce3de3a076a4889b27dbf9de","0x3dea4be5615974f31624404ef288ba3b36dfeb83","0xeaf7ac0fdf150cdd89340fb762d83848de6a7b83","0x779ded0c9e1022225f8e0630b35a9b54be713736","0xbc6f7725f08232c151b528bdfcaaf89993ca86ee"]},R={1:["0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x4cd00e387622c35bddb9b4c962c136462338bc31","0x6a000f20005980200259b80c5102003040001068","0xae563e3f8219521950555f5962419c8919758ea2","0x45312ea0eff7e09c83cbe249fa1d7598c4c8cd4e"],10:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xe2fa4e1d17725e72dcdafe943ecf45df4b9e285b","0x0dcded3545d565ba3b19e683431381007245d983"],56:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xa72c85c258a81761433b4e8da60505fe3dd551cc"],137:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x0dcded3545d565ba3b19e683431381007245d983"],988:["0x026f252016a7c47cdef1f05a3fc9e20c92a49c37","0xff5cb29241f002ffed2eaa224e3e996d24a6e8d1","0x3dea4be5615974f31624404ef288ba3b36dfeb83","0xbc6f7725f08232c151b528bdfcaaf89993ca86ee"],999:["0x0a0758d937d1059c356d4714e57f5df0239bce1a","0xd2002373543ce3527023c75e7518c274a51ce712"],2741:["0x4f8c9056bb8a3616693a76922fa35d53c056e5b3"],4663:["0xcaf681a66d020601342297493863e78c959e5cb2","0xb477751b76cf82d00a686a1232f5fcd772414af3","0xff5cb29241f002ffed2eaa224e3e996d24a6e8d1"],8453:["0x2626664c2603336e57b271c5c0b26f421741e481","0x6ff5693b99212da76ad316178a184ab56d299b43","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x888888888889758f76e7103c6cbf23abbf58f946","0x3f170631ed9821ca51a59d996ab095162438dc10","0x4f37a9d177470499a2dd084621020b023fcffc1f"],42161:["0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x888888888889758f76e7103c6cbf23abbf58f946","0xeaedc32a51c510d35ebc11088fd5ff2b47aacf2e","0x2191718cd32d02b8e60badffea33e4b5dd9a0a0d"],43114:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xf39ca6ede9bf7820a952b52f3c94af526bab9015","0x0dcded3545d565ba3b19e683431381007245d983"]};import{encodeFunctionData as V}from"viem";import{keccak256 as C,concat as P,getContractAddress as J}from"viem";import{readFileSync as Z}from"node:fs";import{dirname as Q,join as ee}from"node:path";import{fileURLToPath as te}from"node:url";var S="0x4e59b44847b379578588920ca78fbf26c0b4956c";var L="0x365dc643926d7084c9e2f1ad68eb1a944b3aac8abe83c933aaf40c014579414f",m="0xe776361e49a5ba2c978483b2e2717e45f6fe8577172e6c5e2c1d5b0c7bd34e26",D="0x4360b0c758245b325bea83328c6444f8f4b06355388708bc9ee1dc12092d3c52",ne=Object.freeze({1:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Ethereum Pectra (2025-05-07) activated EIP-7702. https://ethereum.org/roadmap/pectra/7702/"}),10:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Live RPC mainnet.optimism.io 2026-08-25: eth_estimateGas type=0x4 \u2192 'EIP-7702 authorization list has invalid fields' (type-4 parsed)."}),56:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Live RPC bsc-dataseed.binance.org 2026-08-25: type=0x4 \u2192 'EIP-7702 transaction with empty auth list'."}),137:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Coinbase Developer Docs: EIP-7702 sponsored delegations on Polygon mainnet. https://docs.cdp.coinbase.com/wallets/using-wallets/eip-7702"}),988:Object.freeze({status:"ready",path:"session-vault",evidence:"No EIP-7702 (type-4 == type-2 21000). Nick factory present. Vault stack."}),999:Object.freeze({status:"ready",path:"session-vault",evidence:"Live RPC: EIP-7702 authorization list not supported. Nick factory present. Vault stack."}),2741:Object.freeze({status:"ready",path:"session-vault",evidence:"No 7702-specific RPC behavior; zkSync-family AA. Vault is the portable EVM lock."}),4663:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Live RPC rpc.mainnet.chain.robinhood.com 2026-08-25: type-4 empty-auth \u2192 EIP-7702 empty auth list. Nick factory present."}),8453:Object.freeze({status:"draft",path:"eip7702-delegate",evidence:"Foundry 9/9 Prague + committed deployedBytecodeHash. No on-chain module address yet."}),42161:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Coinbase Developer Docs: EIP-7702 sponsored delegations on Arbitrum. https://docs.cdp.coinbase.com/wallets/using-wallets/eip-7702"}),43114:Object.freeze({status:"ready",path:"session-vault",evidence:"No 7702 activation (type-4 ignored as 21000). Nick factory present. Vault stack."})});function x(e){return ne[Number(e)]||null}function M(e){return x(e)?.path==="eip7702-delegate"}function T(e){return x(e)?.path==="session-vault"}function z(e){return M(e)||T(e)}var re=/^0x[0-9a-fA-F]{40}$/;function h(e){let t=String(e||"").trim().toLowerCase();if(!re.test(t))throw new Error("session-chain-plan: owner must be a 20-byte address");return C(P([L,t]))}function y(e){return J({opcode:"CREATE2",from:S,salt:h(e),bytecodeHash:m}).toLowerCase()}var b;function se(){if(b)return b;let e=ee(Q(te(import.meta.url)),"../../contracts/session-delegate/vault-creation.hex"),t=Z(e,"utf8").trim().toLowerCase();if(!t.startsWith("0x")||t.length<10)throw new Error("session-chain-plan: vault creation bytecode missing");if(C(t)!==m)throw new Error("session-chain-plan: vault creation bytecode does not match VAULT_INIT_CODE_HASH");return b=t,b}function $(e){let t=h(e);return P([t,se()])}var ae=/^0x[0-9a-fA-F]{40}$/;var k=!0;var Ye=Object.freeze({});function g(e){let t=Number(e);if(!z(t)){let r=x(t)?.evidence||"no session path";throw new Error(`pinned-session-module: chain ${t} refused \u2014 ${r}`)}return t}function oe(e,t){let n=g(e),r=h(t),s=y(t),a=$(t);return Object.freeze({ok:!0,exec:!1,requiresUserSignature:!0,signingReady:!1,userCanSign:!0,broadcastReady:!1,executionReady:!1,chainId:n,stack:"session-vault",from:String(t).trim().toLowerCase(),to:S,value:"0",data:a,salt:r,saltScheme:"keccak256(oracle.session.vault.v1 || owner)",initCodeHash:m,predictedModule:s,bytecodeHash:D,initialize:Object.freeze({status:"blocked",reason:"recovery address not bound \u2014 name a cold key that is not the owner"}),note:"Unsigned CREATE2. Oracle will not broadcast. Fuse still off."})}var ie=(1n<<128n)-1n,ce=720*60*60*1e3;function de({capWei:e,expiresAtMs:t,nowMs:n=Date.now()}={}){let r=p(e??"0","capWei");if(r<=0n||r===ie)throw new Error("pinned-session-module: cap cannot be zero or limitless");let s=Number(t),a=Number(n);if(!Number.isFinite(s)||!Number.isFinite(a)||s<=a)throw new Error("pinned-session-module: expiry must be in the future");if(s-a>ce)throw new Error("pinned-session-module: expiry cannot exceed 30 days");return Object.freeze({ok:!0,capWei:r.toString(),expiresAtMs:s})}var fe=[{type:"function",name:"initialize",stateMutability:"nonpayable",inputs:[{name:"sessionOwner",type:"address"},{name:"sessionAgent",type:"address"},{name:"sessionRecovery",type:"address"},{name:"sessionGuardian",type:"address"},{name:"sessionExpiry",type:"uint48"},{name:"sessionCapWei",type:"uint128"},{name:"sessionDelay",type:"uint48"},{name:"targets",type:"address[]"}],outputs:[]}];function I(e,t){return e==null||String(e).trim()===""?null:c(e,t)}function U(e={}){let t=g(e.chainId),n=I(e.owner,"owner"),r=I(e.recovery,"recovery"),s=I(e.agent,"agent");if(!n)throw new Error("pinned-session-module: owner is required (the user's wallet)");if(!r)throw new Error("pinned-session-module: recovery is required (the user's spare key, never a house default)");if(n===r)throw new Error("pinned-session-module: recovery cannot be the owner");if(s&&(s===n||s===r))throw new Error("pinned-session-module: agent cannot be owner or recovery");let a=e.delaySeconds==null?3600:Number(e.delaySeconds);if(!Number.isFinite(a)||a<3600||a>720*3600)throw new Error("pinned-session-module: delay must be 1 hour\u201330 days");let i=oe(t,n),l=e.guardian?c(e.guardian,"guardian"):null,d=[];Array.isArray(e.targets)&&e.targets.length&&(d=e.targets.map(Y=>W(Y,{chainId:t,banned:[n,r,s,l]})));let f={ok:!0,optional:!0,defaultOn:!1,exec:!1,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,executionReady:!1,chainId:t,owner:n,recovery:r,agent:s||null,guardian:l,predictedModule:i.predictedModule,deploy:i};if(!s||e.capWei==null||e.expiresAtMs==null)return Object.freeze({...f,initialize:Object.freeze({status:"blocked",reason:"agent, cap, and expiry are required \u2014 no house defaults",targets:d}),note:"Optional. Unsigned. User signs. Fuse off."});if(de({capWei:e.capWei,expiresAtMs:e.expiresAtMs,nowMs:e.nowMs}),d.length===0)throw new Error("pinned-session-module: native pay targets required \u2014 no router default");let u=Math.floor(Number(e.expiresAtMs)/1e3),q=V({abi:fe,functionName:"initialize",args:[n,s,r,f.guardian||"0x0000000000000000000000000000000000000000",u,BigInt(e.capWei),a,d]});return Object.freeze({...f,initialize:Object.freeze({status:"ready",exec:!1,requiresUserSignature:!0,userCanSign:!0,to:i.predictedModule,data:q,value:"0",targets:d,capWei:String(e.capWei),expiresAtMs:Number(e.expiresAtMs),delaySeconds:a}),userCanSign:!0,note:"Optional. Unsigned deploy + initialize. User wallet signs. Oracle does not broadcast. Fuse off."})}function c(e,t){let n=String(e||"").trim().toLowerCase();if(!ae.test(n))throw new Error(`pinned-session-module: ${t} must be a 20-byte address`);return n}function W(e,{chainId:t,banned:n=[]}={}){let r=c(e,"target");if(r==="0x0000000000000000000000000000000000000000"||n.map(i=>String(i||"").toLowerCase()).includes(r))throw new Error("pinned-session-module: target cannot be owner, recovery, agent, guardian, or zero");if(new Set([...R[Number(t)]||[],...O[Number(t)]||[],...N].map(i=>String(i).toLowerCase())).has(r))throw new Error("pinned-session-module: swap routers are not native-pay targets");return r}var ue=[{type:"function",name:"execute",stateMutability:"payable",inputs:[{name:"target",type:"address"},{name:"value",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function j(e,t){return`${Number(e)}:${c(t,"owner")}`}function F(e={}){if(!k)throw new Error("pinned-session-module: optional vault spend is off");let t=g(e.chainId),n=c(e.owner,"owner"),r=c(e.recovery,"recovery"),s=c(e.agent,"agent");if(n===r)throw new Error("pinned-session-module: recovery cannot be the owner");if(s===n||s===r)throw new Error("pinned-session-module: agent cannot be owner or recovery");let a=(e.targets||[]).map(u=>c(u,"target"));if(!a.length)throw new Error("pinned-session-module: native pay targets required \u2014 no router default");let i=e.guardian?c(e.guardian,"guardian"):null;for(let u of a)W(u,{chainId:t,banned:[n,r,s,i]});let l=y(n),d=Object.freeze({optIn:!0,chainId:t,owner:n,recovery:r,agent:s,vault:l,targets:Object.freeze([...a])}),f=e.store;return f&&typeof f.set=="function"&&f.set(j(t,n),d),d}function le(e={}){let t=e.store;if(!t||typeof t.get!="function")return null;let n=g(e.chainId),r=c(e.owner,"owner");return t.get(j(n,r))||null}function B(e={}){if(!k)throw new Error("pinned-session-module: optional vault spend is off");let t=le(e);if(!t)throw new Error("pinned-session-module: not opted in");let n=c(e.target,"target");if(!t.targets.includes(n))throw new Error("pinned-session-module: target not permitted");let r=p(e.valueWei??"0","valueWei");if(r<0n)throw new Error("pinned-session-module: valueWei must not be negative");let s=V({abi:ue,functionName:"execute",args:[n,r,"0x"]});return Object.freeze({ok:!0,optIn:!0,exec:!1,requiresUserSignature:!0,userCanSign:!0,signingReady:!1,broadcastReady:!1,executionReady:!1,chainId:t.chainId,from:t.agent,to:t.vault,value:"0",data:s,target:n,valueWei:r.toString(),note:"Unsigned vault.execute. Agent key signs. Oracle does not broadcast."})}var pe=`oracle session-vault \u2014 optional per-user vault (unsigned)
2
+
3
+ oracle session-vault prepare ...
4
+ oracle session-vault spend --chain <id> --owner 0x --recovery 0x --agent 0x \\
5
+ --target 0x --value-wei <n> --pay 0x
6
+
7
+ prepare: unsigned CREATE2 + initialize. Owner wallet signs.
8
+ spend: unsigned vault.execute. Agent key signs. Skip = Oracle unchanged.
9
+ 7702 is not a lock. Oracle does not broadcast.
10
+ `;function o(e,t){let n=e.indexOf(t);return n<0||n+1>=e.length?null:e[n+1]}function H(e,t){let n=[];for(let r=0;r<e.length;r++)e[r]===t&&e[r+1]&&n.push(e[++r]);return n}function G(e,t){return e.exec||e.broadcastReady||e.executionReady?(t.write(`oracle session-vault: refused \u2014 ticket was execution-ready
11
+ `),!0):!1}var Je={name:"session-vault",summary:"optional unsigned vault prepare/spend (no broadcast)",group:"prepare",usage:"oracle session-vault prepare|spend --chain <id> --owner 0x ...",async run(e){let t=e.argv||[],n=process.stdout,r=process.stderr;if(!t.length||t[0]==="--help"||t[0]==="-h"||t[0]==="help")return n.write(pe),0;let s=t.slice(1);try{if(t[0]==="prepare"){let a=U({chainId:Number(o(s,"--chain")),owner:o(s,"--owner"),recovery:o(s,"--recovery"),agent:o(s,"--agent"),capWei:o(s,"--cap-wei"),expiresAtMs:o(s,"--expires-ms")==null?null:Number(o(s,"--expires-ms")),targets:H(s,"--target")});return G(a,r)?1:(n.write(JSON.stringify(a,null,2)+`
12
+ `),0)}if(t[0]==="spend"){let a=new Map;F({chainId:Number(o(s,"--chain")),owner:o(s,"--owner"),recovery:o(s,"--recovery"),agent:o(s,"--agent"),targets:H(s,"--target"),store:a});let i=B({chainId:Number(o(s,"--chain")),owner:o(s,"--owner"),target:o(s,"--pay")||o(s,"--target"),valueWei:o(s,"--value-wei"),store:a});return G(i,r)?1:(n.write(JSON.stringify(i,null,2)+`
13
+ `),0)}return r.write(`oracle session-vault: prepare | spend only. Unsigned. No broadcast.
14
+ `),1}catch(a){return r.write(`oracle session-vault: ${a.message}
15
+ `),1}}};export{Je as default};
@@ -18,7 +18,7 @@ import{spawnSync as Zr}from"node:child_process";import{stdin as Y,stdout as Nt}f
18
18
  `),0}if(r==="logout"){let o=String(t.find(a=>!a.startsWith("-"))||"").trim().toLowerCase();if(!o)throw new Error("usage: oracle auth logout PROVIDER");let s=!1;try{s=n.remove(X(o))}catch{}let i=n.removeApiKey(o);if(!s&&!i)throw new Error(`${o}: no local credential found`);return process.stdout.write(`${o}: local credential removed
19
19
  `),0}throw new Error(`unknown auth action: ${r}`)}catch(o){return process.stderr.write(`oracle auth: ${o.message}
20
20
  `),1}}};var Ir=Object.freeze([["#D7F4FF"," \u2584\u2584\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584\u2584 "],["#9CE7FF"," \u2584\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 "],["#5BCBFF"," \u2584\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 "],["#BDEEFF"," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 "],["#369BFF"," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 "],["#2577D8"," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 "],["#79D7FF"," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 "],["#1E5CA8"," \u2580\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2580 "],["#64BFFF"," \u2580\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2580 "],["#B8EAFF"," \u2580\u2580\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2580\u2580 "]]);var Bn=Object.freeze([" \xB7\u2500\u2500\u2550\u2550\u2500\u2500\xB7 "," \u2571 \xB7\u2500\u2500\u2500\u2500\xB7 \u2572 ","\u2502 (\u2588\u2588) \u2502"," \u2572 \xB7\u2500\u2500\u2500\u2500\xB7 \u2571 "," \xB7\u2500\u2500\u2550\u2550\u2500\u2500\xB7 "]);var Re=Object.freeze([[" \xB7\u2500\u2500\u2550\u2550\u2500\u2500\xB7 "," \u2571 \xB7\u2500\u2500\u2500\u2500\xB7 \u2572 ","\u2502 (\u2588\u2588) \u2502"," \u2572 \xB7\u2500\u2500\u2500\u2500\xB7 \u2571 "," \xB7\u2500\u2500\u2550\u2550\u2500\u2500\xB7 "],[" \xB7\u2500\u2500\u2550\u2550\u2500\u2500\xB7 "," \u2571 \xB7\u2500\u2500\xB7 \u2572 ","\u2502 \xB7(\u2588\u2588)\xB7 \u2502"," \u2572 \xB7\u2500\u2500\xB7 \u2571 "," \xB7\u2500\u2500\u2550\u2550\u2500\u2500\xB7 "],[" \xB7\u2500\u2500\u2550\u2550\u2500\u2500\xB7 "," \u2571 \xB7\u2500\u2500\u2500\u2500\xB7 \u2572 ","\u2502 \xB7 (\u2588\u2588) \xB7 \u2502"," \u2572 \xB7\u2500\u2500\u2500\u2500\xB7 \u2571 "," \xB7\u2500\u2500\u2550\u2550\u2500\u2500\xB7 "],[" \xB7\u2500\u2500\u2550\u2550\u2500\u2500\xB7 "," \u2571\xB7 \u2500\u2500\u2500\u2500 \xB7\u2572 ","\u2502 (\u2588\u2588) \u2502"," \u2572\xB7 \u2500\u2500\u2500\u2500 \xB7\u2571 "," \xB7\u2500\u2500\u2550\u2550\u2500\u2500\xB7 "]]),Lr=Object.freeze([["#EAF7FF"," \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 "],["#D8F2FF"," \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 "],["#B8F0FF"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2591\u2591 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588 "],["#ACDEEF"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2591 "],["#91C2D7"," \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588 "],["#7FA9BE"," \u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591 "]]);var wt=Object.freeze([[" * + . ' * "," . * * + ' "],[" + . * + ' "," * ' + . + "],[" . * + * + "," + + . * * "],[" + ' * . * "," * * + ' . "]]),Cr=Object.freeze(wt[0]);var $=Object.freeze({accent:"#B8F0FF",prompt:"#B8F0FF",banner_title:"#B8F0FF",banner_accent:"#91C2D7",ui_label:"#A5D9EB",banner_text:"#EAF2F8",status_bar_strong:"#EAF2F8",banner_border:"#6A8496",input_rule:"#6A8496",session_border:"#6A8496",banner_dim:"#60717F",status_bar_dim:"#60717F",status_bar_bg:"#11161B",status_bar_text:"#91A2B1",ok:"#7EE7B5",error:"#FF7B7B",warn:"#F0C674",bad:"#FF9B71",selection_bg:"#1A2A35",tab_active:"#B8F0FF",tab_idle:"#91A2B1",gauge_fill:"#5CB8FF",gauge_track:"#455867",gauge_hot:"#F0C674",gauge_warn:"#FF9B71"});function Nr(e){if(typeof e!="string")return null;let t=e.startsWith("#")?e.slice(1):e;if(!/^(?:[\da-f]{3}|[\da-f]{6})$/i.test(t))return null;let r=t.length===3?[...t].map(n=>n.repeat(2)).join(""):t;return{r:Number.parseInt(r.slice(0,2),16),g:Number.parseInt(r.slice(2,4),16),b:Number.parseInt(r.slice(4,6),16)}}function bt(e,t,r){let n=Nr(t);return n?`\x1B[${e};2;${n.r};${n.g};${n.b}m${String(r)}\x1B[0m`:String(r)}function Xe({color:e=!0}={}){return e&&!Object.hasOwn(process.env,"NO_COLOR")?Object.freeze({fg:(r,n)=>bt(38,r,n),bg:(r,n)=>bt(48,r,n),bold:r=>`\x1B[1m${String(r)}\x1B[0m`,dim:r=>`\x1B[2m${String(r)}\x1B[0m`}):Object.freeze({fg:(r,n)=>String(n),bg:(r,n)=>String(n),bold:r=>String(r),dim:r=>String(r)})}var Hn=Xe();function kt(e){return String(e).replace(/\u001B\[[0-9;]*m/g,"")}import{spawnSync as Yr}from"node:child_process";var he=Buffer.alloc(0);var Fr={A:"up",B:"down",C:"right",D:"left",H:"home",F:"end",P:"f1",Q:"f2",R:"f3",S:"f4"},Dr={1:"home",2:"insert",3:"delete",4:"end",5:"pageup",6:"pagedown",7:"home",8:"end"};function I({name:e=null,ctrl:t=!1,meta:r=!1,shift:n=!1,sequence:o=""}){return{name:e,ctrl:t,meta:r,shift:n,sequence:o}}function _t(e){return e<128?1:e>=240?4:e>=224?3:e>=192?2:1}function jr(e){return e>=64&&e<=126}function xt(e){let t=e.toLowerCase();return I({name:t,shift:e!==t,sequence:e})}function Ur(e){return e===13?I({name:"return",sequence:"\r"}):e===10?I({name:"return",sequence:`
21
- `}):e===9?I({name:"tab",sequence:" "}):e===127?I({name:"backspace",sequence:"\x7F"}):e===8?I({name:"backspace",sequence:"\b"}):e>=1&&e<=26?I({name:String.fromCharCode(e+96),ctrl:!0,sequence:String.fromCharCode(e)}):I({name:"unknown",sequence:String.fromCharCode(e)})}function Br(e){let t=/^\u001b[\[O](\d*)(?:;(\d+))?(.)$/s.exec(e);if(!t)return I({name:"unknown",sequence:e});let r=t[1]===""?null:Number(t[1]),n=t[2]===void 0?null:Number(t[2]),o=t[3],s=null,i=n;if(o==="~"?s=Dr[r]??null:(s=Fr[o]??null,i===null&&r!==null&&r>1&&(i=r)),!s)return I({name:"unknown",sequence:e});let a=i===null?0:Math.max(0,i-1);return I({name:s,shift:(a&1)!==0,meta:(a&2)!==0,ctrl:(a&4)!==0,sequence:e})}function Kr(e,t,r,n){let o=()=>(r.push(I({name:"escape",sequence:"\x1B"})),1);if(t+1>=e.length)return n?o():0;let s=e[t+1];if(s===91||s===79){let l=t+2;for(;l<e.length&&!jr(e[l]);)l+=1;return l>=e.length?n?o():0:(r.push(Br(e.toString("utf8",t,l+1))),l+1-t)}if(s===27)return o();let i=_t(s);if(t+1+i>e.length)return n?o():0;let a=e.toString("utf8",t+1,t+1+i),c=a.toLowerCase();return r.push(I({name:c,meta:!0,shift:a!==c,sequence:`\x1B${a}`})),1+i}function vt(e,t){let r=[],n=0;for(;n<e.length;){let o=e[n];if(o===27){let i=Kr(e,n,r,t);if(i===0)return{keys:r,rest:Buffer.from(e.subarray(n))};n+=i;continue}if(o<32||o===127){r.push(Ur(o)),n+=1;continue}let s=_t(o);if(n+s>e.length)return t?(r.push(xt(e.toString("utf8",n))),{keys:r,rest:he}):{keys:r,rest:Buffer.from(e.subarray(n))};r.push(xt(e.toString("utf8",n,n+s))),n+=s}return{keys:r,rest:he}}function St(e){return Buffer.isBuffer(e)?e:e==null?he:typeof e=="string"?Buffer.from(e,"utf8"):Buffer.from(e)}function At(){let e=he;return{push(t){let r=e.length===0?St(t):Buffer.concat([e,St(t)]),{keys:n,rest:o}=vt(r,!1);return e=o,n},flush(){if(e.length===0)return[];let{keys:t}=vt(e,!0);return e=he,t},get pending(){return e.length}}}var Ze=/\u001B\[[0-9;]*m/g;function Et(e){if(new RegExp("\\p{Mark}","u").test(e))return 0;let t=e.codePointAt(0);return t===8205||t===65039?0:t>=4352&&(t<=4447||t===9001||t===9002||t>=11904&&t<=42191&&t!==12351||t>=44032&&t<=55203||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65135||t>=65280&&t<=65376||t>=65504&&t<=65510||t>=127744&&t<=129791||t>=131072&&t<=262141)?2:t<32||t>=127&&t<160?0:1}function Hr(e){return[...kt(e)].reduce((t,r)=>t+Et(r),0)}function qr(e,t){if(t<=0)return"";let r=String(e).split(/(\u001B\[[0-9;]*m)/g),n="",o=0,s=!1;for(let i of r)if(i){if(Ze.test(i)){Ze.lastIndex=0,n+=i,s=i!=="\x1B[0m";continue}Ze.lastIndex=0;for(let a of i){let c=Et(a);if(o+c>t)return s?`${n}\x1B[0m`:n;n+=a,o+=c}}return n}function Pe(e,t,r="left"){let n=Math.max(0,Math.floor(Number(t)||0)),o=qr(String(e),n),s=Math.max(0,n-Hr(o));if(r==="right")return`${" ".repeat(s)}${o}`;if(r==="center"){let i=Math.floor(s/2);return`${" ".repeat(i)}${o}${" ".repeat(s-i)}`}return`${o}${" ".repeat(s)}`}async function $t(e,{headers:t={}}={}){let r=new AbortController,n=setTimeout(()=>r.abort(),6e3);try{let o=await fetch(e,{headers:t,signal:r.signal}),s=null;try{s=await o.json()}catch{s=null}return{status:o.status,body:s}}finally{clearTimeout(n)}}async function zr(e){let t=String(e||"").trim();if(!/^\d+:[\w-]{20,}$/.test(t))return{ok:!1,definitive:!0,error:"that does not look like a telegram bot token (123456:ABC\u2026)"};try{let{status:r,body:n}=await $t(`https://api.telegram.org/bot${t}/getMe`);return r===200&&n?.ok&&n.result?.username?{ok:!0,definitive:!0,username:`@${n.result.username}`}:r===401||r===404?{ok:!1,definitive:!0,error:"telegram rejected this token (check BotFather)"}:{ok:!1,definitive:!1,error:`telegram returned ${r} \u2014 saved anyway, verify later`}}catch{return{ok:!1,definitive:!1,error:"network unreachable \u2014 saved anyway, verify later"}}}async function Wr(e){let t=String(e||"").trim();if(t.length<50)return{ok:!1,definitive:!0,error:"that does not look like a discord bot token"};try{let{status:r,body:n}=await $t("https://discord.com/api/v10/users/@me",{headers:{Authorization:`Bot ${t}`}});return r===200&&n?.username?{ok:!0,definitive:!0,username:n.username}:r===401?{ok:!1,definitive:!0,error:"discord rejected this token (reset it in the developer portal)"}:{ok:!1,definitive:!1,error:`discord returned ${r} \u2014 saved anyway, verify later`}}catch{return{ok:!1,definitive:!1,error:"network unreachable \u2014 saved anyway, verify later"}}}async function Ie(e,t){let r=String(e||"").toLowerCase();return r==="telegram"?zr(t):r==="discord"?Wr(t):{ok:!1,definitive:!1}}var Gr=Object.freeze(["telegram","discord","whatsapp","slack","signal"]),Pt=Object.freeze([{id:"claude",label:"Claude",hint:"Anthropic OAuth",kind:"oauth"},{id:"codex",label:"Codex",hint:"OpenAI OAuth",kind:"oauth"},{id:"grok",label:"Grok",hint:"xAI OAuth",kind:"oauth"}]),It=Object.freeze([{id:"openrouter",label:"OpenRouter",hint:"API key",kind:"api-key"},{id:"openai",label:"OpenAI",hint:"API key",kind:"api-key"},{id:"anthropic",label:"Anthropic",hint:"API key",kind:"api-key"},{id:"deepseek",label:"DeepSeek",hint:"API key",kind:"api-key"},{id:"gemini",label:"Gemini",hint:"API key",kind:"api-key"},{id:"kimi",label:"Kimi",hint:"API key",kind:"api-key"},{id:"mistral",label:"Mistral",hint:"API key",kind:"api-key"},{id:"nous",label:"Nous Portal",hint:"API key",kind:"api-key"},{id:"qwen",label:"Qwen",hint:"API key",kind:"api-key"},{id:"glm",label:"GLM",hint:"API key",kind:"api-key"}]);function Vr(e,t){let r=String(t||"unset");return r==="ready"||r==="connected"||r==="configured"?e.fg($.ok,r):r==="manual"?e.fg($.warn,r):e.fg($.banner_dim,r||"unset")}function Ot({profile:e="oracle",statuses:t=null,oauthStatus:r=null,runtime:n=null}={}){let o=t;if(!o)try{o=re(e).statuses||{}}catch{o={}}let s=r;if(!s)try{s=U().status()}catch{s={providers:{},apiKeys:{}}}let i=n;if(!i)try{i=se()}catch{i={ok:!1}}let a=Pt.some(y=>{let m=W(y.id);return s.providers?.[m.id]?.loggedIn===!0}),c=It.some(y=>s.apiKeys?.[y.id]?.configured===!0),l=[{id:"model",label:"model / sign-in",note:"Claude \xB7 Codex \xB7 Grok \xB7 API keys",status:a||c?"ready":"unset",action:"model"}];i.ok||l.push({id:"runtime",label:"messaging runtime",note:"one-time install \u2014 powers telegram/discord bridge",status:"missing",action:"bootstrap"});let u=new Map(Q().map(y=>[y.key,y]));for(let y of Gr){let m=u.get(y);if(!m)continue;let O=o[m.key]||(m.required?.length?"unset":"manual"),v=!i.ok&&O==="ready"?"token set":O;l.push({id:m.key,label:m.name,note:m.note||"",status:v,action:m.required?.length?"token":"hermes",platform:m})}return l.push({id:"gateway",label:"restart gateway",note:"apply channel config",status:"",action:"gateway"},{id:"gateway-install",label:"start on boot",note:"keep the bot alive after reboot",status:"",action:"gateway-install"},{id:"done",label:"done",note:"back to oracle",status:"",action:"done",skip:!0}),l}function Mt(e=null){let t=e;if(!t)try{t=U().status()}catch{t={providers:{},apiKeys:{}}}let r=[];for(let n of Pt){let o=W(n.id),s=t.providers?.[o.id]?.loggedIn===!0;r.push({id:n.id,label:n.label,note:n.hint,status:s?"connected":"OAuth",action:"oauth",kind:"oauth"})}for(let n of It){let o=t.apiKeys?.[n.id]?.configured===!0;r.push({id:n.id,label:n.label,note:n.hint,status:o?"configured":"API key",action:"api-key",kind:"api-key"})}return r.push({id:"back",label:"back",note:"setup menu",status:"",action:"back",skip:!0}),r}function Le({width:e,palette:t,title:r,subtitle:n="",rows:o=[],index:s=0,footer:i="\u2191/\u2193 move enter select esc back"}={}){let a=Math.max(40,Math.floor(Number(e)||80)),c=Math.max(36,Math.min(a-4,72)),l=Math.max(0,Math.floor((a-c)/2)),u=Math.max(0,c-4),y=" ".repeat(l),m=A=>t.fg($.banner_border,A),O=A=>`${y}${A}`,v=(A="")=>O(`${m("\u2502")} ${Pe(A,u)} ${m("\u2502")}`),M="\u2500".repeat(Math.max(0,c-2)),k=[O(`${m("\u256D")}${m(M)}${m("\u256E")}`),v(t.bold(t.fg($.accent,r||"oracle setup"))),v(m("\u2500".repeat(u)))];return n&&(k.push(v(t.fg($.banner_dim,n))),k.push(v(""))),o.forEach((A,B)=>{let w=B===s,g=w?"\u203A":" ",p=String(A.label||A.id||""),f=String(A.note||""),h=A.status?Vr(t,A.status):"",x=` ${g} ${p}`,S=[h,f?t.fg($.banner_dim,f):""].filter(Boolean).join(" "),C=Math.max(1,u-Tt(x)-Tt(Lt(S))-1),K=`${x}${" ".repeat(C)}${S}`;w?k.push(v(t.bg($.selection_bg,t.bold(t.fg($.banner_text,Pe(K,u)))))):k.push(v(K))}),k.push(v("")),k.push(v(t.fg($.banner_dim,i))),k.push(O(`${m("\u2570")}${m(M)}${m("\u256F")}`)),k}function Jr({width:e,palette:t,platformKey:r="telegram",tokenLength:n=0,error:o=""}={}){let s=Math.max(40,Math.floor(Number(e)||80)),i=Math.max(36,Math.min(s-4,72)),a=Math.max(0,Math.floor((s-i)/2)),c=Math.max(0,i-4),l=" ".repeat(a),u=k=>t.fg($.banner_border,k),y=k=>`${l}${k}`,m=(k="")=>y(`${u("\u2502")} ${Pe(k,c)} ${u("\u2502")}`),O="\u2500".repeat(Math.max(0,i-2)),v=n>0?"\u2022".repeat(Math.min(n,40)):t.fg($.banner_dim,"paste token here (hidden)");return[y(`${u("\u256D")}${u(O)}${u("\u256E")}`),m(t.bold(t.fg($.accent,`setup \xB7 ${r}`))),m(u("\u2500".repeat(c))),m(t.fg($.banner_dim,"token stays local \xB7 never echoed \xB7 never sent to chat")),m(""),m(`${t.fg($.banner_dim,"token")} ${v}`),m(n?t.fg($.banner_dim,` ${n} characters`):""),m(o?t.fg($.warn,o):""),m(t.fg($.banner_dim,"type or paste backspace enter save esc cancel")),y(`${u("\u2570")}${u(O)}${u("\u256F")}`)]}function Xr({width:e,palette:t,title:r,subtitle:n,index:o=0,yesLabel:s="yes",noLabel:i="not now"}={}){return Le({width:e,palette:t,title:r,subtitle:n,rows:[{id:"yes",label:s,note:"",status:""},{id:"no",label:i,note:"",status:""}],index:o,footer:"\u2191/\u2193 move enter select esc skip"})}function Lt(e){return String(e||"").replace(/\u001b\[[0-9;]*m/g,"")}function Tt(e){return Lt(e).length}function le(e){e.write("\x1B[2J\x1B[H")}function ge(e,t){le(e),e.write(`${t.join(`
21
+ `}):e===9?I({name:"tab",sequence:" "}):e===127?I({name:"backspace",sequence:"\x7F"}):e===8?I({name:"backspace",sequence:"\b"}):e>=1&&e<=26?I({name:String.fromCharCode(e+96),ctrl:!0,sequence:String.fromCharCode(e)}):I({name:"unknown",sequence:String.fromCharCode(e)})}function Br(e){let t=/^\u001b[\[O](\d*)(?:;(\d+))?(.)$/s.exec(e);if(!t)return I({name:"unknown",sequence:e});let r=t[1]===""?null:Number(t[1]),n=t[2]===void 0?null:Number(t[2]),o=t[3],s=null,i=n;if(o==="~"?s=Dr[r]??null:(s=Fr[o]??null,i===null&&r!==null&&r>1&&(i=r)),!s)return I({name:"unknown",sequence:e});let a=i===null?0:Math.max(0,i-1);return I({name:s,shift:(a&1)!==0,meta:(a&2)!==0,ctrl:(a&4)!==0,sequence:e})}function Kr(e,t,r,n){let o=()=>(r.push(I({name:"escape",sequence:"\x1B"})),1);if(t+1>=e.length)return n?o():0;let s=e[t+1];if(s===91||s===79){let l=t+2;for(;l<e.length&&!jr(e[l]);)l+=1;return l>=e.length?n?o():0:(r.push(Br(e.toString("utf8",t,l+1))),l+1-t)}if(s===27)return o();let i=_t(s);if(t+1+i>e.length)return n?o():0;let a=e.toString("utf8",t+1,t+1+i),c=a.toLowerCase();return r.push(I({name:c,meta:!0,shift:a!==c,sequence:`\x1B${a}`})),1+i}function vt(e,t){let r=[],n=0;for(;n<e.length;){let o=e[n];if(o===27){let i=Kr(e,n,r,t);if(i===0)return{keys:r,rest:Buffer.from(e.subarray(n))};n+=i;continue}if(o<32||o===127){r.push(Ur(o)),n+=1;continue}let s=_t(o);if(n+s>e.length)return t?(r.push(xt(e.toString("utf8",n))),{keys:r,rest:he}):{keys:r,rest:Buffer.from(e.subarray(n))};r.push(xt(e.toString("utf8",n,n+s))),n+=s}return{keys:r,rest:he}}function St(e){return Buffer.isBuffer(e)?e:e==null?he:typeof e=="string"?Buffer.from(e,"utf8"):Buffer.from(e)}function At(){let e=he;return{push(t){let r=e.length===0?St(t):Buffer.concat([e,St(t)]),{keys:n,rest:o}=vt(r,!1);return e=o,n},flush(){if(e.length===0)return[];let{keys:t}=vt(e,!0);return e=he,t},get pending(){return e.length}}}var Ze=/\u001B\[[0-9;]*m/g;function Et(e){if(new RegExp("\\p{Mark}","u").test(e))return 0;let t=e.codePointAt(0);return t===8205||t===65039?0:t>=4352&&(t<=4447||t===9001||t===9002||t>=11904&&t<=42191&&t!==12351||t>=44032&&t<=55203||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65135||t>=65280&&t<=65376||t>=65504&&t<=65510||t>=127744&&t<=129791||t>=131072&&t<=262141)?2:t<32||t>=127&&t<160?0:1}function Hr(e){return[...kt(e)].reduce((t,r)=>t+Et(r),0)}function qr(e,t){if(t<=0)return"";let r=String(e).split(/(\u001B\[[0-9;]*m)/g),n="",o=0,s=!1;for(let i of r)if(i){if(Ze.test(i)){Ze.lastIndex=0,n+=i,s=i!=="\x1B[0m";continue}Ze.lastIndex=0;for(let a of i){let c=Et(a);if(o+c>t)return s?`${n}\x1B[0m`:n;n+=a,o+=c}}return n}function Pe(e,t,r="left"){let n=Math.max(0,Math.floor(Number(t)||0)),o=qr(String(e),n),s=Math.max(0,n-Hr(o));if(r==="right")return`${" ".repeat(s)}${o}`;if(r==="center"){let i=Math.floor(s/2);return`${" ".repeat(i)}${o}${" ".repeat(s-i)}`}return`${o}${" ".repeat(s)}`}var ao=Object.freeze(["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]),co=Object.freeze({thinking:"Thinking",writing:"Writing",executing:"Executing",waiting:"Waiting"});async function $t(e,{headers:t={}}={}){let r=new AbortController,n=setTimeout(()=>r.abort(),6e3);try{let o=await fetch(e,{headers:t,signal:r.signal}),s=null;try{s=await o.json()}catch{s=null}return{status:o.status,body:s}}finally{clearTimeout(n)}}async function zr(e){let t=String(e||"").trim();if(!/^\d+:[\w-]{20,}$/.test(t))return{ok:!1,definitive:!0,error:"that does not look like a telegram bot token (123456:ABC\u2026)"};try{let{status:r,body:n}=await $t(`https://api.telegram.org/bot${t}/getMe`);return r===200&&n?.ok&&n.result?.username?{ok:!0,definitive:!0,username:`@${n.result.username}`}:r===401||r===404?{ok:!1,definitive:!0,error:"telegram rejected this token (check BotFather)"}:{ok:!1,definitive:!1,error:`telegram returned ${r} \u2014 saved anyway, verify later`}}catch{return{ok:!1,definitive:!1,error:"network unreachable \u2014 saved anyway, verify later"}}}async function Wr(e){let t=String(e||"").trim();if(t.length<50)return{ok:!1,definitive:!0,error:"that does not look like a discord bot token"};try{let{status:r,body:n}=await $t("https://discord.com/api/v10/users/@me",{headers:{Authorization:`Bot ${t}`}});return r===200&&n?.username?{ok:!0,definitive:!0,username:n.username}:r===401?{ok:!1,definitive:!0,error:"discord rejected this token (reset it in the developer portal)"}:{ok:!1,definitive:!1,error:`discord returned ${r} \u2014 saved anyway, verify later`}}catch{return{ok:!1,definitive:!1,error:"network unreachable \u2014 saved anyway, verify later"}}}async function Ie(e,t){let r=String(e||"").toLowerCase();return r==="telegram"?zr(t):r==="discord"?Wr(t):{ok:!1,definitive:!1}}var Gr=Object.freeze(["telegram","discord","whatsapp","slack","signal"]),Pt=Object.freeze([{id:"claude",label:"Claude",hint:"Anthropic OAuth",kind:"oauth"},{id:"codex",label:"Codex",hint:"OpenAI OAuth",kind:"oauth"},{id:"grok",label:"Grok",hint:"xAI OAuth",kind:"oauth"}]),It=Object.freeze([{id:"openrouter",label:"OpenRouter",hint:"API key",kind:"api-key"},{id:"openai",label:"OpenAI",hint:"API key",kind:"api-key"},{id:"anthropic",label:"Anthropic",hint:"API key",kind:"api-key"},{id:"deepseek",label:"DeepSeek",hint:"API key",kind:"api-key"},{id:"gemini",label:"Gemini",hint:"API key",kind:"api-key"},{id:"kimi",label:"Kimi",hint:"API key",kind:"api-key"},{id:"mistral",label:"Mistral",hint:"API key",kind:"api-key"},{id:"nous",label:"Nous Portal",hint:"API key",kind:"api-key"},{id:"qwen",label:"Qwen",hint:"API key",kind:"api-key"},{id:"glm",label:"GLM",hint:"API key",kind:"api-key"}]);function Vr(e,t){let r=String(t||"unset");return r==="ready"||r==="connected"||r==="configured"?e.fg($.ok,r):r==="manual"?e.fg($.warn,r):e.fg($.banner_dim,r||"unset")}function Ot({profile:e="oracle",statuses:t=null,oauthStatus:r=null,runtime:n=null}={}){let o=t;if(!o)try{o=re(e).statuses||{}}catch{o={}}let s=r;if(!s)try{s=U().status()}catch{s={providers:{},apiKeys:{}}}let i=n;if(!i)try{i=se()}catch{i={ok:!1}}let a=Pt.some(y=>{let m=W(y.id);return s.providers?.[m.id]?.loggedIn===!0}),c=It.some(y=>s.apiKeys?.[y.id]?.configured===!0),l=[{id:"model",label:"model / sign-in",note:"Claude \xB7 Codex \xB7 Grok \xB7 API keys",status:a||c?"ready":"unset",action:"model"}];i.ok||l.push({id:"runtime",label:"messaging runtime",note:"one-time install \u2014 powers telegram/discord bridge",status:"missing",action:"bootstrap"});let u=new Map(Q().map(y=>[y.key,y]));for(let y of Gr){let m=u.get(y);if(!m)continue;let O=o[m.key]||(m.required?.length?"unset":"manual"),v=!i.ok&&O==="ready"?"token set":O;l.push({id:m.key,label:m.name,note:m.note||"",status:v,action:m.required?.length?"token":"hermes",platform:m})}return l.push({id:"gateway",label:"restart gateway",note:"apply channel config",status:"",action:"gateway"},{id:"gateway-install",label:"start on boot",note:"keep the bot alive after reboot",status:"",action:"gateway-install"},{id:"done",label:"done",note:"back to oracle",status:"",action:"done",skip:!0}),l}function Mt(e=null){let t=e;if(!t)try{t=U().status()}catch{t={providers:{},apiKeys:{}}}let r=[];for(let n of Pt){let o=W(n.id),s=t.providers?.[o.id]?.loggedIn===!0;r.push({id:n.id,label:n.label,note:n.hint,status:s?"connected":"OAuth",action:"oauth",kind:"oauth"})}for(let n of It){let o=t.apiKeys?.[n.id]?.configured===!0;r.push({id:n.id,label:n.label,note:n.hint,status:o?"configured":"API key",action:"api-key",kind:"api-key"})}return r.push({id:"back",label:"back",note:"setup menu",status:"",action:"back",skip:!0}),r}function Le({width:e,palette:t,title:r,subtitle:n="",rows:o=[],index:s=0,footer:i="\u2191/\u2193 move enter select esc back"}={}){let a=Math.max(40,Math.floor(Number(e)||80)),c=Math.max(36,Math.min(a-4,72)),l=Math.max(0,Math.floor((a-c)/2)),u=Math.max(0,c-4),y=" ".repeat(l),m=A=>t.fg($.banner_border,A),O=A=>`${y}${A}`,v=(A="")=>O(`${m("\u2502")} ${Pe(A,u)} ${m("\u2502")}`),M="\u2500".repeat(Math.max(0,c-2)),k=[O(`${m("\u256D")}${m(M)}${m("\u256E")}`),v(t.bold(t.fg($.accent,r||"oracle setup"))),v(m("\u2500".repeat(u)))];return n&&(k.push(v(t.fg($.banner_dim,n))),k.push(v(""))),o.forEach((A,B)=>{let w=B===s,g=w?"\u203A":" ",p=String(A.label||A.id||""),f=String(A.note||""),h=A.status?Vr(t,A.status):"",x=` ${g} ${p}`,S=[h,f?t.fg($.banner_dim,f):""].filter(Boolean).join(" "),C=Math.max(1,u-Tt(x)-Tt(Lt(S))-1),K=`${x}${" ".repeat(C)}${S}`;w?k.push(v(t.bg($.selection_bg,t.bold(t.fg($.banner_text,Pe(K,u)))))):k.push(v(K))}),k.push(v("")),k.push(v(t.fg($.banner_dim,i))),k.push(O(`${m("\u2570")}${m(M)}${m("\u256F")}`)),k}function Jr({width:e,palette:t,platformKey:r="telegram",tokenLength:n=0,error:o=""}={}){let s=Math.max(40,Math.floor(Number(e)||80)),i=Math.max(36,Math.min(s-4,72)),a=Math.max(0,Math.floor((s-i)/2)),c=Math.max(0,i-4),l=" ".repeat(a),u=k=>t.fg($.banner_border,k),y=k=>`${l}${k}`,m=(k="")=>y(`${u("\u2502")} ${Pe(k,c)} ${u("\u2502")}`),O="\u2500".repeat(Math.max(0,i-2)),v=n>0?"\u2022".repeat(Math.min(n,40)):t.fg($.banner_dim,"paste token here (hidden)");return[y(`${u("\u256D")}${u(O)}${u("\u256E")}`),m(t.bold(t.fg($.accent,`setup \xB7 ${r}`))),m(u("\u2500".repeat(c))),m(t.fg($.banner_dim,"token stays local \xB7 never echoed \xB7 never sent to chat")),m(""),m(`${t.fg($.banner_dim,"token")} ${v}`),m(n?t.fg($.banner_dim,` ${n} characters`):""),m(o?t.fg($.warn,o):""),m(t.fg($.banner_dim,"type or paste backspace enter save esc cancel")),y(`${u("\u2570")}${u(O)}${u("\u256F")}`)]}function Xr({width:e,palette:t,title:r,subtitle:n,index:o=0,yesLabel:s="yes",noLabel:i="not now"}={}){return Le({width:e,palette:t,title:r,subtitle:n,rows:[{id:"yes",label:s,note:"",status:""},{id:"no",label:i,note:"",status:""}],index:o,footer:"\u2191/\u2193 move enter select esc skip"})}function Lt(e){return String(e||"").replace(/\u001b\[[0-9;]*m/g,"")}function Tt(e){return Lt(e).length}function le(e){e.write("\x1B[2J\x1B[H")}function ge(e,t){le(e),e.write(`${t.join(`
22
22
  `)}
23
23
  `)}function Rt(e){let t=se();if(!t?.bin)return{code:1,error:"hermes not found \u2014 install hermes or run oracle bootstrap"};let r=Yr(t.bin,e,{stdio:"inherit",env:process.env});return{code:typeof r.status=="number"?r.status:1}}async function Ct({stdin:e=process.stdin,stdout:t=process.stdout,env:r=process.env,palette:n,profile:o="oracle",startAt:s="menu",runAuth:i=c=>ue.run({argv:c}),restartGateway:a=!0}={}){if(e?.isTTY!==!0||t?.isTTY!==!0)return{completed:!1,actions:[],reason:"non-tty"};let c=Math.max(40,Number(t.columns||80)),l=[],u="menu",y=0,m=0,O=0,v="",M="",k="",A=null,B=Ot({profile:o}),w=Mt();String(s).startsWith("token:")?(k=String(s).slice(6),u="token"):s==="model"&&(u="model");let g=At(),p=e.isRaw===!0;typeof e.setRawMode=="function"&&e.setRawMode(!0),e.resume();let f=()=>{u==="menu"?ge(t,Le({width:c,palette:n,title:"oracle setup",subtitle:"\u2191\u2193 enter \xB7 model + telegram/discord/whatsapp",rows:B,index:y})):u==="model"?ge(t,Le({width:c,palette:n,title:"sign in",subtitle:"subscription OAuth or API key",rows:w,index:m})):u==="token"?ge(t,Jr({width:c,palette:n,platformKey:k,tokenLength:v.length,error:M})):u==="confirm-gateway"?ge(t,Xr({width:c,palette:n,title:A?.title||"restart gateway?",subtitle:A?.subtitle||"applies bot tokens to the live bridge",index:O,yesLabel:"restart gateway now",noLabel:"later \u2014 oracle setup gateway restart"})):u==="notice"&&ge(t,Le({width:c,palette:n,title:A?.title||"setup",subtitle:A?.subtitle||"",rows:[{id:"ok",label:"continue",note:"",status:""}],index:0,footer:"enter continue esc menu"}))};f();let h=async x=>(typeof e.setRawMode=="function"&&e.setRawMode(p),e.pause(),le(t),x);return new Promise(x=>{let S=null,C=!1,K=b=>{C||(C=!0,S&&clearTimeout(S),e.off("data",nt),Promise.resolve(h(b)).then(x))},H=()=>{B=Ot({profile:o}),w=Mt()},Ne=async()=>{let b=v.trim();if(!b){M="empty token",f();return}M="checking token\u2026",f();let d={ok:!1,definitive:!1};try{d=await Ie(k,b)}catch{d={ok:!1,definitive:!1}}if(!d.ok&&d.definitive){v="",M=d.error||"platform rejected this token",f();return}try{let _=ve(o,k,b);V({lastPlatform:k,profile:o,ready:!0}),l.push(`token:${k}${d.ok?":verified":""}`),v="",M="";let E=!1;try{E=se().ok===!0}catch{E=!1}let ot=d.username?` \xB7 bot ${d.username}`:"";E?(A={title:`${k} saved${ot}`,subtitle:d.ok?`token verified live \xB7 ${_.path}`:`wrote credentials \xB7 ${_.path}`},O=0,u=a?"confirm-gateway":"menu"):(A={title:`${k} token saved${ot}`,subtitle:"next: install the messaging runtime (menu row) so the bot can answer"},O=0,u="notice"),H(),f()}catch(_){M=_?.message||"save failed",v="",f()}},tt=async b=>{if(!b||b.action==="done"){K({completed:!0,actions:l});return}if(b.action==="model"){u="model",m=0,f();return}if(b.action==="token"){k=b.id,v="",M="",u="token",f();return}if(b.action==="bootstrap"){typeof e.setRawMode=="function"&&e.setRawMode(p),e.pause(),le(t),t.write(`installing messaging runtime (one-time, a few minutes)\u2026
24
24
 
@@ -29,7 +29,7 @@ import{spawnSync as Zr}from"node:child_process";import{stdin as Y,stdout as Nt}f
29
29
  `);let _=1;try{_=await i(d)}catch(E){t.write(`${E?.message||E}
30
30
  `),_=1}l.push(`model:${b.id}:${_}`),typeof e.setRawMode=="function"&&e.setRawMode(!0),e.resume(),H(),u="menu",f()},rt=b=>{for(let d of b){if(d.ctrl&&d.name==="c"){K({completed:!1,actions:l,reason:"cancel"});return}if(u==="token"){if(d.name==="escape"){v="",M="",u="menu",f();continue}if(d.name==="return"){Ne();continue}if(d.name==="backspace"||d.sequence==="\x7F"||d.sequence==="\b"){v=v.slice(0,-1),M="",f();continue}let E=d.sequence||"";if(E&&!d.ctrl&&!d.meta&&E!=="\x1B"){if(E.startsWith("\x1B"))continue;v+=E,M="",f()}continue}if(u==="confirm-gateway"){if(d.name==="up"||d.name==="down"){O=O===0?1:0,f();continue}if(d.name==="escape"){u="menu",f();continue}d.name==="return"&&(O===0?tt({action:"gateway",id:"gateway"}):(u="menu",f()));continue}if(u==="notice"){(d.name==="return"||d.name==="escape")&&(u="menu",f());continue}if(u==="model"){let E=w.length;if(d.name==="up"){m=E?(m-1+E)%E:0,f();continue}if(d.name==="down"){m=E?(m+1)%E:0,f();continue}if(d.name==="escape"){u="menu",f();continue}d.name==="return"&&jt(w[m]);continue}let _=B.length;if(d.name==="up"){y=_?(y-1+_)%_:0,f();continue}if(d.name==="down"){y=_?(y+1)%_:0,f();continue}if(d.name==="escape"){K({completed:!0,actions:l,reason:"esc"});continue}d.name==="return"&&tt(B[y])}},nt=b=>{rt(g.push(b)),S&&(clearTimeout(S),S=null),g.pending>0&&(S=setTimeout(()=>{S=null,rt(g.flush())},30),typeof S.unref=="function"&&S.unref())};e.on("data",nt)})}var ye=Object.freeze([{alias:"claude",label:"Claude",hint:"Anthropic subscription"},{alias:"codex",label:"Codex",hint:"OpenAI subscription"},{alias:"grok",label:"Grok",hint:"xAI subscription"}]),we=Object.freeze([{id:"openrouter",label:"OpenRouter"},{id:"openai",label:"OpenAI"},{id:"anthropic",label:"Anthropic"},{id:"xai",label:"xAI"},{id:"deepseek",label:"DeepSeek"},{id:"gemini",label:"Gemini"},{id:"kimi",label:"Kimi"},{id:"mistral",label:"Mistral"},{id:"nous",label:"Nous Portal"},{id:"qwen",label:"Qwen"},{id:"glm",label:"GLM"}]),Ce=Object.freeze([...ye.map((e,t)=>({n:t+1,id:e.alias,label:e.label,kind:"oauth",hint:e.hint})),...we.map((e,t)=>({n:ye.length+t+1,id:e.id,label:e.label,kind:"api-key",hint:"API key"})),{n:ye.length+we.length+1,id:"custom",label:"Custom",kind:"api-key",hint:"OpenAI-compatible"},{n:ye.length+we.length+2,id:"local",label:"Local",kind:"local",hint:"llama.cpp :8080"},{n:ye.length+we.length+3,id:"ollama",label:"Ollama",kind:"local",hint:"ollama :11434"}]);function Qr(e){let t=String(e||"").trim().toLowerCase();if(!t||t==="skip")return{skip:!0};let r=Ce.find(n=>String(n.n)===t||n.id===t);return r||{unknown:!0,choice:t}}function Dt(e="sign in",t=0){let r=Re[t]||Re[0];return["",`${r[0]} oracle`,`${r[1]} ${e}`,r[2],r[3],r[4],""].join(`
31
31
  `)}async function en(e){if(e.isTTY!==!0||process.env.NODE_TEST_CONTEXT||process.env.ORACLE_INSTALL_PLAIN==="1")return;let t=r=>new Promise(n=>setTimeout(n,r));for(let r=0;r<Re.length;r+=1)r>0&&e.write("\x1B[7A"),e.write(`${Dt("sign in",r)}
32
- `),await t(90)}async function Co({stdin:e=process.stdin,stdout:t=process.stdout,readLine:r,runAuth:n=o=>ue.run({argv:o})}={}){if(await en(t),t.write(`${be()}
32
+ `),await t(90)}async function Fo({stdin:e=process.stdin,stdout:t=process.stdout,readLine:r,runAuth:n=o=>ue.run({argv:o})}={}){if(await en(t),t.write(`${be()}
33
33
  `),t.write(`number or name \xB7 enter skips
34
34
  `),e.isTTY!==!0||t.isTTY!==!0)return{skipped:!0,reason:"non-tty"};t.write("> ");let o=r?await r():await new Promise(c=>{let l="",u=y=>{l+=String(y),(l.includes(`
35
35
  `)||l.includes("\r"))&&(e.off("data",u),c(l.trim()))};e.on("data",u)}),s=Qr(o);if(s.skip)return{skipped:!0,reason:"skipped"};if(s.unknown)return t.write(`unknown choice '${s.choice}'
@@ -56,7 +56,7 @@ Detect: oracle harness detect
56
56
  `+u+y+`path: ${l.path}
57
57
  next: oracle setup gateway restart
58
58
  `),0}catch(c){return process.stderr.write(`oracle setup: ${c.message}
59
- `),1}}var No={name:"setup",summary:"configure standalone OAuth and messaging platforms",group:"read",usage:Qe(),async run(e){let t=[...e.argv],r=t.includes("--json"),n=tn(t),o=rn(t).filter(a=>a!=="--json"),s=(o[0]||"menu").toLowerCase(),i=o.slice(1);if(["-h","--help","help"].includes(s))return process.stdout.write(Qe()+`
59
+ `),1}}var Do={name:"setup",summary:"configure standalone OAuth and messaging platforms",group:"read",usage:Qe(),async run(e){let t=[...e.argv],r=t.includes("--json"),n=tn(t),o=rn(t).filter(a=>a!=="--json"),s=(o[0]||"menu").toLowerCase(),i=o.slice(1);if(["-h","--help","help"].includes(s))return process.stdout.write(Qe()+`
60
60
  `),0;if(["menu","list","ls"].includes(s)){if(r)return process.stdout.write(JSON.stringify({...re(n),modelAuth:U().status()},null,2)+`
61
61
  `),0;if(process.stdin.isTTY===!0&&process.stdout.isTTY===!0&&!process.env.ORACLE_SETUP_PLAIN){let a=await Ct({profile:n,palette:Xe({color:process.stdout.isTTY!==!1})});return a?.completed===!1&&a?.reason==="non-tty"?1:0}return process.stdout.write(be()),process.stdout.write(xe(n)),0}if(["status","show"].includes(s)){let a=re(n);return r?process.stdout.write(JSON.stringify({...a,modelAuth:U().status()},null,2)+`
62
62
  `):(process.stdout.write(be()),process.stdout.write(xe(n)),process.stdout.write(`hermes root: ${de()}
@@ -69,4 +69,4 @@ loopback, no API key
69
69
  hermes: ${de()}/profiles/${a}
70
70
  `),process.stdout.write(xe(a)),0}return G(s)?nn(n,s,i):(process.stderr.write(`oracle setup: unknown verb '${s}'
71
71
  ${Qe()}
72
- `),1)}};export{Ce as SETUP_CHOICES,No as default,be as renderModelSetup,Qr as resolveSetupChoice,Co as runFirstRunModelSetup};
72
+ `),1)}};export{Ce as SETUP_CHOICES,Do as default,be as renderModelSetup,Qr as resolveSetupChoice,Fo as runFirstRunModelSetup};