Back to home@xi-kari

dsh-amphoreus

翁法罗斯 × DSH:黄金裔席位工作区与画布工作台(基于 DeepSeek Harness 构建,非官方)

Stars
0
Language
TypeScript
Created
Sep 5, 2026
Updated
Sep 5, 2026
GitHub repo

Introduction

dsh-amphoreus

CI npm version

翁法罗斯 × DSH:为 amphoreus-skill-suite 的 13 张黄金裔技能卡各建一席专属工作区(专属配色、壁纸与首轮自动注入),并用一张总览画布调控与派发任务。它是基于 DeepSeek Harness 构建的第三方插件,属于非官方产品。

截图

十三席门户

那刻夏席内视图

总览工作台

翁法罗斯设置区

以上四张截图均由本地 dsh-v0.1.2-alpha.4 实机界面于 2026-09-05 重新启动后截取;它们只展示运行效果,不提供可复用的原图素材。文件尺寸、脱敏与复核信息见 docs/screenshots/README.md。npm README 会把这些相对路径解析到 GitHub HEAD 的 raw 文件,因此 GitHub main 推送后两处共用同一组图片。

兼容性

本版本只承诺兼容 dsh-v0.1.2-alpha.4@deepseek-ai/dsh 的 npm latestnext0.1.2-rc.1alpha 已到 0.1.2-alpha.5;运行 DSH 本体时请钉定:

npx @deepseek-ai/dsh@0.1.2-alpha.4 web

安装本插件时请显式使用 dsh-amphoreus@alpha 或精确版本 dsh-amphoreus@0.2.0,不要依赖 latest

安装

以下命令以 web profile 为例。插件被加入后,launcher 会把它 reconcile 进 dsh.profile.bundles;bundle 列表只在启动时组合,所以每种安装方式完成后都要重启 dsh webpatchReload: live 只重载 cordis.patch.yml,不能代替这次重启。

npm

dsh plugin --profile web add dsh-amphoreus@alpha
# 或钉定版本
dsh plugin --profile web add dsh-amphoreus@0.2.0

tarball

npm pack dsh-amphoreus@alpha --registry https://registry.npmjs.org
dsh plugin --profile web add ./dsh-amphoreus-0.2.0.tgz

GitHub

dsh plugin --profile web add github:xi-kari/dsh-amphoreus#<sha>

GitHub 安装会在本机执行本包的 prepare 脚本以生成 lib/。第一次安装会失败并打印 allowBuilds 提示;把提示中的完整 key 加入 $DSH_HOME/profiles/web/pnpm-workspace.yaml 后,再执行一次上面的 add 命令。以 v0.2.0 的发布提交为例:

allowBuilds:
  'dsh-amphoreus@https://codeload.github.com/xi-kari/dsh-amphoreus/tar.gz/fc754a6ca02f96d4bbd47fe655196c04d611431e': true

这一步表示用户明确授权安装期构建,建议始终钉定 commit SHA。pnpm 11.7.0 实测要求 key 同时包含包名、完整 codeload URL 与同一 40 位 SHA;仅写 dsh-amphoreus: true 不生效,换 SHA 时必须复制新提示,不使用通配。若启动时报 run pnpm run build before launch,说明 prepare 没有获准执行;npm 与 tarball 已携带构建产物,不会走这条源码构建路径。GitHub 方式已用上述发布 SHA 完成独立安装抽测。

含空格的本地路径

不要把含空格的路径直接传给 dsh plugin add;launcher 的参数转发会在空格处断开。改在 profile 目录安装 link,再让 launcher reconcile:

cd "$DSH_HOME/profiles/web"
pnpm add "link:D:/有 空格/dsh-amphoreus"
dsh plugin --profile web install

本地开发的另一种占位路径写法是 D:/<你的目录>/dsh-amphoreus;请替换为自己的目录。

卸载与数据

dsh plugin --profile web remove dsh-amphoreus

卸载插件不会删除技能目录,也不会删除已有插件数据。若用户决定手工清理,相关位置是:

  • $DSH_HOME/storages/amphoreus.json
  • $DSH_HOME/storages/amphoreus_canvas/
  • $DSH_HOME/amphoreus/,其中包括可重建的 assets-cache/

配置

profile 的 cordis.patch.yml 按 id 整体替换该插件的 config,而不是递归深合并;用户只需写想覆盖的键,未写键会由 schema 填入默认值。例如:

- id: amphoreus
  config:
    skillRoots: ['~/.claude/skills', '~/.codex/skills']
    dataDir: !!js dshHomePath('amphoreus')
    assetsRoot: 'D:/我的素材/翁法罗斯'

dataDir 留空时,插件回退到 $DSH_HOME/amphoreusskillRoots 只是运行时解析的只读目录引用;assetsRoot 指向用户自己的本地素材根,留空时视觉层使用抽象回退,不读取原图。

下表逐项对应当前 src/host/config.ts;嵌套对象的每个子键单独列出:

范围类型默认值作用
顶层skillRootsstring[]['~/.claude/skills', '~/.codex/skills']按顺序搜索技能套件的只读目录。
顶层dataDirstring''插件自有文件数据目录;空值回退到 $DSH_HOME/amphoreus
顶层assetsRootstring''用户本地素材根;空值启用无原图回退。
顶层commonPathstringamphoreus/references/common.md相对技能根的共享合同文件。
顶层relationsPathstringamphoreus/references/relations.md相对技能根的关系文件。
顶层sectionAliasesRecord<string, string[]>{}为解析器补充章节标题别名。
顶层providerNamestringdsh-amphoreus注册到 DSH 的技能提供者名。
顶层providerSourcestringamphoreus技能提供者来源标识。
顶层providerRanknumber300技能提供者排序权重。
顶层registerProviderbooleantrue是否注册技能提供者。
顶层forceUserOnlybooleanfalse是否把提供者暴露范围限制为用户调用。
顶层heroWorkspaceMode'seats' | 'off'seats启用十三席分组或关闭席位工作区。
顶层magazineMode'light' | 'full'light选择轻量或完整杂志视觉。
顶层seatStylebooleantrue是否启用逐席配色与纹样。
wallpaperwallpaperobject见下列子键席位与全局壁纸设置。
wallpaperenabledbooleantrue壁纸总开关。
wallpaperglobal'rotate' | 'fixed'fixed全局壁纸轮换或固定模式。
wallpaperglobalIndexnumber4全局壁纸索引,范围 0–5。
wallpapersidebarIndexnumber5侧栏壁纸索引,范围 0–5。
wallpaperperSeatbooleantrue是否按席位切换壁纸。
wallpaperdarkMasknumber0.18暗色模式遮罩强度。
wallpaperlightMasknumber0.03亮色模式遮罩强度。
wallpapersurfaceAlphaobject见下列子键表面层透明度。
wallpaper.surfaceAlphalightnumber0.22亮色表面透明度。
wallpaper.surfaceAlphadarknumber0.4暗色表面透明度。
autoInvokeautoInvokeobject见下列子键首轮技能注入设置。
autoInvokeenabledbooleantrue首轮自动注入总开关。
autoInvokesourcesSessionStartSourceName[]['startup', 'clear']允许触发注入的会话启动来源。
顶层receiptParsingbooleantrue是否解析运行时回执。
handoffhandoffobject见下列子键移交能力设置。
handoffenabledbooleantrue移交按钮与观察能力总开关。
workbenchworkbenchobject见下列子键工作台设置。
workbenchenabledbooleantrue是否注册工作台界面与路由。
workbenchhost'iframe' | 'native'iframe工作台承载方式;native 当前按 iframe 处理。
workbenchdefaultView'chat' | 'workbench'chat会话默认视图。
workbenchcardTextLimitnumber8000浏览器侧卡片正文上限,允许 1000–32000。
workbenchautoProjectionbooleantrue是否把会话事件自动投影到工作台索引。
suiteWatchsuiteWatchobject见下列子键技能套件监听设置。
suiteWatchmode'fs' | 'poll' | 'off'fs文件监听、轮询或关闭。
suiteWatchpollMsnumber15000轮询间隔(毫秒)。
suiteWatchdebounceMsnumber800变更防抖时间(毫秒)。
validatevalidateobject见下列子键外部校验器设置。
validateenabledbooleanfalse是否运行外部校验。
validatepythonstringpythonPython 可执行文件。
syncsyncobject见下列子键预留,当前无消费者。
syncsourcestringgithub:xi-kari/amphoreus-skill-suite预留的套件来源。
syncrefstringmain预留的套件引用。
synckeepBackupsnumber3预留的备份数量。
顶层trustedHostsstring[][]Host 门额外允许的主机。

素材包

素材为《崩坏:星穹铁道》官方图或相应二创;本仓库与 npm 包不包含、不下载任何原图。用户把自己持有的文件按下表命名并放入 assetsRoot。缺少素材不会让插件伪造角色内容,而会进入对应的抽象视觉回退。

目录文件名规则与张数用途缺失时表现
昔涟壁纸/6 张 GLOBAL_WALLPAPERS PNG全局与侧栏壁纸不显示原图壁纸,保留 token 与纹样。
翁法罗斯英雄纪/13 张 HERO_VISUALS[].assets.chronicle JPG;含源文件错字 09阿格莱呀.jpg十三席门户封面使用席位配色与抽象卡面。
翁法罗斯如我所书卡牌/13 张 HERO_VISUALS[].assets.card PNG席位卡牌视觉使用抽象卡面。
翁法罗斯日历/14 张 JPG;其中 13 张由 HERO_VISUALS[].assets.calendar 引用逐席壁纸与派生宽封面该席回退到无原图视觉。
表情包/本地素材集 78 张;检查 13 张必需席位贴纸及 17 张可选品牌、奇美拉与开拓者贴纸徽记、席位图标与辅助视觉席位贴纸缺失时显示确定性的首字徽记。
翁法罗斯金卡(游戏截图)/本地素材集 15 张;检查器将 0开拓者女.png14开拓者男.png 记为可选开拓者视觉储备不影响十三席核心界面。
黄金裔杂志_13册分册压缩包/Vol.01–Vol.13,共 13 个 ZIP,均为可选派生供 magazineMode: full 使用的杂志封面缺失时沿用轻量或原图回退,不解压内页到磁盘。

自检基线共 58 个必需文件(6 张壁纸 + 13 席 × 英雄纪/卡牌/日历/贴纸)与 32 个可选文件(13 个 ZIP + 1 个品牌贴纸 + 12 个奇美拉贴纸 + 2 张开拓者金卡 + 4 张开拓者贴纸)。克隆仓库后可执行:

npm run assets:check -- "<assetsRoot>"

check-assets.mjs 依赖仓库中的 src/shared/heroes.ts,因此不随 npm 包发布;npm/tarball 用户按下表核对即可。

全局壁纸文件名:

  • Image_1788022237216_660.png
  • Image_1788022238729_461.png
  • Image_1788022241165_565.png
  • Image_1788022242885_262.png
  • Image_1788022248464_572.png
  • Image_1788022255434_340.png

十三席的五类源文件名直接对应 HERO_VISUALS[].assets

heroIdVol.英雄纪日历如我所书卡牌杂志分册席位贴纸
cyrene1313昔涟.jpg翁法罗斯2026一年历-封面-昔涟.jpg13昔涟.pngVol.13_往昔的涟漪_昔涟_14张.zip昔涟-收到.png
tribbie0201缇宝.jpg1月-门关月-缇宝.jpg01缇宝.pngVol.02_命运的三子_缇宝_11张.zip缇宝-睿智.png
cerydra1002刻律德菈.jpg2月-平衡月-刻律德菈.jpg02刻律德菈.pngVol.10_执棋的君主_刻律德菈_12张.zip刻律德菈-将军.png
march7th1103长夜月.jpg3月-长夜月-长夜月.jpg03长夜月.pngVol.11_隐秘的陌客_长夜月_12张.zip长夜月-去吧.png
terrae1204丹恒.jpg4月-耕耘月-丹恒.jpg04丹恒.pngVol.12_腾飞的荒龙_丹恒·腾荒_12张.zip丹恒-倾听.png
hysilens0905海瑟音.jpg5月-欢喜月-海瑟音.jpg05海瑟音.pngVol.09_奏浪的剑骑_海瑟音_12张.zip海瑟音-哼歌.png
hyacine0606风堇.jpg6月-长昼月-风堇.jpg06风堇.pngVol.06_摇光的医师_雅辛忒丝_12张.zip风堇-治愈.png
phainon0807白厄.jpg7月-自由月-白厄.jpg07白厄.pngVol.08_无名的英雄_白厄_12张.zip白厄-诶嘿.png
anaxa0508那刻夏.jpg8月-收获月-那刻夏.jpg08那刻夏.pngVol.05_殁世的学士_阿那克萨戈拉斯_12张.zip那刻夏-看穿.png
aglaea0109阿格莱呀.jpg9月-拾线月-阿格莱雅.jpg09阿格莱雅.pngVol.01_黄金的织者_阿格莱雅_12张.zip阿格莱雅-设计.png
mydei0310万敌.jpg10月-纷争月-万敌.jpg10万敌.pngVol.03_亡国的王储_迈德漠斯_11张.zip万敌-狂.png
castorice0411遐蝶.jpg11月-哀悼月-遐蝶.jpg11遐蝶.pngVol.04_死荫的侍女_遐蝶_14张.zip遐蝶-创作.png
cipher0712赛飞儿.jpg12月-机缘月-赛飞儿.jpg12赛飞儿.pngVol.07_捷足的羁客_赛法利娅_12张.zip赛飞儿-得手.png

表情包的 8160² 原图请先缩到不超过 1024²,否则首帧读取会变慢;也可以直接使用派生命令生成 WebP 缓存。先完成构建并确保 ImageMagick 的 magick 在 PATH,然后显式指定与服务相同的 dataDir

npm run build
npm run derive -- --assets-root "<dir>" --data-dir "<DSH_HOME>/amphoreus"

当前 shell 的 DSH_HOME 未必与服务进程一致,因此不要省略 --data-dir。派生物写入 <dataDir>/assets-cache/;运行时优先使用 WebP,缺失时回退原图。缓存可重建;若要清理,先停止服务,只删除该精确缓存目录,再启动服务让文件清单重新扫描。

也可以在 DSH 设置中进入:翁法罗斯 → 视觉层 → 重新派生素材。后台任务会显示进度、完成数量与最近结果。

技能套件:获取与更新

插件不内嵌任何 SKILL.mdpersona.mdcommon.mdrelations.md。席位、分派表、流水线与回执格式全部在运行时从 skillRoots 解析,绑定键等于 skill name。

获取 amphoreus-skill-suite:

git clone https://github.com/xi-kari/amphoreus-skill-suite.git
cp -r amphoreus-skill-suite/skills/* ~/.claude/skills/

Windows 用户需确认当前 shell 如何展开 ~。更新有两种方式:

  1. 在套件仓库执行 git pull,再重新 cp -r;也可以让 skillRoots 直接指向克隆目录的 skills/,此时 git pull 后即可重新解析。
  2. 在 DSH 设置中打开「翁法罗斯」,点击「重新解析套件」。

解析失败时界面明确显示「套件格式未识别,已降级」,不会静默沿用旧结果;新加入的技能卡自动出席,移除的技能卡变为「未部署」且保留已有会话。

十三席一览

席序heroIdskill杂志册母题常用名
0cyreneamphoreus-cyreneVol.13ripples昔涟(全局层/总览)
1tribbieamphoreus-tribbieVol.02stars缇宝
2cerydraamphoreus-cerydraVol.10checker刻律德菈
3march7thamphoreus-march7thVol.11film三月七/长夜月(同席翻面)
4terraeamphoreus-terraeVol.12scales丹恒·腾荒
5hysilensamphoreus-hysilensVol.09waves海瑟音
6hyacineamphoreus-hyacineVol.06clouds风堇
7phainonamphoreus-phainonVol.08arches白厄
8anaxaamphoreus-anaxaVol.05astrolabe那刻夏
9aglaeaamphoreus-aglaeaVol.01gold-thread阿格莱雅
10mydeiamphoreus-mydeiVol.03lion万敌
11castoriceamphoreus-castoriceVol.04butterfly遐蝶
12cipheramphoreus-cipherVol.07coins赛飞儿

显示名与职责在运行时来自技能卡 description 与分派表;这里的常用名只帮助读者识别视觉席位。

现状(0.2.0 发布态)

完整工作流是:打开十三席门户 → 进席 → 在此席新建会话 → 首轮自动注入当前技能卡 → 识别回执 → 在总览画布派发或移交。未经明确点击,移交不会接受或切换,移交物也不会自动发送;技能卡缺席时不代演,界面显示套件提供的缺席标准行。

  • skillRoots 在运行时解析技能套件,并提供目录监听、内容指纹与显式降级。
  • 建立 13 席黄金裔席位表与席位目录;席内新会话在首轮一次性注入对应技能卡。
  • 提供 /amphoreus/* Web API,并以进程级 nonce 与 Host 门保护写请求。
  • 提供首帧壁纸层、全局昔涟主题层、品牌三槽和设置区。
  • 提供 13 席 light/dark token、共享 SVG 纹样、lightfull 杂志版式,以及可重建的本地 WebP 派生缓存;视觉层设置可即时切换并显示后台派生进度。

M3 总空间派发、移交与台账现已完成;当前可复核边界见下方 ## 已知限制

  • 正文与会话列表不经宿主路由,宿主只保留 seq 索引(B 章)。

工作台

iframe 画布基于 dsh-synapse 的 MIT 实现改造,完整署名与改动边界见致谢和 NOTICE。

  • 全体会议 chip 进入总空间;派发面板按技能套件的词面匹配给出建议承办席,派发泳道展示已经创建的下游会话。
  • 移交坞只在存在待处理移交时出现;用户明确点击接受后才切换到下游,未点击时不接受、不切换,也不自动发送移交内容。
  • 会话头的站位轨来自运行时流水线,可从已部署站位继续派发;详情末尾的接通中卡展示当前待处理移交。
  • 侧栏台账跟随画布当前选中的线程,集中展示运行时解析出的记录,并提供席位记忆便签与“插入到输入框”操作。
  • 同一画布内的移交关系以虚线连接;多数移交边跨席,主要看角标。

数据

observations 的键为 ${sessionId}:${seq}:${kind},使同一条助手消息产生的不同记录不会互相覆盖;其中 dispatch 表示显式派发记录,其 seq 固定为 0。记录通过 /amphoreus/api/observations 读取或创建,并通过 /amphoreus/api/observations/:key 更新;席位便签通过 /amphoreus/api/memory/:skill 读写。席位绑定、派发、移交和记忆均写入插件的 storage domain,不写自定义会话事件。

消息

iframe 发给宿主页的新消息包括 amphoreus:dispatchamphoreus:accept-handoffamphoreus:dismiss-handoffamphoreus:insert-input;既有 amphoreus:open-seat 增加了可选的 dispatchText。宿主页回推 amphoreus:stateamphoreus:enter-seatamphoreus:dispatchedamphoreus:handoff-acceptedamphoreus:handoff-dismissed,失败继续使用 amphoreus:bridge-error

席位与目录

黄金裔席位是会话的承办绑定维度,唯一事实来自会话 ID 到 skill name 的绑定;“我的目录”继续使用 DSH 官方工作区维度,表示会话所在目录,两者互不替代。

在席内新建会话时,插件先预生成会话 ID 并写入席位绑定,再用该 ID 创建会话;创建或打开失败时回滚预绑定。由已有会话 fork 出的子会话继承父席。昔涟席代表全体会议与全局视觉层,进入时不切换逐席壁纸或主题 token。

开发

npm run dev:link
npm run build
npm test
npm run verify:dist
npm run assets:check -- "<assetsRoot>"

npm run dev:link 在 Windows 上以 junction 链接本地 DSH 依赖。改宿主代码后重启 dsh web;改浏览器代码后先 build,再刷新页面。含空格的本地 link 安装仍使用“安装”一节中的 profile 内 pnpm add 方法。

维护者发布必须显式执行 npm publish --tag alpha --access public --registry https://registry.npmjs.org,发布前 dry-run 也必须带 --tag alpha。npm 11.11.0 实测裸 npm publish 仍选择 latest,不能把 publishConfig.tag 当作执行保证;首发由注册表自动出现 latest 时只记录事实,不另做 dist-tag adddist-tag rm

已知限制

  1. 当前兼容范围仅为 dsh-v0.1.2-alpha.4
  2. 首帧 nonce 每个进程随机生成;宿主重启后需刷新工作台。
  3. 页面加载时的首个会话通常不受 workbench.defaultView 影响。
  4. “记住 Tab”在插件热重载或会话回到空白态时可能被误记为“对话”;下次进入工作台 Tab 后会自愈。
  5. 派生素材使用稳定 .webp URL 与一天私有缓存;强制重做后,已经打开的浏览器页可能需要刷新才能立即看见新图。
  6. DSH alpha.4 的空白会话不渲染会话视图;从对话 Tab 打开总览再进入“全体会议”或使用“去派发”时,总空间画布因此留在门户覆盖层内承载,不新建空白宿主会话。

致谢

声明与许可

本项目采用 MIT License,详见 LICENSE。本项目基于 DeepSeek Harness 构建,不是 DeepSeek 官方产品,与深度求索公司无关联、无背书。项目命名遵循 DSH 品牌规范。

《崩坏:星穹铁道》相关名称与美术归米哈游所有;本仓库和 npm 包不分发其图像,也不提供原图下载链接。

相关文档

设计底账另存,不随 npm 包分发。