dsh-financial-skills · 金融技能
把「金融行业skills精选」搬进 DeepSeek Harness 的左边栏。 装一次,侧栏多一个「金融技能」入口;点开是整页精选金融行业skill目录:搜索、按业务分类筛选、看详情、一键安装/卸载。
English | 中文

浅色主题:侧栏「金融技能」入口 + 「金融行业skills精选」整页;截图取自隔离 DSH 实例的真实浏览器渲染(1440×900)。

暗色主题:颜色全部来自宿主 --dsw-* token,插件不覆盖主题。

「已安装」视图:装好的技能带绿色「已安装」标签,动作变为「卸载」。
它是什么
金融技能(英文包名 dsh-financial-skills)是 DeepSeek Harness(DSH)的双半区插件:
- 左侧栏入口:一个图标 +「金融技能」标签(英文界面显示
Financial Skills),排在官方「插件」和「定时任务」之后,不与其它第三方插件抢位; - 右侧整页:「金融行业skills精选」——把 openfcp/awesome-financial-skills 这份为金融从业者策展的技能清单,做成可以直接浏览、检索、安装的插件目录;
- 页面里的每一行,安装后就是一个 DSH 原生技能(写进
<DSH_HOME>/skills/<id>/SKILL.md),当前对话的技能目录里能立刻看到。
数据源只有一个:catalog.json(站点 https://openfcp.github.io/awesome-financial-skills/ 的全部内容也由它构建)。上游已升级为 format: 3:清单只存引用、不存技能正文,当前 9 个分类、17 个技能(消费者保护 6、办公与设计 5、数据与技术 5、合规与法律 1;其余 5 类开放收录中,页面仍显示分类并标注数量 0)。
本插件不内置、不搬运任何技能正文(上游唯一 vendored 的条目是 official-source-qa,正文在它自己的仓库里)。安装/预览时按技能的 source.type 与清单顶层 resolve 模板,从原始出处取回正文:
| 来源 | 清单里的坐标 | 安装时如何取回 |
|---|---|---|
| SkillHub(16 条) | source.namespace + source.slug |
按 resolve.skillhub 模板 GET 得到 zip,解压(SKILL.md 在根目录) |
GitHub(1 条:official-source-qa,vendored: true) |
source.repo / source.path / source.ref |
按 resolve.github 的 raw 模板逐文件取;raw 不可达走 GitHub API,再不可达走 jsDelivr 镜像 |
引用不可达(SkillHub 不可用、GitHub/镜像都失败)时,安装会明确报错并清理暂存目录——磁盘上不会留下装了一半的技能。format: 2 的旧清单/旧缓存/旧 fixture(plugins/<id>/ 目录)仍然兼容。
装完你会看到什么
- 打开 DSH,左侧栏多出「金融技能」入口(图标是银行建筑线条:三角山墙 + 三根柱子 + 地面线,16×16 stroke 风格);
- 点击后,右侧主区整页变成「金融行业skills精选」:顶部标题 + 副标题,下面是搜索框、9 个分类胶囊、全部/已安装切换;
- 17 条技能按分类列出,每条显示名称、摘要、分类、版本、来源(许可证在详情里如实显示);
- 点名称打开详情弹窗:SKILL.md 正文(Markdown 渲染)、文件清单、总大小、许可证与来源坐标;
- 点「安装」,技能被写进本地技能目录,按钮变成「已安装 / 卸载」;
- 点「卸载」,技能目录被移到
.trash(不直接删除,可手动找回)。
快速安装(3 步)
前提:DeepSeek Harness >= 0.2.0-rc.2,Node >= 20。刷新目录与安装/预览技能需要网络(SkillHub、GitHub 或 jsDelivr);目录本身有随包快照,可先离线浏览。
第 1 步:把本仓库装进 profile
git clone https://github.com/openfcp/dsh-financial-skills.git
dsh plugin --profile desktop add link:$(pwd)/dsh-financial-skills
link:指向本仓库目录,插件改动重启后即可生效,不需要重新打包。 也可以直接用仓库里的脚本,它会把第 1、2 步一起做掉:cd dsh-financial-skills && ./scripts/install-local.sh desktop
第 2 步:把 bundle 加进 profile 的启用列表
打开 ~/.dsh/profiles/desktop/package.json,找到 dsh → profile → bundles,把 "dsh-financial-skills" 加进去:
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-financial-skills"
]
只有列在
dsh.profile.bundles里的 bundle 才会被组合进来;它自带cordis.patch.yml,负责插入financial-skills这一行。
第 3 步:彻底重启 DeepSeek Harness
菜单栏「DeepSeek Harness → 退出」(或窗口激活时按 Cmd+Q),确认「活动监视器」里没有任何 DeepSeek Harness 进程了,再重新打开。
只关掉窗口、再点 Dock 图标打开,不算重启——后台进程还在跑,插件不会加载。这是最容易踩的坑。
装好后想确认:侧栏出现「金融技能」→ 点开后页面显示数据源、更新时间与 17 条技能。
卸载
./scripts/uninstall-local.sh desktop
或者手动两步:
dsh plugin --profile desktop remove dsh-financial-skills
# 再从 ~/.dsh/profiles/desktop/package.json 的 dsh.profile.bundles 中删掉 "dsh-financial-skills"
然后同样彻底重启。通过本插件安装过的技能目录(<DSH_HOME>/skills/<id>/)属于用户数据,卸载插件不会删除;需要的话在插件里点「卸载」或手动删除。
功能
| 功能 | 说明 |
|---|---|
| 搜索 | 按 id / 中文名 / 英文名 / 摘要 / 标签 / 作者匹配,大小写不敏感,输入即筛;与分类、已安装筛选叠加。 |
| 分类筛选 | 一行 9 个官方 Pill(含「全部」与每类数量);空分类仍显示,点开提示「该分类暂无工具」。 |
| 已安装视图 | 官方 SegmentedControl 切换「全部插件 / 已安装 (n)」,已安装条目带 success 标签。 |
| 详情预览 | 官方 Modal + MarkdownText 渲染 SKILL.md 正文(截断 64KB),附文件清单、总大小、license、版本与来源坐标(列表行不展示 license,详情里如实显示)。 |
| 一键安装 | 按 id 和清单坐标取回正文:SkillHub 走 zip 下载解压,GitHub 走 raw → API → jsDelivr;校验后整目录改名落位,失败清理暂存不留痕。 |
| 一键卸载 | 移动到 <DSH_HOME>/skills/.trash/<id>-<时间戳>/,不直接删除。 |
| 离线快照 | 网络不可用或源站降级时回落到随包 catalog.snapshot.json;页面页脚如实标注 source: network / cache / snapshot 与是否过期,绝不把快照说成实时。 |
| 刷新 | 页脚「刷新」按钮请求 GET /api/financial-skills/catalog?refresh=1,失败以错误行展示。 |
已知边界
- 清单只存引用:除了上游自己 vendored 的
official-source-qa,技能正文都不随清单分发;插件只做索引与本地安装,不搬运、不再分发正文。正文版权与许可证归各自作者,详情里如实显示license。 - 部分技能是专有许可:16 条 SkillHub 技能里多数
license: proprietary;安装只代表下载到本地使用,不代表获得再分发授权。 - 安装依赖网络:SkillHub 条目从
api.skillhub.cn取 zip,GitHub 条目从 raw / API / jsDelivr 取文件。断网或引用失效时页面给出可操作错误,不会空白,也不会留下半装目录。 - SkillHub 的
namespace只用于展示与去重,下载 zip 只需要slug;清单的resolve模板是唯一取回规则,客户端不能传 URL。 - 格式 2 兼容:缺少
resolve的旧清单回落到内置默认模板;旧plugins/<id>/目录布局与旧缓存/旧快照仍可读。
配置
所有配置都有默认值;非法值回落到默认值,不会让 DSH 启动失败。在 profile 的 cordis.patch.yml 末尾按 id: financial-skills 覆盖即可,例如:
- id: financial-skills
config:
offline: true # 只用本地缓存/快照,完全不联网
cacheTtlMs: 21600000 # 目录缓存 6 小时
| 字段 | 默认值 | 说明 |
|---|---|---|
indexUrl |
https://raw.githubusercontent.com/openfcp/awesome-financial-skills/main/catalog.json |
目录源地址(单条)。 |
indexUrls |
raw.githubusercontent → fastly.jsdelivr → gcore.jsdelivr → cdn.jsdelivr 四级降级链 | 覆盖目录抓取的降级链。 |
cacheTtlMs |
21600000(6 小时) |
目录缓存有效期。 |
offline |
false |
true 时只用缓存/快照,不联网。 |
installRoot |
<dshHome>/skills |
技能安装根目录(测试可覆盖)。 |
dshHome |
$DSH_HOME,否则 ~/.dsh |
用户配置根。 |
maxFiles |
200 |
单个技能允许的最大文件数。 |
maxFileBytes |
2097152(2 MB) |
单个文件允许的最大字节数。 |
maxTotalBytes |
16777216(16 MB) |
单个技能允许的最大总字节数。 |
HTTP API
Host 半区只注册 6 条精确匹配 GET/POST 路由(客户端只传 id,不传 URL/路径):
| 方法 | 路径 | 入参 | 成功响应 value |
|---|---|---|---|
| GET | /api/financial-skills/catalog |
?refresh=1 强制刷新 |
归一化目录(含 format-3 顶层 resolve 取回规则与每条 source 坐标)+ meta(source/fetchedAt/stale/offline/error) |
| GET | /api/financial-skills/installed |
— | { root, count, skills:[{ id,name,version,description,path,installedAt,managed }] } |
| GET | /api/financial-skills/detail |
?id= |
{ id, markdown, files:[{path,size}], totalBytes, license, version, source }——source 带类型与坐标(skillhub:namespace/slug;github:repo/path/ref/vendored) |
| POST | /api/financial-skills/install |
{ "id": "..." } |
{ id, path, files, bytes, version, license }——files 是数量(int);安装同时写入来源记录 .financial-skills.json |
| POST | /api/financial-skills/uninstall |
{ "id": "..." } |
{ id, trashedTo } |
| GET | /api/financial-skills/health |
— | { version, upstream, cacheAt, offline, skillRoot, dshHome } |
统一信封:成功 { ok: true, value };失败 { ok: false, error },状态码 400 / 403 / 404 / 409 / 502 / 503。所有响应 content-type: application/json; charset=utf-8、cache-control: no-store。安装写出的 .financial-skills.json 记录 id、version、license、sourceType 与来源坐标(github:sourceRepo/sourcePath/sourceRef;skillhub:sourceSlug/sourceNamespace)、installedAt(毫秒)、files(相对路径数组)、fileCount、bytes。
浏览器半区不使用这些路由之外的任何第三方接口;页面里所有数据来自本机 Host。
安全模型
- 只服务本机:每条路由先校验连接来源是 loopback(
127.0.0.0/8、::1、::ffff:127.0.0.1),否则 403。不监听公网、不做账号体系。 - 只认 id:客户端只能传技能 id(文法
/^[a-z0-9][a-z0-9-]{0,63}$/),不能传 URL、不能传路径;非法 id 直接 400。取正文的地址只来自清单里的source坐标 +resolve模板,客户端无法指定下载地址。 - 路径围栏:安装/卸载只从 id 重建路径,写盘前解析出的绝对路径必须仍在
installRoot之内,防止../路径逃逸。 - 先暂存再落位:安装先下载到
installRoot/.staging-<id>-<随机>/,校验文件数(≤200)、单文件(≤2 MB)、总量(≤16 MB)、相对路径文法后,整目录rename到installRoot/<id>;目标已存在返回 409;任一步失败清理暂存并返回错误,磁盘保持原状。 - 卸载不删数据:移到
installRoot/.trash/<id>-<时间戳>/,可人工找回。 - 不读敏感数据:不读取凭据、会话内容或工作区文件;只扫描技能目录判断「已安装」。
- 无遥测:不向任何第三方发送统计或使用数据。网络请求只发往:配置的目录源与镜像(刷新目录)、
api.skillhub.cn(下载 SkillHub zip)、GitHub raw/API 与 jsDelivr 镜像(下载 GitHub 坐标的技能)。
常见问题
侧栏没有「金融技能」入口?
- 确认是彻底退出再打开(活动监视器里旧进程都没了);
~/.dsh/profiles/<profile>/package.json的dsh.profile.bundles里确实有"dsh-financial-skills";- 刷新页面(Cmd+R / F5)再试一次。
页面一直显示空/过期数据?
页脚会写明 source:snapshot 表示本次用的是随包快照(可能是网络不可达或被配置为 offline)。点「刷新」重试;网络恢复后下一轮抓取会自动写缓存。
安装某条技能失败?
安装依赖网络:SkillHub 技能从 api.skillhub.cn 取 zip,GitHub 技能从 raw / API / jsDelivr 取文件。失败时页面给出可操作的错误信息(重试 / 复制 skillhub install … 命令),且暂存目录会被清理——不会出现装了一半的技能。批量失败通常是网络问题,不是目录数据问题。
license 显示 proprietary?
上游部分技能是 SkillHub 上的专有技能,列表行不展示 license,详情里如实显示;安装仅代表下载到本地使用,不代表获得再分发授权。
升级插件后没变化?
本插件是按仓库路径 link: 安装的,重启即可加载最新代码;如果改的是 package.json / cordis.patch.yml,仍建议重新执行一次安装脚本再彻底重启。
会占很多磁盘吗?
只会写入你点「安装」的技能目录,每个通常几十 KB 到几 MB;卸载移入 .trash,不会自动清理。
开发与测试
零 npm 依赖、无构建步骤。要求 Node >= 20。
node --check index.js client.js lib/*.js test/*.mjs # 语法
npm test # 单元 + 半区契约测试(离线可过)
./scripts/run-e2e.sh # 真机 E2E(隔离 DSH_HOME)
./scripts/run-e2e.sh --verbose # 顺便把 Host 日志打到终端
node test/e2e-remote.mjs --help # 全部 E2E 选项
E2E 会:在工作区下的 .e2e/ 建独立 DSH_HOME(绝不碰你正在用的 ~/.dsh)→ 从官方 web 模板克隆 profile → 把本插件按真实 bundle 方式装进 profile → 生成 --patch 配置覆盖并用 --dump-config 预检 → 起一个 --no-open --port 0 的 Host → 用 /connect 换 cookie → 断言插件挂载、6 条路由、9 类 17 条目录及其来源坐标、client.js 产物,并用本地 fixture(plugins/<id>/ 兼容布局)完整跑一遍安装(SKILL.md + 带 sourceType 的 .financial-skills.json 来源记录)与卸载(移入 .trash)。不花模型 token。
细节、故障排查与日志位置见 docs/E2E.md。
仓库与反馈
- 源码、Issue、更新:https://github.com/openfcp/dsh-financial-skills
- 版本:
v0.1.1,变更记录见 CHANGELOG.md - 技能清单的上游数据:https://github.com/openfcp/awesome-financial-skills
报 bug 时请附上:DSH 版本(关于面板)、插件版本(GET /api/financial-skills/health 返回 version)、操作系统、复现步骤;涉及安装失败的请附页面上的错误行(不要附 cookie / token)。
欢迎 PR:保持零 npm 依赖、npm test 离线全绿、sh -n scripts/*.sh 通过即可。
兼容性
- 在 DSH 0.2.2-rc.1(当前桌面版)上完整测试通过;要求 DSH >= 0.2.0-rc.2、Node >= 20。
- Host 半区只依赖 DSH 公开的
webServer注册能力与node:内置模块;浏览器半区只手写__ModuleLoader__bundle,只使用宿主提供的react/react/jsx-runtime/@deepseek-ai/dsh-client-ui-primitives。 - 若未来 DSH 改动侧栏/主区插槽名,页面入口会消失,但已经安装到本地的技能不受影响。
License 与免责声明
作者:八大权益(OpenFCP)。
本项目是社区插件,与 DeepSeek(深度求索)无隶属、合作或背书关系,也未获得其官方认证;上游技能清单与各技能正文的版权归各自作者所有,遵循其许可证(详情里显示各技能的 license)。
本插件只做索引与本地安装,不构成投资建议、法律意见或合规承诺;金融业务落地前请自行完成合规评估与人工复核。
No comments yet. Be the first to write one.