@jackwener/opencli 1.0.1 → 1.0.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 (253) hide show
  1. package/.github/workflows/build-extension.yml +80 -0
  2. package/.github/workflows/ci.yml +6 -6
  3. package/.github/workflows/docs.yml +52 -0
  4. package/.github/workflows/e2e-headed.yml +2 -2
  5. package/.github/workflows/pkg-pr-new.yml +2 -2
  6. package/.github/workflows/release.yml +2 -5
  7. package/.github/workflows/security.yml +2 -2
  8. package/CDP.md +1 -1
  9. package/CDP.zh-CN.md +1 -1
  10. package/README.md +42 -34
  11. package/README.zh-CN.md +42 -34
  12. package/SKILL.md +3 -5
  13. package/dist/browser/cdp.d.ts +42 -0
  14. package/dist/browser/cdp.js +339 -0
  15. package/dist/browser/daemon-client.d.ts +3 -1
  16. package/dist/browser/daemon-client.js +4 -0
  17. package/dist/browser/dom-helpers.d.ts +20 -0
  18. package/dist/browser/dom-helpers.js +109 -0
  19. package/dist/browser/index.d.ts +3 -0
  20. package/dist/browser/index.js +4 -0
  21. package/dist/browser/mcp.d.ts +1 -0
  22. package/dist/browser/mcp.js +10 -5
  23. package/dist/browser/page.d.ts +7 -0
  24. package/dist/browser/page.js +39 -123
  25. package/dist/browser/utils.d.ts +10 -0
  26. package/dist/browser/utils.js +27 -0
  27. package/dist/browser.test.js +49 -1
  28. package/dist/build-manifest.js +3 -1
  29. package/dist/build-manifest.test.js +34 -0
  30. package/dist/capabilityRouting.d.ts +2 -0
  31. package/dist/capabilityRouting.js +30 -0
  32. package/dist/capabilityRouting.test.d.ts +1 -0
  33. package/dist/capabilityRouting.test.js +42 -0
  34. package/dist/chaoxing.d.ts +58 -0
  35. package/dist/chaoxing.js +225 -0
  36. package/dist/chaoxing.test.d.ts +1 -0
  37. package/dist/chaoxing.test.js +45 -0
  38. package/dist/cli-manifest.json +885 -48
  39. package/dist/cli.d.ts +1 -0
  40. package/dist/cli.js +234 -0
  41. package/dist/clis/antigravity/serve.d.ts +14 -0
  42. package/dist/clis/antigravity/serve.js +263 -0
  43. package/dist/clis/bilibili/download.js +4 -14
  44. package/dist/clis/boss/chatlist.d.ts +1 -0
  45. package/dist/clis/boss/chatlist.js +50 -0
  46. package/dist/clis/boss/chatmsg.d.ts +1 -0
  47. package/dist/clis/boss/chatmsg.js +73 -0
  48. package/dist/clis/boss/resume.d.ts +1 -0
  49. package/dist/clis/boss/resume.js +249 -0
  50. package/dist/clis/boss/send.d.ts +1 -0
  51. package/dist/clis/boss/send.js +176 -0
  52. package/dist/clis/chaoxing/assignments.d.ts +1 -0
  53. package/dist/clis/chaoxing/assignments.js +74 -0
  54. package/dist/clis/chaoxing/exams.d.ts +1 -0
  55. package/dist/clis/chaoxing/exams.js +74 -0
  56. package/dist/clis/chatgpt/ask.js +15 -14
  57. package/dist/clis/chatgpt/ax.d.ts +1 -0
  58. package/dist/clis/chatgpt/ax.js +78 -0
  59. package/dist/clis/chatgpt/read.js +5 -6
  60. package/dist/clis/hf/top.d.ts +1 -0
  61. package/dist/clis/hf/top.js +119 -0
  62. package/dist/clis/jike/comment.d.ts +1 -0
  63. package/dist/clis/jike/comment.js +107 -0
  64. package/dist/clis/jike/create.d.ts +1 -0
  65. package/dist/clis/jike/create.js +106 -0
  66. package/dist/clis/jike/feed.d.ts +1 -0
  67. package/dist/clis/jike/feed.js +67 -0
  68. package/dist/clis/jike/like.d.ts +1 -0
  69. package/dist/clis/jike/like.js +61 -0
  70. package/dist/clis/jike/notifications.d.ts +1 -0
  71. package/dist/clis/jike/notifications.js +169 -0
  72. package/dist/clis/jike/post.yaml +58 -0
  73. package/dist/clis/jike/repost.d.ts +1 -0
  74. package/dist/clis/jike/repost.js +103 -0
  75. package/dist/clis/jike/search.d.ts +1 -0
  76. package/dist/clis/jike/search.js +67 -0
  77. package/dist/clis/jike/shared.d.ts +19 -0
  78. package/dist/clis/jike/shared.js +25 -0
  79. package/dist/clis/jike/topic.yaml +52 -0
  80. package/dist/clis/jike/user.yaml +51 -0
  81. package/dist/clis/smzdm/search.js +28 -39
  82. package/dist/clis/stackoverflow/bounties.yaml +29 -0
  83. package/dist/clis/stackoverflow/hot.yaml +28 -0
  84. package/dist/clis/stackoverflow/search.yaml +32 -0
  85. package/dist/clis/stackoverflow/unanswered.yaml +28 -0
  86. package/dist/clis/twitter/download.js +6 -16
  87. package/dist/clis/twitter/post.js +9 -2
  88. package/dist/clis/twitter/search.js +14 -33
  89. package/dist/clis/xiaohongshu/download.d.ts +1 -1
  90. package/dist/clis/xiaohongshu/download.js +4 -4
  91. package/dist/clis/zhihu/download.js +3 -3
  92. package/dist/doctor.d.ts +7 -0
  93. package/dist/doctor.js +16 -0
  94. package/dist/download/index.d.ts +12 -8
  95. package/dist/download/index.js +11 -3
  96. package/dist/download/index.test.d.ts +1 -0
  97. package/dist/download/index.test.js +14 -0
  98. package/dist/engine.js +25 -14
  99. package/dist/explore.d.ts +1 -0
  100. package/dist/explore.js +48 -103
  101. package/dist/generate.js +1 -0
  102. package/dist/interceptor.js +3 -2
  103. package/dist/main.js +4 -193
  104. package/dist/output.d.ts +2 -1
  105. package/dist/output.js +3 -1
  106. package/dist/pipeline/executor.test.js +1 -0
  107. package/dist/pipeline/steps/download.js +14 -18
  108. package/dist/registry.d.ts +4 -3
  109. package/dist/registry.js +5 -2
  110. package/dist/runtime.d.ts +4 -1
  111. package/dist/runtime.js +2 -2
  112. package/dist/scripts/framework.d.ts +4 -0
  113. package/dist/scripts/framework.js +21 -0
  114. package/dist/scripts/interact.d.ts +4 -0
  115. package/dist/scripts/interact.js +20 -0
  116. package/dist/scripts/store.d.ts +9 -0
  117. package/dist/scripts/store.js +44 -0
  118. package/dist/synthesize.js +1 -1
  119. package/dist/types.d.ts +12 -0
  120. package/dist/verify.d.ts +6 -1
  121. package/dist/verify.js +54 -2
  122. package/docs/.vitepress/config.mts +193 -0
  123. package/docs/adapters/browser/apple-podcasts.md +28 -0
  124. package/docs/adapters/browser/bbc.md +26 -0
  125. package/docs/adapters/browser/bilibili.md +38 -0
  126. package/docs/adapters/browser/boss.md +28 -0
  127. package/docs/adapters/browser/coupang.md +28 -0
  128. package/docs/adapters/browser/ctrip.md +27 -0
  129. package/docs/adapters/browser/github.md +26 -0
  130. package/docs/adapters/browser/hackernews.md +26 -0
  131. package/docs/adapters/browser/linkedin.md +27 -0
  132. package/docs/adapters/browser/reddit.md +41 -0
  133. package/docs/adapters/browser/reuters.md +27 -0
  134. package/docs/adapters/browser/smzdm.md +27 -0
  135. package/docs/adapters/browser/twitter.md +47 -0
  136. package/docs/adapters/browser/v2ex.md +32 -0
  137. package/docs/adapters/browser/weibo.md +27 -0
  138. package/docs/adapters/browser/xiaohongshu.md +32 -0
  139. package/docs/adapters/browser/xiaoyuzhou.md +28 -0
  140. package/docs/adapters/browser/xueqiu.md +32 -0
  141. package/docs/adapters/browser/yahoo-finance.md +26 -0
  142. package/docs/adapters/browser/youtube.md +29 -0
  143. package/docs/adapters/browser/zhihu.md +30 -0
  144. package/docs/adapters/desktop/antigravity.md +46 -0
  145. package/docs/adapters/desktop/chatgpt.md +43 -0
  146. package/docs/adapters/desktop/chatwise.md +38 -0
  147. package/docs/adapters/desktop/codex.md +32 -0
  148. package/docs/adapters/desktop/cursor.md +33 -0
  149. package/docs/adapters/desktop/discord.md +28 -0
  150. package/docs/adapters/desktop/feishu.md +20 -0
  151. package/docs/adapters/desktop/neteasemusic.md +31 -0
  152. package/docs/adapters/desktop/notion.md +29 -0
  153. package/docs/adapters/desktop/wechat.md +28 -0
  154. package/docs/adapters/index.md +49 -0
  155. package/docs/advanced/cdp.md +103 -0
  156. package/docs/advanced/download.md +63 -0
  157. package/docs/advanced/electron.md +125 -0
  158. package/docs/advanced/remote-chrome.md +72 -0
  159. package/docs/developer/ai-workflow.md +66 -0
  160. package/docs/developer/architecture.md +90 -0
  161. package/docs/developer/contributing.md +136 -0
  162. package/docs/developer/testing.md +237 -0
  163. package/docs/developer/ts-adapter.md +87 -0
  164. package/docs/developer/yaml-adapter.md +108 -0
  165. package/docs/guide/browser-bridge.md +38 -0
  166. package/docs/guide/getting-started.md +56 -0
  167. package/docs/guide/installation.md +37 -0
  168. package/docs/guide/troubleshooting.md +56 -0
  169. package/docs/index.md +35 -0
  170. package/docs/zh/adapters/index.md +5 -0
  171. package/docs/zh/advanced/cdp.md +3 -0
  172. package/docs/zh/developer/contributing.md +24 -0
  173. package/docs/zh/guide/browser-bridge.md +25 -0
  174. package/docs/zh/guide/getting-started.md +40 -0
  175. package/docs/zh/guide/installation.md +37 -0
  176. package/docs/zh/index.md +29 -0
  177. package/extension/dist/background.js +386 -438
  178. package/extension/manifest.json +2 -2
  179. package/extension/package-lock.json +1156 -0
  180. package/extension/src/background.test.ts +151 -0
  181. package/extension/src/background.ts +124 -53
  182. package/extension/src/protocol.ts +3 -1
  183. package/package.json +7 -3
  184. package/src/browser/cdp.ts +367 -0
  185. package/src/browser/daemon-client.ts +7 -1
  186. package/src/browser/dom-helpers.ts +116 -0
  187. package/src/browser/index.ts +4 -0
  188. package/src/browser/mcp.ts +14 -6
  189. package/src/browser/page.ts +47 -124
  190. package/src/browser/utils.ts +27 -0
  191. package/src/browser.test.ts +56 -0
  192. package/src/build-manifest.test.ts +36 -0
  193. package/src/build-manifest.ts +2 -1
  194. package/src/capabilityRouting.test.ts +47 -0
  195. package/src/capabilityRouting.ts +28 -0
  196. package/src/chaoxing.test.ts +53 -0
  197. package/src/chaoxing.ts +268 -0
  198. package/src/cli.ts +205 -0
  199. package/src/clis/antigravity/SKILL.md +5 -0
  200. package/src/clis/antigravity/serve.ts +329 -0
  201. package/src/clis/bilibili/download.ts +4 -15
  202. package/src/clis/boss/chatlist.ts +50 -0
  203. package/src/clis/boss/chatmsg.ts +70 -0
  204. package/src/clis/boss/resume.ts +262 -0
  205. package/src/clis/boss/send.ts +193 -0
  206. package/src/clis/chaoxing/README.md +36 -0
  207. package/src/clis/chaoxing/README.zh-CN.md +35 -0
  208. package/src/clis/chaoxing/assignments.ts +88 -0
  209. package/src/clis/chaoxing/exams.ts +88 -0
  210. package/src/clis/chatgpt/ask.ts +14 -15
  211. package/src/clis/chatgpt/ax.ts +81 -0
  212. package/src/clis/chatgpt/read.ts +5 -7
  213. package/src/clis/hf/top.ts +141 -0
  214. package/src/clis/jike/comment.ts +113 -0
  215. package/src/clis/jike/create.ts +113 -0
  216. package/src/clis/jike/feed.ts +74 -0
  217. package/src/clis/jike/like.ts +65 -0
  218. package/src/clis/jike/notifications.ts +185 -0
  219. package/src/clis/jike/post.yaml +58 -0
  220. package/src/clis/jike/repost.ts +114 -0
  221. package/src/clis/jike/search.ts +74 -0
  222. package/src/clis/jike/shared.ts +36 -0
  223. package/src/clis/jike/topic.yaml +52 -0
  224. package/src/clis/jike/user.yaml +51 -0
  225. package/src/clis/smzdm/search.ts +30 -39
  226. package/src/clis/stackoverflow/bounties.yaml +29 -0
  227. package/src/clis/stackoverflow/hot.yaml +28 -0
  228. package/src/clis/stackoverflow/search.yaml +32 -0
  229. package/src/clis/stackoverflow/unanswered.yaml +28 -0
  230. package/src/clis/twitter/download.ts +6 -17
  231. package/src/clis/twitter/post.ts +9 -2
  232. package/src/clis/twitter/search.ts +15 -33
  233. package/src/clis/xiaohongshu/download.ts +4 -4
  234. package/src/clis/zhihu/download.ts +3 -3
  235. package/src/doctor.ts +18 -2
  236. package/src/download/index.test.ts +16 -0
  237. package/src/download/index.ts +22 -4
  238. package/src/engine.ts +20 -13
  239. package/src/explore.ts +54 -103
  240. package/src/generate.ts +1 -0
  241. package/src/interceptor.ts +3 -2
  242. package/src/main.ts +4 -180
  243. package/src/output.ts +15 -13
  244. package/src/pipeline/executor.test.ts +1 -0
  245. package/src/pipeline/steps/download.ts +14 -17
  246. package/src/registry.ts +9 -5
  247. package/src/runtime.ts +3 -2
  248. package/src/scripts/framework.ts +20 -0
  249. package/src/scripts/interact.ts +22 -0
  250. package/src/scripts/store.ts +40 -0
  251. package/src/synthesize.ts +1 -1
  252. package/src/types.ts +9 -0
  253. package/src/verify.ts +64 -3
@@ -109,6 +109,16 @@
109
109
  "Message"
110
110
  ]
111
111
  },
112
+ {
113
+ "site": "antigravity",
114
+ "name": "serve",
115
+ "description": "",
116
+ "strategy": "cookie",
117
+ "browser": true,
118
+ "args": [],
119
+ "type": "ts",
120
+ "modulePath": "antigravity/serve.js"
121
+ },
112
122
  {
113
123
  "site": "antigravity",
114
124
  "name": "status",
@@ -427,7 +437,7 @@
427
437
  "name": "news",
428
438
  "description": "BBC News headlines (RSS)",
429
439
  "strategy": "public",
430
- "browser": true,
440
+ "browser": false,
431
441
  "args": [
432
442
  {
433
443
  "name": "limit",
@@ -853,6 +863,78 @@
853
863
  "url"
854
864
  ]
855
865
  },
866
+ {
867
+ "site": "boss",
868
+ "name": "chatlist",
869
+ "description": "BOSS直聘查看聊天列表(招聘端)",
870
+ "strategy": "cookie",
871
+ "browser": true,
872
+ "args": [
873
+ {
874
+ "name": "page",
875
+ "type": "int",
876
+ "default": 1,
877
+ "required": false,
878
+ "help": "Page number"
879
+ },
880
+ {
881
+ "name": "limit",
882
+ "type": "int",
883
+ "default": 20,
884
+ "required": false,
885
+ "help": "Number of results"
886
+ },
887
+ {
888
+ "name": "job_id",
889
+ "type": "str",
890
+ "default": "0",
891
+ "required": false,
892
+ "help": "Filter by job ID (0=all)"
893
+ }
894
+ ],
895
+ "type": "ts",
896
+ "modulePath": "boss/chatlist.js",
897
+ "domain": "www.zhipin.com",
898
+ "columns": [
899
+ "name",
900
+ "job",
901
+ "last_msg",
902
+ "last_time",
903
+ "uid",
904
+ "security_id"
905
+ ]
906
+ },
907
+ {
908
+ "site": "boss",
909
+ "name": "chatmsg",
910
+ "description": "BOSS直聘查看与候选人的聊天消息",
911
+ "strategy": "cookie",
912
+ "browser": true,
913
+ "args": [
914
+ {
915
+ "name": "uid",
916
+ "type": "str",
917
+ "required": true,
918
+ "help": "Encrypted UID (from chatlist)"
919
+ },
920
+ {
921
+ "name": "page",
922
+ "type": "int",
923
+ "default": 1,
924
+ "required": false,
925
+ "help": "Page number"
926
+ }
927
+ ],
928
+ "type": "ts",
929
+ "modulePath": "boss/chatmsg.js",
930
+ "domain": "www.zhipin.com",
931
+ "columns": [
932
+ "from",
933
+ "type",
934
+ "text",
935
+ "time"
936
+ ]
937
+ },
856
938
  {
857
939
  "site": "boss",
858
940
  "name": "detail",
@@ -891,6 +973,36 @@
891
973
  "url"
892
974
  ]
893
975
  },
976
+ {
977
+ "site": "boss",
978
+ "name": "resume",
979
+ "description": "BOSS直聘查看候选人简历(招聘端)",
980
+ "strategy": "cookie",
981
+ "browser": true,
982
+ "args": [
983
+ {
984
+ "name": "uid",
985
+ "type": "str",
986
+ "required": true,
987
+ "help": "Encrypted UID of the candidate (from chatlist)"
988
+ }
989
+ ],
990
+ "type": "ts",
991
+ "modulePath": "boss/resume.js",
992
+ "domain": "www.zhipin.com",
993
+ "columns": [
994
+ "name",
995
+ "gender",
996
+ "age",
997
+ "experience",
998
+ "degree",
999
+ "active_time",
1000
+ "work_history",
1001
+ "education",
1002
+ "job_chatting",
1003
+ "expect"
1004
+ ]
1005
+ },
894
1006
  {
895
1007
  "site": "boss",
896
1008
  "name": "search",
@@ -970,6 +1082,127 @@
970
1082
  "url"
971
1083
  ]
972
1084
  },
1085
+ {
1086
+ "site": "boss",
1087
+ "name": "send",
1088
+ "description": "BOSS直聘发送聊天消息",
1089
+ "strategy": "cookie",
1090
+ "browser": true,
1091
+ "args": [
1092
+ {
1093
+ "name": "uid",
1094
+ "type": "str",
1095
+ "required": true,
1096
+ "help": "Encrypted UID of the candidate (from chatlist)"
1097
+ },
1098
+ {
1099
+ "name": "text",
1100
+ "type": "str",
1101
+ "required": true,
1102
+ "help": "Message text to send"
1103
+ }
1104
+ ],
1105
+ "type": "ts",
1106
+ "modulePath": "boss/send.js",
1107
+ "domain": "www.zhipin.com",
1108
+ "columns": [
1109
+ "status",
1110
+ "detail"
1111
+ ]
1112
+ },
1113
+ {
1114
+ "site": "chaoxing",
1115
+ "name": "assignments",
1116
+ "description": "学习通作业列表",
1117
+ "strategy": "cookie",
1118
+ "browser": true,
1119
+ "args": [
1120
+ {
1121
+ "name": "course",
1122
+ "type": "string",
1123
+ "required": false,
1124
+ "help": "按课程名过滤(模糊匹配)"
1125
+ },
1126
+ {
1127
+ "name": "status",
1128
+ "type": "string",
1129
+ "default": "all",
1130
+ "required": false,
1131
+ "help": "按状态过滤",
1132
+ "choices": [
1133
+ "all",
1134
+ "pending",
1135
+ "submitted",
1136
+ "graded"
1137
+ ]
1138
+ },
1139
+ {
1140
+ "name": "limit",
1141
+ "type": "int",
1142
+ "default": 20,
1143
+ "required": false,
1144
+ "help": "最大返回数量"
1145
+ }
1146
+ ],
1147
+ "type": "ts",
1148
+ "modulePath": "chaoxing/assignments.js",
1149
+ "domain": "mooc2-ans.chaoxing.com",
1150
+ "columns": [
1151
+ "rank",
1152
+ "course",
1153
+ "title",
1154
+ "deadline",
1155
+ "status",
1156
+ "score"
1157
+ ]
1158
+ },
1159
+ {
1160
+ "site": "chaoxing",
1161
+ "name": "exams",
1162
+ "description": "学习通考试列表",
1163
+ "strategy": "cookie",
1164
+ "browser": true,
1165
+ "args": [
1166
+ {
1167
+ "name": "course",
1168
+ "type": "string",
1169
+ "required": false,
1170
+ "help": "按课程名过滤(模糊匹配)"
1171
+ },
1172
+ {
1173
+ "name": "status",
1174
+ "type": "string",
1175
+ "default": "all",
1176
+ "required": false,
1177
+ "help": "按状态过滤",
1178
+ "choices": [
1179
+ "all",
1180
+ "upcoming",
1181
+ "ongoing",
1182
+ "finished"
1183
+ ]
1184
+ },
1185
+ {
1186
+ "name": "limit",
1187
+ "type": "int",
1188
+ "default": 20,
1189
+ "required": false,
1190
+ "help": "最大返回数量"
1191
+ }
1192
+ ],
1193
+ "type": "ts",
1194
+ "modulePath": "chaoxing/exams.js",
1195
+ "domain": "mooc2-ans.chaoxing.com",
1196
+ "columns": [
1197
+ "rank",
1198
+ "course",
1199
+ "title",
1200
+ "start",
1201
+ "end",
1202
+ "status",
1203
+ "score"
1204
+ ]
1205
+ },
973
1206
  {
974
1207
  "site": "chatgpt",
975
1208
  "name": "ask",
@@ -1000,6 +1233,16 @@
1000
1233
  "Text"
1001
1234
  ]
1002
1235
  },
1236
+ {
1237
+ "site": "chatgpt",
1238
+ "name": "ax",
1239
+ "description": "",
1240
+ "strategy": "cookie",
1241
+ "browser": true,
1242
+ "args": [],
1243
+ "type": "ts",
1244
+ "modulePath": "chatgpt/ax.js"
1245
+ },
1003
1246
  {
1004
1247
  "site": "chatgpt",
1005
1248
  "name": "new",
@@ -2045,80 +2288,466 @@
2045
2288
  "name": "prompt",
2046
2289
  "type": "string",
2047
2290
  "required": true,
2048
- "help": ""
2291
+ "help": ""
2292
+ },
2293
+ {
2294
+ "name": "timeout",
2295
+ "type": "int",
2296
+ "default": 120,
2297
+ "required": false,
2298
+ "help": ""
2299
+ },
2300
+ {
2301
+ "name": "new",
2302
+ "type": "boolean",
2303
+ "default": false,
2304
+ "required": false,
2305
+ "help": ""
2306
+ }
2307
+ ],
2308
+ "type": "ts",
2309
+ "modulePath": "grok/ask.js",
2310
+ "domain": "grok.com",
2311
+ "columns": [
2312
+ "response"
2313
+ ]
2314
+ },
2315
+ {
2316
+ "site": "hackernews",
2317
+ "name": "top",
2318
+ "description": "Hacker News top stories",
2319
+ "domain": "news.ycombinator.com",
2320
+ "strategy": "public",
2321
+ "browser": false,
2322
+ "args": [
2323
+ {
2324
+ "name": "limit",
2325
+ "type": "int",
2326
+ "default": 20,
2327
+ "required": false,
2328
+ "help": "Number of stories"
2329
+ }
2330
+ ],
2331
+ "columns": [
2332
+ "rank",
2333
+ "title",
2334
+ "score",
2335
+ "author",
2336
+ "comments"
2337
+ ],
2338
+ "pipeline": [
2339
+ {
2340
+ "fetch": {
2341
+ "url": "https://hacker-news.firebaseio.com/v0/topstories.json"
2342
+ }
2343
+ },
2344
+ {
2345
+ "limit": 30
2346
+ },
2347
+ {
2348
+ "map": {
2349
+ "id": "${{ item }}"
2350
+ }
2351
+ },
2352
+ {
2353
+ "fetch": {
2354
+ "url": "https://hacker-news.firebaseio.com/v0/item/${{ item.id }}.json"
2355
+ }
2356
+ },
2357
+ {
2358
+ "map": {
2359
+ "rank": "${{ index + 1 }}",
2360
+ "title": "${{ item.title }}",
2361
+ "score": "${{ item.score }}",
2362
+ "author": "${{ item.by }}",
2363
+ "comments": "${{ item.descendants }}",
2364
+ "url": "${{ item.url }}"
2365
+ }
2366
+ },
2367
+ {
2368
+ "limit": "${{ args.limit }}"
2369
+ }
2370
+ ],
2371
+ "type": "yaml"
2372
+ },
2373
+ {
2374
+ "site": "hf",
2375
+ "name": "top",
2376
+ "description": "Top upvoted Hugging Face papers",
2377
+ "strategy": "public",
2378
+ "browser": false,
2379
+ "args": [
2380
+ {
2381
+ "name": "limit",
2382
+ "type": "int",
2383
+ "default": 20,
2384
+ "required": false,
2385
+ "help": "Number of papers"
2386
+ },
2387
+ {
2388
+ "name": "all",
2389
+ "type": "bool",
2390
+ "default": false,
2391
+ "required": false,
2392
+ "help": "Return all papers (ignore limit)"
2393
+ },
2394
+ {
2395
+ "name": "date",
2396
+ "type": "str",
2397
+ "required": false,
2398
+ "help": "Date (YYYY-MM-DD), defaults to most recent"
2399
+ },
2400
+ {
2401
+ "name": "period",
2402
+ "type": "str",
2403
+ "default": "daily",
2404
+ "required": false,
2405
+ "help": "Time period: daily, weekly, or monthly",
2406
+ "choices": [
2407
+ "daily",
2408
+ "weekly",
2409
+ "monthly"
2410
+ ]
2411
+ }
2412
+ ],
2413
+ "type": "ts",
2414
+ "modulePath": "hf/top.js",
2415
+ "domain": "huggingface.co"
2416
+ },
2417
+ {
2418
+ "site": "jike",
2419
+ "name": "comment",
2420
+ "description": "评论即刻帖子",
2421
+ "strategy": "ui",
2422
+ "browser": true,
2423
+ "args": [
2424
+ {
2425
+ "name": "id",
2426
+ "type": "string",
2427
+ "required": true,
2428
+ "help": "帖子 ID"
2429
+ },
2430
+ {
2431
+ "name": "text",
2432
+ "type": "string",
2433
+ "required": true,
2434
+ "help": "评论内容"
2435
+ }
2436
+ ],
2437
+ "type": "ts",
2438
+ "modulePath": "jike/comment.js",
2439
+ "domain": "web.okjike.com",
2440
+ "columns": [
2441
+ "status",
2442
+ "message"
2443
+ ]
2444
+ },
2445
+ {
2446
+ "site": "jike",
2447
+ "name": "create",
2448
+ "description": "发布即刻动态",
2449
+ "strategy": "ui",
2450
+ "browser": true,
2451
+ "args": [
2452
+ {
2453
+ "name": "text",
2454
+ "type": "string",
2455
+ "required": true,
2456
+ "help": "动态正文内容"
2457
+ }
2458
+ ],
2459
+ "type": "ts",
2460
+ "modulePath": "jike/create.js",
2461
+ "domain": "web.okjike.com",
2462
+ "columns": [
2463
+ "status",
2464
+ "message"
2465
+ ]
2466
+ },
2467
+ {
2468
+ "site": "jike",
2469
+ "name": "feed",
2470
+ "description": "即刻首页动态流",
2471
+ "strategy": "cookie",
2472
+ "browser": true,
2473
+ "args": [
2474
+ {
2475
+ "name": "limit",
2476
+ "type": "int",
2477
+ "default": 20,
2478
+ "required": false,
2479
+ "help": ""
2480
+ }
2481
+ ],
2482
+ "type": "ts",
2483
+ "modulePath": "jike/feed.js",
2484
+ "domain": "web.okjike.com",
2485
+ "columns": [
2486
+ "author",
2487
+ "content",
2488
+ "likes",
2489
+ "comments",
2490
+ "time",
2491
+ "url"
2492
+ ]
2493
+ },
2494
+ {
2495
+ "site": "jike",
2496
+ "name": "like",
2497
+ "description": "点赞即刻帖子",
2498
+ "strategy": "ui",
2499
+ "browser": true,
2500
+ "args": [
2501
+ {
2502
+ "name": "id",
2503
+ "type": "string",
2504
+ "required": true,
2505
+ "help": "帖子 ID"
2506
+ }
2507
+ ],
2508
+ "type": "ts",
2509
+ "modulePath": "jike/like.js",
2510
+ "domain": "web.okjike.com",
2511
+ "columns": [
2512
+ "status",
2513
+ "message"
2514
+ ]
2515
+ },
2516
+ {
2517
+ "site": "jike",
2518
+ "name": "notifications",
2519
+ "description": "即刻通知",
2520
+ "strategy": "cookie",
2521
+ "browser": true,
2522
+ "args": [
2523
+ {
2524
+ "name": "limit",
2525
+ "type": "int",
2526
+ "default": 20,
2527
+ "required": false,
2528
+ "help": ""
2529
+ }
2530
+ ],
2531
+ "type": "ts",
2532
+ "modulePath": "jike/notifications.js",
2533
+ "domain": "web.okjike.com",
2534
+ "columns": [
2535
+ "type",
2536
+ "user",
2537
+ "content",
2538
+ "time"
2539
+ ]
2540
+ },
2541
+ {
2542
+ "site": "jike",
2543
+ "name": "post",
2544
+ "description": "即刻帖子详情及评论",
2545
+ "domain": "m.okjike.com",
2546
+ "strategy": "cookie",
2547
+ "browser": true,
2548
+ "args": [
2549
+ {
2550
+ "name": "id",
2551
+ "type": "string",
2552
+ "required": true,
2553
+ "help": "Post ID (from post URL)"
2554
+ }
2555
+ ],
2556
+ "columns": [
2557
+ "type",
2558
+ "author",
2559
+ "content",
2560
+ "likes",
2561
+ "time"
2562
+ ],
2563
+ "pipeline": [
2564
+ {
2565
+ "navigate": "https://m.okjike.com/originalPosts/${{ args.id }}"
2566
+ },
2567
+ {
2568
+ "evaluate": "(() => {\n try {\n const el = document.querySelector('script[type=\"application/json\"]');\n if (!el) return [];\n const data = JSON.parse(el.textContent);\n const pageProps = data?.props?.pageProps || {};\n const post = pageProps.post || {};\n const comments = pageProps.comments || [];\n\n const result = [{\n type: 'post',\n author: post.user?.screenName || '',\n content: post.content || '',\n likes: post.likeCount || 0,\n time: post.createdAt || '',\n }];\n\n for (const c of comments) {\n result.push({\n type: 'comment',\n author: c.user?.screenName || '',\n content: (c.content || '').replace(/\\n/g, ' '),\n likes: c.likeCount || 0,\n time: c.createdAt || '',\n });\n }\n\n return result;\n } catch (e) {\n return [];\n }\n})()\n"
2569
+ },
2570
+ {
2571
+ "map": {
2572
+ "type": "${{ item.type }}",
2573
+ "author": "${{ item.author }}",
2574
+ "content": "${{ item.content }}",
2575
+ "likes": "${{ item.likes }}",
2576
+ "time": "${{ item.time }}"
2577
+ }
2578
+ }
2579
+ ],
2580
+ "type": "yaml"
2581
+ },
2582
+ {
2583
+ "site": "jike",
2584
+ "name": "repost",
2585
+ "description": "转发即刻帖子",
2586
+ "strategy": "ui",
2587
+ "browser": true,
2588
+ "args": [
2589
+ {
2590
+ "name": "id",
2591
+ "type": "string",
2592
+ "required": true,
2593
+ "help": "帖子 ID"
2594
+ },
2595
+ {
2596
+ "name": "text",
2597
+ "type": "string",
2598
+ "required": false,
2599
+ "help": "转发附言(可选)"
2600
+ }
2601
+ ],
2602
+ "type": "ts",
2603
+ "modulePath": "jike/repost.js",
2604
+ "domain": "web.okjike.com",
2605
+ "columns": [
2606
+ "status",
2607
+ "message"
2608
+ ]
2609
+ },
2610
+ {
2611
+ "site": "jike",
2612
+ "name": "search",
2613
+ "description": "搜索即刻帖子",
2614
+ "strategy": "cookie",
2615
+ "browser": true,
2616
+ "args": [
2617
+ {
2618
+ "name": "keyword",
2619
+ "type": "string",
2620
+ "required": true,
2621
+ "help": ""
2622
+ },
2623
+ {
2624
+ "name": "limit",
2625
+ "type": "int",
2626
+ "default": 20,
2627
+ "required": false,
2628
+ "help": ""
2629
+ }
2630
+ ],
2631
+ "type": "ts",
2632
+ "modulePath": "jike/search.js",
2633
+ "domain": "web.okjike.com",
2634
+ "columns": [
2635
+ "author",
2636
+ "content",
2637
+ "likes",
2638
+ "comments",
2639
+ "time",
2640
+ "url"
2641
+ ]
2642
+ },
2643
+ {
2644
+ "site": "jike",
2645
+ "name": "shared",
2646
+ "description": "",
2647
+ "strategy": "cookie",
2648
+ "browser": true,
2649
+ "args": [],
2650
+ "type": "ts",
2651
+ "modulePath": "jike/shared.js"
2652
+ },
2653
+ {
2654
+ "site": "jike",
2655
+ "name": "topic",
2656
+ "description": "即刻话题/圈子帖子",
2657
+ "domain": "m.okjike.com",
2658
+ "strategy": "cookie",
2659
+ "browser": true,
2660
+ "args": [
2661
+ {
2662
+ "name": "id",
2663
+ "type": "string",
2664
+ "required": true,
2665
+ "help": "Topic ID (from topic URL, e.g. 553870e8e4b0cafb0a1bef68)"
2049
2666
  },
2050
2667
  {
2051
- "name": "timeout",
2668
+ "name": "limit",
2052
2669
  "type": "int",
2053
- "default": 120,
2670
+ "default": 20,
2054
2671
  "required": false,
2055
- "help": ""
2672
+ "help": "Number of posts"
2673
+ }
2674
+ ],
2675
+ "columns": [
2676
+ "content",
2677
+ "author",
2678
+ "likes",
2679
+ "comments",
2680
+ "time",
2681
+ "url"
2682
+ ],
2683
+ "pipeline": [
2684
+ {
2685
+ "navigate": "https://m.okjike.com/topics/${{ args.id }}"
2056
2686
  },
2057
2687
  {
2058
- "name": "new",
2059
- "type": "boolean",
2060
- "default": false,
2061
- "required": false,
2062
- "help": ""
2688
+ "evaluate": "(() => {\n try {\n const el = document.querySelector('script[type=\"application/json\"]');\n if (!el) return [];\n const data = JSON.parse(el.textContent);\n const pageProps = data?.props?.pageProps || {};\n const posts = pageProps.posts || [];\n return posts.map(p => ({\n content: (p.content || '').replace(/\\n/g, ' ').slice(0, 80),\n author: p.user?.screenName || '',\n likes: p.likeCount || 0,\n comments: p.commentCount || 0,\n time: p.actionTime || p.createdAt || '',\n id: p.id || '',\n }));\n } catch (e) {\n return [];\n }\n})()\n"
2689
+ },
2690
+ {
2691
+ "map": {
2692
+ "content": "${{ item.content }}",
2693
+ "author": "${{ item.author }}",
2694
+ "likes": "${{ item.likes }}",
2695
+ "comments": "${{ item.comments }}",
2696
+ "time": "${{ item.time }}",
2697
+ "url": "https://web.okjike.com/originalPost/${{ item.id }}"
2698
+ }
2699
+ },
2700
+ {
2701
+ "limit": "${{ args.limit }}"
2063
2702
  }
2064
2703
  ],
2065
- "type": "ts",
2066
- "modulePath": "grok/ask.js",
2067
- "domain": "grok.com",
2068
- "columns": [
2069
- "response"
2070
- ]
2704
+ "type": "yaml"
2071
2705
  },
2072
2706
  {
2073
- "site": "hackernews",
2074
- "name": "top",
2075
- "description": "Hacker News top stories",
2076
- "domain": "news.ycombinator.com",
2077
- "strategy": "public",
2078
- "browser": false,
2707
+ "site": "jike",
2708
+ "name": "user",
2709
+ "description": "即刻用户动态",
2710
+ "domain": "m.okjike.com",
2711
+ "strategy": "cookie",
2712
+ "browser": true,
2079
2713
  "args": [
2714
+ {
2715
+ "name": "username",
2716
+ "type": "string",
2717
+ "required": true,
2718
+ "help": "Username from profile URL (e.g. wenhao1996)"
2719
+ },
2080
2720
  {
2081
2721
  "name": "limit",
2082
2722
  "type": "int",
2083
2723
  "default": 20,
2084
2724
  "required": false,
2085
- "help": "Number of stories"
2725
+ "help": "Number of posts"
2086
2726
  }
2087
2727
  ],
2088
2728
  "columns": [
2089
- "rank",
2090
- "title",
2091
- "score",
2092
- "author",
2093
- "comments"
2729
+ "content",
2730
+ "type",
2731
+ "likes",
2732
+ "comments",
2733
+ "time",
2734
+ "url"
2094
2735
  ],
2095
2736
  "pipeline": [
2096
2737
  {
2097
- "fetch": {
2098
- "url": "https://hacker-news.firebaseio.com/v0/topstories.json"
2099
- }
2100
- },
2101
- {
2102
- "limit": 30
2103
- },
2104
- {
2105
- "map": {
2106
- "id": "${{ item }}"
2107
- }
2738
+ "navigate": "https://m.okjike.com/users/${{ args.username }}"
2108
2739
  },
2109
2740
  {
2110
- "fetch": {
2111
- "url": "https://hacker-news.firebaseio.com/v0/item/${{ item.id }}.json"
2112
- }
2741
+ "evaluate": "(() => {\n try {\n const el = document.querySelector('script[type=\"application/json\"]');\n if (!el) return [];\n const data = JSON.parse(el.textContent);\n const posts = data?.props?.pageProps?.posts || [];\n return posts.map(p => ({\n content: (p.content || '').replace(/\\n/g, ' ').slice(0, 80),\n type: p.type === 'ORIGINAL_POST' ? 'post' : p.type === 'REPOST' ? 'repost' : p.type || '',\n likes: p.likeCount || 0,\n comments: p.commentCount || 0,\n time: p.actionTime || p.createdAt || '',\n id: p.id || '',\n }));\n } catch (e) {\n return [];\n }\n})()\n"
2113
2742
  },
2114
2743
  {
2115
2744
  "map": {
2116
- "rank": "${{ index + 1 }}",
2117
- "title": "${{ item.title }}",
2118
- "score": "${{ item.score }}",
2119
- "author": "${{ item.by }}",
2120
- "comments": "${{ item.descendants }}",
2121
- "url": "${{ item.url }}"
2745
+ "content": "${{ item.content }}",
2746
+ "type": "${{ item.type }}",
2747
+ "likes": "${{ item.likes }}",
2748
+ "comments": "${{ item.comments }}",
2749
+ "time": "${{ item.time }}",
2750
+ "url": "https://web.okjike.com/originalPost/${{ item.id }}"
2122
2751
  }
2123
2752
  },
2124
2753
  {
@@ -3644,6 +4273,194 @@
3644
4273
  "url"
3645
4274
  ]
3646
4275
  },
4276
+ {
4277
+ "site": "stackoverflow",
4278
+ "name": "bounties",
4279
+ "description": "Active bounties on Stack Overflow",
4280
+ "domain": "stackoverflow.com",
4281
+ "strategy": "public",
4282
+ "browser": false,
4283
+ "args": [
4284
+ {
4285
+ "name": "limit",
4286
+ "type": "int",
4287
+ "default": 10,
4288
+ "required": false,
4289
+ "help": "Max number of results"
4290
+ }
4291
+ ],
4292
+ "columns": [
4293
+ "bounty",
4294
+ "title",
4295
+ "score",
4296
+ "answers",
4297
+ "url"
4298
+ ],
4299
+ "pipeline": [
4300
+ {
4301
+ "fetch": {
4302
+ "url": "https://api.stackexchange.com/2.3/questions/featured?order=desc&sort=activity&site=stackoverflow"
4303
+ }
4304
+ },
4305
+ {
4306
+ "select": "items"
4307
+ },
4308
+ {
4309
+ "map": {
4310
+ "title": "${{ item.title }}",
4311
+ "bounty": "${{ item.bounty_amount }}",
4312
+ "score": "${{ item.score }}",
4313
+ "answers": "${{ item.answer_count }}",
4314
+ "url": "${{ item.link }}"
4315
+ }
4316
+ },
4317
+ {
4318
+ "limit": "${{ args.limit }}"
4319
+ }
4320
+ ],
4321
+ "type": "yaml"
4322
+ },
4323
+ {
4324
+ "site": "stackoverflow",
4325
+ "name": "hot",
4326
+ "description": "Hot Stack Overflow questions",
4327
+ "domain": "stackoverflow.com",
4328
+ "strategy": "public",
4329
+ "browser": false,
4330
+ "args": [
4331
+ {
4332
+ "name": "limit",
4333
+ "type": "int",
4334
+ "default": 10,
4335
+ "required": false,
4336
+ "help": "Max number of results"
4337
+ }
4338
+ ],
4339
+ "columns": [
4340
+ "title",
4341
+ "score",
4342
+ "answers",
4343
+ "url"
4344
+ ],
4345
+ "pipeline": [
4346
+ {
4347
+ "fetch": {
4348
+ "url": "https://api.stackexchange.com/2.3/questions?order=desc&sort=hot&site=stackoverflow"
4349
+ }
4350
+ },
4351
+ {
4352
+ "select": "items"
4353
+ },
4354
+ {
4355
+ "map": {
4356
+ "title": "${{ item.title }}",
4357
+ "score": "${{ item.score }}",
4358
+ "answers": "${{ item.answer_count }}",
4359
+ "url": "${{ item.link }}"
4360
+ }
4361
+ },
4362
+ {
4363
+ "limit": "${{ args.limit }}"
4364
+ }
4365
+ ],
4366
+ "type": "yaml"
4367
+ },
4368
+ {
4369
+ "site": "stackoverflow",
4370
+ "name": "search",
4371
+ "description": "Search Stack Overflow questions",
4372
+ "domain": "stackoverflow.com",
4373
+ "strategy": "public",
4374
+ "browser": false,
4375
+ "args": [
4376
+ {
4377
+ "name": "query",
4378
+ "type": "string",
4379
+ "required": true,
4380
+ "help": "Search query"
4381
+ },
4382
+ {
4383
+ "name": "limit",
4384
+ "type": "int",
4385
+ "default": 10,
4386
+ "required": false,
4387
+ "help": "Max number of results"
4388
+ }
4389
+ ],
4390
+ "columns": [
4391
+ "title",
4392
+ "score",
4393
+ "answers",
4394
+ "url"
4395
+ ],
4396
+ "pipeline": [
4397
+ {
4398
+ "fetch": {
4399
+ "url": "https://api.stackexchange.com/2.3/search/advanced?order=desc&sort=relevance&q=${{ args.query }}&site=stackoverflow"
4400
+ }
4401
+ },
4402
+ {
4403
+ "select": "items"
4404
+ },
4405
+ {
4406
+ "map": {
4407
+ "title": "${{ item.title }}",
4408
+ "score": "${{ item.score }}",
4409
+ "answers": "${{ item.answer_count }}",
4410
+ "url": "${{ item.link }}"
4411
+ }
4412
+ },
4413
+ {
4414
+ "limit": "${{ args.limit }}"
4415
+ }
4416
+ ],
4417
+ "type": "yaml"
4418
+ },
4419
+ {
4420
+ "site": "stackoverflow",
4421
+ "name": "unanswered",
4422
+ "description": "Top voted unanswered questions on Stack Overflow",
4423
+ "domain": "stackoverflow.com",
4424
+ "strategy": "public",
4425
+ "browser": false,
4426
+ "args": [
4427
+ {
4428
+ "name": "limit",
4429
+ "type": "int",
4430
+ "default": 10,
4431
+ "required": false,
4432
+ "help": "Max number of results"
4433
+ }
4434
+ ],
4435
+ "columns": [
4436
+ "title",
4437
+ "score",
4438
+ "answers",
4439
+ "url"
4440
+ ],
4441
+ "pipeline": [
4442
+ {
4443
+ "fetch": {
4444
+ "url": "https://api.stackexchange.com/2.3/questions/unanswered?order=desc&sort=votes&site=stackoverflow"
4445
+ }
4446
+ },
4447
+ {
4448
+ "select": "items"
4449
+ },
4450
+ {
4451
+ "map": {
4452
+ "title": "${{ item.title }}",
4453
+ "score": "${{ item.score }}",
4454
+ "answers": "${{ item.answer_count }}",
4455
+ "url": "${{ item.link }}"
4456
+ }
4457
+ },
4458
+ {
4459
+ "limit": "${{ args.limit }}"
4460
+ }
4461
+ ],
4462
+ "type": "yaml"
4463
+ },
3647
4464
  {
3648
4465
  "site": "twitter",
3649
4466
  "name": "accept",
@@ -3783,6 +4600,12 @@
3783
4600
  "required": false,
3784
4601
  "help": "Twitter username (downloads from media tab)"
3785
4602
  },
4603
+ {
4604
+ "name": "tweet-url",
4605
+ "type": "str",
4606
+ "required": false,
4607
+ "help": "Single tweet URL to download"
4608
+ },
3786
4609
  {
3787
4610
  "name": "limit",
3788
4611
  "type": "int",
@@ -4015,6 +4838,13 @@
4015
4838
  "default": 20,
4016
4839
  "required": false,
4017
4840
  "help": "Maximum number of conversations to reply to (default: 20)"
4841
+ },
4842
+ {
4843
+ "name": "skip-replied",
4844
+ "type": "boolean",
4845
+ "default": true,
4846
+ "required": false,
4847
+ "help": "Skip conversations where you already sent the same text (default: true)"
4018
4848
  }
4019
4849
  ],
4020
4850
  "type": "ts",
@@ -5665,6 +6495,13 @@
5665
6495
  "default": "./zhihu-articles",
5666
6496
  "required": false,
5667
6497
  "help": "Output directory"
6498
+ },
6499
+ {
6500
+ "name": "download-images",
6501
+ "type": "boolean",
6502
+ "default": false,
6503
+ "required": false,
6504
+ "help": "Download images locally"
5668
6505
  }
5669
6506
  ],
5670
6507
  "type": "ts",