@hraness/ghostget 0.17.2

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 (500) hide show
  1. package/CHANGELOG.md +458 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1359 -0
  4. package/bunfig.toml +2 -0
  5. package/dist/apple-photos-client.js +704 -0
  6. package/dist/beeper-client.js +4602 -0
  7. package/dist/client.js +1605 -0
  8. package/dist/index-26yq8q16.js +31 -0
  9. package/dist/index-9t13b4k7.js +508 -0
  10. package/dist/index-axwm9b3v.js +5 -0
  11. package/dist/index-gwk7rbyj.js +30 -0
  12. package/dist/index.js +701 -0
  13. package/dist/messaging.js +1130 -0
  14. package/dist/omni-client.js +1406 -0
  15. package/dist/whatsapp-client.js +355 -0
  16. package/docs/imessage-direct-provider.md +106 -0
  17. package/docs/rental-listings.md +94 -0
  18. package/package.json +600 -0
  19. package/skills/ghostget/SKILL.md +251 -0
  20. package/skills/ghostget/agents/openai.yaml +4 -0
  21. package/skills/ghostget/references/adapter-contract.md +181 -0
  22. package/skills/ghostget/references/apple-photos.md +115 -0
  23. package/skills/ghostget/references/article-drafts.md +235 -0
  24. package/skills/ghostget/references/code-owned-provider-scaffold.md +134 -0
  25. package/skills/ghostget/references/cross-posting-video.md +139 -0
  26. package/skills/ghostget/references/cross-posting.md +82 -0
  27. package/skills/ghostget/references/derivation.md +390 -0
  28. package/skills/ghostget/references/hraness-social-profile-stats.json +269 -0
  29. package/skills/ghostget/references/install.md +66 -0
  30. package/skills/ghostget/references/linkedin-adapter.md +442 -0
  31. package/skills/ghostget/references/messaging.md +168 -0
  32. package/skills/ghostget/references/meta-comet-contract.md +153 -0
  33. package/skills/ghostget/references/platform-patterns.md +122 -0
  34. package/skills/ghostget/references/provider-plugins.md +496 -0
  35. package/skills/ghostget/references/reddit-flair.md +78 -0
  36. package/skills/ghostget/references/safety-and-state.md +214 -0
  37. package/skills/ghostget/references/settlement-and-duplicate-cleanup.md +79 -0
  38. package/skills/ghostget/references/social-platform-routing.md +66 -0
  39. package/skills/ghostget/references/social-profile-stats.md +195 -0
  40. package/skills/ghostget/references/social-video-platform-routing.md +89 -0
  41. package/skills/ghostget/references/whatsapp-adapter.md +101 -0
  42. package/skills/ghostget/references/x-adapter.md +332 -0
  43. package/skills/ghostget/references/x-ai-disclosure.md +71 -0
  44. package/src/apple-photos-cli.ts +639 -0
  45. package/src/apple-photos-client-types.ts +168 -0
  46. package/src/apple-photos-client.ts +201 -0
  47. package/src/apple-photos-contact-evidence.ts +838 -0
  48. package/src/apple-photos-local-source.ts +1131 -0
  49. package/src/args.ts +2053 -0
  50. package/src/article-draft-document.ts +417 -0
  51. package/src/article-draft-embeds.ts +123 -0
  52. package/src/article-draft-images.ts +214 -0
  53. package/src/assets/adapter-template/wrench-adapter.json +40 -0
  54. package/src/assets/adapters/beeper/wrench-web-adapter.json +1500 -0
  55. package/src/assets/adapters/beeper/wrench-web-adapter.v1.0.0.json +129 -0
  56. package/src/assets/adapters/beeper/wrench-web-adapter.v1.1.0.json +207 -0
  57. package/src/assets/adapters/beeper/wrench-web-adapter.v2.0.0.json +1463 -0
  58. package/src/assets/adapters/beeper/wrench-web-adapter.v2.1.0.json +1463 -0
  59. package/src/assets/adapters/beeper/wrench-web-adapter.v2.2.0.json +1475 -0
  60. package/src/assets/adapters/beeper/wrench-web-adapter.v2.3.0.json +1488 -0
  61. package/src/assets/adapters/bluesky/wrench-web-adapter.json +684 -0
  62. package/src/assets/adapters/bluesky/wrench-web-adapter.v1.0.0.json +581 -0
  63. package/src/assets/adapters/bluesky/wrench-web-adapter.v1.1.0.json +581 -0
  64. package/src/assets/adapters/bluesky/wrench-web-adapter.v1.2.0.json +581 -0
  65. package/src/assets/adapters/bluesky/wrench-web-adapter.v1.3.0.json +615 -0
  66. package/src/assets/adapters/bluesky/wrench-web-adapter.v1.4.0.json +684 -0
  67. package/src/assets/adapters/bluesky/wrench-web-adapter.v1.5.0.json +684 -0
  68. package/src/assets/adapters/bluesky/wrench-web-adapter.v1.6.0.json +684 -0
  69. package/src/assets/adapters/clasificados/wrench-web-adapter.json +54 -0
  70. package/src/assets/adapters/facebook/wrench-web-adapter.json +750 -0
  71. package/src/assets/adapters/facebook/wrench-web-adapter.v1.0.0.json +706 -0
  72. package/src/assets/adapters/facebook/wrench-web-adapter.v1.1.0.json +703 -0
  73. package/src/assets/adapters/facebook/wrench-web-adapter.v1.2.0.json +750 -0
  74. package/src/assets/adapters/facebook-group/wrench-web-adapter.json +682 -0
  75. package/src/assets/adapters/facebook-group/wrench-web-adapter.v1.0.0.json +583 -0
  76. package/src/assets/adapters/facebook-group/wrench-web-adapter.v1.1.0.json +682 -0
  77. package/src/assets/adapters/facebook-marketplace/wrench-web-adapter.json +437 -0
  78. package/src/assets/adapters/facebook-marketplace/wrench-web-adapter.v1.0.0.json +383 -0
  79. package/src/assets/adapters/facebook-marketplace/wrench-web-adapter.v1.1.0.json +437 -0
  80. package/src/assets/adapters/facebook-marketplace/wrench-web-adapter.v1.1.1.json +437 -0
  81. package/src/assets/adapters/facebook-page/wrench-web-adapter.json +880 -0
  82. package/src/assets/adapters/facebook-page/wrench-web-adapter.v1.0.0.json +740 -0
  83. package/src/assets/adapters/facebook-page/wrench-web-adapter.v1.1.0.json +880 -0
  84. package/src/assets/adapters/github/wrench-web-adapter.json +69 -0
  85. package/src/assets/adapters/github/wrench-web-adapter.v1.0.0.json +42 -0
  86. package/src/assets/adapters/github/wrench-web-adapter.v1.1.0.json +69 -0
  87. package/src/assets/adapters/gmail/wrench-adapter.json +161 -0
  88. package/src/assets/adapters/gmail/wrench-adapter.v1.2.0.json +157 -0
  89. package/src/assets/adapters/hacker-news/wrench-web-adapter.json +315 -0
  90. package/src/assets/adapters/hacker-news/wrench-web-adapter.v1.0.0.json +315 -0
  91. package/src/assets/adapters/imessage/wrench-web-adapter.json +236 -0
  92. package/src/assets/adapters/instagram/wrench-web-adapter.json +719 -0
  93. package/src/assets/adapters/instagram/wrench-web-adapter.v1.0.0.json +627 -0
  94. package/src/assets/adapters/instagram/wrench-web-adapter.v1.1.0.json +609 -0
  95. package/src/assets/adapters/instagram/wrench-web-adapter.v1.2.0.json +640 -0
  96. package/src/assets/adapters/instagram/wrench-web-adapter.v1.3.0.json +671 -0
  97. package/src/assets/adapters/instagram/wrench-web-adapter.v1.4.0.json +710 -0
  98. package/src/assets/adapters/instagram/wrench-web-adapter.v1.5.0.json +710 -0
  99. package/src/assets/adapters/instagram/wrench-web-adapter.v1.6.0.json +719 -0
  100. package/src/assets/adapters/instagram/wrench-web-adapter.v1.7.0.json +719 -0
  101. package/src/assets/adapters/linkedin/wrench-adapter.json +442 -0
  102. package/src/assets/adapters/linkedin/wrench-adapter.v0.4.0.json +124 -0
  103. package/src/assets/adapters/linkedin/wrench-adapter.v1.0.0.json +411 -0
  104. package/src/assets/adapters/linkedin/wrench-web-adapter.json +914 -0
  105. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.0.0.json +604 -0
  106. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.1.0.json +604 -0
  107. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.10.0.json +809 -0
  108. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.11.0.json +809 -0
  109. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.12.0.json +820 -0
  110. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.13.0.json +819 -0
  111. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.14.0.json +819 -0
  112. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.15.0.json +819 -0
  113. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.16.0.json +874 -0
  114. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.17.0.json +874 -0
  115. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.18.0.json +874 -0
  116. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.19.0.json +874 -0
  117. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.2.0.json +731 -0
  118. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.3.0.json +768 -0
  119. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.4.0.json +808 -0
  120. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.5.0.json +808 -0
  121. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.6.0.json +808 -0
  122. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.7.0.json +825 -0
  123. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.8.0.json +792 -0
  124. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.9.0.json +809 -0
  125. package/src/assets/adapters/reddit/wrench-web-adapter.json +855 -0
  126. package/src/assets/adapters/reddit/wrench-web-adapter.v1.0.0.json +577 -0
  127. package/src/assets/adapters/reddit/wrench-web-adapter.v1.1.0.json +604 -0
  128. package/src/assets/adapters/reddit/wrench-web-adapter.v1.10.0.json +712 -0
  129. package/src/assets/adapters/reddit/wrench-web-adapter.v1.11.0.json +712 -0
  130. package/src/assets/adapters/reddit/wrench-web-adapter.v1.12.0.json +712 -0
  131. package/src/assets/adapters/reddit/wrench-web-adapter.v1.2.0.json +653 -0
  132. package/src/assets/adapters/reddit/wrench-web-adapter.v1.3.0.json +712 -0
  133. package/src/assets/adapters/reddit/wrench-web-adapter.v1.4.0.json +713 -0
  134. package/src/assets/adapters/reddit/wrench-web-adapter.v1.5.0.json +712 -0
  135. package/src/assets/adapters/reddit/wrench-web-adapter.v1.6.0.json +713 -0
  136. package/src/assets/adapters/reddit/wrench-web-adapter.v1.7.0.json +713 -0
  137. package/src/assets/adapters/reddit/wrench-web-adapter.v1.8.0.json +713 -0
  138. package/src/assets/adapters/reddit/wrench-web-adapter.v1.9.0.json +713 -0
  139. package/src/assets/adapters/substack/wrench-web-adapter.json +936 -0
  140. package/src/assets/adapters/substack/wrench-web-adapter.v1.0.0.json +817 -0
  141. package/src/assets/adapters/substack/wrench-web-adapter.v1.1.0.json +812 -0
  142. package/src/assets/adapters/substack/wrench-web-adapter.v1.2.0.json +812 -0
  143. package/src/assets/adapters/substack/wrench-web-adapter.v1.3.0.json +902 -0
  144. package/src/assets/adapters/substack/wrench-web-adapter.v1.4.0.json +936 -0
  145. package/src/assets/adapters/substack/wrench-web-adapter.v1.5.0.json +936 -0
  146. package/src/assets/adapters/substack/wrench-web-adapter.v1.6.0.json +936 -0
  147. package/src/assets/adapters/threads/wrench-web-adapter.json +692 -0
  148. package/src/assets/adapters/threads/wrench-web-adapter.v1.0.0.json +629 -0
  149. package/src/assets/adapters/threads/wrench-web-adapter.v1.1.0.json +623 -0
  150. package/src/assets/adapters/threads/wrench-web-adapter.v1.2.0.json +622 -0
  151. package/src/assets/adapters/threads/wrench-web-adapter.v1.3.0.json +622 -0
  152. package/src/assets/adapters/threads/wrench-web-adapter.v1.4.0.json +622 -0
  153. package/src/assets/adapters/threads/wrench-web-adapter.v1.5.0.json +699 -0
  154. package/src/assets/adapters/threads/wrench-web-adapter.v1.6.0.json +693 -0
  155. package/src/assets/adapters/threads/wrench-web-adapter.v1.7.0.json +692 -0
  156. package/src/assets/adapters/tiktok/wrench-web-adapter.json +762 -0
  157. package/src/assets/adapters/tiktok/wrench-web-adapter.v1.0.0.json +681 -0
  158. package/src/assets/adapters/tiktok/wrench-web-adapter.v1.1.0.json +708 -0
  159. package/src/assets/adapters/tiktok/wrench-web-adapter.v1.2.0.json +762 -0
  160. package/src/assets/adapters/tiktok/wrench-web-adapter.v1.3.0.json +762 -0
  161. package/src/assets/adapters/twitch/wrench-web-adapter.json +42 -0
  162. package/src/assets/adapters/twitch/wrench-web-adapter.v1.0.0.json +42 -0
  163. package/src/assets/adapters/whatsapp/wrench-web-adapter.json +400 -0
  164. package/src/assets/adapters/whatsapp/wrench-web-adapter.v1.0.0.json +355 -0
  165. package/src/assets/adapters/whatsapp/wrench-web-adapter.v1.1.0.json +386 -0
  166. package/src/assets/adapters/whatsapp/wrench-web-adapter.v1.2.0.json +386 -0
  167. package/src/assets/adapters/whatsapp/wrench-web-adapter.v1.3.0.json +400 -0
  168. package/src/assets/adapters/x/wrench-adapter.json +749 -0
  169. package/src/assets/adapters/x/wrench-adapter.v1.0.0.json +700 -0
  170. package/src/assets/adapters/x/wrench-adapter.v1.1.0.json +707 -0
  171. package/src/assets/adapters/x/wrench-web-adapter.json +712 -0
  172. package/src/assets/adapters/x/wrench-web-adapter.v1.1.0.json +579 -0
  173. package/src/assets/adapters/x/wrench-web-adapter.v1.10.0.json +685 -0
  174. package/src/assets/adapters/x/wrench-web-adapter.v1.11.0.json +712 -0
  175. package/src/assets/adapters/x/wrench-web-adapter.v1.12.0.json +712 -0
  176. package/src/assets/adapters/x/wrench-web-adapter.v1.13.0.json +712 -0
  177. package/src/assets/adapters/x/wrench-web-adapter.v1.2.0.json +578 -0
  178. package/src/assets/adapters/x/wrench-web-adapter.v1.3.0.json +610 -0
  179. package/src/assets/adapters/x/wrench-web-adapter.v1.4.0.json +617 -0
  180. package/src/assets/adapters/x/wrench-web-adapter.v1.5.0.json +634 -0
  181. package/src/assets/adapters/x/wrench-web-adapter.v1.6.0.json +632 -0
  182. package/src/assets/adapters/x/wrench-web-adapter.v1.7.0.json +649 -0
  183. package/src/assets/adapters/x/wrench-web-adapter.v1.8.0.json +649 -0
  184. package/src/assets/adapters/x/wrench-web-adapter.v1.9.0.json +683 -0
  185. package/src/assets/adapters/youtube/wrench-web-adapter.json +561 -0
  186. package/src/assets/adapters/youtube/wrench-web-adapter.v1.0.0.json +465 -0
  187. package/src/assets/adapters/youtube/wrench-web-adapter.v1.1.0.json +519 -0
  188. package/src/assets/adapters/youtube/wrench-web-adapter.v1.2.0.json +561 -0
  189. package/src/assets/adapters/youtube/wrench-web-adapter.v1.3.0.json +561 -0
  190. package/src/assets/code-owned-provider-template/plugin.test.ts.template +54 -0
  191. package/src/assets/code-owned-provider-template/plugin.ts.template +102 -0
  192. package/src/assets/code-owned-provider-template/runtime.internal.test.ts.template +44 -0
  193. package/src/assets/code-owned-provider-template/runtime.ts.template +59 -0
  194. package/src/assets/code-owned-provider-template/wrench-adapter.json.template +33 -0
  195. package/src/assets/fonts/nebula-sans/LICENSE.txt +96 -0
  196. package/src/assets/fonts/nebula-sans/NebulaSans-Book.woff2 +0 -0
  197. package/src/assets/fonts/nebula-sans/PROVENANCE.md +14 -0
  198. package/src/assets.d.ts +4 -0
  199. package/src/auth.ts +1157 -0
  200. package/src/beeper-client-types.ts +169 -0
  201. package/src/beeper-client.ts +250 -0
  202. package/src/beeper-contact-interactions-cli.ts +180 -0
  203. package/src/beeper-contact-interactions.ts +1612 -0
  204. package/src/beeper-message-bundle-v1.ts +257 -0
  205. package/src/beeper-message-like-me-cli.ts +84 -0
  206. package/src/beeper-message-like-me-export.ts +2274 -0
  207. package/src/beeper-message-like-me-recovery.ts +931 -0
  208. package/src/beeper-message-like-me-source.ts +4034 -0
  209. package/src/browser-admission.ts +928 -0
  210. package/src/browser-snapshots.ts +260 -0
  211. package/src/browser.ts +3873 -0
  212. package/src/canonical-json.ts +60 -0
  213. package/src/catalog-cli.ts +638 -0
  214. package/src/cli.ts +208 -0
  215. package/src/client-types.ts +301 -0
  216. package/src/client.ts +2726 -0
  217. package/src/confirmed-write-failure.ts +44 -0
  218. package/src/confirmed-write-model.ts +72 -0
  219. package/src/confirmed-write-platform.ts +1055 -0
  220. package/src/confirmed-write-program.ts +224 -0
  221. package/src/confirmed-write-runtime.ts +16 -0
  222. package/src/cursor-token.ts +228 -0
  223. package/src/derivation-dnr-readiness.ts +367 -0
  224. package/src/derivation-file-chooser.ts +384 -0
  225. package/src/derivation-network-boundary.ts +835 -0
  226. package/src/derivation-network-guard.ts +782 -0
  227. package/src/derivation-network-proxy-helper.ts +440 -0
  228. package/src/derivation-network-proxy.ts +385 -0
  229. package/src/derive-command-helper.ts +693 -0
  230. package/src/derive-fixtures.ts +343 -0
  231. package/src/derive-review.ts +980 -0
  232. package/src/derive.ts +4754 -0
  233. package/src/fixtures/beeper-message-like-me-v1/accounts.ndjson +2 -0
  234. package/src/fixtures/beeper-message-like-me-v1/conversations.ndjson +1 -0
  235. package/src/fixtures/beeper-message-like-me-v1/manifest.json +1 -0
  236. package/src/fixtures/beeper-message-like-me-v1/messages.ndjson +2 -0
  237. package/src/fixtures/beeper-message-like-me-v1/participants.ndjson +3 -0
  238. package/src/fixtures/beeper-message-like-me-v1/reactions.ndjson +1 -0
  239. package/src/fixtures/beeper-message-like-me-v1/tombstones.ndjson +1 -0
  240. package/src/ghostget.ts +3672 -0
  241. package/src/gmail-capture.ts +1244 -0
  242. package/src/har-internal.ts +1242 -0
  243. package/src/har.ts +743 -0
  244. package/src/index.ts +218 -0
  245. package/src/invocation-read-platform.ts +55 -0
  246. package/src/invocation-read-program.ts +93 -0
  247. package/src/invocation-read-runtime.ts +11 -0
  248. package/src/linked-device-lifecycle-admission.ts +450 -0
  249. package/src/linked-device-lifecycle-journal.ts +1560 -0
  250. package/src/linked-device-lifecycle-runtime.ts +1602 -0
  251. package/src/local-cli-admission.ts +135 -0
  252. package/src/local-cli-contracts.ts +271 -0
  253. package/src/local-cli-execution.ts +98 -0
  254. package/src/local-cli-surface-contract.ts +1510 -0
  255. package/src/local-cli-tool-identity.ts +336 -0
  256. package/src/media/archive.ts +2325 -0
  257. package/src/media/args.ts +303 -0
  258. package/src/media/cli.ts +287 -0
  259. package/src/media/doctor.ts +475 -0
  260. package/src/media/ffmpeg.ts +1330 -0
  261. package/src/media/http-capture.ts +711 -0
  262. package/src/media/http-probe.ts +593 -0
  263. package/src/media/http.ts +387 -0
  264. package/src/media/index.ts +10 -0
  265. package/src/media/local-transcription.ts +613 -0
  266. package/src/media/lock.ts +321 -0
  267. package/src/media/manifest.ts +1712 -0
  268. package/src/media/metadata.ts +906 -0
  269. package/src/media/process.ts +723 -0
  270. package/src/media/revision.ts +166 -0
  271. package/src/media/runtime-closure.ts +1063 -0
  272. package/src/media/source-router.ts +187 -0
  273. package/src/media/transcriber-config.ts +1122 -0
  274. package/src/media/transcript-persistence-model.ts +15 -0
  275. package/src/media/transcript-persistence-platform.ts +89 -0
  276. package/src/media/transcript-persistence-program.ts +39 -0
  277. package/src/media/transcript-persistence-runtime.ts +24 -0
  278. package/src/media/transcript.ts +616 -0
  279. package/src/media/utf8-order.ts +30 -0
  280. package/src/media/whisper-cpp.ts +464 -0
  281. package/src/media/whisper-language.ts +58 -0
  282. package/src/media/yt-dlp.ts +439 -0
  283. package/src/message-like-me-agentic-messaging.ts +882 -0
  284. package/src/messaging-action-store.ts +793 -0
  285. package/src/messaging-runtime.ts +2136 -0
  286. package/src/messaging-store.ts +539 -0
  287. package/src/messaging-types.ts +1663 -0
  288. package/src/messaging.ts +334 -0
  289. package/src/model.ts +2671 -0
  290. package/src/oauth-google.ts +888 -0
  291. package/src/omni-client-types.ts +306 -0
  292. package/src/omni-client.ts +2225 -0
  293. package/src/omni-limits.ts +34 -0
  294. package/src/omni-model.ts +1614 -0
  295. package/src/omni-request.ts +379 -0
  296. package/src/omni-runtime.ts +1632 -0
  297. package/src/operation-deadline.ts +189 -0
  298. package/src/path-helper.ts +1656 -0
  299. package/src/pinned-https.ts +194 -0
  300. package/src/plan-assets.ts +832 -0
  301. package/src/platform-catalog.ts +1832 -0
  302. package/src/plugins/beeper-linked-device/plugin.ts +310 -0
  303. package/src/plugins/bluesky-web/plugin.ts +178 -0
  304. package/src/plugins/clasificados-web/plugin.ts +66 -0
  305. package/src/plugins/github-web/plugin.ts +80 -0
  306. package/src/plugins/gmail-official/plugin.ts +110 -0
  307. package/src/plugins/hacker-news-web/plugin.ts +52 -0
  308. package/src/plugins/imessage-direct/plugin.ts +195 -0
  309. package/src/plugins/imessage-direct/vendor/0001-fix-keep-AppleScript-send-payloads-out-of-child-argv.patch +1430 -0
  310. package/src/plugins/imessage-direct/vendor/0002-feat-rpc-add-exact-chat-lookup.patch +225 -0
  311. package/src/plugins/imessage-direct/vendor/provenance.json +80 -0
  312. package/src/plugins/linkedin-official/plugin.ts +84 -0
  313. package/src/plugins/linkedin-web/plugin.ts +412 -0
  314. package/src/plugins/meta-web/plugin.ts +317 -0
  315. package/src/plugins/reddit-web/flair.ts +492 -0
  316. package/src/plugins/reddit-web/plugin.ts +477 -0
  317. package/src/plugins/substack-web/plugin.ts +124 -0
  318. package/src/plugins/tiktok-web/plugin.ts +67 -0
  319. package/src/plugins/twitch-web/plugin.ts +54 -0
  320. package/src/plugins/whatsapp-linked-device/plugin.ts +105 -0
  321. package/src/plugins/x-official/plugin.ts +64 -0
  322. package/src/plugins/x-web/plugin.ts +488 -0
  323. package/src/plugins/youtube-web/plugin.ts +101 -0
  324. package/src/portable-run-recovery.ts +466 -0
  325. package/src/process-identity.ts +501 -0
  326. package/src/profile-clone-helper.ts +104 -0
  327. package/src/provider-catalog-views.ts +51 -0
  328. package/src/provider-context.ts +69 -0
  329. package/src/provider-contract-definitions-x.ts +45 -0
  330. package/src/provider-contract-definitions.ts +948 -0
  331. package/src/provider-contract-input-gmail.ts +176 -0
  332. package/src/provider-contract-input-linkedin.ts +77 -0
  333. package/src/provider-contract-input-x.ts +304 -0
  334. package/src/provider-contract-planning.ts +23 -0
  335. package/src/provider-contract-semantic-identity.ts +54 -0
  336. package/src/provider-contracts.ts +251 -0
  337. package/src/provider-http.ts +723 -0
  338. package/src/provider-plugin-auth.ts +36 -0
  339. package/src/provider-plugin-builtins.ts +229 -0
  340. package/src/provider-plugin-cleanup-barrier.ts +229 -0
  341. package/src/provider-plugin-cleanup-execution.ts +79 -0
  342. package/src/provider-plugin-cleanup-resource.ts +470 -0
  343. package/src/provider-plugin-contract-identity.ts +707 -0
  344. package/src/provider-plugin-host.ts +1972 -0
  345. package/src/provider-plugin-identifiers.ts +60 -0
  346. package/src/provider-plugin-invocation-lease.ts +889 -0
  347. package/src/provider-plugin-lifecycle-kernel.ts +566 -0
  348. package/src/provider-plugin-lifecycle.ts +1455 -0
  349. package/src/provider-plugin-module-analysis.ts +336 -0
  350. package/src/provider-plugin-package.ts +2530 -0
  351. package/src/provider-plugin-portable-authority.ts +106 -0
  352. package/src/provider-plugin-portable-catalog.ts +94 -0
  353. package/src/provider-plugin-portable-identity.ts +315 -0
  354. package/src/provider-plugin-portable-runtime.ts +2057 -0
  355. package/src/provider-plugin-protocol.ts +1625 -0
  356. package/src/provider-plugin-registry.ts +3342 -0
  357. package/src/provider-plugin-store.ts +2155 -0
  358. package/src/provider-plugin-test-fixture.ts +5 -0
  359. package/src/provider-plugin.ts +4907 -0
  360. package/src/provider-plugins.generated.ts +43 -0
  361. package/src/provider-plugins.ts +8 -0
  362. package/src/provider-subject.ts +41 -0
  363. package/src/provider.ts +315 -0
  364. package/src/providers/beeper-local-runtime.ts +5426 -0
  365. package/src/providers/beeper-local.ts +2739 -0
  366. package/src/providers/beeper-messaging.ts +462 -0
  367. package/src/providers/beeper-omni.ts +1159 -0
  368. package/src/providers/bluesky-web-runtime.ts +2895 -0
  369. package/src/providers/bluesky-web.ts +1614 -0
  370. package/src/providers/clasificados-web-runtime.ts +255 -0
  371. package/src/providers/clasificados-web.ts +503 -0
  372. package/src/providers/contact-projection.ts +301 -0
  373. package/src/providers/github-read-model.ts +94 -0
  374. package/src/providers/github-read-platform.ts +165 -0
  375. package/src/providers/github-read-program.ts +97 -0
  376. package/src/providers/github-web-runtime.ts +320 -0
  377. package/src/providers/github-web.ts +403 -0
  378. package/src/providers/gmail-api.ts +2834 -0
  379. package/src/providers/gmail-omni.ts +830 -0
  380. package/src/providers/gmail.ts +1130 -0
  381. package/src/providers/hacker-news-web-runtime.ts +220 -0
  382. package/src/providers/hacker-news-web.ts +809 -0
  383. package/src/providers/imessage-direct-install.ts +354 -0
  384. package/src/providers/imessage-direct-messaging.ts +532 -0
  385. package/src/providers/imessage-direct-omni.ts +400 -0
  386. package/src/providers/imessage-direct-runtime.ts +1498 -0
  387. package/src/providers/imessage-direct.ts +351 -0
  388. package/src/providers/instagram-video-foundations.ts +913 -0
  389. package/src/providers/instagram-web-profile-browser.ts +600 -0
  390. package/src/providers/iso-bmff.ts +338 -0
  391. package/src/providers/linkedin-company-platform.ts +42 -0
  392. package/src/providers/linkedin-company-program.ts +88 -0
  393. package/src/providers/linkedin-contact-failure.ts +84 -0
  394. package/src/providers/linkedin-contact-platform.ts +45 -0
  395. package/src/providers/linkedin-contact-program.ts +91 -0
  396. package/src/providers/linkedin-profile-activity-failure.ts +76 -0
  397. package/src/providers/linkedin-profile-activity-platform.ts +41 -0
  398. package/src/providers/linkedin-profile-activity-program.ts +67 -0
  399. package/src/providers/linkedin-read-failure.ts +52 -0
  400. package/src/providers/linkedin-self-platform.ts +53 -0
  401. package/src/providers/linkedin-self-program.ts +122 -0
  402. package/src/providers/linkedin-web-article-browser.ts +794 -0
  403. package/src/providers/linkedin-web-bootstrap.ts +146 -0
  404. package/src/providers/linkedin-web-contact.ts +830 -0
  405. package/src/providers/linkedin-web-feed-browser.ts +832 -0
  406. package/src/providers/linkedin-web-feed.ts +864 -0
  407. package/src/providers/linkedin-web-post-browser.ts +653 -0
  408. package/src/providers/linkedin-web-profile-browser.ts +683 -0
  409. package/src/providers/linkedin-web-runtime.ts +2388 -0
  410. package/src/providers/linkedin-web.ts +3305 -0
  411. package/src/providers/linkedin.ts +1885 -0
  412. package/src/providers/meta-bootstrap.ts +1043 -0
  413. package/src/providers/meta-facebook-group.ts +690 -0
  414. package/src/providers/meta-marketplace-relay.ts +747 -0
  415. package/src/providers/meta-omni.ts +373 -0
  416. package/src/providers/meta-relay-bundle.ts +1049 -0
  417. package/src/providers/meta-web-descriptors.ts +1740 -0
  418. package/src/providers/meta-web-runtime.ts +3388 -0
  419. package/src/providers/meta-web.ts +2931 -0
  420. package/src/providers/read-failure.ts +139 -0
  421. package/src/providers/reddit-omni.ts +462 -0
  422. package/src/providers/reddit-web-runtime.ts +1929 -0
  423. package/src/providers/reddit-web.ts +1611 -0
  424. package/src/providers/rental-listings.ts +460 -0
  425. package/src/providers/substack-omni.ts +406 -0
  426. package/src/providers/substack-video-mp4.ts +33 -0
  427. package/src/providers/substack-web-runtime.ts +2812 -0
  428. package/src/providers/substack-web.ts +1502 -0
  429. package/src/providers/tiktok-video-mp4.ts +33 -0
  430. package/src/providers/tiktok-web-runtime.ts +770 -0
  431. package/src/providers/tiktok-web.ts +2786 -0
  432. package/src/providers/twitch-web-runtime.ts +226 -0
  433. package/src/providers/twitch-web.ts +274 -0
  434. package/src/providers/whatsapp-account-identity.ts +55 -0
  435. package/src/providers/whatsapp-contact-projection-helper.ts +874 -0
  436. package/src/providers/whatsapp-contact-projection-protocol.ts +403 -0
  437. package/src/providers/whatsapp-interaction-projection-helper.ts +1452 -0
  438. package/src/providers/whatsapp-interaction-projection-protocol.ts +462 -0
  439. package/src/providers/whatsapp-message-export-projection-protocol.ts +532 -0
  440. package/src/providers/whatsapp-messaging.ts +132 -0
  441. package/src/providers/whatsapp-omni.ts +586 -0
  442. package/src/providers/whatsapp-web-runtime.ts +3108 -0
  443. package/src/providers/whatsapp-web.ts +1037 -0
  444. package/src/providers/x-image-provenance.ts +523 -0
  445. package/src/providers/x-made-with-ai.ts +106 -0
  446. package/src/providers/x-transaction-id.ts +413 -0
  447. package/src/providers/x-web-runtime.ts +3485 -0
  448. package/src/providers/x-web.ts +2332 -0
  449. package/src/providers/x.ts +1889 -0
  450. package/src/providers/youtube-web-runtime.ts +1400 -0
  451. package/src/providers/youtube-web.ts +1221 -0
  452. package/src/read-admission-runtime.ts +91 -0
  453. package/src/read-client.ts +521 -0
  454. package/src/read-effect-platform.ts +7 -0
  455. package/src/read-effect-runtime.ts +14 -0
  456. package/src/read-effect.ts +52 -0
  457. package/src/read-projection-admission.ts +866 -0
  458. package/src/read-projections.ts +3151 -0
  459. package/src/recovery.ts +1492 -0
  460. package/src/reviewed-template.ts +146 -0
  461. package/src/run-journal.ts +1272 -0
  462. package/src/runtime.ts +5116 -0
  463. package/src/scripts/generate-provider-plugin-catalog.ts +121 -0
  464. package/src/scripts/install-whatsapp-protocol.sh +232 -0
  465. package/src/scripts/recover-install-stages.ts +1491 -0
  466. package/src/scripts/resolve-state-home.ts +30 -0
  467. package/src/scripts/scaffold-web-provider.ts +973 -0
  468. package/src/scripts/sync-bundled-adapters.ts +695 -0
  469. package/src/session-secrets.ts +1183 -0
  470. package/src/state-helper.bunfig.toml +2 -0
  471. package/src/state-helper.ts +2914 -0
  472. package/src/storage.ts +3842 -0
  473. package/src/transport-policy.ts +2 -0
  474. package/src/usage.ts +182 -0
  475. package/src/version.ts +2 -0
  476. package/src/web-session-authentication-policy.ts +136 -0
  477. package/src/web-session-cleanup-admission.ts +2344 -0
  478. package/src/web-session-cleanup-join.ts +99 -0
  479. package/src/web-session-client.ts +996 -0
  480. package/src/web-session-contract-definitions.ts +820 -0
  481. package/src/web-session-contract-planning.ts +42 -0
  482. package/src/web-session-contracts.ts +228 -0
  483. package/src/web-session-cookies.ts +500 -0
  484. package/src/web-session-execution.ts +385 -0
  485. package/src/web-session-http.ts +373 -0
  486. package/src/web-session-read-errors.ts +19 -0
  487. package/src/web-session-read-runtime.ts +124 -0
  488. package/src/web-session-recovery.ts +818 -0
  489. package/src/web-session-sites.ts +58 -0
  490. package/src/web-session-template.ts +994 -0
  491. package/src/web-session.ts +93 -0
  492. package/src/whatsapp-client-binding.ts +21 -0
  493. package/src/whatsapp-client-types.ts +75 -0
  494. package/src/whatsapp-client.ts +395 -0
  495. package/src/whatsapp-export-coordinate.ts +17 -0
  496. package/src/whatsapp-message-bundle-v2.ts +195 -0
  497. package/src/whatsapp-message-like-me-cli.ts +195 -0
  498. package/src/whatsapp-message-like-me-export.ts +1072 -0
  499. package/src/whatsapp-message-like-me-source.ts +1012 -0
  500. package/tsconfig.json +67 -0
@@ -0,0 +1,749 @@
1
+ {
2
+ "schemaVersion": 3,
3
+ "id": "x",
4
+ "version": "1.2.0",
5
+ "displayName": "X (Official API)",
6
+ "surfaceId": "x",
7
+ "origins": [
8
+ "https://x.com"
9
+ ],
10
+ "browserDomains": [
11
+ "x.com"
12
+ ],
13
+ "operations": {
14
+ "feeds.read": {
15
+ "description": "Use the code-owned official x API contract for feeds.read. fixed X v2 reverse-chron/user/mentions/List/recent-search/bookmark endpoints with endpoint-specific no-skip page minima; never For You",
16
+ "risk": "R1",
17
+ "sideEffect": "none",
18
+ "idempotency": "none",
19
+ "dedupeWindowMs": 0,
20
+ "input": {
21
+ "properties": {
22
+ "feed": {
23
+ "type": "string",
24
+ "description": "Exact official timeline or discovery surface",
25
+ "enum": [
26
+ "home-reverse-chronological",
27
+ "user",
28
+ "mentions",
29
+ "list",
30
+ "recent-search",
31
+ "bookmarks"
32
+ ]
33
+ },
34
+ "user_id": {
35
+ "type": "string",
36
+ "description": "Exact 1-19 digit X user ID for user or mentions feeds",
37
+ "minLength": 1,
38
+ "maxLength": 19
39
+ },
40
+ "list_id": {
41
+ "type": "string",
42
+ "description": "Exact 1-19 digit X List ID",
43
+ "minLength": 1,
44
+ "maxLength": 19
45
+ },
46
+ "query": {
47
+ "type": "string",
48
+ "description": "Recent-search query covering at most seven days",
49
+ "minLength": 1,
50
+ "maxLength": 512
51
+ },
52
+ "cursor": {
53
+ "type": "string",
54
+ "description": "Opaque provider pagination token",
55
+ "minLength": 1,
56
+ "maxLength": 4096
57
+ },
58
+ "limit": {
59
+ "type": "number",
60
+ "description": "Bounded result count",
61
+ "minimum": 1,
62
+ "maximum": 100
63
+ },
64
+ "since_id": {
65
+ "type": "string",
66
+ "description": "Return posts newer than this 1-19 digit post ID",
67
+ "minLength": 1,
68
+ "maxLength": 19
69
+ },
70
+ "until_id": {
71
+ "type": "string",
72
+ "description": "Return posts older than this 1-19 digit post ID",
73
+ "minLength": 1,
74
+ "maxLength": 19
75
+ },
76
+ "start_time": {
77
+ "type": "string",
78
+ "description": "Inclusive ISO-8601 start time",
79
+ "minLength": 20,
80
+ "maxLength": 40
81
+ },
82
+ "end_time": {
83
+ "type": "string",
84
+ "description": "Exclusive ISO-8601 end time",
85
+ "minLength": 20,
86
+ "maxLength": 40
87
+ },
88
+ "exclude_replies": {
89
+ "type": "boolean",
90
+ "description": "Exclude replies where the endpoint supports it"
91
+ },
92
+ "exclude_reposts": {
93
+ "type": "boolean",
94
+ "description": "Exclude reposts where the endpoint supports it"
95
+ },
96
+ "sort": {
97
+ "type": "string",
98
+ "description": "Recent-search ordering",
99
+ "enum": [
100
+ "recency",
101
+ "relevancy"
102
+ ]
103
+ }
104
+ },
105
+ "required": [
106
+ "feed"
107
+ ]
108
+ },
109
+ "provider": {
110
+ "provider": "x",
111
+ "action": "feeds.read",
112
+ "contractVersion": 1,
113
+ "timeoutMs": 60000,
114
+ "maxOutputBytes": 2097152
115
+ }
116
+ },
117
+ "posts.read": {
118
+ "description": "Use the code-owned official x API contract for posts.read. GET /2/tweets by bounded IDs with fixed rich fields and expansions",
119
+ "risk": "R1",
120
+ "sideEffect": "none",
121
+ "idempotency": "none",
122
+ "dedupeWindowMs": 0,
123
+ "input": {
124
+ "properties": {
125
+ "post_ids": {
126
+ "type": "array",
127
+ "description": "Unique exact X post IDs",
128
+ "items": {
129
+ "type": "string",
130
+ "description": "One exact 1-19 digit post ID",
131
+ "minLength": 1,
132
+ "maxLength": 19
133
+ },
134
+ "minItems": 1,
135
+ "maxItems": 100
136
+ }
137
+ },
138
+ "required": [
139
+ "post_ids"
140
+ ]
141
+ },
142
+ "provider": {
143
+ "provider": "x",
144
+ "action": "posts.read",
145
+ "contractVersion": 1,
146
+ "timeoutMs": 60000,
147
+ "maxOutputBytes": 2097152
148
+ }
149
+ },
150
+ "comments.read": {
151
+ "description": "Use the code-owned official x API contract for comments.read. GET recent or entitled full-archive search query conversation_id; cursor-preserving and never labeled complete",
152
+ "risk": "R1",
153
+ "sideEffect": "none",
154
+ "idempotency": "none",
155
+ "dedupeWindowMs": 0,
156
+ "input": {
157
+ "properties": {
158
+ "post_id": {
159
+ "type": "string",
160
+ "description": "Exact 1-19 digit root X post ID",
161
+ "minLength": 1,
162
+ "maxLength": 19
163
+ },
164
+ "window": {
165
+ "type": "string",
166
+ "description": "Recent seven-day search or entitled full-archive search",
167
+ "enum": [
168
+ "recent-7-days",
169
+ "full-archive"
170
+ ]
171
+ },
172
+ "cursor": {
173
+ "type": "string",
174
+ "description": "Opaque reply-search next token",
175
+ "minLength": 1,
176
+ "maxLength": 4096
177
+ },
178
+ "limit": {
179
+ "type": "number",
180
+ "description": "Bounded reply count",
181
+ "minimum": 10,
182
+ "maximum": 100
183
+ }
184
+ },
185
+ "required": [
186
+ "post_id"
187
+ ]
188
+ },
189
+ "provider": {
190
+ "provider": "x",
191
+ "action": "comments.read",
192
+ "contractVersion": 1,
193
+ "timeoutMs": 60000,
194
+ "maxOutputBytes": 2097152
195
+ }
196
+ },
197
+ "messaging.list": {
198
+ "description": "Use the code-owned official x API contract for messaging.list. subject-bound GET legacy DM events or encrypted Chat conversations/events; Chat exposes metadata, request presence, and ciphertext envelopes but not plaintext or inbox folders",
199
+ "risk": "R1",
200
+ "sideEffect": "none",
201
+ "idempotency": "none",
202
+ "dedupeWindowMs": 0,
203
+ "input": {
204
+ "properties": {
205
+ "view": {
206
+ "type": "string",
207
+ "description": "Legacy DM events, encrypted Chat conversations, or encrypted Chat events",
208
+ "enum": [
209
+ "all",
210
+ "participant",
211
+ "conversation",
212
+ "chat-conversations",
213
+ "chat-events"
214
+ ]
215
+ },
216
+ "target_id": {
217
+ "type": "string",
218
+ "description": "Exact participant, legacy DM conversation, or Chat conversation ID selected by view",
219
+ "minLength": 1,
220
+ "maxLength": 39
221
+ },
222
+ "cursor": {
223
+ "type": "string",
224
+ "description": "Opaque legacy DM or Chat pagination token",
225
+ "minLength": 1,
226
+ "maxLength": 4096
227
+ },
228
+ "limit": {
229
+ "type": "number",
230
+ "description": "Bounded event or conversation count",
231
+ "minimum": 1,
232
+ "maximum": 100
233
+ }
234
+ },
235
+ "required": [
236
+ "view"
237
+ ]
238
+ },
239
+ "provider": {
240
+ "provider": "x",
241
+ "action": "messaging.list",
242
+ "contractVersion": 1,
243
+ "timeoutMs": 60000,
244
+ "maxOutputBytes": 2097152
245
+ }
246
+ },
247
+ "messaging.read": {
248
+ "description": "Use the code-owned official x API contract for messaging.read. subject-bound GET /2/dm_events/{event}; exact response identity; legacy DM only, not encrypted Chat",
249
+ "risk": "R1",
250
+ "sideEffect": "none",
251
+ "idempotency": "none",
252
+ "dedupeWindowMs": 0,
253
+ "input": {
254
+ "properties": {
255
+ "event_id": {
256
+ "type": "string",
257
+ "description": "Exact 1-19 digit legacy DM event ID",
258
+ "minLength": 1,
259
+ "maxLength": 19
260
+ }
261
+ },
262
+ "required": [
263
+ "event_id"
264
+ ]
265
+ },
266
+ "provider": {
267
+ "provider": "x",
268
+ "action": "messaging.read",
269
+ "contractVersion": 1,
270
+ "timeoutMs": 60000,
271
+ "maxOutputBytes": 2097152
272
+ }
273
+ },
274
+ "messaging.send": {
275
+ "description": "Use the code-owned official x API contract for messaging.send. optional official media upload then POST legacy DM message; explicit opt-in; not encrypted Chat",
276
+ "risk": "R3",
277
+ "sideEffect": "Mutates x through the exact confirmed messaging.send official API contract.",
278
+ "idempotency": "local-at-most-once",
279
+ "dedupeWindowMs": 86400000,
280
+ "input": {
281
+ "properties": {
282
+ "target_kind": {
283
+ "type": "string",
284
+ "description": "Send to one participant or existing legacy DM conversation",
285
+ "enum": [
286
+ "participant",
287
+ "conversation"
288
+ ]
289
+ },
290
+ "target_id": {
291
+ "type": "string",
292
+ "description": "Exact participant or legacy DM conversation ID",
293
+ "minLength": 1,
294
+ "maxLength": 39
295
+ },
296
+ "body": {
297
+ "type": "string",
298
+ "description": "Optional exact legacy DM text; text or media is required",
299
+ "minLength": 1,
300
+ "maxLength": 1000
301
+ },
302
+ "media": {
303
+ "type": "file",
304
+ "description": "Optional single legacy DM image, GIF, or video",
305
+ "maxBytes": 536870912,
306
+ "mediaTypes": [
307
+ "image/jpeg",
308
+ "image/png",
309
+ "image/gif",
310
+ "video/mp4"
311
+ ]
312
+ },
313
+ "media_alt_text": {
314
+ "type": "string",
315
+ "description": "Optional accessibility text applied to reviewed JPEG/PNG DM media",
316
+ "minLength": 1,
317
+ "maxLength": 1000
318
+ },
319
+ "recipient_opted_in": {
320
+ "type": "boolean",
321
+ "description": "Required acknowledgement that the recipient opted into automated contact",
322
+ "enum": [
323
+ true
324
+ ]
325
+ }
326
+ },
327
+ "required": [
328
+ "target_kind",
329
+ "target_id",
330
+ "recipient_opted_in"
331
+ ]
332
+ },
333
+ "provider": {
334
+ "provider": "x",
335
+ "action": "messaging.send",
336
+ "contractVersion": 1,
337
+ "timeoutMs": 600000,
338
+ "maxOutputBytes": 2097152
339
+ }
340
+ },
341
+ "posts.publish": {
342
+ "description": "Use the code-owned official x API contract for posts.publish. optional official X v2 media upload then POST /2/tweets; media/poll union enforced",
343
+ "risk": "R3",
344
+ "sideEffect": "Mutates x through the exact confirmed posts.publish official API contract.",
345
+ "idempotency": "local-at-most-once",
346
+ "dedupeWindowMs": 86400000,
347
+ "input": {
348
+ "properties": {
349
+ "body": {
350
+ "type": "string",
351
+ "description": "Optional exact post text; text, media, or a poll is required",
352
+ "minLength": 1,
353
+ "maxLength": 280
354
+ },
355
+ "media": {
356
+ "type": "array",
357
+ "description": "Up to four images, or one GIF/video",
358
+ "items": {
359
+ "type": "file",
360
+ "description": "One reviewed X post attachment",
361
+ "maxBytes": 536870912,
362
+ "mediaTypes": [
363
+ "image/jpeg",
364
+ "image/png",
365
+ "image/gif",
366
+ "video/mp4"
367
+ ]
368
+ },
369
+ "minItems": 1,
370
+ "maxItems": 4
371
+ },
372
+ "media_alt_texts": {
373
+ "type": "array",
374
+ "description": "Accessibility text aligned one-to-one with JPEG/PNG media",
375
+ "items": {
376
+ "type": "string",
377
+ "description": "One exact image description",
378
+ "minLength": 1,
379
+ "maxLength": 1000
380
+ },
381
+ "minItems": 1,
382
+ "maxItems": 4
383
+ },
384
+ "poll_options": {
385
+ "type": "array",
386
+ "description": "Two to four poll choices",
387
+ "items": {
388
+ "type": "string",
389
+ "description": "One poll choice",
390
+ "minLength": 1,
391
+ "maxLength": 25
392
+ },
393
+ "minItems": 2,
394
+ "maxItems": 4
395
+ },
396
+ "poll_duration_minutes": {
397
+ "type": "number",
398
+ "description": "Poll duration in minutes",
399
+ "minimum": 5,
400
+ "maximum": 10080
401
+ },
402
+ "reply_settings": {
403
+ "type": "string",
404
+ "description": "Who may reply; everyone means omit the provider field",
405
+ "enum": [
406
+ "everyone",
407
+ "mentionedUsers",
408
+ "following",
409
+ "subscribers",
410
+ "verified"
411
+ ]
412
+ },
413
+ "community_id": {
414
+ "type": "string",
415
+ "description": "Optional exact 1-19 digit Community ID",
416
+ "minLength": 1,
417
+ "maxLength": 19
418
+ },
419
+ "made_with_ai": {
420
+ "type": "boolean",
421
+ "description": "When true, label the attached media as AI-generated; true requires media"
422
+ }
423
+ },
424
+ "required": []
425
+ },
426
+ "provider": {
427
+ "provider": "x",
428
+ "action": "posts.publish",
429
+ "contractVersion": 1,
430
+ "timeoutMs": 600000,
431
+ "maxOutputBytes": 2097152
432
+ }
433
+ },
434
+ "replies.create": {
435
+ "description": "Use the code-owned official x API contract for replies.create. POST /2/tweets reply; self-serve author-invitation and automated-recipient-opt-in acknowledgements required",
436
+ "risk": "R3",
437
+ "sideEffect": "Mutates x through the exact confirmed replies.create official API contract.",
438
+ "idempotency": "local-at-most-once",
439
+ "dedupeWindowMs": 86400000,
440
+ "input": {
441
+ "properties": {
442
+ "target_post_id": {
443
+ "type": "string",
444
+ "description": "Exact 1-19 digit X post ID being replied to",
445
+ "minLength": 1,
446
+ "maxLength": 19
447
+ },
448
+ "body": {
449
+ "type": "string",
450
+ "description": "Optional exact reply text; text or media is required",
451
+ "minLength": 1,
452
+ "maxLength": 280
453
+ },
454
+ "media": {
455
+ "type": "array",
456
+ "description": "Up to four images, or one GIF/video",
457
+ "items": {
458
+ "type": "file",
459
+ "description": "One reviewed reply attachment",
460
+ "maxBytes": 536870912,
461
+ "mediaTypes": [
462
+ "image/jpeg",
463
+ "image/png",
464
+ "image/gif",
465
+ "video/mp4"
466
+ ]
467
+ },
468
+ "minItems": 1,
469
+ "maxItems": 4
470
+ },
471
+ "media_alt_texts": {
472
+ "type": "array",
473
+ "description": "Accessibility text aligned one-to-one with JPEG/PNG media",
474
+ "items": {
475
+ "type": "string",
476
+ "description": "One exact image description",
477
+ "minLength": 1,
478
+ "maxLength": 1000
479
+ },
480
+ "minItems": 1,
481
+ "maxItems": 4
482
+ },
483
+ "recipient_opted_in": {
484
+ "type": "boolean",
485
+ "description": "Required acknowledgement of recipient opt-in for an automated reply",
486
+ "enum": [
487
+ true
488
+ ]
489
+ },
490
+ "author_invited_reply": {
491
+ "type": "boolean",
492
+ "description": "Required acknowledgement that the author mentioned or quoted the replying account",
493
+ "enum": [
494
+ true
495
+ ]
496
+ }
497
+ },
498
+ "required": [
499
+ "target_post_id",
500
+ "recipient_opted_in",
501
+ "author_invited_reply"
502
+ ]
503
+ },
504
+ "provider": {
505
+ "provider": "x",
506
+ "action": "replies.create",
507
+ "contractVersion": 1,
508
+ "timeoutMs": 600000,
509
+ "maxOutputBytes": 2097152
510
+ }
511
+ },
512
+ "threads.publish": {
513
+ "description": "Use the code-owned official x API contract for threads.publish. sequential POST /2/tweets; each continuation replies to immediately preceding returned ID; a normal partial return includes committed IDs for manual reconciliation and is never replayed automatically",
514
+ "risk": "R3",
515
+ "sideEffect": "Mutates x through the exact confirmed threads.publish official API contract.",
516
+ "idempotency": "local-at-most-once",
517
+ "dedupeWindowMs": 86400000,
518
+ "input": {
519
+ "properties": {
520
+ "items": {
521
+ "type": "array",
522
+ "description": "Exact ordered thread segments",
523
+ "items": {
524
+ "type": "string",
525
+ "description": "One exact thread segment",
526
+ "minLength": 1,
527
+ "maxLength": 280
528
+ },
529
+ "minItems": 1,
530
+ "maxItems": 25
531
+ },
532
+ "media": {
533
+ "type": "array",
534
+ "description": "Up to 25 reviewed thread attachments in dispatch order",
535
+ "items": {
536
+ "type": "file",
537
+ "description": "One reviewed thread attachment",
538
+ "maxBytes": 536870912,
539
+ "mediaTypes": [
540
+ "image/jpeg",
541
+ "image/png",
542
+ "image/gif",
543
+ "video/mp4"
544
+ ]
545
+ },
546
+ "minItems": 1,
547
+ "maxItems": 25
548
+ },
549
+ "media_item_indices": {
550
+ "type": "array",
551
+ "description": "One-based thread item index aligned one-to-one with media",
552
+ "items": {
553
+ "type": "number",
554
+ "description": "One-based thread item index",
555
+ "minimum": 1,
556
+ "maximum": 25
557
+ },
558
+ "minItems": 1,
559
+ "maxItems": 25
560
+ },
561
+ "media_alt_texts": {
562
+ "type": "array",
563
+ "description": "Accessibility text aligned one-to-one with JPEG/PNG thread media",
564
+ "items": {
565
+ "type": "string",
566
+ "description": "One exact image description",
567
+ "minLength": 1,
568
+ "maxLength": 1000
569
+ },
570
+ "minItems": 1,
571
+ "maxItems": 25
572
+ }
573
+ },
574
+ "required": [
575
+ "items"
576
+ ]
577
+ },
578
+ "provider": {
579
+ "provider": "x",
580
+ "action": "threads.publish",
581
+ "contractVersion": 1,
582
+ "timeoutMs": 600000,
583
+ "maxOutputBytes": 2097152
584
+ }
585
+ },
586
+ "posts.repost": {
587
+ "description": "Use the code-owned official x API contract for posts.repost. POST or DELETE /2/users/{me}/retweets desired-state endpoint",
588
+ "risk": "R3",
589
+ "sideEffect": "Mutates x through the exact confirmed posts.repost official API contract.",
590
+ "idempotency": "local-at-most-once",
591
+ "dedupeWindowMs": 86400000,
592
+ "input": {
593
+ "properties": {
594
+ "post_id": {
595
+ "type": "string",
596
+ "description": "Exact 1-19 digit X post ID",
597
+ "minLength": 1,
598
+ "maxLength": 19
599
+ },
600
+ "enabled": {
601
+ "type": "boolean",
602
+ "description": "Repost when true; undo the authenticated account's repost when false"
603
+ }
604
+ },
605
+ "required": [
606
+ "post_id",
607
+ "enabled"
608
+ ]
609
+ },
610
+ "provider": {
611
+ "provider": "x",
612
+ "action": "posts.repost",
613
+ "contractVersion": 1,
614
+ "timeoutMs": 600000,
615
+ "maxOutputBytes": 2097152
616
+ }
617
+ },
618
+ "content.save": {
619
+ "description": "Use the code-owned official x API contract for content.save. POST or DELETE /2/users/{me}/bookmarks desired-state endpoint",
620
+ "risk": "R2",
621
+ "sideEffect": "Mutates x through the exact confirmed content.save official API contract.",
622
+ "idempotency": "local-at-most-once",
623
+ "dedupeWindowMs": 86400000,
624
+ "input": {
625
+ "properties": {
626
+ "post_id": {
627
+ "type": "string",
628
+ "description": "Exact 1-19 digit X post ID",
629
+ "minLength": 1,
630
+ "maxLength": 19
631
+ },
632
+ "enabled": {
633
+ "type": "boolean",
634
+ "description": "Bookmark when true; remove the bookmark when false"
635
+ }
636
+ },
637
+ "required": [
638
+ "post_id",
639
+ "enabled"
640
+ ]
641
+ },
642
+ "provider": {
643
+ "provider": "x",
644
+ "action": "content.save",
645
+ "contractVersion": 1,
646
+ "timeoutMs": 600000,
647
+ "maxOutputBytes": 2097152
648
+ }
649
+ },
650
+ "articles.draft.save": {
651
+ "description": "Use the code-owned official x API contract for articles.draft.save. optional official image upload; POST /2/articles/draft; stop with one unpublished response-bound draft; account eligibility required",
652
+ "risk": "R2",
653
+ "sideEffect": "Creates one private native X Article draft through the exact confirmed official API contract; it never publishes the draft.",
654
+ "idempotency": "local-at-most-once",
655
+ "dedupeWindowMs": 86400000,
656
+ "input": {
657
+ "properties": {
658
+ "title": {
659
+ "type": "string",
660
+ "description": "Exact X Article title",
661
+ "minLength": 1,
662
+ "maxLength": 100
663
+ },
664
+ "body": {
665
+ "type": "string",
666
+ "description": "Plain-text Article body converted to deterministic DraftJS blocks",
667
+ "minLength": 1,
668
+ "maxLength": 20000
669
+ },
670
+ "cover": {
671
+ "type": "file",
672
+ "description": "Optional Article cover image",
673
+ "maxBytes": 5242880,
674
+ "mediaTypes": [
675
+ "image/jpeg",
676
+ "image/png"
677
+ ]
678
+ },
679
+ "cover_alt_text": {
680
+ "type": "string",
681
+ "description": "Optional accessibility text applied to the reviewed Article cover",
682
+ "minLength": 1,
683
+ "maxLength": 1000
684
+ }
685
+ },
686
+ "required": [
687
+ "title",
688
+ "body"
689
+ ]
690
+ },
691
+ "provider": {
692
+ "provider": "x",
693
+ "action": "articles.draft.save",
694
+ "contractVersion": 1,
695
+ "timeoutMs": 600000,
696
+ "maxOutputBytes": 2097152
697
+ }
698
+ },
699
+ "articles.publish": {
700
+ "description": "Use the code-owned official x API contract for articles.publish. optional official image upload; POST /2/articles/draft; POST /2/articles/{id}/publish; account eligibility required",
701
+ "risk": "R3",
702
+ "sideEffect": "Mutates x through the exact confirmed articles.publish official API contract.",
703
+ "idempotency": "local-at-most-once",
704
+ "dedupeWindowMs": 86400000,
705
+ "input": {
706
+ "properties": {
707
+ "title": {
708
+ "type": "string",
709
+ "description": "Exact X Article title",
710
+ "minLength": 1,
711
+ "maxLength": 100
712
+ },
713
+ "body": {
714
+ "type": "string",
715
+ "description": "Plain-text Article body converted to deterministic DraftJS blocks",
716
+ "minLength": 1,
717
+ "maxLength": 20000
718
+ },
719
+ "cover": {
720
+ "type": "file",
721
+ "description": "Optional Article cover image",
722
+ "maxBytes": 5242880,
723
+ "mediaTypes": [
724
+ "image/jpeg",
725
+ "image/png"
726
+ ]
727
+ },
728
+ "cover_alt_text": {
729
+ "type": "string",
730
+ "description": "Optional accessibility text applied to the reviewed Article cover",
731
+ "minLength": 1,
732
+ "maxLength": 1000
733
+ }
734
+ },
735
+ "required": [
736
+ "title",
737
+ "body"
738
+ ]
739
+ },
740
+ "provider": {
741
+ "provider": "x",
742
+ "action": "articles.publish",
743
+ "contractVersion": 3,
744
+ "timeoutMs": 600000,
745
+ "maxOutputBytes": 2097152
746
+ }
747
+ }
748
+ }
749
+ }