@tikomni/skills 0.1.3 → 0.1.4

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 (474) hide show
  1. package/.skill-package-allowlist.txt +1 -3
  2. package/README.md +41 -49
  3. package/README.zh-CN.md +43 -51
  4. package/bin/tikomni-skills.js +2 -2
  5. package/env.example +37 -56
  6. package/package.json +7 -5
  7. package/skills/social-media-crawl/SKILL.md +53 -0
  8. package/skills/social-media-crawl/agents/openai.yaml +5 -0
  9. package/skills/social-media-crawl/references/contracts/output-envelope.md +22 -0
  10. package/skills/social-media-crawl/references/contracts/work-fact-card-fields.md +48 -0
  11. package/skills/social-media-crawl/references/guides/generic-mcp-objects.md +30 -0
  12. package/skills/social-media-crawl/references/mcp-usage-contract.md +30 -0
  13. package/skills/social-media-crawl/references/pipelines/douyin-creator-home.md +7 -0
  14. package/skills/social-media-crawl/references/pipelines/douyin-single-work.md +7 -0
  15. package/skills/social-media-crawl/references/pipelines/xiaohongshu-creator-home.md +7 -0
  16. package/skills/social-media-crawl/references/pipelines/xiaohongshu-single-work.md +7 -0
  17. package/skills/social-media-crawl/references/schemas/creator-profile.schema.json +33 -0
  18. package/skills/social-media-crawl/references/schemas/output-envelope.schema.json +41 -0
  19. package/skills/social-media-crawl/references/schemas/work-collection.schema.json +29 -0
  20. package/skills/social-media-crawl/references/schemas/work-fact-card.schema.json +67 -0
  21. package/skills/social-media-crawl/references/service-guides/u2-u3-mandatory-fallback.md +21 -0
  22. package/skills/social-media-crawl/scripts/__init__.py +2 -0
  23. package/skills/social-media-crawl/scripts/core/__init__.py +2 -0
  24. package/skills/{single-work-analysis/scripts/pipeline/asr → social-media-crawl/scripts/core}/asr_pipeline.py +98 -2
  25. package/skills/social-media-crawl/scripts/core/completeness.py +83 -0
  26. package/skills/{single-work-analysis → social-media-crawl}/scripts/core/config_loader.py +106 -141
  27. package/skills/social-media-crawl/scripts/core/mcp_dispatch.py +145 -0
  28. package/skills/social-media-crawl/scripts/core/object_detection.py +63 -0
  29. package/skills/{single-work-analysis/scripts/pipeline/asr → social-media-crawl/scripts/core}/poll_u2_task.py +3 -1
  30. package/skills/{creator-analysis → social-media-crawl}/scripts/core/progress_report.py +32 -0
  31. package/skills/social-media-crawl/scripts/core/storage_router.py +160 -0
  32. package/skills/social-media-crawl/scripts/core/u3_fallback.py +328 -0
  33. package/skills/social-media-crawl/scripts/pipelines/__init__.py +2 -0
  34. package/skills/social-media-crawl/scripts/pipelines/douyin_creator_home_helpers.py +35 -0
  35. package/skills/social-media-crawl/scripts/pipelines/douyin_platform_adapter.py +7 -0
  36. package/skills/{creator-analysis/scripts/author_home/asr → social-media-crawl/scripts/pipelines}/home_asr.py +1 -1
  37. package/skills/{creator-analysis/scripts/author_home/adapters → social-media-crawl/scripts/pipelines}/platform_adapters.py +8 -2
  38. package/skills/social-media-crawl/scripts/pipelines/run_douyin_creator_home.py +237 -0
  39. package/skills/{single-work-analysis/scripts/platform/douyin/run_douyin_single_video.py → social-media-crawl/scripts/pipelines/run_douyin_single_work.py} +58 -149
  40. package/skills/social-media-crawl/scripts/pipelines/run_xiaohongshu_creator_home.py +237 -0
  41. package/skills/{single-work-analysis/scripts/platform/xiaohongshu/run_xiaohongshu_extract.py → social-media-crawl/scripts/pipelines/run_xiaohongshu_single_work.py} +30 -119
  42. package/skills/{creator-analysis/scripts/author_home → social-media-crawl/scripts/pipelines}/schema.py +1 -1
  43. package/skills/social-media-crawl/scripts/pipelines/xiaohongshu_creator_home_helpers.py +35 -0
  44. package/skills/social-media-crawl/scripts/pipelines/xiaohongshu_platform_adapter.py +7 -0
  45. package/skills/social-media-crawl/scripts/writers/__init__.py +1 -0
  46. package/skills/social-media-crawl/scripts/writers/write_work_fact_card.py +391 -0
  47. package/skills/creator-analysis/SKILL.md +0 -95
  48. package/skills/creator-analysis/agents/openai.yaml +0 -4
  49. package/skills/creator-analysis/env.example +0 -36
  50. package/skills/creator-analysis/references/api-capability-index.md +0 -92
  51. package/skills/creator-analysis/references/api-contracts/asr-api.md +0 -130
  52. package/skills/creator-analysis/references/api-contracts/bilibili-app-api.md +0 -776
  53. package/skills/creator-analysis/references/api-contracts/bilibili-web-api.md +0 -2017
  54. package/skills/creator-analysis/references/api-contracts/demo-api.md +0 -717
  55. package/skills/creator-analysis/references/api-contracts/douyin-app-v3-api.md +0 -3594
  56. package/skills/creator-analysis/references/api-contracts/douyin-billboard-api.md +0 -2274
  57. package/skills/creator-analysis/references/api-contracts/douyin-creator-api.md +0 -1575
  58. package/skills/creator-analysis/references/api-contracts/douyin-creator-v2-api.md +0 -3254
  59. package/skills/creator-analysis/references/api-contracts/douyin-search-api.md +0 -4118
  60. package/skills/creator-analysis/references/api-contracts/douyin-web-api.md +0 -5544
  61. package/skills/creator-analysis/references/api-contracts/douyin-xingtu-api.md +0 -1916
  62. package/skills/creator-analysis/references/api-contracts/douyin-xingtu-v2-api.md +0 -1540
  63. package/skills/creator-analysis/references/api-contracts/health-check.md +0 -69
  64. package/skills/creator-analysis/references/api-contracts/hybrid-parsing.md +0 -78
  65. package/skills/creator-analysis/references/api-contracts/instagram-v1-api.md +0 -2256
  66. package/skills/creator-analysis/references/api-contracts/instagram-v2-api.md +0 -2011
  67. package/skills/creator-analysis/references/api-contracts/instagram-v3-api.md +0 -2630
  68. package/skills/creator-analysis/references/api-contracts/ios-shortcut.md +0 -44
  69. package/skills/creator-analysis/references/api-contracts/kuaishou-app-api.md +0 -1518
  70. package/skills/creator-analysis/references/api-contracts/kuaishou-web-api.md +0 -1242
  71. package/skills/creator-analysis/references/api-contracts/lemon8-app-api.md +0 -1088
  72. package/skills/creator-analysis/references/api-contracts/linkedin-web-api.md +0 -1949
  73. package/skills/creator-analysis/references/api-contracts/media-ingest-api.md +0 -126
  74. package/skills/creator-analysis/references/api-contracts/pipixia-app-api.md +0 -1142
  75. package/skills/creator-analysis/references/api-contracts/reddit-app-api.md +0 -2025
  76. package/skills/creator-analysis/references/api-contracts/sora2-api.md +0 -2266
  77. package/skills/creator-analysis/references/api-contracts/temp-mail-api.md +0 -208
  78. package/skills/creator-analysis/references/api-contracts/threads-web-api.md +0 -897
  79. package/skills/creator-analysis/references/api-contracts/tikhub-downloader-api.md +0 -134
  80. package/skills/creator-analysis/references/api-contracts/tikhub-user-api.md +0 -494
  81. package/skills/creator-analysis/references/api-contracts/tiktok-ads-api.md +0 -5947
  82. package/skills/creator-analysis/references/api-contracts/tiktok-analytics-api.md +0 -968
  83. package/skills/creator-analysis/references/api-contracts/tiktok-app-v3-api.md +0 -5735
  84. package/skills/creator-analysis/references/api-contracts/tiktok-creator-api.md +0 -1951
  85. package/skills/creator-analysis/references/api-contracts/tiktok-interaction-api.md +0 -742
  86. package/skills/creator-analysis/references/api-contracts/tiktok-shop-web-api.md +0 -1890
  87. package/skills/creator-analysis/references/api-contracts/tiktok-web-api.md +0 -4448
  88. package/skills/creator-analysis/references/api-contracts/toutiao-app-api.md +0 -342
  89. package/skills/creator-analysis/references/api-contracts/toutiao-web-api.md +0 -143
  90. package/skills/creator-analysis/references/api-contracts/twitter-web-api.md +0 -989
  91. package/skills/creator-analysis/references/api-contracts/wechat-channels-api.md +0 -809
  92. package/skills/creator-analysis/references/api-contracts/wechat-media-platform-web-api.md +0 -677
  93. package/skills/creator-analysis/references/api-contracts/weibo-app-api.md +0 -1547
  94. package/skills/creator-analysis/references/api-contracts/weibo-web-api.md +0 -798
  95. package/skills/creator-analysis/references/api-contracts/weibo-web-v2-api.md +0 -2459
  96. package/skills/creator-analysis/references/api-contracts/xiaohongshu-app-api.md +0 -1291
  97. package/skills/creator-analysis/references/api-contracts/xiaohongshu-app-v2-api.md +0 -1683
  98. package/skills/creator-analysis/references/api-contracts/xiaohongshu-web-api.md +0 -1324
  99. package/skills/creator-analysis/references/api-contracts/xiaohongshu-web-v2-api.md +0 -1209
  100. package/skills/creator-analysis/references/api-contracts/xigua-app-v2-api.md +0 -489
  101. package/skills/creator-analysis/references/api-contracts/youtube-web-api.md +0 -2636
  102. package/skills/creator-analysis/references/api-contracts/youtube-web-v2-api.md +0 -2660
  103. package/skills/creator-analysis/references/api-contracts/zhihu-web-api.md +0 -2315
  104. package/skills/creator-analysis/references/api-tags/asr-api.md +0 -100
  105. package/skills/creator-analysis/references/api-tags/bilibili-app-api.md +0 -482
  106. package/skills/creator-analysis/references/api-tags/bilibili-web-api.md +0 -1267
  107. package/skills/creator-analysis/references/api-tags/demo-api.md +0 -365
  108. package/skills/creator-analysis/references/api-tags/douyin-app-v3-api.md +0 -2012
  109. package/skills/creator-analysis/references/api-tags/douyin-billboard-api.md +0 -1428
  110. package/skills/creator-analysis/references/api-tags/douyin-creator-api.md +0 -694
  111. package/skills/creator-analysis/references/api-tags/douyin-creator-v2-api.md +0 -694
  112. package/skills/creator-analysis/references/api-tags/douyin-search-api.md +0 -1059
  113. package/skills/creator-analysis/references/api-tags/douyin-web-api.md +0 -3314
  114. package/skills/creator-analysis/references/api-tags/douyin-xingtu-api.md +0 -935
  115. package/skills/creator-analysis/references/api-tags/douyin-xingtu-v2-api.md +0 -925
  116. package/skills/creator-analysis/references/api-tags/health-check.md +0 -40
  117. package/skills/creator-analysis/references/api-tags/hybrid-parsing.md +0 -57
  118. package/skills/creator-analysis/references/api-tags/instagram-v1-api.md +0 -1224
  119. package/skills/creator-analysis/references/api-tags/instagram-v2-api.md +0 -1147
  120. package/skills/creator-analysis/references/api-tags/instagram-v3-api.md +0 -1123
  121. package/skills/creator-analysis/references/api-tags/ios-shortcut.md +0 -45
  122. package/skills/creator-analysis/references/api-tags/kuaishou-app-api.md +0 -846
  123. package/skills/creator-analysis/references/api-tags/kuaishou-web-api.md +0 -551
  124. package/skills/creator-analysis/references/api-tags/lemon8-app-api.md +0 -687
  125. package/skills/creator-analysis/references/api-tags/linkedin-web-api.md +0 -1105
  126. package/skills/creator-analysis/references/api-tags/media-ingest-api.md +0 -112
  127. package/skills/creator-analysis/references/api-tags/pipixia-app-api.md +0 -721
  128. package/skills/creator-analysis/references/api-tags/reddit-app-api.md +0 -1057
  129. package/skills/creator-analysis/references/api-tags/sora2-api.md +0 -737
  130. package/skills/creator-analysis/references/api-tags/temp-mail-api.md +0 -136
  131. package/skills/creator-analysis/references/api-tags/threads-web-api.md +0 -472
  132. package/skills/creator-analysis/references/api-tags/tikhub-downloader-api.md +0 -65
  133. package/skills/creator-analysis/references/api-tags/tikhub-user-api.md +0 -253
  134. package/skills/creator-analysis/references/api-tags/tiktok-ads-api.md +0 -1393
  135. package/skills/creator-analysis/references/api-tags/tiktok-analytics-api.md +0 -179
  136. package/skills/creator-analysis/references/api-tags/tiktok-app-v3-api.md +0 -3264
  137. package/skills/creator-analysis/references/api-tags/tiktok-creator-api.md +0 -709
  138. package/skills/creator-analysis/references/api-tags/tiktok-interaction-api.md +0 -366
  139. package/skills/creator-analysis/references/api-tags/tiktok-shop-web-api.md +0 -663
  140. package/skills/creator-analysis/references/api-tags/tiktok-web-api.md +0 -2516
  141. package/skills/creator-analysis/references/api-tags/toutiao-app-api.md +0 -220
  142. package/skills/creator-analysis/references/api-tags/toutiao-web-api.md +0 -96
  143. package/skills/creator-analysis/references/api-tags/twitter-web-api.md +0 -562
  144. package/skills/creator-analysis/references/api-tags/wechat-channels-api.md +0 -405
  145. package/skills/creator-analysis/references/api-tags/wechat-media-platform-web-api.md +0 -431
  146. package/skills/creator-analysis/references/api-tags/weibo-app-api.md +0 -851
  147. package/skills/creator-analysis/references/api-tags/weibo-web-api.md +0 -470
  148. package/skills/creator-analysis/references/api-tags/weibo-web-v2-api.md +0 -1405
  149. package/skills/creator-analysis/references/api-tags/xiaohongshu-app-api.md +0 -534
  150. package/skills/creator-analysis/references/api-tags/xiaohongshu-app-v2-api.md +0 -934
  151. package/skills/creator-analysis/references/api-tags/xiaohongshu-web-api.md +0 -757
  152. package/skills/creator-analysis/references/api-tags/xiaohongshu-web-v2-api.md +0 -762
  153. package/skills/creator-analysis/references/api-tags/xigua-app-v2-api.md +0 -308
  154. package/skills/creator-analysis/references/api-tags/youtube-web-api.md +0 -934
  155. package/skills/creator-analysis/references/api-tags/youtube-web-v2-api.md +0 -717
  156. package/skills/creator-analysis/references/api-tags/zhihu-web-api.md +0 -1384
  157. package/skills/creator-analysis/references/asr-orchestration.md +0 -33
  158. package/skills/creator-analysis/references/config-templates/defaults.yaml +0 -60
  159. package/skills/creator-analysis/references/contracts/creator-card-fields.md +0 -25
  160. package/skills/creator-analysis/references/contracts/work-card-fields.md +0 -68
  161. package/skills/creator-analysis/references/platform-guides/douyin.md +0 -54
  162. package/skills/creator-analysis/references/platform-guides/generic.md +0 -50
  163. package/skills/creator-analysis/references/platform-guides/xiaohongshu.md +0 -69
  164. package/skills/creator-analysis/references/prompt-contracts/asr-clean.md +0 -28
  165. package/skills/creator-analysis/references/prompt-contracts/author-analysis-v2.md +0 -46
  166. package/skills/creator-analysis/references/prompt-contracts/author-analysis.md +0 -49
  167. package/skills/creator-analysis/references/prompt-contracts/cta.md +0 -24
  168. package/skills/creator-analysis/references/prompt-contracts/hook.md +0 -25
  169. package/skills/creator-analysis/references/prompt-contracts/insight.md +0 -47
  170. package/skills/creator-analysis/references/prompt-contracts/sampled-work-batch-explanations.md +0 -30
  171. package/skills/creator-analysis/references/prompt-contracts/structure.md +0 -25
  172. package/skills/creator-analysis/references/prompt-contracts/style.md +0 -27
  173. package/skills/creator-analysis/references/prompt-contracts/summary.md +0 -29
  174. package/skills/creator-analysis/references/prompt-contracts/topic.md +0 -29
  175. package/skills/creator-analysis/references/schemas/author-analysis-input-v1.schema.json +0 -325
  176. package/skills/creator-analysis/references/schemas/author-analysis-v2.schema.json +0 -287
  177. package/skills/creator-analysis/references/schemas/sampled-work-batch-explanations.schema.json +0 -41
  178. package/skills/creator-analysis/references/service-guides/asr-u2-u3-fallback.md +0 -75
  179. package/skills/creator-analysis/references/workflow.md +0 -23
  180. package/skills/creator-analysis/scripts/__init__.py +0 -0
  181. package/skills/creator-analysis/scripts/author_home/__init__.py +0 -0
  182. package/skills/creator-analysis/scripts/author_home/adapters/__init__.py +0 -0
  183. package/skills/creator-analysis/scripts/author_home/analyzers/__init__.py +0 -0
  184. package/skills/creator-analysis/scripts/author_home/analyzers/author_analysis_v2_support.py +0 -1165
  185. package/skills/creator-analysis/scripts/author_home/analyzers/prompt_first_analyzers.py +0 -447
  186. package/skills/creator-analysis/scripts/author_home/analyzers/sampled_work_batch_explainer.py +0 -331
  187. package/skills/creator-analysis/scripts/author_home/asr/__init__.py +0 -5
  188. package/skills/creator-analysis/scripts/author_home/builders/__init__.py +0 -0
  189. package/skills/creator-analysis/scripts/author_home/builders/home_builders.py +0 -213
  190. package/skills/creator-analysis/scripts/author_home/collectors/__init__.py +0 -0
  191. package/skills/creator-analysis/scripts/author_home/orchestrator/__init__.py +0 -0
  192. package/skills/creator-analysis/scripts/author_home/orchestrator/run_author_analysis.py +0 -834
  193. package/skills/creator-analysis/scripts/author_home/orchestrator/work_analysis_artifacts.py +0 -609
  194. package/skills/creator-analysis/scripts/core/__init__.py +0 -0
  195. package/skills/creator-analysis/scripts/core/analysis_pipeline.py +0 -133
  196. package/skills/creator-analysis/scripts/core/config_loader.py +0 -418
  197. package/skills/creator-analysis/scripts/core/storage_router.py +0 -256
  198. package/skills/creator-analysis/scripts/core/tikomni_common.py +0 -588
  199. package/skills/creator-analysis/scripts/pipeline/__init__.py +0 -0
  200. package/skills/creator-analysis/scripts/pipeline/asr/__init__.py +0 -0
  201. package/skills/creator-analysis/scripts/pipeline/asr/asr_pipeline.py +0 -1189
  202. package/skills/creator-analysis/scripts/pipeline/asr/poll_u2_task.py +0 -95
  203. package/skills/creator-analysis/scripts/platform/__init__.py +0 -0
  204. package/skills/creator-analysis/scripts/platform/douyin/__init__.py +0 -0
  205. package/skills/creator-analysis/scripts/platform/douyin/run_douyin_single_video.py +0 -1208
  206. package/skills/creator-analysis/scripts/platform/xiaohongshu/__init__.py +0 -0
  207. package/skills/creator-analysis/scripts/platform/xiaohongshu/run_xiaohongshu_extract.py +0 -2128
  208. package/skills/creator-analysis/scripts/writers/__init__.py +0 -0
  209. package/skills/creator-analysis/scripts/writers/write_author_homepage_samples.py +0 -107
  210. package/skills/creator-analysis/scripts/writers/write_benchmark_card.py +0 -1579
  211. package/skills/meta-capability/SKILL.md +0 -69
  212. package/skills/meta-capability/agents/openai.yaml +0 -4
  213. package/skills/meta-capability/env.example +0 -42
  214. package/skills/meta-capability/references/api-capability-index.md +0 -92
  215. package/skills/meta-capability/references/api-contracts/asr-api.md +0 -130
  216. package/skills/meta-capability/references/api-contracts/bilibili-app-api.md +0 -776
  217. package/skills/meta-capability/references/api-contracts/bilibili-web-api.md +0 -2017
  218. package/skills/meta-capability/references/api-contracts/demo-api.md +0 -717
  219. package/skills/meta-capability/references/api-contracts/douyin-app-v3-api.md +0 -3594
  220. package/skills/meta-capability/references/api-contracts/douyin-billboard-api.md +0 -2274
  221. package/skills/meta-capability/references/api-contracts/douyin-creator-api.md +0 -1575
  222. package/skills/meta-capability/references/api-contracts/douyin-creator-v2-api.md +0 -3254
  223. package/skills/meta-capability/references/api-contracts/douyin-search-api.md +0 -4118
  224. package/skills/meta-capability/references/api-contracts/douyin-web-api.md +0 -5544
  225. package/skills/meta-capability/references/api-contracts/douyin-xingtu-api.md +0 -1916
  226. package/skills/meta-capability/references/api-contracts/douyin-xingtu-v2-api.md +0 -1540
  227. package/skills/meta-capability/references/api-contracts/health-check.md +0 -69
  228. package/skills/meta-capability/references/api-contracts/hybrid-parsing.md +0 -78
  229. package/skills/meta-capability/references/api-contracts/instagram-v1-api.md +0 -2256
  230. package/skills/meta-capability/references/api-contracts/instagram-v2-api.md +0 -2011
  231. package/skills/meta-capability/references/api-contracts/instagram-v3-api.md +0 -2630
  232. package/skills/meta-capability/references/api-contracts/ios-shortcut.md +0 -44
  233. package/skills/meta-capability/references/api-contracts/kuaishou-app-api.md +0 -1518
  234. package/skills/meta-capability/references/api-contracts/kuaishou-web-api.md +0 -1242
  235. package/skills/meta-capability/references/api-contracts/lemon8-app-api.md +0 -1088
  236. package/skills/meta-capability/references/api-contracts/linkedin-web-api.md +0 -1949
  237. package/skills/meta-capability/references/api-contracts/media-ingest-api.md +0 -126
  238. package/skills/meta-capability/references/api-contracts/pipixia-app-api.md +0 -1142
  239. package/skills/meta-capability/references/api-contracts/reddit-app-api.md +0 -2025
  240. package/skills/meta-capability/references/api-contracts/sora2-api.md +0 -2266
  241. package/skills/meta-capability/references/api-contracts/temp-mail-api.md +0 -208
  242. package/skills/meta-capability/references/api-contracts/threads-web-api.md +0 -897
  243. package/skills/meta-capability/references/api-contracts/tikhub-downloader-api.md +0 -134
  244. package/skills/meta-capability/references/api-contracts/tikhub-user-api.md +0 -494
  245. package/skills/meta-capability/references/api-contracts/tiktok-ads-api.md +0 -5947
  246. package/skills/meta-capability/references/api-contracts/tiktok-analytics-api.md +0 -968
  247. package/skills/meta-capability/references/api-contracts/tiktok-app-v3-api.md +0 -5735
  248. package/skills/meta-capability/references/api-contracts/tiktok-creator-api.md +0 -1951
  249. package/skills/meta-capability/references/api-contracts/tiktok-interaction-api.md +0 -742
  250. package/skills/meta-capability/references/api-contracts/tiktok-shop-web-api.md +0 -1890
  251. package/skills/meta-capability/references/api-contracts/tiktok-web-api.md +0 -4448
  252. package/skills/meta-capability/references/api-contracts/toutiao-app-api.md +0 -342
  253. package/skills/meta-capability/references/api-contracts/toutiao-web-api.md +0 -143
  254. package/skills/meta-capability/references/api-contracts/twitter-web-api.md +0 -989
  255. package/skills/meta-capability/references/api-contracts/wechat-channels-api.md +0 -809
  256. package/skills/meta-capability/references/api-contracts/wechat-media-platform-web-api.md +0 -677
  257. package/skills/meta-capability/references/api-contracts/weibo-app-api.md +0 -1547
  258. package/skills/meta-capability/references/api-contracts/weibo-web-api.md +0 -798
  259. package/skills/meta-capability/references/api-contracts/weibo-web-v2-api.md +0 -2459
  260. package/skills/meta-capability/references/api-contracts/xiaohongshu-app-api.md +0 -1291
  261. package/skills/meta-capability/references/api-contracts/xiaohongshu-app-v2-api.md +0 -1683
  262. package/skills/meta-capability/references/api-contracts/xiaohongshu-web-api.md +0 -1324
  263. package/skills/meta-capability/references/api-contracts/xiaohongshu-web-v2-api.md +0 -1209
  264. package/skills/meta-capability/references/api-contracts/xigua-app-v2-api.md +0 -489
  265. package/skills/meta-capability/references/api-contracts/youtube-web-api.md +0 -2636
  266. package/skills/meta-capability/references/api-contracts/youtube-web-v2-api.md +0 -2660
  267. package/skills/meta-capability/references/api-contracts/zhihu-web-api.md +0 -2315
  268. package/skills/meta-capability/references/api-tags/asr-api.md +0 -100
  269. package/skills/meta-capability/references/api-tags/bilibili-app-api.md +0 -482
  270. package/skills/meta-capability/references/api-tags/bilibili-web-api.md +0 -1267
  271. package/skills/meta-capability/references/api-tags/demo-api.md +0 -365
  272. package/skills/meta-capability/references/api-tags/douyin-app-v3-api.md +0 -2012
  273. package/skills/meta-capability/references/api-tags/douyin-billboard-api.md +0 -1428
  274. package/skills/meta-capability/references/api-tags/douyin-creator-api.md +0 -694
  275. package/skills/meta-capability/references/api-tags/douyin-creator-v2-api.md +0 -694
  276. package/skills/meta-capability/references/api-tags/douyin-search-api.md +0 -1059
  277. package/skills/meta-capability/references/api-tags/douyin-web-api.md +0 -3314
  278. package/skills/meta-capability/references/api-tags/douyin-xingtu-api.md +0 -935
  279. package/skills/meta-capability/references/api-tags/douyin-xingtu-v2-api.md +0 -925
  280. package/skills/meta-capability/references/api-tags/health-check.md +0 -40
  281. package/skills/meta-capability/references/api-tags/hybrid-parsing.md +0 -57
  282. package/skills/meta-capability/references/api-tags/instagram-v1-api.md +0 -1224
  283. package/skills/meta-capability/references/api-tags/instagram-v2-api.md +0 -1147
  284. package/skills/meta-capability/references/api-tags/instagram-v3-api.md +0 -1123
  285. package/skills/meta-capability/references/api-tags/ios-shortcut.md +0 -45
  286. package/skills/meta-capability/references/api-tags/kuaishou-app-api.md +0 -846
  287. package/skills/meta-capability/references/api-tags/kuaishou-web-api.md +0 -551
  288. package/skills/meta-capability/references/api-tags/lemon8-app-api.md +0 -687
  289. package/skills/meta-capability/references/api-tags/linkedin-web-api.md +0 -1105
  290. package/skills/meta-capability/references/api-tags/media-ingest-api.md +0 -112
  291. package/skills/meta-capability/references/api-tags/pipixia-app-api.md +0 -721
  292. package/skills/meta-capability/references/api-tags/reddit-app-api.md +0 -1057
  293. package/skills/meta-capability/references/api-tags/sora2-api.md +0 -737
  294. package/skills/meta-capability/references/api-tags/temp-mail-api.md +0 -136
  295. package/skills/meta-capability/references/api-tags/threads-web-api.md +0 -472
  296. package/skills/meta-capability/references/api-tags/tikhub-downloader-api.md +0 -65
  297. package/skills/meta-capability/references/api-tags/tikhub-user-api.md +0 -253
  298. package/skills/meta-capability/references/api-tags/tiktok-ads-api.md +0 -1393
  299. package/skills/meta-capability/references/api-tags/tiktok-analytics-api.md +0 -179
  300. package/skills/meta-capability/references/api-tags/tiktok-app-v3-api.md +0 -3264
  301. package/skills/meta-capability/references/api-tags/tiktok-creator-api.md +0 -709
  302. package/skills/meta-capability/references/api-tags/tiktok-interaction-api.md +0 -366
  303. package/skills/meta-capability/references/api-tags/tiktok-shop-web-api.md +0 -663
  304. package/skills/meta-capability/references/api-tags/tiktok-web-api.md +0 -2516
  305. package/skills/meta-capability/references/api-tags/toutiao-app-api.md +0 -220
  306. package/skills/meta-capability/references/api-tags/toutiao-web-api.md +0 -96
  307. package/skills/meta-capability/references/api-tags/twitter-web-api.md +0 -562
  308. package/skills/meta-capability/references/api-tags/wechat-channels-api.md +0 -405
  309. package/skills/meta-capability/references/api-tags/wechat-media-platform-web-api.md +0 -431
  310. package/skills/meta-capability/references/api-tags/weibo-app-api.md +0 -851
  311. package/skills/meta-capability/references/api-tags/weibo-web-api.md +0 -470
  312. package/skills/meta-capability/references/api-tags/weibo-web-v2-api.md +0 -1405
  313. package/skills/meta-capability/references/api-tags/xiaohongshu-app-api.md +0 -534
  314. package/skills/meta-capability/references/api-tags/xiaohongshu-app-v2-api.md +0 -934
  315. package/skills/meta-capability/references/api-tags/xiaohongshu-web-api.md +0 -757
  316. package/skills/meta-capability/references/api-tags/xiaohongshu-web-v2-api.md +0 -762
  317. package/skills/meta-capability/references/api-tags/xigua-app-v2-api.md +0 -308
  318. package/skills/meta-capability/references/api-tags/youtube-web-api.md +0 -934
  319. package/skills/meta-capability/references/api-tags/youtube-web-v2-api.md +0 -717
  320. package/skills/meta-capability/references/api-tags/zhihu-web-api.md +0 -1384
  321. package/skills/meta-capability/references/config-templates/defaults.yaml +0 -18
  322. package/skills/meta-capability/references/dispatch.md +0 -27
  323. package/skills/meta-capability/references/execution-guidelines.md +0 -25
  324. package/skills/meta-capability/references/implemented-route-map.md +0 -177
  325. package/skills/meta-capability/references/service-guides/asr-u2-u3-fallback.md +0 -75
  326. package/skills/meta-capability/scripts/__init__.py +0 -1
  327. package/skills/meta-capability/scripts/call_route.py +0 -141
  328. package/skills/meta-capability/scripts/core/__init__.py +0 -1
  329. package/skills/meta-capability/scripts/core/bootstrap_env.py +0 -32
  330. package/skills/meta-capability/scripts/core/config_loader.py +0 -204
  331. package/skills/meta-capability/scripts/core/tikomni_common.py +0 -443
  332. package/skills/meta-capability/scripts/test_auth.py +0 -98
  333. package/skills/single-work-analysis/SKILL.md +0 -62
  334. package/skills/single-work-analysis/agents/openai.yaml +0 -4
  335. package/skills/single-work-analysis/env.example +0 -36
  336. package/skills/single-work-analysis/references/api-capability-index.md +0 -92
  337. package/skills/single-work-analysis/references/api-contracts/asr-api.md +0 -130
  338. package/skills/single-work-analysis/references/api-contracts/bilibili-app-api.md +0 -776
  339. package/skills/single-work-analysis/references/api-contracts/bilibili-web-api.md +0 -2017
  340. package/skills/single-work-analysis/references/api-contracts/demo-api.md +0 -717
  341. package/skills/single-work-analysis/references/api-contracts/douyin-app-v3-api.md +0 -3594
  342. package/skills/single-work-analysis/references/api-contracts/douyin-billboard-api.md +0 -2274
  343. package/skills/single-work-analysis/references/api-contracts/douyin-creator-api.md +0 -1575
  344. package/skills/single-work-analysis/references/api-contracts/douyin-creator-v2-api.md +0 -3254
  345. package/skills/single-work-analysis/references/api-contracts/douyin-search-api.md +0 -4118
  346. package/skills/single-work-analysis/references/api-contracts/douyin-web-api.md +0 -5544
  347. package/skills/single-work-analysis/references/api-contracts/douyin-xingtu-api.md +0 -1916
  348. package/skills/single-work-analysis/references/api-contracts/douyin-xingtu-v2-api.md +0 -1540
  349. package/skills/single-work-analysis/references/api-contracts/health-check.md +0 -69
  350. package/skills/single-work-analysis/references/api-contracts/hybrid-parsing.md +0 -78
  351. package/skills/single-work-analysis/references/api-contracts/instagram-v1-api.md +0 -2256
  352. package/skills/single-work-analysis/references/api-contracts/instagram-v2-api.md +0 -2011
  353. package/skills/single-work-analysis/references/api-contracts/instagram-v3-api.md +0 -2630
  354. package/skills/single-work-analysis/references/api-contracts/ios-shortcut.md +0 -44
  355. package/skills/single-work-analysis/references/api-contracts/kuaishou-app-api.md +0 -1518
  356. package/skills/single-work-analysis/references/api-contracts/kuaishou-web-api.md +0 -1242
  357. package/skills/single-work-analysis/references/api-contracts/lemon8-app-api.md +0 -1088
  358. package/skills/single-work-analysis/references/api-contracts/linkedin-web-api.md +0 -1949
  359. package/skills/single-work-analysis/references/api-contracts/media-ingest-api.md +0 -126
  360. package/skills/single-work-analysis/references/api-contracts/pipixia-app-api.md +0 -1142
  361. package/skills/single-work-analysis/references/api-contracts/reddit-app-api.md +0 -2025
  362. package/skills/single-work-analysis/references/api-contracts/sora2-api.md +0 -2266
  363. package/skills/single-work-analysis/references/api-contracts/temp-mail-api.md +0 -208
  364. package/skills/single-work-analysis/references/api-contracts/threads-web-api.md +0 -897
  365. package/skills/single-work-analysis/references/api-contracts/tikhub-downloader-api.md +0 -134
  366. package/skills/single-work-analysis/references/api-contracts/tikhub-user-api.md +0 -494
  367. package/skills/single-work-analysis/references/api-contracts/tiktok-ads-api.md +0 -5947
  368. package/skills/single-work-analysis/references/api-contracts/tiktok-analytics-api.md +0 -968
  369. package/skills/single-work-analysis/references/api-contracts/tiktok-app-v3-api.md +0 -5735
  370. package/skills/single-work-analysis/references/api-contracts/tiktok-creator-api.md +0 -1951
  371. package/skills/single-work-analysis/references/api-contracts/tiktok-interaction-api.md +0 -742
  372. package/skills/single-work-analysis/references/api-contracts/tiktok-shop-web-api.md +0 -1890
  373. package/skills/single-work-analysis/references/api-contracts/tiktok-web-api.md +0 -4448
  374. package/skills/single-work-analysis/references/api-contracts/toutiao-app-api.md +0 -342
  375. package/skills/single-work-analysis/references/api-contracts/toutiao-web-api.md +0 -143
  376. package/skills/single-work-analysis/references/api-contracts/twitter-web-api.md +0 -989
  377. package/skills/single-work-analysis/references/api-contracts/wechat-channels-api.md +0 -809
  378. package/skills/single-work-analysis/references/api-contracts/wechat-media-platform-web-api.md +0 -677
  379. package/skills/single-work-analysis/references/api-contracts/weibo-app-api.md +0 -1547
  380. package/skills/single-work-analysis/references/api-contracts/weibo-web-api.md +0 -798
  381. package/skills/single-work-analysis/references/api-contracts/weibo-web-v2-api.md +0 -2459
  382. package/skills/single-work-analysis/references/api-contracts/xiaohongshu-app-api.md +0 -1291
  383. package/skills/single-work-analysis/references/api-contracts/xiaohongshu-app-v2-api.md +0 -1683
  384. package/skills/single-work-analysis/references/api-contracts/xiaohongshu-web-api.md +0 -1324
  385. package/skills/single-work-analysis/references/api-contracts/xiaohongshu-web-v2-api.md +0 -1209
  386. package/skills/single-work-analysis/references/api-contracts/xigua-app-v2-api.md +0 -489
  387. package/skills/single-work-analysis/references/api-contracts/youtube-web-api.md +0 -2636
  388. package/skills/single-work-analysis/references/api-contracts/youtube-web-v2-api.md +0 -2660
  389. package/skills/single-work-analysis/references/api-contracts/zhihu-web-api.md +0 -2315
  390. package/skills/single-work-analysis/references/api-tags/asr-api.md +0 -100
  391. package/skills/single-work-analysis/references/api-tags/bilibili-app-api.md +0 -482
  392. package/skills/single-work-analysis/references/api-tags/bilibili-web-api.md +0 -1267
  393. package/skills/single-work-analysis/references/api-tags/demo-api.md +0 -365
  394. package/skills/single-work-analysis/references/api-tags/douyin-app-v3-api.md +0 -2012
  395. package/skills/single-work-analysis/references/api-tags/douyin-billboard-api.md +0 -1428
  396. package/skills/single-work-analysis/references/api-tags/douyin-creator-api.md +0 -694
  397. package/skills/single-work-analysis/references/api-tags/douyin-creator-v2-api.md +0 -694
  398. package/skills/single-work-analysis/references/api-tags/douyin-search-api.md +0 -1059
  399. package/skills/single-work-analysis/references/api-tags/douyin-web-api.md +0 -3314
  400. package/skills/single-work-analysis/references/api-tags/douyin-xingtu-api.md +0 -935
  401. package/skills/single-work-analysis/references/api-tags/douyin-xingtu-v2-api.md +0 -925
  402. package/skills/single-work-analysis/references/api-tags/health-check.md +0 -40
  403. package/skills/single-work-analysis/references/api-tags/hybrid-parsing.md +0 -57
  404. package/skills/single-work-analysis/references/api-tags/instagram-v1-api.md +0 -1224
  405. package/skills/single-work-analysis/references/api-tags/instagram-v2-api.md +0 -1147
  406. package/skills/single-work-analysis/references/api-tags/instagram-v3-api.md +0 -1123
  407. package/skills/single-work-analysis/references/api-tags/ios-shortcut.md +0 -45
  408. package/skills/single-work-analysis/references/api-tags/kuaishou-app-api.md +0 -846
  409. package/skills/single-work-analysis/references/api-tags/kuaishou-web-api.md +0 -551
  410. package/skills/single-work-analysis/references/api-tags/lemon8-app-api.md +0 -687
  411. package/skills/single-work-analysis/references/api-tags/linkedin-web-api.md +0 -1105
  412. package/skills/single-work-analysis/references/api-tags/media-ingest-api.md +0 -112
  413. package/skills/single-work-analysis/references/api-tags/pipixia-app-api.md +0 -721
  414. package/skills/single-work-analysis/references/api-tags/reddit-app-api.md +0 -1057
  415. package/skills/single-work-analysis/references/api-tags/sora2-api.md +0 -737
  416. package/skills/single-work-analysis/references/api-tags/temp-mail-api.md +0 -136
  417. package/skills/single-work-analysis/references/api-tags/threads-web-api.md +0 -472
  418. package/skills/single-work-analysis/references/api-tags/tikhub-downloader-api.md +0 -65
  419. package/skills/single-work-analysis/references/api-tags/tikhub-user-api.md +0 -253
  420. package/skills/single-work-analysis/references/api-tags/tiktok-ads-api.md +0 -1393
  421. package/skills/single-work-analysis/references/api-tags/tiktok-analytics-api.md +0 -179
  422. package/skills/single-work-analysis/references/api-tags/tiktok-app-v3-api.md +0 -3264
  423. package/skills/single-work-analysis/references/api-tags/tiktok-creator-api.md +0 -709
  424. package/skills/single-work-analysis/references/api-tags/tiktok-interaction-api.md +0 -366
  425. package/skills/single-work-analysis/references/api-tags/tiktok-shop-web-api.md +0 -663
  426. package/skills/single-work-analysis/references/api-tags/tiktok-web-api.md +0 -2516
  427. package/skills/single-work-analysis/references/api-tags/toutiao-app-api.md +0 -220
  428. package/skills/single-work-analysis/references/api-tags/toutiao-web-api.md +0 -96
  429. package/skills/single-work-analysis/references/api-tags/twitter-web-api.md +0 -562
  430. package/skills/single-work-analysis/references/api-tags/wechat-channels-api.md +0 -405
  431. package/skills/single-work-analysis/references/api-tags/wechat-media-platform-web-api.md +0 -431
  432. package/skills/single-work-analysis/references/api-tags/weibo-app-api.md +0 -851
  433. package/skills/single-work-analysis/references/api-tags/weibo-web-api.md +0 -470
  434. package/skills/single-work-analysis/references/api-tags/weibo-web-v2-api.md +0 -1405
  435. package/skills/single-work-analysis/references/api-tags/xiaohongshu-app-api.md +0 -534
  436. package/skills/single-work-analysis/references/api-tags/xiaohongshu-app-v2-api.md +0 -934
  437. package/skills/single-work-analysis/references/api-tags/xiaohongshu-web-api.md +0 -757
  438. package/skills/single-work-analysis/references/api-tags/xiaohongshu-web-v2-api.md +0 -762
  439. package/skills/single-work-analysis/references/api-tags/xigua-app-v2-api.md +0 -308
  440. package/skills/single-work-analysis/references/api-tags/youtube-web-api.md +0 -934
  441. package/skills/single-work-analysis/references/api-tags/youtube-web-v2-api.md +0 -717
  442. package/skills/single-work-analysis/references/api-tags/zhihu-web-api.md +0 -1384
  443. package/skills/single-work-analysis/references/asr-and-fallback.md +0 -20
  444. package/skills/single-work-analysis/references/config-templates/defaults.yaml +0 -47
  445. package/skills/single-work-analysis/references/contracts/work-card-fields.md +0 -41
  446. package/skills/single-work-analysis/references/platform-guides/douyin.md +0 -47
  447. package/skills/single-work-analysis/references/platform-guides/generic.md +0 -43
  448. package/skills/single-work-analysis/references/platform-guides/xiaohongshu.md +0 -54
  449. package/skills/single-work-analysis/references/prompt-contracts/analysis-bundle.md +0 -82
  450. package/skills/single-work-analysis/references/schemas/work-card.schema.json +0 -39
  451. package/skills/single-work-analysis/references/service-guides/asr-u2-u3-fallback.md +0 -75
  452. package/skills/single-work-analysis/scripts/__init__.py +0 -0
  453. package/skills/single-work-analysis/scripts/core/__init__.py +0 -0
  454. package/skills/single-work-analysis/scripts/core/analysis_adapter.py +0 -384
  455. package/skills/single-work-analysis/scripts/core/analysis_pipeline.py +0 -456
  456. package/skills/single-work-analysis/scripts/core/bootstrap_env.py +0 -35
  457. package/skills/single-work-analysis/scripts/core/extract_pipeline.py +0 -173
  458. package/skills/single-work-analysis/scripts/core/progress_report.py +0 -258
  459. package/skills/single-work-analysis/scripts/core/storage_router.py +0 -220
  460. package/skills/single-work-analysis/scripts/pipeline/__init__.py +0 -0
  461. package/skills/single-work-analysis/scripts/pipeline/asr/__init__.py +0 -0
  462. package/skills/single-work-analysis/scripts/platform/__init__.py +0 -0
  463. package/skills/single-work-analysis/scripts/platform/douyin/__init__.py +0 -0
  464. package/skills/single-work-analysis/scripts/platform/douyin/douyin_video_type_matrix.py +0 -224
  465. package/skills/single-work-analysis/scripts/platform/douyin/select_low_quality_video_url.py +0 -200
  466. package/skills/single-work-analysis/scripts/platform/xiaohongshu/__init__.py +0 -0
  467. package/skills/single-work-analysis/scripts/writers/__init__.py +0 -0
  468. package/skills/single-work-analysis/scripts/writers/write_benchmark_card.py +0 -752
  469. /package/skills/{creator-analysis → social-media-crawl}/scripts/core/bootstrap_env.py +0 -0
  470. /package/skills/{creator-analysis → social-media-crawl}/scripts/core/extract_pipeline.py +0 -0
  471. /package/skills/{single-work-analysis → social-media-crawl}/scripts/core/tikomni_common.py +0 -0
  472. /package/skills/{creator-analysis/scripts/platform/douyin → social-media-crawl/scripts/pipelines}/douyin_video_type_matrix.py +0 -0
  473. /package/skills/{creator-analysis/scripts/author_home/collectors → social-media-crawl/scripts/pipelines}/homepage_collectors.py +0 -0
  474. /package/skills/{creator-analysis/scripts/platform/douyin → social-media-crawl/scripts/pipelines}/select_low_quality_video_url.py +0 -0
@@ -0,0 +1,48 @@
1
+ # Work Fact Card Fields
2
+
3
+ ## Required Fields
4
+
5
+ - `platform`
6
+ - `platform_work_id`
7
+ - `platform_author_id`
8
+ - `author_handle`
9
+ - `author`
10
+ - `title`
11
+ - `caption_raw`
12
+ - `work_modality`
13
+ - `published_date`
14
+ - `cover_image`
15
+ - `source_url`
16
+ - `share_url`
17
+ - `primary_text`
18
+ - `primary_text_source`
19
+ - `request_id`
20
+ - `completeness`
21
+ - `missing_fields`
22
+ - `error_reason`
23
+ - `extract_trace`
24
+
25
+ ## Optional Fields
26
+
27
+ - `digg_count`
28
+ - `comment_count`
29
+ - `collect_count`
30
+ - `share_count`
31
+ - `play_count`
32
+ - `video_download_url`
33
+ - `asr_raw`
34
+ - `asr_clean`
35
+ - `subtitle_raw`
36
+
37
+ ## Field Rules
38
+
39
+ - `author` 是展示名,不是对象。
40
+ - `primary_text` 为当前任务最适合阅读和索引的主文本。
41
+ - 视频优先顺序:
42
+ - `subtitle_raw`
43
+ - `asr_clean`
44
+ - `caption_raw`
45
+ - 文本作品优先顺序:
46
+ - `caption_raw`
47
+ - 不允许出现分析字段。
48
+
@@ -0,0 +1,30 @@
1
+ # Generic MCP Objects Guide
2
+
3
+ 以下对象在首期不冻结细粒度 schema:
4
+
5
+ - 评论线程
6
+ - 搜索结果
7
+ - 榜单
8
+ - 直播间
9
+ - 商品页
10
+
11
+ ## Rules
12
+
13
+ - 这些对象统一走 MCP 通用工作流。
14
+ - agent 先做对象识别,再用 `catalog.search` 和 `endpoint.describe` 选最小工具链。
15
+ - 输出必须满足统一 envelope。
16
+ - 不要求首期落卡。
17
+ - 不允许为了 schema 完整性去编造字段。
18
+
19
+ ## Minimum Deliverable
20
+
21
+ - `object_type`
22
+ - `platform`
23
+ - `input`
24
+ - `normalized`
25
+ - `request_id`
26
+ - `completeness`
27
+ - `missing_fields`
28
+ - `error_reason`
29
+ - `extract_trace`
30
+
@@ -0,0 +1,30 @@
1
+ # MCP Usage Contract
2
+
3
+ ## Fixed Inputs
4
+
5
+ - MCP URL: `https://mcp.tikomni.com/mcp`
6
+ - Auth: `Authorization: Bearer <TIKOMNI_API_KEY>`
7
+ - 不在工具参数中重复传 API key
8
+
9
+ ## Required Tool Order
10
+
11
+ 1. `tools/list`
12
+ 2. 识别是否命中固定 pipeline
13
+ 3. 若不命中固定 pipeline:
14
+ - `catalog.search`
15
+ - `endpoint.describe`
16
+ - `api.call`
17
+ 4. 若需要视频文本:
18
+ - `u2.submit`
19
+ - `u2.query`
20
+ - 超过 60 秒仍 `pending` 时进入 U3 fallback
21
+
22
+ ## Output Rules
23
+
24
+ - 事实字段与派生元数据分离
25
+ - 结果必须包含 `request_id`
26
+ - 结果必须包含 `completeness`
27
+ - 结果必须包含 `missing_fields`
28
+ - 结果必须包含 `error_reason`
29
+ - 结果必须包含 `extract_trace`
30
+
@@ -0,0 +1,7 @@
1
+ # Douyin Creator Home
2
+
3
+ - 输入:主页链接或分享短链
4
+ - 输出:`creator_profile.json`、`work_collection.json`、多张 `work_fact_card`
5
+ - 实现脚本:`scripts/pipelines/run_douyin_creator_home.py`
6
+ - 必测样例:计划冻结样例中的抖音主页链接
7
+
@@ -0,0 +1,7 @@
1
+ # Douyin Single Work
2
+
3
+ - 输入:作品链接或分享短链
4
+ - 输出:统一 `work_fact_card`
5
+ - 实现脚本:`scripts/pipelines/run_douyin_single_work.py`
6
+ - 必测样例:计划冻结样例中的抖音作品链接
7
+
@@ -0,0 +1,7 @@
1
+ # Xiaohongshu Creator Home
2
+
3
+ - 输入:主页链接或分享短链
4
+ - 输出:`creator_profile.json`、`work_collection.json`、多张 `work_fact_card`
5
+ - 实现脚本:`scripts/pipelines/run_xiaohongshu_creator_home.py`
6
+ - 必测样例:计划冻结样例中的小红书主页链接
7
+
@@ -0,0 +1,7 @@
1
+ # Xiaohongshu Single Work
2
+
3
+ - 输入:作品链接或分享短链
4
+ - 输出:统一 `work_fact_card`
5
+ - 实现脚本:`scripts/pipelines/run_xiaohongshu_single_work.py`
6
+ - 必测样例:计划冻结样例中的小红书作品链接
7
+
@@ -0,0 +1,33 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "social-media-crawl/creator-profile.schema.json",
4
+ "type": "object",
5
+ "required": [
6
+ "platform",
7
+ "platform_author_id",
8
+ "author_handle",
9
+ "nickname",
10
+ "request_id",
11
+ "extract_trace"
12
+ ],
13
+ "properties": {
14
+ "platform": { "type": "string" },
15
+ "platform_author_id": { "type": "string" },
16
+ "author_handle": { "type": "string" },
17
+ "nickname": { "type": "string" },
18
+ "signature": { "type": "string" },
19
+ "avatar_url": { "type": "string" },
20
+ "fans_count": { "type": "integer" },
21
+ "liked_count": { "type": "integer" },
22
+ "collected_count": { "type": "integer" },
23
+ "works_count": { "type": "integer" },
24
+ "verified": { "type": "boolean" },
25
+ "request_id": { "type": ["string", "null"] },
26
+ "extract_trace": {
27
+ "type": "array",
28
+ "items": { "type": "object" }
29
+ }
30
+ },
31
+ "additionalProperties": true
32
+ }
33
+
@@ -0,0 +1,41 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "social-media-crawl/output-envelope.schema.json",
4
+ "type": "object",
5
+ "required": [
6
+ "object_type",
7
+ "platform",
8
+ "input",
9
+ "normalized",
10
+ "completeness",
11
+ "missing_fields",
12
+ "extract_trace",
13
+ "request_id"
14
+ ],
15
+ "properties": {
16
+ "object_type": { "type": "string" },
17
+ "platform": { "type": "string" },
18
+ "input": {},
19
+ "normalized": {},
20
+ "completeness": {
21
+ "type": "string",
22
+ "enum": ["complete", "partial", "incomplete"]
23
+ },
24
+ "missing_fields": {
25
+ "type": "array",
26
+ "items": { "type": "object" }
27
+ },
28
+ "error_reason": {
29
+ "type": ["string", "null"]
30
+ },
31
+ "extract_trace": {
32
+ "type": "array",
33
+ "items": { "type": "object" }
34
+ },
35
+ "request_id": {
36
+ "type": ["string", "null"]
37
+ }
38
+ },
39
+ "additionalProperties": true
40
+ }
41
+
@@ -0,0 +1,29 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "social-media-crawl/work-collection.schema.json",
4
+ "type": "object",
5
+ "required": [
6
+ "platform",
7
+ "platform_author_id",
8
+ "count",
9
+ "items",
10
+ "request_id",
11
+ "extract_trace"
12
+ ],
13
+ "properties": {
14
+ "platform": { "type": "string" },
15
+ "platform_author_id": { "type": "string" },
16
+ "count": { "type": "integer" },
17
+ "items": {
18
+ "type": "array",
19
+ "items": { "type": "object" }
20
+ },
21
+ "request_id": { "type": ["string", "null"] },
22
+ "extract_trace": {
23
+ "type": "array",
24
+ "items": { "type": "object" }
25
+ }
26
+ },
27
+ "additionalProperties": true
28
+ }
29
+
@@ -0,0 +1,67 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "social-media-crawl/work-fact-card.schema.json",
4
+ "type": "object",
5
+ "required": [
6
+ "platform",
7
+ "platform_work_id",
8
+ "platform_author_id",
9
+ "author_handle",
10
+ "author",
11
+ "title",
12
+ "caption_raw",
13
+ "work_modality",
14
+ "published_date",
15
+ "source_url",
16
+ "share_url",
17
+ "primary_text",
18
+ "primary_text_source",
19
+ "request_id",
20
+ "completeness",
21
+ "missing_fields",
22
+ "extract_trace"
23
+ ],
24
+ "properties": {
25
+ "platform": { "type": "string" },
26
+ "platform_work_id": { "type": "string" },
27
+ "platform_author_id": { "type": "string" },
28
+ "author_handle": { "type": "string" },
29
+ "author": { "type": "string" },
30
+ "title": { "type": "string" },
31
+ "caption_raw": { "type": "string" },
32
+ "subtitle_raw": { "type": "string" },
33
+ "work_modality": { "type": "string" },
34
+ "published_date": { "type": "string" },
35
+ "digg_count": { "type": "integer" },
36
+ "comment_count": { "type": "integer" },
37
+ "collect_count": { "type": "integer" },
38
+ "share_count": { "type": "integer" },
39
+ "play_count": { "type": "integer" },
40
+ "cover_image": { "type": "string" },
41
+ "source_url": { "type": "string" },
42
+ "share_url": { "type": "string" },
43
+ "video_download_url": { "type": "string" },
44
+ "primary_text": { "type": "string" },
45
+ "primary_text_source": { "type": "string" },
46
+ "asr_raw": { "type": "string" },
47
+ "asr_clean": { "type": "string" },
48
+ "request_id": { "type": ["string", "null"] },
49
+ "completeness": {
50
+ "type": "string",
51
+ "enum": ["complete", "partial", "incomplete"]
52
+ },
53
+ "missing_fields": {
54
+ "type": "array",
55
+ "items": { "type": "object" }
56
+ },
57
+ "error_reason": {
58
+ "type": ["string", "null"]
59
+ },
60
+ "extract_trace": {
61
+ "type": "array",
62
+ "items": { "type": "object" }
63
+ }
64
+ },
65
+ "additionalProperties": false
66
+ }
67
+
@@ -0,0 +1,21 @@
1
+ # U2 U3 Mandatory Fallback
2
+
3
+ ## Hard Rule
4
+
5
+ - 视频文本优先尝试平台原生字幕。
6
+ - 无原生字幕时先走 U2。
7
+ - `u2.submit` 成功后,最多轮询 60 秒。
8
+ - 如果 60 秒后仍是 `pending`,必须进入 U3 fallback。
9
+ - U3 成功后继续完成 ASR 链路。
10
+ - 若最终失败,保留事实卡并标记 `completeness=incomplete`。
11
+
12
+ ## Trace Requirement
13
+
14
+ 至少记录:
15
+
16
+ - U2 submit
17
+ - U2 poll
18
+ - 触发 U3 的原因
19
+ - U3 调用步骤
20
+ - 最终文本来源
21
+
@@ -0,0 +1,2 @@
1
+ """social-media-crawl scripts package."""
2
+
@@ -0,0 +1,2 @@
1
+ """Core helpers for social-media-crawl."""
2
+
@@ -19,8 +19,10 @@ from scripts.core.tikomni_common import (
19
19
  is_terminal_status,
20
20
  normalize_text,
21
21
  )
22
+ from scripts.core.u3_fallback import run_u3_public_url_fallback
22
23
 
23
24
  U2_BATCH_SUBMIT_HARD_LIMIT = 100
25
+ DEFAULT_U2_PENDING_TIMEOUT_SEC = 60
24
26
 
25
27
 
26
28
  def clamp_u2_batch_submit_size(size: int, *, default: int = 50, hard_limit: int = U2_BATCH_SUBMIT_HARD_LIMIT) -> int:
@@ -713,10 +715,12 @@ def poll_u2_task_core(
713
715
  max_polls: int,
714
716
  require_batch_complete: bool = False,
715
717
  expected_total: int = 0,
718
+ pending_timeout_sec: Optional[int] = None,
716
719
  progress_callback: Optional[Callable[[Dict[str, Any]], None]] = None,
717
720
  ) -> Dict[str, Any]:
718
721
  trace = []
719
722
  last_request_id = None
723
+ started_at = time.perf_counter()
720
724
 
721
725
  last_status = "UNKNOWN"
722
726
  last_payload: Any = {}
@@ -758,6 +762,7 @@ def poll_u2_task_core(
758
762
  trace.append(
759
763
  {
760
764
  "attempt": attempt,
765
+ "elapsed_ms": int((time.perf_counter() - started_at) * 1000),
761
766
  "status_code": response.get("status_code"),
762
767
  "task_status": status,
763
768
  "platform_task_status": platform_status,
@@ -773,6 +778,7 @@ def poll_u2_task_core(
773
778
  progress_callback(
774
779
  {
775
780
  "attempt": attempt,
781
+ "elapsed_ms": int((time.perf_counter() - started_at) * 1000),
776
782
  "task_id": task_id,
777
783
  "task_status": status or "UNKNOWN",
778
784
  "platform_task_status": platform_status or "UNKNOWN",
@@ -810,6 +816,26 @@ def poll_u2_task_core(
810
816
  task_complete = status_terminal or platform_terminal
811
817
  batch_complete = bool(batch_progress.get("complete")) if require_batch_complete else task_complete
812
818
 
819
+ elapsed_sec = time.perf_counter() - started_at
820
+ if pending_timeout_sec and elapsed_sec >= max(float(pending_timeout_sec), 1.0):
821
+ timeout_reason = "u2_batch_pending_timeout" if require_batch_complete else "u2_pending_timeout"
822
+ return {
823
+ "ok": False,
824
+ "task_id": task_id,
825
+ "task_status": effective_status or last_status or "PENDING",
826
+ "platform_task_status": platform_status,
827
+ "pending_count": pending_count,
828
+ "request_id": last_request_id,
829
+ "error_reason": timeout_reason,
830
+ "transcript_text": "",
831
+ "raw_task": payload,
832
+ "task_metrics": last_metrics,
833
+ "batch_results": batch_results,
834
+ "batch_progress": batch_progress,
835
+ "batch_complete": bool(batch_complete),
836
+ "trace": trace,
837
+ }
838
+
813
839
  if require_batch_complete and not batch_complete:
814
840
  if attempt < max_polls:
815
841
  time.sleep(max(poll_interval_sec, 0.2))
@@ -918,6 +944,7 @@ def run_u2_asr_candidates_with_timeout_retry(
918
944
  max_polls: int,
919
945
  timeout_retry_enabled: bool = True,
920
946
  timeout_retry_max_retries: int = 3,
947
+ pending_timeout_sec: int = DEFAULT_U2_PENDING_TIMEOUT_SEC,
921
948
  progress_callback: Optional[Callable[[Dict[str, Any]], None]] = None,
922
949
  ) -> Dict[str, Any]:
923
950
  normalized_candidates = normalize_media_candidates(candidates)
@@ -953,6 +980,7 @@ def run_u2_asr_candidates_with_timeout_retry(
953
980
  max_polls=max_polls,
954
981
  timeout_retry_enabled=timeout_retry_enabled,
955
982
  timeout_retry_max_retries=timeout_retry_max_retries,
983
+ pending_timeout_sec=pending_timeout_sec,
956
984
  progress_callback=progress_callback,
957
985
  )
958
986
  poll_result = bundle.get("poll_result", {})
@@ -966,6 +994,7 @@ def run_u2_asr_candidates_with_timeout_retry(
966
994
  "ok": ok,
967
995
  "error_reason": error_reason,
968
996
  "task_status": poll_result.get("task_status"),
997
+ "u3_fallback": bundle.get("u3_fallback", {}),
969
998
  })
970
999
 
971
1000
  final_bundle = bundle
@@ -973,6 +1002,9 @@ def run_u2_asr_candidates_with_timeout_retry(
973
1002
  if ok:
974
1003
  break
975
1004
 
1005
+ if (bundle.get("u3_fallback") or {}).get("triggered"):
1006
+ break
1007
+
976
1008
  if error_reason == "INVALID_SOURCE_URL":
977
1009
  continue
978
1010
 
@@ -994,6 +1026,7 @@ def run_u2_asr_batch_with_timeout_retry(
994
1026
  max_polls: int,
995
1027
  timeout_retry_enabled: bool = True,
996
1028
  timeout_retry_max_retries: int = 3,
1029
+ pending_timeout_sec: int = DEFAULT_U2_PENDING_TIMEOUT_SEC,
997
1030
  progress_callback: Optional[Callable[[Dict[str, Any]], None]] = None,
998
1031
  ) -> Dict[str, Any]:
999
1032
  normalized_urls = normalize_media_candidates(file_urls)
@@ -1072,6 +1105,7 @@ def run_u2_asr_batch_with_timeout_retry(
1072
1105
  max_polls=max_polls,
1073
1106
  require_batch_complete=True,
1074
1107
  expected_total=len(limited_urls),
1108
+ pending_timeout_sec=pending_timeout_sec,
1075
1109
  progress_callback=progress_callback,
1076
1110
  )
1077
1111
  poll_duration_ms = int((time.perf_counter() - poll_started_at) * 1000)
@@ -1126,7 +1160,7 @@ def run_u2_asr_batch_with_timeout_retry(
1126
1160
  final_submit_bundle = submit_bundle
1127
1161
  final_poll_result = poll_result
1128
1162
 
1129
- if poll_result.get("error_reason") in {"u2_poll_timeout", "u2_batch_incomplete_timeout"} and round_index < max_rounds:
1163
+ if poll_result.get("error_reason") in {"u2_poll_timeout", "u2_batch_incomplete_timeout", "u2_batch_pending_timeout"} and round_index < max_rounds:
1130
1164
  timeout_retry_triggered = True
1131
1165
  timeout_retry_result = "retrying"
1132
1166
  continue
@@ -1135,7 +1169,7 @@ def run_u2_asr_batch_with_timeout_retry(
1135
1169
 
1136
1170
  if final_poll_result.get("ok"):
1137
1171
  timeout_retry_result = "retry_succeeded" if timeout_retry_triggered else "not_needed"
1138
- elif final_poll_result.get("error_reason") in {"u2_poll_timeout", "u2_batch_incomplete_timeout"}:
1172
+ elif final_poll_result.get("error_reason") in {"u2_poll_timeout", "u2_batch_incomplete_timeout", "u2_batch_pending_timeout"}:
1139
1173
  timeout_retry_result = "retry_timeout_exhausted" if timeout_retry_triggered else "timeout_no_retry"
1140
1174
  elif timeout_retry_triggered:
1141
1175
  timeout_retry_result = "retry_failed_non_timeout"
@@ -1221,6 +1255,8 @@ def run_u2_asr_with_timeout_retry(
1221
1255
  max_polls: int,
1222
1256
  timeout_retry_enabled: bool = True,
1223
1257
  timeout_retry_max_retries: int = 3,
1258
+ pending_timeout_sec: int = DEFAULT_U2_PENDING_TIMEOUT_SEC,
1259
+ u3_fallback_enabled: bool = True,
1224
1260
  progress_callback: Optional[Callable[[Dict[str, Any]], None]] = None,
1225
1261
  ) -> Dict[str, Any]:
1226
1262
  video_url = normalize_media_url(video_url)
@@ -1237,6 +1273,14 @@ def run_u2_asr_with_timeout_retry(
1237
1273
  }
1238
1274
  timeout_retry_triggered = False
1239
1275
  timeout_retry_result = "not_triggered"
1276
+ u3_fallback_bundle: Dict[str, Any] = {
1277
+ "enabled": bool(u3_fallback_enabled),
1278
+ "triggered": False,
1279
+ "ok": False,
1280
+ "result": "not_triggered",
1281
+ "public_url": "",
1282
+ "trace": [],
1283
+ }
1240
1284
 
1241
1285
  for round_index in range(1, max_rounds + 1):
1242
1286
  submit_started_at = time.perf_counter()
@@ -1264,6 +1308,7 @@ def run_u2_asr_with_timeout_retry(
1264
1308
  task_id=str(task_id),
1265
1309
  poll_interval_sec=poll_interval_sec,
1266
1310
  max_polls=max_polls,
1311
+ pending_timeout_sec=pending_timeout_sec,
1267
1312
  progress_callback=progress_callback,
1268
1313
  )
1269
1314
  poll_duration_ms = int((time.perf_counter() - poll_started_at) * 1000)
@@ -1305,6 +1350,56 @@ def run_u2_asr_with_timeout_retry(
1305
1350
  final_submit_bundle = submit_bundle
1306
1351
  final_poll_result = poll_result
1307
1352
 
1353
+ if (
1354
+ u3_fallback_enabled
1355
+ and poll_result.get("error_reason") in {"u2_pending_timeout", "u2_poll_timeout"}
1356
+ ):
1357
+ u3_fallback_bundle["triggered"] = True
1358
+ u3_result = run_u3_public_url_fallback(
1359
+ base_url=base_url,
1360
+ token=token,
1361
+ timeout_ms=timeout_ms,
1362
+ source_url=video_url,
1363
+ )
1364
+ u3_fallback_bundle.update(
1365
+ {
1366
+ "ok": bool(u3_result.get("ok")),
1367
+ "result": "u3_completed" if u3_result.get("ok") else "u3_failed",
1368
+ "public_url": u3_result.get("public_url") or "",
1369
+ "request_id": u3_result.get("request_id"),
1370
+ "error_reason": u3_result.get("error_reason"),
1371
+ "trace": u3_result.get("trace", []),
1372
+ }
1373
+ )
1374
+ if u3_result.get("ok") and u3_result.get("public_url"):
1375
+ retry_bundle = run_u2_asr_with_timeout_retry(
1376
+ base_url=base_url,
1377
+ token=token,
1378
+ timeout_ms=timeout_ms,
1379
+ video_url=str(u3_result.get("public_url")),
1380
+ submit_max_retries=submit_max_retries,
1381
+ submit_backoff_ms=submit_backoff_ms,
1382
+ poll_interval_sec=poll_interval_sec,
1383
+ max_polls=max_polls,
1384
+ timeout_retry_enabled=timeout_retry_enabled,
1385
+ timeout_retry_max_retries=timeout_retry_max_retries,
1386
+ pending_timeout_sec=pending_timeout_sec,
1387
+ u3_fallback_enabled=False,
1388
+ progress_callback=progress_callback,
1389
+ )
1390
+ retry_bundle["u3_fallback"] = u3_fallback_bundle
1391
+ retry_bundle["original_source_url"] = video_url
1392
+ return retry_bundle
1393
+ final_poll_result = {
1394
+ "ok": False,
1395
+ "task_id": poll_result.get("task_id") or task_id,
1396
+ "task_status": poll_result.get("task_status") or "UNKNOWN",
1397
+ "request_id": u3_result.get("request_id") or poll_result.get("request_id"),
1398
+ "error_reason": u3_result.get("error_reason") or "u3_fallback_failed",
1399
+ "trace": list(poll_result.get("trace", [])) + list(u3_result.get("trace", [])),
1400
+ }
1401
+ break
1402
+
1308
1403
  if poll_result.get("error_reason") == "u2_poll_timeout" and round_index < max_rounds:
1309
1404
  timeout_retry_triggered = True
1310
1405
  timeout_retry_result = "retrying"
@@ -1331,6 +1426,7 @@ def run_u2_asr_with_timeout_retry(
1331
1426
  "triggered": timeout_retry_triggered,
1332
1427
  "result": timeout_retry_result,
1333
1428
  },
1429
+ "u3_fallback": u3_fallback_bundle,
1334
1430
  "submit_duration_ms": _safe_int((rounds[-1].get("submit") if rounds else {}).get("duration_ms")),
1335
1431
  "poll_duration_ms": _safe_int((rounds[-1].get("poll") if rounds else {}).get("duration_ms")),
1336
1432
  }
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env python3
2
+ """Completeness evaluation helpers."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import hashlib
7
+ import time
8
+ from typing import Any, Dict, List, Optional
9
+
10
+
11
+ def normalize_missing_fields(items: Any) -> List[Dict[str, str]]:
12
+ normalized: List[Dict[str, str]] = []
13
+ seen = set()
14
+ if not isinstance(items, list):
15
+ return normalized
16
+ for item in items:
17
+ if isinstance(item, dict):
18
+ field = str(item.get("field") or "").strip()
19
+ reason = str(item.get("reason") or "").strip() or "missing"
20
+ else:
21
+ field = str(item or "").strip()
22
+ reason = "missing"
23
+ if not field:
24
+ continue
25
+ key = (field, reason)
26
+ if key in seen:
27
+ continue
28
+ seen.add(key)
29
+ normalized.append({"field": field, "reason": reason})
30
+ return normalized
31
+
32
+
33
+ def ensure_request_id(value: Optional[str], fallback_seed: str = "") -> str:
34
+ text = str(value or "").strip()
35
+ if text:
36
+ return text
37
+ digest = hashlib.sha1(fallback_seed.encode("utf-8")).hexdigest()[:8] if fallback_seed else "unknown"
38
+ return f"local-{int(time.time())}-{digest}"
39
+
40
+
41
+ def evaluate_work_fact_card(card: Dict[str, Any]) -> Dict[str, Any]:
42
+ missing = normalize_missing_fields(card.get("missing_fields"))
43
+ existing_fields = {entry["field"] for entry in missing}
44
+
45
+ required_pairs = [
46
+ ("platform", bool(str(card.get("platform") or "").strip())),
47
+ ("platform_work_id", bool(str(card.get("platform_work_id") or "").strip())),
48
+ ("platform_author_id", bool(str(card.get("platform_author_id") or "").strip())),
49
+ ("author_handle", bool(str(card.get("author_handle") or "").strip())),
50
+ ("title", bool(str(card.get("title") or "").strip())),
51
+ ("source_url", bool(str(card.get("source_url") or "").strip())),
52
+ ("share_url", bool(str(card.get("share_url") or "").strip())),
53
+ ]
54
+ for field, ok in required_pairs:
55
+ if ok or field in existing_fields:
56
+ continue
57
+ missing.append({"field": field, "reason": "missing_required"})
58
+ existing_fields.add(field)
59
+
60
+ primary_text = str(card.get("primary_text") or "").strip()
61
+ if not primary_text and "primary_text" not in existing_fields:
62
+ missing.append({"field": "primary_text", "reason": "missing_primary_text"})
63
+
64
+ required_missing = [entry for entry in missing if entry["reason"] == "missing_required"]
65
+ if required_missing:
66
+ completeness = "incomplete"
67
+ elif primary_text:
68
+ completeness = "complete"
69
+ else:
70
+ completeness = "partial"
71
+
72
+ return {
73
+ "completeness": completeness,
74
+ "missing_fields": missing,
75
+ }
76
+
77
+
78
+ def evaluate_collection(profile: Dict[str, Any], works: List[Dict[str, Any]]) -> str:
79
+ if not str(profile.get("platform_author_id") or "").strip():
80
+ return "incomplete"
81
+ if works:
82
+ return "complete"
83
+ return "partial"