PilotDeck Always-on 源码解析发现调度、信号监听与后台任务如何协同工作的完整指南【免费下载链接】PilotDeckTask-oriented AI Agent productivity platform项目地址: https://gitcode.com/OpenBMB/PilotDeck如果你用过PilotDeck的 Always-on 功能会发现它能在你不在场时自动发现改进点、开工执行并产出报告。本文带你深入 PilotDeck 后台任务Always-on源码一次讲清「发现调度、信号监听与后台任务」三者如何协同工作帮助你快速读懂这套「项目自动驾驶」机制。在 PilotDeck 的 Web 界面里左侧文件面板与右侧助手面板共同构成你与项目交互的主界面而 Always-on 正是依托这套运行时在后台默默运转Always-on 是什么一条自动运转的后台任务循环Always-on常驻是 PilotDeck 的「任务导向 AI Agent」能力的一部分它按固定节奏审视一个项目发现值得改进的点生成Plan准备一个隔离的工作区Workspace让 Agent 自动执行Execution最后产出报告Report并可申请落地Apply。整个过程无需人工盯着且带有一整套闸门、冷却与预算保护避免失控。一句话概括这条后台任务流水线定时 tick → 过闸门 → 抢锁 → 发现计划 → 隔离工作区 → 自动执行 → 写报告 → 可选落地模块目录结构快速定位关键源码Always-on 的源码集中在src/always-on/按职责分层非常清晰src/always-on/runtime/DiscoveryScheduler.ts —— 发现调度器定时触发 休眠恢复src/always-on/runtime/SignalWatcher.ts —— 信号监听器感知项目文件变化src/always-on/runtime/DiscoveryGates.ts —— 闸门判定逻辑src/always-on/runtime/DiscoveryFire.ts —— 发现执行引擎五阶段流水线的核心src/always-on/runtime/AlwaysOnRuntime.ts —— 单项目运行时生命周期 Ownersrc/always-on/runtime/AlwaysOnManager.ts —— 多项目协调器src/always-on/config/parseAlwaysOnConfig.ts —— 配置解析与默认值src/always-on/workspace/GitWorktreeProvider.ts / SnapshotCopyProvider.ts —— 两种工作区隔离策略src/always-on/storage/ —— 状态、计划、周期、报告、事件存储多项目时由AlwaysOnManager统一协调它为每个启用的项目各建一个AlwaysOnRuntime同时共享同一套运行上下文注册表、会话配置覆盖和工具集保证工具按会话键跨项目可查、Gateway 只看到一组工具定义。参见 AlwaysOnManager 构造逻辑。发现调度DiscoveryScheduler 如何定时触发调度器是整个后台任务的「心跳」。它维护一个定时器按配置的tickIntervalMinutes默认 5 分钟反复tick()每次 tick 先读取状态、列出新鲜的通道租约、检查锁然后交给闸门判定。闸门通过则抢锁并触发DiscoveryFire.run()。一次 tick 执行完才会排下一次避免重叠。关键方法是scheduleNextTick与tick。启动时还会调用maybeRestoreDormancy若上次处于「休眠」状态就直接挂起信号监听等待唤醒。信号监听SignalWatcher 如何感知项目变化当项目「安静无变化」时调度器会进入休眠避免空转。此时SignalWatcher登场它用fs.watch({ recursive: true })递归监听项目目录配合2 秒去抖等文件活动平息后只触发一次信号从而把调度器「叫醒」。它有两个精巧细节忽略无关路径内置 ignore-glob 会过滤掉.git/、node_modules/、.pilotdeck/以及 Always-on 自身的状态目录防止自我触发自我激励。轻量 glob 转正则内置compileGlob支持**/、*、?等 gitignore 风格语法。收到信号后的处理见handleSignal清除休眠标记、停掉监听器、重置定时器让下一次 tick 尽快到来。信号监听的入口是ensureDormancyWatcher。平台差异提示macOS/Windows 原生支持递归监听Linux 仅挂载根目录深层变更可能被漏掉后续可叠加轮询兜底。五道闸门DiscoveryGates 拦截逻辑每次 tick 都会调用纯函数evaluateAlwaysOnDiscoveryGates按固定顺序判定第一个不通过的闸门胜出顺序闸门原因含义1project_disabled该项目未启用 Always-on2project_missing项目目录不存在3dormant_no_signal处于休眠且无信号唤醒4agent_busy用户会话正在跑或存在忙碌租约5recent_user_msg最近几分钟内有用户消息先让位6cooldown距上次完成尚在冷却期7daily_budget今日执行次数已达预算上限8lock_busy已有实例持有发现锁全部通过后才放行另外在调度器里还会检查cycle_full当前工作周期计划数已达上限作为补充拦截见 tick 内 cycle_full 判定。这套「反向信号」设计让租约列表只在「存在忙碌/近期租约」时阻挡空列表永远不阻挡。五阶段流水线从发现到落地的 DiscoveryFire真正干活的是DiscoveryFire每个阶段都通过 Gateway 的submitTurn/closeSession与 Agent 会话交互行为等同于普通通道适配器。五个阶段各有独立会话键见 通道定义发现Discovery汇总最近聊天记录摘要 已有计划让 Agent 调用计划工具产出至多一个新计划。入口见run。工作区Workspace通过ensureActiveWorkCycle准备/复用隔离工作区。执行Execution在工作区里让 Agent 按计划自动改代码并注入deny 规则禁止git push/git remote见ALWAYS_ON_EXECUTION_DENY_RULES。报告Report产出 Markdown 报告失败时自动降级写兜底报告。落地Apply可选阶段生成 diff 并申请把改动应用到真实项目。每个阶段都会emitEvent写入事件存储并上报遥测保证全程可追溯。无人值守会话还会统一排除交互类工具canPrompt: false。工作区隔离Git Worktree 与快照两种策略后台任务绝不能直接污染你的工作目录。WorkspaceProviderRegistry注册了两套策略Git WorktreeGitWorktreeProvider在独立 worktree/分支上改代码天然隔离。快照复制SnapshotCopyProvider复制一份项目快照上限默认 1 GiB后操作。ensureActiveWorkCycle是「单活动周期 单工作区」的唯一事实来源已有活动周期且工作区还在磁盘上就复用否则新建。见 ensureActiveWorkCycle。存储层与事件追踪如何保证可追溯所有状态都以文件形式落盘在项目下便于审查DiscoveryStateStore —— 休眠/上次完成时间/当日次数DiscoveryPlanStore —— 计划索引与 MarkdownWorkCycleStore —— 工作周期DiscoveryReportStore —— 报告AlwaysOnEventStore —— 阶段事件流左侧文件面板里这些状态目录清晰可见配合右侧助手即可核对后台任务每一步配置项速查关键默认值一览默认配置由defaultAlwaysOnConfig给出trigger各字段含义如下字段默认值作用tickIntervalMinutes5定时触发间隔分钟最小 1 分钟cooldownMinutes60两次执行间冷却dailyBudget4每日执行次数预算heartbeatStaleSeconds90租约心跳过期秒数recentUserMsgMinutes5近期用户消息让位窗口preferChannelweb优先使用的通道其他常量DEFAULT_MAX_PLANS_PER_CYCLE 3每周期最多计划数、DEFAULT_SNAPSHOT_MAX_BYTES 1 GiB快照上限、DEFAULT_IGNORE_GLOBS监听忽略目录。小结三者如何协同发现调度DiscoveryScheduler负责「什么时候干」——定时 tick、休眠、抢锁。信号监听SignalWatcher负责「要不要提前干」——项目一变就把调度器唤醒。后台任务DiscoveryFire 闸门 工作区负责「怎么干、干多少」——五阶段流水线 多道保护。三者层层配合让 PilotDeck 的 Always-on 既能主动发现改进点又始终受预算、冷却与锁的约束真正做到「无人值守也安全」。想动手验证可从 src/always-on/runtime/DiscoveryScheduler.ts 的tick()单步执行入手是最直观的入口。【免费下载链接】PilotDeckTask-oriented AI Agent productivity platform项目地址: https://gitcode.com/OpenBMB/PilotDeck创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
四足机器人楼梯导航:FAST-LIO建图与三维规划协同方案 1. 这套系统到底在解决什么问题?——从“爬楼梯”这个具体痛点说起四足机器人能走路、能奔跑、能翻越障碍,但真正卡住绝大多数团队的,是“跨楼层”这件事。不是平地绕障,不是单层室内探索,而是从一楼大厅走到二楼办公室… · 2026/9/26 5:47:22
英辰朗迪GEO知识库第137期:引用数上升也可能是负债,上下文与情感才是关键 【本期摘要】 过去大半年,行业几乎只盯着一个数字:品牌被 AI 引用了多少次。但 2026 年 9 月的研究把这个 KPI 戳破了——引用次数会骗人。Kumar 团队的十万级样本发现,品牌在答案里「被正面还是负面呈现」的翻转率,是「有没有被提… · 2026/9/26 5:47:22
C++栈与队列深度解析:从手写底层到标准库实战 栈和队列是C初阶学习中最容易被"低估"的两个容器。很多人在学完数组、vector、list之后,觉得栈和队列不过是"受限的表",稍微包装一下而已,于是草草跳过。真正到了写OJ题、参与项目、看开源代码的时候,才发现自… · 2026/9/26 5:47:22
煤层气抽采流固耦合模拟:从机理到Comsol实操 煤层气抽采,表面上是打孔抽吸,背后其实是煤体应力场和气体渗流场之间的一场拉锯战。两年前我接到一个任务,需要用数值模拟预测某矿抽采钻孔的产气量,当时我手里主要用的工具就是Comsol Multiphysics。第一次尝试时,我把… · 2026/9/26 6:18:31
2026神秘顾客项目AI监测选型与落地指南 马上要铺开2026年度神秘顾客项目规划的团队,最近应该都在做同一件事:把过去一年的暗访数据翻出来,重新梳理服务商名录。这两年圈子里变化最大的一句话就是“神秘顾客也要AI化”,甲方乙方都在聊AI监测能力,可真到选型的… · 2026/9/26 6:18:31
Python+Vue全栈开发:超市购物管理系统搭建实战(Django/Flask) 做Python后端开发这些年,经常有人问我同一个问题:想做一个能跑起来、能展示、能拿去答辩或者落地的管理系统项目,前端后端到底怎么搭才不会翻车?今天把最近整理的一套天天便利超市购物管理系统拿出来聊一聊。这个项目用Python做后… · 2026/9/26 6:18:31
Flask实现STS临时凭证获取:OSS安全直传方案详解 1. 为什么不用 AccessKey 直传,而是折腾一套 STS先说结论:如果你的 Flask 服务端只负责把文件上传到 OSS,并且这个服务只给你自己的后台用,那直接用阿里云主账号或者 RAM 用户的 AccessKey 写死在代码里,确实能跑&… · 2026/9/26 6:18:31
Java进阶知识思维导图:从JVM到并发,把零碎考点串成一张能打的网 从大厂面试聊起。这两天和组里几个准备跳槽的同事聊天,发现一个特别普遍的现象:大家基础语法没问题,框架也能用,CRUD写得很溜,可一旦被问到 HashMap 扩容、AQS 的状态流转、ClassLoader 的双亲委派,就明显接… · 2026/9/26 6:18:31
WorkBuddy实操:用RAG打造个人知识库的完整指南 如果你和我一样,每天都在微信、飞书、备忘录、邮件里留下大量对话和碎片记录,一个月后想找回某句话却发现哪都搜不到,那WorkBuddy这个工具值得你认真研究一次。它本质上是一个自带知识库能力的AI工作台,能把聊天记录、文档输出、网… · 2026/9/26 6:18:25
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46