best-geo-test 1.0.2 → 2.0.0-beta.1

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.
@@ -1,26 +1,19 @@
1
1
  {
2
- "protocolVersion": 1,
2
+ "protocolVersion": 2,
3
3
  "capabilities": [
4
4
  {
5
- "name": "companies.list",
5
+ "name": "projects.list",
6
6
  "mode": "read",
7
- "guide": "company",
7
+ "guide": "project",
8
8
  "requiresPlan": false,
9
- "description": "列出当前密钥被授权的公司。不传 companyId 就是全部授权公司。",
9
+ "description": "列出这把密钥能操作的 GEO 项目。inputSchema 里要 projectId 的能力,传的就是这里的 id。出参 type:1=产品/工具,2=人物/IP,对用户念中文。",
10
10
  "inputSchema": {
11
11
  "type": "object",
12
12
  "properties": {
13
- "id": {
14
- "type": "integer",
15
- "description": "只看某一家公司"
16
- },
17
- "name": {
18
- "type": "string",
19
- "description": "按名称模糊匹配"
20
- },
21
13
  "search": {
22
14
  "type": "string",
23
- "description": "同时按名称和 ID 搜索"
15
+ "maxLength": 100,
16
+ "description": "按项目名模糊匹配"
24
17
  },
25
18
  "page": {
26
19
  "type": "integer",
@@ -36,178 +29,72 @@
36
29
  }
37
30
  },
38
31
  {
39
- "name": "companies.get",
32
+ "name": "projects.get",
40
33
  "mode": "read",
41
- "guide": "company",
34
+ "guide": "project",
42
35
  "requiresPlan": false,
43
- "description": "按 ID 读取一家公司。ID 必须在授权范围内。",
36
+ "description": "读取一个 GEO 项目的名称、类型、关键词、品牌词。出参 type:1=产品/工具,2=人物/IP,对用户念中文。",
44
37
  "inputSchema": {
45
38
  "type": "object",
46
39
  "properties": {
47
- "id": {
40
+ "projectId": {
48
41
  "type": "integer",
49
- "minimum": 1
50
- }
51
- },
52
- "required": [
53
- "id"
54
- ],
55
- "additionalProperties": false
56
- }
57
- },
58
- {
59
- "name": "companies.create",
60
- "mode": "write",
61
- "guide": "company",
62
- "requiresPlan": true,
63
- "description": "新建公司。创建成功后这家公司会自动加入当前密钥的授权范围。",
64
- "inputSchema": {
65
- "type": "object",
66
- "properties": {
67
- "name": {
68
- "type": "string",
69
- "description": "公司名称",
70
- "maxLength": 255
71
- },
72
- "description": {
73
- "type": "string",
74
- "description": "公司描述",
75
- "maxLength": 255
76
- },
77
- "aliases": {
78
- "type": "array",
79
- "items": {
80
- "type": "string"
81
- },
82
- "description": "公司别名/关键词"
42
+ "minimum": 1,
43
+ "description": "GEO 项目 id,来自 projects.list"
83
44
  }
84
45
  },
85
46
  "required": [
86
- "name",
87
- "description"
47
+ "projectId"
88
48
  ],
89
49
  "additionalProperties": false
90
50
  }
91
51
  },
92
52
  {
93
- "name": "companies.update",
53
+ "name": "projects.create",
94
54
  "mode": "write",
95
- "guide": "company",
55
+ "guide": "project",
96
56
  "requiresPlan": true,
97
- "description": "修改公司。只改传进来的字段,没传的保持不变;数组字段是整体覆盖。",
57
+ "description": "新建 GEO 项目。建好后自动加入这把密钥的授权。",
98
58
  "inputSchema": {
99
59
  "type": "object",
100
60
  "properties": {
101
- "companyId": {
102
- "type": "integer"
103
- },
104
61
  "name": {
105
62
  "type": "string",
106
- "maxLength": 255
107
- },
108
- "description": {
109
- "type": "string",
110
- "maxLength": 255
111
- },
112
- "aliases": {
113
- "type": "array",
114
- "items": {
115
- "type": "string"
116
- },
117
- "description": "整体覆盖,不是追加"
118
- }
119
- },
120
- "required": [
121
- "companyId"
122
- ],
123
- "additionalProperties": false
124
- }
125
- },
126
- {
127
- "name": "products.list",
128
- "mode": "read",
129
- "guide": "product",
130
- "requiresPlan": false,
131
- "description": "列出 GEO 项目。传 companyId 可限定到某家公司。",
132
- "inputSchema": {
133
- "type": "object",
134
- "properties": {
135
- "companyId": {
136
- "type": "integer"
137
- },
138
- "name": {
139
- "type": "string"
140
- },
141
- "search": {
142
- "type": "string"
143
- },
144
- "page": {
145
- "type": "integer",
146
- "default": 1
63
+ "minLength": 2,
64
+ "maxLength": 50
147
65
  },
148
- "limit": {
149
- "type": "integer",
150
- "default": 20,
151
- "maximum": 100
152
- }
153
- },
154
- "additionalProperties": false
155
- }
156
- },
157
- {
158
- "name": "products.get",
159
- "mode": "read",
160
- "guide": "product",
161
- "requiresPlan": false,
162
- "description": "按 ID 读取一个 GEO 项目。",
163
- "inputSchema": {
164
- "type": "object",
165
- "properties": {
166
- "id": {
66
+ "type": {
167
67
  "type": "integer",
168
- "minimum": 1
169
- }
170
- },
171
- "required": [
172
- "id"
173
- ],
174
- "additionalProperties": false
175
- }
176
- },
177
- {
178
- "name": "products.create",
179
- "mode": "write",
180
- "guide": "product",
181
- "requiresPlan": true,
182
- "description": "在指定公司下新建 GEO 项目。",
183
- "inputSchema": {
184
- "type": "object",
185
- "properties": {
186
- "companyId": {
187
- "type": "integer"
188
- },
189
- "name": {
190
- "type": "string",
191
- "maxLength": 255
68
+ "enum": [
69
+ 1,
70
+ 2
71
+ ],
72
+ "description": "1=产品/工具,2=人物/IP"
192
73
  },
193
74
  "keyword": {
194
75
  "type": "array",
76
+ "minItems": 1,
77
+ "maxItems": 30,
195
78
  "items": {
196
- "type": "string"
79
+ "type": "string",
80
+ "maxLength": 20
197
81
  },
198
- "description": "关键词"
82
+ "description": "关键词,整份提交"
199
83
  },
200
84
  "targetWord": {
201
85
  "type": "array",
86
+ "minItems": 1,
87
+ "maxItems": 30,
202
88
  "items": {
203
- "type": "string"
89
+ "type": "string",
90
+ "maxLength": 20
204
91
  },
205
- "description": "目标词"
92
+ "description": "品牌词,整份提交"
206
93
  }
207
94
  },
208
95
  "required": [
209
- "companyId",
210
96
  "name",
97
+ "type",
211
98
  "keyword",
212
99
  "targetWord"
213
100
  ],
@@ -215,38 +102,54 @@
215
102
  }
216
103
  },
217
104
  {
218
- "name": "products.update",
105
+ "name": "projects.update",
219
106
  "mode": "write",
220
- "guide": "product",
107
+ "guide": "project",
221
108
  "requiresPlan": true,
222
109
  "description": "修改 GEO 项目。只改传进来的字段;数组字段是整体覆盖。",
223
110
  "inputSchema": {
224
111
  "type": "object",
225
112
  "properties": {
226
- "productId": {
227
- "type": "integer"
113
+ "projectId": {
114
+ "type": "integer",
115
+ "minimum": 1,
116
+ "description": "GEO 项目 id,来自 projects.list"
228
117
  },
229
118
  "name": {
230
119
  "type": "string",
231
- "maxLength": 255
120
+ "minLength": 2,
121
+ "maxLength": 50
122
+ },
123
+ "type": {
124
+ "type": "integer",
125
+ "enum": [
126
+ 1,
127
+ 2
128
+ ]
232
129
  },
233
130
  "keyword": {
234
131
  "type": "array",
132
+ "minItems": 1,
133
+ "maxItems": 30,
235
134
  "items": {
236
- "type": "string"
135
+ "type": "string",
136
+ "maxLength": 20
237
137
  },
238
138
  "description": "整体覆盖,不是追加"
239
139
  },
240
140
  "targetWord": {
241
141
  "type": "array",
142
+ "minItems": 1,
143
+ "maxItems": 30,
242
144
  "items": {
243
- "type": "string"
145
+ "type": "string",
146
+ "maxLength": 20
244
147
  },
245
148
  "description": "整体覆盖,不是追加"
246
149
  }
247
150
  },
248
151
  "required": [
249
- "productId"
152
+ "projectId"
250
153
  ],
251
154
  "additionalProperties": false
252
155
  }
@@ -256,15 +159,14 @@
256
159
  "mode": "read",
257
160
  "guide": "question",
258
161
  "requiresPlan": false,
259
- "description": "列出搜索问题。可按公司或 GEO 项目限定。每条问题的来源、类型、营销阶段念 sourceLabel / questionTypeLabel / stageLabel,Label 为空是老数据没有这一项。",
162
+ "description": "列出搜索问题。限定在当前 GEO 项目内。每条问题的来源、类型、营销阶段念 sourceLabel / questionTypeLabel / stageLabel,Label 为空是老数据没有这一项。",
260
163
  "inputSchema": {
261
164
  "type": "object",
262
165
  "properties": {
263
- "companyId": {
264
- "type": "integer"
265
- },
266
- "productId": {
267
- "type": "integer"
166
+ "projectId": {
167
+ "type": "integer",
168
+ "minimum": 1,
169
+ "description": "GEO 项目 id,来自 projects.list"
268
170
  },
269
171
  "topic": {
270
172
  "type": "string",
@@ -280,6 +182,9 @@
280
182
  "maximum": 100
281
183
  }
282
184
  },
185
+ "required": [
186
+ "projectId"
187
+ ],
283
188
  "additionalProperties": false
284
189
  }
285
190
  },
@@ -292,12 +197,18 @@
292
197
  "inputSchema": {
293
198
  "type": "object",
294
199
  "properties": {
200
+ "projectId": {
201
+ "type": "integer",
202
+ "minimum": 1,
203
+ "description": "GEO 项目 id,来自 projects.list"
204
+ },
295
205
  "id": {
296
206
  "type": "integer",
297
207
  "minimum": 1
298
208
  }
299
209
  },
300
210
  "required": [
211
+ "projectId",
301
212
  "id"
302
213
  ],
303
214
  "additionalProperties": false
@@ -312,8 +223,10 @@
312
223
  "inputSchema": {
313
224
  "type": "object",
314
225
  "properties": {
315
- "productId": {
316
- "type": "integer"
226
+ "projectId": {
227
+ "type": "integer",
228
+ "minimum": 1,
229
+ "description": "GEO 项目 id,来自 projects.list"
317
230
  },
318
231
  "questions": {
319
232
  "type": "array",
@@ -332,7 +245,7 @@
332
245
  }
333
246
  },
334
247
  "required": [
335
- "productId",
248
+ "projectId",
336
249
  "questions"
337
250
  ],
338
251
  "additionalProperties": false
@@ -343,10 +256,15 @@
343
256
  "mode": "write",
344
257
  "guide": "question",
345
258
  "requiresPlan": true,
346
- "description": "修改一条搜索问题。",
259
+ "description": "修改一条搜索问题。tags 是整体覆盖不是追加:传进来的就是这条问题最终的全部标签,没传到的旧标签会被删掉。只想加标签时,先用 questions.get 取出现有 tags,合并后整组传入。",
347
260
  "inputSchema": {
348
261
  "type": "object",
349
262
  "properties": {
263
+ "projectId": {
264
+ "type": "integer",
265
+ "minimum": 1,
266
+ "description": "GEO 项目 id,来自 projects.list"
267
+ },
350
268
  "questionId": {
351
269
  "type": "integer"
352
270
  },
@@ -360,10 +278,11 @@
360
278
  "items": {
361
279
  "type": "string"
362
280
  },
363
- "description": "整体覆盖,不是追加"
281
+ "description": "整体覆盖,不是追加:传入的就是最终全部标签,传 [] 会清空。只加标签要先 questions.get 取现有的再合并"
364
282
  }
365
283
  },
366
284
  "required": [
285
+ "projectId",
367
286
  "questionId"
368
287
  ],
369
288
  "additionalProperties": false
@@ -378,6 +297,11 @@
378
297
  "inputSchema": {
379
298
  "type": "object",
380
299
  "properties": {
300
+ "projectId": {
301
+ "type": "integer",
302
+ "minimum": 1,
303
+ "description": "GEO 项目 id,来自 projects.list"
304
+ },
381
305
  "questionId": {
382
306
  "type": "integer",
383
307
  "minimum": 1,
@@ -394,6 +318,7 @@
394
318
  }
395
319
  },
396
320
  "required": [
321
+ "projectId",
397
322
  "questionId",
398
323
  "knowledgeBaseIds"
399
324
  ],
@@ -409,6 +334,11 @@
409
334
  "inputSchema": {
410
335
  "type": "object",
411
336
  "properties": {
337
+ "projectId": {
338
+ "type": "integer",
339
+ "minimum": 1,
340
+ "description": "GEO 项目 id,来自 projects.list"
341
+ },
412
342
  "questionId": {
413
343
  "type": "integer",
414
344
  "minimum": 1,
@@ -425,6 +355,7 @@
425
355
  }
426
356
  },
427
357
  "required": [
358
+ "projectId",
428
359
  "questionId",
429
360
  "knowledgeBaseIds"
430
361
  ],
@@ -436,17 +367,14 @@
436
367
  "mode": "read",
437
368
  "guide": "article",
438
369
  "requiresPlan": false,
439
- "description": "列出文章。不返回正文——要正文用 articles.get 并显式传 withContent。",
370
+ "description": "列出文章。限定在当前 GEO 项目内。不返回正文——要正文用 articles.get 并显式传 withContent。",
440
371
  "inputSchema": {
441
372
  "type": "object",
442
373
  "properties": {
443
- "companyId": {
444
- "type": "integer",
445
- "description": "只看某家公司;不传就是全部授权公司"
446
- },
447
- "productId": {
374
+ "projectId": {
448
375
  "type": "integer",
449
- "description": "只看某个 GEO 项目"
376
+ "minimum": 1,
377
+ "description": "GEO 项目 id,来自 projects.list"
450
378
  },
451
379
  "title": {
452
380
  "type": "string",
@@ -474,6 +402,9 @@
474
402
  "maximum": 100
475
403
  }
476
404
  },
405
+ "required": [
406
+ "projectId"
407
+ ],
477
408
  "additionalProperties": false
478
409
  }
479
410
  },
@@ -486,6 +417,11 @@
486
417
  "inputSchema": {
487
418
  "type": "object",
488
419
  "properties": {
420
+ "projectId": {
421
+ "type": "integer",
422
+ "minimum": 1,
423
+ "description": "GEO 项目 id,来自 projects.list"
424
+ },
489
425
  "id": {
490
426
  "type": "integer",
491
427
  "minimum": 1
@@ -497,6 +433,7 @@
497
433
  }
498
434
  },
499
435
  "required": [
436
+ "projectId",
500
437
  "id"
501
438
  ],
502
439
  "additionalProperties": false
@@ -507,14 +444,14 @@
507
444
  "mode": "write",
508
445
  "guide": "article",
509
446
  "requiresPlan": true,
510
- "description": "在某个 GEO 项目下新建一篇文章。手动建文章按篇扣一次费用,plan 摘要的 notice 里写了,念给用户听。没给封面也能建出来,但提交审核前必须补一张。",
447
+ "description": "在当前 GEO 项目下新建一篇文章。手动建文章按篇扣一次费用,plan 摘要的 notice 里写了,念给用户听。没给封面也能建出来,但提交审核前必须补一张。",
511
448
  "inputSchema": {
512
449
  "type": "object",
513
450
  "properties": {
514
- "productId": {
451
+ "projectId": {
515
452
  "type": "integer",
516
453
  "minimum": 1,
517
- "description": "文章归属的 GEO 项目"
454
+ "description": "GEO 项目 id,来自 projects.list"
518
455
  },
519
456
  "title": {
520
457
  "type": "string",
@@ -553,7 +490,7 @@
553
490
  }
554
491
  },
555
492
  "required": [
556
- "productId",
493
+ "projectId",
557
494
  "title"
558
495
  ],
559
496
  "additionalProperties": false
@@ -568,6 +505,11 @@
568
505
  "inputSchema": {
569
506
  "type": "object",
570
507
  "properties": {
508
+ "projectId": {
509
+ "type": "integer",
510
+ "minimum": 1,
511
+ "description": "GEO 项目 id,来自 projects.list"
512
+ },
571
513
  "articleId": {
572
514
  "type": "integer",
573
515
  "minimum": 1
@@ -603,6 +545,7 @@
603
545
  }
604
546
  },
605
547
  "required": [
548
+ "projectId",
606
549
  "articleId"
607
550
  ],
608
551
  "additionalProperties": false
@@ -613,21 +556,19 @@
613
556
  "mode": "read",
614
557
  "guide": "article",
615
558
  "requiresPlan": false,
616
- "description": "列出文章文件夹(扁平,自己按 parentId 拼树)。要把文章放进指定文件夹、或要回答「这篇在哪个文件夹」时,先查这里拿 id —— 不要猜 id,猜错会被服务端拒掉、白跑一次 plan。",
559
+ "description": "列出文章文件夹(扁平,自己按 parentId 拼树)。限定在当前 GEO 项目内。要把文章放进指定文件夹、或要回答「这篇在哪个文件夹」时,先查这里拿 id —— 不要猜 id,猜错会被服务端拒掉、白跑一次 plan。",
617
560
  "inputSchema": {
618
561
  "type": "object",
619
562
  "properties": {
620
- "companyId": {
563
+ "projectId": {
621
564
  "type": "integer",
622
565
  "minimum": 1,
623
- "description": "只看某家公司的"
624
- },
625
- "productId": {
626
- "type": "integer",
627
- "minimum": 1,
628
- "description": "只看某个 GEO 项目的。建文章前一般都该带上它"
566
+ "description": "GEO 项目 id,来自 projects.list"
629
567
  }
630
568
  },
569
+ "required": [
570
+ "projectId"
571
+ ],
631
572
  "additionalProperties": false
632
573
  }
633
574
  },
@@ -640,6 +581,11 @@
640
581
  "inputSchema": {
641
582
  "type": "object",
642
583
  "properties": {
584
+ "projectId": {
585
+ "type": "integer",
586
+ "minimum": 1,
587
+ "description": "GEO 项目 id,来自 projects.list"
588
+ },
643
589
  "articleIds": {
644
590
  "type": "array",
645
591
  "minItems": 1,
@@ -656,6 +602,7 @@
656
602
  }
657
603
  },
658
604
  "required": [
605
+ "projectId",
659
606
  "articleIds",
660
607
  "folderId"
661
608
  ],
@@ -671,6 +618,11 @@
671
618
  "inputSchema": {
672
619
  "type": "object",
673
620
  "properties": {
621
+ "projectId": {
622
+ "type": "integer",
623
+ "minimum": 1,
624
+ "description": "GEO 项目 id,来自 projects.list"
625
+ },
674
626
  "articleIds": {
675
627
  "type": "array",
676
628
  "minItems": 1,
@@ -691,6 +643,7 @@
691
643
  }
692
644
  },
693
645
  "required": [
646
+ "projectId",
694
647
  "articleIds",
695
648
  "status"
696
649
  ],
@@ -702,17 +655,14 @@
702
655
  "mode": "read",
703
656
  "guide": "knowledge",
704
657
  "requiresPlan": false,
705
- "description": "列出知识库。productId 为 null 的是公司级公共知识库,该公司下所有 GEO 项目都能用。",
658
+ "description": "列出知识库。当前 GEO 项目的,加上同一批项目共享的公共资料。",
706
659
  "inputSchema": {
707
660
  "type": "object",
708
661
  "properties": {
709
- "companyId": {
662
+ "projectId": {
710
663
  "type": "integer",
711
- "description": "只看某家公司;不传就是全部授权公司"
712
- },
713
- "productId": {
714
- "type": "integer",
715
- "description": "只看某个 GEO 项目。传 0 只看公司级公共知识库。注意:传了具体项目 ID 时**看不到**公司级公共库,要再用 productId=0 查一次。"
664
+ "minimum": 1,
665
+ "description": "GEO 项目 id,来自 projects.list"
716
666
  },
717
667
  "name": {
718
668
  "type": "string",
@@ -732,6 +682,9 @@
732
682
  "maximum": 100
733
683
  }
734
684
  },
685
+ "required": [
686
+ "projectId"
687
+ ],
735
688
  "additionalProperties": false
736
689
  }
737
690
  },
@@ -744,12 +697,18 @@
744
697
  "inputSchema": {
745
698
  "type": "object",
746
699
  "properties": {
700
+ "projectId": {
701
+ "type": "integer",
702
+ "minimum": 1,
703
+ "description": "GEO 项目 id,来自 projects.list"
704
+ },
747
705
  "id": {
748
706
  "type": "integer",
749
707
  "minimum": 1
750
708
  }
751
709
  },
752
710
  "required": [
711
+ "projectId",
753
712
  "id"
754
713
  ],
755
714
  "additionalProperties": false
@@ -764,18 +723,16 @@
764
723
  "inputSchema": {
765
724
  "type": "object",
766
725
  "properties": {
767
- "companyId": {
768
- "type": "integer"
726
+ "projectId": {
727
+ "type": "integer",
728
+ "minimum": 1,
729
+ "description": "GEO 项目 id,来自 projects.list"
769
730
  },
770
731
  "name": {
771
732
  "type": "string",
772
733
  "description": "知识库名称",
773
734
  "maxLength": 255
774
735
  },
775
- "productId": {
776
- "type": "integer",
777
- "description": "归到某个 GEO 项目;不传就是公司级公共知识库"
778
- },
779
736
  "tags": {
780
737
  "type": "array",
781
738
  "items": {
@@ -808,7 +765,7 @@
808
765
  }
809
766
  },
810
767
  "required": [
811
- "companyId",
768
+ "projectId",
812
769
  "name",
813
770
  "files"
814
771
  ],
@@ -824,6 +781,11 @@
824
781
  "inputSchema": {
825
782
  "type": "object",
826
783
  "properties": {
784
+ "projectId": {
785
+ "type": "integer",
786
+ "minimum": 1,
787
+ "description": "GEO 项目 id,来自 projects.list"
788
+ },
827
789
  "knowledgeBaseId": {
828
790
  "type": "integer"
829
791
  },
@@ -840,6 +802,7 @@
840
802
  }
841
803
  },
842
804
  "required": [
805
+ "projectId",
843
806
  "knowledgeBaseId"
844
807
  ],
845
808
  "additionalProperties": false
@@ -854,6 +817,11 @@
854
817
  "inputSchema": {
855
818
  "type": "object",
856
819
  "properties": {
820
+ "projectId": {
821
+ "type": "integer",
822
+ "minimum": 1,
823
+ "description": "GEO 项目 id,来自 projects.list"
824
+ },
857
825
  "knowledgeBaseId": {
858
826
  "type": "integer",
859
827
  "minimum": 1,
@@ -884,6 +852,7 @@
884
852
  }
885
853
  },
886
854
  "required": [
855
+ "projectId",
887
856
  "knowledgeBaseId",
888
857
  "files"
889
858
  ],
@@ -894,17 +863,14 @@
894
863
  "name": "images.list",
895
864
  "mode": "read",
896
865
  "guide": "material",
897
- "description": "查图片素材。列表里有图片地址和语义描述,够回答「有哪些图能用」。",
866
+ "description": "查图片素材。当前 GEO 项目的,加上同一批项目共享的公共资料。列表里有图片地址和语义描述,够回答「有哪些图能用」。",
898
867
  "inputSchema": {
899
868
  "type": "object",
900
869
  "properties": {
901
- "companyId": {
870
+ "projectId": {
902
871
  "type": "integer",
903
- "description": "只看某家公司;不传就是全部授权公司"
904
- },
905
- "productId": {
906
- "type": "integer",
907
- "description": "只看某个 GEO 项目。传 0 只看公司级公共图片。注意:传了具体项目 ID 时**看不到**公司级公共图片,要再用 productId=0 查一次。"
872
+ "minimum": 1,
873
+ "description": "GEO 项目 id,来自 projects.list"
908
874
  },
909
875
  "name": {
910
876
  "type": "string",
@@ -931,6 +897,9 @@
931
897
  "maximum": 100
932
898
  }
933
899
  },
900
+ "required": [
901
+ "projectId"
902
+ ],
934
903
  "additionalProperties": false
935
904
  },
936
905
  "requiresPlan": false
@@ -943,12 +912,18 @@
943
912
  "inputSchema": {
944
913
  "type": "object",
945
914
  "properties": {
915
+ "projectId": {
916
+ "type": "integer",
917
+ "minimum": 1,
918
+ "description": "GEO 项目 id,来自 projects.list"
919
+ },
946
920
  "id": {
947
921
  "type": "integer",
948
922
  "minimum": 1
949
923
  }
950
924
  },
951
925
  "required": [
926
+ "projectId",
952
927
  "id"
953
928
  ],
954
929
  "additionalProperties": false
@@ -959,17 +934,14 @@
959
934
  "name": "videos.list",
960
935
  "mode": "read",
961
936
  "guide": "material",
962
- "description": "查视频素材。列表里有视频地址、封面和时长。",
937
+ "description": "查视频素材。当前 GEO 项目的,加上同一批项目共享的公共资料。列表里有视频地址、封面和时长。",
963
938
  "inputSchema": {
964
939
  "type": "object",
965
940
  "properties": {
966
- "companyId": {
941
+ "projectId": {
967
942
  "type": "integer",
968
- "description": "只看某家公司;不传就是全部授权公司"
969
- },
970
- "productId": {
971
- "type": "integer",
972
- "description": "只看某个 GEO 项目。**视频没有公司级/项目级之分,传 0 等同不传(返回全部视频)**,不要照搬 images.list 的 productId=0 用法。"
943
+ "minimum": 1,
944
+ "description": "GEO 项目 id,来自 projects.list"
973
945
  },
974
946
  "title": {
975
947
  "type": "string",
@@ -996,6 +968,9 @@
996
968
  "maximum": 100
997
969
  }
998
970
  },
971
+ "required": [
972
+ "projectId"
973
+ ],
999
974
  "additionalProperties": false
1000
975
  },
1001
976
  "requiresPlan": false
@@ -1008,12 +983,18 @@
1008
983
  "inputSchema": {
1009
984
  "type": "object",
1010
985
  "properties": {
986
+ "projectId": {
987
+ "type": "integer",
988
+ "minimum": 1,
989
+ "description": "GEO 项目 id,来自 projects.list"
990
+ },
1011
991
  "id": {
1012
992
  "type": "integer",
1013
993
  "minimum": 1
1014
994
  }
1015
995
  },
1016
996
  "required": [
997
+ "projectId",
1017
998
  "id"
1018
999
  ],
1019
1000
  "additionalProperties": false
@@ -1038,15 +1019,10 @@
1038
1019
  "description": "素材名称",
1039
1020
  "maxLength": 255
1040
1021
  },
1041
- "productId": {
1022
+ "projectId": {
1042
1023
  "type": "integer",
1043
1024
  "minimum": 1,
1044
- "description": "归到某个 GEO 项目;不给就要给 companyId,存成公司级素材"
1045
- },
1046
- "companyId": {
1047
- "type": "integer",
1048
- "minimum": 1,
1049
- "description": "给了 productId 就不用给这个——公司会从项目上取"
1025
+ "description": "GEO 项目 id,来自 projects.list"
1050
1026
  },
1051
1027
  "tags": {
1052
1028
  "type": "array",
@@ -1057,6 +1033,7 @@
1057
1033
  }
1058
1034
  },
1059
1035
  "required": [
1036
+ "projectId",
1060
1037
  "filePath",
1061
1038
  "name"
1062
1039
  ],
@@ -1090,14 +1067,10 @@
1090
1067
  "description": "视频标题",
1091
1068
  "maxLength": 255
1092
1069
  },
1093
- "productId": {
1070
+ "projectId": {
1094
1071
  "type": "integer",
1095
1072
  "minimum": 1,
1096
- "description": "归到某个 GEO 项目;不给就要给 companyId"
1097
- },
1098
- "companyId": {
1099
- "type": "integer",
1100
- "minimum": 1
1073
+ "description": "GEO 项目 id,来自 projects.list"
1101
1074
  },
1102
1075
  "tags": {
1103
1076
  "type": "array",
@@ -1116,6 +1089,7 @@
1116
1089
  }
1117
1090
  },
1118
1091
  "required": [
1092
+ "projectId",
1119
1093
  "videoPath",
1120
1094
  "thumbnailPath",
1121
1095
  "duration",
@@ -1133,6 +1107,11 @@
1133
1107
  "inputSchema": {
1134
1108
  "type": "object",
1135
1109
  "properties": {
1110
+ "projectId": {
1111
+ "type": "integer",
1112
+ "minimum": 1,
1113
+ "description": "GEO 项目 id,来自 projects.list"
1114
+ },
1136
1115
  "imageId": {
1137
1116
  "type": "integer"
1138
1117
  },
@@ -1150,6 +1129,7 @@
1150
1129
  }
1151
1130
  },
1152
1131
  "required": [
1132
+ "projectId",
1153
1133
  "imageId"
1154
1134
  ],
1155
1135
  "additionalProperties": false
@@ -1164,6 +1144,11 @@
1164
1144
  "inputSchema": {
1165
1145
  "type": "object",
1166
1146
  "properties": {
1147
+ "projectId": {
1148
+ "type": "integer",
1149
+ "minimum": 1,
1150
+ "description": "GEO 项目 id,来自 projects.list"
1151
+ },
1167
1152
  "videoId": {
1168
1153
  "type": "integer"
1169
1154
  },
@@ -1181,6 +1166,7 @@
1181
1166
  }
1182
1167
  },
1183
1168
  "required": [
1169
+ "projectId",
1184
1170
  "videoId"
1185
1171
  ],
1186
1172
  "additionalProperties": false
@@ -1191,17 +1177,14 @@
1191
1177
  "mode": "read",
1192
1178
  "guide": "article-task",
1193
1179
  "requiresPlan": false,
1194
- "description": "列出可用的提示词:写作方向(正文)和标题风格(标题)。建 AI 文章创作任务前必须先查一次——写作方向是必填的,只能从这里选。",
1180
+ "description": "列出可用的提示词:写作方向(正文)和标题风格(标题)。当前 GEO 项目的,加上同一批项目共享的公共资料,以及系统内置模板。建 AI 文章创作任务前必须先查一次——写作方向是必填的,只能从这里选。",
1195
1181
  "inputSchema": {
1196
1182
  "type": "object",
1197
1183
  "properties": {
1198
- "productId": {
1184
+ "projectId": {
1199
1185
  "type": "integer",
1200
- "description": "只看某个 GEO 项目能用的(含不限项目的公共提示词)"
1201
- },
1202
- "companyId": {
1203
- "type": "integer",
1204
- "description": "只看某家公司的;不传就是全部授权公司"
1186
+ "minimum": 1,
1187
+ "description": "GEO 项目 id,来自 projects.list"
1205
1188
  },
1206
1189
  "type": {
1207
1190
  "type": "integer",
@@ -1225,6 +1208,9 @@
1225
1208
  "maximum": 100
1226
1209
  }
1227
1210
  },
1211
+ "required": [
1212
+ "projectId"
1213
+ ],
1228
1214
  "additionalProperties": false
1229
1215
  }
1230
1216
  },
@@ -1263,17 +1249,14 @@
1263
1249
  "mode": "read",
1264
1250
  "guide": "question-task",
1265
1251
  "requiresPlan": false,
1266
- "description": "列出 AI 扩展问题任务,看跑到哪一步了。不含生成出来的问题正文——要看结果用 questionTasks.get。",
1252
+ "description": "列出 AI 扩展问题任务,看跑到哪一步了。限定在当前 GEO 项目内。不含生成出来的问题正文——要看结果用 questionTasks.get。",
1267
1253
  "inputSchema": {
1268
1254
  "type": "object",
1269
1255
  "properties": {
1270
- "companyId": {
1271
- "type": "integer",
1272
- "description": "只看某家公司;不传就是全部授权公司"
1273
- },
1274
- "productId": {
1256
+ "projectId": {
1275
1257
  "type": "integer",
1276
- "description": "只看某个 GEO 项目"
1258
+ "minimum": 1,
1259
+ "description": "GEO 项目 id,来自 projects.list"
1277
1260
  },
1278
1261
  "status": {
1279
1262
  "type": "integer",
@@ -1300,6 +1283,9 @@
1300
1283
  "maximum": 100
1301
1284
  }
1302
1285
  },
1286
+ "required": [
1287
+ "projectId"
1288
+ ],
1303
1289
  "additionalProperties": false
1304
1290
  }
1305
1291
  },
@@ -1312,12 +1298,18 @@
1312
1298
  "inputSchema": {
1313
1299
  "type": "object",
1314
1300
  "properties": {
1301
+ "projectId": {
1302
+ "type": "integer",
1303
+ "minimum": 1,
1304
+ "description": "GEO 项目 id,来自 projects.list"
1305
+ },
1315
1306
  "taskId": {
1316
1307
  "type": "integer",
1317
1308
  "minimum": 1
1318
1309
  }
1319
1310
  },
1320
1311
  "required": [
1312
+ "projectId",
1321
1313
  "taskId"
1322
1314
  ],
1323
1315
  "additionalProperties": false
@@ -1328,17 +1320,14 @@
1328
1320
  "mode": "read",
1329
1321
  "guide": "article-task",
1330
1322
  "requiresPlan": false,
1331
- "description": "列出 AI 文章创作任务,看生成和审核进度。",
1323
+ "description": "列出 AI 文章创作任务,看生成和审核进度。限定在当前 GEO 项目内。",
1332
1324
  "inputSchema": {
1333
1325
  "type": "object",
1334
1326
  "properties": {
1335
- "companyId": {
1336
- "type": "integer",
1337
- "description": "只看某家公司;不传就是全部授权公司"
1338
- },
1339
- "productId": {
1327
+ "projectId": {
1340
1328
  "type": "integer",
1341
- "description": "只看某个 GEO 项目"
1329
+ "minimum": 1,
1330
+ "description": "GEO 项目 id,来自 projects.list"
1342
1331
  },
1343
1332
  "status": {
1344
1333
  "type": "integer",
@@ -1365,6 +1354,9 @@
1365
1354
  "maximum": 100
1366
1355
  }
1367
1356
  },
1357
+ "required": [
1358
+ "projectId"
1359
+ ],
1368
1360
  "additionalProperties": false
1369
1361
  }
1370
1362
  },
@@ -1373,16 +1365,22 @@
1373
1365
  "mode": "read",
1374
1366
  "guide": "article-task",
1375
1367
  "requiresPlan": false,
1376
- "description": "读一个 AI 文章创作任务的进度。生成出来的文章用 articles.list 传 productId 去查。",
1368
+ "description": "读一个 AI 文章创作任务的进度。生成出来的文章用 articles.list(带 projectId)去查。",
1377
1369
  "inputSchema": {
1378
1370
  "type": "object",
1379
1371
  "properties": {
1372
+ "projectId": {
1373
+ "type": "integer",
1374
+ "minimum": 1,
1375
+ "description": "GEO 项目 id,来自 projects.list"
1376
+ },
1380
1377
  "taskId": {
1381
1378
  "type": "integer",
1382
1379
  "minimum": 1
1383
1380
  }
1384
1381
  },
1385
1382
  "required": [
1383
+ "projectId",
1386
1384
  "taskId"
1387
1385
  ],
1388
1386
  "additionalProperties": false
@@ -1397,10 +1395,10 @@
1397
1395
  "inputSchema": {
1398
1396
  "type": "object",
1399
1397
  "properties": {
1400
- "productId": {
1398
+ "projectId": {
1401
1399
  "type": "integer",
1402
1400
  "minimum": 1,
1403
- "description": "给哪个 GEO 项目生成"
1401
+ "description": "GEO 项目 id,来自 projects.list"
1404
1402
  },
1405
1403
  "keywords": {
1406
1404
  "type": "array",
@@ -1408,7 +1406,7 @@
1408
1406
  "type": "string"
1409
1407
  },
1410
1408
  "minItems": 1,
1411
- "description": "围绕哪些词扩展。不给的话可以先用 products.get 看项目自带的关键词,念给用户确认"
1409
+ "description": "围绕哪些词扩展。不给的话可以先用 projects.get 看项目自带的关键词,念给用户确认"
1412
1410
  },
1413
1411
  "acquisitionCount": {
1414
1412
  "type": "integer",
@@ -1444,7 +1442,7 @@
1444
1442
  }
1445
1443
  },
1446
1444
  "required": [
1447
- "productId",
1445
+ "projectId",
1448
1446
  "keywords",
1449
1447
  "acquisitionCount",
1450
1448
  "reputationCount"
@@ -1461,6 +1459,11 @@
1461
1459
  "inputSchema": {
1462
1460
  "type": "object",
1463
1461
  "properties": {
1462
+ "projectId": {
1463
+ "type": "integer",
1464
+ "minimum": 1,
1465
+ "description": "GEO 项目 id,来自 projects.list"
1466
+ },
1464
1467
  "taskId": {
1465
1468
  "type": "integer",
1466
1469
  "minimum": 1
@@ -1476,6 +1479,7 @@
1476
1479
  }
1477
1480
  },
1478
1481
  "required": [
1482
+ "projectId",
1479
1483
  "taskId"
1480
1484
  ],
1481
1485
  "additionalProperties": false
@@ -1490,12 +1494,18 @@
1490
1494
  "inputSchema": {
1491
1495
  "type": "object",
1492
1496
  "properties": {
1497
+ "projectId": {
1498
+ "type": "integer",
1499
+ "minimum": 1,
1500
+ "description": "GEO 项目 id,来自 projects.list"
1501
+ },
1493
1502
  "taskId": {
1494
1503
  "type": "integer",
1495
1504
  "minimum": 1
1496
1505
  }
1497
1506
  },
1498
1507
  "required": [
1508
+ "projectId",
1499
1509
  "taskId"
1500
1510
  ],
1501
1511
  "additionalProperties": false
@@ -1510,10 +1520,10 @@
1510
1520
  "inputSchema": {
1511
1521
  "type": "object",
1512
1522
  "properties": {
1513
- "productId": {
1523
+ "projectId": {
1514
1524
  "type": "integer",
1515
1525
  "minimum": 1,
1516
- "description": "给哪个 GEO 项目写"
1526
+ "description": "GEO 项目 id,来自 projects.list"
1517
1527
  },
1518
1528
  "topicIds": {
1519
1529
  "type": "array",
@@ -1574,7 +1584,7 @@
1574
1584
  }
1575
1585
  },
1576
1586
  "required": [
1577
- "productId",
1587
+ "projectId",
1578
1588
  "topicIds",
1579
1589
  "generateCount",
1580
1590
  "contentPromptId",
@@ -1600,14 +1610,14 @@
1600
1610
  "mode": "read",
1601
1611
  "guide": "scheduled-monitor",
1602
1612
  "requiresPlan": false,
1603
- "description": "列出定时收录计划(拿一批搜索问题定期去问各家 AI,看有没有提到我们)。问题文本不在列表里,要看得用 get。",
1613
+ "description": "列出定时收录计划(拿一批搜索问题定期去问各家 AI,看有没有提到我们)。限定在当前 GEO 项目内。问题文本不在列表里,要看得用 get。",
1604
1614
  "inputSchema": {
1605
1615
  "type": "object",
1606
1616
  "properties": {
1607
- "companyId": {
1617
+ "projectId": {
1608
1618
  "type": "integer",
1609
1619
  "minimum": 1,
1610
- "description": "只看某家公司的"
1620
+ "description": "GEO 项目 id,来自 projects.list"
1611
1621
  },
1612
1622
  "name": {
1613
1623
  "type": "string",
@@ -1627,6 +1637,9 @@
1627
1637
  "maximum": 100
1628
1638
  }
1629
1639
  },
1640
+ "required": [
1641
+ "projectId"
1642
+ ],
1630
1643
  "additionalProperties": false
1631
1644
  }
1632
1645
  },
@@ -1639,12 +1652,18 @@
1639
1652
  "inputSchema": {
1640
1653
  "type": "object",
1641
1654
  "properties": {
1655
+ "projectId": {
1656
+ "type": "integer",
1657
+ "minimum": 1,
1658
+ "description": "GEO 项目 id,来自 projects.list"
1659
+ },
1642
1660
  "planId": {
1643
1661
  "type": "integer",
1644
1662
  "minimum": 1
1645
1663
  }
1646
1664
  },
1647
1665
  "required": [
1666
+ "projectId",
1648
1667
  "planId"
1649
1668
  ],
1650
1669
  "additionalProperties": false
@@ -1659,6 +1678,11 @@
1659
1678
  "inputSchema": {
1660
1679
  "type": "object",
1661
1680
  "properties": {
1681
+ "projectId": {
1682
+ "type": "integer",
1683
+ "minimum": 1,
1684
+ "description": "GEO 项目 id,来自 projects.list"
1685
+ },
1662
1686
  "planId": {
1663
1687
  "type": "integer",
1664
1688
  "minimum": 1
@@ -1674,6 +1698,7 @@
1674
1698
  }
1675
1699
  },
1676
1700
  "required": [
1701
+ "projectId",
1677
1702
  "planId"
1678
1703
  ],
1679
1704
  "additionalProperties": false
@@ -1684,14 +1709,14 @@
1684
1709
  "mode": "read",
1685
1710
  "guide": "scheduled-monitor",
1686
1711
  "requiresPlan": false,
1687
- "description": "列出定时舆情计划(拿一批问句定期去问各家 AI,看它们怎么评价我们)。问题文本不在列表里,要看得用 get。",
1712
+ "description": "列出定时舆情计划(拿一批问句定期去问各家 AI,看它们怎么评价我们)。限定在当前 GEO 项目内。问题文本不在列表里,要看得用 get。",
1688
1713
  "inputSchema": {
1689
1714
  "type": "object",
1690
1715
  "properties": {
1691
- "companyId": {
1716
+ "projectId": {
1692
1717
  "type": "integer",
1693
1718
  "minimum": 1,
1694
- "description": "只看某家公司的"
1719
+ "description": "GEO 项目 id,来自 projects.list"
1695
1720
  },
1696
1721
  "name": {
1697
1722
  "type": "string",
@@ -1711,6 +1736,9 @@
1711
1736
  "maximum": 100
1712
1737
  }
1713
1738
  },
1739
+ "required": [
1740
+ "projectId"
1741
+ ],
1714
1742
  "additionalProperties": false
1715
1743
  }
1716
1744
  },
@@ -1723,12 +1751,18 @@
1723
1751
  "inputSchema": {
1724
1752
  "type": "object",
1725
1753
  "properties": {
1754
+ "projectId": {
1755
+ "type": "integer",
1756
+ "minimum": 1,
1757
+ "description": "GEO 项目 id,来自 projects.list"
1758
+ },
1726
1759
  "planId": {
1727
1760
  "type": "integer",
1728
1761
  "minimum": 1
1729
1762
  }
1730
1763
  },
1731
1764
  "required": [
1765
+ "projectId",
1732
1766
  "planId"
1733
1767
  ],
1734
1768
  "additionalProperties": false
@@ -1743,6 +1777,11 @@
1743
1777
  "inputSchema": {
1744
1778
  "type": "object",
1745
1779
  "properties": {
1780
+ "projectId": {
1781
+ "type": "integer",
1782
+ "minimum": 1,
1783
+ "description": "GEO 项目 id,来自 projects.list"
1784
+ },
1746
1785
  "planId": {
1747
1786
  "type": "integer",
1748
1787
  "minimum": 1
@@ -1758,6 +1797,7 @@
1758
1797
  }
1759
1798
  },
1760
1799
  "required": [
1800
+ "projectId",
1761
1801
  "planId"
1762
1802
  ],
1763
1803
  "additionalProperties": false
@@ -1772,6 +1812,11 @@
1772
1812
  "inputSchema": {
1773
1813
  "type": "object",
1774
1814
  "properties": {
1815
+ "projectId": {
1816
+ "type": "integer",
1817
+ "minimum": 1,
1818
+ "description": "GEO 项目 id,来自 projects.list"
1819
+ },
1775
1820
  "planId": {
1776
1821
  "type": "integer",
1777
1822
  "minimum": 1
@@ -1800,6 +1845,7 @@
1800
1845
  }
1801
1846
  },
1802
1847
  "required": [
1848
+ "projectId",
1803
1849
  "planId"
1804
1850
  ],
1805
1851
  "additionalProperties": false
@@ -1814,6 +1860,11 @@
1814
1860
  "inputSchema": {
1815
1861
  "type": "object",
1816
1862
  "properties": {
1863
+ "projectId": {
1864
+ "type": "integer",
1865
+ "minimum": 1,
1866
+ "description": "GEO 项目 id,来自 projects.list"
1867
+ },
1817
1868
  "planId": {
1818
1869
  "type": "integer",
1819
1870
  "minimum": 1
@@ -1837,6 +1888,7 @@
1837
1888
  }
1838
1889
  },
1839
1890
  "required": [
1891
+ "projectId",
1840
1892
  "planId"
1841
1893
  ],
1842
1894
  "additionalProperties": false
@@ -1856,15 +1908,10 @@
1856
1908
  "maxLength": 128,
1857
1909
  "description": "计划名,用户之后靠它认出这个计划"
1858
1910
  },
1859
- "companyId": {
1911
+ "projectId": {
1860
1912
  "type": "integer",
1861
1913
  "minimum": 1,
1862
- "description": "归哪家公司"
1863
- },
1864
- "productId": {
1865
- "type": "integer",
1866
- "minimum": 1,
1867
- "description": "归哪个 GEO 项目"
1914
+ "description": "GEO 项目 id,来自 projects.list"
1868
1915
  },
1869
1916
  "topics": {
1870
1917
  "type": "array",
@@ -1977,8 +2024,7 @@
1977
2024
  },
1978
2025
  "required": [
1979
2026
  "name",
1980
- "companyId",
1981
- "productId",
2027
+ "projectId",
1982
2028
  "topics",
1983
2029
  "platforms",
1984
2030
  "scheduleConfig"
@@ -1991,10 +2037,15 @@
1991
2037
  "mode": "write",
1992
2038
  "guide": "scheduled-monitor",
1993
2039
  "requiresPlan": true,
1994
- "description": "改一个定时收录计划,只传要改的字段。公司和项目定了就不能改,要换得新建一个。注意平台和采集方式是一起判的:只改其中一个也可能凑出跑不了的组合。",
2040
+ "description": "改一个定时收录计划,只传要改的字段。GEO 项目定了就不能改,要换得新建一个。注意平台和采集方式是一起判的:只改其中一个也可能凑出跑不了的组合。",
1995
2041
  "inputSchema": {
1996
2042
  "type": "object",
1997
2043
  "properties": {
2044
+ "projectId": {
2045
+ "type": "integer",
2046
+ "minimum": 1,
2047
+ "description": "GEO 项目 id,来自 projects.list"
2048
+ },
1998
2049
  "planId": {
1999
2050
  "type": "integer",
2000
2051
  "minimum": 1,
@@ -2114,6 +2165,7 @@
2114
2165
  }
2115
2166
  },
2116
2167
  "required": [
2168
+ "projectId",
2117
2169
  "planId"
2118
2170
  ],
2119
2171
  "additionalProperties": false
@@ -2128,17 +2180,133 @@
2128
2180
  "inputSchema": {
2129
2181
  "type": "object",
2130
2182
  "properties": {
2183
+ "projectId": {
2184
+ "type": "integer",
2185
+ "minimum": 1,
2186
+ "description": "GEO 项目 id,来自 projects.list"
2187
+ },
2131
2188
  "planId": {
2132
2189
  "type": "integer",
2133
2190
  "minimum": 1
2134
2191
  }
2135
2192
  },
2136
2193
  "required": [
2194
+ "projectId",
2137
2195
  "planId"
2138
2196
  ],
2139
2197
  "additionalProperties": false
2140
2198
  }
2141
2199
  },
2200
+ {
2201
+ "name": "indexingQueries.create",
2202
+ "mode": "write",
2203
+ "guide": "indexing-query",
2204
+ "requiresPlan": true,
2205
+ "description": "AI 查询任务:拿几个问题去问几个 AI 平台(问题 × 平台,多对多),只走云端采集,执行一次。可以指定采集厂商 provider(moli / deepgeo,不传按后台默认;手机端平台固定走 moli)。按「问题数 × 平台数」扣费(开了 withShareUrl 的平台一次提问算两份),plan 摘要里写了扣几次。问题会同时加进这个 GEO 项目的搜索问题库。apply 返回 taskId,用 indexingQueries.get 查结果。",
2206
+ "inputSchema": {
2207
+ "type": "object",
2208
+ "properties": {
2209
+ "projectId": {
2210
+ "type": "integer",
2211
+ "minimum": 1,
2212
+ "description": "GEO 项目 id,来自 projects.list"
2213
+ },
2214
+ "name": {
2215
+ "type": "string",
2216
+ "minLength": 1,
2217
+ "maxLength": 128,
2218
+ "description": "任务名,建议「设备名 + 时间」"
2219
+ },
2220
+ "questions": {
2221
+ "type": "array",
2222
+ "minItems": 1,
2223
+ "maxItems": 100,
2224
+ "items": {
2225
+ "type": "string",
2226
+ "minLength": 1,
2227
+ "maxLength": 255
2228
+ },
2229
+ "description": "要问的问题,1~100 个,自动去重去首尾空白"
2230
+ },
2231
+ "platforms": {
2232
+ "type": "array",
2233
+ "minItems": 1,
2234
+ "items": {
2235
+ "type": "string"
2236
+ },
2237
+ "description": "问哪些 AI 平台,取值来自 indexingPlatforms.list,且要支持云端采集"
2238
+ },
2239
+ "provider": {
2240
+ "type": "string",
2241
+ "enum": [
2242
+ "moli",
2243
+ "deepgeo"
2244
+ ],
2245
+ "description": "指定云端采集厂商。指定后只投这一家,拒单到上限就判失败、不改投别家"
2246
+ },
2247
+ "withShareUrl": {
2248
+ "type": "boolean",
2249
+ "description": "要不要截图/对话分享链接。打开后这些平台按两份计费,默认不要"
2250
+ }
2251
+ },
2252
+ "required": [
2253
+ "projectId",
2254
+ "name",
2255
+ "questions",
2256
+ "platforms"
2257
+ ],
2258
+ "additionalProperties": false
2259
+ }
2260
+ },
2261
+ {
2262
+ "name": "indexingQueries.get",
2263
+ "mode": "read",
2264
+ "guide": "indexing-query",
2265
+ "requiresPlan": false,
2266
+ "description": "查一个 AI 查询任务的结果:整体进度 status(按全部提问算,不受分页影响),以及分页的回答,每条是一个问题 × 一个平台,含正文全文 content、信源 sources、拆解词 searchKeywords、对话分享链接 shareUrl。status 为 pending 或 running 时稍后再查;paused、timed_out、failed、finished 都不会再变,不用再查,把 statusLabel 和 errorMessage 念给用户。回答按 total 翻页;只看某个问题传 topicId(取自出参 questions[].id),只看某个平台传 platform。",
2267
+ "inputSchema": {
2268
+ "type": "object",
2269
+ "properties": {
2270
+ "projectId": {
2271
+ "type": "integer",
2272
+ "minimum": 1,
2273
+ "description": "GEO 项目 id,来自 projects.list"
2274
+ },
2275
+ "taskId": {
2276
+ "type": "integer",
2277
+ "minimum": 1,
2278
+ "description": "indexingQueries.create 返回的 taskId"
2279
+ },
2280
+ "topicId": {
2281
+ "type": "integer",
2282
+ "minimum": 1,
2283
+ "description": "只看某个问题的回答,取自出参 questions[].id"
2284
+ },
2285
+ "platform": {
2286
+ "type": "string",
2287
+ "description": "只看某个 AI 平台的回答"
2288
+ },
2289
+ "page": {
2290
+ "type": "integer",
2291
+ "minimum": 1,
2292
+ "default": 1,
2293
+ "description": "第几页"
2294
+ },
2295
+ "limit": {
2296
+ "type": "integer",
2297
+ "minimum": 1,
2298
+ "maximum": 100,
2299
+ "default": 20,
2300
+ "description": "每页几条回答。回答是全文,一条可能上千字,按需要取"
2301
+ }
2302
+ },
2303
+ "required": [
2304
+ "projectId",
2305
+ "taskId"
2306
+ ],
2307
+ "additionalProperties": false
2308
+ }
2309
+ },
2142
2310
  {
2143
2311
  "name": "scheduledSentiment.create",
2144
2312
  "mode": "write",
@@ -2153,15 +2321,10 @@
2153
2321
  "maxLength": 128,
2154
2322
  "description": "计划名,用户之后靠它认出这个计划"
2155
2323
  },
2156
- "companyId": {
2157
- "type": "integer",
2158
- "minimum": 1,
2159
- "description": "归哪家公司"
2160
- },
2161
- "productId": {
2324
+ "projectId": {
2162
2325
  "type": "integer",
2163
2326
  "minimum": 1,
2164
- "description": "归哪个 GEO 项目"
2327
+ "description": "GEO 项目 id,来自 projects.list"
2165
2328
  },
2166
2329
  "questions": {
2167
2330
  "type": "array",
@@ -2265,8 +2428,7 @@
2265
2428
  },
2266
2429
  "required": [
2267
2430
  "name",
2268
- "companyId",
2269
- "productId",
2431
+ "projectId",
2270
2432
  "questions",
2271
2433
  "platforms",
2272
2434
  "scheduleConfig"
@@ -2279,10 +2441,15 @@
2279
2441
  "mode": "write",
2280
2442
  "guide": "scheduled-monitor",
2281
2443
  "requiresPlan": true,
2282
- "description": "改一个定时舆情计划,只传要改的字段。公司和项目定了就不能改,要换得新建一个。注意平台和采集方式是一起判的:只改其中一个也可能凑出跑不了的组合。",
2444
+ "description": "改一个定时舆情计划,只传要改的字段。GEO 项目定了就不能改,要换得新建一个。注意平台和采集方式是一起判的:只改其中一个也可能凑出跑不了的组合。",
2283
2445
  "inputSchema": {
2284
2446
  "type": "object",
2285
2447
  "properties": {
2448
+ "projectId": {
2449
+ "type": "integer",
2450
+ "minimum": 1,
2451
+ "description": "GEO 项目 id,来自 projects.list"
2452
+ },
2286
2453
  "planId": {
2287
2454
  "type": "integer",
2288
2455
  "minimum": 1,
@@ -2393,6 +2560,7 @@
2393
2560
  }
2394
2561
  },
2395
2562
  "required": [
2563
+ "projectId",
2396
2564
  "planId"
2397
2565
  ],
2398
2566
  "additionalProperties": false
@@ -2407,12 +2575,18 @@
2407
2575
  "inputSchema": {
2408
2576
  "type": "object",
2409
2577
  "properties": {
2578
+ "projectId": {
2579
+ "type": "integer",
2580
+ "minimum": 1,
2581
+ "description": "GEO 项目 id,来自 projects.list"
2582
+ },
2410
2583
  "planId": {
2411
2584
  "type": "integer",
2412
2585
  "minimum": 1
2413
2586
  }
2414
2587
  },
2415
2588
  "required": [
2589
+ "projectId",
2416
2590
  "planId"
2417
2591
  ],
2418
2592
  "additionalProperties": false
@@ -2427,6 +2601,11 @@
2427
2601
  "inputSchema": {
2428
2602
  "type": "object",
2429
2603
  "properties": {
2604
+ "projectId": {
2605
+ "type": "integer",
2606
+ "minimum": 1,
2607
+ "description": "GEO 项目 id,来自 projects.list"
2608
+ },
2430
2609
  "planId": {
2431
2610
  "type": "integer",
2432
2611
  "minimum": 1,
@@ -2471,6 +2650,7 @@
2471
2650
  }
2472
2651
  },
2473
2652
  "required": [
2653
+ "projectId",
2474
2654
  "planId"
2475
2655
  ],
2476
2656
  "additionalProperties": false
@@ -2485,6 +2665,11 @@
2485
2665
  "inputSchema": {
2486
2666
  "type": "object",
2487
2667
  "properties": {
2668
+ "projectId": {
2669
+ "type": "integer",
2670
+ "minimum": 1,
2671
+ "description": "GEO 项目 id,来自 projects.list"
2672
+ },
2488
2673
  "planId": {
2489
2674
  "type": "integer",
2490
2675
  "minimum": 1,
@@ -2514,6 +2699,7 @@
2514
2699
  }
2515
2700
  },
2516
2701
  "required": [
2702
+ "projectId",
2517
2703
  "planId"
2518
2704
  ],
2519
2705
  "additionalProperties": false
@@ -2528,6 +2714,11 @@
2528
2714
  "inputSchema": {
2529
2715
  "type": "object",
2530
2716
  "properties": {
2717
+ "projectId": {
2718
+ "type": "integer",
2719
+ "minimum": 1,
2720
+ "description": "GEO 项目 id,来自 projects.list"
2721
+ },
2531
2722
  "planId": {
2532
2723
  "type": "integer",
2533
2724
  "minimum": 1,
@@ -2563,6 +2754,7 @@
2563
2754
  }
2564
2755
  },
2565
2756
  "required": [
2757
+ "projectId",
2566
2758
  "planId"
2567
2759
  ],
2568
2760
  "additionalProperties": false
@@ -2577,6 +2769,11 @@
2577
2769
  "inputSchema": {
2578
2770
  "type": "object",
2579
2771
  "properties": {
2772
+ "projectId": {
2773
+ "type": "integer",
2774
+ "minimum": 1,
2775
+ "description": "GEO 项目 id,来自 projects.list"
2776
+ },
2580
2777
  "planId": {
2581
2778
  "type": "integer",
2582
2779
  "minimum": 1,
@@ -2608,6 +2805,7 @@
2608
2805
  }
2609
2806
  },
2610
2807
  "required": [
2808
+ "projectId",
2611
2809
  "planId"
2612
2810
  ],
2613
2811
  "additionalProperties": false
@@ -2622,6 +2820,11 @@
2622
2820
  "inputSchema": {
2623
2821
  "type": "object",
2624
2822
  "properties": {
2823
+ "projectId": {
2824
+ "type": "integer",
2825
+ "minimum": 1,
2826
+ "description": "GEO 项目 id,来自 projects.list"
2827
+ },
2625
2828
  "planId": {
2626
2829
  "type": "integer",
2627
2830
  "minimum": 1,
@@ -2665,6 +2868,7 @@
2665
2868
  }
2666
2869
  },
2667
2870
  "required": [
2871
+ "projectId",
2668
2872
  "planId"
2669
2873
  ],
2670
2874
  "additionalProperties": false
@@ -2679,6 +2883,11 @@
2679
2883
  "inputSchema": {
2680
2884
  "type": "object",
2681
2885
  "properties": {
2886
+ "projectId": {
2887
+ "type": "integer",
2888
+ "minimum": 1,
2889
+ "description": "GEO 项目 id,来自 projects.list"
2890
+ },
2682
2891
  "planId": {
2683
2892
  "type": "integer",
2684
2893
  "minimum": 1,
@@ -2708,6 +2917,7 @@
2708
2917
  }
2709
2918
  },
2710
2919
  "required": [
2920
+ "projectId",
2711
2921
  "planId"
2712
2922
  ],
2713
2923
  "additionalProperties": false
@@ -2722,6 +2932,11 @@
2722
2932
  "inputSchema": {
2723
2933
  "type": "object",
2724
2934
  "properties": {
2935
+ "projectId": {
2936
+ "type": "integer",
2937
+ "minimum": 1,
2938
+ "description": "GEO 项目 id,来自 projects.list"
2939
+ },
2725
2940
  "planId": {
2726
2941
  "type": "integer",
2727
2942
  "minimum": 1,
@@ -2757,6 +2972,7 @@
2757
2972
  }
2758
2973
  },
2759
2974
  "required": [
2975
+ "projectId",
2760
2976
  "planId"
2761
2977
  ],
2762
2978
  "additionalProperties": false
@@ -2767,19 +2983,14 @@
2767
2983
  "mode": "read",
2768
2984
  "guide": "scheduled-monitor",
2769
2985
  "requiresPlan": false,
2770
- "description": "让 AI 想一批舆情问句。**不写库也不扣费**,所以是查询不是写操作——拿到候选之后,挑好的填进 scheduledSentiment.create 的 questions。项目必须先配好品牌词。",
2986
+ "description": "让 AI 想一批舆情问句。**不写库也不扣费**,所以是查询不是写操作——拿到候选之后,挑好的填进 scheduledSentiment.create 的 questions。当前 GEO 项目必须先配好品牌词。",
2771
2987
  "inputSchema": {
2772
2988
  "type": "object",
2773
2989
  "properties": {
2774
- "companyId": {
2775
- "type": "integer",
2776
- "minimum": 1,
2777
- "description": "哪家公司"
2778
- },
2779
- "productId": {
2990
+ "projectId": {
2780
2991
  "type": "integer",
2781
2992
  "minimum": 1,
2782
- "description": "哪个 GEO 项目,必须已配置品牌词"
2993
+ "description": "GEO 项目 id,来自 projects.list。必须已配置品牌词"
2783
2994
  },
2784
2995
  "count": {
2785
2996
  "type": "integer",
@@ -2790,8 +3001,7 @@
2790
3001
  }
2791
3002
  },
2792
3003
  "required": [
2793
- "companyId",
2794
- "productId"
3004
+ "projectId"
2795
3005
  ],
2796
3006
  "additionalProperties": false
2797
3007
  }
@@ -2801,18 +3011,18 @@
2801
3011
  "mode": "read",
2802
3012
  "guide": "scheduled-monitor",
2803
3013
  "requiresPlan": false,
2804
- "description": "让 AI 推荐这家公司的竞品品牌名。**不写库也不扣费**。拿到之后挑几个填进 scheduledIndexing.create 的 competitorBrands。",
3014
+ "description": "让 AI 推荐当前 GEO 项目的竞品品牌名。**不写库也不扣费**。拿到之后挑几个填进 scheduledIndexing.create 的 competitorBrands。",
2805
3015
  "inputSchema": {
2806
3016
  "type": "object",
2807
3017
  "properties": {
2808
- "companyId": {
3018
+ "projectId": {
2809
3019
  "type": "integer",
2810
3020
  "minimum": 1,
2811
- "description": "哪家公司"
3021
+ "description": "GEO 项目 id,来自 projects.list"
2812
3022
  }
2813
3023
  },
2814
3024
  "required": [
2815
- "companyId"
3025
+ "projectId"
2816
3026
  ],
2817
3027
  "additionalProperties": false
2818
3028
  }
@@ -2826,6 +3036,11 @@
2826
3036
  "inputSchema": {
2827
3037
  "type": "object",
2828
3038
  "properties": {
3039
+ "projectId": {
3040
+ "type": "integer",
3041
+ "minimum": 1,
3042
+ "description": "GEO 项目 id,来自 projects.list"
3043
+ },
2829
3044
  "articleId": {
2830
3045
  "type": "integer",
2831
3046
  "minimum": 1,
@@ -2833,6 +3048,7 @@
2833
3048
  }
2834
3049
  },
2835
3050
  "required": [
3051
+ "projectId",
2836
3052
  "articleId"
2837
3053
  ],
2838
3054
  "additionalProperties": false
@@ -2843,17 +3059,14 @@
2843
3059
  "mode": "read",
2844
3060
  "guide": "question-task",
2845
3061
  "requiresPlan": false,
2846
- "description": "列出关键词拓展任务,看跑到哪一步了。建完任务用它查状态——L1 要跑一会儿才出词。不含拓出来的词,要看结果用 keywordTasks.get。",
3062
+ "description": "列出关键词拓展任务,看跑到哪一步了。限定在当前 GEO 项目内。建完任务用它查状态——L1 要跑一会儿才出词。不含拓出来的词,要看结果用 keywordTasks.get。",
2847
3063
  "inputSchema": {
2848
3064
  "type": "object",
2849
3065
  "properties": {
2850
- "companyId": {
3066
+ "projectId": {
2851
3067
  "type": "integer",
2852
- "description": "只看某家公司;不传就是全部授权公司"
2853
- },
2854
- "productId": {
2855
- "type": "integer",
2856
- "description": "只看某个 GEO 项目"
3068
+ "minimum": 1,
3069
+ "description": "GEO 项目 id,来自 projects.list"
2857
3070
  },
2858
3071
  "id": {
2859
3072
  "type": "integer",
@@ -2887,6 +3100,9 @@
2887
3100
  "maximum": 100
2888
3101
  }
2889
3102
  },
3103
+ "required": [
3104
+ "projectId"
3105
+ ],
2890
3106
  "additionalProperties": false
2891
3107
  }
2892
3108
  },
@@ -2899,12 +3115,18 @@
2899
3115
  "inputSchema": {
2900
3116
  "type": "object",
2901
3117
  "properties": {
3118
+ "projectId": {
3119
+ "type": "integer",
3120
+ "minimum": 1,
3121
+ "description": "GEO 项目 id,来自 projects.list"
3122
+ },
2902
3123
  "taskId": {
2903
3124
  "type": "integer",
2904
3125
  "minimum": 1
2905
3126
  }
2906
3127
  },
2907
3128
  "required": [
3129
+ "projectId",
2908
3130
  "taskId"
2909
3131
  ],
2910
3132
  "additionalProperties": false
@@ -2924,10 +3146,10 @@
2924
3146
  "maxLength": 100,
2925
3147
  "description": "任务名"
2926
3148
  },
2927
- "productId": {
3149
+ "projectId": {
2928
3150
  "type": "integer",
2929
3151
  "minimum": 1,
2930
- "description": "归哪个 GEO 项目"
3152
+ "description": "GEO 项目 id,来自 projects.list"
2931
3153
  },
2932
3154
  "keyword": {
2933
3155
  "type": "string",
@@ -2947,7 +3169,7 @@
2947
3169
  },
2948
3170
  "required": [
2949
3171
  "name",
2950
- "productId",
3172
+ "projectId",
2951
3173
  "keyword",
2952
3174
  "count"
2953
3175
  ],
@@ -2963,6 +3185,11 @@
2963
3185
  "inputSchema": {
2964
3186
  "type": "object",
2965
3187
  "properties": {
3188
+ "projectId": {
3189
+ "type": "integer",
3190
+ "minimum": 1,
3191
+ "description": "GEO 项目 id,来自 projects.list"
3192
+ },
2966
3193
  "taskId": {
2967
3194
  "type": "integer",
2968
3195
  "minimum": 1,
@@ -2978,6 +3205,7 @@
2978
3205
  }
2979
3206
  },
2980
3207
  "required": [
3208
+ "projectId",
2981
3209
  "taskId",
2982
3210
  "output"
2983
3211
  ],
@@ -2993,6 +3221,11 @@
2993
3221
  "inputSchema": {
2994
3222
  "type": "object",
2995
3223
  "properties": {
3224
+ "projectId": {
3225
+ "type": "integer",
3226
+ "minimum": 1,
3227
+ "description": "GEO 项目 id,来自 projects.list"
3228
+ },
2996
3229
  "taskId": {
2997
3230
  "type": "integer",
2998
3231
  "minimum": 1,
@@ -3019,6 +3252,7 @@
3019
3252
  }
3020
3253
  },
3021
3254
  "required": [
3255
+ "projectId",
3022
3256
  "taskId",
3023
3257
  "selected",
3024
3258
  "count"
@@ -3047,18 +3281,14 @@
3047
3281
  ],
3048
3282
  "description": "查哪个域的标签:article=文章,knowledge=知识库,image=图片,video=视频,prompt=提示词,question=搜索问题"
3049
3283
  },
3050
- "companyId": {
3051
- "type": "integer",
3052
- "minimum": 1,
3053
- "description": "只看某家公司的"
3054
- },
3055
- "productId": {
3284
+ "projectId": {
3056
3285
  "type": "integer",
3057
3286
  "minimum": 1,
3058
- "description": "只看某个 GEO 项目的"
3287
+ "description": "GEO 项目 id,来自 projects.list"
3059
3288
  }
3060
3289
  },
3061
3290
  "required": [
3291
+ "projectId",
3062
3292
  "domain"
3063
3293
  ],
3064
3294
  "additionalProperties": false
@@ -3078,15 +3308,10 @@
3078
3308
  "maxLength": 100,
3079
3309
  "description": "提示词名称"
3080
3310
  },
3081
- "companyId": {
3082
- "type": "integer",
3083
- "minimum": 1,
3084
- "description": "归哪家公司"
3085
- },
3086
- "productId": {
3311
+ "projectId": {
3087
3312
  "type": "integer",
3088
3313
  "minimum": 1,
3089
- "description": "可选:绑定到某个 GEO 项目下"
3314
+ "description": "GEO 项目 id,来自 projects.list"
3090
3315
  },
3091
3316
  "content": {
3092
3317
  "type": "string",
@@ -3115,7 +3340,7 @@
3115
3340
  },
3116
3341
  "required": [
3117
3342
  "name",
3118
- "companyId",
3343
+ "projectId",
3119
3344
  "content",
3120
3345
  "type"
3121
3346
  ],
@@ -3127,10 +3352,15 @@
3127
3352
  "mode": "write",
3128
3353
  "guide": "article",
3129
3354
  "requiresPlan": true,
3130
- "description": "改一条提示词,只传要改的字段。改不了所属公司和项目。**系统内置的公共模板改不了**——要按自己的写法调整,用 prompts.create 复制一份新建。不扣费。",
3355
+ "description": "改一条提示词,只传要改的字段。**系统内置的不能改,先用 prompts.duplicate 复制到当前项目再改**。不扣费。",
3131
3356
  "inputSchema": {
3132
3357
  "type": "object",
3133
3358
  "properties": {
3359
+ "projectId": {
3360
+ "type": "integer",
3361
+ "minimum": 1,
3362
+ "description": "GEO 项目 id,来自 projects.list"
3363
+ },
3134
3364
  "promptId": {
3135
3365
  "type": "integer",
3136
3366
  "minimum": 1,
@@ -3163,6 +3393,7 @@
3163
3393
  }
3164
3394
  },
3165
3395
  "required": [
3396
+ "projectId",
3166
3397
  "promptId"
3167
3398
  ],
3168
3399
  "additionalProperties": false
@@ -3173,28 +3404,24 @@
3173
3404
  "mode": "write",
3174
3405
  "guide": "article",
3175
3406
  "requiresPlan": true,
3176
- "description": "把一条提示词复制到一家或多家公司,每家得到一份独立副本。**系统内置的公共模板要改,就先用这条复制一份**——公共模板本身改不了。副本和原来同名,要区分就复制完再用 prompts.update 改名。不扣费。",
3407
+ "description": "把系统、公共或当前项目的提示词复制一份到当前 GEO 项目,复制出来的可以改。副本和原来同名,要区分就复制完再用 prompts.update 改名。不扣费。",
3177
3408
  "inputSchema": {
3178
3409
  "type": "object",
3179
3410
  "properties": {
3180
- "promptId": {
3411
+ "projectId": {
3181
3412
  "type": "integer",
3182
3413
  "minimum": 1,
3183
- "description": "复制哪一条。公共模板也可以,但只能是文章正文/标题两类"
3414
+ "description": "GEO 项目 id,来自 projects.list"
3184
3415
  },
3185
- "companyIds": {
3186
- "type": "array",
3187
- "items": {
3188
- "type": "integer",
3189
- "minimum": 1
3190
- },
3191
- "minItems": 1,
3192
- "description": "复制到哪几家公司,每家一份。只能是当前密钥授权的公司"
3416
+ "promptId": {
3417
+ "type": "integer",
3418
+ "minimum": 1,
3419
+ "description": "复制哪一条。系统内置、公共或当前项目的都可以,但只能是文章正文/标题两类"
3193
3420
  }
3194
3421
  },
3195
3422
  "required": [
3196
- "promptId",
3197
- "companyIds"
3423
+ "projectId",
3424
+ "promptId"
3198
3425
  ],
3199
3426
  "additionalProperties": false
3200
3427
  }
@@ -3208,6 +3435,11 @@
3208
3435
  "inputSchema": {
3209
3436
  "type": "object",
3210
3437
  "properties": {
3438
+ "projectId": {
3439
+ "type": "integer",
3440
+ "minimum": 1,
3441
+ "description": "GEO 项目 id,来自 projects.list"
3442
+ },
3211
3443
  "articleId": {
3212
3444
  "type": "integer",
3213
3445
  "minimum": 1,
@@ -3215,6 +3447,7 @@
3215
3447
  }
3216
3448
  },
3217
3449
  "required": [
3450
+ "projectId",
3218
3451
  "articleId"
3219
3452
  ],
3220
3453
  "additionalProperties": false
@@ -3229,6 +3462,11 @@
3229
3462
  "inputSchema": {
3230
3463
  "type": "object",
3231
3464
  "properties": {
3465
+ "projectId": {
3466
+ "type": "integer",
3467
+ "minimum": 1,
3468
+ "description": "GEO 项目 id,来自 projects.list"
3469
+ },
3232
3470
  "id": {
3233
3471
  "type": "integer",
3234
3472
  "minimum": 1,
@@ -3236,6 +3474,7 @@
3236
3474
  }
3237
3475
  },
3238
3476
  "required": [
3477
+ "projectId",
3239
3478
  "id"
3240
3479
  ],
3241
3480
  "additionalProperties": false
@@ -3250,6 +3489,11 @@
3250
3489
  "inputSchema": {
3251
3490
  "type": "object",
3252
3491
  "properties": {
3492
+ "projectId": {
3493
+ "type": "integer",
3494
+ "minimum": 1,
3495
+ "description": "GEO 项目 id,来自 projects.list"
3496
+ },
3253
3497
  "id": {
3254
3498
  "type": "integer",
3255
3499
  "minimum": 1,
@@ -3257,6 +3501,7 @@
3257
3501
  }
3258
3502
  },
3259
3503
  "required": [
3504
+ "projectId",
3260
3505
  "id"
3261
3506
  ],
3262
3507
  "additionalProperties": false
@@ -3271,6 +3516,11 @@
3271
3516
  "inputSchema": {
3272
3517
  "type": "object",
3273
3518
  "properties": {
3519
+ "projectId": {
3520
+ "type": "integer",
3521
+ "minimum": 1,
3522
+ "description": "GEO 项目 id,来自 projects.list"
3523
+ },
3274
3524
  "id": {
3275
3525
  "type": "integer",
3276
3526
  "minimum": 1,
@@ -3278,6 +3528,7 @@
3278
3528
  }
3279
3529
  },
3280
3530
  "required": [
3531
+ "projectId",
3281
3532
  "id"
3282
3533
  ],
3283
3534
  "additionalProperties": false
@@ -3292,6 +3543,11 @@
3292
3543
  "inputSchema": {
3293
3544
  "type": "object",
3294
3545
  "properties": {
3546
+ "projectId": {
3547
+ "type": "integer",
3548
+ "minimum": 1,
3549
+ "description": "GEO 项目 id,来自 projects.list"
3550
+ },
3295
3551
  "id": {
3296
3552
  "type": "integer",
3297
3553
  "minimum": 1,
@@ -3299,6 +3555,7 @@
3299
3555
  }
3300
3556
  },
3301
3557
  "required": [
3558
+ "projectId",
3302
3559
  "id"
3303
3560
  ],
3304
3561
  "additionalProperties": false
@@ -3327,15 +3584,16 @@
3327
3584
  "mode": "read",
3328
3585
  "guide": "publication",
3329
3586
  "requiresPlan": false,
3330
- "description": "已经绑定到公司的发布账号。平台名猜得出来,账号 id 猜不出来——要发内容必须先从这里拿到 id。**只挑 usable=true 的号**:登录过期或已停用的号建任务时会被拒(statusLabel 会写明是哪种),在这一步避开比建完被拒再回头省事。",
3587
+ "description": "当前 GEO 项目可用的发布账号(同一批项目共用这些账号)。平台名猜得出来,账号 id 猜不出来——要发内容必须先从这里拿到 id。**只挑 usable=true 的号**:登录过期或已停用的号建任务时会被拒(statusLabel 会写明是哪种),在这一步避开比建完被拒再回头省事。",
3331
3588
  "inputSchema": {
3332
3589
  "type": "object",
3333
3590
  "properties": {
3334
- "companyId": { "type": "integer", "minimum": 1, "description": "只看某家公司的" },
3591
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3335
3592
  "platform": { "type": "string", "description": "只看某个平台的。取值来自 publicationPlatforms.list" },
3336
3593
  "page": { "type": "integer", "minimum": 1 },
3337
3594
  "limit": { "type": "integer", "minimum": 1, "maximum": 100 }
3338
3595
  },
3596
+ "required": ["projectId"],
3339
3597
  "additionalProperties": false
3340
3598
  }
3341
3599
  },
@@ -3344,16 +3602,16 @@
3344
3602
  "mode": "read",
3345
3603
  "guide": "publication",
3346
3604
  "requiresPlan": false,
3347
- "description": "自媒体发布任务列表。一个任务下面挂着若干条「某篇内容发到某个平台某个账号」的记录,这里只给任务级汇总,要看每条的下场用 publicationRecords.list。",
3605
+ "description": "自媒体发布任务列表。限定在当前 GEO 项目内。一个任务下面挂着若干条「某篇内容发到某个平台某个账号」的记录,这里只给任务级汇总,要看每条的下场用 publicationRecords.list。",
3348
3606
  "inputSchema": {
3349
3607
  "type": "object",
3350
3608
  "properties": {
3351
- "companyId": { "type": "integer", "minimum": 1, "description": "只看某家公司的" },
3352
- "productId": { "type": "integer", "minimum": 1, "description": "只看某个 GEO 项目的" },
3609
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3353
3610
  "name": { "type": "string", "description": "按任务名模糊搜" },
3354
3611
  "page": { "type": "integer", "minimum": 1 },
3355
3612
  "limit": { "type": "integer", "minimum": 1, "maximum": 100 }
3356
3613
  },
3614
+ "required": ["projectId"],
3357
3615
  "additionalProperties": false
3358
3616
  }
3359
3617
  },
@@ -3362,19 +3620,19 @@
3362
3620
  "mode": "read",
3363
3621
  "guide": "publication",
3364
3622
  "requiresPlan": false,
3365
- "description": "发布记录:每条内容在每个平台的实际下场。这是「发出去了没有、发到哪个链接、失败为什么」的唯一出处——用户问「小红书那篇发了吗」就查这里。status 同时给数值和 statusLabel,念给用户用后者。",
3623
+ "description": "发布记录:每条内容在每个平台的实际下场。限定在当前 GEO 项目内。这是「发出去了没有、发到哪个链接、失败为什么」的唯一出处——用户问「小红书那篇发了吗」就查这里。status 同时给数值和 statusLabel,念给用户用后者。",
3366
3624
  "inputSchema": {
3367
3625
  "type": "object",
3368
3626
  "properties": {
3627
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3369
3628
  "taskId": { "type": "integer", "minimum": 1, "description": "只看某个发布任务下的" },
3370
3629
  "articleId": { "type": "integer", "minimum": 1, "description": "只看某篇文章的" },
3371
3630
  "platform": { "type": "string", "description": "只看某个平台的" },
3372
3631
  "status": { "type": "integer", "description": "0待发布 1发布中 2已发布 3失败 4已暂停 5已取消 6人工 7被拒" },
3373
- "companyId": { "type": "integer", "minimum": 1 },
3374
- "productId": { "type": "integer", "minimum": 1 },
3375
3632
  "page": { "type": "integer", "minimum": 1 },
3376
3633
  "limit": { "type": "integer", "minimum": 1, "maximum": 100 }
3377
3634
  },
3635
+ "required": ["projectId"],
3378
3636
  "additionalProperties": false
3379
3637
  }
3380
3638
  },
@@ -3414,16 +3672,17 @@
3414
3672
  "mode": "read",
3415
3673
  "guide": "publication",
3416
3674
  "requiresPlan": false,
3417
- "description": "媒体投稿记录:订单状态、失败原因、发布链接、退款状态、实际扣款。投稿是异步的,提交完要过一阵才出结果,用这条查进展。**status 和 refundStatus 是两件事**——status 说稿子发出去没有,refundStatus 说钱退没退;被拒稿的记录要把两个都念给用户。报「这笔花了多少」用 chargedAmount(元,来自账本的真实扣款);currentPrice 是这家媒体**现在**的挂牌价,只能用来估算再投一次的花费,媒体调过价的话它和当时扣的不是一个数。chargedAmount 为 null 表示账本里查不到这笔扣费,就说查不到,别拿 currentPrice 顶替。",
3675
+ "description": "媒体投稿记录:订单状态、失败原因、发布链接、退款状态、实际扣款。限定在当前 GEO 项目内(跟着投稿文章的项目归属走)。投稿是异步的,提交完要过一阵才出结果,用这条查进展。**status 和 refundStatus 是两件事**——status 说稿子发出去没有,refundStatus 说钱退没退;被拒稿的记录要把两个都念给用户。报「这笔花了多少」用 chargedAmount(元,来自账本的真实扣款);currentPrice 是这家媒体**现在**的挂牌价,只能用来估算再投一次的花费,媒体调过价的话它和当时扣的不是一个数。chargedAmount 为 null 表示账本里查不到这笔扣费,就说查不到,别拿 currentPrice 顶替。",
3418
3676
  "inputSchema": {
3419
3677
  "type": "object",
3420
3678
  "properties": {
3679
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3421
3680
  "articleId": { "type": "integer", "minimum": 1, "description": "只看某篇文章投出去的" },
3422
3681
  "mediaId": { "type": "integer", "minimum": 1, "description": "只看投到某个媒体的" },
3423
- "companyId": { "type": "integer", "minimum": 1 },
3424
3682
  "page": { "type": "integer", "minimum": 1 },
3425
3683
  "limit": { "type": "integer", "minimum": 1, "maximum": 100 }
3426
3684
  },
3685
+ "required": ["projectId"],
3427
3686
  "additionalProperties": false
3428
3687
  }
3429
3688
  },
@@ -3432,14 +3691,15 @@
3432
3691
  "mode": "read",
3433
3692
  "guide": "publication",
3434
3693
  "requiresPlan": false,
3435
- "description": "投稿记录的状态汇总。要回答「投出去的都怎么样了」用这条,别去翻列表自己数——投稿动辄上百条,翻列表会把上下文占满。念结果用 items 里的 statusLabel(如「已拒稿 × 15」),counts 是给过滤用的原始数值,别把里面的数字念给用户。",
3694
+ "description": "投稿记录的状态汇总。限定在当前 GEO 项目内。要回答「投出去的都怎么样了」用这条,别去翻列表自己数——投稿动辄上百条,翻列表会把上下文占满。念结果用 items 里的 statusLabel(如「已拒稿 × 15」),counts 是给过滤用的原始数值,别把里面的数字念给用户。",
3436
3695
  "inputSchema": {
3437
3696
  "type": "object",
3438
3697
  "properties": {
3698
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3439
3699
  "articleId": { "type": "integer", "minimum": 1 },
3440
- "mediaId": { "type": "integer", "minimum": 1 },
3441
- "companyId": { "type": "integer", "minimum": 1 }
3700
+ "mediaId": { "type": "integer", "minimum": 1 }
3442
3701
  },
3702
+ "required": ["projectId"],
3443
3703
  "additionalProperties": false
3444
3704
  }
3445
3705
  },
@@ -3452,9 +3712,10 @@
3452
3712
  "inputSchema": {
3453
3713
  "type": "object",
3454
3714
  "properties": {
3715
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3455
3716
  "taskId": { "type": "integer", "minimum": 1, "description": "照着哪个任务。id 来自 articleTasks.list" }
3456
3717
  },
3457
- "required": ["taskId"],
3718
+ "required": ["projectId", "taskId"],
3458
3719
  "additionalProperties": false
3459
3720
  }
3460
3721
  },
@@ -3467,9 +3728,10 @@
3467
3728
  "inputSchema": {
3468
3729
  "type": "object",
3469
3730
  "properties": {
3731
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3470
3732
  "taskId": { "type": "integer", "minimum": 1, "description": "要删哪个任务" }
3471
3733
  },
3472
- "required": ["taskId"],
3734
+ "required": ["projectId", "taskId"],
3473
3735
  "additionalProperties": false
3474
3736
  }
3475
3737
  },
@@ -3482,11 +3744,11 @@
3482
3744
  "inputSchema": {
3483
3745
  "type": "object",
3484
3746
  "properties": {
3485
- "productId": { "type": "integer", "minimum": 1, "description": "建在哪个 GEO 项目下" },
3747
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3486
3748
  "name": { "type": "string", "minLength": 1, "description": "文件夹名" },
3487
3749
  "parentId": { "type": "integer", "minimum": 1, "description": "建成谁的子文件夹。不传就是顶层。id 来自 folders.list" }
3488
3750
  },
3489
- "required": ["productId", "name"],
3751
+ "required": ["projectId", "name"],
3490
3752
  "additionalProperties": false
3491
3753
  }
3492
3754
  },
@@ -3499,11 +3761,12 @@
3499
3761
  "inputSchema": {
3500
3762
  "type": "object",
3501
3763
  "properties": {
3764
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3502
3765
  "folderId": { "type": "integer", "minimum": 1, "description": "改哪个" },
3503
3766
  "name": { "type": "string", "minLength": 1, "description": "新名字" },
3504
3767
  "parentId": { "type": ["integer", "null"], "minimum": 1, "description": "移到谁下面。传 null = 移到顶层" }
3505
3768
  },
3506
- "required": ["folderId"],
3769
+ "required": ["projectId", "folderId"],
3507
3770
  "additionalProperties": false
3508
3771
  }
3509
3772
  },
@@ -3516,9 +3779,10 @@
3516
3779
  "inputSchema": {
3517
3780
  "type": "object",
3518
3781
  "properties": {
3782
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3519
3783
  "folderId": { "type": "integer", "minimum": 1, "description": "要删哪个" }
3520
3784
  },
3521
- "required": ["folderId"],
3785
+ "required": ["projectId", "folderId"],
3522
3786
  "additionalProperties": false
3523
3787
  }
3524
3788
  },
@@ -3527,12 +3791,12 @@
3527
3791
  "mode": "write",
3528
3792
  "guide": "publication",
3529
3793
  "requiresPlan": true,
3530
- "description": "建文章发布任务:把已有文章发到自媒体平台。**执行后稿子会真的发出去,CLI 撤不回来**。费用按发布记录条数算——一篇文章发 3 个账号就是 3 条。建之前先用 publicationPlatforms.list(contentType=article)查平台、publicationAccounts.list 查这个公司绑了哪些账号。**文章必须已审核通过且有封面**,两者缺一发不了——用 articles.list 时带上 status 和 mustHaveCover 就只会看到能发的。**还要满足平台的字数要求**:平台配了 limitConfig 时,标题和正文长度不达标整批都建不了(正文字数按去掉图片地址、空格换行之后算,比原文短)。不确定够不够就先按 limitConfig 挑文章,或者少发那个卡字数的平台。",
3794
+ "description": "建文章发布任务:把已有文章发到自媒体平台。项目由 projectId 指定。**执行后稿子会真的发出去,CLI 撤不回来**。费用按发布记录条数算——一篇文章发 3 个账号就是 3 条。建之前先用 publicationPlatforms.list(contentType=article)查平台、publicationAccounts.list 查当前 GEO 项目绑了哪些账号。**文章必须已审核通过且有封面**,两者缺一发不了——用 articles.list 时带上 status 和 mustHaveCover 就只会看到能发的。**还要满足平台的字数要求**:平台配了 limitConfig 时,标题和正文长度不达标整批都建不了(正文字数按去掉图片地址、空格换行之后算,比原文短)。不确定够不够就先按 limitConfig 挑文章,或者少发那个卡字数的平台。",
3531
3795
  "inputSchema": {
3532
3796
  "type": "object",
3533
3797
  "properties": {
3534
3798
  "name": { "type": "string", "minLength": 1, "maxLength": 100, "description": "任务名,给用户认的" },
3535
- "productId": { "type": "integer", "minimum": 1, "description": "发哪个 GEO 项目的内容" },
3799
+ "projectId": { "type": "integer", "minimum": 1, "description": "发哪个 GEO 项目的内容" },
3536
3800
  "aigc": { "type": "boolean", "description": "要不要打「AI 创作」声明。**得问用户**,别替他决定" },
3537
3801
  "items": {
3538
3802
  "type": "array",
@@ -3570,7 +3834,7 @@
3570
3834
  }
3571
3835
  }
3572
3836
  },
3573
- "required": ["name", "productId", "aigc", "items"],
3837
+ "required": ["name", "projectId", "aigc", "items"],
3574
3838
  "additionalProperties": false
3575
3839
  }
3576
3840
  },
@@ -3584,7 +3848,7 @@
3584
3848
  "type": "object",
3585
3849
  "properties": {
3586
3850
  "name": { "type": "string", "minLength": 1, "maxLength": 100 },
3587
- "productId": { "type": "integer", "minimum": 1 },
3851
+ "projectId": { "type": "integer", "minimum": 1 },
3588
3852
  "aigc": { "type": "boolean", "description": "要不要打「AI 创作」声明。**得问用户**" },
3589
3853
  "items": {
3590
3854
  "type": "array",
@@ -3617,7 +3881,7 @@
3617
3881
  }
3618
3882
  }
3619
3883
  },
3620
- "required": ["name", "productId", "aigc", "items"],
3884
+ "required": ["name", "projectId", "aigc", "items"],
3621
3885
  "additionalProperties": false
3622
3886
  }
3623
3887
  },
@@ -3626,18 +3890,19 @@
3626
3890
  "mode": "write",
3627
3891
  "guide": "publication",
3628
3892
  "requiresPlan": true,
3629
- "description": "删发布任务。只删任务和它名下**还没发出去**的记录——已经发布成功的稿子留在平台上不受影响,要撤那些得去各平台自己删。一次只能删同一家公司的。",
3893
+ "description": "删发布任务。只删任务和它名下**还没发出去**的记录——已经发布成功的稿子留在平台上不受影响,要撤那些得去各平台自己删。一次只能删当前 GEO 项目的。",
3630
3894
  "inputSchema": {
3631
3895
  "type": "object",
3632
3896
  "properties": {
3897
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3633
3898
  "taskIds": {
3634
3899
  "type": "array",
3635
3900
  "minItems": 1,
3636
3901
  "items": { "type": "integer", "minimum": 1 },
3637
- "description": "要删哪些。必须都属于同一家公司"
3902
+ "description": "要删哪些。必须都属于当前 GEO 项目"
3638
3903
  }
3639
3904
  },
3640
- "required": ["taskIds"],
3905
+ "required": ["projectId", "taskIds"],
3641
3906
  "additionalProperties": false
3642
3907
  }
3643
3908
  },
@@ -3649,8 +3914,11 @@
3649
3914
  "description": "暂停发布任务:把它名下**还没发出去**的记录挂起。已经发成功的撤不回来,正在发的那条也拦不住。不扣费。",
3650
3915
  "inputSchema": {
3651
3916
  "type": "object",
3652
- "properties": { "taskId": { "type": "integer", "minimum": 1 } },
3653
- "required": ["taskId"],
3917
+ "properties": {
3918
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3919
+ "taskId": { "type": "integer", "minimum": 1 }
3920
+ },
3921
+ "required": ["projectId", "taskId"],
3654
3922
  "additionalProperties": false
3655
3923
  }
3656
3924
  },
@@ -3662,8 +3930,11 @@
3662
3930
  "description": "恢复被暂停的发布任务,挂起的记录重新排队发出去。定时的按原定时间走,时间已经过了的会尽快发。不扣费。",
3663
3931
  "inputSchema": {
3664
3932
  "type": "object",
3665
- "properties": { "taskId": { "type": "integer", "minimum": 1 } },
3666
- "required": ["taskId"],
3933
+ "properties": {
3934
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3935
+ "taskId": { "type": "integer", "minimum": 1 }
3936
+ },
3937
+ "required": ["projectId", "taskId"],
3667
3938
  "additionalProperties": false
3668
3939
  }
3669
3940
  },
@@ -3676,10 +3947,11 @@
3676
3947
  "inputSchema": {
3677
3948
  "type": "object",
3678
3949
  "properties": {
3950
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3679
3951
  "articleId": { "type": "integer", "minimum": 1, "description": "投哪篇" },
3680
3952
  "mediaId": { "type": "integer", "minimum": 1, "description": "投给哪家。用 mediaPlatforms.list 查在架的媒体和价格" }
3681
3953
  },
3682
- "required": ["articleId", "mediaId"],
3954
+ "required": ["projectId", "articleId", "mediaId"],
3683
3955
  "additionalProperties": false
3684
3956
  }
3685
3957
  },
@@ -3692,6 +3964,7 @@
3692
3964
  "inputSchema": {
3693
3965
  "type": "object",
3694
3966
  "properties": {
3967
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3695
3968
  "articleId": { "type": "integer", "minimum": 1, "description": "投哪篇。一次只能一篇" },
3696
3969
  "mediaIds": {
3697
3970
  "type": "array",
@@ -3701,7 +3974,7 @@
3701
3974
  "description": "投给哪几家"
3702
3975
  }
3703
3976
  },
3704
- "required": ["articleId", "mediaIds"],
3977
+ "required": ["projectId", "articleId", "mediaIds"],
3705
3978
  "additionalProperties": false
3706
3979
  }
3707
3980
  },
@@ -3720,10 +3993,9 @@
3720
3993
  "inputSchema": {
3721
3994
  "type": "object",
3722
3995
  "properties": {
3996
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3723
3997
  "page": { "type": "integer", "minimum": 1 },
3724
3998
  "limit": { "type": "integer", "minimum": 1, "maximum": 500 },
3725
- "companyId": { "type": "integer", "minimum": 1 },
3726
- "productId": { "type": "integer", "minimum": 1 },
3727
3999
  "status": { "type": "integer", "enum": [1, 2, 3, 4], "description": "1-处理中 2-已提交 3-成功 4-失败" },
3728
4000
  "taskType": {
3729
4001
  "type": "integer",
@@ -3732,6 +4004,7 @@
3732
4004
  },
3733
4005
  "platform": { "type": "string", "minLength": 1, "description": "出图平台。合法取值先用 textToImages.models 查,别猜" }
3734
4006
  },
4007
+ "required": ["projectId"],
3735
4008
  "additionalProperties": false
3736
4009
  }
3737
4010
  },
@@ -3742,8 +4015,11 @@
3742
4015
  "description": "查一条文生图任务。status=3(成功)时 resourceUrls 里才有图;建完任务要靠它轮询。⚠️ 只能查到最近 30 天创建的任务。",
3743
4016
  "inputSchema": {
3744
4017
  "type": "object",
3745
- "properties": { "id": { "type": "integer", "minimum": 1 } },
3746
- "required": ["id"],
4018
+ "properties": {
4019
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
4020
+ "id": { "type": "integer", "minimum": 1 }
4021
+ },
4022
+ "required": ["projectId", "id"],
3747
4023
  "additionalProperties": false
3748
4024
  }
3749
4025
  },
@@ -3751,8 +4027,15 @@
3751
4027
  "name": "textToImages.countUncompleted",
3752
4028
  "mode": "read",
3753
4029
  "guide": "material",
3754
- "description": "还没跑完的文生图任务数量。",
3755
- "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false }
4030
+ "description": "当前 GEO 项目里还没跑完的文生图任务数量。",
4031
+ "inputSchema": {
4032
+ "type": "object",
4033
+ "properties": {
4034
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" }
4035
+ },
4036
+ "required": ["projectId"],
4037
+ "additionalProperties": false
4038
+ }
3756
4039
  },
3757
4040
  {
3758
4041
  "name": "textToImages.create",
@@ -3763,8 +4046,8 @@
3763
4046
  "inputSchema": {
3764
4047
  "type": "object",
3765
4048
  "properties": {
4049
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3766
4050
  "prompt": { "type": "string", "minLength": 1, "maxLength": 2500, "description": "想画什么,写清楚" },
3767
- "productId": { "type": "integer", "minimum": 1, "description": "归到哪个 GEO 项目;公司从项目上取" },
3768
4051
  "negativePrompt": { "type": "string", "description": "不想出现什么" },
3769
4052
  "aspectRatio": {
3770
4053
  "type": "string",
@@ -3773,7 +4056,7 @@
3773
4056
  },
3774
4057
  "model": { "type": "string", "minLength": 1, "maxLength": 32, "description": "档位 code,先用 textToImages.models 查;不传用第一个启用档" }
3775
4058
  },
3776
- "required": ["prompt", "productId"],
4059
+ "required": ["projectId", "prompt"],
3777
4060
  "additionalProperties": false
3778
4061
  }
3779
4062
  },
@@ -3785,8 +4068,11 @@
3785
4068
  "description": "删一条文生图任务。删了就没了,不可恢复。任务还在跑(处理中/已提交)时删不掉,要等它到成功或失败的终态。已归档进素材库的图不受影响。",
3786
4069
  "inputSchema": {
3787
4070
  "type": "object",
3788
- "properties": { "id": { "type": "integer", "minimum": 1 } },
3789
- "required": ["id"],
4071
+ "properties": {
4072
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
4073
+ "id": { "type": "integer", "minimum": 1 }
4074
+ },
4075
+ "required": ["projectId", "id"],
3790
4076
  "additionalProperties": false
3791
4077
  }
3792
4078
  },
@@ -3799,10 +4085,11 @@
3799
4085
  "inputSchema": {
3800
4086
  "type": "object",
3801
4087
  "properties": {
4088
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3802
4089
  "articleId": { "type": "integer", "minimum": 1 },
3803
4090
  "model": { "type": "string", "minLength": 1, "maxLength": 32, "description": "档位 code,先用 textToImages.models 查;不传用第一个启用档" }
3804
4091
  },
3805
- "required": ["articleId"],
4092
+ "required": ["projectId", "articleId"],
3806
4093
  "additionalProperties": false
3807
4094
  }
3808
4095
  },
@@ -3852,11 +4139,12 @@
3852
4139
  "inputSchema": {
3853
4140
  "type": "object",
3854
4141
  "properties": {
3855
- "companyId": { "type": "integer", "minimum": 1 },
4142
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3856
4143
  "status": { "type": "integer", "enum": [-3, -2, 0, 1, 2] },
3857
4144
  "page": { "type": "integer", "default": 1 },
3858
4145
  "limit": { "type": "integer", "default": 20, "maximum": 100 }
3859
4146
  },
4147
+ "required": ["projectId"],
3860
4148
  "additionalProperties": false
3861
4149
  }
3862
4150
  },
@@ -3868,8 +4156,11 @@
3868
4156
  "description": "查一条数字人合成任务。提交之后轮询它看进度,status=1 时 videoUrl 才有值。",
3869
4157
  "inputSchema": {
3870
4158
  "type": "object",
3871
- "properties": { "id": { "type": "integer", "minimum": 1 } },
3872
- "required": ["id"],
4159
+ "properties": {
4160
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
4161
+ "id": { "type": "integer", "minimum": 1 }
4162
+ },
4163
+ "required": ["projectId", "id"],
3873
4164
  "additionalProperties": false
3874
4165
  }
3875
4166
  },
@@ -3915,12 +4206,13 @@
3915
4206
  "inputSchema": {
3916
4207
  "type": "object",
3917
4208
  "properties": {
3918
- "companyId": { "type": "integer", "minimum": 1 },
4209
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3919
4210
  "status": { "type": "integer", "enum": [-2, -1, 1, 2, 4] },
3920
4211
  "dhVideoTaskId": { "type": "array", "items": { "type": "integer", "minimum": 1 }, "description": "按来源数字人任务过滤" },
3921
4212
  "page": { "type": "integer", "default": 1 },
3922
4213
  "limit": { "type": "integer", "default": 20, "maximum": 100 }
3923
4214
  },
4215
+ "required": ["projectId"],
3924
4216
  "additionalProperties": false
3925
4217
  }
3926
4218
  },
@@ -3932,8 +4224,11 @@
3932
4224
  "description": "查一条剪辑任务。status=1 时 outputMp4Url 才有值。",
3933
4225
  "inputSchema": {
3934
4226
  "type": "object",
3935
- "properties": { "id": { "type": "integer", "minimum": 1 } },
3936
- "required": ["id"],
4227
+ "properties": {
4228
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
4229
+ "id": { "type": "integer", "minimum": 1 }
4230
+ },
4231
+ "required": ["projectId", "id"],
3937
4232
  "additionalProperties": false
3938
4233
  }
3939
4234
  },
@@ -3946,8 +4241,7 @@
3946
4241
  "inputSchema": {
3947
4242
  "type": "object",
3948
4243
  "properties": {
3949
- "companyId": { "type": "integer", "minimum": 1 },
3950
- "productId": { "type": "integer", "minimum": 1, "description": "归到哪个 GEO 项目,可不填" },
4244
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3951
4245
  "trainingId": { "type": "integer", "minimum": 1, "description": "数字人形象ID,用 dhVideos.avatars 查" },
3952
4246
  "avatarName": { "type": "string", "maxLength": 100, "description": "形象名称快照,可不填" },
3953
4247
  "version": { "type": "integer", "enum": [1, 2], "description": "1 LITE 标准 / 2 PRO 高清(PRO 更贵)" },
@@ -4010,7 +4304,7 @@
4010
4304
  "additionalProperties": false
4011
4305
  }
4012
4306
  },
4013
- "required": ["companyId", "trainingId", "version"],
4307
+ "required": ["projectId", "trainingId", "version"],
4014
4308
  "additionalProperties": false
4015
4309
  }
4016
4310
  },
@@ -4023,6 +4317,7 @@
4023
4317
  "inputSchema": {
4024
4318
  "type": "object",
4025
4319
  "properties": {
4320
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
4026
4321
  "dhVideoTaskId": { "type": "integer", "minimum": 1, "description": "来源数字人任务ID,用 dhVideos.list 查" },
4027
4322
  "template": { "type": "string", "minLength": 1, "maxLength": 64, "description": "剪辑模板 code,用 clipTasks.templates 查" },
4028
4323
  "workName": { "type": "string", "maxLength": 100, "description": "作品命名;不传则沿用数字人的视频名称" },
@@ -4065,7 +4360,7 @@
4065
4360
  "additionalProperties": false
4066
4361
  }
4067
4362
  },
4068
- "required": ["dhVideoTaskId", "template"],
4363
+ "required": ["projectId", "dhVideoTaskId", "template"],
4069
4364
  "additionalProperties": false
4070
4365
  }
4071
4366
  },
@@ -4078,10 +4373,10 @@
4078
4373
  "inputSchema": {
4079
4374
  "type": "object",
4080
4375
  "properties": {
4081
- "companyId": {
4376
+ "projectId": {
4082
4377
  "type": "integer",
4083
4378
  "minimum": 1,
4084
- "description": "只看某家公司;不传就是全部授权公司"
4379
+ "description": "GEO 项目 id,来自 projects.list"
4085
4380
  },
4086
4381
  "page": {
4087
4382
  "type": "integer",
@@ -4093,6 +4388,7 @@
4093
4388
  "maximum": 201
4094
4389
  }
4095
4390
  },
4391
+ "required": ["projectId"],
4096
4392
  "additionalProperties": false
4097
4393
  }
4098
4394
  },
@@ -4117,12 +4413,17 @@
4117
4413
  "inputSchema": {
4118
4414
  "type": "object",
4119
4415
  "properties": {
4416
+ "projectId": {
4417
+ "type": "integer",
4418
+ "minimum": 1,
4419
+ "description": "GEO 项目 id,来自 projects.list"
4420
+ },
4120
4421
  "id": {
4121
4422
  "type": "integer",
4122
4423
  "minimum": 1
4123
4424
  }
4124
4425
  },
4125
- "required": ["id"],
4426
+ "required": ["projectId", "id"],
4126
4427
  "additionalProperties": false
4127
4428
  }
4128
4429
  },
@@ -4135,6 +4436,11 @@
4135
4436
  "inputSchema": {
4136
4437
  "type": "object",
4137
4438
  "properties": {
4439
+ "projectId": {
4440
+ "type": "integer",
4441
+ "minimum": 1,
4442
+ "description": "GEO 项目 id,来自 projects.list"
4443
+ },
4138
4444
  "taskId": {
4139
4445
  "type": "integer",
4140
4446
  "minimum": 1
@@ -4144,7 +4450,7 @@
4144
4450
  "minimum": 1
4145
4451
  }
4146
4452
  },
4147
- "required": ["taskId", "batchId"],
4453
+ "required": ["projectId", "taskId", "batchId"],
4148
4454
  "additionalProperties": false
4149
4455
  }
4150
4456
  },
@@ -4157,14 +4463,10 @@
4157
4463
  "inputSchema": {
4158
4464
  "type": "object",
4159
4465
  "properties": {
4160
- "companyId": {
4161
- "type": "integer",
4162
- "minimum": 1
4163
- },
4164
- "productId": {
4466
+ "projectId": {
4165
4467
  "type": "integer",
4166
4468
  "minimum": 1,
4167
- "description": "归到哪个 GEO 项目,用 products.list 查"
4469
+ "description": "GEO 项目 id,来自 projects.list"
4168
4470
  },
4169
4471
  "sourceType": {
4170
4472
  "type": "integer",
@@ -4216,7 +4518,7 @@
4216
4518
  "description": "参考素材图 id 列表,有序,用 images.list 查,最多 10 张"
4217
4519
  }
4218
4520
  },
4219
- "required": ["companyId", "productId", "sourceType", "visualMode", "richness", "modelCode"],
4521
+ "required": ["projectId", "sourceType", "visualMode", "richness", "modelCode"],
4220
4522
  "additionalProperties": false
4221
4523
  }
4222
4524
  },
@@ -4225,10 +4527,15 @@
4225
4527
  "mode": "write",
4226
4528
  "guide": "answer-card",
4227
4529
  "requiresPlan": true,
4228
- "description": "补丁式改答案卡脚本。只说清「改了什么」——pages 按 id 改字段、insert 插入新页、order 重排、deleteIds 删页,四项至少给一项非空数组,不用把没改过的页也搬一遍原样传回来。服务端按「删 → 改 → 排 → 插」的固定顺序合并:order 只用列已有页的 id(新插入的页此刻还没有 id);insert 的 afterIndex 是「排完序之后」的下标,-1 表示插到最前,其余表示插到该下标对应页之后。这一步不扣费,改到满意再用 answerCards.generate 出图。",
4530
+ "description": "补丁式改答案卡脚本。只说清「改了什么」——pages 按 id 改字段、order 重排、deleteIds 删页,至少给一项非空数组,不用把没改过的页也搬一遍原样传回来。⚠️ 暂不支持新增页:insert 传了会被拒(新加的页拿不到分析阶段的优化提示词,出图会和整套对不上),要加内容请改现有页或重新分析。每页的 type(页面角色)和 visualType(素材类型)也不能改,改了会被拒。服务端按「删 → 改 → 排」的固定顺序合并,order 要列全所有已有页的 id。这一步不扣费,改到满意再用 answerCards.generate 出图。",
4229
4531
  "inputSchema": {
4230
4532
  "type": "object",
4231
4533
  "properties": {
4534
+ "projectId": {
4535
+ "type": "integer",
4536
+ "minimum": 1,
4537
+ "description": "GEO 项目 id,来自 projects.list"
4538
+ },
4232
4539
  "taskId": {
4233
4540
  "type": "integer",
4234
4541
  "minimum": 1
@@ -4247,7 +4554,7 @@
4247
4554
  "type": {
4248
4555
  "type": "string",
4249
4556
  "maxLength": 32,
4250
- "description": "页面角色,如 cover/conclusion/summary 等"
4557
+ "description": "页面角色,如 cover/conclusion/summary 等。【不可改】分析时已定好,传了和现值不同的会被拒"
4251
4558
  },
4252
4559
  "layoutType": {
4253
4560
  "type": "string",
@@ -4294,7 +4601,7 @@
4294
4601
  "visualType": {
4295
4602
  "type": "integer",
4296
4603
  "enum": [1, 2, 3, 4, 5, 6],
4297
- "description": "画面素材类型:1 实景 2 人像 3 产品展示 4 数据图表 5 流程/信息图 6 纯文字卡"
4604
+ "description": "画面素材类型:1 实景 2 人像 3 产品展示 4 数据图表 5 流程/信息图 6 纯文字卡。【不可改】分析时已定好,传了和现值不同的会被拒"
4298
4605
  },
4299
4606
  "visualSubject": {
4300
4607
  "type": "string",
@@ -4313,7 +4620,7 @@
4313
4620
  },
4314
4621
  "insert": {
4315
4622
  "type": "array",
4316
- "description": "插入新页,没有 id",
4623
+ "description": "【暂不支持,传了会被拒】插入新页。新加的页拿不到分析阶段的优化提示词,出图会和整套对不上;要加内容请改现有页,或重新分析",
4317
4624
  "items": {
4318
4625
  "type": "object",
4319
4626
  "properties": {
@@ -4406,7 +4713,7 @@
4406
4713
  "description": "要删除的页面 id"
4407
4714
  }
4408
4715
  },
4409
- "required": ["taskId"],
4716
+ "required": ["projectId", "taskId"],
4410
4717
  "additionalProperties": false
4411
4718
  }
4412
4719
  },
@@ -4419,12 +4726,17 @@
4419
4726
  "inputSchema": {
4420
4727
  "type": "object",
4421
4728
  "properties": {
4729
+ "projectId": {
4730
+ "type": "integer",
4731
+ "minimum": 1,
4732
+ "description": "GEO 项目 id,来自 projects.list"
4733
+ },
4422
4734
  "taskId": {
4423
4735
  "type": "integer",
4424
4736
  "minimum": 1
4425
4737
  }
4426
4738
  },
4427
- "required": ["taskId"],
4739
+ "required": ["projectId", "taskId"],
4428
4740
  "additionalProperties": false
4429
4741
  }
4430
4742
  },
@@ -4437,6 +4749,11 @@
4437
4749
  "inputSchema": {
4438
4750
  "type": "object",
4439
4751
  "properties": {
4752
+ "projectId": {
4753
+ "type": "integer",
4754
+ "minimum": 1,
4755
+ "description": "GEO 项目 id,来自 projects.list"
4756
+ },
4440
4757
  "taskId": {
4441
4758
  "type": "integer",
4442
4759
  "minimum": 1
@@ -4464,7 +4781,7 @@
4464
4781
  "description": "封面页 id,须是该任务下已有的一个页面 id"
4465
4782
  }
4466
4783
  },
4467
- "required": ["taskId", "publishTitle"],
4784
+ "required": ["projectId", "taskId", "publishTitle"],
4468
4785
  "additionalProperties": false
4469
4786
  }
4470
4787
  }