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

A股投资工作台 limboinf/dsh-astock-workbench

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

记账持仓、查实时行情,让 AI 给出买卖时机参考

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add limboinf/dsh-astock-workbench
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · other
装得上吗
本站尚未做安装检查
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 54 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件写入剪贴板(不计风险)读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 44 处,展示前 38 条)
  • 读取本地文件
    src/balance.ts:33
    if (!existsSync(file)) return null
  • 读取本地文件
    src/balance.ts:35
    const parsed = JSON.parse(readFileSync(file, 'utf8')) as Record<string, unknown>
  • 写入本地文件
    src/balance.ts:58
    writeFileSync(file, JSON.stringify(payload, null, 2) + '\n', 'utf8')
  • 写入本地文件
    src/balance.ts:67
    writeFileSync(file, JSON.stringify(payload, null, 2) + '\n', 'utf8')
  • 写入剪贴板
    src/client/index.ts:1495
    try { void navigator.clipboard?.writeText(ex) } catch { }
  • 写入本地文件
    src/decision-log.ts:51
    mkdirSync(this.dir, { recursive: true })
  • 读取本地文件
    src/decision-log.ts:64
    if (!existsSync(file)) {
  • 写入本地文件
    src/decision-log.ts:65
    writeFileSync(file, `# ${normalizedDate} ${(title ?? '').trim() || '交易日决策'}\n\n`, 'utf8')
  • 写入本地文件
    src/decision-log.ts:69
    appendFileSync(file, `${heading}\n\n${body}\n\n`, 'utf8')
  • 读取本地文件
    src/decision-log.ts:75
    return existsSync(file) ? readFileSync(file, 'utf8') : undefined
  • 读取本地文件
    src/decision-log.ts:75
    return existsSync(file) ? readFileSync(file, 'utf8') : undefined
  • 读取本地文件
    src/decision-log.ts:82
    return readdirSync(this.dir)
  • 读取本地文件
    src/decision-log.ts:87
    .map(date => ({ date, text: readFileSync(join(this.dir, `${date}.md`), 'utf8') }))
  • 读取本地文件
    src/fuyao.ts:44
    if (file === undefined || !existsSync(file)) return {}
  • 读取本地文件
    src/fuyao.ts:46
    return parseEnvText(readFileSync(file, 'utf8'))
  • 读取密钥环境变量
    src/fuyao.ts:63
    const fromEnv = process.env.FUYAO_API_KEY?.trim()
  • 发起网络请求
    src/fuyao.ts:139
    const res = await fetch(url, { headers: { 'X-api-key': key }, signal: s.signal })
  • 写入本地文件
    src/index.ts:116
    mkdirSync(this.dir, { recursive: true })
  • 读取本地文件
    src/index.ts:117
    if (!existsSync(this.file)) {
  • 写入本地文件
    src/index.ts:118
    writeFileSync(this.file, holdingsTemplate(), 'utf8')
  • 读取本地文件
    src/index.ts:123
    if (!existsSync(this.file)) return { lines: [], positions: [], warnings: [] }
  • 读取本地文件
    src/index.ts:124
    return parseHoldingsDoc(readFileSync(this.file, 'utf8'))
  • 写入本地文件
    src/index.ts:130
    writeFileSync(tmp, renderHoldingsDoc(doc), 'utf8')
  • 写入本地文件
    src/index.ts:131
    renameSync(tmp, this.file)
  • 写入本地文件
    src/index.ts:144
    mkdirSync(this.dir, { recursive: true })
  • 读取本地文件
    src/index.ts:145
    if (!existsSync(this.file)) {
  • 写入本地文件
    src/index.ts:146
    writeFileSync(this.file, tradesTemplate(), 'utf8')
  • 读取本地文件
    src/index.ts:151
    if (!existsSync(this.file)) return { lines: [], records: [], warnings: [] }
  • 读取本地文件
    src/index.ts:152
    return parseTradesDoc(readFileSync(this.file, 'utf8'))
  • 发起网络请求
    src/kline.ts:179
    const res = await fetch(url, {
  • 发起网络请求
    src/market.ts:158
    const res = await fetch(url, {
  • 请求外部主机qt.gtimg.cn
    src/market.ts:186
    const res = await fetch(`https://qt.gtimg.cn/q=${INDICES.map(i => i.symbol).join(',')}`, {
  • 发起网络请求
    src/market.ts:186
    const res = await fetch(`https://qt.gtimg.cn/q=${INDICES.map(i => i.symbol).join(',')}`, {
  • 读取本地文件
    src/profile-store.ts:21
    if (!existsSync(file)) return null
  • 读取本地文件
    src/profile-store.ts:23
    return normalizeProfile(JSON.parse(readFileSync(file, 'utf8')))
  • 写入本地文件
    src/profile-store.ts:32
    writeFileSync(profileFile(dir), `${JSON.stringify(profile, null, 2)}\n`, 'utf8')
  • 请求外部主机qt.gtimg.cn
    src/quotes.ts:236
    const res = await fetch(`https://qt.gtimg.cn/q=${missing.join(',')}`, {
  • 发起网络请求
    src/quotes.ts:236
    const res = await fetch(`https://qt.gtimg.cn/q=${missing.join(',')}`, {
扫描于 2026/11/2(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
涉及外部主机:qt.gtimg.cn

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 持仓记账
  • 实时行情查询
  • AI投研分析

A股投资工作台 —— DeepSeek Harness (dsh) 插件:持仓记账、实时行情、AI 投研分析与每日简报

README

由 DeepSeek 最新模型翻译生成
dsh-astock-workbench A 股投资工作台 · DeepSeek Harness(dsh)插件 基于你的真实持仓与投资者画像,给出同花顺给不了的 AI 分析与买卖时机参考;决策日志与长期账面,沉淀属于你自己的投资纪律。 不改动 dsh 核心代码,以插件形式挂载。数字只走本地确定性数据层,模型只负责解读: holdings.csv ────┐ ├─→ astock_* 工具(本地确定性计算)──→ 模型生成分析 / 简报 / 复盘 fuyao 行情(主) ──┤ 腾讯行情(兜底) ──┘ 让 AI 帮你安装 复制下面整段话,发给你的 AI 编程助手(dsh、Claude Code 等任意 Agent),它会替你完成安装和配置: 请帮我安装 DeepSeek Harness(dsh)插件 dsh-astock-workbench(A 股投资工作台)。 1. 在本机找到 deepseek-harness 仓库目录(常见位置如 ~/work/github/deepseek-harness);如果没有,先 git clone https://github.com/deepseek-ai/deepseek-harness 并执行 pnpm install。
展开完整文档(README 剩余 1 节)
dsh-astock-workbench

A 股投资工作台 · DeepSeek Harness(dsh)插件

基于你的真实持仓与投资者画像,给出同花顺给不了的 AI 分析与买卖时机参考;决策日志与长期账面,沉淀属于你自己的投资纪律。

不改动 dsh 核心代码,以插件形式挂载。数字只走本地确定性数据层,模型只负责解读:

holdings.csv ────┐
├─→ astock_* 工具(本地确定性计算)──→ 模型生成分析 / 简报 / 复盘 fuyao 行情(主) ──┤
腾讯行情(兜底) ──┘

让 AI 帮你安装

复制下面整段话,发给你的 AI 编程助手(dsh、Claude Code 等任意 Agent),它会替你完成安装和配置:

请帮我安装 DeepSeek Harness(dsh)插件 dsh-astock-workbench(A 股投资工作台)。

1. 在本机找到 deepseek-harness 仓库目录(常见位置如 ~/work/github/deepseek-harness);如果没有,先 git clone https://github.com/deepseek-ai/deepseek-harness 并执行 pnpm install。
2. 在该仓库目录执行:pnpm dsh plugin --profile web add github:limboinf/dsh-astock-workbench
3. 如果安装报「prepare / 构建授权」类错误(pnpm 10 及以上默认拒绝运行 git 依赖的 prepare 脚本),在 --profile web 对应 profile 目录的 pnpm-workspace.yaml 中加入: allowBuilds: dsh-astock-workbench: true 然后重新执行第 2 步。
4. 验证安装:pnpm dsh --profile headless --dump-config | grep astock 输出里有 astock-workbench 即为成功。
5. 最后询问我是否有 fuyao(https://fuyao.aicubes.cn)的 API Key:有则帮我写入 ~/.dsh/astock-workbench/env 文件(内容一行:export FUYAO_API_KEY=我的Key,目录不存在就先创建);没有则跳过,行情会自动使用腾讯免费接口兜底。

功能

| 能力 | 入口 | 说明 |
| 持仓汇总 | 模型工具 astock_positions | 现价、市值、累计盈亏、当日涨跌、换手、权重与合计;总资产 = 持仓市值 + 现金(随行情实时变动) |
| 行情查询 | 模型工具 astock_quote | 一次最多 30 只;6 位代码自动识别沪/深/北;股票另补名称/PE/PB |
| 个股诊断 | 模型工具 astock_analyze | 趋势/量能/相对强弱判定 + MA、区间位置、量比、持仓上下文(60 日 K 线本地计算,前复权) |
| 个股基本面 | 模型工具 astock_fundamentals | 估值(PE-TTM/PB-MRQ)+ 近 4 个单季营收/归母净利及同比环比 |
| 买入 / 清仓记账 | astock_add_position / astock_remove_position | 同代码加权合并成本;清仓自动补记卖出流水 |
| 卖出流水 | astock_record_trade / astock_trades | 手动补录历史交易,按代码/日期查询,已实现盈亏统计(合计/笔数/胜率) |
| 截图对账 | 模型工具 astock_reconcile | 券商 App 持仓截图 → 逐行抄录 → 本地 diff 预览 → 确认后写入;截图没有的默认保留 |
| 决策日志 | astock_log_decision / astock_decision_logs | 按交易日追加结构化条目(性质徽标 + 标签维度),AI 不主动落笔,先问后写 |
| 现金余额 | astock_set_cash | 录入券商现金余额,总资产随行情实时变动 |
| 手动总资产 | astock_set_total_assets | 录入券商口径快照(与现金口径互斥,后设置的生效) |
| 工作台面板 | dsh web 侧边栏 | 宏观驾驶舱:总资产/已实现盈亏卡片、盘中 5s 自动轮询、大盘指数条、决策日志徽标、AI 解读/体检/复盘入口、个性化设置卡 |
| 每日简报 | dsh 原生计划任务 + 技能 astock-briefing | 盘后自动生成持仓简报,落盘 briefings/<日期>.md |
| 术语图解 | 技能 astock-explain + 工具 astock_show_html | 术语大白话讲解;小白画像遇难懂术语自动生成可交互 HTML/Canvas,对话内嵌预览(沙箱 iframe,不跳浏览器),存档 explainers/ |
| 快捷命令 | /portfolio /market /profile /decision-logs | 不经模型,纯本地直读持仓/大盘/画像/日志 |

快速开始

1. 安装

前提:本地已有 DeepSeek Harness(完成一次 pnpm install)。

cd /path/to/deepseek-harness
pnpm dsh plugin --profile web add github:limboinf/dsh-astock-workbench

pnpm ≥10 首次安装会要求构建授权(git 依赖的 prepare 脚本):按报错提示把包名写入
--profile web 对应 profile 目录的 pnpm-workspace.yaml,然后重新 add:

allowBuilds:
dsh-astock-workbench: true

更新版本:先 pnpm dsh plugin --profile web remove dsh-astock-workbench 再重新 add。

2. 配置行情主源 fuyao(重要)

行情主源是 fuyao(同花顺金融数据 REST 服务),请到其官网注册并自签 API Key,插件通过 X-api-key 请求头调用。
Key 按以下顺序查找:

1. 环境变量 FUYAO_API_KEY
2. 数据目录 env 文件 ~/.dsh/astock-workbench/env(推荐,对 dsh 计划任务环境同样生效)
3. 项目根 .env(仅开发自检用,已被 .gitignore 排除)

推荐把 Key 写进数据目录:

mkdir -p ~/.dsh/astock-workbench
echo 'export FUYAO_API_KEY=你的Key' >> ~/.dsh/astock-workbench/env

不配置 Key 插件也能运行:行情自动降级到腾讯免费接口兜底,但深市股票、深市 ETF 等存在已知缺口(部分标的取不到价格),要完整的行情体验建议配置 fuyao。

3. 验证

pnpm dsh --profile headless --dump-config | grep astock # 配置树出现 astock-workbench

打开 dsh web,问模型「看看我的持仓」→ 应触发 astock_positions 工具并在侧边栏出现工作台面板。

4. 安装技能(可选)

让会话里的「写简报」「持仓截图对账」「术语讲解与图解」遵循同一规范:

mkdir -p ~/.dsh/skills
cp -R skills/astock-briefing skills/astock-reconcile skills/astock-explain ~/.dsh/skills/

数据存放位置

所有运行时数据都在你自己的 dsh 数据工作区(环境变量 ASTOCK_DATA_DIR,默认 ~/.dsh/astock-workbench/,首次运行自动生成),插件安装包不携带任何数据:

~/.dsh/astock-workbench/
├── holdings.csv # 持仓表(列 code,name,shares,cost,sector,note) ├── trades.csv # 卖出流水(列 date,code,name,action,shares,price,cost,pnl,note) ├── briefings/ # 每日简报 ├── decision-logs/ # 交易日决策日志:YYYY-MM-DD.md ├── balance.json # 可选:资产口径(现金或快照,二选一) ├── profile.json # 可选:投资者画像(详略/术语/结构 + 一句话自述) └── env # 可选:export FUYAO_API_KEY=...

两份 CSV 都容忍空行与 # 注释行(写回时逐字保留);存在坏行或重复代码时记账工具会拒绝写入并提示先修复,防止覆盖丢数据。也可以不手编辑,直接在对话里说「我买了 600519,100 股,成本 1700」让 AI 记账。CSV 请用 UTF-8 编码保存。

本地开发

npm install
npm run typecheck && npm test # 类型检查 + node:test 单测
npm run live-check # 联网实测四类标的:fuyao 主源 + 腾讯兜底全链路
npm run build # 产出 lib/(host + client)

开发模式挂载、构建细节与踩坑记录见 AGENTS.md。

项目文档

- CONTEXT.md —— 产品使命(AI 投研助理 > 复盘引擎)与语言定义
- docs/adr.md —— 关键决策简化归档(使命定位、投资建议契约)
- docs/web-ui注入技术方案-20260903.md —— 面板注入机制拆解

数据源与免责声明

- 持仓行情:fuyao(同花顺金融数据 REST)为主源,腾讯公开接口兜底缺口;大盘概览走东方财富公开接口。这些均为非官方接口,无契约保证,仅限个人研究使用。
- 本插件只读行情、只记持仓,不接任何交易/下单接口。
- AI 输出的分析与买卖参考仅供参考、不构成投资建议,最终决策与后果由用户自行承担。

License

MIT
预览分享卡片长什么样 ↓limboinf/dsh-astock-workbench
分享 · DeepSeek Harness Hub
limboinf/dsh-astock-workbench

记账持仓、查实时行情,让 AI 给出买卖时机参考

回到顶部