stock-sdk 2.0.0-beta.1 → 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.
- package/README.md +22 -22
- package/dist/cli.cjs +1 -1
- package/dist/cli.js +1 -1
- package/dist/mcp.cjs +1 -1
- package/dist/mcp.js +1 -1
- package/package.json +8 -8
package/README.md
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/stock-sdk)
|
|
4
4
|
[](https://www.npmjs.com/package/stock-sdk)
|
|
5
5
|
[](https://github.com/chengzuopeng/stock-sdk/blob/master/LICENSE)
|
|
6
|
-
[](https://stock-sdk
|
|
7
|
-
[](https://stock-sdk
|
|
6
|
+
[](https://stock-sdk.linkdiary.cn/mcp/)
|
|
7
|
+
[](https://stock-sdk.linkdiary.cn/mcp/)
|
|
8
8
|
|
|
9
9
|
**[English](./README_EN.md)** | 中文
|
|
10
10
|
|
|
@@ -14,18 +14,18 @@
|
|
|
14
14
|
|
|
15
15
|
**✨ 零依赖、轻量发布包 | 🌐 Browser + Node.js | 📦 ESM + CJS + subpath | 🧠 完整 TypeScript 类型 | 🖥️ CLI | 🤖 MCP**
|
|
16
16
|
|
|
17
|
-
>
|
|
18
|
-
>
|
|
17
|
+
> ✨ **v2.0.0**:v2 是一次架构跃迁(命名空间 API、统一符号模型、`Quote` 可辨识联合、统一错误体系、CLI / MCP / subpath 导出)。
|
|
18
|
+
> 安装:`npm i stock-sdk`。从 v1 升级请先读 [v1 → v2 迁移指南](https://stock-sdk.linkdiary.cn/guide/migration-v1-to-v2)(**破坏性变更,无兼容别名**)。
|
|
19
19
|
|
|
20
|
-
## 📖
|
|
20
|
+
## 📖 官网文档
|
|
21
21
|
|
|
22
|
-
> ## 👉 https://stock-sdk
|
|
22
|
+
> ## 👉 https://stock-sdk.linkdiary.cn
|
|
23
23
|
>
|
|
24
|
-
>
|
|
24
|
+
> 完整 API、命名空间总览、CLI / MCP 指南、在线 Playground、v1 → v2 迁移文档全部在这里。先看官网再上手最快。
|
|
25
25
|
>
|
|
26
|
-
> (v1
|
|
26
|
+
> ([v1 稳定版文档](https://v1.stock-sdk.linkdiary.cn) 已归档)
|
|
27
27
|
|
|
28
|
-
📦 [NPM](https://www.npmjs.com/package/stock-sdk) | 📖 [GitHub](https://github.com/chengzuopeng/stock-sdk) | 🎮 [在线 Playground](https://stock-sdk
|
|
28
|
+
📦 [NPM](https://www.npmjs.com/package/stock-sdk) | 📖 [GitHub](https://github.com/chengzuopeng/stock-sdk) | 🎮 [在线 Playground](https://stock-sdk.linkdiary.cn/playground/)
|
|
29
29
|
|
|
30
30
|
🧭 [Stock Dashboard](https://chengzuopeng.github.io/stock-dashboard/):基于 stock-sdk 搭建的股票数据大盘演示站点,欢迎体验。
|
|
31
31
|
|
|
@@ -75,11 +75,11 @@
|
|
|
75
75
|
## 安装
|
|
76
76
|
|
|
77
77
|
```bash
|
|
78
|
-
# v2
|
|
79
|
-
npm install stock-sdk@beta
|
|
80
|
-
|
|
81
|
-
# v1 稳定版
|
|
78
|
+
# 最新版(v2:命名空间 API / CLI / MCP)
|
|
82
79
|
npm install stock-sdk
|
|
80
|
+
|
|
81
|
+
# v1 旧版(已封存,仅维护 critical 修复)
|
|
82
|
+
npm install stock-sdk@legacy
|
|
83
83
|
```
|
|
84
84
|
|
|
85
85
|
## 快速开始
|
|
@@ -154,7 +154,7 @@ npx stock-sdk mcp
|
|
|
154
154
|
|
|
155
155
|
环境变量 `STOCK_SDK_MCP_TOOLS=core|full|<逗号分隔工具名>` 控制工具集范围(默认 `core`)。
|
|
156
156
|
|
|
157
|
-
👉 [完整 MCP 文档](https://stock-sdk
|
|
157
|
+
👉 [完整 MCP 文档](https://stock-sdk.linkdiary.cn/mcp/)
|
|
158
158
|
|
|
159
159
|
---
|
|
160
160
|
|
|
@@ -259,7 +259,7 @@ import { SdkError, isSdkError, getSdkErrorCode } from 'stock-sdk/errors';
|
|
|
259
259
|
|
|
260
260
|
## API 概览(命名空间)
|
|
261
261
|
|
|
262
|
-
💡 完整 API 见 [官方文档](https://stock-sdk
|
|
262
|
+
💡 完整 API 见 [官方文档](https://stock-sdk.linkdiary.cn/api/)。v2 全部方法挂在命名空间下:
|
|
263
263
|
|
|
264
264
|
| 命名空间 | 代表方法 |
|
|
265
265
|
|---|---|
|
|
@@ -281,18 +281,18 @@ import { SdkError, isSdkError, getSdkErrorCode } from 'stock-sdk/errors';
|
|
|
281
281
|
| 顶层 | `sdk.search(keyword)` |
|
|
282
282
|
|
|
283
283
|
> 指标计算从主包改为 subpath:`import { calcMACD } from 'stock-sdk/indicators'`。
|
|
284
|
-
> 从 v1 扁平 API 迁移?见 [v1 → v2 迁移指南](https://stock-sdk
|
|
284
|
+
> 从 v1 扁平 API 迁移?见 [v1 → v2 迁移指南](https://stock-sdk.linkdiary.cn/guide/migration-v1-to-v2)(含完整 `sdk.getXxx()` → `sdk.<ns>.<method>()` 映射表)。
|
|
285
285
|
|
|
286
286
|
---
|
|
287
287
|
|
|
288
288
|
## 开发校验
|
|
289
289
|
|
|
290
290
|
```bash
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
291
|
+
pnpm typecheck
|
|
292
|
+
pnpm build
|
|
293
|
+
pnpm test
|
|
294
|
+
pnpm test:integration:smoke # 冒烟集成(真实网络)
|
|
295
|
+
pnpm test:integration:full # 全量集成回归
|
|
296
296
|
```
|
|
297
297
|
|
|
298
298
|
---
|
|
@@ -303,7 +303,7 @@ yarn test:integration:full # 全量集成回归
|
|
|
303
303
|
|
|
304
304
|
---
|
|
305
305
|
|
|
306
|
-
🌐 [官网](https://stock-sdk
|
|
306
|
+
🌐 [官网](https://stock-sdk.linkdiary.cn) | 📦 [NPM](https://www.npmjs.com/package/stock-sdk) | 📖 [GitHub](https://github.com/chengzuopeng/stock-sdk) | 🎮 [在线演示](https://stock-sdk.linkdiary.cn/playground/) | 🧭 [Stock Dashboard](https://chengzuopeng.github.io/stock-dashboard/) | 🐛 [Issues](https://github.com/chengzuopeng/stock-sdk/issues)
|
|
307
307
|
|
|
308
308
|
---
|
|
309
309
|
|
package/dist/cli.cjs
CHANGED
|
@@ -7,7 +7,7 @@ ${n.hint}`:"";return{text:`stock-sdk: ${o}${r}`}}let e=_chunk4Q7UQ5Q3cjs.k.call(
|
|
|
7
7
|
`)}return i}},{path:["kline","cn"],alias:["kline"],summary:"K\u7EBF(--market a/hk/us\uFF1B--limit \u622A\u65AD)",argShape:"symbol+options",positional:P,options:[$n,en,rn,sn,an,v],invoke:async(n,t)=>{let o=_(t,"kline"),e=_nullishCoalesce(pn(t.options.market), () => (un(o))),r=dn(t);return m(n,["kline",e==="hk"?"hk":e==="us"?"us":"cn"],[o,r])}},{path:["kline","cnMinute"],alias:["minute"],summary:"\u5206\u949FK\u7EBF/\u5206\u65F6(--period 1/5/15/30/60\uFF1B--market\uFF1B\u6E2F/\u7F8E --ndays)",argShape:"symbol+options",positional:P,options:[qn,en,rn,sn,an,v,Kn],invoke:async(n,t)=>{let o=_(t,"minute"),e=_nullishCoalesce(pn(t.options.market), () => (un(o))),r=dn(t),s=e==="hk"?"hkMinute":e==="us"?"usMinute":"cnMinute";if(t.options.ndays!==void 0){if(s==="cnMinute")throw new c("--ndays \u4EC5\u652F\u6301\u6E2F/\u7F8E\u80A1\u5206\u65F6","\u793A\u4F8B: stock-sdk minute 00700 --ndays 5");r.ndays=Number(t.options.ndays)}return m(n,["kline",s],[o,r])}},{path:["kline","withIndicators"],alias:["indicators"],summary:"\u5E26\u6307\u6807K\u7EBF(--ma 5,10,20 --macd --kdj --rsi --boll ...\uFF1B--market)",argShape:"symbol+options",positional:P,options:xn,invoke:mn},{path:["search"],alias:["search"],summary:"\u641C\u7D22\u80A1\u7968/\u6307\u6570/\u57FA\u91D1(--limit \u622A\u65AD)",argShape:"positional",positional:[{name:"keyword",required:!0}],options:[v],invoke:async(n,t)=>{let o=t.positional[0];if(!o)throw new c("\u7F3A\u5C11\u641C\u7D22\u5173\u952E\u8BCD","\u7528\u6CD5: stock-sdk search <keyword>");return n.search(o)}},{path:["quotes","timeline"],alias:["timeline"],summary:"\u5F53\u65E5\u5206\u65F6",argShape:"positional",positional:Ln,invoke:async(n,t)=>{let o=t.positional[0];if(!o)throw new c("\u7F3A\u5C11\u80A1\u7968\u4EE3\u7801","\u7528\u6CD5: stock-sdk timeline <code>");return n.quotes.timeline(o)}},{path:["codes","cn"],alias:["codes"],summary:"\u4EE3\u7801\u5217\u8868(market: a/hk/us/fund\uFF1B--simple\uFF1B--board sh/sz/bj/kc/cy)",argShape:"positional",positional:[{name:"market",required:!0,enum:["a","hk","us","fund"]}],options:[{flag:"simple",type:"boolean",desc:"\u53BB\u524D\u7F00"},{flag:"board",field:"market",type:"string",desc:"\u677F\u5757 sh/sz/bj/kc/cy(\u4EC5A\u80A1)"}],invoke:async(n,t)=>{let o=t.positional[0],e={};if(t.options.simple===!0&&(e.simple=!0),t.options.board!==void 0){if(o!=="a")throw new c("--board \u4EC5\u652F\u6301 A \u80A1(market=a)","\u53EF\u9009: sh / sz / bj / kc / cy");e.market=t.options.board}switch(o){case"a":return m(n,["codes","cn"],[e]);case"us":return m(n,["codes","us"],[e]);case"hk":return n.codes.hk();case"fund":return n.codes.fund();default:throw new c(`\u672A\u77E5\u5E02\u573A: ${o}`,"\u53EF\u9009: a / hk / us / fund")}}},{path:["calendar","marketStatus"],alias:["status"],summary:"\u5E02\u573A\u72B6\u6001(a/hk/us\uFF0C\u9ED8\u8BA4 a)",argShape:"positional",positional:[{name:"market",upper:!0,enum:_chunkYR2SVSXBcjs.b}],invoke:async(n,t)=>{let o=t.positional[0],e=o?o.toUpperCase():"A";return n.calendar.marketStatus(e)}},{path:["marketEvent","ztPool"],alias:["ztpool"],summary:"\u6DA8\u505C\u80A1\u6C60 zt/yesterday/strong/sub_new/broken/dt(--date)",argShape:"positional",positional:[{name:"type",enum:_chunkYR2SVSXBcjs.c}],options:[{flag:"date",type:"string",desc:"\u4EA4\u6613\u65E5 YYYYMMDD"}],invoke:async(n,t)=>{let o=t.positional[0],e=t.options.date;return n.marketEvent.ztPool(o,e)}},{path:["call"],alias:["call"],summary:"\u539F\u59CB\u76F4\u901A\uFF1A\u8C03\u7528\u4EFB\u610F\u547D\u540D\u7A7A\u95F4\u65B9\u6CD5\uFF08--args \u4F20 JSON \u5B9E\u53C2\u6570\u7EC4\uFF09",argShape:"positional",positional:[{name:"method",required:!0}],options:[{flag:"args",type:"string",desc:`JSON \u5B9E\u53C2\u6570\u7EC4\uFF0C\u5982 '[["sh600519"]]'`}],invoke:(n,t)=>{let o=t.positional[0];if(!o)throw new c("call \u7F3A\u5C11\u65B9\u6CD5\u8DEF\u5F84","\u7528\u6CD5: stock-sdk call <ns.method> --args '[...]'");let e=[],r=t.options.args;if(typeof r=="string")try{let p=JSON.parse(r);e=Array.isArray(p)?p:[p]}catch (e2){throw new c("--args \u4E0D\u662F\u5408\u6CD5 JSON",`\u793A\u4F8B: --args '[["sh600519"]]'`)}if(!new Set(Gn()).has(o))throw new c(`\u672A\u77E5\u65B9\u6CD5: ${o}`,"\u5F62\u5982 quotes.cn / kline.cn(\u4EC5\u547D\u540D\u7A7A\u95F4\u65B9\u6CD5,\u89C1 stock-sdk --help)");return m(n,o.split("."),e)}}],ln="mcp",zn=[...y,...k];function Gn(){return _chunkYR2SVSXBcjs.m.map(n=>n.path.join("."))}function _(n,t){let o=n.positional[0];if(!o)throw new c("\u7F3A\u5C11\u4EE3\u7801\u53C2\u6570",`\u7528\u6CD5: stock-sdk ${t} <symbol>`);return o}function hn(){let n=new Set(["help","h","version","V","quiet","q","pretty"]);for(let t of zn)for(let o of _nullishCoalesce(t.options, () => ([])))o.type==="boolean"&&n.add(o.flag);for(let t of _chunkYR2SVSXBcjs.l)n.add(t);return n}function kn(n){if(n.length===0)return null;for(let o=Math.min(3,n.length);o>=2;o--){let e=n.slice(0,o).join("."),r=k.find(s=>s.path.join(".")===e);if(r)return{spec:r,rest:n.slice(o)}}for(let o of y)if(_optionalChain([o, 'access', _8 => _8.alias, 'optionalAccess', _9 => _9.includes, 'call', _10 => _10(n[0])]))return{spec:o,rest:n.slice(1)};let t=k.find(o=>o.path.join(".")===n[0]);return t?{spec:t,rest:n.slice(1)}:null}function gn(){let n=["stock-sdk \u2014\u2014 \u80A1\u7968\u884C\u60C5\u547D\u4EE4\u884C\uFF08\u57FA\u4E8E stock-sdk v2 \u547D\u540D\u7A7A\u95F4 API\uFF09","","\u7528\u6CD5:"," stock-sdk <command> [args] [--flags]"," stock-sdk <namespace> <method> [args] [--flags] # \u76F4\u8FBE\u4EFB\u610F\u547D\u540D\u7A7A\u95F4\u65B9\u6CD5","","\u5E38\u7528\u547D\u4EE4:"];for(let o of y){let e=_nullishCoalesce(_optionalChain([o, 'access', _11 => _11.alias, 'optionalAccess', _12 => _12[0]]), () => (o.path.join(" ")));n.push(` ${e.padEnd(12)} ${o.summary}`)}n.push(" mcp \u542F\u52A8 MCP server (stdio)"),n.push(""),n.push("\u547D\u540D\u7A7A\u95F4\uFF08stock-sdk <ns> <method> ...\uFF09:");let t=[...new Set(k.map(o=>o.path[0]))];return n.push(" "+t.join(" / ")),n.push(""),n.push("\u5168\u5C40\u9009\u9879:"),n.push(" -f, --format json|table|csv \u8F93\u51FA\u683C\u5F0F (\u9ED8\u8BA4 json)"),n.push(" --pretty JSON \u7F29\u8FDB\u7F8E\u5316"),n.push(" --timeout <ms> \u8BF7\u6C42\u8D85\u65F6"),n.push(" -q, --quiet \u9759\u9ED8(\u53EA\u8F93\u51FA\u6570\u636E)"),n.push(" -h, --help \u663E\u793A\u5E2E\u52A9"),n.push(" -V, --version \u663E\u793A\u7248\u672C"),n.push(""),n.push("\u793A\u4F8B:"),n.push(" stock-sdk quote 600519 000858 00700"),n.push(" stock-sdk kline 600519 --period weekly --adjust hfq --limit 30"),n.push(" stock-sdk indicators 600519 --ma 5,10,20 --macd"),n.push(" stock-sdk board industry list --format table"),n.push(" stock-sdk options etf dailyKline 10004336"),n.push(""),n.push("\u8FD0\u884C `stock-sdk <command> --help` \u67E5\u770B\u5355\u6761\u547D\u4EE4\u7528\u6CD5\u3002"),n.join(`
|
|
8
8
|
`)}function Sn(n){let t=_nullishCoalesce(_optionalChain([n, 'access', _13 => _13.alias, 'optionalAccess', _14 => _14[0]]), () => (n.path.join(" "))),o=[`${t} \u2014\u2014 ${n.summary}`,""],e=(_nullishCoalesce(n.positional, () => ([]))).map(r=>{let s=r.required?`<${r.name}>`:`[${r.name}]`;return r.variadic?`${s}...`:s}).join(" ");if(o.push(`\u7528\u6CD5: stock-sdk ${t}${e?" "+e:""} [--flags]`),_optionalChain([n, 'access', _15 => _15.options, 'optionalAccess', _16 => _16.length])){o.push(""),o.push("\u9009\u9879:");for(let r of n.options){let s=r.enum?` (${r.enum.join("/")})`:"";o.push(` --${r.flag.padEnd(12)} ${r.desc}${s}`)}}return o.join(`
|
|
9
9
|
`)}function yn(n,t=new Set){let o=[],e={},r=!1,s=(i,a)=>{let u=e[i];if(u===void 0){e[i]=a;return}if(typeof a!="string"){e[i]=a;return}Array.isArray(u)?u.push(a):typeof u=="string"?e[i]=[u,a]:e[i]=a},p=i=>i!==void 0&&(i==="-"||!i.startsWith("-")||/^-\d/.test(i)),d=(i,a)=>{if(t.has(i))return s(i,!0),a;let u=n[a+1];return p(u)?(s(i,u),a+1):(s(i,!0),a)};for(let i=0;i<n.length;i++){let a=n[i];if(r){o.push(a);continue}if(a==="--"){r=!0;continue}if(a.startsWith("--")&&a.length>2){let u=a.slice(2),f=u.indexOf("=");f>=0?s(u.slice(0,f),u.slice(f+1)):i=d(u,i)}else if(a.startsWith("-")&&a.length>1&&!Wn(a)){let u=a.slice(1),f=u.indexOf("=");f>=0?s(u.slice(0,f),u.slice(f+1)):i=d(u,i)}else o.push(a)}return{positional:o,options:e}}function Wn(n){return/^-\d/.test(n)}var Yn=hn();process.stdout.on("error",n=>{n.code==="EPIPE"&&process.exit(0),process.stderr.write(`stock-sdk: stdout error: ${n.message}
|
|
10
|
-
`)});function Bn(){return"2.0.0
|
|
10
|
+
`)});function Bn(){return"2.0.0"}function Qn(n){let t=_nullishCoalesce(n.format, () => (n.f)),o=t==="table"||t==="csv"?t:"json",e;if(typeof n.timeout=="string"||typeof n.timeout=="number"){let r=Number(n.timeout);!Number.isNaN(r)&&r>0&&(e=r)}return{format:o,pretty:n.pretty===!0,quiet:n.quiet===!0||n.q===!0,help:n.help===!0||n.h===!0,version:n.version===!0||n.V===!0,timeout:e}}async function Xn(){try{return(await Promise.resolve().then(() => _interopRequireWildcard(require("./mcp.cjs")))).startMcpServer(),0}catch(n){let t=n instanceof Error?n.message:String(n);return process.stderr.write(`stock-sdk: \u65E0\u6CD5\u542F\u52A8 MCP server: ${t}
|
|
11
11
|
`),1}}async function Zn(n){let t="json";try{let o=yn(n,Yn),e=Qn(o.options);if(t=e.format,e.version)return process.stdout.write(Bn()+`
|
|
12
12
|
`),0;if(o.positional.length===0)return process.stdout.write(gn()+`
|
|
13
13
|
`),0;if(o.positional[0]===ln)return e.help?(process.stdout.write(`stock-sdk mcp \u2014\u2014 \u542F\u52A8 MCP server (stdio transport)
|
package/dist/cli.js
CHANGED
|
@@ -7,7 +7,7 @@ ${n.hint}`:"";return{text:`stock-sdk: ${o}${r}`}}let e=w(n);return t==="json"?{t
|
|
|
7
7
|
`)}return i}},{path:["kline","cn"],alias:["kline"],summary:"K\u7EBF(--market a/hk/us\uFF1B--limit \u622A\u65AD)",argShape:"symbol+options",positional:P,options:[$n,en,rn,sn,an,v],invoke:async(n,t)=>{let o=_(t,"kline"),e=pn(t.options.market)??un(o),r=dn(t);return m(n,["kline",e==="hk"?"hk":e==="us"?"us":"cn"],[o,r])}},{path:["kline","cnMinute"],alias:["minute"],summary:"\u5206\u949FK\u7EBF/\u5206\u65F6(--period 1/5/15/30/60\uFF1B--market\uFF1B\u6E2F/\u7F8E --ndays)",argShape:"symbol+options",positional:P,options:[qn,en,rn,sn,an,v,Kn],invoke:async(n,t)=>{let o=_(t,"minute"),e=pn(t.options.market)??un(o),r=dn(t),s=e==="hk"?"hkMinute":e==="us"?"usMinute":"cnMinute";if(t.options.ndays!==void 0){if(s==="cnMinute")throw new c("--ndays \u4EC5\u652F\u6301\u6E2F/\u7F8E\u80A1\u5206\u65F6","\u793A\u4F8B: stock-sdk minute 00700 --ndays 5");r.ndays=Number(t.options.ndays)}return m(n,["kline",s],[o,r])}},{path:["kline","withIndicators"],alias:["indicators"],summary:"\u5E26\u6307\u6807K\u7EBF(--ma 5,10,20 --macd --kdj --rsi --boll ...\uFF1B--market)",argShape:"symbol+options",positional:P,options:xn,invoke:mn},{path:["search"],alias:["search"],summary:"\u641C\u7D22\u80A1\u7968/\u6307\u6570/\u57FA\u91D1(--limit \u622A\u65AD)",argShape:"positional",positional:[{name:"keyword",required:!0}],options:[v],invoke:async(n,t)=>{let o=t.positional[0];if(!o)throw new c("\u7F3A\u5C11\u641C\u7D22\u5173\u952E\u8BCD","\u7528\u6CD5: stock-sdk search <keyword>");return n.search(o)}},{path:["quotes","timeline"],alias:["timeline"],summary:"\u5F53\u65E5\u5206\u65F6",argShape:"positional",positional:Ln,invoke:async(n,t)=>{let o=t.positional[0];if(!o)throw new c("\u7F3A\u5C11\u80A1\u7968\u4EE3\u7801","\u7528\u6CD5: stock-sdk timeline <code>");return n.quotes.timeline(o)}},{path:["codes","cn"],alias:["codes"],summary:"\u4EE3\u7801\u5217\u8868(market: a/hk/us/fund\uFF1B--simple\uFF1B--board sh/sz/bj/kc/cy)",argShape:"positional",positional:[{name:"market",required:!0,enum:["a","hk","us","fund"]}],options:[{flag:"simple",type:"boolean",desc:"\u53BB\u524D\u7F00"},{flag:"board",field:"market",type:"string",desc:"\u677F\u5757 sh/sz/bj/kc/cy(\u4EC5A\u80A1)"}],invoke:async(n,t)=>{let o=t.positional[0],e={};if(t.options.simple===!0&&(e.simple=!0),t.options.board!==void 0){if(o!=="a")throw new c("--board \u4EC5\u652F\u6301 A \u80A1(market=a)","\u53EF\u9009: sh / sz / bj / kc / cy");e.market=t.options.board}switch(o){case"a":return m(n,["codes","cn"],[e]);case"us":return m(n,["codes","us"],[e]);case"hk":return n.codes.hk();case"fund":return n.codes.fund();default:throw new c(`\u672A\u77E5\u5E02\u573A: ${o}`,"\u53EF\u9009: a / hk / us / fund")}}},{path:["calendar","marketStatus"],alias:["status"],summary:"\u5E02\u573A\u72B6\u6001(a/hk/us\uFF0C\u9ED8\u8BA4 a)",argShape:"positional",positional:[{name:"market",upper:!0,enum:I}],invoke:async(n,t)=>{let o=t.positional[0],e=o?o.toUpperCase():"A";return n.calendar.marketStatus(e)}},{path:["marketEvent","ztPool"],alias:["ztpool"],summary:"\u6DA8\u505C\u80A1\u6C60 zt/yesterday/strong/sub_new/broken/dt(--date)",argShape:"positional",positional:[{name:"type",enum:T}],options:[{flag:"date",type:"string",desc:"\u4EA4\u6613\u65E5 YYYYMMDD"}],invoke:async(n,t)=>{let o=t.positional[0],e=t.options.date;return n.marketEvent.ztPool(o,e)}},{path:["call"],alias:["call"],summary:"\u539F\u59CB\u76F4\u901A\uFF1A\u8C03\u7528\u4EFB\u610F\u547D\u540D\u7A7A\u95F4\u65B9\u6CD5\uFF08--args \u4F20 JSON \u5B9E\u53C2\u6570\u7EC4\uFF09",argShape:"positional",positional:[{name:"method",required:!0}],options:[{flag:"args",type:"string",desc:`JSON \u5B9E\u53C2\u6570\u7EC4\uFF0C\u5982 '[["sh600519"]]'`}],invoke:(n,t)=>{let o=t.positional[0];if(!o)throw new c("call \u7F3A\u5C11\u65B9\u6CD5\u8DEF\u5F84","\u7528\u6CD5: stock-sdk call <ns.method> --args '[...]'");let e=[],r=t.options.args;if(typeof r=="string")try{let p=JSON.parse(r);e=Array.isArray(p)?p:[p]}catch{throw new c("--args \u4E0D\u662F\u5408\u6CD5 JSON",`\u793A\u4F8B: --args '[["sh600519"]]'`)}if(!new Set(Gn()).has(o))throw new c(`\u672A\u77E5\u65B9\u6CD5: ${o}`,"\u5F62\u5982 quotes.cn / kline.cn(\u4EC5\u547D\u540D\u7A7A\u95F4\u65B9\u6CD5,\u89C1 stock-sdk --help)");return m(n,o.split("."),e)}}],ln="mcp",zn=[...y,...k];function Gn(){return g.map(n=>n.path.join("."))}function _(n,t){let o=n.positional[0];if(!o)throw new c("\u7F3A\u5C11\u4EE3\u7801\u53C2\u6570",`\u7528\u6CD5: stock-sdk ${t} <symbol>`);return o}function hn(){let n=new Set(["help","h","version","V","quiet","q","pretty"]);for(let t of zn)for(let o of t.options??[])o.type==="boolean"&&n.add(o.flag);for(let t of C)n.add(t);return n}function kn(n){if(n.length===0)return null;for(let o=Math.min(3,n.length);o>=2;o--){let e=n.slice(0,o).join("."),r=k.find(s=>s.path.join(".")===e);if(r)return{spec:r,rest:n.slice(o)}}for(let o of y)if(o.alias?.includes(n[0]))return{spec:o,rest:n.slice(1)};let t=k.find(o=>o.path.join(".")===n[0]);return t?{spec:t,rest:n.slice(1)}:null}function gn(){let n=["stock-sdk \u2014\u2014 \u80A1\u7968\u884C\u60C5\u547D\u4EE4\u884C\uFF08\u57FA\u4E8E stock-sdk v2 \u547D\u540D\u7A7A\u95F4 API\uFF09","","\u7528\u6CD5:"," stock-sdk <command> [args] [--flags]"," stock-sdk <namespace> <method> [args] [--flags] # \u76F4\u8FBE\u4EFB\u610F\u547D\u540D\u7A7A\u95F4\u65B9\u6CD5","","\u5E38\u7528\u547D\u4EE4:"];for(let o of y){let e=o.alias?.[0]??o.path.join(" ");n.push(` ${e.padEnd(12)} ${o.summary}`)}n.push(" mcp \u542F\u52A8 MCP server (stdio)"),n.push(""),n.push("\u547D\u540D\u7A7A\u95F4\uFF08stock-sdk <ns> <method> ...\uFF09:");let t=[...new Set(k.map(o=>o.path[0]))];return n.push(" "+t.join(" / ")),n.push(""),n.push("\u5168\u5C40\u9009\u9879:"),n.push(" -f, --format json|table|csv \u8F93\u51FA\u683C\u5F0F (\u9ED8\u8BA4 json)"),n.push(" --pretty JSON \u7F29\u8FDB\u7F8E\u5316"),n.push(" --timeout <ms> \u8BF7\u6C42\u8D85\u65F6"),n.push(" -q, --quiet \u9759\u9ED8(\u53EA\u8F93\u51FA\u6570\u636E)"),n.push(" -h, --help \u663E\u793A\u5E2E\u52A9"),n.push(" -V, --version \u663E\u793A\u7248\u672C"),n.push(""),n.push("\u793A\u4F8B:"),n.push(" stock-sdk quote 600519 000858 00700"),n.push(" stock-sdk kline 600519 --period weekly --adjust hfq --limit 30"),n.push(" stock-sdk indicators 600519 --ma 5,10,20 --macd"),n.push(" stock-sdk board industry list --format table"),n.push(" stock-sdk options etf dailyKline 10004336"),n.push(""),n.push("\u8FD0\u884C `stock-sdk <command> --help` \u67E5\u770B\u5355\u6761\u547D\u4EE4\u7528\u6CD5\u3002"),n.join(`
|
|
8
8
|
`)}function Sn(n){let t=n.alias?.[0]??n.path.join(" "),o=[`${t} \u2014\u2014 ${n.summary}`,""],e=(n.positional??[]).map(r=>{let s=r.required?`<${r.name}>`:`[${r.name}]`;return r.variadic?`${s}...`:s}).join(" ");if(o.push(`\u7528\u6CD5: stock-sdk ${t}${e?" "+e:""} [--flags]`),n.options?.length){o.push(""),o.push("\u9009\u9879:");for(let r of n.options){let s=r.enum?` (${r.enum.join("/")})`:"";o.push(` --${r.flag.padEnd(12)} ${r.desc}${s}`)}}return o.join(`
|
|
9
9
|
`)}function yn(n,t=new Set){let o=[],e={},r=!1,s=(i,a)=>{let u=e[i];if(u===void 0){e[i]=a;return}if(typeof a!="string"){e[i]=a;return}Array.isArray(u)?u.push(a):typeof u=="string"?e[i]=[u,a]:e[i]=a},p=i=>i!==void 0&&(i==="-"||!i.startsWith("-")||/^-\d/.test(i)),d=(i,a)=>{if(t.has(i))return s(i,!0),a;let u=n[a+1];return p(u)?(s(i,u),a+1):(s(i,!0),a)};for(let i=0;i<n.length;i++){let a=n[i];if(r){o.push(a);continue}if(a==="--"){r=!0;continue}if(a.startsWith("--")&&a.length>2){let u=a.slice(2),f=u.indexOf("=");f>=0?s(u.slice(0,f),u.slice(f+1)):i=d(u,i)}else if(a.startsWith("-")&&a.length>1&&!Wn(a)){let u=a.slice(1),f=u.indexOf("=");f>=0?s(u.slice(0,f),u.slice(f+1)):i=d(u,i)}else o.push(a)}return{positional:o,options:e}}function Wn(n){return/^-\d/.test(n)}var Yn=hn();process.stdout.on("error",n=>{n.code==="EPIPE"&&process.exit(0),process.stderr.write(`stock-sdk: stdout error: ${n.message}
|
|
10
|
-
`)});function Bn(){return"2.0.0
|
|
10
|
+
`)});function Bn(){return"2.0.0"}function Qn(n){let t=n.format??n.f,o=t==="table"||t==="csv"?t:"json",e;if(typeof n.timeout=="string"||typeof n.timeout=="number"){let r=Number(n.timeout);!Number.isNaN(r)&&r>0&&(e=r)}return{format:o,pretty:n.pretty===!0,quiet:n.quiet===!0||n.q===!0,help:n.help===!0||n.h===!0,version:n.version===!0||n.V===!0,timeout:e}}async function Xn(){try{return(await import("./mcp.js")).startMcpServer(),0}catch(n){let t=n instanceof Error?n.message:String(n);return process.stderr.write(`stock-sdk: \u65E0\u6CD5\u542F\u52A8 MCP server: ${t}
|
|
11
11
|
`),1}}async function Zn(n){let t="json";try{let o=yn(n,Yn),e=Qn(o.options);if(t=e.format,e.version)return process.stdout.write(Bn()+`
|
|
12
12
|
`),0;if(o.positional.length===0)return process.stdout.write(gn()+`
|
|
13
13
|
`),0;if(o.positional[0]===ln)return e.help?(process.stdout.write(`stock-sdk mcp \u2014\u2014 \u542F\u52A8 MCP server (stdio transport)
|
package/dist/mcp.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkYR2SVSXBcjs = require('./chunk-YR2SVSXB.cjs');var _chunk2PYGJ5I5cjs = require('./chunk-2PYGJ5I5.cjs');require('./chunk-PMERLSCU.cjs');require('./chunk-3NSUE34F.cjs');require('./chunk-TVIEKKDQ.cjs');var _chunk4Q7UQ5Q3cjs = require('./chunk-4Q7UQ5Q3.cjs');require('./chunk-4VDLQK6F.cjs');var v=["2025-11-25","2025-06-18"],X=v[0],R={name:"stock-sdk",version:"2.0.0
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkYR2SVSXBcjs = require('./chunk-YR2SVSXB.cjs');var _chunk2PYGJ5I5cjs = require('./chunk-2PYGJ5I5.cjs');require('./chunk-PMERLSCU.cjs');require('./chunk-3NSUE34F.cjs');require('./chunk-TVIEKKDQ.cjs');var _chunk4Q7UQ5Q3cjs = require('./chunk-4Q7UQ5Q3.cjs');require('./chunk-4VDLQK6F.cjs');var v=["2025-11-25","2025-06-18"],X=v[0],R={name:"stock-sdk",version:"2.0.0"},K=-32700,S=-32600,$=-32601,d=-32602,Y=-32603;function L(e){return typeof e=="string"&&v.includes(e)?e:X}function p(...e){process.stderr.write(e.map(o=>typeof o=="string"?o:JSON.stringify(o)).join(" ")+`
|
|
2
2
|
`)}function l(e){process.stdout.write(JSON.stringify(e)+`
|
|
3
3
|
`)}var k=1e6;function q(e){let o="",t=!1;process.stdin.setEncoding("utf8"),process.stdin.on("data",r=>{o+=r;let n=o.indexOf(`
|
|
4
4
|
`);for(;n>=0;){let i=o.slice(0,n);o=o.slice(n+1),t?(t=!1,l({jsonrpc:"2.0",id:null,error:{code:S,message:`Message too large (limit ${k} bytes)`}})):i.trim()&&e(i),n=o.indexOf(`
|
package/dist/mcp.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as x,d as I,e as C,g as b,h as A,j as N,m as J,n as j}from"./chunk-GBHWMR2O.js";import{t as M}from"./chunk-4PVVFEOQ.js";import"./chunk-G5KF73BW.js";import"./chunk-D2MGPO3R.js";import"./chunk-DU7MCVLJ.js";import{e as w,i as T}from"./chunk-UBIQBXQ7.js";import"./chunk-WOT6VMZA.js";var v=["2025-11-25","2025-06-18"],X=v[0],R={name:"stock-sdk",version:"2.0.0
|
|
1
|
+
import{a as x,d as I,e as C,g as b,h as A,j as N,m as J,n as j}from"./chunk-GBHWMR2O.js";import{t as M}from"./chunk-4PVVFEOQ.js";import"./chunk-G5KF73BW.js";import"./chunk-D2MGPO3R.js";import"./chunk-DU7MCVLJ.js";import{e as w,i as T}from"./chunk-UBIQBXQ7.js";import"./chunk-WOT6VMZA.js";var v=["2025-11-25","2025-06-18"],X=v[0],R={name:"stock-sdk",version:"2.0.0"},K=-32700,S=-32600,$=-32601,d=-32602,Y=-32603;function L(e){return typeof e=="string"&&v.includes(e)?e:X}function p(...e){process.stderr.write(e.map(o=>typeof o=="string"?o:JSON.stringify(o)).join(" ")+`
|
|
2
2
|
`)}function l(e){process.stdout.write(JSON.stringify(e)+`
|
|
3
3
|
`)}var k=1e6;function q(e){let o="",t=!1;process.stdin.setEncoding("utf8"),process.stdin.on("data",r=>{o+=r;let n=o.indexOf(`
|
|
4
4
|
`);for(;n>=0;){let i=o.slice(0,n);o=o.slice(n+1),t?(t=!1,l({jsonrpc:"2.0",id:null,error:{code:S,message:`Message too large (limit ${k} bytes)`}})):i.trim()&&e(i),n=o.indexOf(`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stock-sdk",
|
|
3
|
-
"version": "2.0.0
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -16,12 +16,12 @@
|
|
|
16
16
|
"test:integration": "RUN_INTEGRATION=1 vitest run",
|
|
17
17
|
"test:integration:smoke": "RUN_INTEGRATION=1 vitest run test/integration/providers/tencent/quote.int.test.ts test/integration/providers/tencent/batch.int.test.ts test/integration/providers/tencent/tradeCalendar.int.test.ts test/integration/sdk/timeout.int.test.ts",
|
|
18
18
|
"test:integration:full": "RUN_INTEGRATION=1 vitest run test/integration",
|
|
19
|
-
"docs:meta": "
|
|
20
|
-
"docs:check": "
|
|
21
|
-
"dev
|
|
22
|
-
"preview
|
|
23
|
-
"build:
|
|
24
|
-
"build:
|
|
19
|
+
"docs:meta": "pnpm build && node ./scripts/generate-doc-meta.js",
|
|
20
|
+
"docs:check": "pnpm docs:meta && node ./scripts/check-doc-consistency.js",
|
|
21
|
+
"dev": "vitepress dev website",
|
|
22
|
+
"preview": "vitepress preview website",
|
|
23
|
+
"build:docs": "pnpm docs:meta && DOCS_BASE=/ vitepress build website",
|
|
24
|
+
"build:pages": "pnpm docs:meta && DOCS_BASE=/stock-sdk/ vitepress build website",
|
|
25
25
|
"prepare": "node ./scripts/install-git-hooks.js"
|
|
26
26
|
},
|
|
27
27
|
"exports": {
|
|
@@ -120,5 +120,5 @@
|
|
|
120
120
|
"registry": "https://registry.npmjs.org/",
|
|
121
121
|
"provenance": true
|
|
122
122
|
},
|
|
123
|
-
"packageManager": "
|
|
123
|
+
"packageManager": "pnpm@10.34.4"
|
|
124
124
|
}
|