Skip to content

dsh-session-eater v0.6.0

Choose a tag to compare

@mikugui mikugui released this 22 Sep 16:40
· 5 commits to main since this release

这一版把「吃不了」这件事说清楚了:拖到不能吃的会话时,当场在鱼头上给出红色 + 原因
(以前只有屏幕底部一条容易被漏看的回执,像"点了没反应");删除前那句询问也精简成只问一句,
并把这条会话烧掉多少 token 写进去了。

  • 修复:拖"正在聊的这个会话"上来时不再像"点了没反应"。以前只拦在松手那一刻,
    而且提示只出现在屏幕底部那条约 6 秒的 toast 上 —— 眼睛盯着左上角的鱼,很容易漏掉。
    现在拒绝是就地给出的:

    • 拖到鱼头上还没松手,投放区就变红、那行字直接写原因(「别喂正在聊的这个会话」),
      鱼闭着嘴(不摆出要吃的张嘴样子,"没反应"和"在犹豫"不再分不清);
    • 松手时整块晃两下、停在红色状态约 1.8 秒,底部再补一条 toast(双通道);
    • 判定逻辑收拢成 refusalOf() 一处,dragover 与 drop 共用,不再有重复的拦截分支。
    • 空白会话走同一套拒绝 UI(同样是红色 + 写明「空白会话不用清理…」+ 闭嘴)。
    • 宿主回 409「会话还在跑」也走同一套就地拒绝。以前它落进普通失败分支,弹的是
      「没吃下去:该会话正在运行…」,看着像插件出错;其实这条和前两条一样只是"此刻不能吃"。
      现在客户端保留宿主给的 code(session-running)并路由到同一个 refuse():
      红色投放区 + 「会话还在跑,先停下来再喂」+ 鱼闭嘴摇头,1.8 秒后自动归位。
      可改文案 17 段(新增「会话还在跑」这条)。
  • 新增:删除前确认会写出这个会话消耗了多少 token,而且只问一句:
    「消耗了 1.2M token,真的给我吃吗?」—— 不列会话名、不写轮数与缓存命中率
    (弹窗正文只有"询问语 + 按钮行"两个元素,最小化打断)。

    • 确认期间大肥鱼张着嘴不动、脑袋慢慢点、腮红亮着(data-eager),一副"快给我吃"的
      渴望表情;跟悬停时那种咀嚼 dse-chew 明确区分 —— 这里是静止张开(animation:none)。
    • token 数来自内核自己的会话投影缓存(storages/session_projcache/sessions/<id>.json 的
      tokenUsage.totals),与界面同源。特意不去解 session.v3.jsonl.zstd —— 那是多帧 zstd
      (5MB 的会话要解出 19MB 文本、花 300ms),而且里面 data.usage 是「每轮一条、上下文递增」的,
      求和会算出 5 亿这种荒谬值(正确读法是取最后一条,还得自己拼 4 个 bucket)。
    • 总量 = 未缓存输入 + 输出 + 缓存读 + 缓存写;读不到时(空白会话 / 投影还没生成)退回
      不带数字的「真的给我吃吗?」,不写"未知"。
    • 宿主新增 POST /usage(读的是小 JSON,几十毫秒);客户端在 drop 时 await 一次并缓存。
    • 可改文案 15 段 → 17 段:新增「确认弹窗标题(带用量)」(里面的 {tokens} 会被替换成实际用量)
      与「拒绝:会话还在跑」。