@oracle-agent/oracle 0.14.1 → 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.
- package/README.md +2 -2
- package/SETUP.md +4 -4
- package/dist/action-receipts.mjs +1 -0
- package/dist/action-semantics.mjs +1 -0
- package/dist/address-book.mjs +2 -0
- package/dist/bin/desk-server.mjs +59 -0
- package/dist/bin/oracle-data-mcp.mjs +8 -0
- package/dist/bin/oracle-equities.mjs +20 -0
- package/dist/bin/oracle-init.mjs +24 -0
- package/dist/bin/oracle-public-server.mjs +5 -0
- package/dist/bin/oracle-route.mjs +22 -0
- package/dist/bin/oracle-scan.mjs +18 -0
- package/dist/bin/oracle-upgrade.mjs +21 -0
- package/dist/bin/oracle.mjs +61 -0
- package/dist/chains.mjs +1 -0
- package/dist/cli/commands/auth.mjs +16 -0
- package/dist/cli/commands/bootstrap.mjs +18 -0
- package/dist/cli/commands/chain.mjs +21 -0
- package/dist/cli/commands/chat.mjs +45 -0
- package/dist/cli/commands/credential.mjs +1 -0
- package/dist/cli/commands/data-mcp.mjs +2 -0
- package/dist/cli/commands/data.mjs +12 -0
- package/dist/cli/commands/doctor.mjs +5 -0
- package/dist/cli/commands/equities.mjs +15 -0
- package/dist/cli/commands/farm.mjs +59 -0
- package/dist/cli/commands/fees.mjs +10 -0
- package/dist/cli/commands/follow.mjs +28 -0
- package/dist/cli/commands/harness.mjs +15 -0
- package/dist/cli/commands/help.mjs +1 -0
- package/dist/cli/commands/init.mjs +3 -0
- package/dist/cli/commands/mcp.mjs +36 -0
- package/dist/cli/commands/model.mjs +54 -0
- package/dist/cli/commands/plugins.mjs +43 -0
- package/dist/cli/commands/prepare.mjs +2 -0
- package/dist/cli/commands/public.mjs +3 -0
- package/dist/cli/commands/resolve.mjs +23 -0
- package/dist/cli/commands/route.mjs +2 -0
- package/dist/cli/commands/runner.mjs +1 -0
- package/dist/cli/commands/scan.mjs +2 -0
- package/dist/cli/commands/setup.mjs +34 -0
- package/dist/cli/commands/sign.mjs +4 -0
- package/dist/cli/commands/signer.mjs +1 -0
- package/dist/cli/commands/swap.mjs +36 -0
- package/dist/cli/commands/upgrade.mjs +2 -0
- package/dist/cli/commands/vault.mjs +1 -0
- package/dist/cli/commands/version.mjs +2 -0
- package/dist/data/desk-data.mjs +55 -0
- package/dist/data/names.mjs +2 -0
- package/dist/data/providers/farming.mjs +2 -0
- package/dist/equities/index.mjs +1 -0
- package/dist/index.mjs +60 -0
- package/dist/nft-gas-war-guard.mjs +1 -0
- package/dist/onboarding/harness-configs.mjs +4 -0
- package/dist/portfolio-risk.mjs +1 -0
- package/dist/prepare-envelope.mjs +1 -0
- package/dist/public-api/agent-grants.mjs +3 -0
- package/dist/public-control/policy-schema.mjs +1 -0
- package/dist/router/index.mjs +2 -0
- package/dist/scanner/index.mjs +4 -0
- package/dist/signals/index.mjs +1 -0
- package/dist/watch-preferences.mjs +1 -0
- package/package.json +32 -78
- package/public/oracle-splash/_variants/ice.html +5 -18
- package/public/oracle-splash/_variants/ivory.html +5 -18
- package/public/oracle-splash/index.html +114 -34
- package/CONTRIBUTING.md +0 -99
- package/bin/desk-server.mjs +0 -473
- package/bin/oracle-data-mcp.mjs +0 -1252
- package/bin/oracle-equities.mjs +0 -168
- package/bin/oracle-init.mjs +0 -525
- package/bin/oracle-public-server.mjs +0 -36
- package/bin/oracle-route.mjs +0 -254
- package/bin/oracle-scan.mjs +0 -192
- package/bin/oracle-upgrade.mjs +0 -42
- package/bin/oracle.mjs +0 -34
- package/docs/adding-a-chain.md +0 -229
- package/docs/architecture.md +0 -139
- package/docs/buzz-integration.md +0 -115
- package/docs/cli.md +0 -143
- package/docs/connectors.md +0 -13
- package/docs/hyperliquid-builder-code.md +0 -50
- package/docs/locals-only-fee-waiver.md +0 -34
- package/docs/oracle-pack-standard.md +0 -29
- package/docs/profiles.md +0 -151
- package/docs/public-surface.md +0 -206
- package/examples/add-a-chain.mjs +0 -65
- package/examples/oracle-pack-template.mjs +0 -38
- package/examples/research-a-token.mjs +0 -70
- package/plugins/oracle-owner-gate/__init__.py +0 -288
- package/plugins/oracle-owner-gate/plugin.yaml +0 -9
- package/protocols/templates/safe-erc20/SECURITY.md +0 -16
- package/protocols/templates/safe-erc20/foundry.toml +0 -12
- package/protocols/templates/safe-erc20/remappings.txt +0 -2
- package/protocols/templates/safe-erc20/src/SafeERC20.sol +0 -53
- package/protocols/templates/safe-erc20/test/SafeERC20.t.sol +0 -72
- package/scripts/adversarial-bench.mjs +0 -114
- package/scripts/build-dist.mjs +0 -119
- package/scripts/build-inscription.py +0 -230
- package/scripts/check-doc-drift.mjs +0 -123
- package/scripts/check-test-count.mjs +0 -105
- package/scripts/e2e-hl-markets.mjs +0 -21
- package/scripts/e2e-hl-perps.mjs +0 -48
- package/scripts/e2e-hypercore-staking.mjs +0 -128
- package/scripts/e2e-solana-bitcoin.mjs +0 -183
- package/scripts/guard-publish.mjs +0 -22
- package/scripts/protocol-template-gate.mjs +0 -15
- package/scripts/public-api-scan.mjs +0 -23
- package/scripts/publish-dist.mjs +0 -67
- package/scripts/record-hero-cli.sh +0 -80
- package/scripts/secret-scan.mjs +0 -169
- package/scripts/smoke-dist-bins.mjs +0 -89
- package/scripts/verify-dist.mjs +0 -29
- package/scripts/verify-v3-venues.mjs +0 -233
- package/skins/oracle.yaml +0 -56
- package/src/action-receipts.mjs +0 -265
- package/src/action-semantics.mjs +0 -62
- package/src/address-book.mjs +0 -208
- package/src/agent-auth.mjs +0 -206
- package/src/approval-guard.mjs +0 -282
- package/src/attestation-secret.mjs +0 -94
- package/src/audit-log.mjs +0 -196
- package/src/auth/oauth.mjs +0 -672
- package/src/auto-slippage.mjs +0 -378
- package/src/capability-posture.mjs +0 -125
- package/src/cards.mjs +0 -422
- package/src/chains.mjs +0 -62
- package/src/cli/chain-catalog.mjs +0 -215
- package/src/cli/chain-state.mjs +0 -74
- package/src/cli/commands/auth.mjs +0 -193
- package/src/cli/commands/bootstrap.mjs +0 -87
- package/src/cli/commands/chain.mjs +0 -143
- package/src/cli/commands/chat.mjs +0 -465
- package/src/cli/commands/credential.mjs +0 -9
- package/src/cli/commands/data-mcp.mjs +0 -18
- package/src/cli/commands/data.mjs +0 -75
- package/src/cli/commands/doctor.mjs +0 -136
- package/src/cli/commands/equities.mjs +0 -41
- package/src/cli/commands/farm.mjs +0 -129
- package/src/cli/commands/fees.mjs +0 -109
- package/src/cli/commands/follow.mjs +0 -130
- package/src/cli/commands/harness.mjs +0 -63
- package/src/cli/commands/help.mjs +0 -7
- package/src/cli/commands/init.mjs +0 -27
- package/src/cli/commands/mcp.mjs +0 -154
- package/src/cli/commands/model.mjs +0 -106
- package/src/cli/commands/plugins.mjs +0 -275
- package/src/cli/commands/prepare.mjs +0 -12
- package/src/cli/commands/public.mjs +0 -20
- package/src/cli/commands/resolve.mjs +0 -64
- package/src/cli/commands/route.mjs +0 -12
- package/src/cli/commands/runner.mjs +0 -9
- package/src/cli/commands/scan.mjs +0 -12
- package/src/cli/commands/setup.mjs +0 -294
- package/src/cli/commands/sign.mjs +0 -21
- package/src/cli/commands/signer.mjs +0 -9
- package/src/cli/commands/swap.mjs +0 -102
- package/src/cli/commands/upgrade.mjs +0 -12
- package/src/cli/commands/vault.mjs +0 -9
- package/src/cli/commands/version.mjs +0 -22
- package/src/cli/first-run.mjs +0 -23
- package/src/cli/kernel.mjs +0 -262
- package/src/cli/mcp-targets/chatgpt.mjs +0 -51
- package/src/cli/mcp-targets/claude-code.mjs +0 -39
- package/src/cli/mcp-targets/claude-desktop.mjs +0 -24
- package/src/cli/mcp-targets/codex.mjs +0 -41
- package/src/cli/mcp-targets/cursor.mjs +0 -32
- package/src/cli/mcp-targets/shared.mjs +0 -71
- package/src/cli/mcp-targets/vscode.mjs +0 -39
- package/src/cli/messaging-platforms.mjs +0 -217
- package/src/cli/model-config.mjs +0 -78
- package/src/cli/operator-dispatch.mjs +0 -194
- package/src/cli/oracle-harness.py +0 -415
- package/src/cli/paths.mjs +0 -107
- package/src/cli/runtime.mjs +0 -351
- package/src/cli/setup-state.mjs +0 -168
- package/src/cli/spawn-child.mjs +0 -43
- package/src/data/catalog.mjs +0 -858
- package/src/data/desk-data.mjs +0 -877
- package/src/data/http.mjs +0 -253
- package/src/data/names.mjs +0 -188
- package/src/data/provider-endpoint.mjs +0 -94
- package/src/data/providers/aave-v3.mjs +0 -139
- package/src/data/providers/across-bridge.mjs +0 -41
- package/src/data/providers/aerodrome.mjs +0 -245
- package/src/data/providers/aevo.mjs +0 -33
- package/src/data/providers/approval-indexer.mjs +0 -133
- package/src/data/providers/approvals.mjs +0 -594
- package/src/data/providers/babylon-staking.mjs +0 -149
- package/src/data/providers/balancer.mjs +0 -209
- package/src/data/providers/beefy-yields.mjs +0 -45
- package/src/data/providers/birdeye-tokens.mjs +0 -33
- package/src/data/providers/bisq-markets.mjs +0 -145
- package/src/data/providers/bitcoin-esplora.mjs +0 -216
- package/src/data/providers/bitcoin-meta.mjs +0 -378
- package/src/data/providers/blockscout.mjs +0 -14
- package/src/data/providers/bob-rootstock.mjs +0 -198
- package/src/data/providers/braiins-insights.mjs +0 -103
- package/src/data/providers/bridge-aggregator.mjs +0 -259
- package/src/data/providers/bridges.mjs +0 -242
- package/src/data/providers/bungee.mjs +0 -29
- package/src/data/providers/celestia-da.mjs +0 -38
- package/src/data/providers/changenow.mjs +0 -135
- package/src/data/providers/compound.mjs +0 -32
- package/src/data/providers/connext.mjs +0 -28
- package/src/data/providers/convex.mjs +0 -30
- package/src/data/providers/cow-protocol.mjs +0 -110
- package/src/data/providers/cowswap.mjs +0 -415
- package/src/data/providers/curve.mjs +0 -201
- package/src/data/providers/das-assets.mjs +0 -59
- package/src/data/providers/debridge.mjs +0 -109
- package/src/data/providers/defillama.mjs +0 -88
- package/src/data/providers/dexscreener.mjs +0 -43
- package/src/data/providers/drift.mjs +0 -32
- package/src/data/providers/dydx.mjs +0 -41
- package/src/data/providers/evm-rpc.mjs +0 -225
- package/src/data/providers/farming.mjs +0 -291
- package/src/data/providers/geckoterminal.mjs +0 -34
- package/src/data/providers/gmx.mjs +0 -496
- package/src/data/providers/hiro-stacks.mjs +0 -150
- package/src/data/providers/hl-assets.mjs +0 -165
- package/src/data/providers/hl-info.mjs +0 -108
- package/src/data/providers/hl-markets.mjs +0 -210
- package/src/data/providers/hl-outcome.mjs +0 -61
- package/src/data/providers/hl-perps.mjs +0 -419
- package/src/data/providers/hl-staking.mjs +0 -353
- package/src/data/providers/hl-ws.mjs +0 -119
- package/src/data/providers/hyperevm-dex.mjs +0 -49
- package/src/data/providers/jito-mev.mjs +0 -117
- package/src/data/providers/jupiter-venues.mjs +0 -119
- package/src/data/providers/jupiter.mjs +0 -315
- package/src/data/providers/kamino-strategies.mjs +0 -143
- package/src/data/providers/l2beat-tvl.mjs +0 -42
- package/src/data/providers/lifi.mjs +0 -166
- package/src/data/providers/liquid-esplora.mjs +0 -152
- package/src/data/providers/magiceden-ordinals.mjs +0 -141
- package/src/data/providers/magiceden-sol.mjs +0 -406
- package/src/data/providers/mempool-lightning.mjs +0 -144
- package/src/data/providers/mempool-mining.mjs +0 -142
- package/src/data/providers/meteora-dlmm.mjs +0 -168
- package/src/data/providers/morpho.mjs +0 -177
- package/src/data/providers/nft-gallery.mjs +0 -163
- package/src/data/providers/nft-portfolio.mjs +0 -494
- package/src/data/providers/odos.mjs +0 -156
- package/src/data/providers/ondo.mjs +0 -31
- package/src/data/providers/oneinch.mjs +0 -174
- package/src/data/providers/opensea-multichain.mjs +0 -136
- package/src/data/providers/opensea-nft.mjs +0 -371
- package/src/data/providers/orca.mjs +0 -29
- package/src/data/providers/ordinals-runes.mjs +0 -180
- package/src/data/providers/pancakeswap.mjs +0 -28
- package/src/data/providers/paraswap.mjs +0 -125
- package/src/data/providers/pendle.mjs +0 -188
- package/src/data/providers/poly-clob.mjs +0 -283
- package/src/data/providers/poly-public.mjs +0 -96
- package/src/data/providers/poly-ws.mjs +0 -103
- package/src/data/providers/polygon-staking.mjs +0 -227
- package/src/data/providers/portfolio-history.mjs +0 -394
- package/src/data/providers/portfolio.mjs +0 -600
- package/src/data/providers/pyth-price-feeds.mjs +0 -172
- package/src/data/providers/raydium.mjs +0 -35
- package/src/data/providers/relayscan-mev.mjs +0 -72
- package/src/data/providers/rfq.mjs +0 -15
- package/src/data/providers/rh-agent.mjs +0 -59
- package/src/data/providers/sanctum-lst.mjs +0 -180
- package/src/data/providers/satflow.mjs +0 -341
- package/src/data/providers/signed-material-guard.mjs +0 -108
- package/src/data/providers/solana-rpc.mjs +0 -197
- package/src/data/providers/solend-lending.mjs +0 -166
- package/src/data/providers/spark-lend.mjs +0 -42
- package/src/data/providers/squid-router.mjs +0 -29
- package/src/data/providers/stargate.mjs +0 -29
- package/src/data/providers/sushiswap.mjs +0 -30
- package/src/data/providers/symbiotic-restaking.mjs +0 -41
- package/src/data/providers/thorchain.mjs +0 -36
- package/src/data/providers/traderjoe.mjs +0 -28
- package/src/data/providers/twap.mjs +0 -152
- package/src/data/providers/uniswap-v3.mjs +0 -457
- package/src/data/providers/uniswap-v4.mjs +0 -414
- package/src/data/providers/vertex.mjs +0 -41
- package/src/data/providers/wallet-watch.mjs +0 -264
- package/src/data/providers/wormhole.mjs +0 -28
- package/src/data/providers/yearn.mjs +0 -31
- package/src/data/providers/zerox.mjs +0 -167
- package/src/data/public-api-scan.mjs +0 -61
- package/src/data/quote-placeholder.mjs +0 -31
- package/src/desk/swap-prepare.mjs +0 -194
- package/src/equities/bridge.mjs +0 -388
- package/src/equities/fixtures/bridge_routes.json +0 -159
- package/src/equities/fixtures/dst_transitions.json +0 -29
- package/src/equities/fixtures/equity_dex_pools.json +0 -154
- package/src/equities/fixtures/hip3_l2books.json +0 -2711
- package/src/equities/fixtures/nyse_holidays.json +0 -1
- package/src/equities/fixtures/oracles.json +0 -100
- package/src/equities/fixtures/rh_pool_state.json +0 -244
- package/src/equities/fixtures/solana_xstocks.json +0 -704
- package/src/equities/fixtures/ton_xstocks.json +0 -35
- package/src/equities/fixtures/universe.json +0 -411
- package/src/equities/fixtures/venues.json +0 -3542
- package/src/equities/fixtures.mjs +0 -405
- package/src/equities/funding.mjs +0 -142
- package/src/equities/index.mjs +0 -166
- package/src/equities/liveness.mjs +0 -148
- package/src/equities/marketHours.mjs +0 -249
- package/src/equities/normalize.mjs +0 -295
- package/src/equities/num.mjs +0 -146
- package/src/equities/prepare.mjs +0 -95
- package/src/equities/rank.mjs +0 -260
- package/src/equities/sourceNum.mjs +0 -69
- package/src/equities/types.mjs +0 -220
- package/src/equities/venues/arcus-perp.mjs +0 -84
- package/src/equities/venues/arcus-spot.mjs +0 -105
- package/src/equities/venues/hyperliquid-hip3.mjs +0 -224
- package/src/equities/venues/rh-uniswap.mjs +0 -216
- package/src/equities/venues/solana-xstocks.mjs +0 -139
- package/src/equities/venues/ton-stonfi.mjs +0 -139
- package/src/exact-integer.mjs +0 -72
- package/src/exec-policy.mjs +0 -419
- package/src/flags.mjs +0 -15
- package/src/fresh-window.mjs +0 -76
- package/src/gmx-attestation.mjs +0 -176
- package/src/index.mjs +0 -107
- package/src/licensing/locals-only.mjs +0 -25
- package/src/nft-gas-war-guard.mjs +0 -139
- package/src/onboarding/agent-keys.mjs +0 -161
- package/src/onboarding/harness-configs.mjs +0 -102
- package/src/onboarding/index.mjs +0 -18
- package/src/onboarding/tiers.mjs +0 -139
- package/src/oracle-env.mjs +0 -55
- package/src/package-manifest.mjs +0 -42
- package/src/plugins/agent-plugin-loader.mjs +0 -225
- package/src/portfolio-risk.mjs +0 -170
- package/src/prepare-envelope.mjs +0 -204
- package/src/profile-upgrade.mjs +0 -277
- package/src/protocol-execution.mjs +0 -84
- package/src/protocol-templates/gate.mjs +0 -179
- package/src/protocol-templates/prepare-deploy.mjs +0 -81
- package/src/public-api/agent-grants.mjs +0 -57
- package/src/public-api/buzz-integration.mjs +0 -267
- package/src/public-api/connect-agent.mjs +0 -424
- package/src/public-api/grants.mjs +0 -142
- package/src/public-api/http.mjs +0 -707
- package/src/public-api/metering.mjs +0 -111
- package/src/public-control/aa-adapter.mjs +0 -402
- package/src/public-control/build-registry.mjs +0 -227
- package/src/public-control/bundler-client.mjs +0 -357
- package/src/public-control/grant-indexer.mjs +0 -296
- package/src/public-control/policy-render.mjs +0 -69
- package/src/public-control/policy-schema.mjs +0 -322
- package/src/public-control/runtime-config.mjs +0 -275
- package/src/public-control/session-key-model.mjs +0 -379
- package/src/public-control/session-orchestrator.mjs +0 -418
- package/src/rfq/intent.mjs +0 -180
- package/src/rfq/sources.mjs +0 -181
- package/src/route-attestation.mjs +0 -132
- package/src/router/best-execution.mjs +0 -326
- package/src/router/index.mjs +0 -250
- package/src/router/integrator-fee.mjs +0 -135
- package/src/router/prepare-bridge.mjs +0 -293
- package/src/router/prepare-route.mjs +0 -398
- package/src/router/proposal.mjs +0 -311
- package/src/router/risk-classifier.mjs +0 -119
- package/src/router/route-sources.mjs +0 -364
- package/src/scanner/chains.config.mjs +0 -543
- package/src/scanner/contract.mjs +0 -270
- package/src/scanner/evm-scanner.mjs +0 -394
- package/src/scanner/index.mjs +0 -9
- package/src/scanner/v2-venue.mjs +0 -351
- package/src/scanner/v3-venue.mjs +0 -308
- package/src/scopes.mjs +0 -44
- package/src/sell-simulation.mjs +0 -167
- package/src/signals/engine.mjs +0 -146
- package/src/signals/index.mjs +0 -1
- package/src/token-transfer-guard.mjs +0 -188
- package/src/tui/app.mjs +0 -438
- package/src/tui/backend.mjs +0 -215
- package/src/tui/format.mjs +0 -272
- package/src/tui/gateway-client.mjs +0 -177
- package/src/tui/input.mjs +0 -501
- package/src/tui/memory.mjs +0 -105
- package/src/tui/meta-learn.mjs +0 -85
- package/src/tui/renderer.mjs +0 -443
- package/src/tui/scheduler.mjs +0 -205
- package/src/tui/skills-loader.mjs +0 -140
- package/src/tui/standalone-client.mjs +0 -752
- package/src/tui/theme.mjs +0 -81
- package/src/vault-attestation.mjs +0 -146
- package/src/venues.mjs +0 -206
- package/src/watch-preferences.mjs +0 -85
- /package/{profiles → dist/assets/profiles}/_template/SOUL.md +0 -0
- /package/{profiles → dist/assets/profiles}/_template/profile.json +0 -0
- /package/{profiles → dist/assets/profiles}/bitcoin-agent/SOUL.md +0 -0
- /package/{profiles → dist/assets/profiles}/bitcoin-agent/profile.json +0 -0
- /package/{profiles → dist/assets/profiles}/hyperliquid-agent/SOUL.md +0 -0
- /package/{profiles → dist/assets/profiles}/hyperliquid-agent/profile.json +0 -0
- /package/{profiles → dist/assets/profiles}/oracle/SOUL.md +0 -0
- /package/{profiles → dist/assets/profiles}/oracle/profile.json +0 -0
- /package/{profiles → dist/assets/profiles}/polymarket-agent/SOUL.md +0 -0
- /package/{profiles → dist/assets/profiles}/polymarket-agent/profile.json +0 -0
- /package/{profiles → dist/assets/profiles}/profile.schema.json +0 -0
- /package/{profiles → dist/assets/profiles}/protocol-builder/SOUL.md +0 -0
- /package/{profiles → dist/assets/profiles}/protocol-builder/profile.json +0 -0
- /package/{profiles → dist/assets/profiles}/robinhood-agent/SOUL.md +0 -0
- /package/{profiles → dist/assets/profiles}/robinhood-agent/profile.json +0 -0
- /package/{profiles → dist/assets/profiles}/solana-agent/SOUL.md +0 -0
- /package/{profiles → dist/assets/profiles}/solana-agent/profile.json +0 -0
- /package/{profiles → dist/assets/profiles}/stable-agent/SOUL.md +0 -0
- /package/{profiles → dist/assets/profiles}/stable-agent/profile.json +0 -0
- /package/{skills → dist/assets/skills}/balance/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/bitcoin-l1.md +0 -0
- /package/{skills → dist/assets/skills}/chain-defi-ecosystem-profiling.md +0 -0
- /package/{skills → dist/assets/skills}/evm-contract-research.md +0 -0
- /package/{skills → dist/assets/skills}/hyperliquid.md +0 -0
- /package/{skills → dist/assets/skills}/multichain-exec-desk.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-action-semantics/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-best-execution/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-best-execution.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-bitcoin/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-chain-graphs-telegram-cards/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-chat/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-chat/chain.SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-chat/setup.SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-circuit-breaker/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-contract-research/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-desk/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-desk.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-dex-launch/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-equities/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-grants/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-hypercore-staking/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-hyperliquid/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-meme-token-sniper/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-multichain-nft-launch/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-multichain-token-launch/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-nft-gacha-launch/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-nft-mint-gas-war/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-polymarket/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-protocol-builder/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-protocol-security/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-public-product/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-receipts/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-receipts.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-rfq-tokenized-assets/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-smart-wallet-scanner/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-solana/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-solana-nft/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-token-research/SKILL.md +0 -0
- /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);
|
package/scripts/publish-dist.mjs
DELETED
|
@@ -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"
|