@jinn-network/client 0.1.6 → 0.1.7-canary.08ebd916

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 (390) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +67 -1
  3. package/deployments/deployment-jinn-mvi-l1-sepolia-fast.json +23 -4
  4. package/deployments/deployment-jinn-mvi-l1-sepolia.json +23 -4
  5. package/deployments/deployment-jinn-mvi-l2-baseSepolia.json +5 -4
  6. package/dist/adapters/mech/adapter.d.ts +38 -2
  7. package/dist/adapters/mech/adapter.js +269 -62
  8. package/dist/adapters/mech/adapter.js.map +1 -1
  9. package/dist/adapters/mech/contracts.d.ts +17 -4
  10. package/dist/adapters/mech/contracts.js +8 -2
  11. package/dist/adapters/mech/contracts.js.map +1 -1
  12. package/dist/adapters/mech/safe-revert.d.ts +20 -0
  13. package/dist/adapters/mech/safe-revert.js +12 -4
  14. package/dist/adapters/mech/safe-revert.js.map +1 -1
  15. package/dist/adapters/mech/safe.d.ts +6 -2
  16. package/dist/adapters/mech/safe.js +32 -11
  17. package/dist/adapters/mech/safe.js.map +1 -1
  18. package/dist/adapters/mech/types.d.ts +6 -1
  19. package/dist/adapters/mech/types.js.map +1 -1
  20. package/dist/adapters/mech/verdict-code.d.ts +1 -0
  21. package/dist/adapters/mech/verdict-code.js +18 -0
  22. package/dist/adapters/mech/verdict-code.js.map +1 -1
  23. package/dist/agent/operator-claude.js +8 -0
  24. package/dist/agent/operator-claude.js.map +1 -1
  25. package/dist/api/activity-events-endpoint.d.ts +14 -0
  26. package/dist/api/activity-events-endpoint.js +59 -0
  27. package/dist/api/activity-events-endpoint.js.map +1 -0
  28. package/dist/api/admin-endpoint.d.ts +15 -3
  29. package/dist/api/admin-endpoint.js +24 -2
  30. package/dist/api/admin-endpoint.js.map +1 -1
  31. package/dist/api/bootstrap-endpoint.d.ts +1 -2
  32. package/dist/api/bootstrap-endpoint.js +85 -18
  33. package/dist/api/bootstrap-endpoint.js.map +1 -1
  34. package/dist/api/codex-doctor-endpoint.d.ts +90 -0
  35. package/dist/api/codex-doctor-endpoint.js +296 -0
  36. package/dist/api/codex-doctor-endpoint.js.map +1 -0
  37. package/dist/api/discovery-endpoint.d.ts +1 -0
  38. package/dist/api/discovery-endpoint.js +26 -0
  39. package/dist/api/discovery-endpoint.js.map +1 -1
  40. package/dist/api/fleet-build.d.ts +1 -0
  41. package/dist/api/fleet-build.js +2 -1
  42. package/dist/api/fleet-build.js.map +1 -1
  43. package/dist/api/gather-status.d.ts +37 -0
  44. package/dist/api/gather-status.js +572 -19
  45. package/dist/api/gather-status.js.map +1 -1
  46. package/dist/api/hermes-doctor-endpoint.d.ts +128 -3
  47. package/dist/api/hermes-doctor-endpoint.js +265 -22
  48. package/dist/api/hermes-doctor-endpoint.js.map +1 -1
  49. package/dist/api/launcher-status.d.ts +25 -17
  50. package/dist/api/launcher-status.js +13 -11
  51. package/dist/api/launcher-status.js.map +1 -1
  52. package/dist/api/launcher-tasks.d.ts +1 -1
  53. package/dist/api/launcher-tasks.js +12 -8
  54. package/dist/api/launcher-tasks.js.map +1 -1
  55. package/dist/api/operator-artifacts-endpoint.js +73 -6
  56. package/dist/api/operator-artifacts-endpoint.js.map +1 -1
  57. package/dist/api/portfolio-v0-build.d.ts +10 -0
  58. package/dist/api/portfolio-v0-build.js +24 -5
  59. package/dist/api/portfolio-v0-build.js.map +1 -1
  60. package/dist/api/prediction-v1-build.d.ts +10 -0
  61. package/dist/api/prediction-v1-build.js +7 -1
  62. package/dist/api/prediction-v1-build.js.map +1 -1
  63. package/dist/api/server.d.ts +31 -1
  64. package/dist/api/server.js +95 -2
  65. package/dist/api/server.js.map +1 -1
  66. package/dist/api/setup-endpoints.d.ts +16 -0
  67. package/dist/api/setup-endpoints.js +89 -135
  68. package/dist/api/setup-endpoints.js.map +1 -1
  69. package/dist/api/setup-retry-endpoint.d.ts +19 -0
  70. package/dist/api/setup-retry-endpoint.js +32 -0
  71. package/dist/api/setup-retry-endpoint.js.map +1 -0
  72. package/dist/api/solvernets-endpoints.d.ts +8 -0
  73. package/dist/api/solvernets-endpoints.js +99 -60
  74. package/dist/api/solvernets-endpoints.js.map +1 -1
  75. package/dist/api/status-build.d.ts +168 -2
  76. package/dist/api/status-build.js +116 -27
  77. package/dist/api/status-build.js.map +1 -1
  78. package/dist/api/status-harness-rollup.d.ts +35 -0
  79. package/dist/api/status-harness-rollup.js +45 -0
  80. package/dist/api/status-harness-rollup.js.map +1 -0
  81. package/dist/api/task-run-routing.d.ts +7 -0
  82. package/dist/api/task-run-routing.js +12 -0
  83. package/dist/api/task-run-routing.js.map +1 -0
  84. package/dist/api/task-runs-build.d.ts +21 -0
  85. package/dist/api/task-runs-build.js +14 -1
  86. package/dist/api/task-runs-build.js.map +1 -1
  87. package/dist/build-info.json +4 -4
  88. package/dist/build-meta.json +1 -1
  89. package/dist/captures/live-publisher.js +24 -4
  90. package/dist/captures/live-publisher.js.map +1 -1
  91. package/dist/captures/publish.d.ts +1 -1
  92. package/dist/chain-read-errors.d.ts +10 -0
  93. package/dist/chain-read-errors.js +15 -0
  94. package/dist/chain-read-errors.js.map +1 -1
  95. package/dist/cli/commands/auth.js +1 -1
  96. package/dist/cli/commands/auth.js.map +1 -1
  97. package/dist/cli/commands/create.js +3 -2
  98. package/dist/cli/commands/create.js.map +1 -1
  99. package/dist/cli/commands/doctor.d.ts +2 -0
  100. package/dist/cli/commands/doctor.js +2 -0
  101. package/dist/cli/commands/doctor.js.map +1 -1
  102. package/dist/cli/commands/rewards.js +11 -7
  103. package/dist/cli/commands/rewards.js.map +1 -1
  104. package/dist/cli/commands/solver-nets.js +101 -15
  105. package/dist/cli/commands/solver-nets.js.map +1 -1
  106. package/dist/cli/commands/solver-plugins-block.d.ts +33 -0
  107. package/dist/cli/commands/solver-plugins-block.js +118 -0
  108. package/dist/cli/commands/solver-plugins-block.js.map +1 -0
  109. package/dist/cli/commands/solver-plugins-feedback.d.ts +72 -0
  110. package/dist/cli/commands/solver-plugins-feedback.js +262 -0
  111. package/dist/cli/commands/solver-plugins-feedback.js.map +1 -0
  112. package/dist/cli/commands/solver-plugins-read.d.ts +54 -0
  113. package/dist/cli/commands/solver-plugins-read.js +259 -0
  114. package/dist/cli/commands/solver-plugins-read.js.map +1 -0
  115. package/dist/cli/commands/solver-plugins.d.ts +35 -0
  116. package/dist/cli/commands/solver-plugins.js +399 -2
  117. package/dist/cli/commands/solver-plugins.js.map +1 -1
  118. package/dist/cli/commands/status.js +1 -1
  119. package/dist/cli/commands/status.js.map +1 -1
  120. package/dist/cli/commands/tasks.js +101 -11
  121. package/dist/cli/commands/tasks.js.map +1 -1
  122. package/dist/cli/commands/update.d.ts +10 -0
  123. package/dist/cli/commands/update.js +36 -0
  124. package/dist/cli/commands/update.js.map +1 -1
  125. package/dist/cli/introspection-context.js +5 -0
  126. package/dist/cli/introspection-context.js.map +1 -1
  127. package/dist/cli/task-native-readiness.d.ts +10 -1
  128. package/dist/cli/task-native-readiness.js +30 -6
  129. package/dist/cli/task-native-readiness.js.map +1 -1
  130. package/dist/config.d.ts +273 -235
  131. package/dist/config.js +305 -114
  132. package/dist/config.js.map +1 -1
  133. package/dist/daemon/checkpoint-loop.d.ts +48 -0
  134. package/dist/daemon/checkpoint-loop.js +76 -0
  135. package/dist/daemon/checkpoint-loop.js.map +1 -0
  136. package/dist/daemon/creator.d.ts +1 -1
  137. package/dist/daemon/creator.js +7 -3
  138. package/dist/daemon/creator.js.map +1 -1
  139. package/dist/daemon/daemon.d.ts +22 -0
  140. package/dist/daemon/daemon.js +156 -23
  141. package/dist/daemon/daemon.js.map +1 -1
  142. package/dist/daemon/eviction-loop.d.ts +40 -0
  143. package/dist/daemon/eviction-loop.js +67 -0
  144. package/dist/daemon/eviction-loop.js.map +1 -0
  145. package/dist/daemon/gate-logger.d.ts +9 -0
  146. package/dist/daemon/gate-logger.js +2 -0
  147. package/dist/daemon/gate-logger.js.map +1 -0
  148. package/dist/daemon/jinn-claim-loop-wiring.d.ts +33 -0
  149. package/dist/daemon/jinn-claim-loop-wiring.js +40 -0
  150. package/dist/daemon/jinn-claim-loop-wiring.js.map +1 -0
  151. package/dist/daemon/jinn-claim-loop.d.ts +24 -17
  152. package/dist/daemon/jinn-claim-loop.js +77 -23
  153. package/dist/daemon/jinn-claim-loop.js.map +1 -1
  154. package/dist/daemon/readiness-gate.d.ts +1 -4
  155. package/dist/daemon/readiness-gate.js.map +1 -1
  156. package/dist/daemon/skip-log-dedup.d.ts +69 -0
  157. package/dist/daemon/skip-log-dedup.js +106 -0
  158. package/dist/daemon/skip-log-dedup.js.map +1 -0
  159. package/dist/daemon/spend-cap-gate.d.ts +40 -0
  160. package/dist/daemon/spend-cap-gate.js +46 -0
  161. package/dist/daemon/spend-cap-gate.js.map +1 -0
  162. package/dist/dashboard/assets/index-C4huIsUW.css +32 -0
  163. package/dist/dashboard/assets/index-DkTglWXU.js +345 -0
  164. package/dist/dashboard/index.html +2 -2
  165. package/dist/discovery/factory.d.ts +17 -5
  166. package/dist/discovery/factory.js +46 -18
  167. package/dist/discovery/factory.js.map +1 -1
  168. package/dist/discovery/http.js +216 -3
  169. package/dist/discovery/http.js.map +1 -1
  170. package/dist/discovery/onchain.d.ts +5 -0
  171. package/dist/discovery/onchain.js +418 -15
  172. package/dist/discovery/onchain.js.map +1 -1
  173. package/dist/discovery/types.d.ts +75 -1
  174. package/dist/discovery/types.js +8 -10
  175. package/dist/discovery/types.js.map +1 -1
  176. package/dist/discovery/with-fallback.d.ts +7 -0
  177. package/dist/discovery/with-fallback.js +20 -0
  178. package/dist/discovery/with-fallback.js.map +1 -1
  179. package/dist/earning/bootstrap.d.ts +100 -4
  180. package/dist/earning/bootstrap.js +221 -74
  181. package/dist/earning/bootstrap.js.map +1 -1
  182. package/dist/earning/contracts.d.ts +14 -0
  183. package/dist/earning/contracts.js +17 -5
  184. package/dist/earning/contracts.js.map +1 -1
  185. package/dist/earning/funding-plan.js +27 -18
  186. package/dist/earning/funding-plan.js.map +1 -1
  187. package/dist/earning/jinn-rewards.d.ts +46 -0
  188. package/dist/earning/jinn-rewards.js +32 -0
  189. package/dist/earning/jinn-rewards.js.map +1 -1
  190. package/dist/earning/safe-adapter.d.ts +2 -0
  191. package/dist/earning/safe-adapter.js +37 -11
  192. package/dist/earning/safe-adapter.js.map +1 -1
  193. package/dist/earning/store.d.ts +8 -0
  194. package/dist/earning/store.js.map +1 -1
  195. package/dist/earning/testnet-setup-migration.d.ts +12 -0
  196. package/dist/earning/testnet-setup-migration.js +27 -1
  197. package/dist/earning/testnet-setup-migration.js.map +1 -1
  198. package/dist/earning/types.d.ts +21 -6
  199. package/dist/earning/viem-clients.d.ts +11 -4
  200. package/dist/earning/viem-clients.js +14 -5
  201. package/dist/earning/viem-clients.js.map +1 -1
  202. package/dist/erc8004/identity.d.ts +19 -3
  203. package/dist/erc8004/identity.js +21 -6
  204. package/dist/erc8004/identity.js.map +1 -1
  205. package/dist/erc8004/index.d.ts +1 -1
  206. package/dist/erc8004/index.js.map +1 -1
  207. package/dist/erc8004/reputation.d.ts +8 -0
  208. package/dist/erc8004/reputation.js +22 -3
  209. package/dist/erc8004/reputation.js.map +1 -1
  210. package/dist/events/types.d.ts +2 -2
  211. package/dist/harnesses/cost-estimates.d.ts +145 -0
  212. package/dist/harnesses/cost-estimates.js +297 -0
  213. package/dist/harnesses/cost-estimates.js.map +1 -0
  214. package/dist/harnesses/engine/engine.d.ts +78 -0
  215. package/dist/harnesses/engine/engine.js +153 -11
  216. package/dist/harnesses/engine/engine.js.map +1 -1
  217. package/dist/harnesses/engine/persistence.d.ts +51 -1
  218. package/dist/harnesses/engine/persistence.js +118 -5
  219. package/dist/harnesses/engine/persistence.js.map +1 -1
  220. package/dist/harnesses/engine/work-dir-reaper.d.ts +65 -0
  221. package/dist/harnesses/engine/work-dir-reaper.js +100 -0
  222. package/dist/harnesses/engine/work-dir-reaper.js.map +1 -0
  223. package/dist/harnesses/impls/hermes-agent/adapter.js +40 -0
  224. package/dist/harnesses/impls/hermes-agent/adapter.js.map +1 -1
  225. package/dist/harnesses/impls/hermes-agent/bootstrap.d.ts +20 -0
  226. package/dist/harnesses/impls/hermes-agent/bootstrap.js +40 -6
  227. package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -1
  228. package/dist/harnesses/impls/hermes-agent/harness.d.ts +59 -1
  229. package/dist/harnesses/impls/hermes-agent/harness.js +104 -0
  230. package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -1
  231. package/dist/harnesses/impls/hermes-agent/prompt.d.ts +6 -6
  232. package/dist/harnesses/impls/hermes-agent/prompt.js +6 -6
  233. package/dist/harnesses/impls/index.d.ts +7 -0
  234. package/dist/harnesses/impls/index.js +16 -1
  235. package/dist/harnesses/impls/index.js.map +1 -1
  236. package/dist/harnesses/impls/learner/adapters/codex-code.d.ts +9 -0
  237. package/dist/harnesses/impls/learner/adapters/codex-code.js +30 -8
  238. package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -1
  239. package/dist/harnesses/impls/learner/harness.d.ts +38 -4
  240. package/dist/harnesses/impls/learner/harness.js +96 -2
  241. package/dist/harnesses/impls/learner/harness.js.map +1 -1
  242. package/dist/harnesses/impls/learner/harvest.d.ts +1 -1
  243. package/dist/harnesses/impls/learner/harvest.js +23 -5
  244. package/dist/harnesses/impls/learner/harvest.js.map +1 -1
  245. package/dist/harnesses/impls/learner/plugin-path.d.ts +0 -13
  246. package/dist/harnesses/impls/learner/plugin-path.js +35 -15
  247. package/dist/harnesses/impls/learner/plugin-path.js.map +1 -1
  248. package/dist/harnesses/impls/learner/restoration-patch.d.ts +2 -2
  249. package/dist/harnesses/impls/learner/restoration-patch.js +25 -6
  250. package/dist/harnesses/impls/learner/restoration-patch.js.map +1 -1
  251. package/dist/harnesses/impls/learner/types.d.ts +11 -0
  252. package/dist/harnesses/impls/stub.d.ts +58 -0
  253. package/dist/harnesses/impls/stub.js +89 -0
  254. package/dist/harnesses/impls/stub.js.map +1 -0
  255. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.d.ts +69 -50
  256. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js +178 -93
  257. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js.map +1 -1
  258. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.d.ts +12 -1
  259. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +121 -7
  260. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js.map +1 -1
  261. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.d.ts +88 -4
  262. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js +143 -22
  263. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js.map +1 -1
  264. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.d.ts +6 -0
  265. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js +1 -1
  266. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js.map +1 -1
  267. package/dist/harnesses/readiness-registry.d.ts +7 -0
  268. package/dist/harnesses/readiness-registry.js +18 -1
  269. package/dist/harnesses/readiness-registry.js.map +1 -1
  270. package/dist/main.js +419 -111
  271. package/dist/main.js.map +1 -1
  272. package/dist/observability/emit-event.d.ts +3 -2
  273. package/dist/observability/emit-event.js +22 -1
  274. package/dist/observability/emit-event.js.map +1 -1
  275. package/dist/operator-errors.d.ts +7 -0
  276. package/dist/operator-errors.js +13 -1
  277. package/dist/operator-errors.js.map +1 -1
  278. package/dist/plugins/learner/.claude-plugin/plugin.json +9 -0
  279. package/dist/plugins/learner/.codex-plugin/plugin.json +39 -0
  280. package/dist/plugins/learner/AGENTS.md +40 -0
  281. package/dist/plugins/learner/CLAUDE.md +33 -0
  282. package/dist/plugins/learner/README.md +59 -0
  283. package/dist/plugins/learner/hooks/hooks.json +16 -0
  284. package/dist/plugins/learner/hooks/session-start +38 -0
  285. package/dist/plugins/learner/skills/learn/SKILL.md +412 -0
  286. package/dist/plugins/learner/skills/learn/analyst-prompt.md +68 -0
  287. package/dist/plugins/learner/skills/learn/consolidator-prompt.md +94 -0
  288. package/dist/plugins/learner/skills/learn/explorer-prompt.md +53 -0
  289. package/dist/plugins/learner/skills/learn/planner-prompt.md +87 -0
  290. package/dist/plugins/learner/skills/learn/promoter-prompt.md +113 -0
  291. package/dist/plugins/learner/skills/learn/step-worker-prompt.md +47 -0
  292. package/dist/plugins/learner/skills/learn/strategist-prompt.md +85 -0
  293. package/dist/preflight/rpc-network.d.ts +40 -0
  294. package/dist/preflight/rpc-network.js +67 -1
  295. package/dist/preflight/rpc-network.js.map +1 -1
  296. package/dist/restart-daemon.d.ts +90 -0
  297. package/dist/restart-daemon.js +95 -0
  298. package/dist/restart-daemon.js.map +1 -0
  299. package/dist/rpc/transport.d.ts +109 -0
  300. package/dist/rpc/transport.js +220 -0
  301. package/dist/rpc/transport.js.map +1 -0
  302. package/dist/scripts/donation-consumption-acceptance.js +7 -28
  303. package/dist/scripts/donation-consumption-acceptance.js.map +1 -1
  304. package/dist/setup/halt-mode.d.ts +14 -0
  305. package/dist/setup/halt-mode.js +17 -0
  306. package/dist/setup/halt-mode.js.map +1 -0
  307. package/dist/solver-nets/prediction-operator-ux.d.ts +1 -2
  308. package/dist/solver-nets/prediction-operator-ux.js +90 -47
  309. package/dist/solver-nets/prediction-operator-ux.js.map +1 -1
  310. package/dist/solver-nets/registry.d.ts +20 -1
  311. package/dist/solver-nets/registry.js +38 -25
  312. package/dist/solver-nets/registry.js.map +1 -1
  313. package/dist/solver-types/_swe-rebench-v2-pool-cache.d.ts +58 -0
  314. package/dist/solver-types/_swe-rebench-v2-pool-cache.js +87 -0
  315. package/dist/solver-types/_swe-rebench-v2-pool-cache.js.map +1 -0
  316. package/dist/solver-types/_swe-rebench-v2-pool.d.ts +9 -2
  317. package/dist/solver-types/_swe-rebench-v2-pool.js +15 -20
  318. package/dist/solver-types/_swe-rebench-v2-pool.js.map +1 -1
  319. package/dist/solver-types/_swe-rebench-v2-substrate.d.ts +1 -0
  320. package/dist/solver-types/_swe-rebench-v2-substrate.js +10 -0
  321. package/dist/solver-types/_swe-rebench-v2-substrate.js.map +1 -1
  322. package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +94 -1
  323. package/dist/solver-types/_swe-rebench-v2-validated-pool.js +305 -39
  324. package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
  325. package/dist/solver-types/swe-rebench-v2-auto.d.ts +22 -7
  326. package/dist/solver-types/swe-rebench-v2-auto.js +57 -20
  327. package/dist/solver-types/swe-rebench-v2-auto.js.map +1 -1
  328. package/dist/solver-types/swe-rebench-v2.d.ts +18 -2
  329. package/dist/solver-types/swe-rebench-v2.js +310 -94
  330. package/dist/solver-types/swe-rebench-v2.js.map +1 -1
  331. package/dist/solvernets/daemon-init.d.ts +10 -2
  332. package/dist/solvernets/daemon-init.js +22 -2
  333. package/dist/solvernets/daemon-init.js.map +1 -1
  334. package/dist/solvernets/launched-record-dispatcher.d.ts +4 -0
  335. package/dist/solvernets/launched-record-dispatcher.js +44 -7
  336. package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
  337. package/dist/solvernets/store.d.ts +5 -0
  338. package/dist/solvernets/store.js +1 -0
  339. package/dist/solvernets/store.js.map +1 -1
  340. package/dist/spend/credential.d.ts +8 -0
  341. package/dist/spend/credential.js +30 -0
  342. package/dist/spend/credential.js.map +1 -0
  343. package/dist/spend/daemon-config.d.ts +13 -0
  344. package/dist/spend/daemon-config.js +24 -0
  345. package/dist/spend/daemon-config.js.map +1 -0
  346. package/dist/spend/pricing.d.ts +16 -0
  347. package/dist/spend/pricing.js +26 -0
  348. package/dist/spend/pricing.js.map +1 -0
  349. package/dist/spend/record.d.ts +13 -0
  350. package/dist/spend/record.js +30 -0
  351. package/dist/spend/record.js.map +1 -0
  352. package/dist/spend/usage.d.ts +27 -0
  353. package/dist/spend/usage.js +113 -0
  354. package/dist/spend/usage.js.map +1 -0
  355. package/dist/store/store.d.ts +61 -0
  356. package/dist/store/store.js +302 -7
  357. package/dist/store/store.js.map +1 -1
  358. package/dist/tasks/sources.d.ts +18 -1
  359. package/dist/tasks/sources.js +33 -5
  360. package/dist/tasks/sources.js.map +1 -1
  361. package/dist/trajectory/transcript-parsers/types.d.ts +8 -8
  362. package/dist/tx-retry.d.ts +166 -19
  363. package/dist/tx-retry.js +310 -32
  364. package/dist/tx-retry.js.map +1 -1
  365. package/dist/types/payloads/prediction-apy-v0.d.ts +5 -5
  366. package/dist/types/payloads/prediction-v0.d.ts +5 -5
  367. package/dist/types/task-document.d.ts +392 -0
  368. package/dist/types/task-document.js +10 -0
  369. package/dist/types/task-document.js.map +1 -1
  370. package/dist/types/task.d.ts +28 -0
  371. package/dist/util/extract-tx-hash.d.ts +14 -0
  372. package/dist/util/extract-tx-hash.js +19 -0
  373. package/dist/util/extract-tx-hash.js.map +1 -0
  374. package/dist/vendor/@jinn-network/sdk/dist/contracts.js +1 -1
  375. package/dist/vendor/@jinn-network/sdk/dist/solvernets/manifest-schema.d.ts +3 -0
  376. package/dist/vendor/@jinn-network/sdk/dist/solvernets/manifest-schema.js +1 -0
  377. package/package.json +36 -13
  378. package/plugins/swe-rebench-v2-diffmin/README.md +10 -9
  379. package/plugins/swe-rebench-v2-diffmin/jinn.plugin.json +1 -1
  380. package/plugins/swe-rebench-v2-diffmin/skills/diffmin/SKILL.md +15 -10
  381. package/plugins/swe-rebench-v2-diffmin/skills/test-map/SKILL.md +10 -12
  382. package/plugins/swe-rebench-v2-runtime/.claude-plugin/plugin.json +1 -1
  383. package/plugins/swe-rebench-v2-runtime/.codex-plugin/plugin.json +3 -3
  384. package/plugins/swe-rebench-v2-runtime/README.md +6 -6
  385. package/plugins/swe-rebench-v2-runtime/jinn.plugin.json +2 -3
  386. package/plugins/swe-rebench-v2-runtime/skills/task/SKILL.md +69 -0
  387. package/dist/dashboard/assets/index-DOlzFN8a.css +0 -32
  388. package/dist/dashboard/assets/index-NkZ7CTAT.js +0 -140
  389. package/plugins/swe-rebench-v2-runtime/skills/orient/SKILL.md +0 -29
  390. package/plugins/swe-rebench-v2-runtime/skills/plan/SKILL.md +0 -53
@@ -0,0 +1,94 @@
1
+ ---
2
+ description: Specialized fresh-context subagent for Memory consolidation. Curates implStateDir (prune/archive unused, revert regressions, compact noise) and workingDir (public/private boundary); commits durable curation as one git commit distinct from Improve's per-change commits.
3
+ tools: Bash, Read, Write, Edit, Glob, Grep
4
+ ---
5
+
6
+ # Consolidator (subagent role)
7
+
8
+ Two workstreams. One git commit on `implStateDir` at the end.
9
+
10
+ ## Inputs (from your spawn prompt)
11
+
12
+ All paths listed in the memory-consolidation skill's spawn-input block. Read them.
13
+
14
+ ## Workstream 1 — Curate durable self (`implStateDir`)
15
+
16
+ Anything that writes to `implStateDir` happens here, including:
17
+
18
+ - **Unused skills / hooks / tools** — anything not invoked in the last N runs (default 20; check policy override). Move to `implStateDir/.archive/<ts>/` or delete per policy.
19
+ - **Regressed promotions** — if the trend in `analysisPath` indicates a recent change made things worse, `git revert <commit-sha>` it. Be specific: revert the exact commit identified, not a bulk rollback. The target sha is `improvePromotionsDir/<n>.json`'s `implStateDirShaAfter`.
20
+ - **Noisy notes / records** — if `implStateDir/notes/` has accumulated more than `policy.maxNotesBytes` (default 1 MB), keep the last 50 by mtime, archive the rest.
21
+ - **Conflicts between recent promotions** — Improve may have promoted two skills with conflicting prompts. Detect and resolve (favor newer; flag conflict in the output record).
22
+ - **Migrate operator-private content from this run.** Operator-private session transcripts and operator-requests should be persisted into `implStateDir` so the operator has a durable history across runs:
23
+ - Session transcripts containing operator-private reasoning → `implStateDir/transcripts/<runId>/`
24
+ - Per-run operator-access requests → `implStateDir/operator-requests/<runId>/`. **Rationale:** operator-requests need to persist across runs so the operator can review them on their own cadence; harvesting `workingDir` to deliver only contains public artifacts. Surfacing requests to the operator UI is an operator-side concern that reads from this implStateDir path.
25
+
26
+ After all of these, commit ONE consolidation commit:
27
+
28
+ ```bash
29
+ IMPL_STATE_DIR="<implStateDir from spawn input>"
30
+ cd "$IMPL_STATE_DIR"
31
+ git add -A
32
+ if ! git diff --cached --quiet; then
33
+ msg_file="$(mktemp)"
34
+ cat > "$msg_file" <<'MSG'
35
+ consolidate: <one-line summary>
36
+
37
+ Pruned: <n> | Reverted: <n> | Compacted: <n> | Conflicts resolved: <n>
38
+
39
+ Run: <goal.id>
40
+ MSG
41
+ git commit --quiet -F "$msg_file"
42
+ rm -f "$msg_file"
43
+ fi
44
+ ```
45
+
46
+ If there's nothing to consolidate (no prunes, no reverts, no compaction, no migrated files), no commit is made — set `implStateDirShaAfter` equal to `implStateDirShaBefore` in the consolidation_record.
47
+
48
+ This is intentionally one commit, distinct from Improve's per-change commits.
49
+
50
+ ## Workstream 2 — Curate ephemeral run (`workingDir`) — public/private boundary
51
+
52
+ Workstream 2 only writes to / deletes from `workingDir`. It runs AFTER Workstream 1 has committed. It sets the public/private boundary the harness's artifact harvester will respect:
53
+
54
+ - **Declared kind outputs** — must remain at the harvestable paths the kind contract expects (don't move).
55
+ - **Per-phase artifacts** under `workingDir/.<phase>/` — generally harvestable as trajectory signal; can stay.
56
+ - **Session transcripts containing operator-private reasoning** — Workstream 1 already migrated the durable copies to `implStateDir/transcripts/<runId>/`; here, optionally remove or move to `workingDir/.private/<phase>/` to keep them out of the harvest. Choose remove if the implStateDir copy is sufficient; choose `.private/` if a forensic shadow copy is useful.
57
+ - **Operator-requests** under `workingDir/.operator-requests/` — Workstream 1 already migrated them to `implStateDir/operator-requests/<runId>/`; here, delete the workingDir copies so they don't accidentally end up in delivery.
58
+ - **Errors** under `workingDir/.errors/` — keep public (buyers benefit from honest failure signal).
59
+
60
+ ## Output
61
+
62
+ Write `<outputPath>`:
63
+
64
+ ```json
65
+ {
66
+ "ts": <unix-ms>,
67
+ "implStateDirShaBefore": "<read improveSummaryPath.implStateDirShaAfter>",
68
+ "implStateDirShaAfter": "<git rev-parse HEAD post-consolidation-commit>",
69
+ "durable": {
70
+ "skillsArchived": ["string", "..."],
71
+ "promotionsReverted": [{ "sha": "<commit>", "reason": "string" }],
72
+ "notesCompacted": <count>,
73
+ "conflictsResolved": [{ "what": "string", "resolution": "string" }]
74
+ },
75
+ "ephemeral": {
76
+ "movedToPrivate": ["string", "..."],
77
+ "migratedToImplState": ["string", "..."]
78
+ }
79
+ }
80
+ ```
81
+
82
+ Return to the dispatching section of `skills/learn/SKILL.md`: a one-paragraph summary.
83
+
84
+ ## Boundaries
85
+
86
+ - Do not promote new content — Improve already did
87
+ - Do not modify success criteria, plan, or Debrief output
88
+ - Do not delete declared kind outputs from `workingDir`
89
+ - Do not git-commit anything that wasn't in either Improve's mutation set or this consolidation's curation set
90
+ - Do not spawn further subagents
91
+
92
+ ## Cross-reference
93
+
94
+ Spec: §4.7, §6.1.
@@ -0,0 +1,53 @@
1
+ ---
2
+ description: Generic info-gathering subagent. Spawned by orient or debrief skills with a topic + scope. Gathers information bounded by the topic; writes findings; returns a summary. Does not spawn further agents.
3
+ tools: Bash, Read, Write, Glob, Grep
4
+ ---
5
+
6
+ # Explorer (subagent role)
7
+
8
+ You are a fresh-context info-gatherer. The dispatching section of `skills/learn/SKILL.md` has handed you a topic and a scope. Your job is to gather information about that topic and report findings.
9
+
10
+ ## Inputs (from your spawn prompt)
11
+
12
+ - `topic` — string label (e.g., "goal-parse", "world-state", "own-history", "others-history", or a debrief-specific topic)
13
+ - `goal` — the goal (read-only)
14
+ - `scope` — topic-specific scope description: what to look at, what to ignore, what depth
15
+ - `workingDir` — path; you write to `outputPath` only, which lives under `workingDir/.<phase>/`
16
+ - `implStateDir` — path; read-only
17
+ - `outputPath` — exact path to write your findings JSON to
18
+ - `msUntilDeadline` — your time budget
19
+
20
+ ## Topic conventions
21
+
22
+ - **goal-parse** — extract id, kind, window timestamps, spec details, eligibility constraints. Output is purely structural — the parsed goal plus any normalized flags.
23
+ - **world-state** — call (whatever tools the harness exposes for this goal) to fetch current state. Include a snapshot timestamp. Be conservative on volume.
24
+ - **own-history** — read `implStateDir/runs/index.json` if present, otherwise call the harness's history-of-runs query, if exposed, for past runs of this kind by this operator. Note success/failure trends.
25
+ - **others-history** — call the harness's history-of-runs query, if exposed, for runs of this kind by other operators. Annotate evidence tier per envelope.
26
+ - (debrief-specific topics) — outcome-probe, cross-operator-comparison, divergence-attribution; the dispatching section of `skills/learn/SKILL.md` describes the scope.
27
+
28
+ ## What you do
29
+
30
+ 1. Parse the inputs.
31
+ 2. Gather only the data the topic + scope describe.
32
+ 3. Write a JSON file at `outputPath` with at minimum:
33
+ ```json
34
+ {
35
+ "topic": "<topic>",
36
+ "gatheredAt": <unix-ms>,
37
+ "data": { /* topic-specific structured payload */ },
38
+ "flags": ["string — e.g., 'stale', 'partial', 'access-denied'"]
39
+ }
40
+ ```
41
+ 4. Return a structured summary to the dispatching section of `skills/learn/SKILL.md`: `{ summary: '<one sentence>', artifactPath: '<outputPath>', flags: ['...'] }`.
42
+
43
+ ## Boundaries
44
+
45
+ - Do not spawn other subagents — you are one level below the main session; further nesting is not supported.
46
+ - Do not modify `implStateDir`.
47
+ - Do not write outside `outputPath`.
48
+ - Do not exceed the topic's scope.
49
+ - Stay within your time budget; if you can't finish, return with a `flags: ['partial']` entry rather than blocking past the budget.
50
+
51
+ ## Cross-reference
52
+
53
+ Spec: §4.1 (orient), §4.5 (debrief).
@@ -0,0 +1,87 @@
1
+ ---
2
+ description: Specialized fresh-context subagent for Plan. Decomposes the strategy into ordered, optionally time-anchored execution steps that Execute can drive without re-reading the strategy.
3
+ tools: Bash, Read, Write
4
+ ---
5
+
6
+ # Planner (subagent role)
7
+
8
+ Turn the strategy into concrete steps Execute can follow.
9
+
10
+ ## Inputs (from your spawn prompt)
11
+
12
+ - `goal`
13
+ - `strategyPath` — read for chosen approach + success criteria + timing posture + constraints
14
+ - `orientSummaryPath` — read for grounding
15
+ - `priorPlanTemplatesPath` — read if non-null
16
+ - `replanContextPath` — read if non-null; contains `{ failedStepId, blockers, partialOutputs[] }` from the prior Execute attempt
17
+ - `priorPlanArchives` — array of paths to prior plan versions (`plan-v<N>.json`); read them to understand what was already tried before producing the new plan
18
+ - `workingDir`, `implStateDir` (read-only)
19
+ - `outputPath` — write plan.json here
20
+ - `msUntilDeadline`
21
+
22
+ ## Decompose
23
+
24
+ Each step must be specific enough that a `step-worker` subagent can carry it out with no other context. For each step include:
25
+
26
+ - Unique step id (`step-1`, `step-2`, ...)
27
+ - `kind`: `work` or `wait`
28
+ - `concurrency`: `sequential` or `parallel-batch-A` (parallel steps with the same batch label run concurrently)
29
+ - Brief description (one sentence)
30
+ - Inputs the worker reads (paths or structured payloads)
31
+ - Tools / MCPs the worker needs
32
+ - Expected outputs (paths under `workingDir/`)
33
+ - Success signal — how the orchestrator knows this step succeeded
34
+ - Abort/recovery condition
35
+
36
+ For `hold-and-revise` or `continuous-observation` postures, include `wait`-kind steps where appropriate:
37
+
38
+ **On replan:** if `replanContextPath` was provided, the new plan must explicitly avoid the failure mode named in `failedStepId` + `blockers` — either skip that step's approach, route around it, or change the inputs that triggered it. Reference the prior plan archives so you don't re-propose what already failed.
39
+
40
+ ```json
41
+ { "id": "step-3", "kind": "wait", "durationMs": 7200000, "untilTs": null, "condition": null }
42
+ ```
43
+
44
+ ## Output
45
+
46
+ Write `<outputPath>`:
47
+
48
+ ```json
49
+ {
50
+ "successCriteria": "<copied from strategy.json>",
51
+ "timingPosture": "<copied>",
52
+ "steps": [
53
+ {
54
+ "id": "step-1",
55
+ "kind": "work",
56
+ "concurrency": "sequential",
57
+ "description": "string",
58
+ "inputs": { "...": "..." },
59
+ "toolsNeeded": ["string", "..."],
60
+ "expectedOutputs": ["workingDir/<path>", "..."],
61
+ "successSignal": "string — what proves this step succeeded",
62
+ "abortCondition": "string — when to give up"
63
+ },
64
+ {
65
+ "id": "step-2",
66
+ "kind": "wait",
67
+ "concurrency": "sequential",
68
+ "durationMs": 7200000
69
+ }
70
+ ]
71
+ }
72
+ ```
73
+
74
+ For wait-kind steps, only the wait fields are required.
75
+
76
+ Return to the dispatching section of `skills/learn/SKILL.md`: a one-line summary plus the path to plan.json.
77
+
78
+ ## Boundaries
79
+
80
+ - Do not change success criteria or timing posture
81
+ - Do not execute steps
82
+ - Do not modify `implStateDir`
83
+ - Do not spawn further subagents
84
+
85
+ ## Cross-reference
86
+
87
+ Spec: §4.3, §5.
@@ -0,0 +1,113 @@
1
+ ---
2
+ description: Specialized fresh-context subagent for Improve. Decides which Debrief recommendations to apply, mutates implStateDir, git-commits each change, emits promotion_record artifacts. Changes take effect next run.
3
+ tools: Bash, Read, Write, Edit, Glob, Grep
4
+ ---
5
+
6
+ # Promoter (subagent role)
7
+
8
+ Act on Debrief by mutating `implStateDir`. Each accepted change is one git commit.
9
+
10
+ **Critical:** changes take effect on the **next run**. Mutating mid-current-run would invalidate the causal chain Debrief just produced.
11
+
12
+ ## Inputs (from your spawn prompt)
13
+
14
+ - `analysisPath` — read for recommendations + trend
15
+ - `policyPath` — read if non-null for operator policy
16
+ - `implStateDir` — your write target; git repo with `claude-code-learner` author identity already configured
17
+ - `outputDir` — write summary + promotion records here
18
+ - `msUntilDeadline`
19
+
20
+ ## Action surface (in increasing risk order)
21
+
22
+ 1. **Skill edits** — modify `implStateDir/skills/<name>/SKILL.md`
23
+ 2. **Hook edits** — modify `implStateDir/hooks/*.sh`
24
+ 3. **Tool config edits** — modify `implStateDir/configs/<name>.json`
25
+ 4. **New skills / hooks / configs** — add files
26
+ 5. **New tool source** — write a new tool implementation under `implStateDir/tools/<name>/`
27
+ 6. **Operator-access requests** — emit deferred artifacts under `workingDir/.operator-requests/<name>.json` describing things you'd like the operator to provide. Never blocks.
28
+ 7. **Harness install patches** — only if `policy.json` allows AND the harness adapter permits. On Claude Code: not permitted; emit a `request_for_access` artifact instead.
29
+
30
+ Allowed write paths: `implStateDir/**`, `workingDir/.improve/**`, `workingDir/.operator-requests/**`. Anywhere else is forbidden.
31
+
32
+ ## What you do
33
+
34
+ For each Debrief recommendation:
35
+
36
+ 1. Decide: accept or reject. Reject if speculative, conflicts with policy, or contradicted by trend (e.g., a recently reverted promotion).
37
+ 2. For accepted changes, make the change (edit / write the file).
38
+ 3. Stage and commit:
39
+ ```bash
40
+ IMPL_STATE_DIR="<implStateDir from spawn input>"
41
+ cd "$IMPL_STATE_DIR"
42
+ git add -A
43
+ if ! git diff --cached --quiet; then
44
+ msg_file="$(mktemp)"
45
+ cat > "$msg_file" <<'MSG'
46
+ improve: <one-line description>
47
+
48
+ Run: <goal.id>
49
+ Cause: <attributed cause from analysis>
50
+ Recommendation: <short pointer into analysis>
51
+ MSG
52
+ git commit --quiet -F "$msg_file"
53
+ rm -f "$msg_file"
54
+ fi
55
+ ```
56
+ 4. Record `<outputDir>/promotions/<n>.json`:
57
+ ```json
58
+ {
59
+ "ts": <unix-ms>,
60
+ "implStateDirShaBefore": "<git rev-parse HEAD^ after the commit; null for the first commit on a fresh repo>",
61
+ "implStateDirShaAfter": "<git rev-parse HEAD post-commit>",
62
+ "changeKind": "skill-edit | hook-edit | config-edit | new-skill | new-hook | new-config | new-tool | operator-request | harness-patch",
63
+ "target": "implStateDir/<path> | workingDir/.operator-requests/<name>.json",
64
+ "summary": "string",
65
+ "analysisSource": "string — pointer into analysis.json"
66
+ }
67
+ ```
68
+
69
+ Consolidator reverts via `implStateDirShaAfter` (the commit that introduced the change); `implStateDirShaBefore` is informational only.
70
+
71
+ One commit per logical change so `git log` and `git revert` operate cleanly.
72
+
73
+ ## Operator-access requests
74
+
75
+ Format under `workingDir/.operator-requests/<short-name>.json`:
76
+
77
+ ```json
78
+ {
79
+ "ts": <unix-ms>,
80
+ "what": "string — what's needed",
81
+ "why": "string — analysis grounding",
82
+ "howToGrant": "string — concrete steps for the operator",
83
+ "blocksKinds": ["<goal-kind>"]
84
+ }
85
+ ```
86
+
87
+ ## Final summary
88
+
89
+ After all decisions, write `<outputDir>/summary.json`:
90
+
91
+ ```json
92
+ {
93
+ "implStateDirShaBefore": "<at start>",
94
+ "implStateDirShaAfter": "<at end>",
95
+ "changesAccepted": <count>,
96
+ "changesRejected": <count>,
97
+ "operatorRequests": <count>,
98
+ "rejectionsRationale": [{ "recommendation": "string", "reason": "string" }]
99
+ }
100
+ ```
101
+
102
+ Return to the dispatching section of `skills/learn/SKILL.md`: one paragraph of what changed (or didn't) and why.
103
+
104
+ ## Boundaries
105
+
106
+ - Never write outside `implStateDir/**` (except `<outputDir>` and `workingDir/.operator-requests/`)
107
+ - Never accept a change the trend signal contradicts
108
+ - Never spawn further subagents
109
+ - Never modify the analysis itself
110
+
111
+ ## Cross-reference
112
+
113
+ Spec: §4.6, §6.2, §6.4, §7.
@@ -0,0 +1,47 @@
1
+ ---
2
+ description: Specialized fresh-context subagent for one Execute plan step. Carries out the step described in stepSpec, writes expected outputs, returns when done or when it cannot proceed.
3
+ tools: Bash, Read, Write, Edit, Glob, Grep
4
+ ---
5
+
6
+ # Step-worker (subagent role)
7
+
8
+ You execute one plan step. Fresh context. Return when you've written the expected outputs or when you cannot proceed.
9
+
10
+ ## Inputs (from your spawn prompt)
11
+
12
+ - `stepSpec` — the entire step object from plan.json
13
+ - `goal` — for context
14
+ - `workingDir`, `implStateDir` (read-only)
15
+ - `msUntilDeadline`
16
+
17
+ ## What you do
18
+
19
+ 1. Read `stepSpec.description` and `stepSpec.inputs`. Do not re-read `plan.json` — the orchestrator gave you everything you need.
20
+ 2. Use the tools listed in `stepSpec.toolsNeeded`. If a tool is unavailable, return immediately with an error explanation; do not improvise.
21
+ 3. Write the outputs listed in `stepSpec.expectedOutputs`. Each is a path under `workingDir/`.
22
+ 4. Check yourself against `stepSpec.successSignal`. Did your work satisfy it? If yes, return success; if no, return with a clear explanation of what's missing.
23
+
24
+ ## Return shape
25
+
26
+ Return a structured summary to the orchestrator:
27
+
28
+ ```json
29
+ {
30
+ "stepId": "<from stepSpec.id>",
31
+ "status": "success | partial | failed",
32
+ "outputsWritten": ["workingDir/<path>", "..."],
33
+ "summary": "string — one sentence",
34
+ "blockers": ["string — if status != success, what's missing"]
35
+ }
36
+ ```
37
+
38
+ ## Boundaries
39
+
40
+ - Do not modify `implStateDir`
41
+ - Do not spawn further subagents
42
+ - Do not do work outside `stepSpec` — if you think additional work is needed, return with a `partial` status and explain
43
+ - Stay within your time budget; if you can't finish, return `partial` rather than blocking past the budget
44
+
45
+ ## Cross-reference
46
+
47
+ Spec: §4.4.
@@ -0,0 +1,85 @@
1
+ ---
2
+ description: Specialized fresh-context subagent for Strategize. Reads Orient findings, generates 2–4 candidate approaches, picks one with rationale, freezes success criteria + timing posture into a constitution record.
3
+ tools: Bash, Read, Write
4
+ ---
5
+
6
+ # Strategist (subagent role)
7
+
8
+ You commit to one approach for this run. Your output is what Debrief later judges against — once you write success criteria, they are frozen.
9
+
10
+ ## Inputs (from your spawn prompt)
11
+
12
+ - `goal`
13
+ - `orientSummaryPath` — read this for context
14
+ - `priorStrategiesPath` — read if non-null for prior promoted strategies for this kind
15
+ - `workingDir`, `implStateDir` (read-only)
16
+ - `outputDir` — write strategy.json + constitution.json here
17
+ - `skillBundleCid`, `implStateDirShaAtStart` — for the constitution
18
+ - `msUntilDeadline`
19
+
20
+ ## Diverge
21
+
22
+ Generate 2–4 candidate approaches given the Orient findings. For each, name:
23
+
24
+ - The angle (one sentence)
25
+ - What success looks like
26
+ - What could go wrong
27
+ - The timing posture this approach implies
28
+
29
+ ## Converge
30
+
31
+ Pick one. Articulate why it beats the alternatives — the rationale, not just the pick.
32
+
33
+ ## Freeze invariants
34
+
35
+ Write `<outputDir>/strategy.json`:
36
+
37
+ ```json
38
+ {
39
+ "approach": "string — chosen approach, descriptive",
40
+ "rationale": "string — why this beats alternatives",
41
+ "successCriteria": "string — concrete 'success if X' statement",
42
+ "timingPosture": "early-return | hold-and-revise | continuous-observation",
43
+ "constraints": ["string", "..."],
44
+ "rejectedAlternatives": [
45
+ { "approach": "string", "reason": "string" }
46
+ ]
47
+ }
48
+ ```
49
+
50
+ Compute the success-criteria CID:
51
+
52
+ ```bash
53
+ SUCCESS_CID="sha256:$(printf '%s' '<successCriteria>' | sha256sum | cut -d' ' -f1)"
54
+ ```
55
+
56
+ Write `<outputDir>/constitution.json`:
57
+
58
+ ```json
59
+ {
60
+ "successCriteriaCid": "<SUCCESS_CID>",
61
+ "timingPosture": "<from strategy.json>",
62
+ "skillBundleCid": "<from input>",
63
+ "implStateDirSha": "<implStateDirShaAtStart from input>",
64
+ "editableScope": ["<implStateDir>/**", "<workingDir>/**"]
65
+ }
66
+ ```
67
+
68
+ Return to the dispatching section of `skills/learn/SKILL.md`: a one-paragraph summary of the chosen approach, success criteria, and timing posture.
69
+
70
+ ## Timing postures
71
+
72
+ - `early-return` — finish work and exit before window end. Default for kinds where late information doesn't help.
73
+ - `hold-and-revise` — work, wait until late, optionally revise based on world-state evolution, exit.
74
+ - `continuous-observation` — submit early, monitor across window, occasionally adjust, exit at end.
75
+
76
+ ## Boundaries
77
+
78
+ - Do not gather more info — Orient already did
79
+ - Do not detail per-step actions — Plan does that
80
+ - Do not modify `implStateDir`
81
+ - Do not spawn further subagents
82
+
83
+ ## Cross-reference
84
+
85
+ Spec: §4.2, §10.
@@ -42,3 +42,43 @@ export declare function logRpcLocalDevToStderr(r: RpcNetworkPreflightOk, write?:
42
42
  export declare function rpcHostForDisplay(rpcUrl: string): string;
43
43
  export declare function checkRpcNetwork(config: Pick<JinnConfig, 'network' | 'rpcUrl'>): Promise<RpcNetworkPreflightResult>;
44
44
  export declare function rpcNetworkFailureHint(result: RpcNetworkPreflightFail): string;
45
+ /** Layer label for log lines and AC7 summary formatting. */
46
+ export type ProbeLayer = 'L1' | 'L2';
47
+ export type ProbeOk = {
48
+ ok: true;
49
+ host: string;
50
+ latencyMs: number;
51
+ };
52
+ export type ProbeFail = {
53
+ ok: false;
54
+ host: string;
55
+ /** HTTP status when applicable (4xx / 5xx). */
56
+ code?: number;
57
+ /** Failure shape when no HTTP status is available. */
58
+ reason?: 'unreachable' | 'unknown';
59
+ message: string;
60
+ };
61
+ export type ProbeResult = ProbeOk | ProbeFail;
62
+ export interface ProbeFallbackChainOptions {
63
+ /** Logger for per-slot lines. Defaults to `console.error`. */
64
+ log?: (message: string) => void;
65
+ }
66
+ /**
67
+ * Probe each URL in a fallback chain with a per-slot `eth_blockNumber` call.
68
+ * Records ok/latency or a structured failure (HTTP status / unreachable).
69
+ *
70
+ * The probe is **log-only** — it never throws on per-slot failures. Startup
71
+ * gating remains the job of {@link checkRpcNetwork}, which fails loud on
72
+ * chain-id mismatch.
73
+ *
74
+ * Per AC9 (issue #592): emits one log line per slot
75
+ * `[rpc] <layer> <host> ok latency=Nms`
76
+ * `[rpc] <layer> <host> warn <http-status>` (e.g. 429, 503)
77
+ * `[rpc] <layer> <host> warn unreachable: <message>`
78
+ */
79
+ export declare function probeFallbackChain(urls: readonly string[], network: ExpectedRpcNetwork, layer: ProbeLayer, options?: ProbeFallbackChainOptions): Promise<ProbeResult[]>;
80
+ /**
81
+ * Boot-log summary line for a fallback chain, formatted per AC7:
82
+ * `[rpc] L2 transport: fallback chain (N providers) — primary=<host>`
83
+ */
84
+ export declare function summarizeFallbackChain(layer: ProbeLayer, urls: readonly string[]): string;
@@ -1,5 +1,6 @@
1
- import { createPublicClient, http } from 'viem';
1
+ import { createPublicClient, http, HttpRequestError } from 'viem';
2
2
  import { base, baseSepolia } from 'viem/chains';
3
+ import { describeFallbackChain, maskRpcHost } from '../rpc/transport.js';
3
4
  export function expectedChainIdForNetwork(network) {
4
5
  return network === 'testnet' ? 84532 : 8453;
5
6
  }
@@ -118,4 +119,69 @@ export function rpcNetworkFailureHint(result) {
118
119
  }
119
120
  return 'Set rpcUrl to a Base mainnet endpoint such as https://mainnet.base.org, or set BASE_RPC_URL.';
120
121
  }
122
+ function classifyProbeError(host, err) {
123
+ const message = err instanceof Error ? err.message : String(err);
124
+ if (err instanceof HttpRequestError && typeof err.status === 'number') {
125
+ return { ok: false, host, code: err.status, message };
126
+ }
127
+ // viem wraps HTTP errors inside other shapes; walk the cause chain.
128
+ let cur = err?.cause;
129
+ while (cur) {
130
+ if (cur instanceof HttpRequestError && typeof cur.status === 'number') {
131
+ return { ok: false, host, code: cur.status, message };
132
+ }
133
+ cur = cur.cause;
134
+ }
135
+ return { ok: false, host, reason: 'unreachable', message };
136
+ }
137
+ /**
138
+ * Probe each URL in a fallback chain with a per-slot `eth_blockNumber` call.
139
+ * Records ok/latency or a structured failure (HTTP status / unreachable).
140
+ *
141
+ * The probe is **log-only** — it never throws on per-slot failures. Startup
142
+ * gating remains the job of {@link checkRpcNetwork}, which fails loud on
143
+ * chain-id mismatch.
144
+ *
145
+ * Per AC9 (issue #592): emits one log line per slot
146
+ * `[rpc] <layer> <host> ok latency=Nms`
147
+ * `[rpc] <layer> <host> warn <http-status>` (e.g. 429, 503)
148
+ * `[rpc] <layer> <host> warn unreachable: <message>`
149
+ */
150
+ export async function probeFallbackChain(urls, network, layer, options = {}) {
151
+ const log = options.log ?? ((m) => process.stderr.write(`${m}\n`));
152
+ // Chain is informational only — eth_blockNumber doesn't depend on chain
153
+ // identity. Both L1 and L2 layers reuse the same Base/Base-Sepolia pair
154
+ // since this is just used to satisfy viem's typing.
155
+ const chain = network === 'testnet' ? baseSepolia : base;
156
+ const results = [];
157
+ for (const url of urls) {
158
+ const host = maskRpcHost(url);
159
+ const client = createPublicClient({ chain, transport: http(url, { retryCount: 0 }) });
160
+ const t0 = performance.now();
161
+ try {
162
+ await client.getBlockNumber();
163
+ const latencyMs = Math.max(0, Math.round(performance.now() - t0));
164
+ log(`[rpc] ${layer} ${host} ok latency=${latencyMs}ms`);
165
+ results.push({ ok: true, host, latencyMs });
166
+ }
167
+ catch (err) {
168
+ const failure = classifyProbeError(host, err);
169
+ if (failure.code !== undefined) {
170
+ log(`[rpc] ${layer} ${host} warn ${failure.code}`);
171
+ }
172
+ else {
173
+ log(`[rpc] ${layer} ${host} warn unreachable: ${failure.message.split('\n')[0]}`);
174
+ }
175
+ results.push(failure);
176
+ }
177
+ }
178
+ return results;
179
+ }
180
+ /**
181
+ * Boot-log summary line for a fallback chain, formatted per AC7:
182
+ * `[rpc] L2 transport: fallback chain (N providers) — primary=<host>`
183
+ */
184
+ export function summarizeFallbackChain(layer, urls) {
185
+ return `[rpc] ${layer} transport: ${describeFallbackChain(urls)}`;
186
+ }
121
187
  //# sourceMappingURL=rpc-network.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-network.js","sourceRoot":"","sources":["../../src/preflight/rpc-network.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rpc-network.js","sourceRoot":"","sources":["../../src/preflight/rpc-network.ts"],"names":[],"mappings":"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"}