@v587d/capital-generation 2.8.2 → 2.9.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.
Files changed (164) hide show
  1. package/CHANGELOG.md +87 -1
  2. package/README.md +41 -20
  3. package/chart-ui/README.md +1 -1
  4. package/chart-ui/client.src.cjs +7 -16
  5. package/chart-ui/index.js +12 -33
  6. package/chart-ui/package.json +2 -2
  7. package/config/client.js +18 -39
  8. package/config/client.src.cjs +79 -217
  9. package/config/index.js +22 -72
  10. package/config/package.json +2 -2
  11. package/cordis.patch.yml +46 -51
  12. package/lib/agents/bash-guard.d.ts +9 -55
  13. package/lib/agents/bash-guard.js +27 -67
  14. package/lib/agents/preset-roster.d.ts +22 -0
  15. package/lib/agents/preset-roster.js +87 -0
  16. package/lib/agents/role-tool-policy.d.ts +46 -0
  17. package/lib/agents/role-tool-policy.js +205 -0
  18. package/lib/agents/root-tool-policy.d.ts +28 -124
  19. package/lib/agents/root-tool-policy.js +164 -237
  20. package/lib/agents/selected-skills-provider.d.ts +2 -6
  21. package/lib/agents/selected-skills-provider.js +27 -84
  22. package/lib/capital-settings.d.ts +27 -0
  23. package/lib/capital-settings.js +23 -0
  24. package/lib/chart/artifact-ref.d.ts +3 -8
  25. package/lib/chart/artifact-ref.js +3 -8
  26. package/lib/chart/downsample.d.ts +2 -5
  27. package/lib/chart/downsample.js +3 -8
  28. package/lib/chart/errors.d.ts +3 -7
  29. package/lib/chart/errors.js +1 -2
  30. package/lib/chart/event-context.d.ts +8 -0
  31. package/lib/chart/event-context.js +39 -0
  32. package/lib/chart/events.d.ts +21 -78
  33. package/lib/chart/events.js +40 -189
  34. package/lib/chart/html.d.ts +2 -5
  35. package/lib/chart/html.js +8 -15
  36. package/lib/chart/runtime.d.ts +5 -18
  37. package/lib/chart/runtime.js +14 -34
  38. package/lib/chart/series.d.ts +10 -17
  39. package/lib/chart/series.js +22 -47
  40. package/lib/chart/source-token.d.ts +5 -13
  41. package/lib/chart/source-token.js +18 -17
  42. package/lib/chart/spec.d.ts +6 -12
  43. package/lib/chart/spec.js +7 -31
  44. package/lib/chart/tool.d.ts +6 -29
  45. package/lib/chart/tool.js +9 -23
  46. package/lib/chart-render-entry.d.ts +9 -0
  47. package/lib/chart-render-entry.js +17 -0
  48. package/lib/chart-source-entry.d.ts +13 -0
  49. package/lib/chart-source-entry.js +20 -0
  50. package/lib/collect-entry.d.ts +9 -0
  51. package/lib/collect-entry.js +10 -0
  52. package/lib/collector-runtime.d.ts +22 -0
  53. package/lib/collector-runtime.js +97 -0
  54. package/lib/data-collector/args.d.ts +6 -24
  55. package/lib/data-collector/args.js +6 -24
  56. package/lib/data-collector/dataset-tools.d.ts +7 -1
  57. package/lib/data-collector/dataset-tools.js +27 -56
  58. package/lib/data-collector/describe.d.ts +8 -33
  59. package/lib/data-collector/describe.js +17 -70
  60. package/lib/data-collector/hub.d.ts +27 -85
  61. package/lib/data-collector/hub.js +19 -85
  62. package/lib/data-collector/query-time.d.ts +7 -26
  63. package/lib/data-collector/query-time.js +8 -27
  64. package/lib/data-collector/store.d.ts +40 -117
  65. package/lib/data-collector/store.js +32 -111
  66. package/lib/data-collector/time-axis.d.ts +16 -76
  67. package/lib/data-collector/time-axis.js +25 -111
  68. package/lib/data-collector/tools.d.ts +6 -6
  69. package/lib/data-collector/tools.js +34 -43
  70. package/lib/dataset-read-entry.d.ts +9 -0
  71. package/lib/dataset-read-entry.js +7 -0
  72. package/lib/index.d.ts +7 -117
  73. package/lib/index.js +43 -422
  74. package/lib/net/eastmoney-client.d.ts +13 -65
  75. package/lib/net/eastmoney-client.js +12 -53
  76. package/lib/net/throttle.d.ts +2 -13
  77. package/lib/net/throttle.js +3 -14
  78. package/lib/ocr/client.d.ts +12 -21
  79. package/lib/ocr/client.js +23 -40
  80. package/lib/ocr/markdown.d.ts +20 -26
  81. package/lib/ocr/markdown.js +23 -36
  82. package/lib/ocr/store.d.ts +14 -47
  83. package/lib/ocr/store.js +15 -45
  84. package/lib/ocr-entry.d.ts +9 -0
  85. package/lib/ocr-entry.js +10 -0
  86. package/lib/policy-entry.d.ts +17 -0
  87. package/lib/policy-entry.js +22 -0
  88. package/lib/preset-claim.d.ts +22 -0
  89. package/lib/preset-claim.js +24 -0
  90. package/lib/preset-ids.d.ts +38 -0
  91. package/lib/preset-ids.js +46 -0
  92. package/lib/retriever-config.d.ts +37 -0
  93. package/lib/retriever-config.js +36 -0
  94. package/lib/retriever-runtime.d.ts +31 -0
  95. package/lib/retriever-runtime.js +82 -0
  96. package/lib/root-extras-entry.d.ts +17 -0
  97. package/lib/root-extras-entry.js +25 -0
  98. package/lib/runtime-entry.d.ts +15 -0
  99. package/lib/runtime-entry.js +5 -0
  100. package/lib/runtime.d.ts +21 -0
  101. package/lib/runtime.js +33 -0
  102. package/lib/search-entry.d.ts +9 -0
  103. package/lib/search-entry.js +9 -0
  104. package/lib/sources/eastmoney-http.js +20 -68
  105. package/lib/sources/ftshare-rest.d.ts +6 -31
  106. package/lib/sources/ftshare-rest.js +1194 -225
  107. package/lib/sources/fuyao-core.d.ts +8 -18
  108. package/lib/sources/fuyao-core.js +10 -21
  109. package/lib/sources/fuyao-rest.d.ts +2 -6
  110. package/lib/sources/fuyao-rest.js +23 -102
  111. package/lib/sources/security-code.d.ts +6 -12
  112. package/lib/sources/security-code.js +6 -12
  113. package/lib/sources/security-identity.d.ts +1 -4
  114. package/lib/sources/security-identity.js +3 -8
  115. package/lib/sources/tencent-http.js +14 -28
  116. package/lib/sources/tencent-public-core.d.ts +8 -60
  117. package/lib/sources/tencent-public-core.js +12 -77
  118. package/lib/sources/wind-mcp.d.ts +0 -5
  119. package/lib/sources/wind-mcp.js +23 -78
  120. package/lib/sources-entry.d.ts +9 -0
  121. package/lib/sources-entry.js +9 -0
  122. package/lib/time/tools.d.ts +8 -31
  123. package/lib/time/tools.js +39 -64
  124. package/lib/time-entry.d.ts +9 -0
  125. package/lib/time-entry.js +7 -0
  126. package/lib/tool-exec.d.ts +45 -11
  127. package/lib/tool-exec.js +59 -6
  128. package/lib/user-customization.d.ts +14 -0
  129. package/lib/user-customization.js +47 -0
  130. package/lib/watchlist/tools.d.ts +3 -13
  131. package/lib/watchlist/tools.js +10 -30
  132. package/lib/watchlist-entry.d.ts +9 -0
  133. package/lib/watchlist-entry.js +6 -0
  134. package/lib/web-retriever/engines.d.ts +6 -11
  135. package/lib/web-retriever/engines.js +9 -14
  136. package/lib/web-retriever/html-markdown.d.ts +14 -34
  137. package/lib/web-retriever/html-markdown.js +39 -75
  138. package/lib/web-retriever/local-fetch.d.ts +22 -58
  139. package/lib/web-retriever/local-fetch.js +33 -77
  140. package/lib/web-retriever/retriever.d.ts +6 -18
  141. package/lib/web-retriever/retriever.js +7 -7
  142. package/lib/web-retriever/sources.d.ts +37 -124
  143. package/lib/web-retriever/sources.js +64 -196
  144. package/lib/web-retriever/tools.d.ts +43 -27
  145. package/lib/web-retriever/tools.js +99 -137
  146. package/lib/web-retriever/wind-client.d.ts +14 -31
  147. package/lib/web-retriever/wind-client.js +16 -32
  148. package/locale/zh.json +1 -1
  149. package/package.json +67 -7
  150. package/preset/capital-generation/README.md +87 -53
  151. package/preset/capital-generation/agent.patch.yml +526 -337
  152. package/preset/capital-generation/skills/capital-data-profile/SKILL.md +2 -2
  153. package/preset/capital-generation/skills/capital-data-protocol/SKILL.md +1 -1
  154. package/preset/capital-generation/skills/capital-equity-research/SKILL.md +1 -1
  155. package/preset/capital-generation/skills/capital-event-impact/SKILL.md +1 -1
  156. package/preset/capital-generation/skills/capital-orchestration/SKILL.md +15 -19
  157. package/preset/capital-generation/skills/capital-portfolio-review/SKILL.md +1 -1
  158. package/preset/capital-generation/skills/capital-visualization-protocol/SKILL.md +9 -12
  159. package/preset/capital-generation/skills/capital-web-evidence/SKILL.md +1 -1
  160. package/watchlist/client.js +15 -148
  161. package/watchlist/client.src.cjs +148 -662
  162. package/watchlist/holding-rules.js +11 -38
  163. package/watchlist/index.js +127 -397
  164. package/watchlist/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -5,7 +5,93 @@
5
5
 
6
6
  **版本号口径(本仓实践)**:
7
7
  - **第三位(patch)**:不破坏既有工具 / 配置 / 会话的新增与修复(如 2.1.1、2.1.2)。
8
- - **第二位(minor)**:有需要用户知晓的行为变更,且段内附迁移说明(如 2.1.0 的图表呈现通道重做、2.2.0 的数据源与检索来源扩容、2.4.0 的**必须换宿主版本**——本插件自己的工具与数据契约没变,所以只抬第二位)。
8
+ - **第二位(minor)**:有需要用户知晓的行为变更,且段内附迁移说明(如 2.1.0 的图表呈现通道重做、2.2.0 的数据源与检索来源扩容、2.4.0 的**必须换宿主版本**、2.9.0 的选择器收敛与质检前置——本插件自己的工具与数据契约没变,所以只抬第二位)。
9
+
10
+ ## [2.9.0] - 2026-10-20
11
+
12
+ 新会话选择器收敛到三个用户模式:**自动模式 / 行情专家 / 资讯专员**。分析师与绘图专员继续注册,
13
+ 但从选择器和预设管理里隐藏,只由自动模式按需委派。结构化数据的质检与可视化 gate 同时改成
14
+ **每份数据必经**:用户提不提图,都不再决定是否派分析师。宿主要求从 DSH`@0.2.0-rc.2` 抬到
15
+ `@0.2.1-rc.2`,**本次必须换宿主版本**。
16
+
17
+ ### Added
18
+
19
+ - **三个用户模式**:新会话选择器最前面依次是「自动模式」「行情专家」「资讯专员」,排在官方
20
+ `standard` / `ptc` / `minimal` / `cordis` 之前。官方模式仍保留在下方。三张卡片各有模式说明与
21
+ 适用场景,不再把内部角色当成可独立完成的玩法。
22
+ - **自动模式成为完整研究入口**:主 Agent 统一调度行情、资讯、质检与绘图角色,最后汇总证据、
23
+ 来源与局限后直接答复用户;它自己仍然不取数、不画图。
24
+ - **每份结构化数据必经分析师**:收到一份行情 / 财务数据就交给分析师做结构、时间轴、缺失与基础
25
+ 统计检查,并完成可视化 gate。用户是否提图只影响 gate 的结论,不是派分析师的触发条件。
26
+ - **两个可单独使用的专用模式**:行情专家可以单独取数并拿到数据引用,资讯专员可以单独查公告、
27
+ 新闻与互动平台材料。两者都只做自己那一段,不替用户做投资判断。
28
+ - **README 与角色说明重写**:快速上手、模式选择、数据质检与图表边界按当前行为重写,并换了
29
+ 新会话选择器与「Agent 预设」设置页两张截图。
30
+
31
+ ### Changed
32
+
33
+ - **角色名称统一**:原「Capital 模式」改为「自动模式」,原「市场行情」改为「行情专家」,
34
+ 原「资讯搜索」改为「资讯专员」,原「初级分析」改为「分析师」,原「可视化图形」改为「绘图专员」。
35
+ 显示名变化不影响历史会话,会话仍按原身份恢复。
36
+ - **分析师与绘图专员从选择器隐藏**:两颗内部角色仍在预设注册表里,委派行才能按身份创建它们;
37
+ 新会话的远端列表与预设管理不再展示,避免用户误开一个没有取数入口的空会话。
38
+ - **「不要图」只收窄出图,不跳过质检**:明确说不要图时,分析师仍完成 profile 与 gate 结论,
39
+ 只是不创建绘图专员;回传里会写明未出图是委派收窄,不是数据不支持。
40
+ - **角色人设与协议去重**:修正五颗人设之间互相矛盾或过时的说法,包括一次性 / 异步子 Agent、
41
+ 宿主工具可见性、结算通知与完成判定、重试次数、标签复用,以及 `data_analyst` 已停用却仍被
42
+ 当作可用角色的旧描述。长协议继续按册放在 skills 里,人设只留每轮硬规则。
43
+ - **装配适配 DSH 0.2.1**:委派行只保留 `agentPreset` 指针,角色人设与工具面回到各自的 preset;
44
+ 每颗角色只挂自己需要的工具族,运行期不再维护名字级 allow 清单。用户可见结果是:单独打开
45
+ 行情专家或资讯专员时,工具边界与自动模式委派时一致。
46
+ - **数据角色说明同步实现**:`data_collector` 的能力数从 69 更新为 128,补齐 Wind 三条与
47
+ FTShare 34 条的口径;网页检索能力表里腾讯的条数改为 9。
48
+
49
+ ### 迁移说明
50
+
51
+ - **必须先升级 DSH 到 `@0.2.1-rc.2`**。0.2.0 及更早版本不接受本版的角色 preset 形状(委派行
52
+ 不再携带 persona / toolFilter),升级前会看到 preset 装载失败,或整个插件被宿主跳过。升级宿主
53
+ 后更新本插件,并新建会话。
54
+ - **已有的五把密钥、卡片设置、精选 Skills 勾选、自选股清单与持仓标记全部照旧**,不需要重设。
55
+ - **之前直接选「初级分析」「可视化图形」的用户**:这两个入口不再出现在选择器里,旧会话仍能
56
+ 按原身份恢复;新任务请在自动模式里提出,由主 Agent 委派。
57
+ - **行情专家的数据仍只属于当前会话**:单开行情专家拿到的数据,别的会话或自动模式读不到。
58
+ 要做完整研究,直接在自动模式里提问。
59
+ - **提图不再是派分析师的开关**:无论要不要图,结构化数据都会先质检;明确不要图时只是停在
60
+ 出图之前。图表的交付方式没变,仍作为本轮交付物出现在会话里,可在侧栏查看或离线打开。
61
+ - `data_analyst` 继续停用,不参与选择器与委派。
62
+
63
+ ## [2.8.3] - 2026-10-16
64
+
65
+ 接入**期货与贵金属**:数据收集能力 **118 → 128** 项(新增 10 项),仍来自 FTShare(非凸科技)免费档。
66
+ 宿主要求与 2.8.1 相同(DSH`@0.2.0-rc.2`),**不必换宿主版本**;密钥沿用「插件」页卡片上 2.8.2 补的那一格。
67
+
68
+ ### Added
69
+
70
+ - **合约与要素两颗**:某交易日全部在册期货合约清单(六家期货交易所 + 银行间债券远期),以及单只合约的
71
+ 交易单位、合约乘数、最小变动价位、保证金说明、上市与摘牌日、交割方式。⛔ 这两张表**每只合约给两份副本**
72
+ (实测一个交易日 1812 行、其实只有 906 只合约),取数时会点名这件事——按行数报"多少只合约"会正好翻倍。
73
+ - **行情与结算五颗**:单只合约的日/周/月/季 K 线(每手成交额与持仓量都在,成交额经乘数与收盘价交叉核对
74
+ 确定是元)、每日涨跌停价、每日结算参数(结算价与投机/套保四档保证金率)、交易所仓单日报、
75
+ 主要品种交易周报(周成交量、成交额、持仓量与同比环比;成交额经同样方式核对确定是**亿元**)。
76
+ - **指数与持仓排名两颗**:南华商品期货指数日 K(本仓第一次有商品指数序列)、东方财富期货会员成交持仓排名
77
+ (一只合约 × 一家会员一行,含成交量、多头、空头、净多、净空五组排名与持仓,以及增减仓排名)。
78
+ - **贵金属价格一颗**:AU9999 与 XAUUSD 两条日度序列。这一家实测只有这两个代码有数,且两条都停在
79
+ 2026 年 8 月中旬——问"最近一周的金价"会拿到空,那不是取数失败,说明里写清了。
80
+ - 三处上游口径差异由插件自己填平,使用者不用管:合约代码的交易所后缀**同一所写法不止一种**
81
+ (清单给 `.CFE` / `.CZC`,涨跌停与结算给 `.CFX` / `.ZCE`,而行情只认全称),会员持仓那一族对大小写
82
+ 敏感且广期所的真名是 `gfe`(照常规写 `GFEX` 会静默拿到零行),周报的同比列上游把键名拼错了。
83
+ - 每一项都按上游真实返回逐列核验后才登记:单位、哪些列可以为空、当日数据要 20:20 之后才开放这类采集时点
84
+ 都写进该项说明;上游文档与实测不符的地方以实测为准并点名。免费档限流(10 QPS / 突发 20)由出口节流守住。
85
+
86
+ ### 迁移说明
87
+
88
+ - **不需要任何动作**。已有的五把密钥、卡片设置、精选 Skills 勾选、自选股清单与持仓标记全部照旧。
89
+ 没配 FTShare 密钥时,这 10 项仍在能力目录里,但每次取数都会点名 `FTSHARE_API_KEY` 失败,其余来源照常。
90
+ - **仍未覆盖**:期权(这一家的免费档与全量接口表里都没有这个域,不是待办)、中金所的每日结算参数
91
+ (实测返回零行,同一天同品种的涨跌停价有数)、银行间品种的行情端(清单里有那 64 只,行情取不到)、
92
+ 期货的会员龙虎榜(同一家另一个接口,一次回十二个指标、三种数据形状,需要先给数据层加"一行拆多行"
93
+ 的能力,排在下一批)。
94
+ - 覆盖范围见 [数据收集能力表](docs/data-collector-capabilities.md)。
9
95
 
10
96
  ## [2.8.2] - 2026-10-16
11
97
 
package/README.md CHANGED
@@ -5,17 +5,20 @@
5
5
  <p align="center">
6
6
  <a href="https://github.com/v587d/capital-generation"><img src="https://img.shields.io/badge/Market-CN%20%7C%20HK%20%7C%20US-orange" alt="Market·CN+HK+US"></a>
7
7
  <a href="https://github.com/v587d/capital-generation"><img src="https://img.shields.io/badge/Financial-Agent-red" alt="Financial Agent"></a>
8
+ <a href="https://github.com/v587d/capital-generation">
9
+ <img src="https://img.shields.io/badge/%E5%93%81%E7%A7%8D-%E8%82%A1%E7%A5%A8%20%7C%E5%80%BA%E5%88%B8%20%7C%E6%9C%9F%E8%B4%A7%20%7C%E5%95%86%E5%93%81%20%7C%E8%A1%8D%E7%94%9F%E5%93%81-fedcba" alt="股票·债券·期货·商品·衍生品">
10
+ </a>
8
11
  </p>
9
12
  <p align="center">
10
13
  <a href="https://github.com/deepseek-ai"><img src="https://img.shields.io/badge/DeepSeek_Harness-plugin-blue" alt="DSH Plugin"></a>
11
14
  <a href="https://github.com/deepseek-ai"><img src="https://img.shields.io/badge/DeepSeek_Harness-web-orange" alt="DSH Web"></a>
12
15
  <a href="https://github.com/deepseek-ai"><img src="https://img.shields.io/badge/DeepSeek_Harness-desktop-brightgreen" alt="DSH Desktop · 已实机验证"></a>
13
- <a href="https://github.com/deepseek-ai"><img src="https://img.shields.io/badge/DSH%20Baseline-0.2.0--rc.2-blue" alt="DSH@0.2.0-rc.2"></a>
16
+ <a href="https://github.com/deepseek-ai"><img src="https://img.shields.io/badge/DSH%20Baseline-0.2.1--rc.2-blue" alt="DSH@0.2.1-rc.2"></a>
14
17
  </p>
15
18
  <p align="center">
16
19
  <a href="https://awesome-dsh-plugin.com"><img src="https://awesome-dsh-plugin.com/badge.svg" alt="awesome · DSH plugin"></a>
17
20
  <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-green" alt="License"></a>
18
- <a href="https://github.com/v587d/capital-generation/releases"><img src="https://img.shields.io/badge/version-2.8.2-9cf" alt="Version"></a>
21
+ <a href="https://github.com/v587d/capital-generation/releases"><img src="https://img.shields.io/badge/version-2.9.0-9cf" alt="Version"></a>
19
22
  <a href="https://www.npmjs.com/package/@v587d/capital-generation"><img src="https://img.shields.io/npm/v/%40v587d%2Fcapital-generation" alt="npm version"></a>
20
23
  </p>
21
24
 
@@ -23,7 +26,7 @@
23
26
 
24
27
  > Next-Gen AI-Driven Capital Generation.
25
28
 
26
- Capital Generation 是运行在 [DeepSeek Harness(DSH)](https://github.com/deepseek-ai/deepseek-harness) 里的证券研究插件,面向关注 A股/港股/美股 的个人投资者。安装后,在新会话中选择 **Capital 模式**,就可以用自然语言查行情、财务数据、公告和新闻,整理分析并生成图表。它不是独立应用,需要先安装 DSH。
29
+ Capital Generation 是运行在 [DeepSeek Harness(DSH)](https://github.com/deepseek-ai/deepseek-harness) 里的证券研究插件,面向关注 A 股、港股、美股的个体投资者。安装后,新会话的选择器里会多出 **自动模式**、**行情专家**、**资讯专员** 三个模式;日常研究选 **自动模式**,用自然语言查行情、财务数据、公告和新闻,由它安排取数、数据质检、资料检索与图表,最后给出带来源的结论。它不是独立应用,需要先安装 DSH。
27
30
 
28
31
  **🎞️视频演示:**[安装、配置与使用](https://www.bilibili.com/video/BV1fzaZ6CE9J/)。
29
32
 
@@ -33,7 +36,7 @@ Capital Generation 是运行在 [DeepSeek Harness(DSH)](https://github.com/d
33
36
  ## 快速上手
34
37
 
35
38
  > [!NOTE]
36
- > 适配 DSH`@0.2.0-rc.2`。已在 Linux 的 Web profile 和 Windows 桌面端验证;其他环境尚未充分测试。建议使用 `Deepseek/deepseek-flash` ,思考推理能力为 High ;GPT / Claude 尚未充分测试。
39
+ > 适配 DSH`@0.2.1-rc.2`。已在 Linux 的 Web profile 和 Windows 桌面端验证;其他环境尚未充分测试。建议使用 `Deepseek/deepseek-flash` ,思考推理能力为 High ;GPT / Claude 尚未充分测试。
37
40
 
38
41
  1. **安装插件。**
39
42
 
@@ -72,10 +75,10 @@ https://github.com/v587d/capital-generation
72
75
  | [AnySearch](https://www.anysearch.com/docs) | 网页搜索和正文提取 |
73
76
  | [Wind Alice](https://market.windalice.com/#/home) | 公告与新闻检索,以及宏观/行业/汇率指标与按日期区间取的历史 K 线 |
74
77
  | [PaddleOCR AIStudio](https://aistudio.baidu.com/paddleocr) | 解析 PDF 和图片中的文字 |
75
- | [FTShare(非凸科技)](https://market.ft.tech/gateway/doc/p/pb8eizu3) | A 股行情与日 K 截面、主力资金流、涨跌停、龙虎榜席位、股东人数、指数权重、可转债行情与宏观利率等第二家上游口径 |
78
+ | [FTShare(非凸科技)](https://market.ft.tech/gateway/doc/p/pb8eizu3) | A 股行情与日 K 截面、主力资金流、涨跌停、龙虎榜席位、股东人数、指数权重、可转债行情、宏观利率,以及期货合约与贵金属行情等第二家上游口径 |
76
79
 
77
80
  这些都是第三方服务的密钥,需分别向服务方申请;额度和条款以各服务方为准。
78
- 保存后**新建 Capital 模式会话**即可生效,无需重启。
81
+ 保存后**新建会话**即可生效,无需重启。
79
82
  也可以不走卡片,直接把密钥写入 `~/.dsh/.credentials.yaml`,名称依次为 `FUYAO_API_KEY`、`ANYSEARCH_API_KEY`、`WIND_API_KEY`、`PADDLE_OCR_TOKEN`、`FTSHARE_API_KEY`。
80
83
  密钥由 DSH 凭据服务保存,不会显示在会话配置中。
81
84
 
@@ -85,17 +88,35 @@ https://github.com/v587d/capital-generation
85
88
  </a>
86
89
  </p>
87
90
 
88
- 3. **新建会话。** 在 Agent Preset 选择器中选 **Capital 模式**,然后直接描述研究问题。也可以到「设置」→「Agent 预设」把它设为默认模式。
91
+ 3. **新建会话。** 新会话的模式选择器里会看到三个自定义模式。日常研究选 **自动模式**,然后直接描述研究问题;也可以到「设置」→「Agent 预设」把它设为默认模式。
89
92
 
90
93
  <p align="center">
91
- <a href="assets/mode_selector.png">
92
- <img src="assets/mode_selector.png" alt="新会话选择 Capital 模式" width="800">
94
+ <a href="assets/session-preset-selector.png">
95
+ <img src="assets/session-preset-selector.png" alt="新会话选择自动模式" width="800">
93
96
  </a>
94
97
  </p>
95
98
 
99
+ ## 三个模式怎么选
100
+
101
+ <p align="center">
102
+ <a href="assets/settings-perset-selector.png">
103
+ <img src="assets/settings-perset-selector.png" alt="「Agent 预设」里的三个自定义模式" width="760">
104
+ </a>
105
+ </p>
106
+
107
+ | 模式 | 适合什么 | 会做什么 | 边界 |
108
+ | --- | --- | --- | --- |
109
+ | **自动模式**(推荐) | 投研报告、事件影响、持仓复盘,以及需要同时查数、查资料和出图的综合问题 | 统一调度取数、数据质检、资料检索与绘图,汇总证据后直接答复 | 自动模式不直接取数,也不直接画图;每个数字都要有来源与截止时间 |
110
+ | **行情专家** | 只想拿一份结构化行情、财务或宏观数据 | 查询并保存到当前会话,返回数据引用、来源与截止时间 | 只负责取数,不读取数据内容、不做判断;数据只在当前会话可用 |
111
+ | **资讯专员** | 只要公告、新闻或互动平台材料 | 检索公告与新闻,逐条标注来源与核验状态 | 不做投资分析,也不给买卖建议 |
112
+
113
+ **分析师**与**绘图专员**是自动模式的内部角色,不出现在选择器里。自动模式会在需要时创建并调度它们;它们没有独立的取数入口,单独打开也读不到本次研究的数据。
114
+
115
+ **每份结构化数据都会先做质检。** 无论你有没有提图表,自动模式收到行情或财务数据后都会先交给分析师检查结构、时间轴、缺失与基础统计;要不要图是检查之后的一个判断。明确说“不要图”时,质检照做,只是停在出图之前。
116
+
96
117
  ## 试试这么用
97
118
 
98
- 在新的 Capital 模式会话中使用以下指令。将方括号内容换成自己的标的、公告或持仓;证券代码写完整市场后缀,例如 `600519.SH`。每条指令单独发送,便于观察结果。
119
+ 在新的自动模式会话中使用以下指令。将方括号内容换成自己的标的、公告或持仓;证券代码写完整市场后缀,例如 `600519.SH`。每条指令单独发送,便于观察结果。
99
120
 
100
121
  [样例:假期后研判报告(20261007)](docs/sample/假期后研判报告.md)
101
122
 
@@ -131,21 +152,21 @@ https://github.com/v587d/capital-generation
131
152
 
132
153
  ## 还能做什么
133
154
 
134
- - **查数据和资料:** 覆盖A股、港股、美股,由 Agents 按需获取行情、财务、指数、基金与宏观行业数据,检索公告、新闻和研报。共计 **118** 个数据收集能力和 **14** 个网页检索能力,部分公开数据源无需额外密钥;具体覆盖范围见 [数据收集能力表](docs/data-collector-capabilities.md) 和 [网页检索能力表](docs/web-retriever-capabilities.md)。
135
- - **数据分析:** 所有 Agents 均不直接接触原始结构数据,Agents 按需读取数据、校验数据,并写脚本挖掘数据背后含义。
136
- - **可视化:** Agent 视情况将校验后数据交给可视化专家生成可交互图表。图表会作为本轮交付物出现在会话中,可在侧栏查看或离线打开。了解处理流程可看 [Agent 角色说明](docs/agent-roles.md)。
155
+ - **查数据和资料:** 覆盖 A 股、港股、美股与期货等品种,由专用角色按需获取行情、财务、指数、基金、宏观行业与期货数据,检索公告、新闻和研报。共计 **128** 个数据收集能力和 **14** 个网页检索能力,部分公开数据源无需额外密钥;具体覆盖范围见 [数据收集能力表](docs/data-collector-capabilities.md) 和 [网页检索能力表](docs/web-retriever-capabilities.md)。
156
+ - **数据质检:** 结构化数据不会直接进入模型上下文。每份数据先由分析师检查结构、时间轴、缺失与基础统计,再按受控方式汇总;原始数据行始终留在工具层。
157
+ - **可视化:** 分析师判断数据适合图表,或你明确要图时,绘图专员会生成可交互图表;明确不要图时只完成质检。图表作为本轮交付物出现在会话里,可在侧栏查看或离线打开。了解处理流程可看 [Agent 角色说明](docs/agent-roles.md)。
137
158
 
138
159
  | 走势折线 | K 线与量价 |
139
160
  | :---: | :---: |
140
161
  | <a href="assets/chart-line-sidebar.png"><img src="assets/chart-line-sidebar.png" alt="侧栏折线图" width="400"></a> | <a href="assets/chart-candlestick-sidebar.png"><img src="assets/chart-candlestick-sidebar.png" alt="侧栏 K 线图" width="400"></a> |
141
162
 
142
- - **管理自选股:** 在 Capital 会话中输入 `/` 或点击输入框旁的 `+`,从「指令」中打开「自选股」。
163
+ - **管理自选股:** 在任意 Capital Generation 会话中输入 `/` 或点击输入框旁的 `+`,从「指令」中打开「自选股」。
143
164
 
144
165
  | 管理自选股 | 标记持仓 |
145
166
  | :---: | :---: |
146
167
  | <a href="assets/watchlist-popup.png"><img src="assets/watchlist-popup.png" alt="管理自选股" width="400"></a> | <a href="assets/watchlist-more.png"><img src="assets/watchlist-more.png" alt="标记持仓" width="400"></a> |
147
168
 
148
- - **精选 Skills:** 当前收录 8 个开源项目、共 68 个 Skill(默认全部关闭,在配置页按需打开;随时切换,无需新建会话,正在使用的 Capital 会话下一条指令即生效)
169
+ - **精选 Skills:** 当前收录 8 个开源项目、共 68 个 Skill(默认全部关闭,在配置页按需打开;随时切换,无需新建会话,正在使用的会话下一条指令即生效)
149
170
 
150
171
  | 项目名称 | 收录边界 |
151
172
  | :---: | :---: |
@@ -166,17 +187,17 @@ https://github.com/v587d/capital-generation
166
187
 
167
188
  ## 常见问题
168
189
 
169
- - **安装后找不到 Capital 模式?** 确认插件出现在「插件」→ 已安装列表;Web / CLI profile 安装后要重启该 profile,并在新会话选择模式。
190
+ - **安装后找不到模式?** 确认插件出现在「插件」→ 已安装列表;Web / CLI profile 安装后要重启该 profile,并在新会话选择模式。选择器里应看到自动模式、行情专家、资讯专员;分析师和绘图专员是自动模式的内部角色,不会出现在这里。
170
191
  - **配置在哪?** 打开「插件」→ 已安装的 **Capital Generation**,页面顶部就是「数据源 / 精选 Skills / 包含的组件」三格,五把密钥都在第一格;不在 DSH 的普通「设置」页面,也不用点进任何一行组件。保存密钥后新建会话再试。
171
- - **升级到 2.7.11 后,卡片里的开关回到默认值了?** 这一版把插件内部两个组件换了目录名,宿主按旧路径记住的那份保存值因此接不上。四把 API Key、你的自选股清单与持仓标记都不受影响;「精选 Skills」的勾选、附加人设与「本机直连」开关需要重新设一次并保存,之后就稳定了。已经设过的话,旧的那份仍写在 DSH 的 profile 文件里,手改那一行的路径也能取回来。
172
- - **桌面端升级后仍是旧版?** 桌面端安装时会固定所解析的版本,不会自动升级。卸载后重新安装,再到插件详情查看版本号;如需指定版本,可在地址末尾加 `#v2.8.2` 或 `@2.8.2`。
192
+ - **升级到 2.9.0 后,分析师和绘图专员去哪了?** 这一版把它们收进自动模式内部,不再出现在选择器与预设管理里,避免误开一个没有取数入口的空会话。旧会话仍能按原身份恢复;新任务直接用自动模式提出即可。
193
+ - **桌面端升级后仍是旧版?** 桌面端安装时会固定所解析的版本,不会自动升级。卸载后重新安装,再到插件详情查看版本号;如需指定版本,可在地址末尾加 `#v2.9.0` 或 `@2.9.0`。
173
194
  - **刚发布的新版本装不到?** 桌面端取包时会跳过**刚发布不久**的版本(宿主侧包管理器的发布冷却策略,实测会静默装成上一个版本),国内镜像的同步也可能滞后一段时间。急着用最新代码,改用仓库地址安装最直接。
174
195
  - **网页抓取失败?** 配置卡片中的「允许启动本地提取网页内容」默认开启:AnySearch 提取失败时可尝试本机直连。关闭后,本机直连的具名来源查询也不可用;请检查该开关和网络连接。
175
196
  - **Wind 那部分会消耗积分?** 会。公告与新闻检索、宏观 / 行业 / 汇率指标、按日期区间取的历史 K 线都按次消耗你在 Wind 侧的额度;额度与条款以 Wind 为准,插件不做用量封顶。没配 `WIND_API_KEY` 时这几类不可用,其余功能照常。
176
- - **运行时主 Agent 没有加载已打开的精选 Skill?** 由 LLM 判断是否值得加载精选 Skill,如果你需要强制使用某一种技能,可通过 `/技能名称` 斜杠命令的形式手动加载已在设置中打开的 Skill。
197
+ - **自动模式没有加载已打开的精选 Skill?** 由 LLM 判断是否值得加载精选 Skill,如果你需要强制使用某一种技能,可通过 `/技能名称` 斜杠命令的形式手动加载已在设置中打开的 Skill。
177
198
  - **精选 Skill 的方法论很长,Agent 读得完吗?** 读得完。超过一次可读长度的正文已经重排成「入口 + 分册」:Agent 先看入口目录,需要具体规则、模板或阈值时把对应那一册整本读进来,并会告诉你它读了哪几册、哪些没读。设置卡片里的「看原文」仍然只给入口那一份,想看某一册直接问 Agent。
178
199
 
179
- 目前 Windows 桌面端有一项[已知宿主差异](CHANGELOG.md):主 Agent 的部分工具限制可能不生效。请特别留意它实际调用了哪些工具;结构化数据的取数限制仍由工具自身执行。
200
+ 目前 Windows 桌面端有一项[已知宿主差异](CHANGELOG.md):自动模式的出图与检索限制可能不生效。请留意它实际调用了哪些工具;结构化数据的取数边界仍由工具层执行。
180
201
 
181
202
  ## 开发与贡献
182
203
  普通用户不需要执行下面的命令。修改源码时请参考 [贡献指南](CONTRIBUTING.md) 和 [开发约定](AGENTS.md):
@@ -1,6 +1,6 @@
1
1
  # @v587d/capital-charts
2
2
 
3
- Capital 模式的图表前端组件。**它不是独立安装的包**——它是 `@v587d/capital-generation`
3
+ 自动模式的图表前端组件。**它不是独立安装的包**——它是 `@v587d/capital-generation`
4
4
  随包携带的嵌套包,由后者 `cordis.patch.yml` 里的 `insert` 行以 host 平面挂载。
5
5
 
6
6
  ## 为什么是一个嵌套包,而不是主包的一部分
@@ -1,17 +1,8 @@
1
1
  /**
2
- * `@v587d/capital-charts` browser half.
3
- *
4
- * 单一 surface:`tool.call.toolview['render_chart']` —— 图表生成过程的明细卡片
5
- * (子会话与展开视图里都能看)。数据经 `/capital-charts/<chart_id>.json` 旁路取,
6
- * 不进任何 Agent 上下文。
7
- *
8
- * ⚠️ 这里**没有** turn-tail 卡片,且不要再加回来(2026-09-18 事故,实测根因):
9
- * 内嵌卡片依赖宿主往会话里追加自定义事件 `capital/chart-rendered`,而会话日志的事件
10
- * 词汇表是闭集——`Session.append` 无法设置 `ignorable`,非 first-party 事件写进去之后,
11
- * **整份会话在冷加载时会被 fail-closed 拒绝**(6 份会话 `failed to observe session`)。
12
- * 现在图表以官方 `deliverables/presented` 登记为「本轮交付」,用户在收尾的交付行点开
13
- * `chart.html`,由官方 document preview 的 script-enabled iframe 渲染自包含图表
14
- * (见 src/chart/events.ts)。**呈现走官方通道,客户端不再需要任何图表专属投影。**
2
+ * `@v587d/capital-charts` browser half: one `render_chart` toolview fed by the
3
+ * `/capital-charts/<id>.json` route. No turn-tail card or custom session event:
4
+ * the vocabulary is closed and non-first-party events make cold load fail closed.
5
+ * Delivery goes through `deliverables/presented`.
15
6
  */
16
7
  const { useEffect, useRef, useState, createElement: h } = require('react')
17
8
  const LightweightCharts = require('lightweight-charts')
@@ -28,7 +19,7 @@ function readReceipt(block) {
28
19
  const parsed = JSON.parse(item.text)
29
20
  if (parsed && typeof parsed === 'object') return parsed
30
21
  } catch {
31
- // Not the structured receipt; continue scanning.
22
+ // Not the structured receipt; keep scanning.
32
23
  }
33
24
  }
34
25
  }
@@ -50,7 +41,7 @@ function ChartCanvas(props) {
50
41
  try {
51
42
  if (chart && typeof chart.remove === 'function') chart.remove()
52
43
  } catch {
53
- // The host removed the card.
44
+ // The host already removed the card.
54
45
  }
55
46
  }
56
47
  }, [props.payload])
@@ -85,7 +76,7 @@ function useJson(url) {
85
76
  return { value, error }
86
77
  }
87
78
 
88
- /** 工具过程明细:保留在子会话与展开视图里。 */
79
+ /** Tool detail card, also visible in child sessions and the expanded view. */
89
80
  function ChartView(props) {
90
81
  const block = props.block
91
82
  const settled = Boolean(block) && block.kind === 'tool-result'
package/chart-ui/index.js CHANGED
@@ -1,10 +1,7 @@
1
1
  /**
2
- * `@v587d/capital-charts` 的 host half。
3
- *
4
- * It owns only opaque chart registrations and their browser route. It never
5
- * reads Dataset files itself; render_chart supplies the resolved chart series
6
- * path, and the turn event published by the plugin carries the small metadata
7
- * the client renders.
2
+ * Host half of `@v587d/capital-charts`: opaque chart registrations plus their
3
+ * series route. render_chart supplies the resolved file path; this half never
4
+ * reads Dataset files itself.
8
5
  */
9
6
 
10
7
  export const name = 'capital-charts'
@@ -77,18 +74,9 @@ function pathnameOf(req, res) {
77
74
  }
78
75
 
79
76
  /**
80
- * Build the series route handler.
81
- *
82
- * @param store - the opaque chart registry.
83
- * @param options.authorize - optional `(req) => 401 | 403 | undefined`. When it
84
- * returns a status the handler answers with that status and never touches the
85
- * registry, so an unauthenticated caller learns nothing about `chart_id`.
86
- * `apply()` passes `connection.requestRejection` here: that is the same
87
- * trusted-Host fence + signed browser cookie every other session-scoped Web
88
- * route runs behind (`/api`, the static index), and a route that skips it is
89
- * readable by any local process or page that learns a `chart_id`
90
- * (2026-09-17 review). A composition with no `connection` service (no browser
91
- * auth plane at all) passes nothing and keeps the old behaviour.
77
+ * `options.authorize` receives `connection.requestRejection` (trusted-Host 403 +
78
+ * signed cookie 401); a returned status answers before the registry is touched,
79
+ * so an unauthenticated caller learns nothing about `chart_id`.
92
80
  */
93
81
  export function createRouteHandler(store, options = {}) {
94
82
  const authorize = options.authorize
@@ -98,8 +86,7 @@ export function createRouteHandler(store, options = {}) {
98
86
  try {
99
87
  rejection = authorize(req)
100
88
  } catch {
101
- // An authorizer that cannot answer must not fall through to the data:
102
- // fail closed on the same status the platform uses for a missing cookie.
89
+ // Fail closed: an authorizer that cannot answer must not mean "no auth".
103
90
  rejection = 401
104
91
  }
105
92
  if (rejection !== undefined && rejection !== null) {
@@ -162,13 +149,8 @@ export function apply(ctx) {
162
149
  })
163
150
 
164
151
  /**
165
- * 认证围栏:优先解析 host 平面的 `connection`(web profile 由
166
- * `@deepseek-ai/dsh-client-connection` 提供),把它的 `requestRejection`
167
- * 原样接到本路由上——trusted-Host(403)+ 签名 cookie(401)。
168
- *
169
- * 惰性解析而不是 apply 时解析一次:`connection` 与本行的挂载先后不由我们决定。
170
- * 服务整体缺席(Electron/file:// 这类没有浏览器认证面的载体)时返回 undefined,
171
- * 退化成"没有认证面"的旧行为;但**解析抛错**(上下文已销毁)一律 401,宁可拒绝。
152
+ * Resolve `connection` lazily: its mount order is not ours. Absent service
153
+ * (Electron / file://) = no auth plane; a throwing resolve fails closed 401.
172
154
  */
173
155
  const authorize = (req) => {
174
156
  let connection
@@ -195,11 +177,8 @@ export function apply(ctx) {
195
177
  'capital-charts: series route',
196
178
  )
197
179
  }
198
- // 只走 inject,不许"先 get 探测、再直接拿属性"。`ctx.get('webServer')` 能解析出值
199
- // **不代表** `ctx.webServer` 这个属性访问合法:cordis 的属性代理只认"本层声明过 inject"
200
- // (ReflectService 找不到就抛 cannot get property "webServer" without inject)。探测式写法
201
- // 把正确性押在装配顺序上——桌面端 webServer 在本行之前已就绪,于是走了"直接调用"那条并
202
- // 当场炸(2026-09-30 实机:capital-charts 与 capital-watchlist 两行 异常);web profile 里
203
- // 它还没就绪,反而躲过。inject 两种顺序都对:已就绪立刻起,没出现就一直等(本行仍激活)。
180
+ // Only through inject: `ctx.get('webServer')` resolving does not make
181
+ // `ctx.webServer` legal (cordis requires a declared inject); probing bets
182
+ // correctness on mount order and crashed on desktop.
204
183
  ctx.inject(['webServer'], registerRoute)
205
184
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@v587d/capital-charts",
3
- "version": "2.8.2",
4
- "description": "Capital 模式的图表前端组件(浏览器半边 + 序列旁路路由):由 @v587d/capital-generation 随包携带并作为 host 平面行挂载。",
3
+ "version": "2.9.0",
4
+ "description": "自动模式的图表前端组件(浏览器半边 + 序列旁路路由):由 @v587d/capital-generation 随包携带并作为 host 平面行挂载。",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "exports": {