@v587d/capital-generation 2.16.0 → 2.16.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 +28 -0
- package/README.md +2 -2
- package/automation/builtins.js +3 -3
- package/automation/package.json +1 -1
- package/chart-ui/package.json +1 -1
- package/config/package.json +1 -1
- package/lib/web-retriever/local-fetch.d.ts +1 -1
- package/lib/web-retriever/local-fetch.js +1 -1
- package/lib/web-retriever/sources.d.ts +1 -0
- package/lib/web-retriever/sources.js +7 -3
- package/lib/web-retriever/tools.js +6 -4
- package/lib/web-retriever/wind-client.d.ts +1 -1
- package/lib/web-retriever/wind-client.js +1 -1
- package/package.json +1 -1
- package/preset/capital-generation/agent.patch.yml +3 -3
- package/preset/capital-generation/skills/capital-web-evidence/SKILL.md +10 -4
- package/preset/capital-generation/skills/capital-web-protocol/SKILL.md +22 -14
- package/watchlist/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,34 @@
|
|
|
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.16.1] - 2026-11-04
|
|
11
|
+
|
|
12
|
+
盘前公告补齐全市场覆盖:A 股、港股、美股自选股都要逐只给结论,不能只做 A 股;同时把东财公告
|
|
13
|
+
正文/PDF 定为公告事实的权威转载(`authoritative_reprint`),不再要求巨潮 PDF 作为前置,但
|
|
14
|
+
`verified_official` 仍只给官方域名核验。
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- **盘前公告覆盖 A/港/美全部自选股**:内置模板升到 version 2,明确按 A 股、港股、美股分市场
|
|
19
|
+
查询、逐只给结论,指数单独一句;美股按上一交易日收盘后的盘后披露覆盖,完整美股盘前仍由
|
|
20
|
+
20:30 的「美股盘前」任务承接。检索协议同步要求先按市场分组批量传 `codes`,不得把港股/美股
|
|
21
|
+
标成「不适用」。
|
|
22
|
+
- **东财公告改为权威转载**:`eastmoney_announcement_body` 的正文/PDF 可作公告事实的权威引用,
|
|
23
|
+
标注「公告原文(东财转载,`authoritative_reprint`)」;`verified_official` 的域名核验口径不变,
|
|
24
|
+
`pdf.dfcfw.com` 仍不是官方域名。新增 `is_ai_summary` 回执:等于 1 时只是摘要,不能当全文;
|
|
25
|
+
`done=true` 才叫全文。时分用列表 `published_at`,正文 `notice_date` 只有日期。
|
|
26
|
+
- **美股附件形态**:美股正文常为空,附件可能是 `.html` 而不是 PDF;PDF 交 `ocr`,HTML 用
|
|
27
|
+
`web_retriever_fetch`,不再一律按 PDF 处理。
|
|
28
|
+
- **修正 `cls_telegraph` 的旧指向**:官方公告改指 `eastmoney_announcements`,零 key 备份改为
|
|
29
|
+
`wscn_lives` / `eastmoney_724`。
|
|
30
|
+
|
|
31
|
+
### Migration
|
|
32
|
+
|
|
33
|
+
- 内置「盘前公告」任务会自动迁移到 version 2;若手动改过任务指令,需在任务编辑页恢复默认或
|
|
34
|
+
手动补上 A/港/美全覆盖。
|
|
35
|
+
- 报告中的公告来源标注从「公告全文(东财转载)」改为「公告原文(东财转载,`authoritative_reprint`)」;
|
|
36
|
+
`verified_official` 仍只在官方域名核验时使用。
|
|
37
|
+
|
|
10
38
|
## [2.16.0] - 2026-11-03
|
|
11
39
|
|
|
12
40
|
公告这条线换了默认来源:新增两个零密钥的东财公告工具(列表 + 分页正文),公告清单不再依赖 Wind
|
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.16.
|
|
21
|
+
<a href="https://github.com/v587d/capital-generation/releases"><img src="https://img.shields.io/badge/version-2.16.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>
|
|
@@ -196,7 +196,7 @@ Capital Generation 是运行在 [DeepSeek Harness(DSH)](https://github.com/d
|
|
|
196
196
|
- **安装后找不到模式?** 确认插件出现在「插件」→ 已安装列表;Web / CLI profile 安装后要重启该 profile,并在新会话选择模式。选择器里应看到自动模式、行情专家、资讯专员;分析师和绘图专员是自动模式的内部角色,不会出现在这里。
|
|
197
197
|
- **配置在哪?** 打开「插件」→ 已安装的 **Capital Generation**,页面顶部就是「数据源 / 投研自动化 / 精选 Skills / 包含的组件」四格,五把密钥都在第一格;第二格可指定任务统一使用的默认工作区,也能改自动检查间隔与最长运行时间等上限;不在 DSH 的普通「设置」页面,也不用点进任何一行组件。保存密钥后新建会话再试。
|
|
198
198
|
- **升级到 2.9.0 后,分析师和绘图专员去哪了?** 这一版把它们收进自动模式内部,不再出现在选择器与预设管理里,避免误开一个没有取数入口的空会话。旧会话仍能按原身份恢复;新任务直接用自动模式提出即可。
|
|
199
|
-
- **桌面端升级后仍是旧版?** 桌面端安装时会固定所解析的版本,不会自动升级。卸载后重新安装,再到插件详情查看版本号;如需指定版本,可在地址末尾加 `#v2.16.
|
|
199
|
+
- **桌面端升级后仍是旧版?** 桌面端安装时会固定所解析的版本,不会自动升级。卸载后重新安装,再到插件详情查看版本号;如需指定版本,可在地址末尾加 `#v2.16.1` 或 `@2.16.1`。
|
|
200
200
|
- **刚发布的新版本装不到?** 桌面端取包时会跳过**刚发布不久**的版本(宿主侧包管理器的发布冷却策略,实测会静默装成上一个版本),国内镜像的同步也可能滞后一段时间。急着用最新代码,改用仓库地址安装最直接。
|
|
201
201
|
- **网页抓取失败?** 配置卡片中的「允许启动本地提取网页内容」默认开启:AnySearch 提取失败时可尝试本机直连。关闭后,本机直连的具名来源查询也不可用;请检查该开关和网络连接。
|
|
202
202
|
- **Wind 那部分会消耗积分?** 会。Wind 的公告 / 新闻语义检索、宏观 / 行业 / 汇率指标、按日期区间取的历史 K 线都按次消耗你在 Wind 侧的额度;额度与条款以 Wind 为准,插件不做用量封顶。没配 `WIND_API_KEY` 时这几类不可用,其余功能照常——公告清单与正文有零密钥的东财工具,不配 Wind 也能查。
|
package/automation/builtins.js
CHANGED
|
@@ -71,15 +71,15 @@ export const BUILTIN_DEFINITIONS = [
|
|
|
71
71
|
},
|
|
72
72
|
{
|
|
73
73
|
id: 'pre-open-filings',
|
|
74
|
-
version:
|
|
74
|
+
version: 2,
|
|
75
75
|
category: 'news',
|
|
76
76
|
defaults: {
|
|
77
77
|
state: 'dormant',
|
|
78
78
|
category: 'news',
|
|
79
79
|
title: '盘前公告',
|
|
80
|
-
description: '
|
|
80
|
+
description: '交易日开盘前汇总各市场上一交易日收盘后至今的公告,筛出自选股与全市场开盘前必须处理的事项。',
|
|
81
81
|
trigger: { ...SCHEDULE_COMMON, time: '08:00' },
|
|
82
|
-
instruction: '
|
|
82
|
+
instruction: '生成交易日盘前公告:覆盖各市场上一交易日收盘后至运行时刻的公告,先逐只过自选股(含已标持仓),按 A 股、港股、美股分市场全覆盖,不得只做 A 股或标「不适用」;每只股票都要有结论,指数不发公告。再补权重股、龙头与政策相关的非自选股。覆盖业绩预告、重组并购、重大合同、增减持与回购、股权激励、诉讼与风险警示、停复牌、分红。逐条写标的、事项、关键数字、影响与开盘后验证点,按「开盘前必看 / 只需知晓」分级;没有公告的自选股并成一句。只写公告,不复述隔夜外盘与大盘行情;取不到写「未取到」。',
|
|
83
83
|
cwdKind: 'profile',
|
|
84
84
|
limits: { ...DEFAULT_LIMITS },
|
|
85
85
|
notifications: { ...DEFAULT_NOTIFICATIONS },
|
package/automation/package.json
CHANGED
package/chart-ui/package.json
CHANGED
package/config/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Known limit: DNS resolves per request but the IP is not pinned to the connection,
|
|
4
4
|
* so a rebinding window remains (same trade-off as dsh-search-first).
|
|
5
5
|
*/
|
|
6
|
-
export declare const LOCAL_FETCH_CLIENT_VERSION = "2.16.
|
|
6
|
+
export declare const LOCAL_FETCH_CLIENT_VERSION = "2.16.1";
|
|
7
7
|
export declare const LOCAL_FETCH_MAX_URL_LENGTH = 2048;
|
|
8
8
|
export type LocalFetchErrorCode = 'ABORTED' | 'TIMEOUT' | 'INVALID_URL' | 'BLOCKED_URL' | 'DNS' | 'REDIRECT' | 'HTTP' | 'TOO_LARGE' | 'UNSUPPORTED_CONTENT_TYPE';
|
|
9
9
|
export declare class LocalFetchError extends Error {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* so a rebinding window remains (same trade-off as dsh-search-first).
|
|
5
5
|
*/
|
|
6
6
|
import { htmlToMarkdown, stripInvisibleText } from './html-markdown.js';
|
|
7
|
-
export const LOCAL_FETCH_CLIENT_VERSION = '2.16.
|
|
7
|
+
export const LOCAL_FETCH_CLIENT_VERSION = '2.16.1';
|
|
8
8
|
export const LOCAL_FETCH_MAX_URL_LENGTH = 2048;
|
|
9
9
|
export class LocalFetchError extends Error {
|
|
10
10
|
code;
|
|
@@ -967,7 +967,7 @@ export async function eastmoneyAnnouncements(client, input) {
|
|
|
967
967
|
const offset = Number.isSafeInteger(input.cursor) && input.cursor >= 0 ? input.cursor : 0;
|
|
968
968
|
const items = sorted.slice(offset, offset + input.pageSize);
|
|
969
969
|
const windowOutOfRange = !reachedOlder && oldestScanned !== undefined && oldestScanned > end;
|
|
970
|
-
const notes = ['
|
|
970
|
+
const notes = ['东财公告是官方披露的转载;正文/PDF 可作公告事实的权威引用(authoritative_reprint),verified_official 仍只给官方域名;正文用 eastmoney_announcement_body;窗口按 display_time(北京时间)过滤'];
|
|
971
971
|
if (sorted.length === 0 && !windowOutOfRange)
|
|
972
972
|
notes.push('窗口内没有公告(合法空结果;东财列表只覆盖最近若干页)');
|
|
973
973
|
if (windowOutOfRange) {
|
|
@@ -1018,6 +1018,7 @@ export async function eastmoneyAnnouncementBody(client, input) {
|
|
|
1018
1018
|
const pdfUrl = itemUrl(data.attach_url_web ?? data.attach_url);
|
|
1019
1019
|
const title = clip(data.notice_title);
|
|
1020
1020
|
const noticeDate = clip(data.notice_date);
|
|
1021
|
+
const aiSummary = Number(data.is_ai_summary) === 1;
|
|
1021
1022
|
const base = {
|
|
1022
1023
|
source: 'eastmoney',
|
|
1023
1024
|
operation: 'announcement_body',
|
|
@@ -1026,6 +1027,7 @@ export async function eastmoneyAnnouncementBody(client, input) {
|
|
|
1026
1027
|
offset: input.offset,
|
|
1027
1028
|
page_chars: content.length,
|
|
1028
1029
|
total_pages: totalPages,
|
|
1030
|
+
is_ai_summary: aiSummary,
|
|
1029
1031
|
...(pdfUrl.length > 0 ? { pdf_url: pdfUrl } : {}),
|
|
1030
1032
|
...(title.length > 0 ? { title } : {}),
|
|
1031
1033
|
...(noticeDate.length > 0 ? { notice_date: noticeDate } : {}),
|
|
@@ -1035,7 +1037,7 @@ export async function eastmoneyAnnouncementBody(client, input) {
|
|
|
1035
1037
|
...base,
|
|
1036
1038
|
content: '',
|
|
1037
1039
|
done: true,
|
|
1038
|
-
note:
|
|
1040
|
+
note: `该公告正文接口没有返回文本(美股公告常见;若为 A/H 公告,可能是上游结构变更);正文在附件:PDF 交 ocr,.html 用 web_retriever_fetch,别把标题当正文${aiSummary ? ';东财标记为 AI 摘要(is_ai_summary=1),不是全文' : ''}`,
|
|
1039
1041
|
};
|
|
1040
1042
|
}
|
|
1041
1043
|
if (page > totalPages) {
|
|
@@ -1059,8 +1061,10 @@ export async function eastmoneyAnnouncementBody(client, input) {
|
|
|
1059
1061
|
const notes = [];
|
|
1060
1062
|
if (totalPages > 1)
|
|
1061
1063
|
notes.push(`全文共 ${totalPages} 页(每页约 5,000 字符);用 next_offset / next_page 继续读`);
|
|
1064
|
+
if (aiSummary)
|
|
1065
|
+
notes.push('东财标记为 AI 摘要(is_ai_summary=1),不是公告全文;全文用 pdf_url + ocr');
|
|
1062
1066
|
if (pdfUrl.length > 0)
|
|
1063
|
-
notes.push('PDF
|
|
1067
|
+
notes.push('附件直链在 pdf_url(可能是 .html;PDF 交 ocr,HTML 用 web_retriever_fetch);verified_official 仍只给官方域名');
|
|
1064
1068
|
return {
|
|
1065
1069
|
...base,
|
|
1066
1070
|
content: slice,
|
|
@@ -169,7 +169,7 @@ export function registerSearchTools(ctx, retriever, windClient, echo = createRet
|
|
|
169
169
|
},
|
|
170
170
|
{
|
|
171
171
|
name: WIND_ANNOUNCEMENTS_TOOL,
|
|
172
|
-
description: 'Wind 官方文档库的公告语义检索(public_document,**按次计费**),只作深研备用。⛔ 公告清单不要用它:先 eastmoney_announcements(零 key、发行人限定、按披露时间窗完整列出);实测 Wind 的自然语言检索会漏最新公告、把关联方/别家公司文件排进来。本工具只适合“按语义找一段话”或东财覆盖不到的材料。query 必须一次带齐三要素:公司实体(代码或全称)、文件类型、时间范围;禁止无主体泛查询。返回内容标注“来源:万得 Wind
|
|
172
|
+
description: 'Wind 官方文档库的公告语义检索(public_document,**按次计费**),只作深研备用。⛔ 公告清单不要用它:先 eastmoney_announcements(零 key、发行人限定、按披露时间窗完整列出);实测 Wind 的自然语言检索会漏最新公告、把关联方/别家公司文件排进来。本工具只适合“按语义找一段话”或东财覆盖不到的材料。query 必须一次带齐三要素:公司实体(代码或全称)、文件类型、时间范围;禁止无主体泛查询。返回内容标注“来源:万得 Wind 金融数据服务”与时间口径;公告清单/正文优先东财,公告引用标 authoritative_reprint,官方域名核验才走巨潮/发行人。消耗积分,按需少量调用;AUTH/RATE_LIMIT 等错误不得重试。',
|
|
173
173
|
parameters: jsonObject({
|
|
174
174
|
query: { type: 'string', description: '自然语言检索要求;必须包含公司实体(股票代码或公司全称)、文件类型与时间范围三要素,最多 500 字符' },
|
|
175
175
|
top_k: { type: 'integer', description: '可选,返回相关文档最大数量 1~10,默认 5' },
|
|
@@ -913,7 +913,7 @@ export function registerSourceTools(ctx, localFetchOptions) {
|
|
|
913
913
|
const definitions = [
|
|
914
914
|
{
|
|
915
915
|
name: 'cls_telegraph',
|
|
916
|
-
description: '取财联社 7×24 全市场快讯(直连 cls.cn v1 接口,签名由本工具本地计算,零 key)。这是**确定性来源查询**而非检索:返回最近 limit 条快讯,含时间、标题、正文与原文链接。财联社是媒体来源,内容只能作为「媒体转述旁证」,不得标 verified_official;官方公告请用
|
|
916
|
+
description: '取财联社 7×24 全市场快讯(直连 cls.cn v1 接口,签名由本工具本地计算,零 key)。这是**确定性来源查询**而非检索:返回最近 limit 条快讯,含时间、标题、正文与原文链接。财联社是媒体来源,内容只能作为「媒体转述旁证」,不得标 verified_official;官方公告请用 eastmoney_announcements(正文/PDF 标 authoritative_reprint)。与 wscn_lives / eastmoney_724 互为独立备份。',
|
|
917
917
|
parameters: jsonObject({
|
|
918
918
|
limit: { type: 'integer', description: '可选,返回快讯条数 1~50,默认 20' },
|
|
919
919
|
}, []),
|
|
@@ -1021,7 +1021,7 @@ export function registerSourceTools(ctx, localFetchOptions) {
|
|
|
1021
1021
|
},
|
|
1022
1022
|
{
|
|
1023
1023
|
name: 'eastmoney_announcements',
|
|
1024
|
-
description: '取东方财富公告列表(确定性来源查询,零 key;一次只查一个市场)。codes 传 1~50 只批量代码;start_date/end_date 是披露时间窗口(按 display_time 的北京时间日期,含首尾,最长 31 天)。返回 code/name/date/title/category/art_code/url
|
|
1024
|
+
description: '取东方财富公告列表(确定性来源查询,零 key;一次只查一个市场)。codes 传 1~50 只批量代码;start_date/end_date 是披露时间窗口(按 display_time 的北京时间日期,含首尾,最长 31 天)。返回 code/name/market/date/published_at/title/category/art_code/url,按发布时间倒序;published_at 是完整时分,盘前窗口按它过滤;翻页把回执的 next_cursor 原样传回 cursor。⛔ 公告清单默认走本工具,不要用 wind_docs 的语义检索代替:实测 Wind 会漏最新公告、混入关联方/其他公司。⛔ 东财公告是官方披露的转载;正文/PDF 可作公告事实的权威引用(authoritative_reprint),但 verified_official 仍只给官方域名核验;正文用 eastmoney_announcement_body。⛔ 盘前公告的 start_date 要取上一交易日(display_time 在收盘后仍算当日),end_date 取运行日;只查运行日会漏掉昨晚盘后披露。窗口内没有公告是合法空结果,不是失败。',
|
|
1025
1025
|
parameters: jsonObject({
|
|
1026
1026
|
codes: { type: 'array', items: { type: 'string', description: 'A 股 6 位(600519 / 600519.SH)、港股 5 位(00700 / 0700.HK)、美股 ticker(AAPL / AAPL.O);一次只查一个市场,1~50 只;整张自选股一次批量传,不要逐只调用' } },
|
|
1027
1027
|
market: { type: 'string', enum: ['auto', 'A', 'H', 'U'], description: '可选,默认 auto 按代码形状推断;混合市场会报错,请分开调用' },
|
|
@@ -1064,7 +1064,7 @@ export function registerSourceTools(ctx, localFetchOptions) {
|
|
|
1064
1064
|
},
|
|
1065
1065
|
{
|
|
1066
1066
|
name: 'eastmoney_announcement_body',
|
|
1067
|
-
description: '读东方财富公告正文(按 art_code)。上游每页最多 5,000 字符,本工具用 page + offset 返回最多 4,000 字符/次;回执给 content/content_chars/next_offset/next_page/done/total_pages/pdf_url。art_code 从 eastmoney_announcements 回执复制,不要自己拼。⛔
|
|
1067
|
+
description: '读东方财富公告正文(按 art_code)。上游每页最多 5,000 字符,本工具用 page + offset 返回最多 4,000 字符/次;回执给 content/content_chars/next_offset/next_page/done/total_pages/pdf_url/is_ai_summary。art_code 从 eastmoney_announcements 回执复制,不要自己拼。⛔ 美股公告正文常为空(只有附件):此时 content 为空、done=true;pdf_url 可能是 .html,PDF 交 ocr、HTML 用 web_retriever_fetch,别把标题当正文。港股正文是繁体原文。⛔ 正文/PDF 可作公告事实的权威引用,标「公告原文(东财转载,authoritative_reprint)」;is_ai_summary=1 只是摘要,全文转 PDF/ocr;verified_official 仍只给官方域名。⛔ notice_date 只有日期,时分用列表的 published_at。',
|
|
1068
1068
|
parameters: jsonObject({
|
|
1069
1069
|
art_code: { type: 'string', description: '公告标识,形如 AN202611021831320924,来自 eastmoney_announcements 回执' },
|
|
1070
1070
|
page: { type: 'integer', description: '可选,上游正文页号(1 起),默认 1;先按 next_page 翻' },
|
|
@@ -1086,6 +1086,7 @@ export function registerSourceTools(ctx, localFetchOptions) {
|
|
|
1086
1086
|
offset: { type: 'integer' },
|
|
1087
1087
|
page_chars: { type: 'integer' },
|
|
1088
1088
|
total_pages: { type: 'integer' },
|
|
1089
|
+
is_ai_summary: { type: 'boolean' },
|
|
1089
1090
|
content: { type: 'string' },
|
|
1090
1091
|
content_chars: { type: 'integer' },
|
|
1091
1092
|
next_offset: { type: 'integer' },
|
|
@@ -1129,6 +1130,7 @@ export function registerSourceTools(ctx, localFetchOptions) {
|
|
|
1129
1130
|
offset: body.offset,
|
|
1130
1131
|
page_chars: body.page_chars,
|
|
1131
1132
|
total_pages: body.total_pages,
|
|
1133
|
+
is_ai_summary: body.is_ai_summary,
|
|
1132
1134
|
...(body.title === undefined ? {} : { title: body.title }),
|
|
1133
1135
|
...(body.notice_date === undefined ? {} : { notice_date: body.notice_date }),
|
|
1134
1136
|
...(body.pdf_url === undefined ? {} : { pdf_url: body.pdf_url }),
|
|
@@ -35,7 +35,7 @@ export interface WindCallResult {
|
|
|
35
35
|
code?: WindErrorCode;
|
|
36
36
|
}
|
|
37
37
|
/** Must match `package.json` version; a test pins the two together. */
|
|
38
|
-
export declare const WIND_CLIENT_VERSION = "2.16.
|
|
38
|
+
export declare const WIND_CLIENT_VERSION = "2.16.1";
|
|
39
39
|
export interface WindClient {
|
|
40
40
|
callTool(toolName: string, args: Record<string, unknown>, signal?: AbortSignal): Promise<WindCallResult>;
|
|
41
41
|
}
|
|
@@ -19,7 +19,7 @@ export const WIND_SERVER_ENDPOINTS = {
|
|
|
19
19
|
analytics_data: 'https://mcp.wind.com.cn/vserver_analytics_data/mcp/',
|
|
20
20
|
};
|
|
21
21
|
/** Must match `package.json` version; a test pins the two together. */
|
|
22
|
-
export const WIND_CLIENT_VERSION = '2.16.
|
|
22
|
+
export const WIND_CLIENT_VERSION = '2.16.1';
|
|
23
23
|
function errorText(error) {
|
|
24
24
|
return error instanceof Error ? error.message : String(error);
|
|
25
25
|
}
|
package/package.json
CHANGED
|
@@ -312,8 +312,8 @@
|
|
|
312
312
|
# DUTIES
|
|
313
313
|
0. 首次检索前先 skill capital-web-protocol,取回来源边界、Wind 三要素(仅深研)
|
|
314
314
|
与降级口径;回传前再 skill capital-web-evidence,取回编号格式、域名核验与 `ocr` 处置。
|
|
315
|
-
1. 先定来源再动手:公告清单优先 eastmoney_announcements
|
|
316
|
-
空转后才想起;正文用 eastmoney_announcement_body
|
|
315
|
+
1. 先定来源再动手:公告清单优先 eastmoney_announcements,不要等 anysearch
|
|
316
|
+
空转后才想起;正文用 eastmoney_announcement_body;公告引用标「公告原文(东财转载)」;官方核验走官网;
|
|
317
317
|
wind_docs(public_document)只用于语义深研或东财未覆盖处(计费)。换 provider 前
|
|
318
318
|
先看 recent_retrievals / provider_tally。
|
|
319
319
|
2. 十六个工具:检索面 anysearch_search、web_retriever_fetch、wind_docs_announcements、
|
|
@@ -329,7 +329,7 @@
|
|
|
329
329
|
RATE_LIMIT 类错误不得重试 wind,直接转 anysearch。
|
|
330
330
|
5. 每条证据都要有来源:无来源的信息不得作为证据回传;不得编造链接;
|
|
331
331
|
verified_official 只能来自 web_retriever_fetch 的官方域名核验,其余标 unverified / not_verified;
|
|
332
|
-
|
|
332
|
+
媒体/互动平台只能作旁证;东财公告正文/PDF 可作权威引用,标「公告原文(东财转载)」;
|
|
333
333
|
相对时间一律调 resolve_data_time_range,不自行计算。
|
|
334
334
|
|
|
335
335
|
# SAFETY
|
|
@@ -24,11 +24,14 @@ description: Use when returning or labelling what was retrieved — the numbered
|
|
|
24
24
|
`情报1:公司今日召开临时股东会审议借款议案。[AnySearch, 新浪财经, 证券之星](https://…)`
|
|
25
25
|
- 没有具体网页链接的证据(如 `eastmoney_announcement_body` / `wind_docs` 返回的公告/新闻正文),
|
|
26
26
|
只标注来源与时间口径。示例:
|
|
27
|
-
`情报2:公司2024
|
|
27
|
+
`情报2:公司2024年年报披露净利润同比下降。(来源:公告原文(东财转载,authoritative_reprint),2026-09-11)`
|
|
28
28
|
`eastmoney_announcement_body` / `wind_docs` 返回体内自带 `pdf_url` / 链接字段时可用那个链接;
|
|
29
|
-
|
|
29
|
+
**不得编造链接**。`authoritative_reprint` 只给东财公告正文/PDF;`verified_official` 仍只给官方域名核验。
|
|
30
|
+
- **`authoritative_reprint`(公告原文,东财转载)**:`art_code` 来自发行人限定列表,正文
|
|
31
|
+
`is_ai_summary=0`,且 `content` 非空或 `pdf_url` 可用;`done=true` 才标「全文」,否则「部分正文」。
|
|
32
|
+
它是公告事实的权威引用,但不是 `verified_official`;东财快讯/新闻仍是媒体旁证,不能套这个标签。
|
|
30
33
|
- 来源标注要区分:候选来源(搜索摘要,未点开)、已获取正文(fetch 过)、东财公告转载
|
|
31
|
-
|
|
34
|
+
(公告原文(东财转载),`authoritative_reprint`)、wind_docs 官方文档(来源:Wind)。
|
|
32
35
|
**无来源的信息不得作为证据回传**;不编造来源。
|
|
33
36
|
- 失败项与未核验项同样编号列出并注明原因,不与已证实证据混排;核心事实同一来源服务多条时逐条
|
|
34
37
|
重复标注,不要用"同上"(外围清单可整段合标)。
|
|
@@ -51,6 +54,8 @@ description: Use when returning or labelling what was retrieved — the numbered
|
|
|
51
54
|
第三方域名,不代表该域名自动属于官方。
|
|
52
55
|
- 只有官方页面能够直接证明归属和用途时,才能标记为 `verified_official`;否则标记为
|
|
53
56
|
`unverified` 或 `not_verified`,不得猜测或列入白名单。
|
|
57
|
+
- 东财公告的 `pdf.dfcfw.com` 是转载域名,不得当官方域名;公告引用用 `authoritative_reprint`,
|
|
58
|
+
域名核验仍标 `not_verified`。
|
|
54
59
|
- 每个已核验域名输出:机构、司法辖区、机构类型、规范化域名、官方网址、核验用途、可信原因、
|
|
55
60
|
核验状态、证据网址、抓取时间和使用限制。
|
|
56
61
|
- 将"已核验官方白名单"和"候选/未核验域名"分开;没有充分证据时明确写"未核验",不得为了
|
|
@@ -98,7 +103,8 @@ description: Use when returning or labelling what was retrieved — the numbered
|
|
|
98
103
|
1. **不重试、不尝试绕过**:不分析混淆脚本、不猜 cookie、不靠换 UA 碰运气。
|
|
99
104
|
2. 如实回传:该 URL **未取得正文**,与其他已证实证据分开编号,域名核验状态写「未核验」。
|
|
100
105
|
3. **改走公告库/官网**:公告清单先用 `eastmoney_announcements`,正文用
|
|
101
|
-
`eastmoney_announcement_body
|
|
106
|
+
`eastmoney_announcement_body`;公告引用用 `authoritative_reprint`(正文/PDF),官方域名核验才走
|
|
107
|
+
官网 fetch。需要按语义找段落且东财
|
|
102
108
|
覆盖不到时,再用 `wind_docs_announcements` / `wind_docs_news`(`public_document`,计费),
|
|
103
109
|
标注「来源:万得 Wind 金融数据服务」与时间口径。
|
|
104
110
|
这些都查不到时,再试同一内容的**其他官方入口**(中国政府网、部委主站镜像等),
|
|
@@ -25,7 +25,7 @@ persona 只保留硬规则(先定来源再动手、只用这十六个工具、
|
|
|
25
25
|
|
|
26
26
|
| 来源 | 工具 | 性格 | 用途 |
|
|
27
27
|
|---|---|---|---|
|
|
28
|
-
| `eastmoney 公告` | `eastmoney_announcements` / `eastmoney_announcement_body` | 公告清单(零 key,A/H/US) |
|
|
28
|
+
| `eastmoney 公告` | `eastmoney_announcements` / `eastmoney_announcement_body` | 公告清单(零 key,A/H/US) | 公司公告列表与分页正文;**公告清单默认第一选择**,正文/PDF 可作权威引用(`authoritative_reprint`),官方域名核验另走巨潮/发行人 |
|
|
29
29
|
| `wind_docs` | `wind_docs_announcements` / `wind_docs_news` | 语义深研(`public_document`,**计费**) | 按语义找公告/新闻段落;**不是公告清单的可靠来源**(实测会漏最新、混入关联方) |
|
|
30
30
|
| `anysearch` | `anysearch_search` / `web_retriever_fetch` | 广度 | 候选探索与线索、官方页面归属核验、Wind 覆盖之外的内容(监管政策原文、境外或非上市主体、市场传闻) |
|
|
31
31
|
| `cls` | `cls_telegraph` | 来源查询(媒体) | 财联社 7×24 全市场快讯 |
|
|
@@ -46,8 +46,10 @@ persona 只保留硬规则(先定来源再动手、只用这十六个工具、
|
|
|
46
46
|
自然语言检索会漏掉最新公告、把关联方/别家公司的文件排进来;东财列表是发行人限定的完整列表。
|
|
47
47
|
东财列表只给标题/时间/`art_code`/链接,正文用 `eastmoney_announcement_body` 按 `page` + `offset`
|
|
48
48
|
读完(每页约 5,000 字符,单次最多 4,000 字符)。
|
|
49
|
-
-
|
|
50
|
-
|
|
49
|
+
- **东财公告是权威转载**:正文/PDF 可作公告事实的权威引用,标
|
|
50
|
+
「公告原文(东财转载,`authoritative_reprint`)」;`verified_official` 仍只给官方域名核验,
|
|
51
|
+
不因换源放宽。正文 `is_ai_summary=0` 且 `done=true` 才叫全文,否则标部分正文/摘要。
|
|
52
|
+
美股公告正文常为空(只有 `pdf_url`/附件):PDF 交 `ocr`,`.html` 用 `web_retriever_fetch`,不得把标题当正文;港股正文是繁体原文。
|
|
51
53
|
- `eastmoney_reports` / `sina_reports` 的列表**不含正文**(只有标题 / 机构 / 研究员 / 日期 / 评级)。
|
|
52
54
|
东财的每条还直接给出 `pdf_url`(该篇研报 PDF 直链)与 `attach_pages`——**这不是死路:把那条
|
|
53
55
|
`pdf_url` 原样交 `ocr` 解析**(`capital-web-evidence` §8),不要自己去拼或改链接。`ocr` 也拿不到时如实说明这个
|
|
@@ -57,10 +59,11 @@ persona 只保留硬规则(先定来源再动手、只用这十六个工具、
|
|
|
57
59
|
- `sina_reports` **不含评级与目标价**;需要这些改用 `eastmoney_reports`。
|
|
58
60
|
|
|
59
61
|
- **先定来源再动手**:公告清单先 `eastmoney_announcements`,不要等 anysearch 空转后才想起;
|
|
60
|
-
|
|
62
|
+
公告引用用东财正文/PDF(`authoritative_reprint`),官方域名核验才走官网 fetch;需要按语义找一段话、
|
|
63
|
+
或东财覆盖不到时才用 `wind_docs`(计费)。
|
|
61
64
|
- `verified_official` 只能来自 `web_retriever_fetch` 的官方域名核验路径。九个媒体/互动/研报来源
|
|
62
|
-
|
|
63
|
-
`verified_official
|
|
65
|
+
(快讯、新闻、研报、问答)只能作旁证;东财公告是**权威转载**,可按 `authoritative_reprint`
|
|
66
|
+
引用公告事实,但不标 `verified_official`,也不降为媒体旁证。
|
|
64
67
|
- 不调用官方名称为 `web_search` 或 `web_fetch` 的其他工具。
|
|
65
68
|
|
|
66
69
|
### 1.1 来源查询的纪律(与检索不同)
|
|
@@ -84,10 +87,15 @@ persona 只保留硬规则(先定来源再动手、只用这十六个工具、
|
|
|
84
87
|
**不要把"这次只回了 17 条"读成"上游一共只有 17 条"**。
|
|
85
88
|
- **代码写法随意**:`600519` / `SH600519` / `600519.SH` 归一化成同一个查询(上游只认纯 6 位),
|
|
86
89
|
格式写错不会静默变成空结果。
|
|
87
|
-
- **公告分页与盘前窗口**:`eastmoney_announcements` 按 `display_time
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
90
|
+
- **公告分页与盘前窗口**:`eastmoney_announcements` 按 `display_time`(北京时间)过滤,翻页把回执的
|
|
91
|
+
`next_cursor` 原样传回 `cursor`;`eastmoney_announcement_body` 先按 `next_offset` 读完本页,
|
|
92
|
+
再按 `next_page` 翻下一页。**盘前公告先把自选股按 A 股、港股、美股分成三组,每组一次批量传
|
|
93
|
+
`codes`(≤50),三组都要查;混合代码会报错。不得只做 A 股,也不得把港股/美股标成「不适用」**。
|
|
94
|
+
`start_date` 取各自市场的上一交易日(收盘后披露的 `display_time` 仍是当日),`end_date` 取运行日;
|
|
95
|
+
只查运行日会漏掉昨晚盘后披露。美股 `display_time` 也是北京时间,`notice_date` 可能是美股当地日,
|
|
96
|
+
窗口以 `published_at` 为准;08:00 运行覆盖的是美股上一交易日收盘后的盘后披露,不是当晚美股盘前
|
|
97
|
+
(完整盘前交给 20:30 任务)。港股正文是繁体,美股正文常为空;附件是 PDF 交 `ocr`,是 `.html` 用
|
|
98
|
+
`web_retriever_fetch`。
|
|
91
99
|
- **`sseinfo_qa` 的 `code=TIMEOUT` 是上游慢**(按公司定位要串行翻 10+ 页),不是这一轮被取消:
|
|
92
100
|
稍后重试,或先用不带 `code` 的调用取全市场问答再按代码筛。
|
|
93
101
|
- 这十一个工具的失败是**工具错误**(`isError`),不是"正常返回的失败信封";`code` 取值见回执
|
|
@@ -134,12 +142,12 @@ Wind 结构化查询同样是**花积分的**:先看 `data_collector` 的免
|
|
|
134
142
|
- `wind_docs` 返回内容视为"来源:万得 Wind 金融数据服务"的官方文档库检索结果,标注来源与
|
|
135
143
|
时间口径后即可作为证据使用,不必再走官网核验。
|
|
136
144
|
- 同一份文件不得两边都取原文;两边都取必须是明说的交叉核验,且一份对一份。
|
|
137
|
-
- **公告清单失败降级**:`eastmoney_announcements`
|
|
138
|
-
|
|
139
|
-
官方披露页;回传注明实际路径。
|
|
145
|
+
- **公告清单失败降级**:`eastmoney_announcements` 失败先转巨潮/官网(`cninfo_irm` 只覆盖问答,
|
|
146
|
+
公告正文优先东财正文/PDF,官方域名核验才走官网 fetch),再转 `anysearch_search` 发现线索并逐个
|
|
147
|
+
`web_retriever_fetch` 官方披露页;回传注明实际路径。
|
|
140
148
|
- **Wind 失败降级**:`wind_docs` 返回 AUTH / RATE_LIMIT 等错误信封时**不得重试 wind**,
|
|
141
149
|
直接转 `eastmoney_announcements`/`anysearch_search` 发现公告线索并逐个 `web_retriever_fetch`
|
|
142
150
|
官方披露页,回传注明"Wind 不可用/未覆盖,来源为官网抓取"。
|
|
143
|
-
- 反向 fallback:anysearch
|
|
151
|
+
- 反向 fallback:anysearch 多轮探索仍找不到公告原文而 Wind 可用时,转 `wind_docs` 少走弯路。
|
|
144
152
|
- 换 provider 前先看 `recent_retrievals` / `provider_tally`:该诉求是否已被回答、已有材料是否
|
|
145
153
|
覆盖、目标来源还剩多少余量;切换原因写进回传。检索收敛法则按 provider 各自计。
|
package/watchlist/package.json
CHANGED