@jinn-network/client 0.1.5 → 0.1.6-canary.107ea271
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 +131 -0
- package/dist/adapters/mech/adapter.d.ts +23 -1
- package/dist/adapters/mech/adapter.js +169 -33
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/contracts.d.ts +1 -0
- package/dist/adapters/mech/contracts.js +1 -0
- package/dist/adapters/mech/contracts.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/adapters/mech/verdict-code.d.ts +1 -0
- package/dist/adapters/mech/verdict-code.js +18 -0
- package/dist/adapters/mech/verdict-code.js.map +1 -1
- package/dist/api/bootstrap-endpoint.js +63 -1
- package/dist/api/bootstrap-endpoint.js.map +1 -1
- package/dist/api/codex-doctor-endpoint.d.ts +73 -0
- package/dist/api/codex-doctor-endpoint.js +158 -0
- package/dist/api/codex-doctor-endpoint.js.map +1 -0
- package/dist/api/discovery-endpoint.d.ts +31 -0
- package/dist/api/discovery-endpoint.js +78 -0
- package/dist/api/discovery-endpoint.js.map +1 -0
- package/dist/api/fleet-build.d.ts +8 -0
- package/dist/api/fleet-build.js +8 -2
- package/dist/api/fleet-build.js.map +1 -1
- package/dist/api/gather-status.js +90 -4
- package/dist/api/gather-status.js.map +1 -1
- package/dist/api/harness-readiness-endpoint.d.ts +25 -0
- package/dist/api/harness-readiness-endpoint.js +24 -0
- package/dist/api/harness-readiness-endpoint.js.map +1 -0
- package/dist/api/hermes-doctor-endpoint.d.ts +66 -0
- package/dist/api/hermes-doctor-endpoint.js +75 -0
- package/dist/api/hermes-doctor-endpoint.js.map +1 -0
- package/dist/api/portfolio-v0-build.d.ts +10 -0
- package/dist/api/portfolio-v0-build.js +24 -5
- package/dist/api/portfolio-v0-build.js.map +1 -1
- package/dist/api/prediction-v1-build.d.ts +9 -0
- package/dist/api/prediction-v1-build.js +6 -1
- package/dist/api/prediction-v1-build.js.map +1 -1
- package/dist/api/server.d.ts +70 -0
- package/dist/api/server.js +107 -1
- package/dist/api/server.js.map +1 -1
- package/dist/api/setup-endpoints.d.ts +21 -0
- package/dist/api/setup-endpoints.js +101 -8
- package/dist/api/setup-endpoints.js.map +1 -1
- package/dist/api/setup-retry-endpoint.d.ts +19 -0
- package/dist/api/setup-retry-endpoint.js +32 -0
- package/dist/api/setup-retry-endpoint.js.map +1 -0
- package/dist/api/solvernets-endpoints.js +8 -1
- package/dist/api/solvernets-endpoints.js.map +1 -1
- package/dist/api/status-build.d.ts +14 -0
- package/dist/api/status-build.js +23 -18
- package/dist/api/status-build.js.map +1 -1
- package/dist/api/task-run-routing.d.ts +7 -0
- package/dist/api/task-run-routing.js +12 -0
- package/dist/api/task-run-routing.js.map +1 -0
- package/dist/api/task-runs-build.d.ts +20 -0
- package/dist/api/task-runs-build.js +4 -0
- 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/chain-read-errors.d.ts +10 -0
- package/dist/chain-read-errors.js +15 -0
- package/dist/chain-read-errors.js.map +1 -1
- package/dist/cli/commands/auth.js +3 -1
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/create.d.ts +5 -3
- package/dist/cli/commands/create.js +102 -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 +164 -11
- 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/cli/commands/update.d.ts +10 -0
- package/dist/cli/commands/update.js +36 -0
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/config.d.ts +51 -0
- package/dist/config.js +49 -2
- 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 +26 -1
- package/dist/daemon/daemon.js +63 -1
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/eviction-loop.d.ts +40 -0
- package/dist/daemon/eviction-loop.js +67 -0
- package/dist/daemon/eviction-loop.js.map +1 -0
- 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/daemon/skip-log-dedup.d.ts +69 -0
- package/dist/daemon/skip-log-dedup.js +106 -0
- package/dist/daemon/skip-log-dedup.js.map +1 -0
- package/dist/dashboard/assets/{index-D_NMfDfV.css → index-DE4qUnzV.css} +1 -1
- package/dist/dashboard/assets/index-Di7xA4eB.js +170 -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.d.ts +5 -0
- package/dist/discovery/onchain.js +292 -7
- package/dist/discovery/onchain.js.map +1 -1
- package/dist/discovery/types.d.ts +127 -1
- package/dist/discovery/types.js +8 -10
- 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 +178 -0
- package/dist/earning/bootstrap.js +628 -57
- package/dist/earning/bootstrap.js.map +1 -1
- package/dist/earning/contracts.d.ts +12 -0
- package/dist/earning/contracts.js +16 -1
- package/dist/earning/contracts.js.map +1 -1
- package/dist/earning/funding-plan.js +15 -2
- package/dist/earning/funding-plan.js.map +1 -1
- package/dist/earning/jinn-rewards.d.ts +46 -0
- package/dist/earning/jinn-rewards.js +32 -0
- package/dist/earning/jinn-rewards.js.map +1 -1
- package/dist/earning/store.d.ts +8 -0
- package/dist/earning/store.js +48 -1
- package/dist/earning/store.js.map +1 -1
- package/dist/earning/testnet-setup-migration.d.ts +12 -0
- package/dist/earning/testnet-setup-migration.js +27 -1
- package/dist/earning/testnet-setup-migration.js.map +1 -1
- package/dist/earning/types.d.ts +45 -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/erc8004/reputation.d.ts +8 -0
- package/dist/erc8004/reputation.js +22 -3
- package/dist/erc8004/reputation.js.map +1 -1
- package/dist/events/types.d.ts +2 -2
- package/dist/harnesses/cost-estimates.d.ts +145 -0
- package/dist/harnesses/cost-estimates.js +297 -0
- package/dist/harnesses/cost-estimates.js.map +1 -0
- package/dist/harnesses/engine/engine.d.ts +40 -0
- package/dist/harnesses/engine/engine.js +69 -8
- 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/engine/persistence.d.ts +21 -0
- package/dist/harnesses/engine/persistence.js +39 -0
- package/dist/harnesses/engine/persistence.js.map +1 -1
- package/dist/harnesses/engine/work-dir-reaper.d.ts +65 -0
- package/dist/harnesses/engine/work-dir-reaper.js +100 -0
- package/dist/harnesses/engine/work-dir-reaper.js.map +1 -0
- 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 +205 -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 +132 -0
- package/dist/harnesses/impls/hermes-agent/config-builder.js.map +1 -0
- package/dist/harnesses/impls/hermes-agent/harness.d.ts +58 -0
- package/dist/harnesses/impls/hermes-agent/harness.js +118 -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 +13 -0
- package/dist/harnesses/impls/index.js +32 -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/learner/harness.d.ts +62 -0
- package/dist/harnesses/impls/learner/harness.js +179 -0
- 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 +23 -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/stub.d.ts +58 -0
- package/dist/harnesses/impls/stub.js +89 -0
- package/dist/harnesses/impls/stub.js.map +1 -0
- 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 +144 -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 +372 -90
- package/dist/main.js.map +1 -1
- package/dist/mcp/server.js +14 -13
- package/dist/mcp/server.js.map +1 -1
- package/dist/operator-errors.d.ts +7 -0
- package/dist/operator-errors.js +26 -2
- package/dist/operator-errors.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/restart-daemon.d.ts +71 -0
- package/dist/restart-daemon.js +82 -0
- package/dist/restart-daemon.js.map +1 -0
- 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/setup/halt-mode.d.ts +14 -0
- package/dist/setup/halt-mode.js +17 -0
- package/dist/setup/halt-mode.js.map +1 -0
- package/dist/solver-nets/prediction-operator-ux.js +43 -3
- package/dist/solver-nets/prediction-operator-ux.js.map +1 -1
- package/dist/solver-nets/registry.d.ts +1 -0
- package/dist/solver-nets/registry.js +1 -1
- package/dist/solver-nets/registry.js.map +1 -1
- 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/solvernets/daemon-init.d.ts +10 -2
- package/dist/solvernets/daemon-init.js +22 -2
- package/dist/solvernets/daemon-init.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/tx-retry.d.ts +13 -0
- package/dist/tx-retry.js +22 -0
- package/dist/tx-retry.js.map +1 -1
- 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 +56 -14
- 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 +53 -14
- package/dist/types/payloads/prediction-v0.js +16 -6
- package/dist/types/payloads/prediction-v0.js.map +1 -1
- package/dist/util/extract-tx-hash.d.ts +14 -0
- package/dist/util/extract-tx-hash.js +19 -0
- package/dist/util/extract-tx-hash.js.map +1 -0
- 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 +38 -13
- 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.d.ts +0 -22
- package/dist/harnesses/impls/claude-code-learner/harness.js +0 -62
- 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
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
// client/src/harnesses/impls/hermes-agent/bootstrap.ts
|
|
2
|
+
import { cpSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { parse as yamlParse, stringify as yamlStringify } from 'yaml';
|
|
5
|
+
import { hermesConfigFromSolverPlugins, } from './config-builder.js';
|
|
6
|
+
/**
|
|
7
|
+
* Toolset allowlist for Jinn-run Hermes sessions.
|
|
8
|
+
*
|
|
9
|
+
* Hermes's default-ON toolset surface is broader than Claude Code's built-ins
|
|
10
|
+
* and includes footguns under unattended automation (`messaging` can send
|
|
11
|
+
* messages; `cronjob` can schedule things; `computer_use`, `browser`,
|
|
12
|
+
* `tts`/`vision`/`image_gen` are out of scope for text code-issue tasks). We
|
|
13
|
+
* pin an explicit allowlist for `hermes-cli` (the platform Jinn spawns Hermes
|
|
14
|
+
* as); operators who want to expand it for a Jinn task can request a daemon
|
|
15
|
+
* config option later — they can NOT widen the allowlist by editing their
|
|
16
|
+
* `~/.hermes/config.yaml`'s `platform_toolsets.hermes-cli` because Jinn
|
|
17
|
+
* deliberately replaces that key (other `platform_toolsets.*` entries — e.g.
|
|
18
|
+
* for `hermes-telegram` — pass through unchanged).
|
|
19
|
+
*/
|
|
20
|
+
const TOOLSET_ALLOWLIST = [
|
|
21
|
+
'terminal',
|
|
22
|
+
'file',
|
|
23
|
+
'web',
|
|
24
|
+
'skills',
|
|
25
|
+
'memory',
|
|
26
|
+
'session_search',
|
|
27
|
+
'todo',
|
|
28
|
+
'code_execution',
|
|
29
|
+
];
|
|
30
|
+
/**
|
|
31
|
+
* Files copied verbatim from the operator's real Hermes home into the per-Task
|
|
32
|
+
* `$HERMES_HOME`. Hermes resolves OAuth creds from `$HERMES_HOME/auth/...` and
|
|
33
|
+
* pooled creds from `$HERMES_HOME/auth.json` with NO real-home fallback, so a
|
|
34
|
+
* fresh per-Task home (which the freeze contract requires) would otherwise
|
|
35
|
+
* have no credentials and Hermes would fail with "No … credentials found."
|
|
36
|
+
*
|
|
37
|
+
* `bin/` carries Hermes-managed binaries — most importantly `bin/tirith`, the
|
|
38
|
+
* shell-command security scanner Hermes runs before every `terminal_tool`
|
|
39
|
+
* invocation. Hermes resolves it from `$HERMES_HOME/bin/tirith` and falls back
|
|
40
|
+
* to an auto-download from `github.com/sheeki03/tirith/releases/latest` on
|
|
41
|
+
* first use. Without seeding, every per-Task run pays the multi-MB download
|
|
42
|
+
* cost on its first shell command — long enough to blow the harness budget.
|
|
43
|
+
*
|
|
44
|
+
* Hermes may refresh OAuth access tokens mid-task. The HermesHarness excludes
|
|
45
|
+
* these runtime-only files from the daemon state digest while still fencing the
|
|
46
|
+
* learning surface (memories/, skills/, sessions/, and ordinary files). The
|
|
47
|
+
* binary exception is intentionally limited to Hermes's managed `bin/tirith`
|
|
48
|
+
* security scanner instead of the whole `bin/` tree.
|
|
49
|
+
*/
|
|
50
|
+
const OPERATOR_STATE_TO_SEED = ['auth', 'auth.json', 'bin'];
|
|
51
|
+
function seedOperatorState(hermesHome, seedFrom) {
|
|
52
|
+
if (seedFrom === hermesHome || !existsSync(seedFrom))
|
|
53
|
+
return;
|
|
54
|
+
for (const name of OPERATOR_STATE_TO_SEED) {
|
|
55
|
+
const src = join(seedFrom, name);
|
|
56
|
+
const dst = join(hermesHome, name);
|
|
57
|
+
if (existsSync(src) && !existsSync(dst)) {
|
|
58
|
+
cpSync(src, dst, { recursive: true });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
63
|
+
// Operator config.yaml inheritance — the merge contract.
|
|
64
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
65
|
+
//
|
|
66
|
+
// Goal: anything the operator set in `~/.hermes/config.yaml` flows into the
|
|
67
|
+
// per-Task config, EXCEPT for the small set of keys Jinn must own per Task.
|
|
68
|
+
// This is the comprehensive form of operator-config inheritance — it replaces
|
|
69
|
+
// the prior "fresh per-Task config with hand-written Jinn fields only" path,
|
|
70
|
+
// which was a whack-a-mole source (auth/, then .env, then max_tokens; each
|
|
71
|
+
// real-binary run surfaced another orphaned setting). With the merge, ANY
|
|
72
|
+
// operator setting (model.max_tokens, model.context_length, model.base_url,
|
|
73
|
+
// provider_routing, openrouter.response_cache, agent.iteration_budget,
|
|
74
|
+
// compression.threshold, auxiliary.*, display.*, voice.*, security.*,
|
|
75
|
+
// approvals.*, delegation.*, web.*, custom providers: overrides, etc.) just
|
|
76
|
+
// flows through.
|
|
77
|
+
//
|
|
78
|
+
// Jinn-managed keys (per-Task authoritative; Jinn writes these every Task):
|
|
79
|
+
// - model.default — if a daemon/SolverNet override was provided
|
|
80
|
+
// - model.provider — if a daemon/SolverNet override was provided
|
|
81
|
+
// - terminal.backend — forced to `local` (the per-Task workingDir is a
|
|
82
|
+
// host filesystem path; remote backends would need
|
|
83
|
+
// additional setup Jinn doesn't yet do)
|
|
84
|
+
// - terminal.cwd — the per-Task workingDir
|
|
85
|
+
// - platform_toolsets['hermes-cli'] — the Jinn allowlist (replaces any
|
|
86
|
+
// operator value; other platforms pass through)
|
|
87
|
+
// - mcp_servers.<name> — operator's MCP servers preserved; Jinn adds its
|
|
88
|
+
// SolverPlugin MCP servers; Jinn wins on collision
|
|
89
|
+
// - skills.external_dirs — operator's dirs preserved; Jinn appends the
|
|
90
|
+
// SolverPlugin skill dirs
|
|
91
|
+
//
|
|
92
|
+
// Everything else from the operator's config.yaml passes through unchanged.
|
|
93
|
+
//
|
|
94
|
+
// Operator-set keys that DO inherit and matter for budget-capped providers:
|
|
95
|
+
// - model.max_tokens — OpenRouter pre-bills on max_tokens; operators
|
|
96
|
+
// with low monthly caps must lower this to fit.
|
|
97
|
+
// - model.context_length — total context window cap.
|
|
98
|
+
// - provider_routing — OpenRouter routing knobs (sort by price, etc.).
|
|
99
|
+
// - providers.<name> — per-provider timeout / model-specific overrides.
|
|
100
|
+
function isObj(v) {
|
|
101
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
102
|
+
}
|
|
103
|
+
function readOperatorConfigYaml(seedFrom) {
|
|
104
|
+
const path = join(seedFrom, 'config.yaml');
|
|
105
|
+
if (!existsSync(path))
|
|
106
|
+
return {};
|
|
107
|
+
try {
|
|
108
|
+
const text = readFileSync(path, 'utf8');
|
|
109
|
+
const parsed = yamlParse(text);
|
|
110
|
+
return isObj(parsed) ? parsed : {};
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
// Operator config is unparseable — proceed with Jinn-only. Hermes would
|
|
114
|
+
// also fail to read it, so this isn't hiding any real signal.
|
|
115
|
+
return {};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function mergePerTaskConfig(operator, jinn, opts) {
|
|
119
|
+
const out = { ...operator };
|
|
120
|
+
// model: deep-merge — operator's max_tokens/context_length/base_url/
|
|
121
|
+
// provider_routing/etc. preserved; Jinn overrides default+provider only if
|
|
122
|
+
// specified by daemon/SolverNet config.
|
|
123
|
+
if (opts.model || opts.provider || isObj(out.model)) {
|
|
124
|
+
const opModel = isObj(out.model) ? out.model : {};
|
|
125
|
+
const jinnModel = {};
|
|
126
|
+
if (opts.model)
|
|
127
|
+
jinnModel.default = opts.model;
|
|
128
|
+
if (opts.provider)
|
|
129
|
+
jinnModel.provider = opts.provider;
|
|
130
|
+
out.model = { ...opModel, ...jinnModel };
|
|
131
|
+
}
|
|
132
|
+
// terminal: Jinn forces backend + cwd; operator's timeout / lifetime /
|
|
133
|
+
// sudo_password / docker_* fields preserved (the docker_* fields are inert
|
|
134
|
+
// under `backend: local`, which is fine).
|
|
135
|
+
const opTerminal = isObj(out.terminal) ? out.terminal : {};
|
|
136
|
+
out.terminal = {
|
|
137
|
+
...opTerminal,
|
|
138
|
+
backend: 'local',
|
|
139
|
+
cwd: opts.workingDir,
|
|
140
|
+
};
|
|
141
|
+
// platform_toolsets: Jinn enforces its allowlist for the `hermes-cli`
|
|
142
|
+
// platform (the platform Jinn spawns Hermes as); other platforms
|
|
143
|
+
// (hermes-telegram, etc.) pass through unchanged.
|
|
144
|
+
const opPlatformToolsets = isObj(out.platform_toolsets) ? out.platform_toolsets : {};
|
|
145
|
+
out.platform_toolsets = {
|
|
146
|
+
...opPlatformToolsets,
|
|
147
|
+
'hermes-cli': [...TOOLSET_ALLOWLIST],
|
|
148
|
+
};
|
|
149
|
+
// mcp_servers: operator's MCP servers preserved; Jinn adds its SolverPlugin
|
|
150
|
+
// MCP servers via key-merge (Jinn wins on name collision — the SolverPlugin
|
|
151
|
+
// MCP definition is the authority on what `jinn-client` etc. mean).
|
|
152
|
+
if (jinn.mcp_servers && Object.keys(jinn.mcp_servers).length > 0) {
|
|
153
|
+
const opMcp = isObj(out.mcp_servers) ? out.mcp_servers : {};
|
|
154
|
+
out.mcp_servers = { ...opMcp, ...jinn.mcp_servers };
|
|
155
|
+
}
|
|
156
|
+
// skills.external_dirs: operator's dirs preserved; Jinn appends SolverPlugin
|
|
157
|
+
// skill dirs. Duplicates de-duped (preserves order — operator first).
|
|
158
|
+
if (jinn.skills?.external_dirs && jinn.skills.external_dirs.length > 0) {
|
|
159
|
+
const opSkills = isObj(out.skills) ? out.skills : {};
|
|
160
|
+
const opDirs = Array.isArray(opSkills.external_dirs)
|
|
161
|
+
? opSkills.external_dirs.filter((d) => typeof d === 'string')
|
|
162
|
+
: [];
|
|
163
|
+
const merged = [...opDirs];
|
|
164
|
+
for (const d of jinn.skills.external_dirs) {
|
|
165
|
+
if (!merged.includes(d))
|
|
166
|
+
merged.push(d);
|
|
167
|
+
}
|
|
168
|
+
out.skills = { ...opSkills, external_dirs: merged };
|
|
169
|
+
}
|
|
170
|
+
return out;
|
|
171
|
+
}
|
|
172
|
+
function snippetToEnvFile(env) {
|
|
173
|
+
const lines = [];
|
|
174
|
+
lines.push(`DAEMON_API_URL=${env.daemonApiUrl}`);
|
|
175
|
+
lines.push(`DAEMON_API_TOKEN=${env.daemonApiToken}`);
|
|
176
|
+
if (env.storePath)
|
|
177
|
+
lines.push(`STORE_PATH=${env.storePath}`);
|
|
178
|
+
if (env.corpusEnv.subgraphUrl)
|
|
179
|
+
lines.push(`JINN_CORPUS_SUBGRAPH_URL=${env.corpusEnv.subgraphUrl}`);
|
|
180
|
+
if (env.corpusEnv.ipfsGatewayUrl)
|
|
181
|
+
lines.push(`JINN_CORPUS_IPFS_GATEWAY_URL=${env.corpusEnv.ipfsGatewayUrl}`);
|
|
182
|
+
if (env.corpusEnv.rpcUrl)
|
|
183
|
+
lines.push(`JINN_CORPUS_RPC_URL=${env.corpusEnv.rpcUrl}`);
|
|
184
|
+
if (env.corpusEnv.chainId != null)
|
|
185
|
+
lines.push(`JINN_CORPUS_CHAIN_ID=${env.corpusEnv.chainId}`);
|
|
186
|
+
if (env.corpusEnv.identityRegistryAddress)
|
|
187
|
+
lines.push(`JINN_CORPUS_IDENTITY_REGISTRY_ADDRESS=${env.corpusEnv.identityRegistryAddress}`);
|
|
188
|
+
if (env.corpusEnv.fromBlock != null)
|
|
189
|
+
lines.push(`JINN_CORPUS_FROM_BLOCK=${env.corpusEnv.fromBlock}`);
|
|
190
|
+
return lines.join('\n') + '\n';
|
|
191
|
+
}
|
|
192
|
+
export function writePerTaskHermesConfig(inputs) {
|
|
193
|
+
mkdirSync(inputs.hermesHome, { recursive: true });
|
|
194
|
+
if (inputs.seedFrom) {
|
|
195
|
+
seedOperatorState(inputs.hermesHome, inputs.seedFrom);
|
|
196
|
+
}
|
|
197
|
+
const operator = inputs.seedFrom ? readOperatorConfigYaml(inputs.seedFrom) : {};
|
|
198
|
+
const snippet = hermesConfigFromSolverPlugins(inputs.solverPluginRoots, inputs.env);
|
|
199
|
+
const merged = mergePerTaskConfig(operator, snippet, {
|
|
200
|
+
model: inputs.model,
|
|
201
|
+
provider: inputs.provider,
|
|
202
|
+
workingDir: inputs.workingDir,
|
|
203
|
+
});
|
|
204
|
+
writeFileSync(join(inputs.hermesHome, 'config.yaml'), yamlStringify(merged, { lineWidth: 0 }), 'utf8');
|
|
205
|
+
// Per-Task .env = operator's .env (provider API keys, debug toggles, etc.)
|
|
206
|
+
// + Jinn-runtime keys. Jinn keys go LAST so they win on duplicate names
|
|
207
|
+
// (most dotenv loaders use last-wins; Hermes uses python-dotenv). Without
|
|
208
|
+
// the operator's keys, Jinn-run Hermes can't authenticate to any provider
|
|
209
|
+
// except google-gemini-cli (whose OAuth creds are seeded via auth/), so
|
|
210
|
+
// Hermes-as-default with OpenRouter / Anthropic / etc. requires this merge.
|
|
211
|
+
const operatorEnv = inputs.seedFrom ? readOperatorEnvFile(inputs.seedFrom) : '';
|
|
212
|
+
const trailingNewline = operatorEnv.endsWith('\n') ? '' : '\n';
|
|
213
|
+
const header = operatorEnv
|
|
214
|
+
? `${operatorEnv}${trailingNewline}# --- Jinn-runtime keys (per-Task, override any operator entries above) ---\n`
|
|
215
|
+
: '';
|
|
216
|
+
const envFile = header + snippetToEnvFile(inputs.env);
|
|
217
|
+
writeFileSync(join(inputs.hermesHome, '.env'), envFile, 'utf8');
|
|
218
|
+
}
|
|
219
|
+
function readOperatorEnvFile(seedFrom) {
|
|
220
|
+
const path = join(seedFrom, '.env');
|
|
221
|
+
if (!existsSync(path))
|
|
222
|
+
return '';
|
|
223
|
+
try {
|
|
224
|
+
return readFileSync(path, 'utf8');
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
// Permissions / race — better to proceed with just Jinn keys than crash.
|
|
228
|
+
return '';
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../../src/harnesses/impls/hermes-agent/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export interface McpStdioServer {
|
|
2
|
+
command: string;
|
|
3
|
+
args: string[];
|
|
4
|
+
cwd?: string;
|
|
5
|
+
env?: Record<string, string>;
|
|
6
|
+
}
|
|
7
|
+
export interface McpHttpServer {
|
|
8
|
+
url: string;
|
|
9
|
+
headers?: Record<string, string>;
|
|
10
|
+
}
|
|
11
|
+
export type McpServer = McpStdioServer | McpHttpServer;
|
|
12
|
+
export interface HermesConfigSnippet {
|
|
13
|
+
mcp_servers?: Record<string, McpServer>;
|
|
14
|
+
skills?: {
|
|
15
|
+
external_dirs?: string[];
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export interface ConfigBuilderEnv {
|
|
19
|
+
storePath?: string;
|
|
20
|
+
daemonApiUrl: string;
|
|
21
|
+
daemonApiToken: string;
|
|
22
|
+
corpusEnv: {
|
|
23
|
+
subgraphUrl?: string;
|
|
24
|
+
ipfsGatewayUrl?: string;
|
|
25
|
+
rpcUrl?: string;
|
|
26
|
+
chainId?: number;
|
|
27
|
+
identityRegistryAddress?: string;
|
|
28
|
+
fromBlock?: number;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Active-task identifiers injected into MCP server env so jinn-client tools
|
|
32
|
+
* (get_task, submit_typed_payload, …) know which Task they are operating on.
|
|
33
|
+
* Mirrors what claude-code and codex-code adapters thread through in
|
|
34
|
+
* `buildSubprocessEnv`. When unset (e.g. unit tests), the MCP server returns
|
|
35
|
+
* a default empty task — fine for tests, broken for live runs.
|
|
36
|
+
*/
|
|
37
|
+
task?: {
|
|
38
|
+
id?: string;
|
|
39
|
+
description?: string;
|
|
40
|
+
/** Already-stringified JSON of `taskBody.context`; empty string when absent. */
|
|
41
|
+
contextJson?: string;
|
|
42
|
+
role?: string;
|
|
43
|
+
solverType?: string;
|
|
44
|
+
restorationRequestId?: string;
|
|
45
|
+
requestId?: string;
|
|
46
|
+
workingDir?: string;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
export declare function hermesConfigFromSolverPlugins(roots: readonly string[], env: ConfigBuilderEnv): HermesConfigSnippet;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// client/src/harnesses/impls/hermes-agent/config-builder.ts
|
|
2
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
3
|
+
import { dirname, isAbsolute, join, resolve } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
/**
|
|
6
|
+
* Resolves the client install root (`<client>/`, containing `dist/` and
|
|
7
|
+
* `plugins/`) by walking up from this module's compiled location.
|
|
8
|
+
*
|
|
9
|
+
* This file lives at:
|
|
10
|
+
* - `<client>/dist/harnesses/impls/hermes-agent/config-builder.js` (built)
|
|
11
|
+
* - `<client>/src/harnesses/impls/hermes-agent/config-builder.ts` (source)
|
|
12
|
+
*
|
|
13
|
+
* Either way, four directory hops up from the file's directory lands at
|
|
14
|
+
* `<client>/`, which the `network-tools` plugin's MCP launcher
|
|
15
|
+
* (`client/plugins/network-tools/mcp/jinn-client-server.mjs`) expects when
|
|
16
|
+
* reading `JINN_NETWORK_TOOLS_CLIENT_ROOT`.
|
|
17
|
+
*
|
|
18
|
+
* v0.1.6 patch — gh #294. The proper fix (audit *why* SolverPlugins are
|
|
19
|
+
* copied per-task into `$HOME/.jinn-client/solver-plugins/`, which is why
|
|
20
|
+
* the launcher's own `<pluginRoot>/../..` walk fails) is tracked in #296.
|
|
21
|
+
*/
|
|
22
|
+
function resolveClientRoot() {
|
|
23
|
+
const here = fileURLToPath(import.meta.url);
|
|
24
|
+
return resolve(dirname(here), '..', '..', '..', '..');
|
|
25
|
+
}
|
|
26
|
+
function buildJinnRuntimeEnv(env) {
|
|
27
|
+
const out = {
|
|
28
|
+
DAEMON_API_URL: env.daemonApiUrl,
|
|
29
|
+
DAEMON_API_TOKEN: env.daemonApiToken,
|
|
30
|
+
// gh #294: tell the network-tools MCP launcher where to find the
|
|
31
|
+
// daemon's `dist/mcp/server.js`. The launcher's own resolution walks
|
|
32
|
+
// `<pluginRoot>/../..`, which lands at `$HOME/.jinn-client/` (no
|
|
33
|
+
// `dist/`) when the plugin tree has been copied per-task — see #296
|
|
34
|
+
// for the layout-audit investigation.
|
|
35
|
+
JINN_NETWORK_TOOLS_CLIENT_ROOT: resolveClientRoot(),
|
|
36
|
+
};
|
|
37
|
+
if (env.storePath)
|
|
38
|
+
out.STORE_PATH = env.storePath;
|
|
39
|
+
if (env.corpusEnv.subgraphUrl)
|
|
40
|
+
out.JINN_CORPUS_SUBGRAPH_URL = env.corpusEnv.subgraphUrl;
|
|
41
|
+
if (env.corpusEnv.ipfsGatewayUrl)
|
|
42
|
+
out.JINN_CORPUS_IPFS_GATEWAY_URL = env.corpusEnv.ipfsGatewayUrl;
|
|
43
|
+
if (env.corpusEnv.rpcUrl)
|
|
44
|
+
out.JINN_CORPUS_RPC_URL = env.corpusEnv.rpcUrl;
|
|
45
|
+
if (env.corpusEnv.chainId != null)
|
|
46
|
+
out.JINN_CORPUS_CHAIN_ID = String(env.corpusEnv.chainId);
|
|
47
|
+
if (env.corpusEnv.identityRegistryAddress) {
|
|
48
|
+
out.JINN_CORPUS_IDENTITY_REGISTRY_ADDRESS = env.corpusEnv.identityRegistryAddress;
|
|
49
|
+
}
|
|
50
|
+
if (env.corpusEnv.fromBlock != null)
|
|
51
|
+
out.JINN_CORPUS_FROM_BLOCK = String(env.corpusEnv.fromBlock);
|
|
52
|
+
// Active-task env — read by the jinn-client MCP server in
|
|
53
|
+
// `client/src/mcp/server.ts` to populate the `task` runtime context. Without
|
|
54
|
+
// these, submit_typed_payload errors with `missing_solver_type` and get_task
|
|
55
|
+
// returns an empty record.
|
|
56
|
+
if (env.task) {
|
|
57
|
+
if (env.task.id)
|
|
58
|
+
out.DESIRED_STATE_ID = env.task.id;
|
|
59
|
+
if (env.task.description)
|
|
60
|
+
out.DESIRED_STATE_DESCRIPTION = env.task.description;
|
|
61
|
+
if (env.task.contextJson)
|
|
62
|
+
out.DESIRED_STATE_CONTEXT = env.task.contextJson;
|
|
63
|
+
if (env.task.role)
|
|
64
|
+
out.DESIRED_STATE_ROLE = env.task.role;
|
|
65
|
+
if (env.task.solverType)
|
|
66
|
+
out.DESIRED_STATE_SOLVER_TYPE = env.task.solverType;
|
|
67
|
+
if (env.task.restorationRequestId)
|
|
68
|
+
out.RESTORATION_REQUEST_ID = env.task.restorationRequestId;
|
|
69
|
+
if (env.task.requestId)
|
|
70
|
+
out.REQUEST_ID = env.task.requestId;
|
|
71
|
+
if (env.task.workingDir)
|
|
72
|
+
out.JINN_WORKING_DIR = env.task.workingDir;
|
|
73
|
+
}
|
|
74
|
+
return out;
|
|
75
|
+
}
|
|
76
|
+
function resolvePathTemplate(value, pluginRoot) {
|
|
77
|
+
// Resolve ${CLAUDE_PLUGIN_ROOT} / ${CODEX_PLUGIN_ROOT} → pluginRoot,
|
|
78
|
+
// then resolve relative paths against pluginRoot.
|
|
79
|
+
const substituted = value
|
|
80
|
+
.replaceAll('${CLAUDE_PLUGIN_ROOT}', pluginRoot)
|
|
81
|
+
.replaceAll('${CODEX_PLUGIN_ROOT}', pluginRoot);
|
|
82
|
+
if (isAbsolute(substituted))
|
|
83
|
+
return substituted;
|
|
84
|
+
return resolve(pluginRoot, substituted);
|
|
85
|
+
}
|
|
86
|
+
function translateMcpFromFile(pluginRoot, jinnEnv) {
|
|
87
|
+
const mcpFile = join(pluginRoot, '.mcp.json');
|
|
88
|
+
if (!existsSync(mcpFile))
|
|
89
|
+
return {};
|
|
90
|
+
const raw = JSON.parse(readFileSync(mcpFile, 'utf8'));
|
|
91
|
+
const servers = raw.mcpServers ?? {};
|
|
92
|
+
const out = {};
|
|
93
|
+
for (const [name, server] of Object.entries(servers)) {
|
|
94
|
+
if ('url' in server) {
|
|
95
|
+
// HTTP MCP — pass through unchanged (no path resolution needed)
|
|
96
|
+
out[name] = { url: server.url, ...(server.headers ? { headers: server.headers } : {}) };
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
// Stdio MCP — resolve paths and merge env
|
|
100
|
+
const resolvedArgs = server.args.map((a) => resolvePathTemplate(a, pluginRoot));
|
|
101
|
+
const resolvedCwd = server.cwd ? resolvePathTemplate(server.cwd, pluginRoot) : pluginRoot;
|
|
102
|
+
out[name] = {
|
|
103
|
+
command: server.command,
|
|
104
|
+
args: resolvedArgs,
|
|
105
|
+
cwd: resolvedCwd,
|
|
106
|
+
env: { ...jinnEnv, ...(server.env ?? {}) },
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
return out;
|
|
110
|
+
}
|
|
111
|
+
function translateSkillsDir(pluginRoot) {
|
|
112
|
+
const skillsDir = join(pluginRoot, 'skills');
|
|
113
|
+
return existsSync(skillsDir) ? skillsDir : null;
|
|
114
|
+
}
|
|
115
|
+
export function hermesConfigFromSolverPlugins(roots, env) {
|
|
116
|
+
const jinnEnv = buildJinnRuntimeEnv(env);
|
|
117
|
+
const mcpServers = {};
|
|
118
|
+
const externalDirs = [];
|
|
119
|
+
for (const root of roots) {
|
|
120
|
+
Object.assign(mcpServers, translateMcpFromFile(root, jinnEnv));
|
|
121
|
+
const skills = translateSkillsDir(root);
|
|
122
|
+
if (skills)
|
|
123
|
+
externalDirs.push(skills);
|
|
124
|
+
}
|
|
125
|
+
const snippet = {};
|
|
126
|
+
if (Object.keys(mcpServers).length > 0)
|
|
127
|
+
snippet.mcp_servers = mcpServers;
|
|
128
|
+
if (externalDirs.length > 0)
|
|
129
|
+
snippet.skills = { external_dirs: externalDirs };
|
|
130
|
+
return snippet;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=config-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-builder.js","sourceRoot":"","sources":["../../../../src/harnesses/impls/hermes-agent/config-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Harness, HarnessContext, ReadyStatus, Solution } from '../../types.js';
|
|
2
|
+
import type { HermesHarnessAdapter } from './adapter.js';
|
|
3
|
+
export interface HermesHarnessConfig {
|
|
4
|
+
adapter: HermesHarnessAdapter;
|
|
5
|
+
version?: string;
|
|
6
|
+
/** Hermes binary path used by `isReady()`. Defaults to `hermes` (PATH lookup). */
|
|
7
|
+
hermesPath?: string;
|
|
8
|
+
/** Timeout for the `hermes doctor` probe. Defaults to 30s. */
|
|
9
|
+
hermesDoctorTimeoutMs?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Hermes Agent harness.
|
|
13
|
+
*
|
|
14
|
+
* Generic restoration harness backed by the Hermes agent runner. Built-in
|
|
15
|
+
* learning loop owned by Hermes (skill self-improvement, memory curation, FTS5
|
|
16
|
+
* session search); Jinn-side learner plugin is NOT loaded. SolverPlugins are
|
|
17
|
+
* mounted via Hermes's mcp_servers + skills config.yaml surface (see
|
|
18
|
+
* config-builder.ts).
|
|
19
|
+
*
|
|
20
|
+
* Scoped to SWE-rebench v2 while the Hermes task prompt, SolverPlugin bundle,
|
|
21
|
+
* and output harvesting are specific to `swe-rebench-v2.v1`.
|
|
22
|
+
*/
|
|
23
|
+
export declare class HermesHarness implements Harness {
|
|
24
|
+
readonly name = "hermes-agent";
|
|
25
|
+
readonly version: string;
|
|
26
|
+
readonly freezeStateHashIgnore: readonly ["auth", "auth.json", "bin/tirith", ".env", "config.yaml"];
|
|
27
|
+
private readonly adapter;
|
|
28
|
+
private readonly hermesPath;
|
|
29
|
+
private readonly hermesDoctorTimeoutMs;
|
|
30
|
+
constructor(config: HermesHarnessConfig);
|
|
31
|
+
/**
|
|
32
|
+
* Readiness probe — shells out to `hermes doctor` via the shared
|
|
33
|
+
* `probeHermesDoctor` helper (same logic the SPA precheck endpoint
|
|
34
|
+
* uses). Reports:
|
|
35
|
+
* - `installed: false` → binary not on PATH → ready=false with install
|
|
36
|
+
* nextStep so the operator sees an actionable message instead of
|
|
37
|
+
* N/N failed claims (#330).
|
|
38
|
+
* - `exitCode !== 0` → binary exists but `hermes doctor` reports a
|
|
39
|
+
* configuration problem (e.g. provider not signed in) → ready=false
|
|
40
|
+
* with a nextStep that points at the SPA precheck panel.
|
|
41
|
+
* - OpenRouter not authenticated → ready=false. `hermes doctor` exits 0
|
|
42
|
+
* even when every provider is logged out (it treats missing providers
|
|
43
|
+
* as warnings), so this third gate probes `hermes auth status
|
|
44
|
+
* openrouter` directly. Hermes is OpenRouter-only, so a logged-out
|
|
45
|
+
* OpenRouter means Hermes has no usable model provider and every
|
|
46
|
+
* claim would burn (#332/#330/#348).
|
|
47
|
+
* - all three gates pass → ready=true.
|
|
48
|
+
*/
|
|
49
|
+
isReady(_ctx?: {
|
|
50
|
+
solverType: string;
|
|
51
|
+
role?: 'restoration' | 'evaluation';
|
|
52
|
+
}): Promise<ReadyStatus>;
|
|
53
|
+
supports(spec: {
|
|
54
|
+
solverType: string;
|
|
55
|
+
role?: 'restoration' | 'evaluation';
|
|
56
|
+
}): boolean;
|
|
57
|
+
run(ctx: HarnessContext): Promise<Solution>;
|
|
58
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { HERMES_AGENT_HARNESS } from '../../names.js';
|
|
2
|
+
import { harvestOutput } from '../learner/harvest.js';
|
|
3
|
+
import { probeHermesDoctor, probeHermesAuthStatus } from '../../../api/hermes-doctor-endpoint.js';
|
|
4
|
+
/**
|
|
5
|
+
* Hermes Agent harness.
|
|
6
|
+
*
|
|
7
|
+
* Generic restoration harness backed by the Hermes agent runner. Built-in
|
|
8
|
+
* learning loop owned by Hermes (skill self-improvement, memory curation, FTS5
|
|
9
|
+
* session search); Jinn-side learner plugin is NOT loaded. SolverPlugins are
|
|
10
|
+
* mounted via Hermes's mcp_servers + skills config.yaml surface (see
|
|
11
|
+
* config-builder.ts).
|
|
12
|
+
*
|
|
13
|
+
* Scoped to SWE-rebench v2 while the Hermes task prompt, SolverPlugin bundle,
|
|
14
|
+
* and output harvesting are specific to `swe-rebench-v2.v1`.
|
|
15
|
+
*/
|
|
16
|
+
export class HermesHarness {
|
|
17
|
+
name = HERMES_AGENT_HARNESS;
|
|
18
|
+
version;
|
|
19
|
+
freezeStateHashIgnore = ['auth', 'auth.json', 'bin/tirith', '.env', 'config.yaml'];
|
|
20
|
+
adapter;
|
|
21
|
+
hermesPath;
|
|
22
|
+
hermesDoctorTimeoutMs;
|
|
23
|
+
constructor(config) {
|
|
24
|
+
this.adapter = config.adapter;
|
|
25
|
+
this.version = config.version ?? '0.1.0';
|
|
26
|
+
this.hermesPath = config.hermesPath;
|
|
27
|
+
this.hermesDoctorTimeoutMs = config.hermesDoctorTimeoutMs;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Readiness probe — shells out to `hermes doctor` via the shared
|
|
31
|
+
* `probeHermesDoctor` helper (same logic the SPA precheck endpoint
|
|
32
|
+
* uses). Reports:
|
|
33
|
+
* - `installed: false` → binary not on PATH → ready=false with install
|
|
34
|
+
* nextStep so the operator sees an actionable message instead of
|
|
35
|
+
* N/N failed claims (#330).
|
|
36
|
+
* - `exitCode !== 0` → binary exists but `hermes doctor` reports a
|
|
37
|
+
* configuration problem (e.g. provider not signed in) → ready=false
|
|
38
|
+
* with a nextStep that points at the SPA precheck panel.
|
|
39
|
+
* - OpenRouter not authenticated → ready=false. `hermes doctor` exits 0
|
|
40
|
+
* even when every provider is logged out (it treats missing providers
|
|
41
|
+
* as warnings), so this third gate probes `hermes auth status
|
|
42
|
+
* openrouter` directly. Hermes is OpenRouter-only, so a logged-out
|
|
43
|
+
* OpenRouter means Hermes has no usable model provider and every
|
|
44
|
+
* claim would burn (#332/#330/#348).
|
|
45
|
+
* - all three gates pass → ready=true.
|
|
46
|
+
*/
|
|
47
|
+
async isReady(_ctx) {
|
|
48
|
+
const config = {};
|
|
49
|
+
if (this.hermesPath !== undefined)
|
|
50
|
+
config.hermesPath = this.hermesPath;
|
|
51
|
+
if (this.hermesDoctorTimeoutMs !== undefined)
|
|
52
|
+
config.hermesDoctorTimeoutMs = this.hermesDoctorTimeoutMs;
|
|
53
|
+
const result = probeHermesDoctor(config);
|
|
54
|
+
if (!result.installed) {
|
|
55
|
+
return {
|
|
56
|
+
ready: false,
|
|
57
|
+
reason: 'hermes binary not installed',
|
|
58
|
+
nextStep: {
|
|
59
|
+
description: 'Install the Hermes agent runner — see the Hermes precheck panel in the operator dashboard for the install command.',
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
if (result.exitCode !== 0) {
|
|
64
|
+
const stderr = result.stderr.trim();
|
|
65
|
+
const stdout = result.stdout.trim();
|
|
66
|
+
const detail = stderr.length > 0 ? stderr : stdout;
|
|
67
|
+
return {
|
|
68
|
+
ready: false,
|
|
69
|
+
reason: `hermes doctor exit ${result.exitCode}${detail ? `: ${detail}` : ''}`,
|
|
70
|
+
nextStep: {
|
|
71
|
+
description: 'Run `hermes doctor` locally to surface the configuration problem, or open the Hermes precheck panel in the operator dashboard to sign in / select a provider.',
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// Third gate: `hermes doctor` exits 0 even when every model provider is
|
|
76
|
+
// logged out. Hermes is OpenRouter-only, so probe OpenRouter auth
|
|
77
|
+
// directly — a logged-out OpenRouter means Hermes cannot run a task.
|
|
78
|
+
const auth = probeHermesAuthStatus('openrouter', config);
|
|
79
|
+
if (!auth.authed) {
|
|
80
|
+
return {
|
|
81
|
+
ready: false,
|
|
82
|
+
reason: 'OpenRouter not connected — Hermes has no usable model provider',
|
|
83
|
+
nextStep: {
|
|
84
|
+
description: 'Connect OpenRouter — sign in via the Hermes precheck panel in the operator dashboard, or run `hermes login` locally.',
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return { ready: true };
|
|
89
|
+
}
|
|
90
|
+
supports(spec) {
|
|
91
|
+
// Hermes currently ships a SWE-rebench v2 task prompt and runtime plugin.
|
|
92
|
+
// Evaluation is not supported: Hermes has no evaluator-side plugins
|
|
93
|
+
// (verdict signing, checker contracts).
|
|
94
|
+
return spec.role !== 'evaluation' && spec.solverType === 'swe-rebench-v2.v1';
|
|
95
|
+
}
|
|
96
|
+
async run(ctx) {
|
|
97
|
+
const window = ctx.task.window ?? { startTs: 0, endTs: 0 };
|
|
98
|
+
await this.adapter.runTask({
|
|
99
|
+
taskId: ctx.task.id,
|
|
100
|
+
requestId: ctx.requestId,
|
|
101
|
+
taskCid: ctx.taskCid,
|
|
102
|
+
solverType: ctx.task.solverType,
|
|
103
|
+
model: ctx.solverNet?.model,
|
|
104
|
+
taskBody: ctx.task,
|
|
105
|
+
implStateDir: ctx.implStateDir,
|
|
106
|
+
workingDir: ctx.workingDir,
|
|
107
|
+
pluginRoots: [...(ctx.solverPluginRoots ?? [])],
|
|
108
|
+
windowStartTs: window.startTs,
|
|
109
|
+
windowEndTs: window.endTs,
|
|
110
|
+
msUntilEndTs: ctx.msUntilEndTs(),
|
|
111
|
+
abort: ctx.abort,
|
|
112
|
+
mode: ctx.mode,
|
|
113
|
+
});
|
|
114
|
+
const solution = await harvestOutput(ctx.workingDir, undefined, ctx.task);
|
|
115
|
+
return { ...solution, venueRef: { ...solution.venueRef, name: this.name } };
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=harness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harness.js","sourceRoot":"","sources":["../../../../src/harnesses/impls/hermes-agent/harness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { HermesHarness } from './harness.js';
|
|
2
|
+
export { HermesHarnessAdapter } from './adapter.js';
|
|
3
|
+
export { hermesConfigFromSolverPlugins, type HermesConfigSnippet, type ConfigBuilderEnv, type McpServer, } from './config-builder.js';
|
|
4
|
+
export { buildInitialPrompt } from './prompt.js';
|
|
5
|
+
export { writePerTaskHermesConfig } from './bootstrap.js';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// client/src/harnesses/impls/hermes-agent/index.ts
|
|
2
|
+
export { HermesHarness } from './harness.js';
|
|
3
|
+
export { HermesHarnessAdapter } from './adapter.js';
|
|
4
|
+
export { hermesConfigFromSolverPlugins, } from './config-builder.js';
|
|
5
|
+
export { buildInitialPrompt } from './prompt.js';
|
|
6
|
+
export { writePerTaskHermesConfig } from './bootstrap.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/harnesses/impls/hermes-agent/index.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EACL,6BAA6B,GAI9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC"}
|