DeepSeek Harness plugin

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

Jump to install

Source facts

Repository
AlexZhou19871030/dsh-plugin-eva-unit01
Latest update
Aug 17, 2026
Category
Just for Fun
GitHub stars
0
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/AlexZhou19871030/dsh-plugin-eva-unit01
Plugin: dsh-plugin-eva-unit01
Author: AlexZhou19871030

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer3 files
README.mdSource · read only

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)同类,满幅