@oracle-agent/oracle 0.11.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 (487) hide show
  1. package/LICENSE +115 -201
  2. package/README.md +13 -516
  3. package/bin/oracle.mjs +19 -27
  4. package/package.json +15 -98
  5. package/CONTRIBUTING.md +0 -98
  6. package/SECURITY.md +0 -89
  7. package/SETUP.md +0 -381
  8. package/artifacts/inscription/oracle-was-here-preview.png +0 -0
  9. package/artifacts/inscription/oracle-was-here.svg +0 -1
  10. package/artifacts/specialist-packs/oracle-full-crypto.json +0 -295
  11. package/bin/desk-server.mjs +0 -440
  12. package/bin/oracle-data-mcp.mjs +0 -1019
  13. package/bin/oracle-init.mjs +0 -496
  14. package/bin/oracle-public-server.mjs +0 -36
  15. package/bin/oracle-route.mjs +0 -254
  16. package/bin/oracle-scan.mjs +0 -192
  17. package/bin/oracle-upgrade.mjs +0 -42
  18. package/docs/adding-a-chain.md +0 -229
  19. package/docs/architecture.md +0 -138
  20. package/docs/cli.md +0 -47
  21. package/docs/connectors.md +0 -13
  22. package/docs/oracle-pack-standard.md +0 -29
  23. package/docs/profiles.md +0 -151
  24. package/docs/public-surface.md +0 -133
  25. package/examples/add-a-chain.mjs +0 -65
  26. package/examples/oracle-pack-template.mjs +0 -38
  27. package/examples/research-a-token.mjs +0 -70
  28. package/plugins/oracle-owner-gate/__init__.py +0 -227
  29. package/plugins/oracle-owner-gate/plugin.yaml +0 -9
  30. package/profiles/_template/SOUL.md +0 -54
  31. package/profiles/_template/profile.json +0 -22
  32. package/profiles/bitcoin-agent/SOUL.md +0 -31
  33. package/profiles/bitcoin-agent/profile.json +0 -32
  34. package/profiles/hyperliquid-agent/SOUL.md +0 -34
  35. package/profiles/hyperliquid-agent/profile.json +0 -37
  36. package/profiles/oracle/SOUL.md +0 -107
  37. package/profiles/oracle/profile.json +0 -39
  38. package/profiles/polymarket-agent/SOUL.md +0 -35
  39. package/profiles/polymarket-agent/profile.json +0 -34
  40. package/profiles/profile.schema.json +0 -90
  41. package/profiles/protocol-builder/SOUL.md +0 -57
  42. package/profiles/protocol-builder/profile.json +0 -39
  43. package/profiles/robinhood-agent/SOUL.md +0 -53
  44. package/profiles/robinhood-agent/profile.json +0 -40
  45. package/profiles/solana-agent/SOUL.md +0 -37
  46. package/profiles/solana-agent/profile.json +0 -37
  47. package/profiles/stable-agent/SOUL.md +0 -43
  48. package/profiles/stable-agent/profile.json +0 -37
  49. package/protocols/templates/safe-erc20/SECURITY.md +0 -16
  50. package/protocols/templates/safe-erc20/foundry.toml +0 -12
  51. package/protocols/templates/safe-erc20/remappings.txt +0 -2
  52. package/protocols/templates/safe-erc20/src/SafeERC20.sol +0 -53
  53. package/protocols/templates/safe-erc20/test/SafeERC20.t.sol +0 -72
  54. package/public/agent-connect/app.js +0 -84
  55. package/public/agent-connect/index.html +0 -83
  56. package/public/agent-connect/styles.css +0 -70
  57. package/public/index.html +0 -12
  58. package/public/oracle-console/app.js +0 -272
  59. package/public/oracle-console/bitcoin-wallets.js +0 -206
  60. package/public/oracle-console/index.html +0 -91
  61. package/public/oracle-console/styles.css +0 -239
  62. package/public/oracle-splash/assets/cli-chain-hyperliquid.jpg +0 -0
  63. package/public/oracle-splash/assets/hero/orb.avif +0 -0
  64. package/public/oracle-splash/assets/hero/orb.webm +0 -0
  65. package/public/oracle-splash/assets/llms/claude.svg +0 -1
  66. package/public/oracle-splash/assets/llms/codex-icon.svg +0 -1
  67. package/public/oracle-splash/assets/llms/codex.svg +0 -1
  68. package/public/oracle-splash/assets/llms/cursor-icon.svg +0 -12
  69. package/public/oracle-splash/assets/llms/cursor.svg +0 -17
  70. package/public/oracle-splash/assets/llms/deepseek.svg +0 -1
  71. package/public/oracle-splash/assets/llms/gemini-icon.svg +0 -1
  72. package/public/oracle-splash/assets/llms/gemini.svg +0 -1
  73. package/public/oracle-splash/assets/llms/grok.svg +0 -8
  74. package/public/oracle-splash/assets/llms/hermes.png +0 -0
  75. package/public/oracle-splash/assets/llms/kimi-icon.svg +0 -1
  76. package/public/oracle-splash/assets/llms/kimi.svg +0 -1
  77. package/public/oracle-splash/assets/llms/manus.svg +0 -18
  78. package/public/oracle-splash/assets/llms/openclaw.svg +0 -22
  79. package/public/oracle-splash/assets/llms/perplexity.svg +0 -1
  80. package/public/oracle-splash/assets/llms/qwen.svg +0 -1
  81. package/public/oracle-splash/assets/llms/windsurf.svg +0 -1
  82. package/public/oracle-splash/assets/protocols/abcdex.png +0 -0
  83. package/public/oracle-splash/assets/protocols/across.png +0 -0
  84. package/public/oracle-splash/assets/protocols/aerodrome.png +0 -0
  85. package/public/oracle-splash/assets/protocols/balancer.png +0 -0
  86. package/public/oracle-splash/assets/protocols/cowswap.png +0 -0
  87. package/public/oracle-splash/assets/protocols/curve.png +0 -0
  88. package/public/oracle-splash/assets/protocols/dreamcash.png +0 -0
  89. package/public/oracle-splash/assets/protocols/felix.png +0 -0
  90. package/public/oracle-splash/assets/protocols/gmx.png +0 -0
  91. package/public/oracle-splash/assets/protocols/hyena.png +0 -0
  92. package/public/oracle-splash/assets/protocols/hyperbeat.png +0 -0
  93. package/public/oracle-splash/assets/protocols/hyperliquid.png +0 -0
  94. package/public/oracle-splash/assets/protocols/hyperswap.png +0 -0
  95. package/public/oracle-splash/assets/protocols/jupiter.png +0 -0
  96. package/public/oracle-splash/assets/protocols/kinetiq.png +0 -0
  97. package/public/oracle-splash/assets/protocols/lfj.png +0 -0
  98. package/public/oracle-splash/assets/protocols/lifi.png +0 -0
  99. package/public/oracle-splash/assets/protocols/magic-eden.png +0 -0
  100. package/public/oracle-splash/assets/protocols/morpho.png +0 -0
  101. package/public/oracle-splash/assets/protocols/odos.png +0 -0
  102. package/public/oracle-splash/assets/protocols/oneinch.png +0 -0
  103. package/public/oracle-splash/assets/protocols/opensea.png +0 -0
  104. package/public/oracle-splash/assets/protocols/pancakeswap.png +0 -0
  105. package/public/oracle-splash/assets/protocols/paragon.png +0 -0
  106. package/public/oracle-splash/assets/protocols/paraswap.png +0 -0
  107. package/public/oracle-splash/assets/protocols/pendle.png +0 -0
  108. package/public/oracle-splash/assets/protocols/polymarket.png +0 -0
  109. package/public/oracle-splash/assets/protocols/quickswap.png +0 -0
  110. package/public/oracle-splash/assets/protocols/relay.png +0 -0
  111. package/public/oracle-splash/assets/protocols/stargate.png +0 -0
  112. package/public/oracle-splash/assets/protocols/tradexyz.png +0 -0
  113. package/public/oracle-splash/assets/protocols/uniswap.png +0 -0
  114. package/public/oracle-splash/assets/protocols/velodrome.png +0 -0
  115. package/public/oracle-splash/assets/protocols/ventuals.png +0 -0
  116. package/public/oracle-splash/assets/wordmarks/across-icon.webp +0 -0
  117. package/public/oracle-splash/assets/wordmarks/across.svg +0 -4
  118. package/public/oracle-splash/assets/wordmarks/aerodrome.svg +0 -23
  119. package/public/oracle-splash/assets/wordmarks/balancer.svg +0 -3
  120. package/public/oracle-splash/assets/wordmarks/cowswap.svg +0 -1
  121. package/public/oracle-splash/assets/wordmarks/curve.png +0 -0
  122. package/public/oracle-splash/assets/wordmarks/gmx.svg +0 -13
  123. package/public/oracle-splash/assets/wordmarks/hop-icon.webp +0 -0
  124. package/public/oracle-splash/assets/wordmarks/hyena.svg +0 -7
  125. package/public/oracle-splash/assets/wordmarks/hyperliquid.svg +0 -21
  126. package/public/oracle-splash/assets/wordmarks/hyperswap.svg +0 -13
  127. package/public/oracle-splash/assets/wordmarks/jupiter.svg +0 -35
  128. package/public/oracle-splash/assets/wordmarks/kinetiq.svg +0 -1
  129. package/public/oracle-splash/assets/wordmarks/lfj.webp +0 -0
  130. package/public/oracle-splash/assets/wordmarks/lifi.png +0 -0
  131. package/public/oracle-splash/assets/wordmarks/magic-eden.svg +0 -1
  132. package/public/oracle-splash/assets/wordmarks/markets.svg +0 -1
  133. package/public/oracle-splash/assets/wordmarks/morpho.svg +0 -1
  134. package/public/oracle-splash/assets/wordmarks/odos.svg +0 -3
  135. package/public/oracle-splash/assets/wordmarks/oneinch-icon.webp +0 -0
  136. package/public/oracle-splash/assets/wordmarks/oneinch.svg +0 -6
  137. package/public/oracle-splash/assets/wordmarks/opensea-icon.svg +0 -17
  138. package/public/oracle-splash/assets/wordmarks/opensea.svg +0 -1
  139. package/public/oracle-splash/assets/wordmarks/outcome.svg +0 -16
  140. package/public/oracle-splash/assets/wordmarks/pancakeswap.svg +0 -18
  141. package/public/oracle-splash/assets/wordmarks/paragon.svg +0 -9
  142. package/public/oracle-splash/assets/wordmarks/paraswap.svg +0 -16
  143. package/public/oracle-splash/assets/wordmarks/pendle.png +0 -0
  144. package/public/oracle-splash/assets/wordmarks/polymarket.png +0 -0
  145. package/public/oracle-splash/assets/wordmarks/quickswap.png +0 -0
  146. package/public/oracle-splash/assets/wordmarks/relay.svg +0 -8
  147. package/public/oracle-splash/assets/wordmarks/satflow-icon.png +0 -0
  148. package/public/oracle-splash/assets/wordmarks/stargate-icon.webp +0 -0
  149. package/public/oracle-splash/assets/wordmarks/stargate.svg +0 -15
  150. package/public/oracle-splash/assets/wordmarks/uniswap.svg +0 -18
  151. package/public/oracle-splash/assets/wordmarks/velodrome.svg +0 -84
  152. package/public/oracle-splash/assets/wordmarks/xyz.svg +0 -12
  153. package/public/oracle-splash/assets/wordmarks/zerox-icon.webp +0 -0
  154. package/public/oracle-splash/brand/aave.webp +0 -0
  155. package/public/oracle-splash/brand/aavev2.webp +0 -0
  156. package/public/oracle-splash/brand/aborean.webp +0 -0
  157. package/public/oracle-splash/brand/across.webp +0 -0
  158. package/public/oracle-splash/brand/aerodrome.webp +0 -0
  159. package/public/oracle-splash/brand/afi.webp +0 -0
  160. package/public/oracle-splash/brand/arcus.webp +0 -0
  161. package/public/oracle-splash/brand/aster.webp +0 -0
  162. package/public/oracle-splash/brand/avant.webp +0 -0
  163. package/public/oracle-splash/brand/balancer.webp +0 -0
  164. package/public/oracle-splash/brand/beefy.webp +0 -0
  165. package/public/oracle-splash/brand/benqi.webp +0 -0
  166. package/public/oracle-splash/brand/bestinslot.ico +0 -0
  167. package/public/oracle-splash/brand/bitfi.webp +0 -0
  168. package/public/oracle-splash/brand/bonkswap.webp +0 -0
  169. package/public/oracle-splash/brand/bouncebit.webp +0 -0
  170. package/public/oracle-splash/brand/camelot.webp +0 -0
  171. package/public/oracle-splash/brand/compound.webp +0 -0
  172. package/public/oracle-splash/brand/concrete.webp +0 -0
  173. package/public/oracle-splash/brand/cow.webp +0 -0
  174. package/public/oracle-splash/brand/curve.webp +0 -0
  175. package/public/oracle-splash/brand/derive.webp +0 -0
  176. package/public/oracle-splash/brand/dolomite.webp +0 -0
  177. package/public/oracle-splash/brand/eigenlayer.webp +0 -0
  178. package/public/oracle-splash/brand/ekubo.webp +0 -0
  179. package/public/oracle-splash/brand/ethena.webp +0 -0
  180. package/public/oracle-splash/brand/etherfi.webp +0 -0
  181. package/public/oracle-splash/brand/etherfiborrow.webp +0 -0
  182. package/public/oracle-splash/brand/felix.webp +0 -0
  183. package/public/oracle-splash/brand/fluid.webp +0 -0
  184. package/public/oracle-splash/brand/fluxbeam.webp +0 -0
  185. package/public/oracle-splash/brand/folks.webp +0 -0
  186. package/public/oracle-splash/brand/fortyacres.webp +0 -0
  187. package/public/oracle-splash/brand/gainsnetwork.webp +0 -0
  188. package/public/oracle-splash/brand/gassss.webp +0 -0
  189. package/public/oracle-splash/brand/gmx.webp +0 -0
  190. package/public/oracle-splash/brand/harmonix.webp +0 -0
  191. package/public/oracle-splash/brand/hlorderbook.webp +0 -0
  192. package/public/oracle-splash/brand/hlp.webp +0 -0
  193. package/public/oracle-splash/brand/hop.webp +0 -0
  194. package/public/oracle-splash/brand/hyperbeat.webp +0 -0
  195. package/public/oracle-splash/brand/hyperlend.webp +0 -0
  196. package/public/oracle-splash/brand/hyperliquid.webp +0 -0
  197. package/public/oracle-splash/brand/hyperliquidhpl.webp +0 -0
  198. package/public/oracle-splash/brand/hyperliquidspot.webp +0 -0
  199. package/public/oracle-splash/brand/hyperswap.webp +0 -0
  200. package/public/oracle-splash/brand/hypha.webp +0 -0
  201. package/public/oracle-splash/brand/joedex.webp +0 -0
  202. package/public/oracle-splash/brand/jupiter.webp +0 -0
  203. package/public/oracle-splash/brand/kelp.webp +0 -0
  204. package/public/oracle-splash/brand/kinetiq.webp +0 -0
  205. package/public/oracle-splash/brand/kmhype.webp +0 -0
  206. package/public/oracle-splash/brand/kona.webp +0 -0
  207. package/public/oracle-splash/brand/konalend.webp +0 -0
  208. package/public/oracle-splash/brand/lfj.webp +0 -0
  209. package/public/oracle-splash/brand/lido.webp +0 -0
  210. package/public/oracle-splash/brand/lifi.webp +0 -0
  211. package/public/oracle-splash/brand/lighter.webp +0 -0
  212. package/public/oracle-splash/brand/lista.webp +0 -0
  213. package/public/oracle-splash/brand/loopedhype.webp +0 -0
  214. package/public/oracle-splash/brand/lorenzo.webp +0 -0
  215. package/public/oracle-splash/brand/magic-eden.webp +0 -0
  216. package/public/oracle-splash/brand/magiceden.webp +0 -0
  217. package/public/oracle-splash/brand/mempool.png +0 -0
  218. package/public/oracle-splash/brand/meteora.webp +0 -0
  219. package/public/oracle-splash/brand/morpho.webp +0 -0
  220. package/public/oracle-splash/brand/myriad.webp +0 -0
  221. package/public/oracle-splash/brand/noxa.webp +0 -0
  222. package/public/oracle-splash/brand/odos.webp +0 -0
  223. package/public/oracle-splash/brand/oneinch.webp +0 -0
  224. package/public/oracle-splash/brand/openbook.webp +0 -0
  225. package/public/oracle-splash/brand/opensea.webp +0 -0
  226. package/public/oracle-splash/brand/orca.webp +0 -0
  227. package/public/oracle-splash/brand/ordinals.png +0 -0
  228. package/public/oracle-splash/brand/ostium.webp +0 -0
  229. package/public/oracle-splash/brand/pancakeswap.webp +0 -0
  230. package/public/oracle-splash/brand/pendle.webp +0 -0
  231. package/public/oracle-splash/brand/perena.webp +0 -0
  232. package/public/oracle-splash/brand/pharaoh.webp +0 -0
  233. package/public/oracle-splash/brand/phoenix.webp +0 -0
  234. package/public/oracle-splash/brand/polymarket.webp +0 -0
  235. package/public/oracle-splash/brand/polynomial.webp +0 -0
  236. package/public/oracle-splash/brand/projectx.webp +0 -0
  237. package/public/oracle-splash/brand/pumpfun.webp +0 -0
  238. package/public/oracle-splash/brand/quickswap.webp +0 -0
  239. package/public/oracle-splash/brand/rain.webp +0 -0
  240. package/public/oracle-splash/brand/raydium.webp +0 -0
  241. package/public/oracle-splash/brand/relay.webp +0 -0
  242. package/public/oracle-splash/brand/rocketpool.webp +0 -0
  243. package/public/oracle-splash/brand/saber.webp +0 -0
  244. package/public/oracle-splash/brand/sakuraswap.webp +0 -0
  245. package/public/oracle-splash/brand/sanctum.webp +0 -0
  246. package/public/oracle-splash/brand/satflow.png +0 -0
  247. package/public/oracle-splash/brand/sierra.webp +0 -0
  248. package/public/oracle-splash/brand/sky.webp +0 -0
  249. package/public/oracle-splash/brand/solv.webp +0 -0
  250. package/public/oracle-splash/brand/spark.webp +0 -0
  251. package/public/oracle-splash/brand/sparksavings.webp +0 -0
  252. package/public/oracle-splash/brand/sphere.webp +0 -0
  253. package/public/oracle-splash/brand/ssv.webp +0 -0
  254. package/public/oracle-splash/brand/stabble.webp +0 -0
  255. package/public/oracle-splash/brand/stableswap.webp +0 -0
  256. package/public/oracle-splash/brand/stakewise.webp +0 -0
  257. package/public/oracle-splash/brand/stargate.webp +0 -0
  258. package/public/oracle-splash/brand/sthype.webp +0 -0
  259. package/public/oracle-splash/brand/sushiswap.webp +0 -0
  260. package/public/oracle-splash/brand/unisat.png +0 -0
  261. package/public/oracle-splash/brand/uniswap.webp +0 -0
  262. package/public/oracle-splash/brand/uniswapv2.webp +0 -0
  263. package/public/oracle-splash/brand/uniswapv4.webp +0 -0
  264. package/public/oracle-splash/brand/unit.webp +0 -0
  265. package/public/oracle-splash/brand/velodrome.webp +0 -0
  266. package/public/oracle-splash/brand/velora.webp +0 -0
  267. package/public/oracle-splash/brand/venus.webp +0 -0
  268. package/public/oracle-splash/brand/wbeth.webp +0 -0
  269. package/public/oracle-splash/brand/xsy.webp +0 -0
  270. package/public/oracle-splash/brand/yieldyak.webp +0 -0
  271. package/public/oracle-splash/brand/zerobase.webp +0 -0
  272. package/public/oracle-splash/brand/zerox.webp +0 -0
  273. package/public/oracle-splash/favicon.ico +0 -0
  274. package/public/oracle-splash/favicon.svg +0 -6
  275. package/public/oracle-splash/index.html +0 -1558
  276. package/public/oracle-splash/mesh-graph.png +0 -0
  277. package/public/oracle-splash/mesh-graph.svg +0 -216
  278. package/scripts/adversarial-bench.mjs +0 -114
  279. package/scripts/build-inscription.py +0 -230
  280. package/scripts/check-doc-drift.mjs +0 -123
  281. package/scripts/check-test-count.mjs +0 -105
  282. package/scripts/e2e-hl-markets.mjs +0 -21
  283. package/scripts/e2e-hl-perps.mjs +0 -48
  284. package/scripts/e2e-hypercore-staking.mjs +0 -128
  285. package/scripts/e2e-solana-bitcoin.mjs +0 -183
  286. package/scripts/protocol-template-gate.mjs +0 -15
  287. package/scripts/public-api-scan.mjs +0 -23
  288. package/scripts/secret-scan.mjs +0 -181
  289. package/scripts/verify-v3-venues.mjs +0 -192
  290. package/skills/balance/SKILL.md +0 -176
  291. package/skills/oracle-action-semantics/SKILL.md +0 -40
  292. package/skills/oracle-best-execution/SKILL.md +0 -127
  293. package/skills/oracle-bitcoin/SKILL.md +0 -53
  294. package/skills/oracle-chain-graphs-telegram-cards/SKILL.md +0 -59
  295. package/skills/oracle-chat/SKILL.md +0 -61
  296. package/skills/oracle-chat/chain.SKILL.md +0 -31
  297. package/skills/oracle-chat/setup.SKILL.md +0 -37
  298. package/skills/oracle-circuit-breaker/SKILL.md +0 -51
  299. package/skills/oracle-contract-research/SKILL.md +0 -55
  300. package/skills/oracle-desk/SKILL.md +0 -58
  301. package/skills/oracle-dex-launch/SKILL.md +0 -38
  302. package/skills/oracle-grants/SKILL.md +0 -69
  303. package/skills/oracle-hypercore-staking/SKILL.md +0 -57
  304. package/skills/oracle-hyperliquid/SKILL.md +0 -56
  305. package/skills/oracle-meme-token-sniper/SKILL.md +0 -73
  306. package/skills/oracle-multichain-nft-launch/SKILL.md +0 -338
  307. package/skills/oracle-multichain-token-launch/SKILL.md +0 -300
  308. package/skills/oracle-nft-gacha-launch/SKILL.md +0 -48
  309. package/skills/oracle-nft-mint-gas-war/SKILL.md +0 -63
  310. package/skills/oracle-polymarket/SKILL.md +0 -60
  311. package/skills/oracle-protocol-builder/SKILL.md +0 -59
  312. package/skills/oracle-protocol-security/SKILL.md +0 -60
  313. package/skills/oracle-public-product/SKILL.md +0 -44
  314. package/skills/oracle-receipts/SKILL.md +0 -52
  315. package/skills/oracle-rfq-tokenized-assets/SKILL.md +0 -69
  316. package/skills/oracle-smart-wallet-scanner/SKILL.md +0 -49
  317. package/skills/oracle-solana/SKILL.md +0 -65
  318. package/skills/oracle-solana-nft/SKILL.md +0 -54
  319. package/skills/oracle-token-research/SKILL.md +0 -67
  320. package/skins/oracle.yaml +0 -56
  321. package/src/action-receipts.mjs +0 -265
  322. package/src/action-semantics.mjs +0 -62
  323. package/src/address-book.mjs +0 -208
  324. package/src/agent-auth.mjs +0 -206
  325. package/src/approval-guard.mjs +0 -282
  326. package/src/attestation-secret.mjs +0 -88
  327. package/src/audit-log.mjs +0 -196
  328. package/src/auth/oauth.mjs +0 -672
  329. package/src/auto-slippage.mjs +0 -378
  330. package/src/capability-posture.mjs +0 -125
  331. package/src/chains.mjs +0 -62
  332. package/src/cli/chain-catalog.mjs +0 -215
  333. package/src/cli/chain-state.mjs +0 -74
  334. package/src/cli/commands/auth.mjs +0 -193
  335. package/src/cli/commands/bootstrap.mjs +0 -87
  336. package/src/cli/commands/chain.mjs +0 -143
  337. package/src/cli/commands/chat.mjs +0 -434
  338. package/src/cli/commands/credential.mjs +0 -9
  339. package/src/cli/commands/data-mcp.mjs +0 -18
  340. package/src/cli/commands/data.mjs +0 -75
  341. package/src/cli/commands/doctor.mjs +0 -136
  342. package/src/cli/commands/help.mjs +0 -7
  343. package/src/cli/commands/init.mjs +0 -27
  344. package/src/cli/commands/mcp.mjs +0 -142
  345. package/src/cli/commands/model.mjs +0 -99
  346. package/src/cli/commands/prepare.mjs +0 -12
  347. package/src/cli/commands/public.mjs +0 -20
  348. package/src/cli/commands/route.mjs +0 -12
  349. package/src/cli/commands/runner.mjs +0 -9
  350. package/src/cli/commands/scan.mjs +0 -12
  351. package/src/cli/commands/setup.mjs +0 -275
  352. package/src/cli/commands/sign.mjs +0 -21
  353. package/src/cli/commands/signer.mjs +0 -9
  354. package/src/cli/commands/upgrade.mjs +0 -12
  355. package/src/cli/commands/vault.mjs +0 -9
  356. package/src/cli/commands/version.mjs +0 -22
  357. package/src/cli/first-run.mjs +0 -23
  358. package/src/cli/kernel.mjs +0 -239
  359. package/src/cli/mcp-targets/chatgpt.mjs +0 -51
  360. package/src/cli/mcp-targets/claude-code.mjs +0 -39
  361. package/src/cli/mcp-targets/claude-desktop.mjs +0 -24
  362. package/src/cli/mcp-targets/codex.mjs +0 -41
  363. package/src/cli/mcp-targets/shared.mjs +0 -61
  364. package/src/cli/messaging-platforms.mjs +0 -209
  365. package/src/cli/model-config.mjs +0 -70
  366. package/src/cli/operator-dispatch.mjs +0 -258
  367. package/src/cli/oracle-harness.py +0 -415
  368. package/src/cli/paths.mjs +0 -83
  369. package/src/cli/runtime.mjs +0 -351
  370. package/src/cli/setup-state.mjs +0 -168
  371. package/src/cli/spawn-child.mjs +0 -43
  372. package/src/data/catalog.mjs +0 -585
  373. package/src/data/desk-data.mjs +0 -695
  374. package/src/data/http.mjs +0 -253
  375. package/src/data/provider-endpoint.mjs +0 -94
  376. package/src/data/providers/aerodrome.mjs +0 -245
  377. package/src/data/providers/balancer.mjs +0 -209
  378. package/src/data/providers/bitcoin-esplora.mjs +0 -216
  379. package/src/data/providers/bitcoin-meta.mjs +0 -378
  380. package/src/data/providers/blockscout.mjs +0 -14
  381. package/src/data/providers/bridges.mjs +0 -242
  382. package/src/data/providers/cowswap.mjs +0 -415
  383. package/src/data/providers/curve.mjs +0 -201
  384. package/src/data/providers/defillama.mjs +0 -88
  385. package/src/data/providers/dexscreener.mjs +0 -43
  386. package/src/data/providers/evm-rpc.mjs +0 -225
  387. package/src/data/providers/geckoterminal.mjs +0 -34
  388. package/src/data/providers/gmx.mjs +0 -496
  389. package/src/data/providers/hl-assets.mjs +0 -165
  390. package/src/data/providers/hl-info.mjs +0 -108
  391. package/src/data/providers/hl-markets.mjs +0 -210
  392. package/src/data/providers/hl-outcome.mjs +0 -61
  393. package/src/data/providers/hl-perps.mjs +0 -387
  394. package/src/data/providers/hl-staking.mjs +0 -353
  395. package/src/data/providers/hl-ws.mjs +0 -119
  396. package/src/data/providers/hyperevm-dex.mjs +0 -49
  397. package/src/data/providers/jupiter-venues.mjs +0 -119
  398. package/src/data/providers/jupiter.mjs +0 -315
  399. package/src/data/providers/lifi.mjs +0 -151
  400. package/src/data/providers/magiceden-sol.mjs +0 -406
  401. package/src/data/providers/morpho.mjs +0 -177
  402. package/src/data/providers/nft-gallery.mjs +0 -163
  403. package/src/data/providers/nft-portfolio.mjs +0 -494
  404. package/src/data/providers/odos.mjs +0 -156
  405. package/src/data/providers/oneinch.mjs +0 -174
  406. package/src/data/providers/opensea-multichain.mjs +0 -136
  407. package/src/data/providers/opensea-nft.mjs +0 -371
  408. package/src/data/providers/paraswap.mjs +0 -118
  409. package/src/data/providers/pendle.mjs +0 -188
  410. package/src/data/providers/poly-clob.mjs +0 -283
  411. package/src/data/providers/poly-public.mjs +0 -96
  412. package/src/data/providers/poly-ws.mjs +0 -103
  413. package/src/data/providers/portfolio-history.mjs +0 -394
  414. package/src/data/providers/portfolio.mjs +0 -594
  415. package/src/data/providers/rfq.mjs +0 -15
  416. package/src/data/providers/rh-agent.mjs +0 -59
  417. package/src/data/providers/satflow.mjs +0 -341
  418. package/src/data/providers/signed-material-guard.mjs +0 -108
  419. package/src/data/providers/solana-rpc.mjs +0 -197
  420. package/src/data/providers/uniswap-v3.mjs +0 -349
  421. package/src/data/providers/uniswap-v4.mjs +0 -414
  422. package/src/data/providers/zerox.mjs +0 -167
  423. package/src/data/public-api-scan.mjs +0 -61
  424. package/src/data/quote-placeholder.mjs +0 -31
  425. package/src/exact-integer.mjs +0 -72
  426. package/src/exec-policy.mjs +0 -455
  427. package/src/flags.mjs +0 -15
  428. package/src/fresh-window.mjs +0 -76
  429. package/src/gmx-attestation.mjs +0 -176
  430. package/src/index.mjs +0 -100
  431. package/src/nft-gas-war-guard.mjs +0 -139
  432. package/src/onboarding/agent-keys.mjs +0 -161
  433. package/src/onboarding/harness-configs.mjs +0 -102
  434. package/src/onboarding/index.mjs +0 -18
  435. package/src/onboarding/tiers.mjs +0 -139
  436. package/src/oracle-env.mjs +0 -47
  437. package/src/portfolio-risk.mjs +0 -170
  438. package/src/prepare-envelope.mjs +0 -204
  439. package/src/profile-upgrade.mjs +0 -277
  440. package/src/protocol-execution.mjs +0 -84
  441. package/src/protocol-templates/gate.mjs +0 -179
  442. package/src/protocol-templates/prepare-deploy.mjs +0 -81
  443. package/src/public-api/buzz-integration.mjs +0 -256
  444. package/src/public-api/connect-agent.mjs +0 -416
  445. package/src/public-api/grants.mjs +0 -142
  446. package/src/public-api/http.mjs +0 -389
  447. package/src/public-control/aa-adapter.mjs +0 -402
  448. package/src/public-control/build-registry.mjs +0 -227
  449. package/src/public-control/bundler-client.mjs +0 -357
  450. package/src/public-control/grant-indexer.mjs +0 -296
  451. package/src/public-control/policy-render.mjs +0 -69
  452. package/src/public-control/policy-schema.mjs +0 -318
  453. package/src/public-control/runtime-config.mjs +0 -275
  454. package/src/public-control/session-key-model.mjs +0 -374
  455. package/src/public-control/session-orchestrator.mjs +0 -412
  456. package/src/rfq/intent.mjs +0 -180
  457. package/src/rfq/sources.mjs +0 -181
  458. package/src/route-attestation.mjs +0 -132
  459. package/src/router/best-execution.mjs +0 -326
  460. package/src/router/index.mjs +0 -226
  461. package/src/router/prepare-bridge.mjs +0 -289
  462. package/src/router/prepare-route.mjs +0 -398
  463. package/src/router/proposal.mjs +0 -311
  464. package/src/router/risk-classifier.mjs +0 -119
  465. package/src/router/route-sources.mjs +0 -364
  466. package/src/scanner/chains.config.mjs +0 -430
  467. package/src/scanner/contract.mjs +0 -270
  468. package/src/scanner/evm-scanner.mjs +0 -394
  469. package/src/scanner/index.mjs +0 -9
  470. package/src/scanner/v2-venue.mjs +0 -335
  471. package/src/scanner/v3-venue.mjs +0 -290
  472. package/src/scopes.mjs +0 -44
  473. package/src/sell-simulation.mjs +0 -167
  474. package/src/signals/engine.mjs +0 -146
  475. package/src/signals/index.mjs +0 -1
  476. package/src/token-transfer-guard.mjs +0 -188
  477. package/src/tui/app.mjs +0 -438
  478. package/src/tui/backend.mjs +0 -145
  479. package/src/tui/format.mjs +0 -272
  480. package/src/tui/gateway-client.mjs +0 -177
  481. package/src/tui/input.mjs +0 -501
  482. package/src/tui/renderer.mjs +0 -443
  483. package/src/tui/standalone-client.mjs +0 -666
  484. package/src/tui/theme.mjs +0 -81
  485. package/src/vault-attestation.mjs +0 -146
  486. package/src/venues.mjs +0 -206
  487. package/src/watch-preferences.mjs +0 -85
@@ -1,272 +0,0 @@
1
- // Oracle Console. Public frontend, Slice I.
2
- //
3
- // Single action UI: connect a wallet, then preview a proposed permission set.
4
- // This file never installs a grant or session key and never claims on-chain
5
- // enforcement. It never stores, logs, or transmits a private key, session
6
- // secret, bearer token, or signer URL.
7
- //
8
- // Talks to two BFF routes only:
9
- // POST /public/connect/assemble -> assembleUnsignedGrant(body)
10
- // POST /public/grants/active -> listActiveGrants(body.store, body.opts)
11
-
12
- (function () {
13
- "use strict";
14
-
15
- const CONNECT_ASSEMBLE_URL = "/public/connect/assemble";
16
- const GRANTS_ACTIVE_URL = "/public/grants/active";
17
-
18
- // Demo policy for the connected agent. Read only scopes, bounded caps,
19
- // one hour expiry. Nothing here is authorization.
20
- const DEMO_AGENT_ADDRESS = "0x1111111111111111111111111111111111111111";
21
- const DEMO_CHAIN_ID = 8453;
22
- const DEMO_ACTIONS = ["read:balance", "read:positions"];
23
- const DEMO_TARGETS = [];
24
- const DEMO_MAX_VALUE_WEI = "0";
25
- const DEMO_MAX_GAS_WEI = "0";
26
- const DEMO_MAX_SLIPPAGE_BPS = 0;
27
- const DEMO_TTL_SECONDS = 3600;
28
-
29
- const connectBtn = document.getElementById("connect-btn");
30
- const walletState = document.getElementById("wallet-state");
31
- const revokeBtn = document.getElementById("revoke-btn");
32
- const permissionPanel = document.getElementById("permission-panel");
33
- const panelStatus = document.getElementById("panel-status");
34
-
35
- const stepConnect = document.getElementById("step-connect");
36
- const stepBound = document.getElementById("step-bound");
37
- const stepEnforced = document.getElementById("step-enforced");
38
-
39
- const permChain = document.getElementById("perm-chain");
40
- const permActions = document.getElementById("perm-actions");
41
- const permTargets = document.getElementById("perm-targets");
42
- const permMaxValue = document.getElementById("perm-max-value");
43
- const permExpiry = document.getElementById("perm-expiry");
44
-
45
- // In-memory session state only. Never persisted, never logged.
46
- let session = {
47
- accountAddress: null,
48
- grant: null,
49
- grantId: null,
50
- };
51
-
52
- function setStep(stepEl, state) {
53
- stepEl.setAttribute("data-state", state);
54
- }
55
-
56
- function resetSteps() {
57
- setStep(stepConnect, "pending");
58
- setStep(stepBound, "pending");
59
- setStep(stepEnforced, "pending");
60
- }
61
-
62
- function hasInjectedWallet() {
63
- return typeof window !== "undefined" && typeof window.ethereum !== "undefined";
64
- }
65
-
66
- async function postJson(url, body) {
67
- const res = await fetch(url, {
68
- method: "POST",
69
- headers: { "content-type": "application/json" },
70
- body: JSON.stringify(body),
71
- });
72
- const data = await res.json().catch(() => null);
73
- if (!res.ok) {
74
- const message = (data && data.error) || `request to ${url} failed with status ${res.status}`;
75
- throw new Error(message);
76
- }
77
- return data;
78
- }
79
-
80
- function nowUnixSeconds() {
81
- return Math.floor(Date.now() / 1000);
82
- }
83
-
84
- function formatExpiry(unixSeconds) {
85
- return new Date(unixSeconds * 1000).toISOString();
86
- }
87
-
88
- function renderPermissionPanel(grant) {
89
- permChain.textContent = String(grant.chainId);
90
- permActions.textContent = grant.actions.join(", ");
91
- permTargets.textContent = grant.targets.length ? grant.targets.join(", ") : "none, read and simulate only";
92
- permMaxValue.textContent = `${grant.maxValueWei} wei`;
93
- permExpiry.textContent = formatExpiry(grant.expiresAt);
94
- permissionPanel.hidden = false;
95
- revokeBtn.disabled = false;
96
- panelStatus.textContent = "";
97
- }
98
-
99
- async function requestAccount() {
100
- const accounts = await window.ethereum.request({ method: "eth_requestAccounts" });
101
- if (!accounts || !accounts[0]) {
102
- throw new Error("no account returned by wallet");
103
- }
104
- return accounts[0];
105
- }
106
-
107
- async function connectFlow() {
108
- if (!hasInjectedWallet()) {
109
- walletState.textContent = "Connect a wallet to continue.";
110
- return;
111
- }
112
-
113
- connectBtn.disabled = true;
114
- resetSteps();
115
- permissionPanel.hidden = true;
116
-
117
- try {
118
- walletState.textContent = "Requesting account.";
119
- const accountAddress = await requestAccount();
120
- session.accountAddress = accountAddress;
121
- setStep(stepConnect, "done");
122
- walletState.textContent = `Connected as ${accountAddress}.`;
123
-
124
- setStep(stepBound, "active");
125
- const assembled = await postJson(CONNECT_ASSEMBLE_URL, {
126
- chainId: DEMO_CHAIN_ID,
127
- agentAddress: DEMO_AGENT_ADDRESS,
128
- accountAddress: accountAddress,
129
- actions: DEMO_ACTIONS,
130
- targets: DEMO_TARGETS,
131
- maxValueWei: DEMO_MAX_VALUE_WEI,
132
- maxGasWei: DEMO_MAX_GAS_WEI,
133
- maxSlippageBps: DEMO_MAX_SLIPPAGE_BPS,
134
- ttlSeconds: DEMO_TTL_SECONDS,
135
- nonce: `console.${nowUnixSeconds()}`,
136
- revocationKey: `revoke.console.${nowUnixSeconds()}`,
137
- });
138
-
139
- const grant = assembled.payload.grant;
140
- const grantId = assembled.payload.grantId;
141
- session.grant = grant;
142
- session.grantId = grantId;
143
- setStep(stepBound, "done");
144
- walletState.textContent = "Permission set reviewed. Building local preview.";
145
-
146
- setStep(stepEnforced, "active");
147
- await refreshActiveGrants();
148
- setStep(stepEnforced, "done");
149
- walletState.textContent = "Permission preview ready. No session was installed.";
150
- } catch (err) {
151
- walletState.textContent = `Connect failed: ${err.message}`;
152
- } finally {
153
- connectBtn.disabled = false;
154
- }
155
- }
156
-
157
- async function refreshActiveGrants() {
158
- if (!session.grant || !session.accountAddress) return;
159
-
160
- const store = [
161
- {
162
- grant: session.grant,
163
- revoked: false,
164
- },
165
- ];
166
-
167
- const result = await postJson(GRANTS_ACTIVE_URL, {
168
- store: store,
169
- opts: {
170
- now: nowUnixSeconds(),
171
- accountAddress: session.accountAddress,
172
- agentAddress: DEMO_AGENT_ADDRESS,
173
- chainId: DEMO_CHAIN_ID,
174
- },
175
- });
176
-
177
- const active = Array.isArray(result) ? result : result.active || [];
178
- const match = active.find((entry) => entry.id === session.grantId);
179
-
180
- if (match) {
181
- renderPermissionPanel(match.grant);
182
- } else {
183
- permissionPanel.hidden = false;
184
- revokeBtn.disabled = true;
185
- panelStatus.textContent = "This permission preview is no longer active.";
186
- }
187
- }
188
-
189
- function clearPreviewFlow() {
190
- if (!session.grant) return;
191
- revokeBtn.disabled = true;
192
- session.grant = null;
193
- session.grantId = null;
194
- permissionPanel.hidden = true;
195
- resetSteps();
196
- setStep(stepConnect, "done");
197
- walletState.textContent = "Permission preview cleared. No on-chain revocation was required.";
198
- }
199
-
200
- connectBtn.addEventListener("click", () => {
201
- connectFlow();
202
- });
203
-
204
- revokeBtn.addEventListener("click", () => {
205
- clearPreviewFlow();
206
- });
207
-
208
- // ── Bitcoin multi-wallet lane (actual BTC L1) ───────────────────────────
209
- const btcConnectBtn = document.getElementById("btc-connect-btn");
210
- const btcWalletState = document.getElementById("btc-wallet-state");
211
- const btcPanel = document.getElementById("btc-panel");
212
- const btcWalletLabel = document.getElementById("btc-wallet-label");
213
- const btcAddressEl = document.getElementById("btc-address");
214
- const btcDetectedEl = document.getElementById("btc-detected");
215
- const btcPanelStatus = document.getElementById("btc-panel-status");
216
-
217
- let btcSession = null;
218
-
219
- function refreshBtcDetected() {
220
- const api = window.OracleBitcoinWallets;
221
- if (!api) {
222
- if (btcDetectedEl) btcDetectedEl.textContent = "wallet adapter missing";
223
- return [];
224
- }
225
- const detected = api.listDetected();
226
- if (btcDetectedEl) {
227
- btcDetectedEl.textContent = detected.length
228
- ? detected.map((d) => d.label).join(", ")
229
- : "none - install Xverse / UniSat / Leather / OKX / Phantom / Magic Eden";
230
- }
231
- return detected;
232
- }
233
-
234
- async function btcConnectFlow() {
235
- const api = window.OracleBitcoinWallets;
236
- if (!api) {
237
- btcWalletState.textContent = "Bitcoin wallet adapter failed to load.";
238
- return;
239
- }
240
- btcConnectBtn.disabled = true;
241
- btcWalletState.textContent = "Requesting Bitcoin wallet.";
242
- try {
243
- btcSession = await api.connect();
244
- btcWalletState.textContent = `BTC connected: ${btcSession.walletLabel}`;
245
- btcWalletLabel.textContent = btcSession.walletLabel;
246
- btcAddressEl.textContent = btcSession.address;
247
- btcPanel.hidden = false;
248
- btcPanelStatus.textContent =
249
- "Connected. Signing stays in your wallet (signPsbt). Oracle only reads + broadcasts user-signed hex.";
250
- refreshBtcDetected();
251
- } catch (err) {
252
- btcWalletState.textContent = `BTC connect failed: ${err.message}`;
253
- btcPanelStatus.textContent = err.message;
254
- } finally {
255
- btcConnectBtn.disabled = false;
256
- }
257
- }
258
-
259
- if (btcConnectBtn) {
260
- btcConnectBtn.addEventListener("click", () => {
261
- btcConnectFlow();
262
- });
263
- refreshBtcDetected();
264
- if (!refreshBtcDetected().length) {
265
- btcWalletState.textContent = "No Bitcoin wallet detected yet.";
266
- }
267
- }
268
-
269
- if (!hasInjectedWallet()) {
270
- walletState.textContent = "Connect an EVM wallet to continue.";
271
- }
272
- })();
@@ -1,206 +0,0 @@
1
- // Multi-wallet Bitcoin connector for Oracle Console.
2
- // Injected providers only - no npm wallet SDK required in the static console.
3
- // Supported: Xverse, UniSat, Leather, OKX, Phantom, Magic Eden, generic.
4
- // Signing: PSBT stays in the wallet. Oracle never sees private keys.
5
-
6
- (function (root) {
7
- "use strict";
8
-
9
- const WALLETS = [
10
- {
11
- id: "unisat",
12
- label: "UniSat",
13
- detect: () => window.unisat,
14
- async connect(provider) {
15
- const accounts = await provider.requestAccounts();
16
- const address = accounts && accounts[0];
17
- if (!address) throw new Error("UniSat returned no address");
18
- const network = (await provider.getNetwork?.()) || "livenet";
19
- return { address, network, provider };
20
- },
21
- async signPsbt(provider, psbtHex, options = {}) {
22
- return provider.signPsbt(psbtHex, options);
23
- },
24
- async pushPsbt(provider, psbtHex) {
25
- if (typeof provider.pushPsbt === "function") return provider.pushPsbt(psbtHex);
26
- throw new Error("UniSat pushPsbt unavailable - use Oracle broadcast with raw hex");
27
- },
28
- },
29
- {
30
- id: "okx",
31
- label: "OKX",
32
- detect: () => window.okxwallet && window.okxwallet.bitcoin,
33
- async connect(provider) {
34
- const result = await provider.connect();
35
- const address = result?.address || result?.addresses?.[0] || (Array.isArray(result) && result[0]);
36
- if (!address) throw new Error("OKX returned no address");
37
- return { address, network: result?.network || "livenet", provider };
38
- },
39
- async signPsbt(provider, psbtHex, options = {}) {
40
- return provider.signPsbt(psbtHex, options);
41
- },
42
- async pushPsbt(provider, psbtHex) {
43
- if (typeof provider.pushPsbt === "function") return provider.pushPsbt(psbtHex);
44
- throw new Error("OKX pushPsbt unavailable - use Oracle broadcast with raw hex");
45
- },
46
- },
47
- {
48
- id: "xverse",
49
- label: "Xverse",
50
- detect: () =>
51
- window.XverseProviders?.BitcoinProvider ||
52
- window.BitcoinProvider ||
53
- (window.xverse && window.xverse.bitcoin),
54
- async connect(provider) {
55
- // Sats Connect request shape when provider.request exists
56
- if (typeof provider.request === "function") {
57
- const res = await provider.request("getAccounts", {
58
- purposes: ["payment", "ordinals"],
59
- message: "Connect to Oracle",
60
- });
61
- const arr = res?.result || res;
62
- const payment = Array.isArray(arr) ? arr.find((a) => a.purpose === "payment") || arr[0] : null;
63
- const address = payment?.address || payment;
64
- if (!address) throw new Error("Xverse returned no address");
65
- return { address, network: payment?.network || "Mainnet", provider };
66
- }
67
- if (typeof provider.connect === "function") {
68
- const res = await provider.connect("Oracle");
69
- const address = res?.addresses?.payment?.address || res?.paymentAddress || res?.address;
70
- if (!address) throw new Error("Xverse returned no address");
71
- return { address, network: res?.network || "Mainnet", provider };
72
- }
73
- throw new Error("Xverse provider has no connect/request method");
74
- },
75
- async signPsbt(provider, psbtBase64, options = {}) {
76
- if (typeof provider.request === "function") {
77
- const res = await provider.request("signPsbt", {
78
- psbt: psbtBase64,
79
- allowedSignHash: options.allowedSignHash,
80
- signInputs: options.signInputs,
81
- broadcast: false,
82
- });
83
- return res?.result?.psbt || res?.psbt || res;
84
- }
85
- if (typeof provider.signPsbt === "function") {
86
- return provider.signPsbt(psbtBase64, options);
87
- }
88
- throw new Error("Xverse signPsbt unavailable");
89
- },
90
- async pushPsbt() {
91
- throw new Error("Xverse: finalize in wallet or broadcast raw hex via Oracle");
92
- },
93
- },
94
- {
95
- id: "leather",
96
- label: "Leather",
97
- detect: () => window.LeatherProvider || window.HiroWalletProvider || window.btc,
98
- async connect(provider) {
99
- if (typeof provider.request === "function") {
100
- const res = await provider.request("getAddresses");
101
- const addrs = res?.result?.addresses || res?.addresses || [];
102
- const payment = addrs.find((a) => a.type === "p2wpkh" || a.symbol === "BTC") || addrs[0];
103
- const address = payment?.address;
104
- if (!address) throw new Error("Leather returned no address");
105
- return { address, network: payment?.network || "mainnet", provider };
106
- }
107
- throw new Error("Leather provider has no request method");
108
- },
109
- async signPsbt(provider, psbtBase64, options = {}) {
110
- const res = await provider.request("signPsbt", {
111
- hex: options.hex || undefined,
112
- base64: psbtBase64,
113
- broadcast: false,
114
- ...options,
115
- });
116
- return res?.result?.hex || res?.result?.base64 || res?.hex || res;
117
- },
118
- async pushPsbt() {
119
- throw new Error("Leather: broadcast raw hex via Oracle");
120
- },
121
- },
122
- {
123
- id: "phantom",
124
- label: "Phantom",
125
- detect: () => window.phantom && window.phantom.bitcoin,
126
- async connect(provider) {
127
- const res = await provider.requestAccounts();
128
- const address = res?.[0]?.address || res?.[0];
129
- if (!address) throw new Error("Phantom returned no BTC address");
130
- return { address, network: "mainnet", provider };
131
- },
132
- async signPsbt(provider, psbtHex, options = {}) {
133
- const res = await provider.signPSBT(Buffer.from(psbtHex, "hex"), options);
134
- return res;
135
- },
136
- async pushPsbt() {
137
- throw new Error("Phantom: broadcast raw hex via Oracle");
138
- },
139
- },
140
- {
141
- id: "magic-eden",
142
- label: "Magic Eden",
143
- detect: () => window.magicEden && window.magicEden.bitcoin,
144
- async connect(provider) {
145
- const res = await provider.connect();
146
- const address = res?.address || res?.ordinals?.address || res?.payment?.address;
147
- if (!address) throw new Error("Magic Eden returned no address");
148
- return { address, network: "mainnet", provider };
149
- },
150
- async signPsbt(provider, psbt, options = {}) {
151
- return provider.signPsbt(psbt, options);
152
- },
153
- async pushPsbt() {
154
- throw new Error("Magic Eden: broadcast raw hex via Oracle");
155
- },
156
- },
157
- ];
158
-
159
- function listDetected() {
160
- return WALLETS.filter((w) => {
161
- try {
162
- return !!w.detect();
163
- } catch {
164
- return false;
165
- }
166
- }).map((w) => ({ id: w.id, label: w.label }));
167
- }
168
-
169
- async function connect(preferredId) {
170
- const detected = WALLETS.filter((w) => {
171
- try {
172
- return !!w.detect();
173
- } catch {
174
- return false;
175
- }
176
- });
177
- if (!detected.length) {
178
- throw new Error(
179
- "No Bitcoin wallet detected. Install Xverse, UniSat, Leather, OKX, Phantom, or Magic Eden."
180
- );
181
- }
182
- const wallet = (preferredId && detected.find((w) => w.id === preferredId)) || detected[0];
183
- const provider = wallet.detect();
184
- const session = await wallet.connect(provider);
185
- return {
186
- walletId: wallet.id,
187
- walletLabel: wallet.label,
188
- address: session.address,
189
- network: session.network,
190
- provider: session.provider,
191
- wallet,
192
- };
193
- }
194
-
195
- async function signPsbt(session, psbt, options = {}) {
196
- if (!session?.wallet || !session?.provider) throw new Error("Bitcoin wallet not connected");
197
- return session.wallet.signPsbt(session.provider, psbt, options);
198
- }
199
-
200
- root.OracleBitcoinWallets = {
201
- listDetected,
202
- connect,
203
- signPsbt,
204
- supported: WALLETS.map((w) => ({ id: w.id, label: w.label })),
205
- };
206
- })(typeof window !== "undefined" ? window : globalThis);
@@ -1,91 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1" />
6
- <title>Oracle Console</title>
7
- <link rel="stylesheet" href="styles.css" />
8
- </head>
9
- <body>
10
- <main class="page">
11
- <header class="hero">
12
- <p class="hero-line">Preview agent permissions before you install a real wallet-enforced session.</p>
13
- <p class="hero-sub">
14
- Full crypto pack: multichain reads, quotes, simulation, and unsigned
15
- transaction prep across 11 EVM chains plus Solana and Bitcoin L1 lanes.
16
- Protocol builder included &mdash; design and prepare a deploy, sign it yourself.
17
- </p>
18
- <p class="hero-posture">
19
- Every lane starts <strong>DISARMED</strong>. This console previews policy only and does not authorize an agent.
20
- </p>
21
- </header>
22
-
23
- <section class="cta-row">
24
- <button id="connect-btn" class="cta" type="button">Preview agent permissions</button>
25
- <button id="btc-connect-btn" class="cta cta-secondary" type="button">Connect Bitcoin wallet</button>
26
- <p id="wallet-state" class="wallet-state" aria-live="polite"></p>
27
- <p id="btc-wallet-state" class="wallet-state" aria-live="polite"></p>
28
- </section>
29
-
30
- <section id="btc-panel" class="permission-panel btc-panel" hidden>
31
- <h2 class="panel-title">Bitcoin lane</h2>
32
- <p class="panel-note">Actual BTC L1 + ordinals/runes via Satflow. Sign in wallet (Xverse / UniSat / Leather / OKX / Phantom). Magic Eden BTC marketplace is dead. Oracle never holds keys.</p>
33
- <dl class="panel-grid">
34
- <dt>Wallet</dt>
35
- <dd id="btc-wallet-label">.</dd>
36
- <dt>Address</dt>
37
- <dd id="btc-address">.</dd>
38
- <dt>Detected</dt>
39
- <dd id="btc-detected">.</dd>
40
- </dl>
41
- <p id="btc-panel-status" class="panel-status" aria-live="polite"></p>
42
- </section>
43
-
44
- <section class="sequence" aria-label="connection sequence">
45
- <div class="seq-step" id="step-connect" data-state="pending">
46
- <span class="seq-index">1</span>
47
- <span class="seq-label">Connect</span>
48
- </div>
49
- <div class="seq-arrow">-&gt;</div>
50
- <div class="seq-step" id="step-bound" data-state="pending">
51
- <span class="seq-index">2</span>
52
- <span class="seq-label">Review</span>
53
- </div>
54
- <div class="seq-arrow">-&gt;</div>
55
- <div class="seq-step" id="step-enforced" data-state="pending">
56
- <span class="seq-index">3</span>
57
- <span class="seq-label">Preview</span>
58
- </div>
59
- </section>
60
-
61
- <section id="permission-panel" class="permission-panel" hidden>
62
- <h2 class="panel-title">What this agent can do</h2>
63
- <dl class="panel-grid">
64
- <dt>Chain</dt>
65
- <dd id="perm-chain">.</dd>
66
-
67
- <dt>Actions</dt>
68
- <dd id="perm-actions">.</dd>
69
-
70
- <dt>Targets</dt>
71
- <dd id="perm-targets">.</dd>
72
-
73
- <dt>Max value</dt>
74
- <dd id="perm-max-value">.</dd>
75
-
76
- <dt>Expiry</dt>
77
- <dd id="perm-expiry">.</dd>
78
- </dl>
79
- <button id="revoke-btn" class="revoke" type="button">Clear preview</button>
80
- <p id="panel-status" class="panel-status" aria-live="polite"></p>
81
- </section>
82
-
83
- <footer class="custody-line">
84
- <p>You keep custody. A preview is not an installed grant, session key, or revocation.</p>
85
- </footer>
86
- </main>
87
-
88
- <script src="bitcoin-wallets.js"></script>
89
- <script src="app.js"></script>
90
- </body>
91
- </html>