gangtise-openapi-cli 0.7.3 → 0.7.5

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 CHANGED
@@ -8,7 +8,13 @@
8
8
  npm install -g gangtise-openapi-cli
9
9
  ```
10
10
 
11
- 安装后直接使用:
11
+ 更新到最新版:
12
+
13
+ ```bash
14
+ npm update -g gangtise-openapi-cli
15
+ ```
16
+
17
+ 验证安装:
12
18
 
13
19
  ```bash
14
20
  gangtise --help
@@ -36,6 +42,75 @@ export GANGTISE_TOKEN="Bearer xxx"
36
42
 
37
43
  如果没有 `GANGTISE_TOKEN`,CLI 会自动调用 token 接口并缓存到本地。
38
44
 
45
+
46
+ ## 数据接口覆盖
47
+
48
+ | 模块 | 子命令 | 说明 |
49
+ |------|--------|------|
50
+ | **Auth** | `login` / `status` | 认证登录、状态查询 |
51
+ | **Lookup** | `research-area list` / `broker-org list` / `meeting-org list` / `industry list` / `industry-code list` / `region list` / `announcement-category list` / `theme-id list` | 枚举速查(内置,无需额外文档) |
52
+ | **Insight** | `opinion list` | 首席观点 |
53
+ | | `summary list` / `download` | 纪要(含下载) |
54
+ | | `roadshow list` | 路演 |
55
+ | | `site-visit list` | 调研 |
56
+ | | `strategy list` | 策略 |
57
+ | | `forum list` | 论坛 |
58
+ | | `research list` / `download` | 研报(含 Markdown 下载) |
59
+ | | `foreign-report list` / `download` | 外资研报(含中文翻译下载) |
60
+ | | `announcement list` / `download` | 公告(含 Markdown 下载) |
61
+ | **Quote** | `day-kline` / `day-kline-hk` | A股/港股日K线 |
62
+ | **Fundamental** | `income-statement` / `balance-sheet` / `cash-flow` | 三大财务报表 |
63
+ | | `main-business` | 主营构成(按地区/产品拆分) |
64
+ | | `valuation-analysis` | 估值分析 |
65
+ | **AI** | `knowledge-batch` | 知识库批量检索 |
66
+ | | `knowledge-resource-download` | 知识资源下载 |
67
+ | | `security-clue` | 个股线索 |
68
+ | | `one-pager` | 一页通 |
69
+ | | `investment-logic` | 投资逻辑 |
70
+ | | `peer-comparison` | 同业对比 |
71
+ | | `earnings-review` / `earnings-review-check` | 业绩回顾 |
72
+ | | `theme-tracking` | 主题跟踪 |
73
+ | | `research-outline` | 研究提纲 |
74
+ | **Vault** | `drive-list` / `drive-download` | 云盘文件列表与下载 |
75
+ | **Raw** | `call` | 原始接口调用(可访问任意 endpoint) |
76
+
77
+ ## AI Agent Skill
78
+
79
+ 本项目包含 SKill 定义(`gangtise-openapi/SKILL.md`),可让 AI agent 自动调用 `gangtise` CLI 完成投研数据查询。支持以下 AI 编程助手:
80
+
81
+ - [Claude Code](https://claude.ai/claude-code) — `~/.claude/skills/`
82
+ - [OpenClaw](https://github.com/openclaw/openclaw) — `~/.openclaw/skills/`
83
+ - [Hermes](https://github.com/nicepkg/hermes) — `~/.hermes/skills/`
84
+
85
+ Skill 目录结构:
86
+
87
+ ```
88
+ gangtise-openapi/
89
+ ├── SKILL.md # 主 skill 文件(命令参考、参数枚举、使用规则)
90
+ └── references/
91
+ ├── fields.md # 字段中英文对照速查表
92
+ └── lookup-ids.md # 常用 ID 速查表(行业/券商/机构/公告分类等)
93
+ ```
94
+
95
+ 安装:
96
+
97
+ ```bash
98
+ # Claude Code
99
+ cp -r gangtise-openapi ~/.claude/skills/gangtise-openapi
100
+
101
+ # OpenClaw
102
+ cp -r gangtise-openapi ~/.openclaw/skills/gangtise-openapi
103
+
104
+ # Hermes
105
+ cp -r gangtise-openapi ~/.hermes/skills/gangtise-openapi
106
+ ```
107
+
108
+ 安装后,可以用自然语言触发,例如:
109
+ - "帮我查今天所有的研报"
110
+ - "用 gangtise 命令查一下贵州茅台的日K线"
111
+ - "导出最近一周的首席观点到 jsonl"
112
+
113
+
39
114
  ## 命令概览
40
115
 
41
116
  - `gangtise auth ...`
@@ -47,8 +122,6 @@ export GANGTISE_TOKEN="Bearer xxx"
47
122
  - `gangtise vault ...`
48
123
  - `gangtise raw call ...`
49
124
 
50
- 其中 `lookup` 下的研究方向、机构、行业枚举已内置在项目中,无需额外本地文档文件。
51
-
52
125
  ## 推荐工作流
53
126
 
54
127
  先查枚举/参数:
@@ -184,6 +257,7 @@ gangtise ai peer-comparison --security-code 600519.SH
184
257
  gangtise ai earnings-review --security-code 600519.SH --period 2025q3
185
258
  gangtise ai theme-tracking --theme-id 121000131 --date 2026-03-01 --type morning
186
259
  gangtise ai research-outline --security-code 600519.SH
260
+ gangtise ai knowledge-resource-download --resource-type 60 --source-id 3052524 --output ./resource.txt
187
261
  ```
188
262
 
189
263
  ### Vault
@@ -196,9 +270,6 @@ gangtise vault drive-download --file-id 62130
196
270
  # → 2028 全球智能危机 一份来自未来的金融史思想实验 .pdf
197
271
  ```
198
272
 
199
- gangtise ai knowledge-resource-download --resource-type 60 --source-id 3052524 --output ./resource.txt
200
- ```
201
-
202
273
  ### Raw
203
274
 
204
275
  ```bash
@@ -207,19 +278,6 @@ gangtise raw call insight.opinion.list --body '{"from":0,"size":120}'
207
278
 
208
279
  说明:对已标记为自动翻页的 endpoint,`raw call` 也会复用同一套 client 翻页逻辑;这里的 `size` 仍表示最终希望返回的记录数。
209
280
 
210
- ## 已验证的真实联调
211
-
212
- 已真实跑通:
213
- - auth: `login` / `status`
214
- - lookup: `research-area list` / `broker-org list` / `meeting-org list` / `industry list` / `industry-code list` / `region list` / `announcement-category list`
215
- - insight: `opinion list` / `summary list` / `summary download` / `roadshow list` / `site-visit list` / `strategy list` / `forum list` / `research list` / `research download` / `foreign-report list` / `foreign-report download` / `announcement list` / `announcement download`
216
- - quote: `day-kline` / `day-kline-hk`
217
- - fundamental: `income-statement` / `main-business` / `valuation-analysis`
218
- - ai: `knowledge-batch` / `knowledge-resource-download` / `security-clue` / `one-pager` / `investment-logic` / `peer-comparison` / `earnings-review` / `theme-tracking` / `research-outline`
219
- - vault: `drive-list` / `drive-download`
220
-
221
- 注意:`knowledge-resource-download` 依赖正确的 `resourceType + sourceId` 组合;错误组合会返回 `433007 不支持该数据源`。
222
-
223
281
  ## 输出格式
224
282
 
225
283
  支持:
@@ -230,36 +288,18 @@ gangtise raw call insight.opinion.list --body '{"from":0,"size":120}'
230
288
  - `csv`
231
289
  - `markdown`
232
290
 
233
- ## Claude Code Skill
234
-
235
- 本项目包含一个 [Claude Code](https://claude.ai/claude-code) skill 定义(`gangtise-openapi/SKILL.md`),可让 AI agent 自动调用 `gangtise` CLI 完成投研数据查询。
236
-
237
- Skill 目录结构:
238
-
239
- ```
240
- gangtise-openapi/
241
- ├── SKILL.md # 主 skill 文件(命令参考、参数枚举、使用规则)
242
- └── references/
243
- └── lookup-ids.md # 常用 ID 速查表(行业/券商/机构/公告分类等)
244
- ```
245
-
246
- 安装到 Claude Code:
247
-
248
- ```bash
249
- # 从项目根目录复制整个 skill 目录
250
- cp -r gangtise-openapi ~/.claude/skills/gangtise-openapi
251
- ```
252
-
253
- 安装后,在 Claude Code 中可以用自然语言触发,例如:
254
- - "帮我查今天所有的研报"
255
- - "用 gangtise 命令查一下贵州茅台的日K线"
256
- - "导出最近一周的首席观点到 jsonl"
257
-
258
291
  ## 常见错误
259
292
 
260
- - `8000014`: `GANGTISE_ACCESS_KEY` 错误
261
- - `8000015`: `GANGTISE_SECRET_KEY` 错误
262
- - `999997`: 未开通接口权限
263
- - `999995`: 积分不足
264
- - `903301`: 今日调用次数达到上限
265
- - `433007`: 不支持该数据源(常见于知识资源下载参数不匹配)
293
+ | 错误码 | 说明 |
294
+ |--------|------|
295
+ | `8000014` | `GANGTISE_ACCESS_KEY` 错误 |
296
+ | `8000015` | `GANGTISE_SECRET_KEY` 错误 |
297
+ | `8000016` | 开发账号状态异常 |
298
+ | `8000018` | 开发账号已到期 |
299
+ | `900001` | 请求参数为空或缺少必填项 |
300
+ | `900002` | 请求缺少 uid |
301
+ | `903301` | 今日调用次数已达上限 |
302
+ | `999995` | 积分不足 |
303
+ | `999997` | 未开通接口权限 |
304
+ | `999999` | Gangtise 系统错误,请稍后重试 |
305
+ | `433007` | 不支持该数据源(`knowledge-resource-download` 需正确的 `resourceType + sourceId` 组合) |
@@ -32,8 +32,7 @@ export class GangtiseClient {
32
32
  return accessToken;
33
33
  }
34
34
  unwrapEnvelope(parsed, statusCode) {
35
- const hasEnvelopeFields = parsed && typeof parsed === 'object' && ('code' in parsed || 'status' in parsed || 'success' in parsed || 'data' in parsed);
36
- if (!hasEnvelopeFields) {
35
+ if (!parsed || typeof parsed !== 'object' || !('code' in parsed)) {
37
36
  return parsed;
38
37
  }
39
38
  const code = parsed.code === undefined ? undefined : String(parsed.code);
@@ -197,18 +196,11 @@ export class GangtiseClient {
197
196
  }
198
197
  return { text, contentType };
199
198
  }
200
- const hasEnvelopeFields = parsed && typeof parsed === 'object' && ('code' in parsed || 'status' in parsed || 'success' in parsed || 'data' in parsed);
201
- if (hasEnvelopeFields) {
202
- const data = this.unwrapEnvelope(parsed, response.statusCode);
203
- if (data && typeof data === 'object' && 'url' in data && typeof data.url === 'string') {
204
- return { url: String(data.url), contentType };
205
- }
206
- return { text: JSON.stringify(data, null, 2), contentType };
207
- }
208
- if (parsed && typeof parsed === 'object' && 'url' in parsed && typeof parsed.url === 'string') {
209
- return { url: String(parsed.url), contentType };
199
+ const data = this.unwrapEnvelope(parsed, response.statusCode);
200
+ if (data && typeof data === 'object' && 'url' in data && typeof data.url === 'string') {
201
+ return { url: String(data.url), contentType };
210
202
  }
211
- return { text: JSON.stringify(parsed, null, 2), contentType };
203
+ return { text: JSON.stringify(data, null, 2), contentType };
212
204
  }
213
205
  if (contentType?.includes('text/plain') || contentType?.includes('text/html')) {
214
206
  const text = await response.body.text();
@@ -1,2 +1,2 @@
1
- // Auto-generated by scripts/version.ts — DO NOT EDIT
2
- export const CLI_VERSION = "0.7.3";
1
+ // Auto-generated — DO NOT EDIT
2
+ export const CLI_VERSION = "0.7.5";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gangtise-openapi-cli",
3
- "version": "0.7.3",
3
+ "version": "0.7.5",
4
4
  "description": "CLI for Gangtise OpenAPI",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -23,7 +23,7 @@
23
23
  "build": "tsc -p tsconfig.json",
24
24
  "dev": "tsx src/cli.ts",
25
25
  "test": "vitest run",
26
- "prepare": "tsx scripts/version.ts && npm run build"
26
+ "prepare": "node -e \"const p=JSON.parse(require('fs').readFileSync('package.json','utf8'));require('fs').writeFileSync('src/version.ts','// Auto-generated — DO NOT EDIT\\nexport const CLI_VERSION = \\\"'+p.version+'\\\"\\n')\" && npm run build"
27
27
  },
28
28
  "engines": {
29
29
  "node": ">=20"