DeepSeek Harness 插件

dsh-plugin-eva-unit01

EVA Unit-01 desktop pet for the dsh web GUI: draggable full-body Unit-01 in the frame overlay, NERV sync-rate HUD driven by live session state, idle animations, berserk mode and synthesized SFX(英文原文)

跳到安装方式

来源信息

GitHub 仓库
AlexZhou19871030/dsh-plugin-eva-unit01
最近更新
2026年8月17日
分类
趣味扩展
GitHub stars
0
载体类型
plugin
目录证据
上游声明已找到 dsh.bundle
证据路径
package.json#dsh.bundle
核对版本
0.1.0-rc.8
上游核对日期
2026-08-20

该证据由上游目录提供。本站没有安装、运行或安全审核这个插件。

安装

默认先复制一段 Prompt,让 Agent 读 GitHub 仓库和源码;需要自己装时再切到命令。

复制这段 Prompt,发给 DSH、Codex 或其他 Agent,让它先读 GitHub 仓库和源码。

请先不要安装或执行任何命令。阅读这个插件的 GitHub 仓库、README 和关键源码,然后用清楚、直接的方式回答以下问题,帮助我判断它是否适合我的需求:

1. 这个插件是什么,解决什么问题;
2. 适合哪些用户和典型使用场景;
3. 安装后如何使用,并给出一个最小使用示例;
4. 有哪些已知限制,以及隐私、安全、兼容性或维护风险;
5. 给出“推荐 / 有条件推荐 / 不推荐”的明确建议和理由。

请区分仓库明确说明、根据源码推断和未知信息。证据不足时请明确说明,不要猜测或照抄 README。

GitHub:https://github.com/AlexZhou19871030/dsh-plugin-eva-unit01
插件名:dsh-plugin-eva-unit01
作者:AlexZhou19871030

检查来源文件

安装前先看这个插件目录里的 README 和其他文件。

文件资源管理器3 个文件
README.md来源说明 · 只读预览

EVA 初号机桌宠(dsh web 常驻插件)

在 dsh Web GUI 里放一只可拖动的 Q 版(Funko Pop 风)EVA 初号机,带 NERV 同步率 HUD 与一套 离散动作。纯浏览器面插件:宿主半程是空 apply,浏览器半程通过 package.jsondsh.client 声明被 web 服务端发现并下发。

形体(T12 起换了表现形式):机体不再是手写矢量块面,而是参考插画本身pet-ref/slice-rig.pypet-ref/reference.png 沿实测装甲缝切成 16 层刚体部件(切缝取自逐行游程间隙与颜色族连通域, 不是目测),16 层并集与描出的躯体掩膜完全相等:0 像素丢失、0 像素臆造。每层按 2 倍屏幕尺寸导出并以 data URI 内嵌,插件仍是单文件、无需资源路由。viewBox 0 0 300 340、渲染 240x272,躯体占 227.68 x 291 单位、宽高比 0.782 —— 就是参考图自己的比例。眼睛保留矢量(画在切片器补绘过的眼窝上), 情绪变色/发光/眨眼照旧;脐带电缆保留矢量,因为它必须弯折。

挂载位置与层级(不要随便改)

桌宠注册在 shell.overlay slot,但渲染内容用 react-domcreatePortal 投到 document.body > div.eva01-portal这不是为了好看,是必须的shell.overlay 的祖先 overlayLayerz-index:20,而 dsh-better-sidebar 的右侧面板 .W-zNGW_panel 与底部面板 .W-zNGW_bottomPanel 都是 z-index:50 且 88% 不透明 —— 桌宠在那个层叠上下文里无论把自己的 z-index 抬到多高都会被盖住(实测 z-index:2147483000 同样无效),连点击事件都被面板吃掉。

层级取值 60,有实测依据:全页常驻层只有 toggleCluster 55 / panel 50 / bottomPanel 50, 而宿主的模态框、遮罩、toast 在 100–1100。所以 60 恰好压过所有常驻面板,又仍在所有模态类 UI 之下(报错弹窗永远盖在桌宠之上)。容器 pointer-events:none + 桌宠本体 pointer-events:auto, 保证这个全屏容器不吃任何页面事件。默认落点在左下 left:24px;bottom:84px,避开右侧面板内容; 初始朝向即镜像(is-left),与「左半边镜像」规则一致,避免第一次拖拽时凭空翻面。

交互

操作结果
拖动移动,限制在窗口内;窗口缩放后自动钳回视口;跨过屏幕中线整体镜像
松手落地压扁回弹 + 低频落地音
单击按当前情绪随机台词 + 机体回弹 + blip,34% 概率点头
双击暴走 8 秒:蓄力 → 咆哮(下颌张开)→ 红眼、剧烈抖动、红色 AT 场、线缆火花、同步率 400%、内部电源倒计时
悬停右上 开关音效(Web Audio 现场合成,无音频资源;不可用时静默降级)
悬停右上 收成小紫球,点球体恢复
什么都不做每 7–18s 随机插一个 idle break 动作(见下)

动作系统

两层:情绪循环(永不停,float 整体浮动 13px / sway 摆头 ±5° / breathe 呼吸 1.055 / 双臂 ±7° / 线缆 ±6° / 肩甲反相 ±2° / 头侧绿鳍 ±4°(BERSERK 下改为 0.34s steps 抽动)/ 地面阴影跟随),叠加离散一次性动作。只有循环时,旁人 会觉得「没在动」——离散动作才是能被一眼看见的节拍。

26 个离散动作。每个动作都是「三件套」:ACTIONS 表项 + @keyframes eva01-* + .eva01-root.is-act-<名字> 选择器(注意是 is-act- 前缀,组件里拼的是 cls += " is-act-" + act)。 下表的时长/优先级/门控/权重/音效 kind 均取自 lib/client.jsACTIONS 表实际值。

动作时长优先级情绪门控idle 权重触发音效 kind
wave 挥手1150ms2idle/active/pending/tool3挂载 900ms 后打招呼;进入 STANDBYwave
nod 点头780ms2idle/active/pending/tool2单击 34% 概率nod
deny 摇头760ms3任意0进入 ALERTdeny
look 左右张望2400ms1idle/pending4idle breaklook
stretch 伸展1700ms1idle3idle breakstretch
hop 原地小跳900ms2idle/active/tool3idle breakhop
walk 碎步1100ms1idle/active2idle breakstep
stomp 踏步840ms3active/tool/berserk0进入 ACTIVE / OPERATEstomp
charge 蓄力1500ms5任意0进入 BERSERKcharge
roar 咆哮1600ms5berserk0蓄力后 1560ms 自动接上roar
salute 敬礼1250ms2idle/active1作业完成回到 IDLEsalute
shiver 颤抖900ms4任意0ALERT 12%(T18)
slash 振动刀挥砍1050ms4active/tool/berserk0进入 ACTIVE/OPERATE 25%(T18)prog
unbind 撕开口枷1400ms5berserk0暴走链第 2 拍(1560ms,T18)jaw
guard A.T. 场防御1200ms4任意0ALERT 18%(T18)atfield
shutdown 电源耗尽停机1800ms5任意0暴走 8s 窗口结束(T18)lifeless
turn 原地转身900ms2idle/active2idle breakpivot
crouch 下蹲1250ms2idle/tool2idle breakcrouch
scan 传感器扫视2200ms1idle/pending3idle breaklook
tapcore 敲核心1150ms2idle/active/tool1idle breakpoke
tiptoe 踮脚1400ms1idle2idle breaktiptoe
rebound 受击回弹800ms3active/tool/alert/berserk0使徒计数上涨(T18)thud

> T18 已组接:上表原本标「预留」的 6 个动作全部报上了真实触发点(见 T18 節);新增的 audit-triggers.cjs 闸门保证不会再出现只有关键帧、永远跑不到的动作。

互斥规则:暴走/蓄力/撕枷/停机(5) > 颤抖/挥砍/防御(4) > 情绪反应/回弹(3) > 打招呼(2) > idle break(1) > 情绪循环。 运行中的动作会拒绝优先级更低或相等的请求,所以两个动作永不争抢同一个 transform;拖拽中一律拒绝 (机体本身就是拖拽把手)。每条关键帧的 0% 与 100% 都回到 identity,class 摘掉时不会跳变。

调试触发钩子(供自动化验证用,非 UI 功能):

window.__eva01.play('hop')   // -> boolean,被情绪门控/优先级拒绝时返回 false,未知动作名返回 false
window.__eva01.actions       // 动作名列表
window.__eva01.state()       // { mood, act, drag }

音效

全部现场合成:振荡器 + 一块共享白噪 buffer 过 biquad,插件不带任何音频资源文件。 共 44 个 kind,硬约束由 tests/audio.mjs 断言:单层峰值 ≤ GAIN_CAP 0.12、单个配方 delay + dur ≤ 2s、同一 kind 的重叠峰值 ≤ 0.26,母线 BUS_GAIN 0.75。最响的仍是 roar (0.24 合计 → 出口 0.18)。设计依据与逐层理由见 SFX_RESEARCH.md

T8 新增 15 个 kind(THROTTLE 为同一 kind 两次播放的最小间隔):

kind语义挂载throttle
prog振动刀出鞘,双高频拍频即刃振slash500ms
jaw暴走前撕开口枷unbind900ms
battery内部电源倒计时双响shutdown + ALERT 周期1000ms
pivot髋部伺服转向,含制动卡榫turn350ms
crouch液压下沉 + 落定crouch600ms
tiptoe踮步,响度仅 step 的一半tiptoe300ms
pulse生体心搏,S1/S2 强弱不等呼吸循环重音周期1400ms
s2S² 機関驻留,55/56.5Hz 拍频=双螺旋BERSERK 周期6000ms
umbilical三点式插头就位 + 送电涌入待接800ms
unplug电缆断开 → 切内部电源待接900ms
atburstA.T. 场碰撞显形,3:2 双环鸣待接400ms
lclEntry Plug 注液 + 电解待接3000ms
lifeless电源耗尽停机,末声钝 240Hz待接2000ms
magiMAGI 三体多数决,全表最轻待接700ms
sync同步率分级建立,四级台阶待接1200ms

三个状态型音效不走 ACTIONS[x].sound,而是在情绪层周期请求、靠 THROTTLE 自然限流: battery 在 ALERT 下每 0.9s 请求一次、1s 节流 → 实际约 1.8s 一响;s2 在 BERSERK 下每 0.9s 请求、6s 节流 → 约 6.3s 重新起一次驻留;pulse 每 1.5s 请求,BERSERK 每次都过(心率飙升), 其余情绪过 35% 概率门 → 平均约 4s 一拍,ALERT 下让位给电池倒计时。

标「待接」的 7 个已实现并通过全部断言,只是还没有触发点(与早前的 power / hum 同一处理方式)。

状态联动

情绪读自两个来源:shell.overlay 标准 prop useSessions(会话列表:谁在跑、谁在等你),以及当前会话的对话装配——插件自己用客户端 sessions 服务把 sessions.binding(current).sessionConversationSnapshot 订阅下来。同步率每 0.9s 向目标值收敛:

情绪触发目标同步率HUD
IDLE其余60UMBILICAL LINKED / TOOL n
ACTIVE当前会话 running,或存在任意 running 会话88ACT n / TOOL n
STANDBY当前会话有 pendingInteraction(等你授权/回答)71
OPERATE当前会话有正在执行的工具调用94OP <工具名>
ALERT当前会话出现新的 agent 错误33⚠ PATTERN BLUE ×n
BERSERK双击400PWR mm:ss

优先级:BERSERK > ALERT > OPERATE > ACTIVE > STANDBY > IDLE

派生规则(readFeed):

  • TOOL n —— 窗口内 tool-result 节点数 + 当前在跑的调用数。
  • ⚠ PATTERN BLUE ×n —— 失败的 tool-resultisError)与 turn-error 节点计为「使徒」。
  • ALERT —— 由 lastAgentError 文本变化驱动,警报持续 8 秒后自动解除并播报「使徒歼灭」。订阅建立时读到的那条错误只作基线,不报警,所以刷新页面不会为历史失败拉响警报。
  • 流式 token 不触发重算:feedSig 只在节点数、在跑调用、错误文本变化时才重新折叠快照。

安装

dsh plugin --profile web add link:E:/DSH/plugins/eva-unit01

该命令会同时把包名追加到 profile package.jsondsh.profile.bundles。bundle 列表在启动时 读取,需要重启 dsh 才生效

验证组合树(不启动应用):

dsh --profile web --dump-config

测试

node tests/smoke.mjs

用假的 window.__ModuleLoader__ 与假 useSessions 快照,跑真实 React 渲染。覆盖:

  • 模块形状、导出、样式表只插一次、Slot 注册参数、injectslotssessions
  • readFeed 快照折叠 6 例(空会话、落地工具计数、失败工具与 turn-error 计为使徒、在跑调用取名并计数、错误文本、未知形状降级为空);
  • feedSig 的流式抑制:同一节点集下 partial 变化不重算;
  • subscribeFeed 真实订阅路径:首读作基线、后续变化上报、token-only 变化不重复通知、disposer 解绑、无 sessions 服务降级、binding() 抛错降级;
  • moodOf 六档优先级,且标签与同步率互不重复;
  • Hud 七种状态的实际标记(OP <工具名>TOOL nACT n⚠ PATTERN BLUE ×nPWR mm:ss、进度条宽度);
  • 4 种会话快照的整机渲染,以及 apply() 注册的 overlay 入口能真实渲染;
  • 样式表里每个情绪态都有对应状态规则,避免加了状态却没有视觉。

SSR 不跑 effect,所以 OPERATE/ALERT 的验证走两条可测缝:订阅逻辑用假 session face 直接驱动, HUD 标记用独立的 Hud 组件按状态渲染。

设计说明:为什么不走宿主事件

早期动态插件版本用宿主 agent/errortools/result 事件驱动 ALERT 与 TOOL 计数。常驻插件的 浏览器半程没有动态包那种 Package 私有 host.call 通道,而 @deepseek-ai/dsh-api-remotes 的转发 白名单(API_REMOTE_FORWARDED_EVENTS)是构建时固定的、不含这两条事件——不改动 deployment 自带的 安装就加不进去。

但这两项能力不需要宿主通道:浏览器本来就持有当前会话的完整装配。ConversationSnapshot 直接带 nodes(含 tool-result / turn-error)、runningCallslastAgentError,所以改成从客户端 快照派生,反而比事件驱动更好:

  • 刷新页面后计数不丢(快照是权威,不依赖曾经收到过哪条事件);
  • 能显示当前正在执行的工具名,事件计数做不到;
  • 零宿主侧改动,宿主半程仍是空 apply

代价:计数限于当前加载窗口内的节点(loadOlder 之前的历史不计入)。

T12:表现形式换轨 + 通知层(本轮)

1. 为什么换成贴图骨架

手写矢量追插画追不上:换轨前用同一像素管线量测,桌宠 vs 参考图是 aspect 0.912/0.782、头高占比 45.0%/35.5%、头宽高比 1.656/1.874、颈线 0.449/0.354 —— 四项全偏,而且每改一次都要重打上百个 路径坐标。改成「切参考图」后,比例不再需要调:等比贴图天然带着参考图的比例。

2. 验收数据(pet-ref/compare-fidelity.py,双图同一管线,不用硬编码常量)

指标参考图桌宠渲染判定
宽高比0.7820.782OK
头宽占比85.14%85.24%OK
头高占比35.55%35.67%OK
头宽/头高1.8741.869OK
颈线位置0.3540.355OK
轮廓 IoU0.9908形状即参考图

measure-pet.py 里那组 REF 常量已被证伪:它的 legsplit_frac 0.744,用同一管线量参考图自己 得到的是 0.998 —— 该指标本身不可用,已改由 compare-fidelity.py 现场量测双图。

3. 关节表(由切片 bbox 导出,CSS transform-origin 与之一致)

部件关节部件关节
head150,122.7jaw162.8,122.7
chest168.6,241.6inner150,317
armL112,166armR227,166
legL104,241.6legR228,241.6
pylonL105,142pylonR220,142
finL115.2,69.5finR228.3,69
greaveL100,267.2greaveR233,269.1
footL98,293.3footR240,304
core165,166.2

4. 气泡与提示音(三态 + 两声)

时机气泡音效说明
工作中(进入 ACTIVE)LINES.active 随机up + sync原有
工作中(进入 OPERATE 工具调用)LINES.tool 随机magi新增:此前直接进工具态时桌宠一言不发
需要授权(STANDBY)LINES.pending 随机,5.2sauthreq新音效:G6→C7 上行四度问句,问两遍 + G5 尾音
任务结束(回到 IDLE)LINES.done 新池 5 条taskdone新音效:C6-G5-C5 下行终止式 + 八度铃
闲时LINES[mood]blip定时器改为 26-46s 自重排(原先固定 46s 像节拍器)

任务结束的动作节拍改为 45% cheer / 55% salute,避免连续完成时一直敬礼。down 音重新接到 警报解除(下降双音正是「降级」语义),音效接线审计因此回到 44 kinds / 44 已接线。

5. 暴走态色彩处理(依据第二张参考图的实测配色)

第二张暴走参考图是满幅插画(白底仅 0.3%,血红背景 #da3533 占 12.7%),抠不出干净的角色掩膜 (试得的掩膜填充率仅 0.52 且贴到画面底边),因此本轮不切第二套贴图,只取它的权威配色做色彩分级: 角色主紫实测 #393172(平时 #5e369c)、灰 #616371、绿 #4a8850、暗部 #201e2a。落地为 .eva01-root.is-berserk .eva01-inner{filter:brightness(.76) saturate(.88) contrast(1.14) drop-shadow(0 0 9px rgba(216,53,51,.55))} —— brightness(.76) 把 #5e369c 压到约 #472a76, 红色投影补上背光;眼色与 A.T. 场原本就走 --eva-* 变量切换。

6. 新增 4 个动作 / 3 个音效

finflare(鳍片外张,1300ms,音 plate)、armcross(双臂交叠,1400ms,音 latch)、 lookback(回望:眼先动 → 头转 → 鳍延迟 → 电缆最后跟,2000ms,音 pivot)、cheer(跃起举臂, 1300ms,音 comms)。三个新音效按 SFX_RESEARCH.md 的分层规则(瞬态 → 本体 → 尾音)推导。

7. 本轮的诚实边界

  • 本机 web_search 未配置 DEEPSEEK_API_KEY本轮没有任何新的联网来源;新音效是声学推导而非引用。
  • 本机模型无图像输入(describe_image 插件 baseURL 无效、modlens 超时),所有形象判断都是像素统计,

不含任何「我看了一眼觉得像」。视觉终审仍需你本人看一眼 GUI。

  • 暴走形象目前只是色彩分级 + 既有开颌/獠牙/抖动,不是第二套贴图;要复刻那张图的姿态,需要一张

白底或透明底的暴走立绘。

T13:切片没扣干净的修复(用户报告)

用户截图指出机体带白斑/白边。查证后是切片器 v1 的两个真实缺陷,不是渲染层问题:

缺陷成因证据修复
胸口一块白斑v1 对躯体掩膜用了 binary_fill_holes,把「近臂与躯干之间被围住的白色背景空隙」当前景填了进去chest.png 内含 54x71 纯白实心块,2189 px,均值 RGB(254,254,254)不再填洞;只补 <=8px 针孔,6 处真实空隙保持透明
一圈白毛边白底判定 min(rgb)>238 太窄,白页与黑轮廓之间的反锯齿过渡行被算成躯体贴图边缘近白像素占 4.8%(legL 11.6%、eyeL 11%)近白判定放宽到 min(rgb)>225 且按连通域判定页面,再对 alpha 内缩 1px 丢掉混合行

修复后量测(slice-rig2.py 自带审计):

指标v1v2
边缘近白像素占比4.8%(650/13422)0.1%(18/18942)
单层最大白斑2189 px0 px
半透明边缘中的近白0.47%(19/4053)
不透明近白像素0
合成到 GUI 面板 #081840 后的亮边像素16 层全部为 0
轮廓 IoU0.99080.9880(1px 内缩的代价,5 项比例仍全 OK)

体积同时下降:base64 278KB -> 265KB,client.js 408,698 -> 395,758 字节。 回归:tests/audio.mjs 3597 断言、tests/smoke.mjsaudit-classest7-crosscheck.mjs 902 断言全过。

T13b:脸上被啃出透明缺口(用户第二次报告)

用户报告头部出现应为黑色却透明的区域。查证:v2 掩膜共 6 个洞,其中 5 个在脸上 (最大 985 px,x209-244 / y255-297,原图均值 RGB(142,54,116) —— 实心美术),只有 1 个 (x380-468,RGB 249,249,249)是真背景空隙。

成因是 v2 里那段颜色键剔除红色 CJK 文字块的代码:(R>200)&(G<70)&(B<70) 同时命中了角色脸上的 亮红高光(#c8262c 的 R 正好 200),再经 5x5 两次膨胀,就在高光四周啃掉约 4px 深的一圈。 而红字块本身是独立连通域,取最大连通域时天然被排除 —— 那段剔除逻辑纯属多余。同时移除了 binary_opening,它会啃细线条美术。

新增不变量(这条断言本可以第一时间拦住上面的 bug,现已内建):每个保留为透明的洞,其原图颜色 中位数必须是近白页面(min 通道 > 225),否则直接 SystemExit 拒绝导出

指标v2v2b
掩膜中的洞6(5 个是美术)1(全部为背景,通过颜色不变量)
头部内部「暗色美术被透明」存在0 px
躯体像素139,358141,568(回补 2,210)
边缘近白像素0.1%0.1%(未回退)
轮廓 IoU0.98800.9881

回归:audio 3597 断言、smoke、audit-classes、t7-crosscheck 902 断言全过;线上 bundle 400,421 字节。

T14:暴走正典动作集(AT 力场 / 持枪 / 振动小刀 / 出击 / 殴打使徒)

1. 五个新动作

动作时长优先级情绪门控触发音效动作要点
atopen A.T. 力场展开1800ms4idle/active/tool/alert/berserk暴走链第 3 拍;play()atfield双臂前推、六边形力场 0.74→1.04 张开、机体后撑、眼闪 1.2x、鳍片外张 18 度
gunfire 持枪射击2000ms4alert/berserk/active/toolALERT 40%rifle举枪→三连发(枪口焰 + 机体后座 5px + 右腿撑步)→收枪
knifedraw 抽振动小刀1700ms4alert/berserk/active/toolALERT 35%deploy右肩甲开启 13 度 → 手伸向肩后 → 刀现 → 一记斩击
sortie 出击1600ms3idle/active/tool进入 ACTIVE/OPERATE 35%launch深蹲蓄力(压扁 1.06/0.9)→ 弹射上冲 26px(拉伸 0.93/1.09)→ 两段落地
beatdown 殴打使徒2200ms4alert/berserk暴走链第 4 拍punch四记交替重拳,髋部先转带动出拳,命中帧地面火花

暴走链改为正典顺序:charge(0) → roar(1560) → atopen(3160) → beatdown(4960),末尾 7160ms, 仍在 8 秒暴走窗口内;每次交接都等上一动作结束,不会有两个动作抢同一个 transform。 ALERT 不再只是摇头:40% 持枪 / 35% 抽刀 / 25% 保留原摇头。

2. 两件手绘矢量道具

参考图里没有武器,所以枪与刀是手绘矢量(不是切片),挂在 eva01-armR 组内随臂运动, 平时 opacity:0,只在自己的动作里显形:

  • eva01-rifle 托盘式步枪:机匣 + 顶部受光棱 + 枪口块 + 弹匣,另有 eva01-flash 枪口焰
  • eva01-knife 振动小刀:刀身 + 刃口高光 + 刀柄
  • eva01-hit 命中火花两片,放在 inner 层而非手臂组,所以不会随拳头一起旋转

3. 声画对齐(这轮特意校过,不是凑巧)

事件动画命中帧音效层延迟
枪火第 1 发12% × 2000ms = 240msrifle 层 delay 0.24
枪火第 2 发26% = 520msdelay 0.52
枪火第 3 发40% = 800msdelay 0.80
重拳第 1 击20% × 2200ms = 440mspunch 层 delay 0.44
重拳第 2 击50% = 1100msdelay 1.10
重拳第 3 击82% = 1804msdelay 1.804(+0.16 时长,刚好卡进 2s 上限)

4. 四个新音效(合成参数)

kind语义配方要点throttle
rifle托盘枪三连发每发 = 90→45Hz 方波 0.12s(0.075)+ 300Hz 低通噪声(0.05)+ 4.2kHz 高通脆响;间隔 280ms,是慢速重炮而非连发900ms
launch弹射轨道40→120Hz 正弦 0.9s(attack 0.2)+ 600→1800Hz 低通噪声 0.85s + 卡榫方波 + 风噪尾1600ms
punch三记重拳130→50Hz 正弦 0.16s(0.085)+ 420Hz 低通(0.045)+ 5kHz 高通爆点,逐击衰减180ms
deploy抽刀5kHz 高通瞬态(锁扣)+ 300→1200Hz 锯齿滑出(刀身)+ 2400/2412Hz 双正弦驻留 —— 12Hz 拍频即刃振600ms

5. 闸门抓到并修掉的两个真问题

1. eva01-atHexeva01-beatHit 的 0%/100% 不是 identity(scale(.72)/scale(.6)),违反 「class 摘掉不得跳变」的不变量 —— 已把缩放挪到内部帧,首尾恢复 scale(1)。 2. atopen 起初给了 idle 权重且门控含 alert/berserk,使警报态与暴走态混进了闲时随机池 (危机中不该摸鱼)—— 改为 idle: 0,仍可由暴走链与 window.__eva01.play() 显式触发。

回归:audio.mjs 4054 断言 / 48 kindssmoke.mjsaudit-classesaudit-sfx-wiringt7-crosscheck.mjs 1133 断言 / 31 动作 / 180 组关键帧 全过;轮廓 IoU 0.9881 未受影响 (渲染 harness 已同步剥离武器与火花图层,否则会污染轮廓量测);线上 bundle 415,482 字节。

6. 仍未做到的

  • 暴走形态依旧是色彩分级 + 开颌獠牙 + 抖动,不是第二套贴图:那张暴走图是满幅插画,抠不出

干净掩膜(见 T12 第 5 节)。要真正复刻其姿态,需要白底或透明底立绘。

  • 音效仍是按声学与既有 SFX_RESEARCH.md 体例推导;本机 web_search 无凭据,**本轮依然没有新的

联网正典来源**,不要把上表当作引用。

T15:补上联网检索能力,并把正典音效调研补做完

1. 能力从哪来(没装插件也能用)

根因是 dsh 进程带着一个已死的代理(127.0.0.1:7897):api.github.com 走它 rc=7 拒连、 走 33210 或直连都是 200。所以 web_search(还缺 key)与 find_dsh_plugin(返回空列表) 都不是坏了,是被掐住。

新增 E:\DSH\tools\websearch.py:自动探测可用路由(33210 → 7897 → 7890 → 直连), 走 DuckDuckGo HTML 端点,零 API key、零第三方依赖(纯标准库)。三个子命令:

python E:\DSH\tools\websearch.py search "query" [n]
python E:\DSH\tools\websearch.py fetch  "https://..." [chars]
python E:\DSH\tools\websearch.py github "topic query" [n]

2. 可选插件(真实检索结果,按星数)

插件要点
liustack/modsearch107一条命令接管 dsh 内置 web_search;默认引擎 Antigravity CLI 免密钥(浏览器登录),Tavily/Exa/Firecrawl 免费额度做失效转移
anysearch-team/anysearch-dsh54AnySearch 搜索 provider + 进阶检索工具
anweat/dsh-web-search-pro12多引擎 + SQLite 持久缓存
gxpppp/dsh-search-mcp10用 MCP 服务器(Tavily/Brave/Exa/Perplexity/DuckDuckGo)替换内置搜索

注意:装任何一个都改不了根因 —— 插件跑在 dsh 进程里,同样会走那个死代理。 顺序应为:先跑 E:\DSH\fix-uv\apply-uv-fix.ps1 修代理端口 → 重启 dsh → 再装插件。

3. 调研成果与对音效的实际改动

详见 SFX_SOURCES_T15.md(每条结论带来源链接)。三处实现改动:

改动依据具体参数
roar 重做为「放慢的人声尖叫」初号机嘶吼实为林原めぐみ的尖叫放慢(EvaGeeks 13988 / Reddit 多源)删掉 1400→300Hz 合成器扫频层,改为两条同步下行高 Q 带通(760→420Hz Q6、1250→700Hz Q8)叠在 300→78Hz 锯齿上 + 呼吸尾音;合计峰值 0.24 → 0.187
新增 plugsuit 皮革褶皱音Khara 官方揭露驾驶服音效来自一只 Madison Square Garden 皮质运动包1500→700Hz 带通 + 3.8kHz 高通颗粒 + 2600→1400Hz 二次揉捏;接在拖拽起手,grab 之后
deploy 刃振提频EvaWiki:刀身以极高频振动,收纳于左肩甲驻留双音 2400/2412Hz → 3200/3214Hz(拍频 14Hz,从「嗡」变「嘶」);并确认 knifedraw 用右侧肩甲即 Eva 的左肩,方向与正典一致

仍无权威来源的项(A.T. 力场音、弹射音、托盘枪音)继续标注为声学推导,不冒充引用。

> T16 更新:其中 A.T. 力场音托盘枪音 已在 T16 找到来源并落地(见下一節与 SFX_SOURCES_T16.md);弹射音仍无来源。

回归:audio.mjs 4132 断言 / 49 kindssmoke.mjsaudit-sfx-wiringt7-crosscheck.mjs 1133 断言 全过。

T16:把「无来源」的音效追到底 + 第一次真正的视觉终审

1. 先修能力,再干活

上一轮的两个硬限制本轮都没了:代理从死掉的 127.0.0.1:7897 改到 33210(用户级 环境变量已改,dsh 重启后继承),websearch.py 因此能真的联网;图片理解describe_image) 配好了 Ark /api/v3 + doubao-seed-1-6-250615,实测可读图 —— T12/T14 反复声明的 「本机模型无图像输入,视觉终审仍需你本人看一眼」这条限制,本轮第一次可以自己做了。

2. 视觉终审:确认无瑕疵,但也确认了「不能听视觉模型讲细节」

pet-ref/pet-shot.png(桌宠渲染)与 pet-ref/reference.png(参考插画)分别交给视觉模型, 同一套提问(对象数、姿态、比例、颜色分区、瑕疵、面部细节):

项目结论
白斑 / 白毛边 / 透明缺口 / 断肢 / 贴图接缝两图都报「未观察到」 —— T13/T13b 的修复第一次得到独立于像素统计的确认
姿态与颜色分区两图描述几乎逐条重合(紫色主体、绿色鳍/肩/膝/小腿内侧、红色眼上三角、黄色眼与膝块)
头身比都判为 Q 版、头约占全高 1/3 —— 与 compare-fidelity.py 的 35.55% / 35.67% 一致

但视觉模型对细节给出了两条矛盾描述:说桌宠眼睛是「圆形、无瞳孔」、参考图是「横向椭圆、有黑色瞳孔」, 还说桌宠嘴是「咧嘴」、参考图是「闭合」。这两条被像素测量证伪(黄色连通域 bbox 与域内暗像素占比):

眼部黄色连通域参考图桌宠渲染
左眼 w/h0.8400.812
左眼域内暗像素占比(瞳孔)0.3900.380
右眼 w/h1.2781.364
右眼域内暗像素占比0.2140.210

两图的眼形比例与瞳孔占比几乎相同,桌宠是有瞳孔的,也没有哪一只眼睛是「横向椭圆 vs 圆形」的差别。 所以本轮没有按那两条描述改任何形状 —— 视觉模型可用于「有没有明显瑕疵」这类整体判断, 它的细节措辞不能当量测用。

3. 音效来源:一条真改动,一条认输

完整来源与摘录见 SFX_SOURCES_T16.md

kind本轮结果
atfield补上来源(EvaGeeks 13974 的「像 binaural beats」听感)→ 加 220/226Hz 一对正弦,6Hz 拍频;标注为社区听感,非制作来源
rifle有正典依据的重做:EvaWiki 给出托盘枪 = Type MM-99 大口径自动步枪、造型取自 Steyr ACR、ACR 用 flechette 钢镖弹 → 三连发间隔 280ms → 110ms、本体 0.12s → 0.09s、每发各带 5.2kHz 钢镖瞬态(原先只有首发一次 4.2kHz);低频本体保留(「大口径」是正典)
roar拿到第三个独立佐证(thread 13574:「录一个人尖叫再把频率放慢」;且咆哮被放在对白轨,英配需重录)—— T15 的实现无需再改
launch / punch / atfield 的制作来源没查到。两条专问弹射音的查询被 DuckDuckGo 限流返回空,EvaWiki 无音源说明 → 继续标注为声学推导,不冒充引用

新的工艺定位(写死在文档里):论坛一手结论是 NGE 的 TV 版音效「以现成音效库 + 混音为主」, 音响制作方为 "Audio Tanaka"。原作没录真物、我们也没录真物,所以本插件的音效永远只能是声学推导, 任何时候都不写成「复刻正典音源」。

声画对齐随之 retime(T14 第 3 节的规矩):枪火三帧 12% / 17.5% / 23%(240 / 350 / 460ms) = 音效层 delay 0.24 / 0.35 / 0.46;eva01-gunFlash / eva01-gunBody / eva01-gunArmR 三组关键帧一并改,首尾仍是 identity。

4. 顺手修掉的文档缺陷

README 里 T12 章节整段重复了两次(2590 字符逐字相同,应是上一轮 patch 的编辑事故)。 本轮删掉第二份,删除前先断言两段完全相同才动手。

5. 回归

audio.mjs 4196 断言 / 49 kindssmoke.mjsaudit-classes(180 组关键帧、0 处缺 0%/100%)、audit-sfx-wiringt7-crosscheck.mjs 1133 断言 / 31 动作 全过。 rifle 新增两层后单层峰值仍 ≤ 0.12、三发窗口互不重叠(0.24–0.33 / 0.35–0.44 / 0.46–0.55)。

6. 仍未做到的

  • 暴走第二套贴图依旧没做:那张暴走插画是满幅背景(白底仅 0.3%),抠不出干净掩膜(T12 第 5 节),

现在图片理解虽然能用了,但它给不出掩膜,只能给描述 —— 缺的是一张白底/透明底暴走立绘。

  • launch / punch 的正典来源仍缺;下一轮可追 "Audio Tanaka" 与 EvaGeeks thread 21607

(本轮抓到的正文只有提问,没有答复)。

  • 6 个「预留」动作(shiver / slash / unbind / guard / shutdown / rebound)与

5 个「待接」音效(umbilical / unplug / atburst / lcl / lifeless)仍没有自动触发点。

T17:按两张参考图改暴走与 A.T. 力场(音效跟着动画走)

用户给了两张图:图 A 是初号机 Funko 手办实拍(深蓝近黑背景占 80%,手持红色长枪), 图 B 是暴走形态插画(红底)。

1. 先说两个如实结论

两张图里都没有 A.T. 力场。 视觉模型对两图分别独立回答"未出现力场",图 A 的颜色直方图前 12 位 全是 #000818/#081020 一类近黑(背景),也没有任何几何叠加的迹象。所以本轮 A.T. 力场的改法 依据不是这两张图,而是荧幕上的多层六边形障壁表现,这一点必须写清楚。

图 B 依然抠不出干净掩膜,第二套贴图继续不做。 这次是量出来的,不是感觉:

量测项含义
红背景像素占比38.9%视觉模型说的"纯红背景 100%"是错的
颜色键后最大前景连通域占全图 61.1%不是角色,是"非红色的所有绘画"
掩膜 bbox710x734=整幅上/下/左三条边命中率 100%
掩膜填充率0.611与 T12 那张(0.52)同类,满幅