best-geo-test 1.0.1 → 1.0.2
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/capabilities/capabilities.json +402 -3
- package/dist/index.cjs +7 -7
- package/guides/answer-card.json +94 -0
- package/guides/publication.json +5 -4
- package/package.json +1 -1
|
@@ -3309,7 +3309,7 @@
|
|
|
3309
3309
|
"mode": "read",
|
|
3310
3310
|
"guide": "publication",
|
|
3311
3311
|
"requiresPlan": false,
|
|
3312
|
-
"description": "当前能用的自媒体发布平台。文章平台和视频平台是两批,建发布任务前先按 contentType
|
|
3312
|
+
"description": "当前能用的自媒体发布平台。文章平台和视频平台是两批,建发布任务前先按 contentType 取对应的那批——拿文章平台去发视频会被拒。返回里的 **limitConfig 是这个平台对文章的字数要求**(titleMaxLength 标题上限 / contentMinLength 正文下限 / contentMaxLength 正文上限,0 表示该项不限;为 null 表示这个平台不限字数)——**只对文章任务生效,视频任务不查字数**,视频平台这一项恒为 null。**remark 是投稿要求备注**(比如不收带外链的稿子)。不满足字数要求的文章建任务时会被拒,挑文章前先看这里。",
|
|
3313
3313
|
"inputSchema": {
|
|
3314
3314
|
"type": "object",
|
|
3315
3315
|
"properties": {
|
|
@@ -3527,7 +3527,7 @@
|
|
|
3527
3527
|
"mode": "write",
|
|
3528
3528
|
"guide": "publication",
|
|
3529
3529
|
"requiresPlan": true,
|
|
3530
|
-
"description": "建文章发布任务:把已有文章发到自媒体平台。**执行后稿子会真的发出去,CLI 撤不回来**。费用按发布记录条数算——一篇文章发 3 个账号就是 3 条。建之前先用 publicationPlatforms.list(contentType=article)查平台、publicationAccounts.list 查这个公司绑了哪些账号。**文章必须已审核通过且有封面**,两者缺一发不了——用 articles.list 时带上 status 和 mustHaveCover
|
|
3530
|
+
"description": "建文章发布任务:把已有文章发到自媒体平台。**执行后稿子会真的发出去,CLI 撤不回来**。费用按发布记录条数算——一篇文章发 3 个账号就是 3 条。建之前先用 publicationPlatforms.list(contentType=article)查平台、publicationAccounts.list 查这个公司绑了哪些账号。**文章必须已审核通过且有封面**,两者缺一发不了——用 articles.list 时带上 status 和 mustHaveCover 就只会看到能发的。**还要满足平台的字数要求**:平台配了 limitConfig 时,标题和正文长度不达标整批都建不了(正文字数按去掉图片地址、空格换行之后算,比原文短)。不确定够不够就先按 limitConfig 挑文章,或者少发那个卡字数的平台。",
|
|
3531
3531
|
"inputSchema": {
|
|
3532
3532
|
"type": "object",
|
|
3533
3533
|
"properties": {
|
|
@@ -3579,7 +3579,7 @@
|
|
|
3579
3579
|
"mode": "write",
|
|
3580
3580
|
"guide": "publication",
|
|
3581
3581
|
"requiresPlan": true,
|
|
3582
|
-
"description": "建视频发布任务。和 createArticle 同一套结构,只把 articleId 换成 videoId,平台要用 contentType=video 那批——拿文章平台发视频会被拒。",
|
|
3582
|
+
"description": "建视频发布任务。和 createArticle 同一套结构,只把 articleId 换成 videoId,平台要用 contentType=video 那批——拿文章平台发视频会被拒。createArticle 那条的字数要求**不适用于视频**:视频任务不查字数。",
|
|
3583
3583
|
"inputSchema": {
|
|
3584
3584
|
"type": "object",
|
|
3585
3585
|
"properties": {
|
|
@@ -4068,6 +4068,405 @@
|
|
|
4068
4068
|
"required": ["dhVideoTaskId", "template"],
|
|
4069
4069
|
"additionalProperties": false
|
|
4070
4070
|
}
|
|
4071
|
+
},
|
|
4072
|
+
{
|
|
4073
|
+
"name": "answerCards.list",
|
|
4074
|
+
"mode": "read",
|
|
4075
|
+
"guide": "answer-card",
|
|
4076
|
+
"requiresPlan": false,
|
|
4077
|
+
"description": "AI 答案卡任务列表。",
|
|
4078
|
+
"inputSchema": {
|
|
4079
|
+
"type": "object",
|
|
4080
|
+
"properties": {
|
|
4081
|
+
"companyId": {
|
|
4082
|
+
"type": "integer",
|
|
4083
|
+
"minimum": 1,
|
|
4084
|
+
"description": "只看某家公司;不传就是全部授权公司"
|
|
4085
|
+
},
|
|
4086
|
+
"page": {
|
|
4087
|
+
"type": "integer",
|
|
4088
|
+
"default": 1
|
|
4089
|
+
},
|
|
4090
|
+
"limit": {
|
|
4091
|
+
"type": "integer",
|
|
4092
|
+
"default": 10,
|
|
4093
|
+
"maximum": 201
|
|
4094
|
+
}
|
|
4095
|
+
},
|
|
4096
|
+
"additionalProperties": false
|
|
4097
|
+
}
|
|
4098
|
+
},
|
|
4099
|
+
{
|
|
4100
|
+
"name": "answerCards.templates",
|
|
4101
|
+
"mode": "read",
|
|
4102
|
+
"guide": "answer-card",
|
|
4103
|
+
"requiresPlan": false,
|
|
4104
|
+
"description": "答案卡可用视觉模板列表。visualMode=2(指定模板)时,创建任务的 templateId 必须是这里返回的一个 id。",
|
|
4105
|
+
"inputSchema": {
|
|
4106
|
+
"type": "object",
|
|
4107
|
+
"properties": {},
|
|
4108
|
+
"additionalProperties": false
|
|
4109
|
+
}
|
|
4110
|
+
},
|
|
4111
|
+
{
|
|
4112
|
+
"name": "answerCards.get",
|
|
4113
|
+
"mode": "read",
|
|
4114
|
+
"guide": "answer-card",
|
|
4115
|
+
"requiresPlan": false,
|
|
4116
|
+
"description": "答案卡任务详情:任务状态 + 逐页脚本 + 当前活动批次。status=1 分析中,脚本还没出来,先别急着高频轮询;status=2 脚本已就绪,才能看拆好的页、用 answerCards.savePages 改稿或用 answerCards.generate 确认生成。",
|
|
4117
|
+
"inputSchema": {
|
|
4118
|
+
"type": "object",
|
|
4119
|
+
"properties": {
|
|
4120
|
+
"id": {
|
|
4121
|
+
"type": "integer",
|
|
4122
|
+
"minimum": 1
|
|
4123
|
+
}
|
|
4124
|
+
},
|
|
4125
|
+
"required": ["id"],
|
|
4126
|
+
"additionalProperties": false
|
|
4127
|
+
}
|
|
4128
|
+
},
|
|
4129
|
+
{
|
|
4130
|
+
"name": "answerCards.batch",
|
|
4131
|
+
"mode": "read",
|
|
4132
|
+
"guide": "answer-card",
|
|
4133
|
+
"requiresPlan": false,
|
|
4134
|
+
"description": "答案卡批次逐页出图状态与成图地址。answerCards.generate 执行完只回批次号,要用这个轮询到批次终态(status=6 已完成 / 7 部分失败 / 8 失败)才有成片。返回的 items 里 status=4 是失败页——目前没有重跑单页的能力,有失败页时引导用户去网页处理。",
|
|
4135
|
+
"inputSchema": {
|
|
4136
|
+
"type": "object",
|
|
4137
|
+
"properties": {
|
|
4138
|
+
"taskId": {
|
|
4139
|
+
"type": "integer",
|
|
4140
|
+
"minimum": 1
|
|
4141
|
+
},
|
|
4142
|
+
"batchId": {
|
|
4143
|
+
"type": "integer",
|
|
4144
|
+
"minimum": 1
|
|
4145
|
+
}
|
|
4146
|
+
},
|
|
4147
|
+
"required": ["taskId", "batchId"],
|
|
4148
|
+
"additionalProperties": false
|
|
4149
|
+
}
|
|
4150
|
+
},
|
|
4151
|
+
{
|
|
4152
|
+
"name": "answerCards.create",
|
|
4153
|
+
"mode": "write",
|
|
4154
|
+
"guide": "answer-card",
|
|
4155
|
+
"requiresPlan": true,
|
|
4156
|
+
"description": "创建答案卡任务并异步发起脚本分析。这一步不扣费。分析是异步的,执行完只拿到任务号,要用 answerCards.get 轮询到 status=2(脚本已就绪)才能看拆好的页;脚本可以用 answerCards.savePages 改,这一步不扣费,改到满意再用 answerCards.generate 出图,确认生成那一步才开始扣费。",
|
|
4157
|
+
"inputSchema": {
|
|
4158
|
+
"type": "object",
|
|
4159
|
+
"properties": {
|
|
4160
|
+
"companyId": {
|
|
4161
|
+
"type": "integer",
|
|
4162
|
+
"minimum": 1
|
|
4163
|
+
},
|
|
4164
|
+
"productId": {
|
|
4165
|
+
"type": "integer",
|
|
4166
|
+
"minimum": 1,
|
|
4167
|
+
"description": "归到哪个 GEO 项目,用 products.list 查"
|
|
4168
|
+
},
|
|
4169
|
+
"sourceType": {
|
|
4170
|
+
"type": "integer",
|
|
4171
|
+
"enum": [1, 2],
|
|
4172
|
+
"description": "内容来源:1 来自已有文章(需一并给 articleId)/ 2 自定义正文(需一并给 content)"
|
|
4173
|
+
},
|
|
4174
|
+
"articleId": {
|
|
4175
|
+
"type": "integer",
|
|
4176
|
+
"minimum": 1,
|
|
4177
|
+
"description": "sourceType=1 时必填。来源文章 id,用 articles.list 查"
|
|
4178
|
+
},
|
|
4179
|
+
"content": {
|
|
4180
|
+
"type": "string",
|
|
4181
|
+
"maxLength": 50000,
|
|
4182
|
+
"description": "sourceType=2 时必填。自定义正文,去除首尾空白后至少要有 20 个字符"
|
|
4183
|
+
},
|
|
4184
|
+
"visualMode": {
|
|
4185
|
+
"type": "integer",
|
|
4186
|
+
"enum": [1, 2, 3],
|
|
4187
|
+
"description": "视觉方式:1 AI 智能匹配(后端从可用模板里自动挑一套,不用再给 templateId 或 customStylePrompt)/ 2 指定模板(需一并给 templateId)/ 3 自定义风格(需一并给 customStylePrompt)"
|
|
4188
|
+
},
|
|
4189
|
+
"templateId": {
|
|
4190
|
+
"type": "integer",
|
|
4191
|
+
"minimum": 1,
|
|
4192
|
+
"description": "visualMode=2 时必填。模板 id,用 answerCards.templates 查"
|
|
4193
|
+
},
|
|
4194
|
+
"customStylePrompt": {
|
|
4195
|
+
"type": "string",
|
|
4196
|
+
"maxLength": 800,
|
|
4197
|
+
"description": "visualMode=3 时必填。自定义风格与版面要求"
|
|
4198
|
+
},
|
|
4199
|
+
"richness": {
|
|
4200
|
+
"type": "integer",
|
|
4201
|
+
"enum": [1, 2, 3],
|
|
4202
|
+
"description": "内容数量档位:1 精简(2-5 页)/ 2 适中(6-8 页)/ 3 丰富(9-12 页)。最终页数由后端按正文长度和结构在范围内决定;用户改稿后仍可能偏离这个范围,但硬边界始终是 1-12 页"
|
|
4203
|
+
},
|
|
4204
|
+
"modelCode": {
|
|
4205
|
+
"type": "string",
|
|
4206
|
+
"maxLength": 32,
|
|
4207
|
+
"description": "文生图模型档位 code,用 textToImages.models 查"
|
|
4208
|
+
},
|
|
4209
|
+
"referenceImageIds": {
|
|
4210
|
+
"type": "array",
|
|
4211
|
+
"maxItems": 10,
|
|
4212
|
+
"items": {
|
|
4213
|
+
"type": "integer",
|
|
4214
|
+
"minimum": 1
|
|
4215
|
+
},
|
|
4216
|
+
"description": "参考素材图 id 列表,有序,用 images.list 查,最多 10 张"
|
|
4217
|
+
}
|
|
4218
|
+
},
|
|
4219
|
+
"required": ["companyId", "productId", "sourceType", "visualMode", "richness", "modelCode"],
|
|
4220
|
+
"additionalProperties": false
|
|
4221
|
+
}
|
|
4222
|
+
},
|
|
4223
|
+
{
|
|
4224
|
+
"name": "answerCards.savePages",
|
|
4225
|
+
"mode": "write",
|
|
4226
|
+
"guide": "answer-card",
|
|
4227
|
+
"requiresPlan": true,
|
|
4228
|
+
"description": "补丁式改答案卡脚本。只说清「改了什么」——pages 按 id 改字段、insert 插入新页、order 重排、deleteIds 删页,四项至少给一项非空数组,不用把没改过的页也搬一遍原样传回来。服务端按「删 → 改 → 排 → 插」的固定顺序合并:order 只用列已有页的 id(新插入的页此刻还没有 id);insert 的 afterIndex 是「排完序之后」的下标,-1 表示插到最前,其余表示插到该下标对应页之后。这一步不扣费,改到满意再用 answerCards.generate 出图。",
|
|
4229
|
+
"inputSchema": {
|
|
4230
|
+
"type": "object",
|
|
4231
|
+
"properties": {
|
|
4232
|
+
"taskId": {
|
|
4233
|
+
"type": "integer",
|
|
4234
|
+
"minimum": 1
|
|
4235
|
+
},
|
|
4236
|
+
"pages": {
|
|
4237
|
+
"type": "array",
|
|
4238
|
+
"description": "按 id 改现有页的字段,字段缺省表示不动这一项",
|
|
4239
|
+
"items": {
|
|
4240
|
+
"type": "object",
|
|
4241
|
+
"properties": {
|
|
4242
|
+
"id": {
|
|
4243
|
+
"type": "integer",
|
|
4244
|
+
"minimum": 1,
|
|
4245
|
+
"description": "要改哪一页"
|
|
4246
|
+
},
|
|
4247
|
+
"type": {
|
|
4248
|
+
"type": "string",
|
|
4249
|
+
"maxLength": 32,
|
|
4250
|
+
"description": "页面角色,如 cover/conclusion/summary 等"
|
|
4251
|
+
},
|
|
4252
|
+
"layoutType": {
|
|
4253
|
+
"type": "string",
|
|
4254
|
+
"enum": ["cover", "three_cards", "process", "grid"],
|
|
4255
|
+
"description": "版式"
|
|
4256
|
+
},
|
|
4257
|
+
"eyebrow": {
|
|
4258
|
+
"type": "string",
|
|
4259
|
+
"maxLength": 64,
|
|
4260
|
+
"description": "眉题"
|
|
4261
|
+
},
|
|
4262
|
+
"title": {
|
|
4263
|
+
"type": "string",
|
|
4264
|
+
"maxLength": 128,
|
|
4265
|
+
"description": "主标题"
|
|
4266
|
+
},
|
|
4267
|
+
"subtitle": {
|
|
4268
|
+
"type": "string",
|
|
4269
|
+
"maxLength": 128,
|
|
4270
|
+
"description": "副标题"
|
|
4271
|
+
},
|
|
4272
|
+
"body": {
|
|
4273
|
+
"type": "string",
|
|
4274
|
+
"maxLength": 1000,
|
|
4275
|
+
"description": "页面摘要"
|
|
4276
|
+
},
|
|
4277
|
+
"keyPoints": {
|
|
4278
|
+
"type": "array",
|
|
4279
|
+
"items": {
|
|
4280
|
+
"type": "string"
|
|
4281
|
+
},
|
|
4282
|
+
"description": "关键点。四宫格版式(layoutType=grid)最多 4 条,其余版式最多 3 条"
|
|
4283
|
+
},
|
|
4284
|
+
"highlight": {
|
|
4285
|
+
"type": "string",
|
|
4286
|
+
"maxLength": 64,
|
|
4287
|
+
"description": "重点词或数字"
|
|
4288
|
+
},
|
|
4289
|
+
"evidence": {
|
|
4290
|
+
"type": "string",
|
|
4291
|
+
"maxLength": 2000,
|
|
4292
|
+
"description": "内容依据,只能来自原文"
|
|
4293
|
+
},
|
|
4294
|
+
"visualType": {
|
|
4295
|
+
"type": "integer",
|
|
4296
|
+
"enum": [1, 2, 3, 4, 5, 6],
|
|
4297
|
+
"description": "画面素材类型:1 实景 2 人像 3 产品展示 4 数据图表 5 流程/信息图 6 纯文字卡"
|
|
4298
|
+
},
|
|
4299
|
+
"visualSubject": {
|
|
4300
|
+
"type": "string",
|
|
4301
|
+
"maxLength": 255,
|
|
4302
|
+
"description": "画面主体"
|
|
4303
|
+
},
|
|
4304
|
+
"visualInstruction": {
|
|
4305
|
+
"type": "string",
|
|
4306
|
+
"maxLength": 1000,
|
|
4307
|
+
"description": "画面构图要求"
|
|
4308
|
+
}
|
|
4309
|
+
},
|
|
4310
|
+
"required": ["id"],
|
|
4311
|
+
"additionalProperties": false
|
|
4312
|
+
}
|
|
4313
|
+
},
|
|
4314
|
+
"insert": {
|
|
4315
|
+
"type": "array",
|
|
4316
|
+
"description": "插入新页,没有 id",
|
|
4317
|
+
"items": {
|
|
4318
|
+
"type": "object",
|
|
4319
|
+
"properties": {
|
|
4320
|
+
"afterIndex": {
|
|
4321
|
+
"type": "integer",
|
|
4322
|
+
"minimum": -1,
|
|
4323
|
+
"description": "插到排序后第几页(0 起算)之后;-1 表示插到最前"
|
|
4324
|
+
},
|
|
4325
|
+
"type": {
|
|
4326
|
+
"type": "string",
|
|
4327
|
+
"maxLength": 32,
|
|
4328
|
+
"description": "页面角色,如 cover/conclusion/summary 等"
|
|
4329
|
+
},
|
|
4330
|
+
"title": {
|
|
4331
|
+
"type": "string",
|
|
4332
|
+
"maxLength": 128,
|
|
4333
|
+
"description": "主标题"
|
|
4334
|
+
},
|
|
4335
|
+
"visualType": {
|
|
4336
|
+
"type": "integer",
|
|
4337
|
+
"enum": [1, 2, 3, 4, 5, 6],
|
|
4338
|
+
"description": "画面素材类型:1 实景 2 人像 3 产品展示 4 数据图表 5 流程/信息图 6 纯文字卡"
|
|
4339
|
+
},
|
|
4340
|
+
"layoutType": {
|
|
4341
|
+
"type": "string",
|
|
4342
|
+
"enum": ["cover", "three_cards", "process", "grid"],
|
|
4343
|
+
"description": "版式"
|
|
4344
|
+
},
|
|
4345
|
+
"eyebrow": {
|
|
4346
|
+
"type": "string",
|
|
4347
|
+
"maxLength": 64,
|
|
4348
|
+
"description": "眉题"
|
|
4349
|
+
},
|
|
4350
|
+
"subtitle": {
|
|
4351
|
+
"type": "string",
|
|
4352
|
+
"maxLength": 128,
|
|
4353
|
+
"description": "副标题"
|
|
4354
|
+
},
|
|
4355
|
+
"body": {
|
|
4356
|
+
"type": "string",
|
|
4357
|
+
"maxLength": 1000,
|
|
4358
|
+
"description": "页面摘要"
|
|
4359
|
+
},
|
|
4360
|
+
"keyPoints": {
|
|
4361
|
+
"type": "array",
|
|
4362
|
+
"items": {
|
|
4363
|
+
"type": "string"
|
|
4364
|
+
},
|
|
4365
|
+
"description": "关键点。四宫格版式(layoutType=grid)最多 4 条,其余版式最多 3 条"
|
|
4366
|
+
},
|
|
4367
|
+
"highlight": {
|
|
4368
|
+
"type": "string",
|
|
4369
|
+
"maxLength": 64,
|
|
4370
|
+
"description": "重点词或数字"
|
|
4371
|
+
},
|
|
4372
|
+
"evidence": {
|
|
4373
|
+
"type": "string",
|
|
4374
|
+
"maxLength": 2000,
|
|
4375
|
+
"description": "内容依据,只能来自原文"
|
|
4376
|
+
},
|
|
4377
|
+
"visualSubject": {
|
|
4378
|
+
"type": "string",
|
|
4379
|
+
"maxLength": 255,
|
|
4380
|
+
"description": "画面主体"
|
|
4381
|
+
},
|
|
4382
|
+
"visualInstruction": {
|
|
4383
|
+
"type": "string",
|
|
4384
|
+
"maxLength": 1000,
|
|
4385
|
+
"description": "画面构图要求"
|
|
4386
|
+
}
|
|
4387
|
+
},
|
|
4388
|
+
"required": ["afterIndex", "type", "title", "visualType"],
|
|
4389
|
+
"additionalProperties": false
|
|
4390
|
+
}
|
|
4391
|
+
},
|
|
4392
|
+
"order": {
|
|
4393
|
+
"type": "array",
|
|
4394
|
+
"items": {
|
|
4395
|
+
"type": "integer",
|
|
4396
|
+
"minimum": 1
|
|
4397
|
+
},
|
|
4398
|
+
"description": "重排页面顺序。必须列全当前全部页的 id,长度要和当前页数相等,不能重复也不能漏"
|
|
4399
|
+
},
|
|
4400
|
+
"deleteIds": {
|
|
4401
|
+
"type": "array",
|
|
4402
|
+
"items": {
|
|
4403
|
+
"type": "integer",
|
|
4404
|
+
"minimum": 1
|
|
4405
|
+
},
|
|
4406
|
+
"description": "要删除的页面 id"
|
|
4407
|
+
}
|
|
4408
|
+
},
|
|
4409
|
+
"required": ["taskId"],
|
|
4410
|
+
"additionalProperties": false
|
|
4411
|
+
}
|
|
4412
|
+
},
|
|
4413
|
+
{
|
|
4414
|
+
"name": "answerCards.generate",
|
|
4415
|
+
"mode": "write",
|
|
4416
|
+
"guide": "answer-card",
|
|
4417
|
+
"requiresPlan": true,
|
|
4418
|
+
"description": "确认生成整套图。⚠️ 这一步真扣费,一次扣两笔:出图费按页收(页数 × 模型档位单价),另有一笔基础费按任务只收一次。出图是异步的,执行完只拿到批次号,要用 answerCards.batch 轮询到批次终态才有图。出图失败的页会退回那几页的出图费。⚠️ 这份计划有有效期,确认之后不要再用 answerCards.savePages 改脚本——页数一变,apply 时会发现页数对不上而被打回,得重新生成计划让用户重新确认。",
|
|
4419
|
+
"inputSchema": {
|
|
4420
|
+
"type": "object",
|
|
4421
|
+
"properties": {
|
|
4422
|
+
"taskId": {
|
|
4423
|
+
"type": "integer",
|
|
4424
|
+
"minimum": 1
|
|
4425
|
+
}
|
|
4426
|
+
},
|
|
4427
|
+
"required": ["taskId"],
|
|
4428
|
+
"additionalProperties": false
|
|
4429
|
+
}
|
|
4430
|
+
},
|
|
4431
|
+
{
|
|
4432
|
+
"name": "answerCards.savePublishInfo",
|
|
4433
|
+
"mode": "write",
|
|
4434
|
+
"guide": "answer-card",
|
|
4435
|
+
"requiresPlan": true,
|
|
4436
|
+
"description": "保存答案卡的发布资料(标题/描述/话题标签/封面页)。不触发重新生成,也不会直接发布,这一步不扣费。",
|
|
4437
|
+
"inputSchema": {
|
|
4438
|
+
"type": "object",
|
|
4439
|
+
"properties": {
|
|
4440
|
+
"taskId": {
|
|
4441
|
+
"type": "integer",
|
|
4442
|
+
"minimum": 1
|
|
4443
|
+
},
|
|
4444
|
+
"publishTitle": {
|
|
4445
|
+
"type": "string",
|
|
4446
|
+
"maxLength": 30
|
|
4447
|
+
},
|
|
4448
|
+
"publishDescription": {
|
|
4449
|
+
"type": "string",
|
|
4450
|
+
"maxLength": 500
|
|
4451
|
+
},
|
|
4452
|
+
"publishTags": {
|
|
4453
|
+
"type": "array",
|
|
4454
|
+
"maxItems": 8,
|
|
4455
|
+
"items": {
|
|
4456
|
+
"type": "string",
|
|
4457
|
+
"maxLength": 30
|
|
4458
|
+
},
|
|
4459
|
+
"description": "话题标签,不允许空字符串"
|
|
4460
|
+
},
|
|
4461
|
+
"coverPageId": {
|
|
4462
|
+
"type": "integer",
|
|
4463
|
+
"minimum": 1,
|
|
4464
|
+
"description": "封面页 id,须是该任务下已有的一个页面 id"
|
|
4465
|
+
}
|
|
4466
|
+
},
|
|
4467
|
+
"required": ["taskId", "publishTitle"],
|
|
4468
|
+
"additionalProperties": false
|
|
4469
|
+
}
|
|
4071
4470
|
}
|
|
4072
4471
|
]
|
|
4073
4472
|
}
|
package/dist/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var Pt=Object.defineProperty;var Dt=(e,t,n)=>t in e?Pt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var oe=(e,t,n)=>Dt(e,typeof t!="symbol"?t+"":t,n);var ie="https://nbgeo.aimusiclj.com",Ce="best-geo-test",Te="best-geo-test",Re="bg-test-cli-",Oe="1.0.
|
|
2
|
+
"use strict";var Pt=Object.defineProperty;var Dt=(e,t,n)=>t in e?Pt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var oe=(e,t,n)=>Dt(e,typeof t!="symbol"?t+"":t,n);var ie="https://nbgeo.aimusiclj.com",Ce="best-geo-test",Te="best-geo-test",Re="bg-test-cli-",Oe="1.0.2";var F=1,x=Oe,L=Te,p=Ce,$e="dev",Q=Mt(Ut());function Ut(){var e;return(e=process.env.BEST_GEO_API_BASE)!=null?e:ie}var X=Re,Ne=300*1e3,Le=30*1e3,Pe=300*1e3;function Mt(e){return e.replace(/\/+$/,"")}var Xe=require("node:child_process");var Fe=require("node:crypto"),W=require("node:os");var f=require("node:fs"),De=require("node:os"),B=require("node:path");var Ue=require("node:crypto");var w=class extends Error{constructor(n,r,o){super(o);oe(this,"reason",n);oe(this,"path",r);this.name="LocalConfigError"}},Vt={schemaVersion:1,device:null,activeCredential:null,pendingCredential:null};function K(){var e;return(e=process.env.BEST_GEO_CONFIG_DIR)!=null?e:(0,B.join)((0,De.homedir)(),`.${p}`)}function T(){return(0,B.join)(K(),"config.json")}function A(){var n,r,o;let e=T(),t;try{if(!(0,f.existsSync)(e))return null;Bt(e),t=(0,f.readFileSync)(e,"utf8")}catch(i){throw i instanceof w?i:Me(i,e)}try{let i=JSON.parse(t);if(typeof i!="object"||i==null||i.schemaVersion!==1)throw new Error("unexpected shape");return{schemaVersion:1,device:(n=i.device)!=null?n:null,activeCredential:(r=i.activeCredential)!=null?r:null,pendingCredential:(o=i.pendingCredential)!=null?o:null}}catch{throw new w("corrupted",e,`\u672C\u673A\u914D\u7F6E\u6587\u4EF6\u5185\u5BB9\u4E0D\u5B8C\u6574\u6216\u683C\u5F0F\u4E0D\u5BF9\uFF1A${e}`)}}function Ft(e){let t=K(),n=T(),r=(0,B.join)(t,`.config.json.${(0,Ue.randomBytes)(6).toString("hex")}.tmp`);try{(0,f.existsSync)(t)||(0,f.mkdirSync)(t,{recursive:!0,mode:448});let o=(0,f.openSync)(r,"wx",384);try{(0,f.writeSync)(o,`${JSON.stringify(e,null,2)}
|
|
3
3
|
`),(0,f.fsyncSync)(o)}finally{(0,f.closeSync)(o)}(0,f.renameSync)(r,n)}catch(o){if((0,f.existsSync)(r))try{(0,f.unlinkSync)(r)}catch{}throw Me(o,n)}}function S(e){var n;let t=e((n=A())!=null?n:{...Vt});return Ft(t),t}function Bt(e){var r;if(process.platform==="win32")return;let t=(0,f.statSync)(e),n=(r=process.getuid)==null?void 0:r.call(process);if(n!=null&&t.uid!==n)throw new w("not_owner",e,`\u672C\u673A\u914D\u7F6E\u6587\u4EF6\u4E0D\u5C5E\u4E8E\u5F53\u524D\u7528\u6237\uFF1A${e}`);if((t.mode&63)!==0)throw new w("permissions_too_open",e,`\u672C\u673A\u914D\u7F6E\u6587\u4EF6\u6743\u9650\u8FC7\u5BBD\uFF08\u540C\u673A\u5176\u4ED6\u7528\u6237\u53EF\u8BFB\uFF09\uFF1A${e}`)}function Me(e,t){let n=e==null?void 0:e.code;return n==="EACCES"||n==="EPERM"||n==="EROFS"?new w("denied",t,`\u6CA1\u6709\u6743\u9650\u8BFB\u5199\u672C\u673A\u914D\u7F6E\uFF1A${t}`):e instanceof Error?e:new Error(String(e))}var Kt=3600*1e3;function Ve(){return(0,B.join)(K(),"pending-uploads.json")}function q(){let e=Ve();if(!(0,f.existsSync)(e))return{};try{let t=JSON.parse((0,f.readFileSync)(e,"utf8")),n=Date.now();return Object.fromEntries(Object.entries(t).filter(([,r])=>{var o;return n-((o=r==null?void 0:r.createdAt)!=null?o:0)<Kt}))}catch{return{}}}function se(e){(0,f.mkdirSync)(K(),{recursive:!0,mode:448}),(0,f.writeFileSync)(Ve(),JSON.stringify(e),{mode:384})}function Be(){var t,n;let e=(t=A())==null?void 0:t.device;return(n=e==null?void 0:e.deviceId)!=null&&n.startsWith(X)?e.deviceId:null}function Y(){var r,o;let e={deviceName:(0,W.hostname)().slice(0,50),platform:`${(0,W.platform)()}-${process.arch}`},t=(r=A())==null?void 0:r.device;if((o=t==null?void 0:t.deviceId)!=null&&o.startsWith(X))return t.deviceName===e.deviceName&&t.platform===e.platform?t:S(i=>({...i,device:{...t,...e}})).device;let n={deviceId:`${X}${(0,Fe.randomUUID)()}`,...e};return S(i=>({...i,device:n})).device}function Ke(){return`cli_${Date.now().toString(36)}${Math.random().toString(36).slice(2,8)}`}function k(e,t=Ke()){return{ok:!0,code:"OK",requestId:t,data:e}}function l(e,t,n={}){var r;return{ok:!1,code:e,message:t,requestId:(r=n.requestId)!=null?r:Ke(),...n.data==null?{}:{data:n.data},...n.nextAction==null?{}:{nextAction:n.nextAction}}}function a(e){process.stdout.write(`${JSON.stringify(e)}
|
|
4
|
-
`),e.ok||(process.exitCode=1)}async function y(e,t={}){var i,s;let n=new URL(`${Q}/v1/agent-cli${e}`);for(let[d,m]of Object.entries((i=t.query)!=null?i:{}))if(m!=null)for(let
|
|
4
|
+
`),e.ok||(process.exitCode=1)}async function y(e,t={}){var i,s;let n=new URL(`${Q}/v1/agent-cli${e}`);for(let[d,m]of Object.entries((i=t.query)!=null?i:{}))if(m!=null)for(let c of Array.isArray(m)?m:[m])n.searchParams.append(d,String(c));let r={"X-GEO-CLI-Version":x,"X-GEO-Protocol-Version":String(F),"X-GEO-CLI-Package":L},o=null;try{o=Be()}catch{}o&&(r["X-Device-ID"]=o),t.apiKey&&(r.Authorization=`Bearer ${t.apiKey}`),t.body!=null&&(r["Content-Type"]="application/json");try{let d=await fetch(n,{method:(s=t.method)!=null?s:"GET",headers:r,body:t.body==null?void 0:JSON.stringify(t.body),signal:AbortSignal.timeout(t.isWrite?Pe:Le)}),m=await d.text();try{let c=JSON.parse(m);return qt(c)?c:l("SERVER_ERROR",`\u670D\u52A1\u7AEF\u8FD4\u56DE\u4E86\u975E\u9884\u671F\u5185\u5BB9\uFF08HTTP ${d.status}\uFF09`,{data:{transportFailure:!0}})}catch{return l("SERVER_ERROR",`\u670D\u52A1\u7AEF\u8FD4\u56DE\u4E86\u975E\u9884\u671F\u5185\u5BB9\uFF08HTTP ${d.status}\uFF09`,{data:{transportFailure:!0}})}}catch(d){return d instanceof Error&&(d.name==="TimeoutError"||d.name==="AbortError")?l("SERVER_ERROR",t.isWrite?"\u670D\u52A1\u7AEF\u5904\u7406\u8D85\u65F6,\u8FD9\u6B21\u5199\u5165\u7ED3\u679C\u672A\u77E5":"\u670D\u52A1\u7AEF\u54CD\u5E94\u8D85\u65F6",{data:{transportFailure:!0},nextAction:t.isWrite?{type:"ask_user",message:"\u8D85\u65F6\u4E0D\u4EE3\u8868\u6CA1\u5199\u8FDB\u53BB \u2014\u2014 \u670D\u52A1\u7AEF\u53EF\u80FD\u8FD8\u5728\u5904\u7406\u3002**\u5148\u7528\u5BF9\u5E94\u7684\u67E5\u8BE2\u80FD\u529B\u786E\u8BA4\u4E00\u904D**,\u786E\u5B9E\u6CA1\u6709\u518D\u91CD\u65B0 plan;\u76F4\u63A5\u91CD\u8BD5\u4F1A\u5EFA\u51FA\u91CD\u590D\u7684\u4E00\u4EFD,\u800C\u4E14\u4F1A\u518D\u6263\u4E00\u6B21\u8D39\u3002"}:{type:"ask_user",message:"\u670D\u52A1\u7AEF\u54CD\u5E94\u592A\u6162\u3002\u7A0D\u540E\u91CD\u8BD5\u540C\u4E00\u6761\u547D\u4EE4\u5373\u53EF,\u67E5\u8BE2\u4E0D\u4F1A\u4EA7\u751F\u4EFB\u4F55\u5199\u5165"}}):l("SERVER_ERROR",`\u65E0\u6CD5\u8FDE\u63A5\u670D\u52A1\u7AEF\uFF1A${d instanceof Error?d.message:String(d)}`,{data:{transportFailure:!0},nextAction:{type:"ask_user",message:"\u8BF7\u786E\u8BA4\u7F51\u7EDC\u53EF\u7528\uFF0C\u4EE5\u53CA\u670D\u52A1\u7AEF\u5730\u5740\u914D\u7F6E\u6B63\u786E"}})}}function qt(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.ok=="boolean"&&typeof t.code=="string"}function jt(e){var t;return!e.ok&&((t=e.data)==null?void 0:t.transportFailure)===!0}function ae(e){return e.ok||jt(e)?!1:["AUTH_EXPIRED","DEVICE_MISMATCH","ACCESS_DENIED","AUTH_REQUIRED","VALIDATION_FAILED"].includes(e.code)}function P(){var e,t,n;return(n=(t=(e=A())==null?void 0:e.activeCredential)==null?void 0:t.apiKey)!=null?n:null}function Z(){var e,t;return(t=(e=A())==null?void 0:e.activeCredential)!=null?t:null}function qe(){var e,t;return(t=(e=A())==null?void 0:e.pendingCredential)!=null?t:null}function je(e){S(t=>({...t,pendingCredential:{apiKey:e,startedAt:new Date().toISOString()}}))}function le(){S(e=>({...e,pendingCredential:null}))}function de(e){return S(t=>{let n=t.pendingCredential;return n?{...t,activeCredential:{apiKey:n.apiKey,...e},pendingCredential:null}:t}).activeCredential}function Ge(){S(e=>({...e,activeCredential:null,pendingCredential:null}))}var _=require("node:crypto"),Je=require("node:http");function He(e){let t=`
|
|
5
5
|
(function () {
|
|
6
6
|
var shell = document.getElementById('shell');
|
|
7
7
|
var form = document.getElementById('f');
|
|
@@ -357,13 +357,13 @@ input::placeholder { color: color-mix(in srgb, var(--muted) 72%, transparent); }
|
|
|
357
357
|
</main>
|
|
358
358
|
<script>${t}</script>
|
|
359
359
|
</body>
|
|
360
|
-
</html>`,scriptHash:t}}var Gt=256,Ht=4*1024,
|
|
360
|
+
</html>`,scriptHash:t}}var Gt=256,Ht=4*1024,ce=3e4;function zt(){if(!1)return ce;let e=Number(process.env.BEST_GEO_TEST_CLAIM_WAIT_MS);return!Number.isFinite(e)||e<=0?ce:Math.min(e,ce)}var Jt=1500,pe=15e3;function Qt(){if(!1)return pe;let e=Number(process.env.BEST_GEO_TEST_RESULT_TTL_MS);return!Number.isFinite(e)||e<=0?pe:Math.min(e,pe)}async function Qe(){let e=(0,_.randomBytes)(16).toString("hex"),t=(0,_.randomBytes)(16).toString("hex"),n=(0,_.randomBytes)(16).toString("hex"),{html:r,scriptHash:o}=He(t),i=(0,_.createHash)("sha256").update(o).digest("base64"),s=null;function d(){let g=new Promise((u,$)=>{s={resolve:u,reject:$}});return g.catch(()=>{}),g}let m=d(),c=!1,I=!1,b=null,C=null,H=null,V=null;function Rt(){V==null&&(V=setTimeout(()=>z(),Jt),V.unref())}let v=(0,Je.createServer)((g,u)=>{Ot(g,u).catch(()=>{u.writeHead(500,{"Content-Type":"application/json"}),u.end(JSON.stringify({ok:!1,message:"internal error"}))})});async function Ot(g,u){var ke,Ee,Ie,ve,we,Ae,Se;let $=new URL((ke=g.url)!=null?ke:"/","http://127.0.0.1");if(g.method==="GET"&&$.pathname==="/"){if($.searchParams.get("state")!==e){u.writeHead(404).end();return}u.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Content-Security-Policy":["default-src 'none'",`script-src 'sha256-${i}'`,"style-src 'unsafe-inline'","connect-src 'self'","form-action 'none'","base-uri 'none'","frame-ancestors 'none'"].join("; "),"Set-Cookie":`bg_session=${n}; HttpOnly; SameSite=Strict; Path=/`,"Cache-Control":"no-store","Referrer-Policy":"no-referrer"}),u.end(r);return}if(g.method==="POST"&&$.pathname==="/submit"){let Nt=g.headers.origin,Lt=`http://127.0.0.1:${v.address().port}`;if(Nt!==Lt){h(u,403,{ok:!1,message:"origin rejected"});return}if(!ze(String((Ee=g.headers["x-csrf-token"])!=null?Ee:""),t)){h(u,403,{ok:!1,message:"csrf rejected"});return}if(!String((Ie=g.headers.cookie)!=null?Ie:"").includes(`bg_session=${n}`)){h(u,403,{ok:!1,message:"session rejected"});return}if(!String((ve=g.headers["content-type"])!=null?ve:"").includes("application/json")){h(u,415,{ok:!1,message:"content-type rejected"});return}if(c){h(u,409,{ok:!1,message:"already submitted"});return}let _e=await Xt(g);if(_e==null){h(u,413,{ok:!1,message:"body too large"});return}let J="";try{J=String((we=JSON.parse(_e).key)!=null?we:"").trim()}catch{h(u,400,{ok:!1,message:"invalid json"});return}if(!J||J.length>Gt){h(u,400,{ok:!1,message:"invalid key"});return}c=!0,I=!0,b=null,h(u,200,{ok:!0}),s==null||s.resolve(J),clearTimeout(re),C=setTimeout(()=>{ye({ok:!1,message:"\u6821\u9A8C\u8D85\u65F6\u3002\u8BF7\u56DE\u5230 AI \u52A9\u624B\u67E5\u770B\u8FD9\u6B21\u767B\u5F55\u7684\u7ED3\u679C\u3002"})},zt()),C.unref();return}if(g.method==="GET"&&$.pathname==="/result"){if(!ze(String((Ae=g.headers["x-csrf-token"])!=null?Ae:""),t)){h(u,403,{ok:!1,message:"csrf rejected"});return}if(!String((Se=g.headers.cookie)!=null?Se:"").includes(`bg_session=${n}`)){h(u,403,{ok:!1,message:"session rejected"});return}if(!I){h(u,409,{ok:!1,message:"not submitted"});return}if(b==null){h(u,200,{state:"pending"});return}h(u,200,{state:"done",...b}),b.retryable||Rt();return}u.writeHead(404).end()}if(process.env.BEST_GEO_TEST_FORCE_LISTEN_ERROR==="1")throw Object.assign(new Error("listen EACCES: permission denied 127.0.0.1"),{code:"EACCES"});v.on("error",g=>{s==null||s.reject(g)}),await new Promise((g,u)=>{v.once("error",u),v.listen(0,"127.0.0.1",()=>{v.removeListener("error",u),g()})});let $t=v.address().port,re=he();function he(){let g=setTimeout(()=>{s==null||s.reject(new Error("LOCAL_INTAKE_TIMEOUT")),z()},Ne);return g.unref(),g}function ye(g){if(b==null){if(b=g,C&&(clearTimeout(C),C=null),g.retryable){c=!1,m=d(),re=he();return}H=setTimeout(()=>z(),Qt()),H.unref()}}let xe=!1;function z(){var g;if(!xe){xe=!0,clearTimeout(re);for(let u of[C,H,V])u&&clearTimeout(u);C=null,H=null,V=null,(g=v.closeAllConnections)==null||g.call(v),v.close()}}return{url:`http://127.0.0.1:${$t}/?state=${e}`,nextKey:()=>m,publishResult:ye,close:z}}function h(e,t,n){e.writeHead(t,{"Content-Type":"application/json","Cache-Control":"no-store"}),e.end(JSON.stringify(n))}async function Xt(e){let t=[],n=0;for await(let r of e){if(n+=r.length,n>Ht)return null;t.push(r)}return Buffer.concat(t).toString("utf8")}function ze(e,t){let n=Buffer.from(e),r=Buffer.from(t);return n.length===r.length&&(0,_.timingSafeEqual)(n,r)}async function j(){let e=qe();if(!e)return null;let t=await tt(e.apiKey);return t.ok?(de({userId:t.data.user.id,agentId:t.data.agentId,companyIds:t.data.companyIds}),null):ae(t)?(le(),null):l("SERVER_ERROR",`\u672C\u673A\u6709\u4E00\u4EFD\u5F85\u786E\u8BA4\u7684\u6388\u6743\uFF0C\u6682\u65F6\u65E0\u6CD5\u4E0E\u670D\u52A1\u7AEF\u786E\u8BA4\uFF1A${t.message}`,{requestId:t.requestId,nextAction:{type:"ask_user",message:"\u7F51\u7EDC\u6062\u590D\u540E\u91CD\u8BD5\u540C\u4E00\u6761\u547D\u4EE4\u5373\u53EF\u81EA\u52A8\u6536\u655B\uFF1B\u5728\u6B64\u4E4B\u524D\u4E0D\u8981\u91CD\u65B0\u767B\u5F55\uFF0C\u4E5F\u4E0D\u8981\u5220\u9664\u672C\u673A\u914D\u7F6E\u6587\u4EF6\u3002"}})}async function We(){var d;let e=Y(),t=await j();if(t){a(t);return}let n=P(),r;try{r=await Qe()}catch(m){a(l("HOST_PERMISSION_REQUIRED",`\u65E0\u6CD5\u5728\u672C\u673A\u542F\u52A8\u5F55\u5165\u670D\u52A1\uFF1A${Zt(m)}`,{nextAction:{type:"request_host_approval",message:"Best GEO \u9700\u8981\u5728 127.0.0.1 \u4E0A\u76D1\u542C\u4E00\u4E2A\u968F\u673A\u7AEF\u53E3\u6765\u63A5\u6536\u7528\u6237\u7C98\u8D34\u7684\u5BC6\u94A5\uFF08\u4E0D\u5BF9\u5916\u66B4\u9732\uFF09\u3002\u8BF7\u7528\u5F53\u524D\u5DE5\u5177\u7684\u6743\u9650\u786E\u8BA4\u673A\u5236\u6388\u6743\u672C\u673A\u56DE\u73AF\u7AEF\u53E3\u76D1\u542C\u540E\u91CD\u8BD5\u540C\u4E00\u6761\u547D\u4EE4\u3002",capability:"loopback_port",command:`${p} auth login`}}));return}Yt(r.url);let o=`[${p}]`;process.stderr.write(`${o} auth login \u5DF2\u542F\u52A8\u672C\u673A\u5F55\u5165\u670D\u52A1\uFF0C\u4F1A\u963B\u585E\u7B49\u5F85\u7528\u6237\u7C98\u8D34\u5BC6\u94A5\uFF0C\u6700\u957F 5 \u5206\u949F\u3002
|
|
361
361
|
${o} \u8C03\u7528\u65B9\u8BF7\u4FDD\u6301\u672C\u8FDB\u7A0B\u8FD0\u884C\u76F4\u5230\u5B83\u81EA\u884C\u9000\u51FA\uFF0C\u4E0D\u8981\u4E2D\u65AD\u3001\u4E0D\u8981\u8F6C\u4EA4\u7ED9\u7528\u6237\u5728\u522B\u5904\u6267\u884C\uFF1B
|
|
362
362
|
${o} \u8FDB\u7A0B\u9000\u51FA\u65F6 stdout \u4F1A\u7ED9\u51FA\u552F\u4E00\u4E00\u4E2A JSON \u7ED3\u679C\uFF0C\u90A3\u65F6\u518D\u5411\u7528\u6237\u6C47\u62A5\u6210\u8D25\u3002
|
|
363
363
|
${o} \u73B0\u5728\u8BF7\u628A\u4E0B\u9762\u8FD9\u4E2A\u5730\u5740\u8F6C\u8FBE\u7ED9\u7528\u6237\uFF0C\u8BA9\u4ED6\u5728\u6D4F\u89C8\u5668\u91CC\u6253\u5F00\u5E76\u7C98\u8D34\u5BC6\u94A5\uFF08\u5BC6\u94A5\u4E0D\u8981\u7ECF\u8FC7\u4F60\uFF09\uFF1A
|
|
364
364
|
`),process.stderr.write(`${o} \u672C\u5730\u9875\u9762\uFF1A${r.url}
|
|
365
365
|
`),n&&process.stderr.write(`${o} \u672C\u673A\u5DF2\u6709\u4E00\u4EFD\u6388\u6743\uFF0C\u5F55\u5165\u65B0\u5BC6\u94A5\u4F1A\u66FF\u6362\u5B83\u3002
|
|
366
|
-
`);let i;for(;;){let m;try{m=await r.nextKey()}catch{r.close(),a(l("AUTH_REQUIRED","\u672C\u5730\u5F55\u5165\u8D85\u65F6\u6216\u88AB\u53D6\u6D88",{nextAction:{type:"auth_login",message:"\u7528\u6237\u5728 5 \u5206\u949F\u5185\u6CA1\u6709\u5B8C\u6210\u7C98\u8D34\u3002\u5148\u95EE\u6E05\u4ED6\u662F\u5426\u5DF2\u7ECF\u62FF\u5230\u5BC6\u94A5\uFF0C\u518D\u7531\u4F60\u91CD\u65B0\u6267\u884C command\uFF0C\u5E76\u628A\u65B0\u7684\u672C\u5730\u9875\u9762\u5730\u5740\u8F6C\u8FBE\u7ED9\u4ED6\u3002",command:`${
|
|
367
|
-
`),je(m),i=await tt(m);let
|
|
368
|
-
`);continue}process.stderr.write(`${o} \u672A\u80FD\u786E\u8BA4\u7ED1\u5B9A\u7ED3\u679C\uFF0C\u5DF2\u4FDD\u7559\u8FD9\u628A\u5F85\u786E\u8BA4\u7684\u5BC6\u94A5\u3002\u7F51\u7EDC\u6062\u590D\u540E\u6267\u884C\u4EFB\u610F ${
|
|
369
|
-
`),a(i);return}let s=de({userId:i.data.user.id,agentId:i.data.agentId,companyIds:i.data.companyIds});a(k({user:i.data.user,device:i.data.device,companyIds:(d=s==null?void 0:s.companyIds)!=null?d:i.data.companyIds,replacedPreviousAuthorization:i.data.replacedPreviousAuthorization,configPath:T()},i.requestId))}async function Ye(){let e=await j();if(e){a(e);return}let t=P();if(!t){a(et());return}let n=await y("/companies",{apiKey:t,query:{page:1,limit:100}});if(!n.ok){a(n);return}let r=Y();a(k({loggedIn:!0,device:{deviceId:r.deviceId,deviceName:r.deviceName,platform:r.platform},user:Z()?{id:Z().userId,agentId:Z().agentId}:null,companies:n.data.data.map(o=>({id:o.id,name:o.name})),configPath:T()},n.requestId))}async function Ze(){let e=await j();if(e){a(e);return}let t=P();if(!t){a(et());return}let n=await y("/auth/logout",{method:"POST",apiKey:t});if(!n.ok){a(n);return}Ge(),a(k({loggedOut:!0,revoked:n.data,note:"\u670D\u52A1\u7AEF\u5BC6\u94A5\u5DF2\u64A4\u9500\uFF0C\u672C\u673A\u51ED\u636E\u5DF2\u6E05\u9664\u3002\u8BBE\u5907\u8EAB\u4EFD\u4FDD\u7559\uFF0C\u91CD\u65B0\u767B\u5F55\u4F1A\u590D\u7528\u540C\u4E00\u53F0\u8BBE\u5907\u3002"},n.requestId))}function et(){return l("AUTH_REQUIRED","\u672C\u673A\u8FD8\u6CA1\u6709\u53EF\u7528\u7684\u6388\u6743",{nextAction:{type:"auth_login",message:"\u5148\u8BA9\u7528\u6237\u5230\u6240\u5C5E SaaS \u7F51\u9875\u7684\u5BC6\u94A5\u7BA1\u7406\u91CC\u521B\u5EFA\u300CAI \u52A9\u624B\u5BC6\u94A5\u300D\u5E76\u9009\u597D\u6388\u6743\u516C\u53F8\uFF1B\u7136\u540E\u7531\u4F60\u76F4\u63A5\u6267\u884C command\uFF0C\u5B83\u4F1A\u963B\u585E\u6700\u957F 5 \u5206\u949F\u7B49\u5F85\u7528\u6237\u5728\u672C\u673A\u9875\u9762\u7C98\u8D34\u5BC6\u94A5\u3002\u6267\u884C\u671F\u95F4\u628A stderr \u91CC\u7684\u672C\u5730\u9875\u9762\u5730\u5740\u8F6C\u8FBE\u7ED9\u7528\u6237\uFF0C\u4FDD\u6301\u8FDB\u7A0B\u8FD0\u884C\u76F4\u5230\u5B83\u81EA\u884C\u9000\u51FA\uFF0C\u4E0D\u8981\u4E2D\u65AD\uFF0C\u4E5F\u4E0D\u8981\u8BA9\u7528\u6237\u5728\u522B\u5904\u6267\u884C\u3002",command:`${c} auth login`}})}function Wt(e){var t;return e.code==="AUTH_REQUIRED"?"\u8FD9\u628A\u5BC6\u94A5\u7528\u4E0D\u4E86\uFF08\u65E0\u6548\u6216\u5DF2\u5931\u6548\uFF09\u3002\u8BF7\u786E\u8BA4\u6574\u4E32\u90FD\u590D\u5236\u5B8C\u6574\u4E86\uFF0C\u6216\u5230\u7F51\u9875\u91CD\u65B0\u521B\u5EFA\u4E00\u628A\u518D\u7C98\u8D34\u3002":e.code==="DEVICE_MISMATCH"?"\u8FD9\u628A\u5BC6\u94A5\u5DF2\u7ECF\u7ED1\u5B9A\u5230\u53E6\u4E00\u53F0\u8BBE\u5907\u3002\u8BF7\u5230\u7F51\u9875\u65B0\u5EFA\u4E00\u628A\u5BC6\u94A5\uFF0C\u518D\u7C98\u8D34\u5230\u8FD9\u91CC\u3002":(t=e.message)!=null?t:"\u767B\u5F55\u5931\u8D25\u3002\u8BF7\u56DE\u5230 AI \u52A9\u624B\u67E5\u770B\u8BE6\u60C5\u3002"}function tt(e){let t=Y();return y("/auth/claim",{method:"POST",apiKey:e,body:{...t,cliVersion:x}})}function Yt(e){if(process.env.BEST_GEO_NO_BROWSER==="1")return;let t=process.platform==="darwin"?"open":process.platform==="win32"?"cmd":"xdg-open",n=process.platform==="win32"?["/c","start","",e]:[e];(0,Xe.execFile)(t,n,()=>{})}function Zt(e){return e instanceof Error?e.message:String(e)}async function G(){let e=await j();if(e)return{ok:!1,envelope:e};let t=P();return t?{ok:!0,apiKey:t}:{ok:!1,envelope:l("AUTH_REQUIRED","\u672C\u673A\u8FD8\u6CA1\u6709\u53EF\u7528\u7684\u6388\u6743",{nextAction:{type:"auth_login",message:"\u5148\u8BA9\u7528\u6237\u5230\u6240\u5C5E SaaS \u7F51\u9875\u7684\u5BC6\u94A5\u7BA1\u7406\u91CC\u521B\u5EFA\u300CAI \u52A9\u624B\u5BC6\u94A5\u300D\u5E76\u9009\u597D\u6388\u6743\u516C\u53F8\uFF1B\u7136\u540E\u7531\u4F60\u76F4\u63A5\u6267\u884C command\uFF0C\u5B83\u4F1A\u963B\u585E\u6700\u957F 5 \u5206\u949F\u7B49\u5F85\u7528\u6237\u5728\u672C\u673A\u9875\u9762\u7C98\u8D34\u5BC6\u94A5\u3002",command:`${c} auth login`}})}}var rt=require("node:fs"),D=require("node:path"),ot=require("node:url");function en(e){if(e.cjsDir)return(0,D.join)(e.cjsDir,"..");if(!e.moduleUrl)throw new Error("\u7F3A\u5C11 CLI \u8FD0\u884C\u4F4D\u7F6E");return(0,D.join)((0,D.dirname)((0,ot.fileURLToPath)(e.moduleUrl)),"..","..","..")}function tn(){return en({cjsDir:typeof __dirname=="string"?__dirname:void 0,moduleUrl:void 0})}function U(...e){return(0,rt.readFileSync)((0,D.join)(tn(),...e),"utf8")}function it(){a(k({package:L,version:x,protocolVersion:F,commands:[{command:`${c} version --check`,description:"\u68C0\u67E5\u7248\u672C\u662F\u5426\u9700\u8981\u5347\u7EA7"},{command:`${c} capabilities`,description:"\u5217\u51FA\u53EF\u7528\u80FD\u529B\u53CA\u5176\u8F93\u5165 schema"},{command:`${c} skill get --raw > <\u4F60\u7684 skill \u76EE\u5F55>/best-geo/SKILL.md`,description:"\u76F4\u63A5\u628A Skill \u5199\u6210\u6587\u4EF6\uFF08\u63A8\u8350\uFF1B--raw \u8F93\u51FA markdown \u539F\u6587\uFF0C\u4E0D\u662F JSON\uFF09"},{command:`${c} skill get`,description:"\u4EE5 JSON \u4FE1\u5C01\u8FD4\u56DE Skill \u5185\u5BB9\u548C revision"},{command:`${c} guide list`,description:"\u5217\u51FA\u4E1A\u52A1\u6307\u5357"},{command:`${c} guide get <name>`,description:"\u8BFB\u53D6\u4E00\u4EFD\u4E1A\u52A1\u6307\u5357"},{command:`${c} auth login`,description:"\u6253\u5F00\u672C\u5730\u9875\u9762\u5F55\u5165\u5BC6\u94A5\u5E76\u7ED1\u5B9A\u672C\u673A"},{command:`${c} auth status`,description:"\u67E5\u770B\u5F53\u524D\u6388\u6743\u72B6\u6001"},{command:`${c} auth logout`,description:"\u64A4\u9500\u670D\u52A1\u7AEF\u5BC6\u94A5\u5E76\u6E05\u9664\u672C\u673A\u51ED\u636E"},{command:`${c} call <capability> --input '<JSON>'`,description:"\u8C03\u7528\u4E00\u4E2A\u67E5\u8BE2\u80FD\u529B"},{command:`${c} plan <operation> --input '<JSON>'`,description:"\u751F\u6210\u5199\u64CD\u4F5C\u8BA1\u5212\uFF0C\u8FD4\u56DE\u7ED9\u7528\u6237\u770B\u7684\u53D8\u66F4\u6458\u8981\uFF08\u4E0D\u5199\u6570\u636E\uFF09"},{command:`${c} apply <planId>`,description:"\u6267\u884C\u8BA1\u5212\u3002\u5FC5\u987B\u5148\u628A plan \u7684\u6458\u8981\u7ED9\u7528\u6237\u770B\u8FC7\u5E76\u5F97\u5230\u540C\u610F"}],nextAction:{type:"install_skill",command:`${c} skill get --raw`,message:"\u6309\u5F53\u524D AI \u5DE5\u5177\u7684 Skill \u673A\u5236\u9009\u4E00\u4E2A\u5B89\u88C5\u76EE\u5F55\uFF0C\u7528 best-geo skill get --raw \u628A\u5185\u5BB9\u76F4\u63A5\u91CD\u5B9A\u5411\u6210 SKILL.md\uFF0C\u7136\u540E\u52A0\u8F7D\u5B83"}}))}async function st(e){if(!e){a(k({package:L,version:x,protocolVersion:F,env:$e,apiBase:Q}));return}let t=await y("/meta");if(!t.ok){a(t);return}if(nt(x,t.data.minimumCliVersion)<0){a(l("CLI_UPDATE_REQUIRED",`\u5F53\u524D\u7248\u672C ${x} \u4F4E\u4E8E\u6700\u4F4E\u8981\u6C42 ${t.data.minimumCliVersion}`,{requestId:t.requestId,data:{current:x,...t.data},nextAction:{type:"upgrade",message:"\u5347\u7EA7\u540E\u91CD\u8BD5",command:`npm install -g ${L}@latest`}}));return}a(k({current:x,...t.data,updateAvailable:nt(x,t.data.latestCliVersion)<0},t.requestId))}function at(){a(k(JSON.parse(U("capabilities","capabilities.json"))))}function lt(e){let t=ct(U("skills","best-geo","SKILL.md"));if(e){process.stdout.write(t);return}a(k({name:c,revision:1,content:t}))}var ue=["company","product","question","article","knowledge","material","question-task","article-task","scheduled-monitor","publication","video"];function dt(){a(k({guides:ue.map(e=>{let t=JSON.parse(U("guides",`${e}.json`));return{name:t.name,title:t.title,whenToUse:t.whenToUse}})}))}function pt(e){if(!ue.includes(e)){a(l("GUIDE_NOT_FOUND",`\u6CA1\u6709\u540D\u4E3A ${e} \u7684\u6307\u5357`,{data:{available:ue}}));return}a(k(JSON.parse(ct(U("guides",`${e}.json`)))))}function nt(e,t){var o,i;let n=e.split(".").map(s=>Number.parseInt(s,10)||0),r=t.split(".").map(s=>Number.parseInt(s,10)||0);for(let s=0;s<Math.max(n.length,r.length);s+=1){let d=((o=n[s])!=null?o:0)-((i=r[s])!=null?i:0);if(d!==0)return d<0?-1:1}return 0}function ct(e){return c==="best-geo"?e:e.replace(/\bbest-geo\b(?!-)/g,c)}var me=null,ge=null;function ut(){return me===null&&(me=JSON.parse(U("capabilities","capabilities.json")).capabilities),me}function nn(){return ge===null&&(ge=new Map(ut().filter(e=>e.inputSchema!==void 0).map(e=>[e.name,e.inputSchema]))),ge}function mt(){return ut().filter(e=>e.mode==="write").map(e=>e.name)}function ee(e,t){let n=nn().get(e);return n===void 0?[]:be(t,n,"")}function be(e,t,n){if(t.type==="object"||t.properties!==void 0)return rn(e,t,n);let r=gt(e,t,n);if(r!==null)return[r];let o=[];return typeof e=="string"&&t.minLength!==void 0&&e.length<t.minLength&&o.push(t.minLength===1?`${n} \u4E0D\u80FD\u662F\u7A7A\u5B57\u7B26\u4E32`:`${n} \u81F3\u5C11 ${t.minLength} \u4E2A\u5B57\u7B26\uFF0C\u5F53\u524D ${e.length} \u4E2A`),typeof e=="string"&&t.maxLength!==void 0&&e.length>t.maxLength&&o.push(`${n} \u6700\u591A ${t.maxLength} \u4E2A\u5B57\u7B26\uFF0C\u5F53\u524D ${e.length} \u4E2A`),typeof e=="number"&&(t.maximum!==void 0&&e>t.maximum&&o.push(`${n} \u4E0D\u80FD\u5927\u4E8E ${t.maximum}`),t.minimum!==void 0&&e<t.minimum&&o.push(`${n} \u4E0D\u80FD\u5C0F\u4E8E ${t.minimum}`)),t.enum!==void 0&&!t.enum.includes(e)&&o.push(`${n} \u53EA\u80FD\u662F ${t.enum.join(" / ")} \u4E4B\u4E00\uFF0C\u6536\u5230 ${R(e)}`),Array.isArray(e)&&(t.minItems!==void 0&&e.length<t.minItems&&o.push(`${n} \u81F3\u5C11\u8981 ${t.minItems} \u9879\uFF0C\u5F53\u524D ${e.length} \u9879`),t.maxItems!==void 0&&e.length>t.maxItems&&o.push(`${n} \u6700\u591A ${t.maxItems} \u9879\uFF0C\u5F53\u524D ${e.length} \u9879`),t.items!==void 0&&e.forEach((i,s)=>{o.push(...be(i,t.items,`${n}[${s}]`))})),o}function rn(e,t,n){var d,m;if(typeof e!="object"||e===null||Array.isArray(e))return[`${n||"\u5165\u53C2"} \u5FC5\u987B\u662F\u5BF9\u8C61`];let r=e,o=(d=t.properties)!=null?d:{},i=(m=t.required)!=null?m:[],s=[];for(let p of i)(r[p]===void 0||r[p]===null)&&s.push(`\u7F3A\u5C11\u5FC5\u586B\u5B57\u6BB5 ${fe(n,p)}`);if(t.additionalProperties===!1){let p=Object.keys(o);for(let I of Object.keys(r))p.includes(I)||s.push(`\u4E0D\u8BA4\u8BC6\u7684\u5B57\u6BB5 ${fe(n,I)}\uFF0C\u53EF\u7528\u5B57\u6BB5\uFF1A${p.join("\u3001")}`)}for(let[p,I]of Object.entries(o)){let b=r[p];b===void 0||b===null&&i.includes(p)||s.push(...be(b,I,fe(n,p)))}return s}function gt(e,t,n){if(Array.isArray(t.type)){let r=t.type.map(o=>gt(e,{...t,type:o},n));return r.some(o=>o===null)?null:r[0]}switch(t.type){case"null":return e===null?null:`${n} \u5FC5\u987B\u662F null\uFF0C\u6536\u5230 ${R(e)}`;case"string":return typeof e=="string"?null:`${n} \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\uFF0C\u6536\u5230 ${R(e)}`;case"number":return typeof e=="number"&&Number.isFinite(e)?null:`${n} \u5FC5\u987B\u662F\u6570\u5B57\uFF0C\u6536\u5230 ${R(e)}`;case"integer":return typeof e=="number"&&Number.isInteger(e)?null:`${n} \u5FC5\u987B\u662F\u6574\u6570\uFF0C\u6536\u5230 ${R(e)}`;case"boolean":return typeof e=="boolean"?null:`${n} \u5FC5\u987B\u662F true \u6216 false\uFF0C\u6536\u5230 ${R(e)}`;case"array":return Array.isArray(e)?null:`${n} \u5FC5\u987B\u662F\u6570\u7EC4\uFF0C\u6536\u5230 ${R(e)}`;default:return null}}function fe(e,t){return e===""?t:`${e}.${t}`}function R(e){if(e===null)return"null";if(Array.isArray(e))return"\u6570\u7EC4";if(typeof e=="object")return"\u5BF9\u8C61";let t=String(e);return typeof e=="string"?`\u5B57\u7B26\u4E32 "${on(t)}"`:t}function on(e){return e.length>20?`${e.slice(0,20)}\u2026`:e}function te(e,t){return l("VALIDATION_FAILED",`\u5165\u53C2\u4E0D\u5408\u6CD5\uFF1A${t.join("\uFF1B")}`,{data:{name:e,errors:t},nextAction:{type:"ask_user",message:"\u6309 capabilities \u91CC\u7684 inputSchema \u4FEE\u6B63\u53C2\u6570\u540E\u91CD\u8BD5\uFF1B\u7F3A\u7684\u4FE1\u606F\u95EE\u7528\u6237"}})}var ft={"companies.list":e=>({path:"/companies",query:e}),"companies.get":e=>({path:`/companies/${Number(e.id)}`}),"products.list":e=>({path:"/products",query:e}),"products.get":e=>({path:`/products/${Number(e.id)}`}),"questions.list":e=>({path:"/questions",query:e}),"questions.get":e=>({path:`/questions/${Number(e.id)}`}),"articles.list":e=>({path:"/articles",query:e}),"articles.get":e=>({path:`/articles/${Number(e.id)}`,query:e.withContent===!0?{withContent:"true"}:void 0}),"knowledge.list":e=>({path:"/knowledge",query:e}),"knowledge.get":e=>({path:`/knowledge/${Number(e.id)}`}),"images.list":e=>({path:"/images",query:e}),"images.get":e=>({path:`/images/${Number(e.id)}`}),"videos.list":e=>({path:"/videos",query:e}),"videos.get":e=>({path:`/videos/${Number(e.id)}`}),"prompts.list":e=>({path:"/prompts",query:e}),"models.list":e=>({path:"/models",query:e}),"questionTasks.list":e=>({path:"/question-tasks",query:e}),"questionTasks.get":e=>({path:`/question-tasks/${Number(e.taskId)}`}),"articleTasks.list":e=>({path:"/article-tasks",query:e}),"articleTasks.get":e=>({path:`/article-tasks/${Number(e.taskId)}`}),"keywordTasks.list":e=>({path:"/keyword-tasks",query:e}),"keywordTasks.get":e=>({path:`/keyword-tasks/${Number(e.taskId)}`}),"tags.list":e=>({path:"/tags",query:e}),"folders.list":e=>({path:"/article-folders",query:e}),"publicationPlatforms.list":e=>({path:"/publication-platforms",query:e}),"publicationAccounts.list":e=>({path:"/publication-accounts",query:e}),"publicationTasks.list":e=>({path:"/publication-tasks",query:e}),"publicationRecords.list":e=>({path:"/publication-records",query:e}),"mediaPlatforms.list":e=>({path:"/media-platforms",query:e}),"mediaPlatforms.get":e=>({path:`/media-platforms/${Number(e.mediaId)}`}),"mediaPublications.list":e=>({path:"/media-publications",query:e}),"mediaPublications.summary":e=>({path:"/media-publications/summary",query:e}),"articleTasks.reuseConfig":e=>({path:`/article-tasks/${Number(e.taskId)}/reuse-config`}),"scheduledSentiment.generateQuestions":e=>({path:"/scheduled-sentiment/generate-questions",method:"POST",body:e}),"indexing.suggestCompetitors":e=>({path:"/suggest-competitors",method:"POST",body:e}),"indexingPlatforms.list":()=>({path:"/indexing-platforms"}),"scheduledIndexing.list":e=>({path:"/scheduled-indexing",query:e}),"scheduledIndexing.get":e=>({path:`/scheduled-indexing/${Number(e.planId)}`}),"scheduledIndexing.runs":e=>({path:`/scheduled-indexing/${Number(e.planId)}/runs`,query:E(e)}),"scheduledIndexing.metrics":e=>({path:`/scheduled-indexing/${Number(e.planId)}/metrics`,query:E(e)}),"scheduledSentiment.list":e=>({path:"/scheduled-sentiment",query:e}),"scheduledSentiment.get":e=>({path:`/scheduled-sentiment/${Number(e.planId)}`}),"scheduledSentiment.runs":e=>({path:`/scheduled-sentiment/${Number(e.planId)}/runs`,query:E(e)}),"scheduledSentiment.metrics":e=>({path:`/scheduled-sentiment/${Number(e.planId)}/metrics`,query:E(e)}),"scheduledIndexing.answers":e=>({path:`/scheduled-indexing/${Number(e.planId)}/answers`,query:E(e)}),"scheduledIndexing.citations":e=>({path:`/scheduled-indexing/${Number(e.planId)}/citations`,query:E(e)}),"scheduledIndexing.topicStats":e=>({path:`/scheduled-indexing/${Number(e.planId)}/topic-stats`,query:E(e)}),"scheduledIndexing.topicPlatformMatrix":e=>({path:`/scheduled-indexing/${Number(e.planId)}/topic-platform-matrix`,query:E(e)}),"scheduledSentiment.answers":e=>({path:`/scheduled-sentiment/${Number(e.planId)}/answers`,query:E(e)}),"scheduledSentiment.citations":e=>({path:`/scheduled-sentiment/${Number(e.planId)}/citations`,query:E(e)}),"scheduledSentiment.topicStats":e=>({path:`/scheduled-sentiment/${Number(e.planId)}/topic-stats`,query:E(e)}),"textToImages.models":()=>({path:"/text-to-image-models"}),"textToImages.list":e=>({path:"/text-to-images",query:e}),"textToImages.get":e=>({path:`/text-to-images/${Number(e.id)}`}),"textToImages.countUncompleted":()=>({path:"/text-to-images/count-uncompleted"}),"dhVideos.avatars":e=>({path:"/dh-videos/avatars",method:"POST",body:e}),"dhVideos.voices":e=>({path:"/dh-videos/voices",method:"POST",body:e}),"dhVideos.list":e=>({path:"/dh-videos",query:e}),"dhVideos.get":e=>({path:`/dh-videos/${Number(e.id)}`}),"clipTasks.templates":e=>({path:"/clip-tasks/templates",method:"POST",body:e}),"clipTasks.bgm":e=>({path:"/clip-tasks/bgm",method:"POST",body:e}),"clipTasks.list":e=>({path:"/clip-tasks",query:e}),"clipTasks.get":e=>({path:`/clip-tasks/${Number(e.id)}`})};function E(e){let{planId:t,...n}=e;return n}function sn(){return Object.keys(ft)}async function bt(e,t){let n=ft[e];if(!n){a(l("VALIDATION_FAILED",`\u672A\u77E5\u80FD\u529B\uFF1A${e}`,{data:{available:sn()},nextAction:{type:"ask_user",message:"\u5148\u6267\u884C best-geo capabilities \u67E5\u770B\u53EF\u7528\u80FD\u529B"}}));return}let r={};if(t)try{r=JSON.parse(t)}catch{a(l("VALIDATION_FAILED","--input \u4E0D\u662F\u5408\u6CD5 JSON"));return}let o=ee(e,r);if(o.length>0){a(te(e,o));return}let i=await G();if(!i.ok){a(i.envelope);return}let{path:s,query:d,method:m,body:p}=n(r);a(await y(s,{apiKey:i.apiKey,query:d,method:m,body:p}))}var O=require("node:fs"),M=require("node:path");var an={image:{maxBytes:2*1024*1024,extensions:[".png",".jpg",".jpeg"],label:"\u56FE\u7247"},video:{maxBytes:200*1024*1024,extensions:[".mp4"],label:"\u89C6\u9891"},thumbnail:{maxBytes:5*1024*1024,extensions:[".png",".jpg",".jpeg"],label:"\u5C01\u9762\u56FE"}},ln={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".mp4":"video/mp4"},ht={"images.create":[{pathKey:"filePath",metaKey:"file",uploadField:"fileUrl",kind:"image"}],"videos.create":[{pathKey:"videoPath",metaKey:"video",uploadField:"videoUrl",kind:"video"},{pathKey:"thumbnailPath",metaKey:"thumbnail",uploadField:"thumbnail",kind:"thumbnail"}]},dn=900*1e3;function yt(e){return ht[e]!==void 0}function xt(e){return q()[e]!==void 0}function kt(e,t){var i;let n=(i=ht[e])!=null?i:[],r={...t},o={};for(let s of n){let d=t[s.pathKey];if(typeof d!="string"||!d.trim())return{ok:!1,envelope:un(s)};let m=(0,M.resolve)(d.trim()),p=cn(m,s);if(!p.ok)return{ok:!1,envelope:p.envelope};delete r[s.pathKey],r[s.metaKey]={name:(0,M.basename)(m),size:p.size},o[s.uploadField]=m}return{ok:!0,input:r,paths:o}}function Et(e,t){se({...q(),[e]:{paths:t,createdAt:Date.now()}})}async function It(e,t){let n=q()[e];if(!n)return{ok:!1,envelope:l("VALIDATION_FAILED","\u672C\u673A\u6CA1\u6709\u8FD9\u4E2A\u8BA1\u5212\u7684\u5F85\u4F20\u6587\u4EF6\u8BB0\u5F55",{nextAction:{type:"ask_user",message:"\u91CD\u65B0\u6267\u884C best-geo plan \u751F\u6210\u8BA1\u5212\uFF0C\u628A\u6458\u8981\u7ED9\u7528\u6237\u786E\u8BA4\u540E\u518D apply\u2014\u2014\u8BA1\u5212\u548C\u5F85\u4F20\u6587\u4EF6\u662F\u4E00\u8D77\u751F\u6210\u7684"}})};let r={};for(let[o,i]of Object.entries(n.paths)){if(!(0,O.existsSync)(i))return{ok:!1,envelope:l("VALIDATION_FAILED",`\u6587\u4EF6\u5DF2\u7ECF\u4E0D\u5728\u4E86\uFF1A${i}`)};let s=await y(`/plans/${encodeURIComponent(e)}/uploads/presign`,{method:"POST",apiKey:t,body:{field:o,fileName:(0,M.basename)(i)}});if(!s.ok)return{ok:!1,envelope:s};let d=await pn(s.data,i);if(!d.ok)return{ok:!1,envelope:d.envelope};r[o]=s.data.uploadUrl}return{ok:!0,uploads:r}}function vt(e){let t=q();delete t[e],se(t)}async function pn(e,t){let n=ln[wt(t)];if(!n)return{ok:!1,envelope:l("UPLOAD_FAILED",`${t} \u7684\u6587\u4EF6\u7C7B\u578B\u6CA1\u6709\u767B\u8BB0 MIME\uFF0C\u4F20\u4E0D\u4E86`)};let r=new FormData;r.append("key",e.key),r.append("policy",e.policy),r.append("OSSAccessKeyId",e.OSSAccessKeyId),r.append("signature",e.signature),r.append("callback",e.callback),r.append("Content-Disposition",e["Content-Disposition"]),r.append("success_action_status","200"),r.append("file",await(0,O.openAsBlob)(t,{type:n}),(0,M.basename)(t));try{let o=await fetch(e.host,{method:"POST",body:r,signal:AbortSignal.timeout(dn)}),i=(await o.text().catch(()=>"")).slice(0,300);if(!o.ok)return{ok:!1,envelope:l("UPLOAD_FAILED",`\u4E0A\u4F20\u5931\u8D25\uFF08HTTP ${o.status}\uFF09\uFF1A${i}`,{nextAction:{type:"ask_user",message:"\u628A\u8FD9\u4E2A\u60C5\u51B5\u544A\u8BC9\u7528\u6237\uFF0C\u7A0D\u540E\u91CD\u65B0\u6267\u884C\u4E00\u6B21 plan \u518D\u8BD5"}})};let s=mn(i);return s?{ok:!1,envelope:l("UPLOAD_FAILED",`\u6587\u4EF6\u5DF2\u4E0A\u4F20\uFF0C\u4F46\u767B\u8BB0\u5931\u8D25\uFF1A${s}`,{nextAction:{type:"ask_user",message:"\u628A\u8FD9\u53E5\u62A5\u9519\u539F\u6837\u544A\u8BC9\u7528\u6237\uFF0C\u8BA9\u4ED6\u8054\u7CFB\u670D\u52A1\u5546\u3002\u91CD\u8BD5\u591A\u534A\u4E0D\u4F1A\u597D\u3002"}})}:{ok:!0}}catch(o){return{ok:!1,envelope:l("UPLOAD_FAILED",`\u4E0A\u4F20\u4E2D\u65AD\uFF1A${o instanceof Error?o.message:String(o)}`,{nextAction:{type:"ask_user",message:"\u4E0A\u4F20\u6CA1\u80FD\u5B8C\u6210\uFF0C\u539F\u56E0\u89C1\u4E0A\u9762\u7684\u62A5\u9519\u539F\u6587\u3002\u544A\u8BC9\u7528\u6237\uFF0C\u7A0D\u540E\u91CD\u65B0\u8D70\u4E00\u904D"}})}}}function cn(e,t){let n=an[t.kind];if(!(0,O.existsSync)(e))return{ok:!1,envelope:l("VALIDATION_FAILED",`\u627E\u4E0D\u5230\u6587\u4EF6\uFF1A${e}`,{nextAction:{type:"ask_user",message:"\u8BA9\u7528\u6237\u786E\u8BA4\u6587\u4EF6\u8DEF\u5F84\u3002\u76F8\u5BF9\u8DEF\u5F84\u662F\u76F8\u5BF9\u4F60\u5F53\u524D\u7684\u5DE5\u4F5C\u76EE\u5F55\u7B97\u7684"}})};let r=(0,O.statSync)(e);if(!r.isFile())return{ok:!1,envelope:l("VALIDATION_FAILED",`${e} \u4E0D\u662F\u4E00\u4E2A\u6587\u4EF6`)};let o=wt(e);return n.extensions.includes(o)?r.size>n.maxBytes?{ok:!1,envelope:l("VALIDATION_FAILED",`${n.label}\u6700\u5927 ${ne(n.maxBytes)}\uFF0C\u5F53\u524D ${ne(r.size)}\uFF0C\u8D85\u51FA ${ne(r.size-n.maxBytes)}`,{nextAction:{type:"ask_user",message:`\u544A\u8BC9\u7528\u6237\u8FD9\u4E2A\u6587\u4EF6\u8D85\u4E86\u591A\u5C11\uFF0C\u5E76\u95EE\u4ED6\u8981\u4E0D\u8981\u4F60\u5148\u628A\u5B83\u538B\u5230 ${ne(n.maxBytes)} \u4EE5\u5185\u518D\u4F20\u3002\u4F60\u53EF\u4EE5\u7528\u7528\u6237\u673A\u5668\u4E0A\u73B0\u6210\u7684\u5DE5\u5177\u5904\u7406\uFF08macOS \u81EA\u5E26 sips\uFF0C\u591A\u6570\u673A\u5668\u6709 ffmpeg\uFF09\uFF0C\u5904\u7406\u5B8C\u7528\u65B0\u6587\u4EF6\u91CD\u65B0 plan\u3002`}})}:{ok:!0,size:r.size}:{ok:!1,envelope:l("VALIDATION_FAILED",`${n.label}\u53EA\u652F\u6301 ${n.extensions.join(" / ")}\uFF0C\u5F53\u524D\u662F ${o||"(\u6CA1\u6709\u6269\u5C55\u540D)"}`,{nextAction:{type:"ask_user",message:`\u628A\u8FD9\u4E2A\u9650\u5236\u544A\u8BC9\u7528\u6237\uFF0C\u95EE\u4ED6\u8981\u4E0D\u8981\u4F60\u5148\u628A\u6587\u4EF6\u8F6C\u6210 ${n.extensions[0]} \u518D\u4F20`}})}}function un(e){return l("VALIDATION_FAILED",`\u7F3A\u5C11 ${e.pathKey}`,{nextAction:{type:"ask_user",message:`${e.pathKey} \u8981\u7ED9\u4E00\u4E2A\u672C\u673A\u6587\u4EF6\u8DEF\u5F84\u3002\u95EE\u7528\u6237\u6587\u4EF6\u653E\u5728\u54EA\uFF0C\u4E0D\u8981\u81EA\u5DF1\u7F16\u4E00\u4E2A\u8DEF\u5F84\u3002`}})}function ne(e){return e>=1024*1024?`${(e/1024/1024).toFixed(1)}MB`:`${Math.max(1,Math.round(e/1024))}KB`}function mn(e){try{let t=JSON.parse(e),n=Number(t.statusCode);if(Number.isFinite(n)&&n!==0&&n!==200)return typeof t.message=="string"?t.message:`statusCode ${n}`}catch{}return null}function wt(e){let t=e.lastIndexOf(".");return t===-1?"":e.toLowerCase().slice(t)}async function At(e,t,n){var I;let r=mt();if(!e||!r.includes(e)){a(l("VALIDATION_FAILED",`\u672A\u77E5\u7684\u5199\u64CD\u4F5C\uFF1A${e!=null?e:"(\u7A7A)"}`,{data:{available:r},nextAction:{type:"ask_user",message:"\u5148\u6267\u884C best-geo capabilities \u67E5\u770B\u53EF\u7528\u80FD\u529B\u548C\u5B83\u4EEC\u7684\u5165\u53C2"}}));return}if(!t&&(n!=null&&n.trim().startsWith("{"))){a(l("VALIDATION_FAILED","\u5165\u53C2\u8981\u653E\u5728 --input \u540E\u9762",{nextAction:{type:"ask_user",message:`\u6B63\u786E\u5199\u6CD5\uFF1Abest-geo plan ${e} --input '<JSON>'`}}));return}let o;try{o=t?JSON.parse(t):{}}catch{a(l("VALIDATION_FAILED","--input \u4E0D\u662F\u5408\u6CD5 JSON"));return}let i=ee(e,o);if(i.length>0){a(te(e,i));return}let s=o,d=null;if(yt(e)){let b=kt(e,o);if(!b.ok){a(b.envelope);return}s=b.input,d=b.paths}let m=await G();if(!m.ok){a(m.envelope);return}let p=await y("/plans",{method:"POST",apiKey:m.apiKey,body:{operation:e,input:s}});p.ok&&d&&((I=p.data)!=null&&I.planId)&&Et(p.data.planId,d),a(p)}async function St(e){if(!e){a(l("VALIDATION_FAILED","\u7F3A\u5C11 planId",{nextAction:{type:"ask_user",message:"\u5148\u6267\u884C best-geo plan <operation> \u751F\u6210\u8BA1\u5212\uFF0C\u628A\u6458\u8981\u7ED9\u7528\u6237\u786E\u8BA4\u540E\u518D\u6267\u884C"}}));return}let t=await G();if(!t.ok){a(t.envelope);return}let n;if(xt(e)){let o=await It(e,t.apiKey);if(!o.ok){a(o.envelope);return}n=o.uploads}let r=await y(`/plans/${encodeURIComponent(e)}/apply`,{method:"POST",apiKey:t.apiKey,body:n?{uploads:n}:{},isWrite:!0});r.ok&&vt(e),a(r)}function _t(e){let t={};for(let n=0;n<e.length;n+=1){let r=e[n];if(!r.startsWith("--"))continue;let o=r.slice(2),i=e[n+1];i&&!i.startsWith("--")?(t[o]=i,n+=1):t[o]=!0}return t}function Ct(e,t){let n=T();if(e.reason==="denied")return l("HOST_PERMISSION_REQUIRED",`\u6CA1\u6709\u6743\u9650\u8BFB\u5199\u672C\u673A\u914D\u7F6E\u6587\u4EF6\uFF1A${n}`,{nextAction:{type:"request_host_approval",message:`Best GEO \u9700\u8981\u8BFB\u5199 ${n} \u6765\u4FDD\u5B58\u672C\u673A\u7684\u8BBE\u5907\u8EAB\u4EFD\u548C\u6388\u6743\u3002\u8BF7\u7528\u5F53\u524D\u5DE5\u5177\u81EA\u5E26\u7684\u6743\u9650\u786E\u8BA4\u673A\u5236\u7533\u8BF7\u5BF9\u8BE5\u6587\u4EF6\u7684\u8BFB\u5199\u6743\u9650\u540E\u91CD\u8BD5\u540C\u4E00\u6761\u547D\u4EE4\uFF0C\u4E0D\u8981\u5173\u95ED\u6574\u4E2A\u6C99\u7BB1\uFF0C\u4E5F\u4E0D\u8981\u8BA9\u7528\u6237\u628A\u5BC6\u94A5\u8D34\u8FDB\u5BF9\u8BDD\u3002`,capability:t.capability,...t.retryCommand?{command:t.retryCommand}:{}}});if(e.reason==="permissions_too_open"||e.reason==="not_owner"){let r=e.reason==="not_owner"?"\u8BE5\u6587\u4EF6\u4E0D\u5C5E\u4E8E\u5F53\u524D\u7CFB\u7EDF\u7528\u6237\uFF0C\u8BF7\u8BA9\u7528\u6237\u786E\u8BA4\u540E\u5220\u9664\u6216\u4FEE\u6B63\u5C5E\u4E3B":`\u8BF7\u8BA9\u7528\u6237\u6267\u884C\uFF1Achmod 600 ${n}`;return l("HOST_PERMISSION_REQUIRED",`\u672C\u673A\u914D\u7F6E\u6587\u4EF6\u6743\u9650\u4E0D\u5B89\u5168\uFF1A${n}`,{nextAction:{type:"ask_user",message:`${e.message}\u3002${r}\uFF0C\u7136\u540E\u91CD\u8BD5\u3002`}})}return l("HOST_PERMISSION_REQUIRED",`\u672C\u673A\u914D\u7F6E\u6587\u4EF6\u5DF2\u635F\u574F\uFF1A${n}`,{nextAction:{type:"ask_user",message:`\u8BF7\u8BA9\u7528\u6237\u5220\u9664 ${n} \u540E\u91CD\u65B0\u6267\u884C\u767B\u5F55\u3002\u8BE5\u6587\u4EF6\u91CC\u53EA\u6709\u672C\u673A\u8BBE\u5907\u8EAB\u4EFD\u548C\u6388\u6743\uFF0C\u5220\u9664\u4E0D\u4F1A\u5F71\u54CD\u670D\u52A1\u7AEF\u6570\u636E\u3002`,command:`${c} auth login`}})}function Tt(e){return e instanceof w}async function gn(){process.stdout.on("error",r=>process.exit(r.code==="EPIPE"?0:1));let[e,...t]=process.argv.slice(2),n=_t(t);switch(e){case void 0:case"help":it();return;case"version":await st(n.check===!0);return;case"capabilities":at();return;case"skill":if(t[0]==="get"){lt(n.raw===!0);return}break;case"guide":if(t[0]==="list"){dt();return}if(t[0]==="get"&&t[1]){pt(t[1]);return}break;case"auth":if(t[0]==="login")return We();if(t[0]==="status")return Ye();if(t[0]==="logout")return Ze();break;case"plan":await At(t[0],typeof n.input=="string"?n.input:void 0,t[1]);return;case"apply":await St(t[0]);return;case"call":if(t[0]){await bt(t[0],typeof n.input=="string"?n.input:void 0);return}break;default:break}a(l("VALIDATION_FAILED",`\u65E0\u6CD5\u8BC6\u522B\u7684\u547D\u4EE4\uFF1A${[e,...t].filter(Boolean).join(" ")}`,{nextAction:{type:"ask_user",message:"\u6267\u884C best-geo help \u67E5\u770B\u53EF\u7528\u547D\u4EE4"}})),process.exitCode=1}gn().catch(e=>{if(Tt(e)){a(Ct(e,{capability:e.reason==="denied"?"config_write":"config_read",retryCommand:fn()})),process.exitCode=1;return}a(l("SERVER_ERROR",e instanceof Error?e.message:String(e))),process.exitCode=1});function fn(){let[e,t]=process.argv.slice(2);if(e==="auth"&&(t==="login"||t==="status"||t==="logout"))return`${c} auth ${t}`}
|
|
366
|
+
`);let i;for(;;){let m;try{m=await r.nextKey()}catch{r.close(),a(l("AUTH_REQUIRED","\u672C\u5730\u5F55\u5165\u8D85\u65F6\u6216\u88AB\u53D6\u6D88",{nextAction:{type:"auth_login",message:"\u7528\u6237\u5728 5 \u5206\u949F\u5185\u6CA1\u6709\u5B8C\u6210\u7C98\u8D34\u3002\u5148\u95EE\u6E05\u4ED6\u662F\u5426\u5DF2\u7ECF\u62FF\u5230\u5BC6\u94A5\uFF0C\u518D\u7531\u4F60\u91CD\u65B0\u6267\u884C command\uFF0C\u5E76\u628A\u65B0\u7684\u672C\u5730\u9875\u9762\u5730\u5740\u8F6C\u8FBE\u7ED9\u4ED6\u3002",command:`${p} auth login`}}));return}process.stderr.write(`${o} \u5DF2\u6536\u5230\u5BC6\u94A5\uFF0C\u6B63\u5728\u5411\u670D\u52A1\u7AEF\u6821\u9A8C\u5E76\u7ED1\u5B9A\u672C\u673A\uFF0C\u8BF7\u7EE7\u7EED\u7B49\u5F85\u672C\u8FDB\u7A0B\u9000\u51FA\u3002
|
|
367
|
+
`),je(m),i=await tt(m);let c=!i.ok&&ae(i);if(c&&le(),r.publishResult({ok:i.ok,message:i.ok?"\u5DF2\u5B8C\u6210\u7ED1\u5B9A\uFF0C\u53EF\u4EE5\u56DE\u5230 AI \u52A9\u624B\u7EE7\u7EED\u64CD\u4F5C\u4E86\u3002":Wt(i),retryable:c}),i.ok)break;if(c){process.stderr.write(`${o} \u8FD9\u628A\u5BC6\u94A5\u88AB\u670D\u52A1\u7AEF\u62D2\u7EDD\uFF0C\u9875\u9762\u4E0A\u5DF2\u63D0\u793A\u7528\u6237\u6362\u4E00\u628A\u91CD\u8BD5\u3002
|
|
368
|
+
`);continue}process.stderr.write(`${o} \u672A\u80FD\u786E\u8BA4\u7ED1\u5B9A\u7ED3\u679C\uFF0C\u5DF2\u4FDD\u7559\u8FD9\u628A\u5F85\u786E\u8BA4\u7684\u5BC6\u94A5\u3002\u7F51\u7EDC\u6062\u590D\u540E\u6267\u884C\u4EFB\u610F ${p} \u547D\u4EE4\u5373\u53EF\u81EA\u52A8\u6536\u655B\u3002
|
|
369
|
+
`),a(i);return}let s=de({userId:i.data.user.id,agentId:i.data.agentId,companyIds:i.data.companyIds});a(k({user:i.data.user,device:i.data.device,companyIds:(d=s==null?void 0:s.companyIds)!=null?d:i.data.companyIds,replacedPreviousAuthorization:i.data.replacedPreviousAuthorization,configPath:T()},i.requestId))}async function Ye(){let e=await j();if(e){a(e);return}let t=P();if(!t){a(et());return}let n=await y("/companies",{apiKey:t,query:{page:1,limit:100}});if(!n.ok){a(n);return}let r=Y();a(k({loggedIn:!0,device:{deviceId:r.deviceId,deviceName:r.deviceName,platform:r.platform},user:Z()?{id:Z().userId,agentId:Z().agentId}:null,companies:n.data.data.map(o=>({id:o.id,name:o.name})),configPath:T()},n.requestId))}async function Ze(){let e=await j();if(e){a(e);return}let t=P();if(!t){a(et());return}let n=await y("/auth/logout",{method:"POST",apiKey:t});if(!n.ok){a(n);return}Ge(),a(k({loggedOut:!0,revoked:n.data,note:"\u670D\u52A1\u7AEF\u5BC6\u94A5\u5DF2\u64A4\u9500\uFF0C\u672C\u673A\u51ED\u636E\u5DF2\u6E05\u9664\u3002\u8BBE\u5907\u8EAB\u4EFD\u4FDD\u7559\uFF0C\u91CD\u65B0\u767B\u5F55\u4F1A\u590D\u7528\u540C\u4E00\u53F0\u8BBE\u5907\u3002"},n.requestId))}function et(){return l("AUTH_REQUIRED","\u672C\u673A\u8FD8\u6CA1\u6709\u53EF\u7528\u7684\u6388\u6743",{nextAction:{type:"auth_login",message:"\u5148\u8BA9\u7528\u6237\u5230\u6240\u5C5E SaaS \u7F51\u9875\u7684\u5BC6\u94A5\u7BA1\u7406\u91CC\u521B\u5EFA\u300CAI \u52A9\u624B\u5BC6\u94A5\u300D\u5E76\u9009\u597D\u6388\u6743\u516C\u53F8\uFF1B\u7136\u540E\u7531\u4F60\u76F4\u63A5\u6267\u884C command\uFF0C\u5B83\u4F1A\u963B\u585E\u6700\u957F 5 \u5206\u949F\u7B49\u5F85\u7528\u6237\u5728\u672C\u673A\u9875\u9762\u7C98\u8D34\u5BC6\u94A5\u3002\u6267\u884C\u671F\u95F4\u628A stderr \u91CC\u7684\u672C\u5730\u9875\u9762\u5730\u5740\u8F6C\u8FBE\u7ED9\u7528\u6237\uFF0C\u4FDD\u6301\u8FDB\u7A0B\u8FD0\u884C\u76F4\u5230\u5B83\u81EA\u884C\u9000\u51FA\uFF0C\u4E0D\u8981\u4E2D\u65AD\uFF0C\u4E5F\u4E0D\u8981\u8BA9\u7528\u6237\u5728\u522B\u5904\u6267\u884C\u3002",command:`${p} auth login`}})}function Wt(e){var t;return e.code==="AUTH_REQUIRED"?"\u8FD9\u628A\u5BC6\u94A5\u7528\u4E0D\u4E86\uFF08\u65E0\u6548\u6216\u5DF2\u5931\u6548\uFF09\u3002\u8BF7\u786E\u8BA4\u6574\u4E32\u90FD\u590D\u5236\u5B8C\u6574\u4E86\uFF0C\u6216\u5230\u7F51\u9875\u91CD\u65B0\u521B\u5EFA\u4E00\u628A\u518D\u7C98\u8D34\u3002":e.code==="DEVICE_MISMATCH"?"\u8FD9\u628A\u5BC6\u94A5\u5DF2\u7ECF\u7ED1\u5B9A\u5230\u53E6\u4E00\u53F0\u8BBE\u5907\u3002\u8BF7\u5230\u7F51\u9875\u65B0\u5EFA\u4E00\u628A\u5BC6\u94A5\uFF0C\u518D\u7C98\u8D34\u5230\u8FD9\u91CC\u3002":(t=e.message)!=null?t:"\u767B\u5F55\u5931\u8D25\u3002\u8BF7\u56DE\u5230 AI \u52A9\u624B\u67E5\u770B\u8BE6\u60C5\u3002"}function tt(e){let t=Y();return y("/auth/claim",{method:"POST",apiKey:e,body:{...t,cliVersion:x}})}function Yt(e){if(process.env.BEST_GEO_NO_BROWSER==="1")return;let t=process.platform==="darwin"?"open":process.platform==="win32"?"cmd":"xdg-open",n=process.platform==="win32"?["/c","start","",e]:[e];(0,Xe.execFile)(t,n,()=>{})}function Zt(e){return e instanceof Error?e.message:String(e)}async function G(){let e=await j();if(e)return{ok:!1,envelope:e};let t=P();return t?{ok:!0,apiKey:t}:{ok:!1,envelope:l("AUTH_REQUIRED","\u672C\u673A\u8FD8\u6CA1\u6709\u53EF\u7528\u7684\u6388\u6743",{nextAction:{type:"auth_login",message:"\u5148\u8BA9\u7528\u6237\u5230\u6240\u5C5E SaaS \u7F51\u9875\u7684\u5BC6\u94A5\u7BA1\u7406\u91CC\u521B\u5EFA\u300CAI \u52A9\u624B\u5BC6\u94A5\u300D\u5E76\u9009\u597D\u6388\u6743\u516C\u53F8\uFF1B\u7136\u540E\u7531\u4F60\u76F4\u63A5\u6267\u884C command\uFF0C\u5B83\u4F1A\u963B\u585E\u6700\u957F 5 \u5206\u949F\u7B49\u5F85\u7528\u6237\u5728\u672C\u673A\u9875\u9762\u7C98\u8D34\u5BC6\u94A5\u3002",command:`${p} auth login`}})}}var rt=require("node:fs"),D=require("node:path"),ot=require("node:url");function en(e){if(e.cjsDir)return(0,D.join)(e.cjsDir,"..");if(!e.moduleUrl)throw new Error("\u7F3A\u5C11 CLI \u8FD0\u884C\u4F4D\u7F6E");return(0,D.join)((0,D.dirname)((0,ot.fileURLToPath)(e.moduleUrl)),"..","..","..")}function tn(){return en({cjsDir:typeof __dirname=="string"?__dirname:void 0,moduleUrl:void 0})}function U(...e){return(0,rt.readFileSync)((0,D.join)(tn(),...e),"utf8")}function it(){a(k({package:L,version:x,protocolVersion:F,commands:[{command:`${p} version --check`,description:"\u68C0\u67E5\u7248\u672C\u662F\u5426\u9700\u8981\u5347\u7EA7"},{command:`${p} capabilities`,description:"\u5217\u51FA\u53EF\u7528\u80FD\u529B\u53CA\u5176\u8F93\u5165 schema"},{command:`${p} skill get --raw > <\u4F60\u7684 skill \u76EE\u5F55>/best-geo/SKILL.md`,description:"\u76F4\u63A5\u628A Skill \u5199\u6210\u6587\u4EF6\uFF08\u63A8\u8350\uFF1B--raw \u8F93\u51FA markdown \u539F\u6587\uFF0C\u4E0D\u662F JSON\uFF09"},{command:`${p} skill get`,description:"\u4EE5 JSON \u4FE1\u5C01\u8FD4\u56DE Skill \u5185\u5BB9\u548C revision"},{command:`${p} guide list`,description:"\u5217\u51FA\u4E1A\u52A1\u6307\u5357"},{command:`${p} guide get <name>`,description:"\u8BFB\u53D6\u4E00\u4EFD\u4E1A\u52A1\u6307\u5357"},{command:`${p} auth login`,description:"\u6253\u5F00\u672C\u5730\u9875\u9762\u5F55\u5165\u5BC6\u94A5\u5E76\u7ED1\u5B9A\u672C\u673A"},{command:`${p} auth status`,description:"\u67E5\u770B\u5F53\u524D\u6388\u6743\u72B6\u6001"},{command:`${p} auth logout`,description:"\u64A4\u9500\u670D\u52A1\u7AEF\u5BC6\u94A5\u5E76\u6E05\u9664\u672C\u673A\u51ED\u636E"},{command:`${p} call <capability> --input '<JSON>'`,description:"\u8C03\u7528\u4E00\u4E2A\u67E5\u8BE2\u80FD\u529B"},{command:`${p} plan <operation> --input '<JSON>'`,description:"\u751F\u6210\u5199\u64CD\u4F5C\u8BA1\u5212\uFF0C\u8FD4\u56DE\u7ED9\u7528\u6237\u770B\u7684\u53D8\u66F4\u6458\u8981\uFF08\u4E0D\u5199\u6570\u636E\uFF09"},{command:`${p} apply <planId>`,description:"\u6267\u884C\u8BA1\u5212\u3002\u5FC5\u987B\u5148\u628A plan \u7684\u6458\u8981\u7ED9\u7528\u6237\u770B\u8FC7\u5E76\u5F97\u5230\u540C\u610F"}],nextAction:{type:"install_skill",command:`${p} skill get --raw`,message:"\u6309\u5F53\u524D AI \u5DE5\u5177\u7684 Skill \u673A\u5236\u9009\u4E00\u4E2A\u5B89\u88C5\u76EE\u5F55\uFF0C\u7528 best-geo skill get --raw \u628A\u5185\u5BB9\u76F4\u63A5\u91CD\u5B9A\u5411\u6210 SKILL.md\uFF0C\u7136\u540E\u52A0\u8F7D\u5B83"}}))}async function st(e){if(!e){a(k({package:L,version:x,protocolVersion:F,env:$e,apiBase:Q}));return}let t=await y("/meta");if(!t.ok){a(t);return}if(nt(x,t.data.minimumCliVersion)<0){a(l("CLI_UPDATE_REQUIRED",`\u5F53\u524D\u7248\u672C ${x} \u4F4E\u4E8E\u6700\u4F4E\u8981\u6C42 ${t.data.minimumCliVersion}`,{requestId:t.requestId,data:{current:x,...t.data},nextAction:{type:"upgrade",message:"\u5347\u7EA7\u540E\u91CD\u8BD5",command:`npm install -g ${L}@latest`}}));return}a(k({current:x,...t.data,updateAvailable:nt(x,t.data.latestCliVersion)<0},t.requestId))}function at(){a(k(JSON.parse(U("capabilities","capabilities.json"))))}function lt(e){let t=pt(U("skills","best-geo","SKILL.md"));if(e){process.stdout.write(t);return}a(k({name:p,revision:1,content:t}))}var ue=["company","product","question","article","knowledge","material","question-task","article-task","scheduled-monitor","publication","video","answer-card"];function dt(){a(k({guides:ue.map(e=>{let t=JSON.parse(U("guides",`${e}.json`));return{name:t.name,title:t.title,whenToUse:t.whenToUse}})}))}function ct(e){if(!ue.includes(e)){a(l("GUIDE_NOT_FOUND",`\u6CA1\u6709\u540D\u4E3A ${e} \u7684\u6307\u5357`,{data:{available:ue}}));return}a(k(JSON.parse(pt(U("guides",`${e}.json`)))))}function nt(e,t){var o,i;let n=e.split(".").map(s=>Number.parseInt(s,10)||0),r=t.split(".").map(s=>Number.parseInt(s,10)||0);for(let s=0;s<Math.max(n.length,r.length);s+=1){let d=((o=n[s])!=null?o:0)-((i=r[s])!=null?i:0);if(d!==0)return d<0?-1:1}return 0}function pt(e){return p==="best-geo"?e:e.replace(/\bbest-geo\b(?!-)/g,p)}var me=null,ge=null;function ut(){return me===null&&(me=JSON.parse(U("capabilities","capabilities.json")).capabilities),me}function nn(){return ge===null&&(ge=new Map(ut().filter(e=>e.inputSchema!==void 0).map(e=>[e.name,e.inputSchema]))),ge}function mt(){return ut().filter(e=>e.mode==="write").map(e=>e.name)}function ee(e,t){let n=nn().get(e);return n===void 0?[]:be(t,n,"")}function be(e,t,n){if(t.type==="object"||t.properties!==void 0)return rn(e,t,n);let r=gt(e,t,n);if(r!==null)return[r];let o=[];return typeof e=="string"&&t.minLength!==void 0&&e.length<t.minLength&&o.push(t.minLength===1?`${n} \u4E0D\u80FD\u662F\u7A7A\u5B57\u7B26\u4E32`:`${n} \u81F3\u5C11 ${t.minLength} \u4E2A\u5B57\u7B26\uFF0C\u5F53\u524D ${e.length} \u4E2A`),typeof e=="string"&&t.maxLength!==void 0&&e.length>t.maxLength&&o.push(`${n} \u6700\u591A ${t.maxLength} \u4E2A\u5B57\u7B26\uFF0C\u5F53\u524D ${e.length} \u4E2A`),typeof e=="number"&&(t.maximum!==void 0&&e>t.maximum&&o.push(`${n} \u4E0D\u80FD\u5927\u4E8E ${t.maximum}`),t.minimum!==void 0&&e<t.minimum&&o.push(`${n} \u4E0D\u80FD\u5C0F\u4E8E ${t.minimum}`)),t.enum!==void 0&&!t.enum.includes(e)&&o.push(`${n} \u53EA\u80FD\u662F ${t.enum.join(" / ")} \u4E4B\u4E00\uFF0C\u6536\u5230 ${R(e)}`),Array.isArray(e)&&(t.minItems!==void 0&&e.length<t.minItems&&o.push(`${n} \u81F3\u5C11\u8981 ${t.minItems} \u9879\uFF0C\u5F53\u524D ${e.length} \u9879`),t.maxItems!==void 0&&e.length>t.maxItems&&o.push(`${n} \u6700\u591A ${t.maxItems} \u9879\uFF0C\u5F53\u524D ${e.length} \u9879`),t.items!==void 0&&e.forEach((i,s)=>{o.push(...be(i,t.items,`${n}[${s}]`))})),o}function rn(e,t,n){var d,m;if(typeof e!="object"||e===null||Array.isArray(e))return[`${n||"\u5165\u53C2"} \u5FC5\u987B\u662F\u5BF9\u8C61`];let r=e,o=(d=t.properties)!=null?d:{},i=(m=t.required)!=null?m:[],s=[];for(let c of i)(r[c]===void 0||r[c]===null)&&s.push(`\u7F3A\u5C11\u5FC5\u586B\u5B57\u6BB5 ${fe(n,c)}`);if(t.additionalProperties===!1){let c=Object.keys(o);for(let I of Object.keys(r))c.includes(I)||s.push(`\u4E0D\u8BA4\u8BC6\u7684\u5B57\u6BB5 ${fe(n,I)}\uFF0C\u53EF\u7528\u5B57\u6BB5\uFF1A${c.join("\u3001")}`)}for(let[c,I]of Object.entries(o)){let b=r[c];b===void 0||b===null&&i.includes(c)||s.push(...be(b,I,fe(n,c)))}return s}function gt(e,t,n){if(Array.isArray(t.type)){let r=t.type.map(o=>gt(e,{...t,type:o},n));return r.some(o=>o===null)?null:r[0]}switch(t.type){case"null":return e===null?null:`${n} \u5FC5\u987B\u662F null\uFF0C\u6536\u5230 ${R(e)}`;case"string":return typeof e=="string"?null:`${n} \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\uFF0C\u6536\u5230 ${R(e)}`;case"number":return typeof e=="number"&&Number.isFinite(e)?null:`${n} \u5FC5\u987B\u662F\u6570\u5B57\uFF0C\u6536\u5230 ${R(e)}`;case"integer":return typeof e=="number"&&Number.isInteger(e)?null:`${n} \u5FC5\u987B\u662F\u6574\u6570\uFF0C\u6536\u5230 ${R(e)}`;case"boolean":return typeof e=="boolean"?null:`${n} \u5FC5\u987B\u662F true \u6216 false\uFF0C\u6536\u5230 ${R(e)}`;case"array":return Array.isArray(e)?null:`${n} \u5FC5\u987B\u662F\u6570\u7EC4\uFF0C\u6536\u5230 ${R(e)}`;default:return null}}function fe(e,t){return e===""?t:`${e}.${t}`}function R(e){if(e===null)return"null";if(Array.isArray(e))return"\u6570\u7EC4";if(typeof e=="object")return"\u5BF9\u8C61";let t=String(e);return typeof e=="string"?`\u5B57\u7B26\u4E32 "${on(t)}"`:t}function on(e){return e.length>20?`${e.slice(0,20)}\u2026`:e}function te(e,t){return l("VALIDATION_FAILED",`\u5165\u53C2\u4E0D\u5408\u6CD5\uFF1A${t.join("\uFF1B")}`,{data:{name:e,errors:t},nextAction:{type:"ask_user",message:"\u6309 capabilities \u91CC\u7684 inputSchema \u4FEE\u6B63\u53C2\u6570\u540E\u91CD\u8BD5\uFF1B\u7F3A\u7684\u4FE1\u606F\u95EE\u7528\u6237"}})}var ft={"companies.list":e=>({path:"/companies",query:e}),"companies.get":e=>({path:`/companies/${Number(e.id)}`}),"products.list":e=>({path:"/products",query:e}),"products.get":e=>({path:`/products/${Number(e.id)}`}),"questions.list":e=>({path:"/questions",query:e}),"questions.get":e=>({path:`/questions/${Number(e.id)}`}),"articles.list":e=>({path:"/articles",query:e}),"articles.get":e=>({path:`/articles/${Number(e.id)}`,query:e.withContent===!0?{withContent:"true"}:void 0}),"knowledge.list":e=>({path:"/knowledge",query:e}),"knowledge.get":e=>({path:`/knowledge/${Number(e.id)}`}),"images.list":e=>({path:"/images",query:e}),"images.get":e=>({path:`/images/${Number(e.id)}`}),"videos.list":e=>({path:"/videos",query:e}),"videos.get":e=>({path:`/videos/${Number(e.id)}`}),"prompts.list":e=>({path:"/prompts",query:e}),"models.list":e=>({path:"/models",query:e}),"questionTasks.list":e=>({path:"/question-tasks",query:e}),"questionTasks.get":e=>({path:`/question-tasks/${Number(e.taskId)}`}),"articleTasks.list":e=>({path:"/article-tasks",query:e}),"articleTasks.get":e=>({path:`/article-tasks/${Number(e.taskId)}`}),"keywordTasks.list":e=>({path:"/keyword-tasks",query:e}),"keywordTasks.get":e=>({path:`/keyword-tasks/${Number(e.taskId)}`}),"tags.list":e=>({path:"/tags",query:e}),"folders.list":e=>({path:"/article-folders",query:e}),"publicationPlatforms.list":e=>({path:"/publication-platforms",query:e}),"publicationAccounts.list":e=>({path:"/publication-accounts",query:e}),"publicationTasks.list":e=>({path:"/publication-tasks",query:e}),"publicationRecords.list":e=>({path:"/publication-records",query:e}),"mediaPlatforms.list":e=>({path:"/media-platforms",query:e}),"mediaPlatforms.get":e=>({path:`/media-platforms/${Number(e.mediaId)}`}),"mediaPublications.list":e=>({path:"/media-publications",query:e}),"mediaPublications.summary":e=>({path:"/media-publications/summary",query:e}),"articleTasks.reuseConfig":e=>({path:`/article-tasks/${Number(e.taskId)}/reuse-config`}),"scheduledSentiment.generateQuestions":e=>({path:"/scheduled-sentiment/generate-questions",method:"POST",body:e}),"indexing.suggestCompetitors":e=>({path:"/suggest-competitors",method:"POST",body:e}),"indexingPlatforms.list":()=>({path:"/indexing-platforms"}),"scheduledIndexing.list":e=>({path:"/scheduled-indexing",query:e}),"scheduledIndexing.get":e=>({path:`/scheduled-indexing/${Number(e.planId)}`}),"scheduledIndexing.runs":e=>({path:`/scheduled-indexing/${Number(e.planId)}/runs`,query:E(e)}),"scheduledIndexing.metrics":e=>({path:`/scheduled-indexing/${Number(e.planId)}/metrics`,query:E(e)}),"scheduledSentiment.list":e=>({path:"/scheduled-sentiment",query:e}),"scheduledSentiment.get":e=>({path:`/scheduled-sentiment/${Number(e.planId)}`}),"scheduledSentiment.runs":e=>({path:`/scheduled-sentiment/${Number(e.planId)}/runs`,query:E(e)}),"scheduledSentiment.metrics":e=>({path:`/scheduled-sentiment/${Number(e.planId)}/metrics`,query:E(e)}),"scheduledIndexing.answers":e=>({path:`/scheduled-indexing/${Number(e.planId)}/answers`,query:E(e)}),"scheduledIndexing.citations":e=>({path:`/scheduled-indexing/${Number(e.planId)}/citations`,query:E(e)}),"scheduledIndexing.topicStats":e=>({path:`/scheduled-indexing/${Number(e.planId)}/topic-stats`,query:E(e)}),"scheduledIndexing.topicPlatformMatrix":e=>({path:`/scheduled-indexing/${Number(e.planId)}/topic-platform-matrix`,query:E(e)}),"scheduledSentiment.answers":e=>({path:`/scheduled-sentiment/${Number(e.planId)}/answers`,query:E(e)}),"scheduledSentiment.citations":e=>({path:`/scheduled-sentiment/${Number(e.planId)}/citations`,query:E(e)}),"scheduledSentiment.topicStats":e=>({path:`/scheduled-sentiment/${Number(e.planId)}/topic-stats`,query:E(e)}),"textToImages.models":()=>({path:"/text-to-image-models"}),"textToImages.list":e=>({path:"/text-to-images",query:e}),"textToImages.get":e=>({path:`/text-to-images/${Number(e.id)}`}),"textToImages.countUncompleted":()=>({path:"/text-to-images/count-uncompleted"}),"dhVideos.avatars":e=>({path:"/dh-videos/avatars",method:"POST",body:e}),"dhVideos.voices":e=>({path:"/dh-videos/voices",method:"POST",body:e}),"dhVideos.list":e=>({path:"/dh-videos",query:e}),"dhVideos.get":e=>({path:`/dh-videos/${Number(e.id)}`}),"clipTasks.templates":e=>({path:"/clip-tasks/templates",method:"POST",body:e}),"clipTasks.bgm":e=>({path:"/clip-tasks/bgm",method:"POST",body:e}),"clipTasks.list":e=>({path:"/clip-tasks",query:e}),"clipTasks.get":e=>({path:`/clip-tasks/${Number(e.id)}`}),"answerCards.list":e=>({path:"/answer-cards",query:e}),"answerCards.templates":()=>({path:"/answer-cards/templates"}),"answerCards.get":e=>({path:`/answer-cards/${Number(e.id)}`}),"answerCards.batch":e=>({path:`/answer-cards/${Number(e.taskId)}/batches/${Number(e.batchId)}`})};function E(e){let{planId:t,...n}=e;return n}function sn(){return Object.keys(ft)}async function bt(e,t){let n=ft[e];if(!n){a(l("VALIDATION_FAILED",`\u672A\u77E5\u80FD\u529B\uFF1A${e}`,{data:{available:sn()},nextAction:{type:"ask_user",message:"\u5148\u6267\u884C best-geo capabilities \u67E5\u770B\u53EF\u7528\u80FD\u529B"}}));return}let r={};if(t)try{r=JSON.parse(t)}catch{a(l("VALIDATION_FAILED","--input \u4E0D\u662F\u5408\u6CD5 JSON"));return}let o=ee(e,r);if(o.length>0){a(te(e,o));return}let i=await G();if(!i.ok){a(i.envelope);return}let{path:s,query:d,method:m,body:c}=n(r);a(await y(s,{apiKey:i.apiKey,query:d,method:m,body:c}))}var O=require("node:fs"),M=require("node:path");var an={image:{maxBytes:2*1024*1024,extensions:[".png",".jpg",".jpeg"],label:"\u56FE\u7247"},video:{maxBytes:200*1024*1024,extensions:[".mp4"],label:"\u89C6\u9891"},thumbnail:{maxBytes:5*1024*1024,extensions:[".png",".jpg",".jpeg"],label:"\u5C01\u9762\u56FE"}},ln={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".mp4":"video/mp4"},ht={"images.create":[{pathKey:"filePath",metaKey:"file",uploadField:"fileUrl",kind:"image"}],"videos.create":[{pathKey:"videoPath",metaKey:"video",uploadField:"videoUrl",kind:"video"},{pathKey:"thumbnailPath",metaKey:"thumbnail",uploadField:"thumbnail",kind:"thumbnail"}]},dn=900*1e3;function yt(e){return ht[e]!==void 0}function xt(e){return q()[e]!==void 0}function kt(e,t){var i;let n=(i=ht[e])!=null?i:[],r={...t},o={};for(let s of n){let d=t[s.pathKey];if(typeof d!="string"||!d.trim())return{ok:!1,envelope:un(s)};let m=(0,M.resolve)(d.trim()),c=pn(m,s);if(!c.ok)return{ok:!1,envelope:c.envelope};delete r[s.pathKey],r[s.metaKey]={name:(0,M.basename)(m),size:c.size},o[s.uploadField]=m}return{ok:!0,input:r,paths:o}}function Et(e,t){se({...q(),[e]:{paths:t,createdAt:Date.now()}})}async function It(e,t){let n=q()[e];if(!n)return{ok:!1,envelope:l("VALIDATION_FAILED","\u672C\u673A\u6CA1\u6709\u8FD9\u4E2A\u8BA1\u5212\u7684\u5F85\u4F20\u6587\u4EF6\u8BB0\u5F55",{nextAction:{type:"ask_user",message:"\u91CD\u65B0\u6267\u884C best-geo plan \u751F\u6210\u8BA1\u5212\uFF0C\u628A\u6458\u8981\u7ED9\u7528\u6237\u786E\u8BA4\u540E\u518D apply\u2014\u2014\u8BA1\u5212\u548C\u5F85\u4F20\u6587\u4EF6\u662F\u4E00\u8D77\u751F\u6210\u7684"}})};let r={};for(let[o,i]of Object.entries(n.paths)){if(!(0,O.existsSync)(i))return{ok:!1,envelope:l("VALIDATION_FAILED",`\u6587\u4EF6\u5DF2\u7ECF\u4E0D\u5728\u4E86\uFF1A${i}`)};let s=await y(`/plans/${encodeURIComponent(e)}/uploads/presign`,{method:"POST",apiKey:t,body:{field:o,fileName:(0,M.basename)(i)}});if(!s.ok)return{ok:!1,envelope:s};let d=await cn(s.data,i);if(!d.ok)return{ok:!1,envelope:d.envelope};r[o]=s.data.uploadUrl}return{ok:!0,uploads:r}}function vt(e){let t=q();delete t[e],se(t)}async function cn(e,t){let n=ln[wt(t)];if(!n)return{ok:!1,envelope:l("UPLOAD_FAILED",`${t} \u7684\u6587\u4EF6\u7C7B\u578B\u6CA1\u6709\u767B\u8BB0 MIME\uFF0C\u4F20\u4E0D\u4E86`)};let r=new FormData;r.append("key",e.key),r.append("policy",e.policy),r.append("OSSAccessKeyId",e.OSSAccessKeyId),r.append("signature",e.signature),r.append("callback",e.callback),r.append("Content-Disposition",e["Content-Disposition"]),r.append("success_action_status","200"),r.append("file",await(0,O.openAsBlob)(t,{type:n}),(0,M.basename)(t));try{let o=await fetch(e.host,{method:"POST",body:r,signal:AbortSignal.timeout(dn)}),i=(await o.text().catch(()=>"")).slice(0,300);if(!o.ok)return{ok:!1,envelope:l("UPLOAD_FAILED",`\u4E0A\u4F20\u5931\u8D25\uFF08HTTP ${o.status}\uFF09\uFF1A${i}`,{nextAction:{type:"ask_user",message:"\u628A\u8FD9\u4E2A\u60C5\u51B5\u544A\u8BC9\u7528\u6237\uFF0C\u7A0D\u540E\u91CD\u65B0\u6267\u884C\u4E00\u6B21 plan \u518D\u8BD5"}})};let s=mn(i);return s?{ok:!1,envelope:l("UPLOAD_FAILED",`\u6587\u4EF6\u5DF2\u4E0A\u4F20\uFF0C\u4F46\u767B\u8BB0\u5931\u8D25\uFF1A${s}`,{nextAction:{type:"ask_user",message:"\u628A\u8FD9\u53E5\u62A5\u9519\u539F\u6837\u544A\u8BC9\u7528\u6237\uFF0C\u8BA9\u4ED6\u8054\u7CFB\u670D\u52A1\u5546\u3002\u91CD\u8BD5\u591A\u534A\u4E0D\u4F1A\u597D\u3002"}})}:{ok:!0}}catch(o){return{ok:!1,envelope:l("UPLOAD_FAILED",`\u4E0A\u4F20\u4E2D\u65AD\uFF1A${o instanceof Error?o.message:String(o)}`,{nextAction:{type:"ask_user",message:"\u4E0A\u4F20\u6CA1\u80FD\u5B8C\u6210\uFF0C\u539F\u56E0\u89C1\u4E0A\u9762\u7684\u62A5\u9519\u539F\u6587\u3002\u544A\u8BC9\u7528\u6237\uFF0C\u7A0D\u540E\u91CD\u65B0\u8D70\u4E00\u904D"}})}}}function pn(e,t){let n=an[t.kind];if(!(0,O.existsSync)(e))return{ok:!1,envelope:l("VALIDATION_FAILED",`\u627E\u4E0D\u5230\u6587\u4EF6\uFF1A${e}`,{nextAction:{type:"ask_user",message:"\u8BA9\u7528\u6237\u786E\u8BA4\u6587\u4EF6\u8DEF\u5F84\u3002\u76F8\u5BF9\u8DEF\u5F84\u662F\u76F8\u5BF9\u4F60\u5F53\u524D\u7684\u5DE5\u4F5C\u76EE\u5F55\u7B97\u7684"}})};let r=(0,O.statSync)(e);if(!r.isFile())return{ok:!1,envelope:l("VALIDATION_FAILED",`${e} \u4E0D\u662F\u4E00\u4E2A\u6587\u4EF6`)};let o=wt(e);return n.extensions.includes(o)?r.size>n.maxBytes?{ok:!1,envelope:l("VALIDATION_FAILED",`${n.label}\u6700\u5927 ${ne(n.maxBytes)}\uFF0C\u5F53\u524D ${ne(r.size)}\uFF0C\u8D85\u51FA ${ne(r.size-n.maxBytes)}`,{nextAction:{type:"ask_user",message:`\u544A\u8BC9\u7528\u6237\u8FD9\u4E2A\u6587\u4EF6\u8D85\u4E86\u591A\u5C11\uFF0C\u5E76\u95EE\u4ED6\u8981\u4E0D\u8981\u4F60\u5148\u628A\u5B83\u538B\u5230 ${ne(n.maxBytes)} \u4EE5\u5185\u518D\u4F20\u3002\u4F60\u53EF\u4EE5\u7528\u7528\u6237\u673A\u5668\u4E0A\u73B0\u6210\u7684\u5DE5\u5177\u5904\u7406\uFF08macOS \u81EA\u5E26 sips\uFF0C\u591A\u6570\u673A\u5668\u6709 ffmpeg\uFF09\uFF0C\u5904\u7406\u5B8C\u7528\u65B0\u6587\u4EF6\u91CD\u65B0 plan\u3002`}})}:{ok:!0,size:r.size}:{ok:!1,envelope:l("VALIDATION_FAILED",`${n.label}\u53EA\u652F\u6301 ${n.extensions.join(" / ")}\uFF0C\u5F53\u524D\u662F ${o||"(\u6CA1\u6709\u6269\u5C55\u540D)"}`,{nextAction:{type:"ask_user",message:`\u628A\u8FD9\u4E2A\u9650\u5236\u544A\u8BC9\u7528\u6237\uFF0C\u95EE\u4ED6\u8981\u4E0D\u8981\u4F60\u5148\u628A\u6587\u4EF6\u8F6C\u6210 ${n.extensions[0]} \u518D\u4F20`}})}}function un(e){return l("VALIDATION_FAILED",`\u7F3A\u5C11 ${e.pathKey}`,{nextAction:{type:"ask_user",message:`${e.pathKey} \u8981\u7ED9\u4E00\u4E2A\u672C\u673A\u6587\u4EF6\u8DEF\u5F84\u3002\u95EE\u7528\u6237\u6587\u4EF6\u653E\u5728\u54EA\uFF0C\u4E0D\u8981\u81EA\u5DF1\u7F16\u4E00\u4E2A\u8DEF\u5F84\u3002`}})}function ne(e){return e>=1024*1024?`${(e/1024/1024).toFixed(1)}MB`:`${Math.max(1,Math.round(e/1024))}KB`}function mn(e){try{let t=JSON.parse(e),n=Number(t.statusCode);if(Number.isFinite(n)&&n!==0&&n!==200)return typeof t.message=="string"?t.message:`statusCode ${n}`}catch{}return null}function wt(e){let t=e.lastIndexOf(".");return t===-1?"":e.toLowerCase().slice(t)}async function At(e,t,n){var I;let r=mt();if(!e||!r.includes(e)){a(l("VALIDATION_FAILED",`\u672A\u77E5\u7684\u5199\u64CD\u4F5C\uFF1A${e!=null?e:"(\u7A7A)"}`,{data:{available:r},nextAction:{type:"ask_user",message:"\u5148\u6267\u884C best-geo capabilities \u67E5\u770B\u53EF\u7528\u80FD\u529B\u548C\u5B83\u4EEC\u7684\u5165\u53C2"}}));return}if(!t&&(n!=null&&n.trim().startsWith("{"))){a(l("VALIDATION_FAILED","\u5165\u53C2\u8981\u653E\u5728 --input \u540E\u9762",{nextAction:{type:"ask_user",message:`\u6B63\u786E\u5199\u6CD5\uFF1Abest-geo plan ${e} --input '<JSON>'`}}));return}let o;try{o=t?JSON.parse(t):{}}catch{a(l("VALIDATION_FAILED","--input \u4E0D\u662F\u5408\u6CD5 JSON"));return}let i=ee(e,o);if(i.length>0){a(te(e,i));return}let s=o,d=null;if(yt(e)){let b=kt(e,o);if(!b.ok){a(b.envelope);return}s=b.input,d=b.paths}let m=await G();if(!m.ok){a(m.envelope);return}let c=await y("/plans",{method:"POST",apiKey:m.apiKey,body:{operation:e,input:s}});c.ok&&d&&((I=c.data)!=null&&I.planId)&&Et(c.data.planId,d),a(c)}async function St(e){if(!e){a(l("VALIDATION_FAILED","\u7F3A\u5C11 planId",{nextAction:{type:"ask_user",message:"\u5148\u6267\u884C best-geo plan <operation> \u751F\u6210\u8BA1\u5212\uFF0C\u628A\u6458\u8981\u7ED9\u7528\u6237\u786E\u8BA4\u540E\u518D\u6267\u884C"}}));return}let t=await G();if(!t.ok){a(t.envelope);return}let n;if(xt(e)){let o=await It(e,t.apiKey);if(!o.ok){a(o.envelope);return}n=o.uploads}let r=await y(`/plans/${encodeURIComponent(e)}/apply`,{method:"POST",apiKey:t.apiKey,body:n?{uploads:n}:{},isWrite:!0});r.ok&&vt(e),a(r)}function _t(e){let t={};for(let n=0;n<e.length;n+=1){let r=e[n];if(!r.startsWith("--"))continue;let o=r.slice(2),i=e[n+1];i&&!i.startsWith("--")?(t[o]=i,n+=1):t[o]=!0}return t}function Ct(e,t){let n=T();if(e.reason==="denied")return l("HOST_PERMISSION_REQUIRED",`\u6CA1\u6709\u6743\u9650\u8BFB\u5199\u672C\u673A\u914D\u7F6E\u6587\u4EF6\uFF1A${n}`,{nextAction:{type:"request_host_approval",message:`Best GEO \u9700\u8981\u8BFB\u5199 ${n} \u6765\u4FDD\u5B58\u672C\u673A\u7684\u8BBE\u5907\u8EAB\u4EFD\u548C\u6388\u6743\u3002\u8BF7\u7528\u5F53\u524D\u5DE5\u5177\u81EA\u5E26\u7684\u6743\u9650\u786E\u8BA4\u673A\u5236\u7533\u8BF7\u5BF9\u8BE5\u6587\u4EF6\u7684\u8BFB\u5199\u6743\u9650\u540E\u91CD\u8BD5\u540C\u4E00\u6761\u547D\u4EE4\uFF0C\u4E0D\u8981\u5173\u95ED\u6574\u4E2A\u6C99\u7BB1\uFF0C\u4E5F\u4E0D\u8981\u8BA9\u7528\u6237\u628A\u5BC6\u94A5\u8D34\u8FDB\u5BF9\u8BDD\u3002`,capability:t.capability,...t.retryCommand?{command:t.retryCommand}:{}}});if(e.reason==="permissions_too_open"||e.reason==="not_owner"){let r=e.reason==="not_owner"?"\u8BE5\u6587\u4EF6\u4E0D\u5C5E\u4E8E\u5F53\u524D\u7CFB\u7EDF\u7528\u6237\uFF0C\u8BF7\u8BA9\u7528\u6237\u786E\u8BA4\u540E\u5220\u9664\u6216\u4FEE\u6B63\u5C5E\u4E3B":`\u8BF7\u8BA9\u7528\u6237\u6267\u884C\uFF1Achmod 600 ${n}`;return l("HOST_PERMISSION_REQUIRED",`\u672C\u673A\u914D\u7F6E\u6587\u4EF6\u6743\u9650\u4E0D\u5B89\u5168\uFF1A${n}`,{nextAction:{type:"ask_user",message:`${e.message}\u3002${r}\uFF0C\u7136\u540E\u91CD\u8BD5\u3002`}})}return l("HOST_PERMISSION_REQUIRED",`\u672C\u673A\u914D\u7F6E\u6587\u4EF6\u5DF2\u635F\u574F\uFF1A${n}`,{nextAction:{type:"ask_user",message:`\u8BF7\u8BA9\u7528\u6237\u5220\u9664 ${n} \u540E\u91CD\u65B0\u6267\u884C\u767B\u5F55\u3002\u8BE5\u6587\u4EF6\u91CC\u53EA\u6709\u672C\u673A\u8BBE\u5907\u8EAB\u4EFD\u548C\u6388\u6743\uFF0C\u5220\u9664\u4E0D\u4F1A\u5F71\u54CD\u670D\u52A1\u7AEF\u6570\u636E\u3002`,command:`${p} auth login`}})}function Tt(e){return e instanceof w}async function gn(){process.stdout.on("error",r=>process.exit(r.code==="EPIPE"?0:1));let[e,...t]=process.argv.slice(2),n=_t(t);switch(e){case void 0:case"help":it();return;case"version":await st(n.check===!0);return;case"capabilities":at();return;case"skill":if(t[0]==="get"){lt(n.raw===!0);return}break;case"guide":if(t[0]==="list"){dt();return}if(t[0]==="get"&&t[1]){ct(t[1]);return}break;case"auth":if(t[0]==="login")return We();if(t[0]==="status")return Ye();if(t[0]==="logout")return Ze();break;case"plan":await At(t[0],typeof n.input=="string"?n.input:void 0,t[1]);return;case"apply":await St(t[0]);return;case"call":if(t[0]){await bt(t[0],typeof n.input=="string"?n.input:void 0);return}break;default:break}a(l("VALIDATION_FAILED",`\u65E0\u6CD5\u8BC6\u522B\u7684\u547D\u4EE4\uFF1A${[e,...t].filter(Boolean).join(" ")}`,{nextAction:{type:"ask_user",message:"\u6267\u884C best-geo help \u67E5\u770B\u53EF\u7528\u547D\u4EE4"}})),process.exitCode=1}gn().catch(e=>{if(Tt(e)){a(Ct(e,{capability:e.reason==="denied"?"config_write":"config_read",retryCommand:fn()})),process.exitCode=1;return}a(l("SERVER_ERROR",e instanceof Error?e.message:String(e))),process.exitCode=1});function fn(){let[e,t]=process.argv.slice(2);if(e==="auth"&&(t==="login"||t==="status"||t==="logout"))return`${p} auth ${t}`}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "answer-card",
|
|
3
|
+
"title": "AI 答案卡",
|
|
4
|
+
"whenToUse": "用户想用一篇文章或一段自定义文案,快速生成一套图文并茂的多页答案卡(适合做信息图/知识卡片发布),或者想改一改已生成的脚本、查进度、拿成图地址时。",
|
|
5
|
+
"prerequisites": [
|
|
6
|
+
"已完成 best-geo auth login",
|
|
7
|
+
"已经确定是哪家公司、哪个 GEO 项目(用 companies.list / products.list 确认)"
|
|
8
|
+
],
|
|
9
|
+
"workflow": [
|
|
10
|
+
{
|
|
11
|
+
"step": 1,
|
|
12
|
+
"action": "确定内容来源与视觉方式",
|
|
13
|
+
"note": "内容来源二选一:sourceType=1 用已有文章(给 articleId,从 articles.list 查)、sourceType=2 用自定义正文(给 content,至少 20 个有效字符)。视觉方式三选一:visualMode=1 让 AI 自动挑模板(最省事)、=2 指定模板(先用 answerCards.templates 查可用模板拿 templateId)、=3 自定义风格(给 customStylePrompt)。richness 决定页数档位,模型档位用 textToImages.models 查 modelCode。"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"step": 2,
|
|
17
|
+
"action": "走 plan/apply 提交创建",
|
|
18
|
+
"capability": "answerCards.create",
|
|
19
|
+
"note": "这一步不扣费。apply 成功只拿到 taskId,脚本还在异步分析,不代表已经出来了。"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"step": 3,
|
|
23
|
+
"action": "轮询到脚本就绪",
|
|
24
|
+
"capability": "answerCards.get",
|
|
25
|
+
"note": "status=1 是分析中,别高频轮询;status=2 才是「脚本已就绪」,这时 pages 里才有拆好的逐页内容可以看。"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"step": 4,
|
|
29
|
+
"action": "需要就改脚本,不需要跳过",
|
|
30
|
+
"capability": "answerCards.savePages",
|
|
31
|
+
"note": "补丁式提交:pages 按 id 改字段、insert 插新页、order 重排、deleteIds 删页,只说清改了什么。这一步不花钱,改到满意再出图,不用出完再返工。⚠️ 服务端是删了重建页,不是原地改——每次 savePages 之后,旧的页 id 全部作废,下次再改必须先重新 answerCards.get 拿新 id,拿旧 id 提交会被拒。"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"step": 5,
|
|
35
|
+
"action": "用户点头后确认生成",
|
|
36
|
+
"capability": "answerCards.generate",
|
|
37
|
+
"note": "⚠️ 这一步真扣费,一次扣两笔(出图费 + 基础费),plan 阶段的 notice 里两笔都会写清楚,必须原样念给用户、等明确同意才能 apply。apply 成功只拿到批次号,图还没出。确认之后不要再用 savePages 改脚本——页数变了会被打回,得重新 plan。"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"step": 6,
|
|
41
|
+
"action": "轮询批次到终态",
|
|
42
|
+
"capability": "answerCards.batch",
|
|
43
|
+
"note": "status=6 全部完成、7 部分失败、8 全部失败。看 items 里每一项的 status 和 imageUrls,status=4 是失败页。⚠️ 现在没有重跑单页的能力,有失败页时告知用户失败的页数(失败页的出图费会自动退回),引导他去网页处理,不要自己编一个操作去重试。"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"step": 7,
|
|
47
|
+
"action": "定发布资料",
|
|
48
|
+
"capability": "answerCards.savePublishInfo",
|
|
49
|
+
"note": "标题/描述/话题标签/封面页,不扣费、不触发重新生成、也不会直接发布——纯粹保存资料。"
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
"askUserWhen": [
|
|
53
|
+
"用户没说清内容来源:给的是文章还是要自己写一段正文,两者只能选一个",
|
|
54
|
+
"用户没说清视觉方式:不确定就用「AI 智能匹配」(visualMode=1),别替用户随便指定一个模板或编一段风格描述",
|
|
55
|
+
"脚本已就绪(status=2):先把拆好的页面简要说给用户听,问要不要改,不要没确认就直接去 generate",
|
|
56
|
+
"确认生成之前:generate 是真花钱的一步,必须把 plan 里的费用说明(出图费 + 基础费两笔)念清楚,等用户明确同意再 apply",
|
|
57
|
+
"有失败页时:告知用户失败的页数和退款情况,问他要不要去网页处理,不要替他决定"
|
|
58
|
+
],
|
|
59
|
+
"forbidden": [
|
|
60
|
+
"不要替用户决定出不出图。answerCards.generate 是这条链路里唯一花钱的一步,没有得到用户明确同意不能 apply",
|
|
61
|
+
"不要在 status=1(分析中)时反复调 answerCards.get 高频轮询,分析通常需要一些时间",
|
|
62
|
+
"不要在 answerCards.generate 的计划确认之后再用 answerCards.savePages 改脚本。这份计划的报价是按当时的页数定的,页数一变就会被 apply 打回,得重新生成计划让用户重新确认",
|
|
63
|
+
"不要自己编 templateId / modelCode。templateId 从 answerCards.templates 查,modelCode 从 textToImages.models 查,猜的值提交后会被服务端拒",
|
|
64
|
+
"不要把 answerCards.savePages 的 pages/insert/order/deleteIds 全部留空提交。四项至少要给一项非空数组,全空的补丁不会被接受",
|
|
65
|
+
"不要拿 savePages 之前的旧页 id 去提交下一次 savePages 或 generate。savePages 是删了重建页,提交成功后旧 id 全部作废,必须重新 answerCards.get 拿新 id",
|
|
66
|
+
"不要因为批次 status 还没到终态就说任务失败了。4/5 排队中/出图中都还在正常跑,只有 6/7/8 才是终态",
|
|
67
|
+
"现在没有重跑单页失败图的能力,不要替用户编一个「重试」操作,有失败页就引导他去网页处理",
|
|
68
|
+
"不要跳过 plan 直接对写能力发 apply。answerCards.create / savePages / generate / savePublishInfo 都要先 plan 给用户看摘要"
|
|
69
|
+
],
|
|
70
|
+
"errorRecovery": {
|
|
71
|
+
"ACCESS_DENIED": "这个任务所属公司不在密钥授权范围内,或任务不存在。回到 companies.list 确认范围,或让用户去网页把这家公司加进这把密钥的授权。查别人的答案卡任务也报这个码——不区分「不存在」和「不是你的」。",
|
|
72
|
+
"VALIDATION_FAILED": "参数不合法,按 capabilities 里的 inputSchema 修正后重试。message 里写明了是哪个字段;常见原因:sourceType/visualMode 对应的必填项没给全、content 不够 20 个有效字符、savePages 的补丁四项全空、order 没列全所有页 id(或用了 savePages 之前已作废的旧页 id)。",
|
|
73
|
+
"PLAN_STALE": "确认期间这条任务(脚本或发布资料)被别人改过。重新 answerCards.get 读当前内容、重新 plan,把新摘要再给用户确认一次,不要拿旧 planId 重试。",
|
|
74
|
+
"PLAN_EXPIRED": "计划超过 30 分钟没执行。重新 plan,把新摘要再给用户确认一次——旧 planId 已经不能用了。",
|
|
75
|
+
"PLAN_COST_CHANGED": "generate 在 apply 时发现要出的页数和确认时不一样(多半是确认期间脚本被改过),或者单价变了。重新 plan,把新的页数和费用说明再念给用户确认一次,不要直接重试 apply。",
|
|
76
|
+
"QUOTA_EXCEEDED": "账户余额(积分/算力)不足,generate 真扣费的这一步最容易撞到。把 message 原样转达给用户,让他确认账户余额或联系管理员充值,不要重试 apply——余额不够重试也不会成功。",
|
|
77
|
+
"SERVER_ERROR": "服务端故障,稍后重试;反复出现请把 message 告知用户,不要自己判断原因。"
|
|
78
|
+
},
|
|
79
|
+
"completionCriteria": "查询类:已如实呈现任务/批次的真实状态,没跑完就说清它还在哪个阶段。写入类:answerCards.create/savePages/savePublishInfo 是不扣费的资料动作,用户看过 plan 摘要并同意后 apply 即可;answerCards.generate 必须让用户看清两笔费用并明确同意才能 apply,apply 成功后要告诉用户去哪查进度(answerCards.batch)。",
|
|
80
|
+
"writeFlow": {
|
|
81
|
+
"title": "写数据:先 plan,用户同意后才 apply",
|
|
82
|
+
"steps": [
|
|
83
|
+
"执行 best-geo plan answerCards.<operation> --input '<JSON>',此时什么都没提交。",
|
|
84
|
+
"把返回的 summary 原样念给用户听,answerCards.generate 的 notice 里的费用说明一条都不能漏。",
|
|
85
|
+
"等用户明确说同意。用户最初提的目标不算对这份摘要的确认。",
|
|
86
|
+
"同意之后执行 best-geo apply <planId>。"
|
|
87
|
+
],
|
|
88
|
+
"notes": [
|
|
89
|
+
"计划 30 分钟内有效,只能执行一次。",
|
|
90
|
+
"answerCards.create / savePages 之后的下一步都是异步的,apply 成功只代表提交了,要用对应的 get/batch 接口查进度。",
|
|
91
|
+
"answerCards.generate 的计划一旦确认,中途不要再用 savePages 改脚本——页数变了会导致 apply 被打回。"
|
|
92
|
+
]
|
|
93
|
+
}
|
|
94
|
+
}
|
package/guides/publication.json
CHANGED
|
@@ -28,13 +28,13 @@
|
|
|
28
28
|
"step": 4,
|
|
29
29
|
"action": "要建发布任务,先把平台和账号查清楚",
|
|
30
30
|
"capability": "publicationAccounts.list",
|
|
31
|
-
"note": "顺序是:publicationPlatforms.list(带 contentType)看能发到哪儿 → publicationAccounts.list 看这个公司绑了哪些号 → 再建任务。平台名猜得出来,账号 id 猜不出来,不查就建必然失败。**挑号只挑 usable=true 的**,登录过期或已停用的号建任务时会被拒。**挑文章时用 articles.list 带上 status=1 和 mustHaveCover=true
|
|
31
|
+
"note": "顺序是:publicationPlatforms.list(带 contentType)看能发到哪儿 → publicationAccounts.list 看这个公司绑了哪些号 → 再建任务。平台名猜得出来,账号 id 猜不出来,不查就建必然失败。**挑号只挑 usable=true 的**,登录过期或已停用的号建任务时会被拒。**挑文章时用 articles.list 带上 status=1 和 mustHaveCover=true**——未审核或没封面的文章发不出去。**平台带 limitConfig 的,还要看字数够不够**:标题超上限、正文低于下限或超上限,建任务时整批会被拒(正文按去掉图片地址和空白之后算,比原文短)。平台的 remark 是投稿要求备注,有的话念给用户听。这几件事都是先筛掉比建任务被拒再回头省事。"
|
|
32
32
|
},
|
|
33
33
|
{
|
|
34
34
|
"step": 5,
|
|
35
35
|
"action": "建发布任务:publicationTasks.createArticle / createVideo",
|
|
36
36
|
"capability": "publicationTasks.createArticle",
|
|
37
|
-
"note": "**先 plan,把计划里逐条列的「哪篇发到哪个号、什么时候发」念给用户,等他确认再 apply**。执行之后稿子会真的发出去,CLI 撤不回来。aigc(要不要打 AI 创作声明)必须问用户,别替他决定。定时发布传 publishTime,不传就是立即发。费用按发布记录条数算——一篇发 3 个号就是 3
|
|
37
|
+
"note": "**先 plan,把计划里逐条列的「哪篇发到哪个号、什么时候发」念给用户,等他确认再 apply**。执行之后稿子会真的发出去,CLI 撤不回来。aigc(要不要打 AI 创作声明)必须问用户,别替他决定。定时发布传 publishTime,不传就是立即发。费用按发布记录条数算——一篇发 3 个号就是 3 条,跟用户说清楚这个口径。**plan 阶段就会查字数**:报「不满足平台的字数要求」时,错误信息里点名了是哪篇文章投哪个平台、差多少字——把这句原样念给用户,让他定是改文章还是不发那个平台,别自己挑一个继续重试(这种失败重试多少次都过不去)。"
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
40
|
"step": 6,
|
|
@@ -84,7 +84,8 @@
|
|
|
84
84
|
"不要拿 currentPrice 当这笔的花费念——那是媒体现在的挂牌价,实际扣了多少看 chargedAmount",
|
|
85
85
|
"不要把 status 数值念给用户,用 statusLabel",
|
|
86
86
|
"不要说「暂停」或「删除任务」能撤回已经发出去的稿子——撤不了",
|
|
87
|
-
"不要拿未审核或没封面的文章去发布/投稿,会被拒。挑文章时就用 status=1 + mustHaveCover=true 筛掉"
|
|
87
|
+
"不要拿未审核或没封面的文章去发布/投稿,会被拒。挑文章时就用 status=1 + mustHaveCover=true 筛掉",
|
|
88
|
+
"平台配了 limitConfig 时,不要把字数不达标的文章塞给那个平台——整批都建不了。字数改不改、还发不发那个平台,让用户定,别自己换一篇重试"
|
|
88
89
|
],
|
|
89
90
|
"errorRecovery": [
|
|
90
91
|
{
|
|
@@ -93,7 +94,7 @@
|
|
|
93
94
|
},
|
|
94
95
|
{
|
|
95
96
|
"code": "VALIDATION_FAILED",
|
|
96
|
-
"action": "按 capabilities 里的 schema 修正参数。平台名要来自 publicationPlatforms.list、账号 id 来自 publicationAccounts.list
|
|
97
|
+
"action": "按 capabilities 里的 schema 修正参数。平台名要来自 publicationPlatforms.list、账号 id 来自 publicationAccounts.list,别自己拼。报「文章没有封面」「标题超过媒体限制」「时间已经过去了」时,是内容或参数本身的问题,改完再重新生成计划。**报「不满足平台的字数要求」时不要改参数重试**——那是文章本身长度不够或超了,改 schema 参数永远修不好。把报错原文念给用户(里面点名了哪篇文章投哪个平台、差多少字),让他定是改文章还是不发那个平台。"
|
|
97
98
|
},
|
|
98
99
|
{
|
|
99
100
|
"code": "PLAN_COST_CHANGED",
|