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

金融研究台 DKKD13/dsh-finance

DeepSeek Harness
DKKD132 天前有提交已提供中文文档扫描:含敏感能力

在对话里做个股研究、整理资料并管理模拟基金

44.7/100
综合分
30
GitHub 星标
—
npm 周下载
—/5
用户评分

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

该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add DKKD13/dsh-finance
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · tool
装得上吗
作者未把包发布到 npm,只能用源码安装
插件本身没问题,是分发方式不同
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 2 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

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

✗npm 包dsh-research-graph(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/4 06:34:38

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

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

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 51 处,展示前 45 条)
  • 写入剪贴板
    client/clipboard.ts:62
    await environment.clipboard.writeText(text)
  • 发起网络请求
    client/finance-store.ts:190
    return await this.gateway.request(request)
  • 发起网络请求
    client/research-store.ts:163
    return this.graph.request({ op: 'graph.snapshot' }).then(response => {
  • 发起网络请求
    client/research-store.ts:268
    response = await this.graph.request({ op: 'graph.plan', plan: plan as never })
  • 发起网络请求
    client/research-store.ts:315
    const read = await this.graph.request({ op: 'node.get', id })
  • 发起网络请求
    client/research-store.ts:319
    const response = await this.graph.request({ op: 'node.update', id, patch: { metadata: { ...node.metadata, stance } } })
  • 发起网络请求
    client/research-store.ts:361
    response = await this.graph.request({ op: 'history.list' })
  • 发起网络请求
    client/store.ts:261
    return await this.gateway.request(request)
  • 发起网络请求
    clipper-extension/background.js:108
    const response = await fetch(globalThis.DSHClipperPayload.importUrl(settings.endpoint), {
  • 写入本地文件
    src/finance/clipper-http.ts:81
    await mkdir(dirname(file), { recursive: true })
  • 读取本地文件
    src/finance/clipper-http.ts:84
    const stat = await lstat(file)
  • 读取本地文件
    src/finance/clipper-http.ts:86
    const token = (await readFile(file, 'utf8')).trim()
  • 写入本地文件
    src/finance/clipper-http.ts:88
    await chmod(file, 0o600)
  • 写入本地文件
    src/finance/clipper-http.ts:95
    await writeFile(file, token, { encoding: 'utf8', mode: 0o600, flag: 'wx' })
  • 写入本地文件
    src/finance/clipper-http.ts:96
    await chmod(file, 0o600)
  • 发起网络请求
    src/finance/service.ts:240
    const batch = await this.dataPlane.fetch(input)
  • 执行外部命令来自配置/变量
    src/finance/sources.ts:78
    nodeExecFile(file, [...args], options, (error, stdout, stderr) => {
  • 发起网络请求
    src/finance/sources.ts:310
    async fetch(inputValue: SourceFetchInput): Promise<{
  • 发起网络请求
    src/finance/sources.ts:377
    const payload = await this.http.request(url, { accept: 'application/json' })
  • 请求外部主机www.sec.gov
    src/finance/sources.ts:428
    const payload = await this.http.request('https://www.sec.gov/files/company_tickers.json', { accept: 'application/json', ...this.secHeaders() })
  • 发起网络请求
    src/finance/sources.ts:428
    const payload = await this.http.request('https://www.sec.gov/files/company_tickers.json', { accept: 'application/json', ...this.secHeaders() })
  • 发起网络请求
    src/finance/sources.ts:473
    const payload = await this.http.request(url, { accept: 'application/json', ...this.secHeaders() })
  • 发起网络请求
    src/finance/sources.ts:497
    const payload = await this.http.request(url, { accept: 'application/json', allowLoopback: true })
  • 发起网络请求
    src/finance/sources.ts:544
    const payload = await this.http.request(url, { accept: 'application/atom+xml, application/rss+xml, application/xml, text/xml;q=0.9' })
  • 读取本地文件
    src/importer.ts:90
    const text = await readFile(resource.file, 'utf8')
  • 读取本地文件
    src/importer.ts:105
    const text = await readFile(skill.file, 'utf8')
  • 写入本地文件
    src/service.ts:336
    await mkdir(target, { recursive: true })
  • 读取本地文件
    src/service.ts:354
    const realTarget = await realpath(target)
  • 读取本地文件
    src/service.ts:358
    const actual = await realpath(existing).catch((error: NodeJS.ErrnoException) => {
  • 写入本地文件
    src/service.ts:368
    await mkdir(dirname(file), { recursive: true })
  • 读取本地文件
    src/service.ts:369
    if (!inside(realTarget, await realpath(dirname(file)))) throw new GraphError('EXPORT_PATH_OUTSIDE_ROOT', 'An export directory points outside the selec
  • 读取本地文件
    src/service.ts:370
    const info = await lstat(file).catch((error: NodeJS.ErrnoException) => {
  • 读取本地文件
    src/service.ts:376
    const realSkillsRoot = await realpath(skillsRoot).catch((error: NodeJS.ErrnoException) => {
  • 读取本地文件
    src/service.ts:389
    const info = await stat(candidate).catch((error: NodeJS.ErrnoException) => {
  • 写入本地文件
    src/service.ts:432
    await writeFile(destination, [`# ${relative(skillsRoot, source)}`, '', ...children.map(([child, entries]) => `- ${nodeMarkdownLink(relative(source, ch
  • 写入本地文件
    src/service.ts:436
    await copyFile(actual, destination)
  • 写入本地文件
    src/service.ts:448
    await writeFile(file, renderNodeMarkdown({ ...node, content }, outgoing, id => {
  • 写入本地文件
    src/service.ts:458
    await writeFile(indexFile, index.join('\n'), 'utf8')
  • 读取本地文件
    src/skills-provider.ts:75
    text = await readFile(locator.file, 'utf8')
  • 读取本地文件
    src/skills.ts:87
    const entries = await readdir(dir, { withFileTypes: true })
  • 读取本地文件
    src/skills.ts:120
    const parsed = parseMarkdown(await readFile(file, 'utf8'), rel)
  • 读取本地文件
    src/store.ts:193
    text = await readFile(store.file, 'utf8')
  • 写入本地文件
    src/store.ts:327
    await mkdir(this.dir, { recursive: true })
  • 写入本地文件
    src/store.ts:329
    await writeFile(staging, `${JSON.stringify(document, null, 2)}\n`, 'utf8')
  • 写入本地文件
    src/store.ts:330
    await rename(staging, this.file)
扫描于 2026/11/4(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
涉及外部主机:www.sec.gov

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-commands@deepseek-ai/dsh-skill@deepseek-ai/dsh-tools@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DKKD13 个人开发的第三方 DSH 金融研究插件:研究 Skills、证据资料库、个股图表与模拟基金。与 DeepSeek 官方无隶属关系。

README

由 DeepSeek 最新模型翻译生成
DKKD13 个人开发的 DSH 金融研究插件。 An independent personal plugin for DeepSeek Harness. 开始使用 · 功能实图 · 日常研究 · 能力与数据来源 DSH Finance 把市场、研究 Skills、资料、观点和模拟基金放进同一个 DeepSeek Harness 工作台。选一个研究任务,带着材料进入对话;读结论时,随时回到原文,继续追问。 这是 DKKD13 个人开发和维护的第三方插件,与 DeepSeek 官方无隶属关系。当前为 0.1.0 预览版,适用于桌面 Web Client。 首次试用请先读 安装检查与常见问题。当前安装包为预览版;已知问题、修复进度和未完成的验收会在该页说明。 看看它能做什么 一间有分工的 AI 投研办公室 为虚拟基金创建基金经理、行业研究员与复盘角色。每个工位都有自己的头像、研究风格、任务和覆盖标的;点开工位,可以查看最近研究并继续对话。工作动态集中展示研究产物,持仓、现金和净值由统一的纸面账本计算。 虚拟基金的研究工位与工作动态 同一张纸面账本保存历史净值。曲线可悬停或用方向键查看每个已保存的截面,研究讨论与组合记录可以一起回顾。
展开完整文档(README 剩余 1 节)
DKKD13 个人开发的 DSH 金融研究插件。
An independent personal plugin for DeepSeek Harness.

开始使用 · 功能实图 · 日常研究 · 能力与数据来源

DSH Finance 把市场、研究 Skills、资料、观点和模拟基金放进同一个 DeepSeek Harness 工作台。选一个研究任务,带着材料进入对话;读结论时,随时回到原文,继续追问。

这是 DKKD13 个人开发和维护的第三方插件,与 DeepSeek 官方无隶属关系。当前为 0.1.0 预览版,适用于桌面 Web Client。

首次试用请先读 安装检查与常见问题。当前安装包为预览版;已知问题、修复进度和未完成的验收会在该页说明。

看看它能做什么

一间有分工的 AI 投研办公室

为虚拟基金创建基金经理、行业研究员与复盘角色。每个工位都有自己的头像、研究风格、任务和覆盖标的;点开工位,可以查看最近研究并继续对话。工作动态集中展示研究产物,持仓、现金和净值由统一的纸面账本计算。

虚拟基金的研究工位与工作动态

同一张纸面账本保存历史净值。曲线可悬停或用方向键查看每个已保存的截面,研究讨论与组合记录可以一起回顾。

模拟基金的净值历史与截面查看

从一个 Skill,进入一场研究

公司研究、财报前瞻、深度研究、估值、每日简报、假说论证,以及不同人物的思考视角,都有对应入口。卡片悬停查看说明,点击选择研究上下文,再进入原生 DSH 对话。包内包含 38 个可注册 Skills。

研究工作流与 Skills 卡片

资料不是附件堆,是判断的起点

在同一个资料库里阅读材料、AI 摘要、原文高亮和关联观点。材料、洞见和研究记录分组展示;原始链接与来源时间保留在旁边,方便核对。支持网页剪藏,以及 PDF、DOCX、Markdown 等文件导入。

资料库中的摘要、原文与关联研究

看行情,也把问题带进研究

个股页包含价格图表、时间区间、比较、历史数据及研究入口。Yahoo 报价与历史行情通过显式请求读取;财务、持有人、预期等栏目展示已导入资料。图表与历史数据支持 PNG / CSV 导出。

个股图表与公司研究界面

把看多与看空的理由放到一起

在多空观点中对照判断、证据与反证;研究报告保留 Markdown,已有报告可以继续讨论。DCF、可比公司和组合计算使用明确输入,预测到期后再结算,让研究留下可回顾的记录。

多空观点与证据阅读

以上为实际插件组件的截图,使用隔离的公开材料与合成示例数据。它们展示界面及数据结构,不代表实时市场、真实投资业绩或已运行的后台研究。

开始使用

需要已安装的 DeepSeek Harness >=0.2.1-rc.1 <0.3.0,以及可用的模型配置。插件复用 Harness 的模型和原生对话,不附带模型密钥。

1. 从 Releases 下载 dsh-research-graph-0.1.0.tgz 并解压到一个固定目录。
2. 在 DSH 对话中,请插件管理器安装这个目录:

请使用 plugin_manager 的 install_bundle,安装以下本地目录: <你解压后的 package 目录绝对路径>

3. 插件激活后,打开侧栏的 金融。
4. 到 工作流 选择“公司研究”或“每日研究简报”,输入问题,选择已有或新建对话,检查草稿后发送。

首次使用也可以从右上菜单的指南开始。网页剪藏扩展单独提供在 Release 的 dsh-local-clipper.zip;它是本地扩展包,尚未在扩展商店上架,配置说明见 Clipper README。

研究资料保存在本地

图谱默认写入 ~/.dsh-research-graph/graph.json,可在插件配置中修改。材料、关系、修订历史和模拟基金共用这份数据,不需要额外部署数据库。

“本地保存”不意味着离线推理:进入 DSH 对话后,选中的资料可能发送到你配置的模型服务;抓取外部资料也会访问对应来源。

可选配置

- insert:
- id: dsh-research-graph
name: dsh-research-graph
config:
autoIndexSkills: true
writeMirror: false
historyLimit: 256

SEC 需要配置 secContact;OpenBB 和 AlphaSift 需要你已有相应服务或 CLI。商业数据库连接器不随包提供。完整能力说明见 能力与数据来源。

本地开发

npm ci
npm run typecheck
npm run build
npx vitest run --maxWorkers=1 --minWorkers=1
node --test "tests/skills/*.test.mjs"

完整测试需要 Google Chrome;默认使用 macOS 的标准安装路径,其他环境通过 CHROME_BIN 指定。浏览器回归测试需要先运行构建。

无模型配置也可以查看隔离的示例工作台:

node scripts/preview-server.mjs 48941
node scripts/seed-showcase.mjs http://127.0.0.1:48941

打开 http://127.0.0.1:48941/scripts/preview.html?lang=zh&theme=light&panel=finance-workbench。预览只用于 UI 和本地服务演示,不提供原生对话,也不接真实外部行情;关闭服务后,临时图谱清除。

当前边界

- 虚拟基金是纸面模拟,不连接券商,也不执行真实交易。
- 持续覆盖依赖实际创建成功的 DSH 计划任务;关掉插件页面不等于配置好了后台研究。
- 财务表、预期、持有人、财报日历和预测市场依赖已导入字段,尚未统一接入实时服务商。
- 行情可用性受公开来源和网络限制;价格提醒在浏览器前台检查。

许可证与来源

插件代码采用 MIT。随包研究技能与参考方法保留各自的许可证和归属,详见 Third-Party Notices。人物视角是基于公开资料的研究方法,不代表本人或其机构背书。用于研究与模拟,不构成投资建议。
预览分享卡片长什么样 ↓DKKD13/dsh-finance
分享 · DeepSeek Harness Hub
DKKD13/dsh-finance

在对话里做个股研究、整理资料并管理模拟基金

这是你的仓库?认领条目

回到顶部