@jinn-network/client 0.1.3-canary.2d6b2676 → 0.1.3-canary.8e61ba74

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 (289) hide show
  1. package/dist/adapters/adapter.d.ts +15 -4
  2. package/dist/adapters/local/adapter.d.ts +9 -8
  3. package/dist/adapters/local/adapter.js +47 -74
  4. package/dist/adapters/local/adapter.js.map +1 -1
  5. package/dist/adapters/mech/adapter.d.ts +29 -13
  6. package/dist/adapters/mech/adapter.js +316 -311
  7. package/dist/adapters/mech/adapter.js.map +1 -1
  8. package/dist/adapters/mech/contracts.d.ts +62 -16
  9. package/dist/adapters/mech/contracts.js +226 -92
  10. package/dist/adapters/mech/contracts.js.map +1 -1
  11. package/dist/adapters/mech/safe-revert.js +0 -6
  12. package/dist/adapters/mech/safe-revert.js.map +1 -1
  13. package/dist/adapters/mech/types.d.ts +237 -84
  14. package/dist/adapters/mech/types.js +125 -50
  15. package/dist/adapters/mech/types.js.map +1 -1
  16. package/dist/agent/agent-ws.d.ts +1 -0
  17. package/dist/agent/agent-ws.js +13 -1
  18. package/dist/agent/agent-ws.js.map +1 -1
  19. package/dist/agent/operator-claude.js +4 -0
  20. package/dist/agent/operator-claude.js.map +1 -1
  21. package/dist/api/gather-status.d.ts +0 -1
  22. package/dist/api/gather-status.js +0 -1
  23. package/dist/api/gather-status.js.map +1 -1
  24. package/dist/api/setup-endpoints.d.ts +20 -0
  25. package/dist/api/setup-endpoints.js +110 -3
  26. package/dist/api/setup-endpoints.js.map +1 -1
  27. package/dist/build-info.json +4 -4
  28. package/dist/build-meta.json +1 -1
  29. package/dist/cli/commands/auth.js +6 -3
  30. package/dist/cli/commands/auth.js.map +1 -1
  31. package/dist/cli/commands/bootstrap.js +0 -1
  32. package/dist/cli/commands/bootstrap.js.map +1 -1
  33. package/dist/cli/commands/create.js +3 -3
  34. package/dist/cli/commands/doctor.js +4 -12
  35. package/dist/cli/commands/doctor.js.map +1 -1
  36. package/dist/cli/commands/fleet-scale.js +0 -1
  37. package/dist/cli/commands/fleet-scale.js.map +1 -1
  38. package/dist/cli/commands/fund-requirements.js +0 -1
  39. package/dist/cli/commands/fund-requirements.js.map +1 -1
  40. package/dist/cli/commands/migrate-agent-id.js +0 -1
  41. package/dist/cli/commands/migrate-agent-id.js.map +1 -1
  42. package/dist/cli/commands/solver-nets.js +1 -1
  43. package/dist/cli/commands/solver-plugins.js +3 -1
  44. package/dist/cli/commands/solver-plugins.js.map +1 -1
  45. package/dist/cli/commands/tasks.js +20 -11
  46. package/dist/cli/commands/tasks.js.map +1 -1
  47. package/dist/cli/commands/version.js +0 -1
  48. package/dist/cli/commands/version.js.map +1 -1
  49. package/dist/cli/deployment-digest.js +0 -5
  50. package/dist/cli/deployment-digest.js.map +1 -1
  51. package/dist/cli/execution-context.js +0 -1
  52. package/dist/cli/execution-context.js.map +1 -1
  53. package/dist/cli/introspection-context.js +0 -1
  54. package/dist/cli/introspection-context.js.map +1 -1
  55. package/dist/config.d.ts +410 -22
  56. package/dist/config.js +41 -30
  57. package/dist/config.js.map +1 -1
  58. package/dist/daemon/creator.d.ts +3 -3
  59. package/dist/daemon/creator.js +3 -3
  60. package/dist/daemon/creator.js.map +1 -1
  61. package/dist/daemon/daemon.d.ts +3 -6
  62. package/dist/daemon/daemon.js +30 -9
  63. package/dist/daemon/daemon.js.map +1 -1
  64. package/dist/daemon/jinn-claim-loop-canonical.d.ts +11 -11
  65. package/dist/daemon/jinn-claim-loop-canonical.js +17 -17
  66. package/dist/daemon/jinn-claim-loop-canonical.js.map +1 -1
  67. package/dist/daemon/jinn-claim-loop-mock.d.ts +4 -4
  68. package/dist/daemon/jinn-claim-loop-mock.js +7 -7
  69. package/dist/daemon/jinn-claim-loop-mock.js.map +1 -1
  70. package/dist/daemon/jinn-claim-loop.d.ts +4 -4
  71. package/dist/daemon/jinn-claim-loop.js +3 -3
  72. package/dist/dashboard/assets/{index-Bxlk5qpa.js → index-CaUOdCs6.js} +6 -6
  73. package/dist/dashboard/index.html +1 -1
  74. package/dist/earning/bootstrap.d.ts +0 -1
  75. package/dist/earning/bootstrap.js +0 -1
  76. package/dist/earning/bootstrap.js.map +1 -1
  77. package/dist/earning/contracts.d.ts +18 -20
  78. package/dist/earning/contracts.js +18 -29
  79. package/dist/earning/contracts.js.map +1 -1
  80. package/dist/earning/funding-plan.d.ts +0 -1
  81. package/dist/earning/funding-plan.js +0 -1
  82. package/dist/earning/funding-plan.js.map +1 -1
  83. package/dist/earning/migrate-agent-id.d.ts +0 -1
  84. package/dist/earning/migrate-agent-id.js +0 -1
  85. package/dist/earning/migrate-agent-id.js.map +1 -1
  86. package/dist/erc8004/reputation.d.ts +2 -2
  87. package/dist/erc8004/reputation.js +2 -2
  88. package/dist/events/types.d.ts +2 -2
  89. package/dist/harnesses/engine/delivery.d.ts +10 -6
  90. package/dist/harnesses/engine/delivery.js +10 -6
  91. package/dist/harnesses/engine/delivery.js.map +1 -1
  92. package/dist/harnesses/engine/engine.d.ts +16 -29
  93. package/dist/harnesses/engine/engine.js +67 -106
  94. package/dist/harnesses/engine/engine.js.map +1 -1
  95. package/dist/harnesses/engine/persistence.d.ts +5 -1
  96. package/dist/harnesses/engine/persistence.js +10 -2
  97. package/dist/harnesses/engine/persistence.js.map +1 -1
  98. package/dist/harnesses/external-impls/loader.d.ts +1 -1
  99. package/dist/harnesses/impls/claude-code-learner/types.d.ts +1 -1
  100. package/dist/harnesses/impls/claude-mcp-prediction/index.d.ts +1 -1
  101. package/dist/harnesses/impls/claude-mcp-prediction/index.js +6 -6
  102. package/dist/harnesses/impls/claude-mcp-prediction/types.d.ts +1 -1
  103. package/dist/harnesses/impls/claude-mcp-prediction/types.js +1 -1
  104. package/dist/harnesses/impls/index.js +5 -5
  105. package/dist/harnesses/impls/portfolio-v0-evaluator/index.js +1 -1
  106. package/dist/harnesses/impls/portfolio-v0-evaluator/index.js.map +1 -1
  107. package/dist/harnesses/impls/prediction-v0-baseline/index.d.ts +4 -4
  108. package/dist/harnesses/impls/prediction-v0-baseline/index.js +10 -10
  109. package/dist/harnesses/impls/prediction-v0-evaluator/canonical-metrics.d.ts +3 -3
  110. package/dist/harnesses/impls/prediction-v0-evaluator/checks/availability.d.ts +1 -1
  111. package/dist/harnesses/impls/prediction-v0-evaluator/index.d.ts +4 -4
  112. package/dist/harnesses/impls/prediction-v0-evaluator/index.js +11 -11
  113. package/dist/harnesses/impls/prediction-v1-baseline/index.d.ts +31 -0
  114. package/dist/harnesses/impls/prediction-v1-baseline/index.js +79 -0
  115. package/dist/harnesses/impls/prediction-v1-baseline/index.js.map +1 -0
  116. package/dist/harnesses/impls/prediction-v1-evaluator/index.d.ts +32 -0
  117. package/dist/harnesses/impls/prediction-v1-evaluator/index.js +198 -0
  118. package/dist/harnesses/impls/prediction-v1-evaluator/index.js.map +1 -0
  119. package/dist/harnesses/manifest/types.d.ts +1 -1
  120. package/dist/harnesses/manifest/types.js +1 -1
  121. package/dist/harnesses/types.d.ts +2 -1
  122. package/dist/harnesses/types.js.map +1 -1
  123. package/dist/main.js +2 -26
  124. package/dist/main.js.map +1 -1
  125. package/dist/mcp/operator-server.js +1 -1
  126. package/dist/mcp/operator-server.js.map +1 -1
  127. package/dist/mcp/server.js +2 -2
  128. package/dist/plugins/manifest.d.ts +1 -1
  129. package/dist/plugins/manifest.js +1 -1
  130. package/dist/plugins/manifest.js.map +1 -1
  131. package/dist/plugins/registry.js +1 -1
  132. package/dist/plugins/registry.js.map +1 -1
  133. package/dist/plugins/resolvers.js +2 -1
  134. package/dist/plugins/resolvers.js.map +1 -1
  135. package/dist/plugins/types.d.ts +4 -8
  136. package/dist/plugins/validator.js +5 -7
  137. package/dist/plugins/validator.js.map +1 -1
  138. package/dist/preflight/claude-auth.d.ts +3 -1
  139. package/dist/preflight/claude-auth.js +5 -5
  140. package/dist/preflight/claude-auth.js.map +1 -1
  141. package/dist/setup/claude-code-install.d.ts +19 -0
  142. package/dist/setup/claude-code-install.js +51 -0
  143. package/dist/setup/claude-code-install.js.map +1 -0
  144. package/dist/solver-nets/contracts.d.ts +2 -0
  145. package/dist/solver-nets/contracts.js +2 -0
  146. package/dist/solver-nets/contracts.js.map +1 -0
  147. package/dist/solver-nets/registry.d.ts +2 -0
  148. package/dist/solver-nets/registry.js +13 -5
  149. package/dist/solver-nets/registry.js.map +1 -1
  150. package/dist/solver-types/constants.d.ts +1 -1
  151. package/dist/solver-types/constants.js +1 -1
  152. package/dist/solver-types/index.d.ts +5 -5
  153. package/dist/solver-types/index.js +5 -5
  154. package/dist/solver-types/prediction-apy-v0-auto.js +12 -0
  155. package/dist/solver-types/prediction-apy-v0-auto.js.map +1 -1
  156. package/dist/solver-types/prediction-v0-auto.d.ts +4 -4
  157. package/dist/solver-types/prediction-v0-auto.js +22 -10
  158. package/dist/solver-types/prediction-v0-auto.js.map +1 -1
  159. package/dist/solver-types/prediction-v0-template.d.ts +10 -10
  160. package/dist/solver-types/prediction-v0-template.js +16 -16
  161. package/dist/solver-types/prediction-v0-template.js.map +1 -1
  162. package/dist/solver-types/prediction-v0.d.ts +2 -2
  163. package/dist/solver-types/prediction-v0.js +11 -11
  164. package/dist/solver-types/prediction-v1-auto.d.ts +22 -0
  165. package/dist/solver-types/prediction-v1-auto.js +211 -0
  166. package/dist/solver-types/prediction-v1-auto.js.map +1 -0
  167. package/dist/solver-types/prediction-v1.d.ts +3 -0
  168. package/dist/solver-types/prediction-v1.js +29 -0
  169. package/dist/solver-types/prediction-v1.js.map +1 -0
  170. package/dist/solver-types/solver-type.d.ts +5 -4
  171. package/dist/store/store.d.ts +4 -0
  172. package/dist/store/store.js +28 -4
  173. package/dist/store/store.js.map +1 -1
  174. package/dist/tasks/posting-service.d.ts +5 -2
  175. package/dist/tasks/posting-service.js +12 -6
  176. package/dist/tasks/posting-service.js.map +1 -1
  177. package/dist/tasks/sources.d.ts +2 -2
  178. package/dist/tasks/sources.js +10 -7
  179. package/dist/tasks/sources.js.map +1 -1
  180. package/dist/templates/harnesses/alternative-harness/package.json.tmpl +1 -1
  181. package/dist/templates/harnesses/alternative-harness/src/coordinator.ts.tmpl +1 -1
  182. package/dist/templates/harnesses/alternative-harness/src/index.ts.tmpl +1 -1
  183. package/dist/templates/harnesses/alternative-harness/src/mock-harness.ts.tmpl +1 -1
  184. package/dist/templates/harnesses/alternative-harness/src/phases/debrief.ts.tmpl +1 -1
  185. package/dist/templates/harnesses/alternative-harness/src/phases/execute.ts.tmpl +1 -1
  186. package/dist/templates/harnesses/alternative-harness/src/phases/improve.ts.tmpl +1 -1
  187. package/dist/templates/harnesses/alternative-harness/src/phases/memory.ts.tmpl +1 -1
  188. package/dist/templates/harnesses/alternative-harness/src/phases/orient.ts.tmpl +1 -1
  189. package/dist/templates/harnesses/alternative-harness/src/phases/plan.ts.tmpl +1 -1
  190. package/dist/templates/harnesses/alternative-harness/src/phases/strategize.ts.tmpl +1 -1
  191. package/dist/templates/harnesses/alternative-harness/test/coordinator.test.ts.tmpl +1 -1
  192. package/dist/templates/harnesses/alternative-harness/test/unit.test.ts.tmpl +1 -1
  193. package/dist/templates/harnesses/evaluator/package.json.tmpl +1 -1
  194. package/dist/templates/harnesses/evaluator/src/index.ts.tmpl +1 -1
  195. package/dist/templates/harnesses/evaluator/test/unit.test.ts.tmpl +1 -1
  196. package/dist/templates/harnesses/forecaster/package.json.tmpl +1 -1
  197. package/dist/templates/harnesses/forecaster/src/index.ts.tmpl +1 -1
  198. package/dist/templates/harnesses/forecaster/test/unit.test.ts.tmpl +1 -1
  199. package/dist/trajectory/schema.d.ts +10 -10
  200. package/dist/types/index.d.ts +2 -2
  201. package/dist/types/index.js +1 -1
  202. package/dist/types/index.js.map +1 -1
  203. package/dist/types/payloads/index.d.ts +1 -0
  204. package/dist/types/payloads/index.js +6 -0
  205. package/dist/types/payloads/index.js.map +1 -1
  206. package/dist/types/payloads/prediction-v1.d.ts +2 -0
  207. package/dist/types/payloads/prediction-v1.js +2 -0
  208. package/dist/types/payloads/prediction-v1.js.map +1 -0
  209. package/dist/types/prediction-v1.d.ts +2 -0
  210. package/dist/types/prediction-v1.js +2 -0
  211. package/dist/types/prediction-v1.js.map +1 -0
  212. package/dist/types/prediction.d.ts +559 -19
  213. package/dist/types/prediction.js +12 -9
  214. package/dist/types/prediction.js.map +1 -1
  215. package/dist/types/task-document.d.ts +389 -0
  216. package/dist/types/task-document.js +11 -0
  217. package/dist/types/task-document.js.map +1 -1
  218. package/dist/types/task.d.ts +285 -1
  219. package/dist/types/task.js +6 -1
  220. package/dist/types/task.js.map +1 -1
  221. package/dist/vendor/@jinn-network/sdk/README.md +61 -0
  222. package/dist/vendor/@jinn-network/sdk/dist/capabilities.d.ts +52 -0
  223. package/dist/vendor/@jinn-network/sdk/dist/capabilities.js +1 -0
  224. package/dist/vendor/@jinn-network/sdk/dist/contracts.d.ts +105 -0
  225. package/dist/vendor/@jinn-network/sdk/dist/contracts.js +147 -0
  226. package/dist/vendor/@jinn-network/sdk/dist/harness.d.ts +69 -0
  227. package/dist/vendor/@jinn-network/sdk/dist/harness.js +1 -0
  228. package/dist/vendor/@jinn-network/sdk/dist/index.d.ts +2 -0
  229. package/dist/vendor/@jinn-network/sdk/dist/index.js +5 -0
  230. package/dist/vendor/@jinn-network/sdk/dist/manifest.d.ts +69 -0
  231. package/dist/vendor/@jinn-network/sdk/dist/manifest.js +3 -0
  232. package/dist/vendor/@jinn-network/sdk/dist/payloads/prediction-v1.d.ts +223 -0
  233. package/dist/vendor/@jinn-network/sdk/dist/payloads/prediction-v1.js +64 -0
  234. package/dist/vendor/@jinn-network/sdk/dist/plugins.d.ts +36 -0
  235. package/dist/vendor/@jinn-network/sdk/dist/plugins.js +54 -0
  236. package/dist/vendor/@jinn-network/sdk/dist/prediction-v1.d.ts +870 -0
  237. package/dist/vendor/@jinn-network/sdk/dist/prediction-v1.js +80 -0
  238. package/dist/vendor/@jinn-network/sdk/dist/solvernets/index.d.ts +2 -0
  239. package/dist/vendor/@jinn-network/sdk/dist/solvernets/index.js +1 -0
  240. package/dist/vendor/@jinn-network/sdk/dist/solvernets/prediction-v1.d.ts +6 -0
  241. package/dist/vendor/@jinn-network/sdk/dist/solvernets/prediction-v1.js +3 -0
  242. package/dist/vendor/@jinn-network/sdk/dist/types.d.ts +116 -0
  243. package/dist/vendor/@jinn-network/sdk/dist/types.js +21 -0
  244. package/dist/vendor/@jinn-network/sdk/package.json +34 -0
  245. package/dist/venues/polymarket/client.d.ts +77 -0
  246. package/dist/venues/polymarket/client.js +309 -0
  247. package/dist/venues/polymarket/client.js.map +1 -0
  248. package/dist/withdraw/run-withdraw-plan.js +0 -2
  249. package/dist/withdraw/run-withdraw-plan.js.map +1 -1
  250. package/package.json +8 -6
  251. package/plugins/jinn-prediction-plugin/.claude-plugin/plugin.json +13 -86
  252. package/plugins/jinn-prediction-plugin/.mcp.json +8 -0
  253. package/plugins/jinn-prediction-plugin/GEMINI.md +3 -0
  254. package/plugins/jinn-prediction-plugin/gemini-extension.json +13 -0
  255. package/plugins/jinn-prediction-plugin/jinn.plugin.json +23 -0
  256. package/plugins/jinn-prediction-plugin/schemas/prediction-v1-solution.schema.json +34 -0
  257. package/plugins/jinn-prediction-plugin/schemas/prediction-v1-task.schema.json +118 -0
  258. package/plugins/jinn-prediction-plugin/schemas/prediction-v1-verdict.schema.json +84 -0
  259. package/templates/harnesses/alternative-harness/package.json.tmpl +1 -1
  260. package/templates/harnesses/alternative-harness/src/coordinator.ts.tmpl +1 -1
  261. package/templates/harnesses/alternative-harness/src/index.ts.tmpl +1 -1
  262. package/templates/harnesses/alternative-harness/src/mock-harness.ts.tmpl +1 -1
  263. package/templates/harnesses/alternative-harness/src/phases/debrief.ts.tmpl +1 -1
  264. package/templates/harnesses/alternative-harness/src/phases/execute.ts.tmpl +1 -1
  265. package/templates/harnesses/alternative-harness/src/phases/improve.ts.tmpl +1 -1
  266. package/templates/harnesses/alternative-harness/src/phases/memory.ts.tmpl +1 -1
  267. package/templates/harnesses/alternative-harness/src/phases/orient.ts.tmpl +1 -1
  268. package/templates/harnesses/alternative-harness/src/phases/plan.ts.tmpl +1 -1
  269. package/templates/harnesses/alternative-harness/src/phases/strategize.ts.tmpl +1 -1
  270. package/templates/harnesses/alternative-harness/test/coordinator.test.ts.tmpl +1 -1
  271. package/templates/harnesses/alternative-harness/test/unit.test.ts.tmpl +1 -1
  272. package/templates/harnesses/evaluator/package.json.tmpl +1 -1
  273. package/templates/harnesses/evaluator/src/index.ts.tmpl +1 -1
  274. package/templates/harnesses/evaluator/test/unit.test.ts.tmpl +1 -1
  275. package/templates/harnesses/forecaster/package.json.tmpl +1 -1
  276. package/templates/harnesses/forecaster/src/index.ts.tmpl +1 -1
  277. package/templates/harnesses/forecaster/test/unit.test.ts.tmpl +1 -1
  278. package/dist/adapters/claim-registry/abi.d.ts +0 -127
  279. package/dist/adapters/claim-registry/abi.js +0 -93
  280. package/dist/adapters/claim-registry/abi.js.map +0 -1
  281. package/dist/adapters/claim-registry/client.d.ts +0 -98
  282. package/dist/adapters/claim-registry/client.js +0 -225
  283. package/dist/adapters/claim-registry/client.js.map +0 -1
  284. package/dist/adapters/mech/claim-policy.d.ts +0 -40
  285. package/dist/adapters/mech/claim-policy.js +0 -104
  286. package/dist/adapters/mech/claim-policy.js.map +0 -1
  287. package/dist/harnesses/engine/claim.d.ts +0 -69
  288. package/dist/harnesses/engine/claim.js +0 -111
  289. package/dist/harnesses/engine/claim.js.map +0 -1
@@ -15,6 +15,15 @@ export function makePredictionApyV0Generator(config = {}) {
15
15
  const startTs = Math.floor(now / windowDurationMs) * windowDurationMs;
16
16
  const endTs = startTs + windowDurationMs;
17
17
  const resolveTs = endTs + resolveGapMs;
18
+ const claimPolicy = {
19
+ mode: 'parallel',
20
+ maxClaims: 25,
21
+ maxClaimsPerOperator: 1,
22
+ claimWindowStartTs: startTs,
23
+ claimWindowEndTs: endTs,
24
+ submissionDeadlineTs: endTs,
25
+ claimLeaseTtlSeconds: Math.max(60, Math.floor((endTs - startTs) / 1000)),
26
+ };
18
27
  try {
19
28
  const resolved = await resolvePredictionApyV0Template({
20
29
  id: `pred-apy-v0-auto-${startTs}`,
@@ -51,6 +60,7 @@ export function makePredictionApyV0Generator(config = {}) {
51
60
  window: resolved.window,
52
61
  spec: resolved.spec,
53
62
  eligibility: resolved.eligibility ?? {},
63
+ claimPolicy,
54
64
  creator: {
55
65
  safeAddress: config.safeAddress,
56
66
  agentEoa: config.agentEoa,
@@ -61,6 +71,7 @@ export function makePredictionApyV0Generator(config = {}) {
61
71
  const task = {
62
72
  ...resolved,
63
73
  solverType: 'prediction.apy.v0',
74
+ claimPolicy,
64
75
  spec: Object.fromEntries(Object.entries((resolved.spec ?? {})).filter(([key]) => key !== 'kind')),
65
76
  };
66
77
  return { ...task, signedTask: signed };
@@ -69,6 +80,7 @@ export function makePredictionApyV0Generator(config = {}) {
69
80
  return {
70
81
  ...resolved,
71
82
  solverType: 'prediction.apy.v0',
83
+ claimPolicy,
72
84
  spec: Object.fromEntries(Object.entries((resolved.spec ?? {})).filter(([key]) => key !== 'kind')),
73
85
  };
74
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prediction-apy-v0-auto.js","sourceRoot":"","sources":["../../src/solver-types/prediction-apy-v0-auto.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prediction-apy-v0-auto.js","sourceRoot":"","sources":["../../src/solver-types/prediction-apy-v0-auto.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Auto-generator for prediction.v0 tasks.
2
+ * Auto-generator for prediction.v1 tasks.
3
3
  *
4
4
  * Produces a fresh Task per hour bucket: reads current Chainlink
5
5
  * price, builds a template with the configured threshold sentinel
@@ -13,7 +13,7 @@
13
13
  */
14
14
  import { type PublicClient } from 'viem';
15
15
  import type { Task } from '../types/task.js';
16
- export interface PredictionV0AutoConfig {
16
+ export interface PredictionV1AutoConfig {
17
17
  /** Chainlink AggregatorV3 proxy address. Defaults to Base Sepolia ETH/USD. */
18
18
  feed: `0x${string}`;
19
19
  /** Human-readable feed description embedded in the generated task. */
@@ -54,10 +54,10 @@ export interface PredictionV0AutoConfig {
54
54
  /** Agent private key — used to sign the TaskV1. */
55
55
  agentPrivateKey?: `0x${string}`;
56
56
  }
57
- export type PredictionV0Generator = () => Promise<Task | null>;
57
+ export type PredictionV1Generator = () => Promise<Task | null>;
58
58
  /**
59
59
  * Build a generator closure. Calling the closure returns a freshly-resolved
60
60
  * Task for the current hour bucket, or null if Chainlink is
61
61
  * unreachable (caller skips this tick).
62
62
  */
63
- export declare function makePredictionV0Generator(config: PredictionV0AutoConfig): PredictionV0Generator;
63
+ export declare function makePredictionV1Generator(config: PredictionV1AutoConfig): PredictionV1Generator;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Auto-generator for prediction.v0 tasks.
2
+ * Auto-generator for prediction.v1 tasks.
3
3
  *
4
4
  * Produces a fresh Task per hour bucket: reads current Chainlink
5
5
  * price, builds a template with the configured threshold sentinel
@@ -15,7 +15,7 @@ import { randomUUID } from 'node:crypto';
15
15
  import { createPublicClient, http } from 'viem';
16
16
  import { base, baseSepolia } from 'viem/chains';
17
17
  import { readChainlinkLatest, scaleToDecimal } from '../venues/chainlink/client.js';
18
- import { resolvePredictionV0Template } from './prediction-v0-template.js';
18
+ import { resolvePredictionV1Template } from './prediction-v0-template.js';
19
19
  import { signTaskV1 } from '../tasks/signing.js';
20
20
  // ── Generator factory ──────────────────────────────────────────────────────────
21
21
  /**
@@ -23,7 +23,7 @@ import { signTaskV1 } from '../tasks/signing.js';
23
23
  * Task for the current hour bucket, or null if Chainlink is
24
24
  * unreachable (caller skips this tick).
25
25
  */
26
- export function makePredictionV0Generator(config) {
26
+ export function makePredictionV1Generator(config) {
27
27
  const threshold = config.thresholdSentinel ?? 'current+0.5%';
28
28
  const operator = config.operator ?? 'GT';
29
29
  const windowDurationMs = config.windowDurationMs ?? 600_000; // 10 min default (fast-test)
@@ -48,11 +48,11 @@ export function makePredictionV0Generator(config) {
48
48
  const endTs = startTs + windowDurationMs;
49
49
  const resolveTs = endTs + resolveGapMs;
50
50
  const template = {
51
- id: `pred-v0-auto-${startTs}`,
52
- description: `Auto-generated prediction.v0 task — ${config.feedDescription} ${operator} ${threshold} at ${new Date(resolveTs).toISOString()}`,
51
+ id: `pred-v1-auto-${startTs}`,
52
+ solverType: 'prediction.v1',
53
+ description: `Auto-generated prediction.v1 task — ${config.feedDescription} ${operator} ${threshold} at ${new Date(resolveTs).toISOString()}`,
53
54
  window: { startTs, endTs },
54
55
  spec: {
55
- kind: 'prediction.v0',
56
56
  oracle: {
57
57
  venue: config.venue,
58
58
  feed: config.feed,
@@ -66,9 +66,18 @@ export function makePredictionV0Generator(config) {
66
66
  },
67
67
  },
68
68
  eligibility: { maxSubmissionDelayMs: 60_000 },
69
+ claimPolicy: {
70
+ mode: 'parallel',
71
+ maxClaims: 25,
72
+ maxClaimsPerOperator: 1,
73
+ claimWindowStartTs: startTs,
74
+ claimWindowEndTs: endTs,
75
+ submissionDeadlineTs: endTs,
76
+ claimLeaseTtlSeconds: Math.max(60, Math.floor((endTs - startTs) / 1000)),
77
+ },
69
78
  };
70
79
  try {
71
- const resolved = await resolvePredictionV0Template(template, {
80
+ const resolved = await resolvePredictionV1Template(template, {
72
81
  readCurrent: async ({ feed }) => {
73
82
  const reading = await readChainlinkLatest(feed, getPublicClient());
74
83
  return scaleToDecimal(reading.answer, reading.decimals);
@@ -81,12 +90,13 @@ export function makePredictionV0Generator(config) {
81
90
  const taskDoc = {
82
91
  schemaVersion: 'task.v1',
83
92
  id: resolved.id ?? randomUUID(),
84
- solverType: 'prediction.v0',
93
+ solverType: 'prediction.v1',
85
94
  role: 'restoration',
86
95
  description: resolved.description,
87
96
  window: resolved.window,
88
97
  spec: resolved.spec,
89
98
  eligibility: resolved.eligibility ?? {},
99
+ claimPolicy: template.claimPolicy,
90
100
  creator: {
91
101
  safeAddress: config.safeAddress,
92
102
  agentEoa: config.agentEoa,
@@ -96,7 +106,8 @@ export function makePredictionV0Generator(config) {
96
106
  const signed = await signTaskV1(taskDoc, config.agentPrivateKey);
97
107
  const task = {
98
108
  ...resolved,
99
- solverType: 'prediction.v0',
109
+ solverType: 'prediction.v1',
110
+ claimPolicy: template.claimPolicy,
100
111
  spec: Object.fromEntries(Object.entries((resolved.spec ?? {})).filter(([key]) => key !== 'kind')),
101
112
  };
102
113
  return { ...task, signedTask: signed };
@@ -104,7 +115,8 @@ export function makePredictionV0Generator(config) {
104
115
  // No signing credentials — return the resolved shape without a signed task.
105
116
  return {
106
117
  ...resolved,
107
- solverType: 'prediction.v0',
118
+ solverType: 'prediction.v1',
119
+ claimPolicy: template.claimPolicy,
108
120
  spec: Object.fromEntries(Object.entries((resolved.spec ?? {})).filter(([key]) => key !== 'kind')),
109
121
  };
110
122
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prediction-v0-auto.js","sourceRoot":"","sources":["../../src/solver-types/prediction-v0-auto.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prediction-v0-auto.js","sourceRoot":"","sources":["../../src/solver-types/prediction-v0-auto.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Sentinel resolution for prediction.v0 Task templates.
2
+ * Sentinel resolution for prediction.v1 Task templates.
3
3
  *
4
4
  * Two sentinels are supported in template JSON (e.g.,
5
- * `client/fixtures/prediction-v0-task.example.json`):
5
+ * `client/fixtures/prediction-v1-task.example.json`):
6
6
  *
7
7
  * 1. window.startTs = 0 → rewritten as Date.now() at call time; the rest of
8
8
  * the window (endTs) and resolveTs are computed relative to that.
@@ -24,14 +24,14 @@
24
24
  * unit-testable. Both the `jinn tasks submit --spec-file` path and the
25
25
  * future auto-generator (jinn-mono-9ew) call through this helper.
26
26
  */
27
- import { type PredictionV0Task } from '../types/prediction.js';
27
+ import { type PredictionV1Task } from '../types/prediction.js';
28
28
  /** Returns true iff the given value looks like a "current[±N[%]]" sentinel. */
29
29
  export declare function isCurrentSentinel(value: unknown): boolean;
30
30
  export interface TemplateReaderDeps {
31
31
  /**
32
32
  * Read the current price of the Chainlink feed referenced in the template.
33
33
  * Required only when the template uses a `current[±…]` threshold sentinel
34
- * (see {@link predictionV0TemplateNeedsReadCurrent}).
34
+ * (see {@link predictionV1TemplateNeedsReadCurrent}).
35
35
  */
36
36
  readCurrent?: (args: {
37
37
  feed: `0x${string}`;
@@ -54,17 +54,17 @@ export declare const DEFAULT_WINDOW_DURATION_MS = 600000;
54
54
  /** Default resolve gap for the startTs-sentinel fill. Tuned for fast-test. */
55
55
  export declare const DEFAULT_RESOLVE_GAP_MS = 300000;
56
56
  /**
57
- * True if {@link resolvePredictionV0Template} will call `readCurrent` for this
57
+ * True if {@link resolvePredictionV1Template} will call `readCurrent` for this
58
58
  * template (Chainlink). `window.startTs === 0` does not need `readCurrent`.
59
59
  */
60
- export declare function predictionV0TemplateNeedsReadCurrent(template: unknown): boolean;
60
+ export declare function predictionV1TemplateNeedsReadCurrent(template: unknown): boolean;
61
61
  /**
62
- * Resolve all supported sentinels in a raw prediction.v0 template + return a
63
- * parsed, validated PredictionV0Task.
62
+ * Resolve all supported sentinels in a raw prediction.v1 template + return a
63
+ * parsed, validated PredictionV1Task.
64
64
  *
65
- * The template must be the JSON shape of a PredictionV0Task with optional
65
+ * The template must be the JSON shape of a PredictionV1Task with optional
66
66
  * sentinel values. Callers that build the template from multiple sources
67
67
  * (CLI --spec-file + --id + --description) should merge their bits BEFORE
68
68
  * calling this helper.
69
69
  */
70
- export declare function resolvePredictionV0Template(template: unknown, deps: TemplateReaderDeps): Promise<PredictionV0Task>;
70
+ export declare function resolvePredictionV1Template(template: unknown, deps: TemplateReaderDeps): Promise<PredictionV1Task>;
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Sentinel resolution for prediction.v0 Task templates.
2
+ * Sentinel resolution for prediction.v1 Task templates.
3
3
  *
4
4
  * Two sentinels are supported in template JSON (e.g.,
5
- * `client/fixtures/prediction-v0-task.example.json`):
5
+ * `client/fixtures/prediction-v1-task.example.json`):
6
6
  *
7
7
  * 1. window.startTs = 0 → rewritten as Date.now() at call time; the rest of
8
8
  * the window (endTs) and resolveTs are computed relative to that.
@@ -24,8 +24,8 @@
24
24
  * unit-testable. Both the `jinn tasks submit --spec-file` path and the
25
25
  * future auto-generator (jinn-mono-9ew) call through this helper.
26
26
  */
27
- import { PredictionV0TaskSchema, } from '../types/prediction.js';
28
- import { PREDICTION_V0_KIND } from './constants.js';
27
+ import { PredictionV1TaskSchema, } from '../types/prediction.js';
28
+ import { PREDICTION_V1_KIND } from './constants.js';
29
29
  // ── Sentinel parsers ──────────────────────────────────────────────────────────
30
30
  /**
31
31
  * Parse a `current[±N[%]]` sentinel. Returns a function that takes the current
@@ -68,33 +68,33 @@ export const DEFAULT_WINDOW_DURATION_MS = 600_000;
68
68
  /** Default resolve gap for the startTs-sentinel fill. Tuned for fast-test. */
69
69
  export const DEFAULT_RESOLVE_GAP_MS = 300_000;
70
70
  /**
71
- * True if {@link resolvePredictionV0Template} will call `readCurrent` for this
71
+ * True if {@link resolvePredictionV1Template} will call `readCurrent` for this
72
72
  * template (Chainlink). `window.startTs === 0` does not need `readCurrent`.
73
73
  */
74
- export function predictionV0TemplateNeedsReadCurrent(template) {
74
+ export function predictionV1TemplateNeedsReadCurrent(template) {
75
75
  if (typeof template !== 'object' || template === null)
76
76
  return false;
77
77
  const t = template;
78
78
  const spec = t['spec'];
79
- if (spec?.kind !== PREDICTION_V0_KIND)
79
+ if ((t['solverType'] ?? PREDICTION_V1_KIND) !== PREDICTION_V1_KIND)
80
80
  return false;
81
- if (spec.question?.kind === 'threshold' && typeof spec.question.threshold === 'string') {
81
+ if (spec?.question?.kind === 'threshold' && typeof spec.question.threshold === 'string') {
82
82
  return isCurrentSentinel(spec.question.threshold);
83
83
  }
84
84
  return false;
85
85
  }
86
86
  /**
87
- * Resolve all supported sentinels in a raw prediction.v0 template + return a
88
- * parsed, validated PredictionV0Task.
87
+ * Resolve all supported sentinels in a raw prediction.v1 template + return a
88
+ * parsed, validated PredictionV1Task.
89
89
  *
90
- * The template must be the JSON shape of a PredictionV0Task with optional
90
+ * The template must be the JSON shape of a PredictionV1Task with optional
91
91
  * sentinel values. Callers that build the template from multiple sources
92
92
  * (CLI --spec-file + --id + --description) should merge their bits BEFORE
93
93
  * calling this helper.
94
94
  */
95
- export async function resolvePredictionV0Template(template, deps) {
95
+ export async function resolvePredictionV1Template(template, deps) {
96
96
  if (typeof template !== 'object' || template === null) {
97
- throw new Error('resolvePredictionV0Template: template must be an object');
97
+ throw new Error('resolvePredictionV1Template: template must be an object');
98
98
  }
99
99
  // Shallow clone so we don't mutate caller's input.
100
100
  const stub = JSON.parse(JSON.stringify(template));
@@ -113,13 +113,13 @@ export async function resolvePredictionV0Template(template, deps) {
113
113
  }
114
114
  // ── (2) spec.question.threshold sentinel → absolute price ──────────────────
115
115
  const spec = stub['spec'];
116
- if (spec?.kind === PREDICTION_V0_KIND &&
116
+ if (spec &&
117
117
  spec.question?.kind === 'threshold' &&
118
118
  typeof spec.question.threshold === 'string') {
119
119
  const t = spec.question.threshold;
120
120
  if (isCurrentSentinel(t)) {
121
121
  if (!deps.readCurrent) {
122
- throw new Error('resolvePredictionV0Template: readCurrent is required when spec.question.threshold uses a current[±…] sentinel');
122
+ throw new Error('resolvePredictionV1Template: readCurrent is required when spec.question.threshold uses a current[±…] sentinel');
123
123
  }
124
124
  if (!spec.oracle?.feed || !spec.oracle.venue) {
125
125
  throw new Error('cannot resolve threshold sentinel: spec.oracle.feed and spec.oracle.venue are required');
@@ -140,6 +140,6 @@ export async function resolvePredictionV0Template(template, deps) {
140
140
  }
141
141
  }
142
142
  // Final Zod parse — all refinements (window span, resolveTs offset) enforced.
143
- return PredictionV0TaskSchema.parse(stub);
143
+ return PredictionV1TaskSchema.parse(stub);
144
144
  }
145
145
  //# sourceMappingURL=prediction-v0-template.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prediction-v0-template.js","sourceRoot":"","sources":["../../src/solver-types/prediction-v0-template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prediction-v0-template.js","sourceRoot":"","sources":["../../src/solver-types/prediction-v0-template.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { type PredictionV0AutoConfig } from './prediction-v0-auto.js';
1
+ import { type PredictionV1AutoConfig } from './prediction-v0-auto.js';
2
2
  import type { SolverTypeDefinition } from './solver-type.js';
3
- export declare const predictionV0: SolverTypeDefinition<PredictionV0AutoConfig>;
3
+ export declare const predictionV1: SolverTypeDefinition<PredictionV1AutoConfig>;
@@ -1,19 +1,19 @@
1
1
  import { BASE_SEPOLIA_FEEDS } from '../venues/chainlink/feeds.js';
2
- import { predictionV0TemplateNeedsReadCurrent, resolvePredictionV0Template, } from './prediction-v0-template.js';
3
- import { makePredictionV0Generator } from './prediction-v0-auto.js';
4
- import { PREDICTION_V0_KIND } from './constants.js';
5
- export const predictionV0 = {
6
- solverType: PREDICTION_V0_KIND,
2
+ import { predictionV1TemplateNeedsReadCurrent, resolvePredictionV1Template, } from './prediction-v0-template.js';
3
+ import { makePredictionV1Generator } from './prediction-v0-auto.js';
4
+ import { PREDICTION_V1_KIND } from './constants.js';
5
+ export const predictionV1 = {
6
+ solverType: PREDICTION_V1_KIND,
7
7
  async parseSpec(raw, deps) {
8
- if (predictionV0TemplateNeedsReadCurrent(raw) && !deps?.readCurrent) {
9
- throw new Error('prediction.v0 parseSpec requires readCurrent (Chainlink) when the template uses a current[±…] threshold sentinel');
8
+ if (predictionV1TemplateNeedsReadCurrent(raw) && !deps?.readCurrent) {
9
+ throw new Error('prediction.v1 parseSpec requires readCurrent (Chainlink) when the template uses a current[±…] threshold sentinel');
10
10
  }
11
- const task = await resolvePredictionV0Template(raw, {
11
+ const task = await resolvePredictionV1Template(raw, {
12
12
  readCurrent: deps?.readCurrent,
13
13
  });
14
14
  return { window: task.window, spec: task.spec, eligibility: task.eligibility };
15
15
  },
16
- buildGenerator: (config) => makePredictionV0Generator(config),
16
+ buildGenerator: (config) => makePredictionV1Generator(config),
17
17
  getTestnetAutoConfig: (ctx) => {
18
18
  if (ctx.network !== 'testnet')
19
19
  return undefined;
@@ -25,8 +25,8 @@ export const predictionV0 = {
25
25
  agentEoa: ctx.agentEoa,
26
26
  safeAddress: ctx.safeAddress,
27
27
  agentPrivateKey: ctx.agentPrivateKey,
28
- windowDurationMs: ctx.predictionV0WindowMs,
29
- resolveGapMs: ctx.predictionV0ResolveGapMs,
28
+ windowDurationMs: ctx.predictionV1WindowMs,
29
+ resolveGapMs: ctx.predictionV1ResolveGapMs,
30
30
  };
31
31
  },
32
32
  ui: {
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Auto-generator for prediction.v1 Polymarket forecast rounds.
3
+ */
4
+ import type { Task } from '../types/task.js';
5
+ import { type PolymarketClientConfig } from '../venues/polymarket/client.js';
6
+ export interface PredictionV1AutoConfig extends PolymarketClientConfig {
7
+ minTimeToResolutionHours?: number;
8
+ maxTimeToResolutionHours?: number;
9
+ minLiquidityUsd?: string;
10
+ minVolume24hUsd?: string;
11
+ maxYesSpread?: string;
12
+ maxOrderbookAgeSeconds?: number;
13
+ maxNewRoundsPerPoll?: number;
14
+ maxNewRoundsPerDay?: number;
15
+ maxOpenRounds?: number;
16
+ submissionWindowMs?: number;
17
+ agentEoa?: `0x${string}`;
18
+ safeAddress?: `0x${string}`;
19
+ agentPrivateKey?: `0x${string}`;
20
+ blocklistConditionIds?: string[];
21
+ }
22
+ export declare function makePredictionV1Generator(config?: PredictionV1AutoConfig): () => Promise<Task[] | null>;
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Auto-generator for prediction.v1 Polymarket forecast rounds.
3
+ */
4
+ import { randomUUID } from 'node:crypto';
5
+ import { signTaskV1 } from '../tasks/signing.js';
6
+ import { getOrderbook, listMarketCandidates, } from '../venues/polymarket/client.js';
7
+ const DEFAULTS = {
8
+ minTimeToResolutionHours: 24,
9
+ maxTimeToResolutionHours: 168,
10
+ minLiquidityUsd: '10000',
11
+ minVolume24hUsd: '2500',
12
+ maxYesSpread: '0.10',
13
+ maxOrderbookAgeSeconds: 60,
14
+ maxNewRoundsPerPoll: 25,
15
+ maxNewRoundsPerDay: 100,
16
+ maxOpenRounds: 250,
17
+ submissionWindowMs: 6 * 60 * 60 * 1000,
18
+ };
19
+ export function makePredictionV1Generator(config = {}) {
20
+ const postedAtByCondition = new Map();
21
+ const postedCountByDay = new Map();
22
+ const blocklist = new Set(config.blocklistConditionIds ?? []);
23
+ return async () => {
24
+ const now = Date.now();
25
+ pruneOpenRounds(postedAtByCondition, now);
26
+ const dayKey = new Date(now).toISOString().slice(0, 10);
27
+ const todayCount = postedCountByDay.get(dayKey) ?? 0;
28
+ const dailyRemaining = Math.max(0, (config.maxNewRoundsPerDay ?? DEFAULTS.maxNewRoundsPerDay) - todayCount);
29
+ const openRemaining = Math.max(0, (config.maxOpenRounds ?? DEFAULTS.maxOpenRounds) - postedAtByCondition.size);
30
+ const pollLimit = Math.min(config.maxNewRoundsPerPoll ?? DEFAULTS.maxNewRoundsPerPoll, dailyRemaining, openRemaining);
31
+ if (pollLimit <= 0)
32
+ return null;
33
+ let candidates;
34
+ try {
35
+ candidates = await listMarketCandidates({ ...config, limit: 250 });
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ const eligible = [];
41
+ for (const market of candidates) {
42
+ if (eligible.length >= pollLimit * 3)
43
+ break;
44
+ if (postedAtByCondition.has(market.conditionId) || blocklist.has(market.conditionId))
45
+ continue;
46
+ const checked = await checkMarketEligibility(market, config, now);
47
+ if (checked)
48
+ eligible.push(checked);
49
+ }
50
+ eligible.sort((a, b) => {
51
+ const liquidityDelta = Number(b.market.liquidityUsd) - Number(a.market.liquidityUsd);
52
+ if (Number.isFinite(liquidityDelta) && liquidityDelta !== 0)
53
+ return liquidityDelta;
54
+ const spreadDelta = Number(a.orderbook.spread) - Number(b.orderbook.spread);
55
+ if (Number.isFinite(spreadDelta) && spreadDelta !== 0)
56
+ return spreadDelta;
57
+ return a.timeToResolutionHours - b.timeToResolutionHours;
58
+ });
59
+ const selected = eligible.slice(0, pollLimit);
60
+ const tasks = [];
61
+ for (const entry of selected) {
62
+ const task = await buildTask(entry, config, now);
63
+ postedAtByCondition.set(entry.market.conditionId, Date.parse(entry.market.endTime));
64
+ tasks.push(task);
65
+ }
66
+ if (tasks.length > 0) {
67
+ postedCountByDay.set(dayKey, todayCount + tasks.length);
68
+ }
69
+ return tasks.length > 0 ? tasks : null;
70
+ };
71
+ }
72
+ async function checkMarketEligibility(market, config, now) {
73
+ if (!market.active || market.closed || market.archived)
74
+ return null;
75
+ if (!market.rulesText.trim())
76
+ return null;
77
+ if (Number(market.liquidityUsd) < Number(config.minLiquidityUsd ?? DEFAULTS.minLiquidityUsd))
78
+ return null;
79
+ if (Number(market.volume24hUsd) < Number(config.minVolume24hUsd ?? DEFAULTS.minVolume24hUsd))
80
+ return null;
81
+ const resolutionMs = Date.parse(market.endTime);
82
+ if (!Number.isFinite(resolutionMs))
83
+ return null;
84
+ const timeToResolutionHours = (resolutionMs - now) / 3_600_000;
85
+ if (timeToResolutionHours < (config.minTimeToResolutionHours ?? DEFAULTS.minTimeToResolutionHours))
86
+ return null;
87
+ if (timeToResolutionHours > (config.maxTimeToResolutionHours ?? DEFAULTS.maxTimeToResolutionHours))
88
+ return null;
89
+ let orderbook;
90
+ try {
91
+ orderbook = await getOrderbook({
92
+ ...config,
93
+ marketId: market.marketId,
94
+ conditionId: market.conditionId,
95
+ yesTokenId: market.tokenIds.yes,
96
+ });
97
+ }
98
+ catch {
99
+ return null;
100
+ }
101
+ const orderbookAgeSeconds = Math.max(0, (now - Date.parse(orderbook.sampledAt)) / 1000);
102
+ if (orderbookAgeSeconds > (config.maxOrderbookAgeSeconds ?? DEFAULTS.maxOrderbookAgeSeconds))
103
+ return null;
104
+ if (Number(orderbook.spread) > Number(config.maxYesSpread ?? DEFAULTS.maxYesSpread))
105
+ return null;
106
+ return { market, orderbook, timeToResolutionHours, orderbookAgeSeconds };
107
+ }
108
+ async function buildTask(entry, config, now) {
109
+ const { market, orderbook, timeToResolutionHours, orderbookAgeSeconds } = entry;
110
+ const startTs = now;
111
+ const endTs = now + (config.submissionWindowMs ?? DEFAULTS.submissionWindowMs);
112
+ const shortCondition = market.conditionId.replace(/^0x/i, '').slice(0, 16);
113
+ const sampledStamp = orderbook.sampledAt.replace(/[-:]/g, '').replace(/\.\d{3}Z$/, 'Z');
114
+ const id = `prediction-v1-polymarket-${shortCondition}-${sampledStamp}`;
115
+ const claimPolicy = {
116
+ mode: 'parallel',
117
+ maxClaims: 25,
118
+ maxClaimsPerOperator: 1,
119
+ claimLeaseTtlSeconds: 30 * 60,
120
+ };
121
+ const spec = {
122
+ question: {
123
+ kind: 'binary',
124
+ text: market.question,
125
+ yesLabel: 'YES',
126
+ noLabel: 'NO',
127
+ },
128
+ source: {
129
+ type: 'prediction-market',
130
+ venue: 'polymarket',
131
+ url: market.url,
132
+ identifiers: {
133
+ marketId: market.marketId,
134
+ conditionId: market.conditionId,
135
+ yesTokenId: market.tokenIds.yes,
136
+ noTokenId: market.tokenIds.no,
137
+ },
138
+ },
139
+ resolution: {
140
+ expectedResolutionTime: new Date(Date.parse(market.endTime)).toISOString(),
141
+ rulesText: market.rulesText,
142
+ rulesUrl: market.url,
143
+ timezone: 'UTC',
144
+ },
145
+ consensusSnapshot: {
146
+ sampledAt: orderbook.sampledAt,
147
+ probabilityYes: orderbook.midpointYes,
148
+ method: 'best-bid-ask-midpoint',
149
+ bestBidYes: orderbook.bestBidYes,
150
+ bestAskYes: orderbook.bestAskYes,
151
+ spread: orderbook.spread,
152
+ source: 'polymarket-clob',
153
+ },
154
+ eligibilitySnapshot: {
155
+ sampledAt: new Date(now).toISOString(),
156
+ timeToResolutionHours: Number(timeToResolutionHours.toFixed(2)),
157
+ liquidityUsd: market.liquidityUsd,
158
+ volume24hUsd: market.volume24hUsd,
159
+ orderbookAgeSeconds: Number(orderbookAgeSeconds.toFixed(0)),
160
+ selectionReason: 'weekly-binary-liquid-clear-rules',
161
+ },
162
+ };
163
+ const eligibility = {
164
+ dedupKey: `polymarket:${market.conditionId}`,
165
+ minTimeToResolutionHours: config.minTimeToResolutionHours ?? DEFAULTS.minTimeToResolutionHours,
166
+ maxTimeToResolutionHours: config.maxTimeToResolutionHours ?? DEFAULTS.maxTimeToResolutionHours,
167
+ minLiquidityUsd: config.minLiquidityUsd ?? DEFAULTS.minLiquidityUsd,
168
+ minVolume24hUsd: config.minVolume24hUsd ?? DEFAULTS.minVolume24hUsd,
169
+ maxYesSpread: config.maxYesSpread ?? DEFAULTS.maxYesSpread,
170
+ maxOrderbookAgeSeconds: config.maxOrderbookAgeSeconds ?? DEFAULTS.maxOrderbookAgeSeconds,
171
+ };
172
+ const baseTask = {
173
+ id,
174
+ description: 'Forecast a binary externally resolved prediction market.',
175
+ solverType: 'prediction.v1',
176
+ role: 'restoration',
177
+ window: { startTs, endTs },
178
+ claimPolicy,
179
+ spec,
180
+ eligibility,
181
+ };
182
+ if (config.agentEoa && config.safeAddress && config.agentPrivateKey) {
183
+ const taskDoc = {
184
+ schemaVersion: 'task.v1',
185
+ id,
186
+ solverType: 'prediction.v1',
187
+ role: 'restoration',
188
+ description: baseTask.description,
189
+ window: baseTask.window,
190
+ claimPolicy,
191
+ spec,
192
+ eligibility,
193
+ creator: {
194
+ safeAddress: config.safeAddress,
195
+ agentEoa: config.agentEoa,
196
+ },
197
+ createdAt: now,
198
+ };
199
+ const signedTask = await signTaskV1(taskDoc, config.agentPrivateKey);
200
+ return { ...baseTask, signedTask };
201
+ }
202
+ return { ...baseTask, id: baseTask.id ?? randomUUID() };
203
+ }
204
+ function pruneOpenRounds(postedAtByCondition, now) {
205
+ for (const [conditionId, endTime] of postedAtByCondition.entries()) {
206
+ if (Number.isFinite(endTime) && endTime < now) {
207
+ postedAtByCondition.delete(conditionId);
208
+ }
209
+ }
210
+ }
211
+ //# sourceMappingURL=prediction-v1-auto.js.map