gangtise-openapi-cli 0.44.0 → 0.46.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.
@@ -26,6 +26,7 @@ gangtise vault drive-rename --type file|folder --id <id> --name <name>
26
26
  gangtise vault drive-move-file --file-id <id>... --target-folder-id <id|root>
27
27
  gangtise vault drive-move-folder --folder-id <id> --target-parent-id <id|root>
28
28
  gangtise vault drive-copy --file-id <id>... --target-folder-id <id|root>
29
+ gangtise vault drive-copy --folder-id <id> --target-parent-id <id|root>
29
30
  gangtise vault drive-delete-file --file-id <id>... --yes
30
31
  gangtise vault drive-delete-folder --folder-id <id> --yes
31
32
  ```
@@ -36,7 +37,7 @@ gangtise vault drive-delete-folder --folder-id <id> --yes
36
37
  - `drive-upload`:单个文件 ≤100MB(CLI 本地先拦);试用账号每天累计上传 ≤500MB(超出 `230008`)。`--title` 不传用本地文件名
37
38
  - 名称(`--name` / `--title`)≤200 个字符,按 UTF-16 计——中文算 1、emoji 算 2;超出 `230004`
38
39
  - **移动只能在同一空间内**:`drive-move-file` 里跨空间的文件进 `failList`(「空间不一致」);`drive-move-folder` 移到其他空间、自身或其子文件夹报 `230005`
39
- - **跨空间用 `drive-copy`**:把文件在「我的云盘 ↔ 租户云盘」之间复制(可批量),源保留不动;`--target-folder-id` 必须在另一空间,`root` 即另一空间的根目录,同空间复制报 `100003`。返回 `successList[]{fileId, newFileId}`。**目前只支持复制文件**,整个文件夹的复制暂未提供
40
+ - **跨空间用 `drive-copy`**:在「我的云盘 ↔ 租户云盘」之间复制,源保留不动,同空间复制报 `100003`。两种用法二选一:复制文件用 `--file-id`(可批量)+ `--target-folder-id`,返回 `successList[]{fileId, newFileId}`;复制整个文件夹用 `--folder-id` + `--target-parent-id`,连同其中的子文件夹与文件一起复制,返回 `{folderId, newFolderId}`。目标 ID 必须在另一空间,`root` 即另一空间的根目录
40
41
  - 🔴 **删除不可恢复,必须 `--yes`**:`drive-delete-file` 可批量;`drive-delete-folder` **连同其中全部子文件夹与文件一起删除**,删前先 `drive-folder-list --parent-id <id>` 看清里面有什么。拒绝后**不要自行补 `--yes` 重跑**,把要删的名称列给用户确认
41
42
  - **批量命令的部分失败**:`drive-delete-file` / `drive-move-file` / `drive-copy` 对单条失败仍返回成功,明细在 `failList`(`fileId` + `failReason`,如「文件不存在」)。CLI 把失败的 ID 写到 stderr、结果标 `partial` 并**退出 3**
42
43
 
@@ -61,7 +62,8 @@ gangtise vault my-conference-list [--keyword <text>] [--research-area <id>] [--s
61
62
  gangtise vault my-conference-download --conference-id <id> --content-type <type> [--output <path>] [--resolve-title]
62
63
  ```
63
64
 
64
- - **积分**:列表 0.1/条;下载 50/篇(超时不自动重发)
65
+ - **积分**:列表 0.1/条;下载 30/篇(超时不自动重发)
66
+ - **可查范围:前溯 1 个月**(各档相同)
65
67
 
66
68
  - `--category`:`earningsCall` 业绩会 | `strategyMeeting` 策略会 | `fundRoadshow` 基金路演 | `shareholdersMeeting` 股东大会 | `maMeeting` 并购会议 | `specialMeeting` 特别会议 | `companyAnalysis` 公司分析 | `industryAnalysis` 行业分析 | `other`(可重复)
67
69
  - `--source`:录制来源 `1`=企微会议助理 | `2`=会议服务微信群(可重复;不传返回全部)
@@ -13,7 +13,7 @@
13
13
  | 错误码 | 含义 | CLI 行为 | Agent 是否介入 |
14
14
  |--------|------|---------|--------------|
15
15
  | `100003` | 参数值非法——**最宽的兜底码**:类型错、`limit` 越界都归这里。**msg 通常已指明字段**(如「请求体字段类型不匹配: size 期望类型 Integer」「limit 最小为 1,最大为 10000」),先读 msg 再猜 | — | 按 msg 指的字段改;msg 没指明才对照 `--help` 查枚举拼写,**不要重试同命令** |
16
- | `999999` | 系统错误。`indicator`(EDE)的「无数据」不用此码(无数据是保留行列的占位单元格 `null`,见 `commands/indicator.md`;代码或参数名写错报 `100003`、缺必填参数报 `100001`,都会点名;例外是漏传 `fiscalYear` 不报错,见 `commands/indicator.md`「必填参数」),所以这个码基本只剩真故障 | 普通端点自动重试 ×2;🔴 贵档与 `indicator` 端点不重试 | 确认参数无误仍报此码即服务端故障 |
16
+ | `999999` | 系统错误。`indicator`(EDE)的「无数据」不用此码(无数据是保留行列的占位单元格 `null`,见 `commands/indicator.md`;代码或参数名写错报 `100003`、缺必填参数报 `100001`,都会点名),所以这个码基本只剩真故障 | 普通端点自动重试 ×2;🔴 贵档与 `indicator` 端点不重试 | 确认参数无误仍报此码即服务端故障 |
17
17
  | `410110` | **异步生成中**(HTTP 400,旧码)。新码 `140001`,CLI 两码都认 | 轮询视为 pending | 继续等 |
18
18
  | `410111` | **异步生成失败**(HTTP 400,旧码)。新码 `140002`,CLI 两码都认 | 终态 | **不重试**,换参数 |
19
19
  | `130002` | 资源不存在——下载类的常见码:`reportId` 不存在 / 非数字多归此码。另有更具体的 `130003`(资源未生成 / 无附件);`--file-type` 写错由 CLI 在本地报错、不发请求 | — | 确认 ID 有效且本账号可见;换 `--file-type` 或换一篇验证 |
@@ -43,7 +43,7 @@
43
43
  - **非法证券代码**:`quote day-kline` / `realtime` / `minute-kline` / `fund-flow` 与 Fundamental 系都会报 `120001`,按报错核对后缀即可。⚠️ **三个已弃用的旧端点 `quote day-kline-hk` / `day-kline-us` / `index-day-kline` 则返回空结果**,与"该票该区间真无数据"无法区分——**用这三个拿到空结果时先回头核对代码后缀**。它们的能力已并入统一 `day-kline`(支持 A 股 / 港股 / 美股 / 沪深 ETF / 交易所指数 / 概念指数 `.GT` / 行业指数 `.CI` `.SWI` / 全球指数),新代码直接用 `day-kline`
44
44
  - **枚举值拼错不一定报错**:`--search-type` / `--rank-type` 传非法值报 `100005`;但 `insight foreign-report --region` 写错区域码会返回全量、不报错,拿到「看着正常」的结果。⚠️ **「该端点根本没有这个参数」同样静默**:经 `raw call` 手写请求体时,传端点不支持的字段名(如给 `opinion` 传 `searchType`——它只有 `--rank-type`)会被丢弃、按未传处理,返回未经筛选的结果(专用命令对不存在的选项直接报 unknown option)。**CLI 本地拦截的**:全部 `--search-type` / `--rank-type`、全部 `--file-type`(`foreign-report` 为 1–4、其余 1–2)、`pamirs-summary` 与财报日历的 `--category` / `--market`、`--top` 上限、`reference securities-search` / `institution-search` / `official-account-search` 的 `--category`、`vault record-download` / `my-conference-download` 的 `--content-type`、`ai hot-topic --category`、`ai security-clue --source`。**其余取值(如 `foreign-report --region`、`--llm-tag`、`theme-tracking --type`)CLI 不拦**,写之前对照 `--help` 与对应命令文档核对拼写——**拼错的筛选条件会伪装成「结果正常」**
45
45
  - **股票池写操作的单条失败不报错**:`vault stock-pool-add-stock` / `stock-pool-remove-stock` / `stock-pool-delete` 是逐条处理的,证券代码不存在这类单条失败仍返回成功信封(`code` 为 `000000`),失败明细在 `failList` 里。**CLI 已拦**:`failList` 非空时 stderr 列出失败项、结果标 `partial`、退出码 3。绕过 CLI 直连接口时要自己读 `failList`,别只看 `code`
46
- - **`viewpoint-debate` 的观点过不了平台的敏感词检测时不会被提前拦截**——不返回 `240002`,而是照常受理、扣 50 积分、生成阶段才以 `410111` 失败;同样的内容重提仍会失败。**提交前自己把关措辞**
46
+ - **`viewpoint-debate` 的观点过不了平台的敏感词检测时不会被提前拦截**——不返回 `240002`,而是照常受理、扣 20 积分、生成阶段才以 `410111` 失败;同样的内容重提仍会失败。**提交前自己把关措辞**
47
47
 
48
48
  ## 官方文档列出、但未见触发的码
49
49
 
@@ -116,7 +116,7 @@
116
116
  3. 账号是否到期 / 异常:`gangtise auth login` 会真的登录一次,到期或禁用时报 `999012` / `999013`(`auth status` 只看本地缓存,判断不了)
117
117
 
118
118
  **异步任务 `410111` 反复**(生成失败,终态)
119
- 1. `viewpoint-debate`:先检查观点措辞——过不了敏感词检测的内容不会被提前拦截,会扣 50 积分再以 `410111` 失败;换个说法再提交,同样的内容重试仍会失败
119
+ 1. `viewpoint-debate`:先检查观点措辞——过不了敏感词检测的内容不会被提前拦截,会扣 20 积分再以 `410111` 失败;换个说法再提交,同样的内容重试仍会失败
120
120
  2. `earnings-review`:换更早的 `--period`(如 `2025q3` → `2025interim`)
121
121
  3. `--period` 用已发布的报告期(如 `2025q3` / `2025interim` / `2025annual`)
122
122
  4. 若提交阶段就返回 `240001`(财报期未披露),说明该期不可查且**未扣积分**,别再换参数试
@@ -138,4 +138,6 @@
138
138
 
139
139
  **同一公司既是股票又是 DR** → `securities-search` 默认返回所有分类 → 加 `--category stock` 收敛。
140
140
 
141
+ **`--category stock` / `fund` 的结果里出现 `category: bond`** → 可转债不受 `--category` 约束、按简称查时常排第一(如「甬金」→ `113636.SH 甬金转债`) → 只取 `category` 等于所查类别的行;查股票可改用公司全称,查基金换更具体的基金简称。债券代码传给基金命令返回空结果、不报错,传给股票行情 / 财报报 `120001`。
142
+
141
143
  **`sector-constituents` 返回 0 条** → sectorId 不对(题材 conceptId 与板块 sectorId 是两套 ID,不通用)→ 先 `reference sector-search --keyword <名>` 拿 `sectorId` 重试。
@@ -2,7 +2,7 @@
2
2
 
3
3
  每个示例展示从用户语句到完整命令的全流程。示例集中在这里,Skill 主文件只放规则;遇到不确定的场景时来这里查同类。
4
4
 
5
- **日期占位**:`<今天>`、`<今天-7天>`、`<最新交易日>` 这类写法按实跑当天换算成 `YYYY-MM-DD`;写成具体日期的(如报告期末 `2025-12-31`)照抄即可。回溯窗口有限(研报、观点等约 3 个月),别把旧日期原样照抄。
5
+ **日期占位**:`<今天>`、`<今天-7天>`、`<最新交易日>` 这类写法按实跑当天换算成 `YYYY-MM-DD`;写成具体日期的(如报告期末 `2025-12-31`)照抄即可。各接口能回溯多久不同(见 `SKILL.md`「数据范围」),别把旧日期原样照抄。
6
6
 
7
7
  ---
8
8
 
@@ -137,7 +137,7 @@
137
137
  1. 路由 → insight research list;公司名不在速查表
138
138
  2. 先调 reference securities-search:
139
139
  gangtise reference securities-search --keyword 蔚蓝生物 --category stock --top 3 --format json
140
- 返回 list[0].gtsCode = "603739.SH"
140
+ 取第一条 category 为 stock 的 gtsCode = "603739.SH"(按简称查时同名可转债可能排在前面)
141
141
  3. 拼正式查询:
142
142
  gangtise insight research list --security 603739.SH --rank-type 2 \
143
143
  --start-time "<今天-7天> 00:00:00" --end-time "<今天> 23:59:59" --format json
@@ -188,9 +188,9 @@
188
188
  → 取 content 呈现
189
189
  5. 不能等那么久时去掉 --wait:提交返回 {dataId, status, hint},之后手动查:
190
190
  gangtise ai earnings-review-check --data-id xxx --format json
191
- - 若 {dataId, status: "pending", hint} → 过两分钟再查;**仍在生成时别重新提交**(重提再扣 50 积分),把 dataId 交给用户稍后查
191
+ - 若 {dataId, status: "pending", hint} → 过两分钟再查;**仍在生成时别重新提交**(重提再扣 20 积分),把 dataId 交给用户稍后查
192
192
  - 若 {date, content} → 取 content 呈现
193
- - 若 410111(新码 140002)→ 终态失败,**不要重提同一任务**(会再扣 50 积分且结果相同);改参数后再提交,或直接告知用户该期数据暂不可用
193
+ - 若 410111(新码 140002)→ 终态失败,**不要重提同一任务**(会再扣 20 积分且结果相同);改参数后再提交,或直接告知用户该期数据暂不可用
194
194
  ```
195
195
 
196
196
  ## 例 13:题材画像 + 成分股(先查 ID 再拉两接口)
@@ -343,7 +343,7 @@
343
343
  --market aShares --category performanceForecast \
344
344
  --size 50 --format json
345
345
  → list[].securityName / title / publishDate / performanceReportId / hasAttachment
346
- 5. 用户要原文时:只有 hasAttachment: true 能下(A股 10 积分/篇)
346
+ 5. 用户要原文时:只有 hasAttachment: true 能下(A股 1 积分/篇)
347
347
  gangtise insight performance-calendar download --performance-report-id 33753017 --output ./预告.pdf
348
348
  ```
349
349
 
@@ -2,24 +2,20 @@
2
2
 
3
3
  > 按命令分组,`--field` 参数可重复传入。不传 `--field` 时返回全部字段。`quote` 系多只证券或全市场时传了 `--field` 而缺身份列,CLI 会把它补到最前并在 stderr 说明:日 K 补 `securityCode` / `tradeDate`、分钟 K 补 `securityCode` / `tradeTime`、实时行情补 `securityCode`;单只证券不补(`fund-flow` 本就自带 `securityCode` / `tradeDate`)。
4
4
 
5
- ## 🔴 字段名写错时,两族接口的表现完全不同
5
+ ## 🔴 字段名写错时,各族接口的表现不同
6
6
 
7
- `--field` 里写了一个不存在的字段名(拼错、或该字段已下线),**行情与 fundamental 这两族接口都不会报错**(`bond` 的 `--field` 写错会整批报 `100003`),但丢的东西不一样——这决定了你能不能按位置拍平结果:
7
+ `--field` 里写了一个不存在的字段名(拼错、或该字段已下线),多数接口整条报错并点名,**行情这一族不报错**:
8
8
 
9
9
  | 接口 | 响应里发生什么 | CLI 怎么处理 |
10
10
  | :-- | :-- | :-- |
11
- | `quote realtime` / `day-kline` / `minute-kline` / `fund-flow` | **字段名和值一起消失**,`fieldList` 里也没有它,列数与值数始终对得上 | 比对请求与返回的列名,缺列标 `partial` + `missingFields`、在 stderr 点名、**退出码 3** |
12
- | `fundamental main-business` / `valuation-analysis` | **字段名照请求回显在 `fieldList` 里,行里却少一个值**,两者长度对不上 | 检测到长度不匹配**直接报错退出 1**,不输出任何可能错位的数据 |
11
+ | `quote realtime` / `day-kline` / `minute-kline` / `fund-flow` | **不报错,字段名和值一起消失**,`fieldList` 里也没有它,列数与值数始终对得上 | 比对请求与返回的列名,缺列标 `partial` + `missingFields`、在 stderr 点名、**退出码 3** |
12
+ | `fundamental main-business` / `valuation-analysis` | 整条报 `100005`,msg 点名写错的名字(`fieldList 枚举值非法: <名字>`) | 原样报错,退出 1 |
13
+ | `bond` / `fund` | 整条报 `100003` 并点名 | 原样报错,退出 1 |
13
14
 
14
- **第二族才是危险的那个**:`fieldList` 比行长,按下标对位会让缺口之后的每一个值都贴到错误的字段名上——一列合理的数字配着错误的表头,肉眼看不出来。CLI 因此选择整条失败而不是给你一份错位的表。
15
+ **行情这一族才是要留神的那个**:结果只是少一列、看着正常。绕过 CLI 直连时,`fieldList` 与行**始终等长**,只比长度什么都查不出来——要拿**请求的字段名**去比**返回的 `fieldList`**,少了哪个就是那个名字没被认出来。
15
16
 
16
17
  **结论一样**:`--field` 的字段名以本文件为准,不确定就别传(不传即返回全部字段,永远安全)。
17
18
 
18
- 绕过 CLI 直连接口时**两族要查的东西不同,别只做一种**:
19
-
20
- - `quote` 系:`fieldList` 与行**始终等长**,只比长度什么都查不出来——要拿**请求的字段名**去比**返回的 `fieldList`**,少了哪个就是那个名字没被认出来
21
- - `fundamental` 两个:`fieldList` 会把你写的名字原样回显,所以对比请求没用——要比 **`fieldList` 长度与每行的值个数**,对不上就不能按下标取值
22
-
23
19
  ---
24
20
 
25
21
  ## Quote 行情
@@ -193,7 +189,7 @@
193
189
 
194
190
  ### 主营业务 (`fundamental main-business`)
195
191
 
196
- > ⚠️ `--field` 写错字段名时**只丢值、字段名照回显**,CLI 会因长度不匹配报错退出 1——见本文顶部「字段名写错时,两族接口的表现完全不同」。
192
+ > `--field` 写错字段名整条报 `100005` 并点名——见本文顶部「字段名写错时,各族接口的表现不同」。
197
193
 
198
194
  | 字段 | 含义 | 字段 | 含义 |
199
195
  |------|------|------|------|
@@ -206,7 +202,7 @@
206
202
 
207
203
  ### 估值分析 (`fundamental valuation-analysis`)
208
204
 
209
- > ⚠️ `--field` 写错字段名时**只丢值、字段名照回显**,CLI 会因长度不匹配报错退出 1——见本文顶部「字段名写错时,两族接口的表现完全不同」。🔴 例外:`--field` 里一个数值列都没有时(只传 `tradeDate`、或只有不存在的名字),接口返回 0 行、不报错。 `tradeDate` 总在第一列返回,不用写进 `--field`(写了 CLI 会自动去掉)。
205
+ > `--field` 写错字段名整条报 `100005` 并点名——见本文顶部「字段名写错时,各族接口的表现不同」。🔴 `--field` 只传 `tradeDate` 时接口返回 0 行、不报错,至少要带一个数值列。`tradeDate` 总在第一列返回,不用写进 `--field`。
210
206
 
211
207
  | 字段 | 含义 | 字段 | 含义 |
212
208
  |------|------|------|------|
@@ -67,7 +67,7 @@ CLI 自动处理 envelope:`{code, msg, data}` 信封会按 `code === "000000"`
67
67
  | quote fund-flow | `{fieldList, list, total}` 列式 → 规范化后 `{list: [{...}], total}` 宽表 | `securityCode` / `tradeDate` + 请求的字段(`mainNetInflow` / `largeInflow` / `xlargeOutflow` / …) |
68
68
  | fundamental income-statement / balance-sheet / cash-flow(含 quarterly / -hk / -us) | `{total, list: [{...}]}` | `fiscalYear` / `period` / `endDate` / `companyName` / `companyType` / `currency` / `unit` + 各 `--field` 字段;港股/美股另含 `timeCovered`(不规则跨度)。⚠️ A 股 `*-quarterly` 单季表的 `companyType` 返回未映射的数字码(如 `102119999`),`currency` 正常;累计口径的三张表两列均正确。科目数字不受影响 |
69
69
  | fundamental main-business | `{fieldList, list}` 列式 → 规范化后 `{list: [{...}]}` | 前 3 列恒定:`periodName` / `periodEndDate` / `categoryName`(分项名,随 `--breakdown` 变)+ `opRevenue` / `opRevenueYoy` / `opRevenueRatio` / `opCost` / `opCostYoy` / `opCostRatio` / `grossProfit` / `grossProfitYoy` / `grossProfitRatio` / `grossMargin` / `grossMarginYoy` / `grossMarginRatio`(共 15 个)。`--field` 只能从后 12 个里选 |
70
- | fundamental valuation-analysis(仅 A 股) | `{fieldList, list}` 列式 → 规范化后 `{list: [{...}]}` | `tradeDate` / `value` / `percentileRank` / `average` / `median` / `upper1Std` / `lower1Std`(共 7 个);**无 `securityCode`**——`--field` 只传不存在的名字(含 `securityCode`)时接口返回 0 行、不报错,与数值列混传时 CLI 报错退出 1 |
70
+ | fundamental valuation-analysis(仅 A 股) | `{fieldList, list}` 列式 → 规范化后 `{list: [{...}]}` | `tradeDate` / `value` / `percentileRank` / `average` / `median` / `upper1Std` / `lower1Std`(共 7 个);**无 `securityCode`**——`--field` 写不存在的名字(含 `securityCode`)报 `100005`;只传 `tradeDate` 返回 0 行、不报错 |
71
71
  | fundamental earning-forecast(仅 A 股) | `{securityCode, securityName, updateList: [...]}` | `updateList[].date` / `updateList[].fieldList[].forecastYear` + 各 consensus 指标 |
72
72
  | fundamental top-holders | `{holderType, list: [{...}]}` | `reportPeriod` / `rank` / `shareholderName` / `shareholderType` / `holdingNum` / `holdingPct` / `chgNum` / `chgPct` / `shareCategory` |
73
73
  | ai knowledge-batch | `{list: [{...}]}` | `list[].resourceType` / `list[].sourceId` / `list[].title` / `list[].summary` |
@@ -86,7 +86,7 @@ CLI 自动处理 envelope:`{code, msg, data}` 信封会按 `code === "000000"`
86
86
  | vault drive-create-folder | `{folderId, parentId, folderName, spaceType, createTime}` | `folderId` |
87
87
  | vault drive-rename | `{id, name}` | — |
88
88
  | vault drive-move-folder / drive-delete-folder | `{folderId, parentId}` / `{folderId}` | — |
89
- | vault drive-copy | `{successList, failList}` | `successList[]{fileId, newFileId}`(`newFileId` 是另一空间里副本的 ID);`failList[]{fileId, failReason}`,非空时 `partial` + 退出码 3 |
89
+ | vault drive-copy | 复制文件:`{successList, failList}`;复制文件夹:`{folderId, newFolderId}` | `successList[]{fileId, newFileId}`(`newFileId` 是另一空间里副本的 ID);`failList[]{fileId, failReason}`,非空时 `partial` + 退出码 3。复制文件夹时 `newFolderId` 是另一空间里副本文件夹的 ID |
90
90
  | vault drive-move-file / drive-delete-file | `{successList, failList}` | `successList[]` 为文件 ID;`failList[]{fileId, failReason}`,非空时 `partial` + 退出码 3 |
91
91
  | vault record-list | `{list, total}` | `list[].recordId` / `list[].title` / `list[].category` / `list[].createTime` / `list[].recordDuration` |
92
92
  | vault record-download | 文件路径(stdout) | — |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gangtise-openapi-cli",
3
- "version": "0.44.0",
3
+ "version": "0.46.0",
4
4
  "description": "CLI for Gangtise OpenAPI",
5
5
  "license": "MIT",
6
6
  "repository": {