@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 @@
|
|
|
1
|
+
.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility,.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial}}}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.top-\[2px\]{top:2px}.top-\[50\%\]{top:50%}.right-\[3px\]{right:3px}.left-\[3px\]{left:3px}.left-\[50\%\]{left:50%}.z-50{z-index:50}.col-span-2{grid-column:span 2/span 2}.col-span-12{grid-column:span 12/span 12}.col-span-full{grid-column:1/-1}.container{width:100%}.mx-auto{margin-inline:auto}.mr-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.h-\[3px\]{height:3px}.h-\[18px\]{height:18px}.h-\[calc\(100vh-220px\)\]{height:calc(100vh - 220px)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-\[280px\]{max-height:280px}.max-h-\[560px\]{max-height:560px}.min-h-\[1\.5em\]{min-height:1.5em}.min-h-\[96px\]{min-height:96px}.min-h-\[400px\]{min-height:400px}.min-h-\[520px\]{min-height:520px}.min-h-screen{min-height:100vh}.w-3\/4{width:75%}.w-4\/6{width:66.6667%}.w-5\/6{width:83.3333%}.w-\[14\%\]{width:14%}.w-\[16\%\]{width:16%}.w-\[20\%\]{width:20%}.w-\[30\%\]{width:30%}.w-\[min\(28rem\,90vw\)\]{width:min(28rem,90vw)}.w-full{width:100%}.w-px{width:1px}.max-w-\[34ch\]{max-width:34ch}.max-w-\[64ch\]{max-width:64ch}.max-w-\[72ch\]{max-width:72ch}.max-w-\[280px\]{max-width:280px}.max-w-\[320px\]{max-width:320px}.max-w-\[420px\]{max-width:420px}.max-w-\[440px\]{max-width:440px}.max-w-\[720px\]{max-width:720px}.max-w-\[880px\]{max-width:880px}.max-w-\[960px\]{max-width:960px}.max-w-\[1100px\]{max-width:1100px}.max-w-\[1280px\]{max-width:1280px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[64px\]{min-width:64px}.min-w-\[80px\]{min-width:80px}.min-w-\[100px\]{min-width:100px}.min-w-\[160px\]{min-width:160px}.min-w-\[180px\]{min-width:180px}.min-w-\[260px\]{min-width:260px}.flex-1{flex:1}.flex-\[1_1_360px\]{flex:360px}.shrink-0{flex-shrink:0}.table-fixed{table-layout:fixed}.caption-bottom{caption-side:bottom}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-copy{cursor:copy}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-y{resize:vertical}.list-none{list-style-type:none}.\[grid-template-columns\:120px_minmax\(0\,1fr\)\]{grid-template-columns:120px minmax(0,1fr)}.\[grid-template-columns\:140px_minmax\(0\,1fr\)\]{grid-template-columns:140px minmax(0,1fr)}.\[grid-template-columns\:minmax\(0\,1fr\)_minmax\(0\,380px\)\]{grid-template-columns:minmax(0,1fr) minmax(0,380px)}.\[grid-template-columns\:minmax\(120px\,180px\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(120px,180px) minmax(0,1fr)}.\[grid-template-columns\:minmax\(160px\,200px\)_minmax\(0\,1fr\)_minmax\(180px\,220px\)\]{grid-template-columns:minmax(160px,200px) minmax(0,1fr) minmax(180px,220px)}.\[grid-template-columns\:repeat\(auto-fit\,minmax\(120px\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(120px,1fr))}.\[grid-template-columns\:repeat\(auto-fit\,minmax\(150px\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}.\[grid-template-columns\:repeat\(auto-fit\,minmax\(180px\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.\[grid-template-columns\:repeat\(auto-fit\,minmax\(220px\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-\[1fr_320px\]{grid-template-columns:1fr 320px}.grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.grid-cols-\[3rem_1fr_auto\]{grid-template-columns:3rem 1fr auto}.grid-cols-\[68px_84px_1fr\]{grid-template-columns:68px 84px 1fr}.grid-cols-\[90px_1fr\]{grid-template-columns:90px 1fr}.grid-cols-\[140px_1fr\]{grid-template-columns:140px 1fr}.grid-cols-\[160px_1fr\]{grid-template-columns:160px 1fr}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.grid-cols-\[auto_1fr_auto\]{grid-template-columns:auto 1fr auto}.grid-cols-\[auto_1fr_auto_auto\]{grid-template-columns:auto 1fr auto auto}.grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.grid-rows-\[auto_auto_auto_minmax\(0\,1fr\)\]{grid-template-rows:auto auto auto minmax(0,1fr)}.grid-rows-\[auto_auto_minmax\(0\,1fr\)\]{grid-template-rows:auto auto minmax(0,1fr)}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-\[3px\]{gap:3px}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}.self-center{align-self:center}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded-\[inherit\]{border-radius:inherit}.rounded-\[var\(--radius-1\)\]{border-radius:var(--radius-1)}.rounded-\[var\(--radius-2\)\]{border-radius:var(--radius-2)}.rounded-full{border-radius:3.40282e38px}.rounded-none{border-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[var\(--accent-sky\)\]{border-color:var(--accent-sky)}.border-\[var\(--border\)\]{border-color:var(--border)}.border-\[var\(--break-red\)\]{border-color:var(--break-red)}.border-\[var\(--severity-blocking-border\)\]{border-color:var(--severity-blocking-border)}.border-\[var\(--severity-blocking-fg\)\]{border-color:var(--severity-blocking-fg)}.border-\[var\(--severity-info-fg\)\]{border-color:var(--severity-info-fg)}.border-\[var\(--severity-success-border\)\]{border-color:var(--severity-success-border)}.border-\[var\(--severity-warning-border\)\]{border-color:var(--severity-warning-border)}.border-\[var\(--severity-warning-fg\)\]{border-color:var(--severity-warning-fg)}.border-\[var\(--vow-green\)\]{border-color:var(--vow-green)}.border-\[var\(--wane\)\]{border-color:var(--wane)}.border-current{border-color:currentColor}.border-transparent{border-color:#0000}.border-t-transparent{border-top-color:#0000}.border-l-\[var\(--severity-blocking-fg\)\]{border-left-color:var(--severity-blocking-fg)}.border-l-\[var\(--severity-info-fg\)\]{border-left-color:var(--severity-info-fg)}.border-l-\[var\(--severity-warning-fg\)\]{border-left-color:var(--severity-warning-fg)}.border-l-transparent{border-left-color:#0000}.bg-\[var\(--accent-gold\)\]{background-color:var(--accent-gold)}.bg-\[var\(--accent-sky\)\]{background-color:var(--accent-sky)}.bg-\[var\(--bg\)\]{background-color:var(--bg)}.bg-\[var\(--bg-elevated\)\]{background-color:var(--bg-elevated)}.bg-\[var\(--bg-sunken\)\]{background-color:var(--bg-sunken)}.bg-\[var\(--border-strong\)\]{background-color:var(--border-strong)}.bg-\[var\(--break-red\)\]{background-color:var(--break-red)}.bg-\[var\(--fg-muted\)\]{background-color:var(--fg-muted)}.bg-\[var\(--seer-violet\)\]{background-color:var(--seer-violet)}.bg-\[var\(--severity-blocking-bg\)\]{background-color:var(--severity-blocking-bg)}.bg-\[var\(--severity-success-bg\)\]{background-color:var(--severity-success-bg)}.bg-\[var\(--severity-warning-bg\)\]{background-color:var(--severity-warning-bg)}.bg-\[var\(--vow-green\)\]{background-color:var(--vow-green)}.bg-current{background-color:currentColor}.bg-transparent{background-color:#0000}.fill-current{fill:currentColor}.p-px{padding:1px}.py-\[5px\]{padding-block:5px}.py-px{padding-block:1px}.pb-px{padding-bottom:1px}.pl-\[22px\]{padding-left:22px}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-baseline{vertical-align:baseline}.align-middle{vertical-align:middle}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[17px\]{font-size:17px}.text-\[18px\]{font-size:18px}.text-\[20px\]{font-size:20px}.text-\[22px\]{font-size:22px}.text-\[24px\]{font-size:24px}.text-\[26px\]{font-size:26px}.text-\[28px\]{font-size:28px}.text-\[32px\]{font-size:32px}.text-\[64px\]{font-size:64px}.text-\[76px\]{font-size:76px}.leading-\[1\.2\]{--tw-leading:1.2;line-height:1.2}.leading-\[1\.05\]{--tw-leading:1.05;line-height:1.05}.leading-\[1\.5\]{--tw-leading:1.5;line-height:1.5}.leading-\[1\.6\]{--tw-leading:1.6;line-height:1.6}.leading-\[1\.7\]{--tw-leading:1.7;line-height:1.7}.leading-\[1\.25\]{--tw-leading:1.25;line-height:1.25}.tracking-\[-0\.01em\]{--tw-tracking:-.01em;letter-spacing:-.01em}.tracking-\[0\.1em\]{--tw-tracking:.1em;letter-spacing:.1em}.tracking-\[0\.05em\]{--tw-tracking:.05em;letter-spacing:.05em}.tracking-\[0\.06em\]{--tw-tracking:.06em;letter-spacing:.06em}.tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.\[overflow-wrap\:anywhere\]{overflow-wrap:anywhere}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--accent-gold\)\]{color:var(--accent-gold)}.text-\[var\(--accent-sky\)\]{color:var(--accent-sky)}.text-\[var\(--bg\)\]{color:var(--bg)}.text-\[var\(--bg-sunken\)\]{color:var(--bg-sunken)}.text-\[var\(--break-red\)\]{color:var(--break-red)}.text-\[var\(--fg\)\]{color:var(--fg)}.text-\[var\(--fg-dim\)\]{color:var(--fg-dim)}.text-\[var\(--fg-muted\)\]{color:var(--fg-muted)}.text-\[var\(--severity-blocking-fg\)\]{color:var(--severity-blocking-fg)}.text-\[var\(--severity-info-fg\)\]{color:var(--severity-info-fg)}.text-\[var\(--severity-success-fg\)\]{color:var(--severity-success-fg)}.text-\[var\(--severity-warning-fg\)\]{color:var(--severity-warning-fg)}.text-\[var\(--vow-green\)\]{color:var(--vow-green)}.text-\[var\(--wane\)\]{color:var(--wane)}.text-current{color:currentColor}.text-inherit{color:inherit}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.duration-200{--tw-duration:.2s;transition-duration:.2s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-\[\.toast\]\:bg-\[var\(--accent-sky\)\]:is(:where(.group).toast *){background-color:var(--accent-sky)}.group-\[\.toast\]\:bg-transparent:is(:where(.group).toast *){background-color:#0000}.group-\[\.toast\]\:text-\[var\(--bg-sunken\)\]:is(:where(.group).toast *){color:var(--bg-sunken)}.group-\[\.toast\]\:text-\[var\(--fg-muted\)\]:is(:where(.group).toast *){color:var(--fg-muted)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.placeholder\:text-\[var\(--fg-dim\)\]::placeholder{color:var(--fg-dim)}@media (hover:hover){.hover\:bg-\[var\(--accent-gold-hover\)\]:hover{background-color:var(--accent-gold-hover)}.hover\:bg-\[var\(--accent-sky-hover\)\]:hover{background-color:var(--accent-sky-hover)}.hover\:bg-\[var\(--bg\)\]:hover{background-color:var(--bg)}.hover\:bg-\[var\(--bg-sunken\)\]:hover,.hover\:bg-\[var\(--bg-sunken\)\]\/40:hover{background-color:var(--bg-sunken)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[var\(--bg-sunken\)\]\/40:hover{background-color:color-mix(in oklab, var(--bg-sunken) 40%, transparent)}}.hover\:bg-\[var\(--bg-sunken\)\]\/50:hover{background-color:var(--bg-sunken)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[var\(--bg-sunken\)\]\/50:hover{background-color:color-mix(in oklab, var(--bg-sunken) 50%, transparent)}}.hover\:bg-\[var\(--severity-blocking-bg\)\]:hover{background-color:var(--severity-blocking-bg)}.hover\:bg-transparent:hover{background-color:#0000}.hover\:text-\[var\(--accent-sky-hover\)\]:hover{color:var(--accent-sky-hover)}.hover\:text-\[var\(--fg\)\]:hover{color:var(--fg)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus\:bg-\[var\(--bg-sunken\)\]:focus{background-color:var(--bg-sunken)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-0:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=active\]\:bg-\[var\(--bg-sunken\)\][data-state=active]{background-color:var(--bg-sunken)}.data-\[state\=checked\]\:bg-\[var\(--vow-green\)\][data-state=checked]{background-color:var(--vow-green)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=selected\]\:bg-\[var\(--bg-sunken\)\][data-state=selected]{background-color:var(--bg-sunken)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\>div\]\:bg-\[var\(--accent-gold\)\]>div{background-color:var(--accent-gold)}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x) var(--tw-translate-y)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}:root{--bg:#0c1628;--bg-elevated:#142340;--bg-sunken:#070d18;--fg:#f2f7fc;--fg-muted:#a4b0c2;--fg-dim:#7d8ba3;--border:#1f3a66;--border-strong:#7aa7dc;--border-accent:#c9a048;--accent-sky:#7aa7dc;--accent-sky-hover:#a8c8ea;--accent-gold:#dcb866;--accent-gold-hover:#ead08e;--vow-green:#6a9b8f;--wane:#b8802f;--break-red:#a85a5a;--seer-violet:#7a6db0;--surface:var(--bg-elevated);--surface-sunken:var(--bg-sunken);--radius-1:4px;--radius-2:6px;--radius-3:10px;--radius-pill:999px;--serif:"Instrument Serif", "Times New Roman", serif;--mono:"JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace;--text-2xs:10px;--text-xs:11px;--text-sm:12px;--text-base:14px;--text-md:17px;--text-lg:20px;--text-xl:24px;--text-2xl:26px;--text-display:64px;--text-display-xl:88px;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-7:48px;--space-8:64px;--dur-fast:80ms;--dur-base:.14s;--dur-slow:.24s;--ease-out:cubic-bezier(.16, 1, .3, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--severity-blocking-fg:var(--break-red);--severity-blocking-border:#a85a5a99;--severity-blocking-bg:#a85a5a0f;--severity-warning-fg:var(--wane);--severity-warning-border:#b8802f99;--severity-warning-bg:#b8802f0f;--severity-info-fg:var(--accent-sky);--severity-info-border:#7aa7dc66;--severity-info-bg:transparent;--severity-success-fg:var(--vow-green);--severity-success-border:#6a9b8f99;--severity-success-bg:#6a9b8f0f;--background:var(--bg);--foreground:var(--fg);--card:var(--bg-elevated);--card-foreground:var(--fg);--popover:var(--bg-elevated);--popover-foreground:var(--fg);--primary:var(--accent-sky);--primary-foreground:var(--bg-sunken);--secondary:var(--bg-elevated);--secondary-foreground:var(--fg-muted);--muted:var(--bg-elevated);--muted-foreground:var(--fg-muted);--accent:var(--bg-elevated);--accent-foreground:var(--accent-sky);--destructive:var(--break-red);--destructive-foreground:var(--fg);--input:var(--border);--ring:var(--accent-sky);--radius:var(--radius-2)}html,body{background:var(--bg);color:var(--fg);font-family:var(--mono);font-feature-settings:"ss01" on, "ss02" on, "cv01" on}#root{min-height:100vh}button:focus-visible,input:focus-visible,textarea:focus-visible{outline:1px solid var(--accent-sky);outline-offset:2px}@keyframes jinnPulse{0%{box-shadow:0 0 #dcb8668c}70%{box-shadow:0 0 0 10px #dcb86600}to{box-shadow:0 0 #dcb86600}}@keyframes jinnFadeSlide{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.jinn-anim-pulse{animation:1.6s ease-out infinite jinnPulse}.jinn-anim-fade-slide{animation:.32s ease-out both jinnFadeSlide}.phase-row[data-status=active]{background:linear-gradient(90deg,#dcb8660a 0%,#0000 60%);transition:background .32s}.xterm,.xterm-viewport,.xterm-screen{width:100%!important}.agent-rail .xterm{min-width:0;overflow:hidden}.agent-rail .xterm-viewport{overflow-x:hidden}.agent-rail .xterm-accessibility-tree{display:none}.hfmf-intro-markdown h1{font-family:var(--serif);letter-spacing:0;color:var(--fg);margin:0 0 16px;font-size:40px;font-weight:400;line-height:1.1}.hfmf-intro-markdown h2{font-family:var(--serif);letter-spacing:0;color:var(--fg);border-top:1px solid var(--border);margin:28px 0 8px;padding-top:20px;font-size:22px;font-weight:400;line-height:1.25}.hfmf-intro-markdown h2:first-child,.hfmf-intro-markdown h1+h2{border-top:none;padding-top:0}.hfmf-intro-markdown h3{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--fg-muted);margin:20px 0 8px;font-size:11px;font-weight:500}.hfmf-intro-markdown p{font-family:var(--mono);letter-spacing:-.01em;color:var(--fg-muted);max-width:72ch;margin:0 0 12px;font-size:13px;line-height:1.7}.hfmf-intro-markdown ul{font-family:var(--mono);color:var(--fg-muted);margin:0 0 12px;padding:0;font-size:13px;line-height:1.7;list-style:none}.hfmf-intro-markdown ul li{margin:4px 0;padding-left:16px;position:relative}.hfmf-intro-markdown ul li:before{content:"—";color:var(--fg-dim);position:absolute;left:0}.hfmf-intro-markdown code{font-family:var(--mono);color:var(--accent-sky);background:var(--bg-sunken);border:1px solid var(--border);border-radius:var(--radius-1);padding:1px 6px;font-size:12px}.hfmf-intro-markdown pre{font-family:var(--mono);color:var(--fg);background:var(--bg-sunken);border:1px solid var(--border);border-radius:var(--radius-2);margin:0 0 14px;padding:14px 16px;font-size:12px;line-height:1.6;overflow-x:auto}.hfmf-intro-markdown pre code{color:inherit;background:0 0;border:0;padding:0}.hfmf-intro-markdown a{color:var(--accent-sky);border-bottom:1px solid var(--border);text-decoration:none}.hfmf-intro-markdown a:hover{color:var(--accent-sky-hover);border-bottom-color:var(--accent-sky)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=JetBrains+Mono:wght@400;500;600&display=swap"
|
|
11
11
|
rel="stylesheet"
|
|
12
12
|
/>
|
|
13
|
-
<script type="module" crossorigin src="/assets/index-
|
|
14
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
13
|
+
<script type="module" crossorigin src="/assets/index-B_5Cb-ZH.js"></script>
|
|
14
|
+
<link rel="stylesheet" crossorigin href="/assets/index-D7rvJRNa.css">
|
|
15
15
|
</head>
|
|
16
16
|
<body>
|
|
17
17
|
<div id="root"></div>
|
package/dist/discovery/http.d.ts
CHANGED
|
@@ -29,6 +29,23 @@ export interface HttpDiscoveryAPIOptions {
|
|
|
29
29
|
* Exposed mostly for tests.
|
|
30
30
|
*/
|
|
31
31
|
readyProbeTtlMs?: number;
|
|
32
|
+
/**
|
|
33
|
+
* Backoff schedule (ms) for transparent retries on transient indexer
|
|
34
|
+
* failures (502/503 responses and network-level fetch errors). The number of
|
|
35
|
+
* retries equals `retryDelaysMs.length`: a `[200, 500]` schedule retries
|
|
36
|
+
* twice (sleep 200ms before the first retry, 500ms before the second) for a
|
|
37
|
+
* worst-case added latency of 700ms (< 800ms, #782 AC#1). Defaults to
|
|
38
|
+
* RETRY_DELAYS_MS. Tests pass `[0, 0]` to retry instantly. An empty array
|
|
39
|
+
* disables retry entirely. Exposed mostly for tests.
|
|
40
|
+
*/
|
|
41
|
+
retryDelaysMs?: readonly number[];
|
|
42
|
+
/**
|
|
43
|
+
* Per-request timeout (ms) applied to every indexer fetch — the `/ready`
|
|
44
|
+
* probe and all GraphQL POSTs. Defaults to FETCH_TIMEOUT_MS. Bounds the fetch
|
|
45
|
+
* so an indexer whose socket goes half-open (e.g. mid-redeploy) cannot wedge
|
|
46
|
+
* a discovery loop forever (#1038). Exposed mostly for tests.
|
|
47
|
+
*/
|
|
48
|
+
fetchTimeoutMs?: number;
|
|
32
49
|
}
|
|
33
50
|
/**
|
|
34
51
|
* Create a DiscoveryAPI backed by a Ponder GraphQL endpoint.
|
package/dist/discovery/http.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DiscoveryUnavailableError } from './types.js';
|
|
1
|
+
import { DiscoveryUnavailableError, TASK_POST_WINDOW_BLOCKS, bucketTaskPostCounts } from './types.js';
|
|
2
2
|
import { manifestDigestForCid } from '../adapters/mech/digest.js';
|
|
3
3
|
// ── GraphQL query strings ─────────────────────────────────────────────────────
|
|
4
4
|
/**
|
|
@@ -68,6 +68,8 @@ const ATTEMPTS_PAGE_LIMIT = 1000;
|
|
|
68
68
|
* the resulting count is a lower bound; see `getSolverNetOperatorCount`.
|
|
69
69
|
*/
|
|
70
70
|
const MAX_OPERATOR_COUNT_TASK_PAGES = 50;
|
|
71
|
+
/** Page cap for the task-post-rate scan (1000 rows/page → 50k recent tasks). */
|
|
72
|
+
const MAX_TASK_POST_PAGES = 50;
|
|
71
73
|
const ATTEMPTS_FOR_TASKS_QUERY = `
|
|
72
74
|
query AttemptsForTasks($taskIds: [String!]!, $chainId: Int!, $limit: Int!, $after: String) {
|
|
73
75
|
attempts(
|
|
@@ -97,6 +99,43 @@ query AttemptsForTasks($taskIds: [String!]!, $chainId: Int!, $limit: Int!, $afte
|
|
|
97
99
|
// scalar variables into a literal `where: { ... }` block is a bug.
|
|
98
100
|
const LIST_SOLVER_NETS_QUERY = `
|
|
99
101
|
query ListSolverNets($where: solverNetManifestFilter, $limit: Int!) {
|
|
102
|
+
solverNetManifests(
|
|
103
|
+
where: $where,
|
|
104
|
+
limit: $limit,
|
|
105
|
+
orderBy: "anchorBlock",
|
|
106
|
+
orderDirection: "desc"
|
|
107
|
+
) {
|
|
108
|
+
items {
|
|
109
|
+
id
|
|
110
|
+
launcherAgentId
|
|
111
|
+
status
|
|
112
|
+
statusUpdatedAt
|
|
113
|
+
manifestHash
|
|
114
|
+
anchorBlock
|
|
115
|
+
chainId
|
|
116
|
+
name
|
|
117
|
+
network
|
|
118
|
+
solutionPriceWei
|
|
119
|
+
verdictPriceWei
|
|
120
|
+
openRoles
|
|
121
|
+
launcherSafeAddress
|
|
122
|
+
contractId
|
|
123
|
+
contractVersion
|
|
124
|
+
solverNetId
|
|
125
|
+
manifestEnrichmentStatus
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
`;
|
|
130
|
+
// Legacy selection for the backward-compat degrade path (issue #985): the
|
|
131
|
+
// pre-enrichment field set, safe against an OLD indexer that lacks the
|
|
132
|
+
// enriched columns. The projection fills sentinels for the missing fields and
|
|
133
|
+
// leaves manifestEnrichmentStatus undefined → treated as not-ok → sentinels.
|
|
134
|
+
// These rows surface unenriched on the LIST path (empty name, '0' prices, zero
|
|
135
|
+
// address); they are not re-enriched anywhere — full fields require an indexer
|
|
136
|
+
// that persists the enriched columns, or the hash-verified getManifest detail path.
|
|
137
|
+
const LIST_SOLVER_NETS_QUERY_LEGACY = `
|
|
138
|
+
query ListSolverNetsLegacy($where: solverNetManifestFilter, $limit: Int!) {
|
|
100
139
|
solverNetManifests(
|
|
101
140
|
where: $where,
|
|
102
141
|
limit: $limit,
|
|
@@ -246,6 +285,89 @@ query ClaimCountTasks($manifestDigest: String!, $limit: Int!, $after: String) {
|
|
|
246
285
|
}
|
|
247
286
|
}
|
|
248
287
|
`;
|
|
288
|
+
/**
|
|
289
|
+
* Per-task on-chain finalization snapshot (#579). Pages every task id +
|
|
290
|
+
* finalized/refunded/claimWindowEnd for a SolverNet's manifestDigest, capped at
|
|
291
|
+
* MAX_OPERATOR_COUNT_TASK_PAGES like CLAIM_COUNT_TASKS_QUERY. Backs the Launcher
|
|
292
|
+
* "Recent posted Tasks" status chip — a DISPLAY signal, not a correctness gate.
|
|
293
|
+
*/
|
|
294
|
+
const TASK_STATUSES_QUERY = `
|
|
295
|
+
query TaskStatuses($manifestDigest: String!, $limit: Int!, $after: String) {
|
|
296
|
+
tasks(
|
|
297
|
+
where: { manifestDigest: $manifestDigest },
|
|
298
|
+
limit: $limit,
|
|
299
|
+
after: $after,
|
|
300
|
+
orderBy: "id",
|
|
301
|
+
orderDirection: "asc"
|
|
302
|
+
) {
|
|
303
|
+
items {
|
|
304
|
+
id
|
|
305
|
+
finalized
|
|
306
|
+
refunded
|
|
307
|
+
claimWindowEnd
|
|
308
|
+
}
|
|
309
|
+
pageInfo {
|
|
310
|
+
hasNextPage
|
|
311
|
+
endCursor
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
`;
|
|
316
|
+
/**
|
|
317
|
+
* Task-post-rate query (#918). Pages the most-recent tasks ordered by
|
|
318
|
+
* createdAtBlock desc; the daemon reads the top row's block as the window head
|
|
319
|
+
* and buckets the three windows (1h / 6h / 24h) AND the per-cid totals
|
|
320
|
+
* client-side from createdAtBlock + manifestDigest.
|
|
321
|
+
*
|
|
322
|
+
* We do NOT push a `manifestDigest_in` / `createdAtBlock_gte` filter into the
|
|
323
|
+
* query: `manifestDigest_in` is not a stable Ponder filter operator across all
|
|
324
|
+
* deploys, and the chain-wide total needs every recent task anyway. A
|
|
325
|
+
* client-side scan-then-bucket over the most-recent N pages is the portable
|
|
326
|
+
* shape. `windowEndBlock` for the HTTP backing is the indexer's latest indexed
|
|
327
|
+
* task block (the top row), not the chain head.
|
|
328
|
+
*/
|
|
329
|
+
const TASK_POST_COUNTS_QUERY = `
|
|
330
|
+
query TaskPostCounts($limit: Int!, $after: String) {
|
|
331
|
+
tasks(
|
|
332
|
+
limit: $limit,
|
|
333
|
+
after: $after,
|
|
334
|
+
orderBy: "createdAtBlock",
|
|
335
|
+
orderDirection: "desc"
|
|
336
|
+
) {
|
|
337
|
+
items {
|
|
338
|
+
id
|
|
339
|
+
manifestDigest
|
|
340
|
+
createdAtBlock
|
|
341
|
+
}
|
|
342
|
+
pageInfo {
|
|
343
|
+
hasNextPage
|
|
344
|
+
endCursor
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
`;
|
|
349
|
+
/**
|
|
350
|
+
* Most-recent task for a SolverNet (#957). Filters the `task` table by
|
|
351
|
+
* `manifestDigest = keccak256(manifestCid)` (the same digest join the other
|
|
352
|
+
* task queries use), orders newest-first by `createdAtBlock`, limit 1. Returns
|
|
353
|
+
* the row's `taskCidDigest` + `id` so the caller can reconstruct the IPFS task
|
|
354
|
+
* CID and read its eligibility ref.
|
|
355
|
+
*/
|
|
356
|
+
const MOST_RECENT_TASK_QUERY = `
|
|
357
|
+
query MostRecentTask($manifestDigest: String!) {
|
|
358
|
+
tasks(
|
|
359
|
+
where: { manifestDigest: $manifestDigest },
|
|
360
|
+
limit: 1,
|
|
361
|
+
orderBy: "createdAtBlock",
|
|
362
|
+
orderDirection: "desc"
|
|
363
|
+
) {
|
|
364
|
+
items {
|
|
365
|
+
id
|
|
366
|
+
taskCidDigest
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
`;
|
|
249
371
|
const QUERY_ENVELOPES_QUERY = `
|
|
250
372
|
query QueryEnvelopes($where: envelopeFilter, $limit: Int!) {
|
|
251
373
|
envelopes(
|
|
@@ -264,6 +386,12 @@ query QueryEnvelopes($where: envelopeFilter, $limit: Int!) {
|
|
|
264
386
|
}
|
|
265
387
|
}
|
|
266
388
|
`;
|
|
389
|
+
/** Sentinel for an unenriched / unknown launcher safe address. */
|
|
390
|
+
const ZERO_ADDR = '0x0000000000000000000000000000000000000000';
|
|
391
|
+
/** Coerce an indexer-supplied address to a typed hex, or fall back to the zero sentinel. */
|
|
392
|
+
function safeAddr(a) {
|
|
393
|
+
return typeof a === 'string' && /^0x[0-9a-fA-F]{40}$/.test(a) ? a : ZERO_ADDR;
|
|
394
|
+
}
|
|
267
395
|
// ── Per-codeDigest reward aggregates (#764) ──────────────────────────────────
|
|
268
396
|
const CODEDIGEST_ATTEMPTS_QUERY = `
|
|
269
397
|
query CodeDigestAttempts($codeDigests: [String!]!, $limit: Int!, $after: String) {
|
|
@@ -298,7 +426,7 @@ query CodeDigestVerdicts($requestIds: [String!]!, $limit: Int!, $after: String${
|
|
|
298
426
|
orderBy: "requestId",
|
|
299
427
|
orderDirection: "asc"
|
|
300
428
|
) {
|
|
301
|
-
items { requestId chainId actualPassed actualScore }
|
|
429
|
+
items { requestId chainId actualPassed actualScore passedCount totalCount }
|
|
302
430
|
pageInfo { hasNextPage endCursor }
|
|
303
431
|
}
|
|
304
432
|
}
|
|
@@ -368,15 +496,92 @@ query GetPluginScores($pluginCid: String!, $limit: Int!) {
|
|
|
368
496
|
* a sync stall low without hammering the endpoint.
|
|
369
497
|
*/
|
|
370
498
|
const READY_PROBE_TTL_MS = 20_000;
|
|
499
|
+
/**
|
|
500
|
+
* Per-request timeout for every indexer fetch (the `/ready` probe and all
|
|
501
|
+
* GraphQL POSTs). A healthy indexer answers in well under a second; 15s is
|
|
502
|
+
* generous headroom that still recovers quickly. Its purpose is to convert a
|
|
503
|
+
* never-settling fetch (half-open socket during an indexer redeploy) into a
|
|
504
|
+
* catchable `DiscoveryUnavailableError` so the discovery/generator/catalog
|
|
505
|
+
* loops skip the tick and retry on the next poll, rather than wedging forever
|
|
506
|
+
* with no self-recovery while the indexer-independent loops mask the outage
|
|
507
|
+
* (#1038).
|
|
508
|
+
*/
|
|
509
|
+
const FETCH_TIMEOUT_MS = 15_000;
|
|
510
|
+
/**
|
|
511
|
+
* Default backoff schedule for transparent retries on transient indexer
|
|
512
|
+
* failures. `[200, 500]` retries twice — worst-case added latency 700ms, under
|
|
513
|
+
* the 800ms cap (#782 AC#1). Indexer flake (502/503) is bursty: a single
|
|
514
|
+
* transient 502 otherwise silences a daemon poll for a full poll interval, so
|
|
515
|
+
* a short transparent retry recovers without surfacing an outage.
|
|
516
|
+
*
|
|
517
|
+
* Retry is safe here because every retried POST is a read-only GraphQL *query*
|
|
518
|
+
* (no mutations in this client), so re-issuing it is idempotent.
|
|
519
|
+
*/
|
|
520
|
+
const RETRY_DELAYS_MS = [200, 500];
|
|
371
521
|
// ── Helpers ───────────────────────────────────────────────────────────────────
|
|
522
|
+
/**
|
|
523
|
+
* Wrap a fetch with transparent retry on transient indexer failures: 502/503
|
|
524
|
+
* responses and network-level fetch errors (TCP/TLS/DNS). Retries follow the
|
|
525
|
+
* `retryDelaysMs` schedule (one retry per entry). On exhaustion the last 502/503
|
|
526
|
+
* Response is returned unchanged — so `postGql`'s `!response.ok` raiser
|
|
527
|
+
* preserves the original status — or the last thrown error is re-thrown
|
|
528
|
+
* unchanged — so the network-path raiser preserves the original cause. Any
|
|
529
|
+
* non-502/503 response and any non-network outcome is returned/propagated on the
|
|
530
|
+
* first attempt (NOT retried); GraphQL-level `errors[]` are not visible here
|
|
531
|
+
* (they arrive in a 200 body) so they are likewise never retried.
|
|
532
|
+
*/
|
|
533
|
+
function fetchWithRetry(baseFetch, retryDelaysMs) {
|
|
534
|
+
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
535
|
+
return async (input, init) => {
|
|
536
|
+
for (let attempt = 0;; attempt++) {
|
|
537
|
+
try {
|
|
538
|
+
const res = await baseFetch(input, init);
|
|
539
|
+
if ((res.status === 502 || res.status === 503) && attempt < retryDelaysMs.length) {
|
|
540
|
+
await sleep(retryDelaysMs[attempt]);
|
|
541
|
+
continue;
|
|
542
|
+
}
|
|
543
|
+
return res;
|
|
544
|
+
}
|
|
545
|
+
catch (err) {
|
|
546
|
+
if (attempt < retryDelaysMs.length) {
|
|
547
|
+
await sleep(retryDelaysMs[attempt]);
|
|
548
|
+
continue;
|
|
549
|
+
}
|
|
550
|
+
throw err;
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
};
|
|
554
|
+
}
|
|
372
555
|
function parseOptionalNumber(value) {
|
|
373
556
|
if (typeof value === 'number')
|
|
374
557
|
return Number.isFinite(value) ? value : undefined;
|
|
375
558
|
if (typeof value !== 'string')
|
|
376
559
|
return undefined;
|
|
377
|
-
const
|
|
560
|
+
const trimmed = value.trim();
|
|
561
|
+
if (!trimmed)
|
|
562
|
+
return undefined;
|
|
563
|
+
const n = Number(trimmed);
|
|
378
564
|
return Number.isFinite(n) ? n : undefined;
|
|
379
565
|
}
|
|
566
|
+
function parseOptionalBoolean(value) {
|
|
567
|
+
if (typeof value === 'boolean')
|
|
568
|
+
return value;
|
|
569
|
+
if (typeof value === 'string') {
|
|
570
|
+
const normalized = value.trim().toLowerCase();
|
|
571
|
+
if (normalized === 'true')
|
|
572
|
+
return true;
|
|
573
|
+
if (normalized === 'false')
|
|
574
|
+
return false;
|
|
575
|
+
return undefined;
|
|
576
|
+
}
|
|
577
|
+
if (typeof value === 'number') {
|
|
578
|
+
if (value === 1)
|
|
579
|
+
return true;
|
|
580
|
+
if (value === 0)
|
|
581
|
+
return false;
|
|
582
|
+
}
|
|
583
|
+
return undefined;
|
|
584
|
+
}
|
|
380
585
|
function isHex(value) {
|
|
381
586
|
return typeof value === 'string' && /^0x[0-9a-fA-F]+$/.test(value);
|
|
382
587
|
}
|
|
@@ -426,10 +631,30 @@ export function createHttpDiscoveryAPI(opts) {
|
|
|
426
631
|
// Ponder's `/ready` lives at the host root, not under `/graphql`.
|
|
427
632
|
const readyUrl = `${opts.url.replace(/\/graphql\/?$/, '').replace(/\/$/, '')}/ready`;
|
|
428
633
|
const readyTtlMs = opts.readyProbeTtlMs ?? READY_PROBE_TTL_MS;
|
|
429
|
-
const
|
|
430
|
-
|
|
634
|
+
const fetchTimeoutMs = opts.fetchTimeoutMs ?? FETCH_TIMEOUT_MS;
|
|
635
|
+
const retryDelaysMs = opts.retryDelaysMs ?? RETRY_DELAYS_MS;
|
|
636
|
+
const baseFetch = opts.fetchImpl ?? globalThis.fetch;
|
|
637
|
+
if (!baseFetch) {
|
|
431
638
|
throw new Error('No fetch implementation available; pass fetchImpl in options');
|
|
432
639
|
}
|
|
640
|
+
// Bound every indexer fetch with an AbortSignal timeout. Without it, a single
|
|
641
|
+
// fetch against an indexer whose socket went half-open (e.g. mid-redeploy)
|
|
642
|
+
// never resolves or rejects — and since the fetch is unbounded, the awaiting
|
|
643
|
+
// discovery/generator/catalog loop wedges forever with no self-recovery,
|
|
644
|
+
// while the indexer-independent loops keep running and mask the outage
|
|
645
|
+
// on-chain (#1038). A timeout turns the hang into the same
|
|
646
|
+
// DiscoveryUnavailableError those loops already catch and retry. A caller
|
|
647
|
+
// that supplies its own signal keeps it.
|
|
648
|
+
//
|
|
649
|
+
// The AbortSignal-timeout wrap is INSIDE the retry loop (each retry attempt
|
|
650
|
+
// gets a fresh per-request timeout), and transient 502/503 responses and
|
|
651
|
+
// network-level fetch errors are transparently retried on the retryDelaysMs
|
|
652
|
+
// schedule before the failure is allowed to settle. This means a single
|
|
653
|
+
// bursty indexer flake no longer silences a whole daemon poll (#782); the
|
|
654
|
+
// bad-state `/ready` cache is also only written once the retrying fetch
|
|
655
|
+
// settles, so a transient probe blip cannot poison the cache (#782 AC#4).
|
|
656
|
+
const timeoutFetch = (input, init) => baseFetch(input, { ...init, signal: init?.signal ?? AbortSignal.timeout(fetchTimeoutMs) });
|
|
657
|
+
const fetchImpl = fetchWithRetry(timeoutFetch, retryDelaysMs);
|
|
433
658
|
// ── /ready probe (memoized with a short TTL) ──────────────────────────────
|
|
434
659
|
// Ponder serves GraphQL with 200 + stale/empty data while still catching up;
|
|
435
660
|
// `/ready` returns non-200 until it is at realtime. The daemon's fallback
|
|
@@ -600,26 +825,51 @@ export function createHttpDiscoveryAPI(opts) {
|
|
|
600
825
|
where['status_in'] = args.status;
|
|
601
826
|
if (args?.launcherAgentId)
|
|
602
827
|
where['launcherAgentId'] = args.launcherAgentId;
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
//
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
828
|
+
let data;
|
|
829
|
+
try {
|
|
830
|
+
data = await postGql(gqlUrl, fetchImpl, LIST_SOLVER_NETS_QUERY, { where, limit: 200 });
|
|
831
|
+
}
|
|
832
|
+
catch (err) {
|
|
833
|
+
// Backward-compat degrade (issue #985): an OLD indexer that predates the
|
|
834
|
+
// enriched columns rejects the extended selection set with a GraphQL
|
|
835
|
+
// validation error. Mirror the getPluginScores degrade pattern: re-run
|
|
836
|
+
// the minimal legacy query and project sentinels, so a daemon on a new
|
|
837
|
+
// build still lists against an old indexer (consumers re-enrich via IPFS).
|
|
838
|
+
if (err instanceof Error && /Unknown type|Cannot query|Cannot query field/.test(err.message)) {
|
|
839
|
+
data = await postGql(gqlUrl, fetchImpl, LIST_SOLVER_NETS_QUERY_LEGACY, { where, limit: 200 });
|
|
840
|
+
}
|
|
841
|
+
else {
|
|
842
|
+
throw err;
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
return (data.solverNetManifests?.items ?? []).map((row) => {
|
|
846
|
+
// Only trust enriched fields when the indexer marked the row 'ok'. A
|
|
847
|
+
// pending/failed row (or an old indexer that omits the field) keeps the
|
|
848
|
+
// sentinel rather than presenting an empty-string price as a real value.
|
|
849
|
+
// On the LIST hot path these rows pass through unenriched (degraded but
|
|
850
|
+
// present — empty name, '0' prices, zero address); full fields arrive once
|
|
851
|
+
// indexer enrichment lands, or via the hash-verified getManifest detail path.
|
|
852
|
+
const enriched = row.manifestEnrichmentStatus === 'ok';
|
|
853
|
+
return {
|
|
854
|
+
manifestCid: row.id,
|
|
855
|
+
solverNetId: enriched && row.solverNetId ? row.solverNetId : row.id,
|
|
856
|
+
name: enriched ? (row.name ?? '') : '',
|
|
857
|
+
network: enriched ? (row.network ?? '') : '',
|
|
858
|
+
launcherSafeAddress: enriched ? safeAddr(row.launcherSafeAddress) : ZERO_ADDR,
|
|
859
|
+
contractId: enriched ? (row.contractId ?? '') : '',
|
|
860
|
+
contractVersion: enriched ? (row.contractVersion ?? '') : '',
|
|
861
|
+
solutionPriceWei: enriched ? (row.solutionPriceWei ?? '0') : '0',
|
|
862
|
+
verdictPriceWei: enriched ? (row.verdictPriceWei ?? '0') : '0',
|
|
863
|
+
openRoles: enriched
|
|
864
|
+
? ((row.openRoles ?? []).filter((r) => r === 'solver' || r === 'evaluator'))
|
|
865
|
+
: [],
|
|
866
|
+
launcherAgentId: row.launcherAgentId,
|
|
867
|
+
status: row.status ?? 'launched',
|
|
868
|
+
statusUpdatedAt: row.statusUpdatedAt,
|
|
869
|
+
anchorBlock: Number(row.anchorBlock),
|
|
870
|
+
chainId: row.chainId,
|
|
871
|
+
};
|
|
872
|
+
});
|
|
623
873
|
}
|
|
624
874
|
// ── getLifecycleStatus ────────────────────────────────────────────────────
|
|
625
875
|
async function getLifecycleStatus(manifestCid) {
|
|
@@ -905,9 +1155,13 @@ export function createHttpDiscoveryAPI(opts) {
|
|
|
905
1155
|
for (const row of data.verdictEnvelopeMetas?.items ?? []) {
|
|
906
1156
|
const key = `${row.requestId}|${row.chainId}`;
|
|
907
1157
|
const scoreNum = Number(row.actualScore);
|
|
1158
|
+
const pc = Number(row.passedCount);
|
|
1159
|
+
const tc = Number(row.totalCount);
|
|
1160
|
+
const graded = Number.isFinite(tc) && tc > 0 ? pc / tc : null;
|
|
908
1161
|
verdictByKey.set(key, {
|
|
909
1162
|
passed: Boolean(row.actualPassed),
|
|
910
1163
|
score: Number.isFinite(scoreNum) && row.actualScore !== '' ? scoreNum : null,
|
|
1164
|
+
graded,
|
|
911
1165
|
});
|
|
912
1166
|
}
|
|
913
1167
|
const pi = data.verdictEnvelopeMetas?.pageInfo;
|
|
@@ -923,7 +1177,7 @@ export function createHttpDiscoveryAPI(opts) {
|
|
|
923
1177
|
const v = verdictByKey.get(key);
|
|
924
1178
|
if (!v)
|
|
925
1179
|
continue; // no verdict yet — not a completed attempt
|
|
926
|
-
const cur = agg.get(digest) ?? { attempts: 0, passes: 0, scoreSum: 0, scoreN: 0 };
|
|
1180
|
+
const cur = agg.get(digest) ?? { attempts: 0, passes: 0, scoreSum: 0, scoreN: 0, gradedScores: [] };
|
|
927
1181
|
cur.attempts += 1;
|
|
928
1182
|
if (v.passed)
|
|
929
1183
|
cur.passes += 1;
|
|
@@ -931,6 +1185,8 @@ export function createHttpDiscoveryAPI(opts) {
|
|
|
931
1185
|
cur.scoreSum += v.score;
|
|
932
1186
|
cur.scoreN += 1;
|
|
933
1187
|
}
|
|
1188
|
+
if (v.graded !== null)
|
|
1189
|
+
cur.gradedScores.push(v.graded);
|
|
934
1190
|
agg.set(digest, cur);
|
|
935
1191
|
}
|
|
936
1192
|
const rows = [];
|
|
@@ -941,6 +1197,7 @@ export function createHttpDiscoveryAPI(opts) {
|
|
|
941
1197
|
passes: a.passes,
|
|
942
1198
|
passRate: a.attempts > 0 ? a.passes / a.attempts : 0,
|
|
943
1199
|
avgScore: a.scoreN > 0 ? a.scoreSum / a.scoreN : 0,
|
|
1200
|
+
gradedScores: a.gradedScores,
|
|
944
1201
|
});
|
|
945
1202
|
}
|
|
946
1203
|
return rows;
|
|
@@ -996,6 +1253,98 @@ export function createHttpDiscoveryAPI(opts) {
|
|
|
996
1253
|
}
|
|
997
1254
|
return out;
|
|
998
1255
|
}
|
|
1256
|
+
// ── getTaskPostCounts (#918) ───────────────────────────────────────────────
|
|
1257
|
+
// Page the most-recent tasks (createdAtBlock desc); the top row's block is the
|
|
1258
|
+
// window head. Bucket the three windows AND the per-cid totals client-side.
|
|
1259
|
+
// windowEndBlock here is the indexer's latest indexed task block, not the
|
|
1260
|
+
// chain head (the indexer is the source of truth on the HTTP path).
|
|
1261
|
+
async function getTaskPostCounts(args) {
|
|
1262
|
+
await ensureReady();
|
|
1263
|
+
const windowEndTs = Math.floor(Date.now() / 1000);
|
|
1264
|
+
const cids = Array.from(new Set((args?.manifestCids ?? []).filter(Boolean)));
|
|
1265
|
+
const cidByDigest = new Map();
|
|
1266
|
+
for (const cid of cids) {
|
|
1267
|
+
cidByDigest.set(manifestDigestForCid(cid).toLowerCase(), cid);
|
|
1268
|
+
}
|
|
1269
|
+
// Page createdAtBlock desc. The first row sets the window head; we stop
|
|
1270
|
+
// paging once a page's oldest row falls before the 24h cut (everything
|
|
1271
|
+
// beyond is outside every window).
|
|
1272
|
+
const rows = [];
|
|
1273
|
+
let head;
|
|
1274
|
+
let cursor = null;
|
|
1275
|
+
for (let page = 0; page < MAX_TASK_POST_PAGES; page++) {
|
|
1276
|
+
const data = await postGql(gqlUrl, fetchImpl, TASK_POST_COUNTS_QUERY, { limit: 1000, after: cursor });
|
|
1277
|
+
const items = data.tasks?.items ?? [];
|
|
1278
|
+
for (const row of items) {
|
|
1279
|
+
const block = Number(row.createdAtBlock);
|
|
1280
|
+
if (!Number.isFinite(block))
|
|
1281
|
+
continue;
|
|
1282
|
+
if (head === undefined)
|
|
1283
|
+
head = block;
|
|
1284
|
+
rows.push({ digest: (row.manifestDigest ?? '').toLowerCase(), block });
|
|
1285
|
+
}
|
|
1286
|
+
const pageInfo = data.tasks?.pageInfo;
|
|
1287
|
+
// Once the oldest row this page is past the 24h cut, no further page can
|
|
1288
|
+
// contribute (desc order) — stop early.
|
|
1289
|
+
if (head !== undefined && items.length > 0) {
|
|
1290
|
+
const oldest = Number(items[items.length - 1].createdAtBlock);
|
|
1291
|
+
if (Number.isFinite(oldest) && oldest < head - TASK_POST_WINDOW_BLOCKS.h24)
|
|
1292
|
+
break;
|
|
1293
|
+
}
|
|
1294
|
+
if (!pageInfo?.hasNextPage || !pageInfo.endCursor)
|
|
1295
|
+
break;
|
|
1296
|
+
cursor = pageInfo.endCursor;
|
|
1297
|
+
}
|
|
1298
|
+
const windowEndBlock = head ?? 0;
|
|
1299
|
+
const { chain, byCid } = bucketTaskPostCounts(windowEndBlock, windowEndTs, rows, cidByDigest);
|
|
1300
|
+
return { windowEndBlock, windowEndTs, chain, byCid };
|
|
1301
|
+
}
|
|
1302
|
+
// ── getMostRecentTaskCidDigest (#957) ──────────────────────────────────────
|
|
1303
|
+
// Single newest task (createdAtBlock desc, limit 1) for the SolverNet's
|
|
1304
|
+
// manifestDigest. Pure indexer read — no IPFS hop; the caller reconstructs the
|
|
1305
|
+
// task CID from the returned digest.
|
|
1306
|
+
async function getMostRecentTaskCidDigest(manifestCid) {
|
|
1307
|
+
await ensureReady();
|
|
1308
|
+
// The indexer keys tasks by `manifestDigest = keccak256(toBytes(cid))`, not
|
|
1309
|
+
// by the cid string — same join the other task queries use.
|
|
1310
|
+
const manifestDigest = manifestDigestForCid(manifestCid).toLowerCase();
|
|
1311
|
+
const data = await postGql(gqlUrl, fetchImpl, MOST_RECENT_TASK_QUERY, { manifestDigest });
|
|
1312
|
+
const row = data.tasks?.items?.[0];
|
|
1313
|
+
if (!row || !isHex(row.taskCidDigest))
|
|
1314
|
+
return undefined;
|
|
1315
|
+
return { taskCidDigest: row.taskCidDigest, taskId: row.id };
|
|
1316
|
+
}
|
|
1317
|
+
// ── getTaskStatuses (#579) ─────────────────────────────────────────────────
|
|
1318
|
+
// Per-task finalized/refunded/claimWindowEnd for a SolverNet, keyed by taskId.
|
|
1319
|
+
// Single leg, mirroring getInstanceClaimCounts leg 1: page tasks for the
|
|
1320
|
+
// manifestDigest, capped at MAX_OPERATOR_COUNT_TASK_PAGES.
|
|
1321
|
+
async function getTaskStatuses(args) {
|
|
1322
|
+
await ensureReady();
|
|
1323
|
+
const manifestDigest = manifestDigestForCid(args.manifestCid).toLowerCase();
|
|
1324
|
+
const out = new Map();
|
|
1325
|
+
let taskCursor = null;
|
|
1326
|
+
for (let page = 0; page < MAX_OPERATOR_COUNT_TASK_PAGES; page++) {
|
|
1327
|
+
const data = await postGql(gqlUrl, fetchImpl, TASK_STATUSES_QUERY, { manifestDigest, limit: ATTEMPTS_PAGE_LIMIT, after: taskCursor });
|
|
1328
|
+
for (const row of data.tasks?.items ?? []) {
|
|
1329
|
+
const finalized = parseOptionalBoolean(row.finalized);
|
|
1330
|
+
const refunded = parseOptionalBoolean(row.refunded);
|
|
1331
|
+
if (finalized === undefined || refunded === undefined)
|
|
1332
|
+
continue;
|
|
1333
|
+
const claimWindowEnd = parseOptionalNumber(row.claimWindowEnd);
|
|
1334
|
+
out.set(row.id, {
|
|
1335
|
+
taskId: row.id,
|
|
1336
|
+
finalized,
|
|
1337
|
+
refunded,
|
|
1338
|
+
claimWindowEnd,
|
|
1339
|
+
});
|
|
1340
|
+
}
|
|
1341
|
+
const pageInfo = data.tasks?.pageInfo;
|
|
1342
|
+
if (!pageInfo?.hasNextPage || !pageInfo.endCursor)
|
|
1343
|
+
break;
|
|
1344
|
+
taskCursor = pageInfo.endCursor;
|
|
1345
|
+
}
|
|
1346
|
+
return out;
|
|
1347
|
+
}
|
|
999
1348
|
return {
|
|
1000
1349
|
findClaimableTasks,
|
|
1001
1350
|
listLaunchedSolverNets,
|
|
@@ -1008,6 +1357,9 @@ export function createHttpDiscoveryAPI(opts) {
|
|
|
1008
1357
|
getInstanceSuccessCounts,
|
|
1009
1358
|
getCodeDigestRewards,
|
|
1010
1359
|
getInstanceClaimCounts,
|
|
1360
|
+
getTaskPostCounts,
|
|
1361
|
+
getMostRecentTaskCidDigest,
|
|
1362
|
+
getTaskStatuses,
|
|
1011
1363
|
};
|
|
1012
1364
|
}
|
|
1013
1365
|
//# sourceMappingURL=http.js.map
|