@oracle-agent/oracle 0.14.0 → 0.15.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 (447) hide show
  1. package/README.md +2 -2
  2. package/SETUP.md +4 -4
  3. package/dist/action-receipts.mjs +1 -0
  4. package/dist/action-semantics.mjs +1 -0
  5. package/dist/address-book.mjs +2 -0
  6. package/dist/bin/desk-server.mjs +59 -0
  7. package/dist/bin/oracle-data-mcp.mjs +8 -0
  8. package/dist/bin/oracle-equities.mjs +20 -0
  9. package/dist/bin/oracle-init.mjs +24 -0
  10. package/dist/bin/oracle-public-server.mjs +5 -0
  11. package/dist/bin/oracle-route.mjs +22 -0
  12. package/dist/bin/oracle-scan.mjs +18 -0
  13. package/dist/bin/oracle-upgrade.mjs +21 -0
  14. package/dist/bin/oracle.mjs +61 -0
  15. package/dist/chains.mjs +1 -0
  16. package/dist/cli/commands/auth.mjs +16 -0
  17. package/dist/cli/commands/bootstrap.mjs +18 -0
  18. package/dist/cli/commands/chain.mjs +21 -0
  19. package/dist/cli/commands/chat.mjs +45 -0
  20. package/dist/cli/commands/credential.mjs +1 -0
  21. package/dist/cli/commands/data-mcp.mjs +2 -0
  22. package/dist/cli/commands/data.mjs +12 -0
  23. package/dist/cli/commands/doctor.mjs +5 -0
  24. package/dist/cli/commands/equities.mjs +15 -0
  25. package/dist/cli/commands/farm.mjs +59 -0
  26. package/dist/cli/commands/fees.mjs +10 -0
  27. package/dist/cli/commands/follow.mjs +28 -0
  28. package/dist/cli/commands/harness.mjs +15 -0
  29. package/dist/cli/commands/help.mjs +1 -0
  30. package/dist/cli/commands/init.mjs +3 -0
  31. package/dist/cli/commands/mcp.mjs +36 -0
  32. package/dist/cli/commands/model.mjs +54 -0
  33. package/dist/cli/commands/plugins.mjs +43 -0
  34. package/dist/cli/commands/prepare.mjs +2 -0
  35. package/dist/cli/commands/public.mjs +3 -0
  36. package/dist/cli/commands/resolve.mjs +23 -0
  37. package/dist/cli/commands/route.mjs +2 -0
  38. package/dist/cli/commands/runner.mjs +1 -0
  39. package/dist/cli/commands/scan.mjs +2 -0
  40. package/dist/cli/commands/setup.mjs +34 -0
  41. package/dist/cli/commands/sign.mjs +4 -0
  42. package/dist/cli/commands/signer.mjs +1 -0
  43. package/dist/cli/commands/swap.mjs +36 -0
  44. package/dist/cli/commands/upgrade.mjs +2 -0
  45. package/dist/cli/commands/vault.mjs +1 -0
  46. package/dist/cli/commands/version.mjs +2 -0
  47. package/dist/data/desk-data.mjs +55 -0
  48. package/dist/data/names.mjs +2 -0
  49. package/dist/data/providers/farming.mjs +2 -0
  50. package/dist/equities/index.mjs +1 -0
  51. package/dist/index.mjs +60 -0
  52. package/dist/nft-gas-war-guard.mjs +1 -0
  53. package/dist/onboarding/harness-configs.mjs +4 -0
  54. package/dist/portfolio-risk.mjs +1 -0
  55. package/dist/prepare-envelope.mjs +1 -0
  56. package/dist/public-api/agent-grants.mjs +3 -0
  57. package/dist/public-control/policy-schema.mjs +1 -0
  58. package/dist/router/index.mjs +2 -0
  59. package/dist/scanner/index.mjs +4 -0
  60. package/dist/signals/index.mjs +1 -0
  61. package/dist/watch-preferences.mjs +1 -0
  62. package/package.json +32 -78
  63. package/public/oracle-splash/_variants/ice.html +5 -18
  64. package/public/oracle-splash/_variants/ivory.html +5 -18
  65. package/public/oracle-splash/index.html +114 -34
  66. package/CONTRIBUTING.md +0 -99
  67. package/bin/desk-server.mjs +0 -473
  68. package/bin/oracle-data-mcp.mjs +0 -1252
  69. package/bin/oracle-equities.mjs +0 -168
  70. package/bin/oracle-init.mjs +0 -525
  71. package/bin/oracle-public-server.mjs +0 -36
  72. package/bin/oracle-route.mjs +0 -254
  73. package/bin/oracle-scan.mjs +0 -192
  74. package/bin/oracle-upgrade.mjs +0 -42
  75. package/bin/oracle.mjs +0 -34
  76. package/docs/adding-a-chain.md +0 -229
  77. package/docs/architecture.md +0 -139
  78. package/docs/buzz-integration.md +0 -115
  79. package/docs/cli.md +0 -143
  80. package/docs/connectors.md +0 -13
  81. package/docs/hyperliquid-builder-code.md +0 -50
  82. package/docs/locals-only-fee-waiver.md +0 -34
  83. package/docs/oracle-pack-standard.md +0 -29
  84. package/docs/profiles.md +0 -151
  85. package/docs/public-surface.md +0 -206
  86. package/examples/add-a-chain.mjs +0 -65
  87. package/examples/oracle-pack-template.mjs +0 -38
  88. package/examples/research-a-token.mjs +0 -70
  89. package/plugins/oracle-owner-gate/__init__.py +0 -288
  90. package/plugins/oracle-owner-gate/plugin.yaml +0 -9
  91. package/protocols/templates/safe-erc20/SECURITY.md +0 -16
  92. package/protocols/templates/safe-erc20/foundry.toml +0 -12
  93. package/protocols/templates/safe-erc20/remappings.txt +0 -2
  94. package/protocols/templates/safe-erc20/src/SafeERC20.sol +0 -53
  95. package/protocols/templates/safe-erc20/test/SafeERC20.t.sol +0 -72
  96. package/scripts/adversarial-bench.mjs +0 -114
  97. package/scripts/build-dist.mjs +0 -119
  98. package/scripts/build-inscription.py +0 -230
  99. package/scripts/check-doc-drift.mjs +0 -123
  100. package/scripts/check-test-count.mjs +0 -105
  101. package/scripts/e2e-hl-markets.mjs +0 -21
  102. package/scripts/e2e-hl-perps.mjs +0 -48
  103. package/scripts/e2e-hypercore-staking.mjs +0 -128
  104. package/scripts/e2e-solana-bitcoin.mjs +0 -183
  105. package/scripts/guard-publish.mjs +0 -22
  106. package/scripts/protocol-template-gate.mjs +0 -15
  107. package/scripts/public-api-scan.mjs +0 -23
  108. package/scripts/publish-dist.mjs +0 -67
  109. package/scripts/record-hero-cli.sh +0 -80
  110. package/scripts/secret-scan.mjs +0 -168
  111. package/scripts/smoke-dist-bins.mjs +0 -89
  112. package/scripts/verify-dist.mjs +0 -29
  113. package/scripts/verify-v3-venues.mjs +0 -233
  114. package/skins/oracle.yaml +0 -56
  115. package/src/action-receipts.mjs +0 -265
  116. package/src/action-semantics.mjs +0 -62
  117. package/src/address-book.mjs +0 -208
  118. package/src/agent-auth.mjs +0 -206
  119. package/src/approval-guard.mjs +0 -282
  120. package/src/attestation-secret.mjs +0 -94
  121. package/src/audit-log.mjs +0 -196
  122. package/src/auth/oauth.mjs +0 -672
  123. package/src/auto-slippage.mjs +0 -378
  124. package/src/capability-posture.mjs +0 -125
  125. package/src/cards.mjs +0 -422
  126. package/src/chains.mjs +0 -62
  127. package/src/cli/chain-catalog.mjs +0 -215
  128. package/src/cli/chain-state.mjs +0 -74
  129. package/src/cli/commands/auth.mjs +0 -193
  130. package/src/cli/commands/bootstrap.mjs +0 -87
  131. package/src/cli/commands/chain.mjs +0 -143
  132. package/src/cli/commands/chat.mjs +0 -465
  133. package/src/cli/commands/credential.mjs +0 -9
  134. package/src/cli/commands/data-mcp.mjs +0 -18
  135. package/src/cli/commands/data.mjs +0 -75
  136. package/src/cli/commands/doctor.mjs +0 -136
  137. package/src/cli/commands/equities.mjs +0 -41
  138. package/src/cli/commands/farm.mjs +0 -129
  139. package/src/cli/commands/fees.mjs +0 -109
  140. package/src/cli/commands/follow.mjs +0 -130
  141. package/src/cli/commands/harness.mjs +0 -63
  142. package/src/cli/commands/help.mjs +0 -7
  143. package/src/cli/commands/init.mjs +0 -27
  144. package/src/cli/commands/mcp.mjs +0 -154
  145. package/src/cli/commands/model.mjs +0 -106
  146. package/src/cli/commands/plugins.mjs +0 -241
  147. package/src/cli/commands/prepare.mjs +0 -12
  148. package/src/cli/commands/public.mjs +0 -20
  149. package/src/cli/commands/resolve.mjs +0 -64
  150. package/src/cli/commands/route.mjs +0 -12
  151. package/src/cli/commands/runner.mjs +0 -9
  152. package/src/cli/commands/scan.mjs +0 -12
  153. package/src/cli/commands/setup.mjs +0 -294
  154. package/src/cli/commands/sign.mjs +0 -21
  155. package/src/cli/commands/signer.mjs +0 -9
  156. package/src/cli/commands/swap.mjs +0 -102
  157. package/src/cli/commands/upgrade.mjs +0 -12
  158. package/src/cli/commands/vault.mjs +0 -9
  159. package/src/cli/commands/version.mjs +0 -22
  160. package/src/cli/first-run.mjs +0 -23
  161. package/src/cli/kernel.mjs +0 -262
  162. package/src/cli/mcp-targets/chatgpt.mjs +0 -51
  163. package/src/cli/mcp-targets/claude-code.mjs +0 -39
  164. package/src/cli/mcp-targets/claude-desktop.mjs +0 -24
  165. package/src/cli/mcp-targets/codex.mjs +0 -41
  166. package/src/cli/mcp-targets/cursor.mjs +0 -32
  167. package/src/cli/mcp-targets/shared.mjs +0 -71
  168. package/src/cli/mcp-targets/vscode.mjs +0 -39
  169. package/src/cli/messaging-platforms.mjs +0 -217
  170. package/src/cli/model-config.mjs +0 -78
  171. package/src/cli/operator-dispatch.mjs +0 -257
  172. package/src/cli/oracle-harness.py +0 -415
  173. package/src/cli/paths.mjs +0 -107
  174. package/src/cli/runtime.mjs +0 -351
  175. package/src/cli/setup-state.mjs +0 -168
  176. package/src/cli/spawn-child.mjs +0 -43
  177. package/src/data/catalog.mjs +0 -858
  178. package/src/data/desk-data.mjs +0 -877
  179. package/src/data/http.mjs +0 -253
  180. package/src/data/names.mjs +0 -188
  181. package/src/data/provider-endpoint.mjs +0 -94
  182. package/src/data/providers/aave-v3.mjs +0 -139
  183. package/src/data/providers/across-bridge.mjs +0 -41
  184. package/src/data/providers/aerodrome.mjs +0 -245
  185. package/src/data/providers/aevo.mjs +0 -33
  186. package/src/data/providers/approval-indexer.mjs +0 -133
  187. package/src/data/providers/approvals.mjs +0 -594
  188. package/src/data/providers/babylon-staking.mjs +0 -149
  189. package/src/data/providers/balancer.mjs +0 -209
  190. package/src/data/providers/beefy-yields.mjs +0 -45
  191. package/src/data/providers/birdeye-tokens.mjs +0 -33
  192. package/src/data/providers/bisq-markets.mjs +0 -145
  193. package/src/data/providers/bitcoin-esplora.mjs +0 -216
  194. package/src/data/providers/bitcoin-meta.mjs +0 -378
  195. package/src/data/providers/blockscout.mjs +0 -14
  196. package/src/data/providers/bob-rootstock.mjs +0 -198
  197. package/src/data/providers/braiins-insights.mjs +0 -103
  198. package/src/data/providers/bridge-aggregator.mjs +0 -259
  199. package/src/data/providers/bridges.mjs +0 -242
  200. package/src/data/providers/bungee.mjs +0 -29
  201. package/src/data/providers/celestia-da.mjs +0 -38
  202. package/src/data/providers/changenow.mjs +0 -135
  203. package/src/data/providers/compound.mjs +0 -32
  204. package/src/data/providers/connext.mjs +0 -28
  205. package/src/data/providers/convex.mjs +0 -30
  206. package/src/data/providers/cow-protocol.mjs +0 -110
  207. package/src/data/providers/cowswap.mjs +0 -415
  208. package/src/data/providers/curve.mjs +0 -201
  209. package/src/data/providers/das-assets.mjs +0 -59
  210. package/src/data/providers/debridge.mjs +0 -109
  211. package/src/data/providers/defillama.mjs +0 -88
  212. package/src/data/providers/dexscreener.mjs +0 -43
  213. package/src/data/providers/drift.mjs +0 -32
  214. package/src/data/providers/dydx.mjs +0 -41
  215. package/src/data/providers/evm-rpc.mjs +0 -225
  216. package/src/data/providers/farming.mjs +0 -291
  217. package/src/data/providers/geckoterminal.mjs +0 -34
  218. package/src/data/providers/gmx.mjs +0 -496
  219. package/src/data/providers/hiro-stacks.mjs +0 -150
  220. package/src/data/providers/hl-assets.mjs +0 -165
  221. package/src/data/providers/hl-info.mjs +0 -108
  222. package/src/data/providers/hl-markets.mjs +0 -210
  223. package/src/data/providers/hl-outcome.mjs +0 -61
  224. package/src/data/providers/hl-perps.mjs +0 -419
  225. package/src/data/providers/hl-staking.mjs +0 -353
  226. package/src/data/providers/hl-ws.mjs +0 -119
  227. package/src/data/providers/hyperevm-dex.mjs +0 -49
  228. package/src/data/providers/jito-mev.mjs +0 -117
  229. package/src/data/providers/jupiter-venues.mjs +0 -119
  230. package/src/data/providers/jupiter.mjs +0 -315
  231. package/src/data/providers/kamino-strategies.mjs +0 -143
  232. package/src/data/providers/l2beat-tvl.mjs +0 -42
  233. package/src/data/providers/lifi.mjs +0 -166
  234. package/src/data/providers/liquid-esplora.mjs +0 -152
  235. package/src/data/providers/magiceden-ordinals.mjs +0 -141
  236. package/src/data/providers/magiceden-sol.mjs +0 -406
  237. package/src/data/providers/mempool-lightning.mjs +0 -144
  238. package/src/data/providers/mempool-mining.mjs +0 -142
  239. package/src/data/providers/meteora-dlmm.mjs +0 -168
  240. package/src/data/providers/morpho.mjs +0 -177
  241. package/src/data/providers/nft-gallery.mjs +0 -163
  242. package/src/data/providers/nft-portfolio.mjs +0 -494
  243. package/src/data/providers/odos.mjs +0 -156
  244. package/src/data/providers/ondo.mjs +0 -31
  245. package/src/data/providers/oneinch.mjs +0 -174
  246. package/src/data/providers/opensea-multichain.mjs +0 -136
  247. package/src/data/providers/opensea-nft.mjs +0 -371
  248. package/src/data/providers/orca.mjs +0 -29
  249. package/src/data/providers/ordinals-runes.mjs +0 -180
  250. package/src/data/providers/pancakeswap.mjs +0 -28
  251. package/src/data/providers/paraswap.mjs +0 -125
  252. package/src/data/providers/pendle.mjs +0 -188
  253. package/src/data/providers/poly-clob.mjs +0 -283
  254. package/src/data/providers/poly-public.mjs +0 -96
  255. package/src/data/providers/poly-ws.mjs +0 -103
  256. package/src/data/providers/polygon-staking.mjs +0 -227
  257. package/src/data/providers/portfolio-history.mjs +0 -394
  258. package/src/data/providers/portfolio.mjs +0 -600
  259. package/src/data/providers/pyth-price-feeds.mjs +0 -172
  260. package/src/data/providers/raydium.mjs +0 -35
  261. package/src/data/providers/relayscan-mev.mjs +0 -72
  262. package/src/data/providers/rfq.mjs +0 -15
  263. package/src/data/providers/rh-agent.mjs +0 -59
  264. package/src/data/providers/sanctum-lst.mjs +0 -180
  265. package/src/data/providers/satflow.mjs +0 -341
  266. package/src/data/providers/signed-material-guard.mjs +0 -108
  267. package/src/data/providers/solana-rpc.mjs +0 -197
  268. package/src/data/providers/solend-lending.mjs +0 -166
  269. package/src/data/providers/spark-lend.mjs +0 -42
  270. package/src/data/providers/squid-router.mjs +0 -29
  271. package/src/data/providers/stargate.mjs +0 -29
  272. package/src/data/providers/sushiswap.mjs +0 -30
  273. package/src/data/providers/symbiotic-restaking.mjs +0 -41
  274. package/src/data/providers/thorchain.mjs +0 -36
  275. package/src/data/providers/traderjoe.mjs +0 -28
  276. package/src/data/providers/twap.mjs +0 -152
  277. package/src/data/providers/uniswap-v3.mjs +0 -457
  278. package/src/data/providers/uniswap-v4.mjs +0 -414
  279. package/src/data/providers/vertex.mjs +0 -41
  280. package/src/data/providers/wallet-watch.mjs +0 -264
  281. package/src/data/providers/wormhole.mjs +0 -28
  282. package/src/data/providers/yearn.mjs +0 -31
  283. package/src/data/providers/zerox.mjs +0 -167
  284. package/src/data/public-api-scan.mjs +0 -61
  285. package/src/data/quote-placeholder.mjs +0 -31
  286. package/src/desk/swap-prepare.mjs +0 -194
  287. package/src/equities/bridge.mjs +0 -388
  288. package/src/equities/fixtures/bridge_routes.json +0 -159
  289. package/src/equities/fixtures/dst_transitions.json +0 -29
  290. package/src/equities/fixtures/equity_dex_pools.json +0 -154
  291. package/src/equities/fixtures/hip3_l2books.json +0 -2711
  292. package/src/equities/fixtures/nyse_holidays.json +0 -1
  293. package/src/equities/fixtures/oracles.json +0 -100
  294. package/src/equities/fixtures/rh_pool_state.json +0 -244
  295. package/src/equities/fixtures/solana_xstocks.json +0 -704
  296. package/src/equities/fixtures/ton_xstocks.json +0 -35
  297. package/src/equities/fixtures/universe.json +0 -411
  298. package/src/equities/fixtures/venues.json +0 -3542
  299. package/src/equities/fixtures.mjs +0 -405
  300. package/src/equities/funding.mjs +0 -142
  301. package/src/equities/index.mjs +0 -166
  302. package/src/equities/liveness.mjs +0 -148
  303. package/src/equities/marketHours.mjs +0 -249
  304. package/src/equities/normalize.mjs +0 -295
  305. package/src/equities/num.mjs +0 -146
  306. package/src/equities/prepare.mjs +0 -95
  307. package/src/equities/rank.mjs +0 -260
  308. package/src/equities/sourceNum.mjs +0 -69
  309. package/src/equities/types.mjs +0 -220
  310. package/src/equities/venues/arcus-perp.mjs +0 -84
  311. package/src/equities/venues/arcus-spot.mjs +0 -105
  312. package/src/equities/venues/hyperliquid-hip3.mjs +0 -224
  313. package/src/equities/venues/rh-uniswap.mjs +0 -216
  314. package/src/equities/venues/solana-xstocks.mjs +0 -139
  315. package/src/equities/venues/ton-stonfi.mjs +0 -139
  316. package/src/exact-integer.mjs +0 -72
  317. package/src/exec-policy.mjs +0 -419
  318. package/src/flags.mjs +0 -15
  319. package/src/fresh-window.mjs +0 -76
  320. package/src/gmx-attestation.mjs +0 -176
  321. package/src/index.mjs +0 -107
  322. package/src/licensing/locals-only.mjs +0 -25
  323. package/src/nft-gas-war-guard.mjs +0 -139
  324. package/src/onboarding/agent-keys.mjs +0 -161
  325. package/src/onboarding/harness-configs.mjs +0 -102
  326. package/src/onboarding/index.mjs +0 -18
  327. package/src/onboarding/tiers.mjs +0 -139
  328. package/src/oracle-env.mjs +0 -55
  329. package/src/package-manifest.mjs +0 -42
  330. package/src/plugins/agent-plugin-loader.mjs +0 -225
  331. package/src/portfolio-risk.mjs +0 -170
  332. package/src/prepare-envelope.mjs +0 -204
  333. package/src/profile-upgrade.mjs +0 -277
  334. package/src/protocol-execution.mjs +0 -84
  335. package/src/protocol-templates/gate.mjs +0 -179
  336. package/src/protocol-templates/prepare-deploy.mjs +0 -81
  337. package/src/public-api/agent-grants.mjs +0 -57
  338. package/src/public-api/buzz-integration.mjs +0 -267
  339. package/src/public-api/connect-agent.mjs +0 -424
  340. package/src/public-api/grants.mjs +0 -142
  341. package/src/public-api/http.mjs +0 -707
  342. package/src/public-api/metering.mjs +0 -111
  343. package/src/public-control/aa-adapter.mjs +0 -402
  344. package/src/public-control/build-registry.mjs +0 -227
  345. package/src/public-control/bundler-client.mjs +0 -357
  346. package/src/public-control/grant-indexer.mjs +0 -296
  347. package/src/public-control/policy-render.mjs +0 -69
  348. package/src/public-control/policy-schema.mjs +0 -322
  349. package/src/public-control/runtime-config.mjs +0 -275
  350. package/src/public-control/session-key-model.mjs +0 -379
  351. package/src/public-control/session-orchestrator.mjs +0 -418
  352. package/src/rfq/intent.mjs +0 -180
  353. package/src/rfq/sources.mjs +0 -181
  354. package/src/route-attestation.mjs +0 -132
  355. package/src/router/best-execution.mjs +0 -326
  356. package/src/router/index.mjs +0 -250
  357. package/src/router/integrator-fee.mjs +0 -135
  358. package/src/router/prepare-bridge.mjs +0 -293
  359. package/src/router/prepare-route.mjs +0 -398
  360. package/src/router/proposal.mjs +0 -311
  361. package/src/router/risk-classifier.mjs +0 -119
  362. package/src/router/route-sources.mjs +0 -364
  363. package/src/scanner/chains.config.mjs +0 -543
  364. package/src/scanner/contract.mjs +0 -270
  365. package/src/scanner/evm-scanner.mjs +0 -394
  366. package/src/scanner/index.mjs +0 -9
  367. package/src/scanner/v2-venue.mjs +0 -351
  368. package/src/scanner/v3-venue.mjs +0 -308
  369. package/src/scopes.mjs +0 -44
  370. package/src/sell-simulation.mjs +0 -167
  371. package/src/signals/engine.mjs +0 -146
  372. package/src/signals/index.mjs +0 -1
  373. package/src/token-transfer-guard.mjs +0 -188
  374. package/src/tui/app.mjs +0 -438
  375. package/src/tui/backend.mjs +0 -215
  376. package/src/tui/format.mjs +0 -272
  377. package/src/tui/gateway-client.mjs +0 -177
  378. package/src/tui/input.mjs +0 -501
  379. package/src/tui/memory.mjs +0 -105
  380. package/src/tui/meta-learn.mjs +0 -85
  381. package/src/tui/renderer.mjs +0 -443
  382. package/src/tui/scheduler.mjs +0 -205
  383. package/src/tui/skills-loader.mjs +0 -140
  384. package/src/tui/standalone-client.mjs +0 -752
  385. package/src/tui/theme.mjs +0 -81
  386. package/src/vault-attestation.mjs +0 -146
  387. package/src/venues.mjs +0 -206
  388. package/src/watch-preferences.mjs +0 -85
  389. /package/{profiles → dist/assets/profiles}/_template/SOUL.md +0 -0
  390. /package/{profiles → dist/assets/profiles}/_template/profile.json +0 -0
  391. /package/{profiles → dist/assets/profiles}/bitcoin-agent/SOUL.md +0 -0
  392. /package/{profiles → dist/assets/profiles}/bitcoin-agent/profile.json +0 -0
  393. /package/{profiles → dist/assets/profiles}/hyperliquid-agent/SOUL.md +0 -0
  394. /package/{profiles → dist/assets/profiles}/hyperliquid-agent/profile.json +0 -0
  395. /package/{profiles → dist/assets/profiles}/oracle/SOUL.md +0 -0
  396. /package/{profiles → dist/assets/profiles}/oracle/profile.json +0 -0
  397. /package/{profiles → dist/assets/profiles}/polymarket-agent/SOUL.md +0 -0
  398. /package/{profiles → dist/assets/profiles}/polymarket-agent/profile.json +0 -0
  399. /package/{profiles → dist/assets/profiles}/profile.schema.json +0 -0
  400. /package/{profiles → dist/assets/profiles}/protocol-builder/SOUL.md +0 -0
  401. /package/{profiles → dist/assets/profiles}/protocol-builder/profile.json +0 -0
  402. /package/{profiles → dist/assets/profiles}/robinhood-agent/SOUL.md +0 -0
  403. /package/{profiles → dist/assets/profiles}/robinhood-agent/profile.json +0 -0
  404. /package/{profiles → dist/assets/profiles}/solana-agent/SOUL.md +0 -0
  405. /package/{profiles → dist/assets/profiles}/solana-agent/profile.json +0 -0
  406. /package/{profiles → dist/assets/profiles}/stable-agent/SOUL.md +0 -0
  407. /package/{profiles → dist/assets/profiles}/stable-agent/profile.json +0 -0
  408. /package/{skills → dist/assets/skills}/balance/SKILL.md +0 -0
  409. /package/{skills → dist/assets/skills}/bitcoin-l1.md +0 -0
  410. /package/{skills → dist/assets/skills}/chain-defi-ecosystem-profiling.md +0 -0
  411. /package/{skills → dist/assets/skills}/evm-contract-research.md +0 -0
  412. /package/{skills → dist/assets/skills}/hyperliquid.md +0 -0
  413. /package/{skills → dist/assets/skills}/multichain-exec-desk.md +0 -0
  414. /package/{skills → dist/assets/skills}/oracle-action-semantics/SKILL.md +0 -0
  415. /package/{skills → dist/assets/skills}/oracle-best-execution/SKILL.md +0 -0
  416. /package/{skills → dist/assets/skills}/oracle-best-execution.md +0 -0
  417. /package/{skills → dist/assets/skills}/oracle-bitcoin/SKILL.md +0 -0
  418. /package/{skills → dist/assets/skills}/oracle-chain-graphs-telegram-cards/SKILL.md +0 -0
  419. /package/{skills → dist/assets/skills}/oracle-chat/SKILL.md +0 -0
  420. /package/{skills → dist/assets/skills}/oracle-chat/chain.SKILL.md +0 -0
  421. /package/{skills → dist/assets/skills}/oracle-chat/setup.SKILL.md +0 -0
  422. /package/{skills → dist/assets/skills}/oracle-circuit-breaker/SKILL.md +0 -0
  423. /package/{skills → dist/assets/skills}/oracle-contract-research/SKILL.md +0 -0
  424. /package/{skills → dist/assets/skills}/oracle-desk/SKILL.md +0 -0
  425. /package/{skills → dist/assets/skills}/oracle-desk.md +0 -0
  426. /package/{skills → dist/assets/skills}/oracle-dex-launch/SKILL.md +0 -0
  427. /package/{skills → dist/assets/skills}/oracle-equities/SKILL.md +0 -0
  428. /package/{skills → dist/assets/skills}/oracle-grants/SKILL.md +0 -0
  429. /package/{skills → dist/assets/skills}/oracle-hypercore-staking/SKILL.md +0 -0
  430. /package/{skills → dist/assets/skills}/oracle-hyperliquid/SKILL.md +0 -0
  431. /package/{skills → dist/assets/skills}/oracle-meme-token-sniper/SKILL.md +0 -0
  432. /package/{skills → dist/assets/skills}/oracle-multichain-nft-launch/SKILL.md +0 -0
  433. /package/{skills → dist/assets/skills}/oracle-multichain-token-launch/SKILL.md +0 -0
  434. /package/{skills → dist/assets/skills}/oracle-nft-gacha-launch/SKILL.md +0 -0
  435. /package/{skills → dist/assets/skills}/oracle-nft-mint-gas-war/SKILL.md +0 -0
  436. /package/{skills → dist/assets/skills}/oracle-polymarket/SKILL.md +0 -0
  437. /package/{skills → dist/assets/skills}/oracle-protocol-builder/SKILL.md +0 -0
  438. /package/{skills → dist/assets/skills}/oracle-protocol-security/SKILL.md +0 -0
  439. /package/{skills → dist/assets/skills}/oracle-public-product/SKILL.md +0 -0
  440. /package/{skills → dist/assets/skills}/oracle-receipts/SKILL.md +0 -0
  441. /package/{skills → dist/assets/skills}/oracle-receipts.md +0 -0
  442. /package/{skills → dist/assets/skills}/oracle-rfq-tokenized-assets/SKILL.md +0 -0
  443. /package/{skills → dist/assets/skills}/oracle-smart-wallet-scanner/SKILL.md +0 -0
  444. /package/{skills → dist/assets/skills}/oracle-solana/SKILL.md +0 -0
  445. /package/{skills → dist/assets/skills}/oracle-solana-nft/SKILL.md +0 -0
  446. /package/{skills → dist/assets/skills}/oracle-token-research/SKILL.md +0 -0
  447. /package/{skills → dist/assets/skills}/solana.md +0 -0
@@ -1,128 +0,0 @@
1
- import { data as desk } from "../src/data/desk-data.mjs";
2
- import {
3
- hlPrepareStakeDeposit,
4
- hlPrepareStakeWithdraw,
5
- hlPrepareDelegate,
6
- hypeToWei,
7
- weiToHype,
8
- } from "../src/data/providers/hl-staking.mjs";
9
-
10
- const USER = process.env.ORACLE_E2E_EVM_ADDRESS || "0x0000000000000000000000000000000000000001";
11
- const results = [];
12
- function log(lane, status, detail) {
13
- results.push({ lane, status });
14
- console.log(`${status === "ok" ? "OK " : "FAIL"} ${lane} :: ${detail}`);
15
- }
16
- async function run(lane, fn) {
17
- try {
18
- log(lane, "ok", await fn());
19
- } catch (e) {
20
- log(lane, "fail", String(e?.message || e).slice(0, 150));
21
- }
22
- }
23
-
24
- console.log("== HYPERCORE STAKING ==");
25
-
26
- let validator = null;
27
- await run("hl.staking.validators", async () => {
28
- const v = await desk.hl.staking.validators();
29
- const active = v.validators.filter((x) => x.isActive && !x.isJailed);
30
- validator = active[0]?.validator || v.validators[0]?.validator;
31
- return `validators=${v.count} activeUnjailed=${active.length} first=${(validator || "").slice(0, 10)}..`;
32
- });
33
-
34
- await run("hl.staking.health", async () => {
35
- const h = await desk.hl.staking.health();
36
- if (!h.ok) throw new Error("staking lane unhealthy");
37
- return `ok validators=${h.validators} chain=${h.chain}`;
38
- });
39
-
40
- await run("hl.staking.delegatorSummary", async () => {
41
- const s = await desk.hl.staking.summary(USER);
42
- return `delegated=${s.delegatedWei} undelegated=${s.undelegatedWei} pendingWithdrawals=${s.nPendingWithdrawals}`;
43
- });
44
-
45
- await run("hl.staking.delegations", async () => {
46
- const d = await desk.hl.staking.delegations(USER);
47
- return `count=${d.count}`;
48
- });
49
-
50
- await run("hl.staking.rewards", async () => {
51
- const r = await desk.hl.staking.rewards(USER);
52
- return `rewards=${r.rewards.length}`;
53
- });
54
-
55
- await run("hl.staking.preflight", async () => {
56
- const p = await desk.hl.staking.preflight(USER);
57
- return `undelegated=${p.stakingBalanceUndelegated} queueDays=${p.unstakingQueueDays} lockupDays=${p.validatorLockupDays}`;
58
- });
59
-
60
- await run("hl.staking.units", async () => {
61
- const w = hypeToWei("1.5");
62
- if (w !== "150000000") throw new Error(`1.5 HYPE -> ${w}, expected 150000000`);
63
- if (weiToHype("150000000") !== "1.5") throw new Error("roundtrip failed");
64
- return `1.5 HYPE = ${w} wei roundtrip ok`;
65
- });
66
-
67
- await run("hl.staking.prepareStake", async () => {
68
- const p = hlPrepareStakeDeposit({ amountHype: "2.5", maxHype: "10" });
69
- if (p.action.type !== "cDeposit") throw new Error("wrong action type");
70
- if (p.broadcastReady !== false || p.signingReady !== false) throw new Error("leaked readiness");
71
- if (!p.requiresUserSignature) throw new Error("must require user signature");
72
- return `cDeposit wei=${p.action.wei} primaryType=${p.typedData.primaryType} broadcastReady=false`;
73
- });
74
-
75
- await run("hl.staking.prepareStake.capBreach", async () => {
76
- try {
77
- hlPrepareStakeDeposit({ amountHype: "50", maxHype: "10" });
78
- } catch (e) {
79
- return `rejected over-cap: ${String(e.message).slice(0, 70)}`;
80
- }
81
- throw new Error("cap was NOT enforced");
82
- });
83
-
84
- await run("hl.staking.prepareDelegate", async () => {
85
- if (!validator) throw new Error("no validator resolved");
86
- const p = hlPrepareDelegate({ validator, amountHype: "2.5", isUndelegate: false, maxHype: "10" });
87
- if (p.action.type !== "tokenDelegate" || p.action.isUndelegate !== false) throw new Error("wrong action");
88
- return `tokenDelegate validator=${p.action.validator.slice(0, 10)}.. wei=${p.action.wei} isUndelegate=false`;
89
- });
90
-
91
- await run("hl.staking.prepareUndelegate", async () => {
92
- const p = hlPrepareDelegate({ validator, amountHype: "2.5", isUndelegate: true });
93
- if (p.action.isUndelegate !== true) throw new Error("undelegate flag lost");
94
- return `tokenDelegate isUndelegate=true kind=${p.kind}`;
95
- });
96
-
97
- await run("hl.staking.prepareUnstake", async () => {
98
- const p = hlPrepareStakeWithdraw({ amountHype: "2.5" });
99
- if (p.action.type !== "cWithdraw") throw new Error("wrong action type");
100
- if (!p.notes.join(" ").includes("7 day")) throw new Error("missing unstaking queue warning");
101
- return `cWithdraw wei=${p.action.wei} queue warning present`;
102
- });
103
-
104
- await run("hl.staking.badAmount", async () => {
105
- try {
106
- hlPrepareStakeDeposit({ amountHype: "0" });
107
- } catch (e) {
108
- return `rejected zero amount`;
109
- }
110
- throw new Error("zero amount accepted");
111
- });
112
-
113
- await run("hl.staking.badValidator", async () => {
114
- try {
115
- hlPrepareDelegate({ validator: "not-an-address", amountHype: "1" });
116
- } catch (e) {
117
- return `rejected bad validator`;
118
- }
119
- throw new Error("bad validator accepted");
120
- });
121
-
122
- const failed = results.filter((r) => r.status === "fail");
123
- console.log(`\nlanes=${results.length} ok=${results.length - failed.length} failed=${failed.length}`);
124
- if (failed.length) {
125
- console.log(`FAILED: ${failed.map((f) => f.lane).join(", ")}`);
126
- process.exit(1);
127
- }
128
- console.log("HYPERCORE STAKING OK: reads live, stake/unstake/delegate prepare-only, caps enforced.");
@@ -1,183 +0,0 @@
1
- // Oracle end-to-end LIVE lane probe: Solana + Bitcoin.
2
- // Read/quote/prepare/simulate only. No signing. No broadcast. No keys required.
3
- //
4
- // Run: node scripts/e2e-solana-bitcoin.mjs
5
- // Exit 0 = every mandatory lane answered live. Optional keyed lanes are reported, not failed.
6
-
7
- import { data as desk } from "../src/data/desk-data.mjs";
8
- import { jupiterQuote, jupiterPrepareSwap, SOL_MINT, USDC_MINT } from "../src/data/providers/jupiter.mjs";
9
- import { solanaSimulateTransaction } from "../src/data/providers/solana-rpc.mjs";
10
- import { magicEdenSolStats, magicEdenSolListings, magicEdenSolPrepareBuy } from "../src/data/providers/magiceden-sol.mjs";
11
-
12
- const PROBE_WALLET = process.env.ORACLE_E2E_SOL_PUBKEY || "DtM6A1ivwvFeT14f7ggTAGvpUTZA5LeutV3rLe8wR6U3";
13
- const PROBE_BTC = process.env.ORACLE_E2E_BTC_ADDRESS || "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq";
14
-
15
- const results = [];
16
- function record(lane, status, detail) {
17
- results.push({ lane, status, detail });
18
- const tag = status === "ok" ? "OK " : status === "keyed" ? "KEY " : "FAIL";
19
- console.log(`${tag} ${lane} :: ${detail}`);
20
- }
21
-
22
- async function run(lane, fn, { optional = false } = {}) {
23
- try {
24
- const detail = await fn();
25
- record(lane, "ok", detail);
26
- return true;
27
- } catch (error) {
28
- const message = String(error?.message || error).slice(0, 140);
29
- record(lane, optional ? "keyed" : "fail", message);
30
- return optional;
31
- }
32
- }
33
-
34
- console.log("== SOLANA ==");
35
-
36
- await run("solana.rpc.health", async () => {
37
- const health = await desk.solana.health();
38
- if (!health?.ok) throw new Error(`rpc unhealthy ${JSON.stringify(health).slice(0, 80)}`);
39
- return `cluster ok slot lane live`;
40
- });
41
-
42
- await run("solana.rpc.balance", async () => {
43
- const bal = await desk.solana.balance(PROBE_WALLET);
44
- return `lamports=${bal?.lamports ?? bal?.value ?? "n/a"}`;
45
- });
46
-
47
- await run("solana.rpc.tokenAccounts", async () => {
48
- const accounts = await desk.solana.tokenAccounts({ owner: PROBE_WALLET });
49
- return `accounts=${accounts?.accounts?.length ?? 0}`;
50
- });
51
-
52
- let jupQuote = null;
53
- await run("solana.jupiter.quote(SOL->USDC)", async () => {
54
- jupQuote = await jupiterQuote({ inputMint: SOL_MINT, outputMint: USDC_MINT, amount: "10000000", slippageBps: 50 });
55
- const g = jupQuote.solanaGuard;
56
- if (jupQuote.executionReady !== false) throw new Error("quote must not be executionReady");
57
- if (g.slippageBps > 100) throw new Error("slippage cap breached");
58
- return `out=${jupQuote.quote.outAmount} bps=${g.slippageBps} expires=${g.expiresAtMs - g.quotedAtMs}ms execReady=false`;
59
- });
60
-
61
- await run("solana.jupiter.slippageCap", async () => {
62
- try {
63
- await jupiterQuote({ inputMint: SOL_MINT, outputMint: USDC_MINT, amount: "10000000", slippageBps: 500 });
64
- } catch (error) {
65
- return `rejected 500bps: ${String(error.message).slice(0, 60)}`;
66
- }
67
- throw new Error("500 bps was NOT rejected");
68
- });
69
-
70
- let jupPrepared = null;
71
- await run("solana.jupiter.prepareSwap", async () => {
72
- jupPrepared = await jupiterPrepareSwap({
73
- quoteResponse: jupQuote.quote,
74
- userPublicKey: PROBE_WALLET,
75
- });
76
- if (jupPrepared.signingReady !== false || jupPrepared.broadcastReady !== false) throw new Error("prepare leaked signing/broadcast readiness");
77
- if (!jupPrepared.requiresUserSignature) throw new Error("prepare must require user signature");
78
- return `tx=${jupPrepared.swapTransaction.length}b64 requiresUserSig=true signingReady=false broadcastReady=false`;
79
- });
80
-
81
- await run("solana.rpc.simulate(preparedSwap)", async () => {
82
- const sim = await solanaSimulateTransaction({ transaction: jupPrepared.swapTransaction, sigVerify: false });
83
- const err = sim?.err ?? sim?.value?.err ?? sim?.raw?.value?.err ?? null;
84
- const units = sim?.unitsConsumed ?? sim?.value?.unitsConsumed ?? sim?.raw?.value?.unitsConsumed ?? null;
85
- return `err=${JSON.stringify(err)} unitsConsumed=${units}`;
86
- });
87
-
88
- await run("solana.nft.magiceden.stats", async () => {
89
- const stats = await magicEdenSolStats({ symbol: "mad_lads" });
90
- if (!(stats.floorPriceSol > 0)) throw new Error("no floor");
91
- return `floor=${stats.floorPriceSol} SOL listed=${stats.listedCount}`;
92
- });
93
-
94
- let meListing = null;
95
- await run("solana.nft.magiceden.listings", async () => {
96
- const out = await magicEdenSolListings({ symbol: "mad_lads", limit: 1 });
97
- meListing = out.listings[0];
98
- if (!meListing?.tokenMint) throw new Error("no listing");
99
- return `mint=${meListing.tokenMint.slice(0, 8)}.. price=${meListing.priceSol} SOL seller=${meListing.seller.slice(0, 6)}..`;
100
- });
101
-
102
- await run(
103
- "solana.nft.magiceden.prepareBuy",
104
- async () => {
105
- const prep = await magicEdenSolPrepareBuy({
106
- buyer: PROBE_WALLET,
107
- seller: meListing.seller,
108
- auctionHouse: meListing.auctionHouse,
109
- tokenMint: meListing.tokenMint,
110
- tokenATA: meListing.tokenATA,
111
- priceSol: meListing.priceSol,
112
- });
113
- if (prep.broadcastReady !== false) throw new Error("prepare leaked broadcast readiness");
114
- return `tx prepared bytes=${String(prep.transaction || "").length} requiresUserSig=${prep.requiresUserSignature}`;
115
- },
116
- { optional: true }
117
- );
118
-
119
- console.log("== BITCOIN ==");
120
-
121
- await run("bitcoin.esplora.health", async () => {
122
- const h = await desk.bitcoin.health();
123
- if (!h?.ok) throw new Error("esplora unhealthy");
124
- return `ok tip lane live`;
125
- });
126
-
127
- await run("bitcoin.esplora.tipHeight", async () => {
128
- const t = await desk.bitcoin.tipHeight();
129
- const height = t?.height ?? t?.tipHeight ?? t;
130
- if (!Number(height)) throw new Error("no tip height");
131
- return `tip=${height}`;
132
- });
133
-
134
- await run("bitcoin.esplora.fees", async () => {
135
- const f = await desk.bitcoin.fees();
136
- const fast = f?.fastestFee ?? f?.fees?.fastestFee ?? f?.["1"] ?? null;
137
- return `fastest=${JSON.stringify(fast)}`;
138
- });
139
-
140
- await run("bitcoin.esplora.address", async () => {
141
- const a = await desk.bitcoin.address(PROBE_BTC);
142
- const funded = a?.chainStats?.fundedTxoSum ?? a?.balanceSats ?? a?.raw?.chain_stats?.funded_txo_sum ?? null;
143
- return `fundedSats=${funded}`;
144
- });
145
-
146
- await run("bitcoin.esplora.utxos", async () => {
147
- const u = await desk.bitcoin.utxos(PROBE_BTC);
148
- const n = u?.utxos?.length ?? u?.length ?? 0;
149
- return `utxos=${n}`;
150
- });
151
-
152
- await run("bitcoin.meta.health", async () => {
153
- const h = await desk.bitcoin.metaHealth();
154
- return `ok=${h?.ok} tier=${h?.tier ?? h?.mode ?? "keyless"}`;
155
- });
156
-
157
- await run(
158
- "bitcoin.meta.inscriptionInfo",
159
- async () => {
160
- const info = await desk.bitcoin.inscriptions(PROBE_BTC);
161
- return `inscriptions=${info?.inscriptions?.length ?? "unknown"}`;
162
- },
163
- { optional: true }
164
- );
165
-
166
- await run(
167
- "bitcoin.satflow.health",
168
- async () => {
169
- const h = await desk.bitcoin.satflowHealth();
170
- if (!h?.ok) throw new Error(`satflow ${JSON.stringify(h).slice(0, 90)}`);
171
- return `ok`;
172
- },
173
- { optional: true }
174
- );
175
-
176
- const failed = results.filter((r) => r.status === "fail");
177
- const keyed = results.filter((r) => r.status === "keyed");
178
- console.log(`\nlanes=${results.length} ok=${results.length - failed.length - keyed.length} keyed=${keyed.length} failed=${failed.length}`);
179
- if (failed.length) {
180
- console.log(`FAILED: ${failed.map((f) => f.lane).join(", ")}`);
181
- process.exit(1);
182
- }
183
- console.log("E2E OK: every mandatory Solana + Bitcoin lane answered live, prepare-only posture held.");
@@ -1,22 +0,0 @@
1
- #!/usr/bin/env node
2
- // prepublishOnly guard.
3
- //
4
- // `npm publish` run directly in packages/oracle would ship src/ — 36k lines of
5
- // readable source. Publishing must go through scripts/publish-dist.mjs, which
6
- // packs the bundled stage instead. That script sets ORACLE_PUBLISH_STAGED=1.
7
- //
8
- // This is a guard, not a policy decision: it fails closed on the accident.
9
-
10
- if (process.env.ORACLE_PUBLISH_STAGED === "1") process.exit(0);
11
-
12
- console.error(`
13
- REFUSING to publish from the source tree.
14
-
15
- Publishing here would ship src/ (readable source) to npm.
16
-
17
- Use: npm run publish:dist -- --publish
18
-
19
- That builds the bundle, verifies export parity, stages a clean directory
20
- with a rewritten manifest, and publishes that instead.
21
- `);
22
- process.exit(1);
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env node
2
- import { listProtocolTemplates, runProtocolTemplateGate } from "../src/protocol-templates/gate.mjs";
3
-
4
- const id = process.argv[2];
5
- if (!id || id === "list") {
6
- console.log(JSON.stringify(listProtocolTemplates(), null, 2));
7
- process.exit(0);
8
- }
9
- try {
10
- const r = runProtocolTemplateGate(id, { allowSkipStatic: process.env.REQUIRE_SLITHER !== "1" });
11
- console.log(JSON.stringify(r, null, 2));
12
- } catch (e) {
13
- console.error(String(e.message || e));
14
- process.exit(1);
15
- }
@@ -1,23 +0,0 @@
1
- #!/usr/bin/env node
2
- import fs from "node:fs/promises";
3
- import path from "node:path";
4
- import { scanPublicApis } from "../src/data/public-api-scan.mjs";
5
-
6
- const args = process.argv.slice(2);
7
- const value = (flag) => {
8
- const i = args.indexOf(flag);
9
- return i >= 0 ? args[i + 1] : null;
10
- };
11
- const outPath = value("--out");
12
- const timeoutMs = Number(value("--timeout-ms") || 12_000);
13
- const providers = value("--providers")?.split(",").map((x) => x.trim()).filter(Boolean);
14
-
15
- const report = await scanPublicApis({ providers, timeoutMs });
16
- const json = `${JSON.stringify(report, null, 2)}\n`;
17
- if (outPath) {
18
- const target = path.resolve(outPath);
19
- await fs.mkdir(path.dirname(target), { recursive: true });
20
- await fs.writeFile(target, json, "utf8");
21
- console.error(`wrote ${target}`);
22
- }
23
- process.stdout.write(json);
@@ -1,67 +0,0 @@
1
- #!/usr/bin/env node
2
- // Stage and publish the BUNDLED package.
3
- //
4
- // Publishing from packages/oracle directly would ship src/ (36k readable lines).
5
- // This builds dist/, verifies export parity against source, stages a clean
6
- // directory with a rewritten manifest, and publishes from there. The source
7
- // tree is never the thing that gets packed.
8
- //
9
- // node scripts/publish-dist.mjs # pack only, leaves the tarball
10
- // node scripts/publish-dist.mjs --publish # actually publish to npm
11
-
12
- import { execFileSync } from "node:child_process";
13
- import { cpSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
14
- import { dirname, join, resolve } from "node:path";
15
- import { fileURLToPath } from "node:url";
16
-
17
- const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), "..");
18
- const STAGE = join(ROOT, ".publish-stage");
19
- const doPublish = process.argv.includes("--publish");
20
-
21
- const run = (cmd, args, cwd = ROOT) =>
22
- execFileSync(cmd, args, { cwd, stdio: "inherit", env: { ...process.env } });
23
-
24
- console.log("→ building bundle");
25
- run("node", [join(ROOT, "scripts/build-dist.mjs")]);
26
-
27
- console.log("→ verifying export parity against source");
28
- run("node", [join(ROOT, "scripts/verify-dist.mjs")]);
29
-
30
- console.log("→ staging");
31
- if (existsSync(STAGE)) rmSync(STAGE, { recursive: true });
32
- mkdirSync(STAGE, { recursive: true });
33
-
34
- const manifest = JSON.parse(readFileSync(join(ROOT, "dist/package.publish.json"), "utf8"));
35
- cpSync(join(ROOT, "dist"), join(STAGE, "dist"), { recursive: true });
36
- rmSync(join(STAGE, "dist/package.publish.json"), { force: true });
37
-
38
- for (const asset of ["public", "artifacts"]) {
39
- if (existsSync(join(ROOT, asset))) {
40
- cpSync(join(ROOT, asset), join(STAGE, asset), { recursive: true });
41
- }
42
- }
43
- for (const doc of ["README.md", "SETUP.md", "LICENSE", "SECURITY.md"]) {
44
- if (existsSync(join(ROOT, doc))) cpSync(join(ROOT, doc), join(STAGE, doc));
45
- }
46
- writeFileSync(join(STAGE, "package.json"), JSON.stringify(manifest, null, 2) + "\n");
47
-
48
- // Fail closed: if source somehow reached the stage, do not publish it.
49
- const leaked = [];
50
- for (const forbidden of ["src", "scripts", "skills", "profiles", "test"]) {
51
- if (existsSync(join(STAGE, forbidden))) leaked.push(forbidden);
52
- }
53
- if (leaked.length) {
54
- console.error(`\nREFUSING: source directories reached the publish stage: ${leaked.join(", ")}`);
55
- process.exit(1);
56
- }
57
-
58
- // Export parity proves the modules exist. It does NOT prove a bin can start:
59
- // 0.12.0 passed parity and still shipped two bins that crashed on first line
60
- // because they resolved assets relative to the wrong layout. Smoke the stage.
61
- console.log("→ smoking staged bins");
62
- run("node", [join(ROOT, "scripts/smoke-dist-bins.mjs"), STAGE]);
63
-
64
- console.log(doPublish ? "→ publishing" : "→ packing (dry, no publish)");
65
- run("npm", doPublish ? ["publish", "--access", "public"] : ["pack"], STAGE);
66
-
67
- console.log(`\n${doPublish ? "published" : "packed"} from ${STAGE}`);
@@ -1,80 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Re-record the hero CLI session. Deterministic: types a fixed script of REAL
3
- # commands against the REAL CLI, so the hero can never drift from what Oracle
4
- # actually does (the previous recording outlived a capability change and was
5
- # still showing hyperevm 999 as fail-closed after it started routing).
6
- set -euo pipefail
7
- cd "$(dirname "$0")/.."
8
- OUT=public/oracle-splash/assets/hero
9
- CAST=/tmp/oracle-hero.cast
10
-
11
- type_line() {
12
- local text="$1"
13
- printf '%s' "$text"
14
- sleep 0.5
15
- printf '\n'
16
- }
17
-
18
- prompt() { printf '\033[38;5;110moracle\033[0m \033[38;5;245m›\033[0m '; }
19
-
20
- # ONE source of truth per command: typed on screen AND executed.
21
- CMD_CHAINS='scan chains'
22
- CMD_QUOTE='scan quote hyperevm 0x5555555555555555555555555555555555555555 0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb 1000000000000000000'
23
-
24
- run_demo() {
25
- clear
26
- prompt
27
- type_line "$CMD_CHAINS"
28
- node bin/oracle.mjs $CMD_CHAINS 2>&1 | head -20
29
- echo
30
- sleep 2.5
31
- prompt
32
- type_line "$CMD_QUOTE"
33
- node bin/oracle.mjs $CMD_QUOTE 2>&1 | tail -14 || true
34
- echo
35
- sleep 2.5
36
- prompt
37
- sleep 1.5
38
- }
39
- export -f type_line prompt run_demo
40
- export CMD_CHAINS CMD_QUOTE
41
-
42
- rm -f "$CAST"
43
- asciinema rec "$CAST" --cols 104 --rows 30 --overwrite \
44
- --command "bash -c run_demo" --quiet
45
-
46
- TMP=$(mktemp -d)
47
- trap 'rm -rf "$TMP"' EXIT
48
-
49
- agg "$CAST" "$TMP/cli.gif" \
50
- --theme 0d1117,c9d1d9,000000,ff7b72,3fb950,d29922,58a6ff,bc8cff,39c5cf,b1bac4,6e7681,ffa198,56d364,e3b341,79c0ff,d2a8ff,56d4dd,f0f6fc \
51
- --font-size 16 --line-height 1.4 --speed 1.0 --fps-cap 30
52
-
53
- # Two constraints, both mandatory:
54
- # - format=yuv420p: agg's GIF decodes as `gbrap` (planar RGB+alpha) and
55
- # libvpx-vp9 flatly refuses that pixel format. This is what actually broke the
56
- # earlier encode, not the dimensions.
57
- # - even width/height: yuv420p chroma subsampling requires it.
58
- SCALE="scale=868:-2:flags=lanczos,crop=trunc(iw/2)*2:trunc(ih/2)*2,format=yuv420p"
59
-
60
- ffmpeg -y -v error -i "$TMP/cli.gif" -vf "$SCALE" \
61
- -c:v libvpx-vp9 -crf 34 -b:v 0 -an "$TMP/cli.webm"
62
-
63
- ffmpeg -y -v error -i "$TMP/cli.gif" -vf "$SCALE" \
64
- -c:v libx264 -pix_fmt yuv420p -crf 24 -movflags +faststart -an "$TMP/cli.mp4"
65
-
66
- ffmpeg -y -v error -ss 6 -i "$TMP/cli.webm" -frames:v 1 -q:v 3 "$TMP/cli.jpg"
67
-
68
- # Prove every artifact before it is allowed near the shipped tree.
69
- for f in "$TMP/cli.webm" "$TMP/cli.mp4" "$TMP/cli.jpg"; do
70
- [ -s "$f" ] || { echo "REFUSING: $f is empty, shipped assets untouched" >&2; exit 1; }
71
- ffprobe -v error -show_entries stream=width,height -of csv=p=0 "$f" >/dev/null \
72
- || { echo "REFUSING: $f is not decodable, shipped assets untouched" >&2; exit 1; }
73
- done
74
-
75
- mv "$TMP/cli.webm" "$OUT/cli-session.webm"
76
- mv "$TMP/cli.mp4" "$OUT/cli-session.mp4"
77
- mv "$TMP/cli.jpg" "$OUT/cli-session-poster.jpg"
78
-
79
- ffprobe -v error -show_entries format=duration,size -show_entries stream=width,height \
80
- -of default=noprint_wrappers=1 "$OUT/cli-session.webm"