best-geo-test 1.0.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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
63
+ "minLength": 2,
64
+ "maxLength": 50
107
65
  },
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
147
- },
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": {
710
- "type": "integer",
711
- "description": "只看某家公司;不传就是全部授权公司"
712
- },
713
- "productId": {
662
+ "projectId": {
714
663
  "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": {
1042
- "type": "integer",
1043
- "minimum": 1,
1044
- "description": "归到某个 GEO 项目;不给就要给 companyId,存成公司级素材"
1045
- },
1046
- "companyId": {
1022
+ "projectId": {
1047
1023
  "type": "integer",
1048
1024
  "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": {
1199
- "type": "integer",
1200
- "description": "只看某个 GEO 项目能用的(含不限项目的公共提示词)"
1201
- },
1202
- "companyId": {
1184
+ "projectId": {
1203
1185
  "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": {
1256
+ "projectId": {
1271
1257
  "type": "integer",
1272
- "description": "只看某家公司;不传就是全部授权公司"
1273
- },
1274
- "productId": {
1275
- "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": {
1327
+ "projectId": {
1336
1328
  "type": "integer",
1337
- "description": "只看某家公司;不传就是全部授权公司"
1338
- },
1339
- "productId": {
1340
- "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,106 @@
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
+ "hidden": true,
2204
+ "requiresPlan": true,
2205
+ "description": "AI 查询任务:拿一个问题去问几个 AI 平台,只走云端采集,执行一次。可以指定采集厂商 provider(moli / deepgeo,不传按后台默认;手机端平台固定走 moli)。会扣费,plan 摘要里写了扣几次。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
+ "question": {
2221
+ "type": "string",
2222
+ "minLength": 1,
2223
+ "maxLength": 255,
2224
+ "description": "要问的问题"
2225
+ },
2226
+ "platforms": {
2227
+ "type": "array",
2228
+ "minItems": 1,
2229
+ "items": {
2230
+ "type": "string"
2231
+ },
2232
+ "description": "问哪些 AI 平台,取值来自 indexingPlatforms.list,且要支持云端采集"
2233
+ },
2234
+ "provider": {
2235
+ "type": "string",
2236
+ "enum": [
2237
+ "moli",
2238
+ "deepgeo"
2239
+ ],
2240
+ "description": "指定云端采集厂商。指定后只投这一家,拒单到上限就判失败、不改投别家"
2241
+ },
2242
+ "withShareUrl": {
2243
+ "type": "boolean",
2244
+ "description": "要不要截图/对话分享链接。打开后这些平台按两份计费,默认不要"
2245
+ }
2246
+ },
2247
+ "required": [
2248
+ "projectId",
2249
+ "name",
2250
+ "question",
2251
+ "platforms"
2252
+ ],
2253
+ "additionalProperties": false
2254
+ }
2255
+ },
2256
+ {
2257
+ "name": "indexingQueries.get",
2258
+ "mode": "read",
2259
+ "hidden": true,
2260
+ "requiresPlan": false,
2261
+ "description": "查一个 AI 查询任务的结果:整体进度 status,以及每个平台的回答正文(全文)、信源 sources、拆解词 searchKeywords、对话分享链接 shareUrl。status 为 pending 或 running 时稍后再查;paused、timed_out、failed、finished 都不会再变,不用再查,把 statusLabel 和 errorMessage 念给用户。",
2262
+ "inputSchema": {
2263
+ "type": "object",
2264
+ "properties": {
2265
+ "projectId": {
2266
+ "type": "integer",
2267
+ "minimum": 1,
2268
+ "description": "GEO 项目 id,来自 projects.list"
2269
+ },
2270
+ "taskId": {
2271
+ "type": "integer",
2272
+ "minimum": 1,
2273
+ "description": "indexingQueries.create 返回的 taskId"
2274
+ }
2275
+ },
2276
+ "required": [
2277
+ "projectId",
2278
+ "taskId"
2279
+ ],
2280
+ "additionalProperties": false
2281
+ }
2282
+ },
2142
2283
  {
2143
2284
  "name": "scheduledSentiment.create",
2144
2285
  "mode": "write",
@@ -2153,15 +2294,10 @@
2153
2294
  "maxLength": 128,
2154
2295
  "description": "计划名,用户之后靠它认出这个计划"
2155
2296
  },
2156
- "companyId": {
2157
- "type": "integer",
2158
- "minimum": 1,
2159
- "description": "归哪家公司"
2160
- },
2161
- "productId": {
2297
+ "projectId": {
2162
2298
  "type": "integer",
2163
2299
  "minimum": 1,
2164
- "description": "归哪个 GEO 项目"
2300
+ "description": "GEO 项目 id,来自 projects.list"
2165
2301
  },
2166
2302
  "questions": {
2167
2303
  "type": "array",
@@ -2265,8 +2401,7 @@
2265
2401
  },
2266
2402
  "required": [
2267
2403
  "name",
2268
- "companyId",
2269
- "productId",
2404
+ "projectId",
2270
2405
  "questions",
2271
2406
  "platforms",
2272
2407
  "scheduleConfig"
@@ -2279,10 +2414,15 @@
2279
2414
  "mode": "write",
2280
2415
  "guide": "scheduled-monitor",
2281
2416
  "requiresPlan": true,
2282
- "description": "改一个定时舆情计划,只传要改的字段。公司和项目定了就不能改,要换得新建一个。注意平台和采集方式是一起判的:只改其中一个也可能凑出跑不了的组合。",
2417
+ "description": "改一个定时舆情计划,只传要改的字段。GEO 项目定了就不能改,要换得新建一个。注意平台和采集方式是一起判的:只改其中一个也可能凑出跑不了的组合。",
2283
2418
  "inputSchema": {
2284
2419
  "type": "object",
2285
2420
  "properties": {
2421
+ "projectId": {
2422
+ "type": "integer",
2423
+ "minimum": 1,
2424
+ "description": "GEO 项目 id,来自 projects.list"
2425
+ },
2286
2426
  "planId": {
2287
2427
  "type": "integer",
2288
2428
  "minimum": 1,
@@ -2393,6 +2533,7 @@
2393
2533
  }
2394
2534
  },
2395
2535
  "required": [
2536
+ "projectId",
2396
2537
  "planId"
2397
2538
  ],
2398
2539
  "additionalProperties": false
@@ -2407,12 +2548,18 @@
2407
2548
  "inputSchema": {
2408
2549
  "type": "object",
2409
2550
  "properties": {
2551
+ "projectId": {
2552
+ "type": "integer",
2553
+ "minimum": 1,
2554
+ "description": "GEO 项目 id,来自 projects.list"
2555
+ },
2410
2556
  "planId": {
2411
2557
  "type": "integer",
2412
2558
  "minimum": 1
2413
2559
  }
2414
2560
  },
2415
2561
  "required": [
2562
+ "projectId",
2416
2563
  "planId"
2417
2564
  ],
2418
2565
  "additionalProperties": false
@@ -2427,6 +2574,11 @@
2427
2574
  "inputSchema": {
2428
2575
  "type": "object",
2429
2576
  "properties": {
2577
+ "projectId": {
2578
+ "type": "integer",
2579
+ "minimum": 1,
2580
+ "description": "GEO 项目 id,来自 projects.list"
2581
+ },
2430
2582
  "planId": {
2431
2583
  "type": "integer",
2432
2584
  "minimum": 1,
@@ -2471,6 +2623,7 @@
2471
2623
  }
2472
2624
  },
2473
2625
  "required": [
2626
+ "projectId",
2474
2627
  "planId"
2475
2628
  ],
2476
2629
  "additionalProperties": false
@@ -2485,6 +2638,11 @@
2485
2638
  "inputSchema": {
2486
2639
  "type": "object",
2487
2640
  "properties": {
2641
+ "projectId": {
2642
+ "type": "integer",
2643
+ "minimum": 1,
2644
+ "description": "GEO 项目 id,来自 projects.list"
2645
+ },
2488
2646
  "planId": {
2489
2647
  "type": "integer",
2490
2648
  "minimum": 1,
@@ -2514,6 +2672,7 @@
2514
2672
  }
2515
2673
  },
2516
2674
  "required": [
2675
+ "projectId",
2517
2676
  "planId"
2518
2677
  ],
2519
2678
  "additionalProperties": false
@@ -2528,6 +2687,11 @@
2528
2687
  "inputSchema": {
2529
2688
  "type": "object",
2530
2689
  "properties": {
2690
+ "projectId": {
2691
+ "type": "integer",
2692
+ "minimum": 1,
2693
+ "description": "GEO 项目 id,来自 projects.list"
2694
+ },
2531
2695
  "planId": {
2532
2696
  "type": "integer",
2533
2697
  "minimum": 1,
@@ -2563,6 +2727,7 @@
2563
2727
  }
2564
2728
  },
2565
2729
  "required": [
2730
+ "projectId",
2566
2731
  "planId"
2567
2732
  ],
2568
2733
  "additionalProperties": false
@@ -2577,6 +2742,11 @@
2577
2742
  "inputSchema": {
2578
2743
  "type": "object",
2579
2744
  "properties": {
2745
+ "projectId": {
2746
+ "type": "integer",
2747
+ "minimum": 1,
2748
+ "description": "GEO 项目 id,来自 projects.list"
2749
+ },
2580
2750
  "planId": {
2581
2751
  "type": "integer",
2582
2752
  "minimum": 1,
@@ -2608,6 +2778,7 @@
2608
2778
  }
2609
2779
  },
2610
2780
  "required": [
2781
+ "projectId",
2611
2782
  "planId"
2612
2783
  ],
2613
2784
  "additionalProperties": false
@@ -2622,6 +2793,11 @@
2622
2793
  "inputSchema": {
2623
2794
  "type": "object",
2624
2795
  "properties": {
2796
+ "projectId": {
2797
+ "type": "integer",
2798
+ "minimum": 1,
2799
+ "description": "GEO 项目 id,来自 projects.list"
2800
+ },
2625
2801
  "planId": {
2626
2802
  "type": "integer",
2627
2803
  "minimum": 1,
@@ -2665,6 +2841,7 @@
2665
2841
  }
2666
2842
  },
2667
2843
  "required": [
2844
+ "projectId",
2668
2845
  "planId"
2669
2846
  ],
2670
2847
  "additionalProperties": false
@@ -2679,6 +2856,11 @@
2679
2856
  "inputSchema": {
2680
2857
  "type": "object",
2681
2858
  "properties": {
2859
+ "projectId": {
2860
+ "type": "integer",
2861
+ "minimum": 1,
2862
+ "description": "GEO 项目 id,来自 projects.list"
2863
+ },
2682
2864
  "planId": {
2683
2865
  "type": "integer",
2684
2866
  "minimum": 1,
@@ -2708,6 +2890,7 @@
2708
2890
  }
2709
2891
  },
2710
2892
  "required": [
2893
+ "projectId",
2711
2894
  "planId"
2712
2895
  ],
2713
2896
  "additionalProperties": false
@@ -2722,6 +2905,11 @@
2722
2905
  "inputSchema": {
2723
2906
  "type": "object",
2724
2907
  "properties": {
2908
+ "projectId": {
2909
+ "type": "integer",
2910
+ "minimum": 1,
2911
+ "description": "GEO 项目 id,来自 projects.list"
2912
+ },
2725
2913
  "planId": {
2726
2914
  "type": "integer",
2727
2915
  "minimum": 1,
@@ -2757,6 +2945,7 @@
2757
2945
  }
2758
2946
  },
2759
2947
  "required": [
2948
+ "projectId",
2760
2949
  "planId"
2761
2950
  ],
2762
2951
  "additionalProperties": false
@@ -2767,19 +2956,14 @@
2767
2956
  "mode": "read",
2768
2957
  "guide": "scheduled-monitor",
2769
2958
  "requiresPlan": false,
2770
- "description": "让 AI 想一批舆情问句。**不写库也不扣费**,所以是查询不是写操作——拿到候选之后,挑好的填进 scheduledSentiment.create 的 questions。项目必须先配好品牌词。",
2959
+ "description": "让 AI 想一批舆情问句。**不写库也不扣费**,所以是查询不是写操作——拿到候选之后,挑好的填进 scheduledSentiment.create 的 questions。当前 GEO 项目必须先配好品牌词。",
2771
2960
  "inputSchema": {
2772
2961
  "type": "object",
2773
2962
  "properties": {
2774
- "companyId": {
2963
+ "projectId": {
2775
2964
  "type": "integer",
2776
2965
  "minimum": 1,
2777
- "description": "哪家公司"
2778
- },
2779
- "productId": {
2780
- "type": "integer",
2781
- "minimum": 1,
2782
- "description": "哪个 GEO 项目,必须已配置品牌词"
2966
+ "description": "GEO 项目 id,来自 projects.list。必须已配置品牌词"
2783
2967
  },
2784
2968
  "count": {
2785
2969
  "type": "integer",
@@ -2790,8 +2974,7 @@
2790
2974
  }
2791
2975
  },
2792
2976
  "required": [
2793
- "companyId",
2794
- "productId"
2977
+ "projectId"
2795
2978
  ],
2796
2979
  "additionalProperties": false
2797
2980
  }
@@ -2801,18 +2984,18 @@
2801
2984
  "mode": "read",
2802
2985
  "guide": "scheduled-monitor",
2803
2986
  "requiresPlan": false,
2804
- "description": "让 AI 推荐这家公司的竞品品牌名。**不写库也不扣费**。拿到之后挑几个填进 scheduledIndexing.create 的 competitorBrands。",
2987
+ "description": "让 AI 推荐当前 GEO 项目的竞品品牌名。**不写库也不扣费**。拿到之后挑几个填进 scheduledIndexing.create 的 competitorBrands。",
2805
2988
  "inputSchema": {
2806
2989
  "type": "object",
2807
2990
  "properties": {
2808
- "companyId": {
2991
+ "projectId": {
2809
2992
  "type": "integer",
2810
2993
  "minimum": 1,
2811
- "description": "哪家公司"
2994
+ "description": "GEO 项目 id,来自 projects.list"
2812
2995
  }
2813
2996
  },
2814
2997
  "required": [
2815
- "companyId"
2998
+ "projectId"
2816
2999
  ],
2817
3000
  "additionalProperties": false
2818
3001
  }
@@ -2826,6 +3009,11 @@
2826
3009
  "inputSchema": {
2827
3010
  "type": "object",
2828
3011
  "properties": {
3012
+ "projectId": {
3013
+ "type": "integer",
3014
+ "minimum": 1,
3015
+ "description": "GEO 项目 id,来自 projects.list"
3016
+ },
2829
3017
  "articleId": {
2830
3018
  "type": "integer",
2831
3019
  "minimum": 1,
@@ -2833,6 +3021,7 @@
2833
3021
  }
2834
3022
  },
2835
3023
  "required": [
3024
+ "projectId",
2836
3025
  "articleId"
2837
3026
  ],
2838
3027
  "additionalProperties": false
@@ -2843,17 +3032,14 @@
2843
3032
  "mode": "read",
2844
3033
  "guide": "question-task",
2845
3034
  "requiresPlan": false,
2846
- "description": "列出关键词拓展任务,看跑到哪一步了。建完任务用它查状态——L1 要跑一会儿才出词。不含拓出来的词,要看结果用 keywordTasks.get。",
3035
+ "description": "列出关键词拓展任务,看跑到哪一步了。限定在当前 GEO 项目内。建完任务用它查状态——L1 要跑一会儿才出词。不含拓出来的词,要看结果用 keywordTasks.get。",
2847
3036
  "inputSchema": {
2848
3037
  "type": "object",
2849
3038
  "properties": {
2850
- "companyId": {
2851
- "type": "integer",
2852
- "description": "只看某家公司;不传就是全部授权公司"
2853
- },
2854
- "productId": {
3039
+ "projectId": {
2855
3040
  "type": "integer",
2856
- "description": "只看某个 GEO 项目"
3041
+ "minimum": 1,
3042
+ "description": "GEO 项目 id,来自 projects.list"
2857
3043
  },
2858
3044
  "id": {
2859
3045
  "type": "integer",
@@ -2887,6 +3073,9 @@
2887
3073
  "maximum": 100
2888
3074
  }
2889
3075
  },
3076
+ "required": [
3077
+ "projectId"
3078
+ ],
2890
3079
  "additionalProperties": false
2891
3080
  }
2892
3081
  },
@@ -2899,12 +3088,18 @@
2899
3088
  "inputSchema": {
2900
3089
  "type": "object",
2901
3090
  "properties": {
3091
+ "projectId": {
3092
+ "type": "integer",
3093
+ "minimum": 1,
3094
+ "description": "GEO 项目 id,来自 projects.list"
3095
+ },
2902
3096
  "taskId": {
2903
3097
  "type": "integer",
2904
3098
  "minimum": 1
2905
3099
  }
2906
3100
  },
2907
3101
  "required": [
3102
+ "projectId",
2908
3103
  "taskId"
2909
3104
  ],
2910
3105
  "additionalProperties": false
@@ -2924,10 +3119,10 @@
2924
3119
  "maxLength": 100,
2925
3120
  "description": "任务名"
2926
3121
  },
2927
- "productId": {
3122
+ "projectId": {
2928
3123
  "type": "integer",
2929
3124
  "minimum": 1,
2930
- "description": "归哪个 GEO 项目"
3125
+ "description": "GEO 项目 id,来自 projects.list"
2931
3126
  },
2932
3127
  "keyword": {
2933
3128
  "type": "string",
@@ -2947,7 +3142,7 @@
2947
3142
  },
2948
3143
  "required": [
2949
3144
  "name",
2950
- "productId",
3145
+ "projectId",
2951
3146
  "keyword",
2952
3147
  "count"
2953
3148
  ],
@@ -2963,6 +3158,11 @@
2963
3158
  "inputSchema": {
2964
3159
  "type": "object",
2965
3160
  "properties": {
3161
+ "projectId": {
3162
+ "type": "integer",
3163
+ "minimum": 1,
3164
+ "description": "GEO 项目 id,来自 projects.list"
3165
+ },
2966
3166
  "taskId": {
2967
3167
  "type": "integer",
2968
3168
  "minimum": 1,
@@ -2978,6 +3178,7 @@
2978
3178
  }
2979
3179
  },
2980
3180
  "required": [
3181
+ "projectId",
2981
3182
  "taskId",
2982
3183
  "output"
2983
3184
  ],
@@ -2993,6 +3194,11 @@
2993
3194
  "inputSchema": {
2994
3195
  "type": "object",
2995
3196
  "properties": {
3197
+ "projectId": {
3198
+ "type": "integer",
3199
+ "minimum": 1,
3200
+ "description": "GEO 项目 id,来自 projects.list"
3201
+ },
2996
3202
  "taskId": {
2997
3203
  "type": "integer",
2998
3204
  "minimum": 1,
@@ -3019,6 +3225,7 @@
3019
3225
  }
3020
3226
  },
3021
3227
  "required": [
3228
+ "projectId",
3022
3229
  "taskId",
3023
3230
  "selected",
3024
3231
  "count"
@@ -3047,18 +3254,14 @@
3047
3254
  ],
3048
3255
  "description": "查哪个域的标签:article=文章,knowledge=知识库,image=图片,video=视频,prompt=提示词,question=搜索问题"
3049
3256
  },
3050
- "companyId": {
3257
+ "projectId": {
3051
3258
  "type": "integer",
3052
3259
  "minimum": 1,
3053
- "description": "只看某家公司的"
3054
- },
3055
- "productId": {
3056
- "type": "integer",
3057
- "minimum": 1,
3058
- "description": "只看某个 GEO 项目的"
3260
+ "description": "GEO 项目 id,来自 projects.list"
3059
3261
  }
3060
3262
  },
3061
3263
  "required": [
3264
+ "projectId",
3062
3265
  "domain"
3063
3266
  ],
3064
3267
  "additionalProperties": false
@@ -3078,15 +3281,10 @@
3078
3281
  "maxLength": 100,
3079
3282
  "description": "提示词名称"
3080
3283
  },
3081
- "companyId": {
3082
- "type": "integer",
3083
- "minimum": 1,
3084
- "description": "归哪家公司"
3085
- },
3086
- "productId": {
3284
+ "projectId": {
3087
3285
  "type": "integer",
3088
3286
  "minimum": 1,
3089
- "description": "可选:绑定到某个 GEO 项目下"
3287
+ "description": "GEO 项目 id,来自 projects.list"
3090
3288
  },
3091
3289
  "content": {
3092
3290
  "type": "string",
@@ -3115,7 +3313,7 @@
3115
3313
  },
3116
3314
  "required": [
3117
3315
  "name",
3118
- "companyId",
3316
+ "projectId",
3119
3317
  "content",
3120
3318
  "type"
3121
3319
  ],
@@ -3127,10 +3325,15 @@
3127
3325
  "mode": "write",
3128
3326
  "guide": "article",
3129
3327
  "requiresPlan": true,
3130
- "description": "改一条提示词,只传要改的字段。改不了所属公司和项目。**系统内置的公共模板改不了**——要按自己的写法调整,用 prompts.create 复制一份新建。不扣费。",
3328
+ "description": "改一条提示词,只传要改的字段。**系统内置的不能改,先用 prompts.duplicate 复制到当前项目再改**。不扣费。",
3131
3329
  "inputSchema": {
3132
3330
  "type": "object",
3133
3331
  "properties": {
3332
+ "projectId": {
3333
+ "type": "integer",
3334
+ "minimum": 1,
3335
+ "description": "GEO 项目 id,来自 projects.list"
3336
+ },
3134
3337
  "promptId": {
3135
3338
  "type": "integer",
3136
3339
  "minimum": 1,
@@ -3163,6 +3366,7 @@
3163
3366
  }
3164
3367
  },
3165
3368
  "required": [
3369
+ "projectId",
3166
3370
  "promptId"
3167
3371
  ],
3168
3372
  "additionalProperties": false
@@ -3173,28 +3377,24 @@
3173
3377
  "mode": "write",
3174
3378
  "guide": "article",
3175
3379
  "requiresPlan": true,
3176
- "description": "把一条提示词复制到一家或多家公司,每家得到一份独立副本。**系统内置的公共模板要改,就先用这条复制一份**——公共模板本身改不了。副本和原来同名,要区分就复制完再用 prompts.update 改名。不扣费。",
3380
+ "description": "把系统、公共或当前项目的提示词复制一份到当前 GEO 项目,复制出来的可以改。副本和原来同名,要区分就复制完再用 prompts.update 改名。不扣费。",
3177
3381
  "inputSchema": {
3178
3382
  "type": "object",
3179
3383
  "properties": {
3180
- "promptId": {
3384
+ "projectId": {
3181
3385
  "type": "integer",
3182
3386
  "minimum": 1,
3183
- "description": "复制哪一条。公共模板也可以,但只能是文章正文/标题两类"
3387
+ "description": "GEO 项目 id,来自 projects.list"
3184
3388
  },
3185
- "companyIds": {
3186
- "type": "array",
3187
- "items": {
3188
- "type": "integer",
3189
- "minimum": 1
3190
- },
3191
- "minItems": 1,
3192
- "description": "复制到哪几家公司,每家一份。只能是当前密钥授权的公司"
3389
+ "promptId": {
3390
+ "type": "integer",
3391
+ "minimum": 1,
3392
+ "description": "复制哪一条。系统内置、公共或当前项目的都可以,但只能是文章正文/标题两类"
3193
3393
  }
3194
3394
  },
3195
3395
  "required": [
3196
- "promptId",
3197
- "companyIds"
3396
+ "projectId",
3397
+ "promptId"
3198
3398
  ],
3199
3399
  "additionalProperties": false
3200
3400
  }
@@ -3208,6 +3408,11 @@
3208
3408
  "inputSchema": {
3209
3409
  "type": "object",
3210
3410
  "properties": {
3411
+ "projectId": {
3412
+ "type": "integer",
3413
+ "minimum": 1,
3414
+ "description": "GEO 项目 id,来自 projects.list"
3415
+ },
3211
3416
  "articleId": {
3212
3417
  "type": "integer",
3213
3418
  "minimum": 1,
@@ -3215,6 +3420,7 @@
3215
3420
  }
3216
3421
  },
3217
3422
  "required": [
3423
+ "projectId",
3218
3424
  "articleId"
3219
3425
  ],
3220
3426
  "additionalProperties": false
@@ -3229,6 +3435,11 @@
3229
3435
  "inputSchema": {
3230
3436
  "type": "object",
3231
3437
  "properties": {
3438
+ "projectId": {
3439
+ "type": "integer",
3440
+ "minimum": 1,
3441
+ "description": "GEO 项目 id,来自 projects.list"
3442
+ },
3232
3443
  "id": {
3233
3444
  "type": "integer",
3234
3445
  "minimum": 1,
@@ -3236,6 +3447,7 @@
3236
3447
  }
3237
3448
  },
3238
3449
  "required": [
3450
+ "projectId",
3239
3451
  "id"
3240
3452
  ],
3241
3453
  "additionalProperties": false
@@ -3250,6 +3462,11 @@
3250
3462
  "inputSchema": {
3251
3463
  "type": "object",
3252
3464
  "properties": {
3465
+ "projectId": {
3466
+ "type": "integer",
3467
+ "minimum": 1,
3468
+ "description": "GEO 项目 id,来自 projects.list"
3469
+ },
3253
3470
  "id": {
3254
3471
  "type": "integer",
3255
3472
  "minimum": 1,
@@ -3257,6 +3474,7 @@
3257
3474
  }
3258
3475
  },
3259
3476
  "required": [
3477
+ "projectId",
3260
3478
  "id"
3261
3479
  ],
3262
3480
  "additionalProperties": false
@@ -3271,6 +3489,11 @@
3271
3489
  "inputSchema": {
3272
3490
  "type": "object",
3273
3491
  "properties": {
3492
+ "projectId": {
3493
+ "type": "integer",
3494
+ "minimum": 1,
3495
+ "description": "GEO 项目 id,来自 projects.list"
3496
+ },
3274
3497
  "id": {
3275
3498
  "type": "integer",
3276
3499
  "minimum": 1,
@@ -3278,6 +3501,7 @@
3278
3501
  }
3279
3502
  },
3280
3503
  "required": [
3504
+ "projectId",
3281
3505
  "id"
3282
3506
  ],
3283
3507
  "additionalProperties": false
@@ -3292,6 +3516,11 @@
3292
3516
  "inputSchema": {
3293
3517
  "type": "object",
3294
3518
  "properties": {
3519
+ "projectId": {
3520
+ "type": "integer",
3521
+ "minimum": 1,
3522
+ "description": "GEO 项目 id,来自 projects.list"
3523
+ },
3295
3524
  "id": {
3296
3525
  "type": "integer",
3297
3526
  "minimum": 1,
@@ -3299,6 +3528,7 @@
3299
3528
  }
3300
3529
  },
3301
3530
  "required": [
3531
+ "projectId",
3302
3532
  "id"
3303
3533
  ],
3304
3534
  "additionalProperties": false
@@ -3327,15 +3557,16 @@
3327
3557
  "mode": "read",
3328
3558
  "guide": "publication",
3329
3559
  "requiresPlan": false,
3330
- "description": "已经绑定到公司的发布账号。平台名猜得出来,账号 id 猜不出来——要发内容必须先从这里拿到 id。**只挑 usable=true 的号**:登录过期或已停用的号建任务时会被拒(statusLabel 会写明是哪种),在这一步避开比建完被拒再回头省事。",
3560
+ "description": "当前 GEO 项目可用的发布账号(同一批项目共用这些账号)。平台名猜得出来,账号 id 猜不出来——要发内容必须先从这里拿到 id。**只挑 usable=true 的号**:登录过期或已停用的号建任务时会被拒(statusLabel 会写明是哪种),在这一步避开比建完被拒再回头省事。",
3331
3561
  "inputSchema": {
3332
3562
  "type": "object",
3333
3563
  "properties": {
3334
- "companyId": { "type": "integer", "minimum": 1, "description": "只看某家公司的" },
3564
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3335
3565
  "platform": { "type": "string", "description": "只看某个平台的。取值来自 publicationPlatforms.list" },
3336
3566
  "page": { "type": "integer", "minimum": 1 },
3337
3567
  "limit": { "type": "integer", "minimum": 1, "maximum": 100 }
3338
3568
  },
3569
+ "required": ["projectId"],
3339
3570
  "additionalProperties": false
3340
3571
  }
3341
3572
  },
@@ -3344,16 +3575,16 @@
3344
3575
  "mode": "read",
3345
3576
  "guide": "publication",
3346
3577
  "requiresPlan": false,
3347
- "description": "自媒体发布任务列表。一个任务下面挂着若干条「某篇内容发到某个平台某个账号」的记录,这里只给任务级汇总,要看每条的下场用 publicationRecords.list。",
3578
+ "description": "自媒体发布任务列表。限定在当前 GEO 项目内。一个任务下面挂着若干条「某篇内容发到某个平台某个账号」的记录,这里只给任务级汇总,要看每条的下场用 publicationRecords.list。",
3348
3579
  "inputSchema": {
3349
3580
  "type": "object",
3350
3581
  "properties": {
3351
- "companyId": { "type": "integer", "minimum": 1, "description": "只看某家公司的" },
3352
- "productId": { "type": "integer", "minimum": 1, "description": "只看某个 GEO 项目的" },
3582
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3353
3583
  "name": { "type": "string", "description": "按任务名模糊搜" },
3354
3584
  "page": { "type": "integer", "minimum": 1 },
3355
3585
  "limit": { "type": "integer", "minimum": 1, "maximum": 100 }
3356
3586
  },
3587
+ "required": ["projectId"],
3357
3588
  "additionalProperties": false
3358
3589
  }
3359
3590
  },
@@ -3362,19 +3593,19 @@
3362
3593
  "mode": "read",
3363
3594
  "guide": "publication",
3364
3595
  "requiresPlan": false,
3365
- "description": "发布记录:每条内容在每个平台的实际下场。这是「发出去了没有、发到哪个链接、失败为什么」的唯一出处——用户问「小红书那篇发了吗」就查这里。status 同时给数值和 statusLabel,念给用户用后者。",
3596
+ "description": "发布记录:每条内容在每个平台的实际下场。限定在当前 GEO 项目内。这是「发出去了没有、发到哪个链接、失败为什么」的唯一出处——用户问「小红书那篇发了吗」就查这里。status 同时给数值和 statusLabel,念给用户用后者。",
3366
3597
  "inputSchema": {
3367
3598
  "type": "object",
3368
3599
  "properties": {
3600
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3369
3601
  "taskId": { "type": "integer", "minimum": 1, "description": "只看某个发布任务下的" },
3370
3602
  "articleId": { "type": "integer", "minimum": 1, "description": "只看某篇文章的" },
3371
3603
  "platform": { "type": "string", "description": "只看某个平台的" },
3372
3604
  "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
3605
  "page": { "type": "integer", "minimum": 1 },
3376
3606
  "limit": { "type": "integer", "minimum": 1, "maximum": 100 }
3377
3607
  },
3608
+ "required": ["projectId"],
3378
3609
  "additionalProperties": false
3379
3610
  }
3380
3611
  },
@@ -3414,16 +3645,17 @@
3414
3645
  "mode": "read",
3415
3646
  "guide": "publication",
3416
3647
  "requiresPlan": false,
3417
- "description": "媒体投稿记录:订单状态、失败原因、发布链接、退款状态、实际扣款。投稿是异步的,提交完要过一阵才出结果,用这条查进展。**status 和 refundStatus 是两件事**——status 说稿子发出去没有,refundStatus 说钱退没退;被拒稿的记录要把两个都念给用户。报「这笔花了多少」用 chargedAmount(元,来自账本的真实扣款);currentPrice 是这家媒体**现在**的挂牌价,只能用来估算再投一次的花费,媒体调过价的话它和当时扣的不是一个数。chargedAmount 为 null 表示账本里查不到这笔扣费,就说查不到,别拿 currentPrice 顶替。",
3648
+ "description": "媒体投稿记录:订单状态、失败原因、发布链接、退款状态、实际扣款。限定在当前 GEO 项目内(跟着投稿文章的项目归属走)。投稿是异步的,提交完要过一阵才出结果,用这条查进展。**status 和 refundStatus 是两件事**——status 说稿子发出去没有,refundStatus 说钱退没退;被拒稿的记录要把两个都念给用户。报「这笔花了多少」用 chargedAmount(元,来自账本的真实扣款);currentPrice 是这家媒体**现在**的挂牌价,只能用来估算再投一次的花费,媒体调过价的话它和当时扣的不是一个数。chargedAmount 为 null 表示账本里查不到这笔扣费,就说查不到,别拿 currentPrice 顶替。",
3418
3649
  "inputSchema": {
3419
3650
  "type": "object",
3420
3651
  "properties": {
3652
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3421
3653
  "articleId": { "type": "integer", "minimum": 1, "description": "只看某篇文章投出去的" },
3422
3654
  "mediaId": { "type": "integer", "minimum": 1, "description": "只看投到某个媒体的" },
3423
- "companyId": { "type": "integer", "minimum": 1 },
3424
3655
  "page": { "type": "integer", "minimum": 1 },
3425
3656
  "limit": { "type": "integer", "minimum": 1, "maximum": 100 }
3426
3657
  },
3658
+ "required": ["projectId"],
3427
3659
  "additionalProperties": false
3428
3660
  }
3429
3661
  },
@@ -3432,14 +3664,15 @@
3432
3664
  "mode": "read",
3433
3665
  "guide": "publication",
3434
3666
  "requiresPlan": false,
3435
- "description": "投稿记录的状态汇总。要回答「投出去的都怎么样了」用这条,别去翻列表自己数——投稿动辄上百条,翻列表会把上下文占满。念结果用 items 里的 statusLabel(如「已拒稿 × 15」),counts 是给过滤用的原始数值,别把里面的数字念给用户。",
3667
+ "description": "投稿记录的状态汇总。限定在当前 GEO 项目内。要回答「投出去的都怎么样了」用这条,别去翻列表自己数——投稿动辄上百条,翻列表会把上下文占满。念结果用 items 里的 statusLabel(如「已拒稿 × 15」),counts 是给过滤用的原始数值,别把里面的数字念给用户。",
3436
3668
  "inputSchema": {
3437
3669
  "type": "object",
3438
3670
  "properties": {
3671
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3439
3672
  "articleId": { "type": "integer", "minimum": 1 },
3440
- "mediaId": { "type": "integer", "minimum": 1 },
3441
- "companyId": { "type": "integer", "minimum": 1 }
3673
+ "mediaId": { "type": "integer", "minimum": 1 }
3442
3674
  },
3675
+ "required": ["projectId"],
3443
3676
  "additionalProperties": false
3444
3677
  }
3445
3678
  },
@@ -3452,9 +3685,10 @@
3452
3685
  "inputSchema": {
3453
3686
  "type": "object",
3454
3687
  "properties": {
3688
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3455
3689
  "taskId": { "type": "integer", "minimum": 1, "description": "照着哪个任务。id 来自 articleTasks.list" }
3456
3690
  },
3457
- "required": ["taskId"],
3691
+ "required": ["projectId", "taskId"],
3458
3692
  "additionalProperties": false
3459
3693
  }
3460
3694
  },
@@ -3467,9 +3701,10 @@
3467
3701
  "inputSchema": {
3468
3702
  "type": "object",
3469
3703
  "properties": {
3704
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3470
3705
  "taskId": { "type": "integer", "minimum": 1, "description": "要删哪个任务" }
3471
3706
  },
3472
- "required": ["taskId"],
3707
+ "required": ["projectId", "taskId"],
3473
3708
  "additionalProperties": false
3474
3709
  }
3475
3710
  },
@@ -3482,11 +3717,11 @@
3482
3717
  "inputSchema": {
3483
3718
  "type": "object",
3484
3719
  "properties": {
3485
- "productId": { "type": "integer", "minimum": 1, "description": "建在哪个 GEO 项目下" },
3720
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3486
3721
  "name": { "type": "string", "minLength": 1, "description": "文件夹名" },
3487
3722
  "parentId": { "type": "integer", "minimum": 1, "description": "建成谁的子文件夹。不传就是顶层。id 来自 folders.list" }
3488
3723
  },
3489
- "required": ["productId", "name"],
3724
+ "required": ["projectId", "name"],
3490
3725
  "additionalProperties": false
3491
3726
  }
3492
3727
  },
@@ -3499,11 +3734,12 @@
3499
3734
  "inputSchema": {
3500
3735
  "type": "object",
3501
3736
  "properties": {
3737
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3502
3738
  "folderId": { "type": "integer", "minimum": 1, "description": "改哪个" },
3503
3739
  "name": { "type": "string", "minLength": 1, "description": "新名字" },
3504
3740
  "parentId": { "type": ["integer", "null"], "minimum": 1, "description": "移到谁下面。传 null = 移到顶层" }
3505
3741
  },
3506
- "required": ["folderId"],
3742
+ "required": ["projectId", "folderId"],
3507
3743
  "additionalProperties": false
3508
3744
  }
3509
3745
  },
@@ -3516,9 +3752,10 @@
3516
3752
  "inputSchema": {
3517
3753
  "type": "object",
3518
3754
  "properties": {
3755
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3519
3756
  "folderId": { "type": "integer", "minimum": 1, "description": "要删哪个" }
3520
3757
  },
3521
- "required": ["folderId"],
3758
+ "required": ["projectId", "folderId"],
3522
3759
  "additionalProperties": false
3523
3760
  }
3524
3761
  },
@@ -3527,12 +3764,12 @@
3527
3764
  "mode": "write",
3528
3765
  "guide": "publication",
3529
3766
  "requiresPlan": true,
3530
- "description": "建文章发布任务:把已有文章发到自媒体平台。**执行后稿子会真的发出去,CLI 撤不回来**。费用按发布记录条数算——一篇文章发 3 个账号就是 3 条。建之前先用 publicationPlatforms.list(contentType=article)查平台、publicationAccounts.list 查这个公司绑了哪些账号。**文章必须已审核通过且有封面**,两者缺一发不了——用 articles.list 时带上 status 和 mustHaveCover 就只会看到能发的。**还要满足平台的字数要求**:平台配了 limitConfig 时,标题和正文长度不达标整批都建不了(正文字数按去掉图片地址、空格换行之后算,比原文短)。不确定够不够就先按 limitConfig 挑文章,或者少发那个卡字数的平台。",
3767
+ "description": "建文章发布任务:把已有文章发到自媒体平台。项目由 projectId 指定。**执行后稿子会真的发出去,CLI 撤不回来**。费用按发布记录条数算——一篇文章发 3 个账号就是 3 条。建之前先用 publicationPlatforms.list(contentType=article)查平台、publicationAccounts.list 查当前 GEO 项目绑了哪些账号。**文章必须已审核通过且有封面**,两者缺一发不了——用 articles.list 时带上 status 和 mustHaveCover 就只会看到能发的。**还要满足平台的字数要求**:平台配了 limitConfig 时,标题和正文长度不达标整批都建不了(正文字数按去掉图片地址、空格换行之后算,比原文短)。不确定够不够就先按 limitConfig 挑文章,或者少发那个卡字数的平台。",
3531
3768
  "inputSchema": {
3532
3769
  "type": "object",
3533
3770
  "properties": {
3534
3771
  "name": { "type": "string", "minLength": 1, "maxLength": 100, "description": "任务名,给用户认的" },
3535
- "productId": { "type": "integer", "minimum": 1, "description": "发哪个 GEO 项目的内容" },
3772
+ "projectId": { "type": "integer", "minimum": 1, "description": "发哪个 GEO 项目的内容" },
3536
3773
  "aigc": { "type": "boolean", "description": "要不要打「AI 创作」声明。**得问用户**,别替他决定" },
3537
3774
  "items": {
3538
3775
  "type": "array",
@@ -3570,7 +3807,7 @@
3570
3807
  }
3571
3808
  }
3572
3809
  },
3573
- "required": ["name", "productId", "aigc", "items"],
3810
+ "required": ["name", "projectId", "aigc", "items"],
3574
3811
  "additionalProperties": false
3575
3812
  }
3576
3813
  },
@@ -3584,7 +3821,7 @@
3584
3821
  "type": "object",
3585
3822
  "properties": {
3586
3823
  "name": { "type": "string", "minLength": 1, "maxLength": 100 },
3587
- "productId": { "type": "integer", "minimum": 1 },
3824
+ "projectId": { "type": "integer", "minimum": 1 },
3588
3825
  "aigc": { "type": "boolean", "description": "要不要打「AI 创作」声明。**得问用户**" },
3589
3826
  "items": {
3590
3827
  "type": "array",
@@ -3617,7 +3854,7 @@
3617
3854
  }
3618
3855
  }
3619
3856
  },
3620
- "required": ["name", "productId", "aigc", "items"],
3857
+ "required": ["name", "projectId", "aigc", "items"],
3621
3858
  "additionalProperties": false
3622
3859
  }
3623
3860
  },
@@ -3626,18 +3863,19 @@
3626
3863
  "mode": "write",
3627
3864
  "guide": "publication",
3628
3865
  "requiresPlan": true,
3629
- "description": "删发布任务。只删任务和它名下**还没发出去**的记录——已经发布成功的稿子留在平台上不受影响,要撤那些得去各平台自己删。一次只能删同一家公司的。",
3866
+ "description": "删发布任务。只删任务和它名下**还没发出去**的记录——已经发布成功的稿子留在平台上不受影响,要撤那些得去各平台自己删。一次只能删当前 GEO 项目的。",
3630
3867
  "inputSchema": {
3631
3868
  "type": "object",
3632
3869
  "properties": {
3870
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3633
3871
  "taskIds": {
3634
3872
  "type": "array",
3635
3873
  "minItems": 1,
3636
3874
  "items": { "type": "integer", "minimum": 1 },
3637
- "description": "要删哪些。必须都属于同一家公司"
3875
+ "description": "要删哪些。必须都属于当前 GEO 项目"
3638
3876
  }
3639
3877
  },
3640
- "required": ["taskIds"],
3878
+ "required": ["projectId", "taskIds"],
3641
3879
  "additionalProperties": false
3642
3880
  }
3643
3881
  },
@@ -3649,8 +3887,11 @@
3649
3887
  "description": "暂停发布任务:把它名下**还没发出去**的记录挂起。已经发成功的撤不回来,正在发的那条也拦不住。不扣费。",
3650
3888
  "inputSchema": {
3651
3889
  "type": "object",
3652
- "properties": { "taskId": { "type": "integer", "minimum": 1 } },
3653
- "required": ["taskId"],
3890
+ "properties": {
3891
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3892
+ "taskId": { "type": "integer", "minimum": 1 }
3893
+ },
3894
+ "required": ["projectId", "taskId"],
3654
3895
  "additionalProperties": false
3655
3896
  }
3656
3897
  },
@@ -3662,8 +3903,11 @@
3662
3903
  "description": "恢复被暂停的发布任务,挂起的记录重新排队发出去。定时的按原定时间走,时间已经过了的会尽快发。不扣费。",
3663
3904
  "inputSchema": {
3664
3905
  "type": "object",
3665
- "properties": { "taskId": { "type": "integer", "minimum": 1 } },
3666
- "required": ["taskId"],
3906
+ "properties": {
3907
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3908
+ "taskId": { "type": "integer", "minimum": 1 }
3909
+ },
3910
+ "required": ["projectId", "taskId"],
3667
3911
  "additionalProperties": false
3668
3912
  }
3669
3913
  },
@@ -3676,10 +3920,11 @@
3676
3920
  "inputSchema": {
3677
3921
  "type": "object",
3678
3922
  "properties": {
3923
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3679
3924
  "articleId": { "type": "integer", "minimum": 1, "description": "投哪篇" },
3680
3925
  "mediaId": { "type": "integer", "minimum": 1, "description": "投给哪家。用 mediaPlatforms.list 查在架的媒体和价格" }
3681
3926
  },
3682
- "required": ["articleId", "mediaId"],
3927
+ "required": ["projectId", "articleId", "mediaId"],
3683
3928
  "additionalProperties": false
3684
3929
  }
3685
3930
  },
@@ -3692,6 +3937,7 @@
3692
3937
  "inputSchema": {
3693
3938
  "type": "object",
3694
3939
  "properties": {
3940
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3695
3941
  "articleId": { "type": "integer", "minimum": 1, "description": "投哪篇。一次只能一篇" },
3696
3942
  "mediaIds": {
3697
3943
  "type": "array",
@@ -3701,7 +3947,7 @@
3701
3947
  "description": "投给哪几家"
3702
3948
  }
3703
3949
  },
3704
- "required": ["articleId", "mediaIds"],
3950
+ "required": ["projectId", "articleId", "mediaIds"],
3705
3951
  "additionalProperties": false
3706
3952
  }
3707
3953
  },
@@ -3720,10 +3966,9 @@
3720
3966
  "inputSchema": {
3721
3967
  "type": "object",
3722
3968
  "properties": {
3969
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3723
3970
  "page": { "type": "integer", "minimum": 1 },
3724
3971
  "limit": { "type": "integer", "minimum": 1, "maximum": 500 },
3725
- "companyId": { "type": "integer", "minimum": 1 },
3726
- "productId": { "type": "integer", "minimum": 1 },
3727
3972
  "status": { "type": "integer", "enum": [1, 2, 3, 4], "description": "1-处理中 2-已提交 3-成功 4-失败" },
3728
3973
  "taskType": {
3729
3974
  "type": "integer",
@@ -3732,6 +3977,7 @@
3732
3977
  },
3733
3978
  "platform": { "type": "string", "minLength": 1, "description": "出图平台。合法取值先用 textToImages.models 查,别猜" }
3734
3979
  },
3980
+ "required": ["projectId"],
3735
3981
  "additionalProperties": false
3736
3982
  }
3737
3983
  },
@@ -3742,8 +3988,11 @@
3742
3988
  "description": "查一条文生图任务。status=3(成功)时 resourceUrls 里才有图;建完任务要靠它轮询。⚠️ 只能查到最近 30 天创建的任务。",
3743
3989
  "inputSchema": {
3744
3990
  "type": "object",
3745
- "properties": { "id": { "type": "integer", "minimum": 1 } },
3746
- "required": ["id"],
3991
+ "properties": {
3992
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3993
+ "id": { "type": "integer", "minimum": 1 }
3994
+ },
3995
+ "required": ["projectId", "id"],
3747
3996
  "additionalProperties": false
3748
3997
  }
3749
3998
  },
@@ -3751,8 +4000,15 @@
3751
4000
  "name": "textToImages.countUncompleted",
3752
4001
  "mode": "read",
3753
4002
  "guide": "material",
3754
- "description": "还没跑完的文生图任务数量。",
3755
- "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false }
4003
+ "description": "当前 GEO 项目里还没跑完的文生图任务数量。",
4004
+ "inputSchema": {
4005
+ "type": "object",
4006
+ "properties": {
4007
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" }
4008
+ },
4009
+ "required": ["projectId"],
4010
+ "additionalProperties": false
4011
+ }
3756
4012
  },
3757
4013
  {
3758
4014
  "name": "textToImages.create",
@@ -3763,8 +4019,8 @@
3763
4019
  "inputSchema": {
3764
4020
  "type": "object",
3765
4021
  "properties": {
4022
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3766
4023
  "prompt": { "type": "string", "minLength": 1, "maxLength": 2500, "description": "想画什么,写清楚" },
3767
- "productId": { "type": "integer", "minimum": 1, "description": "归到哪个 GEO 项目;公司从项目上取" },
3768
4024
  "negativePrompt": { "type": "string", "description": "不想出现什么" },
3769
4025
  "aspectRatio": {
3770
4026
  "type": "string",
@@ -3773,7 +4029,7 @@
3773
4029
  },
3774
4030
  "model": { "type": "string", "minLength": 1, "maxLength": 32, "description": "档位 code,先用 textToImages.models 查;不传用第一个启用档" }
3775
4031
  },
3776
- "required": ["prompt", "productId"],
4032
+ "required": ["projectId", "prompt"],
3777
4033
  "additionalProperties": false
3778
4034
  }
3779
4035
  },
@@ -3785,8 +4041,11 @@
3785
4041
  "description": "删一条文生图任务。删了就没了,不可恢复。任务还在跑(处理中/已提交)时删不掉,要等它到成功或失败的终态。已归档进素材库的图不受影响。",
3786
4042
  "inputSchema": {
3787
4043
  "type": "object",
3788
- "properties": { "id": { "type": "integer", "minimum": 1 } },
3789
- "required": ["id"],
4044
+ "properties": {
4045
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
4046
+ "id": { "type": "integer", "minimum": 1 }
4047
+ },
4048
+ "required": ["projectId", "id"],
3790
4049
  "additionalProperties": false
3791
4050
  }
3792
4051
  },
@@ -3799,10 +4058,11 @@
3799
4058
  "inputSchema": {
3800
4059
  "type": "object",
3801
4060
  "properties": {
4061
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3802
4062
  "articleId": { "type": "integer", "minimum": 1 },
3803
4063
  "model": { "type": "string", "minLength": 1, "maxLength": 32, "description": "档位 code,先用 textToImages.models 查;不传用第一个启用档" }
3804
4064
  },
3805
- "required": ["articleId"],
4065
+ "required": ["projectId", "articleId"],
3806
4066
  "additionalProperties": false
3807
4067
  }
3808
4068
  },
@@ -3852,11 +4112,12 @@
3852
4112
  "inputSchema": {
3853
4113
  "type": "object",
3854
4114
  "properties": {
3855
- "companyId": { "type": "integer", "minimum": 1 },
4115
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3856
4116
  "status": { "type": "integer", "enum": [-3, -2, 0, 1, 2] },
3857
4117
  "page": { "type": "integer", "default": 1 },
3858
4118
  "limit": { "type": "integer", "default": 20, "maximum": 100 }
3859
4119
  },
4120
+ "required": ["projectId"],
3860
4121
  "additionalProperties": false
3861
4122
  }
3862
4123
  },
@@ -3868,8 +4129,11 @@
3868
4129
  "description": "查一条数字人合成任务。提交之后轮询它看进度,status=1 时 videoUrl 才有值。",
3869
4130
  "inputSchema": {
3870
4131
  "type": "object",
3871
- "properties": { "id": { "type": "integer", "minimum": 1 } },
3872
- "required": ["id"],
4132
+ "properties": {
4133
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
4134
+ "id": { "type": "integer", "minimum": 1 }
4135
+ },
4136
+ "required": ["projectId", "id"],
3873
4137
  "additionalProperties": false
3874
4138
  }
3875
4139
  },
@@ -3915,12 +4179,13 @@
3915
4179
  "inputSchema": {
3916
4180
  "type": "object",
3917
4181
  "properties": {
3918
- "companyId": { "type": "integer", "minimum": 1 },
4182
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3919
4183
  "status": { "type": "integer", "enum": [-2, -1, 1, 2, 4] },
3920
4184
  "dhVideoTaskId": { "type": "array", "items": { "type": "integer", "minimum": 1 }, "description": "按来源数字人任务过滤" },
3921
4185
  "page": { "type": "integer", "default": 1 },
3922
4186
  "limit": { "type": "integer", "default": 20, "maximum": 100 }
3923
4187
  },
4188
+ "required": ["projectId"],
3924
4189
  "additionalProperties": false
3925
4190
  }
3926
4191
  },
@@ -3932,8 +4197,11 @@
3932
4197
  "description": "查一条剪辑任务。status=1 时 outputMp4Url 才有值。",
3933
4198
  "inputSchema": {
3934
4199
  "type": "object",
3935
- "properties": { "id": { "type": "integer", "minimum": 1 } },
3936
- "required": ["id"],
4200
+ "properties": {
4201
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
4202
+ "id": { "type": "integer", "minimum": 1 }
4203
+ },
4204
+ "required": ["projectId", "id"],
3937
4205
  "additionalProperties": false
3938
4206
  }
3939
4207
  },
@@ -3946,8 +4214,7 @@
3946
4214
  "inputSchema": {
3947
4215
  "type": "object",
3948
4216
  "properties": {
3949
- "companyId": { "type": "integer", "minimum": 1 },
3950
- "productId": { "type": "integer", "minimum": 1, "description": "归到哪个 GEO 项目,可不填" },
4217
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
3951
4218
  "trainingId": { "type": "integer", "minimum": 1, "description": "数字人形象ID,用 dhVideos.avatars 查" },
3952
4219
  "avatarName": { "type": "string", "maxLength": 100, "description": "形象名称快照,可不填" },
3953
4220
  "version": { "type": "integer", "enum": [1, 2], "description": "1 LITE 标准 / 2 PRO 高清(PRO 更贵)" },
@@ -4010,7 +4277,7 @@
4010
4277
  "additionalProperties": false
4011
4278
  }
4012
4279
  },
4013
- "required": ["companyId", "trainingId", "version"],
4280
+ "required": ["projectId", "trainingId", "version"],
4014
4281
  "additionalProperties": false
4015
4282
  }
4016
4283
  },
@@ -4023,6 +4290,7 @@
4023
4290
  "inputSchema": {
4024
4291
  "type": "object",
4025
4292
  "properties": {
4293
+ "projectId": { "type": "integer", "minimum": 1, "description": "GEO 项目 id,来自 projects.list" },
4026
4294
  "dhVideoTaskId": { "type": "integer", "minimum": 1, "description": "来源数字人任务ID,用 dhVideos.list 查" },
4027
4295
  "template": { "type": "string", "minLength": 1, "maxLength": 64, "description": "剪辑模板 code,用 clipTasks.templates 查" },
4028
4296
  "workName": { "type": "string", "maxLength": 100, "description": "作品命名;不传则沿用数字人的视频名称" },
@@ -4065,7 +4333,7 @@
4065
4333
  "additionalProperties": false
4066
4334
  }
4067
4335
  },
4068
- "required": ["dhVideoTaskId", "template"],
4336
+ "required": ["projectId", "dhVideoTaskId", "template"],
4069
4337
  "additionalProperties": false
4070
4338
  }
4071
4339
  },
@@ -4078,10 +4346,10 @@
4078
4346
  "inputSchema": {
4079
4347
  "type": "object",
4080
4348
  "properties": {
4081
- "companyId": {
4349
+ "projectId": {
4082
4350
  "type": "integer",
4083
4351
  "minimum": 1,
4084
- "description": "只看某家公司;不传就是全部授权公司"
4352
+ "description": "GEO 项目 id,来自 projects.list"
4085
4353
  },
4086
4354
  "page": {
4087
4355
  "type": "integer",
@@ -4093,6 +4361,7 @@
4093
4361
  "maximum": 201
4094
4362
  }
4095
4363
  },
4364
+ "required": ["projectId"],
4096
4365
  "additionalProperties": false
4097
4366
  }
4098
4367
  },
@@ -4117,12 +4386,17 @@
4117
4386
  "inputSchema": {
4118
4387
  "type": "object",
4119
4388
  "properties": {
4389
+ "projectId": {
4390
+ "type": "integer",
4391
+ "minimum": 1,
4392
+ "description": "GEO 项目 id,来自 projects.list"
4393
+ },
4120
4394
  "id": {
4121
4395
  "type": "integer",
4122
4396
  "minimum": 1
4123
4397
  }
4124
4398
  },
4125
- "required": ["id"],
4399
+ "required": ["projectId", "id"],
4126
4400
  "additionalProperties": false
4127
4401
  }
4128
4402
  },
@@ -4135,6 +4409,11 @@
4135
4409
  "inputSchema": {
4136
4410
  "type": "object",
4137
4411
  "properties": {
4412
+ "projectId": {
4413
+ "type": "integer",
4414
+ "minimum": 1,
4415
+ "description": "GEO 项目 id,来自 projects.list"
4416
+ },
4138
4417
  "taskId": {
4139
4418
  "type": "integer",
4140
4419
  "minimum": 1
@@ -4144,7 +4423,7 @@
4144
4423
  "minimum": 1
4145
4424
  }
4146
4425
  },
4147
- "required": ["taskId", "batchId"],
4426
+ "required": ["projectId", "taskId", "batchId"],
4148
4427
  "additionalProperties": false
4149
4428
  }
4150
4429
  },
@@ -4157,14 +4436,10 @@
4157
4436
  "inputSchema": {
4158
4437
  "type": "object",
4159
4438
  "properties": {
4160
- "companyId": {
4161
- "type": "integer",
4162
- "minimum": 1
4163
- },
4164
- "productId": {
4439
+ "projectId": {
4165
4440
  "type": "integer",
4166
4441
  "minimum": 1,
4167
- "description": "归到哪个 GEO 项目,用 products.list 查"
4442
+ "description": "GEO 项目 id,来自 projects.list"
4168
4443
  },
4169
4444
  "sourceType": {
4170
4445
  "type": "integer",
@@ -4216,7 +4491,7 @@
4216
4491
  "description": "参考素材图 id 列表,有序,用 images.list 查,最多 10 张"
4217
4492
  }
4218
4493
  },
4219
- "required": ["companyId", "productId", "sourceType", "visualMode", "richness", "modelCode"],
4494
+ "required": ["projectId", "sourceType", "visualMode", "richness", "modelCode"],
4220
4495
  "additionalProperties": false
4221
4496
  }
4222
4497
  },
@@ -4225,10 +4500,15 @@
4225
4500
  "mode": "write",
4226
4501
  "guide": "answer-card",
4227
4502
  "requiresPlan": true,
4228
- "description": "补丁式改答案卡脚本。只说清「改了什么」——pages 按 id 改字段、insert 插入新页、order 重排、deleteIds 删页,四项至少给一项非空数组,不用把没改过的页也搬一遍原样传回来。服务端按「删 → 改 → 排 → 插」的固定顺序合并:order 只用列已有页的 id(新插入的页此刻还没有 id);insert 的 afterIndex 是「排完序之后」的下标,-1 表示插到最前,其余表示插到该下标对应页之后。这一步不扣费,改到满意再用 answerCards.generate 出图。",
4503
+ "description": "补丁式改答案卡脚本。只说清「改了什么」——pages 按 id 改字段、order 重排、deleteIds 删页,至少给一项非空数组,不用把没改过的页也搬一遍原样传回来。⚠️ 暂不支持新增页:insert 传了会被拒(新加的页拿不到分析阶段的优化提示词,出图会和整套对不上),要加内容请改现有页或重新分析。每页的 type(页面角色)和 visualType(素材类型)也不能改,改了会被拒。服务端按「删 → 改 → 排」的固定顺序合并,order 要列全所有已有页的 id。这一步不扣费,改到满意再用 answerCards.generate 出图。",
4229
4504
  "inputSchema": {
4230
4505
  "type": "object",
4231
4506
  "properties": {
4507
+ "projectId": {
4508
+ "type": "integer",
4509
+ "minimum": 1,
4510
+ "description": "GEO 项目 id,来自 projects.list"
4511
+ },
4232
4512
  "taskId": {
4233
4513
  "type": "integer",
4234
4514
  "minimum": 1
@@ -4247,7 +4527,7 @@
4247
4527
  "type": {
4248
4528
  "type": "string",
4249
4529
  "maxLength": 32,
4250
- "description": "页面角色,如 cover/conclusion/summary 等"
4530
+ "description": "页面角色,如 cover/conclusion/summary 等。【不可改】分析时已定好,传了和现值不同的会被拒"
4251
4531
  },
4252
4532
  "layoutType": {
4253
4533
  "type": "string",
@@ -4294,7 +4574,7 @@
4294
4574
  "visualType": {
4295
4575
  "type": "integer",
4296
4576
  "enum": [1, 2, 3, 4, 5, 6],
4297
- "description": "画面素材类型:1 实景 2 人像 3 产品展示 4 数据图表 5 流程/信息图 6 纯文字卡"
4577
+ "description": "画面素材类型:1 实景 2 人像 3 产品展示 4 数据图表 5 流程/信息图 6 纯文字卡。【不可改】分析时已定好,传了和现值不同的会被拒"
4298
4578
  },
4299
4579
  "visualSubject": {
4300
4580
  "type": "string",
@@ -4313,7 +4593,7 @@
4313
4593
  },
4314
4594
  "insert": {
4315
4595
  "type": "array",
4316
- "description": "插入新页,没有 id",
4596
+ "description": "【暂不支持,传了会被拒】插入新页。新加的页拿不到分析阶段的优化提示词,出图会和整套对不上;要加内容请改现有页,或重新分析",
4317
4597
  "items": {
4318
4598
  "type": "object",
4319
4599
  "properties": {
@@ -4406,7 +4686,7 @@
4406
4686
  "description": "要删除的页面 id"
4407
4687
  }
4408
4688
  },
4409
- "required": ["taskId"],
4689
+ "required": ["projectId", "taskId"],
4410
4690
  "additionalProperties": false
4411
4691
  }
4412
4692
  },
@@ -4419,12 +4699,17 @@
4419
4699
  "inputSchema": {
4420
4700
  "type": "object",
4421
4701
  "properties": {
4702
+ "projectId": {
4703
+ "type": "integer",
4704
+ "minimum": 1,
4705
+ "description": "GEO 项目 id,来自 projects.list"
4706
+ },
4422
4707
  "taskId": {
4423
4708
  "type": "integer",
4424
4709
  "minimum": 1
4425
4710
  }
4426
4711
  },
4427
- "required": ["taskId"],
4712
+ "required": ["projectId", "taskId"],
4428
4713
  "additionalProperties": false
4429
4714
  }
4430
4715
  },
@@ -4437,6 +4722,11 @@
4437
4722
  "inputSchema": {
4438
4723
  "type": "object",
4439
4724
  "properties": {
4725
+ "projectId": {
4726
+ "type": "integer",
4727
+ "minimum": 1,
4728
+ "description": "GEO 项目 id,来自 projects.list"
4729
+ },
4440
4730
  "taskId": {
4441
4731
  "type": "integer",
4442
4732
  "minimum": 1
@@ -4464,7 +4754,7 @@
4464
4754
  "description": "封面页 id,须是该任务下已有的一个页面 id"
4465
4755
  }
4466
4756
  },
4467
- "required": ["taskId", "publishTitle"],
4757
+ "required": ["projectId", "taskId", "publishTitle"],
4468
4758
  "additionalProperties": false
4469
4759
  }
4470
4760
  }