@tikomni/skills 0.1.2 → 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 (480) 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 -3
  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/{creator-analysis/scripts/pipeline/asr → social-media-crawl/scripts/core}/asr_pipeline.py +252 -9
  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 +108 -167
  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/{creator-analysis/scripts/pipeline/asr → social-media-crawl/scripts/core}/poll_u2_task.py +6 -2
  30. package/skills/{single-work-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/{creator-analysis → social-media-crawl}/scripts/core/tikomni_common.py +13 -3
  33. package/skills/social-media-crawl/scripts/core/u3_fallback.py +328 -0
  34. package/skills/social-media-crawl/scripts/pipelines/__init__.py +2 -0
  35. package/skills/social-media-crawl/scripts/pipelines/douyin_creator_home_helpers.py +35 -0
  36. package/skills/social-media-crawl/scripts/pipelines/douyin_platform_adapter.py +7 -0
  37. package/skills/{creator-analysis/scripts/author_home/asr → social-media-crawl/scripts/pipelines}/home_asr.py +1 -1
  38. package/skills/{creator-analysis/scripts/author_home/adapters → social-media-crawl/scripts/pipelines}/platform_adapters.py +8 -2
  39. package/skills/social-media-crawl/scripts/pipelines/run_douyin_creator_home.py +237 -0
  40. package/skills/{single-work-analysis/scripts/platform/douyin/run_douyin_single_video.py → social-media-crawl/scripts/pipelines/run_douyin_single_work.py} +282 -174
  41. package/skills/social-media-crawl/scripts/pipelines/run_xiaohongshu_creator_home.py +237 -0
  42. package/skills/{single-work-analysis/scripts/platform/xiaohongshu/run_xiaohongshu_extract.py → social-media-crawl/scripts/pipelines/run_xiaohongshu_single_work.py} +290 -141
  43. package/skills/{creator-analysis/scripts/author_home → social-media-crawl/scripts/pipelines}/schema.py +1 -1
  44. package/skills/social-media-crawl/scripts/pipelines/xiaohongshu_creator_home_helpers.py +35 -0
  45. package/skills/social-media-crawl/scripts/pipelines/xiaohongshu_platform_adapter.py +7 -0
  46. package/skills/social-media-crawl/scripts/writers/__init__.py +1 -0
  47. package/skills/social-media-crawl/scripts/writers/write_work_fact_card.py +391 -0
  48. package/skills/creator-analysis/SKILL.md +0 -95
  49. package/skills/creator-analysis/agents/openai.yaml +0 -4
  50. package/skills/creator-analysis/env.example +0 -36
  51. package/skills/creator-analysis/references/api-capability-index.md +0 -92
  52. package/skills/creator-analysis/references/api-contracts/asr-api.md +0 -130
  53. package/skills/creator-analysis/references/api-contracts/bilibili-app-api.md +0 -776
  54. package/skills/creator-analysis/references/api-contracts/bilibili-web-api.md +0 -2017
  55. package/skills/creator-analysis/references/api-contracts/demo-api.md +0 -717
  56. package/skills/creator-analysis/references/api-contracts/douyin-app-v3-api.md +0 -3594
  57. package/skills/creator-analysis/references/api-contracts/douyin-billboard-api.md +0 -2274
  58. package/skills/creator-analysis/references/api-contracts/douyin-creator-api.md +0 -1575
  59. package/skills/creator-analysis/references/api-contracts/douyin-creator-v2-api.md +0 -3254
  60. package/skills/creator-analysis/references/api-contracts/douyin-search-api.md +0 -4118
  61. package/skills/creator-analysis/references/api-contracts/douyin-web-api.md +0 -5544
  62. package/skills/creator-analysis/references/api-contracts/douyin-xingtu-api.md +0 -1916
  63. package/skills/creator-analysis/references/api-contracts/douyin-xingtu-v2-api.md +0 -1540
  64. package/skills/creator-analysis/references/api-contracts/health-check.md +0 -69
  65. package/skills/creator-analysis/references/api-contracts/hybrid-parsing.md +0 -78
  66. package/skills/creator-analysis/references/api-contracts/instagram-v1-api.md +0 -2256
  67. package/skills/creator-analysis/references/api-contracts/instagram-v2-api.md +0 -2011
  68. package/skills/creator-analysis/references/api-contracts/instagram-v3-api.md +0 -2630
  69. package/skills/creator-analysis/references/api-contracts/ios-shortcut.md +0 -44
  70. package/skills/creator-analysis/references/api-contracts/kuaishou-app-api.md +0 -1518
  71. package/skills/creator-analysis/references/api-contracts/kuaishou-web-api.md +0 -1242
  72. package/skills/creator-analysis/references/api-contracts/lemon8-app-api.md +0 -1088
  73. package/skills/creator-analysis/references/api-contracts/linkedin-web-api.md +0 -1949
  74. package/skills/creator-analysis/references/api-contracts/media-ingest-api.md +0 -126
  75. package/skills/creator-analysis/references/api-contracts/pipixia-app-api.md +0 -1142
  76. package/skills/creator-analysis/references/api-contracts/reddit-app-api.md +0 -2025
  77. package/skills/creator-analysis/references/api-contracts/sora2-api.md +0 -2266
  78. package/skills/creator-analysis/references/api-contracts/temp-mail-api.md +0 -208
  79. package/skills/creator-analysis/references/api-contracts/threads-web-api.md +0 -897
  80. package/skills/creator-analysis/references/api-contracts/tikhub-downloader-api.md +0 -134
  81. package/skills/creator-analysis/references/api-contracts/tikhub-user-api.md +0 -494
  82. package/skills/creator-analysis/references/api-contracts/tiktok-ads-api.md +0 -5947
  83. package/skills/creator-analysis/references/api-contracts/tiktok-analytics-api.md +0 -968
  84. package/skills/creator-analysis/references/api-contracts/tiktok-app-v3-api.md +0 -5735
  85. package/skills/creator-analysis/references/api-contracts/tiktok-creator-api.md +0 -1951
  86. package/skills/creator-analysis/references/api-contracts/tiktok-interaction-api.md +0 -742
  87. package/skills/creator-analysis/references/api-contracts/tiktok-shop-web-api.md +0 -1890
  88. package/skills/creator-analysis/references/api-contracts/tiktok-web-api.md +0 -4448
  89. package/skills/creator-analysis/references/api-contracts/toutiao-app-api.md +0 -342
  90. package/skills/creator-analysis/references/api-contracts/toutiao-web-api.md +0 -143
  91. package/skills/creator-analysis/references/api-contracts/twitter-web-api.md +0 -989
  92. package/skills/creator-analysis/references/api-contracts/wechat-channels-api.md +0 -809
  93. package/skills/creator-analysis/references/api-contracts/wechat-media-platform-web-api.md +0 -677
  94. package/skills/creator-analysis/references/api-contracts/weibo-app-api.md +0 -1547
  95. package/skills/creator-analysis/references/api-contracts/weibo-web-api.md +0 -798
  96. package/skills/creator-analysis/references/api-contracts/weibo-web-v2-api.md +0 -2459
  97. package/skills/creator-analysis/references/api-contracts/xiaohongshu-app-api.md +0 -1291
  98. package/skills/creator-analysis/references/api-contracts/xiaohongshu-app-v2-api.md +0 -1683
  99. package/skills/creator-analysis/references/api-contracts/xiaohongshu-web-api.md +0 -1324
  100. package/skills/creator-analysis/references/api-contracts/xiaohongshu-web-v2-api.md +0 -1209
  101. package/skills/creator-analysis/references/api-contracts/xigua-app-v2-api.md +0 -489
  102. package/skills/creator-analysis/references/api-contracts/youtube-web-api.md +0 -2636
  103. package/skills/creator-analysis/references/api-contracts/youtube-web-v2-api.md +0 -2660
  104. package/skills/creator-analysis/references/api-contracts/zhihu-web-api.md +0 -2315
  105. package/skills/creator-analysis/references/api-tags/asr-api.md +0 -100
  106. package/skills/creator-analysis/references/api-tags/bilibili-app-api.md +0 -482
  107. package/skills/creator-analysis/references/api-tags/bilibili-web-api.md +0 -1267
  108. package/skills/creator-analysis/references/api-tags/demo-api.md +0 -365
  109. package/skills/creator-analysis/references/api-tags/douyin-app-v3-api.md +0 -2012
  110. package/skills/creator-analysis/references/api-tags/douyin-billboard-api.md +0 -1428
  111. package/skills/creator-analysis/references/api-tags/douyin-creator-api.md +0 -694
  112. package/skills/creator-analysis/references/api-tags/douyin-creator-v2-api.md +0 -694
  113. package/skills/creator-analysis/references/api-tags/douyin-search-api.md +0 -1059
  114. package/skills/creator-analysis/references/api-tags/douyin-web-api.md +0 -3314
  115. package/skills/creator-analysis/references/api-tags/douyin-xingtu-api.md +0 -935
  116. package/skills/creator-analysis/references/api-tags/douyin-xingtu-v2-api.md +0 -925
  117. package/skills/creator-analysis/references/api-tags/health-check.md +0 -40
  118. package/skills/creator-analysis/references/api-tags/hybrid-parsing.md +0 -57
  119. package/skills/creator-analysis/references/api-tags/instagram-v1-api.md +0 -1224
  120. package/skills/creator-analysis/references/api-tags/instagram-v2-api.md +0 -1147
  121. package/skills/creator-analysis/references/api-tags/instagram-v3-api.md +0 -1123
  122. package/skills/creator-analysis/references/api-tags/ios-shortcut.md +0 -45
  123. package/skills/creator-analysis/references/api-tags/kuaishou-app-api.md +0 -846
  124. package/skills/creator-analysis/references/api-tags/kuaishou-web-api.md +0 -551
  125. package/skills/creator-analysis/references/api-tags/lemon8-app-api.md +0 -687
  126. package/skills/creator-analysis/references/api-tags/linkedin-web-api.md +0 -1105
  127. package/skills/creator-analysis/references/api-tags/media-ingest-api.md +0 -112
  128. package/skills/creator-analysis/references/api-tags/pipixia-app-api.md +0 -721
  129. package/skills/creator-analysis/references/api-tags/reddit-app-api.md +0 -1057
  130. package/skills/creator-analysis/references/api-tags/sora2-api.md +0 -737
  131. package/skills/creator-analysis/references/api-tags/temp-mail-api.md +0 -136
  132. package/skills/creator-analysis/references/api-tags/threads-web-api.md +0 -472
  133. package/skills/creator-analysis/references/api-tags/tikhub-downloader-api.md +0 -65
  134. package/skills/creator-analysis/references/api-tags/tikhub-user-api.md +0 -253
  135. package/skills/creator-analysis/references/api-tags/tiktok-ads-api.md +0 -1393
  136. package/skills/creator-analysis/references/api-tags/tiktok-analytics-api.md +0 -179
  137. package/skills/creator-analysis/references/api-tags/tiktok-app-v3-api.md +0 -3264
  138. package/skills/creator-analysis/references/api-tags/tiktok-creator-api.md +0 -709
  139. package/skills/creator-analysis/references/api-tags/tiktok-interaction-api.md +0 -366
  140. package/skills/creator-analysis/references/api-tags/tiktok-shop-web-api.md +0 -663
  141. package/skills/creator-analysis/references/api-tags/tiktok-web-api.md +0 -2516
  142. package/skills/creator-analysis/references/api-tags/toutiao-app-api.md +0 -220
  143. package/skills/creator-analysis/references/api-tags/toutiao-web-api.md +0 -96
  144. package/skills/creator-analysis/references/api-tags/twitter-web-api.md +0 -562
  145. package/skills/creator-analysis/references/api-tags/wechat-channels-api.md +0 -405
  146. package/skills/creator-analysis/references/api-tags/wechat-media-platform-web-api.md +0 -431
  147. package/skills/creator-analysis/references/api-tags/weibo-app-api.md +0 -851
  148. package/skills/creator-analysis/references/api-tags/weibo-web-api.md +0 -470
  149. package/skills/creator-analysis/references/api-tags/weibo-web-v2-api.md +0 -1405
  150. package/skills/creator-analysis/references/api-tags/xiaohongshu-app-api.md +0 -534
  151. package/skills/creator-analysis/references/api-tags/xiaohongshu-app-v2-api.md +0 -934
  152. package/skills/creator-analysis/references/api-tags/xiaohongshu-web-api.md +0 -757
  153. package/skills/creator-analysis/references/api-tags/xiaohongshu-web-v2-api.md +0 -762
  154. package/skills/creator-analysis/references/api-tags/xigua-app-v2-api.md +0 -308
  155. package/skills/creator-analysis/references/api-tags/youtube-web-api.md +0 -934
  156. package/skills/creator-analysis/references/api-tags/youtube-web-v2-api.md +0 -717
  157. package/skills/creator-analysis/references/api-tags/zhihu-web-api.md +0 -1384
  158. package/skills/creator-analysis/references/asr-orchestration.md +0 -33
  159. package/skills/creator-analysis/references/config-templates/defaults.yaml +0 -60
  160. package/skills/creator-analysis/references/contracts/creator-card-fields.md +0 -25
  161. package/skills/creator-analysis/references/contracts/work-card-fields.md +0 -68
  162. package/skills/creator-analysis/references/platform-guides/douyin.md +0 -54
  163. package/skills/creator-analysis/references/platform-guides/generic.md +0 -50
  164. package/skills/creator-analysis/references/platform-guides/xiaohongshu.md +0 -69
  165. package/skills/creator-analysis/references/prompt-contracts/asr-clean.md +0 -28
  166. package/skills/creator-analysis/references/prompt-contracts/author-analysis-v2.md +0 -46
  167. package/skills/creator-analysis/references/prompt-contracts/author-analysis.md +0 -49
  168. package/skills/creator-analysis/references/prompt-contracts/cta.md +0 -24
  169. package/skills/creator-analysis/references/prompt-contracts/hook.md +0 -25
  170. package/skills/creator-analysis/references/prompt-contracts/insight.md +0 -47
  171. package/skills/creator-analysis/references/prompt-contracts/sampled-work-batch-explanations.md +0 -30
  172. package/skills/creator-analysis/references/prompt-contracts/structure.md +0 -25
  173. package/skills/creator-analysis/references/prompt-contracts/style.md +0 -27
  174. package/skills/creator-analysis/references/prompt-contracts/summary.md +0 -29
  175. package/skills/creator-analysis/references/prompt-contracts/topic.md +0 -29
  176. package/skills/creator-analysis/references/schemas/author-analysis-input-v1.schema.json +0 -325
  177. package/skills/creator-analysis/references/schemas/author-analysis-v2.schema.json +0 -287
  178. package/skills/creator-analysis/references/schemas/sampled-work-batch-explanations.schema.json +0 -41
  179. package/skills/creator-analysis/references/service-guides/asr-u2-u3-fallback.md +0 -75
  180. package/skills/creator-analysis/references/workflow.md +0 -23
  181. package/skills/creator-analysis/scripts/__init__.py +0 -0
  182. package/skills/creator-analysis/scripts/author_home/__init__.py +0 -0
  183. package/skills/creator-analysis/scripts/author_home/adapters/__init__.py +0 -0
  184. package/skills/creator-analysis/scripts/author_home/analyzers/__init__.py +0 -0
  185. package/skills/creator-analysis/scripts/author_home/analyzers/author_analysis_v2_support.py +0 -1165
  186. package/skills/creator-analysis/scripts/author_home/analyzers/prompt_first_analyzers.py +0 -447
  187. package/skills/creator-analysis/scripts/author_home/analyzers/sampled_work_batch_explainer.py +0 -331
  188. package/skills/creator-analysis/scripts/author_home/asr/__init__.py +0 -5
  189. package/skills/creator-analysis/scripts/author_home/builders/__init__.py +0 -0
  190. package/skills/creator-analysis/scripts/author_home/builders/home_builders.py +0 -213
  191. package/skills/creator-analysis/scripts/author_home/collectors/__init__.py +0 -0
  192. package/skills/creator-analysis/scripts/author_home/orchestrator/__init__.py +0 -0
  193. package/skills/creator-analysis/scripts/author_home/orchestrator/run_author_analysis.py +0 -834
  194. package/skills/creator-analysis/scripts/author_home/orchestrator/work_analysis_artifacts.py +0 -609
  195. package/skills/creator-analysis/scripts/core/__init__.py +0 -0
  196. package/skills/creator-analysis/scripts/core/analysis_pipeline.py +0 -133
  197. package/skills/creator-analysis/scripts/core/config_loader.py +0 -418
  198. package/skills/creator-analysis/scripts/core/progress_report.py +0 -111
  199. package/skills/creator-analysis/scripts/core/storage_router.py +0 -256
  200. package/skills/creator-analysis/scripts/pipeline/__init__.py +0 -0
  201. package/skills/creator-analysis/scripts/pipeline/asr/__init__.py +0 -0
  202. package/skills/creator-analysis/scripts/platform/__init__.py +0 -0
  203. package/skills/creator-analysis/scripts/platform/douyin/__init__.py +0 -0
  204. package/skills/creator-analysis/scripts/platform/douyin/run_douyin_single_video.py +0 -1208
  205. package/skills/creator-analysis/scripts/platform/xiaohongshu/__init__.py +0 -0
  206. package/skills/creator-analysis/scripts/platform/xiaohongshu/run_xiaohongshu_extract.py +0 -2128
  207. package/skills/creator-analysis/scripts/writers/__init__.py +0 -0
  208. package/skills/creator-analysis/scripts/writers/write_author_homepage_samples.py +0 -107
  209. package/skills/creator-analysis/scripts/writers/write_benchmark_card.py +0 -1579
  210. package/skills/meta-capability/SKILL.md +0 -69
  211. package/skills/meta-capability/agents/openai.yaml +0 -4
  212. package/skills/meta-capability/env.example +0 -42
  213. package/skills/meta-capability/references/api-capability-index.md +0 -92
  214. package/skills/meta-capability/references/api-contracts/asr-api.md +0 -130
  215. package/skills/meta-capability/references/api-contracts/bilibili-app-api.md +0 -776
  216. package/skills/meta-capability/references/api-contracts/bilibili-web-api.md +0 -2017
  217. package/skills/meta-capability/references/api-contracts/demo-api.md +0 -717
  218. package/skills/meta-capability/references/api-contracts/douyin-app-v3-api.md +0 -3594
  219. package/skills/meta-capability/references/api-contracts/douyin-billboard-api.md +0 -2274
  220. package/skills/meta-capability/references/api-contracts/douyin-creator-api.md +0 -1575
  221. package/skills/meta-capability/references/api-contracts/douyin-creator-v2-api.md +0 -3254
  222. package/skills/meta-capability/references/api-contracts/douyin-search-api.md +0 -4118
  223. package/skills/meta-capability/references/api-contracts/douyin-web-api.md +0 -5544
  224. package/skills/meta-capability/references/api-contracts/douyin-xingtu-api.md +0 -1916
  225. package/skills/meta-capability/references/api-contracts/douyin-xingtu-v2-api.md +0 -1540
  226. package/skills/meta-capability/references/api-contracts/health-check.md +0 -69
  227. package/skills/meta-capability/references/api-contracts/hybrid-parsing.md +0 -78
  228. package/skills/meta-capability/references/api-contracts/instagram-v1-api.md +0 -2256
  229. package/skills/meta-capability/references/api-contracts/instagram-v2-api.md +0 -2011
  230. package/skills/meta-capability/references/api-contracts/instagram-v3-api.md +0 -2630
  231. package/skills/meta-capability/references/api-contracts/ios-shortcut.md +0 -44
  232. package/skills/meta-capability/references/api-contracts/kuaishou-app-api.md +0 -1518
  233. package/skills/meta-capability/references/api-contracts/kuaishou-web-api.md +0 -1242
  234. package/skills/meta-capability/references/api-contracts/lemon8-app-api.md +0 -1088
  235. package/skills/meta-capability/references/api-contracts/linkedin-web-api.md +0 -1949
  236. package/skills/meta-capability/references/api-contracts/media-ingest-api.md +0 -126
  237. package/skills/meta-capability/references/api-contracts/pipixia-app-api.md +0 -1142
  238. package/skills/meta-capability/references/api-contracts/reddit-app-api.md +0 -2025
  239. package/skills/meta-capability/references/api-contracts/sora2-api.md +0 -2266
  240. package/skills/meta-capability/references/api-contracts/temp-mail-api.md +0 -208
  241. package/skills/meta-capability/references/api-contracts/threads-web-api.md +0 -897
  242. package/skills/meta-capability/references/api-contracts/tikhub-downloader-api.md +0 -134
  243. package/skills/meta-capability/references/api-contracts/tikhub-user-api.md +0 -494
  244. package/skills/meta-capability/references/api-contracts/tiktok-ads-api.md +0 -5947
  245. package/skills/meta-capability/references/api-contracts/tiktok-analytics-api.md +0 -968
  246. package/skills/meta-capability/references/api-contracts/tiktok-app-v3-api.md +0 -5735
  247. package/skills/meta-capability/references/api-contracts/tiktok-creator-api.md +0 -1951
  248. package/skills/meta-capability/references/api-contracts/tiktok-interaction-api.md +0 -742
  249. package/skills/meta-capability/references/api-contracts/tiktok-shop-web-api.md +0 -1890
  250. package/skills/meta-capability/references/api-contracts/tiktok-web-api.md +0 -4448
  251. package/skills/meta-capability/references/api-contracts/toutiao-app-api.md +0 -342
  252. package/skills/meta-capability/references/api-contracts/toutiao-web-api.md +0 -143
  253. package/skills/meta-capability/references/api-contracts/twitter-web-api.md +0 -989
  254. package/skills/meta-capability/references/api-contracts/wechat-channels-api.md +0 -809
  255. package/skills/meta-capability/references/api-contracts/wechat-media-platform-web-api.md +0 -677
  256. package/skills/meta-capability/references/api-contracts/weibo-app-api.md +0 -1547
  257. package/skills/meta-capability/references/api-contracts/weibo-web-api.md +0 -798
  258. package/skills/meta-capability/references/api-contracts/weibo-web-v2-api.md +0 -2459
  259. package/skills/meta-capability/references/api-contracts/xiaohongshu-app-api.md +0 -1291
  260. package/skills/meta-capability/references/api-contracts/xiaohongshu-app-v2-api.md +0 -1683
  261. package/skills/meta-capability/references/api-contracts/xiaohongshu-web-api.md +0 -1324
  262. package/skills/meta-capability/references/api-contracts/xiaohongshu-web-v2-api.md +0 -1209
  263. package/skills/meta-capability/references/api-contracts/xigua-app-v2-api.md +0 -489
  264. package/skills/meta-capability/references/api-contracts/youtube-web-api.md +0 -2636
  265. package/skills/meta-capability/references/api-contracts/youtube-web-v2-api.md +0 -2660
  266. package/skills/meta-capability/references/api-contracts/zhihu-web-api.md +0 -2315
  267. package/skills/meta-capability/references/api-tags/asr-api.md +0 -100
  268. package/skills/meta-capability/references/api-tags/bilibili-app-api.md +0 -482
  269. package/skills/meta-capability/references/api-tags/bilibili-web-api.md +0 -1267
  270. package/skills/meta-capability/references/api-tags/demo-api.md +0 -365
  271. package/skills/meta-capability/references/api-tags/douyin-app-v3-api.md +0 -2012
  272. package/skills/meta-capability/references/api-tags/douyin-billboard-api.md +0 -1428
  273. package/skills/meta-capability/references/api-tags/douyin-creator-api.md +0 -694
  274. package/skills/meta-capability/references/api-tags/douyin-creator-v2-api.md +0 -694
  275. package/skills/meta-capability/references/api-tags/douyin-search-api.md +0 -1059
  276. package/skills/meta-capability/references/api-tags/douyin-web-api.md +0 -3314
  277. package/skills/meta-capability/references/api-tags/douyin-xingtu-api.md +0 -935
  278. package/skills/meta-capability/references/api-tags/douyin-xingtu-v2-api.md +0 -925
  279. package/skills/meta-capability/references/api-tags/health-check.md +0 -40
  280. package/skills/meta-capability/references/api-tags/hybrid-parsing.md +0 -57
  281. package/skills/meta-capability/references/api-tags/instagram-v1-api.md +0 -1224
  282. package/skills/meta-capability/references/api-tags/instagram-v2-api.md +0 -1147
  283. package/skills/meta-capability/references/api-tags/instagram-v3-api.md +0 -1123
  284. package/skills/meta-capability/references/api-tags/ios-shortcut.md +0 -45
  285. package/skills/meta-capability/references/api-tags/kuaishou-app-api.md +0 -846
  286. package/skills/meta-capability/references/api-tags/kuaishou-web-api.md +0 -551
  287. package/skills/meta-capability/references/api-tags/lemon8-app-api.md +0 -687
  288. package/skills/meta-capability/references/api-tags/linkedin-web-api.md +0 -1105
  289. package/skills/meta-capability/references/api-tags/media-ingest-api.md +0 -112
  290. package/skills/meta-capability/references/api-tags/pipixia-app-api.md +0 -721
  291. package/skills/meta-capability/references/api-tags/reddit-app-api.md +0 -1057
  292. package/skills/meta-capability/references/api-tags/sora2-api.md +0 -737
  293. package/skills/meta-capability/references/api-tags/temp-mail-api.md +0 -136
  294. package/skills/meta-capability/references/api-tags/threads-web-api.md +0 -472
  295. package/skills/meta-capability/references/api-tags/tikhub-downloader-api.md +0 -65
  296. package/skills/meta-capability/references/api-tags/tikhub-user-api.md +0 -253
  297. package/skills/meta-capability/references/api-tags/tiktok-ads-api.md +0 -1393
  298. package/skills/meta-capability/references/api-tags/tiktok-analytics-api.md +0 -179
  299. package/skills/meta-capability/references/api-tags/tiktok-app-v3-api.md +0 -3264
  300. package/skills/meta-capability/references/api-tags/tiktok-creator-api.md +0 -709
  301. package/skills/meta-capability/references/api-tags/tiktok-interaction-api.md +0 -366
  302. package/skills/meta-capability/references/api-tags/tiktok-shop-web-api.md +0 -663
  303. package/skills/meta-capability/references/api-tags/tiktok-web-api.md +0 -2516
  304. package/skills/meta-capability/references/api-tags/toutiao-app-api.md +0 -220
  305. package/skills/meta-capability/references/api-tags/toutiao-web-api.md +0 -96
  306. package/skills/meta-capability/references/api-tags/twitter-web-api.md +0 -562
  307. package/skills/meta-capability/references/api-tags/wechat-channels-api.md +0 -405
  308. package/skills/meta-capability/references/api-tags/wechat-media-platform-web-api.md +0 -431
  309. package/skills/meta-capability/references/api-tags/weibo-app-api.md +0 -851
  310. package/skills/meta-capability/references/api-tags/weibo-web-api.md +0 -470
  311. package/skills/meta-capability/references/api-tags/weibo-web-v2-api.md +0 -1405
  312. package/skills/meta-capability/references/api-tags/xiaohongshu-app-api.md +0 -534
  313. package/skills/meta-capability/references/api-tags/xiaohongshu-app-v2-api.md +0 -934
  314. package/skills/meta-capability/references/api-tags/xiaohongshu-web-api.md +0 -757
  315. package/skills/meta-capability/references/api-tags/xiaohongshu-web-v2-api.md +0 -762
  316. package/skills/meta-capability/references/api-tags/xigua-app-v2-api.md +0 -308
  317. package/skills/meta-capability/references/api-tags/youtube-web-api.md +0 -934
  318. package/skills/meta-capability/references/api-tags/youtube-web-v2-api.md +0 -717
  319. package/skills/meta-capability/references/api-tags/zhihu-web-api.md +0 -1384
  320. package/skills/meta-capability/references/config-templates/defaults.yaml +0 -18
  321. package/skills/meta-capability/references/dispatch.md +0 -27
  322. package/skills/meta-capability/references/execution-guidelines.md +0 -25
  323. package/skills/meta-capability/references/implemented-route-map.md +0 -177
  324. package/skills/meta-capability/references/service-guides/asr-u2-u3-fallback.md +0 -75
  325. package/skills/meta-capability/scripts/__init__.py +0 -1
  326. package/skills/meta-capability/scripts/call_route.py +0 -141
  327. package/skills/meta-capability/scripts/core/__init__.py +0 -1
  328. package/skills/meta-capability/scripts/core/bootstrap_env.py +0 -32
  329. package/skills/meta-capability/scripts/core/config_loader.py +0 -204
  330. package/skills/meta-capability/scripts/core/tikomni_common.py +0 -443
  331. package/skills/meta-capability/scripts/test_auth.py +0 -98
  332. package/skills/single-work-analysis/SKILL.md +0 -62
  333. package/skills/single-work-analysis/agents/openai.yaml +0 -4
  334. package/skills/single-work-analysis/env.example +0 -36
  335. package/skills/single-work-analysis/references/api-capability-index.md +0 -92
  336. package/skills/single-work-analysis/references/api-contracts/asr-api.md +0 -130
  337. package/skills/single-work-analysis/references/api-contracts/bilibili-app-api.md +0 -776
  338. package/skills/single-work-analysis/references/api-contracts/bilibili-web-api.md +0 -2017
  339. package/skills/single-work-analysis/references/api-contracts/demo-api.md +0 -717
  340. package/skills/single-work-analysis/references/api-contracts/douyin-app-v3-api.md +0 -3594
  341. package/skills/single-work-analysis/references/api-contracts/douyin-billboard-api.md +0 -2274
  342. package/skills/single-work-analysis/references/api-contracts/douyin-creator-api.md +0 -1575
  343. package/skills/single-work-analysis/references/api-contracts/douyin-creator-v2-api.md +0 -3254
  344. package/skills/single-work-analysis/references/api-contracts/douyin-search-api.md +0 -4118
  345. package/skills/single-work-analysis/references/api-contracts/douyin-web-api.md +0 -5544
  346. package/skills/single-work-analysis/references/api-contracts/douyin-xingtu-api.md +0 -1916
  347. package/skills/single-work-analysis/references/api-contracts/douyin-xingtu-v2-api.md +0 -1540
  348. package/skills/single-work-analysis/references/api-contracts/health-check.md +0 -69
  349. package/skills/single-work-analysis/references/api-contracts/hybrid-parsing.md +0 -78
  350. package/skills/single-work-analysis/references/api-contracts/instagram-v1-api.md +0 -2256
  351. package/skills/single-work-analysis/references/api-contracts/instagram-v2-api.md +0 -2011
  352. package/skills/single-work-analysis/references/api-contracts/instagram-v3-api.md +0 -2630
  353. package/skills/single-work-analysis/references/api-contracts/ios-shortcut.md +0 -44
  354. package/skills/single-work-analysis/references/api-contracts/kuaishou-app-api.md +0 -1518
  355. package/skills/single-work-analysis/references/api-contracts/kuaishou-web-api.md +0 -1242
  356. package/skills/single-work-analysis/references/api-contracts/lemon8-app-api.md +0 -1088
  357. package/skills/single-work-analysis/references/api-contracts/linkedin-web-api.md +0 -1949
  358. package/skills/single-work-analysis/references/api-contracts/media-ingest-api.md +0 -126
  359. package/skills/single-work-analysis/references/api-contracts/pipixia-app-api.md +0 -1142
  360. package/skills/single-work-analysis/references/api-contracts/reddit-app-api.md +0 -2025
  361. package/skills/single-work-analysis/references/api-contracts/sora2-api.md +0 -2266
  362. package/skills/single-work-analysis/references/api-contracts/temp-mail-api.md +0 -208
  363. package/skills/single-work-analysis/references/api-contracts/threads-web-api.md +0 -897
  364. package/skills/single-work-analysis/references/api-contracts/tikhub-downloader-api.md +0 -134
  365. package/skills/single-work-analysis/references/api-contracts/tikhub-user-api.md +0 -494
  366. package/skills/single-work-analysis/references/api-contracts/tiktok-ads-api.md +0 -5947
  367. package/skills/single-work-analysis/references/api-contracts/tiktok-analytics-api.md +0 -968
  368. package/skills/single-work-analysis/references/api-contracts/tiktok-app-v3-api.md +0 -5735
  369. package/skills/single-work-analysis/references/api-contracts/tiktok-creator-api.md +0 -1951
  370. package/skills/single-work-analysis/references/api-contracts/tiktok-interaction-api.md +0 -742
  371. package/skills/single-work-analysis/references/api-contracts/tiktok-shop-web-api.md +0 -1890
  372. package/skills/single-work-analysis/references/api-contracts/tiktok-web-api.md +0 -4448
  373. package/skills/single-work-analysis/references/api-contracts/toutiao-app-api.md +0 -342
  374. package/skills/single-work-analysis/references/api-contracts/toutiao-web-api.md +0 -143
  375. package/skills/single-work-analysis/references/api-contracts/twitter-web-api.md +0 -989
  376. package/skills/single-work-analysis/references/api-contracts/wechat-channels-api.md +0 -809
  377. package/skills/single-work-analysis/references/api-contracts/wechat-media-platform-web-api.md +0 -677
  378. package/skills/single-work-analysis/references/api-contracts/weibo-app-api.md +0 -1547
  379. package/skills/single-work-analysis/references/api-contracts/weibo-web-api.md +0 -798
  380. package/skills/single-work-analysis/references/api-contracts/weibo-web-v2-api.md +0 -2459
  381. package/skills/single-work-analysis/references/api-contracts/xiaohongshu-app-api.md +0 -1291
  382. package/skills/single-work-analysis/references/api-contracts/xiaohongshu-app-v2-api.md +0 -1683
  383. package/skills/single-work-analysis/references/api-contracts/xiaohongshu-web-api.md +0 -1324
  384. package/skills/single-work-analysis/references/api-contracts/xiaohongshu-web-v2-api.md +0 -1209
  385. package/skills/single-work-analysis/references/api-contracts/xigua-app-v2-api.md +0 -489
  386. package/skills/single-work-analysis/references/api-contracts/youtube-web-api.md +0 -2636
  387. package/skills/single-work-analysis/references/api-contracts/youtube-web-v2-api.md +0 -2660
  388. package/skills/single-work-analysis/references/api-contracts/zhihu-web-api.md +0 -2315
  389. package/skills/single-work-analysis/references/api-tags/asr-api.md +0 -100
  390. package/skills/single-work-analysis/references/api-tags/bilibili-app-api.md +0 -482
  391. package/skills/single-work-analysis/references/api-tags/bilibili-web-api.md +0 -1267
  392. package/skills/single-work-analysis/references/api-tags/demo-api.md +0 -365
  393. package/skills/single-work-analysis/references/api-tags/douyin-app-v3-api.md +0 -2012
  394. package/skills/single-work-analysis/references/api-tags/douyin-billboard-api.md +0 -1428
  395. package/skills/single-work-analysis/references/api-tags/douyin-creator-api.md +0 -694
  396. package/skills/single-work-analysis/references/api-tags/douyin-creator-v2-api.md +0 -694
  397. package/skills/single-work-analysis/references/api-tags/douyin-search-api.md +0 -1059
  398. package/skills/single-work-analysis/references/api-tags/douyin-web-api.md +0 -3314
  399. package/skills/single-work-analysis/references/api-tags/douyin-xingtu-api.md +0 -935
  400. package/skills/single-work-analysis/references/api-tags/douyin-xingtu-v2-api.md +0 -925
  401. package/skills/single-work-analysis/references/api-tags/health-check.md +0 -40
  402. package/skills/single-work-analysis/references/api-tags/hybrid-parsing.md +0 -57
  403. package/skills/single-work-analysis/references/api-tags/instagram-v1-api.md +0 -1224
  404. package/skills/single-work-analysis/references/api-tags/instagram-v2-api.md +0 -1147
  405. package/skills/single-work-analysis/references/api-tags/instagram-v3-api.md +0 -1123
  406. package/skills/single-work-analysis/references/api-tags/ios-shortcut.md +0 -45
  407. package/skills/single-work-analysis/references/api-tags/kuaishou-app-api.md +0 -846
  408. package/skills/single-work-analysis/references/api-tags/kuaishou-web-api.md +0 -551
  409. package/skills/single-work-analysis/references/api-tags/lemon8-app-api.md +0 -687
  410. package/skills/single-work-analysis/references/api-tags/linkedin-web-api.md +0 -1105
  411. package/skills/single-work-analysis/references/api-tags/media-ingest-api.md +0 -112
  412. package/skills/single-work-analysis/references/api-tags/pipixia-app-api.md +0 -721
  413. package/skills/single-work-analysis/references/api-tags/reddit-app-api.md +0 -1057
  414. package/skills/single-work-analysis/references/api-tags/sora2-api.md +0 -737
  415. package/skills/single-work-analysis/references/api-tags/temp-mail-api.md +0 -136
  416. package/skills/single-work-analysis/references/api-tags/threads-web-api.md +0 -472
  417. package/skills/single-work-analysis/references/api-tags/tikhub-downloader-api.md +0 -65
  418. package/skills/single-work-analysis/references/api-tags/tikhub-user-api.md +0 -253
  419. package/skills/single-work-analysis/references/api-tags/tiktok-ads-api.md +0 -1393
  420. package/skills/single-work-analysis/references/api-tags/tiktok-analytics-api.md +0 -179
  421. package/skills/single-work-analysis/references/api-tags/tiktok-app-v3-api.md +0 -3264
  422. package/skills/single-work-analysis/references/api-tags/tiktok-creator-api.md +0 -709
  423. package/skills/single-work-analysis/references/api-tags/tiktok-interaction-api.md +0 -366
  424. package/skills/single-work-analysis/references/api-tags/tiktok-shop-web-api.md +0 -663
  425. package/skills/single-work-analysis/references/api-tags/tiktok-web-api.md +0 -2516
  426. package/skills/single-work-analysis/references/api-tags/toutiao-app-api.md +0 -220
  427. package/skills/single-work-analysis/references/api-tags/toutiao-web-api.md +0 -96
  428. package/skills/single-work-analysis/references/api-tags/twitter-web-api.md +0 -562
  429. package/skills/single-work-analysis/references/api-tags/wechat-channels-api.md +0 -405
  430. package/skills/single-work-analysis/references/api-tags/wechat-media-platform-web-api.md +0 -431
  431. package/skills/single-work-analysis/references/api-tags/weibo-app-api.md +0 -851
  432. package/skills/single-work-analysis/references/api-tags/weibo-web-api.md +0 -470
  433. package/skills/single-work-analysis/references/api-tags/weibo-web-v2-api.md +0 -1405
  434. package/skills/single-work-analysis/references/api-tags/xiaohongshu-app-api.md +0 -534
  435. package/skills/single-work-analysis/references/api-tags/xiaohongshu-app-v2-api.md +0 -934
  436. package/skills/single-work-analysis/references/api-tags/xiaohongshu-web-api.md +0 -757
  437. package/skills/single-work-analysis/references/api-tags/xiaohongshu-web-v2-api.md +0 -762
  438. package/skills/single-work-analysis/references/api-tags/xigua-app-v2-api.md +0 -308
  439. package/skills/single-work-analysis/references/api-tags/youtube-web-api.md +0 -934
  440. package/skills/single-work-analysis/references/api-tags/youtube-web-v2-api.md +0 -717
  441. package/skills/single-work-analysis/references/api-tags/zhihu-web-api.md +0 -1384
  442. package/skills/single-work-analysis/references/asr-and-fallback.md +0 -20
  443. package/skills/single-work-analysis/references/config-templates/defaults.yaml +0 -58
  444. package/skills/single-work-analysis/references/contracts/work-card-fields.md +0 -41
  445. package/skills/single-work-analysis/references/platform-guides/douyin.md +0 -47
  446. package/skills/single-work-analysis/references/platform-guides/generic.md +0 -43
  447. package/skills/single-work-analysis/references/platform-guides/xiaohongshu.md +0 -54
  448. package/skills/single-work-analysis/references/prompt-contracts/asr-clean.md +0 -28
  449. package/skills/single-work-analysis/references/prompt-contracts/cta.md +0 -24
  450. package/skills/single-work-analysis/references/prompt-contracts/hook.md +0 -25
  451. package/skills/single-work-analysis/references/prompt-contracts/insight.md +0 -47
  452. package/skills/single-work-analysis/references/prompt-contracts/structure.md +0 -25
  453. package/skills/single-work-analysis/references/prompt-contracts/style.md +0 -27
  454. package/skills/single-work-analysis/references/prompt-contracts/summary.md +0 -29
  455. package/skills/single-work-analysis/references/prompt-contracts/topic.md +0 -29
  456. package/skills/single-work-analysis/references/schemas/work-card.schema.json +0 -39
  457. package/skills/single-work-analysis/references/service-guides/asr-u2-u3-fallback.md +0 -75
  458. package/skills/single-work-analysis/scripts/__init__.py +0 -0
  459. package/skills/single-work-analysis/scripts/core/__init__.py +0 -0
  460. package/skills/single-work-analysis/scripts/core/analysis_pipeline.py +0 -133
  461. package/skills/single-work-analysis/scripts/core/bootstrap_env.py +0 -35
  462. package/skills/single-work-analysis/scripts/core/extract_pipeline.py +0 -173
  463. package/skills/single-work-analysis/scripts/core/storage_router.py +0 -253
  464. package/skills/single-work-analysis/scripts/core/tikomni_common.py +0 -588
  465. package/skills/single-work-analysis/scripts/pipeline/__init__.py +0 -0
  466. package/skills/single-work-analysis/scripts/pipeline/asr/__init__.py +0 -0
  467. package/skills/single-work-analysis/scripts/pipeline/asr/asr_pipeline.py +0 -1189
  468. package/skills/single-work-analysis/scripts/pipeline/asr/poll_u2_task.py +0 -95
  469. package/skills/single-work-analysis/scripts/platform/__init__.py +0 -0
  470. package/skills/single-work-analysis/scripts/platform/douyin/__init__.py +0 -0
  471. package/skills/single-work-analysis/scripts/platform/douyin/douyin_video_type_matrix.py +0 -224
  472. package/skills/single-work-analysis/scripts/platform/douyin/select_low_quality_video_url.py +0 -200
  473. package/skills/single-work-analysis/scripts/platform/xiaohongshu/__init__.py +0 -0
  474. package/skills/single-work-analysis/scripts/writers/__init__.py +0 -0
  475. package/skills/single-work-analysis/scripts/writers/write_benchmark_card.py +0 -1402
  476. /package/skills/{creator-analysis → social-media-crawl}/scripts/core/bootstrap_env.py +0 -0
  477. /package/skills/{creator-analysis → social-media-crawl}/scripts/core/extract_pipeline.py +0 -0
  478. /package/skills/{creator-analysis/scripts/platform/douyin → social-media-crawl/scripts/pipelines}/douyin_video_type_matrix.py +0 -0
  479. /package/skills/{creator-analysis/scripts/author_home/collectors → social-media-crawl/scripts/pipelines}/homepage_collectors.py +0 -0
  480. /package/skills/{creator-analysis/scripts/platform/douyin → social-media-crawl/scripts/pipelines}/select_low_quality_video_url.py +0 -0
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env python3
2
- """Schema definitions and minimal validators for creator-analysis."""
2
+ """Schema definitions and minimal validators for social-media-crawl."""
3
3
 
4
4
  from __future__ import annotations
5
5
 
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env python3
2
+ """Xiaohongshu creator-home helper entrypoints."""
3
+
4
+ from __future__ import annotations
5
+
6
+ from typing import Any, Dict, List, Tuple
7
+
8
+ from scripts.pipelines.homepage_collectors import collect_xhs_author_home_raw
9
+ from scripts.pipelines.platform_adapters import adapt_xhs_author_home
10
+
11
+
12
+ def collect_and_adapt(
13
+ *,
14
+ input_value: str,
15
+ base_url: str,
16
+ token: str,
17
+ timeout_ms: int,
18
+ page_size: int,
19
+ pages_max: int,
20
+ max_items: int,
21
+ progress: Any = None,
22
+ ) -> Tuple[Dict[str, Any], Dict[str, Any], List[Dict[str, Any]], List[Dict[str, str]]]:
23
+ raw = collect_xhs_author_home_raw(
24
+ input_value=input_value,
25
+ base_url=base_url,
26
+ token=token,
27
+ timeout_ms=timeout_ms,
28
+ page_size=page_size,
29
+ pages_max=pages_max,
30
+ max_items=max_items,
31
+ progress=progress,
32
+ )
33
+ profile, works, missing = adapt_xhs_author_home(raw)
34
+ return raw, profile, works, missing
35
+
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env python3
2
+ """Compatibility wrapper for xiaohongshu platform adapter."""
3
+
4
+ from scripts.pipelines.platform_adapters import adapt_xhs_author_home
5
+
6
+ __all__ = ["adapt_xhs_author_home"]
7
+
@@ -0,0 +1 @@
1
+ """Writers for social-media-crawl."""
@@ -0,0 +1,391 @@
1
+ #!/usr/bin/env python3
2
+ """Write work fact cards and normalized envelopes."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import hashlib
7
+ import json
8
+ from datetime import datetime, timedelta, timezone
9
+ from pathlib import Path
10
+ from typing import Any, Dict, List, Optional
11
+
12
+ from scripts.core.completeness import ensure_request_id, evaluate_work_fact_card, normalize_missing_fields
13
+ from scripts.core.config_loader import resolve_storage_paths
14
+ from scripts.core.storage_router import (
15
+ build_work_fact_card_paths,
16
+ render_output_filename,
17
+ resolve_card_root,
18
+ resolve_json_filename_pattern,
19
+ )
20
+
21
+ SHANGHAI_TZ = timezone(timedelta(hours=8))
22
+
23
+
24
+ def _safe_text(value: Any) -> str:
25
+ if value is None:
26
+ return ""
27
+ return str(value).strip()
28
+
29
+
30
+ def _safe_int(value: Any) -> int:
31
+ if value is None:
32
+ return 0
33
+ if isinstance(value, bool):
34
+ return int(value)
35
+ if isinstance(value, int):
36
+ return value
37
+ if isinstance(value, float):
38
+ return int(value)
39
+ text = _safe_text(value)
40
+ if not text:
41
+ return 0
42
+ try:
43
+ return int(float(text.replace(",", "")))
44
+ except Exception:
45
+ return 0
46
+
47
+
48
+ def _source_dict(payload: Dict[str, Any]) -> Dict[str, Any]:
49
+ source = payload.get("source")
50
+ return source if isinstance(source, dict) else {}
51
+
52
+
53
+ def _author_dict(payload: Dict[str, Any]) -> Dict[str, Any]:
54
+ author = payload.get("author")
55
+ return author if isinstance(author, dict) else {}
56
+
57
+
58
+ def _resolve_platform(payload: Dict[str, Any], platform: Optional[str]) -> str:
59
+ return _safe_text(platform or payload.get("platform")) or "unknown"
60
+
61
+
62
+ def _resolve_work_id(payload: Dict[str, Any]) -> str:
63
+ for key in ("platform_work_id", "note_id", "aweme_id", "id"):
64
+ hit = _safe_text(payload.get(key))
65
+ if hit:
66
+ return hit
67
+ source = _source_dict(payload)
68
+ for key in ("note_id", "platform_work_id"):
69
+ hit = _safe_text(source.get(key))
70
+ if hit:
71
+ return hit
72
+ return ""
73
+
74
+
75
+ def _resolve_author_display(payload: Dict[str, Any]) -> str:
76
+ author_raw = payload.get("author")
77
+ author_obj = _author_dict(payload)
78
+ if isinstance(author_raw, str) and _safe_text(author_raw):
79
+ return _safe_text(author_raw)
80
+ for key in ("nickname", "author_handle", "platform_author_id"):
81
+ hit = _safe_text(author_obj.get(key))
82
+ if hit:
83
+ return hit
84
+ for key in ("nickname", "author_handle", "platform_author_id"):
85
+ hit = _safe_text(payload.get(key))
86
+ if hit:
87
+ return hit
88
+ return ""
89
+
90
+
91
+ def _resolve_author_handle(payload: Dict[str, Any]) -> str:
92
+ author_obj = _author_dict(payload)
93
+ source = _source_dict(payload)
94
+ for key in ("author_handle", "short_id", "red_id"):
95
+ for container in (payload, author_obj, source):
96
+ hit = _safe_text(container.get(key))
97
+ if hit:
98
+ return hit
99
+ return _resolve_author_display(payload)
100
+
101
+
102
+ def _resolve_platform_author_id(payload: Dict[str, Any]) -> str:
103
+ author_obj = _author_dict(payload)
104
+ source = _source_dict(payload)
105
+ for key in (
106
+ "platform_author_id",
107
+ "author_platform_id",
108
+ "xhs_user_id",
109
+ "douyin_aweme_author_id",
110
+ "uid",
111
+ ):
112
+ for container in (payload, author_obj, source):
113
+ hit = _safe_text(container.get(key))
114
+ if hit:
115
+ return hit
116
+ return ""
117
+
118
+
119
+ def _resolve_title(payload: Dict[str, Any]) -> str:
120
+ for key in ("title", "display_title", "name"):
121
+ hit = _safe_text(payload.get(key))
122
+ if hit:
123
+ return hit
124
+ caption = _resolve_caption(payload)
125
+ return caption[:60] if caption else ""
126
+
127
+
128
+ def _resolve_caption(payload: Dict[str, Any]) -> str:
129
+ source = _source_dict(payload)
130
+ for key in ("caption_raw", "desc", "content", "raw_content", "summary"):
131
+ for container in (payload, source):
132
+ hit = _safe_text(container.get(key))
133
+ if hit:
134
+ return hit
135
+ return ""
136
+
137
+
138
+ def _to_timestamp(value: Any) -> Optional[int]:
139
+ raw = _safe_int(value)
140
+ if raw <= 0:
141
+ return None
142
+ if raw > 1_000_000_000_000:
143
+ raw //= 1000
144
+ return raw if raw > 0 else None
145
+
146
+
147
+ def _resolve_published_date(payload: Dict[str, Any]) -> str:
148
+ for key in ("published_date", "publish_time_text"):
149
+ hit = _safe_text(payload.get(key))
150
+ if hit:
151
+ return hit[:10] if len(hit) >= 10 else hit
152
+ for key in ("publish_time", "create_time_sec", "create_time", "time"):
153
+ ts = _to_timestamp(payload.get(key))
154
+ if ts:
155
+ return datetime.fromtimestamp(ts, tz=SHANGHAI_TZ).strftime("%Y-%m-%d")
156
+ return ""
157
+
158
+
159
+ def _resolve_work_modality(payload: Dict[str, Any]) -> str:
160
+ modality = _safe_text(payload.get("work_modality")).lower()
161
+ if modality:
162
+ return modality
163
+ content_type = _safe_text(payload.get("note_content_type") or payload.get("content_type")).lower()
164
+ if content_type in {"video", "single_video", "video_note"}:
165
+ return "video"
166
+ if content_type in {"image", "photo", "text", "note"}:
167
+ return "text"
168
+ if payload.get("is_video") is True:
169
+ return "video"
170
+ return "video" if _safe_text(payload.get("video_download_url") or payload.get("video_down_url")) else "text"
171
+
172
+
173
+ def _resolve_source_url(payload: Dict[str, Any], platform: str, work_id: str) -> str:
174
+ source = _source_dict(payload)
175
+ for key in ("source_url", "url", "note_url"):
176
+ for container in (payload, source):
177
+ hit = _safe_text(container.get(key))
178
+ if hit:
179
+ return hit
180
+ if platform == "douyin" and work_id:
181
+ return f"https://www.douyin.com/video/{work_id}"
182
+ if platform == "xiaohongshu" and work_id:
183
+ return f"https://www.xiaohongshu.com/explore/{work_id}"
184
+ return ""
185
+
186
+
187
+ def _resolve_share_url(payload: Dict[str, Any], source_url: str) -> str:
188
+ source = _source_dict(payload)
189
+ for key in ("share_url", "share_link", "share_text"):
190
+ for container in (payload, source):
191
+ hit = _safe_text(container.get(key))
192
+ if hit:
193
+ return hit
194
+ return source_url
195
+
196
+
197
+ def _resolve_primary_text(payload: Dict[str, Any], caption_raw: str) -> Dict[str, str]:
198
+ subtitle_raw = _safe_text(payload.get("subtitle_raw"))
199
+ asr_clean = _safe_text(payload.get("asr_clean"))
200
+ asr_raw = _safe_text(payload.get("asr_raw"))
201
+ if subtitle_raw:
202
+ return {"primary_text": subtitle_raw, "primary_text_source": "subtitle_raw"}
203
+ if asr_clean:
204
+ return {"primary_text": asr_clean, "primary_text_source": "asr_clean"}
205
+ if asr_raw:
206
+ return {"primary_text": asr_raw, "primary_text_source": "asr_raw"}
207
+ if caption_raw:
208
+ return {"primary_text": caption_raw, "primary_text_source": "caption_raw"}
209
+ return {"primary_text": "", "primary_text_source": "missing"}
210
+
211
+
212
+ def build_work_fact_card(payload: Dict[str, Any], platform: Optional[str] = None) -> Dict[str, Any]:
213
+ platform_name = _resolve_platform(payload, platform)
214
+ work_id = _resolve_work_id(payload)
215
+ caption_raw = _resolve_caption(payload)
216
+ source_url = _resolve_source_url(payload, platform_name, work_id)
217
+ share_url = _resolve_share_url(payload, source_url)
218
+ author_handle = _resolve_author_handle(payload)
219
+ platform_author_id = _resolve_platform_author_id(payload)
220
+ primary_text_bundle = _resolve_primary_text(payload, caption_raw)
221
+
222
+ card: Dict[str, Any] = {
223
+ "platform": platform_name,
224
+ "platform_work_id": work_id,
225
+ "platform_author_id": platform_author_id,
226
+ "author_handle": author_handle,
227
+ "author": _resolve_author_display(payload),
228
+ "title": _resolve_title(payload),
229
+ "caption_raw": caption_raw,
230
+ "subtitle_raw": _safe_text(payload.get("subtitle_raw")),
231
+ "work_modality": _resolve_work_modality(payload),
232
+ "published_date": _resolve_published_date(payload),
233
+ "digg_count": _safe_int(payload.get("digg_count")),
234
+ "comment_count": _safe_int(payload.get("comment_count")),
235
+ "collect_count": _safe_int(payload.get("collect_count")),
236
+ "share_count": _safe_int(payload.get("share_count")),
237
+ "play_count": _safe_int(payload.get("play_count")),
238
+ "cover_image": _safe_text(payload.get("cover_image")),
239
+ "source_url": source_url,
240
+ "share_url": share_url,
241
+ "video_download_url": _safe_text(payload.get("video_download_url") or payload.get("video_down_url")),
242
+ "primary_text": primary_text_bundle["primary_text"],
243
+ "primary_text_source": primary_text_bundle["primary_text_source"],
244
+ "asr_raw": _safe_text(payload.get("asr_raw")),
245
+ "asr_clean": _safe_text(payload.get("asr_clean")),
246
+ "request_id": ensure_request_id(_safe_text(payload.get("request_id")), fallback_seed=share_url or work_id or caption_raw),
247
+ "missing_fields": normalize_missing_fields(payload.get("missing_fields")),
248
+ "error_reason": _safe_text(payload.get("error_reason")) or None,
249
+ "extract_trace": payload.get("extract_trace") if isinstance(payload.get("extract_trace"), list) else [],
250
+ }
251
+ existing_missing = {(entry.get("field"), entry.get("reason")) for entry in card["missing_fields"]}
252
+ if (
253
+ card["work_modality"] == "video"
254
+ and not card["asr_clean"]
255
+ and not card["asr_raw"]
256
+ and not card["subtitle_raw"]
257
+ and ("asr_clean", "caption_fallback") not in existing_missing
258
+ ):
259
+ card["missing_fields"].append({"field": "asr_clean", "reason": "caption_fallback"})
260
+ evaluation = evaluate_work_fact_card(card)
261
+ card["completeness"] = evaluation["completeness"]
262
+ card["missing_fields"] = evaluation["missing_fields"]
263
+ return card
264
+
265
+
266
+ def build_work_output_envelope(payload: Dict[str, Any], platform: Optional[str] = None) -> Dict[str, Any]:
267
+ card = build_work_fact_card(payload, platform=platform)
268
+ source = _source_dict(payload)
269
+ input_value = source.get("share_url") or source.get("share_text") or source.get("source_url") or source
270
+ return {
271
+ "object_type": "work",
272
+ "platform": card["platform"],
273
+ "input": input_value,
274
+ "normalized": card,
275
+ "completeness": card["completeness"],
276
+ "missing_fields": card["missing_fields"],
277
+ "error_reason": card.get("error_reason"),
278
+ "extract_trace": card.get("extract_trace", []),
279
+ "request_id": card["request_id"],
280
+ }
281
+
282
+
283
+ def _markdown_lines(card: Dict[str, Any]) -> List[str]:
284
+ lines = [
285
+ f"# {card.get('title') or card.get('platform_work_id') or 'Work'}",
286
+ "",
287
+ "## Facts",
288
+ f"- platform: {card.get('platform') or ''}",
289
+ f"- platform_work_id: {card.get('platform_work_id') or ''}",
290
+ f"- platform_author_id: {card.get('platform_author_id') or ''}",
291
+ f"- author_handle: {card.get('author_handle') or ''}",
292
+ f"- author: {card.get('author') or ''}",
293
+ f"- published_date: {card.get('published_date') or ''}",
294
+ f"- work_modality: {card.get('work_modality') or ''}",
295
+ f"- digg_count: {card.get('digg_count')}",
296
+ f"- comment_count: {card.get('comment_count')}",
297
+ f"- collect_count: {card.get('collect_count')}",
298
+ f"- share_count: {card.get('share_count')}",
299
+ f"- play_count: {card.get('play_count')}",
300
+ f"- source_url: {card.get('source_url') or ''}",
301
+ f"- share_url: {card.get('share_url') or ''}",
302
+ f"- video_download_url: {card.get('video_download_url') or ''}",
303
+ "",
304
+ "## Text",
305
+ card.get("primary_text") or "",
306
+ "",
307
+ "## Meta",
308
+ f"- primary_text_source: {card.get('primary_text_source') or ''}",
309
+ f"- completeness: {card.get('completeness') or ''}",
310
+ f"- request_id: {card.get('request_id') or ''}",
311
+ f"- error_reason: {card.get('error_reason') or ''}",
312
+ ]
313
+ if card.get("missing_fields"):
314
+ lines.extend(["", "## Missing Fields"])
315
+ for entry in card["missing_fields"]:
316
+ lines.append(f"- {entry.get('field')}: {entry.get('reason')}")
317
+ return lines
318
+
319
+
320
+ def write_work_fact_card(
321
+ *,
322
+ payload: Dict[str, Any],
323
+ platform: Optional[str] = None,
324
+ card_root: Optional[str] = None,
325
+ storage_config: Optional[Dict[str, Any]] = None,
326
+ **_: Any,
327
+ ) -> Dict[str, Any]:
328
+ card = build_work_fact_card(payload, platform=platform)
329
+ resolved_card_root = resolve_card_root(storage_config, explicit_card_root=card_root)
330
+ fallback_identifier = card["share_url"] or card["source_url"] or card["title"] or card["request_id"]
331
+ paths = build_work_fact_card_paths(
332
+ card_root=resolved_card_root,
333
+ platform=card["platform"],
334
+ platform_work_id=card["platform_work_id"],
335
+ author_handle=card["author_handle"],
336
+ platform_author_id=card["platform_author_id"],
337
+ storage_config=storage_config,
338
+ fallback_identifier=fallback_identifier,
339
+ )
340
+
341
+ Path(paths["json_path"]).write_text(json.dumps(card, ensure_ascii=False, indent=2), encoding="utf-8")
342
+ Path(paths["markdown_path"]).write_text("\n".join(_markdown_lines(card)).strip() + "\n", encoding="utf-8")
343
+
344
+ return {
345
+ "enabled": True,
346
+ "ok": True,
347
+ "count": 1,
348
+ "path": paths["markdown_path"],
349
+ "json_path": paths["json_path"],
350
+ "markdown_path": paths["markdown_path"],
351
+ "route": paths["route"],
352
+ "identifier": paths["identifier"],
353
+ "card": card,
354
+ }
355
+
356
+
357
+ def persist_output_envelope(
358
+ *,
359
+ envelope: Dict[str, Any],
360
+ storage_config: Optional[Dict[str, Any]],
361
+ platform: str,
362
+ fallback_identifier: str,
363
+ ) -> Dict[str, Any]:
364
+ try:
365
+ paths = resolve_storage_paths(storage_config or {})
366
+ except Exception as error:
367
+ return {"enabled": True, "ok": False, "error": f"resolve_storage_paths_failed:{error}"}
368
+
369
+ now = datetime.now()
370
+ date_key = now.strftime("%Y%m%d")
371
+ timestamp = now.strftime("%Y%m%dT%H%M%S")
372
+ identifier = _safe_text(envelope.get("normalized", {}).get("platform_work_id")) or fallback_identifier
373
+ status = "error" if envelope.get("error_reason") else "success"
374
+
375
+ target_root = Path(paths["errors_root"] if status == "error" else paths["results_root"]) / date_key
376
+ target_root.mkdir(parents=True, exist_ok=True)
377
+ file_name = render_output_filename(
378
+ pattern=resolve_json_filename_pattern(storage_config),
379
+ context={
380
+ "platform": platform,
381
+ "identifier": identifier,
382
+ "timestamp": timestamp,
383
+ "date": date_key,
384
+ "ext": ".json",
385
+ },
386
+ default_filename=f"{timestamp}-{platform}-{identifier}.json",
387
+ default_ext=".json",
388
+ )
389
+ file_path = target_root / file_name
390
+ file_path.write_text(json.dumps(envelope, ensure_ascii=False, indent=2), encoding="utf-8")
391
+ return {"enabled": True, "ok": True, "status": status, "path": str(file_path)}
@@ -1,95 +0,0 @@
1
- ---
2
- name: creator-analysis
3
- description: Use this skill for creator, account profile, and content-collection retrieval, benchmarking, breakdown, and analysis. Trigger when the user asks to analyze creator / analyze account / profile analysis / creator benchmark / creator breakdown, or 创作者分析 / 账号分析 / 主页分析 / 博主分析 / 博主对标 / 账号拆解 / 作者卡 / 主页作品汇总, and the target is a creator, account profile, channel, or content collection rather than one content item.
4
- ---
5
-
6
- # Creator Analysis
7
-
8
- ## When To Use
9
-
10
- - Use this skill when the target is a creator, account, profile page, channel, or content collection rather than a single content item.
11
- - Use this skill when the user wants a creator card, author sample cards, sampled explanations, or aggregated creator-level conclusions.
12
- - Use this skill when multiple videos under one profile should go through batch ASR first.
13
- - Use this skill when the user provides a profile URL, creator handle, account identifier, channel entry, or another creator-level entry point.
14
-
15
- ## What It Can Do
16
-
17
- - Fetch and normalize creator-side fact fields.
18
- - Fetch and normalize the full content collection under a profile.
19
- - Produce author sample cards for the retrieved items.
20
- - Run batch ASR for video items when needed.
21
- - Complete bucketing, sampling, sampled explanations, and creator-level analysis.
22
- - Return creator cards, author sample cards, sampled enhanced cards, and aggregated conclusions.
23
-
24
- ## Core Workflow Rules
25
-
26
- - Keep the task scoped to a creator, account profile, or content collection.
27
- - Prefer the platform guide first. Only go back to API discovery references when the guide is insufficient.
28
- - Keep fact cards for all retrieved works, but do not run per-work deep LLM analysis.
29
- - Prefer batch ASR for video items, with up to 100 links per batch.
30
- - Let sampled-work explanation fields come from one batch LLM step only.
31
- - Treat `author_analysis_v2` as the formal creator-level analysis object.
32
- - If `analysis_eligibility=incomplete`, keep the fact card but exclude the item from sampling, sampled explanations, and creator-level analysis.
33
-
34
- ## Shared Layer Boundaries
35
-
36
- - Shared layer owns orchestration order, status semantics, output contracts, sampled-work explanation constraints, and final card-writing rules.
37
- - Platform layer owns route strategy, collector behavior, platform-field compatibility, adapter normalization, and platform-specific cleaning rules.
38
- - Keep sampled explanations as a batch-stage artifact. Do not reintroduce per-work deep analysis in the creator path.
39
- - Treat `author`, `author_sample_work`, and sampled enhanced cards as separate output roles with explicit routing semantics.
40
-
41
- ## Platform Navigation
42
-
43
- - Start with the platform guide:
44
- - Douyin: `references/platform-guides/douyin.md`
45
- - Xiaohongshu: `references/platform-guides/xiaohongshu.md`
46
- - Other platforms: `references/platform-guides/generic.md`
47
- - Route strategy, collector behavior, and raw payload retrieval:
48
- - First stop: `scripts/author_home/collectors/homepage_collectors.py`
49
- - Platform-field compatibility and normalization:
50
- - First stop: `scripts/author_home/adapters/platform_adapters.py`
51
- - Orchestration order, stage status, degradation, persistence, and final result assembly:
52
- - First stop: `scripts/author_home/orchestrator/run_author_analysis.py`
53
- - Work-analysis artifacts, cache behavior, and structural labels:
54
- - First stop: `scripts/author_home/orchestrator/work_analysis_artifacts.py`
55
- - Sampled explanations and creator-level analysis logic:
56
- - First stop: `scripts/author_home/analyzers/`
57
- - Card writing and markdown rendering:
58
- - First stop: `scripts/writers/write_author_homepage_samples.py`
59
- - Supporting renderer: `scripts/writers/write_benchmark_card.py`
60
-
61
- ## Do Not
62
-
63
- - Do not paste sampled explanations directly into every work-card body.
64
- - Do not expose platform process fields directly in the final card body.
65
- - Do not introduce per-work LLM explanations inside the creator path.
66
- - Do not bypass the platform guide and jump straight into local helpers without understanding the route and contract expectations first.
67
-
68
- ## Workflow
69
-
70
- 1. Identify the platform and confirm that the target is a creator, account profile, channel, or content collection.
71
- 2. Read `references/contracts/creator-card-fields.md` to confirm required creator-card fields.
72
- 3. Read `references/contracts/work-card-fields.md` to confirm required work-card fields for the collected items.
73
- 4. Read the platform guide first and then the first-stop implementation file for the problem type you are solving.
74
- 5. If video items are involved, read `references/service-guides/asr-u2-u3-fallback.md` and then `references/asr-orchestration.md` to run batch ASR and fallback.
75
- 6. Read `references/api-capability-index.md`, `references/api-tags/`, and `references/api-contracts/` only when the platform guide does not provide enough route or field detail.
76
- 7. Read `references/workflow.md` to complete bucketing, sampling, sampled explanations, and `author_analysis_v2`.
77
- 8. Return the creator card, author sample cards, sampled enhanced cards, and aggregated conclusions.
78
-
79
- ## References
80
-
81
- - API capability index: `references/api-capability-index.md`
82
- - Tag-level route summaries: `references/api-tags/`
83
- - Tag-level full contracts: `references/api-contracts/`
84
- - U2/U3 ASR fallback: `references/service-guides/asr-u2-u3-fallback.md`
85
- - Creator-card fields: `references/contracts/creator-card-fields.md`
86
- - Work-card fields: `references/contracts/work-card-fields.md`
87
- - ASR orchestration: `references/asr-orchestration.md`
88
- - Creator workflow: `references/workflow.md`
89
- - Author-analysis prompt contract: `references/prompt-contracts/author-analysis-v2.md`
90
- - Sampled-explanations prompt contract: `references/prompt-contracts/sampled-work-batch-explanations.md`
91
- - Author-analysis schema: `references/schemas/author-analysis-v2.schema.json`
92
- - Sampled-explanations schema: `references/schemas/sampled-work-batch-explanations.schema.json`
93
- - Generic platform guide: `references/platform-guides/generic.md`
94
- - Douyin guide: `references/platform-guides/douyin.md`
95
- - Xiaohongshu guide: `references/platform-guides/xiaohongshu.md`
@@ -1,4 +0,0 @@
1
- interface:
2
- display_name: "Creator Analysis"
3
- short_description: "Creator, profile, and collection benchmark analysis"
4
- default_prompt: "Use $creator-analysis to analyze a creator, account profile, or content collection and return the creator card, work cards, creator benchmark breakdown, and aggregated conclusions."
@@ -1,36 +0,0 @@
1
- # [ZH] 本文件是 creator-analysis 的环境变量示例。
2
- # [EN] This file is the env example for creator-analysis.
3
- #
4
- # [ZH] 正常情况下,请先把仓库根 env.example 复制到 skills/.env。
5
- # [EN] In normal use, copy the repo-root env.example to skills/.env first.
6
- #
7
- # [ZH] 只有当 creator-analysis 需要局部覆盖时,才把下面字段复制到本目录的 .env.local。
8
- # [EN] Only copy selected keys into this folder's .env.local when creator-analysis needs local overrides.
9
-
10
- # [ZH] 输出根目录。默认值:继承 skills/.env;如需局部覆盖,必须是绝对路径。
11
- # [EN] Output root. Default: inherited from skills/.env; must be absolute when overridden locally.
12
- # TIKOMNI_OUTPUT_ROOT="/absolute/path/to/tikomni-output"
13
-
14
- # [ZH] 卡片根目录。默认值:继承 skills/.env;如需局部覆盖,必须是绝对路径。
15
- # [EN] Card root. Default: inherited from skills/.env; must be absolute when overridden locally.
16
- # TIKOMNI_CARD_ROOT="/absolute/path/to/tikomni-cards"
17
-
18
- # [ZH] 路由语言预设。默认值:zh
19
- # [EN] Route locale preset. Default: zh
20
- TIKOMNI_PATH_LOCALE="zh"
21
-
22
- # [ZH] 作者级 LLM 分析超时,单位秒。默认值:45
23
- # [EN] Timeout for creator-level LLM analysis in seconds. Default: 45
24
- TIKOMNI_AUTHOR_ANALYSIS_TIMEOUT_SEC="45"
25
-
26
- # [ZH] sampled works 少于该阈值时跳过作者级 LLM 分析。默认值:5
27
- # [EN] Skip creator-level LLM analysis when sampled works are below this threshold. Default: 5
28
- TIKOMNI_AUTHOR_ANALYSIS_SMALL_SAMPLE_SKIP="5"
29
-
30
- # [ZH] sampled works 批量解释超时,单位秒。默认值:45
31
- # [EN] Timeout for sampled-work batch explanations in seconds. Default: 45
32
- TIKOMNI_SAMPLED_EXPLANATION_TIMEOUT_SEC="45"
33
-
34
- # [ZH] 显式配置文件路径。默认值:空;留空时自动使用本模块 defaults.yaml
35
- # [EN] Explicit config file path. Default: empty; when empty the module uses its own defaults.yaml
36
- # TIKOMNI_CONFIG_FILE=""