Web 控制台架构
最近整理:2026-10-10(由英文版翻译,并删除已过期的“5 秒安静窗口”和“1.5 秒轮询”描述)。使用说明见 Web 控制台,调度行为见调度器。
进程与职责边界
前端是无构建步骤的静态 HTML/CSS/JavaScript。agt web(crates/agt-console/)从程序内提供静态资源,并把白名单内的 HTTP API 适配为 Rust CLI 命令。资源、权限、消息和执行逻辑都在 Rust 中。
Web 启动时准备所选 home 和操作者身份,并启动一个 Rust watch 协调者;如果该 home 已有其他协调者,则进入待命。每个 home 只有一个活跃协调者,默认最多同时派发 3 个任务,每个身份跨会话同时只处理一个任务。自动消息执行都经过这个协调者。
Web 服务不持有串行回复队列。消息、绑定、Run 和调度状态都持久化在 SQLite 中。关闭拥有协调者的 Web 进程会中断其调度,其他待命进程可以接管。已授权的等待中工作可以在重启后继续;含义不明确的回复/工具执行需要人工检查。
HTTP 工作流
- 带
auto_reply的 message_send 成功后,通过schedule start --message授权返回的那条消息。重复发送会重复幂等授权,覆盖“消息已创建但调度失败”的窗口。 - 回复控制会检查操作者的成员身份,然后调用
schedule start/resume/pause/end。start/resume 需要确认模型费用。 - 活动接口合并调度状态和脱敏的 Run 元数据,不返回 Run 输入、输出或原始错误。指定会话时,额外返回该会话活跃调度 Run 的有界草稿,会检查查看者成员资格、任务版本和讨论状态;子 Run、无效或已终止的任务不返回草稿。
- 个人的隐藏/显示只改变操作者自己的会话入口。退出群聊保留成员可见区间内的历史;解散仅群主可执行且为终态。这些操作使用固定操作者。旧的软删除/恢复接口为兼容保留,Web 的“移除入口”不会调用它。
- 启动时持久化人类工作空间负责人。Agent 创建的群自动加入负责人,创建者成为管理员。Agent 观察是独立的只读页面,见会话生命周期。
实时更新
浏览器通过 SSE 接收变化:Web 服务为每个订阅启动一个带固定身份的 agt events watch 进程,把 JSONL 桥接为 SSE,同源且需 X-AGT-Token 鉴权,最多 8 个订阅。浏览器合并变化后刷新,断线按游标重连,切换身份时撤销旧订阅。事件只是“有变化”的提示,正文仍从查询接口读取。
界面行为
发送触发的自动回复默认开启,并提示费用。人类请求可在不同身份间并发执行。未被提及的同伴消息可能经过参与/沉默/等待判断;明确提及的同伴跳过判断。响应策略和回复额度始终是硬门槛。同一会话可同时进行多个判断;自主回复在持久的 ready_to_reply 状态排队,依次开始。新的授权人类输入重置每个身份的 100 次回复额度。模型调用次数只用于诊断。定时/安静等待和就绪回复不占执行线程。
简洁模式按会话和身份分组展示状态:会话摘要加可展开的成员行,区分当前执行状态与最近记录的参与决定。公开决策说明默认预览两行,展开后显示全文、时间和唤醒条件;成员节点按 key 渲染,刷新后保留展开状态与键盘焦点。旧决定在出现新消息或重新判断后标注为历史;不会从沉默的执行结果反推缺失的决定。调试模式(存在浏览器本地)额外显示原因码、唤醒时间、领取/回复计数和 Run 调用诊断;它只改变展示,不改变授权或日志采集,也不暴露模型私有推理。
用户先选择身份,再看该身份的会话列表,再进入会话。只有启动时的操作者可以写入,其他身份只读观察。删除在列表行上操作,带确认和撤销。暂停让当前回复完成;结束会停止后续回复和提醒。已派发的外部 MCP 请求不能保证停止。
生成预览
agt-inference/model_stream.rs 拼装 Chat SSE 增量或 Responses 的 completed 响应,只有校验完整的助手消息才进入工具循环。重试会重置预览;流中断会重试模型请求,但不重放工具。progress.rs 在 Run 记录上维护一份有界快照:文本增量 300ms 节流,Run 结束时清除;只包含阶段、尝试次数、时间戳、任务/版本归属和最近 4 KiB 助手文本,推理事件只显示为阶段。压缩和参与判断的模型输出不预览。
联系人搜索与会话菜单
联系人搜索读取启动时下发的身份目录(名称/ID);会话搜索过滤当前列表。点击联系人复用 direct_create、个人 show 和已有的归档恢复流程,不调用模型也不发消息。只有固定操作者可以发起会话,Agent 观察保持只读。
会话右键菜单、Shift+F10 和可见的省略号按钮共用同一菜单:打开、信息、确认后的个人隐藏,含焦点恢复和视口边界处理。退群/解散仍在群信息抽屉中。菜单不绕过服务端权限。
整理 Agent 会话
可信本机控制台提供 /api/agent-entries,一次确认 1–100 个会话 ID,只支持隐藏/显示。目标必须是 Agent 身份;操作复用其参与者范围的 conversation_hide/show,不需要管理权限,并逐项报告成功或失败。观察页提供显式选择模式和“已隐藏”筛选;不支持代发消息、群生命周期变更、执行控制或删除记录。
安全与支持范围
仅监听 IPv4 回环地址,严格校验 Host/Origin,每次启动生成令牌,限制 JSON 请求大小,操作白名单,以参数数组调用 CLI(不经过 shell)。这是可信主机的管理控制台,不是多用户认证系统或公网多租户服务。令牌可以管理资源、观察私密会话,绝不能交给不可信的客户端。
界面支持:资源与 Agent 创建、可读的资源详情、确认后的非级联资源删除、绑定更新/解绑、私聊/群聊、可恢复的会话删除。资源删除复用服务端的精确计划确认与引用/托管保护。直接输入的 Provider 密钥通过单个子进程的环境变量传递,从不出现在 CLI 参数中;资源读取始终脱敏。Agent 编辑可修改 Model/Prompt 引用、描述和 Skill/MCP 挂载,并可勾选内置工具组。成员变更和归档仍通过 CLI 操作。没有游戏专用层或工作流 DSL。