@ixo/openhands-sdk 0.2.0 → 0.4.0

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 (503) hide show
  1. package/dist/cjs/campaign/campaign.js +3 -2
  2. package/dist/cjs/campaign/campaign.js.map +1 -1
  3. package/dist/cjs/campaign/funding.d.ts.map +1 -1
  4. package/dist/cjs/campaign/funding.js +3 -0
  5. package/dist/cjs/campaign/funding.js.map +1 -1
  6. package/dist/cjs/campaign/pool.d.ts.map +1 -1
  7. package/dist/cjs/campaign/pool.js +2 -1
  8. package/dist/cjs/campaign/pool.js.map +1 -1
  9. package/dist/cjs/campaign/spots.d.ts.map +1 -1
  10. package/dist/cjs/campaign/spots.js +8 -6
  11. package/dist/cjs/campaign/spots.js.map +1 -1
  12. package/dist/cjs/chain/ask.d.ts +104 -14
  13. package/dist/cjs/chain/ask.d.ts.map +1 -1
  14. package/dist/cjs/chain/ask.js +151 -78
  15. package/dist/cjs/chain/ask.js.map +1 -1
  16. package/dist/cjs/chain/askImage.d.ts +19 -0
  17. package/dist/cjs/chain/askImage.d.ts.map +1 -0
  18. package/dist/cjs/chain/askImage.js +56 -0
  19. package/dist/cjs/chain/askImage.js.map +1 -0
  20. package/dist/cjs/chain/bridge.d.ts +7 -33
  21. package/dist/cjs/chain/bridge.d.ts.map +1 -1
  22. package/dist/cjs/chain/bridge.js +10 -25
  23. package/dist/cjs/chain/bridge.js.map +1 -1
  24. package/dist/cjs/chain/claimSubmit.d.ts +15 -0
  25. package/dist/cjs/chain/claimSubmit.d.ts.map +1 -0
  26. package/dist/cjs/chain/claimSubmit.js +14 -0
  27. package/dist/cjs/chain/claimSubmit.js.map +1 -0
  28. package/dist/cjs/chain/delegate.d.ts +52 -7
  29. package/dist/cjs/chain/delegate.d.ts.map +1 -1
  30. package/dist/cjs/chain/delegate.js +66 -14
  31. package/dist/cjs/chain/delegate.js.map +1 -1
  32. package/dist/cjs/chain/domainIndexer.d.ts +26 -0
  33. package/dist/cjs/chain/domainIndexer.d.ts.map +1 -0
  34. package/dist/cjs/chain/domainIndexer.js +51 -0
  35. package/dist/cjs/chain/domainIndexer.js.map +1 -0
  36. package/dist/cjs/chain/entityShape.d.ts +233 -0
  37. package/dist/cjs/chain/entityShape.d.ts.map +1 -0
  38. package/dist/cjs/chain/entityShape.js +251 -0
  39. package/dist/cjs/chain/entityShape.js.map +1 -0
  40. package/dist/cjs/chain/env.d.ts +103 -6
  41. package/dist/cjs/chain/env.d.ts.map +1 -1
  42. package/dist/cjs/chain/env.js +188 -14
  43. package/dist/cjs/chain/env.js.map +1 -1
  44. package/dist/cjs/chain/guest.d.ts +14 -0
  45. package/dist/cjs/chain/guest.d.ts.map +1 -1
  46. package/dist/cjs/chain/guest.js +9 -9
  47. package/dist/cjs/chain/guest.js.map +1 -1
  48. package/dist/cjs/chain/money.d.ts +47 -2
  49. package/dist/cjs/chain/money.d.ts.map +1 -1
  50. package/dist/cjs/chain/money.js +63 -6
  51. package/dist/cjs/chain/money.js.map +1 -1
  52. package/dist/cjs/chain/orgReviewBilling.d.ts +124 -0
  53. package/dist/cjs/chain/orgReviewBilling.d.ts.map +1 -0
  54. package/dist/cjs/chain/orgReviewBilling.js +290 -0
  55. package/dist/cjs/chain/orgReviewBilling.js.map +1 -0
  56. package/dist/cjs/chain/orgReviewBillingSign.d.ts +63 -0
  57. package/dist/cjs/chain/orgReviewBillingSign.d.ts.map +1 -0
  58. package/dist/cjs/chain/orgReviewBillingSign.js +166 -0
  59. package/dist/cjs/chain/orgReviewBillingSign.js.map +1 -0
  60. package/dist/cjs/chain/payoutSettings.d.ts +97 -0
  61. package/dist/cjs/chain/payoutSettings.d.ts.map +1 -0
  62. package/dist/cjs/chain/payoutSettings.js +123 -0
  63. package/dist/cjs/chain/payoutSettings.js.map +1 -0
  64. package/dist/cjs/chain/payoutTerms.d.ts +72 -0
  65. package/dist/cjs/chain/payoutTerms.d.ts.map +1 -0
  66. package/dist/cjs/chain/payoutTerms.js +141 -0
  67. package/dist/cjs/chain/payoutTerms.js.map +1 -0
  68. package/dist/cjs/chain/query.d.ts +14 -0
  69. package/dist/cjs/chain/query.d.ts.map +1 -1
  70. package/dist/cjs/chain/query.js +27 -0
  71. package/dist/cjs/chain/query.js.map +1 -1
  72. package/dist/cjs/chain/reviewBilling.d.ts +86 -0
  73. package/dist/cjs/chain/reviewBilling.d.ts.map +1 -0
  74. package/dist/cjs/chain/reviewBilling.js +265 -0
  75. package/dist/cjs/chain/reviewBilling.js.map +1 -0
  76. package/dist/cjs/chain/store.d.ts +7 -6
  77. package/dist/cjs/chain/store.d.ts.map +1 -1
  78. package/dist/cjs/chain/store.js +7 -6
  79. package/dist/cjs/chain/store.js.map +1 -1
  80. package/dist/cjs/chain/subscription.d.ts +0 -7
  81. package/dist/cjs/chain/subscription.d.ts.map +1 -1
  82. package/dist/cjs/chain/subscription.js +4 -47
  83. package/dist/cjs/chain/subscription.js.map +1 -1
  84. package/dist/cjs/chain/takeBack.d.ts +12 -0
  85. package/dist/cjs/chain/takeBack.d.ts.map +1 -1
  86. package/dist/cjs/chain/takeBack.js +24 -10
  87. package/dist/cjs/chain/takeBack.js.map +1 -1
  88. package/dist/cjs/chain/why.d.ts +44 -0
  89. package/dist/cjs/chain/why.d.ts.map +1 -0
  90. package/dist/cjs/chain/why.js +153 -0
  91. package/dist/cjs/chain/why.js.map +1 -0
  92. package/dist/cjs/chain/whyMint.d.ts +8 -0
  93. package/dist/cjs/chain/whyMint.d.ts.map +1 -0
  94. package/dist/cjs/chain/whyMint.js +53 -0
  95. package/dist/cjs/chain/whyMint.js.map +1 -0
  96. package/dist/cjs/chain.d.ts +8 -4
  97. package/dist/cjs/chain.d.ts.map +1 -1
  98. package/dist/cjs/chain.js +19 -9
  99. package/dist/cjs/chain.js.map +1 -1
  100. package/dist/cjs/config.d.ts +37 -5
  101. package/dist/cjs/config.d.ts.map +1 -1
  102. package/dist/cjs/config.js +9 -2
  103. package/dist/cjs/config.js.map +1 -1
  104. package/dist/cjs/data/agent.d.ts.map +1 -1
  105. package/dist/cjs/data/agent.js +5 -4
  106. package/dist/cjs/data/agent.js.map +1 -1
  107. package/dist/cjs/data/askEntity.d.ts +40 -0
  108. package/dist/cjs/data/askEntity.d.ts.map +1 -0
  109. package/dist/cjs/data/askEntity.js +48 -0
  110. package/dist/cjs/data/askEntity.js.map +1 -0
  111. package/dist/cjs/data/askLinks.d.ts +6 -0
  112. package/dist/cjs/data/askLinks.d.ts.map +1 -0
  113. package/dist/cjs/data/askLinks.js +21 -0
  114. package/dist/cjs/data/askLinks.js.map +1 -0
  115. package/dist/cjs/data/board/assemble.d.ts.map +1 -1
  116. package/dist/cjs/data/board/assemble.js +15 -2
  117. package/dist/cjs/data/board/assemble.js.map +1 -1
  118. package/dist/cjs/data/board/facts.d.ts +11 -0
  119. package/dist/cjs/data/board/facts.d.ts.map +1 -1
  120. package/dist/cjs/data/board/facts.js +16 -0
  121. package/dist/cjs/data/board/facts.js.map +1 -1
  122. package/dist/cjs/data/board/read.d.ts.map +1 -1
  123. package/dist/cjs/data/board/read.js +2 -1
  124. package/dist/cjs/data/board/read.js.map +1 -1
  125. package/dist/cjs/data/board/types.d.ts +9 -0
  126. package/dist/cjs/data/board/types.d.ts.map +1 -1
  127. package/dist/cjs/data/board/types.js.map +1 -1
  128. package/dist/cjs/data/docs.d.ts +10 -2
  129. package/dist/cjs/data/docs.d.ts.map +1 -1
  130. package/dist/cjs/data/docs.js +43 -3
  131. package/dist/cjs/data/docs.js.map +1 -1
  132. package/dist/cjs/data/format.js +1 -1
  133. package/dist/cjs/data/format.js.map +1 -1
  134. package/dist/cjs/data/install.d.ts +8 -0
  135. package/dist/cjs/data/install.d.ts.map +1 -1
  136. package/dist/cjs/data/install.js +9 -1
  137. package/dist/cjs/data/install.js.map +1 -1
  138. package/dist/cjs/data/oracleInfo.d.ts +6 -1
  139. package/dist/cjs/data/oracleInfo.d.ts.map +1 -1
  140. package/dist/cjs/data/oracleInfo.js +22 -3
  141. package/dist/cjs/data/oracleInfo.js.map +1 -1
  142. package/dist/cjs/data/oracles.d.ts +62 -5
  143. package/dist/cjs/data/oracles.d.ts.map +1 -1
  144. package/dist/cjs/data/oracles.js +90 -11
  145. package/dist/cjs/data/oracles.js.map +1 -1
  146. package/dist/cjs/data/orgPayouts.d.ts +87 -0
  147. package/dist/cjs/data/orgPayouts.d.ts.map +1 -0
  148. package/dist/cjs/data/orgPayouts.js +183 -0
  149. package/dist/cjs/data/orgPayouts.js.map +1 -0
  150. package/dist/cjs/data/plans.d.ts +8 -0
  151. package/dist/cjs/data/plans.d.ts.map +1 -0
  152. package/dist/cjs/data/plans.js +12 -0
  153. package/dist/cjs/data/plans.js.map +1 -0
  154. package/dist/cjs/data/profiles.d.ts +20 -0
  155. package/dist/cjs/data/profiles.d.ts.map +1 -1
  156. package/dist/cjs/data/profiles.js +63 -4
  157. package/dist/cjs/data/profiles.js.map +1 -1
  158. package/dist/cjs/data/queue.d.ts.map +1 -1
  159. package/dist/cjs/data/queue.js +3 -2
  160. package/dist/cjs/data/queue.js.map +1 -1
  161. package/dist/cjs/data/receipt.d.ts +7 -0
  162. package/dist/cjs/data/receipt.d.ts.map +1 -1
  163. package/dist/cjs/data/receipt.js +25 -6
  164. package/dist/cjs/data/receipt.js.map +1 -1
  165. package/dist/cjs/data/resources.d.ts +3 -0
  166. package/dist/cjs/data/resources.d.ts.map +1 -1
  167. package/dist/cjs/data/resources.js +4 -1
  168. package/dist/cjs/data/resources.js.map +1 -1
  169. package/dist/cjs/data/threads.d.ts +14 -0
  170. package/dist/cjs/data/threads.d.ts.map +1 -1
  171. package/dist/cjs/data/threads.js +40 -23
  172. package/dist/cjs/data/threads.js.map +1 -1
  173. package/dist/cjs/data/trace.d.ts +8 -0
  174. package/dist/cjs/data/trace.d.ts.map +1 -1
  175. package/dist/cjs/data/trace.js +1 -1
  176. package/dist/cjs/data/trace.js.map +1 -1
  177. package/dist/cjs/data/traceWords.d.ts +4 -1
  178. package/dist/cjs/data/traceWords.d.ts.map +1 -1
  179. package/dist/cjs/data/traceWords.js +8 -2
  180. package/dist/cjs/data/traceWords.js.map +1 -1
  181. package/dist/cjs/data/why.d.ts +38 -0
  182. package/dist/cjs/data/why.d.ts.map +1 -0
  183. package/dist/cjs/data/why.js +86 -0
  184. package/dist/cjs/data/why.js.map +1 -0
  185. package/dist/cjs/data/whyReceipt.d.ts +33 -0
  186. package/dist/cjs/data/whyReceipt.d.ts.map +1 -0
  187. package/dist/cjs/data/whyReceipt.js +291 -0
  188. package/dist/cjs/data/whyReceipt.js.map +1 -0
  189. package/dist/cjs/geo/exifcarry.d.ts +9 -0
  190. package/dist/cjs/geo/exifcarry.d.ts.map +1 -1
  191. package/dist/cjs/geo/exifcarry.js +35 -0
  192. package/dist/cjs/geo/exifcarry.js.map +1 -1
  193. package/dist/cjs/geo/geohash.d.ts +25 -0
  194. package/dist/cjs/geo/geohash.d.ts.map +1 -0
  195. package/dist/cjs/geo/geohash.js +114 -0
  196. package/dist/cjs/geo/geohash.js.map +1 -0
  197. package/dist/cjs/geo/provenance.d.ts +41 -0
  198. package/dist/cjs/geo/provenance.d.ts.map +1 -0
  199. package/dist/cjs/geo/provenance.js +134 -0
  200. package/dist/cjs/geo/provenance.js.map +1 -0
  201. package/dist/cjs/rubric/bridge.d.ts +98 -2
  202. package/dist/cjs/rubric/bridge.d.ts.map +1 -1
  203. package/dist/cjs/rubric/bridge.js +132 -15
  204. package/dist/cjs/rubric/bridge.js.map +1 -1
  205. package/dist/cjs/rubric/card.d.ts +28 -14
  206. package/dist/cjs/rubric/card.d.ts.map +1 -1
  207. package/dist/cjs/rubric/card.js +28 -7
  208. package/dist/cjs/rubric/card.js.map +1 -1
  209. package/dist/cjs/rubric/claimForm.d.ts +116 -0
  210. package/dist/cjs/rubric/claimForm.d.ts.map +1 -1
  211. package/dist/cjs/rubric/claimForm.js +12 -1
  212. package/dist/cjs/rubric/claimForm.js.map +1 -1
  213. package/dist/cjs/rubric/compose.d.ts +5 -0
  214. package/dist/cjs/rubric/compose.d.ts.map +1 -1
  215. package/dist/cjs/rubric/compose.js +9 -3
  216. package/dist/cjs/rubric/compose.js.map +1 -1
  217. package/dist/cjs/rubric/gateMet.d.ts.map +1 -1
  218. package/dist/cjs/rubric/gateMet.js +4 -2
  219. package/dist/cjs/rubric/gateMet.js.map +1 -1
  220. package/dist/cjs/rubric/leg.d.ts +2 -2
  221. package/dist/cjs/rubric/leg.d.ts.map +1 -1
  222. package/dist/cjs/rubric/leg.js +7 -5
  223. package/dist/cjs/rubric/leg.js.map +1 -1
  224. package/dist/cjs/rubric/marketPlan.d.ts +182 -0
  225. package/dist/cjs/rubric/marketPlan.d.ts.map +1 -0
  226. package/dist/cjs/rubric/marketPlan.js +419 -0
  227. package/dist/cjs/rubric/marketPlan.js.map +1 -0
  228. package/dist/cjs/rubric/observation.d.ts +95 -0
  229. package/dist/cjs/rubric/observation.d.ts.map +1 -0
  230. package/dist/cjs/rubric/observation.js +88 -0
  231. package/dist/cjs/rubric/observation.js.map +1 -0
  232. package/dist/cjs/rubric/pingLink.d.ts +45 -0
  233. package/dist/cjs/rubric/pingLink.d.ts.map +1 -0
  234. package/dist/cjs/rubric/pingLink.js +74 -0
  235. package/dist/cjs/rubric/pingLink.js.map +1 -0
  236. package/dist/cjs/rubric/pingMatch.d.ts +73 -0
  237. package/dist/cjs/rubric/pingMatch.d.ts.map +1 -0
  238. package/dist/cjs/rubric/pingMatch.js +65 -0
  239. package/dist/cjs/rubric/pingMatch.js.map +1 -0
  240. package/dist/cjs/rubric/survey.d.ts +65 -0
  241. package/dist/cjs/rubric/survey.d.ts.map +1 -0
  242. package/dist/cjs/rubric/survey.js +101 -0
  243. package/dist/cjs/rubric/survey.js.map +1 -0
  244. package/dist/cjs/rubric/terms.d.ts +15 -0
  245. package/dist/cjs/rubric/terms.d.ts.map +1 -1
  246. package/dist/cjs/rubric/terms.js +14 -1
  247. package/dist/cjs/rubric/terms.js.map +1 -1
  248. package/dist/cjs/rubric.d.ts +1 -1
  249. package/dist/cjs/rubric.d.ts.map +1 -1
  250. package/dist/cjs/rubric.js +4 -2
  251. package/dist/cjs/rubric.js.map +1 -1
  252. package/dist/esm/campaign/campaign.js +4 -3
  253. package/dist/esm/campaign/campaign.js.map +1 -1
  254. package/dist/esm/campaign/funding.d.ts.map +1 -1
  255. package/dist/esm/campaign/funding.js +3 -0
  256. package/dist/esm/campaign/funding.js.map +1 -1
  257. package/dist/esm/campaign/pool.d.ts.map +1 -1
  258. package/dist/esm/campaign/pool.js +2 -1
  259. package/dist/esm/campaign/pool.js.map +1 -1
  260. package/dist/esm/campaign/spots.d.ts.map +1 -1
  261. package/dist/esm/campaign/spots.js +8 -6
  262. package/dist/esm/campaign/spots.js.map +1 -1
  263. package/dist/esm/chain/ask.d.ts +104 -14
  264. package/dist/esm/chain/ask.d.ts.map +1 -1
  265. package/dist/esm/chain/ask.js +152 -80
  266. package/dist/esm/chain/ask.js.map +1 -1
  267. package/dist/esm/chain/askImage.d.ts +19 -0
  268. package/dist/esm/chain/askImage.d.ts.map +1 -0
  269. package/dist/esm/chain/askImage.js +50 -0
  270. package/dist/esm/chain/askImage.js.map +1 -0
  271. package/dist/esm/chain/bridge.d.ts +7 -33
  272. package/dist/esm/chain/bridge.d.ts.map +1 -1
  273. package/dist/esm/chain/bridge.js +10 -24
  274. package/dist/esm/chain/bridge.js.map +1 -1
  275. package/dist/esm/chain/claimSubmit.d.ts +15 -0
  276. package/dist/esm/chain/claimSubmit.d.ts.map +1 -0
  277. package/dist/esm/chain/claimSubmit.js +10 -0
  278. package/dist/esm/chain/claimSubmit.js.map +1 -0
  279. package/dist/esm/chain/delegate.d.ts +52 -7
  280. package/dist/esm/chain/delegate.d.ts.map +1 -1
  281. package/dist/esm/chain/delegate.js +64 -13
  282. package/dist/esm/chain/delegate.js.map +1 -1
  283. package/dist/esm/chain/domainIndexer.d.ts +26 -0
  284. package/dist/esm/chain/domainIndexer.d.ts.map +1 -0
  285. package/dist/esm/chain/domainIndexer.js +48 -0
  286. package/dist/esm/chain/domainIndexer.js.map +1 -0
  287. package/dist/esm/chain/entityShape.d.ts +233 -0
  288. package/dist/esm/chain/entityShape.d.ts.map +1 -0
  289. package/dist/esm/chain/entityShape.js +231 -0
  290. package/dist/esm/chain/entityShape.js.map +1 -0
  291. package/dist/esm/chain/env.d.ts +103 -6
  292. package/dist/esm/chain/env.d.ts.map +1 -1
  293. package/dist/esm/chain/env.js +174 -12
  294. package/dist/esm/chain/env.js.map +1 -1
  295. package/dist/esm/chain/guest.d.ts +14 -0
  296. package/dist/esm/chain/guest.d.ts.map +1 -1
  297. package/dist/esm/chain/guest.js +7 -8
  298. package/dist/esm/chain/guest.js.map +1 -1
  299. package/dist/esm/chain/money.d.ts +47 -2
  300. package/dist/esm/chain/money.d.ts.map +1 -1
  301. package/dist/esm/chain/money.js +54 -4
  302. package/dist/esm/chain/money.js.map +1 -1
  303. package/dist/esm/chain/orgReviewBilling.d.ts +124 -0
  304. package/dist/esm/chain/orgReviewBilling.d.ts.map +1 -0
  305. package/dist/esm/chain/orgReviewBilling.js +241 -0
  306. package/dist/esm/chain/orgReviewBilling.js.map +1 -0
  307. package/dist/esm/chain/orgReviewBillingSign.d.ts +63 -0
  308. package/dist/esm/chain/orgReviewBillingSign.d.ts.map +1 -0
  309. package/dist/esm/chain/orgReviewBillingSign.js +124 -0
  310. package/dist/esm/chain/orgReviewBillingSign.js.map +1 -0
  311. package/dist/esm/chain/payoutSettings.d.ts +97 -0
  312. package/dist/esm/chain/payoutSettings.d.ts.map +1 -0
  313. package/dist/esm/chain/payoutSettings.js +111 -0
  314. package/dist/esm/chain/payoutSettings.js.map +1 -0
  315. package/dist/esm/chain/payoutTerms.d.ts +72 -0
  316. package/dist/esm/chain/payoutTerms.d.ts.map +1 -0
  317. package/dist/esm/chain/payoutTerms.js +127 -0
  318. package/dist/esm/chain/payoutTerms.js.map +1 -0
  319. package/dist/esm/chain/query.d.ts +14 -0
  320. package/dist/esm/chain/query.d.ts.map +1 -1
  321. package/dist/esm/chain/query.js +25 -0
  322. package/dist/esm/chain/query.js.map +1 -1
  323. package/dist/esm/chain/reviewBilling.d.ts +86 -0
  324. package/dist/esm/chain/reviewBilling.d.ts.map +1 -0
  325. package/dist/esm/chain/reviewBilling.js +215 -0
  326. package/dist/esm/chain/reviewBilling.js.map +1 -0
  327. package/dist/esm/chain/store.d.ts +7 -6
  328. package/dist/esm/chain/store.d.ts.map +1 -1
  329. package/dist/esm/chain/store.js +7 -6
  330. package/dist/esm/chain/store.js.map +1 -1
  331. package/dist/esm/chain/subscription.d.ts +0 -7
  332. package/dist/esm/chain/subscription.d.ts.map +1 -1
  333. package/dist/esm/chain/subscription.js +4 -13
  334. package/dist/esm/chain/subscription.js.map +1 -1
  335. package/dist/esm/chain/takeBack.d.ts +12 -0
  336. package/dist/esm/chain/takeBack.d.ts.map +1 -1
  337. package/dist/esm/chain/takeBack.js +22 -9
  338. package/dist/esm/chain/takeBack.js.map +1 -1
  339. package/dist/esm/chain/why.d.ts +44 -0
  340. package/dist/esm/chain/why.d.ts.map +1 -0
  341. package/dist/esm/chain/why.js +111 -0
  342. package/dist/esm/chain/why.js.map +1 -0
  343. package/dist/esm/chain/whyMint.d.ts +8 -0
  344. package/dist/esm/chain/whyMint.d.ts.map +1 -0
  345. package/dist/esm/chain/whyMint.js +17 -0
  346. package/dist/esm/chain/whyMint.js.map +1 -0
  347. package/dist/esm/chain.d.ts +8 -4
  348. package/dist/esm/chain.d.ts.map +1 -1
  349. package/dist/esm/chain.js +9 -4
  350. package/dist/esm/chain.js.map +1 -1
  351. package/dist/esm/config.d.ts +37 -5
  352. package/dist/esm/config.d.ts.map +1 -1
  353. package/dist/esm/config.js +9 -3
  354. package/dist/esm/config.js.map +1 -1
  355. package/dist/esm/data/agent.d.ts.map +1 -1
  356. package/dist/esm/data/agent.js +5 -4
  357. package/dist/esm/data/agent.js.map +1 -1
  358. package/dist/esm/data/askEntity.d.ts +40 -0
  359. package/dist/esm/data/askEntity.d.ts.map +1 -0
  360. package/dist/esm/data/askEntity.js +41 -0
  361. package/dist/esm/data/askEntity.js.map +1 -0
  362. package/dist/esm/data/askLinks.d.ts +6 -0
  363. package/dist/esm/data/askLinks.d.ts.map +1 -0
  364. package/dist/esm/data/askLinks.js +16 -0
  365. package/dist/esm/data/askLinks.js.map +1 -0
  366. package/dist/esm/data/board/assemble.d.ts.map +1 -1
  367. package/dist/esm/data/board/assemble.js +15 -2
  368. package/dist/esm/data/board/assemble.js.map +1 -1
  369. package/dist/esm/data/board/facts.d.ts +11 -0
  370. package/dist/esm/data/board/facts.d.ts.map +1 -1
  371. package/dist/esm/data/board/facts.js +15 -0
  372. package/dist/esm/data/board/facts.js.map +1 -1
  373. package/dist/esm/data/board/read.d.ts.map +1 -1
  374. package/dist/esm/data/board/read.js +2 -1
  375. package/dist/esm/data/board/read.js.map +1 -1
  376. package/dist/esm/data/board/types.d.ts +9 -0
  377. package/dist/esm/data/board/types.d.ts.map +1 -1
  378. package/dist/esm/data/board/types.js.map +1 -1
  379. package/dist/esm/data/docs.d.ts +10 -2
  380. package/dist/esm/data/docs.d.ts.map +1 -1
  381. package/dist/esm/data/docs.js +43 -4
  382. package/dist/esm/data/docs.js.map +1 -1
  383. package/dist/esm/data/format.js +1 -1
  384. package/dist/esm/data/format.js.map +1 -1
  385. package/dist/esm/data/install.d.ts +8 -0
  386. package/dist/esm/data/install.d.ts.map +1 -1
  387. package/dist/esm/data/install.js +8 -0
  388. package/dist/esm/data/install.js.map +1 -1
  389. package/dist/esm/data/oracleInfo.d.ts +6 -1
  390. package/dist/esm/data/oracleInfo.d.ts.map +1 -1
  391. package/dist/esm/data/oracleInfo.js +22 -3
  392. package/dist/esm/data/oracleInfo.js.map +1 -1
  393. package/dist/esm/data/oracles.d.ts +62 -5
  394. package/dist/esm/data/oracles.d.ts.map +1 -1
  395. package/dist/esm/data/oracles.js +87 -12
  396. package/dist/esm/data/oracles.js.map +1 -1
  397. package/dist/esm/data/orgPayouts.d.ts +87 -0
  398. package/dist/esm/data/orgPayouts.d.ts.map +1 -0
  399. package/dist/esm/data/orgPayouts.js +170 -0
  400. package/dist/esm/data/orgPayouts.js.map +1 -0
  401. package/dist/esm/data/plans.d.ts +8 -0
  402. package/dist/esm/data/plans.d.ts.map +1 -0
  403. package/dist/esm/data/plans.js +8 -0
  404. package/dist/esm/data/plans.js.map +1 -0
  405. package/dist/esm/data/profiles.d.ts +20 -0
  406. package/dist/esm/data/profiles.d.ts.map +1 -1
  407. package/dist/esm/data/profiles.js +60 -4
  408. package/dist/esm/data/profiles.js.map +1 -1
  409. package/dist/esm/data/queue.d.ts.map +1 -1
  410. package/dist/esm/data/queue.js +3 -2
  411. package/dist/esm/data/queue.js.map +1 -1
  412. package/dist/esm/data/receipt.d.ts +7 -0
  413. package/dist/esm/data/receipt.d.ts.map +1 -1
  414. package/dist/esm/data/receipt.js +26 -7
  415. package/dist/esm/data/receipt.js.map +1 -1
  416. package/dist/esm/data/resources.d.ts +3 -0
  417. package/dist/esm/data/resources.d.ts.map +1 -1
  418. package/dist/esm/data/resources.js +2 -0
  419. package/dist/esm/data/resources.js.map +1 -1
  420. package/dist/esm/data/threads.d.ts +14 -0
  421. package/dist/esm/data/threads.d.ts.map +1 -1
  422. package/dist/esm/data/threads.js +40 -24
  423. package/dist/esm/data/threads.js.map +1 -1
  424. package/dist/esm/data/trace.d.ts +8 -0
  425. package/dist/esm/data/trace.d.ts.map +1 -1
  426. package/dist/esm/data/trace.js +1 -1
  427. package/dist/esm/data/trace.js.map +1 -1
  428. package/dist/esm/data/traceWords.d.ts +4 -1
  429. package/dist/esm/data/traceWords.d.ts.map +1 -1
  430. package/dist/esm/data/traceWords.js +8 -2
  431. package/dist/esm/data/traceWords.js.map +1 -1
  432. package/dist/esm/data/why.d.ts +38 -0
  433. package/dist/esm/data/why.d.ts.map +1 -0
  434. package/dist/esm/data/why.js +78 -0
  435. package/dist/esm/data/why.js.map +1 -0
  436. package/dist/esm/data/whyReceipt.d.ts +33 -0
  437. package/dist/esm/data/whyReceipt.d.ts.map +1 -0
  438. package/dist/esm/data/whyReceipt.js +284 -0
  439. package/dist/esm/data/whyReceipt.js.map +1 -0
  440. package/dist/esm/geo/exifcarry.d.ts +9 -0
  441. package/dist/esm/geo/exifcarry.d.ts.map +1 -1
  442. package/dist/esm/geo/exifcarry.js +34 -0
  443. package/dist/esm/geo/exifcarry.js.map +1 -1
  444. package/dist/esm/geo/geohash.d.ts +25 -0
  445. package/dist/esm/geo/geohash.d.ts.map +1 -0
  446. package/dist/esm/geo/geohash.js +109 -0
  447. package/dist/esm/geo/geohash.js.map +1 -0
  448. package/dist/esm/geo/provenance.d.ts +41 -0
  449. package/dist/esm/geo/provenance.d.ts.map +1 -0
  450. package/dist/esm/geo/provenance.js +129 -0
  451. package/dist/esm/geo/provenance.js.map +1 -0
  452. package/dist/esm/rubric/bridge.d.ts +98 -2
  453. package/dist/esm/rubric/bridge.d.ts.map +1 -1
  454. package/dist/esm/rubric/bridge.js +130 -14
  455. package/dist/esm/rubric/bridge.js.map +1 -1
  456. package/dist/esm/rubric/card.d.ts +28 -14
  457. package/dist/esm/rubric/card.d.ts.map +1 -1
  458. package/dist/esm/rubric/card.js +24 -5
  459. package/dist/esm/rubric/card.js.map +1 -1
  460. package/dist/esm/rubric/claimForm.d.ts +116 -0
  461. package/dist/esm/rubric/claimForm.d.ts.map +1 -1
  462. package/dist/esm/rubric/claimForm.js +11 -0
  463. package/dist/esm/rubric/claimForm.js.map +1 -1
  464. package/dist/esm/rubric/compose.d.ts +5 -0
  465. package/dist/esm/rubric/compose.d.ts.map +1 -1
  466. package/dist/esm/rubric/compose.js +7 -2
  467. package/dist/esm/rubric/compose.js.map +1 -1
  468. package/dist/esm/rubric/gateMet.d.ts.map +1 -1
  469. package/dist/esm/rubric/gateMet.js +4 -2
  470. package/dist/esm/rubric/gateMet.js.map +1 -1
  471. package/dist/esm/rubric/leg.d.ts +2 -2
  472. package/dist/esm/rubric/leg.d.ts.map +1 -1
  473. package/dist/esm/rubric/leg.js +7 -5
  474. package/dist/esm/rubric/leg.js.map +1 -1
  475. package/dist/esm/rubric/marketPlan.d.ts +182 -0
  476. package/dist/esm/rubric/marketPlan.d.ts.map +1 -0
  477. package/dist/esm/rubric/marketPlan.js +403 -0
  478. package/dist/esm/rubric/marketPlan.js.map +1 -0
  479. package/dist/esm/rubric/observation.d.ts +95 -0
  480. package/dist/esm/rubric/observation.d.ts.map +1 -0
  481. package/dist/esm/rubric/observation.js +82 -0
  482. package/dist/esm/rubric/observation.js.map +1 -0
  483. package/dist/esm/rubric/pingLink.d.ts +45 -0
  484. package/dist/esm/rubric/pingLink.d.ts.map +1 -0
  485. package/dist/esm/rubric/pingLink.js +69 -0
  486. package/dist/esm/rubric/pingLink.js.map +1 -0
  487. package/dist/esm/rubric/pingMatch.d.ts +73 -0
  488. package/dist/esm/rubric/pingMatch.d.ts.map +1 -0
  489. package/dist/esm/rubric/pingMatch.js +60 -0
  490. package/dist/esm/rubric/pingMatch.js.map +1 -0
  491. package/dist/esm/rubric/survey.d.ts +65 -0
  492. package/dist/esm/rubric/survey.d.ts.map +1 -0
  493. package/dist/esm/rubric/survey.js +94 -0
  494. package/dist/esm/rubric/survey.js.map +1 -0
  495. package/dist/esm/rubric/terms.d.ts +15 -0
  496. package/dist/esm/rubric/terms.d.ts.map +1 -1
  497. package/dist/esm/rubric/terms.js +14 -2
  498. package/dist/esm/rubric/terms.js.map +1 -1
  499. package/dist/esm/rubric.d.ts +1 -1
  500. package/dist/esm/rubric.d.ts.map +1 -1
  501. package/dist/esm/rubric.js +1 -1
  502. package/dist/esm/rubric.js.map +1 -1
  503. package/package.json +8 -2
@@ -0,0 +1,419 @@
1
+ "use strict";
2
+ /**
3
+ * Ask the World: a prediction market turned into a plan of checks people can
4
+ * do in public places (docs/verified-work-ask-the-world-plan.md).
5
+ *
6
+ * A **plan** is a frozen document: the market it informs, the checks, where
7
+ * each happens and how many answers each place buys, what each check beats,
8
+ * and one line on what the plan cannot tell you. It is written once, stored
9
+ * at a content address, and named by every ask it spawns (`terms.plan`), so
10
+ * the report can be rebuilt from the chain alone. The asks are filed under
11
+ * one tag, `plan-<slug>`, the way a call's legs are filed under `call-<slug>`.
12
+ *
13
+ * The agent that calls the MCP is the one that reads the market and drafts
14
+ * the checks; this module never guesses them. What it does is refuse what
15
+ * must never be bought (the **market screen**), check that a draft is whole
16
+ * (`validatePlan`), and price it (`planCost`). All pure, so the MCP, the
17
+ * worker and the app agree on one answer.
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.askQuestionFor = exports.readMarketPlan = exports.validatePlan = exports.askOverrun = exports.screenCheck = exports.screenMarket = exports.planCost = exports.planAnswerCount = exports.planAskCount = exports.PLAN_LIMITS = exports.MARKET_PLAN_KIND = exports.PLAN_ACTS = exports.planSlug = exports.slugOfPlanTag = exports.planFundingMemo = exports.planTag = void 0;
21
+ const survey_ts_1 = require("./survey.js");
22
+ /** The tag every ask of a plan is filed under. No colon: a tag is `[a-z0-9-]`. */
23
+ const planTag = (slug) => `plan-${slug}`;
24
+ exports.planTag = planTag;
25
+ /**
26
+ * The memo a plan's funding carries: the slug for anyone reading the chain,
27
+ * and the document's address so the money can be spent on that document
28
+ * only. A slug is a free string inside whichever document a registrant
29
+ * names, so a memo that carried the slug alone would let a second document
30
+ * with the same slug claim the funding; the address is the hash of the bytes
31
+ * and names exactly one plan.
32
+ */
33
+ const planFundingMemo = (slug, cid) => `plan:${slug} ${cid}`;
34
+ exports.planFundingMemo = planFundingMemo;
35
+ /** The slug back out of a tag, or null when the tag is not a plan's. */
36
+ const slugOfPlanTag = (tag) => {
37
+ const match = /^plan-([a-z][a-z0-9-]{2,39})$/.exec(tag ?? "");
38
+ return match ? match[1] : null;
39
+ };
40
+ exports.slugOfPlanTag = slugOfPlanTag;
41
+ /** A slug from free text: lowercase words joined by dashes, 3–40 characters, starting with a letter. */
42
+ const planSlug = (text, suffix = "") => {
43
+ const words = text
44
+ .toLowerCase()
45
+ .normalize("NFKD")
46
+ .replace(/[̀-ͯ]/g, "")
47
+ .replace(/[^a-z0-9]+/g, "-")
48
+ .replace(/^-+|-+$/g, "");
49
+ const start = words.replace(/^[^a-z]+/, "") || "plan";
50
+ const tail = suffix ? `-${suffix}` : "";
51
+ const room = 40 - tail.length;
52
+ const body = start.slice(0, room).replace(/-+$/, "");
53
+ return `${body.length >= 3 ? body : `plan-${body}`.slice(0, room)}${tail}`;
54
+ };
55
+ exports.planSlug = planSlug;
56
+ /**
57
+ * photo: a picture taken at the place. observation: what the person saw, in
58
+ * words, located by their phone. survey: what people at the place think, one
59
+ * option of a few, a reason, and what they expect most people to say
60
+ * (rubric/survey.ts) — for markets where the signal is a crowd's opinion, not
61
+ * something to look at.
62
+ */
63
+ exports.PLAN_ACTS = ["photo", "observation", "survey"];
64
+ exports.MARKET_PLAN_KIND = "openhands.market-plan";
65
+ /** The limits a plan is held to. The per-ask cap and the per-plan cap are the MCP's; these are shape. */
66
+ exports.PLAN_LIMITS = {
67
+ checks: 12,
68
+ placesPerCheck: 20,
69
+ asksPerPlan: 120,
70
+ perPlace: 10,
71
+ /** A survey asks more people at each place: one opinion is no signal. */
72
+ surveyPerPlace: 50,
73
+ /** The plan's thesis: a few sentences at most. */
74
+ thesisMax: 600,
75
+ textMin: 12,
76
+ textMax: 300,
77
+ withinMin: 20,
78
+ withinMax: 20_000,
79
+ hoursMin: 1,
80
+ hoursMax: 720,
81
+ /** The smallest pay worth a person's walk, in dollars. */
82
+ payFloorUsd: 0.05,
83
+ lineMin: 8,
84
+ lineMax: 240,
85
+ };
86
+ /** How many asks a plan posts: one per place per check. */
87
+ const planAskCount = (plan) => plan.checks.reduce((n, check) => n + check.places.length, 0);
88
+ exports.planAskCount = planAskCount;
89
+ /** How many answers a plan buys at most. */
90
+ const planAnswerCount = (plan) => plan.checks.reduce((n, check) => n + check.places.length * check.perPlace, 0);
91
+ exports.planAnswerCount = planAnswerCount;
92
+ /** Cents, so totals add the way a person adds them. */
93
+ const cents = (usd) => Math.round(usd * 100) / 100;
94
+ /**
95
+ * Price a plan: every answer it can buy costs its pay plus the review of that
96
+ * answer (the oracle's check reward), and the fee is a share of that work.
97
+ */
98
+ const planCost = (plan, opts) => {
99
+ const lines = plan.checks.map((check) => {
100
+ const answers = check.places.length * check.perPlace;
101
+ /* The review is priced per check: a photo is screened, a sentence is not, so the two cost differently. */
102
+ const reviewUsd = typeof opts.reviewUsd === "function" ? opts.reviewUsd(check) : opts.reviewUsd;
103
+ return { id: check.id, answers, payUsd: check.payUsd, reviewUsd, totalUsd: cents(answers * (check.payUsd + reviewUsd)) };
104
+ });
105
+ const workUsd = cents(lines.reduce((sum, line) => sum + line.totalUsd, 0));
106
+ const feeUsd = cents(workUsd * Math.max(0, opts.feeRate));
107
+ return { lines, workUsd, feeUsd, totalUsd: cents(workUsd + feeUsd) };
108
+ };
109
+ exports.planCost = planCost;
110
+ /*
111
+ * The market screen. Each list is a set of words that, found in a check or a
112
+ * market, mean the thing must not be bought. They are deliberately broad: a
113
+ * plan refused for a word that was innocent costs the agent one redraft; a
114
+ * plan that slips through can cost a person their safety or the network its
115
+ * standing. The refusal names the rule so the redraft is easy.
116
+ */
117
+ /** Sport and esports markets settled by play. A person at the venue is courtsiding, whatever they look at. */
118
+ const SPORT = [
119
+ /\bvs\.?\b/i,
120
+ /\bwin on \d{4}-\d{2}-\d{2}\b/i,
121
+ /\bo\/u\b/i,
122
+ /\bover\/under\b/i,
123
+ /\bspread:/i,
124
+ /\bhandicap\b/i,
125
+ /\bmap handicap\b/i,
126
+ /\bgame \d\b/i,
127
+ /\b(bo3|bo5)\b/i,
128
+ /\b(league|cup|open|championship|grand prix|playoffs?|super bowl|world series|stanley cup|nba finals)\b.*\b(win|winner|beat|score|goals?|points|sets?|maps?)\b/i,
129
+ /\b(counter-strike|dota|league of legends|lol:|valorant|esports?)\b/i,
130
+ ];
131
+ /** Places where nobody should be sent to look, whatever the money. */
132
+ const CONFLICT = [
133
+ /\biran\b/i,
134
+ /\bisrael\b/i,
135
+ /\bgaza\b/i,
136
+ /\bwest bank\b/i,
137
+ /\blebanon\b/i,
138
+ /\byemen\b/i,
139
+ /\bsyria\b/i,
140
+ /\bsudan\b/i,
141
+ /\bukrain/i,
142
+ /\brussia\b/i,
143
+ /\bhormuz\b/i,
144
+ /\bkharg\b/i,
145
+ /\bred sea\b/i,
146
+ /\btaiwan strait\b/i,
147
+ /\bceasefire\b/i,
148
+ /\bblockade\b/i,
149
+ /\binvade|invasion\b/i,
150
+ ];
151
+ /** Polling places: the law differs by state and by distance, and the network does not litigate it per ask. */
152
+ const POLLING = [/\bpolling (place|station|site|location)s?\b/i, /\bvoting (booth|centre|center|location)s?\b/i, /\bballot\b/i, /\bvoters?\b/i];
153
+ /** The thing that settles a market: never visit, touch or photograph it. A bare "sensor" is read by `instrumentSensor` below. */
154
+ const SOURCE = [
155
+ /\b(?:weather|temperature|rain(?:fall)?|air[- ]quality|pollution|flood|water[- ]level|river|tide|wind|snow|seismic|traffic|noise|humidity)\s+(?:[\w-]+\s+)?sensors?\b/i,
156
+ /\bweather station\b/i,
157
+ /\bthermometer\b/i,
158
+ /\b(rain|river|stream|tide|snow) gauge\b/i,
159
+ /\bgauge\b/i,
160
+ /\bofficial (count|counter|tally|scoreboard|reading)\b/i,
161
+ /\bcounting (room|centre|center)\b/i,
162
+ /\btally\b/i,
163
+ /\bscoreboard\b/i,
164
+ ];
165
+ /**
166
+ * A sensor is an instrument that may settle a market, unless the check
167
+ * plainly says it is a vehicle's own: the spinning sensor on a robotaxi's
168
+ * roof is how a person tells a Waymo from a taxi, and it settles nothing.
169
+ * The measuring kinds (weather, rain, river, traffic…) are in SOURCE and
170
+ * refuse whatever they are bolted to.
171
+ */
172
+ const VEHICLE = /\b(?:cars?|vehicles?|robotaxis?|taxis?|cabs?|vans?|trucks?|bus|buses|waymos?|zoox|teslas?)\b/i;
173
+ const VEHICLE_SENSOR = new RegExp([
174
+ /* the car's sensor, a Waymo's spinning sensor */
175
+ /\b(?:car|vehicle|robotaxi|taxi|cab|van|truck|bus|waymo|zoox|tesla)(?:['\u2019]s|s['\u2019]|s)?\s+(?:(?:lidar|roof|rooftop|roof-mounted|spinning|rotating|parking)\s+)?sensors?\b/,
176
+ /* a spinning sensor, the lidar sensor */
177
+ /\b(?:lidar|roof|rooftop|roof-mounted|spinning|rotating)\s+sensors?\b/,
178
+ /* a sensor on the roof, sensors on each car */
179
+ /\bsensors?\s+(?:on|atop|on top of|mounted on)\s+(?:the|its|their|a|an|each|every)\s+(?:[\w-]+\s+)?(?:roofs?|cars?|vehicles?|robotaxis?|taxis?|cabs?|vans?|trucks?|bus|buses)\b/
180
+ ]
181
+ .map((pattern) => pattern.source)
182
+ .join("|"), "gi");
183
+ const instrumentSensor = (text) => /\bsensors?\b/i.test(VEHICLE.test(text) ? text.replace(VEHICLE_SENSOR, "") : text);
184
+ /** Acts that change the world the market is about. A check looks; it never moves the outcome. */
185
+ const ACTS = [
186
+ /\bvote\b/i,
187
+ /\b(bet|wager)\b/i,
188
+ /\bprotest\b/i,
189
+ /\bblock(ade)?\b/i,
190
+ /\bsabotage\b/i,
191
+ /\bdamage\b/i,
192
+ /\bdeface\b/i,
193
+ /\bdestroy\b/i,
194
+ /\bremove the\b/i,
195
+ /\bbribe\b/i,
196
+ /\bthreaten\b/i,
197
+ /\bpersuade\b/i,
198
+ /\bconvince\b/i,
199
+ /\blobby\b/i,
200
+ /\binfluence\b/i,
201
+ /\bcampaign for\b/i,
202
+ ];
203
+ /** Places a person has no right to be, and information only an insider has. */
204
+ const PRIVATE = [
205
+ /\bbehind the counter\b/i,
206
+ /\bbackstage\b/i,
207
+ /\bstaff[- ]only\b/i,
208
+ /\brestricted (area|zone)\b/i,
209
+ /\bprivate (property|land|area|office)\b/i,
210
+ /\binside the (office|factory|warehouse|plant)\b/i,
211
+ /\bask (an? )?(employee|staff member|manager|worker) (for|about|what)\b/i,
212
+ /\binternal (numbers|figures|data|memo)\b/i,
213
+ /\bconfidential\b/i,
214
+ /\btrespass/i,
215
+ ];
216
+ /** Faces and anything that identifies a person. */
217
+ const FACES = [/(?<!\bno )\bfaces?\b/i, /\bselfie\b/i, /\bportrait\b/i, /\bidentify (the|a|who)\b/i, /\b(licen[cs]e|number) plates?\b/i, /\bwho (is|was) (inside|driving|in the)\b/i];
218
+ /** Photos of these need to say they take no faces. */
219
+ const CROWD = [/\bqueue\b/i, /\bline (of|outside|at)\b/i, /\bcrowd\b/i, /\bpeople\b/i, /\bshoppers\b/i, /\bcustomers\b/i, /\briders?\b/i, /\bpassengers?\b/i];
220
+ const NO_FACES = /\bno faces\b/i;
221
+ /**
222
+ * What a survey must never ask a person about themselves: the special
223
+ * categories of personal data (political opinion and how they vote,
224
+ * religion, health, sex life, ethnicity, union membership), which no plan
225
+ * buys from a stranger tied to their address and their location.
226
+ */
227
+ const SENSITIVE = [
228
+ /\b(vote|votes|voting|voted|ballot|elect(ion|ed|ions)?|candidate|referendum)\b/i,
229
+ /\b(polit\w*|part(y|ies)|republican|democrat|conservative|liberal|left[- ]wing|right[- ]wing)\b/i,
230
+ /\b(relig\w*|church|mosque|synagogue|temple|faith|pray\w*)\b/i,
231
+ /\b(health|illness|disease|diagnos\w*|medical|medication|pregnan\w*|disabilit\w*|mental)\b/i,
232
+ /\b(sexual\w*|sex life|gay|lesbian|transgender|orientation)\b/i,
233
+ /\b(race|racial|ethnic\w*|immigra\w*|citizenship|union member\w*)\b/i
234
+ ];
235
+ const hit = (patterns, text) => patterns.some((pattern) => pattern.test(text));
236
+ /** The market as one string the screen reads. */
237
+ const marketText = (market) => [market.question, market.rules ?? ""].join("\n");
238
+ /** The place names of a check, as one string. */
239
+ const placeText = (check) => check.places.map((place) => place.name).join("\n");
240
+ /** Refusals for the market as a whole: a sports market or a conflict market is never scoped. */
241
+ const screenMarket = (market) => {
242
+ const refusals = [];
243
+ if (hit(SPORT, market.question)) {
244
+ refusals.push({ rule: "in-play-sport", check: null, why: "This market is settled by play. Sending people to a venue to report it is courtsiding, so the network does not scope sports markets." });
245
+ }
246
+ if (hit(CONFLICT, market.question)) {
247
+ refusals.push({ rule: "conflict-zone", check: null, why: "This market is about a conflict. The network sends nobody to look where looking can get them hurt." });
248
+ }
249
+ return refusals;
250
+ };
251
+ exports.screenMarket = screenMarket;
252
+ /** Refusals for one check, read against the market it informs. */
253
+ const screenCheck = (check) => {
254
+ const refusals = [];
255
+ const text = check.text;
256
+ const where = placeText(check);
257
+ const id = check.id;
258
+ if (hit(CONFLICT, where)) {
259
+ refusals.push({ rule: "conflict-zone", check: id, why: "A place in this check is in a conflict area. Choose a place where looking is safe." });
260
+ }
261
+ if (hit(POLLING, `${text}\n${where}`)) {
262
+ refusals.push({ rule: "polling-place", check: id, why: "Polling places are refused: what may be recorded near one differs by state and distance." });
263
+ }
264
+ if (hit(SOURCE, text) || instrumentSensor(text)) {
265
+ refusals.push({ rule: "resolution-source", check: id, why: "This check goes to an instrument or an official count. Never visit or photograph what settles a market." });
266
+ }
267
+ if (hit(ACTS, text)) {
268
+ refusals.push({ rule: "acts-on-outcome", check: id, why: "This check asks the person to do something that could change the outcome. A check only looks." });
269
+ }
270
+ if (hit(PRIVATE, text)) {
271
+ refusals.push({ rule: "non-public", check: id, why: "This check needs somewhere private or something only an insider knows. Ask only what anyone could see from a public place." });
272
+ }
273
+ if (hit(FACES, text)) {
274
+ refusals.push({ rule: "faces", check: id, why: "This check would record or identify a person. Ask for the thing, not the people." });
275
+ }
276
+ else if (check.act === "photo" && hit(CROWD, text) && !NO_FACES.test(text)) {
277
+ refusals.push({ rule: "faces", check: id, why: "A photo with people in it must say \"no faces\" in the check, so the person taking it frames it that way." });
278
+ }
279
+ if (check.act === "survey" && hit(SENSITIVE, [text, ...(check.options ?? [])].join("\n"))) {
280
+ refusals.push({
281
+ rule: "sensitive-survey",
282
+ check: id,
283
+ why: "A survey must not ask about politics or votes, religion, health, sexuality, ethnicity or union membership: sensitive personal data no plan buys from a stranger. Ask what people see, use or expect instead."
284
+ });
285
+ }
286
+ if (check.beats.trim().length < exports.PLAN_LIMITS.lineMin) {
287
+ refusals.push({ rule: "no-beats", check: id, why: "Say what existing feed this check improves on. A check that beats nothing is not worth buying." });
288
+ }
289
+ return refusals;
290
+ };
291
+ exports.screenCheck = screenCheck;
292
+ /** A check's words as every one of its asks carries them, spaces folded. */
293
+ const askWords = (check) => check.text.trim().replace(/\s+/g, " ");
294
+ /** What one place's ask adds after the words. */
295
+ const askAt = (place) => ` At ${place.name}.`;
296
+ /**
297
+ * How many characters a check's words run past what an ask can carry once a
298
+ * place is added after them, or 0 when they fit. Drafting refuses any overrun,
299
+ * so a stored plan is posted word for word.
300
+ */
301
+ const askOverrun = (check, place) => Math.max(0, askWords(check).length + askAt(place).length - exports.PLAN_LIMITS.textMax);
302
+ exports.askOverrun = askOverrun;
303
+ /** Refusals for the shape of one check: the numbers and lengths a plan must keep. */
304
+ const shapeOfCheck = (check) => {
305
+ const L = exports.PLAN_LIMITS;
306
+ const out = [];
307
+ const bad = (why) => out.push({ rule: "shape", check: check.id, why });
308
+ if (!exports.PLAN_ACTS.includes(check.act))
309
+ bad(`The act must be one of ${exports.PLAN_ACTS.join(", ")}.`);
310
+ const text = check.text.trim();
311
+ if (text.length < L.textMin || text.length > L.textMax)
312
+ bad(`The check's words must be ${L.textMin}–${L.textMax} characters.`);
313
+ else {
314
+ /* Words that fit alone can still overrun once a long place name follows them, and an overrun would be cut when posted. */
315
+ const named = check.places.filter((place) => place.name?.trim());
316
+ const worst = named.reduce((most, place) => (!most || (0, exports.askOverrun)(check, place) > (0, exports.askOverrun)(check, most) ? place : most), null);
317
+ const over = worst ? (0, exports.askOverrun)(check, worst) : 0;
318
+ if (worst && over > 0) {
319
+ bad(`Each ask adds "${askAt(worst).trim()}" after the words, which takes them ${over} characters past the ${L.textMax} an ask carries. Cut ${over} characters from the words, or shorten that place's name.`);
320
+ }
321
+ }
322
+ if (!check.places.length)
323
+ bad("A check needs at least one place.");
324
+ if (check.places.length > L.placesPerCheck)
325
+ bad(`A check holds at most ${L.placesPerCheck} places.`);
326
+ for (const place of check.places) {
327
+ if (!place.name?.trim())
328
+ bad("Every place needs a name a person recognises.");
329
+ if (!(Math.abs(place.lat) <= 90) || !(Math.abs(place.lon) <= 180) || (place.lat === 0 && place.lon === 0))
330
+ bad(`"${place.name}" has no usable coordinates.`);
331
+ if (!(place.withinM >= L.withinMin && place.withinM <= L.withinMax))
332
+ bad(`"${place.name}": the distance must be ${L.withinMin}–${L.withinMax} m.`);
333
+ }
334
+ const most = check.act === "survey" ? L.surveyPerPlace : L.perPlace;
335
+ if (!Number.isInteger(check.perPlace) || check.perPlace < 1 || check.perPlace > most)
336
+ bad(`Answers per place must be a whole number from 1 to ${most}.`);
337
+ if (check.act === "survey") {
338
+ const problem = (0, survey_ts_1.surveyOptionsProblem)(check.options);
339
+ if (problem)
340
+ bad(problem);
341
+ }
342
+ else if (check.options !== undefined)
343
+ bad("Only a survey has options.");
344
+ for (const [name, line] of [["why", check.why], ["how it is read", check.readAs]]) {
345
+ if (line !== undefined && (line.trim().length < L.lineMin || line.trim().length > L.lineMax))
346
+ bad(`The check's ${name} line is ${L.lineMin}–${L.lineMax} characters.`);
347
+ }
348
+ if (!(check.payUsd >= L.payFloorUsd))
349
+ bad(`The pay must be at least $${L.payFloorUsd.toFixed(2)} an answer.`);
350
+ if (!(check.hours >= L.hoursMin && check.hours <= L.hoursMax))
351
+ bad(`A check stays open ${L.hoursMin}–${L.hoursMax} hours.`);
352
+ if (check.beats.trim().length > L.lineMax)
353
+ bad(`What the check beats fits in ${L.lineMax} characters.`);
354
+ return out;
355
+ };
356
+ /**
357
+ * Everything wrong with a plan, in the order a person would fix it: the
358
+ * market first, then the plan's own shape, then each check. An empty list is
359
+ * a plan that may be stored and funded.
360
+ */
361
+ const validatePlan = (plan) => {
362
+ const L = exports.PLAN_LIMITS;
363
+ const refusals = [...(0, exports.screenMarket)(plan.market)];
364
+ const shape = (why) => refusals.push({ rule: "shape", check: null, why });
365
+ if (plan.kind !== exports.MARKET_PLAN_KIND || plan.v !== 1)
366
+ shape("This is not a version 1 plan.");
367
+ if (!(0, exports.slugOfPlanTag)((0, exports.planTag)(plan.slug)))
368
+ shape("The slug must be 3–40 characters of a–z, 0–9 and dashes, starting with a letter.");
369
+ if (!/^https?:\/\//.test(plan.market.url))
370
+ shape("The market needs its link.");
371
+ if (plan.market.question.trim().length < 8)
372
+ shape("The market needs its question.");
373
+ if (!plan.checks.length)
374
+ shape("A plan needs at least one check.");
375
+ if (plan.checks.length > L.checks)
376
+ shape(`A plan holds at most ${L.checks} checks.`);
377
+ if ((0, exports.planAskCount)(plan) > L.asksPerPlan)
378
+ shape(`A plan posts at most ${L.asksPerPlan} asks (one per place per check).`);
379
+ const ids = new Set();
380
+ for (const check of plan.checks) {
381
+ if (ids.has(check.id))
382
+ shape(`Two checks share the id ${check.id}.`);
383
+ ids.add(check.id);
384
+ }
385
+ if (plan.thesis !== undefined && (plan.thesis.trim().length < L.lineMin || plan.thesis.trim().length > L.thesisMax))
386
+ shape(`The thesis is ${L.lineMin}–${L.thesisMax} characters.`);
387
+ if (plan.cannotTell.trim().length < L.lineMin) {
388
+ refusals.push({ rule: "no-cannot-tell", check: null, why: "Say what this plan cannot tell the trader. A plan without its limit reads as a promise." });
389
+ }
390
+ for (const check of plan.checks)
391
+ refusals.push(...shapeOfCheck(check), ...(0, exports.screenCheck)(check));
392
+ return refusals;
393
+ };
394
+ exports.validatePlan = validatePlan;
395
+ /** A plan read back from the store, or null when the document is not a version 1 plan. */
396
+ const readMarketPlan = (doc) => {
397
+ if (!doc || typeof doc !== "object")
398
+ return null;
399
+ const plan = doc;
400
+ if (plan.kind !== exports.MARKET_PLAN_KIND || plan.v !== 1)
401
+ return null;
402
+ if (typeof plan.slug !== "string" || !plan.market || !Array.isArray(plan.checks) || typeof plan.cannotTell !== "string")
403
+ return null;
404
+ return plan;
405
+ };
406
+ exports.readMarketPlan = readMarketPlan;
407
+ /**
408
+ * The words the asks of one check carry: the check, then its place. Drafting
409
+ * refuses words that overrun beside any place (askOverrun), so the cut below
410
+ * only ever reaches a plan stored before that rule, and marks itself with "…".
411
+ */
412
+ const askQuestionFor = (check, place) => {
413
+ const text = askWords(check);
414
+ const at = askAt(place);
415
+ const room = exports.PLAN_LIMITS.textMax - at.length;
416
+ return (text.length > room ? `${text.slice(0, room - 1).trimEnd()}…` : text) + at;
417
+ };
418
+ exports.askQuestionFor = askQuestionFor;
419
+ //# sourceMappingURL=marketPlan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketPlan.js","sourceRoot":"","sources":["../../../src/rubric/marketPlan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ import { type AskTerms, type Gate } from "./terms.ts";
2
+ /**
3
+ * The terms of an observation bought from a stranger: what `ask_the_world`
4
+ * posts, and what every check of an Ask the World plan posts, so that the two
5
+ * can never drift apart (docs/verified-work-ask-the-world-plan.md, D2).
6
+ *
7
+ * An observation carries what its mode hands over (`modeGates`), then, when it
8
+ * is located, the place gate and the daylight falsifier (not on a survey),
9
+ * then the relevance judge.
10
+ *
11
+ * **No weather gate, on any mode.** It read only what the answer said about
12
+ * the weather, never the photograph, so it almost always passed on silence and
13
+ * a faker had only to leave the weather out. The oracle half was never built:
14
+ * its handler errors, an errored fact rejects (`ON_ERROR`), and every located
15
+ * photo claim was refused or held `unevaluated` (testnet #44040, 2026-10-15).
16
+ * The photograph screens (place, EXIF GPS, generated or real, duplicates,
17
+ * daylight, the judge) carry the weight. Asks already posted keep the gate in
18
+ * their frozen terms, so `terms.ts` and the bridge still read and translate
19
+ * it; the oracle passes it for them. The judge says its refusal
20
+ * first and the question last: the oracle fails any rule it cannot find proof
21
+ * for, so a sentence that never names its own failure reads as "prove it", and
22
+ * the question is a caller's 300 characters that the parser may cut. On a
23
+ * typed answer it also says what passes (`relevanceLine`).
24
+ */
25
+ export type ObservationMode = "observation" | "photo" | "url-check" | "survey";
26
+ export interface ObservationInput {
27
+ /** The real-world question, 12–300 characters. */
28
+ question: string;
29
+ mode: ObservationMode;
30
+ /** Where the answer must be taken. Null only for a url-check. */
31
+ centre: {
32
+ lat: number;
33
+ lon: number;
34
+ } | null;
35
+ /** How close, in metres. */
36
+ metres: number;
37
+ /** A label for the place, frozen beside the coordinates. Never the contract: the gate measures from lat/lon. */
38
+ place?: string | null;
39
+ /** Who rules, named in the terms so the ask is a contract about who decides. */
40
+ oracle: {
41
+ kind: "oracle";
42
+ address: string;
43
+ rewardUixo: number;
44
+ };
45
+ /** The tag the ask is filed under. */
46
+ tag?: string;
47
+ /** The content address of the plan this ask is one check of. */
48
+ plan?: string;
49
+ /** A survey's options (rubric/survey.ts). Required for a survey, ignored otherwise. */
50
+ options?: string[];
51
+ }
52
+ /**
53
+ * The relevance line every observation is judged on.
54
+ *
55
+ * **A typed answer is also told what passes.** "It's dry and the streetlights
56
+ * are working" answers "is it raining or dry, and are the street lights on?",
57
+ * and ask #44041 failed it anyway (2026-10-15; `TEXT_JUDGE_GUIDANCE` in
58
+ * `bridge.ts` has the rest). A line that only names its failures leaves "on"
59
+ * versus "working" to the model, so the typed modes say that any plain answer
60
+ * counts, in any words. It says nothing about every part being answered: that
61
+ * would be a new way to fail, and nobody has decided one. A photograph's line
62
+ * is the line it always was — its answer is the picture, not the words.
63
+ */
64
+ export declare const relevanceLine: (question: string, mode: ObservationMode) => string;
65
+ /**
66
+ * Terms in the parser's own key order, so they read back byte for byte:
67
+ * v, task, deliverable, campaign, plan, criteria, judge, via.
68
+ */
69
+ export declare function observationTerms(input: ObservationInput): AskTerms;
70
+ /**
71
+ * The gates an observation opens with: what its MODE hands over, never what
72
+ * its question says.
73
+ *
74
+ * These used to be `deriveTerms(question).criteria`, and `deriveTerms` reads a
75
+ * poster's title as the errand itself — "Write a haiku" wants twenty
76
+ * characters, "a photo of" wants an image. A question put to a stranger is not
77
+ * an errand's title, and reading it as one put gates on answers that could
78
+ * never pass them: "Is the photo booth at the station working today?" asked
79
+ * for a typed answer and demanded an image file a typed claim never carries
80
+ * (`file-type`, `max-bytes` on `$photo`, so every answer refused); "Is it
81
+ * raining in Ljubljana right now?" began like a question and so demanded forty
82
+ * characters of "No, it's dry."; a phrase in quotes became words the answer
83
+ * had to repeat; and a photo observation got the image gates only when its
84
+ * question happened to say "photo".
85
+ *
86
+ * So: every observation must hand something over. A photo carries the photo
87
+ * deliverable's own gates, whatever the question says. A url-check keeps the
88
+ * one thing `deriveTerms` was borrowed for (the ground-truth plan: "base url
89
+ * gates") — when its question names a site to check, the answer has to name
90
+ * it and report what it answered, and a fresh reading of it has to agree. A
91
+ * typed observation carries nothing more: the relevance judge reads the
92
+ * question, and it is the rule that can tell an answer from an evasion.
93
+ */
94
+ export declare function modeGates(question: string, mode: ObservationMode): Gate[];
95
+ //# sourceMappingURL=observation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observation.d.ts","sourceRoot":"","sources":["../../../src/rubric/observation.ts"],"names":[],"mappings":"AACA,OAAO,EAAoD,KAAK,QAAQ,EAAkB,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAExH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,OAAO,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE/E,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,eAAe,CAAC;IACtB,iEAAiE;IACjE,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5C,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,gHAAgH;IAChH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gFAAgF;IAChF,MAAM,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,GAAI,UAAU,MAAM,EAAE,MAAM,eAAe,KAAG,MAGsI,CAAC;AAE/M;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,QAAQ,CAuBlE;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,IAAI,EAAE,CAQzE"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.relevanceLine = void 0;
4
+ exports.observationTerms = observationTerms;
5
+ exports.modeGates = modeGates;
6
+ const survey_ts_1 = require("./survey.js");
7
+ const terms_ts_1 = require("./terms.js");
8
+ /**
9
+ * The relevance line every observation is judged on.
10
+ *
11
+ * **A typed answer is also told what passes.** "It's dry and the streetlights
12
+ * are working" answers "is it raining or dry, and are the street lights on?",
13
+ * and ask #44041 failed it anyway (2026-10-15; `TEXT_JUDGE_GUIDANCE` in
14
+ * `bridge.ts` has the rest). A line that only names its failures leaves "on"
15
+ * versus "working" to the model, so the typed modes say that any plain answer
16
+ * counts, in any words. It says nothing about every part being answered: that
17
+ * would be a new way to fail, and nobody has decided one. A photograph's line
18
+ * is the line it always was — its answer is the picture, not the words.
19
+ */
20
+ const relevanceLine = (question, mode) => mode === "photo"
21
+ ? `The answer addresses the question this ask asked. Fail this only if it answers something else, or is empty or evasive. The question: "${question}"`
22
+ : `The answer addresses the question this ask asked. A plain answer counts, in any words, however short. Fail this only if it answers something else, or is empty or evasive. The question: "${question}"`;
23
+ exports.relevanceLine = relevanceLine;
24
+ /**
25
+ * Terms in the parser's own key order, so they read back byte for byte:
26
+ * v, task, deliverable, campaign, plan, criteria, judge, via.
27
+ */
28
+ function observationTerms(input) {
29
+ const criteria = modeGates(input.question, input.mode).map((gate, index) => ({ id: `c${index + 1}`, kind: "measure", gate }));
30
+ if (input.centre) {
31
+ criteria.push({
32
+ id: `c${criteria.length + 1}`,
33
+ kind: "measure",
34
+ gate: { id: "within-radius", lat: input.centre.lat, lon: input.centre.lon, meters: input.metres, ...(input.place ? { place: input.place } : {}) }
35
+ });
36
+ /* An opinion is the same by day or night: a survey keeps the place, not the light. */
37
+ if (input.mode !== "survey")
38
+ criteria.push({ id: `c${criteria.length + 1}`, kind: "measure", gate: { id: "daylight-consistent" } });
39
+ }
40
+ const survey = input.mode === "survey" && input.options?.length ? input.options : null;
41
+ criteria.push({ id: `c${criteria.length + 1}`, kind: "judge", text: survey ? survey_ts_1.SURVEY_JUDGE_LINE : (0, exports.relevanceLine)(input.question, input.mode), confidence: terms_ts_1.DEFAULT_CONFIDENCE });
42
+ return {
43
+ v: 2,
44
+ task: input.question,
45
+ deliverable: { type: input.mode === "photo" ? "photo" : "text", prompt: input.question, ...(survey ? { choices: survey.map((one) => one.trim()) } : {}) },
46
+ ...(input.tag ? { campaign: input.tag } : {}),
47
+ ...(input.plan ? { plan: input.plan } : {}),
48
+ criteria,
49
+ judge: input.oracle,
50
+ via: "mcp"
51
+ };
52
+ }
53
+ /**
54
+ * The gates an observation opens with: what its MODE hands over, never what
55
+ * its question says.
56
+ *
57
+ * These used to be `deriveTerms(question).criteria`, and `deriveTerms` reads a
58
+ * poster's title as the errand itself — "Write a haiku" wants twenty
59
+ * characters, "a photo of" wants an image. A question put to a stranger is not
60
+ * an errand's title, and reading it as one put gates on answers that could
61
+ * never pass them: "Is the photo booth at the station working today?" asked
62
+ * for a typed answer and demanded an image file a typed claim never carries
63
+ * (`file-type`, `max-bytes` on `$photo`, so every answer refused); "Is it
64
+ * raining in Ljubljana right now?" began like a question and so demanded forty
65
+ * characters of "No, it's dry."; a phrase in quotes became words the answer
66
+ * had to repeat; and a photo observation got the image gates only when its
67
+ * question happened to say "photo".
68
+ *
69
+ * So: every observation must hand something over. A photo carries the photo
70
+ * deliverable's own gates, whatever the question says. A url-check keeps the
71
+ * one thing `deriveTerms` was borrowed for (the ground-truth plan: "base url
72
+ * gates") — when its question names a site to check, the answer has to name
73
+ * it and report what it answered, and a fresh reading of it has to agree. A
74
+ * typed observation carries nothing more: the relevance judge reads the
75
+ * question, and it is the rule that can tell an answer from an evasion.
76
+ */
77
+ function modeGates(question, mode) {
78
+ const gates = [{ id: "non-empty" }];
79
+ if (mode === "photo")
80
+ gates.push(...(0, terms_ts_1.deliverableGates)({ type: "photo", prompt: question }));
81
+ if (mode === "url-check") {
82
+ const match = (0, terms_ts_1.matchSkill)(question);
83
+ if (match?.skill === "url-check" && match.url)
84
+ gates.push({ id: "mentions-url", url: match.url }, { id: "reports-status" }, { id: "re-measure", url: match.url });
85
+ }
86
+ return gates;
87
+ }
88
+ //# sourceMappingURL=observation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observation.js","sourceRoot":"","sources":["../../../src/rubric/observation.ts"],"names":[],"mappings":";;;AAsEA,4CAuBC;AA0BD,8BAQC;AA/HD,2CAAgD;AAChD,yCAAwH;AAgDxH;;;;;;;;;;;GAWG;AACI,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAE,IAAqB,EAAU,EAAE,CAC/E,IAAI,KAAK,OAAO;IACd,CAAC,CAAC,yIAAyI,QAAQ,GAAG;IACtJ,CAAC,CAAC,6LAA6L,QAAQ,GAAG,CAAC;AAHlM,QAAA,aAAa,iBAGqL;AAE/M;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,KAAuB;IACtD,MAAM,QAAQ,GAAgB,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,KAAK,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3I,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC;YACZ,EAAE,EAAE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;SAClJ,CAAC,CAAC;QACH,sFAAsF;QACtF,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAC;IACtI,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACvF,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,6BAAiB,CAAC,CAAC,CAAC,IAAA,qBAAa,EAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,6BAAkB,EAAE,CAAC,CAAC;IAC9K,OAAO;QACL,CAAC,EAAE,CAAC;QACJ,IAAI,EAAE,KAAK,CAAC,QAAQ;QACpB,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QACzJ,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,QAAQ;QACR,KAAK,EAAE,KAAK,CAAC,MAAM;QACnB,GAAG,EAAE,KAAK;KACX,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,SAAgB,SAAS,CAAC,QAAgB,EAAE,IAAqB;IAC/D,MAAM,KAAK,GAAW,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IAC5C,IAAI,IAAI,KAAK,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAA,2BAAgB,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC3F,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAA,qBAAU,EAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,KAAK,EAAE,KAAK,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IACpK,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}