@jinn-network/client 0.1.7 → 0.1.8-canary.09a3b2f6
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 +67 -1
- package/dist/adapters/mech/adapter.d.ts +39 -2
- package/dist/adapters/mech/adapter.js +178 -20
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/contracts.d.ts +22 -1
- package/dist/adapters/mech/contracts.js +96 -52
- 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.d.ts +1 -1
- package/dist/adapters/mech/safe.js +10 -4
- package/dist/adapters/mech/safe.js.map +1 -1
- package/dist/adapters/mech/types.d.ts +6 -1
- package/dist/adapters/mech/types.js.map +1 -1
- package/dist/agent/operator-claude.js +8 -0
- package/dist/agent/operator-claude.js.map +1 -1
- package/dist/api/activity-events-endpoint.d.ts +14 -0
- package/dist/api/activity-events-endpoint.js +59 -0
- package/dist/api/activity-events-endpoint.js.map +1 -0
- package/dist/api/bootstrap-endpoint.d.ts +1 -2
- package/dist/api/bootstrap-endpoint.js +42 -24
- package/dist/api/bootstrap-endpoint.js.map +1 -1
- package/dist/api/codex-doctor-endpoint.d.ts +22 -5
- package/dist/api/codex-doctor-endpoint.js +136 -17
- package/dist/api/codex-doctor-endpoint.js.map +1 -1
- package/dist/api/debug-report-endpoint.d.ts +27 -0
- package/dist/api/debug-report-endpoint.js +157 -0
- package/dist/api/debug-report-endpoint.js.map +1 -0
- 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 +39 -0
- package/dist/api/gather-status.js +181 -84
- package/dist/api/gather-status.js.map +1 -1
- package/dist/api/hermes-doctor-endpoint.d.ts +15 -7
- package/dist/api/hermes-doctor-endpoint.js +56 -19
- package/dist/api/hermes-doctor-endpoint.js.map +1 -1
- package/dist/api/launcher-status.d.ts +4 -2
- package/dist/api/launcher-status.js +11 -10
- package/dist/api/launcher-status.js.map +1 -1
- package/dist/api/launcher-tasks.d.ts +1 -1
- package/dist/api/launcher-tasks.js +12 -8
- package/dist/api/launcher-tasks.js.map +1 -1
- package/dist/api/loop-completion-build.d.ts +79 -0
- package/dist/api/loop-completion-build.js +155 -0
- package/dist/api/loop-completion-build.js.map +1 -0
- package/dist/api/operator-artifacts-endpoint.js +73 -6
- package/dist/api/operator-artifacts-endpoint.js.map +1 -1
- package/dist/api/portfolio-v0-build.d.ts +7 -1
- package/dist/api/portfolio-v0-build.js +6 -2
- package/dist/api/portfolio-v0-build.js.map +1 -1
- package/dist/api/prediction-v1-build.d.ts +6 -0
- package/dist/api/prediction-v1-build.js +3 -1
- package/dist/api/prediction-v1-build.js.map +1 -1
- package/dist/api/server.d.ts +17 -0
- package/dist/api/server.js +40 -1
- package/dist/api/server.js.map +1 -1
- package/dist/api/setup-endpoints.d.ts +13 -9
- package/dist/api/setup-endpoints.js +50 -173
- package/dist/api/setup-endpoints.js.map +1 -1
- package/dist/api/solvernets-endpoints.js +33 -63
- package/dist/api/solvernets-endpoints.js.map +1 -1
- package/dist/api/status-build.d.ts +140 -17
- package/dist/api/status-build.js +47 -34
- package/dist/api/status-build.js.map +1 -1
- package/dist/api/status-harness-rollup.d.ts +35 -0
- package/dist/api/status-harness-rollup.js +45 -0
- package/dist/api/status-harness-rollup.js.map +1 -0
- 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/task-runs-build.d.ts +8 -0
- package/dist/api/task-runs-build.js +5 -1
- package/dist/api/task-runs-build.js.map +1 -1
- package/dist/build-info.json +4 -4
- package/dist/build-meta.json +1 -1
- package/dist/captures/live-publisher.js +24 -4
- package/dist/captures/live-publisher.js.map +1 -1
- package/dist/captures/publish.d.ts +1 -1
- package/dist/chain-read-errors.d.ts +12 -0
- package/dist/chain-read-errors.js +26 -1
- package/dist/chain-read-errors.js.map +1 -1
- package/dist/cli/commands/codedigest-revert-check.d.ts +33 -0
- package/dist/cli/commands/codedigest-revert-check.js +253 -0
- package/dist/cli/commands/codedigest-revert-check.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +3 -0
- package/dist/cli/commands/doctor.js +35 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/eval.d.ts +76 -0
- package/dist/cli/commands/eval.js +401 -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 +27 -0
- package/dist/cli/commands/rewards.js.map +1 -1
- package/dist/cli/commands/solver-nets.d.ts +1 -0
- package/dist/cli/commands/solver-nets.js +245 -22
- package/dist/cli/commands/solver-nets.js.map +1 -1
- package/dist/cli/commands/solver-plugins-block.d.ts +33 -0
- package/dist/cli/commands/solver-plugins-block.js +118 -0
- package/dist/cli/commands/solver-plugins-block.js.map +1 -0
- package/dist/cli/commands/solver-plugins-feedback.d.ts +72 -0
- package/dist/cli/commands/solver-plugins-feedback.js +262 -0
- package/dist/cli/commands/solver-plugins-feedback.js.map +1 -0
- package/dist/cli/commands/solver-plugins-read.d.ts +54 -0
- package/dist/cli/commands/solver-plugins-read.js +259 -0
- package/dist/cli/commands/solver-plugins-read.js.map +1 -0
- package/dist/cli/commands/solver-plugins.d.ts +35 -0
- package/dist/cli/commands/solver-plugins.js +399 -2
- package/dist/cli/commands/solver-plugins.js.map +1 -1
- package/dist/cli/commands/status.js +0 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/tasks.js +15 -2
- package/dist/cli/commands/tasks.js.map +1 -1
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/task-native-readiness.d.ts +7 -0
- package/dist/cli/task-native-readiness.js +7 -5
- package/dist/cli/task-native-readiness.js.map +1 -1
- package/dist/config.d.ts +206 -232
- package/dist/config.js +289 -107
- package/dist/config.js.map +1 -1
- package/dist/daemon/ai-units-gate.d.ts +54 -0
- package/dist/daemon/ai-units-gate.js +83 -0
- package/dist/daemon/ai-units-gate.js.map +1 -0
- package/dist/daemon/creator.js +13 -0
- package/dist/daemon/creator.js.map +1 -1
- package/dist/daemon/daemon.d.ts +10 -0
- package/dist/daemon/daemon.js +205 -30
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/eviction-loop.d.ts +7 -0
- package/dist/daemon/eviction-loop.js +16 -0
- package/dist/daemon/eviction-loop.js.map +1 -1
- package/dist/daemon/gate-logger.d.ts +9 -0
- package/dist/daemon/gate-logger.js +2 -0
- package/dist/daemon/gate-logger.js.map +1 -0
- package/dist/daemon/jinn-claim-loop.js +22 -4
- package/dist/daemon/jinn-claim-loop.js.map +1 -1
- package/dist/daemon/readiness-gate.d.ts +1 -4
- package/dist/daemon/readiness-gate.js.map +1 -1
- package/dist/daemon/spend-cap-gate.d.ts +40 -0
- package/dist/daemon/spend-cap-gate.js +46 -0
- package/dist/daemon/spend-cap-gate.js.map +1 -0
- package/dist/dashboard/assets/index-3quVQqik.js +167 -0
- package/dist/dashboard/assets/index-BVAWkLwY.css +1 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/discovery/http.d.ts +7 -0
- package/dist/discovery/http.js +567 -24
- package/dist/discovery/http.js.map +1 -1
- package/dist/discovery/onchain.js +197 -5
- package/dist/discovery/onchain.js.map +1 -1
- package/dist/discovery/types.d.ts +235 -0
- package/dist/discovery/types.js +40 -0
- package/dist/discovery/types.js.map +1 -1
- package/dist/discovery/with-fallback.js +41 -0
- package/dist/discovery/with-fallback.js.map +1 -1
- package/dist/earning/bootstrap.d.ts +31 -3
- package/dist/earning/bootstrap.js +94 -22
- 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 +34 -11
- package/dist/earning/safe-adapter.js.map +1 -1
- package/dist/earning/types.d.ts +6 -6
- package/dist/earning/viem-clients.d.ts +11 -4
- package/dist/earning/viem-clients.js +14 -5
- package/dist/earning/viem-clients.js.map +1 -1
- package/dist/erc8004/identity.d.ts +19 -3
- package/dist/erc8004/identity.js +38 -11
- package/dist/erc8004/identity.js.map +1 -1
- package/dist/erc8004/index.d.ts +1 -1
- package/dist/erc8004/index.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 +163 -0
- package/dist/eval/orchestrator.js +232 -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 +2 -2
- package/dist/harnesses/cost-estimates.d.ts +10 -31
- package/dist/harnesses/cost-estimates.js +11 -43
- package/dist/harnesses/cost-estimates.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 +37 -4
- package/dist/harnesses/engine/engine.js +151 -20
- package/dist/harnesses/engine/engine.js.map +1 -1
- package/dist/harnesses/engine/persistence.d.ts +38 -4
- package/dist/harnesses/engine/persistence.js +71 -6
- package/dist/harnesses/engine/persistence.js.map +1 -1
- package/dist/harnesses/engine/state.d.ts +9 -0
- package/dist/harnesses/engine/state.js +23 -10
- package/dist/harnesses/engine/state.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 +10 -3
- package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/config-builder.d.ts +1 -1
- package/dist/harnesses/impls/hermes-agent/config-builder.js +4 -2
- package/dist/harnesses/impls/hermes-agent/config-builder.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/harness.d.ts +31 -3
- package/dist/harnesses/impls/hermes-agent/harness.js +84 -7
- package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/prompt.d.ts +6 -6
- package/dist/harnesses/impls/hermes-agent/prompt.js +6 -6
- package/dist/harnesses/impls/index.d.ts +2 -0
- package/dist/harnesses/impls/index.js +2 -0
- package/dist/harnesses/impls/index.js.map +1 -1
- package/dist/harnesses/impls/learner/adapters/claude-code.d.ts +17 -0
- package/dist/harnesses/impls/learner/adapters/claude-code.js +118 -14
- package/dist/harnesses/impls/learner/adapters/claude-code.js.map +1 -1
- package/dist/harnesses/impls/learner/adapters/codex-code.d.ts +9 -0
- package/dist/harnesses/impls/learner/adapters/codex-code.js +30 -8
- package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -1
- package/dist/harnesses/impls/learner/harness.d.ts +41 -1
- package/dist/harnesses/impls/learner/harness.js +78 -4
- package/dist/harnesses/impls/learner/harness.js.map +1 -1
- package/dist/harnesses/impls/learner/harvest.d.ts +3 -1
- package/dist/harnesses/impls/learner/harvest.js +30 -6
- 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/learner/restoration-patch.d.ts +2 -2
- package/dist/harnesses/impls/learner/restoration-patch.js +25 -6
- package/dist/harnesses/impls/learner/restoration-patch.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js +21 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +3 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.d.ts +74 -5
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js +103 -32
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.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 +7 -0
- package/dist/harnesses/readiness-registry.js +9 -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 +74 -0
- package/dist/learner/revert-decision.js +73 -0
- package/dist/learner/revert-decision.js.map +1 -0
- package/dist/learner/revert-stats.d.ts +38 -0
- package/dist/learner/revert-stats.js +86 -0
- package/dist/learner/revert-stats.js.map +1 -0
- package/dist/local-provider-url.d.ts +3 -0
- package/dist/local-provider-url.js +28 -0
- package/dist/local-provider-url.js.map +1 -0
- package/dist/main.js +199 -104
- package/dist/main.js.map +1 -1
- package/dist/mcp/get-codedigest-reward.d.ts +13 -0
- package/dist/mcp/get-codedigest-reward.js +23 -0
- package/dist/mcp/get-codedigest-reward.js.map +1 -0
- package/dist/mcp/server.js +23 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/observability/debug-report-assemble.d.ts +43 -0
- package/dist/observability/debug-report-assemble.js +80 -0
- package/dist/observability/debug-report-assemble.js.map +1 -0
- package/dist/observability/emit-event.d.ts +9 -2
- package/dist/observability/emit-event.js +36 -2
- package/dist/observability/emit-event.js.map +1 -1
- package/dist/observability/file-logger.d.ts +69 -0
- package/dist/observability/file-logger.js +177 -0
- package/dist/observability/file-logger.js.map +1 -0
- package/dist/observability/redact-secrets.d.ts +65 -0
- package/dist/observability/redact-secrets.js +300 -0
- package/dist/observability/redact-secrets.js.map +1 -0
- package/dist/observability/tar.d.ts +30 -0
- package/dist/observability/tar.js +102 -0
- package/dist/observability/tar.js.map +1 -0
- package/dist/plugins/learner/.claude-plugin/plugin.json +1 -1
- package/dist/plugins/learner/.codex-plugin/plugin.json +1 -1
- package/dist/plugins/learner/hooks/session-start +30 -1
- package/dist/plugins/learner/skills/learn/consolidator-prompt.md +22 -1
- package/dist/plugins/learner/skills/learn/promoter-prompt.md +72 -1
- 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 +50 -0
- package/dist/preflight/pidfile-liveness.js +117 -0
- package/dist/preflight/pidfile-liveness.js.map +1 -0
- package/dist/preflight/rpc-network.d.ts +40 -0
- package/dist/preflight/rpc-network.js +67 -1
- package/dist/preflight/rpc-network.js.map +1 -1
- package/dist/rpc/transport.d.ts +145 -0
- package/dist/rpc/transport.js +319 -0
- package/dist/rpc/transport.js.map +1 -0
- package/dist/scripts/donation-consumption-acceptance.js +7 -28
- package/dist/scripts/donation-consumption-acceptance.js.map +1 -1
- package/dist/scripts/swe-rebench-v2-pytest-missing.json +16 -0
- package/dist/solver-nets/prediction-operator-ux.d.ts +1 -2
- package/dist/solver-nets/prediction-operator-ux.js +56 -53
- package/dist/solver-nets/prediction-operator-ux.js.map +1 -1
- package/dist/solver-nets/registry.d.ts +19 -1
- package/dist/solver-nets/registry.js +37 -24
- package/dist/solver-nets/registry.js.map +1 -1
- 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-pool.d.ts +9 -2
- package/dist/solver-types/_swe-rebench-v2-pool.js +15 -20
- package/dist/solver-types/_swe-rebench-v2-pool.js.map +1 -1
- package/dist/solver-types/_swe-rebench-v2-state.d.ts +24 -0
- package/dist/solver-types/_swe-rebench-v2-state.js +33 -0
- package/dist/solver-types/_swe-rebench-v2-state.js.map +1 -1
- package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +116 -2
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js +296 -21
- package/dist/solver-types/_swe-rebench-v2-validated-pool.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-auto.d.ts +20 -11
- package/dist/solver-types/swe-rebench-v2-auto.js +64 -19
- package/dist/solver-types/swe-rebench-v2-auto.js.map +1 -1
- package/dist/solver-types/swe-rebench-v2.d.ts +10 -2
- package/dist/solver-types/swe-rebench-v2.js +233 -13
- package/dist/solver-types/swe-rebench-v2.js.map +1 -1
- package/dist/solvernets/daemon-init.d.ts +1 -1
- package/dist/solvernets/daemon-init.js +19 -4
- package/dist/solvernets/daemon-init.js.map +1 -1
- package/dist/solvernets/launched-record-dispatcher.d.ts +7 -0
- package/dist/solvernets/launched-record-dispatcher.js +10 -4
- package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
- package/dist/solvernets/registry-client-erc8004.js +40 -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 +2 -2
- package/dist/solvernets/store.js +7 -2
- package/dist/solvernets/store.js.map +1 -1
- package/dist/spend/ai-units-config.d.ts +49 -0
- package/dist/spend/ai-units-config.js +34 -0
- package/dist/spend/ai-units-config.js.map +1 -0
- package/dist/spend/ai-units.d.ts +140 -0
- package/dist/spend/ai-units.js +229 -0
- package/dist/spend/ai-units.js.map +1 -0
- package/dist/spend/cost-surface-status.d.ts +12 -0
- package/dist/spend/cost-surface-status.js +24 -0
- package/dist/spend/cost-surface-status.js.map +1 -0
- package/dist/spend/credential.d.ts +39 -0
- package/dist/spend/credential.js +71 -0
- package/dist/spend/credential.js.map +1 -0
- package/dist/spend/daemon-config.d.ts +13 -0
- package/dist/spend/daemon-config.js +24 -0
- package/dist/spend/daemon-config.js.map +1 -0
- package/dist/spend/pricing.d.ts +16 -0
- package/dist/spend/pricing.js +26 -0
- package/dist/spend/pricing.js.map +1 -0
- package/dist/spend/record.d.ts +13 -0
- package/dist/spend/record.js +43 -0
- package/dist/spend/record.js.map +1 -0
- package/dist/spend/usage.d.ts +27 -0
- package/dist/spend/usage.js +113 -0
- package/dist/spend/usage.js.map +1 -0
- package/dist/store/store.d.ts +187 -0
- package/dist/store/store.js +467 -4
- package/dist/store/store.js.map +1 -1
- package/dist/trajectory/transcript-parsers/codex-session.d.ts +12 -6
- package/dist/trajectory/transcript-parsers/codex-session.js +114 -13
- package/dist/trajectory/transcript-parsers/codex-session.js.map +1 -1
- package/dist/trajectory/transcript-parsers/types.d.ts +8 -8
- package/dist/trajectory/transcript-session-dirs.d.ts +18 -0
- package/dist/trajectory/transcript-session-dirs.js +85 -0
- package/dist/trajectory/transcript-session-dirs.js.map +1 -0
- package/dist/trajectory/transcript-watcher.d.ts +20 -1
- package/dist/trajectory/transcript-watcher.js +108 -32
- package/dist/trajectory/transcript-watcher.js.map +1 -1
- package/dist/tx-retry.d.ts +25 -0
- package/dist/tx-retry.js +95 -7
- package/dist/tx-retry.js.map +1 -1
- package/dist/types/payloads/portfolio-v0.d.ts +3 -3
- package/dist/types/payloads/prediction-apy-v0.d.ts +3 -3
- package/dist/types/payloads/prediction-v0.d.ts +12 -12
- package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.d.ts +108 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.js +25 -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/package.json +4 -0
- package/docker-compose.yml +3 -2
- package/package.json +30 -18
- 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 +22 -1
- package/plugins/learner/skills/learn/promoter-prompt.md +72 -1
- package/plugins/swe-rebench-v2-diffmin/README.md +10 -9
- package/plugins/swe-rebench-v2-diffmin/jinn.plugin.json +1 -1
- package/plugins/swe-rebench-v2-diffmin/skills/diffmin/SKILL.md +15 -10
- package/plugins/swe-rebench-v2-diffmin/skills/test-map/SKILL.md +10 -12
- package/plugins/swe-rebench-v2-runtime/.claude-plugin/plugin.json +1 -1
- package/plugins/swe-rebench-v2-runtime/.codex-plugin/plugin.json +3 -3
- package/plugins/swe-rebench-v2-runtime/README.md +6 -6
- package/plugins/swe-rebench-v2-runtime/hooks/hooks.json +16 -0
- package/plugins/swe-rebench-v2-runtime/hooks/session-start +74 -0
- package/plugins/swe-rebench-v2-runtime/jinn.plugin.json +2 -3
- package/plugins/swe-rebench-v2-runtime/skills/task/SKILL.md +81 -0
- package/dist/dashboard/assets/index-BUlE8F3Y.js +0 -330
- package/dist/dashboard/assets/index-blqc7eqq.css +0 -32
- package/plugins/swe-rebench-v2-runtime/skills/orient/SKILL.md +0 -29
- package/plugins/swe-rebench-v2-runtime/skills/plan/SKILL.md +0 -53
package/dist/main.js
CHANGED
|
@@ -33,6 +33,7 @@ import { setDefaultTxSubmissionLedger } from './tx-retry.js';
|
|
|
33
33
|
import { CapturePublishUnavailableError } from './api/captures.js';
|
|
34
34
|
import { invalidatePredictionOperatorStatusCache } from './api/gather-status.js';
|
|
35
35
|
import { ensureUiToken } from './api/ui-token.js';
|
|
36
|
+
import { getFileLogger, closeFileLogger } from './observability/file-logger.js';
|
|
36
37
|
import { hashImplStateDir } from './harnesses/freeze.js';
|
|
37
38
|
import { readModeState } from './harnesses/mode-state.js';
|
|
38
39
|
import { attachAgentWs, updateAgentClaudePath } from './agent/agent-ws.js';
|
|
@@ -41,6 +42,9 @@ import { requestDaemonRestart } from './restart-daemon.js';
|
|
|
41
42
|
import { buildEnvelope, emitEnvelope } from './errors/envelope.js';
|
|
42
43
|
import { clearBootstrapError, persistBootstrapError, } from './errors/persisted-bootstrap-error.js';
|
|
43
44
|
import { emitStructured } from './events/emitter.js';
|
|
45
|
+
import { applyPidfileLivenessGate } from './preflight/pidfile-liveness.js';
|
|
46
|
+
import { applyDeploymentReadinessGate } from './preflight/deployment-readiness.js';
|
|
47
|
+
import { detectAuthContext } from './preflight/claude-auth.js';
|
|
44
48
|
import { FleetBootstrapper, recoverEvictedService as recoverEvictedServiceFn } from './earning/bootstrap.js';
|
|
45
49
|
import { DEFAULT_TESTNET_ARTIFACTS, applyChainGasOverrides, getChainConfig, loadJinnMviConfig } from './earning/contracts.js';
|
|
46
50
|
import { runLegacyAgentIdMigration } from './earning/migrate-agent-id.js';
|
|
@@ -50,6 +54,9 @@ import { decryptMnemonic, deriveMasterSigner, walletPrivateKeyAtIndex } from './
|
|
|
50
54
|
import { MechAdapter } from './adapters/mech/adapter.js';
|
|
51
55
|
import { ClaudeRunner } from './runner/claude.js';
|
|
52
56
|
import { Daemon } from './daemon/daemon.js';
|
|
57
|
+
import { buildSpendCapConfig } from './spend/daemon-config.js';
|
|
58
|
+
import { buildAiUnitsConfig } from './spend/ai-units-config.js';
|
|
59
|
+
import { REFERENCE_CEILING } from './spend/ai-units.js';
|
|
53
60
|
import { buildJinnClaimLoopConfig, shouldWireJinnClaimL1Signer, } from './daemon/jinn-claim-loop-wiring.js';
|
|
54
61
|
import { createJinnPublicClient, createJinnWalletClient, createJinnL1PublicClient, createJinnL1WalletClient } from './earning/viem-clients.js';
|
|
55
62
|
import { privateKeyToAccount } from 'viem/accounts';
|
|
@@ -62,7 +69,7 @@ import { CLAUDE_CODE_HARNESS, CODEX_HARNESS, HERMES_AGENT_HARNESS, harnessStateD
|
|
|
62
69
|
import { resolveContractFromSolverNetId } from './solvernets/launched-record-dispatcher.js';
|
|
63
70
|
import { HarnessReadinessRegistry } from './harnesses/readiness-registry.js';
|
|
64
71
|
import { createClients } from './adapters/mech/safe.js';
|
|
65
|
-
import { loadSolverNets } from './solver-nets/registry.js';
|
|
72
|
+
import { findJoinedByName, loadSolverNets, solverTypeFromJoinedContract, } from './solver-nets/registry.js';
|
|
66
73
|
import { createCorpus } from './corpus/index.js';
|
|
67
74
|
import { DEFAULT_EXECUTION_DISCOVERY_FROM_BLOCK } from './corpus/onchain-query.js';
|
|
68
75
|
import { CapturesStore } from './store/captures.js';
|
|
@@ -78,10 +85,12 @@ import { ClaudeCodeJsonlParser } from './trajectory/transcript-parsers/claude-co
|
|
|
78
85
|
import { CodexSessionParser } from './trajectory/transcript-parsers/codex-session.js';
|
|
79
86
|
import { GeminiSessionParser } from './trajectory/transcript-parsers/gemini-session.js';
|
|
80
87
|
import { CursorSqliteParser } from './trajectory/transcript-parsers/cursor-sqlite.js';
|
|
88
|
+
import { startTranscriptWatcher, } from './trajectory/transcript-watcher.js';
|
|
89
|
+
import { defaultTranscriptWatchDirectories } from './trajectory/transcript-session-dirs.js';
|
|
81
90
|
import { buildInfo } from './build-info.js';
|
|
82
91
|
import { BASE_FEEDS } from './venues/chainlink/feeds.js';
|
|
83
92
|
import { GeneratedTaskSource, StaticConfiguredTaskSource, filterBindableTasks } from './tasks/sources.js';
|
|
84
|
-
import { checkRpcNetwork, logRpcLocalDevToStderr, rpcNetworkFailureHint } from './preflight/rpc-network.js';
|
|
93
|
+
import { checkRpcNetwork, logRpcLocalDevToStderr, probeFallbackChain, rpcNetworkFailureHint, summarizeFallbackChain, } from './preflight/rpc-network.js';
|
|
85
94
|
import { apiPortFailureMessage, checkApiPortAvailable } from './preflight/api-port.js';
|
|
86
95
|
import { openBrowser } from './cli/open-browser.js';
|
|
87
96
|
import { keepSetupUiOnBootstrapError } from './setup/halt-mode.js';
|
|
@@ -203,25 +212,15 @@ class EnsurePendingCaptureProcessor {
|
|
|
203
212
|
onStart() { }
|
|
204
213
|
onEnd(span) {
|
|
205
214
|
const sessionId = stringAttribute(span.attributes['jinn.session.id']);
|
|
206
|
-
if (!sessionId
|
|
215
|
+
if (!sessionId)
|
|
207
216
|
return;
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
spanCount: 0,
|
|
216
|
-
durationMs: 0,
|
|
217
|
-
redactedSpanCount: 0,
|
|
218
|
-
...repoMetadataFromSpan(span),
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
catch (err) {
|
|
222
|
-
if (!this.captures.getBySession(sessionId))
|
|
223
|
-
throw err;
|
|
224
|
-
}
|
|
217
|
+
ensurePendingCapture(this.captures, {
|
|
218
|
+
sessionId,
|
|
219
|
+
capturedAt: hrTimeToIso(span.startTime),
|
|
220
|
+
tool: inferCaptureTool(span),
|
|
221
|
+
capturePath: inferCapturePath(span),
|
|
222
|
+
...repoMetadataFromSpan(span),
|
|
223
|
+
});
|
|
225
224
|
}
|
|
226
225
|
}
|
|
227
226
|
function stringAttribute(value) {
|
|
@@ -236,6 +235,11 @@ function inferCaptureTool(span) {
|
|
|
236
235
|
?? stringAttribute(span.resource.attributes['service.name'])
|
|
237
236
|
?? 'otel';
|
|
238
237
|
}
|
|
238
|
+
function inferCapturePath(span) {
|
|
239
|
+
if (stringAttribute(span.attributes['transcript.tool']))
|
|
240
|
+
return 'B';
|
|
241
|
+
return 'A';
|
|
242
|
+
}
|
|
239
243
|
function repoMetadataFromSpan(span) {
|
|
240
244
|
const attrs = span.attributes;
|
|
241
245
|
const repoRemoteUrl = stringAttribute(attrs['repo.remote_url'])
|
|
@@ -265,28 +269,35 @@ function parserForStopHookTool(tool) {
|
|
|
265
269
|
}
|
|
266
270
|
}
|
|
267
271
|
}
|
|
268
|
-
function
|
|
269
|
-
if (captures.getBySession(
|
|
272
|
+
function ensurePendingCapture(captures, params) {
|
|
273
|
+
if (captures.getBySession(params.sessionId))
|
|
270
274
|
return;
|
|
271
275
|
try {
|
|
272
276
|
captures.savePending({
|
|
273
|
-
sessionId:
|
|
274
|
-
capturedAt:
|
|
275
|
-
originatingTool: { name:
|
|
276
|
-
capturePath:
|
|
277
|
+
sessionId: params.sessionId,
|
|
278
|
+
capturedAt: params.capturedAt,
|
|
279
|
+
originatingTool: { name: params.tool },
|
|
280
|
+
capturePath: params.capturePath,
|
|
277
281
|
status: 'pending',
|
|
278
282
|
spanCount: 0,
|
|
279
283
|
durationMs: 0,
|
|
280
284
|
redactedSpanCount: 0,
|
|
285
|
+
...(params.repoRemoteUrl ? { repoRemoteUrl: params.repoRemoteUrl } : {}),
|
|
286
|
+
...(params.repoCommitHash ? { repoCommitHash: params.repoCommitHash } : {}),
|
|
281
287
|
});
|
|
282
288
|
}
|
|
283
289
|
catch (err) {
|
|
284
|
-
if (!captures.getBySession(
|
|
290
|
+
if (!captures.getBySession(params.sessionId))
|
|
285
291
|
throw err;
|
|
286
292
|
}
|
|
287
293
|
}
|
|
288
294
|
async function ingestStopHookCapture(captures, receiver, payload) {
|
|
289
|
-
|
|
295
|
+
ensurePendingCapture(captures, {
|
|
296
|
+
sessionId: payload.sessionId,
|
|
297
|
+
capturedAt: payload.stoppedAt,
|
|
298
|
+
tool: payload.tool,
|
|
299
|
+
capturePath: 'D',
|
|
300
|
+
});
|
|
290
301
|
if (!payload.transcriptPath)
|
|
291
302
|
return;
|
|
292
303
|
if (!receiver) {
|
|
@@ -641,6 +652,11 @@ function emitProgress(envelope) {
|
|
|
641
652
|
}
|
|
642
653
|
export async function main() {
|
|
643
654
|
console.log(`[main] jinn-client starting on ${NETWORK_CHAIN}`);
|
|
655
|
+
// Issue #420: initialise the rotating daemon file logger early so lifecycle
|
|
656
|
+
// events (tapped in `observability/emit-event.ts`) accumulate durable,
|
|
657
|
+
// pre-redacted log lines for the one-click debug report. Constructing the
|
|
658
|
+
// singleton here also runs the startup age-based cleanup of stale rotations.
|
|
659
|
+
getFileLogger();
|
|
644
660
|
// ── Daemon API bearer token (jinn-mono-pr64 hardening) ───────────────────
|
|
645
661
|
//
|
|
646
662
|
// Cost-mutating API routes (`POST /v1/artifacts/acquire`, `POST /artifacts`)
|
|
@@ -681,6 +697,15 @@ export async function main() {
|
|
|
681
697
|
else {
|
|
682
698
|
logRpcLocalDevToStderr(rpcPreflight);
|
|
683
699
|
}
|
|
700
|
+
// Boot-time RPC fallback-chain probe (issue #592, AC7 + AC9). Log-only —
|
|
701
|
+
// per-slot 429s/5xx never gate startup. checkRpcNetwork above already
|
|
702
|
+
// fail-loud on chain-id mismatch against the head provider.
|
|
703
|
+
await probeFallbackChain(config.rpcUrls, config.network, 'L2');
|
|
704
|
+
console.error(summarizeFallbackChain('L2', config.rpcUrls));
|
|
705
|
+
if (config.jinnClaimLoopEnabled && config.ethereumRpcUrls) {
|
|
706
|
+
await probeFallbackChain(config.ethereumRpcUrls, config.network, 'L1');
|
|
707
|
+
console.error(summarizeFallbackChain('L1', config.ethereumRpcUrls));
|
|
708
|
+
}
|
|
684
709
|
const portPreflight = await checkApiPortAvailable(config.apiPort);
|
|
685
710
|
if (!portPreflight.ok) {
|
|
686
711
|
emitEnvelope({
|
|
@@ -734,11 +759,56 @@ export async function main() {
|
|
|
734
759
|
console.warn('[main] Capture OTLP receiver disabled; path-A telemetry capture unavailable: ' +
|
|
735
760
|
`${err instanceof Error ? err.message : String(err)}`);
|
|
736
761
|
}
|
|
762
|
+
let transcriptWatcher;
|
|
763
|
+
let pathBSyntheticSpanProvider;
|
|
764
|
+
const closePathBTranscriptWatcher = async () => {
|
|
765
|
+
const watcher = transcriptWatcher;
|
|
766
|
+
const provider = pathBSyntheticSpanProvider;
|
|
767
|
+
transcriptWatcher = undefined;
|
|
768
|
+
pathBSyntheticSpanProvider = undefined;
|
|
769
|
+
await Promise.all([
|
|
770
|
+
watcher?.shutdown().catch(() => undefined),
|
|
771
|
+
provider?.shutdown().catch(() => undefined),
|
|
772
|
+
]);
|
|
773
|
+
};
|
|
737
774
|
const closeCaptureReceiver = async () => {
|
|
775
|
+
await closePathBTranscriptWatcher();
|
|
738
776
|
const receiver = captureReceiver;
|
|
739
777
|
captureReceiver = undefined;
|
|
740
778
|
await receiver?.shutdown().catch(() => undefined);
|
|
741
779
|
};
|
|
780
|
+
if (captureReceiver) {
|
|
781
|
+
try {
|
|
782
|
+
const watchDirectories = defaultTranscriptWatchDirectories();
|
|
783
|
+
if (watchDirectories.length > 0) {
|
|
784
|
+
pathBSyntheticSpanProvider = startSyntheticSpanProvider({
|
|
785
|
+
otlpHttpEndpoint: `http://127.0.0.1:${captureReceiver.httpPort}/v1/traces`,
|
|
786
|
+
});
|
|
787
|
+
transcriptWatcher = await startTranscriptWatcher({
|
|
788
|
+
directories: watchDirectories,
|
|
789
|
+
onEvent: (envelope) => {
|
|
790
|
+
ensurePendingCapture(capturesStore, {
|
|
791
|
+
sessionId: envelope.sessionId,
|
|
792
|
+
capturedAt: new Date().toISOString(),
|
|
793
|
+
tool: envelope.tool,
|
|
794
|
+
capturePath: 'B',
|
|
795
|
+
});
|
|
796
|
+
emitSyntheticSpan(pathBSyntheticSpanProvider, envelope);
|
|
797
|
+
},
|
|
798
|
+
});
|
|
799
|
+
console.log('[main] Path-B transcript watcher started for ' +
|
|
800
|
+
watchDirectories.map((d) => `${d.tool}@${d.directory}`).join(', '));
|
|
801
|
+
}
|
|
802
|
+
else {
|
|
803
|
+
console.log('[main] Path-B transcript watcher skipped — no Codex/Claude session directories on disk yet');
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
catch (err) {
|
|
807
|
+
await closePathBTranscriptWatcher();
|
|
808
|
+
console.warn('[main] Path-B transcript watcher disabled: ' +
|
|
809
|
+
`${err instanceof Error ? err.message : String(err)}`);
|
|
810
|
+
}
|
|
811
|
+
}
|
|
742
812
|
const capturePublishRef = { current: undefined };
|
|
743
813
|
const earningStateStore = new FleetStateStore(config.earningDir);
|
|
744
814
|
const initialFleet = await earningStateStore.tryLoadExisting();
|
|
@@ -790,11 +860,6 @@ export async function main() {
|
|
|
790
860
|
// builder-artifacts. Holder ref lets the routes register eagerly and
|
|
791
861
|
// start returning real data the moment main.ts assigns holder.current.
|
|
792
862
|
const discoveryApiHolder = { current: undefined };
|
|
793
|
-
// hjex.3: holder for the restake callback. Populated in running mode after
|
|
794
|
-
// bootstrap completes (when mnemonic + distributorAddress are available).
|
|
795
|
-
const restakeCallbackRef = {
|
|
796
|
-
current: undefined,
|
|
797
|
-
};
|
|
798
863
|
// hjex.6: retry signal for the bootstrap halt-and-resume loop.
|
|
799
864
|
// When a SetupBootstrapHalted is caught (fatal non-funding error or funding
|
|
800
865
|
// timeout), main() waits on this promise instead of returning, so the setup
|
|
@@ -836,9 +901,7 @@ export async function main() {
|
|
|
836
901
|
// requestDaemonRestart so the operator is never stranded.
|
|
837
902
|
preSpawnCleanup: async () => {
|
|
838
903
|
await setupApiServer.close().catch(() => undefined);
|
|
839
|
-
|
|
840
|
-
await captureReceiver.shutdown().catch(() => undefined);
|
|
841
|
-
}
|
|
904
|
+
await closeCaptureReceiver();
|
|
842
905
|
},
|
|
843
906
|
}),
|
|
844
907
|
},
|
|
@@ -871,6 +934,14 @@ export async function main() {
|
|
|
871
934
|
config.operator = operator;
|
|
872
935
|
},
|
|
873
936
|
},
|
|
937
|
+
// Issue #420: one-click operator debug report. The bundle assembler
|
|
938
|
+
// reads the live resolved `config` so the download reflects env
|
|
939
|
+
// overrides + defaults, not just the on-disk config file.
|
|
940
|
+
debugReport: {
|
|
941
|
+
store: sharedStore,
|
|
942
|
+
config,
|
|
943
|
+
configPath: CONFIG_PATH ?? DEFAULT_CONFIG_PATH,
|
|
944
|
+
},
|
|
874
945
|
captures: {
|
|
875
946
|
captures: capturesStore,
|
|
876
947
|
publishCapture: async (sessionId) => {
|
|
@@ -894,7 +965,6 @@ export async function main() {
|
|
|
894
965
|
configReader: () => ({
|
|
895
966
|
rpcUrl: config.rpcUrl,
|
|
896
967
|
defaultRpcUrl: CHAIN_CONFIG.rpcUrl,
|
|
897
|
-
solverNets: config.solverNets,
|
|
898
968
|
joinedSolverNets: config.joinedSolverNets,
|
|
899
969
|
}),
|
|
900
970
|
},
|
|
@@ -1017,22 +1087,15 @@ export async function main() {
|
|
|
1017
1087
|
configPath: CONFIG_PATH ?? DEFAULT_CONFIG_PATH,
|
|
1018
1088
|
defaultRpcUrlForChain: () => CHAIN_CONFIG.rpcUrl,
|
|
1019
1089
|
onClaudePathSelected: selectClaudePath,
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1090
|
+
// Issue #421 retired the legacy `solverNets` write target. Setup
|
|
1091
|
+
// endpoints no longer call back into the daemon to mutate operator
|
|
1092
|
+
// SolverNet config; the canonical join flow is
|
|
1093
|
+
// `POST /v1/operator/join/:cid`, which mutates
|
|
1094
|
+
// `config.joinedSolverNets` directly via its own write path.
|
|
1095
|
+
// The cache-invalidation hook is no longer needed here.
|
|
1096
|
+
onSolverNetsUpdated: () => {
|
|
1027
1097
|
invalidatePredictionOperatorStatusCache(config);
|
|
1028
1098
|
},
|
|
1029
|
-
// hjex.3: delegate to the live callback populated once running mode starts.
|
|
1030
|
-
restake: (serviceId) => {
|
|
1031
|
-
if (!restakeCallbackRef.current) {
|
|
1032
|
-
return Promise.resolve({ ok: false, error: 'restake_not_available_in_setup_mode' });
|
|
1033
|
-
}
|
|
1034
|
-
return restakeCallbackRef.current(serviceId);
|
|
1035
|
-
},
|
|
1036
1099
|
// hjex.6: re-trigger the bootstrap state machine from the SPA Retry button.
|
|
1037
1100
|
// Resolves the halt-and-resume promise; main() will loop back and call
|
|
1038
1101
|
// bootstrap() again. Rejects if the daemon is not currently halted.
|
|
@@ -1094,29 +1157,30 @@ export async function main() {
|
|
|
1094
1157
|
// TODO(jinn-mono launcher Task 8): real `getReservedBudgetWei`
|
|
1095
1158
|
// (sum of unconsumed claim payments across open Tasks).
|
|
1096
1159
|
launcher: {
|
|
1097
|
-
getConfig: () => ({
|
|
1160
|
+
getConfig: () => ({ joinedSolverNets: config.joinedSolverNets }),
|
|
1098
1161
|
configPath: CONFIG_PATH ?? DEFAULT_CONFIG_PATH,
|
|
1099
|
-
//
|
|
1100
|
-
//
|
|
1101
|
-
//
|
|
1102
|
-
|
|
1103
|
-
onSolverNetsUpdated: (solverNets) => {
|
|
1104
|
-
config.solverNets = solverNets;
|
|
1162
|
+
// Issue #421 retired the legacy `solverNets` write target. The hook
|
|
1163
|
+
// only needs to invalidate the prediction-operator status cache when
|
|
1164
|
+
// operator mode mutates joinedSolverNets via setup endpoints.
|
|
1165
|
+
onSolverNetsUpdated: () => {
|
|
1105
1166
|
invalidatePredictionOperatorStatusCache(config);
|
|
1106
1167
|
},
|
|
1107
1168
|
getGeneratorState: (netName) => {
|
|
1108
1169
|
if (netName === 'prediction') {
|
|
1109
1170
|
return predictionGeneratorRef?.getState();
|
|
1110
1171
|
}
|
|
1111
|
-
const
|
|
1172
|
+
const joined = findJoinedByName(config.joinedSolverNets, netName);
|
|
1173
|
+
const solverType = joined ? solverTypeFromJoinedContract(joined) : undefined;
|
|
1112
1174
|
if (!solverType)
|
|
1113
1175
|
return undefined;
|
|
1114
1176
|
return launchedGeneratorStateBySolverType.get(solverType)?.();
|
|
1115
1177
|
},
|
|
1116
1178
|
getOpenTaskCount: (netName) => {
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1179
|
+
if (!safeAddressForLauncher)
|
|
1180
|
+
return 0;
|
|
1181
|
+
const joined = findJoinedByName(config.joinedSolverNets, netName);
|
|
1182
|
+
const solverType = joined ? solverTypeFromJoinedContract(joined) : undefined;
|
|
1183
|
+
if (!solverType)
|
|
1120
1184
|
return 0;
|
|
1121
1185
|
return sharedStore.countPostedTasksByCreatorAndSolverType({
|
|
1122
1186
|
creatorSafeAddress: safeAddressForLauncher,
|
|
@@ -1327,7 +1391,7 @@ export async function main() {
|
|
|
1327
1391
|
return Number.isFinite(n) && n > 0 ? n : 15_000;
|
|
1328
1392
|
})();
|
|
1329
1393
|
if (isHaltedOnFunding && haltAddress && haltRequired !== null) {
|
|
1330
|
-
const publicClient = createJinnPublicClient(config.
|
|
1394
|
+
const publicClient = createJinnPublicClient(config.rpcUrls, NETWORK_CHAIN);
|
|
1331
1395
|
const schedulePoll = () => {
|
|
1332
1396
|
fundingPollHandle = setTimeout(async () => {
|
|
1333
1397
|
// Guard: if the signal was already fired, stop polling.
|
|
@@ -1425,36 +1489,9 @@ export async function main() {
|
|
|
1425
1489
|
const earningStore = new FleetStateStore(config.earningDir);
|
|
1426
1490
|
const mnemonicForMaster = await decryptMnemonic(await earningStore.loadMnemonicKeystore(), PASSWORD);
|
|
1427
1491
|
const masterAccount = deriveMasterSigner(mnemonicForMaster);
|
|
1428
|
-
const publicClient = createJinnPublicClient(config.
|
|
1492
|
+
const publicClient = createJinnPublicClient(config.rpcUrls, NETWORK_CHAIN);
|
|
1429
1493
|
publicClientForLauncher = publicClient;
|
|
1430
|
-
const masterWallet = createJinnWalletClient(config.
|
|
1431
|
-
// hjex.3: populate the restake callback now that mnemonic is available.
|
|
1432
|
-
if (config.stakingMode === 'standard' && CHAIN_CONFIG.distributorAddress) {
|
|
1433
|
-
const fleetStore = earningStore;
|
|
1434
|
-
restakeCallbackRef.current = async (serviceId) => {
|
|
1435
|
-
try {
|
|
1436
|
-
const state = await fleetStore.load(NETWORK_CHAIN);
|
|
1437
|
-
const svc = state.services.find(s => s.service_id === serviceId);
|
|
1438
|
-
if (!svc)
|
|
1439
|
-
return { ok: false, error: `service_not_found:${serviceId}` };
|
|
1440
|
-
if (!svc.staking_address)
|
|
1441
|
-
return { ok: false, error: 'staking_address_missing' };
|
|
1442
|
-
await recoverEvictedServiceFn({
|
|
1443
|
-
serviceDisplayIndex: Math.max(0, svc.index - 1),
|
|
1444
|
-
serviceId,
|
|
1445
|
-
stakingAddress: svc.staking_address,
|
|
1446
|
-
distributorAddress: CHAIN_CONFIG.distributorAddress,
|
|
1447
|
-
rpcUrl: config.rpcUrl,
|
|
1448
|
-
chain: NETWORK_CHAIN,
|
|
1449
|
-
mnemonic: mnemonicForMaster,
|
|
1450
|
-
});
|
|
1451
|
-
return { ok: true };
|
|
1452
|
-
}
|
|
1453
|
-
catch (err) {
|
|
1454
|
-
return { ok: false, error: err instanceof Error ? err.message : String(err) };
|
|
1455
|
-
}
|
|
1456
|
-
};
|
|
1457
|
-
}
|
|
1494
|
+
const masterWallet = createJinnWalletClient(config.rpcUrls, NETWORK_CHAIN, masterAccount);
|
|
1458
1495
|
const evictionRecovery = config.stakingMode === 'standard' &&
|
|
1459
1496
|
serviceId !== null &&
|
|
1460
1497
|
stakingAddress &&
|
|
@@ -1513,7 +1550,7 @@ export async function main() {
|
|
|
1513
1550
|
// the /build page rendered "Discovery unavailable" permanently.
|
|
1514
1551
|
discoveryApiHolder.current = sharedDiscoveryApi;
|
|
1515
1552
|
const adapter = new MechAdapter({
|
|
1516
|
-
rpcUrl: config.
|
|
1553
|
+
rpcUrl: config.rpcUrls,
|
|
1517
1554
|
mechMarketplaceAddress: MARKETPLACE_ADDRESS,
|
|
1518
1555
|
routerAddress: ROUTER_ADDRESS,
|
|
1519
1556
|
mechContractAddress: mechAddress,
|
|
@@ -1529,12 +1566,18 @@ export async function main() {
|
|
|
1529
1566
|
? {
|
|
1530
1567
|
discoveryApi: sharedDiscoveryApi,
|
|
1531
1568
|
solverNetManifestCids: taskDiscoveryManifestCids,
|
|
1532
|
-
// No explicit `onchainFromBlock` — let `MechAdapter`'s
|
|
1569
|
+
// No explicit `onchainFromBlock` by default — let `MechAdapter`'s
|
|
1533
1570
|
// `DEFAULT_TASK_DISCOVERY_FROM_BLOCK` per-chain default flow
|
|
1534
1571
|
// through. Hardcoding here shadowed the adapter's default and
|
|
1535
1572
|
// re-introduced the ghost-task floor every release; removing the
|
|
1536
1573
|
// shadow makes `adapter.ts` the single source of truth. See gh
|
|
1537
|
-
// #300.
|
|
1574
|
+
// #300. An operator MAY opt in to a recent floor via
|
|
1575
|
+
// `taskDiscoveryOnchainFromBlock` to bound the canonical getLogs
|
|
1576
|
+
// scan (which otherwise parses a large history on the main thread
|
|
1577
|
+
// and can stall the loop) and lean on the indexer DiscoveryAPI.
|
|
1578
|
+
...(config.taskDiscoveryOnchainFromBlock !== undefined
|
|
1579
|
+
? { onchainFromBlock: config.taskDiscoveryOnchainFromBlock }
|
|
1580
|
+
: {}),
|
|
1538
1581
|
...(config.taskDiscoveryAllowedTaskIds?.length
|
|
1539
1582
|
? { allowedTaskIds: config.taskDiscoveryAllowedTaskIds }
|
|
1540
1583
|
: {}),
|
|
@@ -1551,10 +1594,10 @@ export async function main() {
|
|
|
1551
1594
|
const agentChainContracts = agentChain.contracts;
|
|
1552
1595
|
const optimismPortalAddress = agentChainContracts?.portal?.[l1Chain.id]?.address;
|
|
1553
1596
|
const disputeGameFactoryAddress = agentChainContracts?.disputeGameFactory?.[l1Chain.id]?.address;
|
|
1554
|
-
const l2ProofClient = config.
|
|
1555
|
-
? createJinnPublicClient(config.
|
|
1597
|
+
const l2ProofClient = config.l2ProofRpcUrls
|
|
1598
|
+
? createJinnPublicClient(config.l2ProofRpcUrls, NETWORK_CHAIN)
|
|
1556
1599
|
: undefined;
|
|
1557
|
-
const agentClients = createClients(config.
|
|
1600
|
+
const agentClients = createClients(config.rpcUrls, agentPrivateKey, agentChain);
|
|
1558
1601
|
// ── L1 (Sepolia / Ethereum mainnet) clients for cross-chain JINN claim loop ──
|
|
1559
1602
|
// Uses the agent EOA because MockMessenger.owner is the agent on testnet.
|
|
1560
1603
|
// Same key as L2; only the chain differs.
|
|
@@ -1565,10 +1608,10 @@ export async function main() {
|
|
|
1565
1608
|
distributorAddress: JINN_MVI_CONFIG.distributor,
|
|
1566
1609
|
ethereumRpcUrl: config.ethereumRpcUrl,
|
|
1567
1610
|
});
|
|
1568
|
-
const l1ClientsForJinnClaim = shouldWireJinnClaimL1 && config.
|
|
1611
|
+
const l1ClientsForJinnClaim = shouldWireJinnClaimL1 && config.ethereumRpcUrls
|
|
1569
1612
|
? {
|
|
1570
|
-
public: createJinnL1PublicClient(config.
|
|
1571
|
-
wallet: createJinnL1WalletClient(config.
|
|
1613
|
+
public: createJinnL1PublicClient(config.ethereumRpcUrls, config.jinnL1Network),
|
|
1614
|
+
wallet: createJinnL1WalletClient(config.ethereumRpcUrls, config.jinnL1Network, privateKeyToAccount(agentPrivateKey)),
|
|
1572
1615
|
}
|
|
1573
1616
|
: undefined;
|
|
1574
1617
|
const jinnClaimLoopConfig = buildJinnClaimLoopConfig({
|
|
@@ -1688,6 +1731,7 @@ export async function main() {
|
|
|
1688
1731
|
hermesPath: config.hermesPath,
|
|
1689
1732
|
hermesModel: config.hermesModel,
|
|
1690
1733
|
hermesProvider: config.hermesProvider,
|
|
1734
|
+
hermesBaseUrl: config.hermesBaseUrl,
|
|
1691
1735
|
hermesDoctorTimeoutMs: config.hermesDoctorTimeoutMs,
|
|
1692
1736
|
codexPath: config.codexPath,
|
|
1693
1737
|
codexDoctorTimeoutMs: config.codexDoctorTimeoutMs,
|
|
@@ -2029,6 +2073,8 @@ export async function main() {
|
|
|
2029
2073
|
agentEoa: agentEoaAddress,
|
|
2030
2074
|
safeAddress,
|
|
2031
2075
|
agentPrivateKey,
|
|
2076
|
+
ipfsGatewayUrl: config.ipfsGatewayUrl,
|
|
2077
|
+
...(sharedDiscoveryApi ? { discoveryApi: sharedDiscoveryApi } : {}),
|
|
2032
2078
|
},
|
|
2033
2079
|
logger: {
|
|
2034
2080
|
info: (message) => console.log(message),
|
|
@@ -2096,6 +2142,21 @@ export async function main() {
|
|
|
2096
2142
|
console.warn('[main] Corpus disabled (no DiscoveryAPI or on-chain identity registry); ' +
|
|
2097
2143
|
'MCP record lookup and artifact acquisition network branches will be unavailable.');
|
|
2098
2144
|
}
|
|
2145
|
+
const spendCap = buildSpendCapConfig(config, process.env);
|
|
2146
|
+
const aiUnits = buildAiUnitsConfig(config, process.env);
|
|
2147
|
+
if (aiUnits) {
|
|
2148
|
+
// Surface the resolved AI-units cap so an operator inspecting logs can
|
|
2149
|
+
// distinguish the baked-in default (100/2800) from a deliberate
|
|
2150
|
+
// `JINN_AI_UNITS_CEILING_OVERRIDE` raise (e.g. 10000/280000 in CI).
|
|
2151
|
+
// Source reflects the actual outcome: a malformed override falls back
|
|
2152
|
+
// to default and emits its own warn from resolveReferenceCeiling.
|
|
2153
|
+
const overrideSet = typeof process.env['JINN_AI_UNITS_CEILING_OVERRIDE'] === 'string' &&
|
|
2154
|
+
process.env['JINN_AI_UNITS_CEILING_OVERRIDE'].trim() !== '';
|
|
2155
|
+
const matchesDefault = aiUnits.capPerBlock === REFERENCE_CEILING.units_per_block &&
|
|
2156
|
+
aiUnits.capPerWeek === REFERENCE_CEILING.units_per_week;
|
|
2157
|
+
const source = overrideSet && !matchesDefault ? 'env' : 'default';
|
|
2158
|
+
console.log(`[ai-units] cap=${aiUnits.capPerBlock}/${aiUnits.capPerWeek} per (block, week) source=${source}`);
|
|
2159
|
+
}
|
|
2099
2160
|
const daemon = new Daemon({
|
|
2100
2161
|
adapter,
|
|
2101
2162
|
runner,
|
|
@@ -2112,6 +2173,8 @@ export async function main() {
|
|
|
2112
2173
|
creatorSafeAddress: safeAddress,
|
|
2113
2174
|
corpusFactory,
|
|
2114
2175
|
harnessReadinessRegistry,
|
|
2176
|
+
spendCap,
|
|
2177
|
+
aiUnits,
|
|
2115
2178
|
status: {
|
|
2116
2179
|
earningDir: config.earningDir,
|
|
2117
2180
|
rpcUrl: config.rpcUrl,
|
|
@@ -2121,6 +2184,11 @@ export async function main() {
|
|
|
2121
2184
|
tjinnTokenAddress: JINN_MVI_CONFIG.jinn,
|
|
2122
2185
|
tjinnChainId: JINN_MVI_CONFIG.l1ChainId,
|
|
2123
2186
|
tjinnDistributorAddress: JINN_MVI_CONFIG.distributor,
|
|
2187
|
+
// stOLAS L2 distributor — mirrors `CHAIN_CONFIG.distributorAddress`
|
|
2188
|
+
// used to gate the EvictionLoop (issue #651). Threaded through so the
|
|
2189
|
+
// SPA's autoRestake predicate keys off the same on-chain artifact as
|
|
2190
|
+
// the daemon's `evictionCheck` predicate (~line 2520 below).
|
|
2191
|
+
stOlasDistributorAddress: CHAIN_CONFIG.distributorAddress,
|
|
2124
2192
|
network: config.network,
|
|
2125
2193
|
pollIntervalMs: config.pollIntervalMs,
|
|
2126
2194
|
masterEthDailyEstimateWei: config.masterEthDailyEstimateWei,
|
|
@@ -2132,6 +2200,8 @@ export async function main() {
|
|
|
2132
2200
|
engine: config.engine,
|
|
2133
2201
|
config,
|
|
2134
2202
|
configPath: CONFIG_PATH ?? DEFAULT_CONFIG_PATH,
|
|
2203
|
+
spendCaps: spendCap?.caps,
|
|
2204
|
+
aiUnits,
|
|
2135
2205
|
},
|
|
2136
2206
|
rewardClaim: config.rewardClaimIntervalMs > 0
|
|
2137
2207
|
? {
|
|
@@ -2196,6 +2266,7 @@ export async function main() {
|
|
|
2196
2266
|
CHAIN_CONFIG.distributorAddress
|
|
2197
2267
|
? {
|
|
2198
2268
|
intervalMs: config.evictionCheckIntervalMs,
|
|
2269
|
+
reStakeThrottleMs: config.checkpointIntervalMs,
|
|
2199
2270
|
store: earningStore,
|
|
2200
2271
|
chain: NETWORK_CHAIN,
|
|
2201
2272
|
readContract: (opts) => publicClient.readContract(opts),
|
|
@@ -2244,10 +2315,32 @@ export async function main() {
|
|
|
2244
2315
|
}
|
|
2245
2316
|
: undefined,
|
|
2246
2317
|
});
|
|
2247
|
-
// Write pidfile so `jinn stop` can find us.
|
|
2318
|
+
// Write pidfile so `jinn stop` can find us. First, refuse the run if another
|
|
2319
|
+
// daemon already owns this earning directory — see issue #649. The gate
|
|
2320
|
+
// handles all three branches (refuse-and-exit, unlink-stale-and-continue,
|
|
2321
|
+
// proceed); the writeFileSync below MUST stay outside the helper so the
|
|
2322
|
+
// "// DO NOT add store mutations above this line — see #649" invariant is
|
|
2323
|
+
// visible right here at the call site.
|
|
2324
|
+
// Deployment-readiness gate (#958). In a deployment context (JINN_STATE_DIR
|
|
2325
|
+
// set or a container/compose auth context) this fails loud and exits when a
|
|
2326
|
+
// hard check fails (writable-volume, state-on-volume, agent-cli-non-root).
|
|
2327
|
+
// Outside a deployment context it only logs advisories — a plain local
|
|
2328
|
+
// `jinn run` is NEVER newly gated here. Runs before the pidfile gate so an
|
|
2329
|
+
// unfit environment refuses before we touch the pidfile.
|
|
2330
|
+
await applyDeploymentReadinessGate({
|
|
2331
|
+
stateDir: config.stateDir,
|
|
2332
|
+
earningDir: config.earningDir,
|
|
2333
|
+
relayerUrl: undefined,
|
|
2334
|
+
runtimeMode: config.runtimeMode,
|
|
2335
|
+
}, {
|
|
2336
|
+
env: process.env,
|
|
2337
|
+
getuid: typeof process.getuid === 'function' ? process.getuid.bind(process) : undefined,
|
|
2338
|
+
detectAuthContext,
|
|
2339
|
+
fetch,
|
|
2340
|
+
});
|
|
2248
2341
|
const pidPath = join(config.earningDir, 'daemon.pid');
|
|
2249
|
-
|
|
2250
|
-
|
|
2342
|
+
applyPidfileLivenessGate(pidPath);
|
|
2343
|
+
writeFileSyncMain(pidPath, String(process.pid) + '\n', 'utf-8');
|
|
2251
2344
|
const removePidfile = () => {
|
|
2252
2345
|
try {
|
|
2253
2346
|
unlinkSync(pidPath);
|
|
@@ -2285,6 +2378,8 @@ export async function main() {
|
|
|
2285
2378
|
catch {
|
|
2286
2379
|
/* ignore */
|
|
2287
2380
|
}
|
|
2381
|
+
// Issue #420: flush + close the rotating daemon file logger.
|
|
2382
|
+
closeFileLogger();
|
|
2288
2383
|
}
|
|
2289
2384
|
console.log('[main] Shutdown complete.');
|
|
2290
2385
|
process.exit(exitCode);
|