@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":"engine.js","sourceRoot":"","sources":["../../../src/restorer/engine/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Restorer engine — manifest assembly + signing.
3
+ *
4
+ * §5.1 Restoration manifest, §5.5 Signing.
5
+ *
6
+ * Assembles a `portfolio.v0.manifest.v1` object from engine-controlled
7
+ * provenance fields + impl-supplied output, then:
8
+ * 1. Serialises to canonical JSON (sorted keys, no whitespace) minus the
9
+ * `signature` field.
10
+ * 2. keccak256-hashes the canonical JSON bytes.
11
+ * 3. Signs the 32-byte hash with the agent EOA's private key via secp256k1
12
+ * (raw ECDSA, no EIP-191 prefix — uses viem's `sign({ hash, privateKey })`
13
+ * from `viem/accounts`).
14
+ * 4. Uploads the signed manifest to IPFS and returns the CID.
15
+ */
16
+ import type { Hex } from 'viem';
17
+ import type { Artifact } from '../../types/portfolio.js';
18
+ import type { Snapshot } from '../../types/portfolio.js';
19
+ export interface ManifestProvenance {
20
+ intentCid: string;
21
+ onchainCreationTx: string;
22
+ onchainCreationBlock: number;
23
+ requestId: string;
24
+ safeAddress: string;
25
+ agentEoa: string;
26
+ windowStartTs: number;
27
+ windowEndTs: number;
28
+ }
29
+ export interface ManifestImplOutput {
30
+ preSnapshot: Snapshot;
31
+ postSnapshot: Snapshot;
32
+ fills: unknown[];
33
+ gating: Record<string, unknown>;
34
+ informational?: Record<string, unknown>;
35
+ rationale?: Array<{
36
+ ts: number;
37
+ sessionId: string;
38
+ note: string;
39
+ relatedFillTids?: number[];
40
+ }>;
41
+ }
42
+ export interface AssembledManifest {
43
+ manifest: Record<string, unknown>;
44
+ manifestCid: string;
45
+ signatureHash: Hex;
46
+ }
47
+ export interface ManifestAssemblyDeps {
48
+ ipfsRegistryUrl: string;
49
+ agentEoaPrivateKey: Hex;
50
+ /** Safe multisig address. When provided, used for manifest.restorer.safeAddress. */
51
+ safeAddress?: `0x${string}`;
52
+ }
53
+ export interface ManifestAssemblyOptions {
54
+ /**
55
+ * Timestamp to use for `generatedAt` field. Persisting and reusing across
56
+ * retries ensures the manifest CID is deterministic (idempotent PACKAGING).
57
+ * Defaults to Date.now() if not provided (first-run case).
58
+ */
59
+ generatedAt?: number;
60
+ }
61
+ /**
62
+ * Assemble, sign, and upload the portfolio.v0.manifest.v1.
63
+ *
64
+ * Returns the full manifest object, its IPFS CID, and the keccak256 hash
65
+ * that was signed (useful as evidenceHash for claimDelivery).
66
+ */
67
+ export declare function assembleAndSignManifest(provenance: ManifestProvenance, implOutput: ManifestImplOutput, artifacts: Artifact[], deps: ManifestAssemblyDeps, opts?: ManifestAssemblyOptions): Promise<AssembledManifest>;
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Restorer engine — manifest assembly + signing.
3
+ *
4
+ * §5.1 Restoration manifest, §5.5 Signing.
5
+ *
6
+ * Assembles a `portfolio.v0.manifest.v1` object from engine-controlled
7
+ * provenance fields + impl-supplied output, then:
8
+ * 1. Serialises to canonical JSON (sorted keys, no whitespace) minus the
9
+ * `signature` field.
10
+ * 2. keccak256-hashes the canonical JSON bytes.
11
+ * 3. Signs the 32-byte hash with the agent EOA's private key via secp256k1
12
+ * (raw ECDSA, no EIP-191 prefix — uses viem's `sign({ hash, privateKey })`
13
+ * from `viem/accounts`).
14
+ * 4. Uploads the signed manifest to IPFS and returns the CID.
15
+ */
16
+ import { signCanonical } from './signing.js';
17
+ import { uploadToIpfs } from '../../adapters/mech/ipfs.js';
18
+ // ── Assembly ──────────────────────────────────────────────────────────────────
19
+ /**
20
+ * Assemble, sign, and upload the portfolio.v0.manifest.v1.
21
+ *
22
+ * Returns the full manifest object, its IPFS CID, and the keccak256 hash
23
+ * that was signed (useful as evidenceHash for claimDelivery).
24
+ */
25
+ export async function assembleAndSignManifest(provenance, implOutput, artifacts, deps, opts = {}) {
26
+ // Use caller-supplied generatedAt (persisted on first pack, reused on retry)
27
+ // to keep the manifest CID deterministic across PACKAGING retries.
28
+ const generatedAt = opts.generatedAt ?? Date.now();
29
+ // Build unsigned manifest (signature field absent)
30
+ const unsigned = {
31
+ schemaVersion: 'portfolio.v0.manifest.v1',
32
+ generatedAt,
33
+ intent: {
34
+ cid: provenance.intentCid,
35
+ onchainCreationTx: provenance.onchainCreationTx,
36
+ onchainCreationBlock: provenance.onchainCreationBlock,
37
+ requestId: provenance.requestId,
38
+ },
39
+ restorer: {
40
+ safeAddress: provenance.safeAddress,
41
+ agentEoa: provenance.agentEoa,
42
+ },
43
+ window: {
44
+ startTs: provenance.windowStartTs,
45
+ endTs: provenance.windowEndTs,
46
+ },
47
+ preSnapshot: implOutput.preSnapshot,
48
+ postSnapshot: implOutput.postSnapshot,
49
+ fills: implOutput.fills,
50
+ gating: implOutput.gating,
51
+ ...(implOutput.informational !== undefined
52
+ ? { informational: implOutput.informational }
53
+ : {}),
54
+ artifacts,
55
+ ...(implOutput.rationale !== undefined
56
+ ? { rationale: implOutput.rationale }
57
+ : {}),
58
+ };
59
+ // Sign the unsigned manifest using the shared canonical signing helper.
60
+ const signed = await signCanonical(unsigned, deps.agentEoaPrivateKey, provenance.agentEoa);
61
+ const hash = signed.hash;
62
+ const signedManifest = {
63
+ ...unsigned,
64
+ signature: {
65
+ algo: 'secp256k1',
66
+ signer: provenance.agentEoa,
67
+ hash: signed.hash,
68
+ sig: signed.sig,
69
+ },
70
+ };
71
+ // Upload to IPFS
72
+ const manifestCid = await uploadToIpfs(deps.ipfsRegistryUrl, signedManifest);
73
+ return {
74
+ manifest: signedManifest,
75
+ manifestCid,
76
+ signatureHash: hash,
77
+ };
78
+ }
79
+ //# sourceMappingURL=manifest-assembly.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-assembly.js","sourceRoot":"","sources":["../../../src/restorer/engine/manifest-assembly.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAgD3D,iFAAiF;AAEjF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAA8B,EAC9B,UAA8B,EAC9B,SAAqB,EACrB,IAA0B,EAC1B,OAAgC,EAAE;IAElC,6EAA6E;IAC7E,mEAAmE;IACnE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IAEnD,mDAAmD;IACnD,MAAM,QAAQ,GAA4B;QACxC,aAAa,EAAE,0BAA0B;QACzC,WAAW;QACX,MAAM,EAAE;YACN,GAAG,EAAE,UAAU,CAAC,SAAS;YACzB,iBAAiB,EAAE,UAAU,CAAC,iBAAiB;YAC/C,oBAAoB,EAAE,UAAU,CAAC,oBAAoB;YACrD,SAAS,EAAE,UAAU,CAAC,SAAS;SAChC;QACD,QAAQ,EAAE;YACR,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,QAAQ,EAAE,UAAU,CAAC,QAAQ;SAC9B;QACD,MAAM,EAAE;YACN,OAAO,EAAE,UAAU,CAAC,aAAa;YACjC,KAAK,EAAE,UAAU,CAAC,WAAW;SAC9B;QACD,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,YAAY,EAAE,UAAU,CAAC,YAAY;QACrC,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,GAAG,CAAC,UAAU,CAAC,aAAa,KAAK,SAAS;YACxC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,aAAa,EAAE;YAC7C,CAAC,CAAC,EAAE,CAAC;QACP,SAAS;QACT,GAAG,CAAC,UAAU,CAAC,SAAS,KAAK,SAAS;YACpC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE;YACrC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IAEF,wEAAwE;IACxE,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,QAAQ,EACR,IAAI,CAAC,kBAAkB,EACvB,UAAU,CAAC,QAAyB,CACrC,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAW,CAAC;IAEhC,MAAM,cAAc,GAA4B;QAC9C,GAAG,QAAQ;QACX,SAAS,EAAE;YACT,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,UAAU,CAAC,QAAQ;YAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG,EAAE,MAAM,CAAC,GAAG;SAChB;KACF,CAAC;IAEF,iBAAiB;IACjB,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;IAE7E,OAAO;QACL,QAAQ,EAAE,cAAc;QACxB,WAAW;QACX,aAAa,EAAE,IAAI;KACpB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Restorer engine — workingDir provisioning + artifact walking + IPFS upload.
3
+ *
4
+ * §6.6 workdir layout, §5.3 artifact role conventions.
5
+ *
6
+ * Responsibilities:
7
+ * 1. Provision workingDir at PRE_SNAPSHOT time: write intent.json, env/ files,
8
+ * sessions/ dir.
9
+ * 2. After impl returns: walk workingDir, read OUTPUTS.json (if present),
10
+ * compute sha256, upload each artifact to IPFS, return structured list.
11
+ */
12
+ import type { DesiredState } from '../../types/desired-state.js';
13
+ import type { Artifact, OutputArtifact } from '../../types/portfolio.js';
14
+ export interface UploadedArtifact extends Artifact {
15
+ localPath: string;
16
+ }
17
+ export interface PackagingDeps {
18
+ ipfsRegistryUrl: string;
19
+ /**
20
+ * Called after artifact registration is ready (after manifest CID is known).
21
+ * The optional `parentManifestCid` is the IPFS CID of the enclosing manifest,
22
+ * enabling back-pointer links per spec §6.1. Fire-and-forget is fine.
23
+ */
24
+ registerArtifact?: (artifact: {
25
+ id: string;
26
+ title: string;
27
+ tags: string[];
28
+ outcome: string;
29
+ parentManifestCid?: string;
30
+ }) => void;
31
+ }
32
+ /**
33
+ * Provision the working directory at PRE_SNAPSHOT time.
34
+ *
35
+ * Creates:
36
+ * <workingDir>/intent.json — canonical DesiredState JSON
37
+ * <workingDir>/env/<VAR> — one file per env var (mode 0600)
38
+ * <workingDir>/sessions/ — directory for session transcripts
39
+ */
40
+ export declare function provisionWorkingDir(workingDir: string, intent: DesiredState, envVars?: Record<string, string>): void;
41
+ /**
42
+ * Provision the impl state directory on first invocation.
43
+ * Never deleted by the engine — persistent across attempts.
44
+ */
45
+ export declare function provisionImplStateDir(implStateDir: string): void;
46
+ /**
47
+ * Walk the working directory and collect declared + default artifacts.
48
+ *
49
+ * Priority: OUTPUTS.json overrides defaults. After collecting declared entries,
50
+ * we also always add a tarball of the full workingDir as `system_snapshot`.
51
+ */
52
+ export declare function walkArtifacts(workingDir: string, implArtifacts?: OutputArtifact[]): Promise<Array<{
53
+ localPath: string;
54
+ role: string;
55
+ metadata?: Record<string, unknown>;
56
+ tags?: string[];
57
+ access?: {
58
+ kind: 'open' | 'x402-gated';
59
+ endpoint?: string;
60
+ priceUsdc?: string;
61
+ };
62
+ }>>;
63
+ /**
64
+ * Upload all collected artifacts to IPFS — NO registration.
65
+ *
66
+ * Returns an array of `UploadedArtifact` (= Artifact + localPath).
67
+ * Registration is deferred until the manifest CID is known; call
68
+ * `registerArtifacts(uploaded, parentManifestCid, deps)` afterwards.
69
+ */
70
+ export declare function uploadArtifacts(artifacts: Array<{
71
+ localPath: string;
72
+ role: string;
73
+ metadata?: Record<string, unknown>;
74
+ tags?: string[];
75
+ access?: {
76
+ kind: 'open' | 'x402-gated';
77
+ endpoint?: string;
78
+ priceUsdc?: string;
79
+ };
80
+ }>, deps: PackagingDeps): Promise<UploadedArtifact[]>;
81
+ /**
82
+ * Register already-uploaded artifacts with a back-pointer to the parent manifest CID.
83
+ *
84
+ * Call this AFTER the manifest has been assembled, signed, and uploaded so that
85
+ * `parentManifestCid` is known (spec §6.1 requirement). Fire-and-forget.
86
+ */
87
+ export declare function registerArtifacts(uploaded: UploadedArtifact[], parentManifestCid: string, deps: PackagingDeps): void;
@@ -0,0 +1,350 @@
1
+ /**
2
+ * Restorer engine — workingDir provisioning + artifact walking + IPFS upload.
3
+ *
4
+ * §6.6 workdir layout, §5.3 artifact role conventions.
5
+ *
6
+ * Responsibilities:
7
+ * 1. Provision workingDir at PRE_SNAPSHOT time: write intent.json, env/ files,
8
+ * sessions/ dir.
9
+ * 2. After impl returns: walk workingDir, read OUTPUTS.json (if present),
10
+ * compute sha256, upload each artifact to IPFS, return structured list.
11
+ */
12
+ import { createHash } from 'node:crypto';
13
+ import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync, } from 'node:fs';
14
+ import { join, relative, resolve, extname, isAbsolute } from 'node:path';
15
+ import { pipeline } from 'node:stream/promises';
16
+ import { createGzip } from 'node:zlib';
17
+ import { createWriteStream } from 'node:fs';
18
+ import { z } from 'zod';
19
+ import { uploadToIpfs } from '../../adapters/mech/ipfs.js';
20
+ // ── OUTPUTS.json schema ───────────────────────────────────────────────────────
21
+ const OutputEntrySchema = z.object({
22
+ path: z.string(),
23
+ role: z.string(),
24
+ metadata: z.record(z.unknown()).optional(),
25
+ tags: z.array(z.string()).optional(),
26
+ access: z
27
+ .object({
28
+ kind: z.enum(['open', 'x402-gated']),
29
+ endpoint: z.string().optional(),
30
+ priceUsdc: z.string().optional(),
31
+ })
32
+ .optional(),
33
+ });
34
+ const OutputsJsonSchema = z.object({
35
+ outputs: z.array(OutputEntrySchema),
36
+ });
37
+ // ── WorkingDir provisioning ───────────────────────────────────────────────────
38
+ /**
39
+ * Provision the working directory at PRE_SNAPSHOT time.
40
+ *
41
+ * Creates:
42
+ * <workingDir>/intent.json — canonical DesiredState JSON
43
+ * <workingDir>/env/<VAR> — one file per env var (mode 0600)
44
+ * <workingDir>/sessions/ — directory for session transcripts
45
+ */
46
+ export function provisionWorkingDir(workingDir, intent, envVars = {}) {
47
+ mkdirSync(workingDir, { recursive: true, mode: 0o755 });
48
+ // intent.json
49
+ writeFileSync(join(workingDir, 'intent.json'), JSON.stringify(intent, null, 2), 'utf-8');
50
+ // env/ directory — one file per var, mode 0600
51
+ const envDir = join(workingDir, 'env');
52
+ mkdirSync(envDir, { recursive: true, mode: 0o700 });
53
+ for (const [name, value] of Object.entries(envVars)) {
54
+ writeFileSync(join(envDir, name), value, { encoding: 'utf-8', mode: 0o600 });
55
+ }
56
+ // sessions/ directory
57
+ mkdirSync(join(workingDir, 'sessions'), { recursive: true, mode: 0o755 });
58
+ }
59
+ /**
60
+ * Provision the impl state directory on first invocation.
61
+ * Never deleted by the engine — persistent across attempts.
62
+ */
63
+ export function provisionImplStateDir(implStateDir) {
64
+ mkdirSync(implStateDir, { recursive: true, mode: 0o755 });
65
+ }
66
+ // ── Tarball helper ────────────────────────────────────────────────────────────
67
+ /**
68
+ * Create a gzipped tar of the workingDir at the given output path.
69
+ * Returns the output path.
70
+ *
71
+ * Uses native Node.js streams — no external binary required.
72
+ *
73
+ * DETERMINISM: uses epoch-0 mtime for all entries so the resulting tarball
74
+ * is byte-for-byte identical across retries (same file contents → same CID).
75
+ * The `excludeName` parameter is used to skip the tarball itself so it does
76
+ * not include itself.
77
+ */
78
+ async function createWorkdirTarball(workingDir, outputPath, excludeName) {
79
+ // Build a simple tar manually using Buffer operations to avoid spawning
80
+ // external processes. For correctness and portability we use a pure-JS
81
+ // approach: read all files, pack them into a POSIX tar, gzip the result.
82
+ const entries = [];
83
+ function walk(dir) {
84
+ for (const name of readdirSync(dir)) {
85
+ const full = join(dir, name);
86
+ const st = statSync(full);
87
+ if (st.isDirectory()) {
88
+ const relDir = relative(workingDir, full);
89
+ // Security: exclude env/ and everything inside it — env/ contains
90
+ // secrets written at mode 0o600 by provisionWorkingDir and must never
91
+ // appear in a publicly-uploaded IPFS tarball. We check both "env" (the
92
+ // directory itself at workingDir root) and any path that starts with
93
+ // "env/" (nested contents, though the guard on the directory entry
94
+ // below already handles recursion).
95
+ if (relDir === 'env' || relDir.startsWith('env/') || relDir.startsWith('env\\'))
96
+ continue;
97
+ walk(full);
98
+ }
99
+ else if (st.isFile()) {
100
+ const relPath = relative(workingDir, full);
101
+ // Exclude the tarball itself to prevent self-inclusion
102
+ if (excludeName && relPath === excludeName)
103
+ continue;
104
+ // Exclude anything inside env/ (belt-and-suspenders guard)
105
+ if (relPath.startsWith('env/') || relPath.startsWith('env\\'))
106
+ continue;
107
+ const content = readFileSync(full);
108
+ entries.push({ relPath, content });
109
+ }
110
+ }
111
+ }
112
+ walk(workingDir);
113
+ // Build ustar-format tar in memory
114
+ const blocks = [];
115
+ function padStr(s, len) {
116
+ const buf = Buffer.alloc(len, 0);
117
+ buf.write(s.slice(0, len), 'utf-8');
118
+ return buf;
119
+ }
120
+ function octalField(n, len) {
121
+ const s = n.toString(8).padStart(len - 1, '0') + ' ';
122
+ return Buffer.from(s, 'ascii');
123
+ }
124
+ for (const { relPath, content } of entries) {
125
+ const header = Buffer.alloc(512, 0);
126
+ // name (100)
127
+ padStr(relPath, 100).copy(header, 0);
128
+ // mode (8)
129
+ octalField(0o644, 8).copy(header, 100);
130
+ // uid (8)
131
+ octalField(0, 8).copy(header, 108);
132
+ // gid (8)
133
+ octalField(0, 8).copy(header, 116);
134
+ // size (12)
135
+ octalField(content.length, 12).copy(header, 124);
136
+ // mtime (12) — fixed epoch 0 for deterministic/reproducible tarballs
137
+ octalField(0, 12).copy(header, 136);
138
+ // typeflag
139
+ header[156] = 0x30; // '0' = regular file
140
+ // magic
141
+ Buffer.from('ustar \0', 'ascii').copy(header, 257);
142
+ // Compute checksum
143
+ header.fill(0x20, 148, 156); // space out checksum field
144
+ let checksum = 0;
145
+ for (let i = 0; i < 512; i++)
146
+ checksum += header[i];
147
+ octalField(checksum, 8).copy(header, 148);
148
+ blocks.push(header);
149
+ // Content + padding to 512-byte boundary
150
+ blocks.push(content);
151
+ const remainder = content.length % 512;
152
+ if (remainder > 0) {
153
+ blocks.push(Buffer.alloc(512 - remainder, 0));
154
+ }
155
+ }
156
+ // Two 512-byte zero blocks as end-of-archive marker
157
+ blocks.push(Buffer.alloc(1024, 0));
158
+ const tarData = Buffer.concat(blocks);
159
+ // Gzip compress
160
+ await pipeline((async function* () { yield tarData; })(), createGzip(), createWriteStream(outputPath));
161
+ return outputPath;
162
+ }
163
+ // ── Path containment helper ───────────────────────────────────────────────────
164
+ /**
165
+ * Returns true iff `candidate` resolves to a path strictly inside `workingDir`.
166
+ * Rejects dotdot traversal, symlink escapes (after resolve), and paths that
167
+ * are equal to workingDir itself (directories, not files).
168
+ */
169
+ function isInsideWorkingDir(workingDir, candidate) {
170
+ const wd = resolve(workingDir);
171
+ const c = resolve(candidate);
172
+ const rel = relative(wd, c);
173
+ return rel !== '' && !rel.startsWith('..') && !isAbsolute(rel);
174
+ }
175
+ // ── sha256 helper ─────────────────────────────────────────────────────────────
176
+ function sha256Hex(buf) {
177
+ return createHash('sha256').update(buf).digest('hex');
178
+ }
179
+ // ── Artifact walking ──────────────────────────────────────────────────────────
180
+ /**
181
+ * Walk the working directory and collect declared + default artifacts.
182
+ *
183
+ * Priority: OUTPUTS.json overrides defaults. After collecting declared entries,
184
+ * we also always add a tarball of the full workingDir as `system_snapshot`.
185
+ */
186
+ export async function walkArtifacts(workingDir, implArtifacts = []) {
187
+ const result = [];
188
+ // 1. Check for OUTPUTS.json
189
+ const outputsJsonPath = join(workingDir, 'OUTPUTS.json');
190
+ let usedOutputsJson = false;
191
+ if (existsSync(outputsJsonPath)) {
192
+ try {
193
+ const raw = JSON.parse(readFileSync(outputsJsonPath, 'utf-8'));
194
+ const parsed = OutputsJsonSchema.parse(raw);
195
+ for (const entry of parsed.outputs) {
196
+ const fullPath = join(workingDir, entry.path);
197
+ if (!isInsideWorkingDir(workingDir, fullPath)) {
198
+ console.warn(`[restorer-engine] OUTPUTS.json path traversal detected (skipped): ${entry.path}`);
199
+ continue;
200
+ }
201
+ if (existsSync(fullPath) && statSync(fullPath).isFile()) {
202
+ result.push({
203
+ localPath: fullPath,
204
+ role: entry.role,
205
+ metadata: entry.metadata,
206
+ tags: entry.tags,
207
+ access: entry.access,
208
+ });
209
+ }
210
+ }
211
+ usedOutputsJson = true;
212
+ }
213
+ catch (err) {
214
+ console.warn(`[restorer-engine] OUTPUTS.json parse failed (ignored): ${err instanceof Error ? err.message : err}`);
215
+ }
216
+ }
217
+ if (!usedOutputsJson) {
218
+ // 2. Apply impl-provided OutputArtifact entries
219
+ for (const art of implArtifacts) {
220
+ // Reject absolute paths outright — impl must use workingDir-relative paths
221
+ if (isAbsolute(art.path)) {
222
+ console.warn(`[restorer-engine] impl artifact absolute path rejected (skipped): ${art.path}`);
223
+ continue;
224
+ }
225
+ const fullPath = join(workingDir, art.path);
226
+ if (!isInsideWorkingDir(workingDir, fullPath)) {
227
+ console.warn(`[restorer-engine] impl artifact path traversal detected (skipped): ${art.path}`);
228
+ continue;
229
+ }
230
+ if (existsSync(fullPath) && statSync(fullPath).isFile()) {
231
+ result.push({
232
+ localPath: fullPath,
233
+ role: art.role,
234
+ metadata: art.metadata,
235
+ tags: art.tags,
236
+ access: art.access,
237
+ });
238
+ }
239
+ }
240
+ // 3. Apply default conventions for files not already declared
241
+ const declared = new Set(result.map((r) => r.localPath));
242
+ // sessions/ → session_transcript
243
+ const sessionsDir = join(workingDir, 'sessions');
244
+ if (existsSync(sessionsDir)) {
245
+ for (const name of readdirSync(sessionsDir)) {
246
+ const full = join(sessionsDir, name);
247
+ if (statSync(full).isFile() && !declared.has(full)) {
248
+ result.push({ localPath: full, role: 'session_transcript', access: { kind: 'open' } });
249
+ }
250
+ }
251
+ }
252
+ // Markdown files at root → design_document
253
+ const rootFiles = readdirSync(workingDir);
254
+ for (const name of rootFiles) {
255
+ const full = join(workingDir, name);
256
+ if (statSync(full).isFile() &&
257
+ extname(name).toLowerCase() === '.md' &&
258
+ !declared.has(full)) {
259
+ result.push({ localPath: full, role: 'design_document', access: { kind: 'open' } });
260
+ }
261
+ }
262
+ // logs/ → runtime_log
263
+ const logsDir = join(workingDir, 'logs');
264
+ if (existsSync(logsDir)) {
265
+ for (const name of readdirSync(logsDir)) {
266
+ const full = join(logsDir, name);
267
+ if (statSync(full).isFile() && !declared.has(full)) {
268
+ result.push({ localPath: full, role: 'runtime_log', access: { kind: 'open' } });
269
+ }
270
+ }
271
+ }
272
+ }
273
+ // 4. Always add system_snapshot tarball of the full workingDir.
274
+ // Deterministic filename inside workingDir so retries produce the same CID.
275
+ const SNAPSHOT_FILENAME = 'system_snapshot.tar.gz';
276
+ const tarballPath = join(workingDir, SNAPSHOT_FILENAME);
277
+ try {
278
+ await createWorkdirTarball(workingDir, tarballPath, SNAPSHOT_FILENAME);
279
+ result.push({
280
+ localPath: tarballPath,
281
+ role: 'system_snapshot',
282
+ metadata: { description: 'Full workingDir snapshot' },
283
+ access: { kind: 'open' },
284
+ });
285
+ }
286
+ catch (err) {
287
+ console.warn(`[restorer-engine] workingDir tarball creation failed (non-fatal): ${err instanceof Error ? err.message : err}`);
288
+ }
289
+ return result;
290
+ }
291
+ // ── Upload pipeline ───────────────────────────────────────────────────────────
292
+ /**
293
+ * Upload all collected artifacts to IPFS — NO registration.
294
+ *
295
+ * Returns an array of `UploadedArtifact` (= Artifact + localPath).
296
+ * Registration is deferred until the manifest CID is known; call
297
+ * `registerArtifacts(uploaded, parentManifestCid, deps)` afterwards.
298
+ */
299
+ export async function uploadArtifacts(artifacts, deps) {
300
+ const results = [];
301
+ for (const art of artifacts) {
302
+ try {
303
+ const content = readFileSync(art.localPath);
304
+ const hash = sha256Hex(content);
305
+ // Upload raw bytes as base64-encoded JSON envelope so IPFS receives JSON
306
+ // (consistent with how other uploads work via uploadToIpfs).
307
+ const envelope = {
308
+ role: art.role,
309
+ sha256: hash,
310
+ data: content.toString('base64'),
311
+ };
312
+ const cid = await uploadToIpfs(deps.ipfsRegistryUrl, envelope);
313
+ const uploaded = {
314
+ cid,
315
+ sha256: hash,
316
+ role: art.role,
317
+ metadata: art.metadata,
318
+ tags: art.tags,
319
+ access: art.access,
320
+ localPath: art.localPath,
321
+ };
322
+ results.push(uploaded);
323
+ }
324
+ catch (err) {
325
+ console.error(`[restorer-engine] artifact upload failed for ${art.localPath}: ${err instanceof Error ? err.message : err}`);
326
+ // Non-fatal: continue with remaining artifacts
327
+ }
328
+ }
329
+ return results;
330
+ }
331
+ /**
332
+ * Register already-uploaded artifacts with a back-pointer to the parent manifest CID.
333
+ *
334
+ * Call this AFTER the manifest has been assembled, signed, and uploaded so that
335
+ * `parentManifestCid` is known (spec §6.1 requirement). Fire-and-forget.
336
+ */
337
+ export function registerArtifacts(uploaded, parentManifestCid, deps) {
338
+ if (!deps.registerArtifact)
339
+ return;
340
+ for (const art of uploaded) {
341
+ deps.registerArtifact({
342
+ id: art.cid,
343
+ title: art.localPath.split('/').pop() ?? art.cid,
344
+ tags: art.tags ?? [art.role],
345
+ outcome: 'uploaded',
346
+ parentManifestCid,
347
+ });
348
+ }
349
+ }
350
+ //# sourceMappingURL=packaging.js.map