@jackwener/opencli 1.0.3 → 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 (190) hide show
  1. package/.github/workflows/build-extension.yml +21 -3
  2. package/.github/workflows/docs.yml +52 -0
  3. package/README.md +28 -28
  4. package/README.zh-CN.md +28 -28
  5. package/dist/browser/cdp.d.ts +16 -1
  6. package/dist/browser/cdp.js +124 -80
  7. package/dist/browser/daemon-client.d.ts +3 -1
  8. package/dist/browser/daemon-client.js +4 -0
  9. package/dist/browser/dom-helpers.d.ts +20 -0
  10. package/dist/browser/dom-helpers.js +109 -0
  11. package/dist/browser/mcp.d.ts +1 -0
  12. package/dist/browser/mcp.js +10 -5
  13. package/dist/browser/page.d.ts +7 -0
  14. package/dist/browser/page.js +37 -100
  15. package/dist/browser.test.js +7 -0
  16. package/dist/build-manifest.js +3 -1
  17. package/dist/build-manifest.test.js +34 -0
  18. package/dist/capabilityRouting.d.ts +2 -0
  19. package/dist/capabilityRouting.js +30 -0
  20. package/dist/capabilityRouting.test.d.ts +1 -0
  21. package/dist/capabilityRouting.test.js +42 -0
  22. package/dist/chaoxing.test.js +11 -4
  23. package/dist/cli-manifest.json +635 -1
  24. package/dist/cli.js +45 -8
  25. package/dist/clis/antigravity/serve.d.ts +14 -0
  26. package/dist/clis/antigravity/serve.js +263 -0
  27. package/dist/clis/bilibili/download.js +4 -14
  28. package/dist/clis/boss/resume.d.ts +1 -0
  29. package/dist/clis/boss/resume.js +249 -0
  30. package/dist/clis/hf/top.d.ts +1 -0
  31. package/dist/clis/hf/top.js +119 -0
  32. package/dist/clis/jike/comment.d.ts +1 -0
  33. package/dist/clis/jike/comment.js +107 -0
  34. package/dist/clis/jike/create.d.ts +1 -0
  35. package/dist/clis/jike/create.js +106 -0
  36. package/dist/clis/jike/feed.d.ts +1 -0
  37. package/dist/clis/jike/feed.js +67 -0
  38. package/dist/clis/jike/like.d.ts +1 -0
  39. package/dist/clis/jike/like.js +61 -0
  40. package/dist/clis/jike/notifications.d.ts +1 -0
  41. package/dist/clis/jike/notifications.js +169 -0
  42. package/dist/clis/jike/post.yaml +58 -0
  43. package/dist/clis/jike/repost.d.ts +1 -0
  44. package/dist/clis/jike/repost.js +103 -0
  45. package/dist/clis/jike/search.d.ts +1 -0
  46. package/dist/clis/jike/search.js +67 -0
  47. package/dist/clis/jike/shared.d.ts +19 -0
  48. package/dist/clis/jike/shared.js +25 -0
  49. package/dist/clis/jike/topic.yaml +52 -0
  50. package/dist/clis/jike/user.yaml +51 -0
  51. package/dist/clis/smzdm/search.js +28 -39
  52. package/dist/clis/stackoverflow/bounties.yaml +29 -0
  53. package/dist/clis/stackoverflow/hot.yaml +28 -0
  54. package/dist/clis/stackoverflow/search.yaml +32 -0
  55. package/dist/clis/stackoverflow/unanswered.yaml +28 -0
  56. package/dist/clis/twitter/download.js +6 -16
  57. package/dist/clis/xiaohongshu/download.js +3 -3
  58. package/dist/clis/zhihu/download.js +3 -3
  59. package/dist/doctor.d.ts +7 -0
  60. package/dist/doctor.js +16 -0
  61. package/dist/download/index.d.ts +12 -8
  62. package/dist/download/index.js +11 -3
  63. package/dist/download/index.test.d.ts +1 -0
  64. package/dist/download/index.test.js +14 -0
  65. package/dist/engine.js +5 -5
  66. package/dist/explore.d.ts +1 -0
  67. package/dist/explore.js +3 -3
  68. package/dist/generate.js +1 -0
  69. package/dist/interceptor.js +3 -2
  70. package/dist/output.d.ts +1 -0
  71. package/dist/output.js +3 -1
  72. package/dist/pipeline/executor.test.js +1 -0
  73. package/dist/pipeline/steps/download.js +14 -18
  74. package/dist/registry.d.ts +1 -0
  75. package/dist/registry.js +5 -2
  76. package/dist/runtime.d.ts +4 -1
  77. package/dist/runtime.js +2 -2
  78. package/dist/types.d.ts +12 -0
  79. package/dist/verify.d.ts +6 -1
  80. package/dist/verify.js +54 -2
  81. package/docs/.vitepress/config.mts +193 -0
  82. package/docs/adapters/browser/apple-podcasts.md +28 -0
  83. package/docs/adapters/browser/bbc.md +26 -0
  84. package/docs/adapters/browser/bilibili.md +38 -0
  85. package/docs/adapters/browser/boss.md +28 -0
  86. package/docs/adapters/browser/coupang.md +28 -0
  87. package/docs/adapters/browser/ctrip.md +27 -0
  88. package/docs/adapters/browser/github.md +26 -0
  89. package/docs/adapters/browser/hackernews.md +26 -0
  90. package/docs/adapters/browser/linkedin.md +27 -0
  91. package/docs/adapters/browser/reddit.md +41 -0
  92. package/docs/adapters/browser/reuters.md +27 -0
  93. package/docs/adapters/browser/smzdm.md +27 -0
  94. package/docs/adapters/browser/twitter.md +47 -0
  95. package/docs/adapters/browser/v2ex.md +32 -0
  96. package/docs/adapters/browser/weibo.md +27 -0
  97. package/docs/adapters/browser/xiaohongshu.md +32 -0
  98. package/docs/adapters/browser/xiaoyuzhou.md +28 -0
  99. package/docs/adapters/browser/xueqiu.md +32 -0
  100. package/docs/adapters/browser/yahoo-finance.md +26 -0
  101. package/docs/adapters/browser/youtube.md +29 -0
  102. package/docs/adapters/browser/zhihu.md +30 -0
  103. package/docs/adapters/desktop/antigravity.md +46 -0
  104. package/docs/adapters/desktop/chatgpt.md +43 -0
  105. package/docs/adapters/desktop/chatwise.md +38 -0
  106. package/docs/adapters/desktop/codex.md +32 -0
  107. package/docs/adapters/desktop/cursor.md +33 -0
  108. package/docs/adapters/desktop/discord.md +28 -0
  109. package/docs/adapters/desktop/feishu.md +20 -0
  110. package/docs/adapters/desktop/neteasemusic.md +31 -0
  111. package/docs/adapters/desktop/notion.md +29 -0
  112. package/docs/adapters/desktop/wechat.md +28 -0
  113. package/docs/adapters/index.md +49 -0
  114. package/docs/advanced/cdp.md +103 -0
  115. package/docs/advanced/download.md +63 -0
  116. package/docs/advanced/electron.md +125 -0
  117. package/docs/advanced/remote-chrome.md +72 -0
  118. package/docs/developer/ai-workflow.md +66 -0
  119. package/docs/developer/architecture.md +90 -0
  120. package/docs/developer/contributing.md +136 -0
  121. package/docs/developer/testing.md +237 -0
  122. package/docs/developer/ts-adapter.md +87 -0
  123. package/docs/developer/yaml-adapter.md +108 -0
  124. package/docs/guide/browser-bridge.md +38 -0
  125. package/docs/guide/getting-started.md +56 -0
  126. package/docs/guide/installation.md +37 -0
  127. package/docs/guide/troubleshooting.md +56 -0
  128. package/docs/index.md +35 -0
  129. package/docs/zh/adapters/index.md +5 -0
  130. package/docs/zh/advanced/cdp.md +3 -0
  131. package/docs/zh/developer/contributing.md +24 -0
  132. package/docs/zh/guide/browser-bridge.md +25 -0
  133. package/docs/zh/guide/getting-started.md +40 -0
  134. package/docs/zh/guide/installation.md +37 -0
  135. package/docs/zh/index.md +29 -0
  136. package/extension/dist/background.js +92 -52
  137. package/extension/package-lock.json +1156 -0
  138. package/extension/src/background.test.ts +151 -0
  139. package/extension/src/background.ts +122 -51
  140. package/extension/src/protocol.ts +3 -1
  141. package/package.json +7 -3
  142. package/src/browser/cdp.ts +154 -82
  143. package/src/browser/daemon-client.ts +7 -1
  144. package/src/browser/dom-helpers.ts +116 -0
  145. package/src/browser/mcp.ts +14 -6
  146. package/src/browser/page.ts +45 -100
  147. package/src/browser.test.ts +10 -0
  148. package/src/build-manifest.test.ts +36 -0
  149. package/src/build-manifest.ts +2 -1
  150. package/src/capabilityRouting.test.ts +47 -0
  151. package/src/capabilityRouting.ts +28 -0
  152. package/src/chaoxing.test.ts +12 -4
  153. package/src/cli.ts +28 -8
  154. package/src/clis/antigravity/serve.ts +329 -0
  155. package/src/clis/bilibili/download.ts +4 -15
  156. package/src/clis/boss/resume.ts +262 -0
  157. package/src/clis/hf/top.ts +141 -0
  158. package/src/clis/jike/comment.ts +113 -0
  159. package/src/clis/jike/create.ts +113 -0
  160. package/src/clis/jike/feed.ts +74 -0
  161. package/src/clis/jike/like.ts +65 -0
  162. package/src/clis/jike/notifications.ts +185 -0
  163. package/src/clis/jike/post.yaml +58 -0
  164. package/src/clis/jike/repost.ts +114 -0
  165. package/src/clis/jike/search.ts +74 -0
  166. package/src/clis/jike/shared.ts +36 -0
  167. package/src/clis/jike/topic.yaml +52 -0
  168. package/src/clis/jike/user.yaml +51 -0
  169. package/src/clis/smzdm/search.ts +30 -39
  170. package/src/clis/stackoverflow/bounties.yaml +29 -0
  171. package/src/clis/stackoverflow/hot.yaml +28 -0
  172. package/src/clis/stackoverflow/search.yaml +32 -0
  173. package/src/clis/stackoverflow/unanswered.yaml +28 -0
  174. package/src/clis/twitter/download.ts +6 -17
  175. package/src/clis/xiaohongshu/download.ts +3 -3
  176. package/src/clis/zhihu/download.ts +3 -3
  177. package/src/doctor.ts +18 -2
  178. package/src/download/index.test.ts +16 -0
  179. package/src/download/index.ts +22 -4
  180. package/src/engine.ts +4 -4
  181. package/src/explore.ts +4 -4
  182. package/src/generate.ts +1 -0
  183. package/src/interceptor.ts +3 -2
  184. package/src/output.ts +3 -1
  185. package/src/pipeline/executor.test.ts +1 -0
  186. package/src/pipeline/steps/download.ts +14 -17
  187. package/src/registry.ts +6 -2
  188. package/src/runtime.ts +3 -2
  189. package/src/types.ts +9 -0
  190. 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",
@@ -963,6 +973,36 @@
963
973
  "url"
964
974
  ]
965
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
+ },
966
1006
  {
967
1007
  "site": "boss",
968
1008
  "name": "search",
@@ -2330,6 +2370,392 @@
2330
2370
  ],
2331
2371
  "type": "yaml"
2332
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)"
2666
+ },
2667
+ {
2668
+ "name": "limit",
2669
+ "type": "int",
2670
+ "default": 20,
2671
+ "required": false,
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 }}"
2686
+ },
2687
+ {
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 }}"
2702
+ }
2703
+ ],
2704
+ "type": "yaml"
2705
+ },
2706
+ {
2707
+ "site": "jike",
2708
+ "name": "user",
2709
+ "description": "即刻用户动态",
2710
+ "domain": "m.okjike.com",
2711
+ "strategy": "cookie",
2712
+ "browser": true,
2713
+ "args": [
2714
+ {
2715
+ "name": "username",
2716
+ "type": "string",
2717
+ "required": true,
2718
+ "help": "Username from profile URL (e.g. wenhao1996)"
2719
+ },
2720
+ {
2721
+ "name": "limit",
2722
+ "type": "int",
2723
+ "default": 20,
2724
+ "required": false,
2725
+ "help": "Number of posts"
2726
+ }
2727
+ ],
2728
+ "columns": [
2729
+ "content",
2730
+ "type",
2731
+ "likes",
2732
+ "comments",
2733
+ "time",
2734
+ "url"
2735
+ ],
2736
+ "pipeline": [
2737
+ {
2738
+ "navigate": "https://m.okjike.com/users/${{ args.username }}"
2739
+ },
2740
+ {
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"
2742
+ },
2743
+ {
2744
+ "map": {
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 }}"
2751
+ }
2752
+ },
2753
+ {
2754
+ "limit": "${{ args.limit }}"
2755
+ }
2756
+ ],
2757
+ "type": "yaml"
2758
+ },
2333
2759
  {
2334
2760
  "site": "jimeng",
2335
2761
  "name": "generate",
@@ -3847,6 +4273,194 @@
3847
4273
  "url"
3848
4274
  ]
3849
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
+ },
3850
4464
  {
3851
4465
  "site": "twitter",
3852
4466
  "name": "accept",
@@ -3986,6 +4600,12 @@
3986
4600
  "required": false,
3987
4601
  "help": "Twitter username (downloads from media tab)"
3988
4602
  },
4603
+ {
4604
+ "name": "tweet-url",
4605
+ "type": "str",
4606
+ "required": false,
4607
+ "help": "Single tweet URL to download"
4608
+ },
3989
4609
  {
3990
4610
  "name": "limit",
3991
4611
  "type": "int",
@@ -4218,6 +4838,13 @@
4218
4838
  "default": 20,
4219
4839
  "required": false,
4220
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)"
4221
4848
  }
4222
4849
  ],
4223
4850
  "type": "ts",
@@ -5868,6 +6495,13 @@
5868
6495
  "default": "./zhihu-articles",
5869
6496
  "required": false,
5870
6497
  "help": "Output directory"
6498
+ },
6499
+ {
6500
+ "name": "download-images",
6501
+ "type": "boolean",
6502
+ "default": false,
6503
+ "required": false,
6504
+ "help": "Download images locally"
5871
6505
  }
5872
6506
  ],
5873
6507
  "type": "ts",