@v587d/capital-generation 2.8.3 → 2.9.1
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/CHANGELOG.md +81 -1
- package/README.md +40 -19
- package/chart-ui/README.md +5 -4
- package/chart-ui/client.src.cjs +7 -16
- package/chart-ui/index.js +12 -33
- package/chart-ui/package.json +2 -2
- package/config/client.js +18 -39
- package/config/client.src.cjs +79 -217
- package/config/index.js +22 -72
- package/config/package.json +2 -2
- package/cordis.patch.yml +46 -51
- package/lib/agents/bash-guard.d.ts +9 -55
- package/lib/agents/bash-guard.js +27 -67
- package/lib/agents/preset-roster.d.ts +22 -0
- package/lib/agents/preset-roster.js +87 -0
- package/lib/agents/role-tool-policy.d.ts +46 -0
- package/lib/agents/role-tool-policy.js +205 -0
- package/lib/agents/root-tool-policy.d.ts +28 -124
- package/lib/agents/root-tool-policy.js +164 -237
- package/lib/agents/selected-skills-provider.d.ts +2 -6
- package/lib/agents/selected-skills-provider.js +27 -84
- package/lib/capital-settings.d.ts +27 -0
- package/lib/capital-settings.js +23 -0
- package/lib/chart/artifact-ref.d.ts +13 -8
- package/lib/chart/artifact-ref.js +27 -10
- package/lib/chart/downsample.d.ts +2 -5
- package/lib/chart/downsample.js +3 -8
- package/lib/chart/errors.d.ts +3 -7
- package/lib/chart/errors.js +1 -2
- package/lib/chart/event-context.d.ts +8 -0
- package/lib/chart/event-context.js +39 -0
- package/lib/chart/events.d.ts +21 -78
- package/lib/chart/events.js +43 -189
- package/lib/chart/html.d.ts +2 -5
- package/lib/chart/html.js +8 -15
- package/lib/chart/present-tool.d.ts +28 -0
- package/lib/chart/present-tool.js +128 -0
- package/lib/chart/runtime.d.ts +5 -18
- package/lib/chart/runtime.js +14 -34
- package/lib/chart/series.d.ts +10 -17
- package/lib/chart/series.js +22 -47
- package/lib/chart/source-token.d.ts +5 -13
- package/lib/chart/source-token.js +18 -17
- package/lib/chart/spec.d.ts +6 -12
- package/lib/chart/spec.js +7 -31
- package/lib/chart/tool.d.ts +7 -29
- package/lib/chart/tool.js +15 -25
- package/lib/chart-render-entry.d.ts +10 -0
- package/lib/chart-render-entry.js +14 -0
- package/lib/chart-source-entry.d.ts +13 -0
- package/lib/chart-source-entry.js +20 -0
- package/lib/collect-entry.d.ts +9 -0
- package/lib/collect-entry.js +10 -0
- package/lib/collector-runtime.d.ts +22 -0
- package/lib/collector-runtime.js +97 -0
- package/lib/data-collector/args.d.ts +6 -24
- package/lib/data-collector/args.js +6 -24
- package/lib/data-collector/dataset-tools.d.ts +7 -1
- package/lib/data-collector/dataset-tools.js +27 -56
- package/lib/data-collector/describe.d.ts +8 -33
- package/lib/data-collector/describe.js +17 -70
- package/lib/data-collector/hub.d.ts +27 -85
- package/lib/data-collector/hub.js +19 -85
- package/lib/data-collector/query-time.d.ts +7 -26
- package/lib/data-collector/query-time.js +8 -27
- package/lib/data-collector/store.d.ts +41 -117
- package/lib/data-collector/store.js +32 -111
- package/lib/data-collector/time-axis.d.ts +16 -76
- package/lib/data-collector/time-axis.js +25 -111
- package/lib/data-collector/tools.d.ts +6 -6
- package/lib/data-collector/tools.js +34 -43
- package/lib/dataset-read-entry.d.ts +9 -0
- package/lib/dataset-read-entry.js +7 -0
- package/lib/index.d.ts +7 -117
- package/lib/index.js +43 -422
- package/lib/net/eastmoney-client.d.ts +13 -65
- package/lib/net/eastmoney-client.js +12 -53
- package/lib/net/throttle.d.ts +2 -13
- package/lib/net/throttle.js +3 -14
- package/lib/ocr/client.d.ts +12 -21
- package/lib/ocr/client.js +23 -40
- package/lib/ocr/markdown.d.ts +20 -26
- package/lib/ocr/markdown.js +23 -36
- package/lib/ocr/store.d.ts +14 -47
- package/lib/ocr/store.js +15 -45
- package/lib/ocr-entry.d.ts +9 -0
- package/lib/ocr-entry.js +10 -0
- package/lib/policy-entry.d.ts +17 -0
- package/lib/policy-entry.js +22 -0
- package/lib/present-entry.d.ts +9 -0
- package/lib/present-entry.js +13 -0
- package/lib/preset-claim.d.ts +22 -0
- package/lib/preset-claim.js +24 -0
- package/lib/preset-ids.d.ts +38 -0
- package/lib/preset-ids.js +46 -0
- package/lib/retriever-config.d.ts +37 -0
- package/lib/retriever-config.js +36 -0
- package/lib/retriever-runtime.d.ts +31 -0
- package/lib/retriever-runtime.js +82 -0
- package/lib/root-extras-entry.d.ts +17 -0
- package/lib/root-extras-entry.js +25 -0
- package/lib/runtime-entry.d.ts +15 -0
- package/lib/runtime-entry.js +5 -0
- package/lib/runtime.d.ts +21 -0
- package/lib/runtime.js +33 -0
- package/lib/search-entry.d.ts +9 -0
- package/lib/search-entry.js +9 -0
- package/lib/sources/eastmoney-http.js +20 -68
- package/lib/sources/ftshare-rest.d.ts +6 -34
- package/lib/sources/ftshare-rest.js +84 -292
- package/lib/sources/fuyao-core.d.ts +8 -18
- package/lib/sources/fuyao-core.js +10 -21
- package/lib/sources/fuyao-rest.d.ts +2 -6
- package/lib/sources/fuyao-rest.js +23 -102
- package/lib/sources/security-code.d.ts +6 -12
- package/lib/sources/security-code.js +6 -12
- package/lib/sources/security-identity.d.ts +1 -4
- package/lib/sources/security-identity.js +3 -8
- package/lib/sources/tencent-http.js +14 -28
- package/lib/sources/tencent-public-core.d.ts +8 -60
- package/lib/sources/tencent-public-core.js +12 -77
- package/lib/sources/wind-mcp.d.ts +0 -5
- package/lib/sources/wind-mcp.js +23 -78
- package/lib/sources-entry.d.ts +9 -0
- package/lib/sources-entry.js +9 -0
- package/lib/time/tools.d.ts +8 -31
- package/lib/time/tools.js +30 -66
- package/lib/time-entry.d.ts +9 -0
- package/lib/time-entry.js +7 -0
- package/lib/tool-exec.d.ts +45 -11
- package/lib/tool-exec.js +59 -6
- package/lib/user-customization.d.ts +14 -0
- package/lib/user-customization.js +47 -0
- package/lib/watchlist/tools.d.ts +3 -13
- package/lib/watchlist/tools.js +10 -30
- package/lib/watchlist-entry.d.ts +9 -0
- package/lib/watchlist-entry.js +6 -0
- package/lib/web-retriever/engines.d.ts +6 -11
- package/lib/web-retriever/engines.js +9 -14
- package/lib/web-retriever/html-markdown.d.ts +14 -34
- package/lib/web-retriever/html-markdown.js +39 -75
- package/lib/web-retriever/local-fetch.d.ts +22 -58
- package/lib/web-retriever/local-fetch.js +33 -77
- package/lib/web-retriever/retriever.d.ts +6 -18
- package/lib/web-retriever/retriever.js +7 -7
- package/lib/web-retriever/sources.d.ts +37 -124
- package/lib/web-retriever/sources.js +64 -196
- package/lib/web-retriever/tools.d.ts +43 -27
- package/lib/web-retriever/tools.js +99 -137
- package/lib/web-retriever/wind-client.d.ts +14 -31
- package/lib/web-retriever/wind-client.js +16 -32
- package/locale/zh.json +1 -1
- package/package.json +72 -7
- package/preset/capital-generation/README.md +87 -53
- package/preset/capital-generation/agent.patch.yml +532 -337
- package/preset/capital-generation/skills/capital-chart-protocol/SKILL.md +6 -4
- package/preset/capital-generation/skills/capital-data-profile/SKILL.md +2 -2
- package/preset/capital-generation/skills/capital-data-protocol/SKILL.md +1 -1
- package/preset/capital-generation/skills/capital-equity-research/SKILL.md +4 -2
- package/preset/capital-generation/skills/capital-event-impact/SKILL.md +1 -1
- package/preset/capital-generation/skills/capital-orchestration/SKILL.md +30 -33
- package/preset/capital-generation/skills/capital-portfolio-review/SKILL.md +1 -1
- package/preset/capital-generation/skills/capital-visualization-protocol/SKILL.md +14 -16
- package/preset/capital-generation/skills/capital-web-evidence/SKILL.md +1 -1
- package/watchlist/client.js +15 -148
- package/watchlist/client.src.cjs +148 -662
- package/watchlist/holding-rules.js +11 -38
- package/watchlist/index.js +127 -397
- package/watchlist/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -5,7 +5,87 @@
|
|
|
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.1] - 2026-10-21
|
|
11
|
+
|
|
12
|
+
修复实机 `dsh web` 反馈的两处收尾体验:图表交付不再散落在等待轮,最终答复不再只剩一句
|
|
13
|
+
“分析已完成…见上”。不需要用户改配置,也没有宿主版本变化。
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- **`present_charts` 收尾交付步骤**(仅主 Agent):`render_chart` 出图后只回 `chart_ref`,主 Agent
|
|
18
|
+
在写最终答复前一次性登记本轮全部图表,卡片因此落在**最后一轮**答复末尾的「本轮文件改动 /
|
|
19
|
+
交付」行;refs 因上下文压缩丢失时可用 `task_id` 兜底。
|
|
20
|
+
- **图表登记支持按 task 回查**:registry 记录标题,并可按 root session / 工作区 / task 列出;
|
|
21
|
+
fork / branch 出来的顶层会话仍能解析并登记自己子 Agent 出的图。
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- **自动模式不再在出图时自动登记交付**(单体载体保留):旧行为会把卡片写进主 Agent 等待子 Agent
|
|
26
|
+
时所在的中间轮,DSH 折叠后用户容易错过。
|
|
27
|
+
- **最终答复必须是自足总结**:禁止“分析已完成 / 结论见上 / 如上”一类指针式收尾;被结算通知
|
|
28
|
+
唤醒且无新信息时,要么不输出可见正文,要么重发一份自足总结。
|
|
29
|
+
- 收口顺序写进人设与编排协议:委派全部结算 → 对账通过 → `present_charts` → 最终答复。
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
- fork / branch 顶层会话的 `parentSession` 是 seed 谱系,不再被当成委派链往上走(否则图表会
|
|
34
|
+
登记到被 fork 的旧会话,且 root 自己解析不到 `chart_ref`)。
|
|
35
|
+
- 交付登记不再把内部记录字段 `owner_cwd` 混进模型可见回执。
|
|
36
|
+
|
|
37
|
+
## [2.9.0] - 2026-10-20
|
|
38
|
+
|
|
39
|
+
新会话选择器收敛到三个用户模式:**自动模式 / 行情专家 / 资讯专员**。分析师与绘图专员继续注册,
|
|
40
|
+
但从选择器和预设管理里隐藏,只由自动模式按需委派。结构化数据的质检与可视化 gate 同时改成
|
|
41
|
+
**每份数据必经**:用户提不提图,都不再决定是否派分析师。宿主要求从 DSH`@0.2.0-rc.2` 抬到
|
|
42
|
+
`@0.2.1-rc.2`,**本次必须换宿主版本**。
|
|
43
|
+
|
|
44
|
+
### Added
|
|
45
|
+
|
|
46
|
+
- **三个用户模式**:新会话选择器最前面依次是「自动模式」「行情专家」「资讯专员」,排在官方
|
|
47
|
+
`standard` / `ptc` / `minimal` / `cordis` 之前。官方模式仍保留在下方。三张卡片各有模式说明与
|
|
48
|
+
适用场景,不再把内部角色当成可独立完成的玩法。
|
|
49
|
+
- **自动模式成为完整研究入口**:主 Agent 统一调度行情、资讯、质检与绘图角色,最后汇总证据、
|
|
50
|
+
来源与局限后直接答复用户;它自己仍然不取数、不画图。
|
|
51
|
+
- **每份结构化数据必经分析师**:收到一份行情 / 财务数据就交给分析师做结构、时间轴、缺失与基础
|
|
52
|
+
统计检查,并完成可视化 gate。用户是否提图只影响 gate 的结论,不是派分析师的触发条件。
|
|
53
|
+
- **两个可单独使用的专用模式**:行情专家可以单独取数并拿到数据引用,资讯专员可以单独查公告、
|
|
54
|
+
新闻与互动平台材料。两者都只做自己那一段,不替用户做投资判断。
|
|
55
|
+
- **README 与角色说明重写**:快速上手、模式选择、数据质检与图表边界按当前行为重写,并换了
|
|
56
|
+
新会话选择器与「Agent 预设」设置页两张截图。
|
|
57
|
+
|
|
58
|
+
### Changed
|
|
59
|
+
|
|
60
|
+
- **角色名称统一**:原「Capital 模式」改为「自动模式」,原「市场行情」改为「行情专家」,
|
|
61
|
+
原「资讯搜索」改为「资讯专员」,原「初级分析」改为「分析师」,原「可视化图形」改为「绘图专员」。
|
|
62
|
+
显示名变化不影响历史会话,会话仍按原身份恢复。
|
|
63
|
+
- **分析师与绘图专员从选择器隐藏**:两颗内部角色仍在预设注册表里,委派行才能按身份创建它们;
|
|
64
|
+
新会话的远端列表与预设管理不再展示,避免用户误开一个没有取数入口的空会话。
|
|
65
|
+
- **「不要图」只收窄出图,不跳过质检**:明确说不要图时,分析师仍完成 profile 与 gate 结论,
|
|
66
|
+
只是不创建绘图专员;回传里会写明未出图是委派收窄,不是数据不支持。
|
|
67
|
+
- **角色人设与协议去重**:修正五颗人设之间互相矛盾或过时的说法,包括一次性 / 异步子 Agent、
|
|
68
|
+
宿主工具可见性、结算通知与完成判定、重试次数、标签复用,以及 `data_analyst` 已停用却仍被
|
|
69
|
+
当作可用角色的旧描述。长协议继续按册放在 skills 里,人设只留每轮硬规则。
|
|
70
|
+
- **装配适配 DSH 0.2.1**:委派行只保留 `agentPreset` 指针,角色人设与工具面回到各自的 preset;
|
|
71
|
+
每颗角色只挂自己需要的工具族,运行期不再维护名字级 allow 清单。用户可见结果是:单独打开
|
|
72
|
+
行情专家或资讯专员时,工具边界与自动模式委派时一致。
|
|
73
|
+
- **数据角色说明同步实现**:`data_collector` 的能力数从 69 更新为 128,补齐 Wind 三条与
|
|
74
|
+
FTShare 34 条的口径;网页检索能力表里腾讯的条数改为 9。
|
|
75
|
+
|
|
76
|
+
### 迁移说明
|
|
77
|
+
|
|
78
|
+
- **必须先升级 DSH 到 `@0.2.1-rc.2`**。0.2.0 及更早版本不接受本版的角色 preset 形状(委派行
|
|
79
|
+
不再携带 persona / toolFilter),升级前会看到 preset 装载失败,或整个插件被宿主跳过。升级宿主
|
|
80
|
+
后更新本插件,并新建会话。
|
|
81
|
+
- **已有的五把密钥、卡片设置、精选 Skills 勾选、自选股清单与持仓标记全部照旧**,不需要重设。
|
|
82
|
+
- **之前直接选「初级分析」「可视化图形」的用户**:这两个入口不再出现在选择器里,旧会话仍能
|
|
83
|
+
按原身份恢复;新任务请在自动模式里提出,由主 Agent 委派。
|
|
84
|
+
- **行情专家的数据仍只属于当前会话**:单开行情专家拿到的数据,别的会话或自动模式读不到。
|
|
85
|
+
要做完整研究,直接在自动模式里提问。
|
|
86
|
+
- **提图不再是派分析师的开关**:无论要不要图,结构化数据都会先质检;明确不要图时只是停在
|
|
87
|
+
出图之前。图表的交付方式没变,仍作为本轮交付物出现在会话里,可在侧栏查看或离线打开。
|
|
88
|
+
- `data_analyst` 继续停用,不参与选择器与委派。
|
|
9
89
|
|
|
10
90
|
## [2.8.3] - 2026-10-16
|
|
11
91
|
|
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.
|
|
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.
|
|
21
|
+
<a href="https://github.com/v587d/capital-generation/releases"><img src="https://img.shields.io/badge/version-2.9.1-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
|
|
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.
|
|
39
|
+
> 适配 DSH`@0.2.1-rc.2`。已在 Linux 的 Web profile 和 Windows 桌面端验证;其他环境尚未充分测试。建议使用 `Deepseek/deepseek-flash` ,思考推理能力为 High ;GPT / Claude 尚未充分测试。
|
|
37
40
|
|
|
38
41
|
1. **安装插件。**
|
|
39
42
|
|
|
@@ -75,7 +78,7 @@ https://github.com/v587d/capital-generation
|
|
|
75
78
|
| [FTShare(非凸科技)](https://market.ft.tech/gateway/doc/p/pb8eizu3) | A 股行情与日 K 截面、主力资金流、涨跌停、龙虎榜席位、股东人数、指数权重、可转债行情、宏观利率,以及期货合约与贵金属行情等第二家上游口径 |
|
|
76
79
|
|
|
77
80
|
这些都是第三方服务的密钥,需分别向服务方申请;额度和条款以各服务方为准。
|
|
78
|
-
|
|
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. **新建会话。**
|
|
91
|
+
3. **新建会话。** 新会话的模式选择器里会看到三个自定义模式。日常研究选 **自动模式**,然后直接描述研究问题;也可以到「设置」→「Agent 预设」把它设为默认模式。
|
|
89
92
|
|
|
90
93
|
<p align="center">
|
|
91
|
-
<a href="assets/
|
|
92
|
-
<img src="assets/
|
|
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
|
-
|
|
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
|
|
135
|
-
-
|
|
136
|
-
- **可视化:**
|
|
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
|
-
- **管理自选股:**
|
|
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
|
|
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
|
-
-
|
|
190
|
+
- **安装后找不到模式?** 确认插件出现在「插件」→ 已安装列表;Web / CLI profile 安装后要重启该 profile,并在新会话选择模式。选择器里应看到自动模式、行情专家、资讯专员;分析师和绘图专员是自动模式的内部角色,不会出现在这里。
|
|
170
191
|
- **配置在哪?** 打开「插件」→ 已安装的 **Capital Generation**,页面顶部就是「数据源 / 精选 Skills / 包含的组件」三格,五把密钥都在第一格;不在 DSH 的普通「设置」页面,也不用点进任何一行组件。保存密钥后新建会话再试。
|
|
171
|
-
- **升级到 2.
|
|
172
|
-
- **桌面端升级后仍是旧版?** 桌面端安装时会固定所解析的版本,不会自动升级。卸载后重新安装,再到插件详情查看版本号;如需指定版本,可在地址末尾加 `#v2.
|
|
192
|
+
- **升级到 2.9.0 后,分析师和绘图专员去哪了?** 这一版把它们收进自动模式内部,不再出现在选择器与预设管理里,避免误开一个没有取数入口的空会话。旧会话仍能按原身份恢复;新任务直接用自动模式提出即可。
|
|
193
|
+
- **桌面端升级后仍是旧版?** 桌面端安装时会固定所解析的版本,不会自动升级。卸载后重新安装,再到插件详情查看版本号;如需指定版本,可在地址末尾加 `#v2.9.1` 或 `@2.9.1`。
|
|
173
194
|
- **刚发布的新版本装不到?** 桌面端取包时会跳过**刚发布不久**的版本(宿主侧包管理器的发布冷却策略,实测会静默装成上一个版本),国内镜像的同步也可能滞后一段时间。急着用最新代码,改用仓库地址安装最直接。
|
|
174
195
|
- **网页抓取失败?** 配置卡片中的「允许启动本地提取网页内容」默认开启:AnySearch 提取失败时可尝试本机直连。关闭后,本机直连的具名来源查询也不可用;请检查该开关和网络连接。
|
|
175
196
|
- **Wind 那部分会消耗积分?** 会。公告与新闻检索、宏观 / 行业 / 汇率指标、按日期区间取的历史 K 线都按次消耗你在 Wind 侧的额度;额度与条款以 Wind 为准,插件不做用量封顶。没配 `WIND_API_KEY` 时这几类不可用,其余功能照常。
|
|
176
|
-
-
|
|
197
|
+
- **自动模式没有加载已打开的精选 Skill?** 由 LLM 判断是否值得加载精选 Skill,如果你需要强制使用某一种技能,可通过 `/技能名称` 斜杠命令的形式手动加载已在设置中打开的 Skill。
|
|
177
198
|
- **精选 Skill 的方法论很长,Agent 读得完吗?** 读得完。超过一次可读长度的正文已经重排成「入口 + 分册」:Agent 先看入口目录,需要具体规则、模板或阈值时把对应那一册整本读进来,并会告诉你它读了哪几册、哪些没读。设置卡片里的「看原文」仍然只给入口那一份,想看某一册直接问 Agent。
|
|
178
199
|
|
|
179
|
-
目前 Windows 桌面端有一项[已知宿主差异](CHANGELOG.md)
|
|
200
|
+
目前 Windows 桌面端有一项[已知宿主差异](CHANGELOG.md):自动模式的出图与检索限制可能不生效。请留意它实际调用了哪些工具;结构化数据的取数边界仍由工具层执行。
|
|
180
201
|
|
|
181
202
|
## 开发与贡献
|
|
182
203
|
普通用户不需要执行下面的命令。修改源码时请参考 [贡献指南](CONTRIBUTING.md) 和 [开发约定](AGENTS.md):
|
package/chart-ui/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @v587d/capital-charts
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
自动模式的图表前端组件。**它不是独立安装的包**——它是 `@v587d/capital-generation`
|
|
4
4
|
随包携带的嵌套包,由后者 `cordis.patch.yml` 里的 `insert` 行以 host 平面挂载。
|
|
5
5
|
|
|
6
6
|
## 为什么是一个嵌套包,而不是主包的一部分
|
|
@@ -90,9 +90,10 @@ route owner 自己负责,平台自己的 `/api` 与首页分别走 `connection
|
|
|
90
90
|
|
|
91
91
|
## 本轮呈现(官方交付通道)
|
|
92
92
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
auto 模式下 `render_chart` 不再自动登记:主 Agent 在写最终答复前调用一次 `present_charts`,
|
|
94
|
+
把本轮 `chart_ref` 汇总成一条**官方** `deliverables/presented` 事件写进"用户正在看的根会话",
|
|
95
|
+
把 `capital-analysis/charts/<chart_id>/chart.html` 登记为**收尾轮交付物**(单体载体仍在出图时
|
|
96
|
+
自动登记):
|
|
96
97
|
|
|
97
98
|
- 载荷只有官方契约字段:`turn` / `callId`(`capital-chart:<chart_id>` 句柄)/ `files[]`
|
|
98
99
|
(工作区相对 `html_path` + 标题)——绝不含 rows、series、HTML 或绝对路径;
|
package/chart-ui/client.src.cjs
CHANGED
|
@@ -1,17 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `@v587d/capital-charts` browser half
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
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;
|
|
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
|
|
3
|
-
*
|
|
4
|
-
*
|
|
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
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
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
|
-
//
|
|
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
|
-
*
|
|
166
|
-
*
|
|
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
|
-
//
|
|
199
|
-
//
|
|
200
|
-
//
|
|
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
|
}
|
package/chart-ui/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@v587d/capital-charts",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "2.9.1",
|
|
4
|
+
"description": "自动模式的图表前端组件(浏览器半边 + 序列旁路路由):由 @v587d/capital-generation 随包携带并作为 host 平面行挂载。",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"exports": {
|