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

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 (177) 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 +42 -24
  14. package/dist/api/bootstrap-endpoint.js.map +1 -1
  15. package/dist/api/codex-doctor-endpoint.d.ts +6 -0
  16. package/dist/api/codex-doctor-endpoint.js +92 -0
  17. package/dist/api/codex-doctor-endpoint.js.map +1 -1
  18. package/dist/api/gather-status.d.ts +26 -0
  19. package/dist/api/gather-status.js +183 -26
  20. package/dist/api/gather-status.js.map +1 -1
  21. package/dist/api/launcher-status.d.ts +4 -1
  22. package/dist/api/launcher-status.js +11 -10
  23. package/dist/api/launcher-status.js.map +1 -1
  24. package/dist/api/launcher-tasks.d.ts +1 -1
  25. package/dist/api/launcher-tasks.js +12 -8
  26. package/dist/api/launcher-tasks.js.map +1 -1
  27. package/dist/api/operator-artifacts-endpoint.js +73 -6
  28. package/dist/api/operator-artifacts-endpoint.js.map +1 -1
  29. package/dist/api/server.js +27 -1
  30. package/dist/api/server.js.map +1 -1
  31. package/dist/api/setup-endpoints.js +11 -131
  32. package/dist/api/setup-endpoints.js.map +1 -1
  33. package/dist/api/solvernets-endpoints.js +28 -17
  34. package/dist/api/solvernets-endpoints.js.map +1 -1
  35. package/dist/api/status-build.d.ts +96 -2
  36. package/dist/api/status-build.js +45 -11
  37. package/dist/api/status-build.js.map +1 -1
  38. package/dist/api/status-harness-rollup.d.ts +35 -0
  39. package/dist/api/status-harness-rollup.js +45 -0
  40. package/dist/api/status-harness-rollup.js.map +1 -0
  41. package/dist/build-info.json +4 -4
  42. package/dist/build-meta.json +1 -1
  43. package/dist/captures/live-publisher.js +24 -4
  44. package/dist/captures/live-publisher.js.map +1 -1
  45. package/dist/captures/publish.d.ts +1 -1
  46. package/dist/cli/commands/solver-nets.js +92 -21
  47. package/dist/cli/commands/solver-nets.js.map +1 -1
  48. package/dist/cli/commands/solver-plugins-block.d.ts +33 -0
  49. package/dist/cli/commands/solver-plugins-block.js +118 -0
  50. package/dist/cli/commands/solver-plugins-block.js.map +1 -0
  51. package/dist/cli/commands/solver-plugins-feedback.d.ts +72 -0
  52. package/dist/cli/commands/solver-plugins-feedback.js +262 -0
  53. package/dist/cli/commands/solver-plugins-feedback.js.map +1 -0
  54. package/dist/cli/commands/solver-plugins-read.d.ts +54 -0
  55. package/dist/cli/commands/solver-plugins-read.js +259 -0
  56. package/dist/cli/commands/solver-plugins-read.js.map +1 -0
  57. package/dist/cli/commands/solver-plugins.d.ts +35 -0
  58. package/dist/cli/commands/solver-plugins.js +399 -2
  59. package/dist/cli/commands/solver-plugins.js.map +1 -1
  60. package/dist/cli/commands/tasks.js +15 -2
  61. package/dist/cli/commands/tasks.js.map +1 -1
  62. package/dist/cli/task-native-readiness.d.ts +7 -0
  63. package/dist/cli/task-native-readiness.js +7 -5
  64. package/dist/cli/task-native-readiness.js.map +1 -1
  65. package/dist/config.d.ts +169 -232
  66. package/dist/config.js +219 -107
  67. package/dist/config.js.map +1 -1
  68. package/dist/daemon/daemon.d.ts +3 -0
  69. package/dist/daemon/daemon.js +88 -22
  70. package/dist/daemon/daemon.js.map +1 -1
  71. package/dist/daemon/gate-logger.d.ts +9 -0
  72. package/dist/daemon/gate-logger.js +2 -0
  73. package/dist/daemon/gate-logger.js.map +1 -0
  74. package/dist/daemon/readiness-gate.d.ts +1 -4
  75. package/dist/daemon/readiness-gate.js.map +1 -1
  76. package/dist/daemon/spend-cap-gate.d.ts +40 -0
  77. package/dist/daemon/spend-cap-gate.js +46 -0
  78. package/dist/daemon/spend-cap-gate.js.map +1 -0
  79. package/dist/dashboard/assets/index-C4huIsUW.css +32 -0
  80. package/dist/dashboard/assets/index-DkTglWXU.js +345 -0
  81. package/dist/dashboard/index.html +2 -2
  82. package/dist/earning/bootstrap.d.ts +8 -3
  83. package/dist/earning/bootstrap.js +18 -11
  84. package/dist/earning/bootstrap.js.map +1 -1
  85. package/dist/earning/safe-adapter.js +23 -11
  86. package/dist/earning/safe-adapter.js.map +1 -1
  87. package/dist/earning/types.d.ts +6 -6
  88. package/dist/earning/viem-clients.d.ts +11 -4
  89. package/dist/earning/viem-clients.js +14 -5
  90. package/dist/earning/viem-clients.js.map +1 -1
  91. package/dist/erc8004/identity.d.ts +19 -3
  92. package/dist/erc8004/identity.js +21 -6
  93. package/dist/erc8004/identity.js.map +1 -1
  94. package/dist/erc8004/index.d.ts +1 -1
  95. package/dist/erc8004/index.js.map +1 -1
  96. package/dist/events/types.d.ts +2 -2
  97. package/dist/harnesses/engine/engine.js +42 -3
  98. package/dist/harnesses/engine/engine.js.map +1 -1
  99. package/dist/harnesses/impls/hermes-agent/prompt.d.ts +6 -6
  100. package/dist/harnesses/impls/hermes-agent/prompt.js +6 -6
  101. package/dist/harnesses/impls/learner/adapters/codex-code.d.ts +9 -0
  102. package/dist/harnesses/impls/learner/adapters/codex-code.js +22 -8
  103. package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -1
  104. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.d.ts +74 -5
  105. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js +103 -32
  106. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js.map +1 -1
  107. package/dist/harnesses/readiness-registry.d.ts +7 -0
  108. package/dist/harnesses/readiness-registry.js +9 -0
  109. package/dist/harnesses/readiness-registry.js.map +1 -1
  110. package/dist/main.js +49 -31
  111. package/dist/main.js.map +1 -1
  112. package/dist/observability/emit-event.d.ts +3 -2
  113. package/dist/observability/emit-event.js +22 -1
  114. package/dist/observability/emit-event.js.map +1 -1
  115. package/dist/preflight/rpc-network.d.ts +40 -0
  116. package/dist/preflight/rpc-network.js +67 -1
  117. package/dist/preflight/rpc-network.js.map +1 -1
  118. package/dist/rpc/transport.d.ts +109 -0
  119. package/dist/rpc/transport.js +220 -0
  120. package/dist/rpc/transport.js.map +1 -0
  121. package/dist/scripts/donation-consumption-acceptance.js +7 -28
  122. package/dist/scripts/donation-consumption-acceptance.js.map +1 -1
  123. package/dist/solver-nets/prediction-operator-ux.d.ts +1 -2
  124. package/dist/solver-nets/prediction-operator-ux.js +56 -53
  125. package/dist/solver-nets/prediction-operator-ux.js.map +1 -1
  126. package/dist/solver-nets/registry.d.ts +19 -1
  127. package/dist/solver-nets/registry.js +37 -24
  128. package/dist/solver-nets/registry.js.map +1 -1
  129. package/dist/solver-types/_swe-rebench-v2-pool.d.ts +9 -2
  130. package/dist/solver-types/_swe-rebench-v2-pool.js +15 -20
  131. package/dist/solver-types/_swe-rebench-v2-pool.js.map +1 -1
  132. package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +29 -1
  133. package/dist/solver-types/_swe-rebench-v2-validated-pool.js +62 -13
  134. package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
  135. package/dist/solver-types/swe-rebench-v2-auto.js +13 -1
  136. package/dist/solver-types/swe-rebench-v2-auto.js.map +1 -1
  137. package/dist/solver-types/swe-rebench-v2.d.ts +3 -0
  138. package/dist/solver-types/swe-rebench-v2.js +44 -6
  139. package/dist/solver-types/swe-rebench-v2.js.map +1 -1
  140. package/dist/solvernets/launched-record-dispatcher.js +9 -0
  141. package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
  142. package/dist/spend/credential.d.ts +8 -0
  143. package/dist/spend/credential.js +30 -0
  144. package/dist/spend/credential.js.map +1 -0
  145. package/dist/spend/daemon-config.d.ts +13 -0
  146. package/dist/spend/daemon-config.js +24 -0
  147. package/dist/spend/daemon-config.js.map +1 -0
  148. package/dist/spend/pricing.d.ts +16 -0
  149. package/dist/spend/pricing.js +26 -0
  150. package/dist/spend/pricing.js.map +1 -0
  151. package/dist/spend/record.d.ts +13 -0
  152. package/dist/spend/record.js +30 -0
  153. package/dist/spend/record.js.map +1 -0
  154. package/dist/spend/usage.d.ts +27 -0
  155. package/dist/spend/usage.js +113 -0
  156. package/dist/spend/usage.js.map +1 -0
  157. package/dist/store/store.d.ts +46 -0
  158. package/dist/store/store.js +184 -4
  159. package/dist/store/store.js.map +1 -1
  160. package/dist/trajectory/transcript-parsers/types.d.ts +8 -8
  161. package/dist/tx-retry.d.ts +15 -0
  162. package/dist/tx-retry.js +30 -6
  163. package/dist/tx-retry.js.map +1 -1
  164. package/package.json +7 -1
  165. package/plugins/swe-rebench-v2-diffmin/README.md +10 -9
  166. package/plugins/swe-rebench-v2-diffmin/jinn.plugin.json +1 -1
  167. package/plugins/swe-rebench-v2-diffmin/skills/diffmin/SKILL.md +15 -10
  168. package/plugins/swe-rebench-v2-diffmin/skills/test-map/SKILL.md +10 -12
  169. package/plugins/swe-rebench-v2-runtime/.claude-plugin/plugin.json +1 -1
  170. package/plugins/swe-rebench-v2-runtime/.codex-plugin/plugin.json +3 -3
  171. package/plugins/swe-rebench-v2-runtime/README.md +6 -6
  172. package/plugins/swe-rebench-v2-runtime/jinn.plugin.json +2 -3
  173. package/plugins/swe-rebench-v2-runtime/skills/task/SKILL.md +69 -0
  174. package/dist/dashboard/assets/index-BUlE8F3Y.js +0 -330
  175. package/dist/dashboard/assets/index-blqc7eqq.css +0 -32
  176. package/plugins/swe-rebench-v2-runtime/skills/orient/SKILL.md +0 -29
  177. package/plugins/swe-rebench-v2-runtime/skills/plan/SKILL.md +0 -53
@@ -61,16 +61,56 @@ function fundingTargetWei(fundingGate) {
61
61
  return undefined;
62
62
  return (BigInt(required) + BigInt(balance)).toString();
63
63
  }
64
+ function readFundingGate(earningDir) {
65
+ const path = join(earningDir, 'bootstrap-funding.json');
66
+ if (!existsSync(path))
67
+ return null;
68
+ try {
69
+ return JSON.parse(readFileSync(path, 'utf-8'));
70
+ }
71
+ catch {
72
+ return null;
73
+ }
74
+ }
75
+ // targetMet is always false in responses where we surface the funding block:
76
+ // - uninitialized branch surfaces it pre-bootstrap, before any balance check
77
+ // - setup branch only surfaces it when fundingGateActive (master balance < target)
78
+ // Once the gate clears, callers omit the funding block entirely.
79
+ function fundingResponse(gate) {
80
+ return {
81
+ master_address: gate.master_address,
82
+ eth_required: gate.eth_required,
83
+ eth_balance: gate.eth_balance,
84
+ targetWei: fundingTargetWei(gate),
85
+ targetMet: false,
86
+ };
87
+ }
64
88
  export function addBootstrapRoutes(app, config) {
65
89
  app.get('/v1/bootstrap', (c) => {
66
90
  const path = join(config.earningDir, 'earning_state.json');
67
91
  if (!existsSync(path)) {
92
+ // No earning_state.json yet — but the daemon may have exited before
93
+ // writing it (e.g. funding_required before first full run). Surface any
94
+ // persisted bootstrap-error.json and bootstrap-funding.json so the SPA
95
+ // can render actionable states rather than a blank "uninitialized" screen.
96
+ const uninitError = readBootstrapError(config.earningDir);
97
+ const uninitFunding = readFundingGate(config.earningDir);
98
+ // The `funding` block is supplementary. The SPA's Onboarding region
99
+ // surfaces funding details only via the BootstrapErrorCard path (which
100
+ // requires `error` to be present), because the phase-row +
101
+ // AwaitingFundingCard path requires `mode === 'setup'` and a non-empty
102
+ // `master_address`. The error envelope is the canonical display mechanism
103
+ // for the uninitialized window. The funding block is kept in the response
104
+ // because downstream clients may want it; surfacing it directly in
105
+ // Onboarding for the uninitialized case is in-scope for a later PR.
68
106
  return c.json({
69
107
  schemaVersion: 1,
70
108
  mode: 'uninitialized',
71
109
  steps: STEPS,
72
110
  currentStep: STEPS[0],
73
111
  services: [],
112
+ ...(uninitError ? { error: uninitError } : {}),
113
+ ...(uninitFunding ? { funding: fundingResponse(uninitFunding) } : {}),
74
114
  });
75
115
  }
76
116
  let parsed;
@@ -81,16 +121,7 @@ export function addBootstrapRoutes(app, config) {
81
121
  return c.json({ error: 'unreadable_state_file' }, 500);
82
122
  }
83
123
  const services = parsed.services ?? [];
84
- let fundingGate = null;
85
- const fundingGatePath = join(config.earningDir, 'bootstrap-funding.json');
86
- if (existsSync(fundingGatePath)) {
87
- try {
88
- fundingGate = JSON.parse(readFileSync(fundingGatePath, 'utf-8'));
89
- }
90
- catch {
91
- fundingGate = null;
92
- }
93
- }
124
+ const fundingGate = readFundingGate(config.earningDir);
94
125
  // `[].every(...)` returns true vacuously, so a fresh fleet (no services
95
126
  // yet) was previously treated as "all services running" and the funding
96
127
  // gate was suppressed even when bootstrap-funding.json existed. Compute
@@ -137,21 +168,8 @@ export function addBootstrapRoutes(app, config) {
137
168
  ...(parsed.fleet_safe_address ? { fleet_safe_address: parsed.fleet_safe_address } : {}),
138
169
  ...(cfg.rpcUrl !== undefined ? { rpcUrl: cfg.rpcUrl } : {}),
139
170
  ...(cfg.defaultRpcUrl !== undefined ? { defaultRpcUrl: cfg.defaultRpcUrl } : {}),
140
- ...(cfg.solverNets !== undefined ? { solverNets: cfg.solverNets } : {}),
141
171
  ...(cfg.joinedSolverNets !== undefined ? { joinedSolverNets: cfg.joinedSolverNets } : {}),
142
- ...(fundingGateActive && fundingGate ? {
143
- funding: {
144
- master_address: fundingGate.master_address,
145
- eth_required: fundingGate.eth_required,
146
- eth_balance: fundingGate.eth_balance,
147
- targetWei: fundingTargetWei(fundingGate),
148
- // targetMet is false whenever the funding gate is active: the gate
149
- // fires only when master balance < target. Once the gate clears the
150
- // daemon advances past awaiting_funding and the funding block is
151
- // omitted entirely (allRunning path or currentStep > awaiting_funding).
152
- targetMet: false,
153
- },
154
- } : {}),
172
+ ...(fundingGateActive && fundingGate ? { funding: fundingResponse(fundingGate) } : {}),
155
173
  ...(error ? { error } : {}),
156
174
  ...(retireFailed ? {
157
175
  retire_failed: {
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap-endpoint.js","sourceRoot":"","sources":["../../src/api/bootstrap-endpoint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap-endpoint.js","sourceRoot":"","sources":["../../src/api/bootstrap-endpoint.ts"],"names":[],"mappings":"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"}
@@ -40,12 +40,18 @@
40
40
  import type { Hono } from 'hono';
41
41
  /** Classification of Codex credentials. */
42
42
  export type CodexAuthStatus = 'ok' | 'expired' | 'not_configured';
43
+ /** Classification of the installed codex CLI version against the tested range. */
44
+ export type CodexVersionStatus = 'ok' | 'unknown' | 'untested';
43
45
  export interface CodexDoctorResponse {
44
46
  installed: boolean;
45
47
  /** Convenience alias — true iff `authStatus === 'ok'`. */
46
48
  authenticated: boolean;
47
49
  /** Live/expired/absent classification of Codex credentials. */
48
50
  authStatus: CodexAuthStatus;
51
+ /** Parsed semver string from `codex --version`, or null when unparseable. */
52
+ cliVersion: string | null;
53
+ /** ok = within tested range; untested = outside it; unknown = unparseable (#675). */
54
+ versionStatus: CodexVersionStatus;
49
55
  exitCode: number | null;
50
56
  stdout: string;
51
57
  stderr: string;
@@ -2,6 +2,22 @@ import { spawnSync } from 'node:child_process';
2
2
  import { readFileSync } from 'node:fs';
3
3
  import { homedir } from 'node:os';
4
4
  import { join } from 'node:path';
5
+ /**
6
+ * Tested @openai/codex CLI version window (#675). Below MIN or above MAX, the
7
+ * harness may break — codex 0.133.0 introduced a stdin contract change that
8
+ * silently broke the previous positional-prompt invocation. Bumping these
9
+ * bounds is a deliberate compatibility statement, made with a green run of
10
+ * `yarn test test/harnesses/impls/learner/codex-code-adapter.test.ts` against
11
+ * the new CLI version.
12
+ *
13
+ * The upper bound is compared on major+minor only: patch releases within the
14
+ * same minor as `MAX_TESTED_CODEX_VERSION` are treated as `'ok'`, since codex
15
+ * patch bumps almost never break the CLI contract and warning on every patch
16
+ * would produce alarm fatigue. Bump `MAX_TESTED_CODEX_VERSION` when codex
17
+ * bumps its minor or major; patch bumps stay `'ok'` automatically.
18
+ */
19
+ const MIN_TESTED_CODEX_VERSION = '0.50.0';
20
+ const MAX_TESTED_CODEX_VERSION = '0.133.0';
5
21
  /**
6
22
  * Decodes a JWT's payload and returns its `exp` claim (epoch seconds), or
7
23
  * `undefined` when the token is absent, malformed, or carries no `exp`.
@@ -133,6 +149,67 @@ function hasApiKey(config) {
133
149
  const env = config.env ?? process.env;
134
150
  return Boolean(env['OPENAI_API_KEY']?.trim());
135
151
  }
152
+ /**
153
+ * Extracts the first `MAJOR.MINOR.PATCH` semver-looking triple from `codex
154
+ * --version` output. Returns null when no such triple is present.
155
+ */
156
+ function parseCodexVersion(stdout) {
157
+ const match = stdout.match(/\d+\.\d+\.\d+/);
158
+ return match ? match[0] : null;
159
+ }
160
+ /**
161
+ * Compares two `MAJOR.MINOR.PATCH` strings segment-by-segment as integers.
162
+ * Returns -1 if `a < b`, 0 if equal, 1 if `a > b`. Non-numeric / missing
163
+ * segments fall back to 0 so a partial input never throws.
164
+ */
165
+ function compareSemver(a, b) {
166
+ const av = a.split('.').map((s) => Number.parseInt(s, 10) || 0);
167
+ const bv = b.split('.').map((s) => Number.parseInt(s, 10) || 0);
168
+ for (let i = 0; i < 3; i++) {
169
+ const ai = av[i] ?? 0;
170
+ const bi = bv[i] ?? 0;
171
+ if (ai < bi)
172
+ return -1;
173
+ if (ai > bi)
174
+ return 1;
175
+ }
176
+ return 0;
177
+ }
178
+ /**
179
+ * Returns true when `a`'s `MAJOR.MINOR` is strictly greater than `b`'s. Patch
180
+ * differences within the same minor are ignored, so 0.133.5 is NOT above
181
+ * 0.133.0, but 0.134.0 and 1.0.0 are. Used for the upper-bound check (#675)
182
+ * so codex patch releases don't trip the untested-version warning.
183
+ */
184
+ function isAboveMinor(a, b) {
185
+ const av = a.split('.').map((s) => Number.parseInt(s, 10) || 0);
186
+ const bv = b.split('.').map((s) => Number.parseInt(s, 10) || 0);
187
+ const [aMajor, aMinor] = [av[0] ?? 0, av[1] ?? 0];
188
+ const [bMajor, bMinor] = [bv[0] ?? 0, bv[1] ?? 0];
189
+ if (aMajor !== bMajor)
190
+ return aMajor > bMajor;
191
+ return aMinor > bMinor;
192
+ }
193
+ /**
194
+ * Classifies a parsed semver against the tested range.
195
+ * - null → 'unknown'
196
+ * - below MIN (full semver compare) → 'untested'
197
+ * - above MAX on major+minor → 'untested' (patch bumps within the tested
198
+ * minor stay 'ok'; bump MAX_TESTED_CODEX_VERSION on minor/major bumps)
199
+ * - otherwise → 'ok'
200
+ */
201
+ function classifyVersion(cliVersion) {
202
+ if (cliVersion === null)
203
+ return 'unknown';
204
+ if (compareSemver(cliVersion, MIN_TESTED_CODEX_VERSION) < 0
205
+ || isAboveMinor(cliVersion, MAX_TESTED_CODEX_VERSION)) {
206
+ return 'untested';
207
+ }
208
+ return 'ok';
209
+ }
210
+ // Module-scoped so the warning fires once per process even though
211
+ // `probeCodexDoctor` is called every readiness tick.
212
+ let untestedVersionWarningEmitted = false;
136
213
  /**
137
214
  * Synchronously runs `codex --version` and classifies install + auth state.
138
215
  * Pure (no Hono dependency) so the harness layer can call it without pulling
@@ -160,10 +237,25 @@ export function probeCodexDoctor(config = {}) {
160
237
  const authStatus = runnable
161
238
  ? detectCodexAuthStatus(config)
162
239
  : 'not_configured';
240
+ // Version surfacing (#675). Parse only when we have a runnable binary;
241
+ // otherwise the stdout is meaningless.
242
+ const cliVersion = runnable ? parseCodexVersion(result.stdout ?? '') : null;
243
+ const versionStatus = runnable
244
+ ? classifyVersion(cliVersion)
245
+ : 'unknown';
246
+ if (versionStatus === 'untested' && !untestedVersionWarningEmitted) {
247
+ untestedVersionWarningEmitted = true;
248
+ // eslint-disable-next-line no-console
249
+ console.warn(`codex CLI version ${cliVersion} is outside the tested range `
250
+ + `${MIN_TESTED_CODEX_VERSION}–${MAX_TESTED_CODEX_VERSION}; the harness `
251
+ + `may break — see issue #675`);
252
+ }
163
253
  return {
164
254
  installed,
165
255
  authenticated: authStatus === 'ok',
166
256
  authStatus,
257
+ cliVersion,
258
+ versionStatus,
167
259
  exitCode: result.status,
168
260
  stdout: (result.stdout ?? '').slice(0, 4000),
169
261
  stderr: (result.stderr ?? '').slice(0, 4000),
@@ -1 +1 @@
1
- {"version":3,"file":"codex-doctor-endpoint.js","sourceRoot":"","sources":["../../src/api/codex-doctor-endpoint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-doctor-endpoint.js","sourceRoot":"","sources":["../../src/api/codex-doctor-endpoint.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,11 @@
3
3
  */
4
4
  import type { Store } from '../store/store.js';
5
5
  import type { JinnConfig } from '../config.js';
6
+ import type { CredentialId } from '../spend/credential.js';
6
7
  import { type GatheredStatusRaw, type StatusV1Response } from './status-build.js';
8
+ import type { HarnessReadinessSnapshot, JoinedHarnessSpec } from '../harnesses/readiness-registry.js';
9
+ /** Test-only: clear the first-seen-evicted tracker. Do not call from production code. */
10
+ export declare function __resetEvictionFirstSeenForTests(): void;
7
11
  /**
8
12
  * Drop any cached prediction operator status for `config`.
9
13
  *
@@ -30,6 +34,14 @@ export interface StatusGatherConfig {
30
34
  tjinnChainId?: number;
31
35
  /** JinnDistributor address used for real operator lifetime claimed totals. */
32
36
  tjinnDistributorAddress?: string;
37
+ /**
38
+ * stOLAS L2 distributor address (`CHAIN_CONFIG.distributorAddress`). Used
39
+ * solely to mirror `main.ts`'s `evictionCheck` predicate (issue #651). The
40
+ * tJINN distributor on L1 is a different contract — do not substitute one
41
+ * for the other even though they happen to bundle together in our current
42
+ * testnet deployment.
43
+ */
44
+ stOlasDistributorAddress?: string;
33
45
  network: 'mainnet' | 'testnet';
34
46
  pollIntervalMs: number;
35
47
  masterEthDailyEstimateWei?: string;
@@ -46,6 +58,20 @@ export interface StatusGatherConfig {
46
58
  /** Full config enables SolverNet/plugin/Harness diagnostics in /v1/status. */
47
59
  config?: JinnConfig;
48
60
  configPath?: string;
61
+ /** Per-credential daily caps; when present, /v1/status carries a `spend` block. */
62
+ spendCaps?: Record<CredentialId, number>;
63
+ /**
64
+ * Optional getter that returns the live HarnessReadinessRegistry snapshot
65
+ * + joinedHarnessesByCid map. Threaded by `server.ts` for the `/v1/status`
66
+ * handler so the response carries a `harness` rollup. Returning `null`
67
+ * means "registry not ready yet" — gather-status leaves `raw.harnessRollup`
68
+ * unset and the assembler defaults to ready. Mirrors the holder pattern
69
+ * already used for `harnessReadinessRegistry` in main.ts.
70
+ */
71
+ harnessReadiness?: () => {
72
+ snapshot: HarnessReadinessSnapshot;
73
+ joinedHarnessesByCid: Record<string, JoinedHarnessSpec>;
74
+ } | null;
49
75
  }
50
76
  /** Collect status inputs without assembling the legacy mega-response. */
51
77
  export declare function gatherGatheredStatusRaw(store: Store, status: StatusGatherConfig | undefined): Promise<GatheredStatusRaw>;