@oracle-agent/oracle 0.35.34 → 0.35.36
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/README.md +43 -8
- package/artifacts/specialist-packs/oracle-full-crypto.json +11 -0
- package/dist/address-book.mjs +2 -2
- package/dist/agent-sessions.mjs +8 -8
- package/dist/assets/profiles/canton-agent/SOUL.md +44 -0
- package/dist/assets/profiles/canton-agent/profile.json +30 -0
- package/dist/assets/profiles/oracle/SOUL.md +1 -0
- package/dist/assets/skills/oracle-canton/SKILL.md +49 -0
- package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
- package/dist/bin/desk-server.mjs +35 -35
- package/dist/bin/oracle-data-mcp.mjs +17 -17
- package/dist/bin/oracle-gateway.mjs +14 -14
- package/dist/bin/oracle-launch-radar-shadow.mjs +4 -4
- package/dist/bin/oracle-mev-arb-shadow.mjs +4 -4
- package/dist/bin/oracle-mev-shadow.mjs +4 -4
- package/dist/bin/oracle-public-server.mjs +4 -4
- package/dist/bin/oracle-route.mjs +8 -8
- package/dist/bin/oracle-scan.mjs +10 -10
- package/dist/bin/oracle.mjs +8 -6
- package/dist/cli/commands/agent-session.mjs +10 -10
- package/dist/cli/commands/airdrop.mjs +16 -0
- package/dist/cli/commands/chain.mjs +1 -1
- package/dist/cli/commands/chat.mjs +215 -204
- package/dist/cli/commands/doctor.mjs +5 -5
- package/dist/cli/commands/eval.mjs +151 -141
- package/dist/cli/commands/extension-policy.mjs +3 -3
- package/dist/cli/commands/farm.mjs +22 -22
- package/dist/cli/commands/mint.mjs +22 -0
- package/dist/cli/commands/model.mjs +219 -208
- package/dist/cli/commands/plugins.mjs +42 -39
- package/dist/cli/commands/quickstart.mjs +6 -6
- package/dist/cli/commands/session-vault.mjs +1 -1
- package/dist/cli/commands/sign.mjs +12 -12
- package/dist/cli/commands/signer.mjs +25 -23
- package/dist/cli/commands/snipe.mjs +6 -6
- package/dist/cli/commands/swap.mjs +12 -12
- package/dist/cli/commands/venues.mjs +2 -2
- package/dist/control/receipt-lineage.mjs +1 -0
- package/dist/data/desk-data.mjs +33 -33
- package/dist/data/providers/farming.mjs +2 -2
- package/dist/data/providers/lp-destination-discovery.mjs +4 -4
- package/dist/index.mjs +50 -49
- package/dist/launch-radar/index.mjs +4 -4
- package/dist/local-signer/anvil-attestation-worker.mjs +1 -1
- package/dist/local-signer/index.mjs +3 -3
- package/dist/local-signer/runtime.mjs +22 -20
- package/dist/router/index.mjs +3 -3
- package/dist/router/prepare-bridge.mjs +1 -1
- package/dist/scanner/index.mjs +4 -4
- package/dist/task.mjs +2 -2
- package/dist/teams/index.mjs +3 -1
- package/dist/tui/standalone-client.mjs +85 -75
- package/package.json +3 -2
- package/public/eval-report.json +6 -6
- package/public/oracle-splash/assets/desktop-app.jpg +0 -0
- package/public/oracle-splash/assets/hero/agent-session-poster.jpg +0 -0
- package/public/oracle-splash/assets/hero/agent-session.mp4 +0 -0
- package/public/oracle-splash/assets/hero/agent-session.webm +0 -0
- package/public/oracle-splash/assets/oracle-cli-v03535-poster.jpg +0 -0
- package/public/oracle-splash/assets/oracle-cli-v03535.gif +0 -0
- package/public/oracle-splash/assets/protocol-build-time.jpg +0 -0
- package/public/oracle-splash/downloads/index.html +2 -2
- package/public/oracle-splash/index.html +132 -54
- package/server.json +2 -2
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var d=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(o){throw t=[o],o}};var T,Jt,J=d(()=>{T={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}},Jt=new Map(Object.values(T).map(e=>[e.chainId,e]))});var G=d(()=>{});var mn,wn,hn,gn,yn,bn,En,L=d(()=>{G();mn=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,wn=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,hn=AbortSignal.prototype.throwIfAborted,gn=EventTarget.prototype.addEventListener,yn=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null,bn=64*1024,En=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024})});import{wordlists as Fi}from"ethers";var re=d(()=>{});var as,cs,ls,pe=d(()=>{as=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),cs=Object.freeze(["read","simulate"]),ls=1440*60});var ys,bs,Es,me=d(()=>{pe();ys=Object.freeze(["privkey","wif","xprv","seed"]),bs=Object.freeze([{rule:"raw-32-byte-hex-key",re:/^0x[0-9a-fA-F]{64}$/},{rule:"raw-32-byte-hex-bare",re:/^[0-9a-fA-F]{64}$/},{rule:"extended-private-key",re:/\b(?:xprv|tprv|yprv|zprv)[1-9A-HJ-NP-Za-km-z]{107}\b/},{rule:"bitcoin-wif",re:/\b[59KLc][1-9A-HJ-NP-Za-km-z]{50,51}\b/},{rule:"bip39-mnemonic",re:/\b(?:[a-z]{3,8}\s+){11,23}[a-z]{3,8}\b/},{rule:"bearer-token",re:/bearer\s+[A-Za-z0-9._~+/=-]+/i},{rule:"pem-private-key",re:/-----BEGIN[A-Z ]*PRIVATE KEY-----/},{rule:"keystore-path",re:/keystore/i},{rule:"signer-url",re:/https?:\/\/\S*sign/i},{rule:"authorization-header",re:/authorization\s*:/i}]),Es=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"])});var ge=d(()=>{});import S from"node:fs";import _t from"node:os";import p from"node:path";import{fileURLToPath as Nt}from"node:url";function xe(){return process.env.ORACLE_FAKE_HOME||_t.homedir()}function Rt(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function A(){return Rt()?process.env.ORACLE_CONFIG_DIR||p.join(xe(),".config","oracle"):p.join(xe(),".config","oracle")}function Lt(){return p.join(A(),"desk.json")}function $t(){return p.join(A(),"env")}function f({force:e=!1}={}){if(f._done&&!e)return f._result||null;f._done=!0;let r={},t=(i,n)=>{if(n==null)return;let a=String(n).trim();a&&(process.env[i]!=null&&String(process.env[i]).trim()!==""||(process.env[i]=a,r[i]=a))};try{let i=$t();if(S.existsSync(i))for(let n of S.readFileSync(i,"utf8").split(/\r?\n/)){let a=n.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!a||a[2].startsWith("#"))continue;let s=a[2];(s.startsWith('"')&&s.endsWith('"')||s.startsWith("'")&&s.endsWith("'"))&&(s=s.slice(1,-1)),t(a[1],s)}}catch{}try{let i=Lt();if(S.existsSync(i)){let n=JSON.parse(S.readFileSync(i,"utf8"));n&&typeof n=="object"&&(t("ORACLE_DESK_URL",n.deskUrl||n.dataUrl||n.url),t("ORACLE_DATA_URL",n.dataUrl||n.deskUrl||n.url),t("ORACLE_API_URL",n.apiUrl||n.dataUrl||n.deskUrl),t("ORACLE_PUBLIC_URL",n.publicUrl||n.deskUrl||n.dataUrl),t("ORACLE_EXEC_URL",n.execUrl),t("MAD_DESK_URL",n.deskUrl||n.dataUrl))}}catch{}let o=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return o&&(t("ORACLE_DESK_URL",o),t("ORACLE_DATA_URL",o),t("ORACLE_API_URL",o),t("ORACLE_PUBLIC_URL",o),t("MAD_DESK_URL",o)),f._result=Object.keys(r).length?r:null,f._result}var Ct,Xu,Se=d(()=>{Ct=p.dirname(Nt(import.meta.url)),Xu=p.resolve(Ct,"../..");try{f()}catch{}});J();import z from"node:fs";import Ee from"node:path";import{homedir as Ot}from"node:os";function _(e){let r=e?.transactionHash||e?.hash||e?.txid||null;return r?{happened:!0,hash:String(r),note:null}:{happened:!1,hash:null,note:"no transaction hash \u2014 the action did not succeed"}}import l from"node:path";import kt from"node:os";import{createHash as It,randomBytes as Yl}from"node:crypto";import{Interface as H,keccak256 as Zl}from"ethers";import{Transaction as eu}from"@scure/btc-signer";import{ed25519 as ru}from"@noble/curves/ed25519.js";import{base58 as Ii}from"@scure/base";import{Interface as ee}from"ethers";import{Interface as Le,MaxUint256 as _r,isAddress as Nr,keccak256 as Cr,toUtf8Bytes as Rr}from"ethers";import{Interface as Ce,isAddress as ur}from"ethers";import{isAddress as or}from"ethers";var mr=new Ce(["function approve(address spender,uint256 amount) returns (bool)"]);import{Interface as Re,isAddress as gr}from"ethers";var xr=new Re(["function approve(address spender,uint256 amount) returns (bool)"]),Sr=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"});var jr=new Le(["function approve(address spender,uint256 amount) returns (bool)"]);var qr=300*1e3,Mr=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})();import{Address as Vr,NETWORK as Jr,OutScript as Kr,RawTx as Gr,SigHash as Yr,TEST_NETWORK as Xr,Transaction as Zr}from"@scure/btc-signer";import{createHash as $e}from"node:crypto";import{base58 as rn}from"@scure/base";import{getCompiledTransactionMessageDecoder as on}from"@solana/transaction-messages";var K=e=>$e("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),sn=new Map([[K("route"),{name:"route",prefixBytes:0}],[K("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]]);L();var $n=Object.freeze({"perp-order":"order","hip3-order":"order","hip4-order":"order","perp-bracket":"order","perp-cancel":"cancel","perp-leverage":"leverage","perp-isolated-margin":"margin","builder-fee-approval":"approveBuilder","hype-stake-deposit":"stake","hype-stake-withdraw":"unstake","hype-delegate":"delegate","hype-undelegate":"delegate"}),Pn=Object.freeze({"perp-order":"order","hip3-order":"order","hip4-order":"order","perp-bracket":"order","perp-cancel":"cancel","perp-leverage":"updateLeverage","perp-isolated-margin":"updateIsolatedMargin","builder-fee-approval":"approveBuilderFee","hype-stake-deposit":"cDeposit","hype-stake-withdraw":"cWithdraw","hype-delegate":"tokenDelegate","hype-undelegate":"tokenDelegate"});var jn="0x"+"00".repeat(32);var Be=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),zn=Object.freeze(Be.map(e=>e[0]));import{TypedDataEncoder as xo,getAddress as So}from"ethers";import{TypedDataEncoder as Kn,getAddress as Gn,isAddress as Yn}from"ethers";var je=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),Fe=Object.freeze({Order:[{name:"salt",type:"uint256"},{name:"maker",type:"address"},{name:"receiver",type:"address"},{name:"makerAsset",type:"address"},{name:"takerAsset",type:"address"},{name:"makingAmount",type:"uint256"},{name:"takingAmount",type:"uint256"},{name:"makerTraits",type:"uint256"}]});L();import{TypedDataEncoder as ao,getAddress as co,isAddress as lo}from"ethers";var Qn=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"});var qe=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),go=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"});var Me=Object.freeze({Order:[{name:"sellToken",type:"address"},{name:"buyToken",type:"address"},{name:"receiver",type:"address"},{name:"sellAmount",type:"uint256"},{name:"buyAmount",type:"uint256"},{name:"validTo",type:"uint32"},{name:"appData",type:"bytes32"},{name:"feeAmount",type:"uint256"},{name:"kind",type:"string"},{name:"partiallyFillable",type:"bool"},{name:"sellTokenBalance",type:"string"},{name:"buyTokenBalance",type:"string"}]}),yo=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]});var ko=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"]);var Je=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]);var Ho=Object.freeze({swap:5,bridge:5,perps:0,nft:0,mint:0,transfer:0,approve:0,delegate:0,identity:0,order:0,cancel:0,leverage:0,margin:0,approveBuilder:0,stake:0,unstake:0});var Ke=Object.freeze({"0x04e45aaf":{provider:"uniswap-v3",action:"swap",layout:"router02-exact-input-single"},"0x414bf389":{provider:"uniswap-v3",action:"swap",layout:"swap-router-exact-input-single"},"0xc04b8d59":{provider:"uniswap-v3",action:"swap",layout:"exact-input-deadline"},"0xb858183f":{provider:"uniswap-v3",action:"swap",layout:"exact-input"},"0x5ae401dc":{provider:"uniswap-v3",action:"swap",layout:"multicall-deadline"},"0xa026383e":{provider:"aerodrome",action:"swap",layout:"aerodrome-exact-input-single"},"0x7b939232":{provider:"across-v3",action:"bridge",layout:"across-deposit-v3"}}),zo=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Uo=new ee(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Wo=new ee(["function mintAllowList(address nftContract,address feeRecipient,address minterIfNotPayer,uint256 quantity,(uint80 mintPrice,uint48 maxTotalMintableByWallet,uint48 startTime,uint48 endTime,uint48 dropStageIndex,uint32 maxTokenSupplyForStage,uint16 feeBps,bool restrictFeeRecipients) mintParams,bytes32[] proof) payable"]),Vo=Object.freeze({"0xa0712d68":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0x1249c58b":{provider:"nft-mint",action:"mint",layout:"mint-no-args"},"0x2db11544":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0xefef39a1":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0xa6f2ae3a":{provider:"nft-mint",action:"mint",layout:"mint-no-args"}});var Ge=Object.freeze([...Je]),Jo=Object.freeze({...Ke});import{ed25519 as li}from"@noble/curves/ed25519.js";import{base58 as di}from"@scure/base";import{RawTx as pi,SigHash as mi,Transaction as wi}from"@scure/btc-signer";import{Transaction as gi,keccak256 as yi,verifyTypedData as bi}from"ethers";import{encode as Yo}from"@msgpack/msgpack";import{keccak256 as Zo,verifyTypedData as Qo}from"ethers";var ei=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),ti=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]});re();import{wordlists as zi}from"ethers";var ne=64*1024;var Wi=32*1024;var et=["schemaVersion","buildVersion","recordType","execution","custody"],Ki=[...et,"recordHash"];var Gi=Object.freeze({signed:new Set(["workflow.signed","legacy.signed"]),submitted:new Set(["workflow.submitted","legacy.broadcast"]),finalized:new Set(["workflow.finalized"]),reorged:new Set(["workflow.reorged"]),orphaned:new Set(["workflow.orphaned"]),compensating:new Set(["workflow.compensating"]),compensated:new Set(["workflow.compensated"])});var tt=Object.freeze(["draft","checked","approval","signed","submitted","finalized","reorged","orphaned","compensating","compensated","failed","cancelled"]),fe=Object.freeze(["workflow.drafted","workflow.checked","workflow.approval_requested","workflow.approval_granted","workflow.signed","workflow.submitted","workflow.finalized","workflow.reorged","workflow.orphaned","workflow.compensating","workflow.compensated","workflow.failed","workflow.cancelled","workflow.annotated"]),es=new Set(fe);var at=64*1024*1024;me();var F=Object.freeze(["intent","quote_comparison","simulation","prepared","approval","signed","broadcast","settlement","balance_delta","position"]),vs=Object.freeze(Object.fromEntries(F.map((e,r)=>[e,Object.freeze(r+1<F.length?[F[r+1]]:[])])));var ct=Object.freeze({intent:"draft",quote_comparison:"draft",simulation:"draft",prepared:"checked",approval:"approval",signed:"signed",broadcast:"submitted",settlement:"finalized",balance_delta:"compensated",position:"compensated"});var ut=Object.freeze(["owner","operator","agent","viewer"]),dt=Object.freeze(["tenant","config","policy","grant","workflow","trade","receipt","audit","telemetry","context","lifecycle"]),ft=Object.freeze({read:"read",create:"create",update:"update",delete:"delete",manage:"manage",prepare:"prepare",cancel:"cancel",export:"export",approve:"approve"}),ca=Object.freeze(["owner"]),la=Object.freeze({ALLOW_ROLE_PERMISSION:"allow.role_permission",DENY_MISSING_CONTEXT:"deny.missing_context",DENY_INVALID_CONTEXT:"deny.invalid_context",DENY_INVALID_REQUEST:"deny.invalid_request",DENY_UNKNOWN_RESOURCE:"deny.unknown_resource",DENY_UNKNOWN_ACTION:"deny.unknown_action",DENY_UNBOUND_OBJECT:"deny.unbound_object",DENY_TENANT_MISMATCH:"deny.tenant_mismatch",DENY_RESOURCE_MISMATCH:"deny.resource_mismatch",DENY_ROLE_PERMISSION:"deny.role_permission",DENY_POLICY_NOT_APPROVER:"deny.policy_not_approver"}),ua=new Set(ut),da=new Set(dt),fa=new Set(Object.values(ft));var pt=Object.freeze({owner:Object.freeze(["tenant:read","tenant:manage","config:read","config:manage","policy:read","policy:manage","grant:read","grant:create","grant:update","grant:delete","grant:manage","workflow:read","workflow:create","workflow:update","workflow:delete","workflow:cancel","workflow:approve","trade:read","trade:prepare","receipt:read","receipt:export","audit:read","audit:export","telemetry:read","telemetry:create","telemetry:export","context:read","context:create","context:update","context:delete","context:manage","context:export","lifecycle:read","lifecycle:create","lifecycle:update","lifecycle:delete","lifecycle:manage","lifecycle:approve","lifecycle:export"]),operator:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","workflow:cancel","trade:read","trade:prepare","receipt:read","audit:read","telemetry:read","telemetry:create","context:read","context:create","context:update","context:delete","lifecycle:read","lifecycle:create","lifecycle:update","lifecycle:manage"]),agent:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","trade:read","trade:prepare","receipt:read","telemetry:create","context:read","context:create","context:update","lifecycle:read"]),viewer:Object.freeze(["tenant:read","config:read","grant:read","workflow:read","trade:read","receipt:read","audit:read","telemetry:read","context:read","lifecycle:read"])}),pa=Object.freeze(Object.fromEntries(Object.entries(pt).map(([e,r])=>[e,Object.freeze([...r])])));var mt=Object.freeze(["succeeded","denied","invalid","failed","cancelled","timed_out","unavailable","skipped"]),wt=Object.freeze(["workflow","task","intent","plan","run","event","eval"]),ht=Object.freeze(["taskId","intentId","planId","runId","eventId"]);var ga=Object.freeze({maxAttributes:24,maxKeyLength:48,maxStringLength:256,maxArrayLength:8}),ya=new Set(mt),ba=new Set(wt),Ea=new Set(ht);var xa=Object.freeze(["authorization","bearer","cookie","credential","password","passphrase","secret","token","privatekey","privkey","seed","mnemonic","keystore","signature","prompt","systemmessage","usermessage","assistantmessage","rawtransaction","signedtransaction","serializedtransaction","transactionbytes","calldata","callbytes","inputdata"]);var Sa=Object.freeze({taskId:"x-oracle-task-id",intentId:"x-oracle-intent-id",planId:"x-oracle-plan-id",runId:"x-oracle-run-id",eventId:"x-oracle-event-id"});var Ta=Object.freeze({"workflow.cancelled":"cancelled","workflow.failed":"failed"});var $a=32*1024*1024;var Ba=Object.freeze({N:1<<17,r:8,p:1}),Da=256*1024*1024,ja=16*1024;var qa=Object.freeze({1:{name:"ethereum",mode:"mempool-private",endpoints:["https://rpc.flashbots.net/fast","https://rpc.mevblocker.io"]},8453:{name:"base",mode:"sequencer",endpoints:["https://mainnet-sequencer.base.org"]},10:{name:"optimism",mode:"sequencer",endpoints:["https://mainnet-sequencer.optimism.io"]},42161:{name:"arbitrum",mode:"sequencer",endpoints:["https://arb1-sequencer.arbitrum.io/rpc"]},56:{name:"bsc",mode:"mempool-private",endpoints:["https://rpc.48.club","https://bsc.rpc.blxrbdn.com"]},137:{name:"polygon",mode:"mempool-private",endpoints:["https://polygon-bor-rpc.publicnode.com"]},43114:{name:"avalanche",mode:"public-only",endpoints:[]},999:{name:"hyperevm",mode:"public-only",endpoints:[]}});import{homedir as q}from"node:os";import{join as M}from"node:path";var we=process.env.ORACLE_PUBLIC_DESKTOP==="1",gt=we?process.env.ORACLE_CONFIG_DIR||M(q(),".config","oracle"):M(q(),".config","oracle"),Ua=we?gt:M(q(),".config","mad-desk");var Ga="0".repeat(64),Ya=Object.freeze({PREPARE:"exec.prepare",SIGN:"exec.sign",BROADCAST:"exec.broadcast",POLICY_REJECT:"policy.reject",AUTH_GRANT:"auth.grant",AUTH_OK:"auth.verify.ok",AUTH_FAIL:"auth.verify.fail"});var Xa=Promise.resolve();ge();import{readFileSync as cc,readdirSync as lc,existsSync as yt}from"node:fs";import{dirname as bt,join as h}from"node:path";import{fileURLToPath as Et}from"node:url";var g=bt(Et(import.meta.url));function xt(){let e=[h(g,"descriptors"),h(g,"clear-sign","descriptors"),h(g,"..","clear-sign","descriptors"),h(g,"..","..","clear-sign","descriptors"),h(g,"..","..","..","clear-sign","descriptors")];for(let r of e)if(yt(r))return r;return e[0]}var pc=xt();var mc=(1n<<256n)-1n;import{Wallet as Ac}from"ethers";import{base58 as kc}from"@scure/base";import{ed25519 as Oc}from"@noble/curves/ed25519.js";import{NETWORK as _c,TEST_NETWORK as Nc,WIF as Cc,p2wpkh as Rc}from"@scure/btc-signer";import{pubECDSA as $c}from"@scure/btc-signer/utils.js";var Dc=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),jc=Object.freeze(["binance","bybit","okx","coinbase"]),Fc=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),qc=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),Mc=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),Hc=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),zc=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),Uc=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),Wc=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),Vc=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),Jc=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"});var vt=Object.freeze({binance:Object.freeze({create:["POST","/api/v3/order"],cancel:["DELETE","/api/v3/order"],status:["GET","/api/v3/order"]}),bybit:Object.freeze({create:["POST","/v5/order/create"],cancel:["POST","/v5/order/cancel"],status:["GET","/v5/order/realtime"]}),okx:Object.freeze({create:["POST","/api/v5/trade/order"],cancel:["POST","/api/v5/trade/cancel-order"],status:["GET","/api/v5/trade/order"]}),coinbase:Object.freeze({create:["POST","/orders"],cancel:["DELETE","/orders/{order_id}"],status:["GET","/orders/{order_id}"]})}),ye=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"});var nl=256*1024;var Ru=new H(["function collection() view returns (address)","function token() view returns (address)","function robinhoodSwapFeeWei() view returns (uint256)","function quoteSpecificBuy(uint256 tokenId) view returns (uint256 totalCost,uint256 baseCost,uint256 fee,uint256 protocolFee,bool available)","function quoteSellNFT() view returns (uint256 netPayout,uint256 grossPayout,uint256 fee,uint256 protocolFee)","function inventory(uint256 tokenId) view returns (bool)","function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Lu=new H(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),$u=new H(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"]);function be(e){let r=process.env.ORACLE_SIGNER_STATE_DIR||l.join(process.env.XDG_STATE_HOME||l.join(kt.homedir(),".local","state"),"oracle"),t=It("sha256").update(l.resolve(e)).digest("hex").slice(0,16);return{vault:l.join(e,"vault.json"),policy:l.join(e,"signer-policy.json"),policyKey:l.join(e,"policy-integrity-key"),policyAnchor:l.join(r,`signer-policy-${t}.high-water`),ledger:l.join(e,"signer-ledger.json"),ledgerAnchor:l.join(r,`signer-ledger-${t}.high-water`),cexOrders:l.join(e,"cex-orders.json"),cexOrdersAnchor:l.join(r,`cex-orders-${t}.high-water`),token:l.join(e,"signer-token"),lock:l.join(r,`signer-${t}.lock`),workflowLedger:l.join(e,"workflow-events.jsonl")}}function Tt(){return process.env.ORACLE_CONFIG_DIR||Ee.join(Ot(),".config","oracle")}function x(){let e=be(Ee.join(Tt(),"signer")),r=z.existsSync(e.vault),t=z.existsSync(e.lock),o=r?t?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:r,policyConfigured:z.existsSync(e.policy),armed:r&&!t,disarmed:t,capabilities:{swap:o,bridge:o},autonomous:!1,note:"Keys stay on this machine. Exact confirmation is required before any broadcast."}}var Wu=Object.freeze([{type:"function",function:{name:"vault_status",description:"Read local Oracle vault/signer readiness. Never returns key material.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_status",description:"Ping the loopback signer. Fails closed if it is not running.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_pending",description:"List pending local-signer artifacts. Read-only. Does not approve, sign, or broadcast.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_queue",description:"Queue a prepared unsigned artifact on the loopback signer. Does not broadcast.",parameters:{type:"object",properties:{artifact:{type:"object"}},required:["artifact"],additionalProperties:!1}}},{type:"function",function:{name:"signer_ack",description:"Execute one pending artifact through the armed local signer (same path as Telegram Allow). Fails if the signer is not running or disarmed. Never holds keys.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"signer_deny",description:"Drop one pending local-signer artifact. Nothing signed.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"signer_execute",description:"Broadcast one already-confirmed local artifact. Requires a one-use confirmationNonce from the local signer TTY confirm. Cannot mint confirmation itself.",parameters:{type:"object",properties:{artifact:{type:"object"},confirmationNonce:{type:"string",minLength:32,maxLength:128}},required:["artifact","confirmationNonce"],additionalProperties:!1}}},{type:"function",function:{name:"signer_disarm",description:"Global kill switch. Stops the local signer from broadcasting.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"receipt_report",description:"Receipt or it did not happen. Requires transactionHash/hash/txid.",parameters:{type:"object",properties:{receipt:{type:"object"},transactionHash:{type:"string"},hash:{type:"string"},txid:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"watch_create",description:"Create an alert-only watch. Never execute.",parameters:{type:"object",properties:{chain:{type:"string"},token:{type:"string"},condition:{type:"string"},note:{type:"string"}},required:["chain","token","condition"],additionalProperties:!1}}},{type:"function",function:{name:"watch_list",description:"List local alert-only watches.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"portfolio_snapshot",description:"How to read the one portfolio snapshot. knownUsd is incomplete if a provider is missing.",parameters:{type:"object",properties:{},additionalProperties:!1}}}]);Se();import ve from"node:fs";import Ft from"node:path";var Pt=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","local","ollama","custom","anthropic-oauth","openai-codex","xai-oauth"]);function v(e){return String(e||"").trim()||void 0}function Bt(e,{required:r=!1}={}){let t=v(e)?.toLowerCase();if(!t){if(r)throw new Error("model provider is required");return}if(!Pt.has(t))throw new Error(`unsupported provider: ${t}`);return t}function Dt(e,{required:r=!1}={}){let t=v(e);if(!t){if(r)throw new Error("model is required");return}if(t.includes("..")||t.startsWith("/")||!/^[a-zA-Z0-9._:/-]{1,200}$/.test(t))throw new Error("invalid model id");return t}function jt(e){let r=v(e);if(!r||r.length>2048)throw new Error("invalid custom base URL");let t;try{t=new URL(r)}catch{throw new Error("invalid custom base URL")}let o=t.hostname.toLowerCase().replace(/^\[|\]$/g,""),i=o==="localhost"||o==="127.0.0.1"||o==="::1";if(t.protocol!=="https:"&&!(t.protocol==="http:"&&i)||t.username||t.password||t.search||t.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return t.toString().replace(/\/+$/,"")}function Ae({provider:e,model:r,baseUrl:t}={},{requireModel:o=!1}={}){let i=Bt(e),n=Dt(r,{required:o});if(i==="custom")return{provider:i,...n?{model:n}:{},baseUrl:jt(t)};if(v(t))throw new Error("baseUrl is only supported for the custom provider");return{...i?{provider:i}:{},...n?{model:n}:{}}}var qt=new Set(["auto","standalone","hermes","remote","arch"]);function Mt(){return Ft.join(A(),"model.json")}function m(e){return String(e||"").trim()||void 0}function Ht(e={}){let r=m(e.backend)?.toLowerCase()||"auto",t=Ae({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:r==="standalone"}),o=m(e.apiKeyEnv),i=Number.parseInt(String(e.contextLength||""),10),n=m(e.reasoningEffort),a=m(e.computeHost||e.remoteHost),s=m(e.computeUser||e.remoteUser),c=m(e.computePath||e.remotePath);if(!qt.has(r))throw new Error(`unsupported backend: ${r}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(r))throw new Error("remote compute backends are disabled in the public desktop");if(o&&!/^[A-Z][A-Z0-9_]*$/.test(o))throw new Error("api key env must be an uppercase environment variable name");if(r==="remote"&&!a)throw new Error("remote backend requires computeHost");return{backend:r,...t,...o?{apiKeyEnv:o}:{},...Number.isFinite(i)&&i>0?{contextLength:i}:{},...n?{reasoningEffort:n}:{},...a?{computeHost:a}:{},...s?{computeUser:s}:{},...c?{computePath:c}:{}}}function ke(){let e=Mt();if(!ve.existsSync(e))return null;try{return Ht(JSON.parse(ve.readFileSync(e,"utf8")))}catch{return null}}var zt=new Set(["127.0.0.1","::1","localhost"]);function U({env:e=process.env,vault:r=null}={}){let t=r||x(),o=[];for(let[i,n]of Object.entries(T)){let a=(n.rpcEnv||[]).some(c=>String(e[c]||"").trim()),s="prepare";n.evm?a&&(s="live"):s="unavailable",o.push({key:i,chainId:n.chainId,name:n.name,family:"evm",status:s,execute:!!(t.vaultExists&&t.armed&&!t.disarmed),note:a?"rpc configured":"public read/prepare; set RPC for live reads"})}return o.push({key:"solana",chainId:null,name:"Solana",family:"sol",status:"prepare",execute:!1,note:"Jupiter quote/prepare; local sol signer"},{key:"bitcoin",chainId:null,name:"Bitcoin",family:"btc",status:"prepare",execute:!1,note:"Esplora read; local btc signer"},{key:"hyperliquid-l1",chainId:null,name:"Hyperliquid L1",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not an EVM signer family"},{key:"polymarket",chainId:null,name:"Polymarket",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not a signer family"}),o}function Ut({env:e=process.env,model:r=ke(),vault:t=x(),signerReachable:o=!1,quote:i=null,reviewAvailable:n=!1,receiptAvailable:a=!1}={}){let s=[],c=(u,O,Oe,Te=null)=>s.push({id:u,status:O,detail:Oe,fix:Te}),W=(()=>{let[u,O]=process.versions.node.split(".").map(Number);return u>20||u===20&&O>=19})();c("node",W?"ok":"fail",`node ${process.versions.node}`,W?null:"install node >= 20.19"),r?r.backend==="hermes"?c("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):c("model","ok",`${r.backend||"auto"} ${r.provider||""} ${r.model||""}`.trim()):c("model","fail","no model.json","oracle setup model"),t.vaultExists?t.disarmed?c("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):c("vault",t.armed?"ok":"warn",t.armed?"present, armed":"present, not armed"):c("vault","fail","no local vault","oracle sign init");let I=e.ORACLE_SIGNER_HOST||"127.0.0.1";if(zt.has(I)?c("signer",o?"ok":"warn",o?`loopback ${I}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",o?null:"oracle signer"):c("signer","fail",`signer host ${I} is not loopback`,"unset ORACLE_SIGNER_HOST"),!i)c("quote","warn","quote not probed",null);else if(i.ok){let u=String(i.detail||"net quote returned");c("quote","ok",u.length>140?`${u.slice(0,140)}\u2026`:u)}else c("quote","warn",i.detail||"quote unavailable","check network / oracle data serve");c("review",n?"ok":"fail",n?"sign-time review renders decoded action, policy hits, approval deltas":"sign-time review module missing from this build",n?null:"reinstall @oracle-agent/oracle (src/control/sign-time-review.mjs)"),c("receipt",a?"ok":"fail",a?"oracle receipt verifies on-chain state (SUCCESS/FAIL/UNKNOWN, finality-pinned)":"verified-receipt observer missing from this build",a?null:"reinstall @oracle-agent/oracle (src/desk/observe-receipt.mjs)");let Ie=s.some(u=>u.status==="fail"),V=s.filter(u=>u.status==="ok").length;return{ok:!Ie,checks:s,firstRunScore:{ok:V,total:s.length,label:`${V}/${s.length} first-run hops green`},venues:U({env:e,vault:t})}}async function pd(e=process.env){let r=e.ORACLE_SIGNER_HOST||"127.0.0.1",t=e.ORACLE_SIGNER_PORT||9462;try{return(await fetch(`http://${r}:${t}/status`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}function k(e){let r=String(e??"?").replace(/[^\w.$-]/g,"");return r.length>12?`${r.slice(0,12)}...`:r||"?"}function Wt(e,r=120){let t=String(e??"").replace(/[\u0000-\u001f\u007f-\u009f]/g," ").replace(/\s+/g," ").trim();return t?t.length>r?`${t.slice(0,r)}...`:t:"quote failed"}async function md(){try{let e=await fetch("https://api.dexscreener.com/latest/dex/search?q=WETH%20USDC",{signal:AbortSignal.timeout(4e3)});if(!e.ok)return{ok:!1,detail:`dexscreener ${e.status}`};let t=(await e.json())?.pairs?.[0];return!t?.chainId||!t?.priceUsd?{ok:!1,detail:"no pair"}:{ok:!0,detail:`${k(t.chainId)} ${k(t.baseToken?.symbol)}/${k(t.quoteToken?.symbol)} $${k(t.priceUsd)}`}}catch(e){return{ok:!1,detail:Wt(e instanceof Error?e.message:"quote failed")}}}var wd={name:"venues",summary:"label every shipped venue live / prepare / unavailable",group:"read",usage:"oracle venues [--json]",async run(e){let r=e.argv.includes("--json"),t=U();if(r)return process.stdout.write(`${JSON.stringify({venues:t},null,2)}
|
|
1
|
+
var d=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(o){throw t=[o],o}};var T,Gt,G=d(()=>{T={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}},Gt=new Map(Object.values(T).map(e=>[e.chainId,e]))});var X=d(()=>{});var hn,gn,yn,bn,En,xn,Sn,L=d(()=>{X();hn=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,gn=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,yn=AbortSignal.prototype.throwIfAborted,bn=EventTarget.prototype.addEventListener,En=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null,xn=64*1024,Sn=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024})});import{wordlists as Hi}from"ethers";var B=d(()=>{});var vs,Is,ks,pe=d(()=>{vs=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),Is=Object.freeze(["read","simulate"]),ks=1440*60});var Ps,Bs,Ds,me=d(()=>{pe();Ps=Object.freeze(["privkey","wif","xprv","seed"]),Bs=Object.freeze([{rule:"raw-32-byte-hex-key",re:/^0x[0-9a-fA-F]{64}$/},{rule:"raw-32-byte-hex-bare",re:/^[0-9a-fA-F]{64}$/},{rule:"extended-private-key",re:/\b(?:xprv|tprv|yprv|zprv)[1-9A-HJ-NP-Za-km-z]{107}\b/},{rule:"bitcoin-wif",re:/\b[59KLc][1-9A-HJ-NP-Za-km-z]{50,51}\b/},{rule:"bip39-mnemonic",re:/\b(?:[a-z]{3,8}\s+){11,23}[a-z]{3,8}\b/},{rule:"bearer-token",re:/bearer\s+[A-Za-z0-9._~+/=-]+/i},{rule:"pem-private-key",re:/-----BEGIN[A-Z ]*PRIVATE KEY-----/},{rule:"keystore-path",re:/keystore/i},{rule:"signer-url",re:/https?:\/\/\S*sign/i},{rule:"authorization-header",re:/authorization\s*:/i}]),Ds=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"])});var ge=d(()=>{});import S from"node:fs";import _t from"node:os";import p from"node:path";import{fileURLToPath as Rt}from"node:url";function xe(){return process.env.ORACLE_FAKE_HOME||_t.homedir()}function $t(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function A(){return $t()?process.env.ORACLE_CONFIG_DIR||p.join(xe(),".config","oracle"):p.join(xe(),".config","oracle")}function Pt(){return p.join(A(),"desk.json")}function Bt(){return p.join(A(),"env")}function f({force:e=!1}={}){if(f._done&&!e)return f._result||null;f._done=!0;let r={},t=(i,n)=>{if(n==null)return;let a=String(n).trim();a&&(process.env[i]!=null&&String(process.env[i]).trim()!==""||(process.env[i]=a,r[i]=a))};try{let i=Bt();if(S.existsSync(i))for(let n of S.readFileSync(i,"utf8").split(/\r?\n/)){let a=n.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!a||a[2].startsWith("#"))continue;let s=a[2];(s.startsWith('"')&&s.endsWith('"')||s.startsWith("'")&&s.endsWith("'"))&&(s=s.slice(1,-1)),t(a[1],s)}}catch{}try{let i=Pt();if(S.existsSync(i)){let n=JSON.parse(S.readFileSync(i,"utf8"));n&&typeof n=="object"&&(t("ORACLE_DESK_URL",n.deskUrl||n.dataUrl||n.url),t("ORACLE_DATA_URL",n.dataUrl||n.deskUrl||n.url),t("ORACLE_API_URL",n.apiUrl||n.dataUrl||n.deskUrl),t("ORACLE_PUBLIC_URL",n.publicUrl||n.deskUrl||n.dataUrl),t("ORACLE_EXEC_URL",n.execUrl),t("MAD_DESK_URL",n.deskUrl||n.dataUrl))}}catch{}let o=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return o&&(t("ORACLE_DESK_URL",o),t("ORACLE_DATA_URL",o),t("ORACLE_API_URL",o),t("ORACLE_PUBLIC_URL",o),t("MAD_DESK_URL",o)),f._result=Object.keys(r).length?r:null,f._result}var Lt,hd,Se=d(()=>{Lt=p.dirname(Rt(import.meta.url)),hd=p.resolve(Lt,"../..");try{f()}catch{}});G();import W from"node:fs";import Ee from"node:path";import{homedir as Nt}from"node:os";function N(e){let r=e?.transactionHash||e?.hash||e?.txid||null;return r?{happened:!0,hash:String(r),note:null}:{happened:!1,hash:null,note:"no transaction hash \u2014 the action did not succeed"}}import u from"node:path";import Ot from"node:os";import{createHash as Tt,randomBytes as ml}from"node:crypto";import{Interface as U,keccak256 as hl}from"ethers";import{Transaction as yl}from"@scure/btc-signer";import{ed25519 as El}from"@noble/curves/ed25519.js";import{base58 as Ni}from"@scure/base";import{Interface as re}from"ethers";import{Interface as Le,MaxUint256 as _r,isAddress as Rr,keccak256 as Lr,toUtf8Bytes as $r}from"ethers";import{Interface as _e,isAddress as fr}from"ethers";import{isAddress as sr}from"ethers";var hr=new _e(["function approve(address spender,uint256 amount) returns (bool)"]);import{Interface as Re,isAddress as br}from"ethers";var Ar=new Re(["function approve(address spender,uint256 amount) returns (bool)"]),vr=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"});var qr=new Le(["function approve(address spender,uint256 amount) returns (bool)"]);var Hr=300*1e3,zr=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})();import{Address as Jr,NETWORK as Gr,OutScript as Yr,RawTx as Xr,SigHash as Zr,TEST_NETWORK as Qr,Transaction as en}from"@scure/btc-signer";import{createHash as $e}from"node:crypto";import{base58 as on}from"@scure/base";import{getCompiledTransactionMessageDecoder as an}from"@solana/transaction-messages";var Y=e=>$e("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),cn=new Map([[Y("route"),{name:"route",prefixBytes:0}],[Y("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]]);L();var Rn=Object.freeze({tradexyz:"xyz",ventuals:"vntl",hypernova:"hyna",paradex:"para"});var Dn=Object.freeze({"perp-order":"order","hip3-order":"order","hip4-order":"order","perp-bracket":"order","perp-cancel":"cancel","perp-leverage":"leverage","perp-isolated-margin":"margin","builder-fee-approval":"approveBuilder","hype-stake-deposit":"stake","hype-stake-withdraw":"unstake","hype-delegate":"delegate","hype-undelegate":"delegate"}),jn=Object.freeze({"perp-order":"order","hip3-order":"order","hip4-order":"order","perp-bracket":"order","perp-cancel":"cancel","perp-leverage":"updateLeverage","perp-isolated-margin":"updateIsolatedMargin","builder-fee-approval":"approveBuilderFee","hype-stake-deposit":"cDeposit","hype-stake-withdraw":"cWithdraw","hype-delegate":"tokenDelegate","hype-undelegate":"tokenDelegate"});var Mn="0x"+"00".repeat(32);var Be=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),Vn=Object.freeze(Be.map(e=>e[0]));import{TypedDataEncoder as vo,getAddress as Io}from"ethers";import{TypedDataEncoder as Xn,getAddress as Zn,isAddress as Qn}from"ethers";var je=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),Fe=Object.freeze({Order:[{name:"salt",type:"uint256"},{name:"maker",type:"address"},{name:"receiver",type:"address"},{name:"makerAsset",type:"address"},{name:"takerAsset",type:"address"},{name:"makingAmount",type:"uint256"},{name:"takingAmount",type:"uint256"},{name:"makerTraits",type:"uint256"}]});L();import{TypedDataEncoder as lo,getAddress as fo,isAddress as po}from"ethers";var ro=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"});var qe=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),Eo=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"});var Me=Object.freeze({Order:[{name:"sellToken",type:"address"},{name:"buyToken",type:"address"},{name:"receiver",type:"address"},{name:"sellAmount",type:"uint256"},{name:"buyAmount",type:"uint256"},{name:"validTo",type:"uint32"},{name:"appData",type:"bytes32"},{name:"feeAmount",type:"uint256"},{name:"kind",type:"string"},{name:"partiallyFillable",type:"bool"},{name:"sellTokenBalance",type:"string"},{name:"buyTokenBalance",type:"string"}]}),xo=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]});var To=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"]);var Ke=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]);var Wo=Object.freeze({swap:5,bridge:5,perps:0,nft:0,mint:0,transfer:0,approve:0,delegate:0,identity:0,order:0,cancel:0,leverage:0,margin:0,approveBuilder:0,stake:0,unstake:0});var Je=Object.freeze({"0x04e45aaf":{provider:"uniswap-v3",action:"swap",layout:"router02-exact-input-single"},"0x414bf389":{provider:"uniswap-v3",action:"swap",layout:"swap-router-exact-input-single"},"0xc04b8d59":{provider:"uniswap-v3",action:"swap",layout:"exact-input-deadline"},"0xb858183f":{provider:"uniswap-v3",action:"swap",layout:"exact-input"},"0x5ae401dc":{provider:"uniswap-v3",action:"swap",layout:"multicall-deadline"},"0xa026383e":{provider:"aerodrome",action:"swap",layout:"aerodrome-exact-input-single"},"0x7b939232":{provider:"across-v3",action:"bridge",layout:"across-deposit-v3"}}),Vo=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Ko=new re(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Jo=new re(["function mintAllowList(address nftContract,address feeRecipient,address minterIfNotPayer,uint256 quantity,(uint80 mintPrice,uint48 maxTotalMintableByWallet,uint48 startTime,uint48 endTime,uint48 dropStageIndex,uint32 maxTokenSupplyForStage,uint16 feeBps,bool restrictFeeRecipients) mintParams,bytes32[] proof) payable"]),Go=Object.freeze({"0xa0712d68":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0x1249c58b":{provider:"nft-mint",action:"mint",layout:"mint-no-args"},"0x2db11544":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0xefef39a1":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0xa6f2ae3a":{provider:"nft-mint",action:"mint",layout:"mint-no-args"}});var Ge=Object.freeze([...Ke]),Yo=Object.freeze({...Je});import{ed25519 as fi}from"@noble/curves/ed25519.js";import{base58 as mi}from"@scure/base";import{RawTx as hi,SigHash as gi,Transaction as yi}from"@scure/btc-signer";import{Transaction as Ei,keccak256 as xi,verifyTypedData as Si}from"ethers";import{encode as Qo}from"@msgpack/msgpack";import{keccak256 as ti,verifyTypedData as ri}from"ethers";var ni=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),oi=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]});import{closeSync as Wi,constants as Qe,fchmodSync as Vi,fsyncSync as Ki,lstatSync as Ji,mkdirSync as Gi,openSync as Yi,readFileSync as Xi,renameSync as Zi,rmSync as Qi,writeFileSync as es}from"node:fs";B();var ns=Qe.O_NOFOLLOW??0;B();import{wordlists as ss}from"ethers";var ne=64*1024;var cs=32*1024;var rt=["schemaVersion","buildVersion","recordType","execution","custody"],ds=[...rt,"recordHash"];var fs=Object.freeze({signed:new Set(["workflow.signed","legacy.signed"]),submitted:new Set(["workflow.submitted","legacy.broadcast"]),finalized:new Set(["workflow.finalized"]),reorged:new Set(["workflow.reorged"]),orphaned:new Set(["workflow.orphaned"]),compensating:new Set(["workflow.compensating"]),compensated:new Set(["workflow.compensated"])});var nt=Object.freeze(["draft","checked","approval","signed","submitted","finalized","reorged","orphaned","compensating","compensated","failed","cancelled"]),fe=Object.freeze(["workflow.drafted","workflow.checked","workflow.approval_requested","workflow.approval_granted","workflow.signed","workflow.submitted","workflow.finalized","workflow.reorged","workflow.orphaned","workflow.compensating","workflow.compensated","workflow.failed","workflow.cancelled","workflow.annotated"]),gs=new Set(fe);var ut=64*1024*1024;me();var M=Object.freeze(["intent","quote_comparison","simulation","prepared","approval","signed","broadcast","settlement","balance_delta","position"]),Ms=Object.freeze(Object.fromEntries(M.map((e,r)=>[e,Object.freeze(r+1<M.length?[M[r+1]]:[])])));var lt=Object.freeze({intent:"draft",quote_comparison:"draft",simulation:"draft",prepared:"checked",approval:"approval",signed:"signed",broadcast:"submitted",settlement:"finalized",balance_delta:"compensated",position:"compensated"});var ft=Object.freeze(["owner","operator","agent","viewer"]),pt=Object.freeze(["tenant","config","policy","grant","workflow","trade","receipt","audit","telemetry","context","lifecycle"]),mt=Object.freeze({read:"read",create:"create",update:"update",delete:"delete",manage:"manage",prepare:"prepare",cancel:"cancel",export:"export",approve:"approve"}),Ia=Object.freeze(["owner"]),ka=Object.freeze({ALLOW_ROLE_PERMISSION:"allow.role_permission",DENY_MISSING_CONTEXT:"deny.missing_context",DENY_INVALID_CONTEXT:"deny.invalid_context",DENY_INVALID_REQUEST:"deny.invalid_request",DENY_UNKNOWN_RESOURCE:"deny.unknown_resource",DENY_UNKNOWN_ACTION:"deny.unknown_action",DENY_UNBOUND_OBJECT:"deny.unbound_object",DENY_TENANT_MISMATCH:"deny.tenant_mismatch",DENY_RESOURCE_MISMATCH:"deny.resource_mismatch",DENY_ROLE_PERMISSION:"deny.role_permission",DENY_POLICY_NOT_APPROVER:"deny.policy_not_approver"}),Oa=new Set(ft),Ta=new Set(pt),Na=new Set(Object.values(mt));var wt=Object.freeze({owner:Object.freeze(["tenant:read","tenant:manage","config:read","config:manage","policy:read","policy:manage","grant:read","grant:create","grant:update","grant:delete","grant:manage","workflow:read","workflow:create","workflow:update","workflow:delete","workflow:cancel","workflow:approve","trade:read","trade:prepare","receipt:read","receipt:export","audit:read","audit:export","telemetry:read","telemetry:create","telemetry:export","context:read","context:create","context:update","context:delete","context:manage","context:export","lifecycle:read","lifecycle:create","lifecycle:update","lifecycle:delete","lifecycle:manage","lifecycle:approve","lifecycle:export"]),operator:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","workflow:cancel","trade:read","trade:prepare","receipt:read","audit:read","telemetry:read","telemetry:create","context:read","context:create","context:update","context:delete","lifecycle:read","lifecycle:create","lifecycle:update","lifecycle:manage"]),agent:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","trade:read","trade:prepare","receipt:read","telemetry:create","context:read","context:create","context:update","lifecycle:read"]),viewer:Object.freeze(["tenant:read","config:read","grant:read","workflow:read","trade:read","receipt:read","audit:read","telemetry:read","context:read","lifecycle:read"])}),Ca=Object.freeze(Object.fromEntries(Object.entries(wt).map(([e,r])=>[e,Object.freeze([...r])])));var ht=Object.freeze(["succeeded","denied","invalid","failed","cancelled","timed_out","unavailable","skipped"]),gt=Object.freeze(["workflow","task","intent","plan","run","event","eval"]),yt=Object.freeze(["taskId","intentId","planId","runId","eventId"]);var $a=Object.freeze({maxAttributes:24,maxKeyLength:48,maxStringLength:256,maxArrayLength:8}),Pa=new Set(ht),Ba=new Set(gt),Da=new Set(yt);var ja=Object.freeze(["authorization","bearer","cookie","credential","password","passphrase","secret","token","privatekey","privkey","seed","mnemonic","keystore","signature","prompt","systemmessage","usermessage","assistantmessage","rawtransaction","signedtransaction","serializedtransaction","transactionbytes","calldata","callbytes","inputdata"]);var Fa=Object.freeze({taskId:"x-oracle-task-id",intentId:"x-oracle-intent-id",planId:"x-oracle-plan-id",runId:"x-oracle-run-id",eventId:"x-oracle-event-id"});var Wa=Object.freeze({"workflow.cancelled":"cancelled","workflow.failed":"failed"});var Xa=32*1024*1024;var Qa=Object.freeze({N:1<<17,r:8,p:1}),ec=256*1024*1024,tc=16*1024;var nc=Object.freeze({1:{name:"ethereum",mode:"mempool-private",endpoints:["https://rpc.flashbots.net/fast","https://rpc.mevblocker.io"]},8453:{name:"base",mode:"sequencer",endpoints:["https://mainnet-sequencer.base.org"]},10:{name:"optimism",mode:"sequencer",endpoints:["https://mainnet-sequencer.optimism.io"]},42161:{name:"arbitrum",mode:"sequencer",endpoints:["https://arb1-sequencer.arbitrum.io/rpc"]},56:{name:"bsc",mode:"mempool-private",endpoints:["https://rpc.48.club","https://bsc.rpc.blxrbdn.com"]},137:{name:"polygon",mode:"mempool-private",endpoints:["https://polygon-bor-rpc.publicnode.com"]},43114:{name:"avalanche",mode:"public-only",endpoints:[]},999:{name:"hyperevm",mode:"public-only",endpoints:[]}});import{homedir as H}from"node:os";import{join as z}from"node:path";var we=process.env.ORACLE_PUBLIC_DESKTOP==="1",bt=we?process.env.ORACLE_CONFIG_DIR||z(H(),".config","oracle"):z(H(),".config","oracle"),ac=we?bt:z(H(),".config","mad-desk");var fc="0".repeat(64),pc=Object.freeze({PREPARE:"exec.prepare",SIGN:"exec.sign",BROADCAST:"exec.broadcast",POLICY_REJECT:"policy.reject",AUTH_GRANT:"auth.grant",AUTH_OK:"auth.verify.ok",AUTH_FAIL:"auth.verify.fail"});var mc=Promise.resolve();ge();import{readFileSync as Ic,readdirSync as kc,existsSync as Et}from"node:fs";import{dirname as xt,join as h}from"node:path";import{fileURLToPath as St}from"node:url";var g=xt(St(import.meta.url));function At(){let e=[h(g,"descriptors"),h(g,"clear-sign","descriptors"),h(g,"..","clear-sign","descriptors"),h(g,"..","..","clear-sign","descriptors"),h(g,"..","..","..","clear-sign","descriptors")];for(let r of e)if(Et(r))return r;return e[0]}var Cc=At();var _c=(1n<<256n)-1n;import{Wallet as qc}from"ethers";import{base58 as Hc}from"@scure/base";import{ed25519 as Uc}from"@noble/curves/ed25519.js";import{NETWORK as Vc,TEST_NETWORK as Kc,WIF as Jc,p2wpkh as Gc}from"@scure/btc-signer";import{pubECDSA as Xc}from"@scure/btc-signer/utils.js";var eu=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),tu=Object.freeze(["binance","bybit","okx","coinbase"]),ru=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),nu=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),ou=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),iu=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),su=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),au=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),cu=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),uu=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),lu=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"});var kt=Object.freeze({binance:Object.freeze({create:["POST","/api/v3/order"],cancel:["DELETE","/api/v3/order"],status:["GET","/api/v3/order"]}),bybit:Object.freeze({create:["POST","/v5/order/create"],cancel:["POST","/v5/order/cancel"],status:["GET","/v5/order/realtime"]}),okx:Object.freeze({create:["POST","/api/v5/trade/order"],cancel:["POST","/api/v5/trade/cancel-order"],status:["GET","/api/v5/trade/order"]}),coinbase:Object.freeze({create:["POST","/orders"],cancel:["DELETE","/orders/{order_id}"],status:["GET","/orders/{order_id}"]})}),ye=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"});var Eu=256*1024;var Xl=new U(["function collection() view returns (address)","function token() view returns (address)","function robinhoodSwapFeeWei() view returns (uint256)","function quoteSpecificBuy(uint256 tokenId) view returns (uint256 totalCost,uint256 baseCost,uint256 fee,uint256 protocolFee,bool available)","function quoteSellNFT() view returns (uint256 netPayout,uint256 grossPayout,uint256 fee,uint256 protocolFee)","function inventory(uint256 tokenId) view returns (bool)","function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Zl=new U(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),Ql=new U(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"]);function be(e){let r=process.env.ORACLE_SIGNER_STATE_DIR||u.join(process.env.XDG_STATE_HOME||u.join(Ot.homedir(),".local","state"),"oracle"),t=Tt("sha256").update(u.resolve(e)).digest("hex").slice(0,16);return{vault:u.join(e,"vault.json"),policy:u.join(e,"signer-policy.json"),policyKey:u.join(e,"policy-integrity-key"),policyAnchor:u.join(r,`signer-policy-${t}.high-water`),ledger:u.join(e,"signer-ledger.json"),ledgerAnchor:u.join(r,`signer-ledger-${t}.high-water`),executionOutbox:u.join(e,"signer-execution-outbox.json"),cexOrders:u.join(e,"cex-orders.json"),cexOrdersAnchor:u.join(r,`cex-orders-${t}.high-water`),token:u.join(e,"signer-token"),lock:u.join(r,`signer-${t}.lock`),workflowLedger:u.join(e,"workflow-events.jsonl")}}function Ct(){return process.env.ORACLE_CONFIG_DIR||Ee.join(Nt(),".config","oracle")}function x(){let e=be(Ee.join(Ct(),"signer")),r=W.existsSync(e.vault),t=W.existsSync(e.lock),o=r?t?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:r,policyConfigured:W.existsSync(e.policy),armed:r&&!t,disarmed:t,capabilities:{swap:o,bridge:o},autonomous:!1,note:"Keys stay on this machine. Exact confirmation is required before any broadcast."}}var ld=Object.freeze([{type:"function",function:{name:"vault_status",description:"Read local Oracle vault/signer readiness. Never returns key material.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_status",description:"Ping the loopback signer. Fails closed if it is not running.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_pending",description:"List pending local-signer artifacts. Read-only. Does not approve, sign, or broadcast.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_queue",description:"Queue a prepared unsigned artifact on the loopback signer. Does not broadcast.",parameters:{type:"object",properties:{artifact:{type:"object"}},required:["artifact"],additionalProperties:!1}}},{type:"function",function:{name:"signer_deny",description:"Drop one pending local-signer artifact. Nothing signed.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"signer_execute",description:"Broadcast one already-confirmed local artifact. Requires a one-use confirmationNonce from the local signer TTY confirm. Cannot mint confirmation itself.",parameters:{type:"object",properties:{artifact:{type:"object"},confirmationNonce:{type:"string",minLength:32,maxLength:128}},required:["artifact","confirmationNonce"],additionalProperties:!1}}},{type:"function",function:{name:"signer_disarm",description:"Global kill switch. Stops the local signer from broadcasting.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"receipt_report",description:"Receipt or it did not happen. Requires transactionHash/hash/txid.",parameters:{type:"object",properties:{receipt:{type:"object"},transactionHash:{type:"string"},hash:{type:"string"},txid:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"watch_create",description:"Create an alert-only watch. Never execute.",parameters:{type:"object",properties:{chain:{type:"string"},token:{type:"string"},condition:{type:"string"},note:{type:"string"}},required:["chain","token","condition"],additionalProperties:!1}}},{type:"function",function:{name:"watch_list",description:"List local alert-only watches.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"portfolio_snapshot",description:"How to read the one portfolio snapshot. knownUsd is incomplete if a provider is missing.",parameters:{type:"object",properties:{},additionalProperties:!1}}}]);Se();import ve from"node:fs";import Mt from"node:path";var Dt=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","local","ollama","custom","anthropic-oauth","openai-codex","xai-oauth"]);function v(e){return String(e||"").trim()||void 0}function jt(e,{required:r=!1}={}){let t=v(e)?.toLowerCase();if(!t){if(r)throw new Error("model provider is required");return}if(!Dt.has(t))throw new Error(`unsupported provider: ${t}`);return t}function Ft(e,{required:r=!1}={}){let t=v(e);if(!t){if(r)throw new Error("model is required");return}if(t.includes("..")||t.startsWith("/")||!/^[a-zA-Z0-9._:/-]{1,200}$/.test(t))throw new Error("invalid model id");return t}function qt(e){let r=v(e);if(!r||r.length>2048)throw new Error("invalid custom base URL");let t;try{t=new URL(r)}catch{throw new Error("invalid custom base URL")}let o=t.hostname.toLowerCase().replace(/^\[|\]$/g,""),i=o==="localhost"||o==="127.0.0.1"||o==="::1";if(t.protocol!=="https:"&&!(t.protocol==="http:"&&i)||t.username||t.password||t.search||t.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return t.toString().replace(/\/+$/,"")}function Ae({provider:e,model:r,baseUrl:t}={},{requireModel:o=!1}={}){let i=jt(e),n=Ft(r,{required:o});if(i==="custom")return{provider:i,...n?{model:n}:{},baseUrl:qt(t)};if(v(t))throw new Error("baseUrl is only supported for the custom provider");return{...i?{provider:i}:{},...n?{model:n}:{}}}var Ht=new Set(["auto","standalone","hermes","remote","arch"]);function zt(){return Mt.join(A(),"model.json")}function m(e){return String(e||"").trim()||void 0}function Ut(e={}){let r=m(e.backend)?.toLowerCase()||"auto",t=Ae({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:r==="standalone"}),o=m(e.apiKeyEnv),i=Number.parseInt(String(e.contextLength||""),10),n=m(e.reasoningEffort),a=m(e.computeHost||e.remoteHost),s=m(e.computeUser||e.remoteUser),c=m(e.computePath||e.remotePath);if(!Ht.has(r))throw new Error(`unsupported backend: ${r}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(r))throw new Error("remote compute backends are disabled in the public desktop");if(o&&!/^[A-Z][A-Z0-9_]*$/.test(o))throw new Error("api key env must be an uppercase environment variable name");if(r==="remote"&&!a)throw new Error("remote backend requires computeHost");return{backend:r,...t,...o?{apiKeyEnv:o}:{},...Number.isFinite(i)&&i>0?{contextLength:i}:{},...n?{reasoningEffort:n}:{},...a?{computeHost:a}:{},...s?{computeUser:s}:{},...c?{computePath:c}:{}}}function Ie(){let e=zt();if(!ve.existsSync(e))return null;try{return Ut(JSON.parse(ve.readFileSync(e,"utf8")))}catch{return null}}var Wt=new Set(["127.0.0.1","::1","localhost"]);function V({env:e=process.env,vault:r=null}={}){let t=r||x(),o=[];for(let[i,n]of Object.entries(T)){let a=(n.rpcEnv||[]).some(c=>String(e[c]||"").trim()),s="prepare";n.evm?a&&(s="live"):s="unavailable",o.push({key:i,chainId:n.chainId,name:n.name,family:"evm",status:s,execute:!!(t.vaultExists&&t.armed&&!t.disarmed),note:a?"rpc configured":"public read/prepare; set RPC for live reads"})}return o.push({key:"solana",chainId:null,name:"Solana",family:"sol",status:"prepare",execute:!1,note:"Jupiter quote/prepare; local sol signer"},{key:"bitcoin",chainId:null,name:"Bitcoin",family:"btc",status:"prepare",execute:!1,note:"Esplora read; local btc signer"},{key:"hyperliquid-l1",chainId:null,name:"Hyperliquid L1",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not an EVM signer family"},{key:"polymarket",chainId:null,name:"Polymarket",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not a signer family"}),o}function Vt({env:e=process.env,model:r=Ie(),vault:t=x(),signerReachable:o=!1,quote:i=null,reviewAvailable:n=!1,receiptAvailable:a=!1}={}){let s=[],c=(l,O,Oe,Te=null)=>s.push({id:l,status:O,detail:Oe,fix:Te}),K=(()=>{let[l,O]=process.versions.node.split(".").map(Number);return l>20||l===20&&O>=19})();c("node",K?"ok":"fail",`node ${process.versions.node}`,K?null:"install node >= 20.19"),r?r.backend==="hermes"?c("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):c("model","ok",`${r.backend||"auto"} ${r.provider||""} ${r.model||""}`.trim()):c("model","fail","no model.json","oracle setup model"),t.vaultExists?t.disarmed?c("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):c("vault",t.armed?"ok":"warn",t.armed?"present, armed":"present, not armed"):c("vault","fail","no local vault","oracle sign init");let k=e.ORACLE_SIGNER_HOST||"127.0.0.1";if(Wt.has(k)?c("signer",o?"ok":"warn",o?`loopback ${k}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",o?null:"oracle signer"):c("signer","fail",`signer host ${k} is not loopback`,"unset ORACLE_SIGNER_HOST"),!i)c("quote","warn","quote not probed",null);else if(i.ok){let l=String(i.detail||"net quote returned");c("quote","ok",l.length>140?`${l.slice(0,140)}\u2026`:l)}else c("quote","warn",i.detail||"quote unavailable","check network / oracle data serve");c("review",n?"ok":"fail",n?"sign-time review renders decoded action, policy hits, approval deltas":"sign-time review module missing from this build",n?null:"reinstall @oracle-agent/oracle (src/control/sign-time-review.mjs)"),c("receipt",a?"ok":"fail",a?"oracle receipt verifies on-chain state (SUCCESS/FAIL/UNKNOWN, finality-pinned)":"verified-receipt observer missing from this build",a?null:"reinstall @oracle-agent/oracle (src/desk/observe-receipt.mjs)");let ke=s.some(l=>l.status==="fail"),J=s.filter(l=>l.status==="ok").length;return{ok:!ke,checks:s,firstRunScore:{ok:J,total:s.length,label:`${J}/${s.length} first-run hops green`},venues:V({env:e,vault:t})}}async function Rd(e=process.env){let r=e.ORACLE_SIGNER_HOST||"127.0.0.1",t=e.ORACLE_SIGNER_PORT||9462;try{return(await fetch(`http://${r}:${t}/status`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}function I(e){let r=String(e??"?").replace(/[^\w.$-]/g,"");return r.length>12?`${r.slice(0,12)}...`:r||"?"}function Kt(e,r=120){let t=String(e??"").replace(/[\u0000-\u001f\u007f-\u009f]/g," ").replace(/\s+/g," ").trim();return t?t.length>r?`${t.slice(0,r)}...`:t:"quote failed"}async function Ld(){try{let e=await fetch("https://api.dexscreener.com/latest/dex/search?q=WETH%20USDC",{signal:AbortSignal.timeout(4e3)});if(!e.ok)return{ok:!1,detail:`dexscreener ${e.status}`};let t=(await e.json())?.pairs?.[0];return!t?.chainId||!t?.priceUsd?{ok:!1,detail:"no pair"}:{ok:!0,detail:`${I(t.chainId)} ${I(t.baseToken?.symbol)}/${I(t.quoteToken?.symbol)} $${I(t.priceUsd)}`}}catch(e){return{ok:!1,detail:Kt(e instanceof Error?e.message:"quote failed")}}}var $d={name:"venues",summary:"label every shipped venue live / prepare / unavailable",group:"read",usage:"oracle venues [--json]",async run(e){let r=e.argv.includes("--json"),t=V();if(r)return process.stdout.write(`${JSON.stringify({venues:t},null,2)}
|
|
2
2
|
`),0;for(let o of t)process.stdout.write(`${o.status.padEnd(12)} ${o.key.padEnd(16)} ${o.name} exec=${o.execute?"local":"no"}
|
|
3
|
-
`);return 0}};export{
|
|
3
|
+
`);return 0}};export{N as classifyReceipt,$d as default,Kt as detailText,Vt as firstHourReport,Ld as probeQuote,Rd as probeSigner,I as symbol,x as vaultStatus};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createHash as ce}from"node:crypto";import{wordlists as q}from"ethers";var Z=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),Q=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],ee=new Set([12,15,18,21,24]);function te(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return ee.has(t.length)&&t.every(s=>q.en.getWordIndex(s)>=0)}var re=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,ne=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,se=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);function ie(e){let t=$(e);return se.has(t)||ne.test(t)}var y=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}};function $(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function oe(e){let t=$(e);return[...Z].some(s=>t.includes(s))}function ae(e,t,s){if(typeof t=="string"){if(Q.some(o=>o.test(t))||te(t))throw new y(s);if(re.test(t)&&!ie(e))throw new y(s)}}function b(e,t="$",s=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return ae(s,e,t),e;if(typeof e=="number"){if(!Number.isFinite(e))throw new TypeError(`action receipt: non-finite number at ${t}`);return e}if(typeof e=="bigint")return e.toString();if(Array.isArray(e))return e.map((a,i)=>b(a,`${t}[${i}]`,s));if(typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`action receipt: JSON-like value required at ${t}`);let o={};for(let a of Object.keys(e).sort()){let i=`${t}.${a}`;if(oe(a))throw new y(i);e[a]!==void 0&&(o[a]=b(e[a],i,a))}return o}function M(e){return b(e)}function x(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(x).join(",")}]`:`{${Object.keys(e).map(t=>`${JSON.stringify(t)}:${x(e[t])}`).join(",")}}`}function T(e){return x(b(e))}var Ue=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),xe=Object.freeze(["read","simulate"]);var Le=1440*60;var Ve=Object.freeze(["privkey","wif","xprv","seed"]);var Fe=Object.freeze([{rule:"raw-32-byte-hex-key",re:/^0x[0-9a-fA-F]{64}$/},{rule:"raw-32-byte-hex-bare",re:/^[0-9a-fA-F]{64}$/},{rule:"extended-private-key",re:/\b(?:xprv|tprv|yprv|zprv)[1-9A-HJ-NP-Za-km-z]{107}\b/},{rule:"bitcoin-wif",re:/\b[59KLc][1-9A-HJ-NP-Za-km-z]{50,51}\b/},{rule:"bip39-mnemonic",re:/\b(?:[a-z]{3,8}\s+){11,23}[a-z]{3,8}\b/},{rule:"bearer-token",re:/bearer\s+[A-Za-z0-9._~+/=-]+/i},{rule:"pem-private-key",re:/-----BEGIN[A-Z ]*PRIVATE KEY-----/},{rule:"keystore-path",re:/keystore/i},{rule:"signer-url",re:/https?:\/\/\S*sign/i},{rule:"authorization-header",re:/authorization\s*:/i}]),je=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"]);function L(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))L(t);Object.freeze(e)}return e}var V=1,C=Object.freeze(["simulation","verdict","artifact","approval","broadcast","chainReceipt","ownership"]),Ne=Object.freeze(["SUCCESS","FAIL","UNKNOWN"]),fe=/^[0-9a-f]{64}$/,le=/^0x[0-9a-f]{64}$/,pe=/^0x[0-9a-f]{40}$/,ue=new Set(C),F=new Set(Ne),Ee=Object.freeze({simulation:new Set(["status","willRevert","stale","blockHash","evidenceRef"]),verdict:new Set(["verdict","stale","previewHash","policyDigest","prepareHash","simulationBlockHash","evidenceRef"]),artifact:new Set(["status","stale","prepareHash","artifactDigest","evidenceRef"]),approval:new Set(["previewHash","policyDigest","prepareHash","artifactDigest","approvalDigest","approvalId","oneShot","maxExecutions","status","stale","expired","revoked","consumed","evidenceRef"]),broadcast:new Set(["status","stale","txHash","signedTransactionId","evidenceRef"]),chainReceipt:new Set(["txHash","blockHash","receiptStatus","finalityState","stale","reorged","canonical","evidenceRef"]),ownership:new Set(["expectedOwner","observedOwner","observedAtBlockHash","requireCanonical","stale","reorged","canonical","evidenceRef"])}),Se=new Set(["lineageVersion","status","reason","custody","execution","authority","effects","evidence","stages","unknownStages","brokenLinks","lineageId","summary"]),de=new Set(["name","status","reason","evidenceRef","boundToDigest"]),Ae=new Set(["from","to","reason"]),Oe=Object.freeze({SIMULATION_BINDING_MISMATCH:{from:"simulation",to:"verdict"},PREPARE_HASH_MISMATCH:{from:"verdict",to:"artifact"},APPROVAL_BINDING_MISMATCH:{from:"artifact",to:"approval"},REFERENCE_MISMATCH:{from:"broadcast",to:"chainReceipt"},OWNERSHIP_BLOCK_MISMATCH:{from:"chainReceipt",to:"ownership"}}),Ie=Object.freeze({simulation:new Map([["MISSING_SIMULATION_EVIDENCE","UNKNOWN"],["SIMULATION_UNAVAILABLE","UNKNOWN"],["SIMULATION_STALE","UNKNOWN"],["SIMULATION_FRESHNESS_UNKNOWN","UNKNOWN"],["SIMULATION_NOT_PROVEN","UNKNOWN"],["SIMULATION_WOULD_REVERT","FAIL"]]),verdict:new Map([["MISSING_VERDICT_EVIDENCE","UNKNOWN"],["POLICY_VERDICT_UNKNOWN","UNKNOWN"],["VERDICT_STALE","UNKNOWN"],["VERDICT_FRESHNESS_UNKNOWN","UNKNOWN"],["SIMULATION_NOT_PROVEN","UNKNOWN"],["SIMULATION_BINDING_MISMATCH","UNKNOWN"],["POLICY_DENIED","FAIL"]]),artifact:new Map([["MISSING_ARTIFACT_EVIDENCE","UNKNOWN"],["ARTIFACT_STATUS_UNKNOWN","UNKNOWN"],["ARTIFACT_STALE","UNKNOWN"],["ARTIFACT_FRESHNESS_UNKNOWN","UNKNOWN"],["VERDICT_NOT_PROVEN","UNKNOWN"],["ARTIFACT_FAILED","FAIL"],["PREPARE_HASH_MISMATCH","FAIL"]]),approval:new Map([["MISSING_APPROVAL_EVIDENCE","UNKNOWN"],["APPROVAL_STATUS_UNKNOWN","UNKNOWN"],["APPROVAL_EXPIRED","UNKNOWN"],["APPROVAL_STALE","UNKNOWN"],["APPROVAL_FRESHNESS_UNKNOWN","UNKNOWN"],["APPROVAL_STATE_UNKNOWN","UNKNOWN"],["ARTIFACT_NOT_PROVEN","UNKNOWN"],["APPROVAL_DENIED","FAIL"],["APPROVAL_REVOKED","FAIL"],["APPROVAL_CONSUMED","FAIL"],["APPROVAL_NOT_ONE_SHOT","FAIL"],["APPROVAL_ID_MISMATCH","FAIL"],["APPROVAL_BINDING_MISMATCH","FAIL"]]),broadcast:new Map([["NOT_BROADCAST","UNKNOWN"],["BROADCAST_STATUS_UNKNOWN","UNKNOWN"],["BROADCAST_STALE","UNKNOWN"],["BROADCAST_FRESHNESS_UNKNOWN","UNKNOWN"],["APPROVAL_NOT_PROVEN","UNKNOWN"],["BROADCAST_FAILED","FAIL"],["TX_IDENTITY_CONFLICT","FAIL"]]),chainReceipt:new Map([["RECEIPT_NOT_OBSERVED","UNKNOWN"],["RECEIPT_STALE","UNKNOWN"],["RECEIPT_FRESHNESS_UNKNOWN","UNKNOWN"],["RECEIPT_REORG_STATE_UNKNOWN","UNKNOWN"],["RECEIPT_NOT_CANONICAL","UNKNOWN"],["RECEIPT_CANONICALITY_UNKNOWN","UNKNOWN"],["BROADCAST_NOT_PROVEN","UNKNOWN"],["RECEIPT_STATUS_UNKNOWN","UNKNOWN"],["FINALITY_NOT_PROVEN","UNKNOWN"],["RECEIPT_REORGED","FAIL"],["REFERENCE_MISMATCH","FAIL"],["RECEIPT_REVERTED","FAIL"]]),ownership:new Map([["MISSING_OWNERSHIP_EVIDENCE","UNKNOWN"],["OWNERSHIP_STALE","UNKNOWN"],["OWNERSHIP_FRESHNESS_UNKNOWN","UNKNOWN"],["OWNERSHIP_REORG_STATE_UNKNOWN","UNKNOWN"],["OWNERSHIP_NOT_CANONICAL","UNKNOWN"],["OWNERSHIP_CANONICALITY_UNKNOWN","UNKNOWN"],["CHAIN_RECEIPT_NOT_PROVEN","UNKNOWN"],["OWNERSHIP_BLOCK_MISMATCH","UNKNOWN"],["OWNERSHIP_REORGED","FAIL"],["OWNER_MISMATCH","FAIL"]])}),he=new Set(["simulation","broadcast","chainReceipt","ownership"]),_e=Object.freeze({simulation:"MISSING_SIMULATION_EVIDENCE",verdict:"MISSING_VERDICT_EVIDENCE",artifact:"MISSING_ARTIFACT_EVIDENCE",approval:"MISSING_APPROVAL_EVIDENCE",broadcast:"NOT_BROADCAST",chainReceipt:"RECEIPT_NOT_OBSERVED",ownership:"MISSING_OWNERSHIP_EVIDENCE"});function j(e,t,s){if(!e||typeof e!="object"||Array.isArray(e))throw new TypeError(`${t} must be an object`);for(let o of Object.keys(e))if(!s.has(o))throw new TypeError(`unexpected ${t} field: ${o}`);return e}function K(e,t,s){j(e,t,s);for(let o of s)if(!Object.hasOwn(e,o))throw new TypeError(`missing ${t} field: ${o}`);return e}function m(e,t){return j(e,t,Ee[t])}function W(e,t,s=4096){if(typeof e!="string"||e.length<1||e.length>s)throw new TypeError(`${t} must be a bounded string`);return e}function S(e,t){if(typeof e!="string"||!fe.test(e))throw new TypeError(`${t} must be a lowercase sha256 digest`);return e}function g(e,t){if(typeof e!="string"||!le.test(e))throw new TypeError(`${t} must be a lowercase 32-byte hash`);return e}function k(e,t){let s=String(e||"").toLowerCase();if(!pe.test(s))throw new TypeError(`${t} must be an EVM address`);return s}function w(e,t){return W(e?.evidenceRef,`${t}.evidenceRef`)}function n(e,t="UNKNOWN",s=`MISSING_${e.toUpperCase()}_EVIDENCE`,o=null,a=null){return{name:e,status:t,reason:t==="SUCCESS"?null:s,evidenceRef:o,boundToDigest:a}}function B(e){if(!Array.isArray(e))throw new TypeError("receipt lineage stages must be an array");for(let t of e)if(!F.has(t?.status))throw new TypeError(`invalid receipt lineage stage status: ${t?.status||"missing"}`);return e.some(t=>t.status==="FAIL")?"FAIL":e.some(t=>t.status==="UNKNOWN")?"UNKNOWN":"SUCCESS"}function P(e,t){return`${e}: ${t.filter(s=>s.status==="SUCCESS").length}/${C.length} stages proven`}function Te(e){return e.flatMap(t=>{let s=Oe[t.reason];return s?[{...s,reason:t.reason}]:[]})}function ge(e,t){let s=C[t];if(K(e,`receipt lineage ${s} stage`,de),e.name!==s)throw new TypeError("receipt lineage stage order mismatch");if(!F.has(e.status))throw new TypeError(`invalid receipt lineage stage status: ${e.status||"missing"}`);if(e.status==="SUCCESS"){if(e.reason!==null)throw new TypeError(`receipt lineage ${s} success reason mismatch`);W(e.evidenceRef,`receipt lineage ${s}.evidenceRef`)}else{if(Ie[s].get(e.reason)!==e.status)throw new TypeError(`receipt lineage ${s} reason mismatch`);if(e.reason===_e[s]){if(e.evidenceRef!==null)throw new TypeError(`receipt lineage ${s} absent evidence mismatch`)}else W(e.evidenceRef,`receipt lineage ${s}.evidenceRef`)}if(e.status==="SUCCESS")he.has(s)?g(e.boundToDigest,`receipt lineage ${s}.boundToDigest`):S(e.boundToDigest,`receipt lineage ${s}.boundToDigest`);else if(e.reason==="FINALITY_NOT_PROVEN")g(e.boundToDigest,"receipt lineage chainReceipt.boundToDigest");else if(e.boundToDigest!==null)throw new TypeError(`receipt lineage ${s} binding mismatch`)}function Re(e,t){if(!Array.isArray(e))throw new TypeError("receipt lineage broken links mismatch");for(let[s,o]of e.entries())K(o,`receipt lineage broken link ${s}`,Ae);if(T(e)!==T(Te(t)))throw new TypeError("receipt lineage broken links mismatch")}function G(e){return ce("sha256").update(T(e)).digest("hex")}function me(e={}){let t=M(e);if(!t||typeof t!="object"||Array.isArray(t))throw new TypeError("receipt lineage input must be an object");for(let r of Object.keys(t))if(!ue.has(r))throw new TypeError(`unexpected receipt lineage field: ${r}`);let s=[],o=[],a=t.simulation,i=n("simulation","UNKNOWN","MISSING_SIMULATION_EVIDENCE");if(a!=null){m(a,"simulation");let r=w(a,"simulation");a.status==="unavailable"?i=n("simulation","UNKNOWN","SIMULATION_UNAVAILABLE",r):a.willRevert===!0||["revert","failed","error"].includes(a.status)?i=n("simulation","FAIL","SIMULATION_WOULD_REVERT",r):a.status==="success"&&a.willRevert===!1?a.stale===!0?i=n("simulation","UNKNOWN","SIMULATION_STALE",r):a.stale!==!1?i=n("simulation","UNKNOWN","SIMULATION_FRESHNESS_UNKNOWN",r):i=n("simulation","SUCCESS",null,r,g(a.blockHash,"simulation.blockHash")):i=n("simulation","UNKNOWN","SIMULATION_NOT_PROVEN",r)}s.push(i);let l=t.verdict,I=n("verdict","UNKNOWN","MISSING_VERDICT_EVIDENCE");if(l!=null){m(l,"verdict");let r=w(l,"verdict"),u=S(l.previewHash,"verdict.previewHash");S(l.policyDigest,"verdict.policyDigest"),S(l.prepareHash,"verdict.prepareHash");let R=g(l.simulationBlockHash,"verdict.simulationBlockHash");l.verdict==="DENY"?I=n("verdict","FAIL","POLICY_DENIED",r):l.verdict!=="ALLOW"?I=n("verdict","UNKNOWN","POLICY_VERDICT_UNKNOWN",r):l.stale===!0?I=n("verdict","UNKNOWN","VERDICT_STALE",r):l.stale!==!1?I=n("verdict","UNKNOWN","VERDICT_FRESHNESS_UNKNOWN",r):i.status!=="SUCCESS"?I=n("verdict","UNKNOWN","SIMULATION_NOT_PROVEN",r):R!==a.blockHash?(I=n("verdict","UNKNOWN","SIMULATION_BINDING_MISMATCH",r),o.push({from:"simulation",to:"verdict",reason:"SIMULATION_BINDING_MISMATCH"})):I=n("verdict","SUCCESS",null,r,u)}s.push(I);let d=t.artifact,h=n("artifact","UNKNOWN","MISSING_ARTIFACT_EVIDENCE");if(d!=null){m(d,"artifact");let r=w(d,"artifact"),u=S(d.prepareHash,"artifact.prepareHash");S(d.artifactDigest,"artifact.artifactDigest"),["failed","reverted","error"].includes(d.status)?h=n("artifact","FAIL","ARTIFACT_FAILED",r):d.status!=="prepared"?h=n("artifact","UNKNOWN","ARTIFACT_STATUS_UNKNOWN",r):d.stale===!0?h=n("artifact","UNKNOWN","ARTIFACT_STALE",r):d.stale!==!1?h=n("artifact","UNKNOWN","ARTIFACT_FRESHNESS_UNKNOWN",r):I.status!=="SUCCESS"?h=n("artifact","UNKNOWN","VERDICT_NOT_PROVEN",r):u!==l.prepareHash?(h=n("artifact","FAIL","PREPARE_HASH_MISMATCH",r),o.push({from:"verdict",to:"artifact",reason:"PREPARE_HASH_MISMATCH"})):h=n("artifact","SUCCESS",null,r,u)}s.push(h);let c=t.approval,N=n("approval","UNKNOWN","MISSING_APPROVAL_EVIDENCE");if(c!=null){m(c,"approval");let r=w(c,"approval"),u=S(c.previewHash,"approval.previewHash"),R=S(c.policyDigest,"approval.policyDigest"),z=S(c.prepareHash,"approval.prepareHash"),Y=S(c.artifactDigest,"approval.artifactDigest"),D=S(c.approvalDigest,"approval.approvalDigest"),J=S(c.approvalId,"approval.approvalId"),X=u===l?.previewHash&&R===l?.policyDigest&&z===d?.prepareHash&&Y===d?.artifactDigest;["denied","rejected"].includes(c.status)?N=n("approval","FAIL","APPROVAL_DENIED",r):c.status==="revoked"||c.revoked===!0?N=n("approval","FAIL","APPROVAL_REVOKED",r):c.status==="consumed"||c.consumed===!0?N=n("approval","FAIL","APPROVAL_CONSUMED",r):c.status==="expired"||c.expired===!0?N=n("approval","UNKNOWN","APPROVAL_EXPIRED",r):c.status!=="granted"?N=n("approval","UNKNOWN","APPROVAL_STATUS_UNKNOWN",r):c.stale===!0?N=n("approval","UNKNOWN","APPROVAL_STALE",r):c.stale!==!1?N=n("approval","UNKNOWN","APPROVAL_FRESHNESS_UNKNOWN",r):c.expired!==!1||c.revoked!==!1||c.consumed!==!1?N=n("approval","UNKNOWN","APPROVAL_STATE_UNKNOWN",r):h.status!=="SUCCESS"?N=n("approval","UNKNOWN","ARTIFACT_NOT_PROVEN",r):c.oneShot!==!0||c.maxExecutions!==1?N=n("approval","FAIL","APPROVAL_NOT_ONE_SHOT",r):D!==J?N=n("approval","FAIL","APPROVAL_ID_MISMATCH",r):X?N=n("approval","SUCCESS",null,r,D):(N=n("approval","FAIL","APPROVAL_BINDING_MISMATCH",r),o.push({from:"artifact",to:"approval",reason:"APPROVAL_BINDING_MISMATCH"}))}s.push(N);let O=t.broadcast,_=n("broadcast","UNKNOWN","NOT_BROADCAST");if(O!=null){m(O,"broadcast");let r=w(O,"broadcast"),u=g(String(O.txHash||"").toLowerCase(),"broadcast.txHash"),R=g(String(O.signedTransactionId||"").toLowerCase(),"broadcast.signedTransactionId");["failed","reverted","error","rejected"].includes(O.status)?_=n("broadcast","FAIL","BROADCAST_FAILED",r):["submitted","success"].includes(O.status)?O.stale===!0?_=n("broadcast","UNKNOWN","BROADCAST_STALE",r):O.stale!==!1?_=n("broadcast","UNKNOWN","BROADCAST_FRESHNESS_UNKNOWN",r):N.status!=="SUCCESS"?_=n("broadcast","UNKNOWN","APPROVAL_NOT_PROVEN",r):u!==R?_=n("broadcast","FAIL","TX_IDENTITY_CONFLICT",r):_=n("broadcast","SUCCESS",null,r,u):_=n("broadcast","UNKNOWN","BROADCAST_STATUS_UNKNOWN",r)}s.push(_);let f=t.chainReceipt,p=n("chainReceipt","UNKNOWN","RECEIPT_NOT_OBSERVED");if(f!=null){m(f,"chainReceipt");let r=w(f,"chainReceipt"),u=g(String(f.txHash||"").toLowerCase(),"chainReceipt.txHash"),R=g(String(f.blockHash||"").toLowerCase(),"chainReceipt.blockHash");f.reorged===!0?p=n("chainReceipt","FAIL","RECEIPT_REORGED",r):f.receiptStatus==="FAIL"?p=n("chainReceipt","FAIL","RECEIPT_REVERTED",r):f.canonical===!1?p=n("chainReceipt","UNKNOWN","RECEIPT_NOT_CANONICAL",r):f.stale===!0?p=n("chainReceipt","UNKNOWN","RECEIPT_STALE",r):f.reorged!==!1?p=n("chainReceipt","UNKNOWN","RECEIPT_REORG_STATE_UNKNOWN",r):f.canonical!==!0?p=n("chainReceipt","UNKNOWN","RECEIPT_CANONICALITY_UNKNOWN",r):f.stale!==!1?p=n("chainReceipt","UNKNOWN","RECEIPT_FRESHNESS_UNKNOWN",r):_.status!=="SUCCESS"?p=n("chainReceipt","UNKNOWN","BROADCAST_NOT_PROVEN",r):u!==String(O.txHash).toLowerCase()?(p=n("chainReceipt","FAIL","REFERENCE_MISMATCH",r),o.push({from:"broadcast",to:"chainReceipt",reason:"REFERENCE_MISMATCH"})):f.receiptStatus!=="SUCCESS"?p=n("chainReceipt","UNKNOWN","RECEIPT_STATUS_UNKNOWN",r):f.finalityState!=="FINAL"?p=n("chainReceipt","UNKNOWN","FINALITY_NOT_PROVEN",r,R):p=n("chainReceipt","SUCCESS",null,r,R)}s.push(p);let E=t.ownership,A=n("ownership","UNKNOWN","MISSING_OWNERSHIP_EVIDENCE");if(E!=null){m(E,"ownership");let r=w(E,"ownership"),u=g(String(E.observedAtBlockHash||"").toLowerCase(),"ownership.observedAtBlockHash");E.reorged===!0?A=n("ownership","FAIL","OWNERSHIP_REORGED",r):E.requireCanonical!==!0||E.canonical===!1?A=n("ownership","UNKNOWN","OWNERSHIP_NOT_CANONICAL",r):E.stale===!0?A=n("ownership","UNKNOWN","OWNERSHIP_STALE",r):E.reorged!==!1?A=n("ownership","UNKNOWN","OWNERSHIP_REORG_STATE_UNKNOWN",r):E.canonical!==!0?A=n("ownership","UNKNOWN","OWNERSHIP_CANONICALITY_UNKNOWN",r):E.stale!==!1?A=n("ownership","UNKNOWN","OWNERSHIP_FRESHNESS_UNKNOWN",r):p.status!=="SUCCESS"?A=n("ownership","UNKNOWN","CHAIN_RECEIPT_NOT_PROVEN",r):u!==String(f.blockHash).toLowerCase()?(A=n("ownership","UNKNOWN","OWNERSHIP_BLOCK_MISMATCH",r),o.push({from:"chainReceipt",to:"ownership",reason:"OWNERSHIP_BLOCK_MISMATCH"})):k(E.expectedOwner,"ownership.expectedOwner")!==k(E.observedOwner,"ownership.observedOwner")?A=n("ownership","FAIL","OWNER_MISMATCH",r):A=n("ownership","SUCCESS",null,r,u)}s.push(A);let U=B(s),H={lineageVersion:V,status:U,reason:U==="SUCCESS"?null:s.find(r=>r.status==="FAIL")?.reason||s.find(r=>r.status==="UNKNOWN")?.reason,custody:"none",execution:"observe-only",authority:"evidence-only",effects:[],evidence:t,stages:s,unknownStages:s.filter(r=>r.status==="UNKNOWN").map(r=>r.name),brokenLinks:o},v=G(H);return L({...H,lineageId:v,summary:P(U,s)})}function we(e){let{lineageId:t,summary:s,...o}=e||{};return G(o)}function ye(e){if(K(e,"receipt lineage record",Se),e.lineageVersion!==V)throw new TypeError("receipt lineage version mismatch");if(e.custody!=="none"||e.execution!=="observe-only"||e.authority!=="evidence-only")throw new TypeError("receipt lineage authority mismatch");if(!Array.isArray(e.effects)||e.effects.length!==0)throw new TypeError("receipt lineage effects mismatch");if(!Array.isArray(e.stages)||e.stages.length!==C.length)throw new TypeError("receipt lineage stages mismatch");e.stages.forEach(ge);for(let i=1;i<e.stages.length;i+=1)if(e.stages[i].status==="SUCCESS"&&e.stages[i-1].status!=="SUCCESS")throw new TypeError("receipt lineage stage dependency mismatch");if(e.stages[6].status==="SUCCESS"&&e.stages[6].boundToDigest!==e.stages[5].boundToDigest)throw new TypeError("receipt lineage ownership binding mismatch");let t=B(e.stages);if(e.status!==t)throw new TypeError("receipt lineage status mismatch");let s=t==="SUCCESS"?null:e.stages.find(i=>i.status==="FAIL")?.reason||e.stages.find(i=>i.status==="UNKNOWN")?.reason;if(e.reason!==s)throw new TypeError("receipt lineage reason mismatch");let o=e.stages.filter(i=>i.status==="UNKNOWN").map(i=>i.name);if(!Array.isArray(e.unknownStages)||T(e.unknownStages)!==T(o))throw new TypeError("receipt lineage unknown stages mismatch");if(Re(e.brokenLinks,e.stages),e.summary!==P(t,e.stages))throw new TypeError("receipt lineage summary mismatch");if(S(e.lineageId,"receipt lineageId"),we(e)!==e.lineageId)throw new TypeError("receipt lineageId mismatch");let a=me(e.evidence);if(T(a)!==T(e))throw new TypeError("receipt lineage canonical evidence mismatch");return!0}function Qe(e){return ye(e),P(e.status,e.stages)}export{C as RECEIPT_LINEAGE_STAGES,Ne as RECEIPT_LINEAGE_STATUSES,V as RECEIPT_LINEAGE_VERSION,ye as assertReceiptLineage,we as computeReceiptLineageId,me as linkReceiptLineage,Qe as summarizeReceiptLineage};
|