🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

公募基金研究报告 PerryLink/dsh-fund-research

DeepSeek Harnessv0.5.1
PerryLink2 天前有提交已提供中文文档扫描:含敏感能力data

DeepSeek Harness 插件:为中国公募基金生成确定性研究报告

52.8/100
综合分
66
GitHub 星标
1,352
npm 周下载
—/5
用户评分

数据截至 2026/11/1 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-fund-research
npm 源 · dsh-fund-research 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · tool
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 2 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-fund-research @ 0.5.1
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 02:38:48

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 66 处,展示前 54 条)
  • 读取本地文件
    lib/index.js:1512
    entries = await readdir(fundDir);
  • 读取本地文件
    lib/index.js:1517
    const text = await readFile(path.join(fundDir, entry, "snapshot.json"), "utf8");
  • 写入本地文件
    lib/index.js:1996
    await mkdir(versionDir, { recursive: true });
  • 写入本地文件
    lib/index.js:1999
    await writeFile(target, json, "utf8");
  • 写入本地文件
    lib/index.js:2018
    await writeFile(reportPathAbs, markdown, "utf8");
  • 写入本地文件
    lib/index.js:2036
    await writeFile(manifestPathAbs, manifestJson, "utf8");
  • 读取本地文件
    lib/index.js:2105
    root = JSON.parse(await readFile(resolveDataset(request.dataset), "utf8"));
  • 读取本地文件
    lib/index.js:2330
    const text = await readFile(runStatePath(reportRootAbs), "utf8");
  • 写入本地文件
    lib/index.js:2381
    await mkdir(reportRootAbs, { recursive: true });
  • 写入本地文件
    lib/index.js:2382
    await writeFile(runStatePath(reportRootAbs), JSON.stringify(map, null, 2), "utf8");
  • 读取本地文件
    lib/index.js:2457
    const text = await readFile(trackingPath(reportRootAbs), "utf8");
  • 读取本地文件
    lib/index.js:2523
    const snapshotText = await readFile(path.join(versionDir, "snapshot.json"), "utf8");
  • 读取本地文件
    lib/types/sources/snapshot.js:76
    entries = await readdir(fundDir);
  • 读取本地文件
    lib/types/sources/snapshot.js:83
    const text = await readFile(path.join(fundDir, entry, 'snapshot.json'), 'utf8');
  • 读取本地文件
    lib/types/run-state.js:48
    const text = await readFile(runStatePath(reportRootAbs), 'utf8');
  • 写入本地文件
    lib/types/run-state.js:95
    await mkdir(reportRootAbs, { recursive: true });
  • 写入本地文件
    lib/types/run-state.js:96
    await writeFile(runStatePath(reportRootAbs), JSON.stringify(map, null, 2), 'utf8');
  • 写入本地文件
    lib/types/tracking.js:56
    await mkdir(reportRootAbs, { recursive: true });
  • 写入本地文件
    lib/types/tracking.js:57
    await appendFile(trackingPath(reportRootAbs), `${JSON.stringify(record)}\n`, 'utf8');
  • 读取本地文件
    lib/types/tracking.js:66
    const text = await readFile(trackingPath(reportRootAbs), 'utf8');
  • 读取本地文件
    lib/types/review.js:25
    const snapshotText = await readFile(path.join(versionDir, 'snapshot.json'), 'utf8');
  • 读取本地文件
    lib/types/review.js:27
    const manifest = JSON.parse(await readFile(path.join(versionDir, 'manifest.json'), 'utf8'));
  • 读取本地文件
    lib/types/review.js:28
    const reportText = await readFile(path.join(versionDir, 'report.md'), 'utf8');
  • 写入本地文件
    lib/types/review.js:60
    await writeFile(path.join(versionDir, 'review-note.md'), markdown, 'utf8');
  • 写入本地文件
    lib/types/report.js:327
    await mkdir(versionDir, { recursive: true });
  • 写入本地文件
    lib/types/report.js:330
    await writeFile(target, json, 'utf8');
  • 写入本地文件
    lib/types/report.js:346
    await writeFile(reportPathAbs, markdown, 'utf8');
  • 写入本地文件
    lib/types/report.js:364
    await writeFile(manifestPathAbs, manifestJson, 'utf8');
  • 读取本地文件
    lib/types/verify-bridge.js:64
    root = JSON.parse(await readFile(resolveDataset(request.dataset), 'utf8'));
  • 读取本地文件
    lib/types/tools/shared.js:61
    return await readFile(file, 'utf8');
  • 写入本地文件
    lib/types/tools/shared.js:69
    await writeFile(path.join(versionDir, 'sources-discovery.json'), JSON.stringify(discovery, null, 2), 'utf8');
  • 写入本地文件
    lib/types/tools/shared.js:413
    await mkdir(versionDir, { recursive: true });
  • 写入本地文件
    lib/types/tools/shared.js:416
    await writeFile(snapshotAbs, snapshotJson, 'utf8');
  • 写入本地文件
    lib/types/tools/shared.js:418
    await writeFile(discoveryAbs, JSON.stringify(discovery, null, 2), 'utf8');
  • 写入本地文件
    lib/types/tools/shared.js:420
    await writeFile(cardAbs, `${renderSnapshotCard(snapshot)}\n`, 'utf8');
  • 读取本地文件
    lib/types/index.js:62
    return existsSync(join(candidate, 'fund-research', 'SKILL.md')) ? candidate : undefined;
  • 读取本地文件
    src/index.ts:106
    return existsSync(join(candidate, 'fund-research', 'SKILL.md')) ? candidate : undefined
  • 写入本地文件
    src/report.ts:456
    await mkdir(versionDir, { recursive: true })
  • 写入本地文件
    src/report.ts:459
    await writeFile(target, json, 'utf8')
  • 写入本地文件
    src/report.ts:481
    await writeFile(reportPathAbs, markdown, 'utf8')
  • 写入本地文件
    src/report.ts:500
    await writeFile(manifestPathAbs, manifestJson, 'utf8')
  • 读取本地文件
    src/review.ts:42
    const snapshotText = await readFile(path.join(versionDir, 'snapshot.json'), 'utf8')
  • 读取本地文件
    src/review.ts:44
    const manifest = JSON.parse(await readFile(path.join(versionDir, 'manifest.json'), 'utf8')) as ReportManifest
  • 读取本地文件
    src/review.ts:45
    const reportText = await readFile(path.join(versionDir, 'report.md'), 'utf8')
  • 写入本地文件
    src/review.ts:74
    await writeFile(path.join(versionDir, 'review-note.md'), markdown, 'utf8')
  • 读取本地文件
    src/run-state.ts:105
    const text = await readFile(runStatePath(reportRootAbs), 'utf8')
  • 写入本地文件
    src/run-state.ts:156
    await mkdir(reportRootAbs, { recursive: true })
  • 写入本地文件
    src/run-state.ts:157
    await writeFile(runStatePath(reportRootAbs), JSON.stringify(map, null, 2), 'utf8')
  • 读取本地文件
    src/sources/snapshot.ts:93
    entries = await readdir(fundDir)
  • 读取本地文件
    src/sources/snapshot.ts:99
    const text = await readFile(path.join(fundDir, entry, 'snapshot.json'), 'utf8')
  • 写入本地文件
    src/tracking.ts:92
    await mkdir(reportRootAbs, { recursive: true })
  • 写入本地文件
    src/tracking.ts:93
    await appendFile(trackingPath(reportRootAbs), `${JSON.stringify(record)}\n`, 'utf8')
  • 读取本地文件
    src/tracking.ts:102
    const text = await readFile(trackingPath(reportRootAbs), 'utf8')
  • 读取本地文件
    src/verify-bridge.ts:106
    root = JSON.parse(await readFile(resolveDataset(request.dataset), 'utf8'))
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-attachment@deepseek-ai/cordis@deepseek-ai/cordis-plugin-include@deepseek-ai/cordis-plugin-loader@deepseek-ai/dsh-agent@deepseek-ai/dsh-jobs@deepseek-ai/dsh-jobs-local@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-skill@deepseek-ai/dsh-skill-filesystem@deepseek-ai/dsh-storage
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

2 张 · 点击查看大图

功能亮点

  • 生成公募基金研究报告
v0.5.12026-10-24
· [0.5.1] - 2026-10-24 · 修复 · 把 zod 锁定在 4.4.3,在宿主包对齐前忽略 dependabot 的版本升级。npm-minor-patch 分组把 zod@4.6.7 和宿主的 4.4.3 一起拉了进来,重复的 ZodType 标识会让 tsc 报错。精确锁定后只保留一份 zod 标识。
v0.5.02026-10-23
· [0.5.0] - 2026-10-23 · 变更 · 基金研究系统提示词段落现在改为按需开启,并按工具限定范围(issue #17)。此前该段落从插件的配置档根上下文全局注册,导致配置档里每个会话都套上「基金研究助手」人设,连无关工作也受影响。promptSection 现在默认 false,设为 true 可恢复该段落。开启后它按 1900 顺序注册(工具指引档位),渲染时返回文本,除非组装范围内能看到 fund_snapshot / fund_research,否则返回空;文案也不再声称助手身份。设为 true 仍对整个部署生效,只要范围能看到这些工具,包括从不调用它们的会话;要按会话隔离,请把这一行挂到预设里。五份 README 都记录了该键和按需开启的语义。
v0.4.252026-10-18
· [0.4.25] - 2026-10-18 · 变更 · 把 tsdown/typescript(以及存在时的 @types/react)从运行时依赖移到 devDependencies。Git 安装仍会构建:pnpm 会为 git 依赖安装 devDependencies 并运行 prepare;npm 的 tarball 会带上构建好的 lib/。运行时依赖树不再携带构建链。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
📊 dsh-fund-research - 1024 store channel:先执行一次 npm i -g dsh1024,再执行 dsh1024 plugin --profile web add dsh-fund-research(计入 deepseek1024.com 安装排行)。 dshfind 在 DeepSeek Harness 上,为中国公募基金生成确定性研究报告。 每份报告里的每个关键数字都能追溯到一份带哈希的源快照 —— 缺口如实声明,绝不编造。仅供研究,不构成投资建议。 dsh-doctor DSH Market English · 简体中文 · Español · Português · हिन्दी dsh plugin --profile <name> add dsh-fund-research 📖 生态知识库 —— 实测数据,不是营销话术:插件开发指南 · 插件选型数据 · 维护标准。 安装与卸载 dsh plugin --profile web add dsh-fund-research # install (npm or tarball) dsh plugin --profile web remove dsh-fund-research # uninstall 安装后重启配置档(bundle 激活依赖重启)。
展开完整文档(README 剩余 1 节)
📊 dsh-fund-research

- 1024 store channel:先执行一次 npm i -g dsh1024,再执行 dsh1024 plugin --profile web add dsh-fund-research(计入 deepseek1024.com 安装排行)。

dshfind

在 DeepSeek Harness 上,为中国公募基金生成确定性研究报告。

每份报告里的每个关键数字都能追溯到一份带哈希的源快照 —— 缺口如实声明,绝不编造。仅供研究,不构成投资建议。

dsh-doctor
DSH Market

English · 简体中文 · Español · Português · हिन्दी

dsh plugin --profile <name> add dsh-fund-research

📖 生态知识库 —— 实测数据,不是营销话术:插件开发指南 · 插件选型数据 · 维护标准。

安装与卸载

dsh plugin --profile web add dsh-fund-research # install (npm or tarball)
dsh plugin --profile web remove dsh-fund-research # uninstall

安装后重启配置档(bundle 激活依赖重启)。随附的配置档通过 dsh-base 组合存储栈(dsh-storage + dsh-storage-json + dsh-storage-domain);bundle 补丁只挂载插件那一行。

⭐ 如果它帮到了你

这个插件是 DSH 插件家族的一员(95 个,全部 Apache-2.0)。如果你在用,给个 star —— 它不会解锁任何功能,但会让下一个人在搜索里更容易找到它。
中文: 属于 DeepSeek Harness 的 95 个插件家族的一员。如果它对你有用,点个 star 能帮下一个人找到它——没有任何功能靠 star 解锁。

dsh-fund-research 是什么?

在 DeepSeek Harness 上,为中国公募基金生成确定性的研究报告。

每份报告里的每个关键数字都能追溯到一份带哈希的源快照——缺口如实声明,绝不编造。仅供研究,不构成投资建议。

dsh-fund-research 的工作流示意图:问题 → 封存源 → 报告。

工作流概览:问题 → 封存源 → 报告。下面的示例都用真实的命令接口。

兼容性

| 组件 | 版本 |
| DeepSeek Harness | dsh-v0.2.1-rc.2(peer 范围接受 alpha.2 线:>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0 \|\| >=0.1.6-0 <0.2.0 \|\| >=0.1.7-0 <0.2.0)。在这条线上,Session.append 的第三个参数只对 surface-eligible 类型是 SurfaceIntent,所以 fund-research/ 审计事件保持不追加(工具结果和封存的快照/报告仍是审计线索)。2026-09-24 验证(双 typecheck 标尺 + 176 项测试)。 |
| Node.js | ^22.19.0 \|\| >=24.0.0 |
| 包管理器 | pnpm@11.7.0 |
| 平台 | Windows / macOS / Linux(仅宿主插件) |
| 数据源 | 天天基金 / 东方财富公开接口(无需密钥,无需登录) |

你能得到什么

- fund_research 工具——输入一个基金代码,输出一份带版本号的 Markdown 研究报告:概览、业绩拆解、持仓穿透、简化风格归因、经理配置档、风险与缺口声明、免责声明,以及一张数字可追溯性附录,把每个关键数字映射到它的快照 JSON 路径和校验结论。封存到 fund-reports/{code}/{YYYYMMDD-HHmmss}/,包含 report.md + manifest.json + snapshot.json。background: true 会把它作为 fund-report 后台任务运行。
- fund_snapshot 工具——一张轻量快照卡(最新净值、已披露阶段收益、规模、经理、前三大持仓),封存到该基金的当日目录。
- 确定性指标,零模型算术——区间/年化收益、波动率、最大回撤、Sharpe;前 N 集中度、HHI、行业分布、季度环比持仓对比;规模-价值风格分档;经理任职时长与同类对比。全部是对封存快照的纯函数。
- 可追溯性是一等特性——封存之前,每个关键数字都会对照封存的 snapshot.json 校验:装了可选的 dsh-data-quality 服务就走它,否则走内置的同构兜底校验器(builtin-fallback)。附录表记录 值 ↔ 路径 ↔ 结论。
- 诚实的缺口——数据源失败或降级时,会在受影响的章节里明确声明数据缺口。插件绝不用编造的数字填补缺口。
- 离线模式 — offline: true(配置或工具参数)下,所有内容都从存储域快照层或磁盘上最新的版本快照提供,零对外请求。适合测试和复现。
- asOf 截止 — asOfDate(ISO YYYY-MM-DD)把 NAV 序列截断到该日期及之前的数据,并把截止日期写入快照和报告;非法日期或未来日期会直接报错。
- 检查点续跑 — <reportRoot>/.run-state.json 记录每个流水线阶段(snapshot/report)的时间戳和输入指纹;resume: true 从第一个未完成的阶段继续,复用已封存产物,指纹不匹配则拒绝。
- 数据源发现记录 — 每次采集都会封存一份代码生成的 sources-discovery.json(端点清单、主/备解析、各源覆盖与缺口、降级原因),并折叠进报告附录,作为「数据源与缺口声明」。
- 多基金扇出 — codes 接受基金代码数组;每只基金独立跑流水线,单只失败互相隔离(失败记为汇总缺口),结果是汇总卡片(code / asOf / 封存哈希 / 判定 / 失败原因)。
- 跟踪台账 — 每次成功封存都会向 <reportRoot>/.tracking.jsonl 追加一行确定性记录;includeComparison: true 渲染确定性的「与上次对比」小节(NAV 区间 / 规模 / 前十大持仓),没有历史记录时给出缺口声明。
- 只读复核 — 封存后,fund-review 任务复核封存产物(缺口声明完整性、可追溯表一致性、免责声明),写出 review-note.md;没有 jobs 服务时优雅跳过(记入 run-state)。
- 各源质量信号 — 每个源都带确定性质量元数据(requested/succeeded/fieldsPresent/parseWarnings/degraded),在附录中渲染,并透出到工具返回值,下游可据此降权(绝不硬过滤)低质量源。
- 滚动前推稳定性摘要 — includeWalkForward: true 增加「样本外稳定性摘要」小节:确定性的滚动窗口收益/Sharpe 符号持续性与均值/标准差,明确标注仅为统计描述,不是预测。
- 会话审计事件(依赖宿主) — fund-research/snapshot 和 fund-research/report 的 log-only 事件携带代码、版本目录、manifest 哈希和缺口列表(模型可见 ⟺ 已记录),前提是宿主接受仓库外事件类型;在 0.1.2-alpha.1–0.1.5-alpha.1 宿主上,已知类型目录由构建在仓库内生成,因此这道闸门不追加任何内容,工具结果加封存产物就是审计轨迹。
- 方法论技能 — 内置 fund-research 技能,教模型指标口径(定义)、缺口处理和合规措辞。计算始终留在代码里。

快速开始

dsh plugin --profile web add github:PerryLink/dsh-fund-research

用 fund_research 出一份 161725 的研究报告智能体调用 fund_research({ code: "161725" });一分钟后,工作区里出现:

fund-reports/161725/20260819-153012/
├── snapshot.json # raw extracted data + computed metrics + per-source sha256
├── sources-discovery.json # code-generated endpoint roster + coverage + gaps
├── report.md # the research report with the traceability appendix
└── manifest.json # snapshot/report hashes, parameters, verify engine, gaps

.run-state.json 放在报告根目录,记录流水线各阶段,供 resume: true 使用。report.md 附录里的每个数字都对照 snapshot.json 给出 verified / mismatch / not-found / unverifiable 判定——按文档口径从 raw. 重算其中任意一个,就能审计插件本身。

示例

下面是插件的真实入口;安装一次,然后调用其中一个。

详细示例

命令

~~~sh
fund_research({ code: "161725", sections: ["overview", "disclaimer"] })

输出

~~~text
招商中证白酒指数(LOF)A(161725)研究报告已封存 — 仅供研究参考,不构成投资建议
版本目录 20261019-124928;报告 fund-reports/161725/20261019-124928/report.md manifest fund-reports/161725/20261019-124928/manifest.json(报告 sha256 f74b1446d544…)
数字回溯表核查(builtin-fallback):verified 5 / mismatch 0 / not-found 0 / unverifiable 0 采集方式:快照复用(offline);章节:overview、disclaimer

摘自 README.md:99-113,149-161; test/tools.spec.ts:150-171; src/tools/research.ts:121-130

失败分支

输入

~~~text
{"code":"161725","asOfDate":"2024-02-30"}

输出

~~~text
isError=true; error.message=asOfDate must be a real calendar date, got "2024-02-30"

摘自 plugins/dsh-fund-research/src/sources/snapshot.ts:167 (parseAsOfDate); plugins/dsh-fund-research/README.md:173 (invalid dates fail loudly); exercised through plugins/dsh-fund-research/test/harness.ts

简要示例

- fund_snapshot

配置

所有键都可选(默认值如下);值不合法时在加载阶段直接报错。

| 键 | 默认值 | 说明 |
| enabled | true | 总开关;设为 false 时什么都不挂载。 |
| promptSection | false | 在部署级系统提示词里注册简短的基金研究角色声明。默认关闭;设为 true 后对配置档内每个会话生效。 |
| eastmoneyBaseUrl | https://fund.eastmoney.com | 天天基金 pingzhongdata 主机。 |
| f10BaseUrl | https://fundf10.eastmoney.com | 天天基金 F10 主机(持仓页 + 经理页)。 |
| quoteBaseUrl | https://push2.eastmoney.com | 东方财富行情主机,用于逐只股票的估值快照。 |
| quoteFallbackBaseUrl | https://push2delay.eastmoney.com | 主行情主机失败时逐只股票尝试的备用行情主机(东方财富自家的延迟行情主机);设为 '' 关闭。 |
| requestIntervalMs | 1000 | 两次对外请求之间的最小间隔(礼貌采集)。 |
| timeoutMs | 15000 | 单次请求超时。 |
| retries | 2 | 单次请求的重试次数,采用指数退避。 |
| cacheTtlHours | 12 | 存储域快照复用窗口。 |
| riskFreeRate | 0.02 | 计算 Sharpe 比率用的年化无风险利率。 |
| offline | false | 不发送任何请求,只读快照层。 |
| reportRoot | fund-reports | 报告树根目录,相对工作区或绝对路径。 |
| styleQuotes | true | 抓取个股估值行情,用于风格归因。 |

工具与界面

fund_research

| 参数 | 类型 | 说明 |
| code | string | 六位基金代码,例如 "161725"(单只基金)。与 codes 互斥。 |
| codes | string[] | 多个六位基金代码:并发拉取,单只基金失败不影响其他基金(返回汇总结果)。与 code 互斥。 |
| sections | string[] | 要渲染的章节 id(overview/performance/holdings/style/manager/benchmark/risk/disclaimer)。默认:全部。 |
| offline | boolean | 只读快照层(不走网络)。默认:取插件配置。 |
| asOfDate | string | ISO 8601 日期(YYYY-MM-DD)截止点:只使用该日期及之前的数据(净值序列截断)。留空 = 不设截止;未来日期会直接报错。 |
| resume | boolean | 从第一个未完成的阶段继续执行已记录的 .run-state.json 运行(复用已封存的产物);指纹不匹配时拒绝。默认:false。 |
| includeComparison | boolean | 渲染确定性的「与上次对比」章节,对照上一条 .tracking.jsonl 记录;缺失的证据会声明为缺口。默认:false。 |
| includeWalkForward | boolean | 渲染确定性的「样本外稳定性摘要」(walk-forward)章节:滚动窗口收益/Sharpe 符号持续性与均值/标准差。仅作统计描述,不是预测。默认:false。 |
| background | boolean | 作为 fund-report 后台任务运行;返回 { kind: "background", jobId }。默认:false。 |

fund_snapshot

| 参数 | 类型 | 说明 |
| code(必填) | string | 六位基金代码。 |
| offline | boolean | 只读快照层。默认:取插件配置。 |
| asOfDate | string | ISO 8601 日期(YYYY-MM-DD)截止点:只使用该日期及之前的数据。留空 = 不设截止;未来日期会直接报错。 |

报告章节

概览 overview · 业绩拆解 performance decomposition · 持仓穿透 holdings penetration · 风格归因 style attribution (simplified) · 经理画像 manager profile · 同类/指数基准对比 benchmark & peer comparison · 风险与缺口声明 risk & gaps · 免责声明 disclaimer · 附录:数字回溯表 traceability appendix.

权限与数据

- 读取天天基金 / 东方财富的公开接口(fund.eastmoney.com/pingzhongdata/.js、fundf10.eastmoney.com 的 F10 页面、push2.eastmoney.com 行情),使用浏览器 User-Agent 和可配置的礼貌限速。不需要密钥,不需要登录,不调用付费 API,不绕过反爬。
- 写入仅限会话工作区内配置的报告根目录,以及 dsh_fund_research 存储域(每只基金的最新快照)。
- 绝不执行远程 JavaScript(只扫描 pingzhongdata 块,不执行),绝不存储凭据,绝不交易。
- 会话事件是只写日志的审计记录,它们经过 src/events.ts 里一道自适应闸门:只有当宿主接受仓库外的事件类型时才会追加——宿主的已知类型集合覆盖了这套词汇,或者它的 Session.append 接受 ignorable 信封。从 0.1.2-alpha.1 起(包括 0.1.5-alpha.1),这两个条件都不成立:KNOWN_SESSION_EVENT_TYPES 是构建时生成的仓库内目录,按构造就排除仓库外事件,而 Session.append 没有 ignorable 选项,所以闸门什么都不追加——工具结果和封存产物仍是可重建的审计线索,追加失败也绝不会改变工具结果。
- 0.1.5-alpha.1(适配于 2026-09-09):在新基线上重新验证了闸门——目录仍排除仓库外事件,Session.append 仍无法盖上 ignorable 信封,所以审计闸门行为不变。
- 0.1.5-rc.1(适配于 2026-09-10):依赖锁定版本移到已发布的 0.1.5-rc.1 线;没有接缝变更影响本插件的行为。
- 0.1.5-rc.2(适配于 2026-09-11):依赖锁定版本移到已发布的 0.1.5-rc.2 线;没有接缝变更影响本插件的行为。
- 基金研究角色声明是可选开启的(promptSection: true),一旦启用就是部署级生效:配置档里每个能看到基金工具的会话都会应用它,包括从不调用这些工具的会话。

安全边界

- 基金代码在接触任何路径或 URL 之前,先校验为恰好六位数字;报告根目录解析在会话工作区内部。
- 源数据在获取时做哈希(SHA-256);封存清单让你能发现两次运行之间上游的静默改动。
- 校验从不阻塞封存:可选的 dsh-data-quality 服务坏掉时,降级到内置检查器,所用引擎记录在清单和附录里。
- 上报政策见 SECURITY.md。

已知限制

- 上游结构漂移。 解析器按设计就是严格的:如果天天基金改了某个 var Data_ 的形状或 F10 表格布局,受影响的源会抛出 SourceParseError 并指明字段,该节降级为已声明的缺口(核心 pingzhongdata 块失败则大声中止运行)。这是有意为之——静默误解析比已声明的缺口更糟。
- 风格归因是估算口径。 固定规模档(≥1000亿 / 300–1000亿 / <300亿)和 PE 档,加上持仓内五分位——不参考全市场分布。报告会标注这一点。
- 持仓是季度披露数据(披露滞后);F10 页面带最近两个季度。
- 单 code 调用是一只基金;codes 是对多只基金的扇出。 不做跨基金组合分析,不做 PDF 年报,不做实时行情(fundgz.1234567.com.cn 实时端点已失效,有意不用)。
Web UI 的「交付物」轮次行,依据的是变更类工具的调用卡片;本插件产出的文件通过工具调用卡片的随行位置(基金的报告目录)呈现,不按单个文件分行。

开发

pnpm install
pnpm run typecheck && pnpm run typecheck:ci && pnpm run typecheck:checkout # types, incl. CI-strict
pnpm test # 176 tests over real harness seams
pnpm run test:e2e # opt-in LIVE-network E2E (LIVE_E2E=1)
pnpm run build && pnpm run verify:artifacts # tsdown + tsc declarations
pnpm run verify:self-contained # no out-of-repo dependency specs
node scripts/check-readme-sync.mjs # five-language README gate
node scripts/check-endpoints.mjs # M3 endpoint-liveness probe (4 eastmoney hosts)
pnpm pack # tarball

测试跑的是 0.1.7-rc.2 对等依赖里真实的 Context/SessionStore/ToolRuntime/LocalJobRegistry/存储接缝;只在 fetch 边界用保存下来的真实响应夹具(fixtures/,基金 161725)替换网络。用 .tmp/ 里的采集脚本刷新夹具。

主题

dsh · dsh-plugin · deepseek-harness · cordis · fund-research · mutual-fund · investment-research · finance · research-report

贡献者

- PerryLink — 维护者:采集/指标/报告封存流水线、端点存活探测、CI 与发布,以及五语文档。
- dsh-fund-research contributors — 基础构建(插件契约、配置 schema、工具、测试、打包)的集体作者。

暂无外部贡献者 —— 已合并 0 个社区 PR/issue。想出现在这里,请通过 .github/ISSUE_TEMPLATE/ 里的表单提 issue,或向 main 提 pull request。

PerryLink DSH 插件家族

本项目属于 PerryLink 的 DeepSeek Harness 插件家族。下面这份名单默认折叠,好让每份 README 的首屏都保持简短;展开即可看到每一行及其状态。

展开全部插件

| 插件 | 状态 |
| dsh-aqua-input-check | |
| dsh-archive-check | |
| dsh-auto-review | |
| dsh-autotier | |
| dsh-bid-ca-precheck | |
| dsh-bid-qual-check | |
| dsh-cert-mcp | |
| dsh-checkpoint-rewind | |
| dsh-click | |
| dsh-composer-history | |
| dsh-contract-stance | |
| dsh-customs-doc-check | |
| dsh-data-quality | |
| dsh-demurrage-ledger | |
| dsh-doublecheck | |
| dsh-drill-script-check | |
| dsh-eia-guide-check | |
| dsh-emergency-plan | |
| dsh-essay-rubric-check | |
| dsh-evidence-check | |
| dsh-export-ctl-check | |
| dsh-fast | |
| dsh-fmea-table-check | |
| dsh-forecast-penalty | |
| dsh-fund-research | |
| dsh-github | |
| dsh-gongwen-flow-check | |
| dsh-gongwen-word-check | |
| dsh-guard-plan-qc | |
| dsh-hazchem-check | |
| dsh-hazplan-check | |
| dsh-hidden-risk-map | |
| dsh-hs-classify | |
| dsh-icd-rule-check | |
| dsh-industry-research | |
| dsh-lawcite-adapter | |
| dsh-laya | |
| dsh-lc-doc-check | |
| dsh-learning-gap-check | |
| dsh-library | |
| dsh-local-ai | |
| dsh-lsp-actions | |
| dsh-mask | |
| dsh-mcp-panel | |
| dsh-medrec-qc | |
| dsh-memento | |
| dsh-nsfc-form-check | |
| dsh-nurse-record-check | |
| dsh-observe | |
| dsh-origin-rvc-check | |
| dsh-ota-review-check | |
| dsh-output-styles | |
| dsh-paper-doc-adapter | |
| dsh-permission-rules | |
| dsh-permit-report-check | |
| dsh-pipeline-check | |
| dsh-pleading-draft | |
| dsh-plugin-doctor | |
| dsh-plugin-guide | |
| dsh-plugin-kit | |
| dsh-plugin-upgrade | |
| dsh-policy-brief-draft | |
| dsh-power-loss-split | |
| dsh-power-ticket-check | |
| dsh-ppap-check | |
| dsh-protest-deadline | |
| dsh-railway-window | |
| dsh-repair-order-qc | |
| dsh-research-report | |
| dsh-review-reply-check | |
| dsh-rulefile-check | |
| dsh-safety-brief-check | |
| dsh-score | |
| dsh-session-sync | |
| dsh-site-log-check | |
| dsh-skill-pack-security | |
| dsh-soe-decision-check | |
| dsh-soilwater-check | |
| dsh-sop-sync-check | |
| dsh-spc-gbt-adapter | |
| dsh-talk | |
| dsh-tender-extract | |
| dsh-tender-matrix | |
| dsh-test-drive | |
| dsh-ticktick | |
| dsh-translate | |
| dsh-warranty-calc | |
| dsh-budget | 🧊 已冻结 — 见仓库 README |
| dsh-claude-move | 🧊 已冻结 — 见仓库 README |
| dsh-defend | 🧊 已冻结 — 见仓库 README |
| dsh-draw | 🧊 已冻结 — 见仓库 README |
| dsh-reach | 🧊 已冻结 — 见仓库 README |
| dsh-background-agents | 🚫 已退役 — 见仓库 README |
| dsh-session-pin | 🚫 已退役 — 见仓库 README |
| dsh-team-rooms | 🚫 已退役 — 见仓库 README |
预览分享卡片长什么样 ↓PerryLink/dsh-fund-research
分享 · DeepSeek Harness Hub
PerryLink/dsh-fund-research

DeepSeek Harness 插件:为中国公募基金生成确定性研究报告

回到顶部