@jinn-network/client 0.1.8 → 0.1.9-canary.050a41b1
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/dist/adapters/mech/adapter.d.ts +21 -1
- package/dist/adapters/mech/adapter.js +77 -10
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/contracts.js +62 -28
- package/dist/adapters/mech/contracts.js.map +1 -1
- package/dist/adapters/mech/safe-revert.d.ts +4 -0
- package/dist/adapters/mech/safe-revert.js +5 -1
- package/dist/adapters/mech/safe-revert.js.map +1 -1
- package/dist/adapters/mech/safe.js +5 -1
- package/dist/adapters/mech/safe.js.map +1 -1
- package/dist/adapters/mech/verdict-code.js +1 -1
- package/dist/adapters/mech/verdict-code.js.map +1 -1
- package/dist/api/bootstrap-endpoint.d.ts +1 -0
- package/dist/api/bootstrap-endpoint.js +1 -0
- package/dist/api/bootstrap-endpoint.js.map +1 -1
- package/dist/api/discovery-endpoint.d.ts +1 -0
- package/dist/api/discovery-endpoint.js +24 -0
- package/dist/api/discovery-endpoint.js.map +1 -1
- package/dist/api/fleet-build.d.ts +1 -7
- package/dist/api/fleet-build.js +0 -7
- package/dist/api/fleet-build.js.map +1 -1
- package/dist/api/gather-status.d.ts +8 -2
- package/dist/api/gather-status.js +29 -117
- package/dist/api/gather-status.js.map +1 -1
- package/dist/api/loop-completion-build.d.ts +79 -0
- package/dist/api/loop-completion-build.js +155 -0
- package/dist/api/loop-completion-build.js.map +1 -0
- package/dist/api/peers.js +2 -0
- package/dist/api/peers.js.map +1 -1
- package/dist/api/setup-endpoints.d.ts +32 -0
- package/dist/api/setup-endpoints.js +93 -23
- package/dist/api/setup-endpoints.js.map +1 -1
- package/dist/api/solvernets-endpoints.js +3 -0
- package/dist/api/solvernets-endpoints.js.map +1 -1
- package/dist/api/status-build.d.ts +43 -33
- package/dist/api/status-build.js +3 -26
- package/dist/api/status-build.js.map +1 -1
- package/dist/api/status-rollup-build.d.ts +0 -4
- package/dist/api/status-rollup-build.js +0 -4
- package/dist/api/status-rollup-build.js.map +1 -1
- package/dist/build-info.json +4 -4
- package/dist/build-meta.json +1 -1
- package/dist/cli/commands/codedigest-revert-check.js +6 -2
- package/dist/cli/commands/codedigest-revert-check.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +3 -0
- package/dist/cli/commands/doctor.js +37 -2
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/eval.d.ts +76 -0
- package/dist/cli/commands/eval.js +401 -0
- package/dist/cli/commands/eval.js.map +1 -0
- package/dist/cli/commands/rewards.d.ts +2 -0
- package/dist/cli/commands/rewards.js +30 -3
- package/dist/cli/commands/rewards.js.map +1 -1
- package/dist/cli/commands/solver-nets.js +68 -0
- package/dist/cli/commands/solver-nets.js.map +1 -1
- package/dist/cli/commands/status.js +0 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config.d.ts +58 -7
- package/dist/config.js +96 -7
- package/dist/config.js.map +1 -1
- package/dist/daemon/ai-units-gate.d.ts +6 -6
- package/dist/daemon/ai-units-gate.js +11 -10
- package/dist/daemon/ai-units-gate.js.map +1 -1
- package/dist/daemon/balance-topup-loop.js +3 -0
- package/dist/daemon/balance-topup-loop.js.map +1 -1
- package/dist/daemon/creator.js +2 -0
- package/dist/daemon/creator.js.map +1 -1
- package/dist/daemon/daemon.d.ts +15 -0
- package/dist/daemon/daemon.js +78 -22
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/eviction-loop.d.ts +7 -0
- package/dist/daemon/eviction-loop.js +16 -0
- package/dist/daemon/eviction-loop.js.map +1 -1
- package/dist/daemon/jinn-claim-loop.js +3 -0
- package/dist/daemon/jinn-claim-loop.js.map +1 -1
- package/dist/daemon/join-applier.d.ts +35 -0
- package/dist/daemon/join-applier.js +49 -0
- package/dist/daemon/join-applier.js.map +1 -0
- package/dist/daemon/loop-heartbeat.d.ts +34 -0
- package/dist/daemon/loop-heartbeat.js +39 -0
- package/dist/daemon/loop-heartbeat.js.map +1 -0
- package/dist/daemon/reward-claim-loop.js +3 -0
- package/dist/daemon/reward-claim-loop.js.map +1 -1
- package/dist/daemon/watchdog-loop.d.ts +84 -0
- package/dist/daemon/watchdog-loop.js +91 -0
- package/dist/daemon/watchdog-loop.js.map +1 -0
- package/dist/dashboard/assets/index-8tAiMbUV.css +1 -0
- package/dist/dashboard/assets/index-CSFVwGFh.js +167 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/discovery/http.d.ts +7 -0
- package/dist/discovery/http.js +241 -25
- package/dist/discovery/http.js.map +1 -1
- package/dist/discovery/onchain.js +155 -1
- package/dist/discovery/onchain.js.map +1 -1
- package/dist/discovery/types.d.ts +106 -0
- package/dist/discovery/types.js +40 -0
- package/dist/discovery/types.js.map +1 -1
- package/dist/discovery/with-fallback.js +14 -0
- package/dist/discovery/with-fallback.js.map +1 -1
- package/dist/earning/bootstrap.d.ts +23 -0
- package/dist/earning/bootstrap.js +76 -27
- package/dist/earning/bootstrap.js.map +1 -1
- package/dist/earning/faucet.d.ts +1 -1
- package/dist/earning/faucet.js +2 -2
- package/dist/earning/faucet.js.map +1 -1
- package/dist/earning/safe-adapter.js +11 -0
- package/dist/earning/safe-adapter.js.map +1 -1
- package/dist/eval/eval-harness-run.d.ts +63 -0
- package/dist/eval/eval-harness-run.js +123 -0
- package/dist/eval/eval-harness-run.js.map +1 -0
- package/dist/eval/orchestrator.d.ts +163 -0
- package/dist/eval/orchestrator.js +232 -0
- package/dist/eval/orchestrator.js.map +1 -0
- package/dist/eval/paired.d.ts +68 -0
- package/dist/eval/paired.js +93 -0
- package/dist/eval/paired.js.map +1 -0
- package/dist/eval/resolve-slate-tasks.d.ts +35 -0
- package/dist/eval/resolve-slate-tasks.js +56 -0
- package/dist/eval/resolve-slate-tasks.js.map +1 -0
- package/dist/eval/screen-discovery.d.ts +22 -0
- package/dist/eval/screen-discovery.js +71 -0
- package/dist/eval/screen-discovery.js.map +1 -0
- package/dist/eval/screen-progress.d.ts +41 -0
- package/dist/eval/screen-progress.js +60 -0
- package/dist/eval/screen-progress.js.map +1 -0
- package/dist/eval/screen-runner.d.ts +30 -0
- package/dist/eval/screen-runner.js +289 -0
- package/dist/eval/screen-runner.js.map +1 -0
- package/dist/eval/screen.d.ts +107 -0
- package/dist/eval/screen.js +159 -0
- package/dist/eval/screen.js.map +1 -0
- package/dist/eval/slope.d.ts +29 -0
- package/dist/eval/slope.js +46 -0
- package/dist/eval/slope.js.map +1 -0
- package/dist/eval/train-sequence.d.ts +35 -0
- package/dist/eval/train-sequence.js +59 -0
- package/dist/eval/train-sequence.js.map +1 -0
- package/dist/eval/wilson.d.ts +45 -0
- package/dist/eval/wilson.js +48 -0
- package/dist/eval/wilson.js.map +1 -0
- package/dist/harnesses/engine/canonical-json.js +5 -3
- package/dist/harnesses/engine/canonical-json.js.map +1 -1
- package/dist/harnesses/engine/engine.d.ts +24 -0
- package/dist/harnesses/engine/engine.js +72 -9
- package/dist/harnesses/engine/engine.js.map +1 -1
- package/dist/harnesses/engine/persistence.d.ts +17 -0
- package/dist/harnesses/engine/persistence.js +28 -0
- package/dist/harnesses/engine/persistence.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/adapter.d.ts +2 -0
- package/dist/harnesses/impls/hermes-agent/adapter.js +8 -5
- package/dist/harnesses/impls/hermes-agent/adapter.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/bootstrap.d.ts +1 -0
- package/dist/harnesses/impls/hermes-agent/bootstrap.js +6 -1
- package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/harness.d.ts +17 -3
- package/dist/harnesses/impls/hermes-agent/harness.js +68 -5
- package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -1
- package/dist/harnesses/impls/index.d.ts +2 -0
- package/dist/harnesses/impls/index.js +2 -0
- package/dist/harnesses/impls/index.js.map +1 -1
- package/dist/harnesses/impls/learner/adapters/claude-code.js +5 -0
- package/dist/harnesses/impls/learner/adapters/claude-code.js.map +1 -1
- package/dist/harnesses/impls/learner/harness.d.ts +17 -1
- package/dist/harnesses/impls/learner/harness.js +51 -1
- package/dist/harnesses/impls/learner/harness.js.map +1 -1
- package/dist/harnesses/impls/learner/harvest.d.ts +2 -0
- package/dist/harnesses/impls/learner/harvest.js +7 -1
- package/dist/harnesses/impls/learner/harvest.js.map +1 -1
- package/dist/harnesses/impls/learner/plugin-path.js +1 -0
- package/dist/harnesses/impls/learner/plugin-path.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +3 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.d.ts +2 -2
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js +3 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js.map +1 -1
- package/dist/harnesses/readiness-registry.d.ts +10 -0
- package/dist/harnesses/readiness-registry.js +13 -0
- package/dist/harnesses/readiness-registry.js.map +1 -1
- package/dist/harnesses/types.d.ts +14 -0
- package/dist/learner/revert-decision.d.ts +16 -1
- package/dist/learner/revert-decision.js +38 -18
- package/dist/learner/revert-decision.js.map +1 -1
- package/dist/learner/revert-stats.d.ts +14 -0
- package/dist/learner/revert-stats.js +42 -0
- package/dist/learner/revert-stats.js.map +1 -1
- package/dist/local-provider-url.d.ts +3 -0
- package/dist/local-provider-url.js +28 -0
- package/dist/local-provider-url.js.map +1 -0
- package/dist/main.js +94 -25
- package/dist/main.js.map +1 -1
- package/dist/plugins/learner/.claude-plugin/plugin.json +1 -1
- package/dist/plugins/learner/.codex-plugin/plugin.json +1 -1
- package/dist/plugins/learner/hooks/session-start +30 -1
- package/dist/plugins/learner/skills/learn/consolidator-prompt.md +4 -0
- package/dist/preflight/deployment-readiness.d.ts +147 -0
- package/dist/preflight/deployment-readiness.js +366 -0
- package/dist/preflight/deployment-readiness.js.map +1 -0
- package/dist/preflight/pidfile-liveness.d.ts +7 -1
- package/dist/preflight/pidfile-liveness.js +14 -0
- package/dist/preflight/pidfile-liveness.js.map +1 -1
- package/dist/rpc/transport.d.ts +36 -0
- package/dist/rpc/transport.js +123 -24
- package/dist/rpc/transport.js.map +1 -1
- package/dist/scripts/swe-rebench-v2-seed-pool.json +2 -1
- package/dist/solver-nets/registry.d.ts +19 -0
- package/dist/solver-nets/registry.js +92 -66
- package/dist/solver-nets/registry.js.map +1 -1
- package/dist/solver-types/_swe-rebench-v2-held-out-slate.d.ts +76 -0
- package/dist/solver-types/_swe-rebench-v2-held-out-slate.js +156 -0
- package/dist/solver-types/_swe-rebench-v2-held-out-slate.js.map +1 -0
- package/dist/solver-types/_swe-rebench-v2-pool-recovery.d.ts +81 -0
- package/dist/solver-types/_swe-rebench-v2-pool-recovery.js +116 -0
- package/dist/solver-types/_swe-rebench-v2-pool-recovery.js.map +1 -0
- package/dist/solver-types/_swe-rebench-v2-state.d.ts +9 -0
- package/dist/solver-types/_swe-rebench-v2-state.js +14 -0
- package/dist/solver-types/_swe-rebench-v2-state.js.map +1 -1
- package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +30 -0
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js +40 -0
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
- package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v1.json +20 -0
- package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v2.json +19 -0
- package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v2.screening-report.json +628 -0
- package/dist/solver-types/solver-type.d.ts +8 -0
- package/dist/solver-types/swe-rebench-v2.d.ts +2 -0
- package/dist/solver-types/swe-rebench-v2.js +115 -10
- package/dist/solver-types/swe-rebench-v2.js.map +1 -1
- package/dist/solvernets/launched-record-dispatcher.d.ts +3 -0
- package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
- package/dist/solvernets/registry-client-erc8004.js +29 -37
- package/dist/solvernets/registry-client-erc8004.js.map +1 -1
- package/dist/solvernets/registry-client.d.ts +6 -0
- package/dist/solvernets/store.js +7 -2
- package/dist/solvernets/store.js.map +1 -1
- package/dist/spend/ai-units-config.d.ts +10 -0
- package/dist/spend/ai-units-config.js +7 -1
- package/dist/spend/ai-units-config.js.map +1 -1
- package/dist/spend/ai-units.d.ts +51 -0
- package/dist/spend/ai-units.js +73 -0
- package/dist/spend/ai-units.js.map +1 -1
- package/dist/spend/record.js +12 -5
- package/dist/spend/record.js.map +1 -1
- package/dist/store/store.d.ts +91 -5
- package/dist/store/store.js +170 -7
- package/dist/store/store.js.map +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.d.ts +108 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.js +25 -1
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2-held-out-slate.d.ts +65 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2-held-out-slate.js +123 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.d.ts +2 -2
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.js +1 -1
- package/dist/vendor/@jinn-network/sdk/package.json +4 -0
- package/docker-compose.yml +3 -2
- package/package.json +22 -18
- package/plugins/learner/.claude-plugin/plugin.json +1 -1
- package/plugins/learner/.codex-plugin/plugin.json +1 -1
- package/plugins/learner/hooks/session-start +30 -1
- package/plugins/learner/skills/learn/consolidator-prompt.md +4 -0
- package/plugins/swe-rebench-v2-runtime/hooks/hooks.json +16 -0
- package/plugins/swe-rebench-v2-runtime/hooks/session-start +74 -0
- package/dist/dashboard/assets/index-CzKxvMcU.css +0 -32
- package/dist/dashboard/assets/index-yVemxHot.js +0 -351
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `jinn eval <slate-version> --checkpoint <cid>` — run a held-out slate against
|
|
3
|
+
* a checkpoint in frozen mode and emit a resolved-rate comparison vs the parent
|
|
4
|
+
* checkpoint with a Wilson confidence interval (issue #818).
|
|
5
|
+
*
|
|
6
|
+
* The command is a thin shell over `runEval` (orchestrator.ts): a pure
|
|
7
|
+
* `createEvalCommand(deps)` factory tested directly, plus a default
|
|
8
|
+
* `CommandModule` that wires production deps. The orchestration itself
|
|
9
|
+
* (slate load -> resolve tasks -> runEval) is the injected `runPipeline` seam;
|
|
10
|
+
* the live Docker/IPFS wiring is completed in #819's thin slice.
|
|
11
|
+
*
|
|
12
|
+
* Spec: docs/superpowers/specs/2026-05-06-agent-harness-solvernet-design.md
|
|
13
|
+
*/
|
|
14
|
+
import type { CommandModule } from '../command.js';
|
|
15
|
+
import { type HarnessCheckpointManifest } from '../../vendor/@jinn-network/sdk/dist/checkpoint.js';
|
|
16
|
+
import { type EvalRunResult, type RunHarnessOnceForEval } from '../../eval/orchestrator.js';
|
|
17
|
+
import { loadConfig } from '../../config.js';
|
|
18
|
+
import type { RuntimePlugin } from '../../harnesses/types.js';
|
|
19
|
+
import { type ClaudeCodeHarnessAdapterConfig } from '../../harnesses/impls/learner/adapters/claude-code.js';
|
|
20
|
+
export interface RunPipelineArgs {
|
|
21
|
+
checkpointCid: string;
|
|
22
|
+
checkpointManifest: HarnessCheckpointManifest;
|
|
23
|
+
solverType: string;
|
|
24
|
+
slateVersion: string;
|
|
25
|
+
parentCheckpointCid: string;
|
|
26
|
+
/** Config file path (`--config`); production wiring loads dbPath/engine from it. */
|
|
27
|
+
configPath?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Local impl-state directory to run the frozen slate against
|
|
30
|
+
* (`--impl-state-dir`). Defaults to the daemon's
|
|
31
|
+
* `engine.implStateDirRoot/<implName>`. See PRODUCTION_DEPS below.
|
|
32
|
+
*/
|
|
33
|
+
implStateDir?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface EvalCommandDeps {
|
|
36
|
+
/** Resolve a checkpoint manifest from its CID (production: IPFS fetch + schema parse). */
|
|
37
|
+
fetchManifest(cid: string): Promise<HarnessCheckpointManifest>;
|
|
38
|
+
/** Load the slate, resolve its tasks, and run the frozen-mode orchestrator. */
|
|
39
|
+
runPipeline(args: RunPipelineArgs): Promise<EvalRunResult>;
|
|
40
|
+
}
|
|
41
|
+
export declare function createEvalCommand(deps: EvalCommandDeps): CommandModule;
|
|
42
|
+
/**
|
|
43
|
+
* Keyless corpus endpoints for the learner adapter's bundled MCP server (record
|
|
44
|
+
* search / artifact inspection). Mirrors `main.ts`'s `corpusEnv` assembly so the
|
|
45
|
+
* eval agent runtime matches the daemon's. Sources every field from
|
|
46
|
+
* `loadConfig()` — there is no bootstrap state in the CLI path, so the identity
|
|
47
|
+
* registry falls back to the chain default for the resolved network.
|
|
48
|
+
*/
|
|
49
|
+
export declare function corpusEnvFromConfig(config: ReturnType<typeof loadConfig>): NonNullable<ClaudeCodeHarnessAdapterConfig['corpusEnv']> | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* Resolve the local frozen impl-state directory for the checkpoint. There is
|
|
52
|
+
* no production IPFS round-trip for a checkpoint's `implStateDir` (the
|
|
53
|
+
* checkpoint publish/install verbs are factory-only; the pin/fetch format is a
|
|
54
|
+
* future verification layer — spec §6.4, "Layer 4"). The realistic operator
|
|
55
|
+
* workflow (#824) evaluates the operator's OWN frozen state, which already
|
|
56
|
+
* lives on disk. Mirrors `codedigest-revert-check` (`--impl-state-dir`).
|
|
57
|
+
*/
|
|
58
|
+
export declare function resolveLocalImplStateDir(explicit: string | undefined, implName: string, config: ReturnType<typeof loadConfig>): string;
|
|
59
|
+
/**
|
|
60
|
+
* Production `runHarnessOnce` for the eval orchestrator. Delegates to the
|
|
61
|
+
* shared {@link runHarnessForEval} helper, which builds the FULL
|
|
62
|
+
* daemon-equivalent HarnessContext — including `solverPluginRoots` from the
|
|
63
|
+
* SolverNet's `runtimePlugins` — so the agent gets the bundled MCP server
|
|
64
|
+
* (`submit_typed_payload`) and can produce a gradeable patch. The legacy
|
|
65
|
+
* hand-rolled body ran the agent WITHOUT plugins, leaving every task
|
|
66
|
+
* unscorable; this factory closes over the resolved `solverType` +
|
|
67
|
+
* `runtimePlugins` and surfaces the seam the orchestrator already drives.
|
|
68
|
+
*/
|
|
69
|
+
export declare function makeEvalRunHarnessOnce(opts: {
|
|
70
|
+
solverType: string;
|
|
71
|
+
runtimePlugins: RuntimePlugin[];
|
|
72
|
+
solverNetName?: string;
|
|
73
|
+
model?: string;
|
|
74
|
+
}): RunHarnessOnceForEval;
|
|
75
|
+
declare const command: CommandModule;
|
|
76
|
+
export default command;
|
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `jinn eval <slate-version> --checkpoint <cid>` — run a held-out slate against
|
|
3
|
+
* a checkpoint in frozen mode and emit a resolved-rate comparison vs the parent
|
|
4
|
+
* checkpoint with a Wilson confidence interval (issue #818).
|
|
5
|
+
*
|
|
6
|
+
* The command is a thin shell over `runEval` (orchestrator.ts): a pure
|
|
7
|
+
* `createEvalCommand(deps)` factory tested directly, plus a default
|
|
8
|
+
* `CommandModule` that wires production deps. The orchestration itself
|
|
9
|
+
* (slate load -> resolve tasks -> runEval) is the injected `runPipeline` seam;
|
|
10
|
+
* the live Docker/IPFS wiring is completed in #819's thin slice.
|
|
11
|
+
*
|
|
12
|
+
* Spec: docs/superpowers/specs/2026-05-06-agent-harness-solvernet-design.md
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync } from 'node:fs';
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
import { homedir } from 'node:os';
|
|
17
|
+
import { parseCommandArgs, COMMON_FLAGS } from '../command.js';
|
|
18
|
+
import { emitEnvelope } from '../../errors/envelope.js';
|
|
19
|
+
import { HarnessCheckpointManifestSchema, } from '../../vendor/@jinn-network/sdk/dist/checkpoint.js';
|
|
20
|
+
import { runEval } from '../../eval/orchestrator.js';
|
|
21
|
+
import { resolveSlateTasks } from '../../eval/resolve-slate-tasks.js';
|
|
22
|
+
import { loadConfig } from '../../config.js';
|
|
23
|
+
import { Store } from '../../store/store.js';
|
|
24
|
+
import { fetchFromIpfs } from '../../adapters/mech/ipfs.js';
|
|
25
|
+
import { resolveRuntimePluginsForSolverType, runHarnessForEval, } from '../../eval/eval-harness-run.js';
|
|
26
|
+
import { DEFAULT_EXECUTION_DISCOVERY_FROM_BLOCK } from '../../corpus/onchain-query.js';
|
|
27
|
+
import { solverTypeFromJoinedContract } from '../../solver-nets/registry.js';
|
|
28
|
+
import { loadHeldOutSlate } from '../../solver-types/_swe-rebench-v2-held-out-slate.js';
|
|
29
|
+
import { loadSweRebenchV2Pool, defaultStateDir } from '../../solver-types/swe-rebench-v2.js';
|
|
30
|
+
import { PoolCacheStore, loadPoolWithCacheFallback } from '../../solver-types/_swe-rebench-v2-pool-cache.js';
|
|
31
|
+
import { LearnerHarness } from '../../harnesses/impls/learner/harness.js';
|
|
32
|
+
import { ClaudeCodeHarnessAdapter, } from '../../harnesses/impls/learner/adapters/claude-code.js';
|
|
33
|
+
import { CodexCodeHarnessAdapter } from '../../harnesses/impls/learner/adapters/codex-code.js';
|
|
34
|
+
import { CODEX_HARNESS, canonicalHarnessName, harnessStateDirName } from '../../harnesses/names.js';
|
|
35
|
+
import { SweRebenchV2Evaluator } from '../../harnesses/impls/swe-rebench-v2-evaluator/index.js';
|
|
36
|
+
import { HttpHfFetcher } from '../../harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js';
|
|
37
|
+
import { PythonEvalRunner } from '../../harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js';
|
|
38
|
+
import { readEnabledState } from '../../harnesses/impls/swe-rebench-v2-evaluator/harness.js';
|
|
39
|
+
const EXAMPLE = 'jinn eval v1 --checkpoint <cid> [--parent <cid>] [--solver-type swe-rebench-v2] [--json|--human]';
|
|
40
|
+
export function createEvalCommand(deps) {
|
|
41
|
+
return {
|
|
42
|
+
name: 'eval',
|
|
43
|
+
summary: 'Run a held-out slate against a checkpoint and compare its resolved rate vs the parent (#818)',
|
|
44
|
+
helpText: `Usage:
|
|
45
|
+
${EXAMPLE}
|
|
46
|
+
|
|
47
|
+
Runs the held-out task slate for <slate-version> against the checkpoint in
|
|
48
|
+
FROZEN mode (the freeze-fence holds — no implStateDir mutation), writes per-task
|
|
49
|
+
pass/fail, and emits a resolved-rate comparison vs the parent checkpoint with a
|
|
50
|
+
Wilson confidence interval.
|
|
51
|
+
|
|
52
|
+
Arguments:
|
|
53
|
+
<slate-version> Held-out slate version, e.g. v1
|
|
54
|
+
|
|
55
|
+
Options:
|
|
56
|
+
--checkpoint <cid> Checkpoint to evaluate (required)
|
|
57
|
+
--parent <cid> Parent checkpoint to compare against
|
|
58
|
+
(default: manifest.parentCheckpointCid)
|
|
59
|
+
--solver-type <type> SolverType (default: swe-rebench-v2)
|
|
60
|
+
--impl-state-dir <dir> Local frozen impl-state to evaluate
|
|
61
|
+
(default: engine.implStateDirRoot/<implName> from config)
|
|
62
|
+
--config <path> Config file (default: ~/.jinn-client/config.json)
|
|
63
|
+
--json Emit JSON (perTask[] + comparison{child,parent,delta,verdict})
|
|
64
|
+
--human Emit a human-readable summary line
|
|
65
|
+
|
|
66
|
+
Scores are only comparable WITHIN a slate version. The parent must already have
|
|
67
|
+
been evaluated against the same slate version, else the command fails loud.`,
|
|
68
|
+
async run(ctx) {
|
|
69
|
+
let parsed;
|
|
70
|
+
try {
|
|
71
|
+
parsed = parseCommandArgs(ctx.argv, {
|
|
72
|
+
...COMMON_FLAGS,
|
|
73
|
+
checkpoint: { type: 'string' },
|
|
74
|
+
parent: { type: 'string' },
|
|
75
|
+
'solver-type': { type: 'string', default: 'swe-rebench-v2' },
|
|
76
|
+
'impl-state-dir': { type: 'string' },
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
emitEnvelope({
|
|
81
|
+
code: 'invalid_invocation',
|
|
82
|
+
message: err instanceof Error ? err.message : String(err),
|
|
83
|
+
exampleCli: EXAMPLE,
|
|
84
|
+
details: { field: 'flags' },
|
|
85
|
+
}, { writer: ctx.writer, exit: ctx.exit });
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const slateVersion = parsed.positionals[0];
|
|
89
|
+
const checkpointCid = parsed.values.checkpoint;
|
|
90
|
+
if (!slateVersion) {
|
|
91
|
+
emitEnvelope({ code: 'invalid_invocation', message: '<slate-version> positional is required', exampleCli: EXAMPLE, details: { field: 'slate-version' } }, { writer: ctx.writer, exit: ctx.exit });
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (!checkpointCid) {
|
|
95
|
+
emitEnvelope({ code: 'invalid_invocation', message: '--checkpoint <cid> is required', exampleCli: EXAMPLE, details: { field: 'checkpoint' } }, { writer: ctx.writer, exit: ctx.exit });
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const manifest = await deps.fetchManifest(checkpointCid);
|
|
99
|
+
const parentCheckpointCid = parsed.values.parent ?? manifest.parentCheckpointCid;
|
|
100
|
+
if (!parentCheckpointCid) {
|
|
101
|
+
emitEnvelope({
|
|
102
|
+
code: 'invalid_invocation',
|
|
103
|
+
message: 'no parent checkpoint: manifest.parentCheckpointCid is null and --parent was not given',
|
|
104
|
+
exampleCli: EXAMPLE,
|
|
105
|
+
details: { field: 'parent' },
|
|
106
|
+
}, { writer: ctx.writer, exit: ctx.exit });
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const result = await deps.runPipeline({
|
|
110
|
+
checkpointCid,
|
|
111
|
+
checkpointManifest: manifest,
|
|
112
|
+
solverType: parsed.values['solver-type'] ?? 'swe-rebench-v2',
|
|
113
|
+
slateVersion,
|
|
114
|
+
parentCheckpointCid,
|
|
115
|
+
...(parsed.values.config ? { configPath: parsed.values.config } : {}),
|
|
116
|
+
...(parsed.values['impl-state-dir'] ? { implStateDir: parsed.values['impl-state-dir'] } : {}),
|
|
117
|
+
});
|
|
118
|
+
if (parsed.values.human) {
|
|
119
|
+
ctx.writer.write(renderHuman(result) + '\n');
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
ctx.writer.write(JSON.stringify(result) + '\n');
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
function pct(p) {
|
|
128
|
+
return `${(p * 100).toFixed(1)}%`;
|
|
129
|
+
}
|
|
130
|
+
function ci(c) {
|
|
131
|
+
return `[${(c.lo * 100).toFixed(1)}, ${(c.hi * 100).toFixed(1)}]`;
|
|
132
|
+
}
|
|
133
|
+
function renderHuman(result) {
|
|
134
|
+
const { comparison: c } = result;
|
|
135
|
+
const passed = result.perTask.filter((t) => t.passed === true).length;
|
|
136
|
+
const scorable = result.perTask.filter((t) => !t.unscorable).length;
|
|
137
|
+
const unscorable = result.perTask.filter((t) => t.unscorable).length;
|
|
138
|
+
const deltaPp = (c.delta * 100).toFixed(1);
|
|
139
|
+
const sign = c.delta >= 0 ? '+' : '';
|
|
140
|
+
const verdict = c.verdict === 'trustworthy' ? 'trustworthy' : 'within noise';
|
|
141
|
+
const tail = unscorable > 0 ? ` (${unscorable} unscorable, excluded)` : '';
|
|
142
|
+
// Provenance (Legibility): the graded artifact is the operator's LOCAL frozen
|
|
143
|
+
// impl-state, verified == the named checkpoint — not a re-fetched checkpoint state.
|
|
144
|
+
const provenance = `evaluated local impl-state at ${result.evaluated.codeDigest}, verified == checkpoint`;
|
|
145
|
+
// Paired (matched-design) verdict — the correct, higher-power test for the
|
|
146
|
+
// same-slate before/after design; reported alongside the conservative marginal
|
|
147
|
+
// verdict above (DR-2026-06-02-b §2a).
|
|
148
|
+
const p = result.paired;
|
|
149
|
+
const pairedLine = p
|
|
150
|
+
? `\npaired (McNemar): ${p.improved}↑ ${p.regressed}↓ of ${p.pairs} matched pairs · ` +
|
|
151
|
+
`p=${p.pValue.toFixed(3)} (${p.verdict === 'trustworthy' ? 'trustworthy' : 'within noise'})`
|
|
152
|
+
: '';
|
|
153
|
+
return (`resolved ${passed}/${scorable} = ${pct(c.child.p)} ${ci(c.child)} ` +
|
|
154
|
+
`vs parent ${pct(c.parent.p)} ${ci(c.parent)} · Δ ${sign}${deltaPp}pp (${verdict})${tail}` +
|
|
155
|
+
pairedLine +
|
|
156
|
+
'\n' +
|
|
157
|
+
provenance);
|
|
158
|
+
}
|
|
159
|
+
const DEFAULT_CONFIG_PATH = join(homedir(), '.jinn-client', 'config.json');
|
|
160
|
+
/** Default impl-state root when config does not set `engine.implStateDirRoot`. */
|
|
161
|
+
function implStateDirRoot(config) {
|
|
162
|
+
return config.engine?.implStateDirRoot ?? join(homedir(), '.jinn-client', 'engine', 'impl-state');
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Keyless corpus endpoints for the learner adapter's bundled MCP server (record
|
|
166
|
+
* search / artifact inspection). Mirrors `main.ts`'s `corpusEnv` assembly so the
|
|
167
|
+
* eval agent runtime matches the daemon's. Sources every field from
|
|
168
|
+
* `loadConfig()` — there is no bootstrap state in the CLI path, so the identity
|
|
169
|
+
* registry falls back to the chain default for the resolved network.
|
|
170
|
+
*/
|
|
171
|
+
export function corpusEnvFromConfig(config) {
|
|
172
|
+
const chainId = config.network === 'testnet' ? 84532 : 8453;
|
|
173
|
+
const fromBlock = Number(DEFAULT_EXECUTION_DISCOVERY_FROM_BLOCK[chainId] ?? 0n);
|
|
174
|
+
const discoveryUrl = config.discovery?.url?.trim() || '';
|
|
175
|
+
const identityRegistryAddress = config.identityRegistryAddress;
|
|
176
|
+
if (!discoveryUrl && !identityRegistryAddress)
|
|
177
|
+
return undefined;
|
|
178
|
+
return {
|
|
179
|
+
...(discoveryUrl ? { discoveryUrl } : {}),
|
|
180
|
+
ipfsGatewayUrl: config.ipfsGatewayUrl,
|
|
181
|
+
rpcUrl: config.rpcUrl,
|
|
182
|
+
chainId,
|
|
183
|
+
...(identityRegistryAddress ? { identityRegistryAddress } : {}),
|
|
184
|
+
...(fromBlock > 0 ? { fromBlock } : {}),
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Build the production `Harness` for a checkpoint. swe-rebench-v2 checkpoints
|
|
189
|
+
* are produced by the learner harness (claude-code or codex variant); the
|
|
190
|
+
* manifest's `harnessPackage.implName` selects which. Constructed standalone
|
|
191
|
+
* (no funded wallet) — a frozen-mode eval run never touches the chain; it only
|
|
192
|
+
* runs the agent against the local impl-state and harvests the diff.
|
|
193
|
+
*
|
|
194
|
+
* Mirrors `buildHarnesses` (harnesses/impls/index.ts): the adapter MUST receive
|
|
195
|
+
* `corpusEnv` and `daemonApiToken` (alongside storePath/daemonApiUrl) so the
|
|
196
|
+
* agent runtime matches the daemon's — otherwise the bundled MCP surface
|
|
197
|
+
* degrades and the agent cannot produce a gradeable patch.
|
|
198
|
+
*/
|
|
199
|
+
function buildEvalHarness(implName, config) {
|
|
200
|
+
const canonical = canonicalHarnessName(implName);
|
|
201
|
+
const daemonApiToken = process.env['DAEMON_API_TOKEN']?.trim();
|
|
202
|
+
const corpusEnv = corpusEnvFromConfig(config);
|
|
203
|
+
const common = {
|
|
204
|
+
claudePath: config.claudePath ?? 'claude',
|
|
205
|
+
claudeModel: config.claudeModel,
|
|
206
|
+
storePath: config.dbPath,
|
|
207
|
+
daemonApiUrl: `http://127.0.0.1:${config.apiPort}`,
|
|
208
|
+
...(daemonApiToken ? { daemonApiToken } : {}),
|
|
209
|
+
...(corpusEnv ? { corpusEnv } : {}),
|
|
210
|
+
};
|
|
211
|
+
if (canonical === CODEX_HARNESS) {
|
|
212
|
+
return new LearnerHarness({
|
|
213
|
+
name: CODEX_HARNESS,
|
|
214
|
+
adapter: new CodexCodeHarnessAdapter({
|
|
215
|
+
...common,
|
|
216
|
+
...(config.codexPath !== undefined ? { codexPath: config.codexPath } : {}),
|
|
217
|
+
}),
|
|
218
|
+
claudePath: common.claudePath,
|
|
219
|
+
...(config.codexPath !== undefined ? { codexPath: config.codexPath } : {}),
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
// Default: claude-code learner (LearnerHarness's own default name).
|
|
223
|
+
return new LearnerHarness({
|
|
224
|
+
adapter: new ClaudeCodeHarnessAdapter(common),
|
|
225
|
+
claudePath: common.claudePath,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Resolve the local frozen impl-state directory for the checkpoint. There is
|
|
230
|
+
* no production IPFS round-trip for a checkpoint's `implStateDir` (the
|
|
231
|
+
* checkpoint publish/install verbs are factory-only; the pin/fetch format is a
|
|
232
|
+
* future verification layer — spec §6.4, "Layer 4"). The realistic operator
|
|
233
|
+
* workflow (#824) evaluates the operator's OWN frozen state, which already
|
|
234
|
+
* lives on disk. Mirrors `codedigest-revert-check` (`--impl-state-dir`).
|
|
235
|
+
*/
|
|
236
|
+
export function resolveLocalImplStateDir(explicit, implName, config) {
|
|
237
|
+
if (explicit)
|
|
238
|
+
return explicit;
|
|
239
|
+
// `implName` comes from the remote IPFS manifest (only `z.string().min(1)`),
|
|
240
|
+
// so constrain it before the path join — an unconstrained value like
|
|
241
|
+
// "../../.." would traverse out of engine.implStateDirRoot.
|
|
242
|
+
if (!/^[a-z0-9-]+$/.test(implName)) {
|
|
243
|
+
throw new Error(`invalid harness implName ${JSON.stringify(implName)} in checkpoint manifest: ` +
|
|
244
|
+
`expected /^[a-z0-9-]+$/ (refusing to derive an impl-state path that could ` +
|
|
245
|
+
`traverse outside engine.implStateDirRoot)`);
|
|
246
|
+
}
|
|
247
|
+
return join(implStateDirRoot(config), harnessStateDirName(implName));
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Production `runHarnessOnce` for the eval orchestrator. Delegates to the
|
|
251
|
+
* shared {@link runHarnessForEval} helper, which builds the FULL
|
|
252
|
+
* daemon-equivalent HarnessContext — including `solverPluginRoots` from the
|
|
253
|
+
* SolverNet's `runtimePlugins` — so the agent gets the bundled MCP server
|
|
254
|
+
* (`submit_typed_payload`) and can produce a gradeable patch. The legacy
|
|
255
|
+
* hand-rolled body ran the agent WITHOUT plugins, leaving every task
|
|
256
|
+
* unscorable; this factory closes over the resolved `solverType` +
|
|
257
|
+
* `runtimePlugins` and surfaces the seam the orchestrator already drives.
|
|
258
|
+
*/
|
|
259
|
+
export function makeEvalRunHarnessOnce(opts) {
|
|
260
|
+
return async ({ harness, implStateDir, mode, task }) => {
|
|
261
|
+
const resolvedTask = (task ?? {
|
|
262
|
+
id: 'eval-task',
|
|
263
|
+
description: '',
|
|
264
|
+
role: 'restoration',
|
|
265
|
+
window: { startTs: 0, endTs: Date.now() + 3_600_000 },
|
|
266
|
+
});
|
|
267
|
+
return runHarnessForEval({
|
|
268
|
+
harness,
|
|
269
|
+
task: resolvedTask,
|
|
270
|
+
solverType: opts.solverType,
|
|
271
|
+
runtimePlugins: opts.runtimePlugins,
|
|
272
|
+
implStateDir,
|
|
273
|
+
mode,
|
|
274
|
+
...(opts.solverNetName ? { solverNetName: opts.solverNetName } : {}),
|
|
275
|
+
...(opts.model ? { model: opts.model } : {}),
|
|
276
|
+
});
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Resolve slate `instance_id`s to `{ task, row }` pairs. The slate stores only
|
|
281
|
+
* ids; the HF dataset+split per instance comes from the pool (cached, with a
|
|
282
|
+
* HF fallback — mirrors the evaluator harness's pool path). Instances are
|
|
283
|
+
* grouped by `(hf_dataset, hf_split)` so each group's row scan hits the right
|
|
284
|
+
* partition.
|
|
285
|
+
*/
|
|
286
|
+
async function resolveSlateAgainstPool(args) {
|
|
287
|
+
const cacheResult = await loadPoolWithCacheFallback({
|
|
288
|
+
loadPool: loadSweRebenchV2Pool,
|
|
289
|
+
cache: new PoolCacheStore({ stateDir: args.stateDir }),
|
|
290
|
+
currentPool: [],
|
|
291
|
+
});
|
|
292
|
+
const pool = cacheResult.pool;
|
|
293
|
+
if (pool.length === 0) {
|
|
294
|
+
throw new Error(`cannot resolve held-out slate: SWE-rebench v2 pool is empty` +
|
|
295
|
+
(cacheResult.error ? ` (${cacheResult.error.message})` : ''));
|
|
296
|
+
}
|
|
297
|
+
const byId = new Map(pool.map((t) => [t.instance_id, t]));
|
|
298
|
+
// Group requested ids by (dataset, split), carrying the real pool task so the
|
|
299
|
+
// agent run gets the true problem_statement/base_commit (H1).
|
|
300
|
+
const groups = new Map();
|
|
301
|
+
for (const id of args.instanceIds) {
|
|
302
|
+
const poolTask = byId.get(id);
|
|
303
|
+
if (!poolTask) {
|
|
304
|
+
throw new Error(`held-out slate instance ${id} not present in the current pool`);
|
|
305
|
+
}
|
|
306
|
+
const key = `${poolTask.hf_dataset} ${poolTask.hf_split}`;
|
|
307
|
+
const group = groups.get(key) ?? { hf_dataset: poolTask.hf_dataset, hf_split: poolTask.hf_split, poolTasks: [] };
|
|
308
|
+
group.poolTasks.push(poolTask);
|
|
309
|
+
groups.set(key, group);
|
|
310
|
+
}
|
|
311
|
+
const out = [];
|
|
312
|
+
for (const group of groups.values()) {
|
|
313
|
+
const resolved = await resolveSlateTasks({
|
|
314
|
+
poolTasks: group.poolTasks,
|
|
315
|
+
hf_dataset: group.hf_dataset,
|
|
316
|
+
hf_split: group.hf_split,
|
|
317
|
+
fetcher: args.fetcher,
|
|
318
|
+
});
|
|
319
|
+
out.push(...resolved);
|
|
320
|
+
}
|
|
321
|
+
return out;
|
|
322
|
+
}
|
|
323
|
+
const PRODUCTION_DEPS = {
|
|
324
|
+
async fetchManifest(cid) {
|
|
325
|
+
const config = loadConfig(DEFAULT_CONFIG_PATH);
|
|
326
|
+
const raw = await fetchFromIpfs(config.ipfsGatewayUrl, cid);
|
|
327
|
+
return HarnessCheckpointManifestSchema.parse(raw);
|
|
328
|
+
},
|
|
329
|
+
async runPipeline(args) {
|
|
330
|
+
const config = loadConfig(args.configPath ?? DEFAULT_CONFIG_PATH);
|
|
331
|
+
const manifest = args.checkpointManifest;
|
|
332
|
+
const implName = manifest.harnessPackage.implName;
|
|
333
|
+
// Frozen impl-state to evaluate (local; see resolveLocalImplStateDir).
|
|
334
|
+
const implStateDir = resolveLocalImplStateDir(args.implStateDir, implName, config);
|
|
335
|
+
if (!existsSync(implStateDir)) {
|
|
336
|
+
throw new Error(`impl-state directory not found: ${implStateDir} — ` +
|
|
337
|
+
`pass --impl-state-dir <dir> or set engine.implStateDirRoot in config`);
|
|
338
|
+
}
|
|
339
|
+
// Slate → tasks (real HF fetcher; per-instance dataset/split from the pool).
|
|
340
|
+
const slate = loadHeldOutSlate(`${args.solverType}.v1`, args.slateVersion);
|
|
341
|
+
const stateDir = process.env['JINN_SWE_REBENCH_V2_STATE_DIR'] ?? defaultStateDir();
|
|
342
|
+
const fetcher = new HttpHfFetcher();
|
|
343
|
+
const tasksWithRows = await resolveSlateAgainstPool({
|
|
344
|
+
instanceIds: slate.instanceIds,
|
|
345
|
+
fetcher,
|
|
346
|
+
stateDir,
|
|
347
|
+
});
|
|
348
|
+
// Evaluator: the SWE-rebench v2 grading library — same construction the
|
|
349
|
+
// evaluator harness uses internally (HttpHfFetcher + PythonEvalRunner over
|
|
350
|
+
// the cloned upstream repo). Requires `jinn harnesses enable
|
|
351
|
+
// swe-rebench-v2-evaluator` to have cloned upstream + validated Docker.
|
|
352
|
+
const evaluatorImplStateDir = join(implStateDirRoot(config), 'swe-rebench-v2-evaluator');
|
|
353
|
+
const enabled = readEnabledState(evaluatorImplStateDir);
|
|
354
|
+
if (!enabled) {
|
|
355
|
+
throw new Error(`swe-rebench-v2 evaluator not enabled (no state at ${evaluatorImplStateDir}). ` +
|
|
356
|
+
`Run \`jinn harnesses enable swe-rebench-v2-evaluator\` first.`);
|
|
357
|
+
}
|
|
358
|
+
const evaluator = new SweRebenchV2Evaluator({
|
|
359
|
+
fetcher,
|
|
360
|
+
runner: new PythonEvalRunner({ upstreamRepoDir: enabled.upstreamRepoDir }),
|
|
361
|
+
});
|
|
362
|
+
// The orchestrator runs each slate task under the full dispatch solverType
|
|
363
|
+
// (`<solver-type>.v1`). Resolve the SAME SolverNet runtime plugins the
|
|
364
|
+
// daemon would (fails LOUD if the operator hasn't joined the SolverNet /
|
|
365
|
+
// installed its plugins) — these carry the bundled MCP server the agent
|
|
366
|
+
// needs to emit a gradeable patch.
|
|
367
|
+
const dispatchSolverType = `${args.solverType}.v1`;
|
|
368
|
+
const runtimePlugins = await resolveRuntimePluginsForSolverType(dispatchSolverType, config.joinedSolverNets);
|
|
369
|
+
const joinedNet = Object.values(config.joinedSolverNets ?? {}).find((net) => solverTypeFromJoinedContract(net) === dispatchSolverType);
|
|
370
|
+
const harness = buildEvalHarness(implName, config);
|
|
371
|
+
const store = new Store(config.dbPath);
|
|
372
|
+
try {
|
|
373
|
+
return await runEval({
|
|
374
|
+
checkpointManifest: manifest,
|
|
375
|
+
checkpointCid: args.checkpointCid,
|
|
376
|
+
slate,
|
|
377
|
+
tasksWithRows,
|
|
378
|
+
parentCheckpointCid: args.parentCheckpointCid,
|
|
379
|
+
implStateDir,
|
|
380
|
+
deps: {
|
|
381
|
+
harness,
|
|
382
|
+
fetchImplStateDirToLocal: async (_cid, targetDir) => targetDir,
|
|
383
|
+
evaluator,
|
|
384
|
+
runHarnessOnce: makeEvalRunHarnessOnce({
|
|
385
|
+
solverType: dispatchSolverType,
|
|
386
|
+
runtimePlugins,
|
|
387
|
+
...(joinedNet?.name ? { solverNetName: joinedNet.name } : {}),
|
|
388
|
+
...(config.claudeModel ? { model: config.claudeModel } : {}),
|
|
389
|
+
}),
|
|
390
|
+
store,
|
|
391
|
+
},
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
finally {
|
|
395
|
+
store.close?.();
|
|
396
|
+
}
|
|
397
|
+
},
|
|
398
|
+
};
|
|
399
|
+
const command = createEvalCommand(PRODUCTION_DEPS);
|
|
400
|
+
export default command;
|
|
401
|
+
//# sourceMappingURL=eval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval.js","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { CommandModule } from '../command.js';
|
|
2
2
|
import { gatherIntrospectionRaw as defaultGatherIntrospectionRaw } from '../introspection-context.js';
|
|
3
3
|
import { assembleRewardsV1 as defaultAssembleRewardsV1 } from '../../api/rewards-build.js';
|
|
4
|
+
import { sumPendingStakingRewards as defaultSumPendingStakingRewards } from '../../api/gather-status.js';
|
|
4
5
|
export interface RewardsDeps {
|
|
5
6
|
gatherIntrospectionRaw: typeof defaultGatherIntrospectionRaw;
|
|
6
7
|
assembleRewardsV1: typeof defaultAssembleRewardsV1;
|
|
8
|
+
sumPendingStakingRewards: typeof defaultSumPendingStakingRewards;
|
|
7
9
|
}
|
|
8
10
|
export declare function createRewardsCommand(deps?: RewardsDeps): CommandModule;
|
|
9
11
|
declare const command: CommandModule;
|
|
@@ -4,9 +4,12 @@ import { emitEnvelope } from '../../errors/envelope.js';
|
|
|
4
4
|
import { emitResult } from '../output.js';
|
|
5
5
|
import { gatherIntrospectionRaw as defaultGatherIntrospectionRaw } from '../introspection-context.js';
|
|
6
6
|
import { assembleRewardsV1 as defaultAssembleRewardsV1 } from '../../api/rewards-build.js';
|
|
7
|
+
import { sumPendingStakingRewards as defaultSumPendingStakingRewards } from '../../api/gather-status.js';
|
|
8
|
+
import { loadConfig, getConfigPathFromArgs } from '../../config.js';
|
|
7
9
|
const PRODUCTION_DEPS = {
|
|
8
10
|
gatherIntrospectionRaw: defaultGatherIntrospectionRaw,
|
|
9
11
|
assembleRewardsV1: defaultAssembleRewardsV1,
|
|
12
|
+
sumPendingStakingRewards: defaultSumPendingStakingRewards,
|
|
10
13
|
};
|
|
11
14
|
function formatRewardAmount(wei) {
|
|
12
15
|
try {
|
|
@@ -31,7 +34,7 @@ function humanRewards(payload) {
|
|
|
31
34
|
for (const s of payload.services) {
|
|
32
35
|
lines.push(` Service #${s.index}: ${formatRewardAmount(s.pending)} pending · ${formatRewardAmount(s.claimed)} claimed`);
|
|
33
36
|
}
|
|
34
|
-
lines.push('Operator
|
|
37
|
+
lines.push('Operator testnet JINN (tJINN) earnings are reported from the Sepolia tJINN Safe balance, not this collector queue.');
|
|
35
38
|
}
|
|
36
39
|
lines.push(`Last claim tick: ${payload.lastClaimAt ?? 'never (daemon not yet run the claim loop)'}`);
|
|
37
40
|
lines.push(`Next checkpoint: ${payload.nextCheckpointAt ?? 'not reported by the staking contract'}`);
|
|
@@ -44,8 +47,8 @@ export function createRewardsCommand(deps = PRODUCTION_DEPS) {
|
|
|
44
47
|
helpText: `Usage: jinn rewards [--human]
|
|
45
48
|
|
|
46
49
|
Returns the current staking collector claim queue per service. This is
|
|
47
|
-
the OLAS-style distributor maintenance path; operator
|
|
48
|
-
are the Sepolia tJINN Safe balance shown in status / the app.
|
|
50
|
+
the OLAS-style distributor maintenance path; operator testnet JINN (tJINN)
|
|
51
|
+
earnings are the Sepolia tJINN Safe balance shown in status / the app.
|
|
49
52
|
|
|
50
53
|
Examples:
|
|
51
54
|
jinn rewards
|
|
@@ -74,6 +77,30 @@ Examples:
|
|
|
74
77
|
return;
|
|
75
78
|
}
|
|
76
79
|
const raw = await deps.gatherIntrospectionRaw({ argv: ctx.argv });
|
|
80
|
+
// On-demand staking reward read — kept off the /v1/status hot path (#992).
|
|
81
|
+
// jinn rewards is the sanctioned ops-only surface for the OLAS staking
|
|
82
|
+
// collector queue. Resolve rpcUrl/network from config and read against
|
|
83
|
+
// the fleet that gather-status already loaded into `raw`.
|
|
84
|
+
if (raw.fleet && raw.rpc.ok) {
|
|
85
|
+
const configPath = getConfigPathFromArgs(ctx.argv ?? []) ?? getConfigPathFromArgs(process.argv.slice(2));
|
|
86
|
+
try {
|
|
87
|
+
const config = loadConfig(configPath);
|
|
88
|
+
const rpcUrl = Array.isArray(config.rpcUrl) ? config.rpcUrl[0] : config.rpcUrl;
|
|
89
|
+
const pr = await deps.sumPendingStakingRewards(rpcUrl, config.network, raw.fleet);
|
|
90
|
+
if ('sum' in pr) {
|
|
91
|
+
raw.pendingStakingRewardsWei = pr.sum;
|
|
92
|
+
raw.pendingByService = pr.pendingByService;
|
|
93
|
+
if (pr.nextCheckpointAt)
|
|
94
|
+
raw.nextCheckpointAt = pr.nextCheckpointAt;
|
|
95
|
+
}
|
|
96
|
+
// pr.error path: leave the staking fields unset — assembleRewardsV1
|
|
97
|
+
// degrades to pending=0 / nextCheckpointAt=null (same as the catch).
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// Config unreadable or RPC error — assembleRewardsV1 degrades to
|
|
101
|
+
// pending=0 / nextCheckpointAt=null, which the human renderer handles.
|
|
102
|
+
}
|
|
103
|
+
}
|
|
77
104
|
const payload = deps.assembleRewardsV1(raw);
|
|
78
105
|
emitResult(payload, (v) => humanRewards(v), {
|
|
79
106
|
json: Boolean(parsed.values.json),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rewards.js","sourceRoot":"","sources":["../../../src/cli/commands/rewards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,sBAAsB,IAAI,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AACtG,OAAO,EAAE,iBAAiB,IAAI,wBAAwB,EAA0B,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"rewards.js","sourceRoot":"","sources":["../../../src/cli/commands/rewards.ts"],"names":[],"mappings":"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"}
|