@v587d/capital-generation 2.12.0 → 2.13.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 CHANGED
@@ -7,6 +7,35 @@
7
7
  - **第三位(patch)**:不破坏既有工具 / 配置 / 会话的新增与修复(如 2.1.1、2.1.2)。
8
8
  - **第二位(minor)**:有需要用户知晓的行为变更,且段内附迁移说明(如 2.1.0 的图表呈现通道重做、2.2.0 的数据源与检索来源扩容、2.4.0 的**必须换宿主版本**、2.9.0 的选择器收敛与质检前置——本插件自己的工具与数据契约没变,所以只抬第二位)。
9
9
 
10
+ ## [2.13.1] - 2026-10-28
11
+
12
+ 投研自动化补上一轮可用性与可观测性:任务页和运行历史重做,交易日历改用深交所官方休市日历;
13
+ 进程重启或插件卸载后,已结束的回合不再被误记为未知。另修正 Wind EDB 的取数指引。
14
+
15
+ ### Changed
16
+
17
+ - **投研自动化页面重做**:任务页增加最近 30 天运行历史、运行中任务、分类筛选与搜索;模板区、
18
+ 任务详情、运行页和通知中心统一版式。首次打开先显示与最终布局同轮廓的骨架屏,不再先闪
19
+ 「还没有任务」;模板用「添加」,与「立即运行」分开。
20
+ - **交易日历改为深交所官方休市日历(无需 API Key)**:按月拉取并缓存
21
+ `<dsh home>/storages/capital-automation-calendar/szse.json`;已公布月份覆盖内置表,未公布月份
22
+ 回退内置表,覆盖不足 30 天时页面提前告警。交易所公布新一年安排后自动接上,不再需要改代码补表;
23
+ `tradingDaysOnly` 的 fail-closed 语义与 occurrence 计算不变。
24
+ - **Wind EDB 取数改为中文问句优先**:已知指标直接走 `wind_edb_query` 的中文问句,不再要求先
25
+ `wind_edb_search` 拿 code;两个能力都按次消耗上游积分,检索只用于不确定指标名或需要候选清单时。
26
+
27
+ ### Fixed
28
+
29
+ - **重启或 runtime 卸载把已完成回合误记为未知**:`turn/start` / `turn/end` 现在把回合边界写入
30
+ `turnState`;恢复时按已结束回合的原始终态收口,只有没有回合边界的运行才记
31
+ `unknown_after_restart`,并继续保持不自动重试。
32
+ - **日历刷新在途时提前烧掉当天 occurrence**:启动先等一次日历就绪,刷新未完成时顺延到下一 tick
33
+ 再判定,不把慢请求误判为「日历不可用」并跳过当天任务。
34
+
35
+ ## [2.13.0] - 2026-10-27
36
+
37
+ 新增 CapGen 投研自动化,目前还在实验阶段,存在诸多不稳定。
38
+
10
39
  ## [2.12.0] - 2026-10-26
11
40
 
12
41
  宿主基线从 `0.2.1-rc.2` 抬到 `0.2.1-rc.3`。rc.3 只改客户端界面与 DeepSeek 模型列表,本插件消费的
package/README.md CHANGED
@@ -18,7 +18,7 @@
18
18
  <p align="center">
19
19
  <a href="https://awesome-dsh-plugin.com"><img src="https://awesome-dsh-plugin.com/badge.svg" alt="awesome · DSH plugin"></a>
20
20
  <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-green" alt="License"></a>
21
- <a href="https://github.com/v587d/capital-generation/releases"><img src="https://img.shields.io/badge/version-2.12.0-9cf" alt="Version"></a>
21
+ <a href="https://github.com/v587d/capital-generation/releases"><img src="https://img.shields.io/badge/version-2.13.1-9cf" alt="Version"></a>
22
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>
23
23
  <a href="https://github.com/deepseek-ai/deepseek-harness"><img src="https://img.shields.io/badge/powered_by-dsh-4D6BFE?style=flat-square&logo=deepseek&logoColor=white" alt="powered-by-dsh"></a>
24
24
  </p>
@@ -34,50 +34,53 @@ Capital Generation 是运行在 [DeepSeek Harness(DSH)](https://github.com/d
34
34
  > [!IMPORTANT]
35
35
  > 本项目仍在探索中,不提供代交易服务,不保证数据完整、及时或准确,也不承诺投资回报。请自行核对来源并承担投资风险。
36
36
 
37
+ ## 「🎉 CapGen 投研自动化」 已上线,欢迎试用并提 issue 💕 [快速了解](#capgen-automation)
38
+
37
39
  ## 快速上手
38
40
 
39
41
  > [!NOTE]
40
- > 适配 DSH`@0.2.1-rc.3`。已在 Linux 的 Web profile 和 Windows 桌面端验证;其他环境尚未充分测试。建议使用 `Deepseek/deepseek-flash` ,思考推理能力为 High ;GPT / Claude 尚未充分测试。
42
+ > 适配 DSH`@0.2.1-rc.3`。已在 Linux 的 Web profile 和 Windows 桌面端验证。
41
43
 
42
- 1. **安装插件。**
43
44
 
44
- Linux / macOS 的 Web 或 CLI profile 在终端执行,下面两条 **任选一条**。建议装进独立 profile(例如 `capital`),避免和默认 `web` profile 里的插件、密钥与预设互相影响:
45
+ 0. **建议前置**
45
46
 
46
- ```bash
47
- dsh plugin --profile capital add @v587d/capital-generation
48
- ```
49
- 或
50
- ```bash
51
- dsh plugin --profile capital add github:v587d/capital-generation
52
- ```
47
+ > [!TIP]
48
+ > **建议用独立 profile 启动。** 比如:
49
+ >
50
+ > ```bash
51
+ > dsh --profile capital --port 8888
52
+ > ```
53
+ >
54
+ > 然后访问 `http://localhost:8888`。这样,本插件只属于 capital 这个 profile,避免和其他 profile 冲突。
53
55
 
54
- 两条装完的功能一样:前者取 npm 上已发布的版本,后者取本仓库当前的代码。`capital` 会在第一次执行命令时自动初始化;装好后按下一步启动。
56
+ 1. **安装插件**
55
57
 
56
- DSH 桌面端在 「添加插件」 中输入,下面两条 **任选一条**:
58
+ Linux / macOS :
57
59
 
58
- ```input
59
- https://github.com/v587d/capital-generation
60
- ```
61
- 或
62
- ```input
63
- @v587d/capital-generation
64
- ```
65
- 桌面端自带 DSH 宿主,不需要单独用 npm 安装宿主。本仓库已包含构建产物,普通用户不需要克隆仓库或运行构建命令。
60
+ ```bash
61
+ dsh plugin --profile capital add @v587d/capital-generation
62
+ ```
63
+ 或
64
+ ```bash
65
+ dsh plugin --profile capital add github:v587d/capital-generation
66
+ ```
67
+
68
+ DSH 桌面端在 「添加插件」 中输入:
69
+
70
+ ```input
71
+ https://github.com/v587d/capital-generation
72
+ ```
73
+ 或
74
+ ```input
75
+ @v587d/capital-generation
76
+ ```
77
+ **本仓库已包含构建产物,普通用户不需要克隆仓库或运行构建命令。**
66
78
 
67
79
 
68
80
  > [!NOTE]
69
81
  > 本插件所有自带密钥均可免费申请、免费日常使用。 哪怕所有密钥留空也不影响插件核心功能,即缺哪个密钥,仅表示对应能力就不可用,其他功能照常。
70
82
 
71
- > [!TIP]
72
- > **建议用独立 profile 启动。** 安装到 `capital` 后,用下面的命令打开一个全新的 profile:
73
- >
74
- > ```bash
75
- > dsh --profile capital --port 8888
76
- > ```
77
- >
78
- > 然后访问 `http://localhost:8888`。本插件、密钥和默认模式都只属于这个 profile,不会和 DSH web profile 的默认设置冲突;如果已经装在 `web`,也可以继续用 `dsh --profile web` 启动,下面的配置步骤相同。
79
-
80
- 2. **选填密钥。** 打开 DSH 「插件」 → **Capital Generation** →「数据源」(进页面就停在这一格)。
83
+ 2. **选填密钥** (打开 DSH 「插件」 → **Capital Generation** →「数据源」)
81
84
 
82
85
  | 密钥 | 用途 |
83
86
  | --- | --- |
@@ -87,44 +90,22 @@ https://github.com/v587d/capital-generation
87
90
  | [PaddleOCR AIStudio](https://aistudio.baidu.com/paddleocr) | 解析 PDF 和图片中的文字 |
88
91
  | [FTShare(非凸科技)](https://market.ft.tech/gateway/doc/p/pb8eizu3) | A 股行情与日 K 截面、主力资金流、涨跌停、龙虎榜席位、股东人数、指数权重、可转债行情、宏观利率,以及期货合约与贵金属行情等第二家上游口径 |
89
92
 
90
- 这些都是第三方服务的密钥,需分别向服务方申请;额度和条款以各服务方为准。
91
- 保存后**新建会话**即可生效,无需重启。
92
- 也可以不走卡片,直接把密钥写入 `~/.dsh/.credentials.yaml`,名称依次为 `FUYAO_API_KEY`、`ANYSEARCH_API_KEY`、`WIND_API_KEY`、`PADDLE_OCR_TOKEN`、`FTSHARE_API_KEY`。
93
- 密钥由 DSH 凭据服务保存,不会显示在会话配置中。
94
-
95
- <p align="center">
96
- <a href="assets/数据源配置.png">
97
- <img src="assets/数据源配置.png" alt="数据源配置" width="800">
98
- </a>
99
- </p>
93
+ 第三方服务的密钥,需分别向服务方申请;额度和条款以各服务方为准。保存后 **新建会话** 即可生效,无需重启。也可以直接把密钥写入
94
+ `~/.dsh/.credentials.yaml`,名称依次为 `FUYAO_API_KEY`、`ANYSEARCH_API_KEY`、`WIND_API_KEY`、`PADDLE_OCR_TOKEN`、`FTSHARE_API_KEY`。密钥由 DSH 凭据服务保存。
100
95
 
101
96
  3. **新建会话。** 新会话的模式选择器里会看到三个自定义模式。日常研究选 **自动模式**,然后直接描述研究问题;也可以到「设置」→「Agent 预设」把它设为默认模式。
102
97
 
103
- <p align="center">
104
- <a href="assets/session-preset-selector.png">
105
- <img src="assets/session-preset-selector.png" alt="新会话选择自动模式" width="800">
106
- </a>
107
- </p>
108
-
109
- ## 三个模式怎么选
110
-
111
- <p align="center">
112
- <a href="assets/settings-perset-selector.png">
113
- <img src="assets/settings-perset-selector.png" alt="「Agent 预设」里的三个自定义模式" width="760">
114
- </a>
115
- </p>
116
-
117
- | 模式 | 适合什么 | 会做什么 | 边界 |
118
- | --- | --- | --- | --- |
119
- | **自动模式**(推荐) | 投研报告、事件影响、持仓复盘,以及需要同时查数、查资料和出图的综合问题 | 统一调度取数、数据质检、资料检索与绘图,汇总证据后直接答复 | 自动模式不直接取数,也不直接画图;每个数字都要有来源与截止时间 |
120
- | **行情专家** | 只想拿一份结构化行情、财务或宏观数据 | 查询并保存到当前会话,返回数据引用、来源与截止时间 | 只负责取数,不读取数据内容、不做判断;数据只在当前会话可用 |
121
- | **资讯专员** | 只要公告、新闻或互动平台材料 | 检索公告与新闻,逐条标注来源与核验状态 | 不做投资分析,也不给买卖建议 |
98
+ | 模式 | 适合什么 | 会做什么 | 边界 |
99
+ | --- | --- | --- | --- |
100
+ | **自动模式**(推荐) | 投研报告、事件影响、持仓复盘,以及需要同时查数、查资料和出图的综合问题 | 统一调度取数、数据质检、资料检索与绘图,汇总证据后直接答复 | 自动模式不直接取数,也不直接画图;每个数字都要有来源与截止时间 |
101
+ | **行情专家** | 只想拿一份结构化行情、财务或宏观数据 | 查询并保存到当前会话,返回数据引用、来源与截止时间 | 只负责取数,不读取数据内容、不做判断;数据只在当前会话可用 |
102
+ | **资讯专员** | 只要公告、新闻或互动平台材料 | 检索公告与新闻,逐条标注来源与核验状态 | 不做投资分析,也不给买卖建议 |
122
103
 
123
- **分析师**与**绘图专员**是自动模式的内部角色,不出现在选择器里。自动模式会在需要时创建并调度它们;它们没有独立的取数入口,单独打开也读不到本次研究的数据。
104
+ **分析师**与**绘图专员**是自动模式的内部角色,不出现在选择器里。自动模式会在需要时创建并调度它们;它们没有独立的取数入口,单独打开也读不到本次研究的数据。
124
105
 
125
- **每份结构化数据都会先做质检。** 无论你有没有提图表,自动模式收到行情或财务数据后都会先交给分析师检查结构、时间轴、缺失与基础统计;要不要图是检查之后的一个判断。明确说“不要图”时,质检照做,只是停在出图之前。
106
+ **每份结构化数据都会先做质检。** 无论你有没有提图表,自动模式收到行情或财务数据后都会先交给分析师检查结构、时间轴、缺失与基础统计;要不要图是检查之后的一个判断。明确说“不要图”时,质检照做,只是停在出图之前。
126
107
 
127
- 自动模式会把子角色工作期间的中间回执留在同一轮里处理,等材料收齐后再给出完整结论,而不是每条中间进展都单独回一段。
108
+ 自动模式会把子角色工作期间的中间回执留在同一轮里处理,等材料收齐后再给出完整结论,而不是每条中间进展都单独回一段。
128
109
 
129
110
  ## 试试这么用
130
111
 
@@ -132,9 +113,12 @@ https://github.com/v587d/capital-generation
132
113
 
133
114
  [样例:指南针、同花顺复盘分析报告(20261023)](docs/sample/指南针-同花顺-复盘分析报告.md)
134
115
 
116
+ <details>
117
+ <summary>展开示例指令</summary>
118
+
135
119
  **完整投资研究报告**
136
120
 
137
- ```text
121
+ ```instruction
138
122
  请对[公司名称、俗称]([证券代码])做一份完整投资研究报告。
139
123
  以你实际取得的最新可用数据为截止,覆盖业务、财务、估值、价格走势、近期重要事件以及风险与反方观点。
140
124
  先给核心判断和最大风险;关键数字注明报告期或交易日、来源和采集时间。
@@ -143,7 +127,7 @@ https://github.com/v587d/capital-generation
143
127
 
144
128
  **事件与公告影响分析**
145
129
 
146
- ```text
130
+ ```instruction
147
131
  请核查[公司名称]([完整证券代码])的[公告标题及披露日期,或“最近一次业绩公告”],
148
132
  分析它对经营、现金流和投资风险可能产生的影响。
149
133
  先核对公告原文、披露时间和事项进展,区分已实施事实与尚待批准的方案;
@@ -153,7 +137,7 @@ https://github.com/v587d/capital-generation
153
137
 
154
138
  **持仓与组合复盘**
155
139
 
156
- ```text
140
+ ```instruction
157
141
  请复盘我的持仓[其他资产如有,请补充]。
158
142
  请先核对这些比例是否覆盖全部资产,再分析单只标的、行业与市场的集中风险,
159
143
  以及哪些风险会同时影响多个持仓。
@@ -162,6 +146,8 @@ https://github.com/v587d/capital-generation
162
146
  给出最需要核实的信息和可观察的防守选项。
163
147
  ```
164
148
 
149
+ </details>
150
+
165
151
  ## 还能做什么
166
152
 
167
153
  - **查数据和资料:** 覆盖 A 股、港股、美股与期货等品种,由专用角色按需获取行情、财务、指数、基金、宏观行业与期货数据,检索公告、新闻和研报。共计 **128** 个数据收集能力和 **14** 个网页检索能力,部分公开数据源无需额外密钥;具体覆盖范围见 [数据收集能力表](docs/data-collector-capabilities.md) 和 [网页检索能力表](docs/web-retriever-capabilities.md)。
@@ -180,6 +166,12 @@ https://github.com/v587d/capital-generation
180
166
 
181
167
  - **精选 Skills:** 当前收录 8 个开源项目、共 70 个 Skill。默认不开启「智能装载 Skills」,逐项清单和勾选都在;打开后清单收起,按角色开放该角色全部方法,由模型按任务挑 1–2 条,运行期不再看勾选。两种状态都按角色分发:研究/组合方法归自动模式,估值/财务/风险/筛选归分析师,文档深读与核验归资讯专员;无需新建会话,下一轮就生效。
182
168
 
169
+ <p align="center">
170
+ <a href="assets/selected-skills配置.png">
171
+ <img src="assets/selected-skills配置.png" alt="精选 Skills 配置:按 Skill 特点与适用预设筛选" width="800">
172
+ </a>
173
+ </p>
174
+
183
175
  | 项目名称 | 收录边界 |
184
176
  | :---: | :---: |
185
177
  | [The Investment Skills Lexicon](https://github.com/finterm-ai/investment-skills) | Buffett Investment Framework |
@@ -191,9 +183,17 @@ https://github.com/v587d/capital-generation
191
183
  | [FinanceSkills](https://github.com/GAJETOso/financeskills) | 8 个估值与财务方法 Skill:折现率(WACC)估算、三表勾稽建模、企业估值与股权价值桥、偿债能力与债务容量、预期信用损失三阶段、银行资本与流动性、保险准备金与综合成本率、账务异常排查;按 IFRS / 美股与国际准则口径写,境内监管阈值与科目名需自行对照 |
192
184
  | [Quant Agent Skills](https://github.com/Howard-Jerry/quant-agent-skills) | 1 个跨市场选线 Skill:同一家公司在 A 股与港股、或美股 ADR 与港股各有一条线时该走哪一条——价差、币种与股息税、流动性与通道、披露文件路径各不相同。公司本身只研究一次,便宜的那条线不构成"这家公司更值得买";A/H 溢价与 ADR 平价没有现成条目,须按两条线同一天的收盘价与当日汇率现算,缺任一项就只报缺的那一项 |
193
185
 
186
+ <a id="capgen-automation" name="capgen-automation"></a>
187
+ - **CapGen 投研自动化:** 内置早间资讯、盘后公告与每日复盘三个模板,也可新建自己的任务;到点自动新建 session 执行,也能手动运行。任务、运行历史与失败通知在同一页,支持运行预算、通知和仅交易日触发。
188
+
194
189
  <p align="center">
195
- <a href="assets/selected-skills配置.png">
196
- <img src="assets/selected-skills配置.png" alt="精选 Skills 配置:按 Skill 特点与适用预设筛选" width="800">
190
+ <a href="assets/capgen-automation-tasks.png">
191
+ <img src="assets/capgen-automation-tasks.png" alt="投研自动化:任务、日程与运行概览" width="800">
192
+ </a>
193
+ </p>
194
+ <p align="center">
195
+ <a href="assets/capgen-automation-runs.png">
196
+ <img src="assets/capgen-automation-runs.png" alt="投研自动化:运行历史与错误详情" width="800">
197
197
  </a>
198
198
  </p>
199
199
 
@@ -202,7 +202,7 @@ https://github.com/v587d/capital-generation
202
202
  - **安装后找不到模式?** 确认插件出现在「插件」→ 已安装列表;Web / CLI profile 安装后要重启该 profile,并在新会话选择模式。选择器里应看到自动模式、行情专家、资讯专员;分析师和绘图专员是自动模式的内部角色,不会出现在这里。
203
203
  - **配置在哪?** 打开「插件」→ 已安装的 **Capital Generation**,页面顶部就是「数据源 / 精选 Skills / 包含的组件」三格,五把密钥都在第一格;不在 DSH 的普通「设置」页面,也不用点进任何一行组件。保存密钥后新建会话再试。
204
204
  - **升级到 2.9.0 后,分析师和绘图专员去哪了?** 这一版把它们收进自动模式内部,不再出现在选择器与预设管理里,避免误开一个没有取数入口的空会话。旧会话仍能按原身份恢复;新任务直接用自动模式提出即可。
205
- - **桌面端升级后仍是旧版?** 桌面端安装时会固定所解析的版本,不会自动升级。卸载后重新安装,再到插件详情查看版本号;如需指定版本,可在地址末尾加 `#v2.12.0` 或 `@2.12.0`。
205
+ - **桌面端升级后仍是旧版?** 桌面端安装时会固定所解析的版本,不会自动升级。卸载后重新安装,再到插件详情查看版本号;如需指定版本,可在地址末尾加 `#v2.13.1` 或 `@2.13.1`。
206
206
  - **刚发布的新版本装不到?** 桌面端取包时会跳过**刚发布不久**的版本(宿主侧包管理器的发布冷却策略,实测会静默装成上一个版本),国内镜像的同步也可能滞后一段时间。急着用最新代码,改用仓库地址安装最直接。
207
207
  - **网页抓取失败?** 配置卡片中的「允许启动本地提取网页内容」默认开启:AnySearch 提取失败时可尝试本机直连。关闭后,本机直连的具名来源查询也不可用;请检查该开关和网络连接。
208
208
  - **Wind 那部分会消耗积分?** 会。公告与新闻检索、宏观 / 行业 / 汇率指标、按日期区间取的历史 K 线都按次消耗你在 Wind 侧的额度;额度与条款以 Wind 为准,插件不做用量封顶。没配 `WIND_API_KEY` 时这几类不可用,其余功能照常。
@@ -233,4 +233,4 @@ npm run smoke:boot # 检查插件装配
233
233
  - 会话里的可交互图表由 [TradingView Lightweight Charts](https://github.com/tradingview/lightweight-charts)(Apache-2.0)渲染,图上保留它自带的归属标识。
234
234
  - 行情、财务、公告与网页材料来自五类需自备密钥的服务(同花顺 Fuyao、Wind Alice、AnySearch、PaddleOCR、FTShare 非凸科技)与一批公开口径的来源(东方财富、腾讯、新浪、财联社、华尔街见闻、巨潮互动易、上证 e互动、同花顺公开站点);数据版权归各服务方,额度与条款以服务方为准,本项目不重新分发原始数据。
235
235
 
236
- 第三方组件、版本与许可,以及宿主提供哪部分、构建期用什么、各服务的数据会出到哪些地方,逐条列在 [第三方组件与许可](THIRD_PARTY_NOTICES.md)。
236
+ 第三方组件、版本与许可,以及宿主提供哪部分、构建期用什么、各服务的数据会出到哪些地方,逐条列在 [第三方组件与许可](THIRD_PARTY_NOTICES.md)。
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Builtin task templates. Code is the only definition source: a profile record stores only the
3
+ * user override layer, so a shipped instruction fix reaches every dormant/reset task.
4
+ */
5
+ import { BuiltinDefinitionSchema, parseStrict } from './schema.js'
6
+ import {
7
+ DEFAULT_IDLE_TIMEOUT_MINUTES,
8
+ DEFAULT_MAX_STEPS,
9
+ DEFAULT_MAX_TOOL_CALLS,
10
+ DEFAULT_RUN_TIMEOUT_MINUTES,
11
+ } from './defaults.js'
12
+
13
+ const DEFAULT_LIMITS = {
14
+ runTimeoutMinutes: DEFAULT_RUN_TIMEOUT_MINUTES,
15
+ idleTimeoutMinutes: DEFAULT_IDLE_TIMEOUT_MINUTES,
16
+ maxSteps: DEFAULT_MAX_STEPS,
17
+ maxToolCalls: DEFAULT_MAX_TOOL_CALLS,
18
+ }
19
+
20
+ const DEFAULT_NOTIFICATIONS = {
21
+ inApp: true,
22
+ onFailure: true,
23
+ onSuccess: false,
24
+ }
25
+
26
+ const SOURCE_RULES = `数据与来源纪律:
27
+ - 结构化行情、财务与宏观数据一律委派 data_collector 取回 DatasetRef,再交 data_junior 做质检与统计;
28
+ 不在正文中复制原始数据行,不凭记忆填写数字。
29
+ - 新闻、公告与监管文件委派 web_retriever,逐条编号并标注来源、发布时间与核验状态;
30
+ 媒体转述只能作为旁证。
31
+ - 关键数值必须带采集时间与来源标签;数据缺失或过期时明确写出,不用猜测补齐。
32
+ - 不给出买卖指令、收益承诺或目标价。`
33
+
34
+ const UNATTENDED_RULES = `无人值守执行策略(automation-v1):
35
+ - 这是定时触发的无人值守运行:不要调用 ask_user_question,不要等待审批,不要请求用户补充信息。
36
+ - 若关键输入缺失或存在歧义,选择最保守的可核查口径继续,并在答复开头用一句「需要用户确认」写明缺口。
37
+ - 只使用当前角色工具面;不尝试提权、不写文件、不修改系统配置。
38
+ - 最终答复必须自足:结论、证据与来源、局限与风险、后续观察点;不要写“见上”“已完成”这类指针句。`
39
+
40
+ const SCHEDULE_COMMON = {
41
+ kind: 'schedule',
42
+ cadence: 'daily',
43
+ time: '08:30',
44
+ timezone: 'Asia/Shanghai',
45
+ tradingDaysOnly: true,
46
+ }
47
+
48
+ /** @type {readonly import('./schema.js').BuiltinDefinition[]} */
49
+ export const BUILTIN_DEFINITIONS = [
50
+ {
51
+ id: 'morning-brief',
52
+ version: 1,
53
+ category: 'news',
54
+ defaults: {
55
+ state: 'dormant',
56
+ category: 'news',
57
+ title: '早间资讯',
58
+ description: '交易日开盘前汇总隔夜外盘、重要公告与政策信息,给出当日需要盯住的线索。',
59
+ trigger: { ...SCHEDULE_COMMON, time: '08:30' },
60
+ instruction: `任务:生成一份交易日早间资讯简报,供开盘前阅读。
61
+
62
+ 覆盖范围(按重要性排序,不追求数量):
63
+ 1. 隔夜外盘:美股主要指数、原油/黄金/美元与人民币汇率的关键变化。
64
+ 2. 国内政策与监管:可能影响市场风险偏好的政策、会议、监管表态。
65
+ 3. 重要公司公告:业绩预告、重大合同、并购重组、减持/回购、停复牌与风险提示。
66
+ 4. 当日事件:宏观数据、重要会议、限售解禁与新股申购中值得提示的部分。
67
+
68
+ 输出结构:
69
+ - 三到五条「今日要点」,每条一句话并标注依据来源。
70
+ - 分节展开上述范围;没有可靠信息的条目直接说明“未取得可靠信息”,不要用旧闻填充。
71
+ - 末尾列「需要继续跟踪」与「信息缺口」。
72
+
73
+ ${SOURCE_RULES}
74
+
75
+ ${UNATTENDED_RULES}`,
76
+ mode: 'news',
77
+ cwdKind: 'profile',
78
+ limits: { ...DEFAULT_LIMITS },
79
+ notifications: { ...DEFAULT_NOTIFICATIONS },
80
+ },
81
+ },
82
+ {
83
+ id: 'post-close-filings',
84
+ version: 1,
85
+ category: 'news',
86
+ defaults: {
87
+ state: 'dormant',
88
+ category: 'news',
89
+ title: '盘后公告',
90
+ description: '交易日收盘后梳理当日公告与盘面异动,筛出次日需要复核的事项。',
91
+ trigger: { ...SCHEDULE_COMMON, time: '18:30' },
92
+ instruction: `任务:生成一份交易日盘后公告与异动复盘。
93
+
94
+ 覆盖范围:
95
+ 1. 当日重要公告:业绩、订单、重组、诉讼、监管问询、股权变动、分红与回购。
96
+ 2. 盘面异动:涨停/跌停、连板、成交额与换手异常的板块和个股;只描述可核查事实。
97
+ 3. 公告与异动的交叉核对:哪些异动有公告支撑,哪些没有。
98
+
99
+ 输出结构:
100
+ - 「次日复核清单」:逐条写明标的、事项、需要核对的下一条信息。
101
+ - 分节展开公告与异动;每条公告带交易所/公司披露来源。
102
+ - 对无法确认的传闻明确标注“未核验”,不得当作事实。
103
+
104
+ ${SOURCE_RULES}
105
+
106
+ ${UNATTENDED_RULES}`,
107
+ mode: 'news',
108
+ cwdKind: 'profile',
109
+ limits: { ...DEFAULT_LIMITS },
110
+ notifications: { ...DEFAULT_NOTIFICATIONS },
111
+ },
112
+ },
113
+ {
114
+ id: 'daily-review',
115
+ version: 1,
116
+ category: 'review',
117
+ defaults: {
118
+ state: 'dormant',
119
+ category: 'review',
120
+ title: '每日复盘',
121
+ description: '交易日收盘后复盘指数、量能、板块轮动与自选股表现,形成可验证的观察清单。',
122
+ trigger: { ...SCHEDULE_COMMON, time: '20:00' },
123
+ instruction: `任务:生成一份交易日复盘,重点是可验证的事实与下一交易日的观察条件。
124
+
125
+ 覆盖范围:
126
+ 1. 指数与量能:主要指数涨跌、成交额、涨跌家数、北向/主力资金(仅在有可靠数据时)。
127
+ 2. 板块轮动:涨幅与跌幅居前的行业/概念,和近 5 个交易日的相对强弱。
128
+ 3. 自选股:读取当前用户自选股清单,逐只给出当日表现与相对强弱;无自选股时跳过并说明。
129
+ 4. 风险与异常:放量下跌、高位股退潮、公告风险与流动性异常。
130
+
131
+ 输出结构:
132
+ - 「一句话结论」与「下一交易日观察清单」,每条观察都要有触发条件和失效条件。
133
+ - 分节给出证据;数值必须来自 Dataset 或受控行情工具并标注采集时间。
134
+ - 明确写出数据缺口与无法验证的部分;不要用“可能”“大概”替代缺失数据。
135
+
136
+ ${SOURCE_RULES}
137
+
138
+ ${UNATTENDED_RULES}`,
139
+ mode: 'review',
140
+ cwdKind: 'profile',
141
+ limits: { ...DEFAULT_LIMITS },
142
+ notifications: { ...DEFAULT_NOTIFICATIONS },
143
+ },
144
+ },
145
+ ].map((definition) => parseStrict(BuiltinDefinitionSchema, definition, 'builtin definition'))
146
+
147
+ export const BUILTIN_BY_ID = new Map(BUILTIN_DEFINITIONS.map((definition) => [definition.id, definition]))