@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,699 @@
1
+ {
2
+ "schemaVersion": 4,
3
+ "id": "threads-web",
4
+ "version": "1.5.0",
5
+ "displayName": "Threads (Authenticated Internal API)",
6
+ "surfaceId": "threads",
7
+ "origins": [
8
+ "https://www.threads.com"
9
+ ],
10
+ "browserDomains": [
11
+ "www.threads.com"
12
+ ],
13
+ "operations": {
14
+ "comments.read": {
15
+ "description": "Capture-required contract reservation: the exact acknowledgement-free response and target binding still require a reviewed live capture.",
16
+ "risk": "R1",
17
+ "sideEffect": "none",
18
+ "idempotency": "none",
19
+ "dedupeWindowMs": 0,
20
+ "input": {
21
+ "properties": {
22
+ "post_id": {
23
+ "type": "string",
24
+ "description": "Exact Threads post ID",
25
+ "minLength": 1,
26
+ "maxLength": 80
27
+ },
28
+ "cursor": {
29
+ "type": "string",
30
+ "description": "Opaque cursor returned by the preceding page",
31
+ "minLength": 1,
32
+ "maxLength": 4096
33
+ },
34
+ "limit": {
35
+ "type": "number",
36
+ "description": "Maximum comments",
37
+ "minimum": 1,
38
+ "maximum": 100
39
+ }
40
+ },
41
+ "required": [
42
+ "post_id"
43
+ ]
44
+ },
45
+ "webSession": {
46
+ "site": "threads",
47
+ "action": "comments.read",
48
+ "contractVersion": 1,
49
+ "timeoutMs": 60000,
50
+ "maxOutputBytes": 8388608
51
+ }
52
+ },
53
+ "content.edit": {
54
+ "description": "Capture-required contract reservation: the exact actor, audience, attachment transport, dispatch response, and independent publication readback require an authorized fixture.",
55
+ "risk": "R3",
56
+ "sideEffect": "Changes remote threads state only after exact preview confirmation and reviewed dispatch.",
57
+ "idempotency": "local-at-most-once",
58
+ "dedupeWindowMs": 86400000,
59
+ "input": {
60
+ "properties": {
61
+ "post_id": {
62
+ "type": "string",
63
+ "description": "Exact Threads post ID",
64
+ "minLength": 1,
65
+ "maxLength": 80
66
+ },
67
+ "body": {
68
+ "type": "string",
69
+ "description": "Replacement text",
70
+ "minLength": 1,
71
+ "maxLength": 450
72
+ }
73
+ },
74
+ "required": [
75
+ "post_id",
76
+ "body"
77
+ ]
78
+ },
79
+ "webSession": {
80
+ "site": "threads",
81
+ "action": "content.edit",
82
+ "contractVersion": 1,
83
+ "timeoutMs": 60000,
84
+ "maxOutputBytes": 8388608
85
+ }
86
+ },
87
+ "content.save": {
88
+ "description": "Capture-required contract reservation: the exact actor, target, mutation response, and independent desired-state readback require an authorized fixture.",
89
+ "risk": "R2",
90
+ "sideEffect": "Changes remote threads state only after exact preview confirmation and reviewed dispatch.",
91
+ "idempotency": "local-at-most-once",
92
+ "dedupeWindowMs": 86400000,
93
+ "input": {
94
+ "properties": {
95
+ "post_id": {
96
+ "type": "string",
97
+ "description": "Exact Threads post ID",
98
+ "minLength": 1,
99
+ "maxLength": 80
100
+ },
101
+ "saved": {
102
+ "type": "boolean",
103
+ "description": "Exact desired saved state"
104
+ }
105
+ },
106
+ "required": [
107
+ "post_id",
108
+ "saved"
109
+ ]
110
+ },
111
+ "webSession": {
112
+ "site": "threads",
113
+ "action": "content.save",
114
+ "contractVersion": 1,
115
+ "timeoutMs": 60000,
116
+ "maxOutputBytes": 8388608
117
+ }
118
+ },
119
+ "content.share": {
120
+ "description": "Capture-required contract reservation: the exact actor, audience, attachment transport, dispatch response, and independent publication readback require an authorized fixture.",
121
+ "risk": "R3",
122
+ "sideEffect": "Changes remote threads state only after exact preview confirmation and reviewed dispatch.",
123
+ "idempotency": "local-at-most-once",
124
+ "dedupeWindowMs": 86400000,
125
+ "input": {
126
+ "properties": {
127
+ "post_id": {
128
+ "type": "string",
129
+ "description": "Exact Threads post ID",
130
+ "minLength": 1,
131
+ "maxLength": 80
132
+ },
133
+ "destination": {
134
+ "type": "string",
135
+ "description": "Reviewed share destination",
136
+ "enum": [
137
+ "capture-required"
138
+ ]
139
+ }
140
+ },
141
+ "required": [
142
+ "post_id",
143
+ "destination"
144
+ ]
145
+ },
146
+ "webSession": {
147
+ "site": "threads",
148
+ "action": "content.share",
149
+ "contractVersion": 1,
150
+ "timeoutMs": 60000,
151
+ "maxOutputBytes": 8388608
152
+ }
153
+ },
154
+ "feeds.read": {
155
+ "description": "Observed contract: one bounded first page from live direct signed-in Threads Relay preload JSON with exact Barcelona viewer binding and no continuation cursor accepted or exposed.",
156
+ "risk": "R1",
157
+ "sideEffect": "none",
158
+ "idempotency": "none",
159
+ "dedupeWindowMs": 0,
160
+ "input": {
161
+ "properties": {
162
+ "feed": {
163
+ "type": "string",
164
+ "description": "Reviewed feed",
165
+ "enum": [
166
+ "for-you"
167
+ ]
168
+ },
169
+ "limit": {
170
+ "type": "number",
171
+ "description": "Maximum results",
172
+ "minimum": 1,
173
+ "maximum": 30
174
+ }
175
+ },
176
+ "required": [
177
+ "feed"
178
+ ]
179
+ },
180
+ "webSession": {
181
+ "site": "threads",
182
+ "action": "feeds.read",
183
+ "contractVersion": 2,
184
+ "timeoutMs": 60000,
185
+ "maxOutputBytes": 8388608
186
+ }
187
+ },
188
+ "likes.set": {
189
+ "description": "Capture-required contract reservation: the exact actor, target, mutation response, and independent desired-state readback require an authorized fixture.",
190
+ "risk": "R2",
191
+ "sideEffect": "Changes remote threads state only after exact preview confirmation and reviewed dispatch.",
192
+ "idempotency": "local-at-most-once",
193
+ "dedupeWindowMs": 86400000,
194
+ "input": {
195
+ "properties": {
196
+ "post_id": {
197
+ "type": "string",
198
+ "description": "Exact Threads post ID",
199
+ "minLength": 1,
200
+ "maxLength": 80
201
+ },
202
+ "liked": {
203
+ "type": "boolean",
204
+ "description": "Exact desired like state"
205
+ }
206
+ },
207
+ "required": [
208
+ "post_id",
209
+ "liked"
210
+ ]
211
+ },
212
+ "webSession": {
213
+ "site": "threads",
214
+ "action": "likes.set",
215
+ "contractVersion": 1,
216
+ "timeoutMs": 60000,
217
+ "maxOutputBytes": 8388608
218
+ }
219
+ },
220
+ "media.read": {
221
+ "description": "Capture-required contract reservation: the exact acknowledgement-free response and target binding still require a reviewed live capture.",
222
+ "risk": "R1",
223
+ "sideEffect": "none",
224
+ "idempotency": "none",
225
+ "dedupeWindowMs": 0,
226
+ "input": {
227
+ "properties": {
228
+ "post_id": {
229
+ "type": "string",
230
+ "description": "Exact Threads post ID",
231
+ "minLength": 1,
232
+ "maxLength": 80
233
+ }
234
+ },
235
+ "required": [
236
+ "post_id"
237
+ ]
238
+ },
239
+ "webSession": {
240
+ "site": "threads",
241
+ "action": "media.read",
242
+ "contractVersion": 1,
243
+ "timeoutMs": 60000,
244
+ "maxOutputBytes": 8388608
245
+ }
246
+ },
247
+ "media.publish": {
248
+ "description": "Capture-required contract reservation: publish one confirmed Threads video only after exact resumable upload, processing completion, viewer and audience binding, created locator retention, and independent exact permalink actor/text/video readback are reviewed.",
249
+ "risk": "R3",
250
+ "sideEffect": "Uploads one video and publishes one externally visible Threads post with the exact confirmed body and audience.",
251
+ "idempotency": "local-at-most-once",
252
+ "dedupeWindowMs": 86400000,
253
+ "input": {
254
+ "properties": {
255
+ "body": {
256
+ "type": "string",
257
+ "description": "Exact post body",
258
+ "minLength": 1,
259
+ "maxLength": 450
260
+ },
261
+ "media": {
262
+ "type": "file",
263
+ "description": "Exact plan-bound Threads MP4",
264
+ "maxBytes": 1073741824,
265
+ "mediaTypes": [
266
+ "video/mp4"
267
+ ]
268
+ },
269
+ "alt_text": {
270
+ "type": "string",
271
+ "description": "Optional exact video accessibility text",
272
+ "minLength": 1,
273
+ "maxLength": 1000
274
+ },
275
+ "audience": {
276
+ "type": "string",
277
+ "description": "Explicit audience",
278
+ "enum": [
279
+ "default"
280
+ ]
281
+ }
282
+ },
283
+ "required": [
284
+ "body",
285
+ "media",
286
+ "audience"
287
+ ]
288
+ },
289
+ "webSession": {
290
+ "site": "threads",
291
+ "action": "media.publish",
292
+ "contractVersion": 1,
293
+ "timeoutMs": 600000,
294
+ "maxOutputBytes": 8388608
295
+ }
296
+ },
297
+ "messaging.list": {
298
+ "description": "Capture-required contract reservation: Threads inbox uses Lightspeed/Msys state and may acknowledge or update presence; Relay setup metadata is not message-list authority.",
299
+ "risk": "R1",
300
+ "sideEffect": "none",
301
+ "idempotency": "none",
302
+ "dedupeWindowMs": 0,
303
+ "input": {
304
+ "properties": {
305
+ "folder": {
306
+ "type": "string",
307
+ "description": "Reviewed inbox folder",
308
+ "enum": [
309
+ "inbox"
310
+ ]
311
+ },
312
+ "cursor": {
313
+ "type": "string",
314
+ "description": "Opaque cursor returned by the preceding page",
315
+ "minLength": 1,
316
+ "maxLength": 4096
317
+ },
318
+ "limit": {
319
+ "type": "number",
320
+ "description": "Maximum thread summaries",
321
+ "minimum": 1,
322
+ "maximum": 50
323
+ }
324
+ },
325
+ "required": [
326
+ "folder"
327
+ ]
328
+ },
329
+ "webSession": {
330
+ "site": "threads",
331
+ "action": "messaging.list",
332
+ "contractVersion": 1,
333
+ "timeoutMs": 60000,
334
+ "maxOutputBytes": 8388608
335
+ }
336
+ },
337
+ "messaging.read": {
338
+ "description": "Capture-required contract reservation: Threads conversation reads require protocol-correct Lightspeed/Msys acknowledgement analysis.",
339
+ "risk": "R1",
340
+ "sideEffect": "none",
341
+ "idempotency": "none",
342
+ "dedupeWindowMs": 0,
343
+ "input": {
344
+ "properties": {
345
+ "conversation_id": {
346
+ "type": "string",
347
+ "description": "Exact conversation ID",
348
+ "minLength": 1,
349
+ "maxLength": 512
350
+ },
351
+ "cursor": {
352
+ "type": "string",
353
+ "description": "Opaque cursor returned by the preceding page",
354
+ "minLength": 1,
355
+ "maxLength": 4096
356
+ },
357
+ "limit": {
358
+ "type": "number",
359
+ "description": "Maximum messages",
360
+ "minimum": 1,
361
+ "maximum": 100
362
+ }
363
+ },
364
+ "required": [
365
+ "conversation_id"
366
+ ]
367
+ },
368
+ "webSession": {
369
+ "site": "threads",
370
+ "action": "messaging.read",
371
+ "contractVersion": 1,
372
+ "timeoutMs": 60000,
373
+ "maxOutputBytes": 8388608
374
+ }
375
+ },
376
+ "messaging.send": {
377
+ "description": "Capture-required contract reservation: Threads message send requires protocol-correct Lightspeed/Msys or E2EE implementation.",
378
+ "risk": "R3",
379
+ "sideEffect": "Changes remote threads state only after exact preview confirmation and reviewed dispatch.",
380
+ "idempotency": "local-at-most-once",
381
+ "dedupeWindowMs": 86400000,
382
+ "input": {
383
+ "properties": {
384
+ "conversation_id": {
385
+ "type": "string",
386
+ "description": "Exact conversation ID",
387
+ "minLength": 1,
388
+ "maxLength": 512
389
+ },
390
+ "body": {
391
+ "type": "string",
392
+ "description": "Message body",
393
+ "minLength": 1,
394
+ "maxLength": 1000
395
+ },
396
+ "attachment": {
397
+ "type": "file",
398
+ "description": "Optional exact message attachment",
399
+ "maxBytes": 1073741824,
400
+ "mediaTypes": [
401
+ "image/*",
402
+ "video/*"
403
+ ]
404
+ }
405
+ },
406
+ "required": [
407
+ "conversation_id",
408
+ "body"
409
+ ]
410
+ },
411
+ "webSession": {
412
+ "site": "threads",
413
+ "action": "messaging.send",
414
+ "contractVersion": 1,
415
+ "timeoutMs": 60000,
416
+ "maxOutputBytes": 8388608
417
+ }
418
+ },
419
+ "posts.publish": {
420
+ "description": "Observed contract: publish one confirmed Threads post with one reviewed PNG after exact viewer binding, synchronous upload completion, exact minimal created-locator binding, durable upload-dimension target retention, and independent exact permalink actor/text/image readback.",
421
+ "risk": "R3",
422
+ "sideEffect": "Publishes one externally visible Threads post with the exact confirmed text and one reviewed PNG.",
423
+ "idempotency": "local-at-most-once",
424
+ "dedupeWindowMs": 86400000,
425
+ "input": {
426
+ "properties": {
427
+ "body": {
428
+ "type": "string",
429
+ "description": "Post body",
430
+ "minLength": 1,
431
+ "maxLength": 450
432
+ },
433
+ "attachment": {
434
+ "type": "file",
435
+ "description": "One exact reviewed PNG attachment",
436
+ "maxBytes": 20971520,
437
+ "mediaTypes": [
438
+ "image/png"
439
+ ]
440
+ },
441
+ "audience": {
442
+ "type": "string",
443
+ "description": "Explicit audience",
444
+ "enum": [
445
+ "default"
446
+ ]
447
+ }
448
+ },
449
+ "required": [
450
+ "attachment",
451
+ "body"
452
+ ]
453
+ },
454
+ "webSession": {
455
+ "site": "threads",
456
+ "action": "posts.publish",
457
+ "contractVersion": 4,
458
+ "timeoutMs": 60000,
459
+ "maxOutputBytes": 8388608
460
+ }
461
+ },
462
+ "posts.quote": {
463
+ "description": "Capture-required contract reservation: the exact actor, audience, attachment transport, dispatch response, and independent publication readback require an authorized fixture.",
464
+ "risk": "R3",
465
+ "sideEffect": "Changes remote threads state only after exact preview confirmation and reviewed dispatch.",
466
+ "idempotency": "local-at-most-once",
467
+ "dedupeWindowMs": 86400000,
468
+ "input": {
469
+ "properties": {
470
+ "post_id": {
471
+ "type": "string",
472
+ "description": "Exact Threads post ID",
473
+ "minLength": 1,
474
+ "maxLength": 80
475
+ },
476
+ "body": {
477
+ "type": "string",
478
+ "description": "Quote text",
479
+ "minLength": 1,
480
+ "maxLength": 450
481
+ }
482
+ },
483
+ "required": [
484
+ "post_id",
485
+ "body"
486
+ ]
487
+ },
488
+ "webSession": {
489
+ "site": "threads",
490
+ "action": "posts.quote",
491
+ "contractVersion": 1,
492
+ "timeoutMs": 60000,
493
+ "maxOutputBytes": 8388608
494
+ }
495
+ },
496
+ "posts.read": {
497
+ "description": "Capture-required contract reservation: the exact acknowledgement-free response and target binding still require a reviewed live capture.",
498
+ "risk": "R1",
499
+ "sideEffect": "none",
500
+ "idempotency": "none",
501
+ "dedupeWindowMs": 0,
502
+ "input": {
503
+ "properties": {
504
+ "post_id": {
505
+ "type": "string",
506
+ "description": "Exact Threads post ID",
507
+ "minLength": 1,
508
+ "maxLength": 80
509
+ }
510
+ },
511
+ "required": [
512
+ "post_id"
513
+ ]
514
+ },
515
+ "webSession": {
516
+ "site": "threads",
517
+ "action": "posts.read",
518
+ "contractVersion": 1,
519
+ "timeoutMs": 60000,
520
+ "maxOutputBytes": 8388608
521
+ }
522
+ },
523
+ "posts.repost": {
524
+ "description": "Capture-required contract reservation: the exact actor, audience, attachment transport, dispatch response, and independent publication readback require an authorized fixture.",
525
+ "risk": "R3",
526
+ "sideEffect": "Changes remote threads state only after exact preview confirmation and reviewed dispatch.",
527
+ "idempotency": "local-at-most-once",
528
+ "dedupeWindowMs": 86400000,
529
+ "input": {
530
+ "properties": {
531
+ "post_id": {
532
+ "type": "string",
533
+ "description": "Exact Threads post ID",
534
+ "minLength": 1,
535
+ "maxLength": 80
536
+ },
537
+ "reposted": {
538
+ "type": "boolean",
539
+ "description": "Exact desired repost state"
540
+ }
541
+ },
542
+ "required": [
543
+ "post_id",
544
+ "reposted"
545
+ ]
546
+ },
547
+ "webSession": {
548
+ "site": "threads",
549
+ "action": "posts.repost",
550
+ "contractVersion": 1,
551
+ "timeoutMs": 60000,
552
+ "maxOutputBytes": 8388608
553
+ }
554
+ },
555
+ "profiles.read": {
556
+ "description": "Observed contract: read an exact target-bound Threads follower count and explicit recent-views availability from the signed-in profile and Insights pages.",
557
+ "risk": "R1",
558
+ "sideEffect": "none",
559
+ "idempotency": "none",
560
+ "dedupeWindowMs": 0,
561
+ "input": {
562
+ "properties": {
563
+ "profile": {
564
+ "type": "string",
565
+ "description": "Canonical lowercase Threads handle bound to the signed-in profile",
566
+ "minLength": 1,
567
+ "maxLength": 30
568
+ }
569
+ },
570
+ "required": [
571
+ "profile"
572
+ ]
573
+ },
574
+ "webSession": {
575
+ "site": "threads",
576
+ "action": "profiles.read",
577
+ "contractVersion": 1,
578
+ "timeoutMs": 60000,
579
+ "maxOutputBytes": 8388608
580
+ }
581
+ },
582
+ "relationships.follow.set": {
583
+ "description": "Capture-required contract reservation: the exact actor, target, mutation response, and independent desired-state readback require an authorized fixture.",
584
+ "risk": "R2",
585
+ "sideEffect": "Changes remote threads state only after exact preview confirmation and reviewed dispatch.",
586
+ "idempotency": "local-at-most-once",
587
+ "dedupeWindowMs": 86400000,
588
+ "input": {
589
+ "properties": {
590
+ "user_id": {
591
+ "type": "string",
592
+ "description": "Exact target account ID",
593
+ "minLength": 1,
594
+ "maxLength": 80
595
+ },
596
+ "following": {
597
+ "type": "boolean",
598
+ "description": "Exact desired following state"
599
+ }
600
+ },
601
+ "required": [
602
+ "user_id",
603
+ "following"
604
+ ]
605
+ },
606
+ "webSession": {
607
+ "site": "threads",
608
+ "action": "relationships.follow.set",
609
+ "contractVersion": 1,
610
+ "timeoutMs": 60000,
611
+ "maxOutputBytes": 8388608
612
+ }
613
+ },
614
+ "replies.create": {
615
+ "description": "Capture-required contract reservation: the exact actor, audience, attachment transport, dispatch response, and independent publication readback require an authorized fixture.",
616
+ "risk": "R3",
617
+ "sideEffect": "Changes remote threads state only after exact preview confirmation and reviewed dispatch.",
618
+ "idempotency": "local-at-most-once",
619
+ "dedupeWindowMs": 86400000,
620
+ "input": {
621
+ "properties": {
622
+ "post_id": {
623
+ "type": "string",
624
+ "description": "Exact Threads post ID",
625
+ "minLength": 1,
626
+ "maxLength": 80
627
+ },
628
+ "comment_id": {
629
+ "type": "string",
630
+ "description": "Exact parent comment ID",
631
+ "minLength": 1,
632
+ "maxLength": 256
633
+ },
634
+ "body": {
635
+ "type": "string",
636
+ "description": "Reply body",
637
+ "minLength": 1,
638
+ "maxLength": 450
639
+ },
640
+ "attachment": {
641
+ "type": "file",
642
+ "description": "Optional exact reply attachment",
643
+ "maxBytes": 1073741824,
644
+ "mediaTypes": [
645
+ "image/*",
646
+ "video/*",
647
+ "image/gif"
648
+ ]
649
+ }
650
+ },
651
+ "required": [
652
+ "post_id",
653
+ "comment_id",
654
+ "body"
655
+ ]
656
+ },
657
+ "webSession": {
658
+ "site": "threads",
659
+ "action": "replies.create",
660
+ "contractVersion": 1,
661
+ "timeoutMs": 60000,
662
+ "maxOutputBytes": 8388608
663
+ }
664
+ },
665
+ "threads.publish": {
666
+ "description": "Capture-required contract reservation: the exact actor, audience, attachment transport, dispatch response, and independent publication readback require an authorized fixture.",
667
+ "risk": "R3",
668
+ "sideEffect": "Changes remote threads state only after exact preview confirmation and reviewed dispatch.",
669
+ "idempotency": "local-at-most-once",
670
+ "dedupeWindowMs": 86400000,
671
+ "input": {
672
+ "properties": {
673
+ "items": {
674
+ "type": "array",
675
+ "description": "Ordered root and self-replies",
676
+ "minItems": 1,
677
+ "maxItems": 25,
678
+ "items": {
679
+ "type": "string",
680
+ "description": "One thread item",
681
+ "minLength": 1,
682
+ "maxLength": 450
683
+ }
684
+ }
685
+ },
686
+ "required": [
687
+ "items"
688
+ ]
689
+ },
690
+ "webSession": {
691
+ "site": "threads",
692
+ "action": "threads.publish",
693
+ "contractVersion": 1,
694
+ "timeoutMs": 60000,
695
+ "maxOutputBytes": 8388608
696
+ }
697
+ }
698
+ }
699
+ }