后台主动模式与安全系统(中文译文)
原始 DeepWiki 页面:https://deepwiki.com/1jehuang/jcode/8-ambient-mode-and-safety-system
翻译时间:2026-05-27T08:45:21.030Z
翻译模型:deepseek-chat
原文字符数:6808
项目:jcode (jcode)
---
环境模式与安全系统
相关源文件
以下文件被用作生成此 Wiki 页面的上下文:
docs/AMBIENT_MODE.mddocs/MEMORY_ARCHITECTURE.mddocs/MEMORY_BUDGET.mddocs/SAFETY_SYSTEM.mdsrc/ambient.rssrc/ambient_runner.rssrc/channel.rssrc/notifications.rssrc/safety.rssrc/tool/ambient.rstests/e2e/main.rs
环境模式是一种主动的后台执行状态,允许 jcode 在无需用户直接监督的情况下自主执行"园艺"、"侦察"和"工作"任务 docs/AMBIENT_MODE.md:6-16。为确保这些自主操作始终处于人类控制之下,系统由安全系统进行管理,该系统将操作分类为不同层级,并管理权限请求/通知生命周期 docs/SAFETY_SYSTEM.md:6-17。
系统总览
后台运行器、代理和安全控制之间的关系围绕 AmbientRunnerHandle 和 SafetySystem 展开。
- 环境模式:一个管理自主代理周期的后台循环。它使用
AdaptiveScheduler根据资源可用性和用户活动确定唤醒间隔src/ambient.rs:12。 - 安全系统:一个拦截工具调用的分类引擎。它判断操作是
AutoAllowed(第 1 层)还是RequiresPermission(第 2 层)src/safety.rs:15-18。 - 通知分发器:一个多通道系统(ntfy.sh、电子邮件、桌面通知、Telegram、Discord),用于在后台代理需要干预或完成一个周期时提醒用户
src/notifications.rs:3-8、src/channel.rs:25-57。
自然语言到代码实体的映射
下图将文档中描述的"环境周期"概念桥接到实现该生命周期的具体 Rust 实体。
环境周期执行桥接
graph TD
subgraph "自然语言概念"
GARDEN["园艺(内存维护)"]
SCOUT["侦察(上下文分析)"]
WORK["主动工作(代码变更)"]
end
subgraph "代码实体空间(src/)"
AR["AmbientRunnerHandle"]
AS["AmbientStatus"]
ACR["AmbientCycleResult"]
EACT["EndAmbientCycleTool"]
end
subgraph "逻辑实现"
RL["run_loop in src/ambient/runner.rs"]
SS["SafetySystem in src/safety.rs"]
end
AR -->|管理| AS
RL -->|执行| GARDEN
RL -->|执行| SCOUT
RL -->|执行| WORK
WORK -->|被拦截| SS
EACT -->|完成| ACR
ACR -->|报告| AR
来源:src/ambient.rs:69-83、src/ambient.rs:147-160、src/tool/ambient.rs:108-146、docs/AMBIENT_MODE.md:92-143
---
环境运行器与调度器
AmbientRunnerHandle 是管理后台操作的主要接口。它维护 AmbientStatus(空闲、运行中、已调度、暂停或禁用),并与 AdaptiveScheduler 协调以唤醒代理 src/ambient.rs:69-83。
关键组件:
AmbientRunnerHandle:提供对后台状态的线程安全访问,允许 TUI 和服务器触发或启动周期src/ambient_runner.rs:3-4。VisibleCycleContext:促进后台环境进程与可见 TUI 会话之间的"交接",将状态持久化到~/.jcode/ambient/visible_cycle.jsonsrc/ambient.rs:35-46。ScheduledItem:优先级队列(低、正常、高)中的持久化任务,定义代理在唤醒时应执行的操作,并通过ScheduleTarget指定结果交付位置src/ambient.rs:113-133。
关于资源感知调度和基于 EWMA 的间隔计算的详细信息,请参见 环境运行器与调度器。
来源:src/ambient.rs:35-133、src/ambient_runner.rs:1-4
---
安全系统与通知
安全系统充当 Agent 的守门员。在执行工具之前,系统使用 classify 方法评估其 ActionTier src/safety.rs:157-164。
操作分类层级:
| 层级 | 分类 | 示例 |
|---|---|---|
| 第 1 层 | AutoAllowed | read、glob、ls、memory、codesearch、grep src/safety.rs:110-122。 |
| 第 2 层 | RequiresPermission | 不在 AUTO_ALLOWED 白名单中的任何操作,例如代码修改、PR 创建或外部通信 src/safety.rs:162-164。 |
权限生命周期:
当尝试执行第 2 层操作时,代理会调用 request_permission 工具。这会创建一个 PermissionRequest,并将其添加到 SafetySystem 的审核队列中 src/safety.rs:167-179。然后,NotificationDispatcher 通过配置的通道(如 ntfy.sh、桌面通知或使用 jcode-notify-email crate 的 SMTP 电子邮件)发送警报 src/notifications.rs:105-130。它还支持通过 Telegram 和 Discord 进行交互式回复循环,以实现远程审批 src/channel.rs:74-83。
安全请求流程
sequenceDiagram
participant Agent as "代理(src/agent/)"
participant Safety as "安全系统(src/safety.rs)"
participant Queue as "审核队列(src/safety.rs)"
participant Notify as "通知分发器(src/notifications.rs)"
participant Chan as "消息通道(src/channel.rs)"
Agent->>Safety: classify(action_name)
Safety-->>Agent: ActionTier::RequiresPermission
Agent->>Safety: request_permission(PermissionRequest)
Safety->>Queue: 推入 Mutex<Vec<PermissionRequest>>
Safety->>Notify: dispatch_permission_request(action, desc, id)
Notify->>Chan: send_all(text)
Chan-->>用户: ntfy / 电子邮件 / Telegram / Discord
用户->>Chan: 回复 "approve req_123"
Chan->>Safety: record_permission_via_file(request_id, approved)
Safety-->>Agent: PermissionResult::Approved
来源:src/safety.rs:128-179、src/notifications.rs:48-130、src/channel.rs:142-205、docs/SAFETY_SYSTEM.md:153-187
关于分类规则、审核队列和通知通道配置的详细信息,请参见 安全系统与通知。
---