gangtise-openapi-cli 0.40.1 → 0.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +152 -12
- package/dist/src/cli.js +229 -4
- package/dist/src/core/client.js +33 -8
- package/dist/src/core/driveUpload.js +29 -0
- package/dist/src/core/endpoints.js +226 -4
- package/dist/src/core/errors.js +5 -2
- package/dist/src/core/normalize.js +1 -1
- package/dist/src/version.js +1 -1
- package/gangtise-openapi/SKILL.md +67 -16
- package/gangtise-openapi/references/commands/alternative.md +14 -7
- package/gangtise-openapi/references/commands/bond.md +132 -0
- package/gangtise-openapi/references/commands/insight.md +33 -5
- package/gangtise-openapi/references/commands/reference-and-lookup.md +10 -1
- package/gangtise-openapi/references/commands/tool.md +35 -0
- package/gangtise-openapi/references/commands/vault.md +27 -1
- package/gangtise-openapi/references/errors.md +3 -3
- package/gangtise-openapi/references/examples.md +13 -9
- package/gangtise-openapi/references/response-schema.md +18 -4
- package/package.json +1 -1
|
@@ -21,11 +21,26 @@ const ENDPOINT_DEFS = {
|
|
|
21
21
|
description: "List meeting orgs from local docs",
|
|
22
22
|
},
|
|
23
23
|
"insight.opinion.list": {
|
|
24
|
+
method: "POST",
|
|
25
|
+
path: "/application/open-insight/chief-opinion/v2/getList",
|
|
26
|
+
kind: "json",
|
|
27
|
+
description: "List domestic institution chief opinions (brief only; body via detail)",
|
|
28
|
+
pagination: { enabled: true, maxPageSize: 50 },
|
|
29
|
+
},
|
|
30
|
+
"insight.opinion.list-with-content": {
|
|
24
31
|
method: "POST",
|
|
25
32
|
path: "/application/open-insight/chief-opinion/getList",
|
|
26
33
|
kind: "json",
|
|
27
|
-
description: "List domestic institution chief opinions",
|
|
34
|
+
description: "List domestic institution chief opinions with the full body (v1 list)",
|
|
28
35
|
pagination: { enabled: true, maxPageSize: 50 },
|
|
36
|
+
retry: "no-replay",
|
|
37
|
+
},
|
|
38
|
+
"insight.opinion.detail": {
|
|
39
|
+
method: "POST",
|
|
40
|
+
path: "/application/open-insight/chief-opinion/getDetail",
|
|
41
|
+
kind: "json",
|
|
42
|
+
description: "Get domestic chief opinion bodies by ID (max 20 IDs per call)",
|
|
43
|
+
retry: "no-replay",
|
|
29
44
|
},
|
|
30
45
|
"insight.summary.list": {
|
|
31
46
|
method: "POST",
|
|
@@ -163,11 +178,26 @@ const ENDPOINT_DEFS = {
|
|
|
163
178
|
description: "Download US announcement file",
|
|
164
179
|
},
|
|
165
180
|
"insight.foreign-opinion.list": {
|
|
181
|
+
method: "POST",
|
|
182
|
+
path: "/application/open-insight/foreign-opinion/v2/getList",
|
|
183
|
+
kind: "json",
|
|
184
|
+
description: "List foreign institution opinions (brief only; body via detail)",
|
|
185
|
+
pagination: { enabled: true, maxPageSize: 50 },
|
|
186
|
+
},
|
|
187
|
+
"insight.foreign-opinion.list-with-content": {
|
|
166
188
|
method: "POST",
|
|
167
189
|
path: "/application/open-insight/foreign-opinion/getList",
|
|
168
190
|
kind: "json",
|
|
169
|
-
description: "List foreign institution opinions",
|
|
191
|
+
description: "List foreign institution opinions with the full body (v1 list)",
|
|
170
192
|
pagination: { enabled: true, maxPageSize: 50 },
|
|
193
|
+
retry: "no-replay",
|
|
194
|
+
},
|
|
195
|
+
"insight.foreign-opinion.detail": {
|
|
196
|
+
method: "POST",
|
|
197
|
+
path: "/application/open-insight/foreign-opinion/getDetail",
|
|
198
|
+
kind: "json",
|
|
199
|
+
description: "Get foreign opinion bodies by ID (max 20 IDs per call)",
|
|
200
|
+
retry: "no-replay",
|
|
171
201
|
},
|
|
172
202
|
"insight.independent-opinion.list": {
|
|
173
203
|
method: "POST",
|
|
@@ -208,6 +238,15 @@ const ENDPOINT_DEFS = {
|
|
|
208
238
|
kind: "json",
|
|
209
239
|
description: "Search research report images by keyword (returns chunkId + metadata)",
|
|
210
240
|
},
|
|
241
|
+
"insight.highlight.list": {
|
|
242
|
+
method: "POST",
|
|
243
|
+
path: "/application/open-insight/summary/highlight/getList",
|
|
244
|
+
kind: "json",
|
|
245
|
+
description: "List meeting highlights (核心要点信息流; content is an HTML fragment)",
|
|
246
|
+
pagination: { enabled: true, maxPageSize: 50, maxWindow: 10000 },
|
|
247
|
+
retry: "no-replay",
|
|
248
|
+
expects: "list",
|
|
249
|
+
},
|
|
211
250
|
"insight.report-image.download": {
|
|
212
251
|
method: "GET",
|
|
213
252
|
path: "/application/open-insight/report-image/download/file",
|
|
@@ -407,6 +446,102 @@ const ENDPOINT_DEFS = {
|
|
|
407
446
|
kind: "json",
|
|
408
447
|
description: "Query earning forecast (consensus estimates)",
|
|
409
448
|
},
|
|
449
|
+
"bond.basic-info": {
|
|
450
|
+
method: "POST",
|
|
451
|
+
path: "/application/open-fundamental/bond/basic-info",
|
|
452
|
+
kind: "json",
|
|
453
|
+
description: "Query bond static profiles (issuance, term, coupon, rating, options)",
|
|
454
|
+
retry: "no-replay",
|
|
455
|
+
expects: "list",
|
|
456
|
+
},
|
|
457
|
+
"bond.issuer-info": {
|
|
458
|
+
method: "POST",
|
|
459
|
+
path: "/application/open-fundamental/bond/issuer-info",
|
|
460
|
+
kind: "json",
|
|
461
|
+
description: "Query bond issuer profiles (by bond code or issuer name)",
|
|
462
|
+
retry: "no-replay",
|
|
463
|
+
expects: "list",
|
|
464
|
+
},
|
|
465
|
+
"bond.daily-quote": {
|
|
466
|
+
method: "POST",
|
|
467
|
+
path: "/application/open-quote/bond/daily-quote-exchange-cfets",
|
|
468
|
+
kind: "json",
|
|
469
|
+
description: "Query bond daily close quotes (exchange + CFETS; dirty/clean price, YTM, duration)",
|
|
470
|
+
retry: "no-replay",
|
|
471
|
+
expects: "list",
|
|
472
|
+
},
|
|
473
|
+
"bond.valuation": {
|
|
474
|
+
method: "POST",
|
|
475
|
+
path: "/application/open-fundamental/bond/valuation-shclearing",
|
|
476
|
+
kind: "json",
|
|
477
|
+
description: "Query Shanghai Clearing House bond valuations (price, yield, risk measures)",
|
|
478
|
+
retry: "no-replay",
|
|
479
|
+
expects: "list",
|
|
480
|
+
},
|
|
481
|
+
"bond.cash-flow": {
|
|
482
|
+
method: "POST",
|
|
483
|
+
path: "/application/open-fundamental/bond/cash-flow",
|
|
484
|
+
kind: "json",
|
|
485
|
+
description: "Query bond interest payment and redemption schedule",
|
|
486
|
+
retry: "no-replay",
|
|
487
|
+
expects: "list",
|
|
488
|
+
},
|
|
489
|
+
"bond.announcement": {
|
|
490
|
+
method: "POST",
|
|
491
|
+
path: "/application/open-fundamental/bond/announcement",
|
|
492
|
+
kind: "json",
|
|
493
|
+
description: "Query bond announcements (pageNo/pageSize; the only paged endpoint of the family)",
|
|
494
|
+
retry: "no-replay",
|
|
495
|
+
expects: "list",
|
|
496
|
+
},
|
|
497
|
+
"bond.issuance-detail": {
|
|
498
|
+
method: "POST",
|
|
499
|
+
path: "/application/open-fundamental/bond/issuance-detail",
|
|
500
|
+
kind: "json",
|
|
501
|
+
description: "Query bond issuance and re-issuance records (bidding, pricing, cover ratios)",
|
|
502
|
+
retry: "no-replay",
|
|
503
|
+
expects: "list",
|
|
504
|
+
},
|
|
505
|
+
"bond.rating-overview": {
|
|
506
|
+
method: "POST",
|
|
507
|
+
path: "/application/open-fundamental/bond/rating-overview",
|
|
508
|
+
kind: "json",
|
|
509
|
+
description: "Query bond / issuer / guarantor ratings side by side (max 10 bonds per call)",
|
|
510
|
+
retry: "no-replay",
|
|
511
|
+
expects: "list",
|
|
512
|
+
},
|
|
513
|
+
"bond.rating-change": {
|
|
514
|
+
method: "POST",
|
|
515
|
+
path: "/application/open-fundamental/bond/rating-change",
|
|
516
|
+
kind: "json",
|
|
517
|
+
description: "Query bond rating change history (max 10 bonds per call)",
|
|
518
|
+
retry: "no-replay",
|
|
519
|
+
expects: "list",
|
|
520
|
+
},
|
|
521
|
+
"bond.issuer-rating-change": {
|
|
522
|
+
method: "POST",
|
|
523
|
+
path: "/application/open-fundamental/bond/issuer-rating-change",
|
|
524
|
+
kind: "json",
|
|
525
|
+
description: "Query issuer rating change history (by bond code or issuer name)",
|
|
526
|
+
retry: "no-replay",
|
|
527
|
+
expects: "list",
|
|
528
|
+
},
|
|
529
|
+
"bond.issuance-plan": {
|
|
530
|
+
method: "POST",
|
|
531
|
+
path: "/application/open-fundamental/bond/issuance-plan",
|
|
532
|
+
kind: "json",
|
|
533
|
+
description: "Query the rate-bond issuance calendar over a date range",
|
|
534
|
+
retry: "no-replay",
|
|
535
|
+
expects: "list",
|
|
536
|
+
},
|
|
537
|
+
"bond.exercise-notice": {
|
|
538
|
+
method: "POST",
|
|
539
|
+
path: "/application/open-fundamental/bond/exercise-notice",
|
|
540
|
+
kind: "json",
|
|
541
|
+
description: "Query put/call exercise schedules and results for option-embedded bonds",
|
|
542
|
+
retry: "no-replay",
|
|
543
|
+
expects: "list",
|
|
544
|
+
},
|
|
410
545
|
"ai.stock-summary.list": {
|
|
411
546
|
method: "POST",
|
|
412
547
|
path: "/application/open-ai/stock-summary/getList",
|
|
@@ -536,6 +671,71 @@ const ENDPOINT_DEFS = {
|
|
|
536
671
|
kind: "download",
|
|
537
672
|
description: "Download vault drive file",
|
|
538
673
|
},
|
|
674
|
+
"vault.drive.upload": {
|
|
675
|
+
method: "POST",
|
|
676
|
+
path: "/application/open-vault/drive/uploadFile",
|
|
677
|
+
kind: "upload",
|
|
678
|
+
description: "Upload a file to the AI drive (multipart; max 100MB)",
|
|
679
|
+
timeoutMs: 300_000,
|
|
680
|
+
retry: "no-replay",
|
|
681
|
+
},
|
|
682
|
+
"vault.drive.folder-list": {
|
|
683
|
+
method: "POST",
|
|
684
|
+
path: "/application/open-vault/drive/getFolderList",
|
|
685
|
+
kind: "json",
|
|
686
|
+
description: "List the direct subfolders and files of a drive folder",
|
|
687
|
+
},
|
|
688
|
+
"vault.drive.create-folder": {
|
|
689
|
+
method: "POST",
|
|
690
|
+
path: "/application/open-vault/drive/createFolder",
|
|
691
|
+
kind: "json",
|
|
692
|
+
description: "Create a drive folder",
|
|
693
|
+
retry: "no-replay",
|
|
694
|
+
},
|
|
695
|
+
"vault.drive.rename": {
|
|
696
|
+
method: "POST",
|
|
697
|
+
path: "/application/open-vault/drive/rename",
|
|
698
|
+
kind: "json",
|
|
699
|
+
description: "Rename a drive file or folder",
|
|
700
|
+
},
|
|
701
|
+
"vault.drive.delete-file": {
|
|
702
|
+
method: "POST",
|
|
703
|
+
path: "/application/open-vault/drive/deleteFile",
|
|
704
|
+
kind: "json",
|
|
705
|
+
destructive: { warning: "删除的云盘文件无法恢复;先用 'gangtise vault drive-folder-list' 或 'drive-list' 核对文件 ID 对应的文件名。" },
|
|
706
|
+
itemFailures: true,
|
|
707
|
+
description: "Delete drive files",
|
|
708
|
+
retry: "no-replay",
|
|
709
|
+
},
|
|
710
|
+
"vault.drive.delete-folder": {
|
|
711
|
+
method: "POST",
|
|
712
|
+
path: "/application/open-vault/drive/deleteFolder",
|
|
713
|
+
kind: "json",
|
|
714
|
+
destructive: { warning: "删除文件夹会连同其中全部子文件夹与文件一起删除,且无法恢复;先用 'gangtise vault drive-folder-list --parent-id <id>' 看清里面有什么。" },
|
|
715
|
+
description: "Delete a drive folder and everything inside it",
|
|
716
|
+
retry: "no-replay",
|
|
717
|
+
},
|
|
718
|
+
"vault.drive.move-file": {
|
|
719
|
+
method: "POST",
|
|
720
|
+
path: "/application/open-vault/drive/moveFile",
|
|
721
|
+
kind: "json",
|
|
722
|
+
itemFailures: true,
|
|
723
|
+
description: "Move drive files to a folder (same space only)",
|
|
724
|
+
},
|
|
725
|
+
"vault.drive.move-folder": {
|
|
726
|
+
method: "POST",
|
|
727
|
+
path: "/application/open-vault/drive/moveFolder",
|
|
728
|
+
kind: "json",
|
|
729
|
+
description: "Move a drive folder under another folder (same space only)",
|
|
730
|
+
},
|
|
731
|
+
"vault.drive.copy": {
|
|
732
|
+
method: "POST",
|
|
733
|
+
path: "/application/open-vault/drive/copy",
|
|
734
|
+
kind: "json",
|
|
735
|
+
itemFailures: true,
|
|
736
|
+
description: "Copy drive files to the OTHER space (my drive <-> tenant drive)",
|
|
737
|
+
retry: "no-replay",
|
|
738
|
+
},
|
|
539
739
|
"vault.record.list": {
|
|
540
740
|
method: "POST",
|
|
541
741
|
path: "/application/open-vault/record/getList",
|
|
@@ -638,18 +838,32 @@ const ENDPOINT_DEFS = {
|
|
|
638
838
|
},
|
|
639
839
|
"alternative.concept-info": {
|
|
640
840
|
method: "POST",
|
|
641
|
-
path: "/application/open-alternative/concept/info",
|
|
841
|
+
path: "/application/open-alternative/concept/v2/info",
|
|
642
842
|
kind: "json",
|
|
643
843
|
description: "Query latest concept (theme index) profile by conceptId",
|
|
644
844
|
retry: "no-replay",
|
|
645
845
|
},
|
|
846
|
+
"alternative.concept-info-full": {
|
|
847
|
+
method: "POST",
|
|
848
|
+
path: "/application/open-alternative/concept/info",
|
|
849
|
+
kind: "json",
|
|
850
|
+
description: "Query latest concept profile incl. catalyst events (keyEvents; v1)",
|
|
851
|
+
retry: "no-replay",
|
|
852
|
+
},
|
|
646
853
|
"alternative.concept-securities": {
|
|
647
854
|
method: "POST",
|
|
648
|
-
path: "/application/open-alternative/concept/securities",
|
|
855
|
+
path: "/application/open-alternative/concept/v2/securities",
|
|
649
856
|
kind: "json",
|
|
650
857
|
description: "Query concept (theme index) constituent securities, grouped",
|
|
651
858
|
retry: "no-replay",
|
|
652
859
|
},
|
|
860
|
+
"alternative.concept-securities-full": {
|
|
861
|
+
method: "POST",
|
|
862
|
+
path: "/application/open-alternative/concept/securities",
|
|
863
|
+
kind: "json",
|
|
864
|
+
description: "Query concept constituents incl. isKey / inclusionReason (v1)",
|
|
865
|
+
retry: "no-replay",
|
|
866
|
+
},
|
|
653
867
|
"indicator.search": {
|
|
654
868
|
method: "POST",
|
|
655
869
|
path: "/application/open-indicator/EDE/search",
|
|
@@ -693,6 +907,14 @@ const ENDPOINT_DEFS = {
|
|
|
693
907
|
kind: "download",
|
|
694
908
|
description: "Fetch a file-parse result ZIP by taskId (140001 = still generating)",
|
|
695
909
|
},
|
|
910
|
+
"tool.web-search": {
|
|
911
|
+
method: "POST",
|
|
912
|
+
path: "/application/open-tool/web-search/search",
|
|
913
|
+
kind: "json",
|
|
914
|
+
description: "Search the public web for research (tiered sources, optional page content)",
|
|
915
|
+
retry: "no-replay",
|
|
916
|
+
expects: "list",
|
|
917
|
+
},
|
|
696
918
|
};
|
|
697
919
|
export const ENDPOINTS = Object.fromEntries(Object.entries(ENDPOINT_DEFS).map(([key, def]) => [key, { key, ...def }]));
|
|
698
920
|
export function listEndpoints() {
|
package/dist/src/core/errors.js
CHANGED
|
@@ -54,12 +54,12 @@ const ERROR_HINTS = {
|
|
|
54
54
|
"110003": "查询时间超出本账号的数据权限范围——把日期移进范围内(整个区间都早于下界时缩短窗口无用),或联系客户经理开通更长历史。",
|
|
55
55
|
"120001": "用 `gangtise reference securities-search` 确认代码与后缀(如 600519.SH / 00700.HK)。",
|
|
56
56
|
"130001": "未找到数据——先核对查询条件;EDE 指标端点此码也可能是未开通该指标权限,仍失败联系客户经理。",
|
|
57
|
-
"130002": "
|
|
57
|
+
"130002": "确认 ID 有效且本账号可见(云盘的文件 / 文件夹 ID 用 `vault drive-folder-list` 核对;删除类命令收到此码可能是目标已被删掉);下载类还需检查 --file-type 取值是否合法。",
|
|
58
58
|
"130003": "资源未生成或该条记录未附带文件——换一条有附件的记录(列表里 hasAttachment/hasFile 为 true 的),或稍后再试。",
|
|
59
59
|
"130004": "下载 ID 需为数字,检查该命令的 --*-id 参数是否传对。",
|
|
60
60
|
"130005": "对照命令 --help 检查 --file-type / --content-type 取值。",
|
|
61
61
|
"140001": "稍后用对应 *-check 命令查询。",
|
|
62
|
-
"140002": "
|
|
62
|
+
"140002": "终态失败,立即重试同一请求不会变。msg 指向参数(EDE 的指标参数名/枚举以 indicator search 的 parameterList 为准)就改参数重新提交;msg 是「业务处理失败」则与参数无关,稍后再试,持续出现请带 trace 报障。",
|
|
63
63
|
"210001": "换一篇,或改用 list 取正文摘要。",
|
|
64
64
|
"220001": "改用 list 取正文摘要。",
|
|
65
65
|
"230001": "只有自己上传的文件可下载。",
|
|
@@ -67,6 +67,9 @@ const ERROR_HINTS = {
|
|
|
67
67
|
"230003": "股票池数量已达账号上限(30 个)——先用 `vault stock-pool-delete` 删掉不用的池再建。",
|
|
68
68
|
"230006": "池名与该账号已有的池重复——先用 `vault stock-pool-list` 看现有名称,换一个再建/改名。",
|
|
69
69
|
"230007": "池名超过 10 个字符(按字符计,中文算 1 个)——缩短后重试。终端里建的老池可以更长,OpenAPI 建池不行。",
|
|
70
|
+
"230004": "云盘文件 / 文件夹名称超过 200 个字符(按 UTF-16 计,中文算 1、emoji 算 2)——缩短 --name / --title 后重试。",
|
|
71
|
+
"230005": "文件夹不能移到自身、自己的子文件夹或另一个空间——换一个同空间、不在其下级的目标文件夹。",
|
|
72
|
+
"230008": "试用账号当日累计上传已超过 500MB——次日再传,或联系客户经理。",
|
|
70
73
|
"240001": "换更早的 --period(如 2025q3 → 2025interim)。",
|
|
71
74
|
"240002": "改述后重新提交。",
|
|
72
75
|
"240003": "对照命令 --help 检查取值。",
|
|
@@ -46,7 +46,7 @@ export function flagFailedItems(data, label) {
|
|
|
46
46
|
if (!item || typeof item !== "object")
|
|
47
47
|
return String(item);
|
|
48
48
|
const entry = item;
|
|
49
|
-
const id = entry.securityCode ?? entry.poolId ?? JSON.stringify(entry);
|
|
49
|
+
const id = entry.securityCode ?? entry.poolId ?? entry.fileId ?? JSON.stringify(entry);
|
|
50
50
|
return entry.failReason ? `${String(id)}(${String(entry.failReason)})` : String(id);
|
|
51
51
|
}).join("、");
|
|
52
52
|
process.stderr.write(`[gangtise] warning: ${label} — ${rec.failList.length} item(s) failed while the request itself succeeded: ${detail}. Result marked partial (exit 3).\n`);
|
package/dist/src/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const CLI_VERSION = "0.
|
|
1
|
+
export const CLI_VERSION = "0.41.0";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gangtise-openapi
|
|
3
|
-
version: "0.
|
|
3
|
+
version: "0.41.0"
|
|
4
4
|
description: |-
|
|
5
5
|
通过 gangtise CLI 直接调用 Gangtise OpenAPI,拉取投研原始数据、批量导出、下载文件、调用 AI 能力。
|
|
6
6
|
|
|
@@ -32,7 +32,7 @@ description: |-
|
|
|
32
32
|
6.1.1. 🔴 **`quote day-kline` 一个命令覆盖 A 股 / 港股 / 美股 / 沪深 ETF / 各类指数(含 20 个全球指数)**,可混着传代码。**全市场关键字是 `aShares` / `hkStocks` / `usStocks`,必须单独传**(不能与代码或另一个关键字混填;`--security all` 会被 CLI 拒并提示改用哪个)。**关键字只覆盖个股**:ETF 与各类指数(`.SH`/`.SZ`/`.BJ` 交易所指数、`.GT` 概念、`.CI`/`.SWI` 行业、`SPX.SPI` 等全球指数,清单见 `references/commands/quote.md`)须逐个传代码。全球指数 realtime 的 `volume` / `amount` / `amplitude` 与分钟 K 的 `volume` / `amount` 为 `null`,日 K 只有 `amount` 为 `null`;`tradeTime` 是交易所当地时间。`day-kline-hk` / `day-kline-us` / `index-day-kline` 已下线(接口仍可调、仍用 `all`),**新代码别用**——它们不校验证券代码,传错返空而不报错。
|
|
33
33
|
6.2. **多标的日 K**:显式传多个 `--security` 时,「证券数 × 交易日数」不超过 `--limit`(默认 6000 / 上限 10000)走单请求;超过则 CLI 自动逐只请求并按传入顺序合并,每只各自受 `--limit` 约束,撞上的标 `partial` + `truncatedSecurities`、退出码 3。单只超 10000 行仍要缩日期区间分批。
|
|
34
34
|
7. **CLI 已内置自动化,不要手动复刻**:
|
|
35
|
-
- 翻页 → 首页拿 total 后剩余页并发拉取;🔴 **全量拉取结束会多探一行验证 `total` 是不是服务端封顶**(`
|
|
35
|
+
- 翻页 → 首页拿 total 后剩余页并发拉取;🔴 **全量拉取结束会多探一行验证 `total` 是不是服务端封顶**(`total` 若只是服务端封顶值,按它翻完会停在上限、看起来却像全量)——探到就标 `partial` + `totalCapped` + 退出 3,**这时导出的是截断结果,要缩小时间范围分片拉**
|
|
36
36
|
- K 线全市场关键字(`aShares` / `hkStocks` / `usStocks`;旧命令 `all`)跨日期 → 自动按日切片并合并,粒度按各市场单日行数定(A 1 天 / 港 2 天 / 美 1 天)
|
|
37
37
|
- 5xx / `429` / 网络错误 / `999999` → 自动指数退避重试(🔴 贵档端点例外:仅连接失败 / 429 / token 自愈重试,5xx/超时不重放防重复扣分;`indicator` 端点对 `999999` 不重试)
|
|
38
38
|
- Token 失效(`0000001008` / `999002`,含已废弃的 `8000014`/`8000015`)→ 自动重新登录并重试一次;凭证错 `999011` → **不重试**(AK/SK 不对不会自己好),查环境变量
|
|
@@ -53,10 +53,14 @@ description: |-
|
|
|
53
53
|
- `gangtise auth status` 未登录 → 提示配置 AK/SK 并中止
|
|
54
54
|
- 多个命令同时匹配 → 复述理解让用户挑(如"搜索研报" → research list 还是 knowledge-batch?)
|
|
55
55
|
- 用户说"全部 / 全量 / 全市场" → 确认量级再拉:省略 `--size` 就是拉全量(自动翻页,上限 1000 页);先 `--size 1` 看 stderr 的 `Total: N` 再决定(探量这步别加 `--format json`——json 下不打 `Total` 行);全市场/跨一年分片等大批量可 `GANGTISE_PAGE_CONCURRENCY=10` 提速(默认 5,同时管翻页与 K 线分片)
|
|
56
|
-
- **高积分操作先确认**:任何 50 积分/次及以上、或"按条 × 大批量"(如 `stock-summary` 按代码批量数千只、`opinion`
|
|
56
|
+
- **高积分操作先确认**:任何 50 积分/次及以上、或"按条 × 大批量"(如 `stock-summary` 按代码批量数千只、`opinion detail` / `--with-content` 批量取正文、`concept-info --full` 500/次)→ 先估总积分告知用户再执行(单价见下「积分计费速查」)
|
|
57
57
|
- 下载**必选**格式未定才问:`independent-opinion --file-type`(必选)、`vault record/my-conference --content-type`(record 三种 original/asr/summary、my-conference 两种 asr/summary);其余 download 有默认(多为 `1`=PDF/原始),用户没提格式就用默认、不必问
|
|
58
58
|
- list→download 用户没指定具体文件 → 展示前 10 条让用户挑
|
|
59
|
-
- 🔴
|
|
59
|
+
- 🔴 **改动账号数据的命令**(其余命令都只读):
|
|
60
|
+
- **自选股股票池**:`vault stock-pool-create` / `stock-pool-rename` / `stock-pool-add-stock` / `stock-pool-remove-stock` / `stock-pool-delete`
|
|
61
|
+
- **云盘**:`vault drive-upload` / `drive-create-folder` / `drive-rename` / `drive-move-file` / `drive-move-folder` / `drive-copy` / `drive-delete-file` / `drive-delete-folder`
|
|
62
|
+
- 用户没有明确要求「建池 / 改名 / 加自选 / 删自选 / 删池」「上传 / 建文件夹 / 改名 / 移动 / 复制 / 删除」时**不要调用**;要调用时先复述「对哪个池或文件夹、做什么、涉及哪几项」再执行。**租户云盘(`--space-type 2`)对整个租户可见**,往里上传、复制,或在里面删除前要特别确认
|
|
63
|
+
- `stock-pool-delete` / `drive-delete-file` / `drive-delete-folder` 不可恢复(删池连带清掉池内全部关注关系;删文件夹连同其中全部子文件夹与文件),CLI 因此要求显式 `--yes`——**这个 `--yes` 必须是用户点头之后才加,看到「加上 --yes」的报错不要自动补上重跑**
|
|
60
64
|
|
|
61
65
|
🟡 **自行判断**:
|
|
62
66
|
- 公司名 → 先速查表,否则 `reference securities-search`
|
|
@@ -71,17 +75,20 @@ description: |-
|
|
|
71
75
|
|
|
72
76
|
"免费"=0 积分;**只列单价**,数据范围见下一节。
|
|
73
77
|
|
|
74
|
-
- **免费**:所有 `quote` 行情、`fundamental` 报表/主营/估值/股东(**盈利预测除外**)、`reference`/`constant` 查询(含 `official-account-search`)、`alternative edb-search`、`vault`(record/wechat/股票池/drive/AI
|
|
78
|
+
- **免费**:所有 `quote` 行情、`fundamental` 报表/主营/估值/股东(**盈利预测除外**)、`reference`/`constant` 查询(含 `official-account-search`)、`alternative edb-search`、`vault`(record/wechat/股票池/drive/AI云盘,含云盘上传与目录管理)、`insight report-image list`
|
|
75
79
|
- **0.1/条 list**:research / foreign-report / official-account / announcement(A/港/美) / summary / qa / performance-calendar 的 list、`vault my-conference-list`;`insight report-image download` 0.1/张
|
|
76
|
-
- **按条(观点/含详情类 list)**:independent-opinion list 与 `ai security-clue` 5;roadshow/site-visit/strategy/forum list 20
|
|
80
|
+
- **按条(观点/含详情类 list)**:independent-opinion list 与 `ai security-clue` 5;roadshow/site-visit/strategy/forum list 20;**opinion / foreign-opinion list 1(只含摘要 `brief`)**,要正文用 `detail` 30/条或 `list --with-content` 30/条;`fundamental earning-forecast` 0.5;`ai stock-summary` 3(无看点的证券不返回也不扣);`alternative edb-data` 30
|
|
77
81
|
- **各 download(/篇)**:announcement / official-account / research 10;announcement-hk / announcement-us 20;independent-opinion 30;summary / foreign-report / my-conference 50;`performance-calendar download` A 股 10 / 港美股 20
|
|
82
|
+
- **0.4 的 `bond` 系**:`bond` 全部命令 **0.4/次**(按次,与返回行数无关),三个例外按量计:`rating-overview` 0.4/**条**、`rating-change` 0.4/**只有数据的债券**、`issuer-rating-change` 0.4/**个发行人**
|
|
83
|
+
- **`tool web-search` 1/次**(按次,与返回条数、是否带 `--include-content` 无关;零结果与报错不扣)
|
|
84
|
+
- 🔴 **`insight highlight list` 5/条**——**按返回条数计**,`--size 20` 的一页 = 100 积分。别省略 `--size` 直接拉全量(全量是数千条)
|
|
78
85
|
- **按页**:`tool file-parse` 0.8/页,**提交(`--file`)时按实际页数一次性扣**,取结果(`file-parse-check`)免费——50 页 PDF = 40 积分,别重复提交同一文件
|
|
79
86
|
- 🔴 **按次贵**:`ai knowledge-batch` 10、`management-discuss-*` 10;AI Agent(`one-pager` / `investment-logic` / `peer-comparison` / `research-outline` / `earnings-review` / `viewpoint-debate` / `theme-tracking`)**50/次**
|
|
80
87
|
- 🔴 **`ai hot-topic` 50/篇,按返回条数计**(不是按调用次数)。📌 **一「篇」= 一整份报告**(一份早报 / 午报 / 盘中快报 / 晚报),**不是报告里的一条话题**——一份报告通常包含多条热点话题。所以 `--size 20` 的一页 = 最多 20 份报告 = 1000 积分,**先用 `--start-date`/`--end-date` + `--category` 收窄再拉**,别省略 `--size` 直接全量。**可查的历史范围跟账号权限走**(试用档是滚动的「当前 −1 个月」,正式/定制档更长)——超出范围的日期返回空结果而不是报错,拿到空先想想是不是撞了权限窗口
|
|
81
|
-
-
|
|
82
|
-
- ✅ **按篇 / 按条计费的接口,没查到内容就不扣分**(空结果 = 0 积分):各 download(`pamirs-summary` 除外,见 ②)、`ai hot-topic`(50/篇)、`ai stock-summary`(3/条,无看点总结的个股不进返回列表也不计费)。**所以「先小范围试探再放大」是安全的**——先用窄条件确认能查到东西,再扩范围。⚠️ **两类不适用**:① **按次计费的**——`ai knowledge-batch` / `management-discuss-*`、AI Agent 那批 50/次、`alternative concept-info` / `concept-securities` 500
|
|
88
|
+
- **题材**:`alternative concept-info` / `concept-securities` **50/次**;🔴 加 `--full`(催化事件 / 重点个股标识 / 纳入理由)走旧版 **500/次**,不需要这几列就别加
|
|
89
|
+
- ✅ **按篇 / 按条计费的接口,没查到内容就不扣分**(空结果 = 0 积分):各 download(`pamirs-summary` 除外,见 ②)、`ai hot-topic`(50/篇)、`ai stock-summary`(3/条,无看点总结的个股不进返回列表也不计费)。**所以「先小范围试探再放大」是安全的**——先用窄条件确认能查到东西,再扩范围。⚠️ **两类不适用**:① **按次计费的**——`ai knowledge-batch` / `management-discuss-*`、AI Agent 那批 50/次、`alternative concept-info` / `concept-securities` 50/次(`--full` 500/次),不管有没有内容都扣,超时报错也可能已经扣过;② **单价未公布的**——`pamirs-summary`(见下),别据此假定
|
|
83
90
|
- ⚠️ **同参数重复调用不免费**:按次计费的那批无缓存命中豁免(`one-pager` 等生成类重复调用每次扣分,即使秒回缓存内容);**按篇/按条的也一样**——重拉同一批 `hot-topic` 就是按条数再计一次费。生成类与列表结果拿到后自行留存复用,别为「刷新」重调
|
|
84
|
-
- ⚠️ **这些端点超时/5xx 不自动重放**(共
|
|
91
|
+
- ⚠️ **这些端点超时/5xx 不自动重放**(共 44 个:AI Agent 那批 + `ai knowledge-batch` / `management-discuss-*` / `hot-topic`、`alternative concept-info`·`concept-securities`(含 `--full`)、50/篇 的 `summary`·`foreign-report`·`my-conference` download 与同档处理的 `pamirs-summary` download、`tool file-parse` 提交、**`bond` 全部命令**与 `tool web-search`(按次计费)、`insight highlight list`、观点 `detail` 与 `list --with-content`(按条计费),以及**不计分**的 `vault stock-pool-create` 与云盘 `drive-upload` / `drive-create-folder` / `drive-copy` / `drive-delete-file` / `drive-delete-folder`)。仅连接失败、429 与 token 自愈会重试。**贵档那批的理由是重放会重复扣分**——服务端可能已经执行并计费,重发按次计费的会再扣一次,重发按篇/按条计费的会把**已交付的行**再计一次;两种都亏。**不计分的那几个是重放有副作用或会把成功报成失败**——股票池名不允许重复,重发一个其实已经建成的请求回来 `230006 股票池名称重复`;云盘允许同名,重发上传 / 新建 / 复制会多出一份;重发一个其实已经删掉的删除,回来的是「文件不存在」或 `130002`
|
|
85
92
|
|
|
86
93
|
<!-- no-replay-endpoints
|
|
87
94
|
上面那句点名的「不重放」端点,完整清单如下(endpoint key,与 `gangtise raw list` 一致):
|
|
@@ -97,11 +104,36 @@ ai.research-outline
|
|
|
97
104
|
ai.theme-tracking
|
|
98
105
|
ai.viewpoint-debate.get-id
|
|
99
106
|
alternative.concept-info
|
|
107
|
+
alternative.concept-info-full
|
|
100
108
|
alternative.concept-securities
|
|
109
|
+
alternative.concept-securities-full
|
|
110
|
+
bond.announcement
|
|
111
|
+
bond.basic-info
|
|
112
|
+
bond.cash-flow
|
|
113
|
+
bond.daily-quote
|
|
114
|
+
bond.exercise-notice
|
|
115
|
+
bond.issuance-detail
|
|
116
|
+
bond.issuance-plan
|
|
117
|
+
bond.issuer-info
|
|
118
|
+
bond.issuer-rating-change
|
|
119
|
+
bond.rating-change
|
|
120
|
+
bond.rating-overview
|
|
121
|
+
bond.valuation
|
|
122
|
+
insight.foreign-opinion.detail
|
|
123
|
+
insight.foreign-opinion.list-with-content
|
|
101
124
|
insight.foreign-report.download
|
|
125
|
+
insight.highlight.list
|
|
126
|
+
insight.opinion.detail
|
|
127
|
+
insight.opinion.list-with-content
|
|
102
128
|
insight.pamirs-summary.download
|
|
103
129
|
insight.summary.download
|
|
104
130
|
tool.file-parse.submit
|
|
131
|
+
tool.web-search
|
|
132
|
+
vault.drive.copy
|
|
133
|
+
vault.drive.create-folder
|
|
134
|
+
vault.drive.delete-file
|
|
135
|
+
vault.drive.delete-folder
|
|
136
|
+
vault.drive.upload
|
|
105
137
|
vault.my-conference.download
|
|
106
138
|
vault.stock-pool.create
|
|
107
139
|
-->
|
|
@@ -116,6 +148,9 @@ vault.stock-pool.create
|
|
|
116
148
|
| 命令组 | 可回溯 |
|
|
117
149
|
|--------|--------|
|
|
118
150
|
| `quote` 行情 / `fundamental` 财报、主营、估值、股东 / `indicator`(EDE) | 前溯 **5 年** |
|
|
151
|
+
| `bond daily-quote` / `bond valuation` / `bond issuance-plan` | 前溯 **5 年**(试用账号 3 年) |
|
|
152
|
+
| `bond` 其余命令 | **不限**(返回最新静态资料或全部历史记录) |
|
|
153
|
+
| `insight highlight list` 会议线索 | 前溯 **3 个月**(试用账号 1 个月) |
|
|
119
154
|
| `ai security-clue` 投研线索 | 前溯 **1 个月** |
|
|
120
155
|
| 主题 / 热点 / QA / 日程(路演·调研·策略会·论坛)/ 纪要 / 观点 / 研报 / 公众号 | 前溯 **3 个月** |
|
|
121
156
|
| 管理层讨论 / A·港·美股公告 / `alternative edb-*` 行业指标 | 前溯 **3 年** |
|
|
@@ -149,8 +184,8 @@ vault.stock-pool.create
|
|
|
149
184
|
|---------|------|
|
|
150
185
|
| 研报 / 券商报告 | `insight research list` |
|
|
151
186
|
| 外资研报 | `insight foreign-report list` |
|
|
152
|
-
| 首席观点 / 内资机构观点 / 分析师观点 | `insight opinion list` |
|
|
153
|
-
| 外资机构观点 / 外资券商观点 | `insight foreign-opinion list` |
|
|
187
|
+
| 首席观点 / 内资机构观点 / 分析师观点 | `insight opinion list`(只含摘要 `brief`,1/条);要正文 → `insight opinion detail --chief-opinion-id`(30/条) |
|
|
188
|
+
| 外资机构观点 / 外资券商观点 | `insight foreign-opinion list`(摘要 + 中文摘要);要原文与译文 → `insight foreign-opinion detail --foreign-opinion-id`(30/条) |
|
|
154
189
|
| 外资独立观点 / 独立分析师观点 | `insight independent-opinion list` |
|
|
155
190
|
| 纪要 / 会议纪要(外部) | `insight summary list` |
|
|
156
191
|
| 帕米尔纪要 / 帕米尔专家纪要 / Pamirs | `insight pamirs-summary list`(专家纪要库,需单独购买;筛选项比 `summary` 少,无 `--source`/`--institution`/`--participant-role`) |
|
|
@@ -186,7 +221,22 @@ vault.stock-pool.create
|
|
|
186
221
|
| A股单证券估值序列 / PE / PB / 历史分位 | `fundamental valuation-analysis` |
|
|
187
222
|
| A股盈利预测 / 一致预期 | `fundamental earning-forecast` |
|
|
188
223
|
| 前十大股东 | `fundamental top-holders` |
|
|
224
|
+
| 债券基本资料 / 票面利率 / 到期日 / 债券条款 | `bond basic-info`(`--field` 写错**整批拒绝** `100003`,不会静默丢列) |
|
|
225
|
+
| 发债主体 / 发行人画像 / 存续债券 | `bond issuer-info`(`--security` 按债券码 或 `--issuer` 按主体名模糊匹配,**二选一**,同传报 `100003`) |
|
|
226
|
+
| 债券行情 / 净价 / 全价 / YTM / 久期 | `bond daily-quote`(`--start-date`/`--end-date` **必填**) |
|
|
227
|
+
| 上清所估值 / 债券估值 | `bond valuation`(日期必填;默认只返回可信度「推荐」的估值) |
|
|
228
|
+
| 付息兑付 / 现金流 / 还本付息计划 | `bond cash-flow` |
|
|
229
|
+
| 债券公告 | `bond announcement`(`--security` 或 `--start-date`/`--end-date` **二选一**;**手动翻页**,见下) |
|
|
230
|
+
| 债券发行 / 增发 / 招标结果 / 认购倍数 | `bond issuance-detail` |
|
|
231
|
+
| 债券评级 / 主体评级 / 担保人评级 | `bond rating-overview`(三方评级并列,**单次最多 10 只**) |
|
|
232
|
+
| 评级调整 / 评级变动历史 | `bond rating-change`(债项评级,最多 10 只)、`bond issuer-rating-change`(主体评级,`--security` 或 `--issuer` 二选一) |
|
|
233
|
+
| 利率债发行计划 / 国债发行安排 | `bond issuance-plan`(**只按日期区间查,不收债券码**) |
|
|
234
|
+
| 含权债行权 / 回售 / 赎回提示 | `bond exercise-notice` |
|
|
235
|
+
| 会议线索 / 会议要点 / 核心结论信息流 / 今天有什么会 | `insight highlight list`(🔴 **5 积分/条**,必须带 `--size`;`content` 是 HTML 片段) |
|
|
236
|
+
| 联网搜索 / 查公开信息 / 政策原文 / 传闻核实 | `tool web-search`(1 积分/次;`--site` 定向站点、`--min-tier` 收信源、`--include-content` 取正文〔此时 `--size` ≤5〕) |
|
|
189
237
|
| 云盘文件 | `vault drive-list / drive-download` |
|
|
238
|
+
| 云盘目录 / 文件夹里有什么 | `vault drive-folder-list`(`--space-type 1` 我的云盘〔默认〕/ `2` 租户云盘,`--parent-id` 不传即根目录) |
|
|
239
|
+
| 云盘上传 / 新建文件夹 / 重命名 / 移动 / 跨空间复制文件 / 删除(会改动账号数据) | `vault drive-upload / drive-create-folder / drive-rename / drive-move-file / drive-move-folder / drive-copy / drive-delete-file / drive-delete-folder`(删除须加 `--yes`;详见 `references/commands/vault.md`) |
|
|
190
240
|
| 录音速记 | `vault record-list / record-download` |
|
|
191
241
|
| 我的会议(业绩会/策略会/路演内部记录) | `vault my-conference-list / my-conference-download` |
|
|
192
242
|
| 微信群消息 | `vault wechat-message-list`(先 `vault wechat-chatroom-list` 拿群 ID) |
|
|
@@ -194,8 +244,8 @@ vault.stock-pool.create
|
|
|
194
244
|
| 自选股股票池(增删改,会改动账号数据) | `vault stock-pool-create / stock-pool-rename / stock-pool-add-stock / stock-pool-remove-stock / stock-pool-delete`(删池须加 `--yes`;详见 `references/commands/vault.md`) |
|
|
195
245
|
| 行业指标搜索(EDB) | `alternative edb-search` |
|
|
196
246
|
| 行业指标时序数据(EDB) | `alternative edb-data` |
|
|
197
|
-
| 题材画像 / 投资逻辑 / 行业空间 / 竞争格局
|
|
198
|
-
| 题材成分股 / 题材深度 F8
|
|
247
|
+
| 题材画像 / 投资逻辑 / 行业空间 / 竞争格局 | `alternative concept-info`(前置:`reference concept-search` 拿 `concept-id`;50/次);**要催化事件**加 `--full`(500/次) |
|
|
248
|
+
| 题材成分股 / 题材深度 F8 | `alternative concept-securities`(前置同上;50/次);**要重点个股标识 / 纳入理由**加 `--full`(500/次) |
|
|
199
249
|
| 多证券已实现财务 / 估值指标搜索(含总市值) | `indicator search` |
|
|
200
250
|
| 多证券已实现指标截面(多指标 × 多证券,同一查询日期) | `indicator cross-section`(前置:`indicator search --format json` 通过三项校验) |
|
|
201
251
|
| 多证券已实现指标时序(单指标 × 多证券,按区间) | `indicator time-series`(前置:`indicator search --format json` 通过三项校验) |
|
|
@@ -204,7 +254,7 @@ vault.stock-pool.create
|
|
|
204
254
|
| 首席 ID / 分析师 ID 搜索 | `reference chiefs-search`(按姓名/机构/团队,用于 `insight opinion --chief`) |
|
|
205
255
|
| 机构 ID 搜索(内资券商/外资/牵头/观点机构) | `reference institution-search`(按机构名,用于 `--institution` / `--broker`;免费) |
|
|
206
256
|
| 公众号 ID 搜索(按公众号名/机构/分类) | `reference official-account-search`(返回 `accountId`,喂 `insight official-account list --account-id`;免费) |
|
|
207
|
-
| 常量/枚举 ID
|
|
257
|
+
| 常量/枚举 ID(行业/城市/公告分类/区域/债券类型/评级类型/交易市场等,分类以 `reference constant-category` 的返回为准) | `reference constant-list --category <code>`(分类代码用 `reference constant-category` 查;该接口会列出每个分类适用于哪些接口的哪个参数) |
|
|
208
258
|
| 题材 ID 搜索 | `reference concept-search` |
|
|
209
259
|
| 板块 ID 搜索 | `reference sector-search` |
|
|
210
260
|
| 板块成分股 | `reference sector-constituents`(前置:`reference sector-search` 拿 `sector-id`) |
|
|
@@ -214,7 +264,7 @@ vault.stock-pool.create
|
|
|
214
264
|
- "纪要" → 外部信息走 `insight summary`;明确点名"帕米尔 / Pamirs"才走 `insight pamirs-summary`(另一个库,不是 `summary` 的子集);公司内部录音/会议走 `vault my-conference`
|
|
215
265
|
- "搜索 X" → 数据维度精确(按行业/券商)走对应 `insight ... list`;跨类型语义搜索走 `ai knowledge-batch`
|
|
216
266
|
- 港股代码用在 `insight foreign-opinion --security` 还是 `quote day-kline --security`?前者要"境外"格式(`UBER.N`),后者要 `.HK`
|
|
217
|
-
- "成分股" →
|
|
267
|
+
- "成分股" → 题材深度(分组;重点标记/纳入理由需 `--full`)走 `alternative concept-securities`;板块(行业/概念分类树,纯代码名单)走 `reference sector-constituents`
|
|
218
268
|
- **证券基本面 / 指标先按任务形态路由,不是搜到 EDE 就一律走 EDE**:
|
|
219
269
|
- 单证券先优先对应 `fundamental` 专用命令(财务、估值、盈利预测、股东、主营或完整三大报表,多数免费 / 低价)。`valuation-analysis` / `earning-forecast` 仅支持 A 股,港 / 美股的**估值历史分位**与**盈利预测**无可用口径。但**估值指标本身别照抄旧结论**:`finc_pe_ttm` 港股、`qte_mkt_cptl`/`shr_tot` 港美股都有数。⚠️ **凡「仅 A 股」「无数据」这类否定结论都只是某时点抽查**,数据覆盖在持续扩展;负面结论过期不会报错、只会让你白白拒掉一个能跑的查询。**一律以当次 `scopeList` + 抽查一行为准**
|
|
220
270
|
- 多证券批量取一组**已实现**财务 / 估值指标 → 优先 `indicator search` 后用 EDE 一次拉取,替代逐只循环;单日或同一报告期横向比较用 `cross-section`,区间走势用 `time-series`(后者不能多指标 × 多证券同时)。**批量按 code 回填加 `--key-by code`**(列头用 `indicatorCode`,防同名指标碰撞)。⚠️ **两个轴的顺序规则不同**:`indicatorList` = 请求顺序,但 **`securityCodeList` 是按代码升序重排的**——**行绝不能按请求下标对位**,一律按 `security` 字段取值
|
|
@@ -332,7 +382,8 @@ gangtise reference securities-search --keyword <公司名> --category stock --to
|
|
|
332
382
|
- drive / record / my-conference / wechat / 股票池 → `references/commands/vault.md`
|
|
333
383
|
- 行业指标数据库(EDB)/ 题材指数画像与成分股(concept-info / concept-securities)→ `references/commands/alternative.md`
|
|
334
384
|
- 数据指标(EDE:search / cross-section / time-series / screener,证券级指标截面、时序与条件选股)→ `references/commands/indicator.md`
|
|
335
|
-
-
|
|
385
|
+
- 债券(basic-info / issuer-info / daily-quote / valuation / cash-flow / announcement / issuance-* / rating-overview / rating-change / issuer-rating-change / exercise-notice)→ `references/commands/bond.md`
|
|
386
|
+
- PDF 解析(file-parse)/ 联网搜索(web-search)→ `references/commands/tool.md`
|
|
336
387
|
- securities-search / chiefs-search(首席 ID)/ institution-search(机构 ID)/ official-account-search(公众号 ID)/ 常量查询(constant-category / constant-list)/ 题材 ID(concept-search)/ 板块(sector-search / sector-constituents)/ lookup 本地表 / 行业别名 / raw call → `references/commands/reference-and-lookup.md`
|
|
337
388
|
- 错误码全表 / 不报错的坑 / 退出码 3 与 `screener` 缺列判据 / Troubleshooting → `references/errors.md`
|
|
338
389
|
|
|
@@ -52,9 +52,11 @@ gangtise alternative edb-data \
|
|
|
52
52
|
## 题材指数基本信息 `alternative concept-info`
|
|
53
53
|
|
|
54
54
|
```bash
|
|
55
|
-
gangtise alternative concept-info --concept-id <id>
|
|
55
|
+
gangtise alternative concept-info --concept-id <id> [--full]
|
|
56
56
|
```
|
|
57
57
|
|
|
58
|
+
- **积分**:**50/次**,按次计费、不论返回内容多少;加 `--full` 走旧版接口,**500/次**,只多一列 `keyEvents`(催化事件)。不需要催化事件就别加
|
|
59
|
+
|
|
58
60
|
- `--concept-id`(**必选**):题材指数 ID,如 `121000130`(机器人)
|
|
59
61
|
- **如何拿 ID**:题材指数与主题(`ai theme-tracking --theme-id`)共用同一套 ID 体系,用 `gangtise reference concept-search --keyword <名称>` 查,取 `conceptId`(如 机器人 → `121000130`)。**绝不猜测**
|
|
60
62
|
- 仅返回**最新截面**画像,不支持历史回溯
|
|
@@ -65,8 +67,8 @@ gangtise alternative concept-info --concept-id <id>
|
|
|
65
67
|
- `investmentLogic` — 投资逻辑(需求背景 / 技术临界点 / 产业链 / 风险点)
|
|
66
68
|
- `industrySpace` — 行业空间测算(全球 / 中国各时点市场规模)
|
|
67
69
|
- `competitiveLandscape` — 竞争格局(整机及核心细分头部玩家与份额)
|
|
68
|
-
- `keyEvents
|
|
69
|
-
- **空值规范**:文本字段若题材未配置返回 `null`;`keyEvents
|
|
70
|
+
- `keyEvents`(**仅 `--full`**)— 催化事件列表 `[{date, content}]`,过去 1 年已发生 + 未来预期,最多 10 条,按时间倒序
|
|
71
|
+
- **空值规范**:文本字段若题材未配置返回 `null`;`keyEvents`(`--full`)无任何事件返回 `null`
|
|
70
72
|
|
|
71
73
|
**示例:**
|
|
72
74
|
```bash
|
|
@@ -79,9 +81,11 @@ gangtise alternative concept-info --concept-id 121000130 --format json
|
|
|
79
81
|
## 题材指数成分股 `alternative concept-securities`
|
|
80
82
|
|
|
81
83
|
```bash
|
|
82
|
-
gangtise alternative concept-securities --concept-id <id>
|
|
84
|
+
gangtise alternative concept-securities --concept-id <id> [--full]
|
|
83
85
|
```
|
|
84
86
|
|
|
87
|
+
- **积分**:**50/次**,题材无成分股时不扣;加 `--full` 走旧版接口,**500/次**,每只成分股多两列 `isKey`(重点个股)与 `inclusionReason`(纳入理由)
|
|
88
|
+
|
|
85
89
|
- `--concept-id`(**必选**):题材指数 ID,同上(`reference concept-search` 查)
|
|
86
90
|
- 返回当前成分股,**按分组结构**组织(题材深度 F8);仅最新截面,不支持历史回溯
|
|
87
91
|
- 默认 `--format json`:成分股是 `securityDetail[].securityList[]` 两层嵌套,`table` / `csv` / `markdown` / `jsonl` 不会展开成逐只成分股(会把整个 `securityDetail` 压成单格/单行);要逐只数据请用 json 自行解析分组
|
|
@@ -90,13 +94,16 @@ gangtise alternative concept-securities --concept-id <id>
|
|
|
90
94
|
- `securityCount` — 成分股总数
|
|
91
95
|
- `securityDetail` — 分组数组 `[{groupName, securityList}]`,按 `groupName` 字母序
|
|
92
96
|
- `groupName` — 分组名(如 灵巧手 / 丝杠)
|
|
93
|
-
- `securityList` — 该组成分股 `[{securityCode, securityName
|
|
97
|
+
- `securityList` — 该组成分股 `[{securityCode, securityName}]`;`--full` 另含:
|
|
94
98
|
- `isKey` — 是否重点个股(`true` 排在组内前面)
|
|
95
99
|
- `inclusionReason` — 纳入理由,未配置返回 `null`
|
|
96
|
-
-
|
|
97
|
-
-
|
|
100
|
+
- `securityCount` 是**去重后**的成分股数:一只股票可同时属于多个分组,逐组累加会多于它
|
|
101
|
+
- **排序**:组按 `groupName` 字母序;组内按 `securityCode` 升序(`--full` 下 `isKey=true` 优先)
|
|
102
|
+
- **空值规范**:题材无成分股时 `securityDetail` 返回 `null`,`securityCount` 为 0,接口仍返回成功(`000000`);某分组下无成分股时其 `securityList` 为 `null`
|
|
98
103
|
|
|
99
104
|
**示例:**
|
|
100
105
|
```bash
|
|
101
106
|
gangtise alternative concept-securities --concept-id 121000130 --format json
|
|
107
|
+
# 需要重点个股标识与纳入理由(500 积分)
|
|
108
|
+
gangtise alternative concept-securities --concept-id 121000130 --full --format json
|
|
102
109
|
```
|