@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
package/dist/config.d.ts
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* Router claims: JINN_ROUTER_CLAIM_DELIVERY_VERSION=v1|v2 overrides chain default
|
|
14
14
|
* (mainnet V1, testnet V2) for JinnRouter claimDelivery encoding.
|
|
15
15
|
*/
|
|
16
|
-
import { z } from 'zod';
|
|
16
|
+
import { z } from 'zod/v3';
|
|
17
17
|
import type { Task } from './types/task.js';
|
|
18
18
|
export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
19
19
|
/**
|
|
@@ -43,6 +43,18 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
43
43
|
* Accepts string or array form (see rpcUrl). Env: JINN_L2_PROOF_RPC_URL.
|
|
44
44
|
*/
|
|
45
45
|
l2ProofRpcUrl: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
|
|
46
|
+
/**
|
|
47
|
+
* Single volume-aware durable-state root. When set (env JINN_STATE_DIR or
|
|
48
|
+
* this file field), `earningDir`, `dbPath`, `engine.implStateDirRoot`, and
|
|
49
|
+
* the swe-rebench-v2 pool dir derive from it as `<stateDir>/<subdir>` —
|
|
50
|
+
* UNLESS each is individually overridden, in which case the per-key value
|
|
51
|
+
* wins (derive-don't-collapse). With `stateDir` unset, every default is
|
|
52
|
+
* byte-identical to the legacy `~/.jinn-client/<subdir>` paths. Hosted
|
|
53
|
+
* deploys collapse four ENV lines to one `JINN_STATE_DIR=/data`.
|
|
54
|
+
* `engine.workingDirRoot` is deliberately NOT derived — it stays ephemeral
|
|
55
|
+
* (reaped per-task).
|
|
56
|
+
*/
|
|
57
|
+
stateDir: z.ZodOptional<z.ZodString>;
|
|
46
58
|
/** Earning state directory */
|
|
47
59
|
earningDir: z.ZodDefault<z.ZodString>;
|
|
48
60
|
/** SQLite database path */
|
|
@@ -98,6 +110,8 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
98
110
|
hermesModel: z.ZodOptional<z.ZodString>;
|
|
99
111
|
/** Hermes provider (e.g. 'anthropic'). */
|
|
100
112
|
hermesProvider: z.ZodOptional<z.ZodString>;
|
|
113
|
+
/** Local OpenAI-compatible Hermes base URL, e.g. http://127.0.0.1:11434/v1 for Ollama. */
|
|
114
|
+
hermesBaseUrl: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
101
115
|
/**
|
|
102
116
|
* Timeout in ms for `hermes doctor` health-check runs.
|
|
103
117
|
* Default 30 000 ms. Env: JINN_HERMES_DOCTOR_TIMEOUT_MS.
|
|
@@ -157,16 +171,18 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
157
171
|
* Narrow task discovery to specific on-chain task ids. This is primarily
|
|
158
172
|
* for live acceptance gates that must avoid claiming unrelated public
|
|
159
173
|
* backlog while proving one fresh task path.
|
|
174
|
+
* Env: JINN_TASK_DISCOVERY_ALLOWED_TASK_IDS (comma-separated).
|
|
160
175
|
*/
|
|
161
176
|
taskDiscoveryAllowedTaskIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
162
177
|
/**
|
|
163
|
-
*
|
|
164
|
-
* on-chain TaskCreated backlog scan. Unset → the
|
|
165
|
-
*
|
|
166
|
-
* a
|
|
167
|
-
* (DiscoveryAPI.findClaimableTasks)
|
|
168
|
-
*
|
|
169
|
-
*
|
|
178
|
+
* Explicit absolute lower bound (L2 block number) for the mech adapter's
|
|
179
|
+
* on-chain TaskCreated backlog scan. Unset → the scan defaults to a bounded
|
|
180
|
+
* rolling window (`head − DEFAULT_ONCHAIN_SCAN_WINDOW_BLOCKS`, ~28h on Base),
|
|
181
|
+
* so a restart no longer replays full chain history every boot (#801); the
|
|
182
|
+
* indexer (DiscoveryAPI.findClaimableTasks) is the primary discovery path and
|
|
183
|
+
* the on-chain scan is a bounded backstop. Set this to widen the backstop to a
|
|
184
|
+
* specific block (the value pins both the scan start and the gh #300 admission
|
|
185
|
+
* floor). Env: JINN_TASK_DISCOVERY_FROM_BLOCK.
|
|
170
186
|
*/
|
|
171
187
|
taskDiscoveryOnchainFromBlock: z.ZodOptional<z.ZodNumber>;
|
|
172
188
|
/** This node's public HTTP endpoint (for 8004 registration) */
|
|
@@ -1008,6 +1024,13 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1008
1024
|
* Env: JINN_CLAIM_LOOP_ENABLED=1|true|yes.
|
|
1009
1025
|
*/
|
|
1010
1026
|
jinnClaimLoopEnabled: z.ZodDefault<z.ZodBoolean>;
|
|
1027
|
+
/**
|
|
1028
|
+
* Loop-watchdog auto-restart gate (#1043). Default OFF (the locked Option A
|
|
1029
|
+
* decision): the watchdog always detects a stale loop and loud-logs + emits
|
|
1030
|
+
* a `loop_watchdog_stale` event, but the non-zero process.exit recovery only
|
|
1031
|
+
* fires when this is on. Env: JINN_WATCHDOG_AUTO_RESTART=1|true|yes.
|
|
1032
|
+
*/
|
|
1033
|
+
watchdogAutoRestart: z.ZodDefault<z.ZodBoolean>;
|
|
1011
1034
|
/**
|
|
1012
1035
|
* How often the daemon ticks the cross-chain JINN claim loop (ms). Default
|
|
1013
1036
|
* 3 600 000 (1 hour) — well below mainnet challenge windows while
|
|
@@ -1171,6 +1194,18 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1171
1194
|
plugins?: string[] | undefined;
|
|
1172
1195
|
disabledDefaultPlugins?: string[] | undefined;
|
|
1173
1196
|
}>>>;
|
|
1197
|
+
/**
|
|
1198
|
+
* Set true once the operator clicks "Enter dashboard" at the end of the
|
|
1199
|
+
* #983 guided onboarding takeover. Distinct from `joinedSolverNets` being
|
|
1200
|
+
* non-empty: a node can have a membership mid-onboarding (the first join
|
|
1201
|
+
* populates the map) yet not have finished harness/model selection. The SPA
|
|
1202
|
+
* gates the bootstrap→dashboard hand-off on this flag (see App.tsx), so the
|
|
1203
|
+
* first join no longer ejects the operator before the harness step.
|
|
1204
|
+
*
|
|
1205
|
+
* Written by POST /v1/operator/onboarding-complete (persisted to disk AND
|
|
1206
|
+
* mutated in-memory so GET /v1/bootstrap reflects it without a restart).
|
|
1207
|
+
*/
|
|
1208
|
+
onboardingComplete: z.ZodOptional<z.ZodBoolean>;
|
|
1174
1209
|
/**
|
|
1175
1210
|
* Trusted ed25519 publishers for external harness impls. The daemon
|
|
1176
1211
|
* refuses to load any external impl whose manifest signature is not
|
|
@@ -1445,6 +1480,7 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1445
1480
|
jinnMessengerMode: "canonical" | "mock";
|
|
1446
1481
|
jinnClaimSubmissionMode: "emit-only" | "submit";
|
|
1447
1482
|
jinnClaimLoopEnabled: boolean;
|
|
1483
|
+
watchdogAutoRestart: boolean;
|
|
1448
1484
|
jinnClaimLoopIntervalMs: number;
|
|
1449
1485
|
stakingMode: "standard" | "self-bond";
|
|
1450
1486
|
targetServices: number;
|
|
@@ -1466,10 +1502,12 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1466
1502
|
rpcUrl?: string | string[] | undefined;
|
|
1467
1503
|
archiveRpcUrl?: string | string[] | undefined;
|
|
1468
1504
|
l2ProofRpcUrl?: string | string[] | undefined;
|
|
1505
|
+
stateDir?: string | undefined;
|
|
1469
1506
|
apiBindHost?: string | undefined;
|
|
1470
1507
|
hermesPath?: string | undefined;
|
|
1471
1508
|
hermesModel?: string | undefined;
|
|
1472
1509
|
hermesProvider?: string | undefined;
|
|
1510
|
+
hermesBaseUrl?: string | undefined;
|
|
1473
1511
|
codexPath?: string | undefined;
|
|
1474
1512
|
runtimeMode?: "bare" | "docker-compose" | "container" | undefined;
|
|
1475
1513
|
discovery?: {
|
|
@@ -1517,6 +1555,7 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1517
1555
|
} | undefined;
|
|
1518
1556
|
model?: string | undefined;
|
|
1519
1557
|
}> | undefined;
|
|
1558
|
+
onboardingComplete?: boolean | undefined;
|
|
1520
1559
|
trustedImplSigners?: {
|
|
1521
1560
|
publicKey: string;
|
|
1522
1561
|
alg: "ed25519";
|
|
@@ -1542,6 +1581,7 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1542
1581
|
rpcUrl?: string | string[] | undefined;
|
|
1543
1582
|
archiveRpcUrl?: string | string[] | undefined;
|
|
1544
1583
|
l2ProofRpcUrl?: string | string[] | undefined;
|
|
1584
|
+
stateDir?: string | undefined;
|
|
1545
1585
|
earningDir?: string | undefined;
|
|
1546
1586
|
dbPath?: string | undefined;
|
|
1547
1587
|
pollIntervalMs?: number | undefined;
|
|
@@ -1556,6 +1596,7 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1556
1596
|
hermesPath?: string | undefined;
|
|
1557
1597
|
hermesModel?: string | undefined;
|
|
1558
1598
|
hermesProvider?: string | undefined;
|
|
1599
|
+
hermesBaseUrl?: string | undefined;
|
|
1559
1600
|
hermesDoctorTimeoutMs?: number | undefined;
|
|
1560
1601
|
codexPath?: string | undefined;
|
|
1561
1602
|
codexDoctorTimeoutMs?: number | undefined;
|
|
@@ -1696,6 +1737,7 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1696
1737
|
jinnMessengerMode?: "canonical" | "mock" | undefined;
|
|
1697
1738
|
jinnClaimSubmissionMode?: "emit-only" | "submit" | undefined;
|
|
1698
1739
|
jinnClaimLoopEnabled?: boolean | undefined;
|
|
1740
|
+
watchdogAutoRestart?: boolean | undefined;
|
|
1699
1741
|
jinnClaimLoopIntervalMs?: number | undefined;
|
|
1700
1742
|
stakingMode?: "standard" | "self-bond" | undefined;
|
|
1701
1743
|
targetServices?: number | undefined;
|
|
@@ -1729,6 +1771,7 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1729
1771
|
plugins?: string[] | undefined;
|
|
1730
1772
|
disabledDefaultPlugins?: string[] | undefined;
|
|
1731
1773
|
}> | undefined;
|
|
1774
|
+
onboardingComplete?: boolean | undefined;
|
|
1732
1775
|
trustedImplSigners?: {
|
|
1733
1776
|
publicKey: string;
|
|
1734
1777
|
alg: "ed25519";
|
|
@@ -1851,6 +1894,7 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1851
1894
|
jinnMessengerMode: "canonical" | "mock";
|
|
1852
1895
|
jinnClaimSubmissionMode: "emit-only" | "submit";
|
|
1853
1896
|
jinnClaimLoopEnabled: boolean;
|
|
1897
|
+
watchdogAutoRestart: boolean;
|
|
1854
1898
|
jinnClaimLoopIntervalMs: number;
|
|
1855
1899
|
stakingMode: "standard" | "self-bond";
|
|
1856
1900
|
targetServices: number;
|
|
@@ -1872,10 +1916,12 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1872
1916
|
rpcUrl?: string | string[] | undefined;
|
|
1873
1917
|
archiveRpcUrl?: string | string[] | undefined;
|
|
1874
1918
|
l2ProofRpcUrl?: string | string[] | undefined;
|
|
1919
|
+
stateDir?: string | undefined;
|
|
1875
1920
|
apiBindHost?: string | undefined;
|
|
1876
1921
|
hermesPath?: string | undefined;
|
|
1877
1922
|
hermesModel?: string | undefined;
|
|
1878
1923
|
hermesProvider?: string | undefined;
|
|
1924
|
+
hermesBaseUrl?: string | undefined;
|
|
1879
1925
|
codexPath?: string | undefined;
|
|
1880
1926
|
runtimeMode?: "bare" | "docker-compose" | "container" | undefined;
|
|
1881
1927
|
discovery?: {
|
|
@@ -1923,6 +1969,7 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1923
1969
|
} | undefined;
|
|
1924
1970
|
model?: string | undefined;
|
|
1925
1971
|
}> | undefined;
|
|
1972
|
+
onboardingComplete?: boolean | undefined;
|
|
1926
1973
|
trustedImplSigners?: {
|
|
1927
1974
|
publicKey: string;
|
|
1928
1975
|
alg: "ed25519";
|
|
@@ -1948,6 +1995,7 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1948
1995
|
rpcUrl?: string | string[] | undefined;
|
|
1949
1996
|
archiveRpcUrl?: string | string[] | undefined;
|
|
1950
1997
|
l2ProofRpcUrl?: string | string[] | undefined;
|
|
1998
|
+
stateDir?: string | undefined;
|
|
1951
1999
|
earningDir?: string | undefined;
|
|
1952
2000
|
dbPath?: string | undefined;
|
|
1953
2001
|
pollIntervalMs?: number | undefined;
|
|
@@ -1962,6 +2010,7 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1962
2010
|
hermesPath?: string | undefined;
|
|
1963
2011
|
hermesModel?: string | undefined;
|
|
1964
2012
|
hermesProvider?: string | undefined;
|
|
2013
|
+
hermesBaseUrl?: string | undefined;
|
|
1965
2014
|
hermesDoctorTimeoutMs?: number | undefined;
|
|
1966
2015
|
codexPath?: string | undefined;
|
|
1967
2016
|
codexDoctorTimeoutMs?: number | undefined;
|
|
@@ -2102,6 +2151,7 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
2102
2151
|
jinnMessengerMode?: "canonical" | "mock" | undefined;
|
|
2103
2152
|
jinnClaimSubmissionMode?: "emit-only" | "submit" | undefined;
|
|
2104
2153
|
jinnClaimLoopEnabled?: boolean | undefined;
|
|
2154
|
+
watchdogAutoRestart?: boolean | undefined;
|
|
2105
2155
|
jinnClaimLoopIntervalMs?: number | undefined;
|
|
2106
2156
|
stakingMode?: "standard" | "self-bond" | undefined;
|
|
2107
2157
|
targetServices?: number | undefined;
|
|
@@ -2135,6 +2185,7 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
2135
2185
|
plugins?: string[] | undefined;
|
|
2136
2186
|
disabledDefaultPlugins?: string[] | undefined;
|
|
2137
2187
|
}> | undefined;
|
|
2188
|
+
onboardingComplete?: boolean | undefined;
|
|
2138
2189
|
trustedImplSigners?: {
|
|
2139
2190
|
publicKey: string;
|
|
2140
2191
|
alg: "ed25519";
|
|
@@ -2204,18 +2255,54 @@ export declare const DEFAULT_CONFIG_PATH: string;
|
|
|
2204
2255
|
* historical sync — see ponder.config.ts).
|
|
2205
2256
|
*/
|
|
2206
2257
|
export declare const DEFAULT_TESTNET_DISCOVERY_URL = "https://jinn-indexer-production.up.railway.app";
|
|
2207
|
-
export declare const DEFAULT_TESTNET_ETHEREUM_RPC_URL = "https://ethereum-sepolia-rpc.publicnode.com";
|
|
2208
2258
|
/**
|
|
2209
|
-
* Default fallback chain for the
|
|
2210
|
-
* testnet. Per
|
|
2211
|
-
*
|
|
2212
|
-
*
|
|
2213
|
-
* slot
|
|
2214
|
-
*
|
|
2259
|
+
* Default fallback chain for the L1 settlement chain (Ethereum Sepolia,
|
|
2260
|
+
* chain-id 11155111) on testnet. Per AC of issue #911 we ship ≥5 distinct
|
|
2261
|
+
* free providers so a default-config daemon survives single-provider quota
|
|
2262
|
+
* cliffs without an operator-supplied key:
|
|
2263
|
+
* slot 0 — `https://ethereum-sepolia-rpc.publicnode.com` (no-auth primary,
|
|
2264
|
+
* keeps the #835 no-shared-quota property symmetric with the L2 default).
|
|
2265
|
+
* slot 1 — `https://sepolia.drpc.org`
|
|
2266
|
+
* slot 2 — `https://1rpc.io/sepolia`
|
|
2267
|
+
* slot 3 — `https://sepolia.gateway.tenderly.co`
|
|
2268
|
+
* slot 4 — `https://rpc.sepolia.ethpandaops.io`
|
|
2269
|
+
* Operators may prepend a paid primary via `ethereumRpcUrl` / `JINN_ETHEREUM_RPC_URL`.
|
|
2270
|
+
* All five endpoints live-verified to return chain-id 11155111 (#911).
|
|
2271
|
+
*/
|
|
2272
|
+
export declare const DEFAULT_TESTNET_ETHEREUM_RPC_URLS: readonly string[];
|
|
2273
|
+
/**
|
|
2274
|
+
* Default fallback chain for the L2 measurement chain (Base Sepolia, chain-id
|
|
2275
|
+
* 84532) on testnet. Originally a two-provider chain (AC2 of issue #592);
|
|
2276
|
+
* widened to ≥5 distinct free providers per issue #911 so a default-config
|
|
2277
|
+
* daemon tolerates a single-provider quota cliff (the Tenderly shared-quota
|
|
2278
|
+
* cliff of 2026-05-24) without an operator key.
|
|
2279
|
+
* slot 0 — `https://base-sepolia.publicnode.com` (#835 no-auth primary,
|
|
2280
|
+
* 50k-block getLogs cap, no shared-quota cliff).
|
|
2281
|
+
* slot 1 — `https://base-sepolia-rpc.publicnode.com`
|
|
2282
|
+
* slot 2 — `https://base-sepolia.drpc.org`
|
|
2283
|
+
* slot 3 — `https://base-sepolia.gateway.tenderly.co`
|
|
2284
|
+
* slot 4 — `https://sepolia.base.org` (free public Coinbase endpoint,
|
|
2285
|
+
* 2k-block cap; last-resort backup, stays last).
|
|
2215
2286
|
* Operators are encouraged to prepend a paid primary key (Alchemy, Tenderly,
|
|
2216
2287
|
* etc.) via `rpcUrl` config or `JINN_RPC_URL` / `BASE_SEPOLIA_RPC_URL` env.
|
|
2288
|
+
* All five endpoints live-verified to return chain-id 84532 (#911).
|
|
2217
2289
|
*/
|
|
2218
2290
|
export declare const DEFAULT_TESTNET_RPC_URLS: readonly string[];
|
|
2291
|
+
/**
|
|
2292
|
+
* Default fallback chain for the L2 measurement chain (Base mainnet, chain-id
|
|
2293
|
+
* 8453). ≥5 distinct free providers per issue #911.
|
|
2294
|
+
* slot 0 — `https://mainnet.base.org` (free public Coinbase endpoint).
|
|
2295
|
+
*/
|
|
2296
|
+
export declare const DEFAULT_MAINNET_RPC_URLS: readonly string[];
|
|
2297
|
+
/**
|
|
2298
|
+
* Default fallback chain for the L1 settlement chain (Ethereum mainnet,
|
|
2299
|
+
* chain-id 1). ≥5 distinct free providers per issue #911. NOTE: this is a
|
|
2300
|
+
* named, addressable default only — it is intentionally NOT wired into
|
|
2301
|
+
* `loadConfig`, because the daemon has no mainnet-L1 default path (Ethereum L1
|
|
2302
|
+
* defaulting is testnet-only; see the consumer below). It exists so the chain-1
|
|
2303
|
+
* AC is satisfied by an importable default operators / future code can adopt.
|
|
2304
|
+
*/
|
|
2305
|
+
export declare const DEFAULT_MAINNET_ETHEREUM_RPC_URLS: readonly string[];
|
|
2219
2306
|
export type ConfigLoadErrorCode = 'config_file_not_found' | 'config_json_invalid' | 'tasks_file_not_found' | 'tasks_json_invalid' | 'config_invalid';
|
|
2220
2307
|
export declare class ConfigLoadError extends Error {
|
|
2221
2308
|
readonly code: ConfigLoadErrorCode;
|
package/dist/config.js
CHANGED
|
@@ -16,10 +16,11 @@
|
|
|
16
16
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
17
17
|
import { homedir } from 'node:os';
|
|
18
18
|
import { dirname, join } from 'node:path';
|
|
19
|
-
import { z } from 'zod';
|
|
19
|
+
import { z } from 'zod/v3';
|
|
20
20
|
import { TaskSchema, parseTask } from './types/task.js';
|
|
21
21
|
import { canonicalHarnessName } from './harnesses/names.js';
|
|
22
22
|
import { parseRpcUrls } from './rpc/transport.js';
|
|
23
|
+
import { canonicalLocalHttpBaseUrl } from './local-provider-url.js';
|
|
23
24
|
// ── Schema ──────────────────────────────────────────────────────────────────
|
|
24
25
|
const HarnessNameSchema = z.string().transform((name) => canonicalHarnessName(name));
|
|
25
26
|
export const JinnConfigSchema = z.object({
|
|
@@ -50,6 +51,18 @@ export const JinnConfigSchema = z.object({
|
|
|
50
51
|
* Accepts string or array form (see rpcUrl). Env: JINN_L2_PROOF_RPC_URL.
|
|
51
52
|
*/
|
|
52
53
|
l2ProofRpcUrl: z.union([z.string(), z.array(z.string()).min(1)]).optional(),
|
|
54
|
+
/**
|
|
55
|
+
* Single volume-aware durable-state root. When set (env JINN_STATE_DIR or
|
|
56
|
+
* this file field), `earningDir`, `dbPath`, `engine.implStateDirRoot`, and
|
|
57
|
+
* the swe-rebench-v2 pool dir derive from it as `<stateDir>/<subdir>` —
|
|
58
|
+
* UNLESS each is individually overridden, in which case the per-key value
|
|
59
|
+
* wins (derive-don't-collapse). With `stateDir` unset, every default is
|
|
60
|
+
* byte-identical to the legacy `~/.jinn-client/<subdir>` paths. Hosted
|
|
61
|
+
* deploys collapse four ENV lines to one `JINN_STATE_DIR=/data`.
|
|
62
|
+
* `engine.workingDirRoot` is deliberately NOT derived — it stays ephemeral
|
|
63
|
+
* (reaped per-task).
|
|
64
|
+
*/
|
|
65
|
+
stateDir: z.string().optional(),
|
|
53
66
|
/** Earning state directory */
|
|
54
67
|
earningDir: z.string().default(join(homedir(), '.jinn-client', 'earning')),
|
|
55
68
|
/** SQLite database path */
|
|
@@ -105,6 +118,22 @@ export const JinnConfigSchema = z.object({
|
|
|
105
118
|
hermesModel: z.string().optional(),
|
|
106
119
|
/** Hermes provider (e.g. 'anthropic'). */
|
|
107
120
|
hermesProvider: z.string().optional(),
|
|
121
|
+
/** Local OpenAI-compatible Hermes base URL, e.g. http://127.0.0.1:11434/v1 for Ollama. */
|
|
122
|
+
hermesBaseUrl: z
|
|
123
|
+
.string()
|
|
124
|
+
.url()
|
|
125
|
+
.transform((value, ctx) => {
|
|
126
|
+
const canonical = canonicalLocalHttpBaseUrl(value);
|
|
127
|
+
if (!canonical) {
|
|
128
|
+
ctx.addIssue({
|
|
129
|
+
code: z.ZodIssueCode.custom,
|
|
130
|
+
message: 'hermesBaseUrl must be a local HTTP(S) URL',
|
|
131
|
+
});
|
|
132
|
+
return z.NEVER;
|
|
133
|
+
}
|
|
134
|
+
return canonical;
|
|
135
|
+
})
|
|
136
|
+
.optional(),
|
|
108
137
|
/**
|
|
109
138
|
* Timeout in ms for `hermes doctor` health-check runs.
|
|
110
139
|
* Default 30 000 ms. Env: JINN_HERMES_DOCTOR_TIMEOUT_MS.
|
|
@@ -161,16 +190,18 @@ export const JinnConfigSchema = z.object({
|
|
|
161
190
|
* Narrow task discovery to specific on-chain task ids. This is primarily
|
|
162
191
|
* for live acceptance gates that must avoid claiming unrelated public
|
|
163
192
|
* backlog while proving one fresh task path.
|
|
193
|
+
* Env: JINN_TASK_DISCOVERY_ALLOWED_TASK_IDS (comma-separated).
|
|
164
194
|
*/
|
|
165
195
|
taskDiscoveryAllowedTaskIds: z.array(z.string()).optional(),
|
|
166
196
|
/**
|
|
167
|
-
*
|
|
168
|
-
* on-chain TaskCreated backlog scan. Unset → the
|
|
169
|
-
*
|
|
170
|
-
* a
|
|
171
|
-
* (DiscoveryAPI.findClaimableTasks)
|
|
172
|
-
*
|
|
173
|
-
*
|
|
197
|
+
* Explicit absolute lower bound (L2 block number) for the mech adapter's
|
|
198
|
+
* on-chain TaskCreated backlog scan. Unset → the scan defaults to a bounded
|
|
199
|
+
* rolling window (`head − DEFAULT_ONCHAIN_SCAN_WINDOW_BLOCKS`, ~28h on Base),
|
|
200
|
+
* so a restart no longer replays full chain history every boot (#801); the
|
|
201
|
+
* indexer (DiscoveryAPI.findClaimableTasks) is the primary discovery path and
|
|
202
|
+
* the on-chain scan is a bounded backstop. Set this to widen the backstop to a
|
|
203
|
+
* specific block (the value pins both the scan start and the gh #300 admission
|
|
204
|
+
* floor). Env: JINN_TASK_DISCOVERY_FROM_BLOCK.
|
|
174
205
|
*/
|
|
175
206
|
taskDiscoveryOnchainFromBlock: z.number().int().min(0).optional(),
|
|
176
207
|
/** This node's public HTTP endpoint (for 8004 registration) */
|
|
@@ -275,6 +306,13 @@ export const JinnConfigSchema = z.object({
|
|
|
275
306
|
* Env: JINN_CLAIM_LOOP_ENABLED=1|true|yes.
|
|
276
307
|
*/
|
|
277
308
|
jinnClaimLoopEnabled: z.boolean().default(false),
|
|
309
|
+
/**
|
|
310
|
+
* Loop-watchdog auto-restart gate (#1043). Default OFF (the locked Option A
|
|
311
|
+
* decision): the watchdog always detects a stale loop and loud-logs + emits
|
|
312
|
+
* a `loop_watchdog_stale` event, but the non-zero process.exit recovery only
|
|
313
|
+
* fires when this is on. Env: JINN_WATCHDOG_AUTO_RESTART=1|true|yes.
|
|
314
|
+
*/
|
|
315
|
+
watchdogAutoRestart: z.boolean().default(false),
|
|
278
316
|
/**
|
|
279
317
|
* How often the daemon ticks the cross-chain JINN claim loop (ms). Default
|
|
280
318
|
* 3 600 000 (1 hour) — well below mainnet challenge windows while
|
|
@@ -397,6 +435,18 @@ export const JinnConfigSchema = z.object({
|
|
|
397
435
|
disabledDefaultPlugins: z.array(z.string()).default([]),
|
|
398
436
|
}))
|
|
399
437
|
.optional(),
|
|
438
|
+
/**
|
|
439
|
+
* Set true once the operator clicks "Enter dashboard" at the end of the
|
|
440
|
+
* #983 guided onboarding takeover. Distinct from `joinedSolverNets` being
|
|
441
|
+
* non-empty: a node can have a membership mid-onboarding (the first join
|
|
442
|
+
* populates the map) yet not have finished harness/model selection. The SPA
|
|
443
|
+
* gates the bootstrap→dashboard hand-off on this flag (see App.tsx), so the
|
|
444
|
+
* first join no longer ejects the operator before the harness step.
|
|
445
|
+
*
|
|
446
|
+
* Written by POST /v1/operator/onboarding-complete (persisted to disk AND
|
|
447
|
+
* mutated in-memory so GET /v1/bootstrap reflects it without a restart).
|
|
448
|
+
*/
|
|
449
|
+
onboardingComplete: z.boolean().optional(),
|
|
400
450
|
/**
|
|
401
451
|
* Trusted ed25519 publishers for external harness impls. The daemon
|
|
402
452
|
* refuses to load any external impl whose manifest signature is not
|
|
@@ -570,21 +620,78 @@ export const DEFAULT_CONFIG_PATH = join(DEFAULT_DIR, 'config.json');
|
|
|
570
620
|
* historical sync — see ponder.config.ts).
|
|
571
621
|
*/
|
|
572
622
|
export const DEFAULT_TESTNET_DISCOVERY_URL = 'https://jinn-indexer-production.up.railway.app';
|
|
573
|
-
export const DEFAULT_TESTNET_ETHEREUM_RPC_URL = 'https://ethereum-sepolia-rpc.publicnode.com';
|
|
574
623
|
/**
|
|
575
|
-
* Default fallback chain for the
|
|
576
|
-
* testnet. Per
|
|
577
|
-
*
|
|
578
|
-
*
|
|
579
|
-
* slot
|
|
580
|
-
*
|
|
624
|
+
* Default fallback chain for the L1 settlement chain (Ethereum Sepolia,
|
|
625
|
+
* chain-id 11155111) on testnet. Per AC of issue #911 we ship ≥5 distinct
|
|
626
|
+
* free providers so a default-config daemon survives single-provider quota
|
|
627
|
+
* cliffs without an operator-supplied key:
|
|
628
|
+
* slot 0 — `https://ethereum-sepolia-rpc.publicnode.com` (no-auth primary,
|
|
629
|
+
* keeps the #835 no-shared-quota property symmetric with the L2 default).
|
|
630
|
+
* slot 1 — `https://sepolia.drpc.org`
|
|
631
|
+
* slot 2 — `https://1rpc.io/sepolia`
|
|
632
|
+
* slot 3 — `https://sepolia.gateway.tenderly.co`
|
|
633
|
+
* slot 4 — `https://rpc.sepolia.ethpandaops.io`
|
|
634
|
+
* Operators may prepend a paid primary via `ethereumRpcUrl` / `JINN_ETHEREUM_RPC_URL`.
|
|
635
|
+
* All five endpoints live-verified to return chain-id 11155111 (#911).
|
|
636
|
+
*/
|
|
637
|
+
export const DEFAULT_TESTNET_ETHEREUM_RPC_URLS = [
|
|
638
|
+
'https://ethereum-sepolia-rpc.publicnode.com',
|
|
639
|
+
'https://sepolia.drpc.org',
|
|
640
|
+
'https://1rpc.io/sepolia',
|
|
641
|
+
'https://sepolia.gateway.tenderly.co',
|
|
642
|
+
'https://rpc.sepolia.ethpandaops.io',
|
|
643
|
+
];
|
|
644
|
+
/**
|
|
645
|
+
* Default fallback chain for the L2 measurement chain (Base Sepolia, chain-id
|
|
646
|
+
* 84532) on testnet. Originally a two-provider chain (AC2 of issue #592);
|
|
647
|
+
* widened to ≥5 distinct free providers per issue #911 so a default-config
|
|
648
|
+
* daemon tolerates a single-provider quota cliff (the Tenderly shared-quota
|
|
649
|
+
* cliff of 2026-05-24) without an operator key.
|
|
650
|
+
* slot 0 — `https://base-sepolia.publicnode.com` (#835 no-auth primary,
|
|
651
|
+
* 50k-block getLogs cap, no shared-quota cliff).
|
|
652
|
+
* slot 1 — `https://base-sepolia-rpc.publicnode.com`
|
|
653
|
+
* slot 2 — `https://base-sepolia.drpc.org`
|
|
654
|
+
* slot 3 — `https://base-sepolia.gateway.tenderly.co`
|
|
655
|
+
* slot 4 — `https://sepolia.base.org` (free public Coinbase endpoint,
|
|
656
|
+
* 2k-block cap; last-resort backup, stays last).
|
|
581
657
|
* Operators are encouraged to prepend a paid primary key (Alchemy, Tenderly,
|
|
582
658
|
* etc.) via `rpcUrl` config or `JINN_RPC_URL` / `BASE_SEPOLIA_RPC_URL` env.
|
|
659
|
+
* All five endpoints live-verified to return chain-id 84532 (#911).
|
|
583
660
|
*/
|
|
584
661
|
export const DEFAULT_TESTNET_RPC_URLS = [
|
|
585
662
|
'https://base-sepolia.publicnode.com',
|
|
663
|
+
'https://base-sepolia-rpc.publicnode.com',
|
|
664
|
+
'https://base-sepolia.drpc.org',
|
|
665
|
+
'https://base-sepolia.gateway.tenderly.co',
|
|
586
666
|
'https://sepolia.base.org',
|
|
587
667
|
];
|
|
668
|
+
/**
|
|
669
|
+
* Default fallback chain for the L2 measurement chain (Base mainnet, chain-id
|
|
670
|
+
* 8453). ≥5 distinct free providers per issue #911.
|
|
671
|
+
* slot 0 — `https://mainnet.base.org` (free public Coinbase endpoint).
|
|
672
|
+
*/
|
|
673
|
+
export const DEFAULT_MAINNET_RPC_URLS = [
|
|
674
|
+
'https://mainnet.base.org',
|
|
675
|
+
'https://base.publicnode.com',
|
|
676
|
+
'https://base.drpc.org',
|
|
677
|
+
'https://1rpc.io/base',
|
|
678
|
+
'https://base.meowrpc.com',
|
|
679
|
+
];
|
|
680
|
+
/**
|
|
681
|
+
* Default fallback chain for the L1 settlement chain (Ethereum mainnet,
|
|
682
|
+
* chain-id 1). ≥5 distinct free providers per issue #911. NOTE: this is a
|
|
683
|
+
* named, addressable default only — it is intentionally NOT wired into
|
|
684
|
+
* `loadConfig`, because the daemon has no mainnet-L1 default path (Ethereum L1
|
|
685
|
+
* defaulting is testnet-only; see the consumer below). It exists so the chain-1
|
|
686
|
+
* AC is satisfied by an importable default operators / future code can adopt.
|
|
687
|
+
*/
|
|
688
|
+
export const DEFAULT_MAINNET_ETHEREUM_RPC_URLS = [
|
|
689
|
+
'https://ethereum-rpc.publicnode.com',
|
|
690
|
+
'https://cloudflare-eth.com',
|
|
691
|
+
'https://eth.merkle.io',
|
|
692
|
+
'https://eth.drpc.org',
|
|
693
|
+
'https://1rpc.io/eth',
|
|
694
|
+
];
|
|
588
695
|
export class ConfigLoadError extends Error {
|
|
589
696
|
code;
|
|
590
697
|
details;
|
|
@@ -736,6 +843,12 @@ export function loadConfig(configPath) {
|
|
|
736
843
|
if (env['JINN_TASK_DISCOVERY_FROM_BLOCK'] !== undefined) {
|
|
737
844
|
merged.taskDiscoveryOnchainFromBlock = Number.parseInt(env['JINN_TASK_DISCOVERY_FROM_BLOCK'], 10);
|
|
738
845
|
}
|
|
846
|
+
if (env['JINN_TASK_DISCOVERY_ALLOWED_TASK_IDS'] !== undefined) {
|
|
847
|
+
merged.taskDiscoveryAllowedTaskIds = env['JINN_TASK_DISCOVERY_ALLOWED_TASK_IDS']
|
|
848
|
+
.split(',')
|
|
849
|
+
.map((id) => id.trim())
|
|
850
|
+
.filter(Boolean);
|
|
851
|
+
}
|
|
739
852
|
if (env['JINN_API_PORT'])
|
|
740
853
|
merged.apiPort = parseInt(env['JINN_API_PORT'], 10);
|
|
741
854
|
if (env['JINN_API_BIND_HOST'])
|
|
@@ -750,6 +863,8 @@ export function loadConfig(configPath) {
|
|
|
750
863
|
merged.hermesModel = env['JINN_HERMES_MODEL'];
|
|
751
864
|
if (env['JINN_HERMES_PROVIDER'])
|
|
752
865
|
merged.hermesProvider = env['JINN_HERMES_PROVIDER'];
|
|
866
|
+
if (env['JINN_HERMES_BASE_URL'])
|
|
867
|
+
merged.hermesBaseUrl = env['JINN_HERMES_BASE_URL'];
|
|
753
868
|
if (env['JINN_HERMES_DOCTOR_TIMEOUT_MS']) {
|
|
754
869
|
merged.hermesDoctorTimeoutMs = parseInt(env['JINN_HERMES_DOCTOR_TIMEOUT_MS'], 10);
|
|
755
870
|
}
|
|
@@ -826,6 +941,10 @@ export function loadConfig(configPath) {
|
|
|
826
941
|
const v = env['JINN_CLAIM_LOOP_ENABLED'].trim().toLowerCase();
|
|
827
942
|
merged.jinnClaimLoopEnabled = v === '1' || v === 'true' || v === 'yes';
|
|
828
943
|
}
|
|
944
|
+
if (env['JINN_WATCHDOG_AUTO_RESTART'] !== undefined) {
|
|
945
|
+
const v = env['JINN_WATCHDOG_AUTO_RESTART'].trim().toLowerCase();
|
|
946
|
+
merged.watchdogAutoRestart = v === '1' || v === 'true' || v === 'yes';
|
|
947
|
+
}
|
|
829
948
|
if (env['JINN_CLAIM_LOOP_INTERVAL_MS'] !== undefined) {
|
|
830
949
|
merged.jinnClaimLoopIntervalMs = parseInt(env['JINN_CLAIM_LOOP_INTERVAL_MS'], 10);
|
|
831
950
|
}
|
|
@@ -920,6 +1039,28 @@ export function loadConfig(configPath) {
|
|
|
920
1039
|
...(env['JINN_ENGINE_IMPL_STATE_DIR_ROOT'] ? { implStateDirRoot: env['JINN_ENGINE_IMPL_STATE_DIR_ROOT'] } : {}),
|
|
921
1040
|
};
|
|
922
1041
|
}
|
|
1042
|
+
// JINN_STATE_DIR: single volume-aware root. Runs AFTER all per-key env
|
|
1043
|
+
// overrides above are applied into `merged` and BEFORE safeParse — so a
|
|
1044
|
+
// still-`undefined` per-key value means neither file nor env set it. Per-key
|
|
1045
|
+
// precedence: explicit (file or env, already in `merged`) > <stateDir>/<subdir>
|
|
1046
|
+
// > legacy default (filled by the schema / engine assembly when still absent).
|
|
1047
|
+
// workingDirRoot is deliberately NOT derived — it stays ephemeral.
|
|
1048
|
+
const stateDir = env['JINN_STATE_DIR']
|
|
1049
|
+
?? (typeof merged['stateDir'] === 'string' ? merged['stateDir'] : undefined);
|
|
1050
|
+
if (stateDir) {
|
|
1051
|
+
merged['stateDir'] = stateDir;
|
|
1052
|
+
if (merged['earningDir'] === undefined)
|
|
1053
|
+
merged['earningDir'] = join(stateDir, 'earning');
|
|
1054
|
+
if (merged['dbPath'] === undefined)
|
|
1055
|
+
merged['dbPath'] = join(stateDir, 'jinn.db');
|
|
1056
|
+
const engineObj = (typeof merged['engine'] === 'object' && merged['engine'] !== null)
|
|
1057
|
+
? merged['engine']
|
|
1058
|
+
: {};
|
|
1059
|
+
if (engineObj['implStateDirRoot'] === undefined) {
|
|
1060
|
+
engineObj['implStateDirRoot'] = join(stateDir, 'engine', 'impl-state');
|
|
1061
|
+
merged['engine'] = engineObj;
|
|
1062
|
+
}
|
|
1063
|
+
}
|
|
923
1064
|
const resolvedNetwork = merged.network === 'testnet' ? 'testnet' : 'mainnet';
|
|
924
1065
|
// Testnet default: point discovery at the privately-operated Ponder indexer
|
|
925
1066
|
// (jinn-mono-280n.4), unless the operator has set their own `discovery` block.
|
|
@@ -952,7 +1093,7 @@ export function loadConfig(configPath) {
|
|
|
952
1093
|
};
|
|
953
1094
|
}
|
|
954
1095
|
if (resolvedNetwork === 'testnet' && !merged.ethereumRpcUrl) {
|
|
955
|
-
merged.ethereumRpcUrl =
|
|
1096
|
+
merged.ethereumRpcUrl = [...DEFAULT_TESTNET_ETHEREUM_RPC_URLS];
|
|
956
1097
|
}
|
|
957
1098
|
if (resolvedNetwork === 'testnet' && merged.jinnClaimLoopEnabled === undefined) {
|
|
958
1099
|
merged.jinnClaimLoopEnabled = true;
|
|
@@ -1018,12 +1159,13 @@ export function loadConfig(configPath) {
|
|
|
1018
1159
|
// shared-quota cliff of 2026-05-24 that took out every default-config
|
|
1019
1160
|
// daemon at once). See #554 + the NetworkSection.tsx "shared RPC" panel for
|
|
1020
1161
|
// the operator-facing pitch to bring their own key. The sibling Ethereum L1
|
|
1021
|
-
// default (
|
|
1022
|
-
// this keeps the two L1/L2 defaults symmetric.
|
|
1162
|
+
// default (DEFAULT_TESTNET_ETHEREUM_RPC_URLS above) is publicnode-headed —
|
|
1163
|
+
// this keeps the two L1/L2 defaults symmetric. Both chains ship ≥5 free
|
|
1164
|
+
// providers per issue #911.
|
|
1023
1165
|
const parsed = result.data;
|
|
1024
1166
|
const defaultRpcUrls = parsed.network === 'testnet'
|
|
1025
1167
|
? DEFAULT_TESTNET_RPC_URLS
|
|
1026
|
-
:
|
|
1168
|
+
: DEFAULT_MAINNET_RPC_URLS;
|
|
1027
1169
|
const rpcUrlsResolved = parsed.rpcUrl !== undefined
|
|
1028
1170
|
? parseRpcUrls(parsed.rpcUrl)
|
|
1029
1171
|
: [...defaultRpcUrls];
|
|
@@ -1103,6 +1245,7 @@ export function persistTopLevelConfigValue(key, value, configPath) {
|
|
|
1103
1245
|
*/
|
|
1104
1246
|
const TRACKED_ENV_VARS = [
|
|
1105
1247
|
'JINN_NETWORK',
|
|
1248
|
+
'JINN_STATE_DIR',
|
|
1106
1249
|
'JINN_EARNING_DIR',
|
|
1107
1250
|
'JINN_DB_PATH',
|
|
1108
1251
|
'JINN_POLL_INTERVAL_MS',
|
|
@@ -1116,12 +1259,14 @@ const TRACKED_ENV_VARS = [
|
|
|
1116
1259
|
'JINN_HERMES_PATH',
|
|
1117
1260
|
'JINN_HERMES_MODEL',
|
|
1118
1261
|
'JINN_HERMES_PROVIDER',
|
|
1262
|
+
'JINN_HERMES_BASE_URL',
|
|
1119
1263
|
'JINN_HERMES_DOCTOR_TIMEOUT_MS',
|
|
1120
1264
|
'JINN_RUNTIME_MODE',
|
|
1121
1265
|
'JINN_PEERS',
|
|
1122
1266
|
'JINN_DISCOVERY_MODE',
|
|
1123
1267
|
'JINN_DISCOVERY_URL',
|
|
1124
1268
|
'JINN_DISCOVERY_FALLBACK',
|
|
1269
|
+
'JINN_TASK_DISCOVERY_ALLOWED_TASK_IDS',
|
|
1125
1270
|
'JINN_NODE_ENDPOINT',
|
|
1126
1271
|
'JINN_IPFS_REGISTRY_URL',
|
|
1127
1272
|
'JINN_IPFS_GATEWAY_URL',
|
|
@@ -1141,6 +1286,7 @@ const TRACKED_ENV_VARS = [
|
|
|
1141
1286
|
'JINN_CLAIM_SUBMISSION_MODE',
|
|
1142
1287
|
'JINN_CLAIM_LOOP_ENABLED',
|
|
1143
1288
|
'JINN_CLAIM_LOOP_INTERVAL_MS',
|
|
1289
|
+
'JINN_WATCHDOG_AUTO_RESTART',
|
|
1144
1290
|
'JINN_STAKING_MODE',
|
|
1145
1291
|
'JINN_TARGET_SERVICES',
|
|
1146
1292
|
'JINN_DEBUG',
|
|
@@ -1158,6 +1304,7 @@ const TRACKED_ENV_VARS = [
|
|
|
1158
1304
|
'JINN_TASKS',
|
|
1159
1305
|
'JINN_ENGINE_WORKING_DIR_ROOT',
|
|
1160
1306
|
'JINN_ENGINE_IMPL_STATE_DIR_ROOT',
|
|
1307
|
+
'JINN_SWE_REBENCH_V2_STATE_DIR',
|
|
1161
1308
|
'JINN_OPERATOR_PUBLIC_ENDPOINT',
|
|
1162
1309
|
'JINN_OPERATOR_DEFAULT_PRICE_USDC',
|
|
1163
1310
|
'JINN_OPERATOR_DONATION_ENABLED',
|