@jinn-network/client 0.1.8 → 0.1.9-canary.144d87d2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/dist/adapters/mech/adapter.d.ts +21 -1
- package/dist/adapters/mech/adapter.js +77 -10
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/contracts.js +62 -28
- 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 +5 -1
- package/dist/adapters/mech/safe.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 +1 -0
- package/dist/api/bootstrap-endpoint.js +1 -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 +8 -2
- package/dist/api/gather-status.js +29 -117
- package/dist/api/gather-status.js.map +1 -1
- package/dist/api/loop-completion-build.d.ts +79 -0
- package/dist/api/loop-completion-build.js +155 -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/peers.js +2 -0
- package/dist/api/peers.js.map +1 -1
- package/dist/api/setup-endpoints.d.ts +32 -0
- package/dist/api/setup-endpoints.js +94 -24
- 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 +43 -33
- package/dist/api/status-build.js +3 -26
- 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/build-info.json +4 -4
- package/dist/build-meta.json +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 +37 -2
- 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 +30 -3
- 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/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config.d.ts +102 -15
- package/dist/config.js +166 -19
- package/dist/config.js.map +1 -1
- 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 +3 -0
- 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 +26 -14
- package/dist/daemon/creator.js.map +1 -1
- package/dist/daemon/daemon.d.ts +15 -0
- package/dist/daemon/daemon.js +78 -22
- package/dist/daemon/daemon.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/jinn-claim-loop.js +3 -0
- package/dist/daemon/jinn-claim-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 +34 -0
- package/dist/daemon/loop-heartbeat.js +39 -0
- package/dist/daemon/loop-heartbeat.js.map +1 -0
- package/dist/daemon/reward-claim-loop.js +4 -1
- package/dist/daemon/reward-claim-loop.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-8tAiMbUV.css +1 -0
- package/dist/dashboard/assets/index-D6a-DfaM.js +171 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/discovery/http.d.ts +17 -0
- package/dist/discovery/http.js +295 -25
- package/dist/discovery/http.js.map +1 -1
- package/dist/discovery/onchain.js +155 -1
- package/dist/discovery/onchain.js.map +1 -1
- package/dist/discovery/types.d.ts +106 -0
- package/dist/discovery/types.js +40 -0
- package/dist/discovery/types.js.map +1 -1
- package/dist/discovery/with-fallback.js +14 -0
- package/dist/discovery/with-fallback.js.map +1 -1
- package/dist/earning/bootstrap.d.ts +25 -0
- package/dist/earning/bootstrap.js +79 -28
- package/dist/earning/bootstrap.js.map +1 -1
- 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 +11 -0
- package/dist/earning/safe-adapter.js.map +1 -1
- package/dist/earning/stolas-claim.js +5 -5
- 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/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/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/engine/canonical-json.js +5 -3
- package/dist/harnesses/engine/canonical-json.js.map +1 -1
- package/dist/harnesses/engine/engine.d.ts +24 -0
- package/dist/harnesses/engine/engine.js +72 -9
- package/dist/harnesses/engine/engine.js.map +1 -1
- package/dist/harnesses/engine/packaging.js +1 -1
- package/dist/harnesses/engine/packaging.js.map +1 -1
- package/dist/harnesses/engine/persistence.d.ts +17 -0
- package/dist/harnesses/engine/persistence.js +28 -0
- package/dist/harnesses/engine/persistence.js.map +1 -1
- 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/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 +17 -3
- package/dist/harnesses/impls/hermes-agent/harness.js +68 -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 +9 -0
- 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/harness.d.ts +17 -1
- package/dist/harnesses/impls/learner/harness.js +51 -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/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 +10 -0
- package/dist/harnesses/readiness-registry.js +13 -0
- package/dist/harnesses/readiness-registry.js.map +1 -1
- package/dist/harnesses/types.d.ts +14 -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/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 +94 -25
- package/dist/main.js.map +1 -1
- package/dist/mcp/operator-server.js +1 -1
- package/dist/mcp/operator-server.js.map +1 -1
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/server.js.map +1 -1
- 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/preflight/deployment-readiness.d.ts +147 -0
- package/dist/preflight/deployment-readiness.js +366 -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/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 +8 -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/record.js +12 -5
- package/dist/spend/record.js.map +1 -1
- package/dist/store/store.d.ts +91 -5
- package/dist/store/store.js +170 -7
- package/dist/store/store.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/schema.d.ts +1 -1
- package/dist/trajectory/schema.js +1 -1
- package/dist/trajectory/schema.js.map +1 -1
- 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/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/task-document.d.ts +1 -1
- package/dist/types/task-document.js +1 -1
- package/dist/types/task-document.js.map +1 -1
- package/dist/types/task.d.ts +1 -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/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 +23 -20
- 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/swe-rebench-v2-runtime/hooks/hooks.json +16 -0
- package/plugins/swe-rebench-v2-runtime/hooks/session-start +74 -0
- package/dist/dashboard/assets/index-CzKxvMcU.css +0 -32
- package/dist/dashboard/assets/index-yVemxHot.js +0 -351
|
@@ -13,12 +13,17 @@
|
|
|
13
13
|
* - recentAttemptsWindow: how many most-recent attempts per codeDigest the
|
|
14
14
|
* aggregate is computed over. Overridable via implStateDir/policy.json
|
|
15
15
|
* (`policy.revert.recentAttemptsWindow`), mirroring policy.maxNotesBytes.
|
|
16
|
+
* - gradedMinSamplesPerArm: minimum per-arm graded scores before the graded
|
|
17
|
+
* (Tier 2) sensitivity test runs. Below it, Tier 2 is skipped entirely.
|
|
18
|
+
* - gradedAlpha: significance threshold for the Mann-Whitney graded test.
|
|
16
19
|
*/
|
|
17
|
-
import { twoProportionZTest } from './revert-stats.js';
|
|
20
|
+
import { twoProportionZTest, mannWhitneyU } from './revert-stats.js';
|
|
18
21
|
export const DEFAULT_REVERT_POLICY = {
|
|
19
22
|
minSamplesPerArm: 30,
|
|
20
23
|
alpha: 0.05,
|
|
21
24
|
recentAttemptsWindow: 200,
|
|
25
|
+
gradedMinSamplesPerArm: 10,
|
|
26
|
+
gradedAlpha: 0.05,
|
|
22
27
|
};
|
|
23
28
|
export function decideRevert(input, policy = DEFAULT_REVERT_POLICY) {
|
|
24
29
|
const { withCommit, atParent } = input;
|
|
@@ -26,25 +31,40 @@ export function decideRevert(input, policy = DEFAULT_REVERT_POLICY) {
|
|
|
26
31
|
withCommit: { codeDigest: withCommit.codeDigest, n: withCommit.attempts, passRate: withCommit.passRate },
|
|
27
32
|
atParent: { codeDigest: atParent.codeDigest, n: atParent.attempts, passRate: atParent.passRate },
|
|
28
33
|
};
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
34
|
+
const mean = (xs) => (xs.length ? xs.reduce((s, v) => s + v, 0) / xs.length : 0);
|
|
35
|
+
const gradedReady = withCommit.gradedScores.length >= policy.gradedMinSamplesPerArm &&
|
|
36
|
+
atParent.gradedScores.length >= policy.gradedMinSamplesPerArm;
|
|
37
|
+
// gradedDelta is only meaningful when gradedReady; mean([]) === 0 is a sentinel otherwise.
|
|
38
|
+
const gradedDelta = gradedReady ? mean(withCommit.gradedScores) - mean(atParent.gradedScores) : 0;
|
|
39
|
+
// Tier 1 — binary objective.
|
|
40
|
+
const binaryUnderpowered = withCommit.attempts < policy.minSamplesPerArm || atParent.attempts < policy.minSamplesPerArm;
|
|
41
|
+
if (!binaryUnderpowered) {
|
|
42
|
+
const stats = twoProportionZTest({
|
|
43
|
+
passesA: withCommit.passes, totalA: withCommit.attempts,
|
|
44
|
+
passesB: atParent.passes, totalB: atParent.attempts,
|
|
45
|
+
});
|
|
46
|
+
const significant = stats.pValue < policy.alpha;
|
|
47
|
+
if (stats.delta >= 0) {
|
|
48
|
+
return { ...base, delta: stats.delta, pValue: stats.pValue, significant, recommendRevert: false, reason: 'no_regression' };
|
|
49
|
+
}
|
|
50
|
+
if (!significant) {
|
|
51
|
+
return { ...base, delta: stats.delta, pValue: stats.pValue, significant, recommendRevert: false, reason: 'not_significant' };
|
|
52
|
+
}
|
|
53
|
+
// Binary says significant regression. Confirmation guardrail: if graded
|
|
54
|
+
// data exists and DISAGREES (graded improved), hold rather than revert.
|
|
55
|
+
if (gradedReady && gradedDelta > 0) {
|
|
56
|
+
return { ...base, delta: stats.delta, pValue: stats.pValue, significant: true, recommendRevert: false, reason: 'binary_graded_disagree' };
|
|
57
|
+
}
|
|
58
|
+
return { ...base, delta: stats.delta, pValue: stats.pValue, significant: true, recommendRevert: true, reason: 'significant_regression' };
|
|
33
59
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const significant = stats.pValue < policy.alpha;
|
|
41
|
-
if (stats.delta >= 0) {
|
|
42
|
-
return { ...base, delta: stats.delta, pValue: stats.pValue, significant, recommendRevert: false, reason: 'no_regression' };
|
|
60
|
+
// Tier 2 — graded sensitivity (only when binary is underpowered).
|
|
61
|
+
if (gradedReady) {
|
|
62
|
+
const mw = mannWhitneyU(withCommit.gradedScores, atParent.gradedScores);
|
|
63
|
+
if (mw.pValue < policy.gradedAlpha && gradedDelta < 0) {
|
|
64
|
+
return { ...base, delta: gradedDelta, pValue: mw.pValue, significant: true, recommendRevert: true, reason: 'graded_regression_provisional' };
|
|
65
|
+
}
|
|
43
66
|
}
|
|
44
|
-
|
|
45
|
-
return { ...base, delta: stats.delta, pValue: stats.pValue, significant, recommendRevert: false, reason: 'not_significant' };
|
|
46
|
-
}
|
|
47
|
-
return { ...base, delta: stats.delta, pValue: stats.pValue, significant: true, recommendRevert: true, reason: 'significant_regression' };
|
|
67
|
+
return { ...base, delta: withCommit.passRate - atParent.passRate, pValue: 1, significant: false, recommendRevert: false, reason: 'insufficient_samples' };
|
|
48
68
|
}
|
|
49
69
|
/** Merge a partial policy (e.g. from implStateDir/policy.json) over the defaults. */
|
|
50
70
|
export function resolveRevertPolicy(override) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revert-decision.js","sourceRoot":"","sources":["../../src/learner/revert-decision.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"revert-decision.js","sourceRoot":"","sources":["../../src/learner/revert-decision.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,3 +22,17 @@ export interface TwoProportionResult {
|
|
|
22
22
|
}
|
|
23
23
|
/** Two-proportion z-test. Returns no-signal (z=0, p=1) if either total is 0. */
|
|
24
24
|
export declare function twoProportionZTest(input: TwoProportionInput): TwoProportionResult;
|
|
25
|
+
export interface MannWhitneyResult {
|
|
26
|
+
/** U statistic for arm A. */
|
|
27
|
+
u: number;
|
|
28
|
+
/** Normal-approx z (sign matches "A − B": negative => A stochastically lower). */
|
|
29
|
+
z: number;
|
|
30
|
+
/** Two-sided p-value in [0, 1]; 1 when there is no signal or an arm is empty. */
|
|
31
|
+
pValue: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Mann-Whitney U (rank-sum) with tie correction and normal approximation.
|
|
35
|
+
* Rank-based per the design §3 — robust to the bounded/bimodal/miscalibrated
|
|
36
|
+
* graded-score distribution. No I/O. (#1019)
|
|
37
|
+
*/
|
|
38
|
+
export declare function mannWhitneyU(a: number[], b: number[]): MannWhitneyResult;
|
|
@@ -41,4 +41,46 @@ function erf(x) {
|
|
|
41
41
|
Math.exp(-x * x);
|
|
42
42
|
return x >= 0 ? y : -y;
|
|
43
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Mann-Whitney U (rank-sum) with tie correction and normal approximation.
|
|
46
|
+
* Rank-based per the design §3 — robust to the bounded/bimodal/miscalibrated
|
|
47
|
+
* graded-score distribution. No I/O. (#1019)
|
|
48
|
+
*/
|
|
49
|
+
export function mannWhitneyU(a, b) {
|
|
50
|
+
const nA = a.length;
|
|
51
|
+
const nB = b.length;
|
|
52
|
+
if (nA === 0 || nB === 0)
|
|
53
|
+
return { u: 0, z: 0, pValue: 1 };
|
|
54
|
+
const all = [...a.map((v) => ({ v, g: 0 })), ...b.map((v) => ({ v, g: 1 }))];
|
|
55
|
+
all.sort((x, y) => x.v - y.v);
|
|
56
|
+
// Average ranks (1-based), tie-aware.
|
|
57
|
+
const ranks = new Array(all.length).fill(0);
|
|
58
|
+
let i = 0;
|
|
59
|
+
let tieTerm = 0; // Σ (t³ − t) over tie groups, for the variance correction
|
|
60
|
+
while (i < all.length) {
|
|
61
|
+
let j = i;
|
|
62
|
+
while (j + 1 < all.length && all[j + 1].v === all[i].v)
|
|
63
|
+
j++;
|
|
64
|
+
const avgRank = (i + 1 + (j + 1)) / 2;
|
|
65
|
+
for (let k = i; k <= j; k++)
|
|
66
|
+
ranks[k] = avgRank;
|
|
67
|
+
const t = j - i + 1;
|
|
68
|
+
if (t > 1)
|
|
69
|
+
tieTerm += t * t * t - t;
|
|
70
|
+
i = j + 1;
|
|
71
|
+
}
|
|
72
|
+
let rankSumA = 0;
|
|
73
|
+
for (let k = 0; k < all.length; k++)
|
|
74
|
+
if (all[k].g === 0)
|
|
75
|
+
rankSumA += ranks[k];
|
|
76
|
+
const uA = rankSumA - (nA * (nA + 1)) / 2;
|
|
77
|
+
const n = nA + nB;
|
|
78
|
+
const meanU = (nA * nB) / 2;
|
|
79
|
+
const varU = (nA * nB / (n * (n - 1))) * ((n * n * n - n) / 12 - tieTerm / 12);
|
|
80
|
+
if (varU <= 0)
|
|
81
|
+
return { u: uA, z: 0, pValue: 1 };
|
|
82
|
+
const z = (uA - meanU) / Math.sqrt(varU);
|
|
83
|
+
const pValue = 2 * (1 - standardNormalCdf(Math.abs(z)));
|
|
84
|
+
return { u: uA, z, pValue };
|
|
85
|
+
}
|
|
44
86
|
//# sourceMappingURL=revert-stats.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revert-stats.js","sourceRoot":"","sources":["../../src/learner/revert-stats.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAkBH,gFAAgF;AAChF,MAAM,UAAU,kBAAkB,CAAC,KAAyB;IAC1D,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACnD,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAC7C,CAAC;IACD,MAAM,EAAE,GAAG,OAAO,GAAG,MAAM,CAAC;IAC5B,MAAM,EAAE,GAAG,OAAO,GAAG,MAAM,CAAC;IAC5B,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;IACtB,MAAM,MAAM,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACvD,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IACxE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QACb,wDAAwD;QACxD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACpC,CAAC;IACD,MAAM,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;IACrB,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC;AAED,gFAAgF;AAChF,SAAS,iBAAiB,CAAC,CAAS;IAClC,OAAO,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,GAAG,CAAC,CAAS;IACpB,qDAAqD;IACrD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,CAAC,GACL,CAAC;QACD,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC;YAC1E,WAAW,CAAC;YACZ,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC"}
|
|
1
|
+
{"version":3,"file":"revert-stats.js","sourceRoot":"","sources":["../../src/learner/revert-stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { isIP } from 'node:net';
|
|
2
|
+
export function canonicalLocalHttpBaseUrl(value) {
|
|
3
|
+
try {
|
|
4
|
+
const url = new URL(value);
|
|
5
|
+
if (url.protocol !== 'http:' && url.protocol !== 'https:')
|
|
6
|
+
return undefined;
|
|
7
|
+
if (url.username || url.password)
|
|
8
|
+
return undefined;
|
|
9
|
+
if (url.search || url.hash)
|
|
10
|
+
return undefined;
|
|
11
|
+
const hostname = url.hostname.toLowerCase();
|
|
12
|
+
const isLocal = hostname === 'localhost' ||
|
|
13
|
+
hostname === '[::1]' ||
|
|
14
|
+
hostname === '::1' ||
|
|
15
|
+
(isIP(hostname) === 4 && hostname.startsWith('127.'));
|
|
16
|
+
return isLocal ? url.toString() : undefined;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function isLocalHttpBaseUrl(value) {
|
|
23
|
+
return canonicalLocalHttpBaseUrl(value) !== undefined;
|
|
24
|
+
}
|
|
25
|
+
export function urlAtBasePath(baseUrl, path) {
|
|
26
|
+
return new URL(path, baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`).toString();
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=local-provider-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-provider-url.js","sourceRoot":"","sources":["../src/local-provider-url.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,MAAM,UAAU,yBAAyB,CAAC,KAAa;IACrD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAC5E,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAC;QACnD,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC7C,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,OAAO,GACX,QAAQ,KAAK,WAAW;YACxB,QAAQ,KAAK,OAAO;YACpB,QAAQ,KAAK,KAAK;YAClB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACxD,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO,yBAAyB,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,IAAY;IACzD,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;AACnF,CAAC"}
|
package/dist/main.js
CHANGED
|
@@ -43,6 +43,8 @@ import { buildEnvelope, emitEnvelope } from './errors/envelope.js';
|
|
|
43
43
|
import { clearBootstrapError, persistBootstrapError, } from './errors/persisted-bootstrap-error.js';
|
|
44
44
|
import { emitStructured } from './events/emitter.js';
|
|
45
45
|
import { applyPidfileLivenessGate } from './preflight/pidfile-liveness.js';
|
|
46
|
+
import { applyDeploymentReadinessGate } from './preflight/deployment-readiness.js';
|
|
47
|
+
import { detectAuthContext } from './preflight/claude-auth.js';
|
|
46
48
|
import { FleetBootstrapper, recoverEvictedService as recoverEvictedServiceFn } from './earning/bootstrap.js';
|
|
47
49
|
import { DEFAULT_TESTNET_ARTIFACTS, applyChainGasOverrides, getChainConfig, loadJinnMviConfig } from './earning/contracts.js';
|
|
48
50
|
import { runLegacyAgentIdMigration } from './earning/migrate-agent-id.js';
|
|
@@ -60,7 +62,8 @@ import { createJinnPublicClient, createJinnWalletClient, createJinnL1PublicClien
|
|
|
60
62
|
import { privateKeyToAccount } from 'viem/accounts';
|
|
61
63
|
import { getAddress } from 'viem';
|
|
62
64
|
import { DEFAULT_DISABLED_HARNESSES, DEFAULT_HARNESS, HarnessRegistry, } from './harnesses/engine/registry.js';
|
|
63
|
-
import {
|
|
65
|
+
import { createMutableJoinedSolverNetsView } from './harnesses/engine/engine.js';
|
|
66
|
+
import { createJoinApplier } from './daemon/join-applier.js';
|
|
64
67
|
import { buildHarnesses } from './harnesses/impls/index.js';
|
|
65
68
|
import { loadExternalImpl } from './harnesses/external-impls/index.js';
|
|
66
69
|
import { CLAUDE_CODE_HARNESS, CODEX_HARNESS, HERMES_AGENT_HARNESS, harnessStateDirName } from './harnesses/names.js';
|
|
@@ -858,6 +861,13 @@ export async function main() {
|
|
|
858
861
|
// builder-artifacts. Holder ref lets the routes register eagerly and
|
|
859
862
|
// start returning real data the moment main.ts assigns holder.current.
|
|
860
863
|
const discoveryApiHolder = { current: undefined };
|
|
864
|
+
// #1037: same eager-register / late-populate pattern for the join applier.
|
|
865
|
+
// The join endpoint registers eagerly inside startApiServer; the applier is
|
|
866
|
+
// built only after the latest join-consuming subsystem (the engine view,
|
|
867
|
+
// wired in the Daemon ctor). The endpoint tolerates an empty holder in the
|
|
868
|
+
// gap between server-start and populate by falling back to
|
|
869
|
+
// restartRequired:true.
|
|
870
|
+
const joinApplierHolder = { current: undefined };
|
|
861
871
|
// hjex.6: retry signal for the bootstrap halt-and-resume loop.
|
|
862
872
|
// When a SetupBootstrapHalted is caught (fatal non-funding error or funding
|
|
863
873
|
// timeout), main() waits on this promise instead of returning, so the setup
|
|
@@ -964,6 +974,7 @@ export async function main() {
|
|
|
964
974
|
rpcUrl: config.rpcUrl,
|
|
965
975
|
defaultRpcUrl: CHAIN_CONFIG.rpcUrl,
|
|
966
976
|
joinedSolverNets: config.joinedSolverNets,
|
|
977
|
+
onboardingComplete: config.onboardingComplete,
|
|
967
978
|
}),
|
|
968
979
|
},
|
|
969
980
|
// SolverNet catalog. Stubbed to the bundled `prediction` net for v1.
|
|
@@ -1111,6 +1122,17 @@ export async function main() {
|
|
|
1111
1122
|
resolve();
|
|
1112
1123
|
});
|
|
1113
1124
|
},
|
|
1125
|
+
// #1037: hot-apply a join to the running daemon. Populated after the
|
|
1126
|
+
// join-consuming subsystems are built (see joinApplierHolder). Empty
|
|
1127
|
+
// until then → the endpoint returns restartRequired:true.
|
|
1128
|
+
joinApplier: joinApplierHolder,
|
|
1129
|
+
// #983: mutate the in-memory config so GET /v1/bootstrap reflects the
|
|
1130
|
+
// completion flag live (the endpoint persists to disk; this keeps the
|
|
1131
|
+
// configReader's in-memory read consistent — same pattern as the
|
|
1132
|
+
// join-applier's config write). Cast: JinnConfig has the optional field.
|
|
1133
|
+
markOnboardingComplete: () => {
|
|
1134
|
+
config.onboardingComplete = true;
|
|
1135
|
+
},
|
|
1114
1136
|
},
|
|
1115
1137
|
status: {
|
|
1116
1138
|
earningDir: config.earningDir,
|
|
@@ -1547,6 +1569,28 @@ export async function main() {
|
|
|
1547
1569
|
// the panel's next refetch. Before this, the routes 404'd forever and
|
|
1548
1570
|
// the /build page rendered "Discovery unavailable" permanently.
|
|
1549
1571
|
discoveryApiHolder.current = sharedDiscoveryApi;
|
|
1572
|
+
// #1037: the live task-discovery descriptor. Always present with a mutable
|
|
1573
|
+
// `solverNetManifestCids` array (`taskDiscoveryManifestCids` is a fresh
|
|
1574
|
+
// `.map` result, safe to push onto). The join applier holds this same object
|
|
1575
|
+
// reference and pushes a newly-joined cid onto it live.
|
|
1576
|
+
const taskDiscovery = {
|
|
1577
|
+
discoveryApi: sharedDiscoveryApi,
|
|
1578
|
+
solverNetManifestCids: taskDiscoveryManifestCids,
|
|
1579
|
+
// No explicit `onchainFromBlock` by default — let `MechAdapter`'s
|
|
1580
|
+
// `DEFAULT_TASK_DISCOVERY_FROM_BLOCK` per-chain default flow through.
|
|
1581
|
+
// Hardcoding here shadowed the adapter's default and re-introduced the
|
|
1582
|
+
// ghost-task floor every release; removing the shadow makes `adapter.ts`
|
|
1583
|
+
// the single source of truth. See gh #300. An operator MAY opt in to a
|
|
1584
|
+
// recent floor via `taskDiscoveryOnchainFromBlock` to bound the canonical
|
|
1585
|
+
// getLogs scan (which otherwise parses a large history on the main thread
|
|
1586
|
+
// and can stall the loop) and lean on the indexer DiscoveryAPI.
|
|
1587
|
+
...(config.taskDiscoveryOnchainFromBlock !== undefined
|
|
1588
|
+
? { onchainFromBlock: config.taskDiscoveryOnchainFromBlock }
|
|
1589
|
+
: {}),
|
|
1590
|
+
...(config.taskDiscoveryAllowedTaskIds?.length
|
|
1591
|
+
? { allowedTaskIds: config.taskDiscoveryAllowedTaskIds }
|
|
1592
|
+
: {}),
|
|
1593
|
+
};
|
|
1550
1594
|
const adapter = new MechAdapter({
|
|
1551
1595
|
rpcUrl: config.rpcUrls,
|
|
1552
1596
|
mechMarketplaceAddress: MARKETPLACE_ADDRESS,
|
|
@@ -1560,27 +1604,7 @@ export async function main() {
|
|
|
1560
1604
|
chainId: config.network === 'testnet' ? 84532 : 8453,
|
|
1561
1605
|
routerClaimDeliveryVariant: CHAIN_CONFIG.routerClaimDeliveryVersion,
|
|
1562
1606
|
evictionRecovery,
|
|
1563
|
-
taskDiscovery
|
|
1564
|
-
? {
|
|
1565
|
-
discoveryApi: sharedDiscoveryApi,
|
|
1566
|
-
solverNetManifestCids: taskDiscoveryManifestCids,
|
|
1567
|
-
// No explicit `onchainFromBlock` by default — let `MechAdapter`'s
|
|
1568
|
-
// `DEFAULT_TASK_DISCOVERY_FROM_BLOCK` per-chain default flow
|
|
1569
|
-
// through. Hardcoding here shadowed the adapter's default and
|
|
1570
|
-
// re-introduced the ghost-task floor every release; removing the
|
|
1571
|
-
// shadow makes `adapter.ts` the single source of truth. See gh
|
|
1572
|
-
// #300. An operator MAY opt in to a recent floor via
|
|
1573
|
-
// `taskDiscoveryOnchainFromBlock` to bound the canonical getLogs
|
|
1574
|
-
// scan (which otherwise parses a large history on the main thread
|
|
1575
|
-
// and can stall the loop) and lean on the indexer DiscoveryAPI.
|
|
1576
|
-
...(config.taskDiscoveryOnchainFromBlock !== undefined
|
|
1577
|
-
? { onchainFromBlock: config.taskDiscoveryOnchainFromBlock }
|
|
1578
|
-
: {}),
|
|
1579
|
-
...(config.taskDiscoveryAllowedTaskIds?.length
|
|
1580
|
-
? { allowedTaskIds: config.taskDiscoveryAllowedTaskIds }
|
|
1581
|
-
: {}),
|
|
1582
|
-
}
|
|
1583
|
-
: undefined,
|
|
1607
|
+
taskDiscovery,
|
|
1584
1608
|
}, sharedStore);
|
|
1585
1609
|
// ── TaskEngine wiring ─────────────────────────────────────────────────
|
|
1586
1610
|
// Build agent viem clients (same creds as MechAdapter uses internally).
|
|
@@ -1729,6 +1753,7 @@ export async function main() {
|
|
|
1729
1753
|
hermesPath: config.hermesPath,
|
|
1730
1754
|
hermesModel: config.hermesModel,
|
|
1731
1755
|
hermesProvider: config.hermesProvider,
|
|
1756
|
+
hermesBaseUrl: config.hermesBaseUrl,
|
|
1732
1757
|
hermesDoctorTimeoutMs: config.hermesDoctorTimeoutMs,
|
|
1733
1758
|
codexPath: config.codexPath,
|
|
1734
1759
|
codexDoctorTimeoutMs: config.codexDoctorTimeoutMs,
|
|
@@ -1762,6 +1787,13 @@ export async function main() {
|
|
|
1762
1787
|
// is no longer needed and would throw on Hono's locked matcher.
|
|
1763
1788
|
harnessReadinessRegistryHolder.current = harnessReadinessRegistry;
|
|
1764
1789
|
console.log('[main] HarnessReadinessRegistry started; /v1/harnesses/readiness routes active.');
|
|
1790
|
+
// #1037: always construct the engine eligibility view (mutable) so a
|
|
1791
|
+
// hot-applied join can inject its cid live. Previously this was wired only
|
|
1792
|
+
// when config.joinedSolverNets was truthy; a zero-join daemon then ran the
|
|
1793
|
+
// legacy solverType gate. With an always-present empty view, a zero-join
|
|
1794
|
+
// daemon rejects cid-bearing tasks (its discovery cid set is empty so it
|
|
1795
|
+
// discovers none) and still passes legacy no-cid tasks. See plan §behaviour-change.
|
|
1796
|
+
const joinedSolverNetsView = createMutableJoinedSolverNetsView(config.joinedSolverNets);
|
|
1765
1797
|
// ── Engine deps ───────────────────────────────────────────────────────────────
|
|
1766
1798
|
// Packaging deps: artifacts are always written to served_artifacts
|
|
1767
1799
|
// (operator-local SQLite). In public-testnet donation mode, scrubbed artifact
|
|
@@ -2070,6 +2102,7 @@ export async function main() {
|
|
|
2070
2102
|
agentEoa: agentEoaAddress,
|
|
2071
2103
|
safeAddress,
|
|
2072
2104
|
agentPrivateKey,
|
|
2105
|
+
ipfsGatewayUrl: config.ipfsGatewayUrl,
|
|
2073
2106
|
...(sharedDiscoveryApi ? { discoveryApi: sharedDiscoveryApi } : {}),
|
|
2074
2107
|
},
|
|
2075
2108
|
logger: {
|
|
@@ -2226,9 +2259,8 @@ export async function main() {
|
|
|
2226
2259
|
// doesn't match a joined entry (plus a role gate). Absent when the
|
|
2227
2260
|
// operator hasn't joined any nets yet — the engine then falls back to
|
|
2228
2261
|
// the legacy solverType-keyed gate.
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
: {}),
|
|
2262
|
+
// #1037: always wire the (mutable) view so a hot-applied join is live.
|
|
2263
|
+
joinedSolverNets: joinedSolverNetsView,
|
|
2232
2264
|
// Spec §14: task validation resolves manifest → contract → schemas.
|
|
2233
2265
|
// Threaded only when the SolverNet registry client was constructed
|
|
2234
2266
|
// (testnet branch above). The engine treats absence as "schema
|
|
@@ -2262,6 +2294,7 @@ export async function main() {
|
|
|
2262
2294
|
CHAIN_CONFIG.distributorAddress
|
|
2263
2295
|
? {
|
|
2264
2296
|
intervalMs: config.evictionCheckIntervalMs,
|
|
2297
|
+
reStakeThrottleMs: config.checkpointIntervalMs,
|
|
2265
2298
|
store: earningStore,
|
|
2266
2299
|
chain: NETWORK_CHAIN,
|
|
2267
2300
|
readContract: (opts) => publicClient.readContract(opts),
|
|
@@ -2309,13 +2342,49 @@ export async function main() {
|
|
|
2309
2342
|
},
|
|
2310
2343
|
}
|
|
2311
2344
|
: undefined,
|
|
2345
|
+
// #1043 loop watchdog. Always constructed in production so a stale loop is
|
|
2346
|
+
// detected + surfaced; the process-exit recovery is flag-gated (default
|
|
2347
|
+
// OFF) by config.watchdogAutoRestart.
|
|
2348
|
+
watchdog: { autoRestart: config.watchdogAutoRestart },
|
|
2349
|
+
});
|
|
2350
|
+
// #1037: populate the join applier now that all four join-consuming
|
|
2351
|
+
// subsystems exist — the live task-discovery descriptor (`taskDiscovery`),
|
|
2352
|
+
// the mutable engine view (`joinedSolverNetsView`), the readiness registry,
|
|
2353
|
+
// and the SolverNet registry. The join endpoint registered eagerly at
|
|
2354
|
+
// server-start; before this point it returns restartRequired:true.
|
|
2355
|
+
joinApplierHolder.current = createJoinApplier({
|
|
2356
|
+
taskDiscovery,
|
|
2357
|
+
view: joinedSolverNetsView,
|
|
2358
|
+
readiness: harnessReadinessRegistry,
|
|
2359
|
+
registry: solverNetRegistry,
|
|
2360
|
+
config,
|
|
2312
2361
|
});
|
|
2362
|
+
if (config.watchdogAutoRestart) {
|
|
2363
|
+
console.log('[watchdog] auto-restart ENABLED (stale loop → non-zero exit)');
|
|
2364
|
+
}
|
|
2313
2365
|
// Write pidfile so `jinn stop` can find us. First, refuse the run if another
|
|
2314
2366
|
// daemon already owns this earning directory — see issue #649. The gate
|
|
2315
2367
|
// handles all three branches (refuse-and-exit, unlink-stale-and-continue,
|
|
2316
2368
|
// proceed); the writeFileSync below MUST stay outside the helper so the
|
|
2317
2369
|
// "// DO NOT add store mutations above this line — see #649" invariant is
|
|
2318
2370
|
// visible right here at the call site.
|
|
2371
|
+
// Deployment-readiness gate (#958). In a deployment context (JINN_STATE_DIR
|
|
2372
|
+
// set or a container/compose auth context) this fails loud and exits when a
|
|
2373
|
+
// hard check fails (writable-volume, state-on-volume, agent-cli-non-root).
|
|
2374
|
+
// Outside a deployment context it only logs advisories — a plain local
|
|
2375
|
+
// `jinn run` is NEVER newly gated here. Runs before the pidfile gate so an
|
|
2376
|
+
// unfit environment refuses before we touch the pidfile.
|
|
2377
|
+
await applyDeploymentReadinessGate({
|
|
2378
|
+
stateDir: config.stateDir,
|
|
2379
|
+
earningDir: config.earningDir,
|
|
2380
|
+
relayerUrl: undefined,
|
|
2381
|
+
runtimeMode: config.runtimeMode,
|
|
2382
|
+
}, {
|
|
2383
|
+
env: process.env,
|
|
2384
|
+
getuid: typeof process.getuid === 'function' ? process.getuid.bind(process) : undefined,
|
|
2385
|
+
detectAuthContext,
|
|
2386
|
+
fetch,
|
|
2387
|
+
});
|
|
2319
2388
|
const pidPath = join(config.earningDir, 'daemon.pid');
|
|
2320
2389
|
applyPidfileLivenessGate(pidPath);
|
|
2321
2390
|
writeFileSyncMain(pidPath, String(process.pid) + '\n', 'utf-8');
|