@jinn-network/client 0.1.7-canary.d4e4e183 → 0.1.7-canary.eb5ac0de

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.
Files changed (132) hide show
  1. package/README.md +67 -1
  2. package/dist/adapters/mech/adapter.js +27 -3
  3. package/dist/adapters/mech/adapter.js.map +1 -1
  4. package/dist/adapters/mech/safe.d.ts +1 -1
  5. package/dist/adapters/mech/safe.js +5 -3
  6. package/dist/adapters/mech/safe.js.map +1 -1
  7. package/dist/adapters/mech/types.d.ts +6 -1
  8. package/dist/adapters/mech/types.js.map +1 -1
  9. package/dist/api/activity-events-endpoint.d.ts +14 -0
  10. package/dist/api/activity-events-endpoint.js +59 -0
  11. package/dist/api/activity-events-endpoint.js.map +1 -0
  12. package/dist/api/bootstrap-endpoint.d.ts +1 -2
  13. package/dist/api/bootstrap-endpoint.js +0 -1
  14. package/dist/api/bootstrap-endpoint.js.map +1 -1
  15. package/dist/api/gather-status.d.ts +3 -0
  16. package/dist/api/gather-status.js +105 -26
  17. package/dist/api/gather-status.js.map +1 -1
  18. package/dist/api/launcher-status.d.ts +1 -1
  19. package/dist/api/launcher-status.js +11 -10
  20. package/dist/api/launcher-status.js.map +1 -1
  21. package/dist/api/launcher-tasks.d.ts +1 -1
  22. package/dist/api/launcher-tasks.js +12 -8
  23. package/dist/api/launcher-tasks.js.map +1 -1
  24. package/dist/api/server.js +4 -0
  25. package/dist/api/server.js.map +1 -1
  26. package/dist/api/setup-endpoints.js +11 -131
  27. package/dist/api/setup-endpoints.js.map +1 -1
  28. package/dist/api/status-build.d.ts +40 -0
  29. package/dist/api/status-build.js +25 -0
  30. package/dist/api/status-build.js.map +1 -1
  31. package/dist/build-info.json +4 -4
  32. package/dist/build-meta.json +1 -1
  33. package/dist/cli/commands/solver-nets.js +92 -21
  34. package/dist/cli/commands/solver-nets.js.map +1 -1
  35. package/dist/cli/commands/solver-plugins-block.d.ts +33 -0
  36. package/dist/cli/commands/solver-plugins-block.js +118 -0
  37. package/dist/cli/commands/solver-plugins-block.js.map +1 -0
  38. package/dist/cli/commands/solver-plugins-feedback.d.ts +72 -0
  39. package/dist/cli/commands/solver-plugins-feedback.js +262 -0
  40. package/dist/cli/commands/solver-plugins-feedback.js.map +1 -0
  41. package/dist/cli/commands/solver-plugins-read.d.ts +54 -0
  42. package/dist/cli/commands/solver-plugins-read.js +259 -0
  43. package/dist/cli/commands/solver-plugins-read.js.map +1 -0
  44. package/dist/cli/commands/solver-plugins.d.ts +35 -0
  45. package/dist/cli/commands/solver-plugins.js +399 -2
  46. package/dist/cli/commands/solver-plugins.js.map +1 -1
  47. package/dist/cli/commands/tasks.js +15 -2
  48. package/dist/cli/commands/tasks.js.map +1 -1
  49. package/dist/cli/task-native-readiness.d.ts +7 -0
  50. package/dist/cli/task-native-readiness.js +7 -5
  51. package/dist/cli/task-native-readiness.js.map +1 -1
  52. package/dist/config.d.ts +169 -232
  53. package/dist/config.js +219 -107
  54. package/dist/config.js.map +1 -1
  55. package/dist/daemon/daemon.d.ts +3 -0
  56. package/dist/daemon/daemon.js +88 -22
  57. package/dist/daemon/daemon.js.map +1 -1
  58. package/dist/daemon/gate-logger.d.ts +9 -0
  59. package/dist/daemon/gate-logger.js +2 -0
  60. package/dist/daemon/gate-logger.js.map +1 -0
  61. package/dist/daemon/readiness-gate.d.ts +1 -4
  62. package/dist/daemon/readiness-gate.js.map +1 -1
  63. package/dist/daemon/spend-cap-gate.d.ts +40 -0
  64. package/dist/daemon/spend-cap-gate.js +46 -0
  65. package/dist/daemon/spend-cap-gate.js.map +1 -0
  66. package/dist/dashboard/assets/index-CKTc0D37.css +32 -0
  67. package/dist/dashboard/assets/index-h2ATCtSA.js +345 -0
  68. package/dist/dashboard/index.html +2 -2
  69. package/dist/earning/safe-adapter.js +23 -11
  70. package/dist/earning/safe-adapter.js.map +1 -1
  71. package/dist/earning/types.d.ts +6 -6
  72. package/dist/earning/viem-clients.d.ts +11 -4
  73. package/dist/earning/viem-clients.js +14 -5
  74. package/dist/earning/viem-clients.js.map +1 -1
  75. package/dist/events/types.d.ts +2 -2
  76. package/dist/harnesses/engine/engine.js +13 -0
  77. package/dist/harnesses/engine/engine.js.map +1 -1
  78. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.d.ts +74 -5
  79. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js +103 -32
  80. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js.map +1 -1
  81. package/dist/main.js +44 -31
  82. package/dist/main.js.map +1 -1
  83. package/dist/observability/emit-event.d.ts +3 -2
  84. package/dist/observability/emit-event.js +22 -1
  85. package/dist/observability/emit-event.js.map +1 -1
  86. package/dist/preflight/rpc-network.d.ts +40 -0
  87. package/dist/preflight/rpc-network.js +67 -1
  88. package/dist/preflight/rpc-network.js.map +1 -1
  89. package/dist/rpc/transport.d.ts +109 -0
  90. package/dist/rpc/transport.js +220 -0
  91. package/dist/rpc/transport.js.map +1 -0
  92. package/dist/scripts/donation-consumption-acceptance.js +7 -28
  93. package/dist/scripts/donation-consumption-acceptance.js.map +1 -1
  94. package/dist/solver-nets/prediction-operator-ux.d.ts +1 -2
  95. package/dist/solver-nets/prediction-operator-ux.js +56 -53
  96. package/dist/solver-nets/prediction-operator-ux.js.map +1 -1
  97. package/dist/solver-nets/registry.d.ts +19 -1
  98. package/dist/solver-nets/registry.js +37 -24
  99. package/dist/solver-nets/registry.js.map +1 -1
  100. package/dist/solver-types/_swe-rebench-v2-pool.d.ts +9 -2
  101. package/dist/solver-types/_swe-rebench-v2-pool.js +15 -20
  102. package/dist/solver-types/_swe-rebench-v2-pool.js.map +1 -1
  103. package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +29 -1
  104. package/dist/solver-types/_swe-rebench-v2-validated-pool.js +62 -13
  105. package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
  106. package/dist/solver-types/swe-rebench-v2.js +4 -1
  107. package/dist/solver-types/swe-rebench-v2.js.map +1 -1
  108. package/dist/spend/credential.d.ts +8 -0
  109. package/dist/spend/credential.js +30 -0
  110. package/dist/spend/credential.js.map +1 -0
  111. package/dist/spend/daemon-config.d.ts +13 -0
  112. package/dist/spend/daemon-config.js +24 -0
  113. package/dist/spend/daemon-config.js.map +1 -0
  114. package/dist/spend/pricing.d.ts +16 -0
  115. package/dist/spend/pricing.js +26 -0
  116. package/dist/spend/pricing.js.map +1 -0
  117. package/dist/spend/record.d.ts +13 -0
  118. package/dist/spend/record.js +30 -0
  119. package/dist/spend/record.js.map +1 -0
  120. package/dist/spend/usage.d.ts +27 -0
  121. package/dist/spend/usage.js +113 -0
  122. package/dist/spend/usage.js.map +1 -0
  123. package/dist/store/store.d.ts +28 -0
  124. package/dist/store/store.js +118 -4
  125. package/dist/store/store.js.map +1 -1
  126. package/dist/trajectory/transcript-parsers/types.d.ts +8 -8
  127. package/dist/tx-retry.d.ts +15 -0
  128. package/dist/tx-retry.js +30 -6
  129. package/dist/tx-retry.js.map +1 -1
  130. package/package.json +2 -1
  131. package/dist/dashboard/assets/index-BUlE8F3Y.js +0 -330
  132. package/dist/dashboard/assets/index-blqc7eqq.css +0 -32
@@ -19,25 +19,92 @@ export interface HttpHfFetcherOptions {
19
19
  /** Fetch implementation. Defaults to global fetch (allows test injection). */
20
20
  fetchImpl?: typeof fetch;
21
21
  /**
22
- * Per-page retry backoff schedule (ms) for transient HTTP 5xx or network
23
- * errors. Default: [200, 800, 3200]. Each entry is the delay before the
24
- * Nth retry; an empty array disables retries. Non-5xx responses (e.g.
25
- * 404) are not retried they're not transient.
22
+ * Per-page retry backoff schedule (ms) for transient HTTP 408/429/5xx
23
+ * responses. Default: {@link DEFAULT_RETRY_BACKOFF_MS}
24
+ * (`[1000, 2000, 4000, 8000]` see issue #578 for the rationale; HF's
25
+ * 429 wave was longer-lived than the prior 200/800/3200 schedule could
26
+ * clear). Each entry is the delay before the Nth retry; an empty array
27
+ * disables retries. Non-retryable 4xx (e.g. 404) is not retried.
26
28
  */
27
29
  retryBackoffMs?: number[];
28
- /** Minimum spacing between HF HTTP requests. Defaults to 250ms. */
30
+ /** Minimum spacing between HF HTTP requests. Defaults to {@link DEFAULT_MIN_REQUEST_INTERVAL_MS}. */
29
31
  minRequestIntervalMs?: number;
30
32
  /** Sleep implementation. Defaults to the shared tx-retry sleep (allows test injection). */
31
33
  sleep?: (ms: number) => Promise<void>;
32
34
  /** Shared request limiter. Defaults to the module-level HF limiter. */
33
35
  limiter?: HfRequestLimiter;
36
+ /** Random source for jittered backoff. Defaults to `Math.random` (test injection). */
37
+ random?: () => number;
34
38
  }
39
+ /**
40
+ * Per-attempt backoff schedule for HF datasets-server fetches. Four retries
41
+ * (5 total attempts), jittered ±33%, max worst-case ≈15s extra latency per
42
+ * failing instance. Tuned for HF's 429 envelope per issue #578.
43
+ */
44
+ export declare const DEFAULT_RETRY_BACKOFF_MS: readonly number[];
45
+ /**
46
+ * Process-wide floor on the spacing between HF HTTP requests. Raised from
47
+ * 250ms after issue #578 — 250ms × 4 retries was insufficient to clear the
48
+ * 429 wave when validating ~700 instances in one pass. This is the AC3
49
+ * concurrency-cap surface: the shared limiter serialises requests at this
50
+ * granularity across the whole process. Tune via {@link HttpHfFetcherOptions.minRequestIntervalMs}
51
+ * or {@link FetchHfWithRetryOptions.minRequestIntervalMs}; see the design note
52
+ * at `docs/superpowers/specs/2026-05-26-issue-578-hf-429-retry-design.md`.
53
+ */
54
+ export declare const DEFAULT_MIN_REQUEST_INTERVAL_MS = 500;
35
55
  export interface HfRequestLimiter {
36
56
  schedule<T>(fn: () => Promise<T>, opts: {
37
57
  minRequestIntervalMs: number;
38
58
  sleep: (ms: number) => Promise<void>;
39
59
  }): Promise<T>;
40
60
  }
61
+ declare class SharedHfRequestLimiter implements HfRequestLimiter {
62
+ private tail;
63
+ private lastStartedAt;
64
+ schedule<T>(fn: () => Promise<T>, opts: {
65
+ minRequestIntervalMs: number;
66
+ sleep: (ms: number) => Promise<void>;
67
+ }): Promise<T>;
68
+ }
69
+ /**
70
+ * Module-level shared request limiter. Serialises HF requests across the
71
+ * whole process (every callsite that uses {@link fetchHfWithRetry} routes
72
+ * through this instance by default). AC3 from issue #578: this plus the
73
+ * raised {@link DEFAULT_MIN_REQUEST_INTERVAL_MS} *is* the concurrency-cap
74
+ * knob — no separate parallel-request cap is exposed.
75
+ */
76
+ export declare const sharedHfRequestLimiter: SharedHfRequestLimiter;
77
+ export interface FetchHfWithRetryOptions {
78
+ /** Fetch implementation. Defaults to `globalThis.fetch` bound to `globalThis`. */
79
+ fetchImpl?: typeof fetch;
80
+ /** Per-attempt backoff schedule (ms). Defaults to {@link DEFAULT_RETRY_BACKOFF_MS}. */
81
+ retryBackoffMs?: readonly number[];
82
+ /** Minimum spacing between requests. Defaults to {@link DEFAULT_MIN_REQUEST_INTERVAL_MS}. */
83
+ minRequestIntervalMs?: number;
84
+ /** Sleep implementation. Defaults to the shared tx-retry sleep. */
85
+ sleep?: (ms: number) => Promise<void>;
86
+ /** Shared request limiter. Defaults to {@link sharedHfRequestLimiter}. */
87
+ limiter?: HfRequestLimiter;
88
+ /** Random source for jittered backoff. Defaults to `Math.random` (test injection). */
89
+ random?: () => number;
90
+ }
91
+ /**
92
+ * Shared retry helper for HF datasets-server requests.
93
+ *
94
+ * - Retries on `408 | 429 | 5xx` per {@link isRetryableStatus}.
95
+ * - Sleeps the smaller of the `Retry-After` header (when present) or a
96
+ * jittered backoff drawn from `retryBackoffMs`.
97
+ * - Routes every attempt through the shared {@link HfRequestLimiter} so the
98
+ * process-wide min-interval is honoured.
99
+ * - On retry exhaustion against a non-OK response, throws
100
+ * `Object.assign(new Error('HF returned <status>'), { httpStatus })` so
101
+ * callers can branch on the status code (issue #578: the validated-pool
102
+ * pipeline keys off `httpStatus === 429` to classify transient failures).
103
+ *
104
+ * Non-retryable responses (e.g. 404) are returned to the caller untouched —
105
+ * caller decides how to fail.
106
+ */
107
+ export declare function fetchHfWithRetry(url: string, opts?: FetchHfWithRetryOptions): Promise<Response>;
41
108
  export declare class HttpHfFetcher implements HfFetcher {
42
109
  private readonly baseUrl;
43
110
  private readonly pageSize;
@@ -47,6 +114,7 @@ export declare class HttpHfFetcher implements HfFetcher {
47
114
  private readonly minRequestIntervalMs;
48
115
  private readonly sleep;
49
116
  private readonly limiter;
117
+ private readonly random;
50
118
  constructor(opts?: HttpHfFetcherOptions);
51
119
  private fetchWithRetry;
52
120
  fetchTaskRow(args: {
@@ -55,3 +123,4 @@ export declare class HttpHfFetcher implements HfFetcher {
55
123
  instance_id: string;
56
124
  }): Promise<HfRow>;
57
125
  }
126
+ export {};
@@ -10,8 +10,23 @@
10
10
  */
11
11
  import { sleep as defaultSleep } from '../../../tx-retry.js';
12
12
  const DEFAULT_BASE_URL = 'https://datasets-server.huggingface.co/rows';
13
- const DEFAULT_RETRY_BACKOFF_MS = [200, 800, 3200];
14
- const DEFAULT_MIN_REQUEST_INTERVAL_MS = 250;
13
+ /**
14
+ * Per-attempt backoff schedule for HF datasets-server fetches. Four retries
15
+ * (5 total attempts), jittered ±33%, max worst-case ≈15s extra latency per
16
+ * failing instance. Tuned for HF's 429 envelope per issue #578.
17
+ */
18
+ export const DEFAULT_RETRY_BACKOFF_MS = [1000, 2000, 4000, 8000];
19
+ /**
20
+ * Process-wide floor on the spacing between HF HTTP requests. Raised from
21
+ * 250ms after issue #578 — 250ms × 4 retries was insufficient to clear the
22
+ * 429 wave when validating ~700 instances in one pass. This is the AC3
23
+ * concurrency-cap surface: the shared limiter serialises requests at this
24
+ * granularity across the whole process. Tune via {@link HttpHfFetcherOptions.minRequestIntervalMs}
25
+ * or {@link FetchHfWithRetryOptions.minRequestIntervalMs}; see the design note
26
+ * at `docs/superpowers/specs/2026-05-26-issue-578-hf-429-retry-design.md`.
27
+ */
28
+ export const DEFAULT_MIN_REQUEST_INTERVAL_MS = 500;
29
+ const JITTER_FACTOR = 0.33; // ±33% symmetric uniform jitter
15
30
  class SharedHfRequestLimiter {
16
31
  tail = Promise.resolve();
17
32
  lastStartedAt = 0;
@@ -29,7 +44,66 @@ class SharedHfRequestLimiter {
29
44
  return run;
30
45
  }
31
46
  }
32
- const sharedHfRequestLimiter = new SharedHfRequestLimiter();
47
+ /**
48
+ * Module-level shared request limiter. Serialises HF requests across the
49
+ * whole process (every callsite that uses {@link fetchHfWithRetry} routes
50
+ * through this instance by default). AC3 from issue #578: this plus the
51
+ * raised {@link DEFAULT_MIN_REQUEST_INTERVAL_MS} *is* the concurrency-cap
52
+ * knob — no separate parallel-request cap is exposed.
53
+ */
54
+ export const sharedHfRequestLimiter = new SharedHfRequestLimiter();
55
+ /**
56
+ * Shared retry helper for HF datasets-server requests.
57
+ *
58
+ * - Retries on `408 | 429 | 5xx` per {@link isRetryableStatus}.
59
+ * - Sleeps the smaller of the `Retry-After` header (when present) or a
60
+ * jittered backoff drawn from `retryBackoffMs`.
61
+ * - Routes every attempt through the shared {@link HfRequestLimiter} so the
62
+ * process-wide min-interval is honoured.
63
+ * - On retry exhaustion against a non-OK response, throws
64
+ * `Object.assign(new Error('HF returned <status>'), { httpStatus })` so
65
+ * callers can branch on the status code (issue #578: the validated-pool
66
+ * pipeline keys off `httpStatus === 429` to classify transient failures).
67
+ *
68
+ * Non-retryable responses (e.g. 404) are returned to the caller untouched —
69
+ * caller decides how to fail.
70
+ */
71
+ export async function fetchHfWithRetry(url, opts = {}) {
72
+ const fetchImpl = opts.fetchImpl ?? fetch.bind(globalThis);
73
+ const retryBackoffMs = opts.retryBackoffMs ?? DEFAULT_RETRY_BACKOFF_MS;
74
+ const minRequestIntervalMs = opts.minRequestIntervalMs ?? DEFAULT_MIN_REQUEST_INTERVAL_MS;
75
+ const sleep = opts.sleep ?? defaultSleep;
76
+ const limiter = opts.limiter ?? sharedHfRequestLimiter;
77
+ const random = opts.random ?? Math.random;
78
+ for (let attempt = 0; attempt <= retryBackoffMs.length; attempt += 1) {
79
+ let retryAfterMs;
80
+ try {
81
+ const res = await limiter.schedule(() => fetchImpl(url), { minRequestIntervalMs, sleep });
82
+ if (res.ok || !isRetryableStatus(res.status))
83
+ return res;
84
+ if (attempt >= retryBackoffMs.length) {
85
+ throw Object.assign(new Error(`HF returned ${res.status}`), { httpStatus: res.status });
86
+ }
87
+ retryAfterMs = retryAfterHeaderMs(res.headers.get('Retry-After'));
88
+ }
89
+ catch (err) {
90
+ // On the final attempt, surface the error (network failure or the
91
+ // synthetic `httpStatus`-tagged throw above). Otherwise fall through
92
+ // to the backoff sleep and retry.
93
+ if (attempt >= retryBackoffMs.length)
94
+ throw err;
95
+ }
96
+ const base = retryBackoffMs[attempt] ?? 0;
97
+ await sleep(retryAfterMs ?? withJitter(base, random));
98
+ }
99
+ // Unreachable: the loop returns or throws on every iteration. Kept to
100
+ // satisfy TS control-flow analysis.
101
+ throw new Error('HF fetch failed after retries');
102
+ }
103
+ function withJitter(baseMs, random) {
104
+ const jitter = (random() * 2 - 1) * JITTER_FACTOR;
105
+ return Math.round(baseMs * (1 + jitter));
106
+ }
33
107
  export class HttpHfFetcher {
34
108
  baseUrl;
35
109
  pageSize;
@@ -39,6 +113,7 @@ export class HttpHfFetcher {
39
113
  minRequestIntervalMs;
40
114
  sleep;
41
115
  limiter;
116
+ random;
42
117
  constructor(opts = {}) {
43
118
  this.baseUrl = opts.baseUrl ?? DEFAULT_BASE_URL;
44
119
  this.pageSize = Math.min(opts.pageSize ?? 100, 100);
@@ -48,35 +123,17 @@ export class HttpHfFetcher {
48
123
  this.minRequestIntervalMs = opts.minRequestIntervalMs ?? DEFAULT_MIN_REQUEST_INTERVAL_MS;
49
124
  this.sleep = opts.sleep ?? defaultSleep;
50
125
  this.limiter = opts.limiter ?? sharedHfRequestLimiter;
126
+ this.random = opts.random ?? Math.random;
51
127
  }
52
128
  async fetchWithRetry(url) {
53
- let lastErr = null;
54
- for (let attempt = 0; attempt <= this.retryBackoffMs.length; attempt += 1) {
55
- let retryAfterMs;
56
- try {
57
- const res = await this.limiter.schedule(() => this.fetchImpl(url), { minRequestIntervalMs: this.minRequestIntervalMs, sleep: this.sleep });
58
- if (res.ok || !isRetryableStatus(res.status))
59
- return res;
60
- if (attempt >= this.retryBackoffMs.length)
61
- return res;
62
- retryAfterMs = retryAfterHeaderMs(res.headers.get('Retry-After'));
63
- lastErr = new Error(`HF returned ${res.status}`);
64
- }
65
- catch (err) {
66
- lastErr = err;
67
- if (attempt >= this.retryBackoffMs.length) {
68
- if (lastErr instanceof Error)
69
- throw lastErr;
70
- throw new Error('HF fetch failed after retries');
71
- }
72
- }
73
- if (attempt < this.retryBackoffMs.length) {
74
- await this.sleep(retryAfterMs ?? this.retryBackoffMs[attempt]);
75
- }
76
- }
77
- if (lastErr instanceof Error)
78
- throw lastErr;
79
- throw new Error('HF fetch failed after retries');
129
+ return fetchHfWithRetry(url, {
130
+ fetchImpl: this.fetchImpl,
131
+ retryBackoffMs: this.retryBackoffMs,
132
+ minRequestIntervalMs: this.minRequestIntervalMs,
133
+ sleep: this.sleep,
134
+ limiter: this.limiter,
135
+ random: this.random,
136
+ });
80
137
  }
81
138
  async fetchTaskRow(args) {
82
139
  let offset = 0;
@@ -87,9 +144,23 @@ export class HttpHfFetcher {
87
144
  url.searchParams.set('split', args.hf_split);
88
145
  url.searchParams.set('offset', String(offset));
89
146
  url.searchParams.set('length', String(this.pageSize));
90
- const res = await this.fetchWithRetry(url.toString());
147
+ let res;
148
+ try {
149
+ res = await this.fetchWithRetry(url.toString());
150
+ }
151
+ catch (err) {
152
+ // fetchHfWithRetry surfaces `httpStatus` on exhausted-retry errors.
153
+ // Re-shape the message to the dataset/split form callers expect, but
154
+ // preserve the `httpStatus` property so the validated-pool catch
155
+ // block can branch on it (issue #578).
156
+ const httpStatus = err?.httpStatus;
157
+ if (typeof httpStatus === 'number') {
158
+ throw Object.assign(new Error(`HF datasets-server returned ${httpStatus} for ${args.hf_dataset}/${args.hf_split}`), { httpStatus });
159
+ }
160
+ throw err;
161
+ }
91
162
  if (!res.ok) {
92
- throw new Error(`HF datasets-server returned ${res.status} for ${args.hf_dataset}/${args.hf_split}`);
163
+ throw Object.assign(new Error(`HF datasets-server returned ${res.status} for ${args.hf_dataset}/${args.hf_split}`), { httpStatus: res.status });
93
164
  }
94
165
  const body = (await res.json());
95
166
  const rows = (body.rows ?? []).map((r) => r.row ?? {});
@@ -1 +1 @@
1
- {"version":3,"file":"hf-fetcher.js","sourceRoot":"","sources":["../../../../src/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hf-fetcher.js","sourceRoot":"","sources":["../../../../src/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,KAAK,IAAI,YAAY,EAAE,MAAM,sBAAsB,CAAC;AA+B7D,MAAM,gBAAgB,GAAG,6CAA6C,CAAC;AACvE;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACpF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,CAAC;AACnD,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,gCAAgC;AAS5D,MAAM,sBAAsB;IAClB,IAAI,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IACxC,aAAa,GAAG,CAAC,CAAC;IAE1B,QAAQ,CAAI,EAAoB,EAAE,IAGjC;QACC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;YAChD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,CAAC;YAChE,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBACf,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC3B,CAAC;YACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAChC,OAAO,EAAE,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACvD,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,sBAAsB,EAAE,CAAC;AAiBnE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAW,EACX,OAAgC,EAAE;IAElC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,wBAAwB,CAAC;IACvE,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,IAAI,+BAA+B,CAAC;IAC1F,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,sBAAsB,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;IAE1C,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QACrE,IAAI,YAAgC,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAChC,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EACpB,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC;YACF,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,OAAO,GAAG,CAAC;YACzD,IAAI,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,CAAC;gBACrC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1F,CAAC;YACD,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,kEAAkE;YAClE,qEAAqE;YACrE,kCAAkC;YAClC,IAAI,OAAO,IAAI,cAAc,CAAC,MAAM;gBAAE,MAAM,GAAG,CAAC;QAClD,CAAC;QACD,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,KAAK,CAAC,YAAY,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,sEAAsE;IACtE,oCAAoC;IACpC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,UAAU,CAAC,MAAc,EAAE,MAAoB;IACtD,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC;IAClD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,OAAO,aAAa;IACP,OAAO,CAAS;IAChB,QAAQ,CAAS;IACjB,OAAO,CAAS;IAChB,SAAS,CAAe;IACxB,cAAc,CAAoB;IAClC,oBAAoB,CAAS;IAC7B,KAAK,CAAgC;IACrC,OAAO,CAAmB;IAC1B,MAAM,CAAe;IAEtC,YAAY,OAA6B,EAAE;QACzC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,gBAAgB,CAAC;QAChD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,wBAAwB,CAAC;QACtE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,IAAI,+BAA+B,CAAC;QACzF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,sBAAsB,CAAC;QACtD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;IAC3C,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,GAAW;QACtC,OAAO,gBAAgB,CAAC,GAAG,EAAE;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAIlB;QACC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACjD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC1C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAEtD,IAAI,GAAa,CAAC;YAClB,IAAI,CAAC;gBACH,GAAG,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YAClD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,oEAAoE;gBACpE,qEAAqE;gBACrE,iEAAiE;gBACjE,uCAAuC;gBACvC,MAAM,UAAU,GAAI,GAAsC,EAAE,UAAU,CAAC;gBACvE,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;oBACnC,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,+BAA+B,UAAU,QAAQ,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,EAC9F,EAAE,UAAU,EAAE,CACf,CAAC;gBACJ,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,MAAM,QAAQ,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,EAC9F,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,CAC3B,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwD,CAAC;YACvF,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;YACvD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM;YAE7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,IAAI,GAAG,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;oBAC5C,OAAO,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ;gBAAE,MAAM,CAAC,YAAY;YACpD,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;QACxB,CAAC;QACD,MAAM,IAAI,KAAK,CACb,eAAe,IAAI,CAAC,WAAW,iBAAiB,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,GAAG;YACjF,kBAAkB,IAAI,CAAC,OAAO,QAAQ,CACzC,CAAC;IACJ,CAAC;CACF;AAED,SAAS,UAAU,CAAC,GAA4B,EAAE,WAAmB;IACnE,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,cAAc,WAAW,qBAAqB,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACtC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,cAAc,WAAW,eAAe,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,aAAa,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAA4B,CAAC;IAC/E,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;IAC/C,OAAO;QACL,WAAW;QACX,IAAI;QACJ,UAAU;QACV,YAAY,EAAE,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACjD,YAAY,EAAE,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACjD,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE;QAChD,cAAc,EAAE;YACd,OAAO,EACL,OAAO,OAAO,KAAK,QAAQ;gBACzB,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;oBACtB,CAAC,CAAE,OAAoB;oBACvB,CAAC,CAAC,SAAS;YACjB,QAAQ,EACN,OAAO,QAAQ,KAAK,QAAQ;gBAC1B,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;oBACvB,CAAC,CAAE,QAAqB;oBACxB,CAAC,CAAC,EAAE;YACV,UAAU,EAAE,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;SAC7D;KACF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,CAAU;IAC7B,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED,SAAS,cAAc,CAAC,CAAU;IAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc;IACvC,OAAO,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC;AAC3D,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAoB;IAC9C,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QAC7C,OAAO,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
package/dist/main.js CHANGED
@@ -50,6 +50,7 @@ import { decryptMnemonic, deriveMasterSigner, walletPrivateKeyAtIndex } from './
50
50
  import { MechAdapter } from './adapters/mech/adapter.js';
51
51
  import { ClaudeRunner } from './runner/claude.js';
52
52
  import { Daemon } from './daemon/daemon.js';
53
+ import { buildSpendCapConfig } from './spend/daemon-config.js';
53
54
  import { buildJinnClaimLoopConfig, shouldWireJinnClaimL1Signer, } from './daemon/jinn-claim-loop-wiring.js';
54
55
  import { createJinnPublicClient, createJinnWalletClient, createJinnL1PublicClient, createJinnL1WalletClient } from './earning/viem-clients.js';
55
56
  import { privateKeyToAccount } from 'viem/accounts';
@@ -62,7 +63,7 @@ import { CLAUDE_CODE_HARNESS, CODEX_HARNESS, HERMES_AGENT_HARNESS, harnessStateD
62
63
  import { resolveContractFromSolverNetId } from './solvernets/launched-record-dispatcher.js';
63
64
  import { HarnessReadinessRegistry } from './harnesses/readiness-registry.js';
64
65
  import { createClients } from './adapters/mech/safe.js';
65
- import { loadSolverNets } from './solver-nets/registry.js';
66
+ import { findJoinedByName, loadSolverNets, solverTypeFromJoinedContract, } from './solver-nets/registry.js';
66
67
  import { createCorpus } from './corpus/index.js';
67
68
  import { DEFAULT_EXECUTION_DISCOVERY_FROM_BLOCK } from './corpus/onchain-query.js';
68
69
  import { CapturesStore } from './store/captures.js';
@@ -81,7 +82,7 @@ import { CursorSqliteParser } from './trajectory/transcript-parsers/cursor-sqlit
81
82
  import { buildInfo } from './build-info.js';
82
83
  import { BASE_FEEDS } from './venues/chainlink/feeds.js';
83
84
  import { GeneratedTaskSource, StaticConfiguredTaskSource, filterBindableTasks } from './tasks/sources.js';
84
- import { checkRpcNetwork, logRpcLocalDevToStderr, rpcNetworkFailureHint } from './preflight/rpc-network.js';
85
+ import { checkRpcNetwork, logRpcLocalDevToStderr, probeFallbackChain, rpcNetworkFailureHint, summarizeFallbackChain, } from './preflight/rpc-network.js';
85
86
  import { apiPortFailureMessage, checkApiPortAvailable } from './preflight/api-port.js';
86
87
  import { openBrowser } from './cli/open-browser.js';
87
88
  import { keepSetupUiOnBootstrapError } from './setup/halt-mode.js';
@@ -681,6 +682,15 @@ export async function main() {
681
682
  else {
682
683
  logRpcLocalDevToStderr(rpcPreflight);
683
684
  }
685
+ // Boot-time RPC fallback-chain probe (issue #592, AC7 + AC9). Log-only —
686
+ // per-slot 429s/5xx never gate startup. checkRpcNetwork above already
687
+ // fail-loud on chain-id mismatch against the head provider.
688
+ await probeFallbackChain(config.rpcUrls, config.network, 'L2');
689
+ console.error(summarizeFallbackChain('L2', config.rpcUrls));
690
+ if (config.jinnClaimLoopEnabled && config.ethereumRpcUrls) {
691
+ await probeFallbackChain(config.ethereumRpcUrls, config.network, 'L1');
692
+ console.error(summarizeFallbackChain('L1', config.ethereumRpcUrls));
693
+ }
684
694
  const portPreflight = await checkApiPortAvailable(config.apiPort);
685
695
  if (!portPreflight.ok) {
686
696
  emitEnvelope({
@@ -894,7 +904,6 @@ export async function main() {
894
904
  configReader: () => ({
895
905
  rpcUrl: config.rpcUrl,
896
906
  defaultRpcUrl: CHAIN_CONFIG.rpcUrl,
897
- solverNets: config.solverNets,
898
907
  joinedSolverNets: config.joinedSolverNets,
899
908
  }),
900
909
  },
@@ -1017,13 +1026,13 @@ export async function main() {
1017
1026
  configPath: CONFIG_PATH ?? DEFAULT_CONFIG_PATH,
1018
1027
  defaultRpcUrlForChain: () => CHAIN_CONFIG.rpcUrl,
1019
1028
  onClaudePathSelected: selectClaudePath,
1020
- onSolverNetsUpdated: (solverNets) => {
1021
- config.solverNets = solverNets;
1022
- // The prediction operator status is memoised per-`JinnConfig`
1023
- // reference; mutating in place leaves the cache pointing at the
1024
- // pre-edit snapshot. Drop the entry so the next /v1/status read
1025
- // (and thus Overview's `solverNet.enabled` gating) reflects the
1026
- // toggle immediately. (jinn-mono-l2zl.15.4.12)
1029
+ // Issue #421 retired the legacy `solverNets` write target. Setup
1030
+ // endpoints no longer call back into the daemon to mutate operator
1031
+ // SolverNet config; the canonical join flow is
1032
+ // `POST /v1/operator/join/:cid`, which mutates
1033
+ // `config.joinedSolverNets` directly via its own write path.
1034
+ // The cache-invalidation hook is no longer needed here.
1035
+ onSolverNetsUpdated: () => {
1027
1036
  invalidatePredictionOperatorStatusCache(config);
1028
1037
  },
1029
1038
  // hjex.3: delegate to the live callback populated once running mode starts.
@@ -1094,29 +1103,30 @@ export async function main() {
1094
1103
  // TODO(jinn-mono launcher Task 8): real `getReservedBudgetWei`
1095
1104
  // (sum of unconsumed claim payments across open Tasks).
1096
1105
  launcher: {
1097
- getConfig: () => ({ solverNets: config.solverNets }),
1106
+ getConfig: () => ({ joinedSolverNets: config.joinedSolverNets }),
1098
1107
  configPath: CONFIG_PATH ?? DEFAULT_CONFIG_PATH,
1099
- // Cache-invalidation hook retained for the operator-mode
1100
- // setup-endpoints flow; the launcher-mode PATCH route was retired
1101
- // by Task 22, so this currently fires only when operator mode
1102
- // mutates `solverNets`.
1103
- onSolverNetsUpdated: (solverNets) => {
1104
- config.solverNets = solverNets;
1108
+ // Issue #421 retired the legacy `solverNets` write target. The hook
1109
+ // only needs to invalidate the prediction-operator status cache when
1110
+ // operator mode mutates joinedSolverNets via setup endpoints.
1111
+ onSolverNetsUpdated: () => {
1105
1112
  invalidatePredictionOperatorStatusCache(config);
1106
1113
  },
1107
1114
  getGeneratorState: (netName) => {
1108
1115
  if (netName === 'prediction') {
1109
1116
  return predictionGeneratorRef?.getState();
1110
1117
  }
1111
- const solverType = config.solverNets?.[netName]?.solverType;
1118
+ const joined = findJoinedByName(config.joinedSolverNets, netName);
1119
+ const solverType = joined ? solverTypeFromJoinedContract(joined) : undefined;
1112
1120
  if (!solverType)
1113
1121
  return undefined;
1114
1122
  return launchedGeneratorStateBySolverType.get(solverType)?.();
1115
1123
  },
1116
1124
  getOpenTaskCount: (netName) => {
1117
- const net = config.solverNets?.[netName];
1118
- const solverType = net?.solverType;
1119
- if (!solverType || !safeAddressForLauncher)
1125
+ if (!safeAddressForLauncher)
1126
+ return 0;
1127
+ const joined = findJoinedByName(config.joinedSolverNets, netName);
1128
+ const solverType = joined ? solverTypeFromJoinedContract(joined) : undefined;
1129
+ if (!solverType)
1120
1130
  return 0;
1121
1131
  return sharedStore.countPostedTasksByCreatorAndSolverType({
1122
1132
  creatorSafeAddress: safeAddressForLauncher,
@@ -1327,7 +1337,7 @@ export async function main() {
1327
1337
  return Number.isFinite(n) && n > 0 ? n : 15_000;
1328
1338
  })();
1329
1339
  if (isHaltedOnFunding && haltAddress && haltRequired !== null) {
1330
- const publicClient = createJinnPublicClient(config.rpcUrl, NETWORK_CHAIN);
1340
+ const publicClient = createJinnPublicClient(config.rpcUrls, NETWORK_CHAIN);
1331
1341
  const schedulePoll = () => {
1332
1342
  fundingPollHandle = setTimeout(async () => {
1333
1343
  // Guard: if the signal was already fired, stop polling.
@@ -1425,9 +1435,9 @@ export async function main() {
1425
1435
  const earningStore = new FleetStateStore(config.earningDir);
1426
1436
  const mnemonicForMaster = await decryptMnemonic(await earningStore.loadMnemonicKeystore(), PASSWORD);
1427
1437
  const masterAccount = deriveMasterSigner(mnemonicForMaster);
1428
- const publicClient = createJinnPublicClient(config.rpcUrl, NETWORK_CHAIN);
1438
+ const publicClient = createJinnPublicClient(config.rpcUrls, NETWORK_CHAIN);
1429
1439
  publicClientForLauncher = publicClient;
1430
- const masterWallet = createJinnWalletClient(config.rpcUrl, NETWORK_CHAIN, masterAccount);
1440
+ const masterWallet = createJinnWalletClient(config.rpcUrls, NETWORK_CHAIN, masterAccount);
1431
1441
  // hjex.3: populate the restake callback now that mnemonic is available.
1432
1442
  if (config.stakingMode === 'standard' && CHAIN_CONFIG.distributorAddress) {
1433
1443
  const fleetStore = earningStore;
@@ -1513,7 +1523,7 @@ export async function main() {
1513
1523
  // the /build page rendered "Discovery unavailable" permanently.
1514
1524
  discoveryApiHolder.current = sharedDiscoveryApi;
1515
1525
  const adapter = new MechAdapter({
1516
- rpcUrl: config.rpcUrl,
1526
+ rpcUrl: config.rpcUrls,
1517
1527
  mechMarketplaceAddress: MARKETPLACE_ADDRESS,
1518
1528
  routerAddress: ROUTER_ADDRESS,
1519
1529
  mechContractAddress: mechAddress,
@@ -1551,10 +1561,10 @@ export async function main() {
1551
1561
  const agentChainContracts = agentChain.contracts;
1552
1562
  const optimismPortalAddress = agentChainContracts?.portal?.[l1Chain.id]?.address;
1553
1563
  const disputeGameFactoryAddress = agentChainContracts?.disputeGameFactory?.[l1Chain.id]?.address;
1554
- const l2ProofClient = config.l2ProofRpcUrl
1555
- ? createJinnPublicClient(config.l2ProofRpcUrl, NETWORK_CHAIN)
1564
+ const l2ProofClient = config.l2ProofRpcUrls
1565
+ ? createJinnPublicClient(config.l2ProofRpcUrls, NETWORK_CHAIN)
1556
1566
  : undefined;
1557
- const agentClients = createClients(config.rpcUrl, agentPrivateKey, agentChain);
1567
+ const agentClients = createClients(config.rpcUrls, agentPrivateKey, agentChain);
1558
1568
  // ── L1 (Sepolia / Ethereum mainnet) clients for cross-chain JINN claim loop ──
1559
1569
  // Uses the agent EOA because MockMessenger.owner is the agent on testnet.
1560
1570
  // Same key as L2; only the chain differs.
@@ -1565,10 +1575,10 @@ export async function main() {
1565
1575
  distributorAddress: JINN_MVI_CONFIG.distributor,
1566
1576
  ethereumRpcUrl: config.ethereumRpcUrl,
1567
1577
  });
1568
- const l1ClientsForJinnClaim = shouldWireJinnClaimL1 && config.ethereumRpcUrl
1578
+ const l1ClientsForJinnClaim = shouldWireJinnClaimL1 && config.ethereumRpcUrls
1569
1579
  ? {
1570
- public: createJinnL1PublicClient(config.ethereumRpcUrl, config.jinnL1Network),
1571
- wallet: createJinnL1WalletClient(config.ethereumRpcUrl, config.jinnL1Network, privateKeyToAccount(agentPrivateKey)),
1580
+ public: createJinnL1PublicClient(config.ethereumRpcUrls, config.jinnL1Network),
1581
+ wallet: createJinnL1WalletClient(config.ethereumRpcUrls, config.jinnL1Network, privateKeyToAccount(agentPrivateKey)),
1572
1582
  }
1573
1583
  : undefined;
1574
1584
  const jinnClaimLoopConfig = buildJinnClaimLoopConfig({
@@ -2096,6 +2106,7 @@ export async function main() {
2096
2106
  console.warn('[main] Corpus disabled (no DiscoveryAPI or on-chain identity registry); ' +
2097
2107
  'MCP record lookup and artifact acquisition network branches will be unavailable.');
2098
2108
  }
2109
+ const spendCap = buildSpendCapConfig(config, process.env);
2099
2110
  const daemon = new Daemon({
2100
2111
  adapter,
2101
2112
  runner,
@@ -2112,6 +2123,7 @@ export async function main() {
2112
2123
  creatorSafeAddress: safeAddress,
2113
2124
  corpusFactory,
2114
2125
  harnessReadinessRegistry,
2126
+ spendCap,
2115
2127
  status: {
2116
2128
  earningDir: config.earningDir,
2117
2129
  rpcUrl: config.rpcUrl,
@@ -2132,6 +2144,7 @@ export async function main() {
2132
2144
  engine: config.engine,
2133
2145
  config,
2134
2146
  configPath: CONFIG_PATH ?? DEFAULT_CONFIG_PATH,
2147
+ spendCaps: spendCap?.caps,
2135
2148
  },
2136
2149
  rewardClaim: config.rewardClaimIntervalMs > 0
2137
2150
  ? {