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

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 (288) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/deployments/deployment-jinn-mvi-l1-sepolia-fast.json +23 -4
  3. package/deployments/deployment-jinn-mvi-l1-sepolia.json +23 -4
  4. package/deployments/deployment-jinn-mvi-l2-baseSepolia.json +5 -4
  5. package/dist/adapters/mech/adapter.d.ts +38 -1
  6. package/dist/adapters/mech/adapter.js +241 -54
  7. package/dist/adapters/mech/adapter.js.map +1 -1
  8. package/dist/adapters/mech/contracts.d.ts +17 -4
  9. package/dist/adapters/mech/contracts.js +8 -2
  10. package/dist/adapters/mech/contracts.js.map +1 -1
  11. package/dist/adapters/mech/safe-revert.d.ts +20 -0
  12. package/dist/adapters/mech/safe-revert.js +12 -4
  13. package/dist/adapters/mech/safe-revert.js.map +1 -1
  14. package/dist/adapters/mech/safe.d.ts +5 -1
  15. package/dist/adapters/mech/safe.js +27 -8
  16. package/dist/adapters/mech/safe.js.map +1 -1
  17. package/dist/adapters/mech/verdict-code.d.ts +1 -0
  18. package/dist/adapters/mech/verdict-code.js +18 -0
  19. package/dist/adapters/mech/verdict-code.js.map +1 -1
  20. package/dist/api/admin-endpoint.d.ts +15 -3
  21. package/dist/api/admin-endpoint.js +24 -2
  22. package/dist/api/admin-endpoint.js.map +1 -1
  23. package/dist/api/bootstrap-endpoint.js +49 -0
  24. package/dist/api/bootstrap-endpoint.js.map +1 -1
  25. package/dist/api/codex-doctor-endpoint.d.ts +73 -0
  26. package/dist/api/codex-doctor-endpoint.js +177 -0
  27. package/dist/api/codex-doctor-endpoint.js.map +1 -0
  28. package/dist/api/discovery-endpoint.d.ts +1 -0
  29. package/dist/api/discovery-endpoint.js +26 -0
  30. package/dist/api/discovery-endpoint.js.map +1 -1
  31. package/dist/api/fleet-build.d.ts +1 -0
  32. package/dist/api/fleet-build.js +2 -1
  33. package/dist/api/fleet-build.js.map +1 -1
  34. package/dist/api/gather-status.d.ts +11 -0
  35. package/dist/api/gather-status.js +400 -4
  36. package/dist/api/gather-status.js.map +1 -1
  37. package/dist/api/hermes-doctor-endpoint.d.ts +117 -0
  38. package/dist/api/hermes-doctor-endpoint.js +229 -23
  39. package/dist/api/hermes-doctor-endpoint.js.map +1 -1
  40. package/dist/api/launcher-status.d.ts +21 -16
  41. package/dist/api/launcher-status.js +2 -1
  42. package/dist/api/launcher-status.js.map +1 -1
  43. package/dist/api/portfolio-v0-build.d.ts +10 -0
  44. package/dist/api/portfolio-v0-build.js +24 -5
  45. package/dist/api/portfolio-v0-build.js.map +1 -1
  46. package/dist/api/prediction-v1-build.d.ts +10 -0
  47. package/dist/api/prediction-v1-build.js +7 -1
  48. package/dist/api/prediction-v1-build.js.map +1 -1
  49. package/dist/api/server.d.ts +31 -1
  50. package/dist/api/server.js +68 -1
  51. package/dist/api/server.js.map +1 -1
  52. package/dist/api/setup-endpoints.d.ts +16 -0
  53. package/dist/api/setup-endpoints.js +78 -4
  54. package/dist/api/setup-endpoints.js.map +1 -1
  55. package/dist/api/setup-retry-endpoint.d.ts +19 -0
  56. package/dist/api/setup-retry-endpoint.js +32 -0
  57. package/dist/api/setup-retry-endpoint.js.map +1 -0
  58. package/dist/api/solvernets-endpoints.d.ts +8 -0
  59. package/dist/api/solvernets-endpoints.js +71 -43
  60. package/dist/api/solvernets-endpoints.js.map +1 -1
  61. package/dist/api/status-build.d.ts +72 -0
  62. package/dist/api/status-build.js +73 -18
  63. package/dist/api/status-build.js.map +1 -1
  64. package/dist/api/task-run-routing.d.ts +7 -0
  65. package/dist/api/task-run-routing.js +12 -0
  66. package/dist/api/task-run-routing.js.map +1 -0
  67. package/dist/api/task-runs-build.d.ts +21 -0
  68. package/dist/api/task-runs-build.js +14 -1
  69. package/dist/api/task-runs-build.js.map +1 -1
  70. package/dist/build-info.json +4 -4
  71. package/dist/build-meta.json +1 -1
  72. package/dist/chain-read-errors.d.ts +10 -0
  73. package/dist/chain-read-errors.js +15 -0
  74. package/dist/chain-read-errors.js.map +1 -1
  75. package/dist/cli/commands/auth.js +1 -1
  76. package/dist/cli/commands/auth.js.map +1 -1
  77. package/dist/cli/commands/create.js +3 -2
  78. package/dist/cli/commands/create.js.map +1 -1
  79. package/dist/cli/commands/doctor.d.ts +2 -0
  80. package/dist/cli/commands/doctor.js +2 -0
  81. package/dist/cli/commands/doctor.js.map +1 -1
  82. package/dist/cli/commands/rewards.js +11 -7
  83. package/dist/cli/commands/rewards.js.map +1 -1
  84. package/dist/cli/commands/solver-nets.js +24 -9
  85. package/dist/cli/commands/solver-nets.js.map +1 -1
  86. package/dist/cli/commands/status.js +1 -1
  87. package/dist/cli/commands/status.js.map +1 -1
  88. package/dist/cli/commands/tasks.js +86 -9
  89. package/dist/cli/commands/tasks.js.map +1 -1
  90. package/dist/cli/commands/update.d.ts +10 -0
  91. package/dist/cli/commands/update.js +36 -0
  92. package/dist/cli/commands/update.js.map +1 -1
  93. package/dist/cli/introspection-context.js +5 -0
  94. package/dist/cli/introspection-context.js.map +1 -1
  95. package/dist/cli/task-native-readiness.d.ts +3 -1
  96. package/dist/cli/task-native-readiness.js +28 -6
  97. package/dist/cli/task-native-readiness.js.map +1 -1
  98. package/dist/config.d.ts +106 -5
  99. package/dist/config.js +97 -18
  100. package/dist/config.js.map +1 -1
  101. package/dist/daemon/checkpoint-loop.d.ts +48 -0
  102. package/dist/daemon/checkpoint-loop.js +76 -0
  103. package/dist/daemon/checkpoint-loop.js.map +1 -0
  104. package/dist/daemon/creator.d.ts +1 -1
  105. package/dist/daemon/creator.js +7 -3
  106. package/dist/daemon/creator.js.map +1 -1
  107. package/dist/daemon/daemon.d.ts +19 -0
  108. package/dist/daemon/daemon.js +68 -1
  109. package/dist/daemon/daemon.js.map +1 -1
  110. package/dist/daemon/eviction-loop.d.ts +40 -0
  111. package/dist/daemon/eviction-loop.js +67 -0
  112. package/dist/daemon/eviction-loop.js.map +1 -0
  113. package/dist/daemon/jinn-claim-loop-wiring.d.ts +33 -0
  114. package/dist/daemon/jinn-claim-loop-wiring.js +40 -0
  115. package/dist/daemon/jinn-claim-loop-wiring.js.map +1 -0
  116. package/dist/daemon/jinn-claim-loop.d.ts +24 -17
  117. package/dist/daemon/jinn-claim-loop.js +77 -23
  118. package/dist/daemon/jinn-claim-loop.js.map +1 -1
  119. package/dist/daemon/skip-log-dedup.d.ts +69 -0
  120. package/dist/daemon/skip-log-dedup.js +106 -0
  121. package/dist/daemon/skip-log-dedup.js.map +1 -0
  122. package/dist/dashboard/assets/index-BUlE8F3Y.js +330 -0
  123. package/dist/dashboard/assets/index-blqc7eqq.css +32 -0
  124. package/dist/dashboard/index.html +2 -2
  125. package/dist/discovery/factory.d.ts +17 -5
  126. package/dist/discovery/factory.js +46 -18
  127. package/dist/discovery/factory.js.map +1 -1
  128. package/dist/discovery/http.js +142 -3
  129. package/dist/discovery/http.js.map +1 -1
  130. package/dist/discovery/onchain.d.ts +5 -0
  131. package/dist/discovery/onchain.js +407 -15
  132. package/dist/discovery/onchain.js.map +1 -1
  133. package/dist/discovery/types.d.ts +45 -1
  134. package/dist/discovery/types.js +8 -10
  135. package/dist/discovery/types.js.map +1 -1
  136. package/dist/discovery/with-fallback.d.ts +7 -0
  137. package/dist/discovery/with-fallback.js +10 -0
  138. package/dist/discovery/with-fallback.js.map +1 -1
  139. package/dist/earning/bootstrap.d.ts +92 -1
  140. package/dist/earning/bootstrap.js +203 -63
  141. package/dist/earning/bootstrap.js.map +1 -1
  142. package/dist/earning/contracts.d.ts +14 -0
  143. package/dist/earning/contracts.js +17 -5
  144. package/dist/earning/contracts.js.map +1 -1
  145. package/dist/earning/funding-plan.js +27 -18
  146. package/dist/earning/funding-plan.js.map +1 -1
  147. package/dist/earning/jinn-rewards.d.ts +46 -0
  148. package/dist/earning/jinn-rewards.js +32 -0
  149. package/dist/earning/jinn-rewards.js.map +1 -1
  150. package/dist/earning/safe-adapter.d.ts +2 -0
  151. package/dist/earning/safe-adapter.js +26 -12
  152. package/dist/earning/safe-adapter.js.map +1 -1
  153. package/dist/earning/store.d.ts +8 -0
  154. package/dist/earning/store.js.map +1 -1
  155. package/dist/earning/testnet-setup-migration.d.ts +12 -0
  156. package/dist/earning/testnet-setup-migration.js +27 -1
  157. package/dist/earning/testnet-setup-migration.js.map +1 -1
  158. package/dist/earning/types.d.ts +15 -0
  159. package/dist/erc8004/reputation.d.ts +8 -0
  160. package/dist/erc8004/reputation.js +22 -3
  161. package/dist/erc8004/reputation.js.map +1 -1
  162. package/dist/harnesses/cost-estimates.d.ts +145 -0
  163. package/dist/harnesses/cost-estimates.js +297 -0
  164. package/dist/harnesses/cost-estimates.js.map +1 -0
  165. package/dist/harnesses/engine/engine.d.ts +72 -0
  166. package/dist/harnesses/engine/engine.js +105 -8
  167. package/dist/harnesses/engine/engine.js.map +1 -1
  168. package/dist/harnesses/engine/persistence.d.ts +51 -1
  169. package/dist/harnesses/engine/persistence.js +118 -5
  170. package/dist/harnesses/engine/persistence.js.map +1 -1
  171. package/dist/harnesses/engine/work-dir-reaper.d.ts +65 -0
  172. package/dist/harnesses/engine/work-dir-reaper.js +100 -0
  173. package/dist/harnesses/engine/work-dir-reaper.js.map +1 -0
  174. package/dist/harnesses/impls/hermes-agent/adapter.js +40 -0
  175. package/dist/harnesses/impls/hermes-agent/adapter.js.map +1 -1
  176. package/dist/harnesses/impls/hermes-agent/bootstrap.d.ts +20 -0
  177. package/dist/harnesses/impls/hermes-agent/bootstrap.js +40 -6
  178. package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -1
  179. package/dist/harnesses/impls/hermes-agent/harness.d.ts +59 -1
  180. package/dist/harnesses/impls/hermes-agent/harness.js +104 -0
  181. package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -1
  182. package/dist/harnesses/impls/index.d.ts +7 -0
  183. package/dist/harnesses/impls/index.js +16 -1
  184. package/dist/harnesses/impls/index.js.map +1 -1
  185. package/dist/harnesses/impls/learner/harness.d.ts +38 -4
  186. package/dist/harnesses/impls/learner/harness.js +96 -2
  187. package/dist/harnesses/impls/learner/harness.js.map +1 -1
  188. package/dist/harnesses/impls/learner/plugin-path.d.ts +0 -13
  189. package/dist/harnesses/impls/learner/plugin-path.js +35 -15
  190. package/dist/harnesses/impls/learner/plugin-path.js.map +1 -1
  191. package/dist/harnesses/impls/learner/types.d.ts +11 -0
  192. package/dist/harnesses/impls/stub.d.ts +58 -0
  193. package/dist/harnesses/impls/stub.js +89 -0
  194. package/dist/harnesses/impls/stub.js.map +1 -0
  195. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.d.ts +69 -50
  196. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js +178 -93
  197. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js.map +1 -1
  198. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.d.ts +12 -1
  199. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +121 -7
  200. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js.map +1 -1
  201. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.d.ts +15 -0
  202. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js +54 -4
  203. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js.map +1 -1
  204. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.d.ts +6 -0
  205. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js +1 -1
  206. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js.map +1 -1
  207. package/dist/harnesses/readiness-registry.js +9 -1
  208. package/dist/harnesses/readiness-registry.js.map +1 -1
  209. package/dist/main.js +371 -82
  210. package/dist/main.js.map +1 -1
  211. package/dist/observability/emit-event.d.ts +1 -1
  212. package/dist/observability/emit-event.js.map +1 -1
  213. package/dist/operator-errors.d.ts +7 -0
  214. package/dist/operator-errors.js +13 -1
  215. package/dist/operator-errors.js.map +1 -1
  216. package/dist/plugins/learner/.claude-plugin/plugin.json +9 -0
  217. package/dist/plugins/learner/.codex-plugin/plugin.json +39 -0
  218. package/dist/plugins/learner/AGENTS.md +40 -0
  219. package/dist/plugins/learner/CLAUDE.md +33 -0
  220. package/dist/plugins/learner/README.md +59 -0
  221. package/dist/plugins/learner/hooks/hooks.json +16 -0
  222. package/dist/plugins/learner/hooks/session-start +38 -0
  223. package/dist/plugins/learner/skills/learn/SKILL.md +412 -0
  224. package/dist/plugins/learner/skills/learn/analyst-prompt.md +68 -0
  225. package/dist/plugins/learner/skills/learn/consolidator-prompt.md +94 -0
  226. package/dist/plugins/learner/skills/learn/explorer-prompt.md +53 -0
  227. package/dist/plugins/learner/skills/learn/planner-prompt.md +87 -0
  228. package/dist/plugins/learner/skills/learn/promoter-prompt.md +113 -0
  229. package/dist/plugins/learner/skills/learn/step-worker-prompt.md +47 -0
  230. package/dist/plugins/learner/skills/learn/strategist-prompt.md +85 -0
  231. package/dist/restart-daemon.d.ts +90 -0
  232. package/dist/restart-daemon.js +95 -0
  233. package/dist/restart-daemon.js.map +1 -0
  234. package/dist/setup/halt-mode.d.ts +14 -0
  235. package/dist/setup/halt-mode.js +17 -0
  236. package/dist/setup/halt-mode.js.map +1 -0
  237. package/dist/solver-nets/prediction-operator-ux.js +43 -3
  238. package/dist/solver-nets/prediction-operator-ux.js.map +1 -1
  239. package/dist/solver-nets/registry.d.ts +1 -0
  240. package/dist/solver-nets/registry.js +1 -1
  241. package/dist/solver-nets/registry.js.map +1 -1
  242. package/dist/solver-types/_swe-rebench-v2-pool-cache.d.ts +58 -0
  243. package/dist/solver-types/_swe-rebench-v2-pool-cache.js +87 -0
  244. package/dist/solver-types/_swe-rebench-v2-pool-cache.js.map +1 -0
  245. package/dist/solver-types/_swe-rebench-v2-substrate.d.ts +1 -0
  246. package/dist/solver-types/_swe-rebench-v2-substrate.js +10 -0
  247. package/dist/solver-types/_swe-rebench-v2-substrate.js.map +1 -1
  248. package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +65 -0
  249. package/dist/solver-types/_swe-rebench-v2-validated-pool.js +243 -26
  250. package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
  251. package/dist/solver-types/swe-rebench-v2-auto.d.ts +22 -7
  252. package/dist/solver-types/swe-rebench-v2-auto.js +45 -20
  253. package/dist/solver-types/swe-rebench-v2-auto.js.map +1 -1
  254. package/dist/solver-types/swe-rebench-v2.d.ts +13 -2
  255. package/dist/solver-types/swe-rebench-v2.js +233 -94
  256. package/dist/solver-types/swe-rebench-v2.js.map +1 -1
  257. package/dist/solvernets/daemon-init.d.ts +10 -2
  258. package/dist/solvernets/daemon-init.js +22 -2
  259. package/dist/solvernets/daemon-init.js.map +1 -1
  260. package/dist/solvernets/launched-record-dispatcher.js +35 -7
  261. package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
  262. package/dist/solvernets/store.d.ts +5 -0
  263. package/dist/solvernets/store.js +1 -0
  264. package/dist/solvernets/store.js.map +1 -1
  265. package/dist/store/store.d.ts +15 -0
  266. package/dist/store/store.js +118 -3
  267. package/dist/store/store.js.map +1 -1
  268. package/dist/tasks/sources.d.ts +18 -1
  269. package/dist/tasks/sources.js +33 -5
  270. package/dist/tasks/sources.js.map +1 -1
  271. package/dist/tx-retry.d.ts +151 -19
  272. package/dist/tx-retry.js +286 -32
  273. package/dist/tx-retry.js.map +1 -1
  274. package/dist/types/payloads/prediction-apy-v0.d.ts +5 -5
  275. package/dist/types/payloads/prediction-v0.d.ts +5 -5
  276. package/dist/types/task-document.d.ts +392 -0
  277. package/dist/types/task-document.js +10 -0
  278. package/dist/types/task-document.js.map +1 -1
  279. package/dist/types/task.d.ts +28 -0
  280. package/dist/util/extract-tx-hash.d.ts +14 -0
  281. package/dist/util/extract-tx-hash.js +19 -0
  282. package/dist/util/extract-tx-hash.js.map +1 -0
  283. package/dist/vendor/@jinn-network/sdk/dist/contracts.js +1 -1
  284. package/dist/vendor/@jinn-network/sdk/dist/solvernets/manifest-schema.d.ts +3 -0
  285. package/dist/vendor/@jinn-network/sdk/dist/solvernets/manifest-schema.js +1 -0
  286. package/package.json +29 -12
  287. package/dist/dashboard/assets/index-DOlzFN8a.css +0 -32
  288. package/dist/dashboard/assets/index-NkZ7CTAT.js +0 -140
@@ -1,6 +1,7 @@
1
1
  import { existsSync, readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import { readBootstrapError } from '../errors/persisted-bootstrap-error.js';
4
+ import { MIGRATIONS_FILE } from '../earning/store.js';
4
5
  const STEPS = [
5
6
  'wallet',
6
7
  'safe_predicted',
@@ -19,6 +20,38 @@ const STEPS = [
19
20
  ];
20
21
  const STEP_INDEX = new Map(STEPS.map((s, i) => [s, i]));
21
22
  const RUNNING_STEPS = new Set(['safe_binding_pending', 'complete']);
23
+ /**
24
+ * Reads the migration archive and returns the most recent retire_error from
25
+ * any entry where the migration explicitly suppressed the local-state wipe
26
+ * (`wipe_suppressed === true`). Pre-PR archive entries lack the field — they
27
+ * are intentionally NOT surfaced because their local state was wiped, so
28
+ * showing a "service state preserved" envelope would mislead the operator.
29
+ */
30
+ function readLatestRetireError(earningDir) {
31
+ const archivePath = join(earningDir, MIGRATIONS_FILE);
32
+ if (!existsSync(archivePath))
33
+ return null;
34
+ let archive;
35
+ try {
36
+ archive = JSON.parse(readFileSync(archivePath, 'utf-8'));
37
+ }
38
+ catch {
39
+ return null;
40
+ }
41
+ const entries = archive.entries ?? [];
42
+ // Only surface entries where the wipe was *explicitly* suppressed by this
43
+ // PR's guard. Pre-PR entries have wipe_suppressed=undefined (falsy) and are
44
+ // ignored even though retire_status==='failed' — their state was reset, so
45
+ // the envelope would not apply.
46
+ const failed = entries.filter(e => e.retire_status === 'failed' && e.wipe_suppressed === true && e.retire_error);
47
+ if (failed.length === 0)
48
+ return null;
49
+ const latest = failed[failed.length - 1];
50
+ return {
51
+ retire_error: latest.retire_error,
52
+ tx_hash: latest.retire_tx_hash ?? null,
53
+ };
54
+ }
22
55
  function fundingTargetWei(fundingGate) {
23
56
  const required = fundingGate.eth_required;
24
57
  const balance = fundingGate.eth_balance;
@@ -87,6 +120,10 @@ export function addBootstrapRoutes(app, config) {
87
120
  // can render a "Bootstrap failed at X" state instead of staying frozen on
88
121
  // the last persisted step. Cleared at the start of each bootstrap attempt.
89
122
  const error = readBootstrapError(config.earningDir);
123
+ // Surface a retire_failed envelope when migration archived a failure but
124
+ // preserved local state. The BootstrapErrorCard (PR-6) will render it;
125
+ // for now we just expose the field so the dashboard can act on it.
126
+ const retireFailed = readLatestRetireError(config.earningDir);
90
127
  const cfg = config.configReader?.() ?? {};
91
128
  return c.json({
92
129
  schemaVersion: 1,
@@ -108,9 +145,21 @@ export function addBootstrapRoutes(app, config) {
108
145
  eth_required: fundingGate.eth_required,
109
146
  eth_balance: fundingGate.eth_balance,
110
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,
111
153
  },
112
154
  } : {}),
113
155
  ...(error ? { error } : {}),
156
+ ...(retireFailed ? {
157
+ retire_failed: {
158
+ retire_error: retireFailed.retire_error,
159
+ tx_hash: retireFailed.tx_hash,
160
+ message: 'We could not retire your previous setup. Your service state is preserved; resolve the retire failure before upgrading.',
161
+ },
162
+ } : {}),
114
163
  });
115
164
  });
116
165
  }
@@ -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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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * GET /api/codex/doctor
3
+ *
4
+ * Runs `codex --version` via spawnSync and inspects the auth configuration so
5
+ * the operator dashboard can show an install-required / sign-in-required panel
6
+ * before the operator saves a Codex harness selection.
7
+ *
8
+ * Response shape:
9
+ * { installed: boolean, authenticated: boolean,
10
+ * authStatus: 'ok' | 'expired' | 'not_configured',
11
+ * exitCode: number | null, stdout: string, stderr: string }
12
+ *
13
+ * `installed: false` means the binary was not found (ENOENT or equivalent).
14
+ * `exitCode !== 0` (with `installed: true`) means the binary exists but
15
+ * `codex --version` itself failed.
16
+ *
17
+ * `authStatus` (with `installed: true`, `exitCode === 0`) classifies the
18
+ * Codex credentials:
19
+ * - `'ok'` — usable credentials: an `OPENAI_API_KEY` (env or in
20
+ * `auth.json`), or a non-expired `codex login` OAuth
21
+ * session.
22
+ * - `'expired'` — an `auth.json` is present but its OAuth tokens have
23
+ * expired, or the file is malformed/unreadable. A
24
+ * logged-out operator with a leftover file lands here
25
+ * instead of false-`ok` (#366).
26
+ * - `'not_configured'` — no `OPENAI_API_KEY` and no `auth.json` at all.
27
+ * `authenticated` is kept as a convenience alias for `authStatus === 'ok'`.
28
+ *
29
+ * Codex (unlike Hermes) has no `codex doctor` subcommand, so install
30
+ * detection shells `codex --version`. Codex also exposes no auth-status
31
+ * subcommand, so liveness is derived by parsing + expiry-checking the
32
+ * `auth.json` it persists — existence alone is not enough: a stale OAuth
33
+ * session reads as logged-in to a naive existence check (#366).
34
+ *
35
+ * The probe logic is exported as `probeCodexDoctor` so the Codex variant of
36
+ * the `LearnerHarness` can reuse it from `isReady()` — same source of truth
37
+ * for the SPA precheck panel and the daemon's claim-readiness gate (#348,
38
+ * same-shape bug as #330; liveness tightening from #366).
39
+ */
40
+ import type { Hono } from 'hono';
41
+ /** Classification of Codex credentials. */
42
+ export type CodexAuthStatus = 'ok' | 'expired' | 'not_configured';
43
+ export interface CodexDoctorResponse {
44
+ installed: boolean;
45
+ /** Convenience alias — true iff `authStatus === 'ok'`. */
46
+ authenticated: boolean;
47
+ /** Live/expired/absent classification of Codex credentials. */
48
+ authStatus: CodexAuthStatus;
49
+ exitCode: number | null;
50
+ stdout: string;
51
+ stderr: string;
52
+ }
53
+ export interface CodexDoctorConfig {
54
+ codexPath?: string;
55
+ codexDoctorTimeoutMs?: number;
56
+ /** Inject env for testing (defaults to process.env). */
57
+ env?: NodeJS.ProcessEnv;
58
+ /**
59
+ * Override the auth-file read (for testing). Returns the raw `auth.json`
60
+ * contents, or `undefined` when no file exists. When supplied, the real
61
+ * filesystem is not touched.
62
+ */
63
+ readAuthFile?: () => string | undefined;
64
+ /** Override the clock for deterministic expiry tests (epoch ms). */
65
+ now?: number;
66
+ }
67
+ /**
68
+ * Synchronously runs `codex --version` and classifies install + auth state.
69
+ * Pure (no Hono dependency) so the harness layer can call it without pulling
70
+ * the API server in.
71
+ */
72
+ export declare function probeCodexDoctor(config?: CodexDoctorConfig): CodexDoctorResponse;
73
+ export declare function addCodexDoctorRoutes(app: Hono, config?: CodexDoctorConfig): void;
@@ -0,0 +1,177 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { readFileSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ /**
6
+ * Decodes a JWT's payload and returns its `exp` claim (epoch seconds), or
7
+ * `undefined` when the token is absent, malformed, or carries no `exp`.
8
+ * Defensive: never throws.
9
+ *
10
+ * Note: the JWT signature is intentionally NOT verified — this is not a
11
+ * security gap. The daemon only needs the `exp` claim for a liveness hint;
12
+ * Codex itself verifies signatures when the token is actually used.
13
+ */
14
+ function jwtExpiry(token) {
15
+ if (typeof token !== 'string' || token.length === 0)
16
+ return undefined;
17
+ const parts = token.split('.');
18
+ if (parts.length !== 3)
19
+ return undefined;
20
+ try {
21
+ const payloadJson = Buffer.from(parts[1], 'base64url').toString('utf8');
22
+ const payload = JSON.parse(payloadJson);
23
+ return typeof payload.exp === 'number' ? payload.exp : undefined;
24
+ }
25
+ catch {
26
+ return undefined;
27
+ }
28
+ }
29
+ /**
30
+ * Classifies the credentials inside a parsed `auth.json`.
31
+ *
32
+ * - A non-empty `OPENAI_API_KEY` in the file is API-key mode — there is no
33
+ * expiry, so presence is acceptable (`'ok'`).
34
+ * - Otherwise it is OAuth (`codex login`) mode. The live-ness signal is the
35
+ * `refresh_token`: codex transparently mints fresh `id_token` /
36
+ * `access_token` from it on its next run, so a present refresh_token means
37
+ * the session is live (`'ok'`). The `id_token` is a ~1h OIDC token and the
38
+ * `access_token` only lasts days — both routinely lapse between codex runs
39
+ * on a perfectly healthy login, so gating on their `exp` false-fails the
40
+ * readiness check and deadlocks the claim loop: the probe shells
41
+ * `codex --version`, which never refreshes, so the daemon never claims,
42
+ * never runs codex, and the tokens never rotate (#464).
43
+ * - With no refresh_token, fall back to a best-effort bearer-token expiry
44
+ * check (`access_token` first, `id_token` last). An expired or
45
+ * un-checkable bearer token is `'expired'` — the safe direction for a
46
+ * claim gate: a logged-out operator with a leftover file must not read as
47
+ * live (#366). `codex logout` deletes `auth.json` outright, so a
48
+ * structurally-valid file that still carries a refresh_token is a live
49
+ * session.
50
+ */
51
+ function classifyAuthFile(auth, nowMs) {
52
+ const fileApiKey = auth.OPENAI_API_KEY;
53
+ if (typeof fileApiKey === 'string' && fileApiKey.trim().length > 0) {
54
+ return 'ok';
55
+ }
56
+ const tokens = auth.tokens;
57
+ if (!tokens || typeof tokens !== 'object') {
58
+ // A file with neither an API key nor a tokens object carries no usable
59
+ // credential — treat as stale rather than live.
60
+ return 'expired';
61
+ }
62
+ // A present refresh_token is the live-ness signal: codex renews the
63
+ // short-lived id_token / access_token from it on demand (#464).
64
+ const refreshToken = tokens.refresh_token;
65
+ if (typeof refreshToken === 'string' && refreshToken.trim().length > 0) {
66
+ return 'ok';
67
+ }
68
+ // No refresh_token — best-effort bearer-token expiry check (access_token
69
+ // first, id_token only as a last resort).
70
+ const exp = jwtExpiry(tokens.access_token) ?? jwtExpiry(tokens.id_token);
71
+ if (exp === undefined) {
72
+ // Tokens present but not expiry-checkable — cannot prove liveness.
73
+ return 'expired';
74
+ }
75
+ return exp * 1000 > nowMs ? 'ok' : 'expired';
76
+ }
77
+ /**
78
+ * Reads `auth.json` (from `CODEX_HOME` or `~/.codex`) and returns its raw
79
+ * contents, or `undefined` when the file does not exist. A read error other
80
+ * than "not found" (e.g. EACCES) is reported as an empty string so the caller
81
+ * classifies it as `expired` rather than `not_configured`.
82
+ */
83
+ function readCodexAuthFile(config) {
84
+ if (config.readAuthFile)
85
+ return config.readAuthFile();
86
+ const env = config.env ?? process.env;
87
+ const codexHome = env['CODEX_HOME']?.trim();
88
+ const authPath = codexHome
89
+ ? join(codexHome, 'auth.json')
90
+ : join(homedir(), '.codex', 'auth.json');
91
+ try {
92
+ return readFileSync(authPath, 'utf8');
93
+ }
94
+ catch (err) {
95
+ const code = err?.code;
96
+ if (code === 'ENOENT')
97
+ return undefined;
98
+ // File exists but is unreadable — surface as a present-but-broken file so
99
+ // it classifies as `expired`, never `not_configured`.
100
+ return '';
101
+ }
102
+ }
103
+ /**
104
+ * Classifies Codex credential state. Codex authenticates either via the
105
+ * `OPENAI_API_KEY` env var (no expiry) or via a `codex login` session
106
+ * persisted to `auth.json` under `CODEX_HOME` (falling back to `~/.codex`).
107
+ *
108
+ * Liveness, not mere existence: a malformed file or an expired OAuth session
109
+ * classifies as `'expired'`, distinct from `'not_configured'` (no file and no
110
+ * env key). Never throws — a corrupt file degrades to `'expired'`.
111
+ */
112
+ function detectCodexAuthStatus(config) {
113
+ if (hasApiKey(config))
114
+ return 'ok';
115
+ const raw = readCodexAuthFile(config);
116
+ if (raw === undefined)
117
+ return 'not_configured';
118
+ let parsed;
119
+ try {
120
+ parsed = JSON.parse(raw);
121
+ }
122
+ catch {
123
+ // Malformed / truncated auth.json — a logged-out operator with a corrupt
124
+ // leftover file. Stale-class, never a false `ok` (#366).
125
+ return 'expired';
126
+ }
127
+ if (!parsed || typeof parsed !== 'object')
128
+ return 'expired';
129
+ const nowMs = config.now ?? Date.now();
130
+ return classifyAuthFile(parsed, nowMs);
131
+ }
132
+ function hasApiKey(config) {
133
+ const env = config.env ?? process.env;
134
+ return Boolean(env['OPENAI_API_KEY']?.trim());
135
+ }
136
+ /**
137
+ * Synchronously runs `codex --version` and classifies install + auth state.
138
+ * Pure (no Hono dependency) so the harness layer can call it without pulling
139
+ * the API server in.
140
+ */
141
+ export function probeCodexDoctor(config = {}) {
142
+ const codexBin = config.codexPath ?? 'codex';
143
+ const timeoutMs = config.codexDoctorTimeoutMs ?? 30_000;
144
+ const result = spawnSync(codexBin, ['--version'], {
145
+ timeout: timeoutMs,
146
+ encoding: 'utf8',
147
+ });
148
+ const errorCode = result.error?.code;
149
+ // installed=true means we found the binary on disk. ENOENT is the only
150
+ // definitive not-installed signal. Other errors (EACCES = wrong
151
+ // permissions; ETIMEDOUT = ran but didn't finish in time) indicate the
152
+ // binary exists but couldn't be exercised cleanly — surface those as
153
+ // config-issue, not missing.
154
+ const notFound = errorCode === 'ENOENT';
155
+ const installed = !notFound && (result.status !== null
156
+ || result.signal !== null
157
+ || (errorCode != null && errorCode !== 'ENOENT'));
158
+ // Auth is only meaningful once the binary is present and runnable.
159
+ const runnable = installed && result.status === 0;
160
+ const authStatus = runnable
161
+ ? detectCodexAuthStatus(config)
162
+ : 'not_configured';
163
+ return {
164
+ installed,
165
+ authenticated: authStatus === 'ok',
166
+ authStatus,
167
+ exitCode: result.status,
168
+ stdout: (result.stdout ?? '').slice(0, 4000),
169
+ stderr: (result.stderr ?? '').slice(0, 4000),
170
+ };
171
+ }
172
+ export function addCodexDoctorRoutes(app, config = {}) {
173
+ app.get('/api/codex/doctor', (c) => {
174
+ return c.json(probeCodexDoctor(config));
175
+ });
176
+ }
177
+ //# sourceMappingURL=codex-doctor-endpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-doctor-endpoint.js","sourceRoot":"","sources":["../../src/api/codex-doctor-endpoint.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@
6
6
  * GET /v1/discovery/plugin-publications?solverType&builderAgentId&includeRevoked
7
7
  * GET /v1/discovery/builder-artifacts?builderAgentId&limit
8
8
  * GET /v1/discovery/plugin-scores?cid&limit
9
+ * GET /v1/discovery/solvernet-operator-count?cid
9
10
  *
10
11
  * Used by the /build SPA route (hfmf) to render published plug-ins, the
11
12
  * local operator's published plug-ins, and per-plug-in score history.
@@ -50,6 +50,32 @@ export function addDiscoveryRoutes(app, config) {
50
50
  return c.json({ error: 'internal_error', detail: err.message }, 503);
51
51
  }
52
52
  });
53
+ // GET /v1/discovery/solvernet-operator-count?cid=<manifestCid>
54
+ //
55
+ // Returns the count of distinct operators with on-chain activity (claimed
56
+ // tasks) on the SolverNet identified by `cid`. Backs the operator-count
57
+ // surface on the launched-SolverNet dashboard (issue #351). See
58
+ // `DiscoveryAPI.getSolverNetOperatorCount` for why this counts
59
+ // *participating* operators rather than config-level "joins".
60
+ app.get('/v1/discovery/solvernet-operator-count', async (c) => {
61
+ const discovery = getDiscovery();
62
+ if (!discovery) {
63
+ return c.json({ error: 'subsystem_not_ready', message: 'DiscoveryAPI still initialising' }, 503);
64
+ }
65
+ const cid = c.req.query('cid');
66
+ if (!cid)
67
+ return c.json({ error: 'cid is required' }, 400);
68
+ try {
69
+ const operatorCount = await discovery.getSolverNetOperatorCount(cid);
70
+ return c.json({ manifestCid: cid, operatorCount });
71
+ }
72
+ catch (err) {
73
+ if (err instanceof DiscoveryUnavailableError) {
74
+ return c.json({ error: 'discovery_unavailable' }, 503);
75
+ }
76
+ return c.json({ error: 'internal_error', detail: err.message }, 503);
77
+ }
78
+ });
53
79
  app.get('/v1/discovery/plugin-scores', async (c) => {
54
80
  const discovery = getDiscovery();
55
81
  if (!discovery) {
@@ -1 +1 @@
1
- {"version":3,"file":"discovery-endpoint.js","sourceRoot":"","sources":["../../src/api/discovery-endpoint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discovery-endpoint.js","sourceRoot":"","sources":["../../src/api/discovery-endpoint.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,7 @@ export interface FleetV1Service {
30
30
  staked: boolean;
31
31
  evicted: boolean;
32
32
  sinceBlock: number | null;
33
+ inactivitySeconds: number | null;
33
34
  };
34
35
  activity: {
35
36
  lastEventAt: string | null;
@@ -72,8 +72,9 @@ export function assembleFleetV1(raw) {
72
72
  },
73
73
  staking: {
74
74
  staked: isStakedLikeServiceStep(svc.step),
75
- evicted: false,
75
+ evicted: raw.evictedByServiceIndex?.[di] ?? false,
76
76
  sinceBlock: null,
77
+ inactivitySeconds: raw.inactivityByServiceIndex?.[di] ?? null,
77
78
  },
78
79
  activity: {
79
80
  lastEventAt: per?.lastEventAt ?? null,
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-build.js","sourceRoot":"","sources":["../../src/api/fleet-build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fleet-build.js","sourceRoot":"","sources":["../../src/api/fleet-build.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,17 @@ export declare function invalidatePredictionOperatorStatusCache(config: JinnConf
19
19
  export interface StatusGatherConfig {
20
20
  earningDir: string;
21
21
  rpcUrl: string;
22
+ /**
23
+ * tJINN ERC-20 token address — resolved from the bundled JINN MVI L1
24
+ * deployment artifact in `main.ts` (single source of truth). Optional so
25
+ * test callers can omit it; gather-status falls back to the artifact-derived
26
+ * default when absent.
27
+ */
28
+ tjinnTokenAddress?: string;
29
+ /** tJINN chain id — resolved from the same artifact as `tjinnTokenAddress`. */
30
+ tjinnChainId?: number;
31
+ /** JinnDistributor address used for real operator lifetime claimed totals. */
32
+ tjinnDistributorAddress?: string;
22
33
  network: 'mainnet' | 'testnet';
23
34
  pollIntervalMs: number;
24
35
  masterEthDailyEstimateWei?: string;