dsh-pet 工作状态状态机:DSH会话事件如何压缩成6档动画+“真收尾才庆祝“的goal续跑判定
AI 插件dsh-plugin交互助手桌面应用【免费下载链接】dsh-petDSH 桌面宠物一行命令装好即用的透明动画小桌宠支持多开、大小位置随心配置还内置 DIY 素材链能用 AI 视频自造专属宠物项目地址https://gitcode.com/gh_mirrors/ds/dsh-pet点击查看免费下载dsh-pet 是一款一行命令装好即用的透明动画桌宠它最贴心的功能之一是工作状态联动桌宠会实时监听 DSH 的会话事件流把 agent 的思考、调工具、等确认、完成、出错等过程压缩成 6 档动画档位 气泡文案。本文拆解这套工作状态状态机的设计——事件如何映射到档位、多会话如何聚合以及goal 自动续跑时如何做到真收尾才庆祝。为什么桌宠要跟着会话干活平时你让 agent 跑一个长任务时界面滚动、日志刷屏很难一眼看出它现在是在想、在干、还是在等我确认。dsh-pet 的思路是不做日志解析也不调模型只监听 DSH 的session/event事件流用最轻的方式把当前活动工作状态聚合成一个快照前端按档位切换预置动画。开关就藏在宠物实例配置里pets[].workStatusEnabled true时host 侧开始聚合会话事件浏览器/桌面端轮询/state后按 counter 变化切动画。整个链路纯监听、零模型调用配置见 config.jsonc。6 档状态机6 类会话事件 → 6 个动画档位工作状态只有 6 个档位顺序固定与配置里animations.events.workStatus动画数组的索引严格一一对应注释里专门叮嘱勿在中间插入新档档位索引状态触发事件默认动画0thinkingturn/start回合开始工作状态-思考冒泡1workingtool/call工具调用工作状态-忙碌点按2resulttool/result工具返回工作状态-清点归档3waitingapproval/asked/ 问用户选择题工作状态-原地踱步张望4successturn/endreasoncompleted工作状态-雀跃庆祝5errorturn/endreasonerror/max-tokens/timeout工作状态-垂头叹气冒汗核心压缩逻辑就一个纯函数 reduceWorkStatus几行 switch 把所有事件收敛成档位或nulltool/call有个特例工具名是ask_user_questionagent 弹选择题问你时归为waiting——问你的题不是在干活turn/end的blocked回合被阻塞等确认归waiting其余 reason如aborted返回null含义是该会话回合已结束清空回空闲。这是当年这一步正在进行中哦永久挂死的根因修复——回合被打断后绝不能残留上一档。档位与索引常量在 shared/work-status.ts 中单一来源定义气泡文案则完全由配置驱动workStatusTexts 是一个二维数组每档放多个备选句播放时随机抽一句想换文案只改配置不用碰代码。goal 续跑判定真收尾才庆祝上面 6 档里有个隐藏矛盾turn/end completed只代表这一轮结束不等于整个任务完成。DSH 的 goal 机制会自动续跑一轮跑完如果目标没达成会带着source.kind goal的消息再开新一轮。如果每轮完成都播雀跃庆祝就会出现任务还没干完桌宠先撒花的尴尬。解法是给每个 turn 维护一对轻量标志WorkStatusTurnContext由 index.ts 在事件流里置位、在turn/start清零goalRound收到user/message且source.kind goal时置true——本轮属于自动续跑closing本轮出现过update_goal工具调用且action为complete/blocked时记录收尾动作解析函数 goalUpdateAction 对非法 JSON 一律按未收尾容错。终局判定收敛到 completedState 一个函数规则非常干净场景turn/end completed 时的档位语义非 goal 轮普通问答success一轮答完即成功原行为向后兼容goal 续跑·中间轮未收尾result本轮完成 ≠ 任务完成只播清点归档不庆祝收尾轮action: completesuccess整个目标达成才雀跃庆祝收尾轮action: blockederror目标被阻塞诚实表达沮丧而不是假装成功这套判定被单测逐条钉死见 work-status.test.ts中间轮 completed → result不庆祝收尾轮 complete → success / blocked → error。多会话聚合等待和错误优先浮出桌宠常同时挂着多个会话子代理、委派任务展示时不能先到先得。WorkStatusStore 按会话各记一条state task对外用 pickDisplayed 挑出优先级最高的一条展示waiting(60) error(50) working(40) thinking(30) result(25) success(20)这个优先级表里有两处刻意的取舍waiting永远最优先——只要有会话在等你确认其他一切动画都该让位你该去点那个批准按钮了result高于success——任何一个会话的进行中过渡态都不允许被别的会话的已完成盖过去这正是防中途庆祝在多会话下的兜底。另外两个细节让状态不会赖着不走同档去重同会话同状态不重复更新签名比对防刷屏状态或任务文案任一变化才刷新时间戳终态 60 秒窗口success/error展示约 60s 后自动清掉会话条目陈旧完成态不会在后续无关活动里反复浮上来若会话期间回到非终态到期的清理定时器会被取消。任务详情气泡正在做第几步也挂在会话条目上而非全局单值——条目一清文案随之消失不会再出现A 会话的状态配 B 会话的文案或任务结束后文案永久残留issue #59 的根治点详见 currentTaskFromTodo 的注释。渲染端轮询 counter 触发切档host 侧聚合结果写进/state的sections.workStatus浏览器与桌面端共用同一份纯逻辑 shared/work-status.tstoWorkStatus把不认识的状态安全归一成空闲形状非法直接跳过这一拍、不抛错前端按 counter 变化切到对应workStatus动画并弹出该档文案终态气泡 10 秒自动收起非终态常驻。小结把状态机做轻的三条经验dsh-pet 的工作状态联动给自研状态展示功能提供了不错的参考压缩而不是解析不碰日志和模型输出只靠 6 类事件 → 6 档的固定映射纯函数可单测天然稳定完成要分级区分本轮完成与整个任务完成goal 续跑的goalRound closing双标志只在真收尾时庆祝失败就诚实表达终态要有生命周期去重防刷屏、终态定时过期、文案与状态同生共死——状态机的下半身和上半身同样重要。想深入源码从 dsh-pet/src/host/work-status.ts 入手即可6 档压缩、goal 收尾判定、多会话聚合全在这个文件里配套的 work-status.test.ts 把每条边界行为都写成了用例。赞分享AI 插件dsh-plugin交互助手桌面应用【免费下载链接】dsh-petDSH 桌面宠物一行命令装好即用的透明动画小桌宠支持多开、大小位置随心配置还内置 DIY 素材链能用 AI 视频自造专属宠物项目地址https://gitcode.com/gh_mirrors/ds/dsh-pet点击查看免费下载相关推荐窗口一失焦它就弹通知dsh-pet 系统通知机制详解5种DSH会话事件全覆盖窗口一失焦它就弹通知dsh pet 系统通知机制详解5种DSH会话事件全覆盖 dsh pet 系统通知 是桌面宠物 dsh pet 里一个「独立于宠物本体AI 插件dsh-plugin交互助手桌面应用dsh-graded-mode分级模式 v0.0.1-rc1技术指南DSH 生态下的会话级两级任务协议与规格化门控状态机dsh graded mode分级模式 v0.0.1 rc1技术指南DSH 生态下的会话级两级任务协议与规格化门控状态机 本指南以 graded/ 子模块dsh-pluginAI 插件提示工程人工智能开发工具庆祝开源创新celebrate - 动态生成庆祝动图的工具庆祝开源创新 celebrate 动态生成庆祝动图的工具 在这个数字化的时代我们经常需要为各种线上活动增添一些趣味性。 是一个由 Continuation创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

teams-for-linux Wayland 屏享拾取器 Spike(2534)技术方案解析:用应用内 StreamSelector 接管 getDisplayMedia

teams-for-linux Wayland 屏享拾取器 Spike(2534)技术方案解析:用应用内 StreamSelector 接管 getDisplayMedia

桌面应用即时通讯 【免费下载链接】teams-for-linux Unofficial Microsoft Teams for Linux client 项目地址: https://gitcode.com/gh_mirrors/te/teams-for-linux 点击查看 免费下载 导读 本文围绕 teams-for-linux 仓库中的 Spike 方案文档 2026-05-13-spike-2…

2026/10/15 20:04:45 阅读更多 →
《算法导论(第 3 版)》2.3「算法设计」习题精解:归并排序、无哨兵 MERGE 与二分搜索

《算法导论(第 3 版)》2.3「算法设计」习题精解:归并排序、无哨兵 MERGE 与二分搜索

文档教程教育 【免费下载链接】CLRS 📚 Solutions to Introduction to Algorithms Third Edition 项目地址: https://gitcode.com/gh_mirrors/clr/CLRS 点击查看 免费下载 本篇技术指南以 docs/Chap02/2.3.md 为主体,系统讲解《算法导论&…

2026/10/14 18:34:54 阅读更多 →
STM32驱动OV7670无FIFO方案:DCMI与DMA时序实战

STM32驱动OV7670无FIFO方案:DCMI与DMA时序实战

简介:这份资源面向使用STM32F1系列驱动OV7670摄像头、且不依赖FIFO缓冲的嵌入式开发者与电子爱好者,尤其适合正在做图像采集入门实验或课程设计的学生。作者基于自身摸索经验编写了完整源码,并额外加入图像处理函数,可实现亮度、饱…

2026/10/14 18:34:54 阅读更多 →

最新新闻

具身智能中的协同机理研究(107):双引擎并行实现毫秒级精确控制

具身智能中的协同机理研究(107):双引擎并行实现毫秒级精确控制

前沿技术探索:TVA智能体(简称TVA) TVA智能体(亦称“AI智能体视觉”)是依托Transformer架构与“因式智能体”理论构建的新型工业视觉系统,也是当前最具代表性的具身视觉技术之一。它有机融合深度强化学习(DRL)、卷积神经网络(CNN)与因式分解算法(FRA),构成了具身智…

2026/10/15 20:54:55 阅读更多 →
foobox-cn 完整上手指南:给 foobar2000 换一套现代化中文界面

foobox-cn 完整上手指南:给 foobar2000 换一套现代化中文界面

foobox-cn 完整上手指南:给 foobar2000 换一套现代化中文界面 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn 如果你也遇到这种情况:foobar2000 解码稳、格式全,可…

2026/10/15 20:54:55 阅读更多 →
Samba文件服务器安全(1)

Samba文件服务器安全(1)

在企业 IT 基础设施中,Samba 文件服务器往往扮演着"沉默的枢纽"角色——它让 Windows 客户端能够无缝访问 Linux 上的共享目录,让 Active Directory 域中的用户凭同一套身份凭证读写文件。然而,正是这种跨平台桥接能力,使 Samba 服务器成为网络安全链条上最容易被…

2026/10/15 20:54:55 阅读更多 →
大模型人才报告解读:岗位图谱、技能栈与能力培养路径

大模型人才报告解读:岗位图谱、技能栈与能力培养路径

简介:由中国软件行业协会发布的《2024人工智能大模型的技术岗位与能力培养研究报告》,围绕大模型引发的岗位变革与人才需求展开,适合想进入AI大模型方向的开发者、在校学生以及负责技术团队建设与课程规划的管理者阅读。资料为单个PDF文件&am…

2026/10/15 20:54:55 阅读更多 →
深海数据中心测试:从故障注入到代码生存的实操指南

深海数据中心测试:从故障注入到代码生存的实操指南

接到“深海数据中心测试”这个任务时,团队里一度以为是在整活。把装了几十台服务器的标准机柜塞进耐压舱体,沉到几十米深的海床上,让它以接近工业级可靠性的标准连续运行——这个听起来有点科幻片味道的项目,其实催生了一连串极其…

2026/10/15 20:54:55 阅读更多 →
CentOS 8.2 自建 NextCloud 私有云盘:LNMP 环境搭建与优化实战

CentOS 8.2 自建 NextCloud 私有云盘:LNMP 环境搭建与优化实战

1. 为什么我选择在 CentOS 8.2 上自建 NextCloud把时间倒回几年前,我第一次接触网盘类工具的时候,用的还是各种公有云服务。免费额度小、上传下载限速、文件格式被审查、分享链接随时失效,这些痛点想必你也遇到过。后来我开始琢磨&#xff1a…

2026/10/15 20:53:54 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →