Overnight 模式
过夜模式
相关源文件
以下文件为本维基页面的生成提供了上下文:
crates/jcode-overnight-core/Cargo.tomlcrates/jcode-overnight-core/src/helper_tests.rscrates/jcode-overnight-core/src/lib.rscrates/jcode-overnight-core/src/prompts.rsdocs/AWS_BEDROCK_PROVIDER.mdsrc/overnight.rssrc/provider/bedrock.rssrc/subscription_catalog.rssrc/tui/app/commands_overnight.rssrc/tui/app/inline_interactive.rssrc/tui/app/tests/state_model_poke_03.rssrc/tui/app/tests/support_failover/part_01.rssrc/tui/app/tests/support_failover/part_02.rssrc/tui/ui_inline_interactive.rs
过夜模式是一个长时间运行的自主代理系统,旨在用户离线时执行复杂的多步骤工程任务。它将代理从被动响应的聊天助手转变为主动工作的自主执行者,能够管理自己的子会话、通过结构化的"任务卡片"跟踪进度,并生成一份全面的晨间报告供用户审阅。
核心组件与关系
该系统基于协调器-工作者架构构建。一个中央协调器会话负责管理高层任务,而各个工作者代理则被派发来执行具体任务。
系统架构图
来源:src/overnight.rs:54-167, src/tui/app/commands_overnight.rs:15-70, crates/jcode-overnight-core/src/lib.rs:47-82
过夜运行生命周期
过夜运行通过 /overnight start 斜杠命令启动。系统会创建一个 OvernightManifest 来跟踪元数据,包括目标唤醒时间和资源限制。
- 初始化:系统会捕获一个"预检"快照,其中包含 Git 状态、资源使用情况(内存/CPU/电池)以及大语言模型(LLM)使用量预估
crates/jcode-overnight-core/src/lib.rs:168-173。 - 执行:协调器在可见或不可见的会话中运行,将提示链加入队列,引导代理完成任务的识别、执行和验证
src/overnight.rs:150-161。 - 状态机:运行过程会经历
OvernightRunStatus中定义的状态:Running(运行中)、CancelRequested(已请求取消)、Completed(已完成)或Failed(失败)crates/jcode-overnight-core/src/lib.rs:26-33。 - 资源采样:系统会每 5 分钟定期采样系统健康状态,以确保代理不会耗尽磁盘空间或电池电量
src/overnight.rs:30-31。
有关命令集和状态转换的详细信息,请参阅 过夜运行生命周期。
来源:src/overnight.rs:54-127, crates/jcode-overnight-core/src/lib.rs:26-33
进度跟踪与结构化输出
代理使用任务卡片来跟踪其进度。这些是结构化的 JSON 对象,代表各个工作单元,并根据其当前状态进行分类(例如 in_progress(进行中)、validated(已验证)、blocked(受阻))。
| 实体 | 作用 |
|---|---|
OvernightTaskCard | 存储问题描述、变更证据和验证结果 crates/jcode-overnight-core/src/lib.rs:204-225。 |
OvernightEvent | 重要操作的日志记录条目(例如 task_completed(任务完成)、handoff_requested(请求交接))crates/jcode-overnight-core/src/lib.rs:85-96。 |
OvernightProgressCard | 针对 UI 优化的运行健康状态和完成百分比摘要 crates/jcode-overnight-core/src/lib.rs:248-264。 |
来源:crates/jcode-overnight-core/src/lib.rs:204-264
TUI 集成与"自动轮询"
由于大语言模型(LLM)提供商在长时间运行的会话中可能会超时或返回空响应,TUI 实现了一种自动轮询机制。
- OvernightAutoPokeState:跟踪 TUI 在代理停滞时自动提示其继续的次数
src/tui/app/commands_overnight.rs:11-13。 - 停滞检测:如果代理在
target_wake_at时间之前停止响应,TUI 会发送一个"继续提示"来保持运行src/tui/app/commands_overnight.rs:11-13。 - 视觉反馈:TUI 会在侧边栏中渲染一个持久的进度卡片,显示当前任务、内存使用情况和预计完成时间
src/tui/app/commands_overnight.rs:49-50。
有关报告引擎和轮询限制的详细信息,请参阅 过夜模式 TUI 集成与报告。
TUI 交互图
来源:src/tui/app/commands_overnight.rs:11-13, src/overnight.rs:132-147
晨间报告与审阅
在运行完成或到达唤醒时间后,系统会生成一份晨间报告。这是一个基于 HTML 的审阅页面(review.html),提供以下内容:
- 执行摘要:任务状态和高级别成果。
- 任务画廊:交互式卡片,显示每次变更的"之前"和"之后"快照。
- 验证日志:变更已通过测试的证据(例如测试输出、编译器日志)。
- 使用审计:最终的 Token 使用量和成本明细。
该报告可通过 /overnight review 命令访问 src/tui/app/commands_overnight.rs:172-180。
来源:src/overnight.rs:64-72, crates/jcode-overnight-core/src/lib.rs:25-28