publishport-opencli 1.8.5-pp.2 → 1.8.5-pp.3

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 (76) hide show
  1. package/cli-manifest.json +2223 -0
  2. package/clis/_shared/token-auth.js +153 -0
  3. package/clis/_shared/token-auth.test.js +116 -0
  4. package/clis/_shared/video-publish-registration.test.js +50 -0
  5. package/clis/_shared/video-publish.js +242 -0
  6. package/clis/_shared/video-publish.test.js +70 -0
  7. package/clis/baijiahao/publish.js +225 -0
  8. package/clis/bilibili/publish.js +253 -0
  9. package/clis/bilibili/upload.js +162 -0
  10. package/clis/bilibili/upload.test.js +104 -0
  11. package/clis/bluesky/auth.js +64 -0
  12. package/clis/bluesky/post.js +92 -0
  13. package/clis/bluesky/post.test.js +111 -0
  14. package/clis/devto/auth.js +55 -0
  15. package/clis/devto/publish.js +93 -0
  16. package/clis/devto/publish.test.js +105 -0
  17. package/clis/farcaster/auth.js +57 -0
  18. package/clis/farcaster/post.js +62 -0
  19. package/clis/farcaster/post.test.js +83 -0
  20. package/clis/ghost/publish.js +74 -0
  21. package/clis/ghost/publish.test.js +131 -0
  22. package/clis/ghost/shared.js +105 -0
  23. package/clis/ghost/whoami.js +25 -0
  24. package/clis/hashnode/auth.js +79 -0
  25. package/clis/hashnode/publish.js +91 -0
  26. package/clis/hashnode/publish.test.js +95 -0
  27. package/clis/kuaishou/auth.js +51 -0
  28. package/clis/kuaishou/publish.js +237 -0
  29. package/clis/mastodon/auth.js +56 -0
  30. package/clis/mastodon/post.js +95 -0
  31. package/clis/mastodon/post.test.js +98 -0
  32. package/clis/nostr/auth.js +57 -0
  33. package/clis/nostr/post.js +73 -0
  34. package/clis/nostr/post.test.js +95 -0
  35. package/clis/note/auth.js +55 -0
  36. package/clis/note/note-utils.js +105 -0
  37. package/clis/note/note-utils.test.js +67 -0
  38. package/clis/note/publish.js +164 -0
  39. package/clis/note/publish.test.js +58 -0
  40. package/clis/pinterest/api.js +88 -0
  41. package/clis/pinterest/api.test.js +61 -0
  42. package/clis/pinterest/auth.js +41 -0
  43. package/clis/pinterest/boards.js +63 -0
  44. package/clis/pinterest/boards.test.js +33 -0
  45. package/clis/pinterest/client.js +67 -0
  46. package/clis/pinterest/publish.js +112 -0
  47. package/clis/pinterest/publish.test.js +47 -0
  48. package/clis/qiita/auth.js +48 -0
  49. package/clis/qiita/publish.js +73 -0
  50. package/clis/qiita/publish.test.js +83 -0
  51. package/clis/substack/auth.js +58 -0
  52. package/clis/substack/post-utils.js +140 -0
  53. package/clis/substack/post-utils.test.js +113 -0
  54. package/clis/substack/publish.js +158 -0
  55. package/clis/substack/publish.test.js +102 -0
  56. package/clis/telegram/auth.js +48 -0
  57. package/clis/telegram/post.js +96 -0
  58. package/clis/telegram/post.test.js +87 -0
  59. package/clis/threads/auth.js +74 -0
  60. package/clis/threads/publish.js +83 -0
  61. package/clis/threads/publish.test.js +111 -0
  62. package/clis/tiktok/publish.js +261 -0
  63. package/clis/tumblr/auth.js +99 -0
  64. package/clis/tumblr/publish.js +69 -0
  65. package/clis/tumblr/publish.test.js +113 -0
  66. package/clis/wordpress/publish.js +74 -0
  67. package/clis/wordpress/publish.test.js +125 -0
  68. package/clis/wordpress/shared.js +95 -0
  69. package/clis/wordpress/whoami.js +27 -0
  70. package/clis/youtube/publish.js +272 -0
  71. package/dist/src/build-manifest.js +1 -1
  72. package/dist/src/commands/auth.js +27 -4
  73. package/dist/src/commands/auth.test.js +39 -0
  74. package/dist/src/external-clis.yaml +7 -0
  75. package/dist/src/package-exports.test.js +14 -1
  76. package/package.json +3 -1
package/cli-manifest.json CHANGED
@@ -3179,6 +3179,46 @@
3179
3179
  "siteSession": "persistent",
3180
3180
  "defaultWindowMode": "foreground"
3181
3181
  },
3182
+ {
3183
+ "site": "baijiahao",
3184
+ "name": "publish",
3185
+ "description": "发布视频到百家号(一条命令完成上传+填写+发布;可选定时)",
3186
+ "access": "write",
3187
+ "domain": "baijiahao.baidu.com",
3188
+ "strategy": "cookie",
3189
+ "browser": true,
3190
+ "args": [
3191
+ {
3192
+ "name": "video",
3193
+ "type": "str",
3194
+ "required": true,
3195
+ "positional": true,
3196
+ "help": "视频文件路径"
3197
+ },
3198
+ {
3199
+ "name": "title",
3200
+ "type": "str",
3201
+ "required": true,
3202
+ "help": "视频标题(不足 8 字会自动补「你不知道的」,截断到 30 字)"
3203
+ },
3204
+ {
3205
+ "name": "schedule",
3206
+ "type": "str",
3207
+ "default": "",
3208
+ "required": false,
3209
+ "help": "定时发布时间(ISO8601 或 Unix 秒;不填即立即发布)"
3210
+ }
3211
+ ],
3212
+ "columns": [
3213
+ "status",
3214
+ "title",
3215
+ "url"
3216
+ ],
3217
+ "type": "js",
3218
+ "modulePath": "baijiahao/publish.js",
3219
+ "sourceFile": "baijiahao/publish.js",
3220
+ "navigateBefore": false
3221
+ },
3182
3222
  {
3183
3223
  "site": "baijiahao",
3184
3224
  "name": "whoami",
@@ -3763,6 +3803,37 @@
3763
3803
  "sourceFile": "bilibili/article.js",
3764
3804
  "navigateBefore": "https://member.bilibili.com"
3765
3805
  },
3806
+ {
3807
+ "site": "bilibili",
3808
+ "name": "biliup-login",
3809
+ "description": "B站 biliup 扫码登录,生成投稿用 cookie(一次性)",
3810
+ "access": "write",
3811
+ "strategy": "local",
3812
+ "browser": false,
3813
+ "args": [
3814
+ {
3815
+ "name": "account",
3816
+ "type": "str",
3817
+ "default": "default",
3818
+ "required": false,
3819
+ "help": "biliup 账号名(cookie 存 ~/.publishport/bilibili/<account>.json)"
3820
+ },
3821
+ {
3822
+ "name": "cookie",
3823
+ "type": "str",
3824
+ "default": "",
3825
+ "required": false,
3826
+ "help": "直接指定 cookie 输出路径(覆盖 --account)"
3827
+ }
3828
+ ],
3829
+ "columns": [
3830
+ "status",
3831
+ "cookie"
3832
+ ],
3833
+ "type": "js",
3834
+ "modulePath": "bilibili/publish.js",
3835
+ "sourceFile": "bilibili/publish.js"
3836
+ },
3766
3837
  {
3767
3838
  "site": "bilibili",
3768
3839
  "name": "categories",
@@ -4341,6 +4412,81 @@
4341
4412
  "sourceFile": "bilibili/me.js",
4342
4413
  "navigateBefore": "https://www.bilibili.com"
4343
4414
  },
4415
+ {
4416
+ "site": "bilibili",
4417
+ "name": "publish",
4418
+ "aliases": [
4419
+ "upload-video"
4420
+ ],
4421
+ "description": "投稿视频到B站(经官方 biliup;一条命令完成;需先 biliup-login)",
4422
+ "access": "write",
4423
+ "strategy": "local",
4424
+ "browser": false,
4425
+ "args": [
4426
+ {
4427
+ "name": "video",
4428
+ "type": "str",
4429
+ "required": true,
4430
+ "positional": true,
4431
+ "help": "视频文件路径"
4432
+ },
4433
+ {
4434
+ "name": "title",
4435
+ "type": "str",
4436
+ "required": true,
4437
+ "help": "稿件标题"
4438
+ },
4439
+ {
4440
+ "name": "desc",
4441
+ "type": "str",
4442
+ "default": "",
4443
+ "required": false,
4444
+ "help": "稿件简介"
4445
+ },
4446
+ {
4447
+ "name": "tid",
4448
+ "type": "str",
4449
+ "required": true,
4450
+ "help": "分区 ID(B站 category id,如体育-足球=...)"
4451
+ },
4452
+ {
4453
+ "name": "tags",
4454
+ "type": "str",
4455
+ "default": "",
4456
+ "required": false,
4457
+ "help": "标签,逗号分隔(tag1,tag2)"
4458
+ },
4459
+ {
4460
+ "name": "schedule",
4461
+ "type": "str",
4462
+ "default": "",
4463
+ "required": false,
4464
+ "help": "定时发布时间(ISO8601 或 Unix 秒;不填即立即)"
4465
+ },
4466
+ {
4467
+ "name": "account",
4468
+ "type": "str",
4469
+ "default": "default",
4470
+ "required": false,
4471
+ "help": "biliup 账号名(cookie 存 ~/.publishport/bilibili/<account>.json)"
4472
+ },
4473
+ {
4474
+ "name": "cookie",
4475
+ "type": "str",
4476
+ "default": "",
4477
+ "required": false,
4478
+ "help": "直接指定 biliup cookie 文件路径(覆盖 --account)"
4479
+ }
4480
+ ],
4481
+ "columns": [
4482
+ "status",
4483
+ "title",
4484
+ "tid"
4485
+ ],
4486
+ "type": "js",
4487
+ "modulePath": "bilibili/publish.js",
4488
+ "sourceFile": "bilibili/publish.js"
4489
+ },
4344
4490
  {
4345
4491
  "site": "bilibili",
4346
4492
  "name": "ranking",
@@ -4514,6 +4660,100 @@
4514
4660
  "sourceFile": "bilibili/unfollow.js",
4515
4661
  "navigateBefore": "https://www.bilibili.com"
4516
4662
  },
4663
+ {
4664
+ "site": "bilibili",
4665
+ "name": "upload",
4666
+ "description": "投稿视频到 B站(复用客户端的浏览器登录态,底层用 biliup)。默认仅 dry-run 校验,加 --execute 才真正上传。",
4667
+ "access": "write",
4668
+ "domain": "www.bilibili.com",
4669
+ "strategy": "cookie",
4670
+ "browser": true,
4671
+ "args": [
4672
+ {
4673
+ "name": "file",
4674
+ "type": "str",
4675
+ "required": true,
4676
+ "positional": true,
4677
+ "help": "视频文件路径(多P 用 --more 追加)"
4678
+ },
4679
+ {
4680
+ "name": "title",
4681
+ "type": "str",
4682
+ "required": false,
4683
+ "help": "稿件标题(默认取文件名)"
4684
+ },
4685
+ {
4686
+ "name": "tag",
4687
+ "type": "str",
4688
+ "required": true,
4689
+ "help": "标签,逗号分隔(B站要求至少 1 个)"
4690
+ },
4691
+ {
4692
+ "name": "tid",
4693
+ "type": "number",
4694
+ "required": false,
4695
+ "help": "分区 id(如 201 科学科普;不传用 biliup 默认)"
4696
+ },
4697
+ {
4698
+ "name": "desc",
4699
+ "type": "str",
4700
+ "required": false,
4701
+ "help": "简介"
4702
+ },
4703
+ {
4704
+ "name": "cover",
4705
+ "type": "str",
4706
+ "required": false,
4707
+ "help": "封面图片路径(不传由 B站自动截取)"
4708
+ },
4709
+ {
4710
+ "name": "copyright",
4711
+ "type": "number",
4712
+ "required": false,
4713
+ "help": "1=自制 2=转载(默认 1)"
4714
+ },
4715
+ {
4716
+ "name": "source",
4717
+ "type": "str",
4718
+ "required": false,
4719
+ "help": "转载来源 URL(copyright=2 时建议填)"
4720
+ },
4721
+ {
4722
+ "name": "line",
4723
+ "type": "str",
4724
+ "required": false,
4725
+ "help": "上传线路:bda2/ws/qn/bldsa/tx/txa/bda/alia(不传自动选)"
4726
+ },
4727
+ {
4728
+ "name": "dtime",
4729
+ "type": "number",
4730
+ "required": false,
4731
+ "help": "定时发布的 10 位 unix 时间戳"
4732
+ },
4733
+ {
4734
+ "name": "more",
4735
+ "type": "str",
4736
+ "required": false,
4737
+ "help": "追加的视频文件(多P),逗号分隔多个路径"
4738
+ },
4739
+ {
4740
+ "name": "execute",
4741
+ "type": "boolean",
4742
+ "required": false,
4743
+ "help": "真正投稿;不带则只做 dry-run 校验"
4744
+ }
4745
+ ],
4746
+ "columns": [
4747
+ "status",
4748
+ "title",
4749
+ "files",
4750
+ "output"
4751
+ ],
4752
+ "type": "js",
4753
+ "modulePath": "bilibili/upload.js",
4754
+ "sourceFile": "bilibili/upload.js",
4755
+ "navigateBefore": "https://www.bilibili.com"
4756
+ },
4517
4757
  {
4518
4758
  "site": "bilibili",
4519
4759
  "name": "user-videos",
@@ -5404,6 +5644,85 @@
5404
5644
  "modulePath": "bluesky/following.js",
5405
5645
  "sourceFile": "bluesky/following.js"
5406
5646
  },
5647
+ {
5648
+ "site": "bluesky",
5649
+ "name": "login",
5650
+ "description": "Configure Bluesky with a handle + app password (no browser).",
5651
+ "access": "write",
5652
+ "domain": "bsky.app",
5653
+ "strategy": "local",
5654
+ "browser": false,
5655
+ "args": [
5656
+ {
5657
+ "name": "identifier",
5658
+ "type": "string",
5659
+ "required": false,
5660
+ "help": "Bluesky handle or email (e.g. alice.bsky.social)"
5661
+ },
5662
+ {
5663
+ "name": "password",
5664
+ "type": "string",
5665
+ "required": false,
5666
+ "help": "App password from Settings → App Passwords (NOT your main password)"
5667
+ },
5668
+ {
5669
+ "name": "service",
5670
+ "type": "string",
5671
+ "default": "https://bsky.social",
5672
+ "required": false,
5673
+ "help": "PDS service URL (default https://bsky.social)"
5674
+ }
5675
+ ],
5676
+ "columns": [
5677
+ "status",
5678
+ "logged_in",
5679
+ "site",
5680
+ "did",
5681
+ "handle"
5682
+ ],
5683
+ "type": "js",
5684
+ "modulePath": "bluesky/auth.js",
5685
+ "sourceFile": "bluesky/auth.js"
5686
+ },
5687
+ {
5688
+ "site": "bluesky",
5689
+ "name": "post",
5690
+ "description": "Publish a Bluesky post (text + optional images)",
5691
+ "access": "write",
5692
+ "domain": "bsky.app",
5693
+ "strategy": "local",
5694
+ "browser": false,
5695
+ "args": [
5696
+ {
5697
+ "name": "text",
5698
+ "type": "string",
5699
+ "required": true,
5700
+ "positional": true,
5701
+ "help": "Post text (≤300 graphemes)"
5702
+ },
5703
+ {
5704
+ "name": "images",
5705
+ "type": "string",
5706
+ "required": false,
5707
+ "help": "Image paths, comma-separated, max 4 (jpg/png/gif/webp)"
5708
+ },
5709
+ {
5710
+ "name": "alt",
5711
+ "type": "string",
5712
+ "required": false,
5713
+ "help": "Alt text applied to all images (accessibility)"
5714
+ }
5715
+ ],
5716
+ "columns": [
5717
+ "status",
5718
+ "uri",
5719
+ "cid",
5720
+ "url"
5721
+ ],
5722
+ "type": "js",
5723
+ "modulePath": "bluesky/post.js",
5724
+ "sourceFile": "bluesky/post.js"
5725
+ },
5407
5726
  {
5408
5727
  "site": "bluesky",
5409
5728
  "name": "profile",
@@ -5600,6 +5919,25 @@
5600
5919
  "modulePath": "bluesky/user.js",
5601
5920
  "sourceFile": "bluesky/user.js"
5602
5921
  },
5922
+ {
5923
+ "site": "bluesky",
5924
+ "name": "whoami",
5925
+ "description": "Show the configured bluesky account",
5926
+ "access": "read",
5927
+ "domain": "bsky.app",
5928
+ "strategy": "local",
5929
+ "browser": false,
5930
+ "args": [],
5931
+ "columns": [
5932
+ "logged_in",
5933
+ "site",
5934
+ "did",
5935
+ "handle"
5936
+ ],
5937
+ "type": "js",
5938
+ "modulePath": "bluesky/auth.js",
5939
+ "sourceFile": "bluesky/auth.js"
5940
+ },
5603
5941
  {
5604
5942
  "site": "booking",
5605
5943
  "name": "search",
@@ -10577,6 +10915,122 @@
10577
10915
  "modulePath": "devto/latest.js",
10578
10916
  "sourceFile": "devto/latest.js"
10579
10917
  },
10918
+ {
10919
+ "site": "devto",
10920
+ "name": "login",
10921
+ "description": "Configure DEV.to with an API key (no browser).",
10922
+ "access": "write",
10923
+ "domain": "dev.to",
10924
+ "strategy": "local",
10925
+ "browser": false,
10926
+ "args": [
10927
+ {
10928
+ "name": "api_key",
10929
+ "type": "string",
10930
+ "required": false,
10931
+ "help": "DEV.to API key (Settings → Extensions → DEV Community API Keys)"
10932
+ }
10933
+ ],
10934
+ "columns": [
10935
+ "status",
10936
+ "logged_in",
10937
+ "site",
10938
+ "id",
10939
+ "username",
10940
+ "name"
10941
+ ],
10942
+ "type": "js",
10943
+ "modulePath": "devto/auth.js",
10944
+ "sourceFile": "devto/auth.js"
10945
+ },
10946
+ {
10947
+ "site": "devto",
10948
+ "name": "publish",
10949
+ "description": "Publish or update a DEV.to article (markdown). Draft by default; pass --published to go live.",
10950
+ "access": "write",
10951
+ "domain": "dev.to",
10952
+ "strategy": "local",
10953
+ "browser": false,
10954
+ "args": [
10955
+ {
10956
+ "name": "title",
10957
+ "type": "string",
10958
+ "required": false,
10959
+ "help": "Article title (required for new articles)"
10960
+ },
10961
+ {
10962
+ "name": "body",
10963
+ "type": "string",
10964
+ "required": false,
10965
+ "help": "Article body in Markdown (or use --body-file)"
10966
+ },
10967
+ {
10968
+ "name": "body-file",
10969
+ "type": "string",
10970
+ "required": false,
10971
+ "help": "Path to a Markdown file for the body"
10972
+ },
10973
+ {
10974
+ "name": "published",
10975
+ "type": "boolean",
10976
+ "default": false,
10977
+ "required": false,
10978
+ "help": "Publish live now (default: save as draft)"
10979
+ },
10980
+ {
10981
+ "name": "tags",
10982
+ "type": "string",
10983
+ "required": false,
10984
+ "help": "Comma-separated tags, max 4, lowercase alphanumeric"
10985
+ },
10986
+ {
10987
+ "name": "cover-image",
10988
+ "type": "string",
10989
+ "required": false,
10990
+ "help": "Cover image URL (main_image)"
10991
+ },
10992
+ {
10993
+ "name": "canonical-url",
10994
+ "type": "string",
10995
+ "required": false,
10996
+ "help": "Canonical URL (original source)"
10997
+ },
10998
+ {
10999
+ "name": "series",
11000
+ "type": "string",
11001
+ "required": false,
11002
+ "help": "Series name to group articles"
11003
+ },
11004
+ {
11005
+ "name": "description",
11006
+ "type": "string",
11007
+ "required": false,
11008
+ "help": "Social/SEO description"
11009
+ },
11010
+ {
11011
+ "name": "organization-id",
11012
+ "type": "int",
11013
+ "required": false,
11014
+ "help": "Publish under an organization id"
11015
+ },
11016
+ {
11017
+ "name": "id",
11018
+ "type": "string",
11019
+ "required": false,
11020
+ "help": "Existing article id to update (PUT instead of POST)"
11021
+ }
11022
+ ],
11023
+ "columns": [
11024
+ "status",
11025
+ "id",
11026
+ "url",
11027
+ "published",
11028
+ "slug"
11029
+ ],
11030
+ "type": "js",
11031
+ "modulePath": "devto/publish.js",
11032
+ "sourceFile": "devto/publish.js"
11033
+ },
10580
11034
  {
10581
11035
  "site": "devto",
10582
11036
  "name": "read",
@@ -10728,6 +11182,26 @@
10728
11182
  "modulePath": "devto/user.js",
10729
11183
  "sourceFile": "devto/user.js"
10730
11184
  },
11185
+ {
11186
+ "site": "devto",
11187
+ "name": "whoami",
11188
+ "description": "Show the configured devto account",
11189
+ "access": "read",
11190
+ "domain": "dev.to",
11191
+ "strategy": "local",
11192
+ "browser": false,
11193
+ "args": [],
11194
+ "columns": [
11195
+ "logged_in",
11196
+ "site",
11197
+ "id",
11198
+ "username",
11199
+ "name"
11200
+ ],
11201
+ "type": "js",
11202
+ "modulePath": "devto/auth.js",
11203
+ "sourceFile": "devto/auth.js"
11204
+ },
10731
11205
  {
10732
11206
  "site": "dianping",
10733
11207
  "name": "login",
@@ -14341,6 +14815,105 @@
14341
14815
  "navigateBefore": false,
14342
14816
  "siteSession": "persistent"
14343
14817
  },
14818
+ {
14819
+ "site": "farcaster",
14820
+ "name": "login",
14821
+ "description": "Configure a Farcaster FID + signer key (no browser). Validates the key locally.",
14822
+ "access": "write",
14823
+ "domain": "farcaster.xyz",
14824
+ "strategy": "local",
14825
+ "browser": false,
14826
+ "args": [
14827
+ {
14828
+ "name": "fid",
14829
+ "type": "string",
14830
+ "required": false,
14831
+ "help": "Your Farcaster FID (number)"
14832
+ },
14833
+ {
14834
+ "name": "signer",
14835
+ "type": "string",
14836
+ "required": false,
14837
+ "help": "ed25519 signer private key (64 hex chars) — must be registered for this FID"
14838
+ },
14839
+ {
14840
+ "name": "hub",
14841
+ "type": "string",
14842
+ "default": "https://hub.pinata.cloud",
14843
+ "required": false,
14844
+ "help": "Hub HTTP API base URL (default https://hub.pinata.cloud)"
14845
+ }
14846
+ ],
14847
+ "columns": [
14848
+ "status",
14849
+ "logged_in",
14850
+ "site",
14851
+ "fid",
14852
+ "signer_pubkey",
14853
+ "hub"
14854
+ ],
14855
+ "type": "js",
14856
+ "modulePath": "farcaster/auth.js",
14857
+ "sourceFile": "farcaster/auth.js"
14858
+ },
14859
+ {
14860
+ "site": "farcaster",
14861
+ "name": "post",
14862
+ "description": "Publish a Farcaster cast (text + optional image/embed URLs)",
14863
+ "access": "write",
14864
+ "domain": "farcaster.xyz",
14865
+ "strategy": "local",
14866
+ "browser": false,
14867
+ "args": [
14868
+ {
14869
+ "name": "text",
14870
+ "type": "string",
14871
+ "required": true,
14872
+ "positional": true,
14873
+ "help": "Cast text (≤320 bytes)"
14874
+ },
14875
+ {
14876
+ "name": "embeds",
14877
+ "type": "string",
14878
+ "required": false,
14879
+ "help": "Embed URLs (image/frame/link), comma-separated, max 2"
14880
+ },
14881
+ {
14882
+ "name": "channel",
14883
+ "type": "string",
14884
+ "required": false,
14885
+ "help": "Channel parent URL (e.g. https://warpcast.com/~/channel/dev)"
14886
+ }
14887
+ ],
14888
+ "columns": [
14889
+ "status",
14890
+ "hash",
14891
+ "url"
14892
+ ],
14893
+ "type": "js",
14894
+ "modulePath": "farcaster/post.js",
14895
+ "sourceFile": "farcaster/post.js"
14896
+ },
14897
+ {
14898
+ "site": "farcaster",
14899
+ "name": "whoami",
14900
+ "description": "Show the configured farcaster account",
14901
+ "access": "read",
14902
+ "domain": "farcaster.xyz",
14903
+ "strategy": "local",
14904
+ "browser": false,
14905
+ "args": [],
14906
+ "columns": [
14907
+ "logged_in",
14908
+ "site",
14909
+ "fid",
14910
+ "signer_pubkey",
14911
+ "hub"
14912
+ ],
14913
+ "type": "js",
14914
+ "modulePath": "farcaster/auth.js",
14915
+ "sourceFile": "farcaster/auth.js"
14916
+ },
14344
14917
  {
14345
14918
  "site": "flathub",
14346
14919
  "name": "app",
@@ -15148,6 +15721,103 @@
15148
15721
  "sourceFile": "geogebra/triangle.js",
15149
15722
  "navigateBefore": false
15150
15723
  },
15724
+ {
15725
+ "site": "ghost",
15726
+ "name": "publish",
15727
+ "description": "Publish a post to a Ghost site via the Admin API. A Markdown body is converted to HTML automatically (sent with ?source=html). Defaults to a draft for safety — pass --status published to go live.",
15728
+ "access": "write",
15729
+ "domain": "ghost.org",
15730
+ "strategy": "local",
15731
+ "browser": false,
15732
+ "args": [
15733
+ {
15734
+ "name": "title",
15735
+ "type": "str",
15736
+ "required": true,
15737
+ "help": "Post title"
15738
+ },
15739
+ {
15740
+ "name": "content",
15741
+ "type": "str",
15742
+ "required": false,
15743
+ "help": "Post body (Markdown or HTML). Or use --file."
15744
+ },
15745
+ {
15746
+ "name": "file",
15747
+ "type": "str",
15748
+ "required": false,
15749
+ "help": "Read the post body from a local file instead of --content"
15750
+ },
15751
+ {
15752
+ "name": "markup",
15753
+ "type": "str",
15754
+ "default": "auto",
15755
+ "required": false,
15756
+ "help": "How to interpret the body: auto-detect (default), markdown, or html",
15757
+ "choices": [
15758
+ "auto",
15759
+ "markdown",
15760
+ "html"
15761
+ ]
15762
+ },
15763
+ {
15764
+ "name": "status",
15765
+ "type": "str",
15766
+ "default": "draft",
15767
+ "required": false,
15768
+ "help": "Post status (default: draft)",
15769
+ "choices": [
15770
+ "draft",
15771
+ "published"
15772
+ ]
15773
+ },
15774
+ {
15775
+ "name": "excerpt",
15776
+ "type": "str",
15777
+ "required": false,
15778
+ "help": "Optional custom excerpt"
15779
+ },
15780
+ {
15781
+ "name": "slug",
15782
+ "type": "str",
15783
+ "required": false,
15784
+ "help": "Optional URL slug"
15785
+ },
15786
+ {
15787
+ "name": "tags",
15788
+ "type": "str",
15789
+ "required": false,
15790
+ "help": "Comma-separated tag names (created if missing)"
15791
+ }
15792
+ ],
15793
+ "columns": [
15794
+ "id",
15795
+ "status",
15796
+ "title",
15797
+ "url"
15798
+ ],
15799
+ "type": "js",
15800
+ "modulePath": "ghost/publish.js",
15801
+ "sourceFile": "ghost/publish.js"
15802
+ },
15803
+ {
15804
+ "site": "ghost",
15805
+ "name": "whoami",
15806
+ "description": "Verify the Ghost connection by fetching site info (GET /ghost/api/admin/site). Use this to test that the site URL and Admin API key are valid before publishing.",
15807
+ "access": "read",
15808
+ "domain": "ghost.org",
15809
+ "strategy": "local",
15810
+ "browser": false,
15811
+ "args": [],
15812
+ "columns": [
15813
+ "title",
15814
+ "version",
15815
+ "site"
15816
+ ],
15817
+ "type": "js",
15818
+ "modulePath": "ghost/whoami.js",
15819
+ "sourceFile": "ghost/whoami.js"
15820
+ },
15151
15821
  {
15152
15822
  "site": "gitee",
15153
15823
  "name": "login",
@@ -16758,6 +17428,147 @@
16758
17428
  "modulePath": "hackernews/user.js",
16759
17429
  "sourceFile": "hackernews/user.js"
16760
17430
  },
17431
+ {
17432
+ "site": "hashnode",
17433
+ "name": "login",
17434
+ "description": "Configure Hashnode with a Personal Access Token (no browser).",
17435
+ "access": "write",
17436
+ "domain": "hashnode.com",
17437
+ "strategy": "local",
17438
+ "browser": false,
17439
+ "args": [
17440
+ {
17441
+ "name": "token",
17442
+ "type": "string",
17443
+ "required": false,
17444
+ "help": "Hashnode Personal Access Token (Settings → Developer)"
17445
+ }
17446
+ ],
17447
+ "columns": [
17448
+ "status",
17449
+ "logged_in",
17450
+ "site",
17451
+ "id",
17452
+ "username",
17453
+ "name"
17454
+ ],
17455
+ "type": "js",
17456
+ "modulePath": "hashnode/auth.js",
17457
+ "sourceFile": "hashnode/auth.js"
17458
+ },
17459
+ {
17460
+ "site": "hashnode",
17461
+ "name": "publish",
17462
+ "description": "Publish a Hashnode post (or save a draft with --draft). Markdown body + cover/tags/canonical.",
17463
+ "access": "write",
17464
+ "domain": "hashnode.com",
17465
+ "strategy": "local",
17466
+ "browser": false,
17467
+ "args": [
17468
+ {
17469
+ "name": "title",
17470
+ "type": "string",
17471
+ "required": true,
17472
+ "help": "Post title"
17473
+ },
17474
+ {
17475
+ "name": "body",
17476
+ "type": "string",
17477
+ "required": false,
17478
+ "help": "Post body in Markdown (or use --body-file)"
17479
+ },
17480
+ {
17481
+ "name": "body-file",
17482
+ "type": "string",
17483
+ "required": false,
17484
+ "help": "Path to a Markdown file for the body"
17485
+ },
17486
+ {
17487
+ "name": "publication-id",
17488
+ "type": "string",
17489
+ "required": false,
17490
+ "help": "Target publication id (else resolved automatically)"
17491
+ },
17492
+ {
17493
+ "name": "publication-host",
17494
+ "type": "string",
17495
+ "required": false,
17496
+ "help": "Resolve publication id by host (e.g. blog.example.com)"
17497
+ },
17498
+ {
17499
+ "name": "tags",
17500
+ "type": "string",
17501
+ "required": false,
17502
+ "help": "Comma-separated tag names (slug auto-derived)"
17503
+ },
17504
+ {
17505
+ "name": "cover-image",
17506
+ "type": "string",
17507
+ "required": false,
17508
+ "help": "Cover image URL"
17509
+ },
17510
+ {
17511
+ "name": "canonical-url",
17512
+ "type": "string",
17513
+ "required": false,
17514
+ "help": "Canonical / original article URL"
17515
+ },
17516
+ {
17517
+ "name": "subtitle",
17518
+ "type": "string",
17519
+ "required": false,
17520
+ "help": "Subtitle"
17521
+ },
17522
+ {
17523
+ "name": "series-id",
17524
+ "type": "string",
17525
+ "required": false,
17526
+ "help": "Series id to add the post to"
17527
+ },
17528
+ {
17529
+ "name": "slug",
17530
+ "type": "string",
17531
+ "required": false,
17532
+ "help": "Custom slug"
17533
+ },
17534
+ {
17535
+ "name": "draft",
17536
+ "type": "boolean",
17537
+ "default": false,
17538
+ "required": false,
17539
+ "help": "Save as draft instead of publishing"
17540
+ }
17541
+ ],
17542
+ "columns": [
17543
+ "status",
17544
+ "id",
17545
+ "slug",
17546
+ "url"
17547
+ ],
17548
+ "type": "js",
17549
+ "modulePath": "hashnode/publish.js",
17550
+ "sourceFile": "hashnode/publish.js"
17551
+ },
17552
+ {
17553
+ "site": "hashnode",
17554
+ "name": "whoami",
17555
+ "description": "Show the configured hashnode account",
17556
+ "access": "read",
17557
+ "domain": "hashnode.com",
17558
+ "strategy": "local",
17559
+ "browser": false,
17560
+ "args": [],
17561
+ "columns": [
17562
+ "logged_in",
17563
+ "site",
17564
+ "id",
17565
+ "username",
17566
+ "name"
17567
+ ],
17568
+ "type": "js",
17569
+ "modulePath": "hashnode/auth.js",
17570
+ "sourceFile": "hashnode/auth.js"
17571
+ },
16761
17572
  {
16762
17573
  "site": "hf",
16763
17574
  "name": "datasets",
@@ -21423,6 +22234,117 @@
21423
22234
  "navigateBefore": false,
21424
22235
  "siteSession": "persistent"
21425
22236
  },
22237
+ {
22238
+ "site": "kuaishou",
22239
+ "name": "login",
22240
+ "description": "Open kuaishou login and wait until the browser session is authenticated",
22241
+ "access": "write",
22242
+ "domain": "cp.kuaishou.com",
22243
+ "strategy": "cookie",
22244
+ "browser": true,
22245
+ "args": [
22246
+ {
22247
+ "name": "timeout",
22248
+ "type": "int",
22249
+ "default": 300,
22250
+ "required": false,
22251
+ "help": "Maximum seconds to wait for the user to finish login"
22252
+ }
22253
+ ],
22254
+ "columns": [
22255
+ "status",
22256
+ "logged_in",
22257
+ "site",
22258
+ "logged_in"
22259
+ ],
22260
+ "type": "js",
22261
+ "modulePath": "kuaishou/auth.js",
22262
+ "sourceFile": "kuaishou/auth.js",
22263
+ "navigateBefore": false,
22264
+ "siteSession": "persistent",
22265
+ "defaultWindowMode": "foreground"
22266
+ },
22267
+ {
22268
+ "site": "kuaishou",
22269
+ "name": "publish",
22270
+ "description": "发布视频到快手(一条命令完成上传+填写+发布;可选封面/定时/话题)",
22271
+ "access": "write",
22272
+ "domain": "cp.kuaishou.com",
22273
+ "strategy": "cookie",
22274
+ "browser": true,
22275
+ "args": [
22276
+ {
22277
+ "name": "video",
22278
+ "type": "str",
22279
+ "required": true,
22280
+ "positional": true,
22281
+ "help": "视频文件路径"
22282
+ },
22283
+ {
22284
+ "name": "title",
22285
+ "type": "str",
22286
+ "required": true,
22287
+ "help": "作品标题(无 --desc 时作为描述)"
22288
+ },
22289
+ {
22290
+ "name": "desc",
22291
+ "type": "str",
22292
+ "default": "",
22293
+ "required": false,
22294
+ "help": "视频描述(默认用标题)"
22295
+ },
22296
+ {
22297
+ "name": "tags",
22298
+ "type": "str",
22299
+ "default": "",
22300
+ "required": false,
22301
+ "help": "话题标签,逗号分隔,最多取前 3 个(不含 #)"
22302
+ },
22303
+ {
22304
+ "name": "cover",
22305
+ "type": "str",
22306
+ "default": "",
22307
+ "required": false,
22308
+ "help": "封面图片路径(可选)"
22309
+ },
22310
+ {
22311
+ "name": "schedule",
22312
+ "type": "str",
22313
+ "default": "",
22314
+ "required": false,
22315
+ "help": "定时发布时间(ISO8601 或 Unix 秒;不填即立即发布)"
22316
+ }
22317
+ ],
22318
+ "columns": [
22319
+ "status",
22320
+ "title",
22321
+ "url"
22322
+ ],
22323
+ "type": "js",
22324
+ "modulePath": "kuaishou/publish.js",
22325
+ "sourceFile": "kuaishou/publish.js",
22326
+ "navigateBefore": false
22327
+ },
22328
+ {
22329
+ "site": "kuaishou",
22330
+ "name": "whoami",
22331
+ "description": "Show the current logged-in kuaishou account",
22332
+ "access": "read",
22333
+ "domain": "cp.kuaishou.com",
22334
+ "strategy": "cookie",
22335
+ "browser": true,
22336
+ "args": [],
22337
+ "columns": [
22338
+ "logged_in",
22339
+ "site",
22340
+ "logged_in"
22341
+ ],
22342
+ "type": "js",
22343
+ "modulePath": "kuaishou/auth.js",
22344
+ "sourceFile": "kuaishou/auth.js",
22345
+ "navigateBefore": false,
22346
+ "siteSession": "persistent"
22347
+ },
21426
22348
  {
21427
22349
  "site": "lesswrong",
21428
22350
  "name": "comments",
@@ -24141,6 +25063,125 @@
24141
25063
  "navigateBefore": false,
24142
25064
  "siteSession": "persistent"
24143
25065
  },
25066
+ {
25067
+ "site": "mastodon",
25068
+ "name": "login",
25069
+ "description": "Configure a Mastodon instance + access token (no browser).",
25070
+ "access": "write",
25071
+ "domain": "joinmastodon.org",
25072
+ "strategy": "local",
25073
+ "browser": false,
25074
+ "args": [
25075
+ {
25076
+ "name": "instance",
25077
+ "type": "string",
25078
+ "required": false,
25079
+ "help": "Instance URL, e.g. https://mastodon.social"
25080
+ },
25081
+ {
25082
+ "name": "token",
25083
+ "type": "string",
25084
+ "required": false,
25085
+ "help": "Access token (Settings → Development; needs write:statuses, write:media)"
25086
+ }
25087
+ ],
25088
+ "columns": [
25089
+ "status",
25090
+ "logged_in",
25091
+ "site",
25092
+ "id",
25093
+ "username",
25094
+ "acct",
25095
+ "instance"
25096
+ ],
25097
+ "type": "js",
25098
+ "modulePath": "mastodon/auth.js",
25099
+ "sourceFile": "mastodon/auth.js"
25100
+ },
25101
+ {
25102
+ "site": "mastodon",
25103
+ "name": "post",
25104
+ "description": "Publish a Mastodon status (text + optional media)",
25105
+ "access": "write",
25106
+ "domain": "joinmastodon.org",
25107
+ "strategy": "local",
25108
+ "browser": false,
25109
+ "args": [
25110
+ {
25111
+ "name": "text",
25112
+ "type": "string",
25113
+ "required": true,
25114
+ "positional": true,
25115
+ "help": "Status text"
25116
+ },
25117
+ {
25118
+ "name": "media",
25119
+ "type": "string",
25120
+ "required": false,
25121
+ "help": "Media paths, comma-separated, max 4 (images/video)"
25122
+ },
25123
+ {
25124
+ "name": "alt",
25125
+ "type": "string",
25126
+ "required": false,
25127
+ "help": "Alt text / description applied to all media"
25128
+ },
25129
+ {
25130
+ "name": "visibility",
25131
+ "type": "string",
25132
+ "default": "public",
25133
+ "required": false,
25134
+ "help": "public | unlisted | private | direct",
25135
+ "choices": [
25136
+ "public",
25137
+ "unlisted",
25138
+ "private",
25139
+ "direct"
25140
+ ]
25141
+ },
25142
+ {
25143
+ "name": "sensitive",
25144
+ "type": "boolean",
25145
+ "required": false,
25146
+ "help": "Mark media as sensitive"
25147
+ },
25148
+ {
25149
+ "name": "spoiler",
25150
+ "type": "string",
25151
+ "required": false,
25152
+ "help": "Content warning / spoiler text"
25153
+ }
25154
+ ],
25155
+ "columns": [
25156
+ "status",
25157
+ "id",
25158
+ "url"
25159
+ ],
25160
+ "type": "js",
25161
+ "modulePath": "mastodon/post.js",
25162
+ "sourceFile": "mastodon/post.js"
25163
+ },
25164
+ {
25165
+ "site": "mastodon",
25166
+ "name": "whoami",
25167
+ "description": "Show the configured mastodon account",
25168
+ "access": "read",
25169
+ "domain": "joinmastodon.org",
25170
+ "strategy": "local",
25171
+ "browser": false,
25172
+ "args": [],
25173
+ "columns": [
25174
+ "logged_in",
25175
+ "site",
25176
+ "id",
25177
+ "username",
25178
+ "acct",
25179
+ "instance"
25180
+ ],
25181
+ "type": "js",
25182
+ "modulePath": "mastodon/auth.js",
25183
+ "sourceFile": "mastodon/auth.js"
25184
+ },
24144
25185
  {
24145
25186
  "site": "maven",
24146
25187
  "name": "artifact",
@@ -24613,6 +25654,212 @@
24613
25654
  "sourceFile": "mubu/search.js",
24614
25655
  "navigateBefore": "https://mubu.com"
24615
25656
  },
25657
+ {
25658
+ "site": "nostr",
25659
+ "name": "login",
25660
+ "description": "Configure a Nostr nsec + relay list (no browser). Validates the key locally.",
25661
+ "access": "write",
25662
+ "domain": "nostr.com",
25663
+ "strategy": "local",
25664
+ "browser": false,
25665
+ "args": [
25666
+ {
25667
+ "name": "nsec",
25668
+ "type": "string",
25669
+ "required": false,
25670
+ "help": "Secret key in nsec bech32 form (NOT your hex key in plaintext logs)"
25671
+ },
25672
+ {
25673
+ "name": "relays",
25674
+ "type": "string",
25675
+ "required": false,
25676
+ "help": "Relay URLs, comma-separated, e.g. wss://relay.damus.io,wss://nos.lol"
25677
+ }
25678
+ ],
25679
+ "columns": [
25680
+ "status",
25681
+ "logged_in",
25682
+ "site",
25683
+ "npub",
25684
+ "pubkey",
25685
+ "relays"
25686
+ ],
25687
+ "type": "js",
25688
+ "modulePath": "nostr/auth.js",
25689
+ "sourceFile": "nostr/auth.js"
25690
+ },
25691
+ {
25692
+ "site": "nostr",
25693
+ "name": "post",
25694
+ "description": "Publish a Nostr note (kind 1) to your relays (text + optional image URLs)",
25695
+ "access": "write",
25696
+ "domain": "nostr.com",
25697
+ "strategy": "local",
25698
+ "browser": false,
25699
+ "args": [
25700
+ {
25701
+ "name": "text",
25702
+ "type": "string",
25703
+ "required": true,
25704
+ "positional": true,
25705
+ "help": "Note content"
25706
+ },
25707
+ {
25708
+ "name": "image-url",
25709
+ "type": "string",
25710
+ "required": false,
25711
+ "help": "External image URL(s), comma-separated (appended; clients embed them)"
25712
+ },
25713
+ {
25714
+ "name": "relays",
25715
+ "type": "string",
25716
+ "required": false,
25717
+ "help": "Override configured relays for this post (comma-separated wss://)"
25718
+ }
25719
+ ],
25720
+ "columns": [
25721
+ "status",
25722
+ "id",
25723
+ "note",
25724
+ "relays_ok",
25725
+ "relays_total"
25726
+ ],
25727
+ "type": "js",
25728
+ "modulePath": "nostr/post.js",
25729
+ "sourceFile": "nostr/post.js"
25730
+ },
25731
+ {
25732
+ "site": "nostr",
25733
+ "name": "whoami",
25734
+ "description": "Show the configured nostr account",
25735
+ "access": "read",
25736
+ "domain": "nostr.com",
25737
+ "strategy": "local",
25738
+ "browser": false,
25739
+ "args": [],
25740
+ "columns": [
25741
+ "logged_in",
25742
+ "site",
25743
+ "npub",
25744
+ "pubkey",
25745
+ "relays"
25746
+ ],
25747
+ "type": "js",
25748
+ "modulePath": "nostr/auth.js",
25749
+ "sourceFile": "nostr/auth.js"
25750
+ },
25751
+ {
25752
+ "site": "note",
25753
+ "name": "login",
25754
+ "description": "Open note login and wait until the browser session is authenticated",
25755
+ "access": "write",
25756
+ "domain": "note.com",
25757
+ "strategy": "cookie",
25758
+ "browser": true,
25759
+ "args": [
25760
+ {
25761
+ "name": "timeout",
25762
+ "type": "int",
25763
+ "default": 300,
25764
+ "required": false,
25765
+ "help": "Maximum seconds to wait for the user to finish login"
25766
+ }
25767
+ ],
25768
+ "columns": [
25769
+ "status",
25770
+ "logged_in",
25771
+ "site",
25772
+ "urlname",
25773
+ "nickname",
25774
+ "url"
25775
+ ],
25776
+ "type": "js",
25777
+ "modulePath": "note/auth.js",
25778
+ "sourceFile": "note/auth.js",
25779
+ "navigateBefore": false,
25780
+ "siteSession": "persistent",
25781
+ "defaultWindowMode": "foreground"
25782
+ },
25783
+ {
25784
+ "site": "note",
25785
+ "name": "publish",
25786
+ "description": "Publish a text note to note.com (or save a draft with --draft)",
25787
+ "access": "write",
25788
+ "domain": "note.com",
25789
+ "strategy": "cookie",
25790
+ "browser": true,
25791
+ "args": [
25792
+ {
25793
+ "name": "title",
25794
+ "type": "string",
25795
+ "required": true,
25796
+ "positional": true,
25797
+ "help": "Note title"
25798
+ },
25799
+ {
25800
+ "name": "body",
25801
+ "type": "string",
25802
+ "required": false,
25803
+ "help": "Note body text (blank lines split paragraphs)"
25804
+ },
25805
+ {
25806
+ "name": "tags",
25807
+ "type": "string",
25808
+ "required": false,
25809
+ "help": "Hashtags, comma-separated (# optional)"
25810
+ },
25811
+ {
25812
+ "name": "magazine",
25813
+ "type": "string",
25814
+ "required": false,
25815
+ "help": "Magazine id(s) to file under, comma-separated"
25816
+ },
25817
+ {
25818
+ "name": "images",
25819
+ "type": "string",
25820
+ "required": false,
25821
+ "help": "(best-effort) in-body images: local paths and/or urls"
25822
+ },
25823
+ {
25824
+ "name": "draft",
25825
+ "type": "boolean",
25826
+ "default": false,
25827
+ "required": false,
25828
+ "help": "Save the draft but do not publish"
25829
+ }
25830
+ ],
25831
+ "columns": [
25832
+ "status",
25833
+ "note_key",
25834
+ "url"
25835
+ ],
25836
+ "type": "js",
25837
+ "modulePath": "note/publish.js",
25838
+ "sourceFile": "note/publish.js",
25839
+ "navigateBefore": "https://note.com"
25840
+ },
25841
+ {
25842
+ "site": "note",
25843
+ "name": "whoami",
25844
+ "description": "Show the current logged-in note account",
25845
+ "access": "read",
25846
+ "domain": "note.com",
25847
+ "strategy": "cookie",
25848
+ "browser": true,
25849
+ "args": [],
25850
+ "columns": [
25851
+ "logged_in",
25852
+ "site",
25853
+ "urlname",
25854
+ "nickname",
25855
+ "url"
25856
+ ],
25857
+ "type": "js",
25858
+ "modulePath": "note/auth.js",
25859
+ "sourceFile": "note/auth.js",
25860
+ "navigateBefore": false,
25861
+ "siteSession": "persistent"
25862
+ },
24616
25863
  {
24617
25864
  "site": "notebooklm",
24618
25865
  "name": "add-source",
@@ -27215,6 +28462,181 @@
27215
28462
  "modulePath": "paperreview/submit.js",
27216
28463
  "sourceFile": "paperreview/submit.js"
27217
28464
  },
28465
+ {
28466
+ "site": "pinterest",
28467
+ "name": "board-create",
28468
+ "description": "Create a new Pinterest board",
28469
+ "access": "write",
28470
+ "domain": "www.pinterest.com",
28471
+ "strategy": "cookie",
28472
+ "browser": true,
28473
+ "args": [
28474
+ {
28475
+ "name": "name",
28476
+ "type": "string",
28477
+ "required": true,
28478
+ "positional": true,
28479
+ "help": "Board name"
28480
+ },
28481
+ {
28482
+ "name": "description",
28483
+ "type": "string",
28484
+ "required": false,
28485
+ "help": "Board description"
28486
+ },
28487
+ {
28488
+ "name": "privacy",
28489
+ "type": "string",
28490
+ "default": "public",
28491
+ "required": false,
28492
+ "help": "public | secret"
28493
+ }
28494
+ ],
28495
+ "columns": [
28496
+ "id",
28497
+ "name",
28498
+ "url"
28499
+ ],
28500
+ "type": "js",
28501
+ "modulePath": "pinterest/boards.js",
28502
+ "sourceFile": "pinterest/boards.js",
28503
+ "navigateBefore": "https://www.pinterest.com"
28504
+ },
28505
+ {
28506
+ "site": "pinterest",
28507
+ "name": "boards",
28508
+ "description": "List your Pinterest boards",
28509
+ "access": "read",
28510
+ "domain": "www.pinterest.com",
28511
+ "strategy": "cookie",
28512
+ "browser": true,
28513
+ "args": [],
28514
+ "columns": [
28515
+ "id",
28516
+ "name",
28517
+ "url"
28518
+ ],
28519
+ "type": "js",
28520
+ "modulePath": "pinterest/boards.js",
28521
+ "sourceFile": "pinterest/boards.js",
28522
+ "navigateBefore": "https://www.pinterest.com"
28523
+ },
28524
+ {
28525
+ "site": "pinterest",
28526
+ "name": "login",
28527
+ "description": "Open pinterest login and wait until the browser session is authenticated",
28528
+ "access": "write",
28529
+ "domain": "www.pinterest.com",
28530
+ "strategy": "cookie",
28531
+ "browser": true,
28532
+ "args": [
28533
+ {
28534
+ "name": "timeout",
28535
+ "type": "int",
28536
+ "default": 300,
28537
+ "required": false,
28538
+ "help": "Maximum seconds to wait for the user to finish login"
28539
+ }
28540
+ ],
28541
+ "columns": [
28542
+ "status",
28543
+ "logged_in",
28544
+ "site",
28545
+ "username",
28546
+ "url"
28547
+ ],
28548
+ "type": "js",
28549
+ "modulePath": "pinterest/auth.js",
28550
+ "sourceFile": "pinterest/auth.js",
28551
+ "navigateBefore": false,
28552
+ "siteSession": "persistent",
28553
+ "defaultWindowMode": "foreground"
28554
+ },
28555
+ {
28556
+ "site": "pinterest",
28557
+ "name": "pin",
28558
+ "description": "Create a pin on a board with an optional destination link",
28559
+ "access": "write",
28560
+ "domain": "www.pinterest.com",
28561
+ "strategy": "cookie",
28562
+ "browser": true,
28563
+ "args": [
28564
+ {
28565
+ "name": "title",
28566
+ "type": "string",
28567
+ "required": true,
28568
+ "positional": true,
28569
+ "help": "Pin title"
28570
+ },
28571
+ {
28572
+ "name": "image-url",
28573
+ "type": "string",
28574
+ "required": false,
28575
+ "help": "Image URL to pin (required unless --image)"
28576
+ },
28577
+ {
28578
+ "name": "image",
28579
+ "type": "string",
28580
+ "required": false,
28581
+ "help": "(best-effort) local image file to upload"
28582
+ },
28583
+ {
28584
+ "name": "board",
28585
+ "type": "string",
28586
+ "required": true,
28587
+ "help": "Target board name"
28588
+ },
28589
+ {
28590
+ "name": "description",
28591
+ "type": "string",
28592
+ "required": false,
28593
+ "help": "Pin description"
28594
+ },
28595
+ {
28596
+ "name": "link",
28597
+ "type": "string",
28598
+ "required": false,
28599
+ "help": "Destination/landing URL (defaults to the image URL)"
28600
+ },
28601
+ {
28602
+ "name": "create-board",
28603
+ "type": "boolean",
28604
+ "default": false,
28605
+ "required": false,
28606
+ "help": "Create the board if it does not exist"
28607
+ }
28608
+ ],
28609
+ "columns": [
28610
+ "status",
28611
+ "pin_id",
28612
+ "url"
28613
+ ],
28614
+ "type": "js",
28615
+ "modulePath": "pinterest/publish.js",
28616
+ "sourceFile": "pinterest/publish.js",
28617
+ "navigateBefore": "https://www.pinterest.com"
28618
+ },
28619
+ {
28620
+ "site": "pinterest",
28621
+ "name": "whoami",
28622
+ "description": "Show the current logged-in pinterest account",
28623
+ "access": "read",
28624
+ "domain": "www.pinterest.com",
28625
+ "strategy": "cookie",
28626
+ "browser": true,
28627
+ "args": [],
28628
+ "columns": [
28629
+ "logged_in",
28630
+ "site",
28631
+ "username",
28632
+ "url"
28633
+ ],
28634
+ "type": "js",
28635
+ "modulePath": "pinterest/auth.js",
28636
+ "sourceFile": "pinterest/auth.js",
28637
+ "navigateBefore": false,
28638
+ "siteSession": "persistent"
28639
+ },
27218
28640
  {
27219
28641
  "site": "pixiv",
27220
28642
  "name": "detail",
@@ -28421,6 +29843,109 @@
28421
29843
  "modulePath": "pypi/package.js",
28422
29844
  "sourceFile": "pypi/package.js"
28423
29845
  },
29846
+ {
29847
+ "site": "qiita",
29848
+ "name": "login",
29849
+ "description": "Configure Qiita with a personal access token (no browser).",
29850
+ "access": "write",
29851
+ "domain": "qiita.com",
29852
+ "strategy": "local",
29853
+ "browser": false,
29854
+ "args": [
29855
+ {
29856
+ "name": "token",
29857
+ "type": "string",
29858
+ "required": false,
29859
+ "help": "Qiita personal access token (needs write_qiita scope)"
29860
+ }
29861
+ ],
29862
+ "columns": [
29863
+ "status",
29864
+ "logged_in",
29865
+ "site",
29866
+ "id",
29867
+ "name"
29868
+ ],
29869
+ "type": "js",
29870
+ "modulePath": "qiita/auth.js",
29871
+ "sourceFile": "qiita/auth.js"
29872
+ },
29873
+ {
29874
+ "site": "qiita",
29875
+ "name": "publish",
29876
+ "description": "Publish or update a Qiita item (markdown). Tags are required; public by default.",
29877
+ "access": "write",
29878
+ "domain": "qiita.com",
29879
+ "strategy": "local",
29880
+ "browser": false,
29881
+ "args": [
29882
+ {
29883
+ "name": "title",
29884
+ "type": "string",
29885
+ "required": false,
29886
+ "help": "Item title (required for new items)"
29887
+ },
29888
+ {
29889
+ "name": "body",
29890
+ "type": "string",
29891
+ "required": false,
29892
+ "help": "Item body in Markdown (or use --body-file)"
29893
+ },
29894
+ {
29895
+ "name": "body-file",
29896
+ "type": "string",
29897
+ "required": false,
29898
+ "help": "Path to a Markdown file for the body"
29899
+ },
29900
+ {
29901
+ "name": "tags",
29902
+ "type": "string",
29903
+ "required": false,
29904
+ "help": "Comma-separated tags (REQUIRED, at least 1)"
29905
+ },
29906
+ {
29907
+ "name": "private",
29908
+ "type": "boolean",
29909
+ "default": false,
29910
+ "required": false,
29911
+ "help": "Post as private (default: public)"
29912
+ },
29913
+ {
29914
+ "name": "id",
29915
+ "type": "string",
29916
+ "required": false,
29917
+ "help": "Existing item id to update (PATCH instead of POST)"
29918
+ }
29919
+ ],
29920
+ "columns": [
29921
+ "status",
29922
+ "id",
29923
+ "url",
29924
+ "private"
29925
+ ],
29926
+ "type": "js",
29927
+ "modulePath": "qiita/publish.js",
29928
+ "sourceFile": "qiita/publish.js"
29929
+ },
29930
+ {
29931
+ "site": "qiita",
29932
+ "name": "whoami",
29933
+ "description": "Show the configured qiita account",
29934
+ "access": "read",
29935
+ "domain": "qiita.com",
29936
+ "strategy": "local",
29937
+ "browser": false,
29938
+ "args": [],
29939
+ "columns": [
29940
+ "logged_in",
29941
+ "site",
29942
+ "id",
29943
+ "name"
29944
+ ],
29945
+ "type": "js",
29946
+ "modulePath": "qiita/auth.js",
29947
+ "sourceFile": "qiita/auth.js"
29948
+ },
28424
29949
  {
28425
29950
  "site": "qoder",
28426
29951
  "name": "account",
@@ -34176,6 +35701,38 @@
34176
35701
  "sourceFile": "substack/feed.js",
34177
35702
  "navigateBefore": "https://substack.com"
34178
35703
  },
35704
+ {
35705
+ "site": "substack",
35706
+ "name": "login",
35707
+ "description": "Open substack login and wait until the browser session is authenticated",
35708
+ "access": "write",
35709
+ "domain": "substack.com",
35710
+ "strategy": "cookie",
35711
+ "browser": true,
35712
+ "args": [
35713
+ {
35714
+ "name": "timeout",
35715
+ "type": "int",
35716
+ "default": 300,
35717
+ "required": false,
35718
+ "help": "Maximum seconds to wait for the user to finish login"
35719
+ }
35720
+ ],
35721
+ "columns": [
35722
+ "status",
35723
+ "logged_in",
35724
+ "site",
35725
+ "user_id",
35726
+ "publication",
35727
+ "url"
35728
+ ],
35729
+ "type": "js",
35730
+ "modulePath": "substack/auth.js",
35731
+ "sourceFile": "substack/auth.js",
35732
+ "navigateBefore": false,
35733
+ "siteSession": "persistent",
35734
+ "defaultWindowMode": "foreground"
35735
+ },
34179
35736
  {
34180
35737
  "site": "substack",
34181
35738
  "name": "publication",
@@ -34212,6 +35769,79 @@
34212
35769
  "sourceFile": "substack/publication.js",
34213
35770
  "navigateBefore": "https://substack.com"
34214
35771
  },
35772
+ {
35773
+ "site": "substack",
35774
+ "name": "publish",
35775
+ "description": "Publish a post to your Substack publication (or save a draft with --draft)",
35776
+ "access": "write",
35777
+ "domain": "substack.com",
35778
+ "strategy": "cookie",
35779
+ "browser": true,
35780
+ "args": [
35781
+ {
35782
+ "name": "title",
35783
+ "type": "string",
35784
+ "required": true,
35785
+ "positional": true,
35786
+ "help": "Post title"
35787
+ },
35788
+ {
35789
+ "name": "body",
35790
+ "type": "string",
35791
+ "required": false,
35792
+ "help": "Post body text (blank lines split paragraphs)"
35793
+ },
35794
+ {
35795
+ "name": "subtitle",
35796
+ "type": "string",
35797
+ "required": false,
35798
+ "help": "Optional subtitle"
35799
+ },
35800
+ {
35801
+ "name": "images",
35802
+ "type": "string",
35803
+ "required": false,
35804
+ "help": "Images: comma-separated local paths and/or http(s) urls"
35805
+ },
35806
+ {
35807
+ "name": "audience",
35808
+ "type": "string",
35809
+ "default": "everyone",
35810
+ "required": false,
35811
+ "help": "Visibility: everyone | only_paid"
35812
+ },
35813
+ {
35814
+ "name": "section",
35815
+ "type": "string",
35816
+ "required": false,
35817
+ "help": "Section name to file the post under"
35818
+ },
35819
+ {
35820
+ "name": "send",
35821
+ "type": "boolean",
35822
+ "default": false,
35823
+ "required": false,
35824
+ "help": "Also email subscribers on publish"
35825
+ },
35826
+ {
35827
+ "name": "draft",
35828
+ "type": "boolean",
35829
+ "default": false,
35830
+ "required": false,
35831
+ "help": "Create the draft but do not publish"
35832
+ }
35833
+ ],
35834
+ "columns": [
35835
+ "status",
35836
+ "publication",
35837
+ "draft_id",
35838
+ "url"
35839
+ ],
35840
+ "type": "js",
35841
+ "modulePath": "substack/publish.js",
35842
+ "sourceFile": "substack/publish.js",
35843
+ "navigateBefore": "https://substack.com"
35844
+ },
34215
35845
  {
34216
35846
  "site": "substack",
34217
35847
  "name": "search",
@@ -34259,6 +35889,28 @@
34259
35889
  "modulePath": "substack/search.js",
34260
35890
  "sourceFile": "substack/search.js"
34261
35891
  },
35892
+ {
35893
+ "site": "substack",
35894
+ "name": "whoami",
35895
+ "description": "Show the current logged-in substack account",
35896
+ "access": "read",
35897
+ "domain": "substack.com",
35898
+ "strategy": "cookie",
35899
+ "browser": true,
35900
+ "args": [],
35901
+ "columns": [
35902
+ "logged_in",
35903
+ "site",
35904
+ "user_id",
35905
+ "publication",
35906
+ "url"
35907
+ ],
35908
+ "type": "js",
35909
+ "modulePath": "substack/auth.js",
35910
+ "sourceFile": "substack/auth.js",
35911
+ "navigateBefore": false,
35912
+ "siteSession": "persistent"
35913
+ },
34262
35914
  {
34263
35915
  "site": "suno",
34264
35916
  "name": "download",
@@ -34800,6 +36452,208 @@
34800
36452
  "sourceFile": "tdx/hot-rank.js",
34801
36453
  "navigateBefore": true
34802
36454
  },
36455
+ {
36456
+ "site": "telegram",
36457
+ "name": "login",
36458
+ "description": "Configure a Telegram bot token + target channel id (no browser).",
36459
+ "access": "write",
36460
+ "domain": "telegram.org",
36461
+ "strategy": "local",
36462
+ "browser": false,
36463
+ "args": [
36464
+ {
36465
+ "name": "token",
36466
+ "type": "string",
36467
+ "required": false,
36468
+ "help": "Bot token from @BotFather"
36469
+ },
36470
+ {
36471
+ "name": "chat",
36472
+ "type": "string",
36473
+ "required": false,
36474
+ "help": "Channel id: @channelusername or -100xxxxxxxxxx (bot must be an admin)"
36475
+ }
36476
+ ],
36477
+ "columns": [
36478
+ "status",
36479
+ "logged_in",
36480
+ "site",
36481
+ "id",
36482
+ "username",
36483
+ "name",
36484
+ "chat"
36485
+ ],
36486
+ "type": "js",
36487
+ "modulePath": "telegram/auth.js",
36488
+ "sourceFile": "telegram/auth.js"
36489
+ },
36490
+ {
36491
+ "site": "telegram",
36492
+ "name": "post",
36493
+ "description": "Send a message to the configured Telegram channel (text + optional media)",
36494
+ "access": "write",
36495
+ "domain": "telegram.org",
36496
+ "strategy": "local",
36497
+ "browser": false,
36498
+ "args": [
36499
+ {
36500
+ "name": "text",
36501
+ "type": "string",
36502
+ "required": true,
36503
+ "positional": true,
36504
+ "help": "Message text / media caption"
36505
+ },
36506
+ {
36507
+ "name": "media",
36508
+ "type": "string",
36509
+ "required": false,
36510
+ "help": "Media paths, comma-separated, max 10 (images/video)"
36511
+ }
36512
+ ],
36513
+ "columns": [
36514
+ "status",
36515
+ "message_id",
36516
+ "url"
36517
+ ],
36518
+ "type": "js",
36519
+ "modulePath": "telegram/post.js",
36520
+ "sourceFile": "telegram/post.js"
36521
+ },
36522
+ {
36523
+ "site": "telegram",
36524
+ "name": "whoami",
36525
+ "description": "Show the configured telegram account",
36526
+ "access": "read",
36527
+ "domain": "telegram.org",
36528
+ "strategy": "local",
36529
+ "browser": false,
36530
+ "args": [],
36531
+ "columns": [
36532
+ "logged_in",
36533
+ "site",
36534
+ "id",
36535
+ "username",
36536
+ "name",
36537
+ "chat"
36538
+ ],
36539
+ "type": "js",
36540
+ "modulePath": "telegram/auth.js",
36541
+ "sourceFile": "telegram/auth.js"
36542
+ },
36543
+ {
36544
+ "site": "threads",
36545
+ "name": "login",
36546
+ "description": "Configure Threads with a Meta long-lived access token (no browser).",
36547
+ "access": "write",
36548
+ "domain": "threads.net",
36549
+ "strategy": "local",
36550
+ "browser": false,
36551
+ "args": [
36552
+ {
36553
+ "name": "token",
36554
+ "type": "string",
36555
+ "required": false,
36556
+ "help": "Threads long-lived access token (Meta app)"
36557
+ },
36558
+ {
36559
+ "name": "user_id",
36560
+ "type": "string",
36561
+ "required": false,
36562
+ "help": "Threads user id (auto-resolved via /me if omitted)"
36563
+ }
36564
+ ],
36565
+ "columns": [
36566
+ "status",
36567
+ "logged_in",
36568
+ "site",
36569
+ "id",
36570
+ "username"
36571
+ ],
36572
+ "type": "js",
36573
+ "modulePath": "threads/auth.js",
36574
+ "sourceFile": "threads/auth.js"
36575
+ },
36576
+ {
36577
+ "site": "threads",
36578
+ "name": "post",
36579
+ "description": "Publish a Threads post (text / single image / video / image carousel). Two-step container → publish.",
36580
+ "access": "write",
36581
+ "domain": "threads.net",
36582
+ "strategy": "local",
36583
+ "browser": false,
36584
+ "args": [
36585
+ {
36586
+ "name": "text",
36587
+ "type": "string",
36588
+ "required": false,
36589
+ "help": "Post text (required for TEXT; optional caption otherwise)"
36590
+ },
36591
+ {
36592
+ "name": "image-url",
36593
+ "type": "string",
36594
+ "required": false,
36595
+ "help": "Single public image URL (IMAGE post)"
36596
+ },
36597
+ {
36598
+ "name": "video-url",
36599
+ "type": "string",
36600
+ "required": false,
36601
+ "help": "Single public video URL (VIDEO post)"
36602
+ },
36603
+ {
36604
+ "name": "images",
36605
+ "type": "string",
36606
+ "required": false,
36607
+ "help": "Comma-separated image URLs for a carousel (2-20)"
36608
+ },
36609
+ {
36610
+ "name": "alt-text",
36611
+ "type": "string",
36612
+ "required": false,
36613
+ "help": "Accessibility alt text (single media)"
36614
+ },
36615
+ {
36616
+ "name": "link-attachment",
36617
+ "type": "string",
36618
+ "required": false,
36619
+ "help": "Link attachment URL (TEXT posts only)"
36620
+ },
36621
+ {
36622
+ "name": "reply-to-id",
36623
+ "type": "string",
36624
+ "required": false,
36625
+ "help": "Reply to an existing Threads media id"
36626
+ }
36627
+ ],
36628
+ "columns": [
36629
+ "status",
36630
+ "id",
36631
+ "creation_id",
36632
+ "permalink"
36633
+ ],
36634
+ "type": "js",
36635
+ "modulePath": "threads/publish.js",
36636
+ "sourceFile": "threads/publish.js"
36637
+ },
36638
+ {
36639
+ "site": "threads",
36640
+ "name": "whoami",
36641
+ "description": "Show the configured threads account",
36642
+ "access": "read",
36643
+ "domain": "threads.net",
36644
+ "strategy": "local",
36645
+ "browser": false,
36646
+ "args": [],
36647
+ "columns": [
36648
+ "logged_in",
36649
+ "site",
36650
+ "id",
36651
+ "username"
36652
+ ],
36653
+ "type": "js",
36654
+ "modulePath": "threads/auth.js",
36655
+ "sourceFile": "threads/auth.js"
36656
+ },
34803
36657
  {
34804
36658
  "site": "ths",
34805
36659
  "name": "hot-rank",
@@ -35357,6 +37211,53 @@
35357
37211
  "sourceFile": "tiktok/profile.js",
35358
37212
  "navigateBefore": "https://www.tiktok.com"
35359
37213
  },
37214
+ {
37215
+ "site": "tiktok",
37216
+ "name": "publish",
37217
+ "description": "Publish a video to TikTok (one command: upload + caption + publish; optional schedule)",
37218
+ "access": "write",
37219
+ "domain": "www.tiktok.com",
37220
+ "strategy": "cookie",
37221
+ "browser": true,
37222
+ "args": [
37223
+ {
37224
+ "name": "video",
37225
+ "type": "str",
37226
+ "required": true,
37227
+ "positional": true,
37228
+ "help": "Video file path"
37229
+ },
37230
+ {
37231
+ "name": "title",
37232
+ "type": "str",
37233
+ "required": true,
37234
+ "help": "Caption / title text"
37235
+ },
37236
+ {
37237
+ "name": "tags",
37238
+ "type": "str",
37239
+ "default": "",
37240
+ "required": false,
37241
+ "help": "Comma-separated hashtags (without #)"
37242
+ },
37243
+ {
37244
+ "name": "schedule",
37245
+ "type": "str",
37246
+ "default": "",
37247
+ "required": false,
37248
+ "help": "Scheduled publish time (ISO8601 or Unix seconds); omit to post now"
37249
+ }
37250
+ ],
37251
+ "columns": [
37252
+ "status",
37253
+ "title",
37254
+ "url"
37255
+ ],
37256
+ "type": "js",
37257
+ "modulePath": "tiktok/publish.js",
37258
+ "sourceFile": "tiktok/publish.js",
37259
+ "navigateBefore": false
37260
+ },
35360
37261
  {
35361
37262
  "site": "tiktok",
35362
37263
  "name": "save",
@@ -37012,6 +38913,148 @@
37012
38913
  "modulePath": "trae-solo/workspaces-fs.js",
37013
38914
  "sourceFile": "trae-solo/workspaces-fs.js"
37014
38915
  },
38916
+ {
38917
+ "site": "tumblr",
38918
+ "name": "login",
38919
+ "description": "Configure Tumblr with OAuth1 consumer + token credentials (no browser).",
38920
+ "access": "write",
38921
+ "domain": "tumblr.com",
38922
+ "strategy": "local",
38923
+ "browser": false,
38924
+ "args": [
38925
+ {
38926
+ "name": "consumer_key",
38927
+ "type": "string",
38928
+ "required": false,
38929
+ "help": "OAuth consumer key (from tumblr.com/oauth/apps)"
38930
+ },
38931
+ {
38932
+ "name": "consumer_secret",
38933
+ "type": "string",
38934
+ "required": false,
38935
+ "help": "OAuth consumer secret"
38936
+ },
38937
+ {
38938
+ "name": "oauth_token",
38939
+ "type": "string",
38940
+ "required": false,
38941
+ "help": "OAuth access token"
38942
+ },
38943
+ {
38944
+ "name": "oauth_token_secret",
38945
+ "type": "string",
38946
+ "required": false,
38947
+ "help": "OAuth access token secret"
38948
+ },
38949
+ {
38950
+ "name": "default_blog",
38951
+ "type": "string",
38952
+ "required": false,
38953
+ "help": "Default blog identifier for posting (else primary blog)"
38954
+ }
38955
+ ],
38956
+ "columns": [
38957
+ "status",
38958
+ "logged_in",
38959
+ "site",
38960
+ "name",
38961
+ "blogs",
38962
+ "default_blog"
38963
+ ],
38964
+ "type": "js",
38965
+ "modulePath": "tumblr/auth.js",
38966
+ "sourceFile": "tumblr/auth.js"
38967
+ },
38968
+ {
38969
+ "site": "tumblr",
38970
+ "name": "post",
38971
+ "description": "Create a Tumblr post (NPF: text/photo/link). Choose blog with --blog; state defaults to published.",
38972
+ "access": "write",
38973
+ "domain": "tumblr.com",
38974
+ "strategy": "local",
38975
+ "browser": false,
38976
+ "args": [
38977
+ {
38978
+ "name": "text",
38979
+ "type": "string",
38980
+ "required": false,
38981
+ "help": "Body text block"
38982
+ },
38983
+ {
38984
+ "name": "title",
38985
+ "type": "string",
38986
+ "required": false,
38987
+ "help": "Heading text block (rendered as a title)"
38988
+ },
38989
+ {
38990
+ "name": "image-url",
38991
+ "type": "string",
38992
+ "required": false,
38993
+ "help": "Image URL (photo block)"
38994
+ },
38995
+ {
38996
+ "name": "link",
38997
+ "type": "string",
38998
+ "required": false,
38999
+ "help": "Link URL (link block)"
39000
+ },
39001
+ {
39002
+ "name": "tags",
39003
+ "type": "string",
39004
+ "required": false,
39005
+ "help": "Comma-separated tags"
39006
+ },
39007
+ {
39008
+ "name": "state",
39009
+ "type": "string",
39010
+ "default": "published",
39011
+ "required": false,
39012
+ "help": "published | draft | queue | private",
39013
+ "choices": [
39014
+ "published",
39015
+ "draft",
39016
+ "queue",
39017
+ "private"
39018
+ ]
39019
+ },
39020
+ {
39021
+ "name": "blog",
39022
+ "type": "string",
39023
+ "required": false,
39024
+ "help": "Blog identifier to post to (else credential default_blog / primary)"
39025
+ }
39026
+ ],
39027
+ "columns": [
39028
+ "status",
39029
+ "id",
39030
+ "blog",
39031
+ "state",
39032
+ "url"
39033
+ ],
39034
+ "type": "js",
39035
+ "modulePath": "tumblr/publish.js",
39036
+ "sourceFile": "tumblr/publish.js"
39037
+ },
39038
+ {
39039
+ "site": "tumblr",
39040
+ "name": "whoami",
39041
+ "description": "Show the configured tumblr account",
39042
+ "access": "read",
39043
+ "domain": "tumblr.com",
39044
+ "strategy": "local",
39045
+ "browser": false,
39046
+ "args": [],
39047
+ "columns": [
39048
+ "logged_in",
39049
+ "site",
39050
+ "name",
39051
+ "blogs",
39052
+ "default_blog"
39053
+ ],
39054
+ "type": "js",
39055
+ "modulePath": "tumblr/auth.js",
39056
+ "sourceFile": "tumblr/auth.js"
39057
+ },
37015
39058
  {
37016
39059
  "site": "tvmaze",
37017
39060
  "name": "search",
@@ -41485,6 +43528,112 @@
41485
43528
  "modulePath": "wikipedia/trending.js",
41486
43529
  "sourceFile": "wikipedia/trending.js"
41487
43530
  },
43531
+ {
43532
+ "site": "wordpress",
43533
+ "name": "publish",
43534
+ "description": "Publish a post to a self-hosted WordPress site via the REST API. A Markdown body is converted to HTML automatically. Defaults to a draft for safety — pass --status publish to go live.",
43535
+ "access": "write",
43536
+ "domain": "wordpress.org",
43537
+ "strategy": "local",
43538
+ "browser": false,
43539
+ "args": [
43540
+ {
43541
+ "name": "title",
43542
+ "type": "str",
43543
+ "required": true,
43544
+ "help": "Post title"
43545
+ },
43546
+ {
43547
+ "name": "content",
43548
+ "type": "str",
43549
+ "required": false,
43550
+ "help": "Post body (Markdown or HTML). Or use --file."
43551
+ },
43552
+ {
43553
+ "name": "file",
43554
+ "type": "str",
43555
+ "required": false,
43556
+ "help": "Read the post body from a local file instead of --content"
43557
+ },
43558
+ {
43559
+ "name": "markup",
43560
+ "type": "str",
43561
+ "default": "auto",
43562
+ "required": false,
43563
+ "help": "How to interpret the body: auto-detect (default), markdown, or html",
43564
+ "choices": [
43565
+ "auto",
43566
+ "markdown",
43567
+ "html"
43568
+ ]
43569
+ },
43570
+ {
43571
+ "name": "status",
43572
+ "type": "str",
43573
+ "default": "draft",
43574
+ "required": false,
43575
+ "help": "Post status (default: draft)",
43576
+ "choices": [
43577
+ "draft",
43578
+ "publish",
43579
+ "pending",
43580
+ "private"
43581
+ ]
43582
+ },
43583
+ {
43584
+ "name": "excerpt",
43585
+ "type": "str",
43586
+ "required": false,
43587
+ "help": "Optional excerpt / summary"
43588
+ },
43589
+ {
43590
+ "name": "slug",
43591
+ "type": "str",
43592
+ "required": false,
43593
+ "help": "Optional URL slug"
43594
+ },
43595
+ {
43596
+ "name": "categories",
43597
+ "type": "str",
43598
+ "required": false,
43599
+ "help": "Comma-separated category IDs"
43600
+ },
43601
+ {
43602
+ "name": "tags",
43603
+ "type": "str",
43604
+ "required": false,
43605
+ "help": "Comma-separated tag IDs"
43606
+ }
43607
+ ],
43608
+ "columns": [
43609
+ "id",
43610
+ "status",
43611
+ "title",
43612
+ "url"
43613
+ ],
43614
+ "type": "js",
43615
+ "modulePath": "wordpress/publish.js",
43616
+ "sourceFile": "wordpress/publish.js"
43617
+ },
43618
+ {
43619
+ "site": "wordpress",
43620
+ "name": "whoami",
43621
+ "description": "Verify the WordPress connection by fetching the authenticated user (GET /wp/v2/users/me). Use this to test that the site URL and Application Password are valid before publishing.",
43622
+ "access": "read",
43623
+ "domain": "wordpress.org",
43624
+ "strategy": "local",
43625
+ "browser": false,
43626
+ "args": [],
43627
+ "columns": [
43628
+ "id",
43629
+ "name",
43630
+ "slug",
43631
+ "site"
43632
+ ],
43633
+ "type": "js",
43634
+ "modulePath": "wordpress/whoami.js",
43635
+ "sourceFile": "wordpress/whoami.js"
43636
+ },
41488
43637
  {
41489
43638
  "site": "woshipm",
41490
43639
  "name": "article",
@@ -44915,6 +47064,80 @@
44915
47064
  "sourceFile": "youtube/playlist.js",
44916
47065
  "navigateBefore": "https://www.youtube.com"
44917
47066
  },
47067
+ {
47068
+ "site": "youtube",
47069
+ "name": "publish",
47070
+ "description": "Publish a video to YouTube via Studio (one command: upload + metadata + publish)",
47071
+ "access": "write",
47072
+ "domain": "www.youtube.com",
47073
+ "strategy": "cookie",
47074
+ "browser": true,
47075
+ "args": [
47076
+ {
47077
+ "name": "video",
47078
+ "type": "str",
47079
+ "required": true,
47080
+ "positional": true,
47081
+ "help": "Video file path"
47082
+ },
47083
+ {
47084
+ "name": "title",
47085
+ "type": "str",
47086
+ "required": true,
47087
+ "help": "Video title (≤100 chars)"
47088
+ },
47089
+ {
47090
+ "name": "description",
47091
+ "type": "str",
47092
+ "default": "",
47093
+ "required": false,
47094
+ "help": "Video description"
47095
+ },
47096
+ {
47097
+ "name": "tags",
47098
+ "type": "str",
47099
+ "default": "",
47100
+ "required": false,
47101
+ "help": "Comma-separated tags"
47102
+ },
47103
+ {
47104
+ "name": "thumbnail",
47105
+ "type": "str",
47106
+ "default": "",
47107
+ "required": false,
47108
+ "help": "Thumbnail image path (optional)"
47109
+ },
47110
+ {
47111
+ "name": "playlist",
47112
+ "type": "str",
47113
+ "default": "",
47114
+ "required": false,
47115
+ "help": "Playlist name to add to (optional)"
47116
+ },
47117
+ {
47118
+ "name": "visibility",
47119
+ "type": "str",
47120
+ "default": "public",
47121
+ "required": false,
47122
+ "help": "Visibility",
47123
+ "choices": [
47124
+ "public",
47125
+ "unlisted",
47126
+ "private"
47127
+ ]
47128
+ }
47129
+ ],
47130
+ "columns": [
47131
+ "status",
47132
+ "title",
47133
+ "visibility",
47134
+ "url"
47135
+ ],
47136
+ "type": "js",
47137
+ "modulePath": "youtube/publish.js",
47138
+ "sourceFile": "youtube/publish.js",
47139
+ "navigateBefore": false
47140
+ },
44918
47141
  {
44919
47142
  "site": "youtube",
44920
47143
  "name": "search",