@jinn-network/client 0.1.5 → 0.1.6-canary.0b4ff7f9
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/CHANGELOG.md +98 -0
- package/dist/adapters/mech/adapter.js +7 -7
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/ipfs-pinfile.d.ts +22 -0
- package/dist/adapters/mech/ipfs-pinfile.js +54 -0
- package/dist/adapters/mech/ipfs-pinfile.js.map +1 -0
- package/dist/adapters/mech/ipfs.d.ts +1 -0
- package/dist/adapters/mech/ipfs.js +24 -1
- package/dist/adapters/mech/ipfs.js.map +1 -1
- package/dist/api/bootstrap-endpoint.js +2 -0
- package/dist/api/bootstrap-endpoint.js.map +1 -1
- package/dist/api/discovery-endpoint.d.ts +18 -0
- package/dist/api/discovery-endpoint.js +65 -0
- package/dist/api/discovery-endpoint.js.map +1 -0
- package/dist/api/fleet-build.d.ts +7 -0
- package/dist/api/fleet-build.js +6 -1
- package/dist/api/fleet-build.js.map +1 -1
- package/dist/api/harness-readiness-endpoint.d.ts +13 -0
- package/dist/api/harness-readiness-endpoint.js +15 -0
- package/dist/api/harness-readiness-endpoint.js.map +1 -0
- package/dist/api/hermes-doctor-endpoint.d.ts +26 -0
- package/dist/api/hermes-doctor-endpoint.js +29 -0
- package/dist/api/hermes-doctor-endpoint.js.map +1 -0
- package/dist/api/server.d.ts +21 -0
- package/dist/api/server.js +22 -0
- package/dist/api/server.js.map +1 -1
- package/dist/build-info.json +4 -4
- package/dist/build-meta.json +1 -1
- package/dist/cli/commands/create.d.ts +5 -3
- package/dist/cli/commands/create.js +101 -36
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/solver-nets.d.ts +19 -0
- package/dist/cli/commands/solver-nets.js +140 -2
- package/dist/cli/commands/solver-nets.js.map +1 -1
- package/dist/cli/commands/solver-plugins-publish.d.ts +31 -0
- package/dist/cli/commands/solver-plugins-publish.js +169 -0
- package/dist/cli/commands/solver-plugins-publish.js.map +1 -0
- package/dist/cli/commands/solver-plugins-revoke.d.ts +15 -0
- package/dist/cli/commands/solver-plugins-revoke.js +91 -0
- package/dist/cli/commands/solver-plugins-revoke.js.map +1 -0
- package/dist/cli/commands/solver-plugins.d.ts +50 -6
- package/dist/cli/commands/solver-plugins.js +205 -68
- package/dist/cli/commands/solver-plugins.js.map +1 -1
- package/dist/config.d.ts +27 -0
- package/dist/config.js +24 -0
- package/dist/config.js.map +1 -1
- package/dist/conformance/checks/hash-signature.js +6 -2
- package/dist/conformance/checks/hash-signature.js.map +1 -1
- package/dist/conformance/checks/payload.js +4 -2
- package/dist/conformance/checks/payload.js.map +1 -1
- package/dist/conformance/checks/verdict.d.ts +10 -10
- package/dist/conformance/checks/verdict.js +16 -15
- package/dist/conformance/checks/verdict.js.map +1 -1
- package/dist/conformance/harness.d.ts +1 -1
- package/dist/conformance/harness.js +16 -9
- package/dist/conformance/harness.js.map +1 -1
- package/dist/conformance/types.d.ts +10 -3
- package/dist/conformance/types.js.map +1 -1
- package/dist/corpus/acquire.d.ts +1 -3
- package/dist/corpus/acquire.js.map +1 -1
- package/dist/corpus/envelope-projection.d.ts +1 -1
- package/dist/corpus/envelope-projection.js +14 -7
- package/dist/corpus/envelope-projection.js.map +1 -1
- package/dist/corpus/index.d.ts +2 -1
- package/dist/corpus/index.js.map +1 -1
- package/dist/corpus/prediction-brier-scoreboard-report.js +1 -1
- package/dist/corpus/prediction-brier-scoreboard-report.js.map +1 -1
- package/dist/corpus/prediction-brier-scoreboard.js +3 -1
- package/dist/corpus/prediction-brier-scoreboard.js.map +1 -1
- package/dist/corpus/types.d.ts +2 -2
- package/dist/daemon/daemon.d.ts +17 -1
- package/dist/daemon/daemon.js +15 -0
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/freeze-fence.js +6 -3
- package/dist/daemon/freeze-fence.js.map +1 -1
- package/dist/daemon/readiness-gate.d.ts +30 -0
- package/dist/daemon/readiness-gate.js +31 -0
- package/dist/daemon/readiness-gate.js.map +1 -0
- package/dist/dashboard/assets/{index-D_NMfDfV.css → index-B4sTrvQD.css} +1 -1
- package/dist/dashboard/assets/index-C5j0ZJWS.js +140 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/discovery/http.js +121 -0
- package/dist/discovery/http.js.map +1 -1
- package/dist/discovery/onchain.js +11 -0
- package/dist/discovery/onchain.js.map +1 -1
- package/dist/discovery/types.d.ts +112 -0
- package/dist/discovery/types.js.map +1 -1
- package/dist/discovery/with-fallback.js +9 -0
- package/dist/discovery/with-fallback.js.map +1 -1
- package/dist/earning/agent-wallet-binding.d.ts +20 -1
- package/dist/earning/agent-wallet-binding.js +54 -16
- package/dist/earning/agent-wallet-binding.js.map +1 -1
- package/dist/earning/bootstrap.d.ts +55 -0
- package/dist/earning/bootstrap.js +376 -20
- package/dist/earning/bootstrap.js.map +1 -1
- package/dist/earning/store.js +48 -1
- package/dist/earning/store.js.map +1 -1
- package/dist/earning/types.d.ts +30 -0
- package/dist/earning/types.js +37 -0
- package/dist/earning/types.js.map +1 -1
- package/dist/erc8004/abis.d.ts +64 -0
- package/dist/erc8004/abis.js +48 -0
- package/dist/erc8004/abis.js.map +1 -1
- package/dist/erc8004/plugin-registry.d.ts +102 -0
- package/dist/erc8004/plugin-registry.js +165 -0
- package/dist/erc8004/plugin-registry.js.map +1 -0
- package/dist/harnesses/engine/engine.js +15 -3
- package/dist/harnesses/engine/engine.js.map +1 -1
- package/dist/harnesses/engine/envelope-assembly.d.ts +2 -2
- package/dist/harnesses/engine/envelope-assembly.js +4 -2
- package/dist/harnesses/engine/envelope-assembly.js.map +1 -1
- package/dist/harnesses/freeze.d.ts +4 -1
- package/dist/harnesses/freeze.js +12 -2
- package/dist/harnesses/freeze.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction/index.d.ts +4 -1
- package/dist/harnesses/impls/claude-mcp-prediction/index.js +7 -2
- package/dist/harnesses/impls/claude-mcp-prediction/index.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction-apy/index.d.ts +4 -1
- package/dist/harnesses/impls/claude-mcp-prediction-apy/index.js +7 -2
- package/dist/harnesses/impls/claude-mcp-prediction-apy/index.js.map +1 -1
- package/dist/harnesses/impls/evaluation-context.d.ts +15 -4
- package/dist/harnesses/impls/evaluation-context.js +24 -8
- package/dist/harnesses/impls/evaluation-context.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/adapter.d.ts +34 -0
- package/dist/harnesses/impls/hermes-agent/adapter.js +184 -0
- package/dist/harnesses/impls/hermes-agent/adapter.js.map +1 -0
- package/dist/harnesses/impls/hermes-agent/bootstrap.d.ts +18 -0
- package/dist/harnesses/impls/hermes-agent/bootstrap.js +231 -0
- package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -0
- package/dist/harnesses/impls/hermes-agent/config-builder.d.ts +49 -0
- package/dist/harnesses/impls/hermes-agent/config-builder.js +104 -0
- package/dist/harnesses/impls/hermes-agent/config-builder.js.map +1 -0
- package/dist/harnesses/impls/hermes-agent/harness.d.ts +30 -0
- package/dist/harnesses/impls/hermes-agent/harness.js +52 -0
- package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -0
- package/dist/harnesses/impls/hermes-agent/index.d.ts +5 -0
- package/dist/harnesses/impls/hermes-agent/index.js +7 -0
- package/dist/harnesses/impls/hermes-agent/index.js.map +1 -0
- package/dist/harnesses/impls/hermes-agent/prompt.d.ts +15 -0
- package/dist/harnesses/impls/hermes-agent/prompt.js +37 -0
- package/dist/harnesses/impls/hermes-agent/prompt.js.map +1 -0
- package/dist/harnesses/impls/index.d.ts +6 -0
- package/dist/harnesses/impls/index.js +17 -4
- package/dist/harnesses/impls/index.js.map +1 -1
- package/dist/harnesses/impls/learner/adapters/claude-code.js.map +1 -0
- package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/codex-code.js +13 -34
- package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -0
- package/dist/harnesses/impls/learner/adapters/codex-workspace.js.map +1 -0
- package/dist/harnesses/impls/{claude-code-learner → learner}/harness.d.ts +9 -3
- package/dist/harnesses/impls/{claude-code-learner → learner}/harness.js +24 -1
- package/dist/harnesses/impls/learner/harness.js.map +1 -0
- package/dist/harnesses/impls/{claude-code-learner → learner}/harvest.js +15 -3
- package/dist/harnesses/impls/learner/harvest.js.map +1 -0
- package/dist/harnesses/impls/{claude-code-learner → learner}/index.d.ts +5 -5
- package/dist/harnesses/impls/{claude-code-learner → learner}/index.js +4 -4
- package/dist/harnesses/impls/learner/index.js.map +1 -0
- package/dist/harnesses/impls/{claude-code-learner → learner}/plugin-path.d.ts +4 -4
- package/dist/harnesses/impls/{claude-code-learner → learner}/plugin-path.js +7 -7
- package/dist/harnesses/impls/learner/plugin-path.js.map +1 -0
- package/dist/harnesses/impls/{claude-code-learner → learner}/restoration-patch.js +3 -1
- package/dist/harnesses/impls/learner/restoration-patch.js.map +1 -0
- package/dist/harnesses/impls/learner/test-utils/fake-plugin-outputs.js.map +1 -0
- package/dist/harnesses/impls/learner/test-utils/noop-adapter.js.map +1 -0
- package/dist/harnesses/impls/{claude-code-learner → learner}/types.d.ts +12 -2
- package/dist/harnesses/impls/learner/types.js.map +1 -0
- package/dist/harnesses/impls/portfolio-v0-evaluator/index.js +13 -12
- package/dist/harnesses/impls/portfolio-v0-evaluator/index.js.map +1 -1
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.js +7 -7
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.js.map +1 -1
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/parse-submission.d.ts +3 -3
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/parse-submission.js +7 -6
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/parse-submission.js.map +1 -1
- package/dist/harnesses/impls/prediction-v0-evaluator/checks/integrity.js +1 -1
- package/dist/harnesses/impls/prediction-v0-evaluator/checks/integrity.js.map +1 -1
- package/dist/harnesses/impls/prediction-v0-evaluator/index.js +11 -10
- package/dist/harnesses/impls/prediction-v0-evaluator/index.js.map +1 -1
- package/dist/harnesses/impls/prediction-v1-evaluator/index.js +11 -10
- package/dist/harnesses/impls/prediction-v1-evaluator/index.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.d.ts +1 -0
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js +10 -2
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.d.ts +24 -5
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +104 -4
- 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 +9 -0
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js +25 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js.map +1 -1
- package/dist/harnesses/names.d.ts +1 -0
- package/dist/harnesses/names.js +3 -0
- package/dist/harnesses/names.js.map +1 -1
- package/dist/harnesses/readiness-registry.d.ts +48 -0
- package/dist/harnesses/readiness-registry.js +136 -0
- package/dist/harnesses/readiness-registry.js.map +1 -0
- package/dist/harnesses/types.d.ts +7 -0
- package/dist/main.d.ts +14 -0
- package/dist/main.js +70 -35
- package/dist/main.js.map +1 -1
- package/dist/mcp/server.js +14 -13
- package/dist/mcp/server.js.map +1 -1
- package/dist/preflight/claude-auth.d.ts +18 -0
- package/dist/preflight/claude-auth.js +38 -0
- package/dist/preflight/claude-auth.js.map +1 -1
- package/dist/scripts/donation-consumption-acceptance.js +1 -1
- package/dist/scripts/donation-consumption-acceptance.js.map +1 -1
- package/dist/scripts/swe-rebench-v2-known-bad.json +12 -0
- package/dist/scripts/swe-rebench-v2-seed-pool.json +26 -0
- package/dist/solver-types/_swe-rebench-v2-substrate.d.ts +52 -0
- package/dist/solver-types/_swe-rebench-v2-substrate.js +76 -0
- package/dist/solver-types/_swe-rebench-v2-substrate.js.map +1 -0
- package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +38 -12
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js +136 -27
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
- package/dist/solver-types/swe-rebench-v2-auto.d.ts +6 -0
- package/dist/solver-types/swe-rebench-v2-auto.js.map +1 -1
- package/dist/solver-types/swe-rebench-v2.d.ts +1 -0
- package/dist/solver-types/swe-rebench-v2.js +19 -6
- package/dist/solver-types/swe-rebench-v2.js.map +1 -1
- package/dist/store/store.js +12 -4
- package/dist/store/store.js.map +1 -1
- package/dist/templates/plugins/runtime-plugin/.mcp.json.tmpl +8 -0
- package/dist/templates/plugins/runtime-plugin/README.md.tmpl +30 -0
- package/dist/templates/plugins/runtime-plugin/gitignore.tmpl +3 -0
- package/dist/templates/plugins/runtime-plugin/jinn.plugin.json.tmpl +21 -0
- package/dist/templates/plugins/runtime-plugin/mcp/server.mjs.tmpl +33 -0
- package/dist/templates/plugins/runtime-plugin/package.json.tmpl +15 -0
- package/dist/templates/plugins/runtime-plugin/test/plugin.test.ts.tmpl +35 -0
- package/dist/templates/plugins/runtime-plugin/tsconfig.json.tmpl +11 -0
- package/dist/templates/plugins/solver-type-plugin/README.md.tmpl +35 -0
- package/dist/templates/plugins/solver-type-plugin/gitignore.tmpl +3 -0
- package/dist/templates/plugins/solver-type-plugin/jinn.plugin.json.tmpl +11 -0
- package/dist/templates/plugins/solver-type-plugin/package.json.tmpl +15 -0
- package/dist/templates/plugins/solver-type-plugin/skills/example/SKILL.md.tmpl +10 -0
- package/dist/templates/plugins/solver-type-plugin/test/plugin.test.ts.tmpl +25 -0
- package/dist/templates/plugins/solver-type-plugin/tsconfig.json.tmpl +11 -0
- package/dist/types/envelope.d.ts +28 -21
- package/dist/types/envelope.js +8 -3
- package/dist/types/envelope.js.map +1 -1
- package/dist/types/payloads/index.d.ts +2 -2
- package/dist/types/payloads/index.js +13 -12
- package/dist/types/payloads/index.js.map +1 -1
- package/dist/types/payloads/portfolio-v0.d.ts +60 -10
- package/dist/types/payloads/portfolio-v0.js +16 -6
- package/dist/types/payloads/portfolio-v0.js.map +1 -1
- package/dist/types/payloads/prediction-apy-v0.d.ts +52 -10
- package/dist/types/payloads/prediction-apy-v0.js +16 -6
- package/dist/types/payloads/prediction-apy-v0.js.map +1 -1
- package/dist/types/payloads/prediction-v0.d.ts +49 -10
- package/dist/types/payloads/prediction-v0.js +16 -6
- package/dist/types/payloads/prediction-v0.js.map +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/prediction-v1.d.ts +45 -6
- package/dist/vendor/@jinn-network/sdk/dist/payloads/prediction-v1.js +16 -6
- package/dist/x402/handler.js +51 -20
- package/dist/x402/handler.js.map +1 -1
- package/package.json +8 -3
- package/plugins/swe-rebench-v2-diffmin/.claude-plugin/plugin.json +5 -0
- package/plugins/swe-rebench-v2-diffmin/.mcp.json +8 -0
- package/plugins/swe-rebench-v2-diffmin/README.md +69 -0
- package/plugins/swe-rebench-v2-diffmin/jinn.plugin.json +12 -0
- package/plugins/swe-rebench-v2-diffmin/mcp/diff-stats-server.mjs +72 -0
- package/plugins/swe-rebench-v2-diffmin/mcp/diff-stats.mjs +48 -0
- package/plugins/swe-rebench-v2-diffmin/package.json +19 -0
- package/plugins/swe-rebench-v2-diffmin/skills/diffmin/SKILL.md +116 -0
- package/plugins/swe-rebench-v2-diffmin/skills/test-map/SKILL.md +126 -0
- package/plugins/swe-rebench-v2-diffmin/test/diff-stats.test.ts +62 -0
- package/plugins/swe-rebench-v2-diffmin/test/manifest.test.ts +53 -0
- package/plugins/swe-rebench-v2-diffmin/tsconfig.json +12 -0
- package/plugins/swe-rebench-v2-runtime/README.md +13 -0
- package/plugins/swe-rebench-v2-runtime/skills/orient/SKILL.md +7 -3
- package/plugins/swe-rebench-v2-runtime/skills/plan/SKILL.md +6 -17
- package/templates/plugins/runtime-plugin/.mcp.json.tmpl +8 -0
- package/templates/plugins/runtime-plugin/README.md.tmpl +30 -0
- package/templates/plugins/runtime-plugin/gitignore.tmpl +3 -0
- package/templates/plugins/runtime-plugin/jinn.plugin.json.tmpl +21 -0
- package/templates/plugins/runtime-plugin/mcp/server.mjs.tmpl +33 -0
- package/templates/plugins/runtime-plugin/package.json.tmpl +15 -0
- package/templates/plugins/runtime-plugin/test/plugin.test.ts.tmpl +35 -0
- package/templates/plugins/runtime-plugin/tsconfig.json.tmpl +11 -0
- package/templates/plugins/solver-type-plugin/README.md.tmpl +35 -0
- package/templates/plugins/solver-type-plugin/gitignore.tmpl +3 -0
- package/templates/plugins/solver-type-plugin/jinn.plugin.json.tmpl +11 -0
- package/templates/plugins/solver-type-plugin/package.json.tmpl +15 -0
- package/templates/plugins/solver-type-plugin/skills/example/SKILL.md.tmpl +10 -0
- package/templates/plugins/solver-type-plugin/test/plugin.test.ts.tmpl +25 -0
- package/templates/plugins/solver-type-plugin/tsconfig.json.tmpl +11 -0
- package/dist/dashboard/assets/index-BjtltOGc.js +0 -76
- package/dist/harnesses/impls/claude-code-learner/adapters/claude-code.js.map +0 -1
- package/dist/harnesses/impls/claude-code-learner/adapters/codex-code.js.map +0 -1
- package/dist/harnesses/impls/claude-code-learner/adapters/codex-workspace.js.map +0 -1
- package/dist/harnesses/impls/claude-code-learner/harness.js.map +0 -1
- package/dist/harnesses/impls/claude-code-learner/harvest.js.map +0 -1
- package/dist/harnesses/impls/claude-code-learner/index.js.map +0 -1
- package/dist/harnesses/impls/claude-code-learner/plugin-path.js.map +0 -1
- package/dist/harnesses/impls/claude-code-learner/restoration-patch.js.map +0 -1
- package/dist/harnesses/impls/claude-code-learner/test-utils/fake-plugin-outputs.js.map +0 -1
- package/dist/harnesses/impls/claude-code-learner/test-utils/noop-adapter.js.map +0 -1
- package/dist/harnesses/impls/claude-code-learner/types.js.map +0 -1
- package/dist/preflight/claude-required.d.ts +0 -8
- package/dist/preflight/claude-required.js +0 -17
- package/dist/preflight/claude-required.js.map +0 -1
- /package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/claude-code.d.ts +0 -0
- /package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/claude-code.js +0 -0
- /package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/codex-code.d.ts +0 -0
- /package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/codex-workspace.d.ts +0 -0
- /package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/codex-workspace.js +0 -0
- /package/dist/harnesses/impls/{claude-code-learner → learner}/harvest.d.ts +0 -0
- /package/dist/harnesses/impls/{claude-code-learner → learner}/restoration-patch.d.ts +0 -0
- /package/dist/harnesses/impls/{claude-code-learner → learner}/test-utils/fake-plugin-outputs.d.ts +0 -0
- /package/dist/harnesses/impls/{claude-code-learner → learner}/test-utils/fake-plugin-outputs.js +0 -0
- /package/dist/harnesses/impls/{claude-code-learner → learner}/test-utils/noop-adapter.d.ts +0 -0
- /package/dist/harnesses/impls/{claude-code-learner → learner}/test-utils/noop-adapter.js +0 -0
- /package/dist/harnesses/impls/{claude-code-learner → learner}/types.js +0 -0
- /package/plugins/{claude-code-learner → learner}/.claude-plugin/plugin.json +0 -0
- /package/plugins/{claude-code-learner → learner}/.codex-plugin/plugin.json +0 -0
- /package/plugins/{claude-code-learner → learner}/AGENTS.md +0 -0
- /package/plugins/{claude-code-learner → learner}/CLAUDE.md +0 -0
- /package/plugins/{claude-code-learner → learner}/README.md +0 -0
- /package/plugins/{claude-code-learner → learner}/hooks/hooks.json +0 -0
- /package/plugins/{claude-code-learner → learner}/hooks/session-start +0 -0
- /package/plugins/{claude-code-learner → learner}/skills/learn/SKILL.md +0 -0
- /package/plugins/{claude-code-learner → learner}/skills/learn/analyst-prompt.md +0 -0
- /package/plugins/{claude-code-learner → learner}/skills/learn/consolidator-prompt.md +0 -0
- /package/plugins/{claude-code-learner → learner}/skills/learn/explorer-prompt.md +0 -0
- /package/plugins/{claude-code-learner → learner}/skills/learn/planner-prompt.md +0 -0
- /package/plugins/{claude-code-learner → learner}/skills/learn/promoter-prompt.md +0 -0
- /package/plugins/{claude-code-learner → learner}/skills/learn/step-worker-prompt.md +0 -0
- /package/plugins/{claude-code-learner → learner}/skills/learn/strategist-prompt.md +0 -0
package/dist/harnesses/names.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export const CLAUDE_CODE_HARNESS = 'claude-code';
|
|
2
2
|
export const CODEX_HARNESS = 'codex';
|
|
3
|
+
export const HERMES_AGENT_HARNESS = 'hermes-agent';
|
|
3
4
|
const HARNESS_ALIASES = {
|
|
4
5
|
'claude-code-learner': CLAUDE_CODE_HARNESS,
|
|
5
6
|
'codex-code-learner': CODEX_HARNESS,
|
|
@@ -19,6 +20,8 @@ export function harnessStateDirName(name) {
|
|
|
19
20
|
return 'claude-code-learner';
|
|
20
21
|
if (canonical === CODEX_HARNESS)
|
|
21
22
|
return 'codex-code-learner';
|
|
23
|
+
if (canonical === HERMES_AGENT_HARNESS)
|
|
24
|
+
return 'hermes-agent';
|
|
22
25
|
return canonical;
|
|
23
26
|
}
|
|
24
27
|
//# sourceMappingURL=names.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"names.js","sourceRoot":"","sources":["../../src/harnesses/names.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAAC;AACjD,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"names.js","sourceRoot":"","sources":["../../src/harnesses/names.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAAC;AACjD,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AACrC,MAAM,CAAC,MAAM,oBAAoB,GAAG,cAAc,CAAC;AAEnD,MAAM,eAAe,GAA2B;IAC9C,qBAAqB,EAAE,mBAAmB;IAC1C,oBAAoB,EAAE,aAAa;CACpC,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,SAAiB;IACrE,OAAO,oBAAoB,CAAC,SAAS,CAAC,KAAK,oBAAoB,CAAC,SAAS,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAwB;IAC9D,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,SAAS,KAAK,mBAAmB;QAAE,OAAO,qBAAqB,CAAC;IACpE,IAAI,SAAS,KAAK,aAAa;QAAE,OAAO,oBAAoB,CAAC;IAC7D,IAAI,SAAS,KAAK,oBAAoB;QAAE,OAAO,cAAc,CAAC;IAC9D,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HarnessReadinessRegistry — per-harness Harness.isReady() composition for the
|
|
3
|
+
* daemon's claim loops and the SPA's per-harness setup cards.
|
|
4
|
+
*
|
|
5
|
+
* See docs/superpowers/specs/2026-05-15-per-harness-auth-design.md.
|
|
6
|
+
*
|
|
7
|
+
* Single writer: the background refresh tick. Readers (claim loops + the
|
|
8
|
+
* /v1/harnesses/readiness endpoint) read the cached snapshot lock-free.
|
|
9
|
+
* Bounded staleness = tickIntervalMs.
|
|
10
|
+
*/
|
|
11
|
+
import type { Harness, ReadyStatus } from './types.js';
|
|
12
|
+
export interface JoinedHarnessSpec {
|
|
13
|
+
harnessName: string;
|
|
14
|
+
roles: Array<'solver' | 'evaluator'>;
|
|
15
|
+
}
|
|
16
|
+
export interface HarnessReadinessSnapshot {
|
|
17
|
+
lastRefreshedAt: string;
|
|
18
|
+
harnesses: Array<{
|
|
19
|
+
harnessName: string;
|
|
20
|
+
manifestCids: string[];
|
|
21
|
+
ready: boolean;
|
|
22
|
+
reason?: string;
|
|
23
|
+
nextStep?: ReadyStatus['nextStep'];
|
|
24
|
+
}>;
|
|
25
|
+
}
|
|
26
|
+
export interface HarnessReadinessRegistryOptions {
|
|
27
|
+
/** Harness instances indexed by Harness.name. */
|
|
28
|
+
harnessesByName: Record<string, Harness>;
|
|
29
|
+
/** joinedSolverNets shape, narrowed to harness lookup. */
|
|
30
|
+
joinedHarnessesByCid: Record<string, JoinedHarnessSpec>;
|
|
31
|
+
/** Background refresh interval (ms). Default 4000 (matches existing Claude auth poll cadence). */
|
|
32
|
+
tickIntervalMs?: number;
|
|
33
|
+
/** Per-isReady() timeout (ms). Default 5000. */
|
|
34
|
+
isReadyTimeoutMs?: number;
|
|
35
|
+
}
|
|
36
|
+
export declare class HarnessReadinessRegistry {
|
|
37
|
+
private readonly opts;
|
|
38
|
+
private snapshot;
|
|
39
|
+
private timer;
|
|
40
|
+
private refreshInFlight;
|
|
41
|
+
constructor(opts: HarnessReadinessRegistryOptions);
|
|
42
|
+
start(): void;
|
|
43
|
+
stop(): void;
|
|
44
|
+
getSnapshot(): HarnessReadinessSnapshot;
|
|
45
|
+
isReadyForClaim(manifestCid: string): ReadyStatus;
|
|
46
|
+
refreshNow(): Promise<void>;
|
|
47
|
+
private _doRefresh;
|
|
48
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HarnessReadinessRegistry — per-harness Harness.isReady() composition for the
|
|
3
|
+
* daemon's claim loops and the SPA's per-harness setup cards.
|
|
4
|
+
*
|
|
5
|
+
* See docs/superpowers/specs/2026-05-15-per-harness-auth-design.md.
|
|
6
|
+
*
|
|
7
|
+
* Single writer: the background refresh tick. Readers (claim loops + the
|
|
8
|
+
* /v1/harnesses/readiness endpoint) read the cached snapshot lock-free.
|
|
9
|
+
* Bounded staleness = tickIntervalMs.
|
|
10
|
+
*/
|
|
11
|
+
const DEFAULT_TICK_INTERVAL_MS = 4_000;
|
|
12
|
+
const DEFAULT_IS_READY_TIMEOUT_MS = 5_000;
|
|
13
|
+
export class HarnessReadinessRegistry {
|
|
14
|
+
opts;
|
|
15
|
+
snapshot = {
|
|
16
|
+
lastRefreshedAt: new Date(0).toISOString(),
|
|
17
|
+
harnesses: [],
|
|
18
|
+
};
|
|
19
|
+
timer = null;
|
|
20
|
+
refreshInFlight = false;
|
|
21
|
+
constructor(opts) {
|
|
22
|
+
this.opts = {
|
|
23
|
+
tickIntervalMs: opts.tickIntervalMs ?? DEFAULT_TICK_INTERVAL_MS,
|
|
24
|
+
isReadyTimeoutMs: opts.isReadyTimeoutMs ?? DEFAULT_IS_READY_TIMEOUT_MS,
|
|
25
|
+
harnessesByName: opts.harnessesByName,
|
|
26
|
+
joinedHarnessesByCid: opts.joinedHarnessesByCid,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
start() {
|
|
30
|
+
if (this.timer)
|
|
31
|
+
return;
|
|
32
|
+
this.timer = setInterval(() => { void this.refreshNow(); }, this.opts.tickIntervalMs);
|
|
33
|
+
}
|
|
34
|
+
stop() {
|
|
35
|
+
if (this.timer) {
|
|
36
|
+
clearInterval(this.timer);
|
|
37
|
+
this.timer = null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
getSnapshot() {
|
|
41
|
+
return this.snapshot;
|
|
42
|
+
}
|
|
43
|
+
isReadyForClaim(manifestCid) {
|
|
44
|
+
const joined = this.opts.joinedHarnessesByCid[manifestCid];
|
|
45
|
+
if (!joined) {
|
|
46
|
+
return {
|
|
47
|
+
ready: false,
|
|
48
|
+
reason: `manifestCid ${manifestCid} not in joinedSolverNets`,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
const entry = this.snapshot.harnesses.find((h) => h.harnessName === joined.harnessName);
|
|
52
|
+
if (!entry) {
|
|
53
|
+
return { ready: false, reason: 'readiness snapshot not yet populated' };
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
ready: entry.ready,
|
|
57
|
+
reason: entry.reason,
|
|
58
|
+
nextStep: entry.nextStep,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
async refreshNow() {
|
|
62
|
+
if (this.refreshInFlight)
|
|
63
|
+
return;
|
|
64
|
+
this.refreshInFlight = true;
|
|
65
|
+
try {
|
|
66
|
+
await this._doRefresh();
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
this.refreshInFlight = false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async _doRefresh() {
|
|
73
|
+
// Group joined entries by harnessName so we only call isReady() once per harness.
|
|
74
|
+
const harnessToCids = new Map();
|
|
75
|
+
for (const [cid, joined] of Object.entries(this.opts.joinedHarnessesByCid)) {
|
|
76
|
+
const list = harnessToCids.get(joined.harnessName) ?? [];
|
|
77
|
+
list.push(cid);
|
|
78
|
+
harnessToCids.set(joined.harnessName, list);
|
|
79
|
+
}
|
|
80
|
+
const results = await Promise.all(Array.from(harnessToCids.entries()).map(async ([name, cids]) => {
|
|
81
|
+
const harness = this.opts.harnessesByName[name];
|
|
82
|
+
if (!harness) {
|
|
83
|
+
return {
|
|
84
|
+
harnessName: name,
|
|
85
|
+
manifestCids: cids,
|
|
86
|
+
ready: false,
|
|
87
|
+
reason: `harness ${name} not registered in this daemon build`,
|
|
88
|
+
nextStep: {
|
|
89
|
+
description: 'Upgrade daemon or change SolverNet harness selection',
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
if (!harness.isReady) {
|
|
94
|
+
// No isReady → treat as always-ready (matches existing default).
|
|
95
|
+
return {
|
|
96
|
+
harnessName: name,
|
|
97
|
+
manifestCids: cids,
|
|
98
|
+
ready: true,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
let timeoutHandle;
|
|
103
|
+
const status = await Promise.race([
|
|
104
|
+
harness.isReady({ solverType: '*' }),
|
|
105
|
+
new Promise((_, reject) => {
|
|
106
|
+
timeoutHandle = setTimeout(() => reject(new Error('isReady timed out')), this.opts.isReadyTimeoutMs);
|
|
107
|
+
}),
|
|
108
|
+
]).finally(() => {
|
|
109
|
+
if (timeoutHandle !== undefined)
|
|
110
|
+
clearTimeout(timeoutHandle);
|
|
111
|
+
});
|
|
112
|
+
return {
|
|
113
|
+
harnessName: name,
|
|
114
|
+
manifestCids: cids,
|
|
115
|
+
ready: status.ready,
|
|
116
|
+
reason: status.reason,
|
|
117
|
+
nextStep: status.nextStep,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
122
|
+
return {
|
|
123
|
+
harnessName: name,
|
|
124
|
+
manifestCids: cids,
|
|
125
|
+
ready: false,
|
|
126
|
+
reason: `isReady threw: ${msg}`,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}));
|
|
130
|
+
this.snapshot = {
|
|
131
|
+
lastRefreshedAt: new Date().toISOString(),
|
|
132
|
+
harnesses: results,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=readiness-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readiness-registry.js","sourceRoot":"","sources":["../../src/harnesses/readiness-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -210,6 +210,13 @@ export interface Harness {
|
|
|
210
210
|
name: string;
|
|
211
211
|
/** semver */
|
|
212
212
|
version: string;
|
|
213
|
+
/**
|
|
214
|
+
* Optional implStateDir paths that are runtime-only and should not contribute
|
|
215
|
+
* to the frozen-mode state digest. Use this for generated credentials,
|
|
216
|
+
* binaries, or per-task config that a harness needs in ctx.implStateDir but
|
|
217
|
+
* that is not part of its learning/code surface.
|
|
218
|
+
*/
|
|
219
|
+
freezeStateHashIgnore?: readonly string[];
|
|
213
220
|
/**
|
|
214
221
|
* Return true if this Harness should handle the given (solverType, role) pair.
|
|
215
222
|
*
|
package/dist/main.d.ts
CHANGED
|
@@ -19,6 +19,9 @@
|
|
|
19
19
|
* jinn run
|
|
20
20
|
*/
|
|
21
21
|
import { type ErrorEnvelope } from './errors/envelope.js';
|
|
22
|
+
import type { Harness } from './harnesses/types.js';
|
|
23
|
+
import { HarnessReadinessRegistry } from './harnesses/readiness-registry.js';
|
|
24
|
+
import type { JinnConfig } from './config.js';
|
|
22
25
|
export interface DaemonStartupInfo {
|
|
23
26
|
schemaVersion: 1;
|
|
24
27
|
generatedAt: string;
|
|
@@ -45,3 +48,14 @@ export interface SetupHaltedInfo {
|
|
|
45
48
|
error: ErrorEnvelope;
|
|
46
49
|
}
|
|
47
50
|
export declare function main(): Promise<DaemonStartupInfo | SetupHaltedInfo | void>;
|
|
51
|
+
/**
|
|
52
|
+
* Builds a HarnessReadinessRegistry from the harness list returned by
|
|
53
|
+
* buildHarnesses() and the operator's joinedSolverNets config block.
|
|
54
|
+
*
|
|
55
|
+
* Per A2 carry-over: start() only schedules the background tick; callers that
|
|
56
|
+
* need the snapshot populated immediately must call refreshNow() after start().
|
|
57
|
+
*/
|
|
58
|
+
export declare function buildHarnessReadinessRegistry(args: {
|
|
59
|
+
harnesses: Harness[];
|
|
60
|
+
config: Pick<JinnConfig, 'joinedSolverNets'>;
|
|
61
|
+
}): HarnessReadinessRegistry;
|
package/dist/main.js
CHANGED
|
@@ -27,6 +27,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
27
27
|
import { loadConfig, getConfigPathFromArgs, DEFAULT_CONFIG_PATH } from './config.js';
|
|
28
28
|
import { Store } from './store/store.js';
|
|
29
29
|
import { startApiServer } from './api/server.js';
|
|
30
|
+
import { addHarnessReadinessRoutes } from './api/harness-readiness-endpoint.js';
|
|
30
31
|
import { CapturePublishUnavailableError } from './api/captures.js';
|
|
31
32
|
import { invalidatePredictionOperatorStatusCache } from './api/gather-status.js';
|
|
32
33
|
import { ensureUiToken } from './api/ui-token.js';
|
|
@@ -37,10 +38,6 @@ import { createSetupModeController } from './setup-mode.js';
|
|
|
37
38
|
import { buildEnvelope, emitEnvelope } from './errors/envelope.js';
|
|
38
39
|
import { clearBootstrapError, persistBootstrapError, } from './errors/persisted-bootstrap-error.js';
|
|
39
40
|
import { emitStructured } from './events/emitter.js';
|
|
40
|
-
import { checkClaudeBinary } from './preflight/claude-binary.js';
|
|
41
|
-
import { emitClaudeBinaryPreflightFailure } from './preflight/claude-invocation-envelope.js';
|
|
42
|
-
import { detectAuthContext, probeClaudeAuth } from './preflight/claude-auth.js';
|
|
43
|
-
import { configRequiresClaudeAuth } from './preflight/claude-required.js';
|
|
44
41
|
import { FleetBootstrapper } from './earning/bootstrap.js';
|
|
45
42
|
import { DEFAULT_TESTNET_ARTIFACTS, applyChainGasOverrides, getChainConfig, loadJinnMviConfig } from './earning/contracts.js';
|
|
46
43
|
import { runLegacyAgentIdMigration } from './earning/migrate-agent-id.js';
|
|
@@ -57,7 +54,8 @@ import { DEFAULT_DISABLED_HARNESSES, DEFAULT_HARNESS, HarnessRegistry, } from '.
|
|
|
57
54
|
import { joinedSolverNetsViewFromConfig } from './harnesses/engine/engine.js';
|
|
58
55
|
import { buildHarnesses } from './harnesses/impls/index.js';
|
|
59
56
|
import { loadExternalImpl } from './harnesses/external-impls/index.js';
|
|
60
|
-
import { CLAUDE_CODE_HARNESS, CODEX_HARNESS, harnessStateDirName } from './harnesses/names.js';
|
|
57
|
+
import { CLAUDE_CODE_HARNESS, CODEX_HARNESS, HERMES_AGENT_HARNESS, harnessStateDirName } from './harnesses/names.js';
|
|
58
|
+
import { HarnessReadinessRegistry } from './harnesses/readiness-registry.js';
|
|
61
59
|
import { createClients } from './adapters/mech/safe.js';
|
|
62
60
|
import { loadSolverNets } from './solver-nets/registry.js';
|
|
63
61
|
import { createCorpus } from './corpus/index.js';
|
|
@@ -442,7 +440,7 @@ async function bootstrap() {
|
|
|
442
440
|
};
|
|
443
441
|
// eslint-disable-next-line no-constant-condition
|
|
444
442
|
while (true) {
|
|
445
|
-
result = await bootstrapper.
|
|
443
|
+
result = await bootstrapper.ensureStage1And2(PASSWORD);
|
|
446
444
|
if (!result.funding) {
|
|
447
445
|
clearFundingGate();
|
|
448
446
|
break;
|
|
@@ -753,6 +751,10 @@ export async function main() {
|
|
|
753
751
|
bindHost: apiBindHost,
|
|
754
752
|
corpus: () => corpusForApi,
|
|
755
753
|
ui: { token: uiToken, handshakeKey },
|
|
754
|
+
hermesDoctor: {
|
|
755
|
+
hermesPath: config.hermesPath,
|
|
756
|
+
hermesDoctorTimeoutMs: config.hermesDoctorTimeoutMs,
|
|
757
|
+
},
|
|
756
758
|
admin: {
|
|
757
759
|
onRestartRequested: () => {
|
|
758
760
|
console.log('[main] Restart requested via operator MCP. Exiting...');
|
|
@@ -840,7 +842,12 @@ export async function main() {
|
|
|
840
842
|
contract: { id: 'swe-rebench-v2', version: 'v1' },
|
|
841
843
|
state: 'live',
|
|
842
844
|
supportedRoles: ['solving', 'evaluating'],
|
|
845
|
+
// Order matters: the dashboard pre-selects compatibleHarnesses[0]
|
|
846
|
+
// as the default solver harness. Hermes Agent is the SWE-rebench v2
|
|
847
|
+
// default per the 2026-05-12 decision (jinn-mono-8psp.2 / spec §10);
|
|
848
|
+
// operators may switch to Claude Code or Codex.
|
|
843
849
|
compatibleHarnesses: [
|
|
850
|
+
{ name: HERMES_AGENT_HARNESS, version: '0.1.0', supportsRoles: ['solving'] },
|
|
844
851
|
{ name: CLAUDE_CODE_HARNESS, version: '0.1.0', supportsRoles: ['solving'] },
|
|
845
852
|
{ name: CODEX_HARNESS, version: '0.1.0', supportsRoles: ['solving'] },
|
|
846
853
|
{ name: 'swe-rebench-v2-evaluator', version: '0.1.0', supportsRoles: ['evaluating'] },
|
|
@@ -1207,35 +1214,6 @@ export async function main() {
|
|
|
1207
1214
|
},
|
|
1208
1215
|
});
|
|
1209
1216
|
}
|
|
1210
|
-
const claudeAuthRequired = configRequiresClaudeAuth(config);
|
|
1211
|
-
if (claudeAuthRequired) {
|
|
1212
|
-
const preflight = await checkClaudeBinary(activeClaudePath);
|
|
1213
|
-
if (!preflight.ok) {
|
|
1214
|
-
emitClaudeBinaryPreflightFailure(preflight.detail, activeClaudePath);
|
|
1215
|
-
}
|
|
1216
|
-
const authContext = detectAuthContext({ cwd: process.cwd(), configuredMode: config.runtimeMode });
|
|
1217
|
-
const authProbe = probeClaudeAuth({
|
|
1218
|
-
context: authContext,
|
|
1219
|
-
cwd: process.cwd(),
|
|
1220
|
-
claudePath: activeClaudePath,
|
|
1221
|
-
});
|
|
1222
|
-
if (!authProbe.authenticated) {
|
|
1223
|
-
emitEnvelope({
|
|
1224
|
-
code: 'invalid_invocation',
|
|
1225
|
-
message: 'Claude is not authenticated. Complete Claude setup in the operator app, then restart the daemon.',
|
|
1226
|
-
hint: `Detected context: ${authContext}. Run \`jinn run\` to open the app-guided setup flow.`,
|
|
1227
|
-
exampleCli: 'jinn run',
|
|
1228
|
-
details: {
|
|
1229
|
-
field: 'claude_auth',
|
|
1230
|
-
context: authContext,
|
|
1231
|
-
authenticated: false,
|
|
1232
|
-
},
|
|
1233
|
-
});
|
|
1234
|
-
}
|
|
1235
|
-
}
|
|
1236
|
-
else {
|
|
1237
|
-
console.log('[main] Claude auth preflight skipped; Claude-backed harnesses are disabled.');
|
|
1238
|
-
}
|
|
1239
1217
|
const runner = new ClaudeRunner({
|
|
1240
1218
|
claudePath: activeClaudePath,
|
|
1241
1219
|
model: config.claudeModel,
|
|
@@ -1440,10 +1418,37 @@ export async function main() {
|
|
|
1440
1418
|
externalImpls,
|
|
1441
1419
|
disabledNames: config.harnesses?.disabled,
|
|
1442
1420
|
corpusEnv,
|
|
1421
|
+
hermesPath: config.hermesPath,
|
|
1422
|
+
hermesModel: config.hermesModel,
|
|
1423
|
+
hermesProvider: config.hermesProvider,
|
|
1443
1424
|
})) {
|
|
1444
1425
|
implRegistry.register(impl);
|
|
1445
1426
|
}
|
|
1446
1427
|
console.log(`[main] HarnessRegistry: ${implRegistry.list().map(i => i.name).join(', ')}`);
|
|
1428
|
+
// ── Harness readiness registry ─────────────────────────────────────────────
|
|
1429
|
+
// Composes per-harness isReady() probes into a cached snapshot consumed by
|
|
1430
|
+
// claim loops (A5) and /v1/harnesses/readiness (A3).
|
|
1431
|
+
//
|
|
1432
|
+
// The registry is constructed here, after buildHarnesses() has run, which
|
|
1433
|
+
// is necessarily after bootstrap (bootstrap needs the keystore). The HTTP
|
|
1434
|
+
// server was started before bootstrap so it could show setup progress — we
|
|
1435
|
+
// mount the readiness routes on the already-running app via setupApiServer.app
|
|
1436
|
+
// (same pattern used by registerSolverNetsEndpoints). Routes are registered
|
|
1437
|
+
// before the first operator request that cares about harness readiness.
|
|
1438
|
+
//
|
|
1439
|
+
// A2 carry-over: start() only schedules the 4s tick; refreshNow() is called
|
|
1440
|
+
// immediately so the snapshot is populated before the first claim-loop tick.
|
|
1441
|
+
const harnessReadinessRegistry = buildHarnessReadinessRegistry({
|
|
1442
|
+
harnesses: implRegistry.list(),
|
|
1443
|
+
config,
|
|
1444
|
+
});
|
|
1445
|
+
harnessReadinessRegistry.start();
|
|
1446
|
+
await harnessReadinessRegistry.refreshNow();
|
|
1447
|
+
// Mount /v1/harnesses/readiness and /v1/harnesses/:name/readiness on the
|
|
1448
|
+
// already-running HTTP server. Hono matches eagerly on first request; these
|
|
1449
|
+
// routes are registered before the daemon's first claim-loop tick.
|
|
1450
|
+
addHarnessReadinessRoutes(setupApiServer.app, { registry: harnessReadinessRegistry });
|
|
1451
|
+
console.log('[main] HarnessReadinessRegistry started; /v1/harnesses/readiness routes active.');
|
|
1447
1452
|
// ── Engine deps ───────────────────────────────────────────────────────────────
|
|
1448
1453
|
// Packaging deps: artifacts are always written to served_artifacts
|
|
1449
1454
|
// (operator-local SQLite). In public-testnet donation mode, scrubbed artifact
|
|
@@ -1812,6 +1817,7 @@ export async function main() {
|
|
|
1812
1817
|
nodeEndpoint: config.nodeEndpoint,
|
|
1813
1818
|
creatorSafeAddress: safeAddress,
|
|
1814
1819
|
corpusFactory,
|
|
1820
|
+
harnessReadinessRegistry,
|
|
1815
1821
|
status: {
|
|
1816
1822
|
earningDir: config.earningDir,
|
|
1817
1823
|
rpcUrl: config.rpcUrl,
|
|
@@ -1928,6 +1934,7 @@ export async function main() {
|
|
|
1928
1934
|
let exitCode = 0;
|
|
1929
1935
|
console.log(`\n[main] Received ${signal}, shutting down...`);
|
|
1930
1936
|
try {
|
|
1937
|
+
harnessReadinessRegistry.stop();
|
|
1931
1938
|
await daemon.stop();
|
|
1932
1939
|
await setupApiServer.close().catch(() => undefined);
|
|
1933
1940
|
await closeCaptureReceiver();
|
|
@@ -1994,4 +2001,32 @@ export async function main() {
|
|
|
1994
2001
|
serviceId,
|
|
1995
2002
|
};
|
|
1996
2003
|
}
|
|
2004
|
+
// ── Harness readiness registry factory ───────────────────────────────────────
|
|
2005
|
+
// Exported so tests can construct a registry without booting the full daemon.
|
|
2006
|
+
/**
|
|
2007
|
+
* Builds a HarnessReadinessRegistry from the harness list returned by
|
|
2008
|
+
* buildHarnesses() and the operator's joinedSolverNets config block.
|
|
2009
|
+
*
|
|
2010
|
+
* Per A2 carry-over: start() only schedules the background tick; callers that
|
|
2011
|
+
* need the snapshot populated immediately must call refreshNow() after start().
|
|
2012
|
+
*/
|
|
2013
|
+
export function buildHarnessReadinessRegistry(args) {
|
|
2014
|
+
const harnessesByName = {};
|
|
2015
|
+
for (const h of args.harnesses) {
|
|
2016
|
+
harnessesByName[h.name] = h;
|
|
2017
|
+
}
|
|
2018
|
+
const joinedHarnessesByCid = {};
|
|
2019
|
+
for (const [cid, entry] of Object.entries(args.config.joinedSolverNets ?? {})) {
|
|
2020
|
+
if (entry.harness) {
|
|
2021
|
+
joinedHarnessesByCid[cid] = {
|
|
2022
|
+
harnessName: entry.harness,
|
|
2023
|
+
roles: entry.roles,
|
|
2024
|
+
};
|
|
2025
|
+
}
|
|
2026
|
+
}
|
|
2027
|
+
return new HarnessReadinessRegistry({
|
|
2028
|
+
harnessesByName,
|
|
2029
|
+
joinedHarnessesByCid,
|
|
2030
|
+
});
|
|
2031
|
+
}
|
|
1997
2032
|
//# sourceMappingURL=main.js.map
|