@jackwener/opencli 1.7.22 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/README.md +30 -148
  2. package/README.zh-CN.md +37 -211
  3. package/cli-manifest.json +6423 -4260
  4. package/clis/12306/me.js +73 -0
  5. package/clis/12306/orders.js +96 -0
  6. package/clis/12306/passengers.js +90 -0
  7. package/clis/12306/price.js +166 -0
  8. package/clis/12306/stations.js +66 -0
  9. package/clis/12306/train.js +91 -0
  10. package/clis/12306/trains.js +119 -0
  11. package/clis/12306/utils.js +272 -0
  12. package/clis/12306/utils.test.js +331 -0
  13. package/clis/36kr/article.js +6 -3
  14. package/clis/36kr/article.test.js +46 -0
  15. package/clis/apple-podcasts/commands.test.js +20 -0
  16. package/clis/apple-podcasts/search.js +2 -2
  17. package/clis/barchart/greeks.js +144 -56
  18. package/clis/barchart/greeks.test.js +138 -0
  19. package/clis/bilibili/summary.js +167 -0
  20. package/clis/bilibili/summary.test.js +210 -0
  21. package/clis/booking/booking.test.js +356 -0
  22. package/clis/booking/search.js +351 -0
  23. package/clis/chatgpt/envelope.test.js +108 -0
  24. package/clis/chatgpt/image.js +2 -2
  25. package/clis/chatgpt/image.test.js +6 -0
  26. package/clis/chatgpt/utils.js +148 -41
  27. package/clis/chatgpt/utils.test.js +92 -2
  28. package/clis/douyin/_shared/browser-fetch.js +44 -20
  29. package/clis/douyin/_shared/browser-fetch.test.js +22 -1
  30. package/clis/douyin/_shared/evaluate-result.js +16 -0
  31. package/clis/douyin/_shared/tos-upload.js +105 -69
  32. package/clis/douyin/_shared/vod-upload.js +212 -0
  33. package/clis/douyin/_shared/vod-upload.test.js +38 -0
  34. package/clis/douyin/delete.js +137 -4
  35. package/clis/douyin/delete.test.js +90 -1
  36. package/clis/douyin/publish-upload-id.test.js +170 -0
  37. package/clis/douyin/publish.js +88 -42
  38. package/clis/douyin/user-videos.js +9 -2
  39. package/clis/douyin/user-videos.test.js +43 -0
  40. package/clis/flomo/memos.js +228 -0
  41. package/clis/flomo/memos.test.js +144 -0
  42. package/clis/gitee/search.js +2 -2
  43. package/clis/gitee/search.test.js +65 -0
  44. package/clis/jike/post.js +27 -17
  45. package/clis/jike/read.test.js +86 -0
  46. package/clis/jike/topic.js +32 -19
  47. package/clis/jike/user.js +33 -20
  48. package/clis/lesswrong/comments.js +1 -1
  49. package/clis/lesswrong/curated.js +1 -1
  50. package/clis/lesswrong/frontpage.js +1 -1
  51. package/clis/lesswrong/frontpage.test.js +37 -0
  52. package/clis/lesswrong/new.js +1 -1
  53. package/clis/lesswrong/read.js +1 -1
  54. package/clis/lesswrong/sequences.js +1 -1
  55. package/clis/lesswrong/shortform.js +1 -1
  56. package/clis/lesswrong/tag.js +1 -1
  57. package/clis/lesswrong/top-month.js +1 -1
  58. package/clis/lesswrong/top-week.js +1 -1
  59. package/clis/lesswrong/top-year.js +1 -1
  60. package/clis/lesswrong/top.js +1 -1
  61. package/clis/linkedin/connect.js +401 -0
  62. package/clis/linkedin/connect.test.js +213 -0
  63. package/clis/linkedin/inbox.js +234 -0
  64. package/clis/linkedin/inbox.test.js +152 -0
  65. package/clis/linkedin/people-search.js +262 -0
  66. package/clis/linkedin/people-search.test.js +216 -0
  67. package/clis/linkedin/safe-send.js +357 -0
  68. package/clis/linkedin/safe-send.test.js +204 -0
  69. package/clis/linkedin/salesnav-inbox.js +210 -0
  70. package/clis/linkedin/salesnav-inbox.test.js +113 -0
  71. package/clis/linkedin/salesnav-message.js +360 -0
  72. package/clis/linkedin/salesnav-message.test.js +172 -0
  73. package/clis/linkedin/salesnav-search.js +186 -0
  74. package/clis/linkedin/salesnav-search.test.js +76 -0
  75. package/clis/linkedin/salesnav-thread.js +212 -0
  76. package/clis/linkedin/salesnav-thread.test.js +79 -0
  77. package/clis/linkedin/sent-invitations.js +92 -0
  78. package/clis/linkedin/sent-invitations.test.js +62 -0
  79. package/clis/linkedin/thread-snapshot.js +214 -0
  80. package/clis/linkedin/thread-snapshot.test.js +89 -0
  81. package/clis/linkedin-learning/course.js +138 -0
  82. package/clis/linkedin-learning/course.test.js +114 -0
  83. package/clis/linkedin-learning/search.js +155 -0
  84. package/clis/linkedin-learning/search.test.js +144 -0
  85. package/clis/linkedin-learning/trending.js +133 -0
  86. package/clis/linkedin-learning/trending.test.js +123 -0
  87. package/clis/powerchina/search.js +3 -3
  88. package/clis/powerchina/search.test.js +27 -1
  89. package/clis/reddit/extract-media.test.js +149 -0
  90. package/clis/reddit/frontpage.js +47 -9
  91. package/clis/reddit/frontpage.test.js +34 -0
  92. package/clis/reddit/home.js +31 -1
  93. package/clis/reddit/home.test.js +46 -3
  94. package/clis/reddit/hot.js +32 -1
  95. package/clis/reddit/hot.test.js +15 -1
  96. package/clis/reddit/popular.js +39 -1
  97. package/clis/reddit/popular.test.js +26 -0
  98. package/clis/reddit/saved.js +1 -1
  99. package/clis/reddit/search.js +38 -1
  100. package/clis/reddit/search.test.js +26 -0
  101. package/clis/reddit/subreddit.js +52 -7
  102. package/clis/reddit/subreddit.test.js +31 -0
  103. package/clis/reddit/subscribed.js +165 -0
  104. package/clis/reddit/subscribed.test.js +168 -0
  105. package/clis/reddit/upvoted.js +1 -1
  106. package/clis/suno/commands.test.js +188 -0
  107. package/clis/suno/download.js +140 -0
  108. package/clis/suno/download.test.js +151 -0
  109. package/clis/suno/generate.js +226 -0
  110. package/clis/suno/generate.test.js +243 -0
  111. package/clis/suno/list.js +79 -0
  112. package/clis/suno/status.js +62 -0
  113. package/clis/suno/utils.js +540 -0
  114. package/clis/suno/utils.test.js +223 -0
  115. package/clis/twitter/device-follow.js +193 -0
  116. package/clis/twitter/device-follow.test.js +287 -0
  117. package/clis/twitter/download.js +443 -73
  118. package/clis/twitter/download.test.js +457 -0
  119. package/clis/twitter/list-create.js +155 -0
  120. package/clis/twitter/list-create.test.js +169 -0
  121. package/clis/twitter/list-remove.js +12 -5
  122. package/clis/twitter/list-remove.test.js +74 -0
  123. package/clis/twitter/list-tweets.js +6 -2
  124. package/clis/twitter/list-tweets.test.js +41 -1
  125. package/clis/twitter/lists.js +31 -4
  126. package/clis/twitter/lists.test.js +152 -16
  127. package/clis/twitter/search.js +6 -2
  128. package/clis/twitter/search.test.js +6 -0
  129. package/clis/twitter/shared.js +144 -0
  130. package/clis/twitter/shared.test.js +429 -1
  131. package/clis/twitter/thread.js +10 -2
  132. package/clis/twitter/thread.test.js +58 -0
  133. package/clis/twitter/timeline.js +6 -2
  134. package/clis/twitter/timeline.test.js +2 -0
  135. package/clis/twitter/tweets.js +3 -2
  136. package/clis/twitter/tweets.test.js +1 -1
  137. package/clis/weibo/delete.js +172 -0
  138. package/clis/weibo/delete.test.js +94 -0
  139. package/clis/weibo/publish.js +37 -14
  140. package/clis/weibo/publish.test.js +14 -5
  141. package/clis/weibo/user-posts.js +234 -0
  142. package/clis/weibo/user-posts.test.js +92 -0
  143. package/clis/weread/search-regression.test.js +18 -11
  144. package/clis/weread/search.js +15 -7
  145. package/clis/weread-official/book.js +135 -0
  146. package/clis/weread-official/commands.test.js +385 -0
  147. package/clis/weread-official/discover.js +107 -0
  148. package/clis/weread-official/list-apis.js +95 -0
  149. package/clis/weread-official/notes.js +171 -0
  150. package/clis/weread-official/readdata.js +158 -0
  151. package/clis/weread-official/review.js +93 -0
  152. package/clis/weread-official/search.js +106 -0
  153. package/clis/weread-official/shelf.js +97 -0
  154. package/clis/weread-official/utils.js +293 -0
  155. package/clis/weread-official/utils.test.js +242 -0
  156. package/clis/wikipedia/trending.js +7 -3
  157. package/clis/wikipedia/trending.test.js +57 -0
  158. package/clis/xianyu/chat.js +24 -109
  159. package/clis/xianyu/chat.test.js +5 -0
  160. package/clis/xianyu/im.js +322 -0
  161. package/clis/xianyu/im.test.js +253 -0
  162. package/clis/xianyu/inbox.js +96 -0
  163. package/clis/xianyu/messages.js +91 -0
  164. package/clis/xianyu/reply.js +82 -0
  165. package/clis/xiaohongshu/creator-note-detail.js +2 -1
  166. package/clis/xiaohongshu/creator-note-detail.test.js +11 -0
  167. package/clis/xiaohongshu/creator-notes-summary.js +2 -1
  168. package/clis/xiaohongshu/creator-notes-summary.test.js +7 -0
  169. package/clis/xiaohongshu/creator-notes.js +2 -1
  170. package/clis/xiaohongshu/creator-notes.test.js +12 -0
  171. package/clis/xiaohongshu/creator-stats.js +2 -1
  172. package/clis/xiaohongshu/creator-stats.test.js +24 -0
  173. package/clis/xiaohongshu/delete-note.js +260 -0
  174. package/clis/xiaohongshu/delete-note.test.js +172 -0
  175. package/clis/xiaohongshu/publish.js +48 -8
  176. package/clis/xiaohongshu/publish.test.js +65 -10
  177. package/clis/xiaohongshu/user-helpers.test.js +41 -0
  178. package/clis/xiaohongshu/user.js +27 -4
  179. package/clis/xiaoyuzhou/download.js +1 -1
  180. package/clis/xiaoyuzhou/transcript.js +1 -1
  181. package/clis/youdao/note.js +258 -0
  182. package/clis/youdao/note.test.js +99 -0
  183. package/clis/youtube/transcript.js +397 -24
  184. package/clis/youtube/transcript.test.js +196 -6
  185. package/clis/zhihu/answer-comments.js +299 -0
  186. package/clis/zhihu/answer-comments.test.js +287 -0
  187. package/clis/zhihu/answer-detail.js +12 -0
  188. package/clis/zhihu/answer-detail.test.js +8 -0
  189. package/clis/zhihu/collection.js +15 -2
  190. package/clis/zhihu/collection.test.js +46 -0
  191. package/clis/zhihu/download.js +1 -1
  192. package/clis/zhihu/question.js +42 -9
  193. package/clis/zhihu/question.test.js +111 -9
  194. package/clis/zhihu/search.js +206 -43
  195. package/clis/zhihu/search.test.js +198 -0
  196. package/dist/src/browser/errors.js +4 -2
  197. package/dist/src/browser/errors.test.js +6 -0
  198. package/dist/src/browser/page.js +30 -4
  199. package/dist/src/browser/page.test.js +42 -0
  200. package/dist/src/browser/utils.d.ts +1 -1
  201. package/dist/src/cli-argv-preprocess.d.ts +26 -0
  202. package/dist/src/cli-argv-preprocess.js +138 -0
  203. package/dist/src/cli-argv-preprocess.test.js +79 -0
  204. package/dist/src/convention-audit.js +15 -8
  205. package/dist/src/convention-audit.test.js +21 -0
  206. package/dist/src/download/media-download.js +15 -2
  207. package/dist/src/download/media-download.test.d.ts +1 -0
  208. package/dist/src/download/media-download.test.js +110 -0
  209. package/dist/src/electron-apps.js +1 -1
  210. package/dist/src/electron-apps.test.js +7 -2
  211. package/dist/src/errors.d.ts +17 -0
  212. package/dist/src/errors.js +22 -0
  213. package/dist/src/external-clis.yaml +8 -0
  214. package/dist/src/main.js +14 -2
  215. package/dist/src/utils.d.ts +43 -0
  216. package/dist/src/utils.js +97 -0
  217. package/dist/src/utils.test.d.ts +1 -0
  218. package/dist/src/utils.test.js +155 -0
  219. package/package.json +8 -2
  220. package/scripts/silent-column-drop-baseline.json +0 -52
  221. package/scripts/typed-error-lint-baseline.json +28 -380
  222. package/clis/slock/_utils.js +0 -12
@@ -139,7 +139,7 @@
139
139
  "rule": "silent-clamp",
140
140
  "command": "douyin/user-videos",
141
141
  "file": "clis/douyin/user-videos.js",
142
- "line": 16,
142
+ "line": 17,
143
143
  "text": "return Math.min(DEFAULT_COMMENT_LIMIT, Math.max(1, Math.round(numeric)));",
144
144
  "occurrence": 0
145
145
  },
@@ -147,7 +147,7 @@
147
147
  "rule": "silent-clamp",
148
148
  "command": "douyin/user-videos",
149
149
  "file": "clis/douyin/user-videos.js",
150
- "line": 10,
150
+ "line": 11,
151
151
  "text": "return Math.min(MAX_USER_VIDEOS_LIMIT, Math.max(1, Math.round(numeric)));",
152
152
  "occurrence": 0
153
153
  },
@@ -411,7 +411,7 @@
411
411
  "rule": "silent-clamp",
412
412
  "command": "linkedin/search",
413
413
  "file": "clis/linkedin/search.js",
414
- "line": 249,
414
+ "line": 256,
415
415
  "text": "const count = Math.min(MAX_BATCH, input.limit - allJobs.length);",
416
416
  "occurrence": 0
417
417
  },
@@ -483,7 +483,7 @@
483
483
  "rule": "silent-clamp",
484
484
  "command": "reddit/read",
485
485
  "file": "clis/reddit/read.js",
486
- "line": 157,
486
+ "line": 479,
487
487
  "text": "for (var i = 0; i < Math.min(t1TopLevel.length, limit); i++) {",
488
488
  "occurrence": 0
489
489
  },
@@ -619,7 +619,7 @@
619
619
  "rule": "silent-clamp",
620
620
  "command": "twitter/bookmark-folder",
621
621
  "file": "clis/twitter/bookmark-folder.js",
622
- "line": 161,
622
+ "line": 164,
623
623
  "text": "const fetchCount = Math.min(100, limit - allTweets.length + 10);",
624
624
  "occurrence": 0
625
625
  },
@@ -627,7 +627,7 @@
627
627
  "rule": "silent-clamp",
628
628
  "command": "twitter/bookmarks",
629
629
  "file": "clis/twitter/bookmarks.js",
630
- "line": 156,
630
+ "line": 157,
631
631
  "text": "const fetchCount = Math.min(100, limit - allTweets.length + 10);",
632
632
  "occurrence": 0
633
633
  },
@@ -635,7 +635,7 @@
635
635
  "rule": "silent-clamp",
636
636
  "command": "twitter/following",
637
637
  "file": "clis/twitter/following.js",
638
- "line": 215,
638
+ "line": 227,
639
639
  "text": "const fetchCount = Math.min(50, limit - allUsers.length + 10);",
640
640
  "occurrence": 0
641
641
  },
@@ -643,7 +643,7 @@
643
643
  "rule": "silent-clamp",
644
644
  "command": "twitter/likes",
645
645
  "file": "clis/twitter/likes.js",
646
- "line": 195,
646
+ "line": 207,
647
647
  "text": "const fetchCount = Math.min(100, limit - allTweets.length + 10);",
648
648
  "occurrence": 0
649
649
  },
@@ -651,7 +651,7 @@
651
651
  "rule": "silent-clamp",
652
652
  "command": "twitter/list-tweets",
653
653
  "file": "clis/twitter/list-tweets.js",
654
- "line": 168,
654
+ "line": 176,
655
655
  "text": "const fetchCount = Math.min(100, limit - allTweets.length + 10);",
656
656
  "occurrence": 0
657
657
  },
@@ -659,7 +659,7 @@
659
659
  "rule": "silent-clamp",
660
660
  "command": "twitter/timeline",
661
661
  "file": "clis/twitter/timeline.js",
662
- "line": 182,
662
+ "line": 183,
663
663
  "text": "const fetchCount = Math.min(40, limit - allTweets.length + 5); // over-fetch slightly for promoted filtering",
664
664
  "occurrence": 0
665
665
  },
@@ -667,7 +667,7 @@
667
667
  "rule": "silent-clamp",
668
668
  "command": "twitter/tweets",
669
669
  "file": "clis/twitter/tweets.js",
670
- "line": 194,
670
+ "line": 287,
671
671
  "text": "const fetchCount = Math.min(100, limit - all.length + 10);",
672
672
  "occurrence": 0
673
673
  },
@@ -675,7 +675,7 @@
675
675
  "rule": "silent-clamp",
676
676
  "command": "twitter/tweets",
677
677
  "file": "clis/twitter/tweets.js",
678
- "line": 159,
678
+ "line": 232,
679
679
  "text": "const limit = Math.max(1, Math.min(200, kwargs.limit || 20));",
680
680
  "occurrence": 0
681
681
  },
@@ -683,7 +683,7 @@
683
683
  "rule": "silent-clamp",
684
684
  "command": "weibo/comments",
685
685
  "file": "clis/weibo/comments.js",
686
- "line": 18,
686
+ "line": 19,
687
687
  "text": "const count = Math.min(kwargs.limit || 20, 50);",
688
688
  "occurrence": 0
689
689
  },
@@ -699,7 +699,7 @@
699
699
  "rule": "silent-clamp",
700
700
  "command": "weibo/hot",
701
701
  "file": "clis/weibo/hot.js",
702
- "line": 17,
702
+ "line": 18,
703
703
  "text": "const count = Math.min(kwargs.limit || 30, 50);",
704
704
  "occurrence": 0
705
705
  },
@@ -707,7 +707,7 @@
707
707
  "rule": "silent-clamp",
708
708
  "command": "weibo/search",
709
709
  "file": "clis/weibo/search.js",
710
- "line": 20,
710
+ "line": 21,
711
711
  "text": "const limit = Math.max(1, Math.min(Number(kwargs.limit) || 10, 50));",
712
712
  "occurrence": 0
713
713
  },
@@ -819,7 +819,7 @@
819
819
  "rule": "silent-clamp",
820
820
  "command": "zhihu/collection",
821
821
  "file": "clis/zhihu/collection.js",
822
- "line": 141,
822
+ "line": 154,
823
823
  "text": "const currentFetchLimit = Math.min(pageLimit, requestedLimit - collected.length);",
824
824
  "occurrence": 0
825
825
  },
@@ -827,7 +827,7 @@
827
827
  "rule": "silent-clamp",
828
828
  "command": "zhihu/collection",
829
829
  "file": "clis/zhihu/collection.js",
830
- "line": 130,
830
+ "line": 143,
831
831
  "text": "const pageLimit = Math.min(requestedLimit, 20); // 知乎 API 限制每页最大 20",
832
832
  "occurrence": 0
833
833
  },
@@ -855,102 +855,6 @@
855
855
  "text": "const limit = Math.max(1, Math.min(Number(args.limit) || 10, 25));",
856
856
  "occurrence": 0
857
857
  },
858
- {
859
- "rule": "silent-empty-fallback",
860
- "command": "douyin/user-videos",
861
- "file": "clis/douyin/user-videos.js",
862
- "line": 31,
863
- "text": "return [];",
864
- "occurrence": 0
865
- },
866
- {
867
- "rule": "silent-empty-fallback",
868
- "command": "jike/post",
869
- "file": "clis/jike/post.js",
870
- "line": 50,
871
- "text": "return [];",
872
- "occurrence": 0
873
- },
874
- {
875
- "rule": "silent-empty-fallback",
876
- "command": "jike/topic",
877
- "file": "clis/jike/topic.js",
878
- "line": 38,
879
- "text": "return [];",
880
- "occurrence": 0
881
- },
882
- {
883
- "rule": "silent-empty-fallback",
884
- "command": "jike/user",
885
- "file": "clis/jike/user.js",
886
- "line": 37,
887
- "text": "return [];",
888
- "occurrence": 0
889
- },
890
- {
891
- "rule": "silent-empty-fallback",
892
- "command": "weread/search",
893
- "file": "clis/weread/search.js",
894
- "line": 97,
895
- "text": "return [];",
896
- "occurrence": 0
897
- },
898
- {
899
- "rule": "silent-sentinel",
900
- "command": "36kr/article",
901
- "file": "clis/36kr/article.js",
902
- "line": 57,
903
- "text": "{ field: 'author', value: data.author || '-' },",
904
- "occurrence": 0
905
- },
906
- {
907
- "rule": "silent-sentinel",
908
- "command": "36kr/article",
909
- "file": "clis/36kr/article.js",
910
- "line": 60,
911
- "text": "{ field: 'body', value: data.body || '-' },",
912
- "occurrence": 0
913
- },
914
- {
915
- "rule": "silent-sentinel",
916
- "command": "36kr/article",
917
- "file": "clis/36kr/article.js",
918
- "line": 58,
919
- "text": "{ field: 'date', value: data.date || '-' },",
920
- "occurrence": 0
921
- },
922
- {
923
- "rule": "silent-sentinel",
924
- "command": "51job/hot",
925
- "file": "clis/51job/hot.js",
926
- "line": 50,
927
- "text": "throw new CliError('API_ERROR', `51job hot failed: ${data.message ?? 'unknown'}`);",
928
- "occurrence": 0
929
- },
930
- {
931
- "rule": "silent-sentinel",
932
- "command": "51job/search",
933
- "file": "clis/51job/search.js",
934
- "line": 72,
935
- "text": "throw new CliError('API_ERROR', `51job search failed: ${data.message ?? 'unknown'}`);",
936
- "occurrence": 0
937
- },
938
- {
939
- "rule": "silent-sentinel",
940
- "command": "apple-podcasts/search",
941
- "file": "clis/apple-podcasts/search.js",
942
- "line": 26,
943
- "text": "episodes: p.trackCount ?? '-',",
944
- "occurrence": 0
945
- },
946
- {
947
- "rule": "silent-sentinel",
948
- "command": "apple-podcasts/search",
949
- "file": "clis/apple-podcasts/search.js",
950
- "line": 27,
951
- "text": "genre: p.primaryGenreName ?? '-',",
952
- "occurrence": 0
953
- },
954
858
  {
955
859
  "rule": "silent-sentinel",
956
860
  "command": "bilibili/download",
@@ -967,62 +871,6 @@
967
871
  "text": "const jobName = f.jobName || 'unknown';",
968
872
  "occurrence": 0
969
873
  },
970
- {
971
- "rule": "silent-sentinel",
972
- "command": "doubao-app/send",
973
- "file": "clis/doubao-app/send.js",
974
- "line": 19,
975
- "text": "throw new Error('Could not find chat input: ' + (injected?.error || 'unknown'));",
976
- "occurrence": 0
977
- },
978
- {
979
- "rule": "silent-sentinel",
980
- "command": "douyin/draft",
981
- "file": "clis/douyin/draft.js",
982
- "line": 288,
983
- "text": "throw new CommandExecutionError('未检测到抖音草稿恢复提示', `当前页面: ${lastState.href || 'unknown'}`);",
984
- "occurrence": 0
985
- },
986
- {
987
- "rule": "silent-sentinel",
988
- "command": "douyin/draft",
989
- "file": "clis/douyin/draft.js",
990
- "line": 210,
991
- "text": "throw new CommandExecutionError('等待抖音封面处理完成超时', lastPanelText || 'unknown');",
992
- "occurrence": 0
993
- },
994
- {
995
- "rule": "silent-sentinel",
996
- "command": "douyin/draft",
997
- "file": "clis/douyin/draft.js",
998
- "line": 57,
999
- "text": "throw new CommandExecutionError('等待抖音草稿编辑页超时', `当前页面: ${lastState.href || 'unknown'}`);",
1000
- "occurrence": 0
1001
- },
1002
- {
1003
- "rule": "silent-sentinel",
1004
- "command": "douyin/draft",
1005
- "file": "clis/douyin/draft.js",
1006
- "line": 262,
1007
- "text": "throw new CommandExecutionError(`点击草稿按钮失败: ${result?.reason || 'unknown'}`);",
1008
- "occurrence": 0
1009
- },
1010
- {
1011
- "rule": "silent-sentinel",
1012
- "command": "gitee/search",
1013
- "file": "clis/gitee/search.js",
1014
- "line": 127,
1015
- "text": "description: normalizeText(getFirstText(fields.description)) || '-',",
1016
- "occurrence": 0
1017
- },
1018
- {
1019
- "rule": "silent-sentinel",
1020
- "command": "gitee/search",
1021
- "file": "clis/gitee/search.js",
1022
- "line": 126,
1023
- "text": "language: normalizeText(getFirstText(fields.langs)) || '-',",
1024
- "occurrence": 0
1025
- },
1026
874
  {
1027
875
  "rule": "silent-sentinel",
1028
876
  "command": "gitee/trending",
@@ -1039,14 +887,6 @@
1039
887
  "text": "description: project.description !== '-' ? project.description : (mergedDescription || '-'),",
1040
888
  "occurrence": 0
1041
889
  },
1042
- {
1043
- "rule": "silent-sentinel",
1044
- "command": "instagram/note",
1045
- "file": "clis/instagram/note.js",
1046
- "line": 219,
1047
- "text": "throw new CommandExecutionError(`Instagram note publish failed at ${String(result?.stage || 'unknown')}: ${String(result?.text || 'unknown error')}`);",
1048
- "occurrence": 0
1049
- },
1050
890
  {
1051
891
  "rule": "silent-sentinel",
1052
892
  "command": "jimeng/history",
@@ -1063,134 +903,6 @@
1063
903
  "text": "prompt: params.prompt || item.common_attr?.title || 'N/A',",
1064
904
  "occurrence": 0
1065
905
  },
1066
- {
1067
- "rule": "silent-sentinel",
1068
- "command": "lesswrong/comments",
1069
- "file": "clis/lesswrong/comments.js",
1070
- "line": 59,
1071
- "text": "author: user?.displayName ?? 'Unknown',",
1072
- "occurrence": 0
1073
- },
1074
- {
1075
- "rule": "silent-sentinel",
1076
- "command": "lesswrong/curated",
1077
- "file": "clis/lesswrong/curated.js",
1078
- "line": 25,
1079
- "text": "author: item.user?.displayName ?? 'Unknown',",
1080
- "occurrence": 0
1081
- },
1082
- {
1083
- "rule": "silent-sentinel",
1084
- "command": "lesswrong/frontpage",
1085
- "file": "clis/lesswrong/frontpage.js",
1086
- "line": 25,
1087
- "text": "author: item.user?.displayName ?? 'Unknown',",
1088
- "occurrence": 0
1089
- },
1090
- {
1091
- "rule": "silent-sentinel",
1092
- "command": "lesswrong/new",
1093
- "file": "clis/lesswrong/new.js",
1094
- "line": 25,
1095
- "text": "author: item.user?.displayName ?? 'Unknown',",
1096
- "occurrence": 0
1097
- },
1098
- {
1099
- "rule": "silent-sentinel",
1100
- "command": "lesswrong/read",
1101
- "file": "clis/lesswrong/read.js",
1102
- "line": 37,
1103
- "text": "author: post.user?.displayName ?? 'Unknown',",
1104
- "occurrence": 0
1105
- },
1106
- {
1107
- "rule": "silent-sentinel",
1108
- "command": "lesswrong/sequences",
1109
- "file": "clis/lesswrong/sequences.js",
1110
- "line": 25,
1111
- "text": "author: item.user?.displayName ?? 'Unknown',",
1112
- "occurrence": 0
1113
- },
1114
- {
1115
- "rule": "silent-sentinel",
1116
- "command": "lesswrong/shortform",
1117
- "file": "clis/lesswrong/shortform.js",
1118
- "line": 25,
1119
- "text": "author: item.user?.displayName ?? 'Unknown',",
1120
- "occurrence": 0
1121
- },
1122
- {
1123
- "rule": "silent-sentinel",
1124
- "command": "lesswrong/tag",
1125
- "file": "clis/lesswrong/tag.js",
1126
- "line": 40,
1127
- "text": "author: item.user?.displayName ?? 'Unknown',",
1128
- "occurrence": 0
1129
- },
1130
- {
1131
- "rule": "silent-sentinel",
1132
- "command": "lesswrong/top-month",
1133
- "file": "clis/lesswrong/top-month.js",
1134
- "line": 25,
1135
- "text": "author: item.user?.displayName ?? 'Unknown',",
1136
- "occurrence": 0
1137
- },
1138
- {
1139
- "rule": "silent-sentinel",
1140
- "command": "lesswrong/top-week",
1141
- "file": "clis/lesswrong/top-week.js",
1142
- "line": 25,
1143
- "text": "author: item.user?.displayName ?? 'Unknown',",
1144
- "occurrence": 0
1145
- },
1146
- {
1147
- "rule": "silent-sentinel",
1148
- "command": "lesswrong/top-year",
1149
- "file": "clis/lesswrong/top-year.js",
1150
- "line": 25,
1151
- "text": "author: item.user?.displayName ?? 'Unknown',",
1152
- "occurrence": 0
1153
- },
1154
- {
1155
- "rule": "silent-sentinel",
1156
- "command": "lesswrong/top",
1157
- "file": "clis/lesswrong/top.js",
1158
- "line": 25,
1159
- "text": "author: item.user?.displayName ?? 'Unknown',",
1160
- "occurrence": 0
1161
- },
1162
- {
1163
- "rule": "silent-sentinel",
1164
- "command": "linux-do/topic-content",
1165
- "file": "clis/linux-do/topic-content.js",
1166
- "line": 121,
1167
- "text": "throw new CommandExecutionError(result.error || `linux.do request failed: HTTP ${result.status ?? 'unknown'}`);",
1168
- "occurrence": 0
1169
- },
1170
- {
1171
- "rule": "silent-sentinel",
1172
- "command": "powerchina/search",
1173
- "file": "clis/powerchina/search.js",
1174
- "line": 149,
1175
- "text": "throw new Error(`[taxonomy=relay_unavailable] site=powerchina command=search api code=${data.code ?? 'unknown'} msg=${cleanText(data.msg)}`);",
1176
- "occurrence": 0
1177
- },
1178
- {
1179
- "rule": "silent-sentinel",
1180
- "command": "reddit/saved",
1181
- "file": "clis/reddit/saved.js",
1182
- "line": 33,
1183
- "text": "title: c.data.title || c.data.body?.slice(0, 100) || '-',",
1184
- "occurrence": 0
1185
- },
1186
- {
1187
- "rule": "silent-sentinel",
1188
- "command": "reddit/upvoted",
1189
- "file": "clis/reddit/upvoted.js",
1190
- "line": 33,
1191
- "text": "title: c.data.title || '-',",
1192
- "occurrence": 0
1193
- },
1194
906
  {
1195
907
  "rule": "silent-sentinel",
1196
908
  "command": "twitter/accept",
@@ -1211,7 +923,7 @@
1211
923
  "rule": "silent-sentinel",
1212
924
  "command": "twitter/article",
1213
925
  "file": "clis/twitter/article.js",
1214
- "line": 105,
926
+ "line": 109,
1215
927
  "text": "const screenName = user?.legacy?.screen_name || user?.core?.screen_name || 'unknown';",
1216
928
  "occurrence": 0
1217
929
  },
@@ -1219,7 +931,7 @@
1219
931
  "rule": "silent-sentinel",
1220
932
  "command": "twitter/bookmarks",
1221
933
  "file": "clis/twitter/bookmarks.js",
1222
- "line": 53,
934
+ "line": 55,
1223
935
  "text": "const screenName = user?.legacy?.screen_name || user?.core?.screen_name || 'unknown';",
1224
936
  "occurrence": 0
1225
937
  },
@@ -1227,7 +939,7 @@
1227
939
  "rule": "silent-sentinel",
1228
940
  "command": "twitter/following",
1229
941
  "file": "clis/twitter/following.js",
1230
- "line": 94,
942
+ "line": 95,
1231
943
  "text": "name: core.name || legacy.name || 'unknown',",
1232
944
  "occurrence": 0
1233
945
  },
@@ -1235,7 +947,7 @@
1235
947
  "rule": "silent-sentinel",
1236
948
  "command": "twitter/following",
1237
949
  "file": "clis/twitter/following.js",
1238
- "line": 93,
950
+ "line": 94,
1239
951
  "text": "screen_name: core.screen_name || legacy.screen_name || 'unknown',",
1240
952
  "occurrence": 0
1241
953
  },
@@ -1243,7 +955,7 @@
1243
955
  "rule": "silent-sentinel",
1244
956
  "command": "twitter/likes",
1245
957
  "file": "clis/twitter/likes.js",
1246
- "line": 90,
958
+ "line": 91,
1247
959
  "text": "const screenName = user?.legacy?.screen_name || user?.core?.screen_name || 'unknown';",
1248
960
  "occurrence": 0
1249
961
  },
@@ -1251,7 +963,7 @@
1251
963
  "rule": "silent-sentinel",
1252
964
  "command": "twitter/list-tweets",
1253
965
  "file": "clis/twitter/list-tweets.js",
1254
- "line": 60,
966
+ "line": 62,
1255
967
  "text": "const screenName = user?.legacy?.screen_name || user?.core?.screen_name || 'unknown';",
1256
968
  "occurrence": 0
1257
969
  },
@@ -1291,7 +1003,7 @@
1291
1003
  "rule": "silent-sentinel",
1292
1004
  "command": "twitter/search",
1293
1005
  "file": "clis/twitter/search.js",
1294
- "line": 296,
1006
+ "line": 217,
1295
1007
  "text": "author: tweetUser?.core?.screen_name || tweetUser?.legacy?.screen_name || 'unknown',",
1296
1008
  "occurrence": 0
1297
1009
  },
@@ -1307,7 +1019,7 @@
1307
1019
  "rule": "silent-sentinel",
1308
1020
  "command": "twitter/timeline",
1309
1021
  "file": "clis/twitter/timeline.js",
1310
- "line": 75,
1022
+ "line": 76,
1311
1023
  "text": "const screenName = u?.legacy?.screen_name || u?.core?.screen_name || 'unknown';",
1312
1024
  "occurrence": 0
1313
1025
  },
@@ -1315,7 +1027,7 @@
1315
1027
  "rule": "silent-sentinel",
1316
1028
  "command": "twitter/tweets",
1317
1029
  "file": "clis/twitter/tweets.js",
1318
- "line": 92,
1030
+ "line": 161,
1319
1031
  "text": "const screenName = user?.legacy?.screen_name || user?.core?.screen_name || 'unknown';",
1320
1032
  "occurrence": 0
1321
1033
  },
@@ -1371,7 +1083,7 @@
1371
1083
  "rule": "silent-sentinel",
1372
1084
  "command": "weibo/comments",
1373
1085
  "file": "clis/weibo/comments.js",
1374
- "line": 32,
1086
+ "line": 33,
1375
1087
  "text": "if (!data.ok) return {error: 'API error: ' + (data.msg || 'unknown')};",
1376
1088
  "occurrence": 0
1377
1089
  },
@@ -1383,54 +1095,14 @@
1383
1095
  "text": "if (!data.ok) return { error: 'API error: ' + (data.msg || 'unknown') };",
1384
1096
  "occurrence": 0
1385
1097
  },
1386
- {
1387
- "rule": "silent-sentinel",
1388
- "command": "wikipedia/trending",
1389
- "file": "clis/wikipedia/trending.js",
1390
- "line": 32,
1391
- "text": "description: (a.description ?? '-').slice(0, DESC_MAX_LEN),",
1392
- "occurrence": 0
1393
- },
1394
- {
1395
- "rule": "silent-sentinel",
1396
- "command": "wikipedia/trending",
1397
- "file": "clis/wikipedia/trending.js",
1398
- "line": 31,
1399
- "text": "title: a.title ?? '-',",
1400
- "occurrence": 0
1401
- },
1402
1098
  {
1403
1099
  "rule": "silent-sentinel",
1404
1100
  "command": "xiaohongshu/download",
1405
1101
  "file": "clis/xiaohongshu/download.js",
1406
- "line": 65,
1102
+ "line": 53,
1407
1103
  "text": "result.author = authorEl?.textContent?.trim() || 'unknown';",
1408
1104
  "occurrence": 0
1409
1105
  },
1410
- {
1411
- "rule": "silent-sentinel",
1412
- "command": "xiaohongshu/publish",
1413
- "file": "clis/xiaohongshu/publish.js",
1414
- "line": 529,
1415
- "text": "throw new Error(`Image injection failed: ${upload.error ?? 'unknown'}. ` +",
1416
- "occurrence": 0
1417
- },
1418
- {
1419
- "rule": "silent-sentinel",
1420
- "command": "xiaoyuzhou/download",
1421
- "file": "clis/xiaoyuzhou/download.js",
1422
- "line": 48,
1423
- "text": "podcast: ep.podcast?.title || '-',",
1424
- "occurrence": 0
1425
- },
1426
- {
1427
- "rule": "silent-sentinel",
1428
- "command": "xiaoyuzhou/transcript",
1429
- "file": "clis/xiaoyuzhou/transcript.js",
1430
- "line": 70,
1431
- "text": "podcast: episode.podcast?.title || '-',",
1432
- "occurrence": 0
1433
- },
1434
1106
  {
1435
1107
  "rule": "silent-sentinel",
1436
1108
  "command": "yollomi/edit",
@@ -1479,30 +1151,6 @@
1479
1151
  "text": "return [{ status: 'saved', file: path.relative('.', fp), size: fmtBytes(size), credits: credits ?? '-', url: videoUrl }];",
1480
1152
  "occurrence": 0
1481
1153
  },
1482
- {
1483
- "rule": "silent-sentinel",
1484
- "command": "zhihu/collection",
1485
- "file": "clis/zhihu/collection.js",
1486
- "line": 64,
1487
- "text": "const type = content.type || 'unknown';",
1488
- "occurrence": 0
1489
- },
1490
- {
1491
- "rule": "silent-sentinel",
1492
- "command": "zhihu/collection",
1493
- "file": "clis/zhihu/collection.js",
1494
- "line": 59,
1495
- "text": "return `${content.type || 'unknown'}:${content.id || content.url || JSON.stringify(content).slice(0, 80)}`;",
1496
- "occurrence": 0
1497
- },
1498
- {
1499
- "rule": "silent-sentinel",
1500
- "command": "zhihu/download",
1501
- "file": "clis/zhihu/download.js",
1502
- "line": 44,
1503
- "text": "result.author = authorEl?.textContent?.trim() || 'unknown';",
1504
- "occurrence": 0
1505
- },
1506
1154
  {
1507
1155
  "rule": "silent-sentinel",
1508
1156
  "command": "zsxq/dynamics",
@@ -1,12 +0,0 @@
1
- // Shared helper: returns { token, serverId } for the given server slug
2
- // Usage: await page.evaluate(`(${slockContext})(${JSON.stringify(slug)})`)
3
- export const slockContext = `async (slug) => {
4
- const token = localStorage.getItem('slock_access_token');
5
- const lastSlug = slug || localStorage.getItem('slock_last_server_slug');
6
- const r = await fetch('https://api.slock.ai/api/servers', {
7
- headers: { 'Authorization': 'Bearer ' + token }
8
- });
9
- const servers = await r.json();
10
- const server = servers.find(s => s.slug === lastSlug) || servers[0];
11
- return { token, serverId: server?.id, slug: server?.slug };
12
- }`;