@jackwener/opencli 1.0.5 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/README.md +36 -10
- package/README.zh-CN.md +3 -0
- package/SKILL.md +7 -2
- package/dist/bilibili.js +4 -2
- package/dist/cli-manifest.json +506 -6
- package/dist/cli.js +51 -1
- package/dist/clis/antigravity/serve.js +296 -47
- package/dist/clis/arxiv/paper.d.ts +1 -0
- package/dist/clis/arxiv/paper.js +21 -0
- package/dist/clis/arxiv/search.d.ts +1 -0
- package/dist/clis/arxiv/search.js +24 -0
- package/dist/clis/arxiv/utils.d.ts +18 -0
- package/dist/clis/arxiv/utils.js +49 -0
- package/dist/clis/boss/batchgreet.d.ts +1 -0
- package/dist/clis/boss/batchgreet.js +147 -0
- package/dist/clis/boss/exchange.d.ts +1 -0
- package/dist/clis/boss/exchange.js +111 -0
- package/dist/clis/boss/greet.d.ts +1 -0
- package/dist/clis/boss/greet.js +175 -0
- package/dist/clis/boss/invite.d.ts +1 -0
- package/dist/clis/boss/invite.js +158 -0
- package/dist/clis/boss/joblist.d.ts +1 -0
- package/dist/clis/boss/joblist.js +55 -0
- package/dist/clis/boss/mark.d.ts +1 -0
- package/dist/clis/boss/mark.js +141 -0
- package/dist/clis/boss/recommend.d.ts +1 -0
- package/dist/clis/boss/recommend.js +83 -0
- package/dist/clis/boss/stats.d.ts +1 -0
- package/dist/clis/boss/stats.js +116 -0
- package/dist/clis/sinafinance/news.d.ts +7 -0
- package/dist/clis/sinafinance/news.js +61 -0
- package/dist/clis/wikipedia/search.d.ts +1 -0
- package/dist/clis/wikipedia/search.js +30 -0
- package/dist/clis/wikipedia/summary.d.ts +1 -0
- package/dist/clis/wikipedia/summary.js +28 -0
- package/dist/clis/wikipedia/utils.d.ts +8 -0
- package/dist/clis/wikipedia/utils.js +18 -0
- package/dist/clis/xiaohongshu/creator-note-detail.d.ts +64 -5
- package/dist/clis/xiaohongshu/creator-note-detail.js +258 -69
- package/dist/clis/xiaohongshu/creator-note-detail.test.d.ts +1 -0
- package/dist/clis/xiaohongshu/creator-note-detail.test.js +211 -0
- package/dist/clis/xiaohongshu/creator-notes-summary.d.ts +28 -0
- package/dist/clis/xiaohongshu/creator-notes-summary.js +92 -0
- package/dist/clis/xiaohongshu/creator-notes-summary.test.d.ts +1 -0
- package/dist/clis/xiaohongshu/creator-notes-summary.test.js +49 -0
- package/dist/clis/xiaohongshu/creator-notes.d.ts +18 -5
- package/dist/clis/xiaohongshu/creator-notes.js +159 -71
- package/dist/clis/xiaohongshu/creator-notes.test.d.ts +1 -0
- package/dist/clis/xiaohongshu/creator-notes.test.js +162 -0
- package/dist/external.d.ts +20 -0
- package/dist/external.js +159 -0
- package/docs/.vitepress/config.mts +1 -0
- package/docs/public/CNAME +1 -0
- package/package.json +1 -1
- package/src/bilibili.ts +4 -2
- package/src/browser/cdp.ts +3 -3
- package/src/cli.ts +56 -1
- package/src/clis/antigravity/README.md +3 -46
- package/src/clis/antigravity/serve.ts +323 -50
- package/src/clis/arxiv/paper.ts +21 -0
- package/src/clis/arxiv/search.ts +24 -0
- package/src/clis/arxiv/utils.ts +63 -0
- package/src/clis/boss/batchgreet.ts +167 -0
- package/src/clis/boss/exchange.ts +126 -0
- package/src/clis/boss/greet.ts +198 -0
- package/src/clis/boss/invite.ts +177 -0
- package/src/clis/boss/joblist.ts +63 -0
- package/src/clis/boss/mark.ts +155 -0
- package/src/clis/boss/recommend.ts +94 -0
- package/src/clis/boss/stats.ts +130 -0
- package/src/clis/chaoxing/README.md +2 -24
- package/src/clis/chatgpt/README.md +3 -42
- package/src/clis/chatwise/README.md +3 -36
- package/src/clis/codex/README.md +3 -32
- package/src/clis/cursor/README.md +3 -31
- package/src/clis/discord-app/README.md +2 -25
- package/src/clis/feishu/README.md +2 -17
- package/src/clis/neteasemusic/README.md +3 -29
- package/src/clis/notion/README.md +2 -26
- package/src/clis/sinafinance/news.ts +76 -0
- package/src/clis/wechat/README.md +2 -25
- package/src/clis/wikipedia/search.ts +32 -0
- package/src/clis/wikipedia/summary.ts +28 -0
- package/src/clis/wikipedia/utils.ts +20 -0
- package/src/clis/xiaohongshu/creator-note-detail.test.ts +223 -0
- package/src/clis/xiaohongshu/creator-note-detail.ts +340 -72
- package/src/clis/xiaohongshu/creator-notes-summary.test.ts +54 -0
- package/src/clis/xiaohongshu/creator-notes-summary.ts +120 -0
- package/src/clis/xiaohongshu/creator-notes.test.ts +178 -0
- package/src/clis/xiaohongshu/creator-notes.ts +215 -75
- package/src/daemon.ts +3 -3
- package/src/external-clis.yaml +39 -0
- package/src/external.ts +182 -0
- package/CDP.md +0 -103
- package/CDP.zh-CN.md +0 -103
- package/CLI-ELECTRON.md +0 -125
package/dist/cli-manifest.json
CHANGED
|
@@ -260,6 +260,73 @@
|
|
|
260
260
|
"type": "ts",
|
|
261
261
|
"modulePath": "apple-podcasts/utils.test.js"
|
|
262
262
|
},
|
|
263
|
+
{
|
|
264
|
+
"site": "arxiv",
|
|
265
|
+
"name": "paper",
|
|
266
|
+
"description": "Get arXiv paper details by ID",
|
|
267
|
+
"strategy": "public",
|
|
268
|
+
"browser": false,
|
|
269
|
+
"args": [
|
|
270
|
+
{
|
|
271
|
+
"name": "id",
|
|
272
|
+
"type": "str",
|
|
273
|
+
"required": true,
|
|
274
|
+
"positional": true,
|
|
275
|
+
"help": "arXiv paper ID (e.g. 1706.03762)"
|
|
276
|
+
}
|
|
277
|
+
],
|
|
278
|
+
"type": "ts",
|
|
279
|
+
"modulePath": "arxiv/paper.js",
|
|
280
|
+
"columns": [
|
|
281
|
+
"id",
|
|
282
|
+
"title",
|
|
283
|
+
"authors",
|
|
284
|
+
"published",
|
|
285
|
+
"abstract",
|
|
286
|
+
"url"
|
|
287
|
+
]
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"site": "arxiv",
|
|
291
|
+
"name": "search",
|
|
292
|
+
"description": "Search arXiv papers",
|
|
293
|
+
"strategy": "public",
|
|
294
|
+
"browser": false,
|
|
295
|
+
"args": [
|
|
296
|
+
{
|
|
297
|
+
"name": "keyword",
|
|
298
|
+
"type": "str",
|
|
299
|
+
"required": true,
|
|
300
|
+
"positional": true,
|
|
301
|
+
"help": "Search keyword (e.g. "
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
"name": "limit",
|
|
305
|
+
"type": "int",
|
|
306
|
+
"default": 10,
|
|
307
|
+
"required": false,
|
|
308
|
+
"help": "Max results (max 25)"
|
|
309
|
+
}
|
|
310
|
+
],
|
|
311
|
+
"type": "ts",
|
|
312
|
+
"modulePath": "arxiv/search.js",
|
|
313
|
+
"columns": [
|
|
314
|
+
"id",
|
|
315
|
+
"title",
|
|
316
|
+
"authors",
|
|
317
|
+
"published"
|
|
318
|
+
]
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
"site": "arxiv",
|
|
322
|
+
"name": "utils",
|
|
323
|
+
"description": "",
|
|
324
|
+
"strategy": "cookie",
|
|
325
|
+
"browser": true,
|
|
326
|
+
"args": [],
|
|
327
|
+
"type": "ts",
|
|
328
|
+
"modulePath": "arxiv/utils.js"
|
|
329
|
+
},
|
|
263
330
|
{
|
|
264
331
|
"site": "barchart",
|
|
265
332
|
"name": "flow",
|
|
@@ -863,6 +930,44 @@
|
|
|
863
930
|
"url"
|
|
864
931
|
]
|
|
865
932
|
},
|
|
933
|
+
{
|
|
934
|
+
"site": "boss",
|
|
935
|
+
"name": "batchgreet",
|
|
936
|
+
"description": "BOSS直聘批量向推荐候选人发送招呼",
|
|
937
|
+
"strategy": "cookie",
|
|
938
|
+
"browser": true,
|
|
939
|
+
"args": [
|
|
940
|
+
{
|
|
941
|
+
"name": "job_id",
|
|
942
|
+
"type": "str",
|
|
943
|
+
"default": "",
|
|
944
|
+
"required": false,
|
|
945
|
+
"help": "Filter by encrypted job ID (greet all jobs if empty)"
|
|
946
|
+
},
|
|
947
|
+
{
|
|
948
|
+
"name": "limit",
|
|
949
|
+
"type": "int",
|
|
950
|
+
"default": 5,
|
|
951
|
+
"required": false,
|
|
952
|
+
"help": "Max candidates to greet"
|
|
953
|
+
},
|
|
954
|
+
{
|
|
955
|
+
"name": "text",
|
|
956
|
+
"type": "str",
|
|
957
|
+
"default": "",
|
|
958
|
+
"required": false,
|
|
959
|
+
"help": "Custom greeting message (uses default if empty)"
|
|
960
|
+
}
|
|
961
|
+
],
|
|
962
|
+
"type": "ts",
|
|
963
|
+
"modulePath": "boss/batchgreet.js",
|
|
964
|
+
"domain": "www.zhipin.com",
|
|
965
|
+
"columns": [
|
|
966
|
+
"name",
|
|
967
|
+
"status",
|
|
968
|
+
"detail"
|
|
969
|
+
]
|
|
970
|
+
},
|
|
866
971
|
{
|
|
867
972
|
"site": "boss",
|
|
868
973
|
"name": "chatlist",
|
|
@@ -973,6 +1078,203 @@
|
|
|
973
1078
|
"url"
|
|
974
1079
|
]
|
|
975
1080
|
},
|
|
1081
|
+
{
|
|
1082
|
+
"site": "boss",
|
|
1083
|
+
"name": "exchange",
|
|
1084
|
+
"description": "BOSS直聘交换联系方式(请求手机/微信)",
|
|
1085
|
+
"strategy": "cookie",
|
|
1086
|
+
"browser": true,
|
|
1087
|
+
"args": [
|
|
1088
|
+
{
|
|
1089
|
+
"name": "uid",
|
|
1090
|
+
"type": "str",
|
|
1091
|
+
"required": true,
|
|
1092
|
+
"help": "Encrypted UID of the candidate"
|
|
1093
|
+
},
|
|
1094
|
+
{
|
|
1095
|
+
"name": "type",
|
|
1096
|
+
"type": "str",
|
|
1097
|
+
"default": "phone",
|
|
1098
|
+
"required": false,
|
|
1099
|
+
"help": "Exchange type: phone or wechat",
|
|
1100
|
+
"choices": [
|
|
1101
|
+
"phone",
|
|
1102
|
+
"wechat"
|
|
1103
|
+
]
|
|
1104
|
+
}
|
|
1105
|
+
],
|
|
1106
|
+
"type": "ts",
|
|
1107
|
+
"modulePath": "boss/exchange.js",
|
|
1108
|
+
"domain": "www.zhipin.com",
|
|
1109
|
+
"columns": [
|
|
1110
|
+
"status",
|
|
1111
|
+
"detail"
|
|
1112
|
+
]
|
|
1113
|
+
},
|
|
1114
|
+
{
|
|
1115
|
+
"site": "boss",
|
|
1116
|
+
"name": "greet",
|
|
1117
|
+
"description": "BOSS直聘向新候选人发送招呼(开始聊天)",
|
|
1118
|
+
"strategy": "cookie",
|
|
1119
|
+
"browser": true,
|
|
1120
|
+
"args": [
|
|
1121
|
+
{
|
|
1122
|
+
"name": "uid",
|
|
1123
|
+
"type": "str",
|
|
1124
|
+
"required": true,
|
|
1125
|
+
"help": "Encrypted UID of the candidate (from recommend)"
|
|
1126
|
+
},
|
|
1127
|
+
{
|
|
1128
|
+
"name": "security_id",
|
|
1129
|
+
"type": "str",
|
|
1130
|
+
"required": true,
|
|
1131
|
+
"help": "Security ID of the candidate"
|
|
1132
|
+
},
|
|
1133
|
+
{
|
|
1134
|
+
"name": "job_id",
|
|
1135
|
+
"type": "str",
|
|
1136
|
+
"required": true,
|
|
1137
|
+
"help": "Encrypted job ID"
|
|
1138
|
+
},
|
|
1139
|
+
{
|
|
1140
|
+
"name": "text",
|
|
1141
|
+
"type": "str",
|
|
1142
|
+
"default": "",
|
|
1143
|
+
"required": false,
|
|
1144
|
+
"help": "Custom greeting message (uses default template if empty)"
|
|
1145
|
+
}
|
|
1146
|
+
],
|
|
1147
|
+
"type": "ts",
|
|
1148
|
+
"modulePath": "boss/greet.js",
|
|
1149
|
+
"domain": "www.zhipin.com",
|
|
1150
|
+
"columns": [
|
|
1151
|
+
"status",
|
|
1152
|
+
"detail"
|
|
1153
|
+
]
|
|
1154
|
+
},
|
|
1155
|
+
{
|
|
1156
|
+
"site": "boss",
|
|
1157
|
+
"name": "invite",
|
|
1158
|
+
"description": "BOSS直聘发送面试邀请",
|
|
1159
|
+
"strategy": "cookie",
|
|
1160
|
+
"browser": true,
|
|
1161
|
+
"args": [
|
|
1162
|
+
{
|
|
1163
|
+
"name": "uid",
|
|
1164
|
+
"type": "str",
|
|
1165
|
+
"required": true,
|
|
1166
|
+
"help": "Encrypted UID of the candidate"
|
|
1167
|
+
},
|
|
1168
|
+
{
|
|
1169
|
+
"name": "time",
|
|
1170
|
+
"type": "str",
|
|
1171
|
+
"required": true,
|
|
1172
|
+
"help": "Interview time (e.g. 2025-04-01 14:00)"
|
|
1173
|
+
},
|
|
1174
|
+
{
|
|
1175
|
+
"name": "address",
|
|
1176
|
+
"type": "str",
|
|
1177
|
+
"default": "",
|
|
1178
|
+
"required": false,
|
|
1179
|
+
"help": "Interview address (uses saved address if empty)"
|
|
1180
|
+
},
|
|
1181
|
+
{
|
|
1182
|
+
"name": "contact",
|
|
1183
|
+
"type": "str",
|
|
1184
|
+
"default": "",
|
|
1185
|
+
"required": false,
|
|
1186
|
+
"help": "Contact person name (uses saved contact if empty)"
|
|
1187
|
+
}
|
|
1188
|
+
],
|
|
1189
|
+
"type": "ts",
|
|
1190
|
+
"modulePath": "boss/invite.js",
|
|
1191
|
+
"domain": "www.zhipin.com",
|
|
1192
|
+
"columns": [
|
|
1193
|
+
"status",
|
|
1194
|
+
"detail"
|
|
1195
|
+
]
|
|
1196
|
+
},
|
|
1197
|
+
{
|
|
1198
|
+
"site": "boss",
|
|
1199
|
+
"name": "joblist",
|
|
1200
|
+
"description": "BOSS直聘查看我发布的职位列表",
|
|
1201
|
+
"strategy": "cookie",
|
|
1202
|
+
"browser": true,
|
|
1203
|
+
"args": [],
|
|
1204
|
+
"type": "ts",
|
|
1205
|
+
"modulePath": "boss/joblist.js",
|
|
1206
|
+
"domain": "www.zhipin.com",
|
|
1207
|
+
"columns": [
|
|
1208
|
+
"job_name",
|
|
1209
|
+
"salary",
|
|
1210
|
+
"city",
|
|
1211
|
+
"status",
|
|
1212
|
+
"encrypt_job_id"
|
|
1213
|
+
]
|
|
1214
|
+
},
|
|
1215
|
+
{
|
|
1216
|
+
"site": "boss",
|
|
1217
|
+
"name": "mark",
|
|
1218
|
+
"description": "BOSS直聘给候选人添加标签",
|
|
1219
|
+
"strategy": "cookie",
|
|
1220
|
+
"browser": true,
|
|
1221
|
+
"args": [
|
|
1222
|
+
{
|
|
1223
|
+
"name": "uid",
|
|
1224
|
+
"type": "str",
|
|
1225
|
+
"required": true,
|
|
1226
|
+
"help": "Encrypted UID of the candidate"
|
|
1227
|
+
},
|
|
1228
|
+
{
|
|
1229
|
+
"name": "label",
|
|
1230
|
+
"type": "str",
|
|
1231
|
+
"required": true,
|
|
1232
|
+
"help": "Label name (新招呼/沟通中/已约面/已获取简历/已交换电话/已交换微信/不合适/收藏) or label ID"
|
|
1233
|
+
},
|
|
1234
|
+
{
|
|
1235
|
+
"name": "remove",
|
|
1236
|
+
"type": "boolean",
|
|
1237
|
+
"default": false,
|
|
1238
|
+
"required": false,
|
|
1239
|
+
"help": "Remove the label instead of adding"
|
|
1240
|
+
}
|
|
1241
|
+
],
|
|
1242
|
+
"type": "ts",
|
|
1243
|
+
"modulePath": "boss/mark.js",
|
|
1244
|
+
"domain": "www.zhipin.com",
|
|
1245
|
+
"columns": [
|
|
1246
|
+
"status",
|
|
1247
|
+
"detail"
|
|
1248
|
+
]
|
|
1249
|
+
},
|
|
1250
|
+
{
|
|
1251
|
+
"site": "boss",
|
|
1252
|
+
"name": "recommend",
|
|
1253
|
+
"description": "BOSS直聘查看推荐候选人(新招呼列表)",
|
|
1254
|
+
"strategy": "cookie",
|
|
1255
|
+
"browser": true,
|
|
1256
|
+
"args": [
|
|
1257
|
+
{
|
|
1258
|
+
"name": "limit",
|
|
1259
|
+
"type": "int",
|
|
1260
|
+
"default": 20,
|
|
1261
|
+
"required": false,
|
|
1262
|
+
"help": "Number of results to return"
|
|
1263
|
+
}
|
|
1264
|
+
],
|
|
1265
|
+
"type": "ts",
|
|
1266
|
+
"modulePath": "boss/recommend.js",
|
|
1267
|
+
"domain": "www.zhipin.com",
|
|
1268
|
+
"columns": [
|
|
1269
|
+
"name",
|
|
1270
|
+
"job_name",
|
|
1271
|
+
"last_time",
|
|
1272
|
+
"labels",
|
|
1273
|
+
"encrypt_uid",
|
|
1274
|
+
"security_id",
|
|
1275
|
+
"encrypt_job_id"
|
|
1276
|
+
]
|
|
1277
|
+
},
|
|
976
1278
|
{
|
|
977
1279
|
"site": "boss",
|
|
978
1280
|
"name": "resume",
|
|
@@ -1110,6 +1412,33 @@
|
|
|
1110
1412
|
"detail"
|
|
1111
1413
|
]
|
|
1112
1414
|
},
|
|
1415
|
+
{
|
|
1416
|
+
"site": "boss",
|
|
1417
|
+
"name": "stats",
|
|
1418
|
+
"description": "BOSS直聘职位数据统计",
|
|
1419
|
+
"strategy": "cookie",
|
|
1420
|
+
"browser": true,
|
|
1421
|
+
"args": [
|
|
1422
|
+
{
|
|
1423
|
+
"name": "job_id",
|
|
1424
|
+
"type": "str",
|
|
1425
|
+
"default": "",
|
|
1426
|
+
"required": false,
|
|
1427
|
+
"help": "Encrypted job ID (show all if empty)"
|
|
1428
|
+
}
|
|
1429
|
+
],
|
|
1430
|
+
"type": "ts",
|
|
1431
|
+
"modulePath": "boss/stats.js",
|
|
1432
|
+
"domain": "www.zhipin.com",
|
|
1433
|
+
"columns": [
|
|
1434
|
+
"job_name",
|
|
1435
|
+
"salary",
|
|
1436
|
+
"city",
|
|
1437
|
+
"status",
|
|
1438
|
+
"total_chats",
|
|
1439
|
+
"encrypt_job_id"
|
|
1440
|
+
]
|
|
1441
|
+
},
|
|
1113
1442
|
{
|
|
1114
1443
|
"site": "chaoxing",
|
|
1115
1444
|
"name": "assignments",
|
|
@@ -4240,6 +4569,38 @@
|
|
|
4240
4569
|
"url"
|
|
4241
4570
|
]
|
|
4242
4571
|
},
|
|
4572
|
+
{
|
|
4573
|
+
"site": "sinafinance",
|
|
4574
|
+
"name": "news",
|
|
4575
|
+
"description": "新浪财经 7x24 小时实时快讯",
|
|
4576
|
+
"strategy": "public",
|
|
4577
|
+
"browser": false,
|
|
4578
|
+
"args": [
|
|
4579
|
+
{
|
|
4580
|
+
"name": "limit",
|
|
4581
|
+
"type": "int",
|
|
4582
|
+
"default": 20,
|
|
4583
|
+
"required": false,
|
|
4584
|
+
"help": "Max results (max 50)"
|
|
4585
|
+
},
|
|
4586
|
+
{
|
|
4587
|
+
"name": "type",
|
|
4588
|
+
"type": "int",
|
|
4589
|
+
"default": 0,
|
|
4590
|
+
"required": false,
|
|
4591
|
+
"help": "News type: 0=全部 1=A股 2=宏观 3=公司 4=数据 5=市场 6=国际 7=观点 8=央行 9=其它"
|
|
4592
|
+
}
|
|
4593
|
+
],
|
|
4594
|
+
"type": "ts",
|
|
4595
|
+
"modulePath": "sinafinance/news.js",
|
|
4596
|
+
"domain": "app.cj.sina.com.cn",
|
|
4597
|
+
"columns": [
|
|
4598
|
+
"id",
|
|
4599
|
+
"time",
|
|
4600
|
+
"content",
|
|
4601
|
+
"views"
|
|
4602
|
+
]
|
|
4603
|
+
},
|
|
4243
4604
|
{
|
|
4244
4605
|
"site": "smzdm",
|
|
4245
4606
|
"name": "search",
|
|
@@ -5594,10 +5955,88 @@
|
|
|
5594
5955
|
"type": "ts",
|
|
5595
5956
|
"modulePath": "weread/utils.test.js"
|
|
5596
5957
|
},
|
|
5958
|
+
{
|
|
5959
|
+
"site": "wikipedia",
|
|
5960
|
+
"name": "search",
|
|
5961
|
+
"description": "Search Wikipedia articles",
|
|
5962
|
+
"strategy": "public",
|
|
5963
|
+
"browser": false,
|
|
5964
|
+
"args": [
|
|
5965
|
+
{
|
|
5966
|
+
"name": "keyword",
|
|
5967
|
+
"type": "str",
|
|
5968
|
+
"required": true,
|
|
5969
|
+
"positional": true,
|
|
5970
|
+
"help": "Search keyword"
|
|
5971
|
+
},
|
|
5972
|
+
{
|
|
5973
|
+
"name": "limit",
|
|
5974
|
+
"type": "int",
|
|
5975
|
+
"default": 10,
|
|
5976
|
+
"required": false,
|
|
5977
|
+
"help": "Max results"
|
|
5978
|
+
},
|
|
5979
|
+
{
|
|
5980
|
+
"name": "lang",
|
|
5981
|
+
"type": "str",
|
|
5982
|
+
"default": "en",
|
|
5983
|
+
"required": false,
|
|
5984
|
+
"help": "Language code (e.g. en, zh, ja)"
|
|
5985
|
+
}
|
|
5986
|
+
],
|
|
5987
|
+
"type": "ts",
|
|
5988
|
+
"modulePath": "wikipedia/search.js",
|
|
5989
|
+
"columns": [
|
|
5990
|
+
"title",
|
|
5991
|
+
"snippet",
|
|
5992
|
+
"url"
|
|
5993
|
+
]
|
|
5994
|
+
},
|
|
5995
|
+
{
|
|
5996
|
+
"site": "wikipedia",
|
|
5997
|
+
"name": "summary",
|
|
5998
|
+
"description": "Get Wikipedia article summary",
|
|
5999
|
+
"strategy": "public",
|
|
6000
|
+
"browser": false,
|
|
6001
|
+
"args": [
|
|
6002
|
+
{
|
|
6003
|
+
"name": "title",
|
|
6004
|
+
"type": "str",
|
|
6005
|
+
"required": true,
|
|
6006
|
+
"positional": true,
|
|
6007
|
+
"help": "Article title (e.g. "
|
|
6008
|
+
},
|
|
6009
|
+
{
|
|
6010
|
+
"name": "lang",
|
|
6011
|
+
"type": "str",
|
|
6012
|
+
"default": "en",
|
|
6013
|
+
"required": false,
|
|
6014
|
+
"help": "Language code (e.g. en, zh, ja)"
|
|
6015
|
+
}
|
|
6016
|
+
],
|
|
6017
|
+
"type": "ts",
|
|
6018
|
+
"modulePath": "wikipedia/summary.js",
|
|
6019
|
+
"columns": [
|
|
6020
|
+
"title",
|
|
6021
|
+
"description",
|
|
6022
|
+
"extract",
|
|
6023
|
+
"url"
|
|
6024
|
+
]
|
|
6025
|
+
},
|
|
6026
|
+
{
|
|
6027
|
+
"site": "wikipedia",
|
|
6028
|
+
"name": "utils",
|
|
6029
|
+
"description": "",
|
|
6030
|
+
"strategy": "cookie",
|
|
6031
|
+
"browser": true,
|
|
6032
|
+
"args": [],
|
|
6033
|
+
"type": "ts",
|
|
6034
|
+
"modulePath": "wikipedia/utils.js"
|
|
6035
|
+
},
|
|
5597
6036
|
{
|
|
5598
6037
|
"site": "xiaohongshu",
|
|
5599
6038
|
"name": "creator-note-detail",
|
|
5600
|
-
"description": "
|
|
6039
|
+
"description": "小红书单篇笔记详情页数据 (笔记信息 + 核心/互动数据 + 观看来源 + 观众画像 + 趋势数据)",
|
|
5601
6040
|
"strategy": "cookie",
|
|
5602
6041
|
"browser": true,
|
|
5603
6042
|
"args": [
|
|
@@ -5605,22 +6044,73 @@
|
|
|
5605
6044
|
"name": "note_id",
|
|
5606
6045
|
"type": "string",
|
|
5607
6046
|
"required": true,
|
|
5608
|
-
"help": "Note ID (from
|
|
6047
|
+
"help": "Note ID (from creator-notes or note-detail page URL)"
|
|
5609
6048
|
}
|
|
5610
6049
|
],
|
|
5611
6050
|
"type": "ts",
|
|
5612
6051
|
"modulePath": "xiaohongshu/creator-note-detail.js",
|
|
5613
6052
|
"domain": "creator.xiaohongshu.com",
|
|
5614
6053
|
"columns": [
|
|
5615
|
-
"
|
|
5616
|
-
"
|
|
5617
|
-
"
|
|
6054
|
+
"section",
|
|
6055
|
+
"metric",
|
|
6056
|
+
"value",
|
|
6057
|
+
"extra"
|
|
6058
|
+
]
|
|
6059
|
+
},
|
|
6060
|
+
{
|
|
6061
|
+
"site": "xiaohongshu",
|
|
6062
|
+
"name": "creator-note-detail.test",
|
|
6063
|
+
"description": "",
|
|
6064
|
+
"strategy": "cookie",
|
|
6065
|
+
"browser": true,
|
|
6066
|
+
"args": [],
|
|
6067
|
+
"type": "ts",
|
|
6068
|
+
"modulePath": "xiaohongshu/creator-note-detail.test.js"
|
|
6069
|
+
},
|
|
6070
|
+
{
|
|
6071
|
+
"site": "xiaohongshu",
|
|
6072
|
+
"name": "creator-notes-summary",
|
|
6073
|
+
"description": "小红书最近笔记批量摘要 (列表 + 单篇关键数据汇总)",
|
|
6074
|
+
"strategy": "cookie",
|
|
6075
|
+
"browser": true,
|
|
6076
|
+
"args": [
|
|
6077
|
+
{
|
|
6078
|
+
"name": "limit",
|
|
6079
|
+
"type": "int",
|
|
6080
|
+
"default": 3,
|
|
6081
|
+
"required": false,
|
|
6082
|
+
"help": "Number of recent notes to summarize"
|
|
6083
|
+
}
|
|
6084
|
+
],
|
|
6085
|
+
"type": "ts",
|
|
6086
|
+
"modulePath": "xiaohongshu/creator-notes-summary.js",
|
|
6087
|
+
"domain": "creator.xiaohongshu.com",
|
|
6088
|
+
"columns": [
|
|
6089
|
+
"rank",
|
|
6090
|
+
"id",
|
|
6091
|
+
"title",
|
|
6092
|
+
"views",
|
|
5618
6093
|
"likes",
|
|
5619
6094
|
"collects",
|
|
5620
6095
|
"comments",
|
|
5621
|
-
"shares"
|
|
6096
|
+
"shares",
|
|
6097
|
+
"avg_view_time",
|
|
6098
|
+
"rise_fans",
|
|
6099
|
+
"top_source",
|
|
6100
|
+
"top_interest",
|
|
6101
|
+
"url"
|
|
5622
6102
|
]
|
|
5623
6103
|
},
|
|
6104
|
+
{
|
|
6105
|
+
"site": "xiaohongshu",
|
|
6106
|
+
"name": "creator-notes-summary.test",
|
|
6107
|
+
"description": "",
|
|
6108
|
+
"strategy": "cookie",
|
|
6109
|
+
"browser": true,
|
|
6110
|
+
"args": [],
|
|
6111
|
+
"type": "ts",
|
|
6112
|
+
"modulePath": "xiaohongshu/creator-notes-summary.test.js"
|
|
6113
|
+
},
|
|
5624
6114
|
{
|
|
5625
6115
|
"site": "xiaohongshu",
|
|
5626
6116
|
"name": "creator-notes",
|
|
@@ -5651,6 +6141,16 @@
|
|
|
5651
6141
|
"url"
|
|
5652
6142
|
]
|
|
5653
6143
|
},
|
|
6144
|
+
{
|
|
6145
|
+
"site": "xiaohongshu",
|
|
6146
|
+
"name": "creator-notes.test",
|
|
6147
|
+
"description": "",
|
|
6148
|
+
"strategy": "cookie",
|
|
6149
|
+
"browser": true,
|
|
6150
|
+
"args": [],
|
|
6151
|
+
"type": "ts",
|
|
6152
|
+
"modulePath": "xiaohongshu/creator-notes.test.js"
|
|
6153
|
+
},
|
|
5654
6154
|
{
|
|
5655
6155
|
"site": "xiaohongshu",
|
|
5656
6156
|
"name": "creator-profile",
|
package/dist/cli.js
CHANGED
|
@@ -9,6 +9,7 @@ import { PKG_VERSION } from './version.js';
|
|
|
9
9
|
import { printCompletionScript } from './completion.js';
|
|
10
10
|
import { CliError } from './errors.js';
|
|
11
11
|
import { shouldUseBrowserSession } from './capabilityRouting.js';
|
|
12
|
+
import { loadExternalClis, executeExternalCli, installExternalCli, registerExternalCli, isBinaryInstalled } from './external.js';
|
|
12
13
|
export function runCli(BUILTIN_CLIS, USER_CLIS) {
|
|
13
14
|
const program = new Command();
|
|
14
15
|
program.name('opencli').description('Make any website your CLI. Zero setup. AI-powered.').version(PKG_VERSION);
|
|
@@ -53,7 +54,17 @@ export function runCli(BUILTIN_CLIS, USER_CLIS) {
|
|
|
53
54
|
}
|
|
54
55
|
console.log();
|
|
55
56
|
}
|
|
56
|
-
|
|
57
|
+
const externalClis = loadExternalClis();
|
|
58
|
+
if (externalClis.length > 0) {
|
|
59
|
+
console.log(chalk.bold.cyan(` external CLIs`));
|
|
60
|
+
for (const ext of externalClis) {
|
|
61
|
+
const isInstalled = isBinaryInstalled(ext.binary);
|
|
62
|
+
const tag = isInstalled ? chalk.green('[installed]') : chalk.yellow('[auto-install]');
|
|
63
|
+
console.log(` ${ext.name} ${tag}${ext.description ? chalk.dim(` — ${ext.description}`) : ''}`);
|
|
64
|
+
}
|
|
65
|
+
console.log();
|
|
66
|
+
}
|
|
67
|
+
console.log(chalk.dim(` ${commands.length} built-in commands across ${sites.size} sites, ${externalClis.length} external CLIs`));
|
|
57
68
|
console.log();
|
|
58
69
|
});
|
|
59
70
|
program.command('validate').description('Validate CLI definitions').argument('[target]', 'site or site/name')
|
|
@@ -126,6 +137,45 @@ export function runCli(BUILTIN_CLIS, USER_CLIS) {
|
|
|
126
137
|
.action((shell) => {
|
|
127
138
|
printCompletionScript(shell);
|
|
128
139
|
});
|
|
140
|
+
const externalClis = loadExternalClis();
|
|
141
|
+
program.command('install')
|
|
142
|
+
.description('Install an external CLI')
|
|
143
|
+
.argument('<name>', 'Name of the external CLI')
|
|
144
|
+
.action((name) => {
|
|
145
|
+
const ext = externalClis.find(e => e.name === name);
|
|
146
|
+
if (!ext) {
|
|
147
|
+
console.error(chalk.red(`External CLI '${name}' not found in registry.`));
|
|
148
|
+
process.exitCode = 1;
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
installExternalCli(ext);
|
|
152
|
+
});
|
|
153
|
+
program.command('register')
|
|
154
|
+
.description('Register an external CLI')
|
|
155
|
+
.argument('<name>', 'Name of the CLI')
|
|
156
|
+
.option('--binary <bin>', 'Binary name if different from name')
|
|
157
|
+
.option('--install <cmd>', 'Auto-install command')
|
|
158
|
+
.option('--desc <text>', 'Description')
|
|
159
|
+
.action((name, opts) => {
|
|
160
|
+
registerExternalCli(name, opts.binary, opts.install, opts.desc);
|
|
161
|
+
});
|
|
162
|
+
for (const ext of externalClis) {
|
|
163
|
+
if (program.commands.some(c => c.name() === ext.name))
|
|
164
|
+
continue;
|
|
165
|
+
program.command(ext.name)
|
|
166
|
+
.description(`(External) ${ext.description || ext.name}`)
|
|
167
|
+
.allowUnknownOption()
|
|
168
|
+
.action(() => {
|
|
169
|
+
// Retrieve args passed to the external CLI
|
|
170
|
+
// Commander consumes standard args before the action, so we must slice process.argv directly.
|
|
171
|
+
const extIndex = process.argv.indexOf(ext.name);
|
|
172
|
+
const args = process.argv.slice(extIndex + 1);
|
|
173
|
+
executeExternalCli(ext.name, args).catch(err => {
|
|
174
|
+
console.error(chalk.red(`Error: ${err.message}`));
|
|
175
|
+
process.exitCode = 1;
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
}
|
|
129
179
|
// ── Antigravity serve (built-in, long-running) ──────────────────────────────
|
|
130
180
|
const antigravityCmd = program.command('antigravity').description('antigravity commands');
|
|
131
181
|
antigravityCmd.command('serve')
|