@jinn-network/client 0.1.1 → 0.1.2-canary.d6e72dfd

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 (317) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/CONTRIBUTING.md +123 -0
  3. package/README.md +210 -37
  4. package/deployments/deployment-claim-registry-baseSepolia.json +13 -0
  5. package/deployments/deployment-jinn-testnet-faucet-baseSepolia-fast.json +15 -0
  6. package/dist/adapters/claim-registry/abi.d.ts +127 -0
  7. package/dist/adapters/claim-registry/abi.js +93 -0
  8. package/dist/adapters/claim-registry/abi.js.map +1 -0
  9. package/dist/adapters/claim-registry/client.d.ts +89 -0
  10. package/dist/adapters/claim-registry/client.js +205 -0
  11. package/dist/adapters/claim-registry/client.js.map +1 -0
  12. package/dist/adapters/mech/adapter.d.ts +1 -0
  13. package/dist/adapters/mech/adapter.js +75 -41
  14. package/dist/adapters/mech/adapter.js.map +1 -1
  15. package/dist/adapters/mech/contracts.d.ts +2 -0
  16. package/dist/adapters/mech/contracts.js +57 -7
  17. package/dist/adapters/mech/contracts.js.map +1 -1
  18. package/dist/adapters/mech/ipfs.d.ts +8 -0
  19. package/dist/adapters/mech/ipfs.js +12 -0
  20. package/dist/adapters/mech/ipfs.js.map +1 -1
  21. package/dist/adapters/mech/types.d.ts +20 -46
  22. package/dist/adapters/mech/types.js +16 -35
  23. package/dist/adapters/mech/types.js.map +1 -1
  24. package/dist/api/gather-status.d.ts +1 -0
  25. package/dist/api/gather-status.js +33 -1
  26. package/dist/api/gather-status.js.map +1 -1
  27. package/dist/api/portfolio-v0-build.d.ts +81 -0
  28. package/dist/api/portfolio-v0-build.js +141 -0
  29. package/dist/api/portfolio-v0-build.js.map +1 -0
  30. package/dist/api/portfolio-v0-doctor.d.ts +37 -0
  31. package/dist/api/portfolio-v0-doctor.js +123 -0
  32. package/dist/api/portfolio-v0-doctor.js.map +1 -0
  33. package/dist/api/rewards-build.js +1 -1
  34. package/dist/api/rewards-build.js.map +1 -1
  35. package/dist/api/status-build.d.ts +7 -0
  36. package/dist/api/status-build.js +1 -0
  37. package/dist/api/status-build.js.map +1 -1
  38. package/dist/bin/jinn-mcp.d.ts +0 -12
  39. package/dist/bin/jinn-mcp.js +5 -14
  40. package/dist/bin/jinn-mcp.js.map +1 -1
  41. package/dist/build-meta.json +1 -1
  42. package/dist/cli/commands/auth.js +115 -25
  43. package/dist/cli/commands/auth.js.map +1 -1
  44. package/dist/cli/commands/bootstrap.js +1 -0
  45. package/dist/cli/commands/bootstrap.js.map +1 -1
  46. package/dist/cli/commands/doctor.js +130 -14
  47. package/dist/cli/commands/doctor.js.map +1 -1
  48. package/dist/cli/commands/fleet-scale.js +1 -0
  49. package/dist/cli/commands/fleet-scale.js.map +1 -1
  50. package/dist/cli/commands/fund-requirements.js +2 -0
  51. package/dist/cli/commands/fund-requirements.js.map +1 -1
  52. package/dist/cli/commands/intents.d.ts +17 -0
  53. package/dist/cli/commands/intents.js +489 -0
  54. package/dist/cli/commands/intents.js.map +1 -0
  55. package/dist/cli/commands/keys-backup.js +13 -11
  56. package/dist/cli/commands/keys-backup.js.map +1 -1
  57. package/dist/cli/commands/mcp.d.ts +3 -0
  58. package/dist/cli/commands/mcp.js +19 -0
  59. package/dist/cli/commands/mcp.js.map +1 -0
  60. package/dist/cli/commands/plugin-install.js +8 -4
  61. package/dist/cli/commands/plugin-install.js.map +1 -1
  62. package/dist/cli/commands/quickstart.js +60 -4
  63. package/dist/cli/commands/quickstart.js.map +1 -1
  64. package/dist/cli/commands/rewards.js +27 -1
  65. package/dist/cli/commands/rewards.js.map +1 -1
  66. package/dist/cli/commands/submit-intent.js +108 -5
  67. package/dist/cli/commands/submit-intent.js.map +1 -1
  68. package/dist/cli/commands/version.js +1 -0
  69. package/dist/cli/commands/version.js.map +1 -1
  70. package/dist/cli/deployment-digest.js +5 -0
  71. package/dist/cli/deployment-digest.js.map +1 -1
  72. package/dist/cli/execution-context.js +1 -0
  73. package/dist/cli/execution-context.js.map +1 -1
  74. package/dist/cli/index.js +4 -0
  75. package/dist/cli/index.js.map +1 -1
  76. package/dist/cli/intent-registry-access.d.ts +64 -0
  77. package/dist/cli/intent-registry-access.js +187 -0
  78. package/dist/cli/intent-registry-access.js.map +1 -0
  79. package/dist/cli/introspection-context.js +1 -0
  80. package/dist/cli/introspection-context.js.map +1 -1
  81. package/dist/cli/password.d.ts +21 -9
  82. package/dist/cli/password.js +45 -24
  83. package/dist/cli/password.js.map +1 -1
  84. package/dist/config.d.ts +110 -8
  85. package/dist/config.js +41 -12
  86. package/dist/config.js.map +1 -1
  87. package/dist/daemon/creator.d.ts +7 -1
  88. package/dist/daemon/creator.js +38 -3
  89. package/dist/daemon/creator.js.map +1 -1
  90. package/dist/daemon/daemon.d.ts +43 -0
  91. package/dist/daemon/daemon.js +87 -2
  92. package/dist/daemon/daemon.js.map +1 -1
  93. package/dist/earning/bootstrap.d.ts +2 -1
  94. package/dist/earning/bootstrap.js +72 -4
  95. package/dist/earning/bootstrap.js.map +1 -1
  96. package/dist/earning/contracts.d.ts +10 -0
  97. package/dist/earning/contracts.js +24 -0
  98. package/dist/earning/contracts.js.map +1 -1
  99. package/dist/earning/jinn-rewards.d.ts +9 -0
  100. package/dist/earning/jinn-rewards.js +7 -0
  101. package/dist/earning/jinn-rewards.js.map +1 -1
  102. package/dist/intents/prediction-apy-v0-auto.d.ts +11 -0
  103. package/dist/intents/prediction-apy-v0-auto.js +46 -0
  104. package/dist/intents/prediction-apy-v0-auto.js.map +1 -0
  105. package/dist/intents/prediction-apy-v0-template.d.ts +8 -0
  106. package/dist/intents/prediction-apy-v0-template.js +22 -0
  107. package/dist/intents/prediction-apy-v0-template.js.map +1 -0
  108. package/dist/intents/prediction-v0-auto.d.ts +53 -0
  109. package/dist/intents/prediction-v0-auto.js +84 -0
  110. package/dist/intents/prediction-v0-auto.js.map +1 -0
  111. package/dist/intents/prediction-v0-template.d.ts +65 -0
  112. package/dist/intents/prediction-v0-template.js +125 -0
  113. package/dist/intents/prediction-v0-template.js.map +1 -0
  114. package/dist/main.js +149 -1
  115. package/dist/main.js.map +1 -1
  116. package/dist/mcp/operator-server.d.ts +1 -1
  117. package/dist/mcp/operator-server.js +1 -1
  118. package/dist/preflight/claude-auth.d.ts +12 -1
  119. package/dist/preflight/claude-auth.js +21 -3
  120. package/dist/preflight/claude-auth.js.map +1 -1
  121. package/dist/restorer/engine/canonical-json.d.ts +18 -0
  122. package/dist/restorer/engine/canonical-json.js +59 -0
  123. package/dist/restorer/engine/canonical-json.js.map +1 -0
  124. package/dist/restorer/engine/claim.d.ts +69 -0
  125. package/dist/restorer/engine/claim.js +104 -0
  126. package/dist/restorer/engine/claim.js.map +1 -0
  127. package/dist/restorer/engine/delivery.d.ts +52 -0
  128. package/dist/restorer/engine/delivery.js +63 -0
  129. package/dist/restorer/engine/delivery.js.map +1 -0
  130. package/dist/restorer/engine/engine.d.ts +203 -0
  131. package/dist/restorer/engine/engine.js +753 -0
  132. package/dist/restorer/engine/engine.js.map +1 -0
  133. package/dist/restorer/engine/manifest-assembly.d.ts +67 -0
  134. package/dist/restorer/engine/manifest-assembly.js +79 -0
  135. package/dist/restorer/engine/manifest-assembly.js.map +1 -0
  136. package/dist/restorer/engine/packaging.d.ts +87 -0
  137. package/dist/restorer/engine/packaging.js +350 -0
  138. package/dist/restorer/engine/packaging.js.map +1 -0
  139. package/dist/restorer/engine/persistence.d.ts +170 -0
  140. package/dist/restorer/engine/persistence.js +381 -0
  141. package/dist/restorer/engine/persistence.js.map +1 -0
  142. package/dist/restorer/engine/recovery.d.ts +22 -0
  143. package/dist/restorer/engine/recovery.js +24 -0
  144. package/dist/restorer/engine/recovery.js.map +1 -0
  145. package/dist/restorer/engine/registry.d.ts +62 -0
  146. package/dist/restorer/engine/registry.js +73 -0
  147. package/dist/restorer/engine/registry.js.map +1 -0
  148. package/dist/restorer/engine/signing.d.ts +30 -0
  149. package/dist/restorer/engine/signing.js +39 -0
  150. package/dist/restorer/engine/signing.js.map +1 -0
  151. package/dist/restorer/engine/state.d.ts +42 -0
  152. package/dist/restorer/engine/state.js +87 -0
  153. package/dist/restorer/engine/state.js.map +1 -0
  154. package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.d.ts +64 -0
  155. package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.js +96 -0
  156. package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.js.map +1 -0
  157. package/dist/restorer/impls/claude-mcp-hyperliquid/index.d.ts +101 -0
  158. package/dist/restorer/impls/claude-mcp-hyperliquid/index.js +710 -0
  159. package/dist/restorer/impls/claude-mcp-hyperliquid/index.js.map +1 -0
  160. package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.d.ts +137 -0
  161. package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.js +865 -0
  162. package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.js.map +1 -0
  163. package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.d.ts +74 -0
  164. package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.js +74 -0
  165. package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.js.map +1 -0
  166. package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.d.ts +97 -0
  167. package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.js +226 -0
  168. package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.js.map +1 -0
  169. package/dist/restorer/impls/claude-mcp-prediction/index.d.ts +43 -0
  170. package/dist/restorer/impls/claude-mcp-prediction/index.js +230 -0
  171. package/dist/restorer/impls/claude-mcp-prediction/index.js.map +1 -0
  172. package/dist/restorer/impls/claude-mcp-prediction/mcp-tools.d.ts +38 -0
  173. package/dist/restorer/impls/claude-mcp-prediction/mcp-tools.js +135 -0
  174. package/dist/restorer/impls/claude-mcp-prediction/mcp-tools.js.map +1 -0
  175. package/dist/restorer/impls/claude-mcp-prediction/prompt.d.ts +8 -0
  176. package/dist/restorer/impls/claude-mcp-prediction/prompt.js +54 -0
  177. package/dist/restorer/impls/claude-mcp-prediction/prompt.js.map +1 -0
  178. package/dist/restorer/impls/claude-mcp-prediction/session-orchestrator.d.ts +36 -0
  179. package/dist/restorer/impls/claude-mcp-prediction/session-orchestrator.js +137 -0
  180. package/dist/restorer/impls/claude-mcp-prediction/session-orchestrator.js.map +1 -0
  181. package/dist/restorer/impls/claude-mcp-prediction/types.d.ts +82 -0
  182. package/dist/restorer/impls/claude-mcp-prediction/types.js +6 -0
  183. package/dist/restorer/impls/claude-mcp-prediction/types.js.map +1 -0
  184. package/dist/restorer/impls/legacy-claude/index.d.ts +45 -0
  185. package/dist/restorer/impls/legacy-claude/index.js +71 -0
  186. package/dist/restorer/impls/legacy-claude/index.js.map +1 -0
  187. package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.d.ts +68 -0
  188. package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.js +117 -0
  189. package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.js.map +1 -0
  190. package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.d.ts +49 -0
  191. package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.js +91 -0
  192. package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.js.map +1 -0
  193. package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.d.ts +78 -0
  194. package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.js +274 -0
  195. package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.js.map +1 -0
  196. package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.d.ts +23 -0
  197. package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.js +49 -0
  198. package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.js.map +1 -0
  199. package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.d.ts +25 -0
  200. package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.js +44 -0
  201. package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.js.map +1 -0
  202. package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.d.ts +17 -0
  203. package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.js +43 -0
  204. package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.js.map +1 -0
  205. package/dist/restorer/impls/portfolio-v0-evaluator/index.d.ts +43 -0
  206. package/dist/restorer/impls/portfolio-v0-evaluator/index.js +431 -0
  207. package/dist/restorer/impls/portfolio-v0-evaluator/index.js.map +1 -0
  208. package/dist/restorer/impls/portfolio-v0-evaluator/score.d.ts +21 -0
  209. package/dist/restorer/impls/portfolio-v0-evaluator/score.js +32 -0
  210. package/dist/restorer/impls/portfolio-v0-evaluator/score.js.map +1 -0
  211. package/dist/restorer/impls/portfolio-v0-evaluator/types.d.ts +32 -0
  212. package/dist/restorer/impls/portfolio-v0-evaluator/types.js +8 -0
  213. package/dist/restorer/impls/portfolio-v0-evaluator/types.js.map +1 -0
  214. package/dist/restorer/impls/prediction-apy-v0-baseline/index.d.ts +39 -0
  215. package/dist/restorer/impls/prediction-apy-v0-baseline/index.js +98 -0
  216. package/dist/restorer/impls/prediction-apy-v0-baseline/index.js.map +1 -0
  217. package/dist/restorer/impls/prediction-apy-v0-baseline/strategy.d.ts +2 -0
  218. package/dist/restorer/impls/prediction-apy-v0-baseline/strategy.js +7 -0
  219. package/dist/restorer/impls/prediction-apy-v0-baseline/strategy.js.map +1 -0
  220. package/dist/restorer/impls/prediction-apy-v0-baseline/types.d.ts +4 -0
  221. package/dist/restorer/impls/prediction-apy-v0-baseline/types.js +2 -0
  222. package/dist/restorer/impls/prediction-apy-v0-baseline/types.js.map +1 -0
  223. package/dist/restorer/impls/prediction-apy-v0-evaluator/canonical-metrics.d.ts +2 -0
  224. package/dist/restorer/impls/prediction-apy-v0-evaluator/canonical-metrics.js +7 -0
  225. package/dist/restorer/impls/prediction-apy-v0-evaluator/canonical-metrics.js.map +1 -0
  226. package/dist/restorer/impls/prediction-apy-v0-evaluator/index.d.ts +39 -0
  227. package/dist/restorer/impls/prediction-apy-v0-evaluator/index.js +186 -0
  228. package/dist/restorer/impls/prediction-apy-v0-evaluator/index.js.map +1 -0
  229. package/dist/restorer/impls/prediction-apy-v0-evaluator/score.d.ts +9 -0
  230. package/dist/restorer/impls/prediction-apy-v0-evaluator/score.js +20 -0
  231. package/dist/restorer/impls/prediction-apy-v0-evaluator/score.js.map +1 -0
  232. package/dist/restorer/impls/prediction-apy-v0-evaluator/types.d.ts +7 -0
  233. package/dist/restorer/impls/prediction-apy-v0-evaluator/types.js +2 -0
  234. package/dist/restorer/impls/prediction-apy-v0-evaluator/types.js.map +1 -0
  235. package/dist/restorer/impls/prediction-v0-baseline/index.d.ts +29 -0
  236. package/dist/restorer/impls/prediction-v0-baseline/index.js +94 -0
  237. package/dist/restorer/impls/prediction-v0-baseline/index.js.map +1 -0
  238. package/dist/restorer/impls/prediction-v0-baseline/strategy.d.ts +8 -0
  239. package/dist/restorer/impls/prediction-v0-baseline/strategy.js +41 -0
  240. package/dist/restorer/impls/prediction-v0-baseline/strategy.js.map +1 -0
  241. package/dist/restorer/impls/prediction-v0-baseline/types.d.ts +7 -0
  242. package/dist/restorer/impls/prediction-v0-baseline/types.js +2 -0
  243. package/dist/restorer/impls/prediction-v0-baseline/types.js.map +1 -0
  244. package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.d.ts +20 -0
  245. package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.js +66 -0
  246. package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.js.map +1 -0
  247. package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.d.ts +9 -0
  248. package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.js +23 -0
  249. package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.js.map +1 -0
  250. package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.d.ts +3 -0
  251. package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.js +13 -0
  252. package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.js.map +1 -0
  253. package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.d.ts +7 -0
  254. package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.js +93 -0
  255. package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.js.map +1 -0
  256. package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.d.ts +5 -0
  257. package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.js +20 -0
  258. package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.js.map +1 -0
  259. package/dist/restorer/impls/prediction-v0-evaluator/index.d.ts +33 -0
  260. package/dist/restorer/impls/prediction-v0-evaluator/index.js +208 -0
  261. package/dist/restorer/impls/prediction-v0-evaluator/index.js.map +1 -0
  262. package/dist/restorer/impls/prediction-v0-evaluator/score.d.ts +8 -0
  263. package/dist/restorer/impls/prediction-v0-evaluator/score.js +15 -0
  264. package/dist/restorer/impls/prediction-v0-evaluator/score.js.map +1 -0
  265. package/dist/restorer/impls/prediction-v0-evaluator/types.d.ts +7 -0
  266. package/dist/restorer/impls/prediction-v0-evaluator/types.js +2 -0
  267. package/dist/restorer/impls/prediction-v0-evaluator/types.js.map +1 -0
  268. package/dist/restorer/types.d.ts +177 -0
  269. package/dist/restorer/types.js +7 -0
  270. package/dist/restorer/types.js.map +1 -0
  271. package/dist/store/store.d.ts +3 -1
  272. package/dist/store/store.js +3 -0
  273. package/dist/store/store.js.map +1 -1
  274. package/dist/types/desired-state.d.ts +53 -0
  275. package/dist/types/desired-state.js +20 -0
  276. package/dist/types/desired-state.js.map +1 -1
  277. package/dist/types/index.d.ts +4 -1
  278. package/dist/types/index.js +4 -1
  279. package/dist/types/index.js.map +1 -1
  280. package/dist/types/portfolio.d.ts +1000 -0
  281. package/dist/types/portfolio.js +168 -0
  282. package/dist/types/portfolio.js.map +1 -0
  283. package/dist/types/prediction-apy.d.ts +919 -0
  284. package/dist/types/prediction-apy.js +121 -0
  285. package/dist/types/prediction-apy.js.map +1 -0
  286. package/dist/types/prediction.d.ts +925 -0
  287. package/dist/types/prediction.js +140 -0
  288. package/dist/types/prediction.js.map +1 -0
  289. package/dist/venues/aave-v3/addresses.d.ts +6 -0
  290. package/dist/venues/aave-v3/addresses.js +19 -0
  291. package/dist/venues/aave-v3/addresses.js.map +1 -0
  292. package/dist/venues/aave-v3/client.d.ts +81 -0
  293. package/dist/venues/aave-v3/client.js +97 -0
  294. package/dist/venues/aave-v3/client.js.map +1 -0
  295. package/dist/venues/chainlink/client.d.ts +99 -0
  296. package/dist/venues/chainlink/client.js +130 -0
  297. package/dist/venues/chainlink/client.js.map +1 -0
  298. package/dist/venues/chainlink/feeds.d.ts +8 -0
  299. package/dist/venues/chainlink/feeds.js +9 -0
  300. package/dist/venues/chainlink/feeds.js.map +1 -0
  301. package/dist/venues/hyperliquid/account-value.d.ts +30 -0
  302. package/dist/venues/hyperliquid/account-value.js +30 -0
  303. package/dist/venues/hyperliquid/account-value.js.map +1 -0
  304. package/dist/venues/hyperliquid/client.d.ts +63 -0
  305. package/dist/venues/hyperliquid/client.js +135 -0
  306. package/dist/venues/hyperliquid/client.js.map +1 -0
  307. package/dist/venues/hyperliquid/grid.d.ts +36 -0
  308. package/dist/venues/hyperliquid/grid.js +61 -0
  309. package/dist/venues/hyperliquid/grid.js.map +1 -0
  310. package/dist/venues/hyperliquid/types.d.ts +81 -0
  311. package/dist/venues/hyperliquid/types.js +8 -0
  312. package/dist/venues/hyperliquid/types.js.map +1 -0
  313. package/dist/withdraw/run-withdraw-plan.js +2 -0
  314. package/dist/withdraw/run-withdraw-plan.js.map +1 -1
  315. package/docker-compose.yml +44 -0
  316. package/package.json +12 -1
  317. package/skills/jinn-operator/SKILL.md +85 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packaging.js","sourceRoot":"","sources":["../../../src/restorer/engine/packaging.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Restorer engine — SQLite persistence helpers.
3
+ *
4
+ * §6.4 of spec/2026-04-17-portfolio-v0-design.md
5
+ *
6
+ * Wraps the Store's underlying Database instance via the Store class — the
7
+ * Store itself holds the DB handle; we extend it with engine-specific queries.
8
+ * To keep concerns clean, this module exports a standalone `IntentPersistence`
9
+ * class that is constructed with a `Database` instance (passed from Store).
10
+ */
11
+ import type Database from 'better-sqlite3';
12
+ import { type IntentState } from './state.js';
13
+ import type { DesiredState } from '../../types/desired-state.js';
14
+ /**
15
+ * Thrown by `transition()` and `markFailed()` when the DB row has already been
16
+ * updated by a concurrent call before the UPDATE could land.
17
+ *
18
+ * Callers should treat this as a signal to retry from the fresh DB state or
19
+ * abandon the operation (the concurrent call has already advanced the intent).
20
+ */
21
+ export declare class ConcurrentTransitionError extends Error {
22
+ readonly requestId: string;
23
+ readonly expectedState: IntentState;
24
+ readonly attemptedNewState: string;
25
+ constructor(requestId: string, expectedState: IntentState, attemptedNewState: string);
26
+ }
27
+ export declare const RESTORATION_INTENTS_SCHEMA = "\nCREATE TABLE IF NOT EXISTS restoration_intents (\n request_id TEXT PRIMARY KEY,\n intent_cid TEXT NOT NULL,\n onchain_creation_tx TEXT NOT NULL,\n onchain_creation_block INTEGER NOT NULL,\n spec_kind TEXT,\n intent_type TEXT, -- 'restoration' | 'evaluation' | NULL (legacy)\n impl_name TEXT,\n\n state TEXT NOT NULL,\n state_updated_at INTEGER NOT NULL,\n\n working_dir TEXT,\n impl_state_dir TEXT,\n\n window_start_ts INTEGER NOT NULL,\n window_end_ts INTEGER NOT NULL,\n\n pre_snapshot_captured_at INTEGER,\n pre_snapshot_payload TEXT,\n post_snapshot_captured_at INTEGER,\n post_snapshot_payload TEXT,\n fills_payload TEXT,\n gating_claim TEXT,\n informational_claim TEXT,\n\n artifact_cids TEXT,\n manifest_cid TEXT,\n delivery_tx_hash TEXT,\n\n -- Additive columns (schema migration 2026-04-17):\n -- manifest_generated_at: persisted once at first PACKAGING entry; reused on\n -- retry to keep manifest CID deterministic (idempotent PACKAGING).\n -- evidence_hash: keccak256 of the signed manifest canonical JSON; dedicated\n -- column replaces the former _evidenceHash stash in informational_claim.\n manifest_generated_at INTEGER,\n evidence_hash TEXT,\n\n -- Additive column (schema migration 2026-04-17, full DesiredState threading):\n -- desired_state_payload: full DesiredState JSON, captured at observe() time.\n -- NULL for pre-migration rows (legacy fallback in engine consumers).\n desired_state_payload TEXT,\n\n -- Additive column (added by WT-C for PACKAGING recovery fidelity):\n -- impl_outputs_json: serialised RestorationOutput persisted before the\n -- RUNNING \u2192 PACKAGING transition. Enables pack() to recover impl outputs\n -- after a crash without re-executing the impl. NULL once pack() succeeds.\n impl_outputs_json TEXT,\n\n failure_reason TEXT,\n failure_at INTEGER\n);\n\nCREATE INDEX IF NOT EXISTS idx_restoration_intents_state\n ON restoration_intents(state);\n\nCREATE INDEX IF NOT EXISTS idx_restoration_intents_window_start_ts\n ON restoration_intents(window_start_ts);\n";
28
+ /** Input when first observing an intent from an on-chain event. */
29
+ export interface PersistedIntentInput {
30
+ requestId: string;
31
+ intentCid: string;
32
+ onchainCreationTx: string;
33
+ onchainCreationBlock: number;
34
+ specKind?: string;
35
+ /** 'restoration' (default) or 'evaluation'. Captured from DesiredState.type at observe() time. */
36
+ intentType?: 'restoration' | 'evaluation';
37
+ windowStartTs: number;
38
+ windowEndTs: number;
39
+ /**
40
+ * Full DesiredState payload, captured at observe() time.
41
+ * Required: production callers always thread it (daemon.ts); making this
42
+ * required provides a type-level guarantee against silent regression to the
43
+ * stub path. Tests that need to exercise the pre-migration NULL row path
44
+ * must use a direct raw SQL INSERT.
45
+ */
46
+ desiredState: DesiredState;
47
+ }
48
+ /** Full persisted intent row (all columns). */
49
+ export interface PersistedIntent {
50
+ requestId: string;
51
+ intentCid: string;
52
+ onchainCreationTx: string;
53
+ onchainCreationBlock: number;
54
+ specKind: string | null;
55
+ intentType: 'restoration' | 'evaluation' | null;
56
+ implName: string | null;
57
+ state: IntentState;
58
+ stateUpdatedAt: number;
59
+ workingDir: string | null;
60
+ implStateDir: string | null;
61
+ windowStartTs: number;
62
+ windowEndTs: number;
63
+ preSnapshotCapturedAt: number | null;
64
+ preSnapshotPayload: unknown | null;
65
+ postSnapshotCapturedAt: number | null;
66
+ postSnapshotPayload: unknown | null;
67
+ fillsPayload: unknown[] | null;
68
+ gatingClaim: Record<string, unknown> | null;
69
+ informationalClaim: Record<string, unknown> | null;
70
+ artifactCids: Record<string, string> | null;
71
+ manifestCid: string | null;
72
+ deliveryTxHash: string | null;
73
+ /** Persisted once at first PACKAGING entry; reused on retry for manifest CID determinism. */
74
+ manifestGeneratedAt: number | null;
75
+ /** keccak256 of signed manifest canonical JSON; used by deliver() as evidenceHash. */
76
+ evidenceHash: string | null;
77
+ /** Full DesiredState payload as recorded at observe() time; null for pre-migration rows. */
78
+ desiredState: DesiredState | null;
79
+ /**
80
+ * Serialised RestorationOutput from runImpl, persisted before the
81
+ * RUNNING → PACKAGING transition. Used by pack() to recover impl outputs
82
+ * after a crash so the manifest CID remains deterministic. Null for
83
+ * pre-migration rows and intents that have already been packed.
84
+ * Added by WT-C for PACKAGING recovery fidelity.
85
+ */
86
+ implOutputsJson: string | null;
87
+ failureReason: string | null;
88
+ failureAt: number | null;
89
+ }
90
+ /**
91
+ * Fields that can be patched during a transition.
92
+ * Only lists fields that `transition()` actually writes — attempting to patch
93
+ * other fields (e.g. `specKind`, window timestamps) gives a compile-time error
94
+ * instead of silently dropping the value.
95
+ */
96
+ export type IntentPatch = Partial<{
97
+ implName: string | null;
98
+ workingDir: string | null;
99
+ implStateDir: string | null;
100
+ preSnapshotCapturedAt: number | null;
101
+ preSnapshotPayload: unknown;
102
+ postSnapshotCapturedAt: number | null;
103
+ postSnapshotPayload: unknown;
104
+ fillsPayload: unknown;
105
+ gatingClaim: unknown;
106
+ informationalClaim: unknown;
107
+ artifactCids: Record<string, string> | null;
108
+ manifestCid: string | null;
109
+ deliveryTxHash: string | null;
110
+ /** Persisted once at first PACKAGING entry; reused on retry. */
111
+ manifestGeneratedAt: number | null;
112
+ /** keccak256 of signed manifest canonical JSON (evidenceHash for claimDelivery). */
113
+ evidenceHash: string | null;
114
+ /**
115
+ * Serialised RestorationOutput JSON, persisted before RUNNING → PACKAGING.
116
+ * Enables pack() to recover impl outputs after a crash without re-executing
117
+ * the impl. Set by engine.runImpl(); cleared by engine after successful pack().
118
+ * Added by WT-C for PACKAGING recovery fidelity.
119
+ */
120
+ implOutputsJson: string | null;
121
+ }>;
122
+ /**
123
+ * Low-level CRUD helpers for `restoration_intents`.
124
+ *
125
+ * Constructed with the raw better-sqlite3 `Database` instance. The `Store`
126
+ * class exposes it via `store.db` — callers that have a `Store` can pass
127
+ * `store.db` here.
128
+ */
129
+ export declare class IntentPersistence {
130
+ private readonly db;
131
+ constructor(db: Database.Database);
132
+ /**
133
+ * Insert a DISCOVERED intent row. Idempotent: if a row with the same
134
+ * `requestId` already exists, this is a no-op (INSERT OR IGNORE).
135
+ */
136
+ insertDiscovered(input: PersistedIntentInput): void;
137
+ /**
138
+ * Transition an intent to a new state. Validates the transition and writes
139
+ * the new state + optional patch fields atomically (persist-before-invoke).
140
+ */
141
+ transition(requestId: string, toState: IntentState, patch?: IntentPatch): void;
142
+ /** Fetch a single intent by request ID. Returns null if not found. */
143
+ getByRequestId(requestId: string): PersistedIntent | null;
144
+ /**
145
+ * Fetch a single intent by request ID. Throws if not found.
146
+ * Use this in code paths where the intent is guaranteed to exist
147
+ * (e.g. immediately after a successful `transition()` call).
148
+ */
149
+ getOrThrow(requestId: string): PersistedIntent;
150
+ /** Fetch all intents in a given state. */
151
+ getByState(state: IntentState): PersistedIntent[];
152
+ /** Fetch all in-flight intents (not in any terminal state). */
153
+ getInFlight(): PersistedIntent[];
154
+ /**
155
+ * Persist `deliveryTxHash` without triggering a state transition (state
156
+ * remains DELIVERING). Called after deliverToMarketplace lands on-chain but
157
+ * before claimDelivery runs, so that a crash between the two steps can be
158
+ * recovered without re-submitting the deliver transaction.
159
+ */
160
+ setDeliveryTxHash(requestId: string, deliveryTxHash: string): void;
161
+ /**
162
+ * Persist `manifestGeneratedAt` for the first time without triggering a
163
+ * state transition. Used by pack() to lock in the generatedAt timestamp
164
+ * before assembling the manifest, ensuring idempotent CID on retry.
165
+ * No-op if already set.
166
+ */
167
+ setManifestGeneratedAt(requestId: string, generatedAt: number): void;
168
+ /** Mark an intent FAILED with a reason (valid from any non-terminal state). */
169
+ markFailed(requestId: string, reason: string): void;
170
+ }
@@ -0,0 +1,381 @@
1
+ /**
2
+ * Restorer engine — SQLite persistence helpers.
3
+ *
4
+ * §6.4 of spec/2026-04-17-portfolio-v0-design.md
5
+ *
6
+ * Wraps the Store's underlying Database instance via the Store class — the
7
+ * Store itself holds the DB handle; we extend it with engine-specific queries.
8
+ * To keep concerns clean, this module exports a standalone `IntentPersistence`
9
+ * class that is constructed with a `Database` instance (passed from Store).
10
+ */
11
+ import { assertValidTransition, TERMINAL_STATES } from './state.js';
12
+ // ── Concurrency error ─────────────────────────────────────────────────────────
13
+ /**
14
+ * Thrown by `transition()` and `markFailed()` when the DB row has already been
15
+ * updated by a concurrent call before the UPDATE could land.
16
+ *
17
+ * Callers should treat this as a signal to retry from the fresh DB state or
18
+ * abandon the operation (the concurrent call has already advanced the intent).
19
+ */
20
+ export class ConcurrentTransitionError extends Error {
21
+ requestId;
22
+ expectedState;
23
+ attemptedNewState;
24
+ constructor(requestId, expectedState, attemptedNewState) {
25
+ super(`ConcurrentTransitionError: ${requestId} expected state=${expectedState} but DB row has changed (attempted=${attemptedNewState})`);
26
+ this.name = 'ConcurrentTransitionError';
27
+ this.requestId = requestId;
28
+ this.expectedState = expectedState;
29
+ this.attemptedNewState = attemptedNewState;
30
+ }
31
+ }
32
+ // ── Schema ────────────────────────────────────────────────────────────────────
33
+ export const RESTORATION_INTENTS_SCHEMA = `
34
+ CREATE TABLE IF NOT EXISTS restoration_intents (
35
+ request_id TEXT PRIMARY KEY,
36
+ intent_cid TEXT NOT NULL,
37
+ onchain_creation_tx TEXT NOT NULL,
38
+ onchain_creation_block INTEGER NOT NULL,
39
+ spec_kind TEXT,
40
+ intent_type TEXT, -- 'restoration' | 'evaluation' | NULL (legacy)
41
+ impl_name TEXT,
42
+
43
+ state TEXT NOT NULL,
44
+ state_updated_at INTEGER NOT NULL,
45
+
46
+ working_dir TEXT,
47
+ impl_state_dir TEXT,
48
+
49
+ window_start_ts INTEGER NOT NULL,
50
+ window_end_ts INTEGER NOT NULL,
51
+
52
+ pre_snapshot_captured_at INTEGER,
53
+ pre_snapshot_payload TEXT,
54
+ post_snapshot_captured_at INTEGER,
55
+ post_snapshot_payload TEXT,
56
+ fills_payload TEXT,
57
+ gating_claim TEXT,
58
+ informational_claim TEXT,
59
+
60
+ artifact_cids TEXT,
61
+ manifest_cid TEXT,
62
+ delivery_tx_hash TEXT,
63
+
64
+ -- Additive columns (schema migration 2026-04-17):
65
+ -- manifest_generated_at: persisted once at first PACKAGING entry; reused on
66
+ -- retry to keep manifest CID deterministic (idempotent PACKAGING).
67
+ -- evidence_hash: keccak256 of the signed manifest canonical JSON; dedicated
68
+ -- column replaces the former _evidenceHash stash in informational_claim.
69
+ manifest_generated_at INTEGER,
70
+ evidence_hash TEXT,
71
+
72
+ -- Additive column (schema migration 2026-04-17, full DesiredState threading):
73
+ -- desired_state_payload: full DesiredState JSON, captured at observe() time.
74
+ -- NULL for pre-migration rows (legacy fallback in engine consumers).
75
+ desired_state_payload TEXT,
76
+
77
+ -- Additive column (added by WT-C for PACKAGING recovery fidelity):
78
+ -- impl_outputs_json: serialised RestorationOutput persisted before the
79
+ -- RUNNING → PACKAGING transition. Enables pack() to recover impl outputs
80
+ -- after a crash without re-executing the impl. NULL once pack() succeeds.
81
+ impl_outputs_json TEXT,
82
+
83
+ failure_reason TEXT,
84
+ failure_at INTEGER
85
+ );
86
+
87
+ CREATE INDEX IF NOT EXISTS idx_restoration_intents_state
88
+ ON restoration_intents(state);
89
+
90
+ CREATE INDEX IF NOT EXISTS idx_restoration_intents_window_start_ts
91
+ ON restoration_intents(window_start_ts);
92
+ `;
93
+ // ── Migrations ────────────────────────────────────────────────────────────────
94
+ /**
95
+ * Idempotent additive migrations for `restoration_intents`.
96
+ *
97
+ * better-sqlite3 throws on duplicate column from ALTER TABLE ADD COLUMN; we
98
+ * swallow that specific error so this is safe to invoke on every startup.
99
+ * For new DBs the column already exists via CREATE TABLE; the ALTER is a no-op.
100
+ */
101
+ function runAdditiveMigrations(db) {
102
+ const additions = [
103
+ { column: 'desired_state_payload', ddl: 'ALTER TABLE restoration_intents ADD COLUMN desired_state_payload TEXT' },
104
+ { column: 'manifest_generated_at', ddl: 'ALTER TABLE restoration_intents ADD COLUMN manifest_generated_at TEXT NULL' },
105
+ { column: 'evidence_hash', ddl: 'ALTER TABLE restoration_intents ADD COLUMN evidence_hash TEXT NULL' },
106
+ // Persists impl outputs so pack() can recover a deterministic manifest CID
107
+ // after a process restart (otherwise in-memory implOutputs is lost).
108
+ { column: 'impl_outputs_json', ddl: 'ALTER TABLE restoration_intents ADD COLUMN impl_outputs_json TEXT' },
109
+ { column: 'intent_type', ddl: 'ALTER TABLE restoration_intents ADD COLUMN intent_type TEXT' },
110
+ ];
111
+ // Fetch existing column names once so each ALTER is a no-op if the column
112
+ // already exists (avoids duplicate-column-name errors on newer DBs).
113
+ const existingColumns = new Set(db.pragma('table_info(restoration_intents)')
114
+ .map(r => r.name));
115
+ for (const { column, ddl } of additions) {
116
+ if (existingColumns.has(column))
117
+ continue;
118
+ try {
119
+ db.exec(ddl);
120
+ }
121
+ catch (err) {
122
+ const msg = err instanceof Error ? err.message : String(err);
123
+ if (!/duplicate column name/i.test(msg))
124
+ throw err;
125
+ }
126
+ }
127
+ }
128
+ // ── Helpers ───────────────────────────────────────────────────────────────────
129
+ function parseJson(raw) {
130
+ if (raw === null)
131
+ return null;
132
+ return JSON.parse(raw);
133
+ }
134
+ function rowToIntent(row) {
135
+ return {
136
+ requestId: row.request_id,
137
+ intentCid: row.intent_cid,
138
+ onchainCreationTx: row.onchain_creation_tx,
139
+ onchainCreationBlock: row.onchain_creation_block,
140
+ specKind: row.spec_kind,
141
+ intentType: (row.intent_type ?? null),
142
+ implName: row.impl_name,
143
+ state: row.state,
144
+ stateUpdatedAt: row.state_updated_at,
145
+ workingDir: row.working_dir,
146
+ implStateDir: row.impl_state_dir,
147
+ windowStartTs: row.window_start_ts,
148
+ windowEndTs: row.window_end_ts,
149
+ preSnapshotCapturedAt: row.pre_snapshot_captured_at,
150
+ preSnapshotPayload: parseJson(row.pre_snapshot_payload),
151
+ postSnapshotCapturedAt: row.post_snapshot_captured_at,
152
+ postSnapshotPayload: parseJson(row.post_snapshot_payload),
153
+ fillsPayload: parseJson(row.fills_payload),
154
+ gatingClaim: parseJson(row.gating_claim),
155
+ informationalClaim: parseJson(row.informational_claim),
156
+ artifactCids: parseJson(row.artifact_cids),
157
+ manifestCid: row.manifest_cid,
158
+ deliveryTxHash: row.delivery_tx_hash,
159
+ manifestGeneratedAt: row.manifest_generated_at,
160
+ evidenceHash: row.evidence_hash,
161
+ desiredState: parseJson(row.desired_state_payload),
162
+ implOutputsJson: row.impl_outputs_json,
163
+ failureReason: row.failure_reason,
164
+ failureAt: row.failure_at,
165
+ };
166
+ }
167
+ // ── IntentPersistence ─────────────────────────────────────────────────────────
168
+ /**
169
+ * Low-level CRUD helpers for `restoration_intents`.
170
+ *
171
+ * Constructed with the raw better-sqlite3 `Database` instance. The `Store`
172
+ * class exposes it via `store.db` — callers that have a `Store` can pass
173
+ * `store.db` here.
174
+ */
175
+ export class IntentPersistence {
176
+ db;
177
+ constructor(db) {
178
+ this.db = db;
179
+ runAdditiveMigrations(db);
180
+ }
181
+ /**
182
+ * Insert a DISCOVERED intent row. Idempotent: if a row with the same
183
+ * `requestId` already exists, this is a no-op (INSERT OR IGNORE).
184
+ */
185
+ insertDiscovered(input) {
186
+ this.db.prepare(`
187
+ INSERT OR IGNORE INTO restoration_intents (
188
+ request_id, intent_cid, onchain_creation_tx, onchain_creation_block,
189
+ spec_kind, intent_type, state, state_updated_at, window_start_ts, window_end_ts,
190
+ desired_state_payload
191
+ ) VALUES (
192
+ @requestId, @intentCid, @onchainCreationTx, @onchainCreationBlock,
193
+ @specKind, @intentType, 'DISCOVERED', @now, @windowStartTs, @windowEndTs,
194
+ @desiredStatePayload
195
+ )
196
+ `).run({
197
+ requestId: input.requestId,
198
+ intentCid: input.intentCid,
199
+ onchainCreationTx: input.onchainCreationTx,
200
+ onchainCreationBlock: input.onchainCreationBlock,
201
+ specKind: input.specKind ?? null,
202
+ intentType: input.intentType ?? null,
203
+ now: Date.now(),
204
+ windowStartTs: input.windowStartTs,
205
+ windowEndTs: input.windowEndTs,
206
+ desiredStatePayload: input.desiredState ? JSON.stringify(input.desiredState) : null,
207
+ });
208
+ }
209
+ /**
210
+ * Transition an intent to a new state. Validates the transition and writes
211
+ * the new state + optional patch fields atomically (persist-before-invoke).
212
+ */
213
+ transition(requestId, toState, patch = {}) {
214
+ const existing = this.getByRequestId(requestId);
215
+ if (!existing) {
216
+ throw new Error(`Intent not found: ${requestId}`);
217
+ }
218
+ assertValidTransition(existing.state, toState);
219
+ const setClauses = ['state = @state', 'state_updated_at = @stateUpdatedAt'];
220
+ const params = {
221
+ requestId,
222
+ state: toState,
223
+ stateUpdatedAt: Date.now(),
224
+ };
225
+ if (patch.implName !== undefined) {
226
+ setClauses.push('impl_name = @implName');
227
+ params['implName'] = patch.implName;
228
+ }
229
+ if (patch.workingDir !== undefined) {
230
+ setClauses.push('working_dir = @workingDir');
231
+ params['workingDir'] = patch.workingDir;
232
+ }
233
+ if (patch.implStateDir !== undefined) {
234
+ setClauses.push('impl_state_dir = @implStateDir');
235
+ params['implStateDir'] = patch.implStateDir;
236
+ }
237
+ if (patch.preSnapshotCapturedAt !== undefined) {
238
+ setClauses.push('pre_snapshot_captured_at = @preSnapshotCapturedAt');
239
+ params['preSnapshotCapturedAt'] = patch.preSnapshotCapturedAt;
240
+ }
241
+ if (patch.preSnapshotPayload !== undefined) {
242
+ setClauses.push('pre_snapshot_payload = @preSnapshotPayload');
243
+ params['preSnapshotPayload'] = patch.preSnapshotPayload !== null
244
+ ? JSON.stringify(patch.preSnapshotPayload) : null;
245
+ }
246
+ if (patch.postSnapshotCapturedAt !== undefined) {
247
+ setClauses.push('post_snapshot_captured_at = @postSnapshotCapturedAt');
248
+ params['postSnapshotCapturedAt'] = patch.postSnapshotCapturedAt;
249
+ }
250
+ if (patch.postSnapshotPayload !== undefined) {
251
+ setClauses.push('post_snapshot_payload = @postSnapshotPayload');
252
+ params['postSnapshotPayload'] = patch.postSnapshotPayload !== null
253
+ ? JSON.stringify(patch.postSnapshotPayload) : null;
254
+ }
255
+ if (patch.fillsPayload !== undefined) {
256
+ setClauses.push('fills_payload = @fillsPayload');
257
+ params['fillsPayload'] = patch.fillsPayload !== null
258
+ ? JSON.stringify(patch.fillsPayload) : null;
259
+ }
260
+ if (patch.gatingClaim !== undefined) {
261
+ setClauses.push('gating_claim = @gatingClaim');
262
+ params['gatingClaim'] = patch.gatingClaim !== null
263
+ ? JSON.stringify(patch.gatingClaim) : null;
264
+ }
265
+ if (patch.informationalClaim !== undefined) {
266
+ setClauses.push('informational_claim = @informationalClaim');
267
+ params['informationalClaim'] = patch.informationalClaim !== null
268
+ ? JSON.stringify(patch.informationalClaim) : null;
269
+ }
270
+ if (patch.artifactCids !== undefined) {
271
+ setClauses.push('artifact_cids = @artifactCids');
272
+ params['artifactCids'] = patch.artifactCids !== null
273
+ ? JSON.stringify(patch.artifactCids) : null;
274
+ }
275
+ if (patch.manifestCid !== undefined) {
276
+ setClauses.push('manifest_cid = @manifestCid');
277
+ params['manifestCid'] = patch.manifestCid;
278
+ }
279
+ if (patch.deliveryTxHash !== undefined) {
280
+ setClauses.push('delivery_tx_hash = @deliveryTxHash');
281
+ params['deliveryTxHash'] = patch.deliveryTxHash;
282
+ }
283
+ if (patch.manifestGeneratedAt !== undefined) {
284
+ setClauses.push('manifest_generated_at = @manifestGeneratedAt');
285
+ params['manifestGeneratedAt'] = patch.manifestGeneratedAt;
286
+ }
287
+ if (patch.evidenceHash !== undefined) {
288
+ setClauses.push('evidence_hash = @evidenceHash');
289
+ params['evidenceHash'] = patch.evidenceHash;
290
+ }
291
+ if (patch.implOutputsJson !== undefined) {
292
+ setClauses.push('impl_outputs_json = @implOutputsJson');
293
+ params['implOutputsJson'] = patch.implOutputsJson;
294
+ }
295
+ // Optimistic concurrency: include AND state = @expectedState in the WHERE
296
+ // clause so a concurrent call that already advanced the row results in 0
297
+ // changed rows rather than a silent double-write.
298
+ params['expectedState'] = existing.state;
299
+ const result = this.db.prepare(`
300
+ UPDATE restoration_intents SET ${setClauses.join(', ')}
301
+ WHERE request_id = @requestId AND state = @expectedState
302
+ `).run(params);
303
+ if (result.changes === 0) {
304
+ throw new ConcurrentTransitionError(requestId, existing.state, toState);
305
+ }
306
+ }
307
+ /** Fetch a single intent by request ID. Returns null if not found. */
308
+ getByRequestId(requestId) {
309
+ const row = this.db.prepare('SELECT * FROM restoration_intents WHERE request_id = ?').get(requestId);
310
+ if (!row)
311
+ return null;
312
+ return rowToIntent(row);
313
+ }
314
+ /**
315
+ * Fetch a single intent by request ID. Throws if not found.
316
+ * Use this in code paths where the intent is guaranteed to exist
317
+ * (e.g. immediately after a successful `transition()` call).
318
+ */
319
+ getOrThrow(requestId) {
320
+ const row = this.getByRequestId(requestId);
321
+ if (!row) {
322
+ throw new Error(`No persisted intent for requestId ${requestId}`);
323
+ }
324
+ return row;
325
+ }
326
+ /** Fetch all intents in a given state. */
327
+ getByState(state) {
328
+ const rows = this.db.prepare('SELECT * FROM restoration_intents WHERE state = ? ORDER BY window_start_ts ASC').all(state);
329
+ return rows.map(rowToIntent);
330
+ }
331
+ /** Fetch all in-flight intents (not in any terminal state). */
332
+ getInFlight() {
333
+ const terminalList = [...TERMINAL_STATES];
334
+ const placeholders = terminalList.map(() => '?').join(', ');
335
+ const sql = `SELECT * FROM restoration_intents WHERE state NOT IN (${placeholders}) ORDER BY window_start_ts ASC`;
336
+ const rows = this.db.prepare(sql).all(...terminalList);
337
+ return rows.map(rowToIntent);
338
+ }
339
+ /**
340
+ * Persist `deliveryTxHash` without triggering a state transition (state
341
+ * remains DELIVERING). Called after deliverToMarketplace lands on-chain but
342
+ * before claimDelivery runs, so that a crash between the two steps can be
343
+ * recovered without re-submitting the deliver transaction.
344
+ */
345
+ setDeliveryTxHash(requestId, deliveryTxHash) {
346
+ this.db.prepare('UPDATE restoration_intents SET delivery_tx_hash = ? WHERE request_id = ?').run(deliveryTxHash, requestId);
347
+ }
348
+ /**
349
+ * Persist `manifestGeneratedAt` for the first time without triggering a
350
+ * state transition. Used by pack() to lock in the generatedAt timestamp
351
+ * before assembling the manifest, ensuring idempotent CID on retry.
352
+ * No-op if already set.
353
+ */
354
+ setManifestGeneratedAt(requestId, generatedAt) {
355
+ this.db.prepare('UPDATE restoration_intents SET manifest_generated_at = ? WHERE request_id = ? AND manifest_generated_at IS NULL').run(generatedAt, requestId);
356
+ }
357
+ /** Mark an intent FAILED with a reason (valid from any non-terminal state). */
358
+ markFailed(requestId, reason) {
359
+ const existing = this.getByRequestId(requestId);
360
+ if (!existing) {
361
+ throw new Error(`Intent not found: ${requestId}`);
362
+ }
363
+ if (existing.state === 'COMPLETE' || existing.state === 'FAILED') {
364
+ // Already terminal — no-op (idempotent)
365
+ return;
366
+ }
367
+ const now = Date.now();
368
+ // Optimistic concurrency: guard on the expected source state so a
369
+ // concurrent transition that has already advanced the row doesn't get
370
+ // silently overwritten.
371
+ const result = this.db.prepare(`
372
+ UPDATE restoration_intents
373
+ SET state = 'FAILED', state_updated_at = ?, failure_reason = ?, failure_at = ?
374
+ WHERE request_id = ? AND state = ?
375
+ `).run(now, reason, now, requestId, existing.state);
376
+ if (result.changes === 0) {
377
+ throw new ConcurrentTransitionError(requestId, existing.state, 'FAILED');
378
+ }
379
+ }
380
+ }
381
+ //# sourceMappingURL=persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../src/restorer/engine/persistence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Restorer engine — startup crash recovery.
3
+ *
4
+ * §6.5 of spec/2026-04-17-portfolio-v0-design.md
5
+ *
6
+ * This module re-exports the `recoverInFlight` capability cleanly for callers
7
+ * that want a standalone function rather than calling the engine method directly.
8
+ * The recovery algorithm lives in `RestorationEngine._recoverDispatch`; this
9
+ * module is a thin adapter for dependency-injection friendly usage.
10
+ */
11
+ import type { RestorationEngine, RecoveryReport } from './engine.js';
12
+ /**
13
+ * Run startup recovery pass on the given engine.
14
+ *
15
+ * Scans all in-flight intents from the persistence layer and dispatches each
16
+ * one to the appropriate resume handler based on current state. Errors are
17
+ * collected per-intent (failed intents are marked FAILED in the DB); the
18
+ * function itself does not throw.
19
+ *
20
+ * @returns Array of per-intent recovery reports (outcome 'ok' or 'failed').
21
+ */
22
+ export declare function recoverInFlight(engine: RestorationEngine): Promise<RecoveryReport[]>;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Restorer engine — startup crash recovery.
3
+ *
4
+ * §6.5 of spec/2026-04-17-portfolio-v0-design.md
5
+ *
6
+ * This module re-exports the `recoverInFlight` capability cleanly for callers
7
+ * that want a standalone function rather than calling the engine method directly.
8
+ * The recovery algorithm lives in `RestorationEngine._recoverDispatch`; this
9
+ * module is a thin adapter for dependency-injection friendly usage.
10
+ */
11
+ /**
12
+ * Run startup recovery pass on the given engine.
13
+ *
14
+ * Scans all in-flight intents from the persistence layer and dispatches each
15
+ * one to the appropriate resume handler based on current state. Errors are
16
+ * collected per-intent (failed intents are marked FAILED in the DB); the
17
+ * function itself does not throw.
18
+ *
19
+ * @returns Array of per-intent recovery reports (outcome 'ok' or 'failed').
20
+ */
21
+ export async function recoverInFlight(engine) {
22
+ return engine.recoverInFlight();
23
+ }
24
+ //# sourceMappingURL=recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../../src/restorer/engine/recovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAyB;IAEzB,OAAO,MAAM,CAAC,eAAe,EAAE,CAAC;AAClC,CAAC"}