@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.
- package/README.md +67 -1
- package/dist/adapters/mech/adapter.js +27 -3
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/safe.d.ts +1 -1
- package/dist/adapters/mech/safe.js +5 -3
- package/dist/adapters/mech/safe.js.map +1 -1
- package/dist/adapters/mech/types.d.ts +6 -1
- package/dist/adapters/mech/types.js.map +1 -1
- package/dist/api/activity-events-endpoint.d.ts +14 -0
- package/dist/api/activity-events-endpoint.js +59 -0
- package/dist/api/activity-events-endpoint.js.map +1 -0
- package/dist/api/bootstrap-endpoint.d.ts +1 -2
- package/dist/api/bootstrap-endpoint.js +0 -1
- package/dist/api/bootstrap-endpoint.js.map +1 -1
- package/dist/api/gather-status.d.ts +3 -0
- package/dist/api/gather-status.js +105 -26
- package/dist/api/gather-status.js.map +1 -1
- package/dist/api/launcher-status.d.ts +1 -1
- package/dist/api/launcher-status.js +11 -10
- package/dist/api/launcher-status.js.map +1 -1
- package/dist/api/launcher-tasks.d.ts +1 -1
- package/dist/api/launcher-tasks.js +12 -8
- package/dist/api/launcher-tasks.js.map +1 -1
- package/dist/api/server.js +4 -0
- package/dist/api/server.js.map +1 -1
- package/dist/api/setup-endpoints.js +11 -131
- package/dist/api/setup-endpoints.js.map +1 -1
- package/dist/api/status-build.d.ts +40 -0
- package/dist/api/status-build.js +25 -0
- package/dist/api/status-build.js.map +1 -1
- package/dist/build-info.json +4 -4
- package/dist/build-meta.json +1 -1
- package/dist/cli/commands/solver-nets.js +92 -21
- package/dist/cli/commands/solver-nets.js.map +1 -1
- package/dist/cli/commands/solver-plugins-block.d.ts +33 -0
- package/dist/cli/commands/solver-plugins-block.js +118 -0
- package/dist/cli/commands/solver-plugins-block.js.map +1 -0
- package/dist/cli/commands/solver-plugins-feedback.d.ts +72 -0
- package/dist/cli/commands/solver-plugins-feedback.js +262 -0
- package/dist/cli/commands/solver-plugins-feedback.js.map +1 -0
- package/dist/cli/commands/solver-plugins-read.d.ts +54 -0
- package/dist/cli/commands/solver-plugins-read.js +259 -0
- package/dist/cli/commands/solver-plugins-read.js.map +1 -0
- package/dist/cli/commands/solver-plugins.d.ts +35 -0
- package/dist/cli/commands/solver-plugins.js +399 -2
- package/dist/cli/commands/solver-plugins.js.map +1 -1
- package/dist/cli/commands/tasks.js +15 -2
- package/dist/cli/commands/tasks.js.map +1 -1
- package/dist/cli/task-native-readiness.d.ts +7 -0
- package/dist/cli/task-native-readiness.js +7 -5
- package/dist/cli/task-native-readiness.js.map +1 -1
- package/dist/config.d.ts +169 -232
- package/dist/config.js +219 -107
- package/dist/config.js.map +1 -1
- package/dist/daemon/daemon.d.ts +3 -0
- package/dist/daemon/daemon.js +88 -22
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/gate-logger.d.ts +9 -0
- package/dist/daemon/gate-logger.js +2 -0
- package/dist/daemon/gate-logger.js.map +1 -0
- package/dist/daemon/readiness-gate.d.ts +1 -4
- package/dist/daemon/readiness-gate.js.map +1 -1
- package/dist/daemon/spend-cap-gate.d.ts +40 -0
- package/dist/daemon/spend-cap-gate.js +46 -0
- package/dist/daemon/spend-cap-gate.js.map +1 -0
- package/dist/dashboard/assets/index-CKTc0D37.css +32 -0
- package/dist/dashboard/assets/index-h2ATCtSA.js +345 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/earning/safe-adapter.js +23 -11
- package/dist/earning/safe-adapter.js.map +1 -1
- package/dist/earning/types.d.ts +6 -6
- package/dist/earning/viem-clients.d.ts +11 -4
- package/dist/earning/viem-clients.js +14 -5
- package/dist/earning/viem-clients.js.map +1 -1
- package/dist/events/types.d.ts +2 -2
- package/dist/harnesses/engine/engine.js +13 -0
- package/dist/harnesses/engine/engine.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.d.ts +74 -5
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js +103 -32
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js.map +1 -1
- package/dist/main.js +44 -31
- package/dist/main.js.map +1 -1
- package/dist/observability/emit-event.d.ts +3 -2
- package/dist/observability/emit-event.js +22 -1
- package/dist/observability/emit-event.js.map +1 -1
- package/dist/preflight/rpc-network.d.ts +40 -0
- package/dist/preflight/rpc-network.js +67 -1
- package/dist/preflight/rpc-network.js.map +1 -1
- package/dist/rpc/transport.d.ts +109 -0
- package/dist/rpc/transport.js +220 -0
- package/dist/rpc/transport.js.map +1 -0
- package/dist/scripts/donation-consumption-acceptance.js +7 -28
- package/dist/scripts/donation-consumption-acceptance.js.map +1 -1
- package/dist/solver-nets/prediction-operator-ux.d.ts +1 -2
- package/dist/solver-nets/prediction-operator-ux.js +56 -53
- package/dist/solver-nets/prediction-operator-ux.js.map +1 -1
- package/dist/solver-nets/registry.d.ts +19 -1
- package/dist/solver-nets/registry.js +37 -24
- package/dist/solver-nets/registry.js.map +1 -1
- package/dist/solver-types/_swe-rebench-v2-pool.d.ts +9 -2
- package/dist/solver-types/_swe-rebench-v2-pool.js +15 -20
- package/dist/solver-types/_swe-rebench-v2-pool.js.map +1 -1
- package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +29 -1
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js +62 -13
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
- package/dist/solver-types/swe-rebench-v2.js +4 -1
- package/dist/solver-types/swe-rebench-v2.js.map +1 -1
- package/dist/spend/credential.d.ts +8 -0
- package/dist/spend/credential.js +30 -0
- package/dist/spend/credential.js.map +1 -0
- package/dist/spend/daemon-config.d.ts +13 -0
- package/dist/spend/daemon-config.js +24 -0
- package/dist/spend/daemon-config.js.map +1 -0
- package/dist/spend/pricing.d.ts +16 -0
- package/dist/spend/pricing.js +26 -0
- package/dist/spend/pricing.js.map +1 -0
- package/dist/spend/record.d.ts +13 -0
- package/dist/spend/record.js +30 -0
- package/dist/spend/record.js.map +1 -0
- package/dist/spend/usage.d.ts +27 -0
- package/dist/spend/usage.js +113 -0
- package/dist/spend/usage.js.map +1 -0
- package/dist/store/store.d.ts +28 -0
- package/dist/store/store.js +118 -4
- package/dist/store/store.js.map +1 -1
- package/dist/trajectory/transcript-parsers/types.d.ts +8 -8
- package/dist/tx-retry.d.ts +15 -0
- package/dist/tx-retry.js +30 -6
- package/dist/tx-retry.js.map +1 -1
- package/package.json +2 -1
- package/dist/dashboard/assets/index-BUlE8F3Y.js +0 -330
- 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
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
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
|
|
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
|
-
|
|
14
|
-
|
|
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
|
-
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
-
|
|
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":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,KAAK,IAAI,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
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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"}
|
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
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
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: () => ({
|
|
1106
|
+
getConfig: () => ({ joinedSolverNets: config.joinedSolverNets }),
|
|
1098
1107
|
configPath: CONFIG_PATH ?? DEFAULT_CONFIG_PATH,
|
|
1099
|
-
//
|
|
1100
|
-
//
|
|
1101
|
-
//
|
|
1102
|
-
|
|
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
|
|
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
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
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.
|
|
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.
|
|
1438
|
+
const publicClient = createJinnPublicClient(config.rpcUrls, NETWORK_CHAIN);
|
|
1429
1439
|
publicClientForLauncher = publicClient;
|
|
1430
|
-
const masterWallet = createJinnWalletClient(config.
|
|
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.
|
|
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.
|
|
1555
|
-
? createJinnPublicClient(config.
|
|
1564
|
+
const l2ProofClient = config.l2ProofRpcUrls
|
|
1565
|
+
? createJinnPublicClient(config.l2ProofRpcUrls, NETWORK_CHAIN)
|
|
1556
1566
|
: undefined;
|
|
1557
|
-
const agentClients = createClients(config.
|
|
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.
|
|
1578
|
+
const l1ClientsForJinnClaim = shouldWireJinnClaimL1 && config.ethereumRpcUrls
|
|
1569
1579
|
? {
|
|
1570
|
-
public: createJinnL1PublicClient(config.
|
|
1571
|
-
wallet: createJinnL1WalletClient(config.
|
|
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
|
? {
|