@jinn-network/client 0.1.8 → 0.1.9-canary.023faefb
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/CONTRIBUTING.md +2 -2
- package/README.md +6 -0
- package/deployments/deployment-phase1b-mech-baseSepolia-fast.json +3 -3
- package/deployments/deployment-stolas-l2-baseSepolia-fast.json +23 -3
- package/deployments/deployment-task-coordinator-router-v3-baseSepolia-fast.json +34 -6
- package/dist/adapters/mech/adapter.d.ts +31 -1
- package/dist/adapters/mech/adapter.js +126 -53
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/contracts.d.ts +174 -13
- package/dist/adapters/mech/contracts.js +99 -49
- package/dist/adapters/mech/contracts.js.map +1 -1
- package/dist/adapters/mech/safe-revert.d.ts +4 -0
- package/dist/adapters/mech/safe-revert.js +5 -1
- package/dist/adapters/mech/safe-revert.js.map +1 -1
- package/dist/adapters/mech/safe.js +77 -1
- package/dist/adapters/mech/safe.js.map +1 -1
- package/dist/adapters/mech/types.d.ts +5 -130
- package/dist/adapters/mech/types.js +9 -65
- package/dist/adapters/mech/types.js.map +1 -1
- package/dist/adapters/mech/verdict-code.js +1 -1
- package/dist/adapters/mech/verdict-code.js.map +1 -1
- package/dist/api/bootstrap-endpoint.d.ts +19 -3
- package/dist/api/bootstrap-endpoint.js +4 -0
- package/dist/api/bootstrap-endpoint.js.map +1 -1
- package/dist/api/discovery-endpoint.d.ts +1 -0
- package/dist/api/discovery-endpoint.js +24 -0
- package/dist/api/discovery-endpoint.js.map +1 -1
- package/dist/api/fleet-build.d.ts +1 -7
- package/dist/api/fleet-build.js +0 -7
- package/dist/api/fleet-build.js.map +1 -1
- package/dist/api/gather-status.d.ts +26 -17
- package/dist/api/gather-status.js +62 -520
- package/dist/api/gather-status.js.map +1 -1
- package/dist/api/harness-auth-status-endpoint.d.ts +21 -0
- package/dist/api/harness-auth-status-endpoint.js +17 -0
- package/dist/api/harness-auth-status-endpoint.js.map +1 -0
- package/dist/api/launcher-endpoints.js +6 -1
- package/dist/api/launcher-endpoints.js.map +1 -1
- package/dist/api/launcher-status.d.ts +2 -0
- package/dist/api/launcher-status.js.map +1 -1
- package/dist/api/launcher-tasks.d.ts +47 -0
- package/dist/api/launcher-tasks.js +88 -3
- package/dist/api/launcher-tasks.js.map +1 -1
- package/dist/api/loop-completion-build.d.ts +79 -0
- package/dist/api/loop-completion-build.js +154 -0
- package/dist/api/loop-completion-build.js.map +1 -0
- package/dist/api/operator-artifacts-endpoint.js +1 -1
- package/dist/api/operator-artifacts-endpoint.js.map +1 -1
- package/dist/api/portfolio-v0-build.d.ts +2 -1
- package/dist/api/portfolio-v0-build.js +5 -7
- package/dist/api/portfolio-v0-build.js.map +1 -1
- package/dist/api/prediction-v1-build.d.ts +2 -2
- package/dist/api/prediction-v1-build.js +5 -7
- package/dist/api/prediction-v1-build.js.map +1 -1
- package/dist/api/rewards-build.d.ts +8 -1
- package/dist/api/rewards-build.js +32 -4
- package/dist/api/rewards-build.js.map +1 -1
- package/dist/api/rewards-endpoint.d.ts +12 -0
- package/dist/api/rewards-endpoint.js +46 -0
- package/dist/api/rewards-endpoint.js.map +1 -0
- package/dist/api/server.d.ts +6 -16
- package/dist/api/server.js +29 -26
- package/dist/api/server.js.map +1 -1
- package/dist/api/setup-endpoints.d.ts +45 -0
- package/dist/api/setup-endpoints.js +271 -52
- package/dist/api/setup-endpoints.js.map +1 -1
- package/dist/api/solvernets-endpoints.js +4 -1
- package/dist/api/solvernets-endpoints.js.map +1 -1
- package/dist/api/status-build.d.ts +71 -94
- package/dist/api/status-build.js +11 -77
- package/dist/api/status-build.js.map +1 -1
- package/dist/api/status-rollup-build.d.ts +0 -4
- package/dist/api/status-rollup-build.js +0 -4
- package/dist/api/status-rollup-build.js.map +1 -1
- package/dist/api/stop-hook.d.ts +1 -1
- package/dist/api/stop-hook.js +1 -1
- package/dist/api/stop-hook.js.map +1 -1
- package/dist/api/task-run-routing.d.ts +1 -1
- package/dist/api/task-runs-build.d.ts +2 -2
- package/dist/api/task-runs-build.js +5 -7
- package/dist/api/task-runs-build.js.map +1 -1
- package/dist/bin/jinn-distil-mcp.js +813 -0
- package/dist/bin/jinn-layer.js +12568 -0
- package/dist/build-info.json +4 -4
- package/dist/build-meta.json +1 -1
- package/dist/captures/distil-export.d.ts +54 -0
- package/dist/captures/distil-export.js +135 -0
- package/dist/captures/distil-export.js.map +1 -0
- package/dist/captures/ingest.d.ts +21 -0
- package/dist/captures/ingest.js +144 -0
- package/dist/captures/ingest.js.map +1 -0
- package/dist/captures/live-publisher.d.ts +9 -0
- package/dist/captures/live-publisher.js +5 -3
- package/dist/captures/live-publisher.js.map +1 -1
- package/dist/captures/publish.d.ts +15 -0
- package/dist/captures/publish.js +17 -7
- package/dist/captures/publish.js.map +1 -1
- package/dist/cli/commands/codedigest-revert-check.js +6 -2
- package/dist/cli/commands/codedigest-revert-check.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +3 -0
- package/dist/cli/commands/doctor.js +36 -4
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/eval.d.ts +87 -0
- package/dist/cli/commands/eval.js +481 -0
- package/dist/cli/commands/eval.js.map +1 -0
- package/dist/cli/commands/rewards.d.ts +2 -0
- package/dist/cli/commands/rewards.js +39 -10
- package/dist/cli/commands/rewards.js.map +1 -1
- package/dist/cli/commands/solver-nets.js +68 -0
- package/dist/cli/commands/solver-nets.js.map +1 -1
- package/dist/cli/commands/status.js +0 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/update.js +8 -0
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/version.js +4 -0
- package/dist/cli/commands/version.js.map +1 -1
- package/dist/cli/execution-context.js +2 -1
- package/dist/cli/execution-context.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/introspection-context.js +0 -3
- package/dist/cli/introspection-context.js.map +1 -1
- package/dist/config.d.ts +158 -541
- package/dist/config.js +190 -197
- package/dist/config.js.map +1 -1
- package/dist/contracts/abis.d.ts +100 -0
- package/dist/contracts/abis.js +58 -0
- package/dist/contracts/abis.js.map +1 -0
- package/dist/contracts/addresses.d.ts +36 -0
- package/dist/contracts/addresses.js +60 -0
- package/dist/contracts/addresses.js.map +1 -0
- package/dist/corpus/acquire.d.ts +7 -6
- package/dist/corpus/acquire.js +10 -10
- package/dist/corpus/acquire.js.map +1 -1
- package/dist/corpus/fetch-artifact.d.ts +21 -0
- package/dist/corpus/fetch-artifact.js +33 -0
- package/dist/corpus/fetch-artifact.js.map +1 -0
- package/dist/corpus/index.d.ts +2 -2
- package/dist/corpus/onchain-query.d.ts +0 -1
- package/dist/corpus/onchain-query.js +2 -5
- package/dist/corpus/onchain-query.js.map +1 -1
- package/dist/corpus/route-resolver.d.ts +3 -3
- package/dist/corpus/route-resolver.js +3 -3
- package/dist/daemon/ai-units-gate.d.ts +6 -6
- package/dist/daemon/ai-units-gate.js +11 -10
- package/dist/daemon/ai-units-gate.js.map +1 -1
- package/dist/daemon/balance-topup-loop.js +27 -9
- package/dist/daemon/balance-topup-loop.js.map +1 -1
- package/dist/daemon/checkpoint-loop.js +2 -2
- package/dist/daemon/creator.d.ts +1 -0
- package/dist/daemon/creator.js +39 -25
- package/dist/daemon/creator.js.map +1 -1
- package/dist/daemon/daemon.d.ts +15 -10
- package/dist/daemon/daemon.js +95 -41
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/delivery-watcher.d.ts +9 -0
- package/dist/daemon/delivery-watcher.js +24 -1
- package/dist/daemon/delivery-watcher.js.map +1 -1
- package/dist/daemon/eviction-loop.d.ts +7 -0
- package/dist/daemon/eviction-loop.js +19 -3
- package/dist/daemon/eviction-loop.js.map +1 -1
- package/dist/daemon/join-applier.d.ts +35 -0
- package/dist/daemon/join-applier.js +49 -0
- package/dist/daemon/join-applier.js.map +1 -0
- package/dist/daemon/loop-heartbeat.d.ts +89 -0
- package/dist/daemon/loop-heartbeat.js +75 -0
- package/dist/daemon/loop-heartbeat.js.map +1 -0
- package/dist/{api/peers.js → daemon/peer-sync.js} +3 -1
- package/dist/daemon/peer-sync.js.map +1 -0
- package/dist/daemon/reward-claim-loop.js +28 -10
- package/dist/daemon/reward-claim-loop.js.map +1 -1
- package/dist/daemon/skip-log-dedup.d.ts +1 -1
- package/dist/daemon/skip-log-dedup.js +3 -0
- package/dist/daemon/skip-log-dedup.js.map +1 -1
- package/dist/daemon/spend-cap-gate.d.ts +0 -6
- package/dist/daemon/spend-cap-gate.js +1 -8
- package/dist/daemon/spend-cap-gate.js.map +1 -1
- package/dist/daemon/watchdog-loop.d.ts +84 -0
- package/dist/daemon/watchdog-loop.js +91 -0
- package/dist/daemon/watchdog-loop.js.map +1 -0
- package/dist/dashboard/assets/index-B_5Cb-ZH.js +161 -0
- package/dist/dashboard/assets/index-D7rvJRNa.css +1 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/discovery/http.d.ts +17 -0
- package/dist/discovery/http.js +378 -26
- package/dist/discovery/http.js.map +1 -1
- package/dist/discovery/onchain.js +174 -10
- package/dist/discovery/onchain.js.map +1 -1
- package/dist/discovery/types.d.ts +149 -0
- package/dist/discovery/types.js +40 -0
- package/dist/discovery/types.js.map +1 -1
- package/dist/discovery/with-fallback.js +24 -0
- package/dist/discovery/with-fallback.js.map +1 -1
- package/dist/earning/bootstrap-run.d.ts +25 -0
- package/dist/earning/bootstrap-run.js +315 -0
- package/dist/earning/bootstrap-run.js.map +1 -0
- package/dist/earning/bootstrap.d.ts +31 -11
- package/dist/earning/bootstrap.js +123 -212
- package/dist/earning/bootstrap.js.map +1 -1
- package/dist/earning/contracts.d.ts +2 -232
- package/dist/earning/contracts.js +16 -205
- package/dist/earning/contracts.js.map +1 -1
- package/dist/earning/faucet-topup-store.d.ts +41 -0
- package/dist/earning/faucet-topup-store.js +89 -0
- package/dist/earning/faucet-topup-store.js.map +1 -0
- package/dist/earning/faucet.d.ts +1 -1
- package/dist/earning/faucet.js +2 -2
- package/dist/earning/faucet.js.map +1 -1
- package/dist/earning/safe-adapter.js +12 -45
- package/dist/earning/safe-adapter.js.map +1 -1
- package/dist/earning/steps/context.d.ts +42 -0
- package/dist/earning/steps/context.js +4 -0
- package/dist/earning/steps/context.js.map +1 -0
- package/dist/earning/steps/fleet-identity-register.d.ts +4 -0
- package/dist/earning/steps/fleet-identity-register.js +65 -0
- package/dist/earning/steps/fleet-identity-register.js.map +1 -0
- package/dist/earning/steps/fleet-safe-deploy.d.ts +4 -0
- package/dist/earning/steps/fleet-safe-deploy.js +62 -0
- package/dist/earning/steps/fleet-safe-deploy.js.map +1 -0
- package/dist/earning/steps/fleet-safe-predict.d.ts +4 -0
- package/dist/earning/steps/fleet-safe-predict.js +18 -0
- package/dist/earning/steps/fleet-safe-predict.js.map +1 -0
- package/dist/earning/steps/receipt-parsing.d.ts +12 -0
- package/dist/earning/steps/receipt-parsing.js +71 -0
- package/dist/earning/steps/receipt-parsing.js.map +1 -0
- package/dist/earning/stolas-claim.js +8 -8
- package/dist/earning/stolas-claim.js.map +1 -1
- package/dist/earning/{jinn-rewards.d.ts → stolas-staking.d.ts} +4 -8
- package/dist/earning/{jinn-rewards.js → stolas-staking.js} +6 -10
- package/dist/earning/stolas-staking.js.map +1 -0
- package/dist/earning/testnet-setup-migration.d.ts +1 -0
- package/dist/earning/testnet-setup-migration.js +7 -2
- package/dist/earning/testnet-setup-migration.js.map +1 -1
- package/dist/earning/types.d.ts +1 -1
- package/dist/earning/types.js +1 -1
- package/dist/earning/types.js.map +1 -1
- package/dist/earning/viem-clients.d.ts +3 -19
- package/dist/earning/viem-clients.js +4 -31
- package/dist/earning/viem-clients.js.map +1 -1
- package/dist/erc8004/addresses.d.ts +6 -5
- package/dist/erc8004/addresses.js +7 -5
- package/dist/erc8004/addresses.js.map +1 -1
- package/dist/erc8004/identity.d.ts +12 -1
- package/dist/erc8004/identity.js +31 -0
- package/dist/erc8004/identity.js.map +1 -1
- package/dist/erc8004/index.d.ts +1 -1
- package/dist/erc8004/index.js +1 -1
- package/dist/erc8004/index.js.map +1 -1
- package/dist/eval/capability-slate.d.ts +54 -0
- package/dist/eval/capability-slate.js +116 -0
- package/dist/eval/capability-slate.js.map +1 -0
- package/dist/eval/capability-stats.d.ts +39 -0
- package/dist/eval/capability-stats.js +123 -0
- package/dist/eval/capability-stats.js.map +1 -0
- package/dist/eval/contested-band.d.ts +18 -0
- package/dist/eval/contested-band.js +19 -0
- package/dist/eval/contested-band.js.map +1 -0
- package/dist/eval/corpus-index.d.ts +21 -0
- package/dist/eval/corpus-index.js +55 -0
- package/dist/eval/corpus-index.js.map +1 -0
- package/dist/eval/disjointness.d.ts +26 -0
- package/dist/eval/disjointness.js +67 -0
- package/dist/eval/disjointness.js.map +1 -0
- package/dist/eval/eval-harness-run.d.ts +63 -0
- package/dist/eval/eval-harness-run.js +123 -0
- package/dist/eval/eval-harness-run.js.map +1 -0
- package/dist/eval/mcnemar-power.d.ts +14 -0
- package/dist/eval/mcnemar-power.js +40 -0
- package/dist/eval/mcnemar-power.js.map +1 -0
- package/dist/eval/orchestrator.d.ts +224 -0
- package/dist/eval/orchestrator.js +250 -0
- package/dist/eval/orchestrator.js.map +1 -0
- package/dist/eval/paired.d.ts +68 -0
- package/dist/eval/paired.js +93 -0
- package/dist/eval/paired.js.map +1 -0
- package/dist/eval/resolve-slate-tasks.d.ts +35 -0
- package/dist/eval/resolve-slate-tasks.js +56 -0
- package/dist/eval/resolve-slate-tasks.js.map +1 -0
- package/dist/eval/screen-discovery.d.ts +22 -0
- package/dist/eval/screen-discovery.js +71 -0
- package/dist/eval/screen-discovery.js.map +1 -0
- package/dist/eval/screen-progress.d.ts +41 -0
- package/dist/eval/screen-progress.js +60 -0
- package/dist/eval/screen-progress.js.map +1 -0
- package/dist/eval/screen-runner.d.ts +30 -0
- package/dist/eval/screen-runner.js +289 -0
- package/dist/eval/screen-runner.js.map +1 -0
- package/dist/eval/screen.d.ts +107 -0
- package/dist/eval/screen.js +159 -0
- package/dist/eval/screen.js.map +1 -0
- package/dist/eval/slope.d.ts +29 -0
- package/dist/eval/slope.js +46 -0
- package/dist/eval/slope.js.map +1 -0
- package/dist/eval/train-sequence.d.ts +35 -0
- package/dist/eval/train-sequence.js +59 -0
- package/dist/eval/train-sequence.js.map +1 -0
- package/dist/eval/wilson.d.ts +45 -0
- package/dist/eval/wilson.js +48 -0
- package/dist/eval/wilson.js.map +1 -0
- package/dist/events/types.d.ts +1 -1
- package/dist/events/types.js +1 -1
- package/dist/events/types.js.map +1 -1
- package/dist/harnesses/auth-source.d.ts +51 -0
- package/dist/harnesses/auth-source.js +155 -0
- package/dist/harnesses/auth-source.js.map +1 -0
- package/dist/harnesses/engine/canonical-json.js +5 -3
- package/dist/harnesses/engine/canonical-json.js.map +1 -1
- package/dist/harnesses/engine/engine.d.ts +34 -1
- package/dist/harnesses/engine/engine.js +91 -11
- package/dist/harnesses/engine/engine.js.map +1 -1
- package/dist/harnesses/engine/packaging.js +5 -5
- package/dist/harnesses/engine/packaging.js.map +1 -1
- package/dist/harnesses/engine/persistence.d.ts +19 -61
- package/dist/harnesses/engine/persistence.js +28 -0
- package/dist/harnesses/engine/persistence.js.map +1 -1
- package/dist/harnesses/impls/_evaluator-base.d.ts +48 -0
- package/dist/harnesses/impls/_evaluator-base.js +35 -0
- package/dist/harnesses/impls/_evaluator-base.js.map +1 -0
- package/dist/harnesses/impls/claude-mcp-hyperliquid/mcp-tools.d.ts +1 -1
- package/dist/harnesses/impls/claude-mcp-hyperliquid/mcp-tools.js +1 -1
- package/dist/harnesses/impls/claude-mcp-hyperliquid/mcp-tools.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction/index.d.ts +2 -3
- package/dist/harnesses/impls/claude-mcp-prediction/index.js +29 -99
- package/dist/harnesses/impls/claude-mcp-prediction/index.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction/mcp-tools.js +4 -21
- package/dist/harnesses/impls/claude-mcp-prediction/mcp-tools.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction/session-orchestrator.d.ts +2 -0
- package/dist/harnesses/impls/claude-mcp-prediction/session-orchestrator.js +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction/session-orchestrator.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction-apy/index.js +30 -79
- package/dist/harnesses/impls/claude-mcp-prediction-apy/index.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction-apy/mcp-tools.js +4 -19
- package/dist/harnesses/impls/claude-mcp-prediction-apy/mcp-tools.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction-apy/session-orchestrator.d.ts +2 -0
- package/dist/harnesses/impls/claude-mcp-prediction-apy/session-orchestrator.js +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction-apy/session-orchestrator.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server-script.d.ts +39 -0
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server-script.js +62 -0
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server-script.js.map +1 -0
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server.d.ts +40 -0
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server.js +44 -0
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server.js.map +1 -0
- package/dist/harnesses/impls/claude-mcp-shared/single-session-harness.d.ts +56 -0
- package/dist/harnesses/impls/claude-mcp-shared/single-session-harness.js +79 -0
- package/dist/harnesses/impls/claude-mcp-shared/single-session-harness.js.map +1 -0
- package/dist/harnesses/impls/hermes-agent/adapter.d.ts +2 -0
- package/dist/harnesses/impls/hermes-agent/adapter.js +8 -5
- package/dist/harnesses/impls/hermes-agent/adapter.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/bootstrap.d.ts +1 -0
- package/dist/harnesses/impls/hermes-agent/bootstrap.js +6 -1
- package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/harness.d.ts +25 -3
- package/dist/harnesses/impls/hermes-agent/harness.js +89 -5
- package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -1
- package/dist/harnesses/impls/index.d.ts +2 -0
- package/dist/harnesses/impls/index.js +10 -1
- package/dist/harnesses/impls/index.js.map +1 -1
- package/dist/harnesses/impls/jinn-repo-evaluator/eval-runner.d.ts +34 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/eval-runner.js +111 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/eval-runner.js.map +1 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/evaluator.d.ts +24 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/evaluator.js +19 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/evaluator.js.map +1 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/harness.d.ts +64 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/harness.js +125 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/harness.js.map +1 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/repro.d.ts +32 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/repro.js +73 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/repro.js.map +1 -0
- package/dist/harnesses/impls/learner/adapters/claude-code.js +5 -0
- package/dist/harnesses/impls/learner/adapters/claude-code.js.map +1 -1
- package/dist/harnesses/impls/learner/adapters/codex-code.d.ts +11 -1
- package/dist/harnesses/impls/learner/adapters/codex-code.js +130 -15
- package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -1
- package/dist/harnesses/impls/learner/harness.d.ts +29 -1
- package/dist/harnesses/impls/learner/harness.js +85 -1
- package/dist/harnesses/impls/learner/harness.js.map +1 -1
- package/dist/harnesses/impls/learner/harvest.d.ts +2 -0
- package/dist/harnesses/impls/learner/harvest.js +51 -1
- package/dist/harnesses/impls/learner/harvest.js.map +1 -1
- package/dist/harnesses/impls/learner/plugin-path.js +1 -0
- package/dist/harnesses/impls/learner/plugin-path.js.map +1 -1
- package/dist/harnesses/impls/portfolio-v0-evaluator/index.d.ts +5 -15
- package/dist/harnesses/impls/portfolio-v0-evaluator/index.js +10 -29
- package/dist/harnesses/impls/portfolio-v0-evaluator/index.js.map +1 -1
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.d.ts +5 -15
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.js +10 -23
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.js.map +1 -1
- package/dist/harnesses/impls/prediction-v0-evaluator/index.d.ts +5 -15
- package/dist/harnesses/impls/prediction-v0-evaluator/index.js +10 -25
- package/dist/harnesses/impls/prediction-v0-evaluator/index.js.map +1 -1
- package/dist/harnesses/impls/stub.d.ts +2 -2
- package/dist/harnesses/impls/stub.js +2 -2
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js +8 -0
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +3 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.d.ts +2 -2
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js +3 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js.map +1 -1
- package/dist/harnesses/readiness-registry.d.ts +16 -0
- package/dist/harnesses/readiness-registry.js +28 -6
- package/dist/harnesses/readiness-registry.js.map +1 -1
- package/dist/harnesses/types.d.ts +26 -0
- package/dist/learner/revert-decision.d.ts +16 -1
- package/dist/learner/revert-decision.js +38 -18
- package/dist/learner/revert-decision.js.map +1 -1
- package/dist/learner/revert-stats.d.ts +14 -0
- package/dist/learner/revert-stats.js +42 -0
- package/dist/learner/revert-stats.js.map +1 -1
- package/dist/learner/verification-gate.d.ts +53 -0
- package/dist/learner/verification-gate.js +80 -0
- package/dist/learner/verification-gate.js.map +1 -0
- package/dist/local-provider-url.d.ts +3 -0
- package/dist/local-provider-url.js +28 -0
- package/dist/local-provider-url.js.map +1 -0
- package/dist/main.js +188 -566
- package/dist/main.js.map +1 -1
- package/dist/mcp/acquire-artifact.d.ts +3 -3
- package/dist/mcp/acquire-artifact.js +3 -3
- package/dist/mcp/operator-server.js +1 -1
- package/dist/mcp/operator-server.js.map +1 -1
- package/dist/mcp/server.js +5 -6
- package/dist/mcp/server.js.map +1 -1
- package/dist/monitoring/net-liveness.d.ts +143 -0
- package/dist/monitoring/net-liveness.js +301 -0
- package/dist/monitoring/net-liveness.js.map +1 -0
- package/dist/observability/emit-event.d.ts +1 -1
- package/dist/observability/emit-event.js +0 -4
- package/dist/observability/emit-event.js.map +1 -1
- package/dist/observability/progress.d.ts +11 -0
- package/dist/observability/progress.js +16 -0
- package/dist/observability/progress.js.map +1 -0
- package/dist/pilot/cost.d.ts +19 -0
- package/dist/pilot/cost.js +31 -0
- package/dist/pilot/cost.js.map +1 -0
- package/dist/pilot/instance.d.ts +20 -0
- package/dist/pilot/instance.js +19 -0
- package/dist/pilot/instance.js.map +1 -0
- package/dist/pilot/repo.d.ts +31 -0
- package/dist/pilot/repo.js +42 -0
- package/dist/pilot/repo.js.map +1 -0
- package/dist/pilot/solve.d.ts +22 -0
- package/dist/pilot/solve.js +37 -0
- package/dist/pilot/solve.js.map +1 -0
- package/dist/pilot/tally.d.ts +35 -0
- package/dist/pilot/tally.js +61 -0
- package/dist/pilot/tally.js.map +1 -0
- package/dist/plugins/learner/.claude-plugin/plugin.json +1 -1
- package/dist/plugins/learner/.codex-plugin/plugin.json +1 -1
- package/dist/plugins/learner/hooks/session-start +30 -1
- package/dist/plugins/learner/skills/learn/consolidator-prompt.md +4 -0
- package/dist/plugins/local-trace-distiller/.claude-plugin/plugin.json +9 -0
- package/dist/plugins/local-trace-distiller/.codex-plugin/plugin.json +41 -0
- package/dist/plugins/local-trace-distiller/.mcp.json +8 -0
- package/dist/plugins/local-trace-distiller/README.md +27 -0
- package/dist/plugins/local-trace-distiller/jinn.plugin.json +36 -0
- package/dist/plugins/local-trace-distiller/skills/distill/SKILL.md +51 -0
- package/dist/preflight/deployment-readiness.d.ts +127 -0
- package/dist/preflight/deployment-readiness.js +308 -0
- package/dist/preflight/deployment-readiness.js.map +1 -0
- package/dist/preflight/pidfile-liveness.d.ts +7 -1
- package/dist/preflight/pidfile-liveness.js +14 -0
- package/dist/preflight/pidfile-liveness.js.map +1 -1
- package/dist/preflight/rpc-network.d.ts +10 -3
- package/dist/preflight/rpc-network.js +46 -13
- package/dist/preflight/rpc-network.js.map +1 -1
- package/dist/preflight/stable-cwd.d.ts +29 -0
- package/dist/preflight/stable-cwd.js +98 -0
- package/dist/preflight/stable-cwd.js.map +1 -0
- package/dist/rpc/transport.d.ts +43 -5
- package/dist/rpc/transport.js +131 -30
- package/dist/rpc/transport.js.map +1 -1
- package/dist/scripts/swe-rebench-v2-seed-pool.json +2 -1
- package/dist/solver-nets/registry.d.ts +19 -0
- package/dist/solver-nets/registry.js +95 -66
- package/dist/solver-nets/registry.js.map +1 -1
- package/dist/solver-types/_jinn-repo-pool.d.ts +27 -0
- package/dist/solver-types/_jinn-repo-pool.js +27 -0
- package/dist/solver-types/_jinn-repo-pool.js.map +1 -0
- package/dist/solver-types/_swe-rebench-v2-held-out-slate.d.ts +76 -0
- package/dist/solver-types/_swe-rebench-v2-held-out-slate.js +156 -0
- package/dist/solver-types/_swe-rebench-v2-held-out-slate.js.map +1 -0
- package/dist/solver-types/_swe-rebench-v2-pool-recovery.d.ts +81 -0
- package/dist/solver-types/_swe-rebench-v2-pool-recovery.js +116 -0
- package/dist/solver-types/_swe-rebench-v2-pool-recovery.js.map +1 -0
- package/dist/solver-types/_swe-rebench-v2-state.d.ts +9 -0
- package/dist/solver-types/_swe-rebench-v2-state.js +14 -0
- package/dist/solver-types/_swe-rebench-v2-state.js.map +1 -1
- package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +30 -0
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js +40 -0
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
- package/dist/solver-types/index.js +2 -0
- package/dist/solver-types/index.js.map +1 -1
- package/dist/solver-types/jinn-repo-admit.d.ts +17 -0
- package/dist/solver-types/jinn-repo-admit.js +16 -0
- package/dist/solver-types/jinn-repo-admit.js.map +1 -0
- package/dist/solver-types/jinn-repo-auto.d.ts +60 -0
- package/dist/solver-types/jinn-repo-auto.js +163 -0
- package/dist/solver-types/jinn-repo-auto.js.map +1 -0
- package/dist/solver-types/jinn-repo-definition.d.ts +15 -0
- package/dist/solver-types/jinn-repo-definition.js +34 -0
- package/dist/solver-types/jinn-repo-definition.js.map +1 -0
- package/dist/solver-types/jinn-repo-extract.d.ts +16 -0
- package/dist/solver-types/jinn-repo-extract.js +32 -0
- package/dist/solver-types/jinn-repo-extract.js.map +1 -0
- package/dist/solver-types/jinn-repo.d.ts +21 -0
- package/dist/solver-types/jinn-repo.js +23 -0
- package/dist/solver-types/jinn-repo.js.map +1 -0
- package/dist/solver-types/learner-loop-test.js +1 -1
- package/dist/solver-types/learner-loop-test.js.map +1 -1
- package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v1.json +20 -0
- package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v2.json +19 -0
- package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v2.screening-report.json +628 -0
- package/dist/solver-types/solver-type.d.ts +8 -0
- package/dist/solver-types/swe-rebench-v2.d.ts +2 -0
- package/dist/solver-types/swe-rebench-v2.js +115 -10
- package/dist/solver-types/swe-rebench-v2.js.map +1 -1
- package/dist/solvernets/launched-record-dispatcher.d.ts +5 -0
- package/dist/solvernets/launched-record-dispatcher.js +14 -1
- package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
- package/dist/solvernets/registry-client-erc8004.js +29 -37
- package/dist/solvernets/registry-client-erc8004.js.map +1 -1
- package/dist/solvernets/registry-client.d.ts +6 -0
- package/dist/solvernets/store.d.ts +1 -1
- package/dist/solvernets/store.js +8 -3
- package/dist/solvernets/store.js.map +1 -1
- package/dist/spend/ai-units-config.d.ts +10 -0
- package/dist/spend/ai-units-config.js +7 -1
- package/dist/spend/ai-units-config.js.map +1 -1
- package/dist/spend/ai-units.d.ts +51 -0
- package/dist/spend/ai-units.js +73 -0
- package/dist/spend/ai-units.js.map +1 -1
- package/dist/spend/credential.d.ts +2 -2
- package/dist/spend/credential.js +9 -3
- package/dist/spend/credential.js.map +1 -1
- package/dist/spend/record.js +12 -5
- package/dist/spend/record.js.map +1 -1
- package/dist/spend/spend-cap.d.ts +10 -0
- package/dist/spend/spend-cap.js +13 -0
- package/dist/spend/spend-cap.js.map +1 -0
- package/dist/spend/usage.js +39 -3
- package/dist/spend/usage.js.map +1 -1
- package/dist/store/store.d.ts +106 -5
- package/dist/store/store.js +194 -8
- package/dist/store/store.js.map +1 -1
- package/dist/trajectory/emit.d.ts +6 -0
- package/dist/trajectory/emit.js +9 -1
- package/dist/trajectory/emit.js.map +1 -1
- package/dist/trajectory/harness-bundle-schema.d.ts +1 -1
- package/dist/trajectory/harness-bundle-schema.js +1 -1
- package/dist/trajectory/harness-bundle-schema.js.map +1 -1
- package/dist/trajectory/processors/identity-scrub.js +22 -3
- package/dist/trajectory/processors/identity-scrub.js.map +1 -1
- package/dist/trajectory/schema.d.ts +1 -1
- package/dist/trajectory/schema.js +1 -1
- package/dist/trajectory/schema.js.map +1 -1
- package/dist/trajectory/scrub/build.d.ts +46 -0
- package/dist/trajectory/scrub/build.js +76 -0
- package/dist/trajectory/scrub/build.js.map +1 -0
- package/dist/trajectory/scrub/emit-scrub.d.ts +41 -0
- package/dist/trajectory/scrub/emit-scrub.js +88 -0
- package/dist/trajectory/scrub/emit-scrub.js.map +1 -0
- package/dist/trajectory/scrub/key-policy.d.ts +20 -0
- package/dist/trajectory/scrub/key-policy.js +43 -0
- package/dist/trajectory/scrub/key-policy.js.map +1 -0
- package/dist/trajectory/scrub/layer2.d.ts +23 -0
- package/dist/trajectory/scrub/layer2.js +33 -0
- package/dist/trajectory/scrub/layer2.js.map +1 -0
- package/dist/trajectory/scrub/ml-pii-stage.d.ts +24 -0
- package/dist/trajectory/scrub/ml-pii-stage.js +43 -0
- package/dist/trajectory/scrub/ml-pii-stage.js.map +1 -0
- package/dist/trajectory/scrub/openredaction-stage.d.ts +178 -0
- package/dist/trajectory/scrub/openredaction-stage.js +269 -0
- package/dist/trajectory/scrub/openredaction-stage.js.map +1 -0
- package/dist/trajectory/scrub/pii-build.d.ts +31 -0
- package/dist/trajectory/scrub/pii-build.js +64 -0
- package/dist/trajectory/scrub/pii-build.js.map +1 -0
- package/dist/trajectory/scrub/pipeline.d.ts +37 -0
- package/dist/trajectory/scrub/pipeline.js +83 -0
- package/dist/trajectory/scrub/pipeline.js.map +1 -0
- package/dist/trajectory/scrub/plain-patterns-stage.d.ts +31 -0
- package/dist/trajectory/scrub/plain-patterns-stage.js +85 -0
- package/dist/trajectory/scrub/plain-patterns-stage.js.map +1 -0
- package/dist/trajectory/scrub/secretlint-stage.d.ts +35 -0
- package/dist/trajectory/scrub/secretlint-stage.js +250 -0
- package/dist/trajectory/scrub/secretlint-stage.js.map +1 -0
- package/dist/trajectory/scrub/transformers-detector.d.ts +35 -0
- package/dist/trajectory/scrub/transformers-detector.js +68 -0
- package/dist/trajectory/scrub/transformers-detector.js.map +1 -0
- package/dist/trajectory/scrub/types.d.ts +25 -0
- package/dist/trajectory/scrub/types.js +2 -0
- package/dist/trajectory/scrub/types.js.map +1 -0
- package/dist/trajectory/transcript-parsers/types.d.ts +1 -1
- package/dist/trajectory/transcript-parsers/types.js +1 -1
- package/dist/trajectory/transcript-parsers/types.js.map +1 -1
- package/dist/trajectory/transcript-watcher.d.ts +26 -0
- package/dist/trajectory/transcript-watcher.js +33 -0
- package/dist/trajectory/transcript-watcher.js.map +1 -1
- package/dist/tx-retry.d.ts +12 -0
- package/dist/tx-retry.js +41 -12
- package/dist/tx-retry.js.map +1 -1
- package/dist/types/envelope.d.ts +1 -1
- package/dist/types/envelope.js +1 -1
- package/dist/types/envelope.js.map +1 -1
- package/dist/types/payloads/index.d.ts +1 -1
- package/dist/types/payloads/index.js +7 -1
- package/dist/types/payloads/index.js.map +1 -1
- package/dist/types/payloads/portfolio-v0.d.ts +1 -1
- package/dist/types/payloads/portfolio-v0.js +1 -1
- package/dist/types/payloads/portfolio-v0.js.map +1 -1
- package/dist/types/payloads/prediction-apy-v0.d.ts +1 -1
- package/dist/types/payloads/prediction-apy-v0.js +1 -1
- package/dist/types/payloads/prediction-apy-v0.js.map +1 -1
- package/dist/types/payloads/prediction-v0.d.ts +1 -1
- package/dist/types/payloads/prediction-v0.js +1 -1
- package/dist/types/payloads/prediction-v0.js.map +1 -1
- package/dist/types/portfolio.d.ts +1 -1
- package/dist/types/portfolio.js +1 -1
- package/dist/types/portfolio.js.map +1 -1
- package/dist/types/prediction-apy.d.ts +1 -1
- package/dist/types/prediction-apy.js +1 -1
- package/dist/types/prediction-apy.js.map +1 -1
- package/dist/types/prediction.d.ts +1 -1
- package/dist/types/prediction.js +1 -1
- package/dist/types/prediction.js.map +1 -1
- package/dist/types/session-provenance.d.ts +1 -1
- package/dist/types/session-provenance.js +1 -1
- package/dist/types/session-provenance.js.map +1 -1
- package/dist/types/skill-artifact.d.ts +442 -0
- package/dist/types/skill-artifact.js +137 -0
- package/dist/types/skill-artifact.js.map +1 -0
- package/dist/types/task-document.d.ts +315 -1
- package/dist/types/task-document.js +9 -1
- package/dist/types/task-document.js.map +1 -1
- package/dist/types/task-run-read-model.d.ts +21 -0
- package/dist/types/task-run-read-model.js +2 -0
- package/dist/types/task-run-read-model.js.map +1 -0
- package/dist/types/task-run.d.ts +75 -0
- package/dist/types/task-run.js +2 -0
- package/dist/types/task-run.js.map +1 -0
- package/dist/types/task.d.ts +29 -1
- package/dist/types/task.js +1 -1
- package/dist/types/task.js.map +1 -1
- package/dist/types/window.d.ts +1 -1
- package/dist/types/window.js +1 -1
- package/dist/types/window.js.map +1 -1
- package/dist/util/redact-rpc-urls.d.ts +1 -1
- package/dist/util/redact-rpc-urls.js +57 -2
- package/dist/util/redact-rpc-urls.js.map +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/checkpoint.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/checkpoint.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/contracts.d.ts +3 -2
- package/dist/vendor/@jinn-network/sdk/dist/contracts.js +49 -0
- package/dist/vendor/@jinn-network/sdk/dist/jinn-repo.d.ts +44 -0
- package/dist/vendor/@jinn-network/sdk/dist/jinn-repo.js +25 -0
- package/dist/vendor/@jinn-network/sdk/dist/json-schema.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/json-schema.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/jinn-repo.d.ts +38 -0
- package/dist/vendor/@jinn-network/sdk/dist/payloads/jinn-repo.js +22 -0
- package/dist/vendor/@jinn-network/sdk/dist/payloads/prediction-v1.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/prediction-v1.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/session-derived.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/session-derived.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.d.ts +109 -2
- package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.js +26 -2
- package/dist/vendor/@jinn-network/sdk/dist/prediction-v1.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/prediction-v1.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/jinn-repo.d.ts +4 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/jinn-repo.js +2 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/manifest-schema.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/manifest-schema.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2-held-out-slate.d.ts +65 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2-held-out-slate.js +123 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.d.ts +2 -2
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/swe-rebench-v2.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/swe-rebench-v2.js +1 -1
- package/dist/vendor/@jinn-network/sdk/package.json +9 -1
- package/docker-compose.yml +3 -2
- package/package.json +43 -28
- package/plugins/jinn-repo-runtime/.claude-plugin/plugin.json +5 -0
- package/plugins/jinn-repo-runtime/.codex-plugin/plugin.json +39 -0
- package/plugins/jinn-repo-runtime/README.md +27 -0
- package/plugins/jinn-repo-runtime/hooks/hooks.json +16 -0
- package/plugins/jinn-repo-runtime/hooks/session-start +73 -0
- package/plugins/jinn-repo-runtime/jinn.plugin.json +11 -0
- package/plugins/jinn-repo-runtime/skills/task/SKILL.md +92 -0
- package/plugins/learner/.claude-plugin/plugin.json +1 -1
- package/plugins/learner/.codex-plugin/plugin.json +1 -1
- package/plugins/learner/hooks/session-start +30 -1
- package/plugins/learner/skills/learn/consolidator-prompt.md +4 -0
- package/plugins/local-trace-distiller/.claude-plugin/plugin.json +9 -0
- package/plugins/local-trace-distiller/.codex-plugin/plugin.json +41 -0
- package/plugins/local-trace-distiller/.mcp.json +8 -0
- package/plugins/local-trace-distiller/README.md +27 -0
- package/plugins/local-trace-distiller/jinn.plugin.json +36 -0
- package/plugins/local-trace-distiller/skills/distill/SKILL.md +51 -0
- package/plugins/swe-rebench-v2-runtime/hooks/hooks.json +16 -0
- package/plugins/swe-rebench-v2-runtime/hooks/session-start +74 -0
- package/deployments/deployment-jinn-mvi-l1-sepolia-fast.json +0 -55
- package/deployments/deployment-jinn-mvi-l1-sepolia.json +0 -55
- package/deployments/deployment-jinn-mvi-l2-baseSepolia.json +0 -13
- package/deployments/deployment-jinn-testnet-faucet-baseSepolia-fast.json +0 -15
- package/dist/api/peers.js.map +0 -1
- package/dist/daemon/jinn-claim-loop-canonical.d.ts +0 -207
- package/dist/daemon/jinn-claim-loop-canonical.js +0 -296
- package/dist/daemon/jinn-claim-loop-canonical.js.map +0 -1
- package/dist/daemon/jinn-claim-loop-mock.d.ts +0 -61
- package/dist/daemon/jinn-claim-loop-mock.js +0 -122
- package/dist/daemon/jinn-claim-loop-mock.js.map +0 -1
- package/dist/daemon/jinn-claim-loop-wiring.d.ts +0 -33
- package/dist/daemon/jinn-claim-loop-wiring.js +0 -40
- package/dist/daemon/jinn-claim-loop-wiring.js.map +0 -1
- package/dist/daemon/jinn-claim-loop.d.ts +0 -130
- package/dist/daemon/jinn-claim-loop.js +0 -328
- package/dist/daemon/jinn-claim-loop.js.map +0 -1
- package/dist/dashboard/assets/index-CzKxvMcU.css +0 -32
- package/dist/dashboard/assets/index-yVemxHot.js +0 -351
- package/dist/earning/jinn-rewards.js.map +0 -1
- package/dist/scripts/donation-consumption-acceptance.d.ts +0 -85
- package/dist/scripts/donation-consumption-acceptance.js +0 -1382
- package/dist/scripts/donation-consumption-acceptance.js.map +0 -1
- package/dist/x402/acquire.d.ts +0 -17
- package/dist/x402/acquire.js +0 -49
- package/dist/x402/acquire.js.map +0 -1
- package/dist/x402/facilitator.d.ts +0 -11
- package/dist/x402/facilitator.js +0 -52
- package/dist/x402/facilitator.js.map +0 -1
- package/dist/x402/handler.d.ts +0 -27
- package/dist/x402/handler.js +0 -236
- package/dist/x402/handler.js.map +0 -1
- /package/dist/{api/peers.d.ts → daemon/peer-sync.d.ts} +0 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Net-liveness probe — operator-independent detector for the #1038 silent-stall
|
|
3
|
+
* class.
|
|
4
|
+
*
|
|
5
|
+
* Context: when the shared indexer blips, every operator daemon's discovery
|
|
6
|
+
* loops can wedge while the indexer-independent loops (jinn-claim, balance-topup)
|
|
7
|
+
* keep emitting on-chain activity and mask the outage. No single operator can
|
|
8
|
+
* be trusted to notice, so liveness must be observed from *outside* any daemon.
|
|
9
|
+
*
|
|
10
|
+
* This module reads on-chain truth two ways and cross-references them:
|
|
11
|
+
* - chain head — direct RPC `getBlockNumber()` (always live)
|
|
12
|
+
* - latest indexed attempt/verdict block — indexer GraphQL
|
|
13
|
+
* - indexer head — indexer `/status` (the indexer's own indexed head)
|
|
14
|
+
*
|
|
15
|
+
* The core decision is a pure function (`classifyNetLiveness`). The orchestrator
|
|
16
|
+
* (`runNetLivenessProbe`) injects all I/O so the whole flow is testable with no
|
|
17
|
+
* network. Designed to run from a stateless cron entry script
|
|
18
|
+
* (`scripts/net-liveness-probe.ts`), NOT in-daemon.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Base produces ~one block every 2s → 30 blocks per minute. The probe works in
|
|
22
|
+
* block-space (the schema carries `createdAtBlock`, no timestamp column), so the
|
|
23
|
+
* minute threshold is converted to blocks with this constant.
|
|
24
|
+
*/
|
|
25
|
+
export declare const BASE_BLOCKS_PER_MINUTE = 30;
|
|
26
|
+
/** Convert a minute threshold to a Base block-count. */
|
|
27
|
+
export declare function minutesToThresholdBlocks(minutes: number): number;
|
|
28
|
+
export interface NetLivenessInputs {
|
|
29
|
+
/** Current chain head (second of two RPC reads). */
|
|
30
|
+
chainHeadBlock: bigint;
|
|
31
|
+
/** Chain head from the first RPC read, or null if only one read was taken. */
|
|
32
|
+
prevChainHeadBlock: bigint | null;
|
|
33
|
+
/** Block of the newest indexed attempt OR verdict, or null if no rows exist. */
|
|
34
|
+
latestActivityBlock: bigint | null;
|
|
35
|
+
/** The indexer's own indexed head, or null if the indexer is unreachable. */
|
|
36
|
+
indexerHeadBlock: bigint | null;
|
|
37
|
+
/** Staleness threshold in block-space (minutes × BASE_BLOCKS_PER_MINUTE). */
|
|
38
|
+
thresholdBlocks: number;
|
|
39
|
+
}
|
|
40
|
+
export type NetLivenessState = 'healthy' | 'stale' | 'chain-halted' | 'indexer-lagging' | 'indexer-down';
|
|
41
|
+
export interface NetLivenessResult {
|
|
42
|
+
state: NetLivenessState;
|
|
43
|
+
/** Blocks since the last indexed activity, measured against the trusted activity head and floored at 0. */
|
|
44
|
+
staleForBlocks: bigint;
|
|
45
|
+
reason: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Decide net-liveness from the four cross-referenced reads. PURE — no I/O.
|
|
49
|
+
*
|
|
50
|
+
* Decision order matters: only the `stale` state alerts. Each preceding state is
|
|
51
|
+
* a confound that would otherwise look like a stall but isn't a *net* stall (a
|
|
52
|
+
* down/lagging indexer or a halted chain is reported, not alerted).
|
|
53
|
+
*/
|
|
54
|
+
export declare function classifyNetLiveness(inputs: NetLivenessInputs): NetLivenessResult;
|
|
55
|
+
/**
|
|
56
|
+
* Generic incoming-webhook payload. `text` makes it Slack-incoming-webhook
|
|
57
|
+
* compatible; the structured fields ride alongside for any consumer that reads
|
|
58
|
+
* JSON. bigints are serialized as strings (bigint is not JSON-serializable).
|
|
59
|
+
*/
|
|
60
|
+
export interface NetLivenessAlertPayload {
|
|
61
|
+
text: string;
|
|
62
|
+
state: NetLivenessState;
|
|
63
|
+
staleForBlocks: string;
|
|
64
|
+
staleForMinutes: number;
|
|
65
|
+
chainHeadBlock: string;
|
|
66
|
+
latestActivityBlock: string | null;
|
|
67
|
+
runAt: string;
|
|
68
|
+
}
|
|
69
|
+
export interface NetLivenessProbeDeps {
|
|
70
|
+
/** Read the current chain head via RPC. Called twice per run. */
|
|
71
|
+
fetchChainHead: () => Promise<bigint>;
|
|
72
|
+
/** Newest indexed attempt/verdict block, or null if no rows exist. Throws on read failure. */
|
|
73
|
+
fetchLatestActivityBlock: () => Promise<bigint | null>;
|
|
74
|
+
/** The indexer's own indexed head, or null if unreachable. */
|
|
75
|
+
fetchIndexerHeadBlock: () => Promise<bigint | null>;
|
|
76
|
+
/** POST an alert, or null to disable alerting (NO-OP). */
|
|
77
|
+
postWebhook: ((payload: NetLivenessAlertPayload) => Promise<void>) | null;
|
|
78
|
+
thresholdMinutes: number;
|
|
79
|
+
/**
|
|
80
|
+
* Sleep between the two chain-head reads so a healthy chain has time to mint
|
|
81
|
+
* a new block. Injected (no-op in tests) so the orchestrator is testable
|
|
82
|
+
* without a real wall-clock wait.
|
|
83
|
+
*/
|
|
84
|
+
sleep: (ms: number) => Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* Delay between the two head samples. Default ~4s — above Base's ~2s blocktime
|
|
87
|
+
* so a live chain advances at least one block between reads, and above viem's
|
|
88
|
+
* 4s default cache window so even a cached read can't alias the two samples.
|
|
89
|
+
*/
|
|
90
|
+
headSampleDelayMs?: number;
|
|
91
|
+
now: () => Date;
|
|
92
|
+
}
|
|
93
|
+
/** Default delay between the two chain-head samples (ms). See headSampleDelayMs. */
|
|
94
|
+
export declare const DEFAULT_HEAD_SAMPLE_DELAY_MS = 4000;
|
|
95
|
+
export interface NetLivenessIntegerEnvSpec {
|
|
96
|
+
name: string;
|
|
97
|
+
defaultValue: number;
|
|
98
|
+
min: number;
|
|
99
|
+
max: number;
|
|
100
|
+
}
|
|
101
|
+
export declare function parseNetLivenessIntegerEnv(raw: string | undefined, spec: NetLivenessIntegerEnvSpec): number;
|
|
102
|
+
/**
|
|
103
|
+
* Run one probe: read chain head twice (to detect advancement within the run),
|
|
104
|
+
* read the indexer head and latest activity (tolerating throws as
|
|
105
|
+
* indexer-down), classify, and POST an alert only when the state is `stale` and
|
|
106
|
+
* a webhook is configured. Never throws on a read failure; returns the
|
|
107
|
+
* classification for the caller to log. Webhook delivery failures still throw
|
|
108
|
+
* so cron can flag the alert path itself as broken.
|
|
109
|
+
*/
|
|
110
|
+
export declare function runNetLivenessProbe(deps: NetLivenessProbeDeps): Promise<NetLivenessResult>;
|
|
111
|
+
/**
|
|
112
|
+
* Read the indexer's own indexed head via Ponder's host-root `/status` endpoint.
|
|
113
|
+
* `/status` returns `{ <chainName>: { id, block: { number, timestamp } } }`.
|
|
114
|
+
* Select the monitored chain by explicit name, falling back to chain ID when
|
|
115
|
+
* the status key does not match. Returns null on failure or shape mismatch —
|
|
116
|
+
* the probe classifies null as indexer-down.
|
|
117
|
+
*/
|
|
118
|
+
export declare function fetchIndexerHeadBlock(args: {
|
|
119
|
+
baseUrl: string;
|
|
120
|
+
chainName: string;
|
|
121
|
+
chainId: number;
|
|
122
|
+
fetchImpl?: typeof fetch;
|
|
123
|
+
}): Promise<bigint | null>;
|
|
124
|
+
/**
|
|
125
|
+
* Read the newest indexed activity block — the max `createdAtBlock` across the
|
|
126
|
+
* latest verdict and the latest attempt on the monitored chain (NOT task: a
|
|
127
|
+
* posted-but-unclaimed task is itself the stall condition). Two `limit:1`
|
|
128
|
+
* descending GraphQL queries. Returns null only when both legs are clean empty
|
|
129
|
+
* result sets. Throws on transport,
|
|
130
|
+
* HTTP, GraphQL, or malformed-response failures so the orchestrator can classify
|
|
131
|
+
* those as indexer-down instead of a false net-stall page.
|
|
132
|
+
*/
|
|
133
|
+
export declare function fetchLatestActivityBlock(args: {
|
|
134
|
+
gqlUrl: string;
|
|
135
|
+
chainId: number;
|
|
136
|
+
fetchImpl?: typeof fetch;
|
|
137
|
+
}): Promise<bigint | null>;
|
|
138
|
+
/**
|
|
139
|
+
* Build the `postWebhook` seam. Returns null when no URL is configured (NO-OP —
|
|
140
|
+
* the probe still classifies and logs, it just never alerts). The returned
|
|
141
|
+
* function POSTs the JSON payload to a generic incoming webhook.
|
|
142
|
+
*/
|
|
143
|
+
export declare function postNetLivenessWebhook(url: string | undefined, fetchImpl?: typeof fetch): ((payload: NetLivenessAlertPayload) => Promise<void>) | null;
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Net-liveness probe — operator-independent detector for the #1038 silent-stall
|
|
3
|
+
* class.
|
|
4
|
+
*
|
|
5
|
+
* Context: when the shared indexer blips, every operator daemon's discovery
|
|
6
|
+
* loops can wedge while the indexer-independent loops (jinn-claim, balance-topup)
|
|
7
|
+
* keep emitting on-chain activity and mask the outage. No single operator can
|
|
8
|
+
* be trusted to notice, so liveness must be observed from *outside* any daemon.
|
|
9
|
+
*
|
|
10
|
+
* This module reads on-chain truth two ways and cross-references them:
|
|
11
|
+
* - chain head — direct RPC `getBlockNumber()` (always live)
|
|
12
|
+
* - latest indexed attempt/verdict block — indexer GraphQL
|
|
13
|
+
* - indexer head — indexer `/status` (the indexer's own indexed head)
|
|
14
|
+
*
|
|
15
|
+
* The core decision is a pure function (`classifyNetLiveness`). The orchestrator
|
|
16
|
+
* (`runNetLivenessProbe`) injects all I/O so the whole flow is testable with no
|
|
17
|
+
* network. Designed to run from a stateless cron entry script
|
|
18
|
+
* (`scripts/net-liveness-probe.ts`), NOT in-daemon.
|
|
19
|
+
*/
|
|
20
|
+
// ── Pure classifier ─────────────────────────────────────────────────────────
|
|
21
|
+
/**
|
|
22
|
+
* Base produces ~one block every 2s → 30 blocks per minute. The probe works in
|
|
23
|
+
* block-space (the schema carries `createdAtBlock`, no timestamp column), so the
|
|
24
|
+
* minute threshold is converted to blocks with this constant.
|
|
25
|
+
*/
|
|
26
|
+
export const BASE_BLOCKS_PER_MINUTE = 30;
|
|
27
|
+
/** Convert a minute threshold to a Base block-count. */
|
|
28
|
+
export function minutesToThresholdBlocks(minutes) {
|
|
29
|
+
return minutes * BASE_BLOCKS_PER_MINUTE;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Decide net-liveness from the four cross-referenced reads. PURE — no I/O.
|
|
33
|
+
*
|
|
34
|
+
* Decision order matters: only the `stale` state alerts. Each preceding state is
|
|
35
|
+
* a confound that would otherwise look like a stall but isn't a *net* stall (a
|
|
36
|
+
* down/lagging indexer or a halted chain is reported, not alerted).
|
|
37
|
+
*/
|
|
38
|
+
export function classifyNetLiveness(inputs) {
|
|
39
|
+
const { chainHeadBlock, prevChainHeadBlock, latestActivityBlock, indexerHeadBlock, thresholdBlocks } = inputs;
|
|
40
|
+
const threshold = BigInt(thresholdBlocks);
|
|
41
|
+
const rawChainStaleForBlocks = chainHeadBlock - (latestActivityBlock ?? 0n);
|
|
42
|
+
const chainStaleForBlocks = rawChainStaleForBlocks < 0n ? 0n : rawChainStaleForBlocks;
|
|
43
|
+
// 1. Indexer unreachable — we have no indexed-activity truth to compare.
|
|
44
|
+
if (indexerHeadBlock === null) {
|
|
45
|
+
return {
|
|
46
|
+
state: 'indexer-down',
|
|
47
|
+
staleForBlocks: chainStaleForBlocks,
|
|
48
|
+
reason: 'indexer /status unreachable; cannot cross-reference indexed activity',
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
// 2. Indexer reachable but far behind chain head — its activity reads are
|
|
52
|
+
// stale-by-construction, so absence of recent activity proves nothing.
|
|
53
|
+
const indexerLagForBlocks = chainHeadBlock - indexerHeadBlock;
|
|
54
|
+
if (indexerLagForBlocks > threshold) {
|
|
55
|
+
return {
|
|
56
|
+
state: 'indexer-lagging',
|
|
57
|
+
staleForBlocks: chainStaleForBlocks,
|
|
58
|
+
reason: `indexer head ${indexerHeadBlock} is ${indexerLagForBlocks} blocks behind chain head ${chainHeadBlock}`,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
// 3. Chain head did not advance between the two reads — a halted chain has no
|
|
62
|
+
// new blocks to carry activity, so this is not a net stall.
|
|
63
|
+
if (prevChainHeadBlock !== null && chainHeadBlock <= prevChainHeadBlock) {
|
|
64
|
+
return {
|
|
65
|
+
state: 'chain-halted',
|
|
66
|
+
staleForBlocks: chainStaleForBlocks,
|
|
67
|
+
reason: `chain head did not advance (${prevChainHeadBlock} → ${chainHeadBlock})`,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
const rawIndexedStaleForBlocks = indexerHeadBlock - (latestActivityBlock ?? 0n);
|
|
71
|
+
const staleForBlocks = rawIndexedStaleForBlocks < 0n ? 0n : rawIndexedStaleForBlocks;
|
|
72
|
+
// 4. Chain advancing + indexer usable, but no recent indexed activity
|
|
73
|
+
// relative to the indexed head → the #1038 silent-stall signature. ALERT.
|
|
74
|
+
if (latestActivityBlock === null || staleForBlocks > threshold) {
|
|
75
|
+
return {
|
|
76
|
+
state: 'stale',
|
|
77
|
+
staleForBlocks,
|
|
78
|
+
reason: latestActivityBlock === null
|
|
79
|
+
? 'no indexed attempt/verdict found at all'
|
|
80
|
+
: `last indexed activity at block ${latestActivityBlock} is ${staleForBlocks} blocks behind indexer head ${indexerHeadBlock}`,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// 5. Recent activity within threshold.
|
|
84
|
+
return {
|
|
85
|
+
state: 'healthy',
|
|
86
|
+
staleForBlocks,
|
|
87
|
+
reason: `last indexed activity ${staleForBlocks} blocks behind indexer head (under ${thresholdBlocks})`,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/** Default delay between the two chain-head samples (ms). See headSampleDelayMs. */
|
|
91
|
+
export const DEFAULT_HEAD_SAMPLE_DELAY_MS = 4_000;
|
|
92
|
+
export function parseNetLivenessIntegerEnv(raw, spec) {
|
|
93
|
+
if (raw === undefined)
|
|
94
|
+
return spec.defaultValue;
|
|
95
|
+
const trimmed = raw.trim();
|
|
96
|
+
const fail = () => {
|
|
97
|
+
throw new Error(`${spec.name} must be an integer between ${spec.min} and ${spec.max}`);
|
|
98
|
+
};
|
|
99
|
+
if (!/^[0-9]+$/.test(trimmed))
|
|
100
|
+
fail();
|
|
101
|
+
const value = Number(trimmed);
|
|
102
|
+
if (!Number.isSafeInteger(value) || value < spec.min || value > spec.max)
|
|
103
|
+
fail();
|
|
104
|
+
return value;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Run one probe: read chain head twice (to detect advancement within the run),
|
|
108
|
+
* read the indexer head and latest activity (tolerating throws as
|
|
109
|
+
* indexer-down), classify, and POST an alert only when the state is `stale` and
|
|
110
|
+
* a webhook is configured. Never throws on a read failure; returns the
|
|
111
|
+
* classification for the caller to log. Webhook delivery failures still throw
|
|
112
|
+
* so cron can flag the alert path itself as broken.
|
|
113
|
+
*/
|
|
114
|
+
export async function runNetLivenessProbe(deps) {
|
|
115
|
+
// Sample the chain head twice, separated by a real delay, so a healthy chain
|
|
116
|
+
// has time to mint a new block between reads. Without the gap both reads land
|
|
117
|
+
// in the same block (and viem caches getBlockNumber for ~4s), making the two
|
|
118
|
+
// samples identical → the classifier would always read `chain-halted` and the
|
|
119
|
+
// alert branch would be unreachable.
|
|
120
|
+
const prevChainHeadBlock = await deps.fetchChainHead();
|
|
121
|
+
await deps.sleep(deps.headSampleDelayMs ?? DEFAULT_HEAD_SAMPLE_DELAY_MS);
|
|
122
|
+
const chainHeadBlock = await deps.fetchChainHead();
|
|
123
|
+
// A throw on either indexer read means the indexer is unhealthy — we cannot
|
|
124
|
+
// cross-reference indexed activity, so the run reports indexer-down rather than
|
|
125
|
+
// crashing or mistaking an error for a genuine stall. Distinguish a *throw* (the
|
|
126
|
+
// reader itself failed) from a clean null (the indexer answered "no rows"): only
|
|
127
|
+
// the former is indexer-down. A failed activity read therefore forces the
|
|
128
|
+
// indexer head to be treated as unreadable too, so the classifier short-circuits
|
|
129
|
+
// to indexer-down (decision-order step 1) before it can read the empty activity
|
|
130
|
+
// as `stale`.
|
|
131
|
+
const indexerHead = await safeRead(deps.fetchIndexerHeadBlock);
|
|
132
|
+
const activity = await safeRead(deps.fetchLatestActivityBlock);
|
|
133
|
+
const indexerHeadBlock = indexerHead.threw || activity.threw ? null : indexerHead.value;
|
|
134
|
+
const latestActivityBlock = activity.value;
|
|
135
|
+
const result = classifyNetLiveness({
|
|
136
|
+
chainHeadBlock,
|
|
137
|
+
prevChainHeadBlock,
|
|
138
|
+
latestActivityBlock,
|
|
139
|
+
indexerHeadBlock,
|
|
140
|
+
thresholdBlocks: minutesToThresholdBlocks(deps.thresholdMinutes),
|
|
141
|
+
});
|
|
142
|
+
if (result.state === 'stale' && deps.postWebhook) {
|
|
143
|
+
const staleForMinutes = Math.round(Number(result.staleForBlocks) / BASE_BLOCKS_PER_MINUTE);
|
|
144
|
+
const runAt = deps.now().toISOString();
|
|
145
|
+
const payload = {
|
|
146
|
+
text: `Jinn net-liveness alert: no on-chain attempt/verdict indexed for ` +
|
|
147
|
+
`~${staleForMinutes} min (${result.staleForBlocks} blocks). ` +
|
|
148
|
+
`Chain head ${chainHeadBlock} is advancing and indexed activity is stale relative to indexer head ${indexerHeadBlock}, ` +
|
|
149
|
+
`so this is a network stall, not an indexer outage. ${result.reason}`,
|
|
150
|
+
state: result.state,
|
|
151
|
+
staleForBlocks: result.staleForBlocks.toString(),
|
|
152
|
+
staleForMinutes,
|
|
153
|
+
chainHeadBlock: chainHeadBlock.toString(),
|
|
154
|
+
latestActivityBlock: latestActivityBlock === null ? null : latestActivityBlock.toString(),
|
|
155
|
+
runAt,
|
|
156
|
+
};
|
|
157
|
+
await deps.postWebhook(payload);
|
|
158
|
+
}
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
async function safeRead(read) {
|
|
162
|
+
try {
|
|
163
|
+
return { value: await read(), threw: false };
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return { value: null, threw: true };
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// ── Indexer readers ──────────────────────────────────────────────────────────
|
|
170
|
+
/**
|
|
171
|
+
* Per-request timeout for every indexer fetch. Mirrors http.ts: a never-settling
|
|
172
|
+
* fetch (half-open socket mid-redeploy) is bounded so a hang becomes a bounded
|
|
173
|
+
* failure, not a wedged probe.
|
|
174
|
+
*/
|
|
175
|
+
const FETCH_TIMEOUT_MS = 15_000;
|
|
176
|
+
/**
|
|
177
|
+
* Read the indexer's own indexed head via Ponder's host-root `/status` endpoint.
|
|
178
|
+
* `/status` returns `{ <chainName>: { id, block: { number, timestamp } } }`.
|
|
179
|
+
* Select the monitored chain by explicit name, falling back to chain ID when
|
|
180
|
+
* the status key does not match. Returns null on failure or shape mismatch —
|
|
181
|
+
* the probe classifies null as indexer-down.
|
|
182
|
+
*/
|
|
183
|
+
export async function fetchIndexerHeadBlock(args) {
|
|
184
|
+
const fetchImpl = args.fetchImpl ?? globalThis.fetch;
|
|
185
|
+
// `/status` is served at the host root, not under `/graphql` (mirror http.ts).
|
|
186
|
+
const statusUrl = `${args.baseUrl.replace(/\/graphql\/?$/, '').replace(/\/$/, '')}/status`;
|
|
187
|
+
try {
|
|
188
|
+
const res = await fetchImpl(statusUrl, { signal: AbortSignal.timeout(FETCH_TIMEOUT_MS) });
|
|
189
|
+
if (!res.ok)
|
|
190
|
+
return null;
|
|
191
|
+
const body = (await res.json());
|
|
192
|
+
const chain = body[args.chainName] ??
|
|
193
|
+
Object.values(body).find((entry) => Number(entry?.id) === args.chainId);
|
|
194
|
+
return parseBlockNumber(chain?.block?.number);
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Read the newest indexed activity block — the max `createdAtBlock` across the
|
|
202
|
+
* latest verdict and the latest attempt on the monitored chain (NOT task: a
|
|
203
|
+
* posted-but-unclaimed task is itself the stall condition). Two `limit:1`
|
|
204
|
+
* descending GraphQL queries. Returns null only when both legs are clean empty
|
|
205
|
+
* result sets. Throws on transport,
|
|
206
|
+
* HTTP, GraphQL, or malformed-response failures so the orchestrator can classify
|
|
207
|
+
* those as indexer-down instead of a false net-stall page.
|
|
208
|
+
*/
|
|
209
|
+
export async function fetchLatestActivityBlock(args) {
|
|
210
|
+
const [verdict, attempt] = await Promise.all([
|
|
211
|
+
latestBlockFor(args, 'verdicts'),
|
|
212
|
+
latestBlockFor(args, 'attempts'),
|
|
213
|
+
]);
|
|
214
|
+
if (verdict === null && attempt === null)
|
|
215
|
+
return null;
|
|
216
|
+
return maxNullable(verdict, attempt);
|
|
217
|
+
}
|
|
218
|
+
async function latestBlockFor(args, field) {
|
|
219
|
+
const fetchImpl = args.fetchImpl ?? globalThis.fetch;
|
|
220
|
+
const query = `query LatestActivity($chainId: Int!) {
|
|
221
|
+
${field}(where: { chainId: $chainId }, orderBy: "createdAtBlock", orderDirection: "desc", limit: 1) {
|
|
222
|
+
items { createdAtBlock }
|
|
223
|
+
}
|
|
224
|
+
}`;
|
|
225
|
+
try {
|
|
226
|
+
const res = await fetchImpl(args.gqlUrl, {
|
|
227
|
+
method: 'POST',
|
|
228
|
+
headers: { 'content-type': 'application/json' },
|
|
229
|
+
body: JSON.stringify({ query, variables: { chainId: args.chainId } }),
|
|
230
|
+
signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
|
|
231
|
+
});
|
|
232
|
+
if (!res.ok)
|
|
233
|
+
throw new Error();
|
|
234
|
+
const json = (await res.json());
|
|
235
|
+
if (json.errors?.length)
|
|
236
|
+
throw new Error();
|
|
237
|
+
if (!json.data?.[field] || !Array.isArray(json.data[field].items)) {
|
|
238
|
+
throw new Error();
|
|
239
|
+
}
|
|
240
|
+
const items = json.data[field].items;
|
|
241
|
+
const raw = items[0]?.createdAtBlock;
|
|
242
|
+
if (raw === undefined || raw === null)
|
|
243
|
+
return null;
|
|
244
|
+
return BigInt(raw);
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
throw new Error(`GraphQL latest activity read failed for ${field}`);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
function maxNullable(a, b) {
|
|
251
|
+
if (a === null)
|
|
252
|
+
return b;
|
|
253
|
+
if (b === null)
|
|
254
|
+
return a;
|
|
255
|
+
return a > b ? a : b;
|
|
256
|
+
}
|
|
257
|
+
function parseBlockNumber(value) {
|
|
258
|
+
if (typeof value === 'number' && Number.isFinite(value))
|
|
259
|
+
return BigInt(Math.trunc(value));
|
|
260
|
+
if (typeof value === 'string' && /^[0-9]+$/.test(value))
|
|
261
|
+
return BigInt(value);
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
// ── Webhook POST helper ──────────────────────────────────────────────────────
|
|
265
|
+
/**
|
|
266
|
+
* Build the `postWebhook` seam. Returns null when no URL is configured (NO-OP —
|
|
267
|
+
* the probe still classifies and logs, it just never alerts). The returned
|
|
268
|
+
* function POSTs the JSON payload to a generic incoming webhook.
|
|
269
|
+
*/
|
|
270
|
+
export function postNetLivenessWebhook(url, fetchImpl = globalThis.fetch) {
|
|
271
|
+
if (!url)
|
|
272
|
+
return null;
|
|
273
|
+
let webhookUrl;
|
|
274
|
+
try {
|
|
275
|
+
webhookUrl = new URL(url);
|
|
276
|
+
}
|
|
277
|
+
catch {
|
|
278
|
+
throw new Error('invalid webhook URL');
|
|
279
|
+
}
|
|
280
|
+
if (webhookUrl.protocol !== 'https:' && webhookUrl.protocol !== 'http:') {
|
|
281
|
+
throw new Error('invalid webhook URL');
|
|
282
|
+
}
|
|
283
|
+
return async (payload) => {
|
|
284
|
+
let response;
|
|
285
|
+
try {
|
|
286
|
+
response = await fetchImpl(webhookUrl.toString(), {
|
|
287
|
+
method: 'POST',
|
|
288
|
+
headers: { 'content-type': 'application/json' },
|
|
289
|
+
body: JSON.stringify(payload),
|
|
290
|
+
signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
throw new Error('net-liveness webhook delivery failed: transport error');
|
|
295
|
+
}
|
|
296
|
+
if (!response.ok) {
|
|
297
|
+
throw new Error(`net-liveness webhook delivery failed: HTTP ${response.status}`);
|
|
298
|
+
}
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=net-liveness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"net-liveness.js","sourceRoot":"","sources":["../../src/monitoring/net-liveness.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Store } from '../store/store.js';
|
|
2
|
-
export declare const ALLOWED_LIFECYCLE_KINDS: readonly ["task_posted", "intent_registry_failed", "request_claimed", "delivery_submitted", "evaluation_submitted", "reward_claimed", "balance_topup", "
|
|
2
|
+
export declare const ALLOWED_LIFECYCLE_KINDS: readonly ["task_posted", "intent_registry_failed", "request_claimed", "delivery_submitted", "evaluation_submitted", "reward_claimed", "balance_topup", "engine_transition", "tick_error", "race_lost", "spend_cap_reached", "ai_units_cap_reached", "startup", "shutdown"];
|
|
3
3
|
export type LifecycleKind = (typeof ALLOWED_LIFECYCLE_KINDS)[number];
|
|
4
4
|
export interface LifecycleEvent {
|
|
5
5
|
kind: LifecycleKind;
|
|
@@ -7,10 +7,6 @@ export const ALLOWED_LIFECYCLE_KINDS = [
|
|
|
7
7
|
'evaluation_submitted',
|
|
8
8
|
'reward_claimed',
|
|
9
9
|
'balance_topup',
|
|
10
|
-
'jinn_claim_emitted',
|
|
11
|
-
'jinn_claim_ticket_recorded',
|
|
12
|
-
'jinn_claim_submitted',
|
|
13
|
-
'jinn_claim_canonical_skip',
|
|
14
10
|
'engine_transition',
|
|
15
11
|
'tick_error',
|
|
16
12
|
'race_lost',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit-event.js","sourceRoot":"","sources":["../../src/observability/emit-event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,aAAa;IACb,wBAAwB;IACxB,iBAAiB;IACjB,oBAAoB;IACpB,sBAAsB;IACtB,gBAAgB;IAChB,eAAe;IACf,
|
|
1
|
+
{"version":3,"file":"emit-event.js","sourceRoot":"","sources":["../../src/observability/emit-event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,aAAa;IACb,wBAAwB;IACxB,iBAAiB;IACjB,oBAAoB;IACpB,sBAAsB;IACtB,gBAAgB;IAChB,eAAe;IACf,mBAAmB;IACnB,YAAY;IACZ,WAAW;IACX,mBAAmB;IACnB,sBAAsB;IACtB,SAAS;IACT,UAAU;CACF,CAAC;AAoBX,MAAM,UAAU,SAAS,CACvB,KAAY,EACZ,KAAqB,EACrB,SAAS,GAAG,WAAW;IAEvB,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpC,KAAK,CAAC,mBAAmB,CAAC;QACxB,EAAE;QACF,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;QAClC,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,IAAI;QACxC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;QAC5B,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;QACpC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;QAC9B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;QAC5B,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,IAAI;KACzC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG;QACd,EAAE;QACF,KAAK,EAAE,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO;YACzC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM;gBACnE,CAAC,CAAC,MAAM;QACV,SAAS;QACT,GAAG,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI;QAC/B,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;QAClC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;QAC5B,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,IAAI;QACxC,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;QACpC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;QAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;KACjB,CAAC;IACF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;IAElC,sEAAsE;IACtE,uEAAuE;IACvE,oEAAoE;IACpE,IAAI,CAAC;QACH,aAAa,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface ProgressEnvelope {
|
|
2
|
+
type: 'progress';
|
|
3
|
+
phase: 'init' | 'bootstrap' | 'daemon';
|
|
4
|
+
step: string;
|
|
5
|
+
attempt?: number;
|
|
6
|
+
blocking?: boolean;
|
|
7
|
+
nextAction?: string;
|
|
8
|
+
addresses?: Record<string, string>;
|
|
9
|
+
estimatedWaitMs?: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function emitProgress(envelope: ProgressEnvelope): void;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* --json-progress: emit NDJSON progress envelopes on stdout during long
|
|
3
|
+
* phases (init, bootstrap, daemon startup). The `jinn run --json-progress`
|
|
4
|
+
* flag flips JINN_JSON_PROGRESS=1 in run.ts before calling main(); when
|
|
5
|
+
* unset this is a no-op so tests / non-flag invocations stay silent on
|
|
6
|
+
* stdout.
|
|
7
|
+
*/
|
|
8
|
+
function progressEnabled() {
|
|
9
|
+
return process.env['JINN_JSON_PROGRESS'] === '1';
|
|
10
|
+
}
|
|
11
|
+
export function emitProgress(envelope) {
|
|
12
|
+
if (progressEnabled()) {
|
|
13
|
+
process.stdout.write(JSON.stringify(envelope) + '\n');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/observability/progress.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,SAAS,eAAe;IACtB,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,KAAK,GAAG,CAAC;AACnD,CAAC;AAaD,MAAM,UAAU,YAAY,CAAC,QAA0B;IACrD,IAAI,eAAe,EAAE,EAAE,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;IACxD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SolveTokens } from './solve.js';
|
|
2
|
+
export interface RateTable {
|
|
3
|
+
inputPerM: number;
|
|
4
|
+
outputPerM: number;
|
|
5
|
+
cacheReadPerM?: number;
|
|
6
|
+
}
|
|
7
|
+
export declare const DEEPSEEK_V4_FLASH_RATES: RateTable;
|
|
8
|
+
/** gpt-5.4-mini published API rate (used to price Codex-subscription token
|
|
9
|
+
* counts at a representative metered cost — the sub bills flat, but the gate
|
|
10
|
+
* measures what a metered user would pay). $0.75/M in, $4.50/M out. */
|
|
11
|
+
export declare const GPT_5_4_MINI_RATES: RateTable;
|
|
12
|
+
/** USD for one solve from provider-actual token counts. `output_tokens` already
|
|
13
|
+
* INCLUDES `reasoning_tokens` (OpenAI `completion_tokens` semantics, verified
|
|
14
|
+
* empirically on the Codex backend), so reasoning is NOT added again — it is
|
|
15
|
+
* surfaced separately only for reporting. Likewise `input_tokens` is inclusive
|
|
16
|
+
* of `cache_read_tokens`: when a cacheReadPerM rate is supplied, cache-read
|
|
17
|
+
* tokens are re-priced at that (discounted) rate and the remaining (fresh)
|
|
18
|
+
* input at inputPerM; otherwise all input is inputPerM. */
|
|
19
|
+
export declare function solveCostUsd(tokens: SolveTokens, rates: RateTable): number;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export const DEEPSEEK_V4_FLASH_RATES = { inputPerM: 0.09, outputPerM: 0.18 };
|
|
2
|
+
/** gpt-5.4-mini published API rate (used to price Codex-subscription token
|
|
3
|
+
* counts at a representative metered cost — the sub bills flat, but the gate
|
|
4
|
+
* measures what a metered user would pay). $0.75/M in, $4.50/M out. */
|
|
5
|
+
export const GPT_5_4_MINI_RATES = { inputPerM: 0.75, outputPerM: 4.5 };
|
|
6
|
+
/** USD for one solve from provider-actual token counts. `output_tokens` already
|
|
7
|
+
* INCLUDES `reasoning_tokens` (OpenAI `completion_tokens` semantics, verified
|
|
8
|
+
* empirically on the Codex backend), so reasoning is NOT added again — it is
|
|
9
|
+
* surfaced separately only for reporting. Likewise `input_tokens` is inclusive
|
|
10
|
+
* of `cache_read_tokens`: when a cacheReadPerM rate is supplied, cache-read
|
|
11
|
+
* tokens are re-priced at that (discounted) rate and the remaining (fresh)
|
|
12
|
+
* input at inputPerM; otherwise all input is inputPerM. */
|
|
13
|
+
export function solveCostUsd(tokens, rates) {
|
|
14
|
+
const per = (n, rate) => n * rate * 1e-6;
|
|
15
|
+
const outputCost = per(tokens.outputTokens, rates.outputPerM);
|
|
16
|
+
if (typeof rates.cacheReadPerM === 'number') {
|
|
17
|
+
// The fresh/cache split only matters when a discounted cacheReadPerM rate is
|
|
18
|
+
// priced. Here the `input ⊇ cache_read` invariant must hold — silently
|
|
19
|
+
// clamping fresh to 0 would hide a bad token export and mis-price the solve,
|
|
20
|
+
// so fail loud instead. (The no-cache-rate path below is untouched: it prices
|
|
21
|
+
// all input at inputPerM and never reads cacheReadTokens.)
|
|
22
|
+
if (tokens.cacheReadTokens > tokens.inputTokens) {
|
|
23
|
+
throw new Error(`solveCostUsd: cache_read_tokens (${tokens.cacheReadTokens}) > input_tokens (${tokens.inputTokens}) ` +
|
|
24
|
+
`violates the input ⊇ cache_read invariant when a cacheReadPerM rate is priced`);
|
|
25
|
+
}
|
|
26
|
+
const fresh = tokens.inputTokens - tokens.cacheReadTokens;
|
|
27
|
+
return per(fresh, rates.inputPerM) + per(tokens.cacheReadTokens, rates.cacheReadPerM) + outputCost;
|
|
28
|
+
}
|
|
29
|
+
return per(tokens.inputTokens, rates.inputPerM) + outputCost;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=cost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost.js","sourceRoot":"","sources":["../../src/pilot/cost.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,uBAAuB,GAAc,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACxF;;wEAEwE;AACxE,MAAM,CAAC,MAAM,kBAAkB,GAAc,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;AAElF;;;;;;4DAM4D;AAC5D,MAAM,UAAU,YAAY,CAAC,MAAmB,EAAE,KAAgB;IAChE,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,IAAY,EAAU,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IACjE,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC9D,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;QAC5C,6EAA6E;QAC7E,uEAAuE;QACvE,6EAA6E;QAC7E,8EAA8E;QAC9E,2DAA2D;QAC3D,IAAI,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CACb,oCAAoC,MAAM,CAAC,eAAe,qBAAqB,MAAM,CAAC,WAAW,IAAI;gBACrG,+EAA+E,CAChF,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC;QAC1D,OAAO,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC;IACrG,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solve-side pilot instance fields. The grader's `HfRow` (swe-rebench-v2-evaluator/hf-fetcher.ts)
|
|
3
|
+
* omits `base_commit` and `problem_statement` — this parses those out of the raw HF row.
|
|
4
|
+
*/
|
|
5
|
+
export interface PilotInstance {
|
|
6
|
+
instance_id: string;
|
|
7
|
+
repo: string;
|
|
8
|
+
base_commit: string;
|
|
9
|
+
problem_statement: string;
|
|
10
|
+
/** SWE-rebench-V2 acceptance spec (the API contract the solution must satisfy).
|
|
11
|
+
* Optional — fed to BOTH arms when present so it never biases the comparison;
|
|
12
|
+
* it is the *spec*, not the hidden test (feeding the test would be cheating). */
|
|
13
|
+
interface?: string;
|
|
14
|
+
hf_dataset: string;
|
|
15
|
+
hf_split: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function parsePilotInstanceRow(row: Record<string, unknown>, ctx: {
|
|
18
|
+
hf_dataset: string;
|
|
19
|
+
hf_split: string;
|
|
20
|
+
}): PilotInstance;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function parsePilotInstanceRow(row, ctx) {
|
|
2
|
+
const s = (k) => {
|
|
3
|
+
const v = row[k];
|
|
4
|
+
if (typeof v !== 'string' || !v)
|
|
5
|
+
throw new Error(`pilot instance row missing '${k}'`);
|
|
6
|
+
return v;
|
|
7
|
+
};
|
|
8
|
+
const iface = typeof row['interface'] === 'string' && row['interface'] ? row['interface'] : undefined;
|
|
9
|
+
return {
|
|
10
|
+
instance_id: s('instance_id'),
|
|
11
|
+
repo: s('repo'),
|
|
12
|
+
base_commit: s('base_commit'),
|
|
13
|
+
problem_statement: s('problem_statement'),
|
|
14
|
+
...(iface ? { interface: iface } : {}),
|
|
15
|
+
hf_dataset: ctx.hf_dataset,
|
|
16
|
+
hf_split: ctx.hf_split,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=instance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance.js","sourceRoot":"","sources":["../../src/pilot/instance.ts"],"names":[],"mappings":"AAiBA,MAAM,UAAU,qBAAqB,CACnC,GAA4B,EAC5B,GAA6C;IAE7C,MAAM,CAAC,GAAG,CAAC,CAAS,EAAU,EAAE;QAC9B,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,GAAG,CAAC,CAAC;QACtF,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,WAAW,CAAY,CAAC,CAAC,CAAC,SAAS,CAAC;IAClH,OAAO;QACL,WAAW,EAAE,CAAC,CAAC,aAAa,CAAC;QAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,CAAC,CAAC,aAAa,CAAC;QAC7B,iBAAiB,EAAE,CAAC,CAAC,mBAAmB,CAAC;QACzC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ;KACvB,CAAC;AACJ,CAAC"}
|