fix(host): 修掉会杀死 DSH 的 resolveModelInfo unhandled rejection;按真实事件结构(event.data)重写镜像映射;标题栏与指标显示打磨
This commit is contained in:
@@ -109,6 +109,9 @@ shell\run-float.cmd -Action pin # 给正在运行的实例
|
||||
8. **cordis:`ctx.set` 之前必须 `ctx.provide`**。漏了会抛 `cannot set property "floatWindow" without provide`,后果不是"少个功能"而是**整个插件树加载失败、DSH 进程直接退出**。本轮就是在隔离实例里实测复现后修掉的。
|
||||
9. **PowerShell 事件处理器里参数不能叫 `$args`**:它是自动变量,会把整个事件参数数组占住,于是 `$e.TryGetWebMessageAsString()` 变成"数组没有这个方法"——表现为**页面所有按钮(含右下角缩放、置顶、锁定、全屏、设置)全部失效**。正确写法是 `param($s, $e)`。
|
||||
10. **profile 的 `package.json` 不能带 BOM**:Node 读 JSON 会报 `SyntaxError: Unexpected token '锘?`。用 `[IO.File]::WriteAllText(..., UTF8Encoding($false))` 写。
|
||||
11. **宿主里可能返回 Promise 的 API,必须 `.catch()`**:`ctx.get('llm').resolveModelInfo()` 在没注册 provider 时会抛错,而且它返回 Promise——只 `try/catch` 同步部分会留下 **unhandled rejection,直接把 DSH 进程 `fatal load failure` 干掉**(我在隔离实例里真把 DSH 搞崩过一次,1 秒一次的 SSE tick 是触发器)。
|
||||
12. **会话事件载荷在 `event.data` 下**,不在顶层:`user/message` → `data.content[{type:'text',text}]`、`assistant/chunk` → `data.chunk{type,text,reason}`、`session/title` → `data.title`、`tool/call` → `data.name/args`。另外要过滤 `data.source.kind === 'plugin'` 的消息(系统提示快照),否则镜像里会混入一大段内部注入文本。
|
||||
13. **宿主 RPC 的信封是 `{ rpcId, payload }`**:`ctx.apiProxy.sessions.prompt({ rpcId, payload: { sessionId, mode, content } })`。把字段平铺在顶层会得到 `Cannot read properties of undefined (reading 'sessionId')`。
|
||||
|
||||
## 怎么验证(可复现)
|
||||
|
||||
@@ -134,6 +137,13 @@ curl -N http://127.0.0.1:8099/dsh-float-window/events # SSE,每秒一帧
|
||||
# 4) 让浮窗连到这个测试实例(看视觉效果时再加 -NoExclude)
|
||||
shell\run-float.cmd -DshHome $t -NoExclude
|
||||
# 标题栏应变成绿点 + 127.0.0.1:8099
|
||||
|
||||
# 5) 造一个真实会话并灌一条消息,验证镜像与指标(不需要浏览器)
|
||||
curl -X POST http://127.0.0.1:8099/dsh-float-window/session -H "content-type: application/json" -d "{\"action\":\"create\",\"cwd\":\"D:/project\"}"
|
||||
curl -X POST http://127.0.0.1:8099/dsh-float-window/chat -H "content-type: application/json" -d "{\"text\":\"你好\"}"
|
||||
curl http://127.0.0.1:8099/dsh-float-window/state
|
||||
# -> messages 里出现 user 行;metrics 里 turns/steps/tokens 有数(没有 API key 时
|
||||
# assistant 行会是一条 ⚠️ 报错,这正是 LLM 分支被正确映射的证据)
|
||||
```
|
||||
|
||||
`tools/smoke-host.mjs` 则是更轻的一层:假 ctx 直接调 `apply()`,验证路由/SSE/工具注册不抛异常。
|
||||
|
||||
Reference in New Issue
Block a user