@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,27 +0,0 @@
1
- import { spawnSync } from "node:child_process";
2
- import path from "node:path";
3
- import { renderNextSteps } from "../first-run.mjs";
4
-
5
- export default {
6
- name: "init",
7
- summary: "install agent lanes + read plane (dry-run by default)",
8
- group: "read",
9
- usage: "oracle init [--apply --force --only <lane> --json --yes]",
10
- async run(ctx) {
11
- const argv = [...ctx.argv];
12
- if (argv.includes("--yes") && !argv.includes("--apply")) argv.push("--apply");
13
- const bin = path.join(ctx.root, "bin", "oracle-init.mjs");
14
- const r = spawnSync(process.execPath, [bin, ...argv], { encoding: "utf8", env: process.env });
15
- if (r.error) {
16
- process.stderr.write(`oracle: failed to spawn oracle-init: ${r.error.message}\n`);
17
- return 1;
18
- }
19
- if (r.stdout) process.stdout.write(r.stdout);
20
- if (r.stderr) process.stderr.write(r.stderr);
21
- const code = typeof r.status === "number" ? r.status : 1;
22
- if (code === 0 && argv.includes("--apply") && !argv.includes("--json")) {
23
- process.stdout.write(renderNextSteps());
24
- }
25
- return code;
26
- },
27
- };
@@ -1,142 +0,0 @@
1
- import { parseArgs } from "node:util";
2
- import { printOperatorNotInstalled } from "../operator-dispatch.mjs";
3
- import { installClaudeCode } from "../mcp-targets/claude-code.mjs";
4
- import { installClaudeDesktop } from "../mcp-targets/claude-desktop.mjs";
5
- import { installCodex } from "../mcp-targets/codex.mjs";
6
- import { installChatgpt } from "../mcp-targets/chatgpt.mjs";
7
- import { buildServerSpecs } from "../mcp-targets/shared.mjs";
8
-
9
- function usage() {
10
- process.stderr.write(
11
- "usage: oracle mcp <install|print> [target] [flags]\n" +
12
- " targets: claude-code | claude-desktop | codex | chatgpt | generic\n" +
13
- " flags: --with-control --project --print --json\n",
14
- );
15
- }
16
-
17
- function emitResult(result, { json = false } = {}) {
18
- if (result.print && !result.instructions) {
19
- process.stdout.write(JSON.stringify(result.print, null, 2) + "\n");
20
- } else if (result.printText) {
21
- process.stdout.write(result.printText);
22
- }
23
- if (result.instructions) {
24
- process.stdout.write(result.instructions + "\n");
25
- if (result.print && json) process.stdout.write(JSON.stringify(result.print, null, 2) + "\n");
26
- }
27
- if (!result.print && !result.printText && !result.instructions) {
28
- const line = {
29
- status: result.status,
30
- path: result.path || null,
31
- backup: result.backup || null,
32
- method: result.method || null,
33
- };
34
- process.stdout.write(
35
- (json ? JSON.stringify(line, null, 2) : `${line.status}${line.path ? " " + line.path : ""}`) + "\n",
36
- );
37
- }
38
- }
39
-
40
- export default {
41
- name: "mcp",
42
- summary: "wire Oracle into AI clients",
43
- group: "read",
44
- usage: "oracle mcp install <target> | oracle mcp print [--target <t>]",
45
- async run(ctx) {
46
- const verb = ctx.argv[0];
47
- if (!verb || verb === "--help" || verb === "-h") {
48
- usage();
49
- return verb ? 0 : 1;
50
- }
51
-
52
- let values, positionals;
53
- try {
54
- ({ values, positionals } = parseArgs({
55
- args: ctx.argv.slice(1),
56
- options: {
57
- "with-control": { type: "boolean", default: false },
58
- project: { type: "boolean", default: false },
59
- print: { type: "boolean", default: false },
60
- json: { type: "boolean", default: false },
61
- target: { type: "string" },
62
- },
63
- allowPositionals: true,
64
- strict: false,
65
- }));
66
- } catch (err) {
67
- process.stderr.write(`oracle mcp: ${err.message}\n`);
68
- usage();
69
- return 1;
70
- }
71
-
72
- const withControl = !!values["with-control"];
73
- const project = !!values.project;
74
- const json = !!values.json;
75
- const operator = ctx.resolveOperator ? ctx.resolveOperator() : { ok: false };
76
-
77
- if (withControl && (!operator || !operator.ok)) {
78
- printOperatorNotInstalled(process.stderr);
79
- return 3;
80
- }
81
-
82
- const opts = { oracleRoot: ctx.root, operator, withControl, project, cwd: process.cwd() };
83
-
84
- if (verb === "print") {
85
- const target = values.target || positionals[0] || "claude-code";
86
- if (target === "generic" || target === "claude-code") {
87
- const built = buildServerSpecs(opts);
88
- if (!built.ok) { printOperatorNotInstalled(process.stderr); return 3; }
89
- process.stdout.write(JSON.stringify({ mcpServers: built.specs }, null, 2) + "\n");
90
- return 0;
91
- }
92
- if (target === "chatgpt") {
93
- const r = await installChatgpt({ printOnly: true });
94
- emitResult(r, { json });
95
- return 0;
96
- }
97
- if (target === "codex") {
98
- emitResult(await installCodex({ ...opts, printOnly: true }), { json });
99
- return 0;
100
- }
101
- if (target === "claude-desktop") {
102
- emitResult(await installClaudeDesktop({ ...opts, printOnly: true }), { json });
103
- return 0;
104
- }
105
- process.stderr.write(`oracle mcp: unknown target '${target}'\n`);
106
- return 1;
107
- }
108
-
109
- if (verb === "install") {
110
- const target = positionals[0] || values.target;
111
- if (!target) { usage(); return 1; }
112
- const printOnly = !!values.print;
113
- let result;
114
- if (target === "claude-code") result = await installClaudeCode({ ...opts, printOnly });
115
- else if (target === "claude-desktop") result = await installClaudeDesktop({ ...opts, printOnly });
116
- else if (target === "codex") result = await installCodex({ ...opts, printOnly });
117
- else if (target === "chatgpt") result = await installChatgpt({ printOnly });
118
- else if (target === "generic") {
119
- const built = buildServerSpecs(opts);
120
- if (!built.ok) { printOperatorNotInstalled(process.stderr); return 3; }
121
- process.stdout.write(JSON.stringify({ mcpServers: built.specs }, null, 2) + "\n");
122
- return 0;
123
- } else {
124
- process.stderr.write(`oracle mcp: unknown target '${target}'\n`);
125
- return 1;
126
- }
127
- if (!result.ok) {
128
- if (result.code === 3) printOperatorNotInstalled(process.stderr);
129
- else process.stderr.write(`oracle mcp: ${result.reason || "failed"}\n`);
130
- return result.code || 1;
131
- }
132
- emitResult(result, { json });
133
- if (result.status && String(result.status).startsWith("printed") && result.print) {
134
- process.stdout.write(JSON.stringify(result.print, null, 2) + "\n");
135
- }
136
- return 0;
137
- }
138
-
139
- usage();
140
- return 1;
141
- },
142
- };
@@ -1,99 +0,0 @@
1
- import { spawnChild } from "../spawn-child.mjs";
2
- import { resolveHermes } from "../runtime.mjs";
3
- import { readModelConfig, writeModelConfig } from "../model-config.mjs";
4
- import { oracleHarnessInvocation } from "./chat.mjs";
5
-
6
- function option(args, name) {
7
- const index = args.indexOf(name);
8
- return index >= 0 && args[index + 1] ? args[index + 1] : null;
9
- }
10
-
11
- function standalonePatch(args) {
12
- const backend = option(args, "--backend");
13
- const provider = option(args, "--provider");
14
- const model = option(args, "--model") || option(args, "-m");
15
- const baseUrl = option(args, "--base-url");
16
- const apiKeyEnv = option(args, "--api-key-env");
17
- const contextLength = option(args, "--context-length");
18
- const reasoningEffort = option(args, "--reasoning-effort");
19
- const hasStandaloneField = Boolean(provider || model || baseUrl || apiKeyEnv || contextLength || reasoningEffort);
20
- if (!backend && !hasStandaloneField) return null;
21
- const current = { ...(readModelConfig() || {}) };
22
- if (provider) {
23
- delete current.apiKeyEnv;
24
- if (provider !== "custom" || provider !== current.provider) delete current.baseUrl;
25
- }
26
- return {
27
- ...current,
28
- backend: backend || "standalone",
29
- ...(provider ? { provider } : {}),
30
- ...(model ? { model } : {}),
31
- ...(baseUrl ? { baseUrl } : {}),
32
- ...(apiKeyEnv ? { apiKeyEnv } : {}),
33
- ...(contextLength ? { contextLength } : {}),
34
- ...(reasoningEffort ? { reasoningEffort } : {}),
35
- };
36
- }
37
-
38
- function usage() {
39
- return [
40
- "oracle model, choose standalone model settings or open Hermes' picker",
41
- "",
42
- " oracle model",
43
- " oracle model --show",
44
- " oracle model --backend standalone --provider openrouter --model openrouter/auto",
45
- " oracle model --backend auto",
46
- "",
47
- "standalone keys stay in environment variables, never model.json:",
48
- " OPENROUTER_API_KEY, OPENAI_API_KEY, XAI_API_KEY, DEEPSEEK_API_KEY, GEMINI_API_KEY",
49
- ].join("\n");
50
- }
51
-
52
- export default {
53
- name: "model",
54
- summary: "choose Oracle's standalone model or existing Hermes provider",
55
- group: "read",
56
- usage: usage(),
57
- async run(ctx) {
58
- const args = [...ctx.argv];
59
- if (args.includes("--show")) {
60
- process.stdout.write(`${JSON.stringify(readModelConfig() || { backend: "auto" }, null, 2)}\n`);
61
- return 0;
62
- }
63
-
64
- const patch = standalonePatch(args);
65
- if (patch) {
66
- try {
67
- const saved = writeModelConfig(patch);
68
- process.stdout.write(`oracle model: ${saved.backend}`);
69
- if (saved.provider) process.stdout.write(` / ${saved.provider}`);
70
- if (saved.model) process.stdout.write(` / ${saved.model}`);
71
- process.stdout.write("\n");
72
- if (saved.backend === "standalone" && saved.apiKeyEnv) {
73
- process.stdout.write(`key source: ${saved.apiKeyEnv}\n`);
74
- }
75
- return 0;
76
- } catch (error) {
77
- process.stderr.write(`oracle model: ${error.message}\n`);
78
- return 1;
79
- }
80
- }
81
-
82
- const found = resolveHermes();
83
- if (!found.ok) {
84
- process.stderr.write(
85
- "Oracle standalone chat does not require Hermes.\n" +
86
- "Configure a provider with: oracle model --backend standalone --provider openrouter --model openrouter/auto\n" +
87
- "Then set OPENROUTER_API_KEY.\n",
88
- );
89
- return 1;
90
- }
91
- const launch = oracleHarnessInvocation(found.bin, ["-p", "oracle", "model", ...args]);
92
- return spawnChild(
93
- launch.command,
94
- launch.args,
95
- { stdio: "inherit", env: process.env },
96
- "oracle-model",
97
- );
98
- },
99
- };
@@ -1,12 +0,0 @@
1
- import { spawnSync } from "node:child_process";
2
- import path from "node:path";
3
- export default {
4
- name: "prepare", summary: "build an unsigned swap (alias of route prepare)", group: "read",
5
- usage: "oracle prepare <chain> <tokenIn> <tokenOut> <taker> [amt]",
6
- async run(ctx) {
7
- const bin = path.join(ctx.root, "bin", "oracle-route.mjs");
8
- const r = spawnSync(process.execPath, [bin, "prepare", ...ctx.argv], { stdio: "inherit" });
9
- if (r.error) { process.stderr.write(`oracle: failed to spawn oracle-route: ${r.error.message}\n`); return 1; }
10
- return typeof r.status === "number" ? r.status : 1;
11
- },
12
- };
@@ -1,20 +0,0 @@
1
- import path from "node:path";
2
- import { parseArgs } from "node:util";
3
- import { spawnChild } from "../spawn-child.mjs";
4
- export default {
5
- name: "public", summary: "secret-free public HTTP surface", group: "read",
6
- usage: "oracle public serve [--port N]",
7
- async run(ctx) {
8
- const verb = ctx.argv[0] || "serve";
9
- if (verb !== "serve") { process.stderr.write("usage: oracle public serve [--port N]\n"); return 1; }
10
- let port = null;
11
- try {
12
- const { values } = parseArgs({ args: ctx.argv.slice(1), options: { port: { type: "string" } }, allowPositionals: true, strict: false });
13
- port = values.port || null;
14
- } catch {}
15
- const env = { ...process.env };
16
- if (port) env.ORACLE_PUBLIC_PORT = String(port);
17
- const bin = path.join(ctx.root, "bin", "oracle-public-server.mjs");
18
- return spawnChild(process.execPath, [bin], { stdio: "inherit", env }, "oracle-public-server");
19
- },
20
- };
@@ -1,12 +0,0 @@
1
- import { spawnSync } from "node:child_process";
2
- import path from "node:path";
3
- export default {
4
- name: "route", summary: "swap/bridge prepare helpers", group: "read",
5
- usage: "oracle route <swap|bridge|prepare|prepare-bridge> ...",
6
- async run(ctx) {
7
- const bin = path.join(ctx.root, "bin", "oracle-route.mjs");
8
- const r = spawnSync(process.execPath, [bin, ...ctx.argv], { stdio: "inherit" });
9
- if (r.error) { process.stderr.write(`oracle: failed to spawn oracle-route: ${r.error.message}\n`); return 1; }
10
- return typeof r.status === "number" ? r.status : 1;
11
- },
12
- };
@@ -1,9 +0,0 @@
1
- export default {
2
- name: "runner",
3
- summary: "action runner daemon",
4
- group: "sign",
5
- usage: "oracle runner [--interval-ms N ...]",
6
- async run(ctx) {
7
- return ctx.dispatchOperator("oracle-runner", ctx.argv, { appendHintOnError: true });
8
- },
9
- };
@@ -1,12 +0,0 @@
1
- import { spawnSync } from "node:child_process";
2
- import path from "node:path";
3
- export default {
4
- name: "scan", summary: "chain scanner", group: "read",
5
- usage: "oracle scan <chains|head|token|pools|risk|quote|sell> ...",
6
- async run(ctx) {
7
- const bin = path.join(ctx.root, "bin", "oracle-scan.mjs");
8
- const r = spawnSync(process.execPath, [bin, ...ctx.argv], { stdio: "inherit" });
9
- if (r.error) { process.stderr.write(`oracle: failed to spawn oracle-scan: ${r.error.message}\n`); return 1; }
10
- return typeof r.status === "number" ? r.status : 1;
11
- },
12
- };
@@ -1,275 +0,0 @@
1
- import { spawnSync } from "node:child_process";
2
- import readline from "node:readline/promises";
3
- import { stdin as input, stdout as output } from "node:process";
4
- import {
5
- findMessagingPlatform,
6
- listMessagingPlatforms,
7
- renderSetupMenu,
8
- } from "../messaging-platforms.mjs";
9
- import {
10
- platformStatus,
11
- renderStatus,
12
- setPlatformToken,
13
- touchSetupState,
14
- } from "../setup-state.mjs";
15
- import { hermesRoot } from "../paths.mjs";
16
- import { installManagedHermes, resolveHermes } from "../runtime.mjs";
17
-
18
- function usage() {
19
- return [
20
- "oracle setup — wire messaging + local agent surface",
21
- "",
22
- " oracle setup menu + platform status",
23
- " oracle setup status same, machine-friendly with --json",
24
- " oracle setup messaging open hermes gateway setup wizard",
25
- " oracle setup telegram set TELEGRAM_BOT_TOKEN for profile",
26
- " oracle setup discord set DISCORD_BOT_TOKEN for profile",
27
- " oracle setup slack set slack tokens",
28
- " oracle setup <platform> any supported hermes platform",
29
- " oracle setup gateway [status|restart|start|stop]",
30
- " oracle setup profile [name] default: oracle",
31
- "",
32
- "chat:",
33
- " /setup",
34
- " /setup telegram",
35
- " /setup status",
36
- "",
37
- "tokens stay local in ~/.hermes/profiles/<profile>/.env",
38
- "oracle never prints secrets.",
39
- ].join("\n");
40
- }
41
-
42
- function profileFromArgs(args) {
43
- const i = args.indexOf("--profile");
44
- if (i >= 0 && args[i + 1]) return args[i + 1];
45
- const j = args.indexOf("-p");
46
- if (j >= 0 && args[j + 1]) return args[j + 1];
47
- return process.env.ORACLE_PROFILE || "oracle";
48
- }
49
-
50
- function stripProfileArgs(args) {
51
- const out = [];
52
- for (let i = 0; i < args.length; i++) {
53
- if (args[i] === "--profile" || args[i] === "-p") {
54
- i += 1;
55
- continue;
56
- }
57
- out.push(args[i]);
58
- }
59
- return out;
60
- }
61
-
62
- function runHermes(argv, { inherit = true, env = process.env } = {}) {
63
- let resolved = resolveHermes();
64
- if (!resolved.ok && process.stdin.isTTY && process.stdout.isTTY && process.env.ORACLE_NO_BOOTSTRAP !== "1") {
65
- process.stdout.write("setting up oracle's local messaging runtime (one time)\n\n");
66
- const installed = installManagedHermes();
67
- if (installed.ok) resolved = { ok: true, bin: installed.bin };
68
- }
69
- if (!resolved.ok) {
70
- process.stderr.write("oracle setup needs the local runtime\nrun: oracle bootstrap\n");
71
- return 1;
72
- }
73
- const r = spawnSync(resolved.bin, argv, {
74
- stdio: inherit ? "inherit" : "pipe",
75
- encoding: "utf8",
76
- env,
77
- });
78
- if (r.error) {
79
- process.stderr.write(`oracle setup: failed to run hermes: ${r.error.message}\n`);
80
- return 1;
81
- }
82
- if (!inherit) {
83
- if (r.stdout) process.stdout.write(r.stdout);
84
- if (r.stderr) process.stderr.write(r.stderr);
85
- }
86
- return typeof r.status === "number" ? r.status : 1;
87
- }
88
-
89
- async function promptSecret(label) {
90
- if (!process.stdin.isTTY) {
91
- const err = new Error("interactive token entry requires a tty");
92
- err.code = "NO_TTY";
93
- throw err;
94
- }
95
- const rl = readline.createInterface({ input, output });
96
- try {
97
- // readline cannot hide input portably without raw mode; still avoid echo by
98
- // asking user to paste and not logging it ourselves.
99
- const value = (await rl.question(`${label}: `)).trim();
100
- return value;
101
- } finally {
102
- rl.close();
103
- }
104
- }
105
-
106
- async function configurePlatform(profile, platformKey, inlineArgs = []) {
107
- const platform = findMessagingPlatform(platformKey);
108
- if (!platform) {
109
- process.stderr.write(`oracle setup: unknown platform '${platformKey}'\n`);
110
- process.stderr.write(
111
- `known: ${listMessagingPlatforms()
112
- .map((p) => p.key)
113
- .join(", ")}\n`,
114
- );
115
- return 1;
116
- }
117
-
118
- // Platforms without simple token keys go through Hermes interactive setup.
119
- if (!platform.required.length) {
120
- process.stdout.write(
121
- `opening hermes setup for ${platform.key} (interactive)\n`,
122
- );
123
- touchSetupState({ lastPlatform: platform.key, profile });
124
- return runHermes(["-p", profile, ...(platform.hermes || ["gateway", "setup"])]);
125
- }
126
-
127
- const flags = {};
128
- const positionals = [];
129
- for (let i = 0; i < inlineArgs.length; i++) {
130
- const a = inlineArgs[i];
131
- if (a === "--token" && inlineArgs[i + 1]) {
132
- flags.token = inlineArgs[++i];
133
- continue;
134
- }
135
- if (a === "--allowed-users" && inlineArgs[i + 1]) {
136
- flags.allowedUsers = inlineArgs[++i];
137
- continue;
138
- }
139
- if (a === "--app-token" && inlineArgs[i + 1]) {
140
- flags.appToken = inlineArgs[++i];
141
- continue;
142
- }
143
- if (a.startsWith("-")) {
144
- process.stderr.write(`oracle setup: unknown flag ${a}\n`);
145
- return 1;
146
- }
147
- positionals.push(a);
148
- }
149
-
150
- let token = flags.token || positionals[0] || "";
151
- if (!token) {
152
- try {
153
- token = await promptSecret(`${platform.key} bot token`);
154
- } catch (err) {
155
- if (err?.code === "NO_TTY") {
156
- process.stderr.write(
157
- `oracle setup ${platform.key}: pass --token <value> in non-interactive mode\n`,
158
- );
159
- return 1;
160
- }
161
- throw err;
162
- }
163
- }
164
- if (!token) {
165
- process.stderr.write("aborted: empty token\n");
166
- return 1;
167
- }
168
-
169
- const extra = {};
170
- if (flags.allowedUsers) {
171
- if (platform.key === "telegram") extra.TELEGRAM_ALLOWED_USERS = flags.allowedUsers;
172
- if (platform.key === "discord") extra.DISCORD_ALLOWED_USERS = flags.allowedUsers;
173
- if (platform.key === "slack") extra.SLACK_ALLOWED_USERS = flags.allowedUsers;
174
- }
175
- if (flags.appToken && platform.key === "slack") {
176
- extra.SLACK_APP_TOKEN = flags.appToken;
177
- }
178
-
179
- // Slack needs two tokens.
180
- if (platform.key === "slack" && !extra.SLACK_APP_TOKEN) {
181
- let app = flags.appToken || positionals[1] || "";
182
- if (!app && process.stdin.isTTY) {
183
- app = await promptSecret("slack app token (xapp-...)");
184
- }
185
- if (!app) {
186
- process.stderr.write("slack needs bot token + app token\n");
187
- return 1;
188
- }
189
- extra.SLACK_APP_TOKEN = app;
190
- }
191
-
192
- try {
193
- const result = setPlatformToken(profile, platform.key, token, extra);
194
- touchSetupState({ lastPlatform: platform.key, profile, ready: true });
195
- process.stdout.write(
196
- `saved ${platform.key} credentials for profile '${profile}'\n` +
197
- `path: ${result.path}\n` +
198
- `next: oracle setup gateway restart\n`,
199
- );
200
- return 0;
201
- } catch (err) {
202
- process.stderr.write(`oracle setup: ${err.message}\n`);
203
- return 1;
204
- }
205
- }
206
-
207
- export default {
208
- name: "setup",
209
- summary: "configure telegram/discord/slack messaging platforms",
210
- group: "read",
211
- usage: usage(),
212
- async run(ctx) {
213
- const args = [...ctx.argv];
214
- const json = args.includes("--json");
215
- const profile = profileFromArgs(args);
216
- const clean = stripProfileArgs(args).filter((a) => a !== "--json");
217
- const verb = (clean[0] || "menu").toLowerCase();
218
- const rest = clean.slice(1);
219
-
220
- if (["-h", "--help", "help"].includes(verb)) {
221
- process.stdout.write(usage() + "\n");
222
- return 0;
223
- }
224
-
225
- if (["menu", "list", "ls"].includes(verb)) {
226
- if (json) {
227
- process.stdout.write(JSON.stringify(platformStatus(profile), null, 2) + "\n");
228
- } else {
229
- process.stdout.write(renderStatus(profile));
230
- }
231
- return 0;
232
- }
233
-
234
- if (["status", "show"].includes(verb)) {
235
- const st = platformStatus(profile);
236
- if (json) {
237
- process.stdout.write(JSON.stringify(st, null, 2) + "\n");
238
- } else {
239
- process.stdout.write(renderStatus(profile));
240
- process.stdout.write(`hermes root: ${hermesRoot()}\n`);
241
- }
242
- return 0;
243
- }
244
-
245
- if (["messaging", "gateway-setup", "platforms"].includes(verb)) {
246
- touchSetupState({ lastAction: "messaging", profile });
247
- process.stdout.write("opening hermes gateway setup wizard...\n");
248
- return runHermes(["-p", profile, "gateway", "setup"]);
249
- }
250
-
251
- if (verb === "gateway") {
252
- const action = (rest[0] || "status").toLowerCase();
253
- if (!["status", "start", "stop", "restart", "run", "install"].includes(action)) {
254
- process.stderr.write("usage: oracle setup gateway [status|start|stop|restart|run|install]\n");
255
- return 1;
256
- }
257
- return runHermes(["-p", profile, "gateway", action]);
258
- }
259
-
260
- if (verb === "profile") {
261
- const name = rest[0] || profile;
262
- process.stdout.write(`profile: ${name}\nhermes: ${hermesRoot()}/profiles/${name}\n`);
263
- process.stdout.write(renderStatus(name));
264
- return 0;
265
- }
266
-
267
- // oracle setup telegram|discord|...
268
- if (findMessagingPlatform(verb)) {
269
- return configurePlatform(profile, verb, rest);
270
- }
271
-
272
- process.stderr.write(`oracle setup: unknown verb '${verb}'\n${usage()}\n`);
273
- return 1;
274
- },
275
- };
@@ -1,21 +0,0 @@
1
- export default {
2
- name: "sign",
3
- summary: "provision / check the local signer (opt-in)",
4
- group: "sign",
5
- usage: "oracle sign <init|doctor> ...",
6
- async run(ctx) {
7
- const verb = ctx.argv[0];
8
- if (verb === "init") {
9
- return ctx.dispatchOperator("oracle-agentic-init", ctx.argv.slice(1), { appendHintOnError: true });
10
- }
11
- if (verb === "doctor") {
12
- return ctx.dispatchOperator("oracle-agentic-doctor", ctx.argv.slice(1), { appendHintOnError: true });
13
- }
14
- process.stderr.write(
15
- "usage: oracle sign <init|doctor> ...\n" +
16
- " oracle sign init provision keys + policy (interactive)\n" +
17
- " oracle sign doctor check local signer readiness\n",
18
- );
19
- return 1;
20
- },
21
- };
@@ -1,9 +0,0 @@
1
- export default {
2
- name: "signer",
3
- summary: "loopback signer daemon",
4
- group: "sign",
5
- usage: "oracle signer [--port N ...]",
6
- async run(ctx) {
7
- return ctx.dispatchOperator("oracle-signer", ctx.argv, { appendHintOnError: true });
8
- },
9
- };
@@ -1,12 +0,0 @@
1
- import { spawnSync } from "node:child_process";
2
- import path from "node:path";
3
- export default {
4
- name: "upgrade", summary: "upgrade installed Hermes lanes", group: "read",
5
- usage: "oracle upgrade [--apply ...]",
6
- async run(ctx) {
7
- const bin = path.join(ctx.root, "bin", "oracle-upgrade.mjs");
8
- const r = spawnSync(process.execPath, [bin, ...ctx.argv], { stdio: "inherit" });
9
- if (r.error) { process.stderr.write(`oracle: failed to spawn oracle-upgrade: ${r.error.message}\n`); return 1; }
10
- return typeof r.status === "number" ? r.status : 1;
11
- },
12
- };
@@ -1,9 +0,0 @@
1
- export default {
2
- name: "vault",
3
- summary: "encrypt local key files at rest",
4
- group: "sign",
5
- usage: "oracle vault <encrypt|rekey|inspect|decrypt> ...",
6
- async run(ctx) {
7
- return ctx.dispatchOperator("oracle-vault", ctx.argv, { appendHintOnError: true });
8
- },
9
- };