@oracle-agent/oracle 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/README.md +13 -498
  2. package/bin/oracle.mjs +25 -0
  3. package/package.json +16 -61
  4. package/SECURITY.md +0 -114
  5. package/SETUP.md +0 -316
  6. package/artifacts/inscription/oracle-was-here-preview.png +0 -0
  7. package/artifacts/inscription/oracle-was-here.svg +0 -1
  8. package/artifacts/specialist-packs/oracle-full-crypto.json +0 -295
  9. package/dist/action-receipts.mjs +0 -1
  10. package/dist/action-semantics.mjs +0 -1
  11. package/dist/address-book.mjs +0 -2
  12. package/dist/bin/desk-server.mjs +0 -14
  13. package/dist/bin/oracle-data-mcp.mjs +0 -8
  14. package/dist/bin/oracle-init.mjs +0 -24
  15. package/dist/bin/oracle-public-server.mjs +0 -5
  16. package/dist/bin/oracle-route.mjs +0 -22
  17. package/dist/bin/oracle-scan.mjs +0 -18
  18. package/dist/bin/oracle-upgrade.mjs +0 -21
  19. package/dist/bin/oracle.mjs +0 -68
  20. package/dist/chains.mjs +0 -1
  21. package/dist/cli/commands/auth.mjs +0 -16
  22. package/dist/cli/commands/bootstrap.mjs +0 -18
  23. package/dist/cli/commands/chain.mjs +0 -21
  24. package/dist/cli/commands/chat.mjs +0 -35
  25. package/dist/cli/commands/credential.mjs +0 -1
  26. package/dist/cli/commands/data-mcp.mjs +0 -2
  27. package/dist/cli/commands/data.mjs +0 -12
  28. package/dist/cli/commands/doctor.mjs +0 -5
  29. package/dist/cli/commands/gate.mjs +0 -13
  30. package/dist/cli/commands/help.mjs +0 -1
  31. package/dist/cli/commands/init.mjs +0 -3
  32. package/dist/cli/commands/mcp.mjs +0 -33
  33. package/dist/cli/commands/model.mjs +0 -44
  34. package/dist/cli/commands/prepare.mjs +0 -2
  35. package/dist/cli/commands/public.mjs +0 -3
  36. package/dist/cli/commands/route.mjs +0 -2
  37. package/dist/cli/commands/runner.mjs +0 -1
  38. package/dist/cli/commands/scan.mjs +0 -2
  39. package/dist/cli/commands/setup.mjs +0 -34
  40. package/dist/cli/commands/sign.mjs +0 -4
  41. package/dist/cli/commands/signer.mjs +0 -1
  42. package/dist/cli/commands/upgrade.mjs +0 -2
  43. package/dist/cli/commands/vault.mjs +0 -1
  44. package/dist/cli/commands/version.mjs +0 -2
  45. package/dist/data/desk-data.mjs +0 -12
  46. package/dist/index.mjs +0 -17
  47. package/dist/nft-gas-war-guard.mjs +0 -1
  48. package/dist/onboarding/harness-configs.mjs +0 -4
  49. package/dist/portfolio-risk.mjs +0 -1
  50. package/dist/prepare-envelope.mjs +0 -1
  51. package/dist/public-control/policy-schema.mjs +0 -1
  52. package/dist/router/index.mjs +0 -2
  53. package/dist/scanner/index.mjs +0 -4
  54. package/dist/signals/index.mjs +0 -1
  55. package/dist/watch-preferences.mjs +0 -1
  56. package/public/agent-connect/app.js +0 -84
  57. package/public/agent-connect/index.html +0 -83
  58. package/public/agent-connect/styles.css +0 -70
  59. package/public/index.html +0 -12
  60. package/public/oracle-console/app.js +0 -272
  61. package/public/oracle-console/bitcoin-wallets.js +0 -206
  62. package/public/oracle-console/index.html +0 -91
  63. package/public/oracle-console/styles.css +0 -239
  64. package/public/oracle-splash/assets/cli-chain-hyperliquid.jpg +0 -0
  65. package/public/oracle-splash/assets/hero/orb.avif +0 -0
  66. package/public/oracle-splash/assets/hero/orb.webm +0 -0
  67. package/public/oracle-splash/assets/llms/claude.svg +0 -1
  68. package/public/oracle-splash/assets/llms/codex-icon.svg +0 -1
  69. package/public/oracle-splash/assets/llms/codex.svg +0 -1
  70. package/public/oracle-splash/assets/llms/cursor-icon.svg +0 -12
  71. package/public/oracle-splash/assets/llms/cursor.svg +0 -17
  72. package/public/oracle-splash/assets/llms/deepseek.svg +0 -1
  73. package/public/oracle-splash/assets/llms/gemini-icon.svg +0 -1
  74. package/public/oracle-splash/assets/llms/gemini.svg +0 -1
  75. package/public/oracle-splash/assets/llms/grok.svg +0 -8
  76. package/public/oracle-splash/assets/llms/hermes.png +0 -0
  77. package/public/oracle-splash/assets/llms/kimi-icon.svg +0 -1
  78. package/public/oracle-splash/assets/llms/kimi.svg +0 -1
  79. package/public/oracle-splash/assets/llms/manus.svg +0 -18
  80. package/public/oracle-splash/assets/llms/openclaw.svg +0 -22
  81. package/public/oracle-splash/assets/llms/perplexity.svg +0 -1
  82. package/public/oracle-splash/assets/llms/qwen.svg +0 -1
  83. package/public/oracle-splash/assets/llms/windsurf.svg +0 -1
  84. package/public/oracle-splash/assets/protocols/abcdex.png +0 -0
  85. package/public/oracle-splash/assets/protocols/across.png +0 -0
  86. package/public/oracle-splash/assets/protocols/aerodrome.png +0 -0
  87. package/public/oracle-splash/assets/protocols/balancer.png +0 -0
  88. package/public/oracle-splash/assets/protocols/cowswap.png +0 -0
  89. package/public/oracle-splash/assets/protocols/curve.png +0 -0
  90. package/public/oracle-splash/assets/protocols/dreamcash.png +0 -0
  91. package/public/oracle-splash/assets/protocols/felix.png +0 -0
  92. package/public/oracle-splash/assets/protocols/gmx.png +0 -0
  93. package/public/oracle-splash/assets/protocols/hyena.png +0 -0
  94. package/public/oracle-splash/assets/protocols/hyperbeat.png +0 -0
  95. package/public/oracle-splash/assets/protocols/hyperliquid.png +0 -0
  96. package/public/oracle-splash/assets/protocols/hyperswap.png +0 -0
  97. package/public/oracle-splash/assets/protocols/jupiter.png +0 -0
  98. package/public/oracle-splash/assets/protocols/kinetiq.png +0 -0
  99. package/public/oracle-splash/assets/protocols/lfj.png +0 -0
  100. package/public/oracle-splash/assets/protocols/lifi.png +0 -0
  101. package/public/oracle-splash/assets/protocols/magic-eden.png +0 -0
  102. package/public/oracle-splash/assets/protocols/morpho.png +0 -0
  103. package/public/oracle-splash/assets/protocols/odos.png +0 -0
  104. package/public/oracle-splash/assets/protocols/oneinch.png +0 -0
  105. package/public/oracle-splash/assets/protocols/opensea.png +0 -0
  106. package/public/oracle-splash/assets/protocols/pancakeswap.png +0 -0
  107. package/public/oracle-splash/assets/protocols/paragon.png +0 -0
  108. package/public/oracle-splash/assets/protocols/paraswap.png +0 -0
  109. package/public/oracle-splash/assets/protocols/pendle.png +0 -0
  110. package/public/oracle-splash/assets/protocols/polymarket.png +0 -0
  111. package/public/oracle-splash/assets/protocols/quickswap.png +0 -0
  112. package/public/oracle-splash/assets/protocols/relay.png +0 -0
  113. package/public/oracle-splash/assets/protocols/stargate.png +0 -0
  114. package/public/oracle-splash/assets/protocols/tradexyz.png +0 -0
  115. package/public/oracle-splash/assets/protocols/uniswap.png +0 -0
  116. package/public/oracle-splash/assets/protocols/velodrome.png +0 -0
  117. package/public/oracle-splash/assets/protocols/ventuals.png +0 -0
  118. package/public/oracle-splash/assets/wordmarks/across-icon.webp +0 -0
  119. package/public/oracle-splash/assets/wordmarks/across.svg +0 -4
  120. package/public/oracle-splash/assets/wordmarks/aerodrome.svg +0 -23
  121. package/public/oracle-splash/assets/wordmarks/balancer.svg +0 -3
  122. package/public/oracle-splash/assets/wordmarks/cowswap.svg +0 -1
  123. package/public/oracle-splash/assets/wordmarks/curve.png +0 -0
  124. package/public/oracle-splash/assets/wordmarks/gmx.svg +0 -13
  125. package/public/oracle-splash/assets/wordmarks/hop-icon.webp +0 -0
  126. package/public/oracle-splash/assets/wordmarks/hyena.svg +0 -7
  127. package/public/oracle-splash/assets/wordmarks/hyperliquid.svg +0 -21
  128. package/public/oracle-splash/assets/wordmarks/hyperswap.svg +0 -13
  129. package/public/oracle-splash/assets/wordmarks/jupiter.svg +0 -35
  130. package/public/oracle-splash/assets/wordmarks/kinetiq.svg +0 -1
  131. package/public/oracle-splash/assets/wordmarks/lfj.webp +0 -0
  132. package/public/oracle-splash/assets/wordmarks/lifi.png +0 -0
  133. package/public/oracle-splash/assets/wordmarks/magic-eden.svg +0 -1
  134. package/public/oracle-splash/assets/wordmarks/markets.svg +0 -1
  135. package/public/oracle-splash/assets/wordmarks/morpho.svg +0 -1
  136. package/public/oracle-splash/assets/wordmarks/odos.svg +0 -3
  137. package/public/oracle-splash/assets/wordmarks/oneinch-icon.webp +0 -0
  138. package/public/oracle-splash/assets/wordmarks/oneinch.svg +0 -6
  139. package/public/oracle-splash/assets/wordmarks/opensea-icon.svg +0 -17
  140. package/public/oracle-splash/assets/wordmarks/opensea.svg +0 -1
  141. package/public/oracle-splash/assets/wordmarks/outcome.svg +0 -16
  142. package/public/oracle-splash/assets/wordmarks/pancakeswap.svg +0 -18
  143. package/public/oracle-splash/assets/wordmarks/paragon.svg +0 -9
  144. package/public/oracle-splash/assets/wordmarks/paraswap.svg +0 -16
  145. package/public/oracle-splash/assets/wordmarks/pendle.png +0 -0
  146. package/public/oracle-splash/assets/wordmarks/polymarket.png +0 -0
  147. package/public/oracle-splash/assets/wordmarks/quickswap.png +0 -0
  148. package/public/oracle-splash/assets/wordmarks/relay.svg +0 -8
  149. package/public/oracle-splash/assets/wordmarks/satflow-icon.png +0 -0
  150. package/public/oracle-splash/assets/wordmarks/stargate-icon.webp +0 -0
  151. package/public/oracle-splash/assets/wordmarks/stargate.svg +0 -15
  152. package/public/oracle-splash/assets/wordmarks/uniswap.svg +0 -18
  153. package/public/oracle-splash/assets/wordmarks/velodrome.svg +0 -84
  154. package/public/oracle-splash/assets/wordmarks/xyz.svg +0 -12
  155. package/public/oracle-splash/assets/wordmarks/zerox-icon.webp +0 -0
  156. package/public/oracle-splash/brand/aave.webp +0 -0
  157. package/public/oracle-splash/brand/aavev2.webp +0 -0
  158. package/public/oracle-splash/brand/aborean.webp +0 -0
  159. package/public/oracle-splash/brand/across.webp +0 -0
  160. package/public/oracle-splash/brand/aerodrome.webp +0 -0
  161. package/public/oracle-splash/brand/afi.webp +0 -0
  162. package/public/oracle-splash/brand/arcus.webp +0 -0
  163. package/public/oracle-splash/brand/aster.webp +0 -0
  164. package/public/oracle-splash/brand/avant.webp +0 -0
  165. package/public/oracle-splash/brand/balancer.webp +0 -0
  166. package/public/oracle-splash/brand/beefy.webp +0 -0
  167. package/public/oracle-splash/brand/benqi.webp +0 -0
  168. package/public/oracle-splash/brand/bestinslot.ico +0 -0
  169. package/public/oracle-splash/brand/bitfi.webp +0 -0
  170. package/public/oracle-splash/brand/bonkswap.webp +0 -0
  171. package/public/oracle-splash/brand/bouncebit.webp +0 -0
  172. package/public/oracle-splash/brand/camelot.webp +0 -0
  173. package/public/oracle-splash/brand/compound.webp +0 -0
  174. package/public/oracle-splash/brand/concrete.webp +0 -0
  175. package/public/oracle-splash/brand/cow.webp +0 -0
  176. package/public/oracle-splash/brand/curve.webp +0 -0
  177. package/public/oracle-splash/brand/derive.webp +0 -0
  178. package/public/oracle-splash/brand/dolomite.webp +0 -0
  179. package/public/oracle-splash/brand/eigenlayer.webp +0 -0
  180. package/public/oracle-splash/brand/ekubo.webp +0 -0
  181. package/public/oracle-splash/brand/ethena.webp +0 -0
  182. package/public/oracle-splash/brand/etherfi.webp +0 -0
  183. package/public/oracle-splash/brand/etherfiborrow.webp +0 -0
  184. package/public/oracle-splash/brand/felix.webp +0 -0
  185. package/public/oracle-splash/brand/fluid.webp +0 -0
  186. package/public/oracle-splash/brand/fluxbeam.webp +0 -0
  187. package/public/oracle-splash/brand/folks.webp +0 -0
  188. package/public/oracle-splash/brand/fortyacres.webp +0 -0
  189. package/public/oracle-splash/brand/gainsnetwork.webp +0 -0
  190. package/public/oracle-splash/brand/gassss.webp +0 -0
  191. package/public/oracle-splash/brand/gmx.webp +0 -0
  192. package/public/oracle-splash/brand/harmonix.webp +0 -0
  193. package/public/oracle-splash/brand/hlorderbook.webp +0 -0
  194. package/public/oracle-splash/brand/hlp.webp +0 -0
  195. package/public/oracle-splash/brand/hop.webp +0 -0
  196. package/public/oracle-splash/brand/hyperbeat.webp +0 -0
  197. package/public/oracle-splash/brand/hyperlend.webp +0 -0
  198. package/public/oracle-splash/brand/hyperliquid.webp +0 -0
  199. package/public/oracle-splash/brand/hyperliquidhpl.webp +0 -0
  200. package/public/oracle-splash/brand/hyperliquidspot.webp +0 -0
  201. package/public/oracle-splash/brand/hyperswap.webp +0 -0
  202. package/public/oracle-splash/brand/hypha.webp +0 -0
  203. package/public/oracle-splash/brand/joedex.webp +0 -0
  204. package/public/oracle-splash/brand/jupiter.webp +0 -0
  205. package/public/oracle-splash/brand/kelp.webp +0 -0
  206. package/public/oracle-splash/brand/kinetiq.webp +0 -0
  207. package/public/oracle-splash/brand/kmhype.webp +0 -0
  208. package/public/oracle-splash/brand/kona.webp +0 -0
  209. package/public/oracle-splash/brand/konalend.webp +0 -0
  210. package/public/oracle-splash/brand/lfj.webp +0 -0
  211. package/public/oracle-splash/brand/lido.webp +0 -0
  212. package/public/oracle-splash/brand/lifi.webp +0 -0
  213. package/public/oracle-splash/brand/lighter.webp +0 -0
  214. package/public/oracle-splash/brand/lista.webp +0 -0
  215. package/public/oracle-splash/brand/loopedhype.webp +0 -0
  216. package/public/oracle-splash/brand/lorenzo.webp +0 -0
  217. package/public/oracle-splash/brand/magic-eden.webp +0 -0
  218. package/public/oracle-splash/brand/magiceden.webp +0 -0
  219. package/public/oracle-splash/brand/mempool.png +0 -0
  220. package/public/oracle-splash/brand/meteora.webp +0 -0
  221. package/public/oracle-splash/brand/morpho.webp +0 -0
  222. package/public/oracle-splash/brand/myriad.webp +0 -0
  223. package/public/oracle-splash/brand/noxa.webp +0 -0
  224. package/public/oracle-splash/brand/odos.webp +0 -0
  225. package/public/oracle-splash/brand/oneinch.webp +0 -0
  226. package/public/oracle-splash/brand/openbook.webp +0 -0
  227. package/public/oracle-splash/brand/opensea.webp +0 -0
  228. package/public/oracle-splash/brand/orca.webp +0 -0
  229. package/public/oracle-splash/brand/ordinals.png +0 -0
  230. package/public/oracle-splash/brand/ostium.webp +0 -0
  231. package/public/oracle-splash/brand/pancakeswap.webp +0 -0
  232. package/public/oracle-splash/brand/pendle.webp +0 -0
  233. package/public/oracle-splash/brand/perena.webp +0 -0
  234. package/public/oracle-splash/brand/pharaoh.webp +0 -0
  235. package/public/oracle-splash/brand/phoenix.webp +0 -0
  236. package/public/oracle-splash/brand/polymarket.webp +0 -0
  237. package/public/oracle-splash/brand/polynomial.webp +0 -0
  238. package/public/oracle-splash/brand/projectx.webp +0 -0
  239. package/public/oracle-splash/brand/pumpfun.webp +0 -0
  240. package/public/oracle-splash/brand/quickswap.webp +0 -0
  241. package/public/oracle-splash/brand/rain.webp +0 -0
  242. package/public/oracle-splash/brand/raydium.webp +0 -0
  243. package/public/oracle-splash/brand/relay.webp +0 -0
  244. package/public/oracle-splash/brand/rocketpool.webp +0 -0
  245. package/public/oracle-splash/brand/saber.webp +0 -0
  246. package/public/oracle-splash/brand/sakuraswap.webp +0 -0
  247. package/public/oracle-splash/brand/sanctum.webp +0 -0
  248. package/public/oracle-splash/brand/satflow.png +0 -0
  249. package/public/oracle-splash/brand/sierra.webp +0 -0
  250. package/public/oracle-splash/brand/sky.webp +0 -0
  251. package/public/oracle-splash/brand/solv.webp +0 -0
  252. package/public/oracle-splash/brand/spark.webp +0 -0
  253. package/public/oracle-splash/brand/sparksavings.webp +0 -0
  254. package/public/oracle-splash/brand/sphere.webp +0 -0
  255. package/public/oracle-splash/brand/ssv.webp +0 -0
  256. package/public/oracle-splash/brand/stabble.webp +0 -0
  257. package/public/oracle-splash/brand/stableswap.webp +0 -0
  258. package/public/oracle-splash/brand/stakewise.webp +0 -0
  259. package/public/oracle-splash/brand/stargate.webp +0 -0
  260. package/public/oracle-splash/brand/sthype.webp +0 -0
  261. package/public/oracle-splash/brand/sushiswap.webp +0 -0
  262. package/public/oracle-splash/brand/unisat.png +0 -0
  263. package/public/oracle-splash/brand/uniswap.webp +0 -0
  264. package/public/oracle-splash/brand/uniswapv2.webp +0 -0
  265. package/public/oracle-splash/brand/uniswapv4.webp +0 -0
  266. package/public/oracle-splash/brand/unit.webp +0 -0
  267. package/public/oracle-splash/brand/velodrome.webp +0 -0
  268. package/public/oracle-splash/brand/velora.webp +0 -0
  269. package/public/oracle-splash/brand/venus.webp +0 -0
  270. package/public/oracle-splash/brand/wbeth.webp +0 -0
  271. package/public/oracle-splash/brand/xsy.webp +0 -0
  272. package/public/oracle-splash/brand/yieldyak.webp +0 -0
  273. package/public/oracle-splash/brand/zerobase.webp +0 -0
  274. package/public/oracle-splash/brand/zerox.webp +0 -0
  275. package/public/oracle-splash/favicon.ico +0 -0
  276. package/public/oracle-splash/favicon.svg +0 -6
  277. package/public/oracle-splash/index.html +0 -1568
  278. package/public/oracle-splash/mesh-graph.png +0 -0
  279. package/public/oracle-splash/mesh-graph.svg +0 -216
@@ -1,44 +0,0 @@
1
- var zt=Object.defineProperty;var Ge=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var Wt=(e,t)=>{for(var n in t)zt(e,n,{get:t[n],enumerable:!0})};import Jt from"node:fs";import Vt from"node:os";import ie from"node:path";import{fileURLToPath as Xt}from"node:url";function fe(){return process.env.ORACLE_FAKE_HOME||Vt.homedir()}function H(){return ie.join(fe(),".config","oracle")}function U(){return process.env.HERMES_HOME?ie.resolve(process.env.HERMES_HOME):ie.join(fe(),".hermes")}function L(e){return Jt.mkdirSync(e,{recursive:!0}),e}var Qt,M,Y=Ge(()=>{Qt=ie.dirname(Xt(import.meta.url)),M=ie.resolve(Qt,"../..")});var Lt={};Wt(Lt,{createOAuthStore:()=>Ke,default:()=>mr,getOAuthStore:()=>re,hasOAuthCredentials:()=>$t,loginOAuth:()=>It,oauthProviderConfig:()=>De,oauthProviderId:()=>D,oauthRuntimeConfig:()=>Tt,refreshOAuthCredentials:()=>He,resolveOAuthCredentials:()=>Ct});import{createHash as tr,randomBytes as Ue,timingSafeEqual as nr}from"node:crypto";import R from"node:fs";import te from"node:path";import rr from"node:readline/promises";import{spawn as or,spawnSync as ir}from"node:child_process";function Be(e={}){return typeof e.now=="function"?Number(e.now()):Date.now()}function D(e){let t=String(e||"").trim().toLowerCase();for(let[n,r]of Object.entries(ne))if(r.aliases.includes(t))return n;throw new Error(`unsupported OAuth provider: ${e||"(empty)"}`)}function De(e){let t=D(e);return{id:t,...ne[t]}}function P(e,t={}){if(!R.existsSync(e))return t;try{let n=JSON.parse(R.readFileSync(e,"utf8"));if(!n||typeof n!="object"||Array.isArray(n))throw new Error("invalid object");return n}catch{throw new Error(`credential store is unreadable or corrupt: ${te.basename(e)}`)}}function Ot(e){L(e),process.platform!=="win32"&&R.chmodSync(e,448)}function q(e,t){Ot(te.dirname(e));let n=`${e}.${process.pid}.${Ue(4).toString("hex")}.tmp`;R.writeFileSync(n,`${JSON.stringify(t,null,2)}
2
- `,{mode:384}),R.renameSync(n,e),process.platform!=="win32"&&R.chmodSync(e,384)}function sr(e){if(process.platform!=="linux")return!1;let t=e("secret-tool",["--version"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return!t.error&&t.status===0}function je(e){let t=String(e||"").trim().toLowerCase();if(!/^[a-z0-9][a-z0-9._-]*$/.test(t))throw new Error(`invalid API-key provider: ${e||"(empty)"}`);return t}function ue(e={}){let t=String(e.accessToken||e.access_token||"").trim(),n=String(e.refreshToken||e.refresh_token||"").trim(),r=Number(e.expiresAt||e.expires_at||0);if(!t)throw new Error("OAuth credential is missing access token");return{accessToken:t,refreshToken:n,expiresAt:Number.isFinite(r)?r:0,tokenType:String(e.tokenType||e.token_type||"Bearer"),source:String(e.source||"oracle"),...e.discovery?{discovery:e.discovery}:{},...e.scope?{scope:e.scope}:{},...e.idToken||e.id_token?{idToken:String(e.idToken||e.id_token)}:{}}}function Ke(e={}){let t=e.file||te.join(H(),"oauth.json"),n=e.metadataFile||te.join(te.dirname(t),"oauth-meta.json"),r=e.spawnFn||ir,o=e.keychain!==!1&&process.env.ORACLE_AUTH_FILE_STORE!=="1"&&sr(r),i=o?"linux-secret-service":"private-file",a=`${t}.lock`;async function c(b){Ot(te.dirname(a));let h;for(let l=0;l<400;l+=1)try{h=R.openSync(a,"wx",384);break}catch(d){if(d?.code!=="EEXIST")throw d;try{Date.now()-R.statSync(a).mtimeMs>3e5&&R.unlinkSync(a)}catch{}await new Promise(p=>setTimeout(p,25))}if(h===void 0)throw new Error("timed out waiting for OAuth credential lock");try{return await b()}finally{try{R.closeSync(h)}catch{}try{R.unlinkSync(a)}catch{}}}function u(b,h="oauth"){return["application","oracle","kind",h,"provider",b]}function s(b){let h=D(b);if(o){let p=r("secret-tool",["lookup",...u(h)],{encoding:"utf8",stdio:["ignore","pipe","ignore"]});if(p.error||p.status!==0||!String(p.stdout||"").trim())return null;try{return ue(JSON.parse(String(p.stdout).trim()))}catch{return null}}let d=P(t,{providers:{}}).providers?.[h];if(!d)return null;try{return ue(d)}catch{return null}}function f(b,h){let l=D(b),d=ue(h);if(o){let v=r("secret-tool",["store",`--label=Oracle ${l} OAuth`,...u(l)],{input:JSON.stringify(d),encoding:"utf8",stdio:["pipe","ignore","pipe"]});if(v.error||v.status!==0)throw new Error("OS credential store rejected OAuth credential");let O=P(n,{providers:{}});return O.providers||={},O.providers[l]={expiresAt:d.expiresAt,source:d.source},q(n,O),d}let p=P(t,{providers:{}});return p.providers||={},p.providers[l]=d,q(t,p),d}function m(b){let h=D(b);if(o){let p=r("secret-tool",["clear",...u(h)],{encoding:"utf8",stdio:["ignore","ignore","pipe"]}),v=P(n,{providers:{}});return v.providers&&delete v.providers[h],q(n,v),!p.error&&p.status===0}let l=P(t,{providers:{}}),d=!!l.providers?.[h];return l.providers&&delete l.providers[h],q(t,l),d}function x(b){let h=je(b);if(o){let l=r("secret-tool",["lookup",...u(h,"api-key")],{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return l.error||l.status!==0?"":String(l.stdout||"").trim()}return String(P(t,{apiKeys:{}}).apiKeys?.[h]||"").trim()}function g(b,h){let l=je(b),d=String(h||"").trim();if(!d)throw new Error("API key is empty");if(o){let v=r("secret-tool",["store",`--label=Oracle ${l} API key`,...u(l,"api-key")],{input:d,encoding:"utf8",stdio:["pipe","ignore","pipe"]});if(v.error||v.status!==0)throw new Error("OS credential store rejected API key");let O=P(n,{providers:{},apiKeys:{}});return O.apiKeys||={},O.apiKeys[l]={configured:!0},q(n,O),!0}let p=P(t,{providers:{},apiKeys:{}});return p.apiKeys||={},p.apiKeys[l]=d,q(t,p),!0}function w(b){let h=je(b);if(o){let p=r("secret-tool",["clear",...u(h,"api-key")],{encoding:"utf8",stdio:["ignore","ignore","pipe"]}),v=P(n,{providers:{},apiKeys:{}});return v.apiKeys&&delete v.apiKeys[h],q(n,v),!p.error&&p.status===0}let l=P(t,{providers:{},apiKeys:{}}),d=!!l.apiKeys?.[h];return l.apiKeys&&delete l.apiKeys[h],q(t,l),d}function _(){let b={},h={};if(o){let l=P(n,{providers:{},apiKeys:{}});for(let[d,p]of Object.entries(l.providers||{}))b[d]={loggedIn:!!s(d),expiresAt:Number(p.expiresAt||0),source:String(p.source||"oracle"),storage:i};for(let d of Object.keys(l.apiKeys||{}))h[d]={configured:!!x(d),storage:i}}else{let l=P(t,{providers:{},apiKeys:{}});for(let[d,p]of Object.entries(l.providers||{}))b[d]={loggedIn:!!p?.accessToken,expiresAt:Number(p?.expiresAt||0),source:String(p?.source||"oracle"),storage:i};for(let[d,p]of Object.entries(l.apiKeys||{}))h[d]={configured:!!p,storage:i}}return{storage:i,providers:b,apiKeys:h}}return Object.freeze({file:t,storage:i,get:s,set:f,remove:m,getApiKey:x,setApiKey:g,removeApiKey:w,status:_,withLock:c})}function re(){return At||=Ke(),At}function Me(e){return Buffer.from(e).toString("base64url")}function ar(){let e=Me(Ue(32));return{verifier:e,challenge:Me(tr("sha256").update(e).digest()),state:Me(Ue(24))}}function cr(e,t){let n=Buffer.from(String(e||"")),r=Buffer.from(String(t||""));return n.length===r.length&&nr(n,r)}function ur(e){let t=String(e),n=process.platform==="darwin"?["open",[t]]:process.platform==="win32"?["cmd.exe",["/d","/s","/c","start","",t]]:["xdg-open",[t]];try{return or(n[0],n[1],{detached:!0,stdio:"ignore"}).unref(),!0}catch{return!1}}function ye(e){return new URLSearchParams(e).toString()}async function K(e,t){if(!e?.ok){let r="";try{r=String((await e.json())?.error||"")}catch{}throw new Error(`${t} failed (HTTP ${e?.status||"unknown"}${r?`, ${r}`:""})`)}let n=await e.json();if(!n||typeof n!="object")throw new Error(`${t} returned invalid JSON`);return n}async function lr(e){if(e)return String(await e()).trim();let t=rr.createInterface({input:process.stdin,output:process.stdout});try{return String(await t.question("Authorization code: ")).trim()}finally{t.close()}}function be(e,t={}){let n=String(e.access_token||"").trim(),r=String(e.refresh_token||t.refreshToken||"").trim();if(!n)throw new Error("OAuth token response is missing access token");let o=Number(e.expires_in||3600);return ue({accessToken:n,refreshToken:r,expiresAt:Be(t)+Math.max(1,o)*1e3,tokenType:e.token_type||"Bearer",idToken:e.id_token,source:"oracle",...t.discovery?{discovery:t.discovery}:{},...e.scope?{scope:e.scope}:{}})}async function fr(e){let t=ne["anthropic-oauth"],n=e.pkce||ar(),r=new URLSearchParams({code:"true",client_id:t.clientId,response_type:"code",redirect_uri:t.redirectUri,scope:t.scope,code_challenge:n.challenge,code_challenge_method:"S256",state:n.state}),o=`${t.authorizeUrl}?${r}`;e.output(`Open: ${o}`),e.openFn(o);let i=await lr(e.inputFn),[a,c]=i.split("#",2);if(!a||!cr(c,n.state))throw new Error("Claude OAuth state mismatch");let u=await e.fetchFn(t.tokenUrl,{method:"POST",headers:{"content-type":"application/json","user-agent":"axios/1.7.9"},body:JSON.stringify({grant_type:"authorization_code",client_id:t.clientId,code:a,state:c,redirect_uri:t.redirectUri,code_verifier:n.verifier})});return be(await K(u,"Claude OAuth token exchange"),e)}async function dr(e){let t=ne["openai-codex"],n=await K(await e.fetchFn(`${t.issuer}/api/accounts/deviceauth/usercode`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({client_id:t.clientId})}),"Codex device authorization");if(!n.user_code||!n.device_auth_id)throw new Error("Codex device authorization returned incomplete data");let r=`${t.issuer}/codex/device`;e.output(`Open: ${r}`),e.output(`Code: ${n.user_code}`),e.openFn(r);let o=Math.max(3,Number(n.interval||5)),i;for(let c=0;c<Math.ceil(900/o);c+=1){await e.sleepFn(o*1e3);let u=await e.fetchFn(`${t.issuer}/api/accounts/deviceauth/token`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({device_auth_id:n.device_auth_id,user_code:n.user_code})});if(u.ok){i=await K(u,"Codex device authorization");break}if(![403,404].includes(u.status))throw new Error(`Codex device authorization failed (HTTP ${u.status})`)}if(!i)throw new Error("Codex device authorization timed out");let a=await e.fetchFn(t.tokenUrl,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:ye({grant_type:"authorization_code",code:i.authorization_code,redirect_uri:`${t.issuer}/deviceauth/callback`,client_id:t.clientId,code_verifier:i.code_verifier})});return be(await K(a,"Codex OAuth token exchange"),e)}function G(e){let t=new URL(String(e)),n=t.hostname.toLowerCase();if(t.protocol!=="https:"||n!=="x.ai"&&!n.endsWith(".x.ai"))throw new Error("xAI OAuth discovery returned an untrusted endpoint");return t.toString()}async function pr(e){let t=ne["xai-oauth"],n=await K(await e.fetchFn(t.discoveryUrl,{headers:{accept:"application/json"}}),"xAI OAuth discovery");G(n.authorization_endpoint);let r=G(n.token_endpoint),o=await K(await e.fetchFn(t.deviceUrl,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded",accept:"application/json"},body:ye({client_id:t.clientId,scope:t.scope})}),"xAI device authorization");if(!o.device_code||!o.user_code||!o.verification_uri)throw new Error("xAI device authorization returned incomplete data");let i=G(o.verification_uri_complete||o.verification_uri);e.output(`Open: ${i}`),e.output(`Code: ${o.user_code}`),e.openFn(i);let a=Math.max(1,Number(o.interval||5)),c=Math.ceil(Math.max(1,Number(o.expires_in||600))/a);for(let u=0;u<c;u+=1){let s=await e.fetchFn(r,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded",accept:"application/json"},body:ye({grant_type:"urn:ietf:params:oauth:grant-type:device_code",client_id:t.clientId,device_code:o.device_code})});if(s.ok){let m=await K(s,"xAI OAuth token exchange");return be(m,{...e,discovery:{authorization_endpoint:G(n.authorization_endpoint),token_endpoint:r}})}let f="";try{f=String((await s.json())?.error||"")}catch{}if(f==="slow_down")await e.sleepFn((a+1)*1e3);else if(f==="authorization_pending")await e.sleepFn(a*1e3);else throw new Error(`xAI OAuth token exchange failed (HTTP ${s.status}${f?`, ${f}`:""})`)}throw new Error("xAI device authorization timed out")}async function It(e,t={}){let n=D(e),r={fetchFn:t.fetchFn||globalThis.fetch,inputFn:t.inputFn,sleepFn:t.sleepFn||(o=>new Promise(i=>setTimeout(i,o))),openFn:t.openFn||ur,output:t.output||(o=>process.stdout.write(`${o}
3
- `)),now:t.now,pkce:t.pkce};return n==="anthropic-oauth"?fr(r):n==="openai-codex"?dr(r):pr(r)}async function He(e,t,n={}){let r=D(e),o=ne[r],i=ue(t);if(!i.refreshToken)throw new Error(`${r} OAuth credential cannot refresh; run oracle auth login`);let a=i.discovery,c,u=n.fetchFn||globalThis.fetch;if(r==="xai-oauth"){if(!a?.token_endpoint){let m=await u(o.discoveryUrl),x=await K(m,"xAI OAuth discovery");a={...x.authorization_endpoint?{authorization_endpoint:G(x.authorization_endpoint)}:{},token_endpoint:G(x.token_endpoint)}}c=G(a.token_endpoint)}else c=o.tokenUrl;let s=await u(c,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded",accept:"application/json",...r==="anthropic-oauth"?{"user-agent":"axios/1.7.9"}:{}},body:ye({grant_type:"refresh_token",refresh_token:i.refreshToken,client_id:o.clientId})}),f=await K(s,`${r} OAuth refresh`);return be(f,{...n,refreshToken:i.refreshToken,discovery:a})}async function Ct(e,t={}){let n=D(e),r=t.store||re(),o=r.get(n);if(!o)throw new Error(`${n} OAuth is not logged in; run oracle auth login ${e}`);let i=Be(t);if(!o.expiresAt||o.expiresAt>i+Et)return o;let a=async()=>{let c=r.get(n);if(!c)throw new Error(`${n} OAuth is not logged in; run oracle auth login ${e}`);let u=Be(t);if(!c.expiresAt||c.expiresAt>u+Et)return c;let s=await He(n,c,t);return r.set(n,s),s};return typeof r.withLock=="function"?r.withLock(a):a()}function $t(e,t={}){try{return!!(t.store||re()).get(e)?.accessToken}catch{return!1}}function Tt(e){let t=De(e);return{kind:"standalone",provider:t.id,model:t.model,baseUrl:t.baseUrl,authType:"oauth",protocol:t.protocol}}var ne,Et,At,mr,qe=Ge(()=>{Y();ne=Object.freeze({"anthropic-oauth":{aliases:["anthropic-oauth","anthropic","claude","claude-oauth"],clientId:"9d1c250a-e61b-44d9-88ed-5944d1962f5e",authorizeUrl:"https://claude.ai/oauth/authorize",tokenUrl:"https://platform.claude.com/v1/oauth/token",redirectUri:"https://console.anthropic.com/oauth/code/callback",scope:"org:create_api_key user:profile user:inference",baseUrl:"https://api.anthropic.com/v1",model:"claude-sonnet-4-6",protocol:"anthropic-messages"},"openai-codex":{aliases:["openai-codex","openai-oauth","codex","codex-oauth"],clientId:"app_EMoamEEZ73f0CkXaXp7hrann",issuer:"https://auth.openai.com",tokenUrl:"https://auth.openai.com/oauth/token",baseUrl:"https://chatgpt.com/backend-api/codex",model:"gpt-5.6-sol",protocol:"responses"},"xai-oauth":{aliases:["xai-oauth","xai","grok","grok-oauth"],clientId:"b1a00492-073a-47ea-816f-4c329264a828",issuer:"https://auth.x.ai",discoveryUrl:"https://auth.x.ai/.well-known/openid-configuration",deviceUrl:"https://auth.x.ai/oauth2/device/code",scope:"openid profile email offline_access grok-cli:access api:access",baseUrl:"https://api.x.ai/v1",model:"grok-4.5",protocol:"responses"}}),Et=12e4;mr={createOAuthStore:Ke,getOAuthStore:re,hasOAuthCredentials:$t,loginOAuth:It,oauthProviderConfig:De,oauthProviderId:D,oauthRuntimeConfig:Tt,refreshOAuthCredentials:He,resolveOAuthCredentials:Ct}});import{spawn as Yt}from"node:child_process";var Gt=["SIGINT","SIGTERM","SIGHUP"];function oe(e,t=[],n={},r=e){return new Promise(o=>{let i=Yt(e,t,n),a=!1,c=null,u=new Map(Gt.map(f=>[f,()=>{c||=f,i.exitCode===null&&i.signalCode===null&&i.kill(f)}]));for(let[f,m]of u)process.on(f,m);let s=()=>{for(let[f,m]of u)process.off(f,m)};i.once("error",f=>{a||(a=!0,s(),process.stderr.write(`oracle: could not start ${r}: ${f.message}
4
- `),o(1))}),i.once("exit",(f,m)=>{if(a)return;a=!0,s();let x=c||m;if(x){process.kill(process.pid,x);return}o(f??1)})})}import Ve from"node:fs";import X from"node:path";Y();var Zt="0.19.0",fo=`hermes-agent==${Zt}`;var Je="0.12.1",po=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Je}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Je}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function en(){return X.join(H(),"runtime")}function tn(){return X.join(en(),"venv")}function nn(e){let t=process.platform==="win32"?"Scripts":"bin",n=process.platform==="win32"?`${e}.exe`:e;return X.join(tn(),t,n)}function rn(){return nn("hermes")}function on(e){let t=process.platform==="win32"&&!X.extname(e)?["",".exe",".cmd",".bat"]:[""];for(let n of(process.env.PATH||"").split(X.delimiter))if(n)for(let r of t){let o=X.join(n,`${e}${r}`);try{if(Ve.existsSync(o))return o}catch{}}return null}function se(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=on("hermes");if(e)return{ok:!0,bin:e,source:"path"};let t=rn();return Ve.existsSync(t)?{ok:!0,bin:t,source:"managed"}:{ok:!1,bin:null,source:null}}Y();import Z from"node:fs";import Se from"node:path";var sn=new Set(["auto","standalone","hermes"]),an=new Set(["openrouter","openai","xai","deepseek","gemini","custom","anthropic-oauth","openai-codex","xai-oauth"]);function Xe(){return Se.join(H(),"model.json")}function Q(e){return String(e||"").trim()||void 0}function Qe(e={}){let t=Q(e.backend)?.toLowerCase()||"auto",n=Q(e.provider)?.toLowerCase(),r=Q(e.model),o=Q(e.baseUrl)?.replace(/\/+$/,""),i=Q(e.apiKeyEnv),a=Number.parseInt(String(e.contextLength||""),10),c=Q(e.reasoningEffort);if(!sn.has(t))throw new Error(`unsupported backend: ${t}`);if(n&&!an.has(n))throw new Error(`unsupported provider: ${n}`);if(o&&n!=="custom")throw new Error("baseUrl is only supported for the custom provider");if(i&&!/^[A-Z][A-Z0-9_]*$/.test(i))throw new Error("api key env must be an uppercase environment variable name");if(n==="custom"&&!o)throw new Error("custom provider requires baseUrl");if(t==="standalone"&&!r)throw new Error("standalone backend requires a model");return{backend:t,...n?{provider:n}:{},...r?{model:r}:{},...o?{baseUrl:o}:{},...i?{apiKeyEnv:i}:{},...Number.isFinite(a)&&a>0?{contextLength:a}:{},...c?{reasoningEffort:c}:{}}}function ae(){let e=Xe();if(!Z.existsSync(e))return null;try{return Qe(JSON.parse(Z.readFileSync(e,"utf8")))}catch{return null}}function Ze(e){let t=Qe(e),n=Xe();L(Se.dirname(n)),process.platform!=="win32"&&Z.chmodSync(Se.dirname(n),448);let r=`${n}.${process.pid}.tmp`;return Z.writeFileSync(r,`${JSON.stringify(t,null,2)}
5
- `,{mode:384}),Z.renameSync(r,n),process.platform!=="win32"&&Z.chmodSync(n,384),t}Y();import A from"node:fs";import S from"node:path";import{spawnSync as Mr}from"node:child_process";import tt from"node:fs";import un from"node:path";var cn=Object.freeze([{key:"hyperliquid",aliases:["hl","hyperevm","hype","999"],chainId:999,name:"hyperliquid",kind:"evm",family:"hyperliquid",agent:"hyperliquid-agent",note:"perps \xB7 hip-3/4 \xB7 hyperevm 999",build:!0},{key:"ethereum",aliases:["eth","mainnet","1"],chainId:1,name:"ethereum",kind:"evm",family:"evm",agent:"oracle",note:"l1 \xB7 bridge hub",build:!0},{key:"base",aliases:["8453"],chainId:8453,name:"base",kind:"evm",family:"evm",agent:"oracle",note:"evm l2",build:!0},{key:"arbitrum",aliases:["arb","42161"],chainId:42161,name:"arbitrum",kind:"evm",family:"evm",agent:"oracle",note:"evm l2",build:!0},{key:"optimism",aliases:["op","10"],chainId:10,name:"optimism",kind:"evm",family:"evm",agent:"oracle",note:"op mainnet",build:!0},{key:"polygon",aliases:["matic","137"],chainId:137,name:"polygon",kind:"evm",family:"evm",agent:"oracle",note:"evm l2",build:!0},{key:"bsc",aliases:["bnb","56"],chainId:56,name:"bnb chain",kind:"evm",family:"evm",agent:"oracle",note:"bsc",build:!0},{key:"avalanche",aliases:["avax","43114"],chainId:43114,name:"avalanche",kind:"evm",family:"evm",agent:"oracle",note:"c-chain",build:!0},{key:"abstract",aliases:["abs","2741"],chainId:2741,name:"abstract",kind:"evm",family:"evm",agent:"oracle",note:"open / add agent",build:!0},{key:"stable",aliases:["988"],chainId:988,name:"stable",kind:"evm",family:"stable",agent:"stable-agent",note:"usdt0 gas \xB7 stable agent",build:!0},{key:"robinhood",aliases:["rh","4663"],chainId:4663,name:"robinhood",kind:"evm",family:"robinhood",agent:"robinhood-agent",note:"rh chain 4663",build:!0},{key:"solana",aliases:["sol"],chainId:"SOL",name:"solana",kind:"svm",family:"solana",agent:"solana-agent",note:"jup \xB7 nfts \xB7 dexs",build:!0},{key:"bitcoin",aliases:["btc"],chainId:"BTC",name:"bitcoin",kind:"utxo",family:"bitcoin",agent:"bitcoin-agent",note:"ord \xB7 runes \xB7 l1",build:!0},{key:"polymarket",aliases:["poly","polygon-poly"],chainId:137,name:"polymarket",kind:"venue",family:"polymarket",agent:"polymarket-agent",note:"prediction markets (polygon venue)",build:!1}]);function ke(e){return String(e||"").trim().toLowerCase().replace(/^\/+/,"").replace(/\s+/g,"-")}function et(e){let t=ke(e);if(!t)return null;for(let n of cn)if(n.key===t||String(n.chainId).toLowerCase()===t||(n.aliases||[]).map(ke).includes(t)||ke(n.name)===t)return n;return null}Y();function ln(){return un.join(H(),"active-chain.json")}function fn(){let e=ln();if(!tt.existsSync(e))return null;try{let t=JSON.parse(tt.readFileSync(e,"utf8"));if(!t||typeof t!="object"||!t.key)return null;let n=et(t.key);return n?{key:n.key,chainId:n.chainId,name:n.name,agent:n.agent,selectedAt:t.selectedAt||null}:null}catch{return null}}function de(e={}){let t=fn(),n={...process.env,...e};return t&&(n.ORACLE_ACTIVE_CHAIN=t.key,n.ORACLE_ACTIVE_CHAIN_ID=String(t.chainId),n.ORACLE_ACTIVE_AGENT=t.agent||"oracle"),n}import{EventEmitter as qn}from"node:events";import{spawn as dn}from"node:child_process";import{EventEmitter as pn}from"node:events";import{createInterface as nt}from"node:readline";var mn=15e3,hn=12e4;function xn(e){let t=typeof e=="string"?e:e?.message||"Gateway request failed",n=new Error(t);return n.error=e,n}function gn(e){let t=Buffer.from(e);if(t.length<=4096)return e;let n=t.length-4096;return`${t.subarray(0,4096).toString("utf8")} ... [truncated ${n} bytes]`}function rt({python:e,pythonArgs:t=[],cwd:n,env:r,spawnFn:o=dn,startupTimeoutMs:i=mn,requestTimeoutMs:a=hn}={}){let c=new pn,u=new Map,s=null,f=1,m=null,x=null,g=!1;function w(p){c.listenerCount("error")>0&&c.emit("error",p)}function _(p){for(let v of u.values())clearTimeout(v.timer),v.reject(p);u.clear()}function b(p){if(!("id"in p)){c.emit("event",p);return}let v=u.get(p.id);v&&(u.delete(p.id),clearTimeout(v.timer),"error"in p?v.reject(xn(p.error)):v.resolve(p.result))}function h(){return m||(m=new Promise((p,v)=>{let O=!1,k,y=I=>{O||(O=!0,clearTimeout(k),I?v(I):p())};try{s=o(e,[...t,"-m","tui_gateway.entry"],{cwd:n,env:r})}catch(I){y(I),w(I);return}let C=nt({input:s.stdout}),F=nt({input:s.stderr});C.on("line",I=>{let j;try{j=JSON.parse(I)}catch{c.emit("log",I);return}y(),b(j)}),F.on("line",I=>c.emit("log",gn(I))),s.once("error",I=>{y(I),_(I),w(I)}),s.once("exit",(I,j)=>{g=!0;let V=new Error(`Gateway exited with code ${I} and signal ${j}`);y(V),_(V),c.emit("exit",{code:I,signal:j})}),k=setTimeout(()=>{y(new Error(`Gateway startup timed out after ${i} ms`))},i)}),m)}function l(p,v){if(!s||g)return Promise.reject(new Error("Gateway is not running"));let O=f++;return new Promise((k,y)=>{let C=setTimeout(()=>{u.delete(O),y(new Error(`Gateway request ${O} timed out after ${a} ms`))},a);u.set(O,{resolve:k,reject:y,timer:C});try{s.stdin.write(`${JSON.stringify({id:O,method:p,params:v})}
6
- `)}catch(F){clearTimeout(C),u.delete(O),y(F)}})}function d(){if(x)return x;if(!s||g)return Promise.resolve();let p=new Error("Gateway stopped while requests were pending");return _(p),x=new Promise(v=>{s.once("exit",v);try{s.kill()}catch{v()}}),x}return{start:h,request:l,stop:d,on(p,v){return c.on(p,v),this},off(p,v){return c.off(p,v),this}}}var ce=Buffer.alloc(0),yn=new Set(["return","backspace","tab","escape","up","down","left","right","home","end","delete","insert","pageup","pagedown","unknown"]),bn={A:"up",B:"down",C:"right",D:"left",H:"home",F:"end",P:"f1",Q:"f2",R:"f3",S:"f4"},wn={1:"home",2:"insert",3:"delete",4:"end",5:"pageup",6:"pagedown",7:"home",8:"end"};function N({name:e=null,ctrl:t=!1,meta:n=!1,shift:r=!1,sequence:o=""}){return{name:e,ctrl:t,meta:n,shift:r,sequence:o}}function at(e){return e<128?1:e>=240?4:e>=224?3:e>=192?2:1}function vn(e){return e>=64&&e<=126}function ot(e){let t=e.toLowerCase();return N({name:t,shift:e!==t,sequence:e})}function _n(e){return e===13?N({name:"return",sequence:"\r"}):e===10?N({name:"return",sequence:`
7
- `}):e===9?N({name:"tab",sequence:" "}):e===127?N({name:"backspace",sequence:"\x7F"}):e===8?N({name:"backspace",sequence:"\b"}):e>=1&&e<=26?N({name:String.fromCharCode(e+96),ctrl:!0,sequence:String.fromCharCode(e)}):N({name:"unknown",sequence:String.fromCharCode(e)})}function Sn(e){let t=/^\u001b[\[O](\d*)(?:;(\d+))?(.)$/s.exec(e);if(!t)return N({name:"unknown",sequence:e});let n=t[1]===""?null:Number(t[1]),r=t[2]===void 0?null:Number(t[2]),o=t[3],i=null,a=r;if(o==="~"?i=wn[n]??null:(i=bn[o]??null,a===null&&n!==null&&n>1&&(a=n)),!i)return N({name:"unknown",sequence:e});let c=a===null?0:Math.max(0,a-1);return N({name:i,shift:(c&1)!==0,meta:(c&2)!==0,ctrl:(c&4)!==0,sequence:e})}function kn(e,t,n,r){let o=()=>(n.push(N({name:"escape",sequence:"\x1B"})),1);if(t+1>=e.length)return r?o():0;let i=e[t+1];if(i===91||i===79){let s=t+2;for(;s<e.length&&!vn(e[s]);)s+=1;return s>=e.length?r?o():0:(n.push(Sn(e.toString("utf8",t,s+1))),s+1-t)}if(i===27)return o();let a=at(i);if(t+1+a>e.length)return r?o():0;let c=e.toString("utf8",t+1,t+1+a),u=c.toLowerCase();return n.push(N({name:u,meta:!0,shift:c!==u,sequence:`\x1B${c}`})),1+a}function it(e,t){let n=[],r=0;for(;r<e.length;){let o=e[r];if(o===27){let a=kn(e,r,n,t);if(a===0)return{keys:n,rest:Buffer.from(e.subarray(r))};r+=a;continue}if(o<32||o===127){n.push(_n(o)),r+=1;continue}let i=at(o);if(r+i>e.length)return t?(n.push(ot(e.toString("utf8",r))),{keys:n,rest:ce}):{keys:n,rest:Buffer.from(e.subarray(r))};n.push(ot(e.toString("utf8",r,r+i))),r+=i}return{keys:n,rest:ce}}function st(e){return Buffer.isBuffer(e)?e:e==null?ce:typeof e=="string"?Buffer.from(e,"utf8"):Buffer.from(e)}function En(){let e=ce;return{push(t){let n=e.length===0?st(t):Buffer.concat([e,st(t)]),{keys:r,rest:o}=it(n,!1);return e=o,r},flush(){if(e.length===0)return[];let{keys:t}=it(e,!0);return e=ce,t},get pending(){return e.length}}}function An({history:e=[]}={}){let t=[...e];return{buffer:"",cursor:0,history:t,historyIndex:t.length,draft:""}}function Ee(e,t){if(t<=0)return 0;let n=t-1,r=e.charCodeAt(n);if(r>=56320&&r<=57343&&n>0){let o=e.charCodeAt(n-1);if(o>=55296&&o<=56319)return n-1}return n}function Ae(e,t){if(t>=e.length)return e.length;let n=e.charCodeAt(t);return n>=55296&&n<=56319&&t+1<e.length?t+2:t+1}function E(e,t){return{...e,...t}}function ct(e,t){return E(e,{...t,historyIndex:e.history.length,draft:""})}function On(e){if(e.ctrl||e.meta||!e.sequence||yn.has(e.name))return!1;for(let t of e.sequence){let n=t.codePointAt(0);if(n<32||n===127)return!1}return!0}function In(e,t){let n=t;for(;n>0&&/\s/.test(e[n-1]);)n-=1;for(;n>0&&!/\s/.test(e[n-1]);)n-=1;return n}function Cn(e){if(e.historyIndex<=0)return{state:E(e,{}),action:null};let t=e.historyIndex>=e.history.length,n=e.historyIndex-1,r=e.history[n]??"";return{state:E(e,{buffer:r,cursor:r.length,historyIndex:n,draft:t?e.buffer:e.draft}),action:null}}function $n(e){if(e.historyIndex>=e.history.length)return{state:E(e,{}),action:null};let t=e.historyIndex+1,n=t>=e.history.length,r=n?e.draft:e.history[t]??"";return{state:E(e,{buffer:r,cursor:r.length,historyIndex:t,draft:n?"":e.draft}),action:null}}function Tn(e){let t=e.buffer.trim();if(t==="")return{state:ct(e,{buffer:"",cursor:0}),action:null};let n=e.history[e.history.length-1]===t?[...e.history]:[...e.history,t];return{state:E(e,{buffer:"",cursor:0,history:n,historyIndex:n.length,draft:""}),action:{type:"submit",value:t}}}function Ln(e,t){if(!t)return{state:E(e,{}),action:null};let{buffer:n,cursor:r}=e;if(t.ctrl&&!t.meta)switch(t.name){case"c":return{state:ct(e,{buffer:"",cursor:0}),action:{type:"cancel"}};case"d":return n===""?{state:E(e,{}),action:{type:"eof"}}:{state:E(e,{}),action:null};case"l":return{state:E(e,{}),action:{type:"clear"}};case"a":return{state:E(e,{cursor:0}),action:null};case"e":return{state:E(e,{cursor:n.length}),action:null};case"u":return{state:E(e,{buffer:n.slice(r),cursor:0}),action:null};case"k":return{state:E(e,{buffer:n.slice(0,r)}),action:null};case"w":{let o=In(n,r);return{state:E(e,{buffer:n.slice(0,o)+n.slice(r),cursor:o}),action:null}}case"b":return{state:E(e,{cursor:Ee(n,r)}),action:null};case"f":return{state:E(e,{cursor:Ae(n,r)}),action:null};default:return{state:E(e,{}),action:null}}switch(t.name){case"return":return Tn(e);case"left":return{state:E(e,{cursor:Ee(n,r)}),action:null};case"right":return{state:E(e,{cursor:Ae(n,r)}),action:null};case"home":return{state:E(e,{cursor:0}),action:null};case"end":return{state:E(e,{cursor:n.length}),action:null};case"up":return Cn(e);case"down":return $n(e);case"backspace":{if(r===0)return{state:E(e,{}),action:null};let o=Ee(n,r);return{state:E(e,{buffer:n.slice(0,o)+n.slice(r),cursor:o}),action:null}}case"delete":{if(r>=n.length)return{state:E(e,{}),action:null};let o=Ae(n,r);return{state:E(e,{buffer:n.slice(0,r)+n.slice(o)}),action:null}}default:break}if(On(t)){let o=t.sequence;return{state:E(e,{buffer:n.slice(0,r)+o+n.slice(r),cursor:r+o.length}),action:null}}return{state:E(e,{}),action:null}}function ut(e={}){let{stdin:t,stdout:n,history:r=[],onSubmit:o,onCancel:i,onEof:a,onClear:c,onRender:u}=e,s=t??process.stdin,f=n??process.stdout,m=En(),x={submit:o,cancel:i,eof:a,clear:c},g=An({history:r}),w=!1,_=!1,b=!1,h=d=>{if(!d)return;let p=x[d.type];typeof p=="function"&&p(d.value,g)},l=d=>{for(let p of m.push(d)){let v=Ln(g,p);g=v.state,h(v.action),typeof u=="function"&&u(g)}};return{start(){w||(w=!0,s.isTTY&&typeof s.setRawMode=="function"&&(b=s.isRaw===!0,s.setRawMode(!0),_=!0),typeof s.resume=="function"&&s.resume(),s.on("data",l),typeof u=="function"&&u(g))},stop(){w&&(w=!1,typeof s.off=="function"?s.off("data",l):typeof s.removeListener=="function"&&s.removeListener("data",l),_&&typeof s.setRawMode=="function"&&(s.setRawMode(b),_=!1),typeof s.pause=="function"&&s.pause())},getState(){return g},setState(d){return g=d,g},write(d){f&&typeof f.write=="function"&&f.write(d)},get isRunning(){return w}}}var Oe="\x1B[?25l",pe="\x1B[?25h",lt="\x1B[2K",me="\x1B[0J";var Nn="\x1B\\[[0-9;?]*[a-zA-Z]";function pt(){return new RegExp(Nn,"g")}function Pn(e){return String(e??"").replace(pt(),"")}function ft(e,t){return t.some(([n,r])=>e>=n&&e<=r)}function mt(e){return e===0||e<32||e>=127&&e<160||ft(e,[[768,879],[1155,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1552,1562],[1611,1631],[1648,1648],[1750,1757],[1759,1764],[1767,1768],[1770,1773],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2070,2073],[2075,2083],[2085,2087],[2089,2093],[2137,2139],[2259,2273],[2275,2307],[2362,2364],[2369,2376],[2381,2381],[2385,2391],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2641,2641],[2672,2673],[2677,2677],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2884],[2893,2893],[2902,2902],[2914,2915],[2946,2946],[3008,3008],[3021,3021],[3072,3072],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3170,3171],[3201,3201],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3329,3329],[3393,3396],[3405,3405],[3426,3427],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3981,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4151],[4153,4154],[4157,4158],[4184,4185],[4190,4192],[4209,4212],[4226,4226],[4229,4230],[4237,4237],[4253,4253],[4957,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6277,6278],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6683,6683],[6742,6742],[6744,6750],[6752,6752],[6754,6754],[6757,6764],[6771,6780],[6783,6783],[6832,6911],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7040,7041],[7074,7077],[7080,7081],[7083,7085],[7142,7142],[7144,7145],[7149,7149],[7151,7153],[7212,7219],[7222,7223],[7376,7378],[7380,7392],[7394,7400],[7405,7405],[7412,7412],[7416,7417],[7616,7679],[8203,8207],[8234,8238],[8288,8292],[8294,8303],[8400,8447],[65024,65039],[65056,65071],[917760,917999]])?0:ft(e,[[4352,4447],[8986,8987],[9001,9002],[9193,9196],[9200,9200],[9203,9203],[9725,9726],[9748,9749],[9800,9811],[9855,9855],[9875,9875],[9889,9889],[9898,9899],[9917,9918],[9924,9925],[9934,9934],[9940,9940],[9962,9962],[9970,9971],[9973,9973],[9978,9978],[9981,9981],[9989,9989],[9994,9995],[10024,10024],[10060,10060],[10062,10062],[10067,10069],[10071,10071],[10133,10135],[10160,10160],[10175,10175],[11035,11036],[11088,11088],[11093,11093],[11904,12350],[12352,42191],[44032,55203],[63744,64255],[65040,65049],[65072,65135],[65280,65376],[65504,65510],[127744,128591],[129280,129535],[131072,262141]])?2:1}function Rn(e){let t=0;for(let n of Array.from(e))t+=mt(n.codePointAt(0));return t}function Fn(e){return Rn(Pn(e))}function jn(e){return/^\u001b\[0*m$/.test(e)}function dt(e,t){let n="",r=0;for(let o of Array.from(e)){let i=mt(o.codePointAt(0));if(r+i>t)break;n+=o,r+=i}return{text:n,width:r}}function Mn(e,t){let n=String(e??"");if(t<=0)return"";if(Fn(n)<=t)return n;let r=pt(),o="",i=0,a=!1,c=0,u=r.exec(n);for(;u!==null;){let f=dt(n.slice(c,u.index),t-i);if(o+=f.text,i+=f.width,i>=t)return a?`${o}\x1B[0m`:o;o+=u[0],u[0].endsWith("m")&&(a=!jn(u[0])),c=u.index+u[0].length,u=r.exec(n)}let s=dt(n.slice(c),t-i);return o+=s.text,a?`${o}\x1B[0m`:o}function Un(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(e[n]!==t[n])return!1;return!0}function ht({stdout:e,rows:t,columns:n}={}){if(!e||typeof e.write!="function")throw new TypeError("createRenderer requires a stdout with a write(string) method");let r=Number.isFinite(t)?Math.trunc(t):null,o=Number.isFinite(n)?Math.trunc(n):null,i=r??(Number.isFinite(e.rows)?Math.trunc(e.rows):24),a=o??(Number.isFinite(e.columns)?Math.trunc(e.columns):80),c=[],u=0,s=null,f=!1,m=!1,x=()=>{r===null&&(i=Number.isFinite(e.rows)?Math.trunc(e.rows):24),o===null&&(a=Number.isFinite(e.columns)?Math.trunc(e.columns):80),f=!0},g=typeof e.on=="function";g&&e.on("resize",x);function w(h){let l=h-u;return u=h,l===0?"":l<0?`\x1B[${-l}A`:`\x1B[${l}B`}function _(h){let d=(Array.isArray(h)?h:[]).map(p=>Mn(String(p??""),a));if(s!==null)for(d.length>s&&(d=d.slice(0,s));d.length<s;)d.push("");return d}function b(h){if(!f&&Un(c,h))return;let l=[Oe];f&&c.length>0&&(l.push(w(0),"\r",me),c=[],u=0),f=!1;let d=Math.min(c.length,h.length);for(let p=0;p<d;p+=1)c[p]!==h[p]&&l.push(w(p),"\r",lt,h[p]);if(h.length>c.length){c.length>0&&l.push(w(c.length-1));for(let p=c.length;p<h.length;p+=1)p>0&&l.push(`
8
- `),l.push("\r",lt,h[p]),u=p}else h.length<c.length&&l.push(w(h.length),"\r",me);h.length>0&&l.push(w(h.length-1)),l.push(pe),c=h,e.write(l.join(""))}return{render(h){m||b(_(h))},writeAbove(h){if(m)return;let l=String(h??""),d=Oe;c.length>0&&(d+=`${w(0)}\r${me}`),d+=l.endsWith(`
9
- `)||l===""?l:`${l}
10
- `,e.write(d);let p=c;c=[],u=0,p.length>0?b(p):e.write(pe)},clear(){if(m)return;let h=Oe;c.length>0&&(h+=`${w(0)}\r${me}`),h+=pe,e.write(h),c=[],u=0,f=!1},setLines(h){s=Number.isFinite(h)&&h>=0?Math.trunc(h):null},getLines(){return c.slice()},getSize(){return{rows:i,columns:a}},dispose(){if(!m){if(m=!0,g){let h=typeof e.off=="function"?e.off:e.removeListener;typeof h=="function"&&h.call(e,"resize",x)}e.write(pe)}}}}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:"#455867",input_rule:"#455867",session_border:"#455867",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:"#23313B"});function Bn(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 n=t.length===3?[...t].map(r=>r.repeat(2)).join(""):t;return{r:Number.parseInt(n.slice(0,2),16),g:Number.parseInt(n.slice(2,4),16),b:Number.parseInt(n.slice(4,6),16)}}function xt(e,t,n){let r=Bn(t);return r?`\x1B[${e};2;${r.r};${r.g};${r.b}m${String(n)}\x1B[0m`:String(n)}function Ie({color:e=!0}={}){return e&&!Object.hasOwn(process.env,"NO_COLOR")?Object.freeze({fg:(n,r)=>xt(38,n,r),bg:(n,r)=>xt(48,n,r),bold:n=>`\x1B[1m${String(n)}\x1B[0m`,dim:n=>`\x1B[2m${String(n)}\x1B[0m`}):Object.freeze({fg:(n,r)=>String(r),bg:(n,r)=>String(r),bold:n=>String(n),dim:n=>String(n)})}var To=Ie();function gt(e){return String(e).replace(/\u001B\[[0-9;]*m/g,"")}var yt=Object.freeze([["#B8F0FF"," \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 "],["#B8F0FF"," \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 "],["#ACDEEF"," \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 "],["#A5D9EB"," \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 "],["#9FCBDD"," \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 "],["#B8F0FF"," \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 "]]),Ce="THE FUTURE IS AGENTIC / by DEMI",$e=/\u001B\[[0-9;]*m/g;function wt(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 B(e){return[...gt(e)].reduce((t,n)=>t+wt(n),0)}function Le(e,t){if(t<=0)return"";let n=String(e).split(/(\u001B\[[0-9;]*m)/g),r="",o=0,i=!1;for(let a of n)if(a){if($e.test(a)){$e.lastIndex=0,r+=a,i=a!=="\x1B[0m";continue}$e.lastIndex=0;for(let c of a){let u=wt(c);if(o+u>t)return i?`${r}\x1B[0m`:r;r+=c,o+=u}}return r}function ee(e,t,n="left"){let r=Math.max(0,Math.floor(Number(t)||0)),o=Le(String(e),r),i=Math.max(0,r-B(o));if(n==="right")return`${" ".repeat(i)}${o}`;if(n==="center"){let a=Math.floor(i/2);return`${" ".repeat(a)}${o}${" ".repeat(i-a)}`}return`${o}${" ".repeat(i)}`}function Ne(e,t){let n=Math.max(1,Math.floor(Number(t)||1)),r=[];for(let o of String(e??"").split(`
11
- `)){if(o===""){r.push("");continue}let i="",a=0;for(let c of o.split(" ")){let u=B(c);if(a>0&&a+1+u>n&&(r.push(i),i="",a=0),u>n){a>0&&(r.push(i),i="",a=0);let s=c;for(;B(s)>n;){let f=Le(s,n);r.push(f),s=s.slice(f.length)}i=s,a=B(s);continue}i=a===0?c:`${i} ${c}`,a=a===0?u:a+1+u}r.push(i)}return r}function Dn(e){let t=Math.max(0,Math.floor(Number(e)||0)),n=Math.max(36,Math.min(t-4,76)),r=Math.max(0,Math.floor((t-n)/2)),o=r+3,i=Math.max(0,n-6);return{target:t,panelWidth:n,panelLeft:r,contentLeft:o,inner:i}}function Kn(e){let t=1/0,n=-1;for(let r of e)for(let o=0;o<r.length;o+=1)r[o]!==" "&&(o<t&&(t=o),o>n&&(n=o));return n<0?{offset:0,width:0}:{offset:t,width:n-t+1}}function bt(e,t,n=0){let{target:r,contentLeft:o,inner:i}=e,c=Math.round((r-t)/2)-n-o,u=Math.max(0,i-t-n);return Math.max(0,Math.min(u,c))}function Pe({width:e,palette:t}){let n=Dn(e),{target:r,panelWidth:o,panelLeft:i,inner:a}=n;if(r<72||a<=0)return[ee(t.bold(t.fg($.accent,"oracle")),r,"center"),ee(t.fg($.banner_text,Ce),r,"center")];let c=yt.map(([,d])=>d),{offset:u,width:s}=Kn(c),f=" ".repeat(bt(n,s,u)),m=" ".repeat(bt(n,B(Ce))),x=[];for(let[d,p]of yt)x.push(t.bold(t.fg(d,`${f}${p.replace(/\s+$/,"")}`)));x.push(""),x.push(t.bold(t.fg($.banner_text,`${m}${Ce}`)));let g=d=>t.fg($.banner_border,d),w=" ".repeat(i),_="\u2500".repeat(Math.max(0,o-2)),b=d=>ee(`${w}${d}`,r),h=[b(`${g("\u256D")}${g(_)}${g("\u256E")}`)],l=b(`${g("\u2502")}${" ".repeat(Math.max(0,o-2))}${g("\u2502")}`);h.push(l);for(let d of x)h.push(b(`${g("\u2502")} ${ee(d,a)} ${g("\u2502")}`));return h.push(l),h.push(b(`${g("\u2570")}${g(_)}${g("\u256F")}`)),h}function vt({lines:e,width:t,palette:n,title:r=""}){let o=Math.max(2,Math.floor(Number(t)||0)),i=Math.max(0,o-2),a=Le(String(r),Math.max(0,i-2)),c=a?` ${a} `:"",u=`${c}${"\u2500".repeat(Math.max(0,i-B(c)))}`,s=f=>n.fg($.banner_border,f);return[`${s("\u256D")}${s(u)}${s("\u256E")}`,...e.map(f=>`${s("\u2502")}${ee(f,i)}${s("\u2502")}`),`${s("\u2570")}${s("\u2500".repeat(i))}${s("\u256F")}`]}function Te(e){let t=Number(e);return Number.isFinite(t)?t>=1e6?`${(t/1e6).toFixed(1).replace(/\.0$/,"")}M`:t>=1e3?`${(t/1e3).toFixed(0)}K`:String(Math.round(t)):"0"}function Hn(e,t){let n=Math.max(0,Math.floor(Number(t)||0)),r=Number(e),o=Number.isFinite(r)?Math.min(100,Math.max(0,r)):0,i=Math.round(n*o/100);return`${"\u2588".repeat(i)}${"\u2591".repeat(n-i)}`}function he(e){let t=Number(e);if(!Number.isFinite(t)||t<0)return"0s";let n=Math.floor(t/1e3);if(n<60)return`${n}s`;let r=Math.floor(n/60),o=n%60;return r<60?`${r}m${String(o).padStart(2,"0")}s`:`${Math.floor(r/60)}h${String(r%60).padStart(2,"0")}m`}function _t({model:e,contextTokens:t,contextLength:n,percent:r,effort:o,thinking:i,chain:a,width:c,palette:u}){let s=Math.max(0,Math.floor(Number(c)||0)),f=u.fg($.status_bar_dim," / "),m=s>=120?12:s>=60?8:4,x=Number(n)>0?`${Te(t)}/${Te(n)}`:Te(t),g=Number.isFinite(Number(r))?`${Math.round(Number(r))}%`:"0%",w=[{text:String(e??""),strong:!0}];Number(n)>0&&w.push({text:`ctx ${Hn(r,m)} ${x} ${g}`}),o&&w.push({text:String(o)}),i&&w.push({text:String(i)}),typeof a=="string"&&a.length>0&&w.push({text:a});let _=w,b=l=>l.reduce((d,p,v)=>d+B(p.text)+(v>0?3:0),0);for(;_.length>1&&b(_)>s;)_=_.slice(0,-1);let h=_.map(l=>l.strong?u.fg($.status_bar_strong,l.text):u.fg($.status_bar_text,l.text)).join(f);return u.bg($.status_bar_bg,ee(h,s))}var zn=6;function Wn(e=[]){let t={pass:[],query:null,model:null,provider:null,quiet:!1,cont:!1};for(let n=0;n<e.length;n+=1){let r=e[n];if((r==="-q"||r==="--query")&&e[n+1]){t.query=e[++n],t.pass.push("-q",t.query);continue}if((r==="--model"||r==="-m")&&e[n+1]){t.model=e[++n],t.pass.push("--model",t.model);continue}if(r==="--provider"&&e[n+1]){t.provider=e[++n],t.pass.push("--provider",t.provider);continue}if(r==="--quiet"||r==="-Q"){t.quiet=!0,t.pass.push(r);continue}if(r==="--continue"||r==="-c"){t.cont=!0,t.pass.push("--continue");continue}t.pass.push(r)}return t}function Re(e,t){if(!t||typeof t!="object")return;let n=Number(t.context_used??t.context_tokens??t.input??t.prompt),r=Number(t.context_max??t.context_length);Number.isFinite(n)&&n>0&&(e.contextTokens=n),Number.isFinite(r)&&r>0&&(e.contextLength=r);let o=Number(t.context_percent);Number.isFinite(o)?e.contextPercent=o:e.contextLength>0&&(e.contextPercent=Math.round(e.contextTokens/e.contextLength*100))}function Yn(e){let t=e.width,n=`${e.promptLabel} `,r=Math.max(1,t-2-B(n)),o=e.buffer||"",i=Math.max(0,Math.min(e.cursor??o.length,o.length)),a=0;i>r&&(a=i-r);let c=o.slice(a,a+r),u=i-a,s=c.slice(0,u),f=c.slice(u,u+1)||" ",m=c.slice(u+1),x=e.palette;return[`${x.fg($.accent,n)}${s}${x.bg($.selection_bg,f)}${m}`]}function Gn(e){let t=e.width,n=[];if(e.liveLines.length>0){for(let r of e.liveLines.slice(-zn))n.push(r);n.push("")}return n.push(...vt({lines:Yn(e),width:t,palette:e.palette,title:"Ask Oracle \u203A"})),n.push(_t({model:e.model,contextTokens:e.contextTokens,contextLength:e.contextLength,percent:e.contextPercent,effort:e.effort,thinking:e.thinking,chain:e.chain,width:t,palette:e.palette})),n}function Jn(e){let t=e?.params||e||{};return{type:t.type||e?.type||"",sessionId:t.session_id||e?.session_id||"",payload:t.payload||e?.payload||{}}}function xe(e={}){return typeof e.text=="string"?e.text:typeof e.rendered=="string"?e.rendered:typeof e.message=="string"?e.message:""}function Vn(e={}){let t=e.stdout||process.stdout,n=e.stdin||process.stdin,r=Math.max(20,Number(t.columns||e.columns||80)),o=e.palette||Ie({color:t.isTTY!==!1}),i=e.renderer||ht({stdout:t,rows:t.rows,columns:r}),a=e.client||rt({python:e.python,pythonArgs:e.pythonArgs||[],cwd:e.cwd||process.cwd(),env:e.env||process.env,spawnFn:e.spawnFn,startupTimeoutMs:e.startupTimeoutMs,requestTimeoutMs:e.requestTimeoutMs}),c=new qn,u=e.now||(()=>Date.now()),s={palette:o,width:r,promptLabel:"oracle \u203A",buffer:"",cursor:0,model:e.model||"model",contextTokens:0,contextLength:0,contextPercent:0,effort:e.effort||"",thinking:"0s",chain:(e.env||process.env).ORACLE_ACTIVE_CHAIN||"",busy:!1,cancelled:!1,sessionId:null,assistantBuffer:"",flushedLines:0,liveLines:[],startedAt:0},f=null,m=null,x={renderer:i,state:s};function g(){i.render(Gn(s))}function w(k){i.writeAbove(`${k}
12
- `)}function _(){let k=s.assistantBuffer.split(`
13
- `),y=k[k.length-1]||"";s.liveLines=y?Ne(y,s.width):[]}function b({final:k=!1}={}){let y=s.assistantBuffer.split(`
14
- `),C=k?y.length:y.length-1,F=!1;for(;s.flushedLines<C;){let I=y[s.flushedLines];for(let j of Ne(I,s.width))w(j);s.flushedLines+=1,F=!0}return k?s.liveLines=[]:_(),F}function h(){m||(m=setInterval(()=>{s.busy&&(s.thinking=he(u()-s.startedAt),g())},250),typeof m.unref=="function"&&m.unref())}function l(){m&&(clearInterval(m),m=null)}async function d(k){let y=String(k||"").trim();if(y){if(y==="/exit"||y==="/quit"){await O();return}if(y==="/clear"){i.clear();for(let C of Pe({width:s.width,palette:o}))w(C);g();return}s.busy=!0,s.assistantBuffer="",s.flushedLines=0,s.liveLines=[],s.startedAt=u(),s.thinking="0s",w(`${o.bold(o.fg($.prompt,"you"))} ${y}`),w(""),h(),g(),await a.request("prompt.submit",{session_id:s.sessionId,text:y})}}function p(k){let y=Jn(k);if(y.type!=="gateway.ready"){if(y.type==="session.info"&&y.payload){y.payload.model&&(s.model=y.payload.model),y.payload.reasoning_effort&&(s.effort=y.payload.reasoning_effort),Re(s,y.payload.usage),g();return}if(y.type==="message.start"){s.busy=!0,s.cancelled=!1,s.assistantBuffer="",s.flushedLines=0,s.liveLines=[],w(o.bold(o.fg($.accent,"oracle"))),g();return}if(y.type==="thinking.delta"||y.type==="reasoning.delta"){if(s.cancelled)return;xe(y.payload).trim()&&(s.thinking=`${he(u()-s.startedAt)}`),g();return}if(y.type==="message.delta"){if(s.cancelled)return;s.assistantBuffer+=xe(y.payload),b(),g();return}if(y.type==="message.complete"){if(s.cancelled){s.cancelled=!1;return}let C=xe(y.payload);C&&C.length>=s.assistantBuffer.length&&(s.assistantBuffer=C),b({final:!0}),w(""),s.busy=!1,l(),Re(s,y.payload?.usage||y.payload?.context),s.thinking=he(u()-s.startedAt),g();return}y.type==="error"&&(s.busy=!1,l(),w(o.fg($.error,`error: ${xe(y.payload)||"unknown"}`)),g())}}async function v(){await a.start(),a.on("event",p),a.on("log",y=>c.emit("log",y)),a.on("error",y=>c.emit("error",y));let k=await a.request("session.create",{cols:s.width,cwd:e.cwd||process.cwd(),source:"cli",profile:e.profile||"oracle",close_on_disconnect:!0,...e.model?{model:e.model}:{},...e.provider?{provider:e.provider}:{}});s.sessionId=k.session_id,s.model=k.info?.model||s.model,k.info?.reasoning_effort&&(s.effort=k.info.reasoning_effort),Re(s,k.info?.usage);for(let y of Pe({width:s.width,palette:o}))w(y);w(""),g(),f=ut({stdin:n,stdout:t,onSubmit:y=>{d(y).catch(C=>c.emit("error",C))},onCancel:()=>{s.busy&&(s.busy=!1,s.cancelled=!0,l(),b({final:!0}),w(o.fg($.warn,"interrupted")),w(""),g(),a.request("session.interrupt",{session_id:s.sessionId}).catch(y=>c.emit("error",y)))},onEof:()=>{O().catch(y=>c.emit("error",y))},onClear:()=>{i.clear(),g()},onRender:y=>{s.buffer=y.buffer||"",s.cursor=y.cursor??s.buffer.length,g()}}),f.start()}async function O(){l(),f&&f.stop(),i.dispose(),await a.stop(),c.emit("stop")}return Object.freeze({start:v,stop:O,on:c.on.bind(c),off:c.off.bind(c),state:s,handleEvent:p,submit:d})}async function Fe({hermesPython:e,client:t,tuiFactory:n=Vn,args:r=[],env:o=process.env,cwd:i=process.cwd(),stdout:a=process.stdout,stdin:c=process.stdin}={}){let u=Wn(r);if(u.query)return{native:!1,pass:u.pass};if(!c.isTTY||!a.isTTY)return{native:!1,pass:u.pass};if(o.ORACLE_NATIVE_TUI==="0")return{native:!1,pass:u.pass};let s=e;if(!t&&!s)return{native:!1,pass:u.pass};let f=de({...o,ORACLE_CHAT_SURFACE:"1",ORACLE_PROFILE:"oracle",ORACLE_NODE_BIN:process.execPath}),m=n({...t?{client:t}:{},...s?{python:s.command,pythonArgs:s.prefix||[]}:{},cwd:i,env:f,stdin:c,stdout:a,model:u.model,provider:u.provider,profile:"oracle"});return m.on("log",x=>{o.ORACLE_CLI_DEBUG&&process.stderr.write(`${x}
15
- `)}),m.on("error",x=>{process.stderr.write(`oracle chat: ${x.message}
16
- `)}),await m.start(),new Promise(x=>{let g=!1,w=async()=>{g||(g=!0,await m.stop(),x({native:!0,code:0}))};m.on("stop",()=>{g||(g=!0,x({native:!0,code:0}))}),process.once("SIGINT",w),process.once("SIGTERM",w)})}var St=Object.freeze({openrouter:{key:"OPENROUTER_API_KEY",baseUrl:"https://openrouter.ai/api/v1",model:"openrouter/auto"},openai:{key:"OPENAI_API_KEY",baseUrl:"https://api.openai.com/v1",model:"gpt-4.1-mini"},xai:{key:"XAI_API_KEY",baseUrl:"https://api.x.ai/v1",model:"grok-4-latest"},deepseek:{key:"DEEPSEEK_API_KEY",baseUrl:"https://api.deepseek.com/v1",model:"deepseek-chat"},gemini:{key:"GEMINI_API_KEY",alternateKey:"GOOGLE_API_KEY",baseUrl:"https://generativelanguage.googleapis.com/v1beta/openai",model:"gemini-2.5-flash"}}),Xn=Object.freeze({"anthropic-oauth":{baseUrl:"https://api.anthropic.com/v1",model:"claude-sonnet-4-6",protocol:"anthropic-messages"},"openai-codex":{baseUrl:"https://chatgpt.com/backend-api/codex",model:"gpt-5.6-sol",protocol:"responses"},"xai-oauth":{baseUrl:"https://api.x.ai/v1",model:"grok-4.5",protocol:"responses"}});function Qn(e,t){let n=Number.parseInt(String(e||""),10);return Number.isFinite(n)&&n>0?n:t}function Zn(e,t={}){let n=String(e.ORACLE_PROVIDER||t.provider||"").trim().toLowerCase();if(n)return n;if(e.ORACLE_BASE_URL)return"custom";for(let[r,o]of Object.entries(St))if(e[o.key]||o.alternateKey&&e[o.alternateKey])return r;return null}function er(e=process.env,t={},n=()=>!1,r=()=>""){let o=Zn(e,t);if(!o)return null;let i=Xn[o],a=St[o]||i,c=String(e.ORACLE_API_KEY_ENV||t.apiKeyEnv||""),u=String(e.ORACLE_API_KEY||c&&e[c]||a&&(e[a.key]||a.alternateKey&&e[a.alternateKey])||r(o)||""),s=String(i?i.baseUrl:o==="custom"?e.ORACLE_BASE_URL||t.baseUrl||"":a?.baseUrl||"").replace(/\/+$/,""),f=String(e.ORACLE_MODEL||t.model||a?.model||"");if(!s||!f)return null;let m=!!(i&&n(o));return i&&!m||!i&&o!=="custom"&&!u?null:{kind:"standalone",provider:o,model:f,baseUrl:s,...m?{authType:"oauth",protocol:i.protocol}:{apiKey:u},contextLength:Qn(e.ORACLE_CONTEXT_LENGTH||t.contextLength,128e3),reasoningEffort:String(e.ORACLE_REASONING_EFFORT||t.reasoningEffort||"high")}}function ge(e=""){return["Oracle standalone chat does not require Hermes.","Set OPENROUTER_API_KEY, run `oracle auth login claude|codex|grok`, or configure a custom OpenAI-compatible endpoint.","If Hermes is installed, Oracle will reuse it automatically.",e].filter(Boolean).join(`
17
- `)}function kt({env:e=process.env,hermes:t={ok:!1},storedConfig:n=null,oauthAvailable:r=()=>!1,apiKeyResolver:o=()=>""}={}){let i=String(e.ORACLE_CHAT_BACKEND||n?.backend||"auto").trim().toLowerCase(),a=er(e,n||{},r,o);return i==="standalone"?a?{kind:"standalone",config:a}:{kind:"unconfigured",reason:ge("ORACLE_CHAT_BACKEND=standalone was requested, but no standalone model is configured.")}:i==="hermes"?t?.ok?{kind:"hermes",bin:t.bin}:{kind:"unconfigured",reason:ge("ORACLE_CHAT_BACKEND=hermes was requested, but Hermes was not found.")}:i!=="auto"?{kind:"unconfigured",reason:ge(`Unknown ORACLE_CHAT_BACKEND value: ${i}`)}:t?.ok?{kind:"hermes",bin:t.bin}:a?{kind:"standalone",config:a}:{kind:"unconfigured",reason:ge()}}Y();import hr from"node:fs";import Ft from"node:path";import{randomUUID as Nt}from"node:crypto";import{EventEmitter as xr}from"node:events";import{spawnSync as gr}from"node:child_process";var yr=new Set(["chain","data","scan","route","prepare"]),br=new Set(["list","show"]),wr=new Set(["call","catalog","health"]),vr=new Set(["swap","bridge","prepare","prepare-bridge"]),_r=Object.freeze({"anthropic-oauth":"https://api.anthropic.com/v1","openai-codex":"https://chatgpt.com/backend-api/codex","xai-oauth":"https://api.x.ai/v1"}),ze=2e4,Pt=6,J=Object.freeze({type:"function",function:{name:"oracle_cli",description:"Run a bounded read or prepare-only Oracle CLI command. It cannot sign or broadcast transactions.",parameters:{type:"object",properties:{argv:{type:"array",items:{type:"string"},minItems:1,maxItems:24,description:'Arguments after the oracle executable, for example ["scan","chains"] or ["data","health"].'}},required:["argv"],additionalProperties:!1}}});function Rt(e){let t=String(e||"");return t.length<=ze?t:`${t.slice(0,ze)}
18
- [truncated ${t.length-ze} chars]`}function Sr(e){if(!Array.isArray(e)||e.length===0||e.length>24)return"argv must contain 1 to 24 arguments";if(e.some(n=>typeof n!="string"||n.length>1e3))return"every argument must be a string no longer than 1000 characters";let t=e[0];return yr.has(t)?t==="chain"&&!br.has(e[1]||"list")?`command not allowed: chain${e[1]?` ${e[1]}`:""}`:t==="data"&&!wr.has(e[1]||"")?`command not allowed: data${e[1]?` ${e[1]}`:""}`:t==="route"&&!vr.has(e[1]||"")?`command not allowed: route${e[1]?` ${e[1]}`:""}`:null:`command not allowed: ${t}`}async function kr(e,t={}){let n=Sr(e);if(n)return{ok:!1,error:n};let r=t.spawnFn||gr,o=t.packageRoot||M,i=r(process.execPath,[Ft.join(o,"bin","oracle.mjs"),...e],{encoding:"utf8",timeout:t.timeoutMs||45e3,maxBuffer:1024*1024,env:{...process.env,ORACLE_CHAT_TOOL:"1"}});return i.error?{ok:!1,error:i.error.message}:{ok:i.status===0,status:typeof i.status=="number"?i.status:1,stdout:Rt(i.stdout),stderr:Rt(i.stderr)}}function Er(){let e=Ft.join(M,"profiles","oracle","SOUL.md");return`${hr.readFileSync(e,"utf8").trim()}
19
-
20
- You have one bounded tool named oracle_cli. Use it for live chain facts, scans, route comparison, and unsigned preparation. Never claim a tool action succeeded unless its returned output proves it.`}function Ar(e,t,n={}){return{method:"event",params:{type:e,session_id:t,payload:n}}}async function Or(e){return new Error(`model request failed (HTTP ${e?.status||"unknown"})`)}async function*Ye(e){if(!e?.ok)throw await Or(e);if(!e.body)throw new Error("model response had no body");let t=e.body.getReader(),n=new TextDecoder,r="";for(;;){let{value:i,done:a}=await t.read();r+=n.decode(i||new Uint8Array,{stream:!a});let c=r.split(/\r?\n\r?\n/);r=c.pop()||"";for(let u of c){let s=u.split(/\r?\n/).filter(f=>f.startsWith("data:")).map(f=>f.slice(5).trimStart()).join(`
21
- `);!s||s==="[DONE]"||(yield JSON.parse(s))}if(a)break}let o=r.trim();if(o.startsWith("data:")){let i=o.slice(5).trim();i&&i!=="[DONE]"&&(yield JSON.parse(i))}}function Ir(e,t){let n=Number(t.index||0),r=e.get(n)||{id:"",type:"function",function:{name:"",arguments:""}};t.id&&(r.id+=t.id),t.type&&(r.type=t.type),t.function?.name&&(r.function.name+=t.function.name),t.function?.arguments&&(r.function.arguments+=t.function.arguments),e.set(n,r)}function Cr(e,t){let n=Number(e?.prompt_tokens||e?.input_tokens||0),r=Number(e?.completion_tokens||e?.output_tokens||0);return{context_used:n,context_max:t,context_percent:t>0?Math.round(n/t*100):0,input:n,output:r}}function $r(){return{type:"function",name:J.function.name,description:J.function.description,parameters:J.function.parameters,strict:!1}}function Tr(){return{name:J.function.name,description:J.function.description,input_schema:J.function.parameters}}function We(e,t,n){let r=Array.isArray(n)?n:[{type:"text",text:String(n||"")}],o=e.at(-1);o?.role===t?o.content.push(...r):e.push({role:t,content:r})}function Lr(e){let t=[];for(let n of e)if(n.role!=="system"){if(n.role==="user"){We(t,"user",[{type:"text",text:String(n.content||"")}]);continue}if(n.role==="assistant"){let r=[];n.content&&r.push({type:"text",text:String(n.content)});for(let o of n.tool_calls||[]){let i={};try{i=JSON.parse(o.function?.arguments||"{}")}catch{}r.push({type:"tool_use",id:o.id,name:o.function?.name,input:i})}r.length&&We(t,"assistant",r);continue}n.role==="tool"&&We(t,"user",[{type:"tool_result",tool_use_id:n.tool_call_id,content:String(n.content||"")}])}return t}function Nr(e){let t=[];for(let n of e)if(n.role!=="system"){if(n.role==="user"){t.push({role:"user",content:[{type:"input_text",text:String(n.content||"")}]});continue}if(n.role==="assistant"){n.content&&t.push({role:"assistant",status:"completed",content:[{type:"output_text",text:String(n.content)}]});for(let r of n.tool_calls||[])t.push({type:"function_call",id:r.response_item_id||void 0,call_id:r.id,name:r.function?.name,arguments:r.function?.arguments||"{}"});continue}n.role==="tool"&&t.push({type:"function_call_output",call_id:n.tool_call_id,output:String(n.content||"")})}return t.map(n=>Object.fromEntries(Object.entries(n).filter(([,r])=>r!==void 0)))}function Pr(e){try{let t=JSON.parse(Buffer.from(String(e).split(".")[1],"base64url").toString("utf8"));return String(t?.["https://api.openai.com/auth"]?.chatgpt_account_id||"")}catch{return""}}async function Rr({config:e,messages:t,fetchFn:n,signal:r,onText:o}){let i=await n(`${e.baseUrl}/chat/completions`,{method:"POST",headers:{"content-type":"application/json",...e.apiKey?{Authorization:`Bearer ${e.apiKey}`}:{},...e.provider==="openrouter"?{"HTTP-Referer":"https://oracle-agent.dev","X-Title":"Oracle CLI"}:{}},body:JSON.stringify({model:e.model,messages:t,tools:[J],tool_choice:"auto",stream:!0,stream_options:{include_usage:!0}}),signal:r}),a=new Map,c="",u=null;for await(let s of Ye(i)){s.usage&&(u=s.usage);let f=s.choices?.[0]?.delta||{};typeof f.content=="string"&&f.content&&(c+=f.content,o(f.content));for(let m of f.tool_calls||[])Ir(a,m)}return{text:c,usage:u,toolCalls:[...a.entries()].sort(([s],[f])=>s-f).map(([,s])=>s)}}async function Fr({config:e,messages:t,persona:n,credential:r,fetchFn:o,signal:i,onText:a}){let c=await o(`${e.baseUrl}/messages`,{method:"POST",headers:{"content-type":"application/json",accept:"text/event-stream",Authorization:`Bearer ${r.accessToken}`,"anthropic-version":"2023-06-01","anthropic-beta":"interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14,claude-code-20250219,oauth-2025-04-20","user-agent":`claude-code/${process.env.ORACLE_CLAUDE_CODE_VERSION||"2.1.220"} (external, cli)`,"x-app":"cli"},body:JSON.stringify({model:e.model,max_tokens:Number(e.maxOutputTokens||8192),system:[{type:"text",text:"You are Claude Code, Anthropic's official CLI for Claude."},{type:"text",text:n}],messages:Lr(t),tools:[Tr()],tool_choice:{type:"auto"},stream:!0}),signal:i}),u=new Map,s="",f=null;for await(let m of Ye(c)){if(m.type==="message_start"&&(f={...f||{},...m.message?.usage||{}}),m.type==="message_delta"&&(f={...f||{},...m.usage||{}}),m.type==="content_block_start"&&m.content_block?.type==="tool_use"){let x=m.content_block;u.set(Number(m.index||0),{id:x.id,type:"function",function:{name:x.name,arguments:x.input&&Object.keys(x.input).length?JSON.stringify(x.input):""}})}if(m.type==="content_block_delta"&&m.delta?.type==="text_delta"&&(s+=m.delta.text||"",m.delta.text&&a(m.delta.text)),m.type==="content_block_delta"&&m.delta?.type==="input_json_delta"){let x=Number(m.index||0),g=u.get(x);g&&(g.function.arguments+=m.delta.partial_json||"")}if(m.type==="error")throw new Error(m.error?.message||"Claude stream failed")}return{text:s,usage:f,toolCalls:[...u.entries()].sort(([m],[x])=>m-x).map(([,m])=>(m.function.arguments||(m.function.arguments="{}"),m))}}async function jr({config:e,messages:t,persona:n,sessionId:r,credential:o,fetchFn:i,signal:a,onText:c}){let u=e.provider==="openai-codex",s=u?Pr(o.accessToken):"",f={"content-type":"application/json",accept:"text/event-stream",Authorization:`Bearer ${o.accessToken}`,...u?{"user-agent":"codex_cli_rs/0.0.0 (Oracle CLI)",originator:"codex_cli_rs",...s?{"ChatGPT-Account-ID":s}:{},session_id:r,"x-client-request-id":r}:{"x-grok-conv-id":r}},m={model:e.model,instructions:n,input:Nr(t),tools:[$r()],tool_choice:"auto",parallel_tool_calls:!0,store:!1,stream:!0,...u?{reasoning:{effort:e.reasoningEffort||"high",summary:"auto"}}:{}},x=await i(`${e.baseUrl}/responses`,{method:"POST",headers:f,body:JSON.stringify(m),signal:a}),g=new Map,w="",_=null;for await(let b of Ye(x)){b.type==="response.output_text.delta"&&typeof b.delta=="string"&&(w+=b.delta,c(b.delta));let h=b.item;if((b.type==="response.output_item.added"||b.type==="response.output_item.done")&&h?.type==="function_call"){let l=String(h.call_id||h.id||b.output_index||g.size);g.set(l,{id:h.call_id||h.id,response_item_id:h.id,type:"function",function:{name:h.name,arguments:h.arguments||"{}"}})}if(b.type==="response.function_call_arguments.delta"){let l=String(b.call_id||b.item_id||b.output_index||""),d=g.get(l);d&&(d.function.arguments+=b.delta||"")}if(b.type==="response.completed"&&(_=b.response?.usage||_),b.type==="response.failed"||b.type==="error")throw new Error(b.response?.error?.message||b.error?.message||"Responses stream failed")}return{text:w,usage:_,toolCalls:[...g.values()]}}function jt(e={}){let t=e.config;if(!t?.baseUrl||!t?.model)throw new Error("standalone model configuration is incomplete");if(t.authType==="oauth"){let l=_r[t.provider],d=String(t.baseUrl).replace(/\/+$/,"");if(!l||d!==l)throw new Error(`${t.provider||"unknown"} OAuth endpoint is not trusted`)}let n=new xr,r=e.fetchFn||globalThis.fetch,o=e.toolRunner||(l=>kr(l,e)),i=e.credentialProvider||(async l=>{let{resolveOAuthCredentials:d}=await Promise.resolve().then(()=>(qe(),Lt));return d(l)}),a=e.persona||Er(),c=e.sessionId||`oracle-${Nt()}`,u=[],s=null,f=!1,m=!1;function x(l,d={}){n.emit("event",Ar(l,c,d))}function g(l){x("error",{message:l?.message||String(l)}),n.listenerCount("error")>0&&n.emit("error",l)}async function w(l){m=!0,s=new AbortController;let d=[{role:"system",content:a},...u,{role:"user",content:l}],p="",v=null,O=!1;try{for(let k=0;k<Pt;k+=1){let y=t.authType==="oauth"?await i(t.provider):null,C=W=>{O||(x("message.start",{}),O=!0),p+=W,x("message.delta",{text:W})},F={config:t,messages:d,persona:a,sessionId:c,credential:y,fetchFn:r,signal:s.signal,onText:C},I=t.protocol==="anthropic-messages"?await Fr(F):t.protocol==="responses"?await jr(F):await Rr(F),j=I.text,V=I.toolCalls;if(v=I.usage||v,V.length===0){d.push({role:"assistant",content:j}),u=d.slice(1),O||x("message.start",{}),x("message.complete",{text:p,usage:Cr(v,t.contextLength)});return}d.push({role:"assistant",content:j||null,tool_calls:V});for(let W of V){let ve;try{let _e=JSON.parse(W.function.arguments||"{}");ve=W.function.name==="oracle_cli"?await o(_e.argv):{ok:!1,error:`unknown tool: ${W.function.name}`}}catch(_e){ve={ok:!1,error:`invalid tool arguments: ${_e.message}`}}d.push({role:"tool",tool_call_id:W.id||`call_${Nt()}`,content:JSON.stringify(ve)})}}throw new Error(`agent exceeded ${Pt} tool steps`)}catch(k){k?.name!=="AbortError"&&g(k)}finally{m=!1,s=null}}async function _(){if(f)throw new Error("standalone client is stopped")}async function b(l,d={}){if(f)throw new Error("standalone client is stopped");if(l==="session.create")return x("session.info",{model:d.model||t.model,reasoning_effort:t.reasoningEffort,usage:{context_max:t.contextLength},backend:"standalone"}),{session_id:c,info:{model:d.model||t.model,reasoning_effort:t.reasoningEffort,usage:{context_max:t.contextLength},backend:"standalone"}};if(l==="prompt.submit"){if(m)throw new Error("a turn is already active");let p=String(d.text||"").trim();if(!p)throw new Error("prompt text is required");return queueMicrotask(()=>{w(p).catch(g)}),{accepted:!0}}if(l==="session.interrupt"){let p=!!(s&&m);return s?.abort(),{interrupted:p}}if(l==="session.usage")return{calls:0,input:0,output:0,total:0};throw new Error(`unsupported standalone method: ${l}`)}async function h(){f||(f=!0,s?.abort())}return Object.freeze({start:_,request:b,stop:h,on:n.on.bind(n),off:n.off.bind(n)})}async function Mt({client:e,text:t,stdout:n=process.stdout,stderr:r=process.stderr}={}){if(!e)throw new Error("standalone client is required");await e.start();let o=await e.request("session.create",{source:"cli"}),i="",a=!1;try{return await new Promise((c,u)=>{let s=f=>{let m=f?.params?.type,x=f?.params?.payload||{};if(m==="message.delta"&&typeof x.text=="string"){i+=x.text,n.write(x.text);return}if(m==="message.complete"){!i&&x.text&&n.write(String(x.text)),n.write(`
22
- `),a=!0,c(0);return}if(m==="error"){let g=x.message||x.text||"standalone chat failed";r.write(`oracle chat: ${g}
23
- `),a=!0,u(new Error(g))}};e.on("event",s),e.request("prompt.submit",{session_id:o.session_id,text:t}).catch(f=>{a||(a=!0,u(f))})})}finally{await e.stop()}}qe();var T="oracle",le="oracle";function Ht(e){if(e==="hermes"){let t=se();return t.ok?t.bin:null}for(let t of(process.env.PATH||"").split(S.delimiter)){let n=S.join(t,e);try{if(A.existsSync(n))return n}catch{}}return null}function Ut(e){try{let t=A.readFileSync(e,"utf8").split(/\r?\n/,1)[0];if(!t.startsWith("#!"))return null;let n=t.slice(2).trim().split(/\s+/);if(n[0]?.endsWith("/env")&&n[1]?.startsWith("python"))return{command:n[0],prefix:[n[1]]};if(S.basename(n[0]||"").startsWith("python"))return{command:n[0],prefix:n.slice(1)}}catch{}return null}function qt(e){let t=Ut(e);if(t)return t;try{let r=A.readFileSync(e,"utf8").match(/["']([^"'\r\n]+\/bin\/hermes)["']/);if(r)return Ut(r[1])}catch{}return null}function Ur(){return S.join(M,"src","cli","oracle-harness.py")}function we(e,t){let n=Ur(),r=process.env.ORACLE_PLAIN_HARNESS==="0"?null:qt(e);return r&&A.existsSync(n)?{command:r.command,args:[...r.prefix,n,...t]}:{command:e,args:t}}function Br(){return S.join(M,"skins","oracle.yaml")}function Dr(e=T){let t=S.join(M,"profiles","oracle","SOUL.md");if(!A.existsSync(t))return{ok:!1,reason:"oracle persona missing from package"};let n=S.join(U(),"profiles",e,"SOUL.md");return A.existsSync(n)&&!A.readFileSync(n,"utf8").startsWith("You are Hermes Agent, an intelligent AI assistant created by Nous Research.")?{ok:!0,reused:!0}:(L(S.dirname(n)),A.copyFileSync(t,n),{ok:!0,reused:!1})}function Kr(e=T){let t=Br();if(!A.existsSync(t))return{ok:!1,reason:"skin missing from package"};let n=S.join(U(),"skins"),r=S.join(U(),"profiles",e,"skins");L(n),L(r);let o=A.readFileSync(t,"utf8");return A.writeFileSync(S.join(n,`${le}.yaml`),o),A.writeFileSync(S.join(r,`${le}.yaml`),o),{ok:!0,skin:le}}function Hr(e=T){let t=S.join(U(),"profiles",e,"config.yaml");if(!A.existsSync(t))return{ok:!1,reason:"profile config missing"};let n=Ht("oracle")||S.join(M,"bin","oracle.mjs"),r=S.join(U(),"profiles",e,"oracle");L(r);let o={profile:e,skin:le,oracleBin:n,commands:{chain:[n,"chain"],setup:[n,"setup"]},updatedAt:new Date().toISOString()};return A.writeFileSync(S.join(r,"chat-surface.json"),JSON.stringify(o,null,2)+`
24
- `,{mode:384}),{ok:!0,marker:o}}function qr(e=T){let t=S.join(M,"skills","oracle-chat");if(!A.existsSync(t))return{ok:!1,reason:"oracle-chat skill missing"};let n=S.join(U(),"profiles",e,"skills","oracle-chat");L(n);for(let r of A.readdirSync(t)){let o=S.join(t,r),i=S.join(n,r);A.statSync(o).isFile()&&A.copyFileSync(o,i)}for(let r of["chain","setup"]){let o=S.join(U(),"profiles",e,"skills",r);L(o);let i=S.join(t,`${r}.SKILL.md`),a=S.join(t,"SKILL.md"),c=A.existsSync(i)?A.readFileSync(i,"utf8"):A.readFileSync(a,"utf8");A.writeFileSync(S.join(o,"SKILL.md"),c)}return{ok:!0}}function zr(e=T){let t=Ht("hermes");if(!t)return{ok:!1,reason:"hermes missing"};let n=Mr(t,["-p",e,"config","set","display.skin",le],{encoding:"utf8",timeout:3e4});return n.status!==0?{ok:!1,reason:(n.stderr||n.stdout||"config set failed").trim()}:{ok:!0}}function Bt(e){if(!A.existsSync(e))return!1;let t=A.readFileSync(e,"utf8");if(/^model:\s*\S+/m.test(t))return!0;let n=t.match(/^model:\s*\n((?:[ \t]+.*(?:\n|$))*)/m)?.[1]||"";return/^\s+(?:default|provider):\s*\S+/m.test(n)}function Wr(e=T){let t=U();if(A.existsSync(S.join(t,"auth.json"))||A.existsSync(S.join(t,"profiles",e,"auth.json")))return!0;let n=["OPENROUTER_API_KEY","ANTHROPIC_API_KEY","OPENAI_API_KEY","XAI_API_KEY","GOOGLE_API_KEY","GEMINI_API_KEY","DEEPSEEK_API_KEY","HF_TOKEN","GLM_API_KEY","KIMI_API_KEY","MINIMAX_API_KEY"];if(n.some(r=>process.env[r]))return!0;for(let r of[S.join(t,".env"),S.join(t,"profiles",e,".env")]){if(!A.existsSync(r))continue;let o=A.readFileSync(r,"utf8");if(n.some(i=>new RegExp(`^${i}=.+`,"m").test(o)))return!0}return!1}function Dt(e=T){let t=U();return Bt(S.join(t,"config.yaml"))||Bt(S.join(t,"profiles",e,"config.yaml"))||Wr(e)}function Kt(){return["oracle chat, filled lowercase oracle chat",""," oracle chat open interactive oracle chat",' oracle chat -q "..." one-shot query'," oracle chat --model <m> use a model for this session"," oracle chat --print-banner show filled oracle banner only","","inside chat:"," /chain list/select chains"," /setup messaging setup menu"," /model switch models (still one oracle persona)","","brand: filled lowercase oracle / classic boxed layout"].join(`
25
- `)}function Yr(){let e=Number(process.stdout?.columns||process.env.COLUMNS||80);return Number.isFinite(e)&&e>0?Math.floor(e):80}function Gr(e){return Array.from(String(e)).length}function Jr(e,t){let n=e.map(a=>a.trimEnd()),r=Math.max(0,...n.map(a=>Gr(a))),o=Math.max(0,Math.floor((t-r)/2)),i=" ".repeat(o);return n.map(a=>a?`${i}${a}`:"")}function Vr(){let e=[""," \u2588\u2588\u2588\u2588"," \u2591\u2591\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\u2588 \u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588"," \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","\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","\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","\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"," \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",""];process.stdout.write(Jr(e,Yr()).join(`
26
- `)+`
27
- `)}function Xr(e){let t={pass:[],query:null,model:null,provider:null};for(let n=0;n<e.length;n+=1){let r=e[n];if((r==="--model"||r==="-m")&&e[n+1]){t.model=e[++n],t.pass.push("--model",t.model);continue}if(r==="--provider"&&e[n+1]){t.provider=e[++n],t.pass.push("--provider",t.provider);continue}if((r==="-q"||r==="--query")&&e[n+1]){t.query=e[++n],t.pass.push("-q",t.query);continue}if(r==="--quiet"||r==="-Q"){t.pass.push("--quiet");continue}if(r==="--continue"||r==="-c"){t.pass.push("--continue");continue}t.pass.push(r)}return t}var hi={name:"chat",summary:"open the one oracle chat surface (telegram-like, multi-model)",group:"read",usage:Kt(),async run(e){let t=[...e.argv];if(t.includes("-h")||t.includes("--help"))return process.stdout.write(Kt()+`
28
- `),0;if(t.includes("--print-banner"))return Vr(),0;let n=Xr(t),r={...process.env,...n.model?{ORACLE_MODEL:n.model}:{},...n.provider?{ORACLE_PROVIDER:n.provider}:{}},o=re(),i=kt({env:r,hermes:se(),storedConfig:ae(),oauthAvailable:w=>!!o.get(w),apiKeyResolver:w=>o.getApiKey(w)});if(i.kind==="unconfigured")return process.stderr.write(`${i.reason}
29
- `),1;let a=de({ORACLE_CHAT_SURFACE:"1",ORACLE_PROFILE:T,ORACLE_NODE_BIN:process.execPath,ORACLE_CLI_ENTRY:S.join(M,"bin","oracle.mjs")});if(i.kind==="standalone"){let w=jt({config:{...i.config,...n.model?{model:n.model}:{}}});if(n.query)try{return await Mt({client:w,text:n.query,stdout:process.stdout,stderr:process.stderr})}catch{return 1}let _=await Fe({client:w,args:t,env:a,cwd:process.cwd(),stdin:process.stdin,stdout:process.stdout});return _.native?_.code:(process.stderr.write(process.env.ORACLE_NATIVE_TUI==="0"?`oracle standalone chat requires the native TUI; remove ORACLE_NATIVE_TUI=0
30
- `:`oracle standalone chat requires an interactive TTY or -q <query>
31
- `),1)}let c=i.bin;Dr(T),Kr(T),qr(T);let u=zr(T);Hr(T),!u.ok&&process.env.ORACLE_CLI_DEBUG&&process.stderr.write(`oracle chat: skin note: ${u.reason}
32
- `);let s=!!(n.model||n.provider);if(!Dt(T)&&!s){if(!process.stdin.isTTY||!process.stdout.isTTY)return process.stderr.write(`oracle chat needs a configured model
33
- run: oracle model
34
- `),1;process.stdout.write(`choose oracle's model before first chat
35
-
36
- `);let w=we(c,["-p",T,"model"]),_=await oe(w.command,w.args,{stdio:"inherit",env:process.env},"oracle-model");if(_!==0||!Dt(T))return _||1}let f=["-p",T,"chat"],m=qt(c),x=await Fe({hermesPython:m,args:t,env:a,cwd:process.cwd(),stdin:process.stdin,stdout:process.stdout});if(x.native)return x.code;let g=we(c,[...f,...n.pass]);return oe(g.command,g.args,{stdio:"inherit",env:a},"oracle-chat")}};function z(e,t){let n=e.indexOf(t);return n>=0&&e[n+1]?e[n+1]:null}function Qr(e){let t=z(e,"--backend"),n=z(e,"--provider"),r=z(e,"--model")||z(e,"-m"),o=z(e,"--base-url"),i=z(e,"--api-key-env"),a=z(e,"--context-length"),c=z(e,"--reasoning-effort");if(!t&&!!!(n||r||o||i||a||c))return null;let s={...ae()||{}};return n&&(delete s.apiKeyEnv,(n!=="custom"||n!==s.provider)&&delete s.baseUrl),{...s,backend:t||"standalone",...n?{provider:n}:{},...r?{model:r}:{},...o?{baseUrl:o}:{},...i?{apiKeyEnv:i}:{},...a?{contextLength:a}:{},...c?{reasoningEffort:c}:{}}}function Zr(){return["oracle model, choose standalone model settings or open Hermes' picker",""," oracle model"," oracle model --show"," oracle model --backend standalone --provider openrouter --model openrouter/auto"," oracle model --backend auto","","standalone keys stay in environment variables, never model.json:"," OPENROUTER_API_KEY, OPENAI_API_KEY, XAI_API_KEY, DEEPSEEK_API_KEY, GEMINI_API_KEY"].join(`
37
- `)}var vi={name:"model",summary:"choose Oracle's standalone model or existing Hermes provider",group:"read",usage:Zr(),async run(e){let t=[...e.argv];if(t.includes("--show"))return process.stdout.write(`${JSON.stringify(ae()||{backend:"auto"},null,2)}
38
- `),0;let n=Qr(t);if(n)try{let i=Ze(n);return process.stdout.write(`oracle model: ${i.backend}`),i.provider&&process.stdout.write(` / ${i.provider}`),i.model&&process.stdout.write(` / ${i.model}`),process.stdout.write(`
39
- `),i.backend==="standalone"&&i.apiKeyEnv&&process.stdout.write(`key source: ${i.apiKeyEnv}
40
- `),0}catch(i){return process.stderr.write(`oracle model: ${i.message}
41
- `),1}let r=se();if(!r.ok)return process.stderr.write(`Oracle standalone chat does not require Hermes.
42
- Configure a provider with: oracle model --backend standalone --provider openrouter --model openrouter/auto
43
- Then set OPENROUTER_API_KEY.
44
- `),1;let o=we(r.bin,["-p","oracle","model",...t]);return oe(o.command,o.args,{stdio:"inherit",env:process.env},"oracle-model")}};export{vi as default};
@@ -1,2 +0,0 @@
1
- import{spawnSync as o}from"node:child_process";import t from"node:path";var p={name:"prepare",summary:"build an unsigned swap (alias of route prepare)",group:"read",usage:"oracle prepare <chain> <tokenIn> <tokenOut> <taker> [amt]",async run(e){let a=t.join(e.root,"bin","oracle-route.mjs"),r=o(process.execPath,[a,"prepare",...e.argv],{stdio:"inherit"});return r.error?(process.stderr.write(`oracle: failed to spawn oracle-route: ${r.error.message}
2
- `),1):typeof r.status=="number"?r.status:1}};export{p as default};
@@ -1,3 +0,0 @@
1
- import v from"node:path";import{parseArgs as b}from"node:util";import{spawn as g}from"node:child_process";var m=["SIGINT","SIGTERM","SIGHUP"];function d(o,c=[],s={},n=o){return new Promise(l=>{let e=g(o,c,s),i=!1,a=null,p=new Map(m.map(r=>[r,()=>{a||=r,e.exitCode===null&&e.signalCode===null&&e.kill(r)}]));for(let[r,t]of p)process.on(r,t);let u=()=>{for(let[r,t]of p)process.off(r,t)};e.once("error",r=>{i||(i=!0,u(),process.stderr.write(`oracle: could not start ${n}: ${r.message}
2
- `),l(1))}),e.once("exit",(r,t)=>{if(i)return;i=!0,u();let f=a||t;if(f){process.kill(process.pid,f);return}l(r??1)})})}var I={name:"public",summary:"secret-free public HTTP surface",group:"read",usage:"oracle public serve [--port N]",async run(o){if((o.argv[0]||"serve")!=="serve")return process.stderr.write(`usage: oracle public serve [--port N]
3
- `),1;let s=null;try{let{values:e}=b({args:o.argv.slice(1),options:{port:{type:"string"}},allowPositionals:!0,strict:!1});s=e.port||null}catch{}let n={...process.env};s&&(n.ORACLE_PUBLIC_PORT=String(s));let l=v.join(o.root,"bin","oracle-public-server.mjs");return d(process.execPath,[l],{stdio:"inherit",env:n},"oracle-public-server")}};export{I as default};
@@ -1,2 +0,0 @@
1
- import{spawnSync as a}from"node:child_process";import t from"node:path";var n={name:"route",summary:"swap/bridge prepare helpers",group:"read",usage:"oracle route <swap|bridge|prepare|prepare-bridge> ...",async run(e){let o=t.join(e.root,"bin","oracle-route.mjs"),r=a(process.execPath,[o,...e.argv],{stdio:"inherit"});return r.error?(process.stderr.write(`oracle: failed to spawn oracle-route: ${r.error.message}
2
- `),1):typeof r.status=="number"?r.status:1}};export{n as default};
@@ -1 +0,0 @@
1
- var n={name:"runner",summary:"action runner daemon",group:"sign",usage:"oracle runner [--interval-ms N ...]",async run(r){return r.dispatchOperator("oracle-runner",r.argv,{appendHintOnError:!0})}};export{n as default};
@@ -1,2 +0,0 @@
1
- import{spawnSync as a}from"node:child_process";import o from"node:path";var c={name:"scan",summary:"chain scanner",group:"read",usage:"oracle scan <chains|head|token|pools|risk|quote|sell> ...",async run(e){let s=o.join(e.root,"bin","oracle-scan.mjs"),r=a(process.execPath,[s,...e.argv],{stdio:"inherit"});return r.error?(process.stderr.write(`oracle: failed to spawn oracle-scan: ${r.error.message}
2
- `),1):typeof r.status=="number"?r.status:1}};export{c as default};
@@ -1,34 +0,0 @@
1
- import{spawnSync as we}from"node:child_process";import{stdin as m,stdout as J}from"node:process";var j=Object.freeze([{key:"telegram",name:"telegram",hermes:["gateway","setup"],required:["TELEGRAM_BOT_TOKEN"],optional:["TELEGRAM_ALLOWED_USERS","TELEGRAM_PROXY"],note:"dms \xB7 groups \xB7 topics"},{key:"discord",name:"discord",hermes:["gateway","setup"],required:["DISCORD_BOT_TOKEN"],optional:["DISCORD_ALLOWED_USERS"],note:"dms \xB7 channels \xB7 threads"},{key:"slack",name:"slack",hermes:["gateway","setup"],required:["SLACK_BOT_TOKEN","SLACK_APP_TOKEN"],optional:["SLACK_ALLOWED_USERS"],note:"socket mode"},{key:"whatsapp",name:"whatsapp",hermes:["whatsapp"],required:[],optional:["WHATSAPP_ALLOWED_USERS","WHATSAPP_MODE"],note:"qr bridge"},{key:"whatsapp-cloud",name:"whatsapp cloud",hermes:["whatsapp-cloud"],required:[],optional:[],note:"business cloud api"},{key:"signal",name:"signal",hermes:["gateway","setup"],required:["SIGNAL_HTTP_URL","SIGNAL_ACCOUNT"],optional:["SIGNAL_ALLOWED_USERS"],note:"signal-cli rest bridge"},{key:"matrix",name:"matrix",hermes:["gateway","setup"],required:["MATRIX_HOMESERVER","MATRIX_ACCESS_TOKEN","MATRIX_USER_ID"],optional:["MATRIX_ALLOWED_USERS"],note:"rooms \xB7 dms"},{key:"mattermost",name:"mattermost",hermes:["gateway","setup"],required:["MATTERMOST_URL","MATTERMOST_TOKEN"],optional:["MATTERMOST_ALLOWED_USERS"],note:"channels \xB7 dms"},{key:"email",name:"email",hermes:["gateway","setup"],required:["EMAIL_ADDRESS","EMAIL_PASSWORD","EMAIL_IMAP_HOST","EMAIL_SMTP_HOST"],optional:[],note:"imap/smtp mailbox"},{key:"bluebubbles",name:"bluebubbles",hermes:["gateway","setup"],required:[],optional:[],note:"imessage via bluebubbles"},{key:"homeassistant",name:"homeassistant",hermes:["gateway","setup"],required:["HASS_URL","HASS_TOKEN"],optional:[],note:"smart home"},{key:"webhook",name:"webhook",hermes:["gateway","setup"],required:[],optional:[],note:"http ingress"},{key:"api-server",name:"api server",hermes:["gateway","setup"],required:[],optional:[],note:"local http api"},{key:"dingtalk",name:"dingtalk",hermes:["gateway","setup"],required:[],optional:[],note:"dingtalk bot"},{key:"feishu",name:"feishu",hermes:["gateway","setup"],required:[],optional:[],note:"feishu / lark"},{key:"wecom",name:"wecom",hermes:["gateway","setup"],required:[],optional:[],note:"wecom"},{key:"weixin",name:"weixin",hermes:["gateway","setup"],required:[],optional:[],note:"weixin"},{key:"qqbot",name:"qqbot",hermes:["gateway","setup"],required:[],optional:[],note:"qq bot"}]);function K(t){return String(t||"").trim().toLowerCase().replace(/^\/+/,"").replace(/\s+/g,"-")}function b(){return j.slice()}function S(t){let r=K(t);if(!r)return null;for(let e of j)if(e.key===r||K(e.name)===r)return e;return null}function W({profile:t="oracle",statuses:r={}}={}){let e=["oracle setup","","one oracle. many models. every connected channel.",`profile: ${t}`,"","messaging platforms:",""];for(let n of j){let s=r[n.key]||"unset";e.push(` ${n.key.padEnd(16)} ${String(s).padEnd(8)} ${n.note}`)}return e.push(""),e.push("commands:"),e.push(" oracle setup this menu"),e.push(" oracle setup messaging open hermes gateway setup"),e.push(" oracle setup telegram configure telegram bot token"),e.push(" oracle setup discord configure discord bot token"),e.push(" oracle setup status show configured platforms (no secrets)"),e.push(" oracle setup gateway start/status hermes gateway"),e.push(" /setup same menu inside chat"),e.push(""),e.push("notes:"),e.push(" tokens stay in the hermes profile .env on this machine"),e.push(" oracle never prints bot tokens or app secrets"),e.push(" after setup: hermes -p oracle gateway restart"),e.join(`
2
- `)+`
3
- `}import f from"node:fs";import ne from"node:os";import N from"node:path";import Q from"node:fs";import ee from"node:os";import v from"node:path";import{fileURLToPath as te}from"node:url";var re=v.dirname(te(import.meta.url)),Te=v.resolve(re,"../..");function E(){return process.env.ORACLE_FAKE_HOME||ee.homedir()}function k(){return v.join(E(),".config","oracle")}function _(){return process.env.HERMES_HOME?v.resolve(process.env.HERMES_HOME):v.join(E(),".hermes")}function h(t){return Q.mkdirSync(t,{recursive:!0}),t}var se=/(TOKEN|SECRET|PASSWORD|KEY|AUTH|PRIVATE|MNEMONIC|SEED)/i;function T(t="oracle"){return N.join(_(),"profiles",t,".env")}function oe(t){let r={};for(let e of String(t||"").split(/\r?\n/)){let n=e.trim();if(!n||n.startsWith("#"))continue;let s=n.indexOf("=");if(s<=0)continue;let i=n.slice(0,s).trim(),o=n.slice(s+1).trim();(o.startsWith('"')&&o.endsWith('"')||o.startsWith("'")&&o.endsWith("'"))&&(o=o.slice(1,-1)),r[i]=o}return r}function ie(t="oracle"){let r=T(t);return f.existsSync(r)?oe(f.readFileSync(r,"utf8")):{}}function B(t,r,e){if(!r||se.test(r)===!1&&/[^A-Z0-9_]/.test(r),!/^[A-Z][A-Z0-9_]*$/.test(r)){let c=new Error(`invalid env key '${r}'`);throw c.code="BAD_KEY",c}if(e==null||String(e).trim()===""){let c=new Error(`empty value for ${r}`);throw c.code="EMPTY",c}let n=T(t);h(N.dirname(n));let s=f.existsSync(n)?f.readFileSync(n,"utf8"):"",i=s?s.split(/\r?\n/):[],o=[],a=!1,u=`${r}=${String(e)}`;for(let c of i)c.startsWith(`${r}=`)?(o.push(u),a=!0):(c.length||o.length)&&o.push(c);for(a||(o.length&&o[o.length-1]!==""&&o.push(""),o.push(u));o.length&&o[o.length-1]==="";)o.pop();o.push(""),f.writeFileSync(n,o.join(`
4
- `),{mode:384});try{f.chmodSync(n,384)}catch{}return{path:n,key:r,set:!0}}function A(t="oracle"){let r=ie(t),e={};for(let n of b()){if(!n.required.length){e[n.key]="manual";continue}let s=n.required.filter(i=>!String(r[i]||"").trim());e[n.key]=s.length?"unset":"ready"}return{profile:t,statuses:e,envPath:T(t)}}function P(t="oracle"){let{statuses:r}=A(t);return W({profile:t,statuses:r})}function V(t,r,e,n={}){let s=S(r);if(!s){let o=new Error(`unknown platform '${r}'`);throw o.code="UNKNOWN_PLATFORM",o}if(!s.required.length){let o=new Error(`${s.key} uses hermes interactive setup (oracle setup messaging)`);throw o.code="NEEDS_INTERACTIVE",o}let i=s.required[0];B(t,i,e);for(let[o,a]of Object.entries(n||{}))a!=null&&String(a).trim()&&B(t,o,a);return{platform:s.key,set:s.required,profile:t,path:T(t)}}function ae(){return N.join(k(),"setup-state.json")}function R(t={}){h(k());let r=ae(),e={};if(f.existsSync(r))try{e=JSON.parse(f.readFileSync(r,"utf8"))}catch{e={}}let n={...e,...t,updatedAt:new Date().toISOString(),host:ne.hostname()};return f.writeFileSync(r,JSON.stringify(n,null,2)+`
5
- `,{mode:384}),n}import l from"node:fs";import p from"node:path";import{createHash as ue}from"node:crypto";import{spawnSync as w}from"node:child_process";var ce="0.19.0",Y=`hermes-agent==${ce}`,D=[3,11],C=[3,14],x="3.13",M="0.12.1",$=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${M}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${M}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function pe(t,{windows:r=process.platform==="win32"}={}){let e=Buffer.isBuffer(t)?t:Buffer.from(t),n=r?$.windows:$.posix,s=ue("sha256").update(e).digest("hex"),i=e.toString("utf8");return s===n.sha256&&i.length>=1e3&&i.includes(M)}function g(){return p.join(k(),"runtime")}function G(){return p.join(g(),"venv")}function U(t){let r=process.platform==="win32"?"Scripts":"bin",e=process.platform==="win32"?`${t}.exe`:t;return p.join(G(),r,e)}function L(){return U("hermes")}function le(){let t=U("python3");return l.existsSync(t)?t:U("python")}function O(){return p.join(g(),"uv",process.platform==="win32"?"uv.exe":"uv")}function y(t){let r=process.platform==="win32"&&!p.extname(t)?["",".exe",".cmd",".bat"]:[""];for(let e of(process.env.PATH||"").split(p.delimiter))if(e)for(let n of r){let s=p.join(e,`${t}${n}`);try{if(l.existsSync(s))return s}catch{}}return null}function fe(t){let r=/Python (\d+)\.(\d+)\.(\d+)/.exec(t||"");return r?[Number(r[1]),Number(r[2]),Number(r[3])]:null}function de(t){if(!t)return!1;let[r,e]=t;return!(r<D[0]||r===D[0]&&e<D[1]||r>C[0]||r===C[0]&&e>=C[1])}function me(){let t=[process.env.ORACLE_PYTHON,"python3.13","python3.12","python3.11","python3","python"].filter(Boolean);for(let r of t){let e=p.isAbsolute(r)?l.existsSync(r)?r:null:y(r);if(!e)continue;let n=w(e,["--version"],{encoding:"utf8",timeout:15e3}),s=fe(`${n.stdout||""}${n.stderr||""}`);if(de(s))return{bin:e,version:s.join("."),source:"host"}}return null}function he(){return process.env.ORACLE_UV_BIN||y("uv")||(l.existsSync(p.join(E(),".local","bin","uv"))?p.join(E(),".local","bin","uv"):null)||(l.existsSync(O())?O():null)}function ge(t,r){let e=["const fs=require('node:fs');","const [url,dest]=process.argv.slice(1);","fetch(url).then(r=>{if(!r.ok)throw new Error('http '+r.status);return r.arrayBuffer()})",".then(b=>fs.writeFileSync(dest,Buffer.from(b)))",".catch(e=>{console.error(e.message);process.exit(1)});"].join("");return w(process.execPath,["-e",e,t,r],{encoding:"utf8",timeout:2*6e4})}function ye({quiet:t=!1}={}){let r=he();if(r)return{ok:!0,bin:r,reused:!0};h(g());let e=process.platform==="win32",n=p.join(g(),e?"uv-install.ps1":"uv-install.sh"),s=e?$.windows:$.posix,i=ge(s.url,n);if(i.status!==0)return{ok:!1,reason:`could not download the uv installer (${i.status})`,stderr:(i.stderr||"").slice(-800)};let o=l.readFileSync(n);if(!pe(o,{windows:e}))return{ok:!1,reason:`uv ${M} installer checksum mismatch`};let a=p.dirname(O());h(a);let u=e?y("powershell.exe")||y("powershell"):y("sh")||"/bin/sh";if(!u)return{ok:!1,reason:e?"PowerShell not found":"sh not found"};let d=w(u,e?["-NoProfile","-ExecutionPolicy","Bypass","-File",n]:[n],{stdio:t?"pipe":"inherit",encoding:"utf8",timeout:5*6e4,env:{...process.env,UV_INSTALL_DIR:a,UV_NO_MODIFY_PATH:"1"}});return d.status!==0||!l.existsSync(O())?{ok:!1,reason:`uv install failed (${d.status})`,stderr:(d.stderr||"").slice(-800)}:{ok:!0,bin:O(),reused:!1}}function F({quiet:t=!1}={}){let r=ye({quiet:t});if(!r.ok)return r;let e=r.bin,n={...process.env,UV_PYTHON_INSTALL_DIR:p.join(g(),"python"),UV_CACHE_DIR:p.join(g(),"cache")},s=w(e,["python","install","--no-bin",x],{stdio:t?"pipe":"inherit",encoding:"utf8",timeout:15*6e4,env:n});if(s.status!==0)return{ok:!1,reason:`uv python install ${x} failed (${s.status})`,stderr:(s.stderr||"").slice(-800)};let i=w(e,["python","find",x],{encoding:"utf8",timeout:6e4,env:n}),o=(i.stdout||"").trim().split(/\r?\n/)[0];return i.status!==0||!o||!l.existsSync(o)?{ok:!1,reason:`uv could not locate python ${x}`}:{ok:!0,bin:o,version:x,source:"uv"}}function z(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let t=y("hermes");if(t)return{ok:!0,bin:t,source:"path"};let r=L();return l.existsSync(r)?{ok:!0,bin:r,source:"managed"}:{ok:!1,bin:null,source:null}}function I(t,r,{quiet:e}){return w(t,r,{stdio:e?"pipe":"inherit",encoding:"utf8",timeout:20*6e4})}function X({quiet:t=!1,upgrade:r=!1}={}){let e=me();if(!e){let c=F({quiet:t});if(c.ok)e={bin:c.bin,version:c.version,source:"uv"};else return{ok:!1,reason:`no supported python found (need 3.11-3.13) and uv could not provide one: ${c.reason}. install uv (https://docs.astral.sh/uv) or python 3.13, then re-run 'oracle bootstrap'`}}h(g());let n=G();if(l.existsSync(L())&&!r)return{ok:!0,bin:L(),reused:!0};if(!l.existsSync(p.join(n,"pyvenv.cfg"))){let c=I(e.bin,["-m","venv",n],{quiet:t});if(c.status!==0&&e.source!=="uv"){l.rmSync(n,{recursive:!0,force:!0});let d=F({quiet:t});if(d.ok)e={bin:d.bin,version:d.version,source:"uv"},c=I(e.bin,["-m","venv",n],{quiet:t});else return{ok:!1,reason:`python -m venv failed (${c.status}) and uv fallback failed: ${d.reason}`,stderr:(c.stderr||"").slice(-800)}}if(c.status!==0)return{ok:!1,reason:`isolated python -m venv failed (${c.status})`,stderr:(c.stderr||"").slice(-800)}}let i=le();if(!l.existsSync(i))return{ok:!1,reason:`venv python missing at ${i}`};let o=["-m","pip","install","--disable-pip-version-check"];r&&o.push("--upgrade"),o.push(Y);let a=I(i,o,{quiet:t});if(a.status!==0)return{ok:!1,reason:`pip install ${Y} failed (${a.status})`,stderr:(a.stderr||"").slice(-1200)};let u=L();return l.existsSync(u)?{ok:!0,bin:u,reused:!1,python:e.version}:{ok:!1,reason:`hermes entrypoint not found after install (${u})`}}function H(){return["oracle setup \u2014 wire messaging + local agent surface",""," oracle setup menu + platform status"," oracle setup status same, machine-friendly with --json"," oracle setup messaging open hermes gateway setup wizard"," oracle setup telegram set TELEGRAM_BOT_TOKEN for profile"," oracle setup discord set DISCORD_BOT_TOKEN for profile"," oracle setup slack set slack tokens"," oracle setup <platform> any supported hermes platform"," oracle setup gateway [status|restart|start|stop]"," oracle setup profile [name] default: oracle","","chat:"," /setup"," /setup telegram"," /setup status","","tokens stay local in ~/.hermes/profiles/<profile>/.env","oracle never prints secrets."].join(`
6
- `)}function Se(t){let r=t.indexOf("--profile");if(r>=0&&t[r+1])return t[r+1];let e=t.indexOf("-p");return e>=0&&t[e+1]?t[e+1]:process.env.ORACLE_PROFILE||"oracle"}function ve(t){let r=[];for(let e=0;e<t.length;e++){if(t[e]==="--profile"||t[e]==="-p"){e+=1;continue}r.push(t[e])}return r}function q(t,{inherit:r=!0,env:e=process.env}={}){let n=z();if(!n.ok&&process.stdin.isTTY&&process.stdout.isTTY&&process.env.ORACLE_NO_BOOTSTRAP!=="1"){process.stdout.write(`setting up oracle's local messaging runtime (one time)
7
-
8
- `);let i=X();i.ok&&(n={ok:!0,bin:i.bin})}if(!n.ok)return process.stderr.write(`oracle setup needs the local runtime
9
- run: oracle bootstrap
10
- `),1;let s=we(n.bin,t,{stdio:r?"inherit":"pipe",encoding:"utf8",env:e});return s.error?(process.stderr.write(`oracle setup: failed to run hermes: ${s.error.message}
11
- `),1):(r||(s.stdout&&process.stdout.write(s.stdout),s.stderr&&process.stderr.write(s.stderr)),typeof s.status=="number"?s.status:1)}async function Z(t){if(!m.isTTY||typeof m.setRawMode!="function"){let r=new Error("interactive token entry requires a tty");throw r.code="NO_TTY",r}return J.write(`${t}: `),new Promise((r,e)=>{let n="",s=()=>{m.off("data",i),m.setRawMode(!1),m.pause(),J.write(`
12
- `)},i=o=>{for(let a of String(o)){if(a==="\r"||a===`
13
- `){s(),r(n.trim());return}if(a===""){s(),e(new Error("cancelled"));return}a==="\x7F"||a==="\b"?n=n.slice(0,-1):n+=a}};m.setRawMode(!0),m.resume(),m.on("data",i)})}async function Ee(t,r,e=[]){let n=S(r);if(!n)return process.stderr.write(`oracle setup: unknown platform '${r}'
14
- `),process.stderr.write(`known: ${b().map(u=>u.key).join(", ")}
15
- `),1;if(!n.required.length)return process.stdout.write(`opening hermes setup for ${n.key} (interactive)
16
- `),R({lastPlatform:n.key,profile:t}),q(["-p",t,...n.hermes||["gateway","setup"]]);let s={},i=[];for(let u=0;u<e.length;u++){let c=e[u];if(c==="--token"&&e[u+1]){s.token=e[++u];continue}if(c==="--allowed-users"&&e[u+1]){s.allowedUsers=e[++u];continue}if(c==="--app-token"&&e[u+1]){s.appToken=e[++u];continue}if(c.startsWith("-"))return process.stderr.write(`oracle setup: unknown flag ${c}
17
- `),1;i.push(c)}let o=s.token||i[0]||"";if(!o)try{o=await Z(`${n.key} bot token`)}catch(u){if(u?.code==="NO_TTY")return process.stderr.write(`oracle setup ${n.key}: pass --token <value> in non-interactive mode
18
- `),1;throw u}if(!o)return process.stderr.write(`aborted: empty token
19
- `),1;let a={};if(s.allowedUsers&&(n.key==="telegram"&&(a.TELEGRAM_ALLOWED_USERS=s.allowedUsers),n.key==="discord"&&(a.DISCORD_ALLOWED_USERS=s.allowedUsers),n.key==="slack"&&(a.SLACK_ALLOWED_USERS=s.allowedUsers)),s.appToken&&n.key==="slack"&&(a.SLACK_APP_TOKEN=s.appToken),n.key==="slack"&&!a.SLACK_APP_TOKEN){let u=s.appToken||i[1]||"";if(!u&&process.stdin.isTTY&&(u=await Z("slack app token (xapp-...)")),!u)return process.stderr.write(`slack needs bot token + app token
20
- `),1;a.SLACK_APP_TOKEN=u}try{let u=V(t,n.key,o,a);return R({lastPlatform:n.key,profile:t,ready:!0}),process.stdout.write(`saved ${n.key} credentials for profile '${t}'
21
- path: ${u.path}
22
- next: oracle setup gateway restart
23
- `),0}catch(u){return process.stderr.write(`oracle setup: ${u.message}
24
- `),1}}var Ge={name:"setup",summary:"configure telegram/discord/slack messaging platforms",group:"read",usage:H(),async run(t){let r=[...t.argv],e=r.includes("--json"),n=Se(r),s=ve(r).filter(a=>a!=="--json"),i=(s[0]||"menu").toLowerCase(),o=s.slice(1);if(["-h","--help","help"].includes(i))return process.stdout.write(H()+`
25
- `),0;if(["menu","list","ls"].includes(i))return e?process.stdout.write(JSON.stringify(A(n),null,2)+`
26
- `):process.stdout.write(P(n)),0;if(["status","show"].includes(i)){let a=A(n);return e?process.stdout.write(JSON.stringify(a,null,2)+`
27
- `):(process.stdout.write(P(n)),process.stdout.write(`hermes root: ${_()}
28
- `)),0}if(["messaging","gateway-setup","platforms"].includes(i))return R({lastAction:"messaging",profile:n}),process.stdout.write(`opening hermes gateway setup wizard...
29
- `),q(["-p",n,"gateway","setup"]);if(i==="gateway"){let a=(o[0]||"status").toLowerCase();return["status","start","stop","restart","run","install"].includes(a)?q(["-p",n,"gateway",a]):(process.stderr.write(`usage: oracle setup gateway [status|start|stop|restart|run|install]
30
- `),1)}if(i==="profile"){let a=o[0]||n;return process.stdout.write(`profile: ${a}
31
- hermes: ${_()}/profiles/${a}
32
- `),process.stdout.write(P(a)),0}return S(i)?Ee(n,i,o):(process.stderr.write(`oracle setup: unknown verb '${i}'
33
- ${H()}
34
- `),1)}};export{Ge as default};
@@ -1,4 +0,0 @@
1
- var i={name:"sign",summary:"provision / check the local signer (opt-in)",group:"sign",usage:"oracle sign <init|doctor> ...",async run(r){let e=r.argv[0];return e==="init"?r.dispatchOperator("oracle-agentic-init",r.argv.slice(1),{appendHintOnError:!0}):e==="doctor"?r.dispatchOperator("oracle-agentic-doctor",r.argv.slice(1),{appendHintOnError:!0}):(process.stderr.write(`usage: oracle sign <init|doctor> ...
2
- oracle sign init provision keys + policy (interactive)
3
- oracle sign doctor check local signer readiness
4
- `),1)}};export{i as default};
@@ -1 +0,0 @@
1
- var e={name:"signer",summary:"loopback signer daemon",group:"sign",usage:"oracle signer [--port N ...]",async run(r){return r.dispatchOperator("oracle-signer",r.argv,{appendHintOnError:!0})}};export{e as default};
@@ -1,2 +0,0 @@
1
- import{spawnSync as s}from"node:child_process";import o from"node:path";var p={name:"upgrade",summary:"upgrade installed Hermes lanes",group:"read",usage:"oracle upgrade [--apply ...]",async run(e){let a=o.join(e.root,"bin","oracle-upgrade.mjs"),r=s(process.execPath,[a,...e.argv],{stdio:"inherit"});return r.error?(process.stderr.write(`oracle: failed to spawn oracle-upgrade: ${r.error.message}
2
- `),1):typeof r.status=="number"?r.status:1}};export{p as default};
@@ -1 +0,0 @@
1
- var e={name:"vault",summary:"encrypt local key files at rest",group:"sign",usage:"oracle vault <encrypt|rekey|inspect|decrypt> ...",async run(r){return r.dispatchOperator("oracle-vault",r.argv,{appendHintOnError:!0})}};export{e as default};
@@ -1,2 +0,0 @@
1
- import x from"node:fs";import P from"node:path";import i from"node:fs";import t from"node:path";import{spawnSync as k}from"node:child_process";import{createRequire as b}from"node:module";import{fileURLToPath as O}from"node:url";var h=t.dirname(O(import.meta.url)),y=t.resolve(h,"../.."),f=Object.freeze(["oracle-vault","oracle-credential","oracle-signer","oracle-runner","oracle-agentic-init","oracle-agentic-doctor","oracle-control-mcp","oracle-operator-caps"]),I=Object.freeze(["vault","credential","signer","runner","sign"]);function d(n){let e=(process.env.PATH||"").split(t.delimiter).filter(Boolean),o=process.platform==="win32"?["",".cmd",".exe",".bat"]:[""];for(let s of e)for(let a of o){let p=t.join(s,n+a);try{if(i.existsSync(p)&&i.statSync(p).isFile())return p}catch{}}return null}function m(n){let r={};for(let e of f){let o=[t.join(n,e),t.join(n,`${e}.mjs`),t.join(n,`${e}.js`)];for(let s of o)if(i.existsSync(s)&&i.statSync(s).isFile()){r[e]=s;break}}return r}function j(n){let r=t.dirname(n);for(;r!==t.dirname(r);){let e=t.join(r,"package.json");if(i.existsSync(e))try{let o=JSON.parse(i.readFileSync(e,"utf8"));if(o.name==="@oracle-agent/operator")return{root:r,pkg:o}}catch{}r=t.dirname(r)}return null}function S(n){for(let r of n)try{let e=b(t.join(r,"package.json")),o;try{let c=e.resolve("@oracle-agent/operator/package.json");o={root:t.dirname(c),pkg:JSON.parse(i.readFileSync(c,"utf8"))}}catch{let c=e.resolve("@oracle-agent/operator");o=j(c)}if(!o)continue;let{root:s,pkg:a}=o,p=a.bin||{},l={};for(let[c,u]of Object.entries(p))l[c]=t.resolve(s,u);let g=m(t.join(s,"bin"));for(let[c,u]of Object.entries(g))l[c]||(l[c]=u);return{ok:!0,binDir:t.join(s,"bin"),version:a.version||"unknown",bins:l,source:`require:${r}`}}catch{}return null}function w(){let n=d("oracle-operator-caps");if(!n)return null;let r=k(n,[],{encoding:"utf8",timeout:5e3,env:process.env});if(r.status!==0||!r.stdout)return null;try{let e=JSON.parse(r.stdout);return!e||typeof e!="object"||!e.bins?null:{ok:!0,binDir:t.dirname(Object.values(e.bins)[0]||n),version:e.version||"unknown",bins:e.bins,source:"caps-path",controlMcp:e.controlMcp}}catch{return null}}function R(){let n={};for(let r of f){let e=d(r);e&&(n[r]=e)}return Object.keys(n).length?{ok:!0,binDir:t.dirname(Object.values(n)[0]),version:"unknown",bins:n,source:"path-probe"}:null}function v(){let n=process.env.ORACLE_OPERATOR_BIN_DIR;if(n){let e=t.resolve(n);if(!i.existsSync(e))return{ok:!1};let o=m(e);if(!Object.keys(o).length)return{ok:!1};let s="unknown",a=t.resolve(e,"../package.json");if(i.existsSync(a))try{s=JSON.parse(i.readFileSync(a,"utf8")).version||s}catch{}return{ok:!0,binDir:e,version:s,bins:o,source:"env:ORACLE_OPERATOR_BIN_DIR"}}return S([process.cwd(),y])||w()||R()||{ok:!1}}var B={name:"version",summary:"print oracle (and operator, if present) version",group:"meta",usage:"oracle version",async run(n){let r="0.0.0";try{r=JSON.parse(x.readFileSync(P.join(n.root,"package.json"),"utf8")).version||r}catch{}let e=`oracle ${r}`,o=(n.resolveOperator||v)();return o.ok&&(e+=` operator ${o.version}`),process.stdout.write(e+`
2
- `),0}};export{B as default};