luminOS:基于 Linux 的 AI 操作系统完整设计方案
| 项 | 内容 |
|---|
| 版本 | v1.4 |
| 文档性质 | 工程目录唯一正式设计真源 |
| 产品名称 | luminOS(为 AI Agent 设计的 AI 操作系统) |
| 内核底座 | Linux 上游 LTS(发行版级用户态系统) |
| 核心命题 | 系统自带 AI 引擎与 Agent;桌面应用无论是否提供 AI 接口,均可被操作系统级 DCP 操控 |
| 可行性原则 | 建立在 AT-SPI、Wayland/Portal、D-Bus、cgroup/LSM、现有推理运行时之上;模型不进内核;不依赖厂商私有 AI API;不以逆向业务协议为主路径 |
实现写法约定(第 4 章每项统一包含): 需求目标 · 模块/进程 · 关键接口或数据 · 依赖 · 失败与降级 · 验收要点。
目录
- 产品定义与边界
- 总体架构
- 功能总览(完整清单)
- 功能需求与实现方法(逐项细化)
- 关键子系统:DCP 桌面操控平面
- 安全、隐私与权限模型
- 兼容、发行与硬件
- 非功能需求与验收
- 工程目录与组件映射
- 分期路线图
- 明确不做的事项
- 术语表
- 远程控制协议 RCP(网络与串口)
- 总结
1. 产品定义与边界
1.1 是什么
luminOS 是一套面向 AI Agent 设计的 AI 操作系统,以 Linux 内核 为底座。它不是外挂在桌面上的聊天机器人,而是让 Agent 能够使用这台电脑:在常规 Linux 桌面之上内置:
- AI 引擎(本地推理 + 可选云端 + RAG + OCR/VLM + 语音可选)
- 系统 Agent Runtime(规划、工具、确认、技能、熔断)
- 桌面操控平面 DCP(无 AI 接口应用也可被系统级操控)
- 统一能力总线(D-Bus / Socket / 本地 MCP·HTTP,同一策略引擎)
- 完整发行能力(ISO、安装器、商店、更新回滚、硬件矩阵)
- 运维、无障碍增强、调度自动化、企业策略 等桌面 OS 应有配套能力
- 远程控制协议 RCP:经网络或串口,用同一套报文控制桌面应用与系统(仍受权限模型约束)
应用默认 零改造 即可被 Agent 操作;清单/Intent 仅为增强。
1.2 核心承诺
| 承诺 | 含义 |
|---|
| OS 提供操控能力 | 无 AI 接口也可被 DCP 尝试操控 |
| Linux 应用可装 | 基线内 deb / Flatpak / 原生 ELF |
| 自带 Agent 与 AI 套件 | 登录即用 |
| 安全可控 | 分级确认、审计、可撤销 |
| 失败可解释 | 输出通道、原因码、证据 |
| 可外接大脑 | BYO Model / BYO Agent,执行仍在本机 DCP |
1.3 不是什么 / 设计铁律
- 不做内核内大模型;不做应用强制改造;不做验证码/DRM 绕过;不以协议破解为主路径。
- 铁律: 特权收拢 · 语义优先视觉兜底 · 窗口作用域 · 有断言才算能力 · 少改内核。
2. 总体架构
2.1 分层
入口层(召唤/右键/语音/通知/CLI/SDK/深链)
→ Agent Supervisor(规划/权限/预算/熔断/技能)
→ AI Engine(路由/推理/RAG/OCR/VLM)
→ 能力总线(D-Bus · Socket · MCP/HTTP,同一 Policy Engine)
→ DCP(Discovery · Fusion A/B/C · Actuation · Assert · Profile)
→ 桌面会话(Wayland · XWayland · Portal · IME · AT-SPI)
→ 系统服务(APT/Flatpak · 商店 · 密钥 · 更新 · 调度 · 策略)
→ Linux 内核(LTS · cgroup · LSM/BPF · DRM · namespaces)
2.2 核心进程
| 进程/组件 | 职责 | 生命周期 |
|---|
dcpd | 桌面操控 | 每图形会话 --user |
agentd | Agent Supervisor + 工具总线 | 同上 |
ai-engined | 模型/OCR/路由 | 按需或常驻(cgroup 限) |
aios-policy | 权限/确认/审计写入 | 随会话或系统 |
aios-store-daemon | 商店元数据/技能包 | 系统服务 |
| compositor | 窗口/坐标/损伤事件 | 会话 |
| AI 控制中心 | GUI 设置与任务 UI | 应用 |
2.3 典型控制流
Context Packet + 用户目标
→ agentd:意图/计划(可编辑)
→ policy:风险分级与确认
→ tools:dcp.* / fs.* / notify.* / pkg.*
→ dcpd:选通道 → capability → 执行 → 断言
→ audit + timeline → 可选 skill.save
3. 功能总览(完整清单)
A. 系统底座与发行
| ID | 功能 |
|---|
| A1 | Linux LTS 内核与硬件抽象 |
| A2 | live ISO 与安装器 |
| A3 | 签名更新与回滚 |
| A4 | 账户、会话、密钥环 |
| A5 | 电源/多屏/音频/蓝牙/打印等桌面基础 |
| A6 | 恢复分区与引导急救环境 |
| A7 | 安全启动与镜像签名链(可选开启) |
B. 桌面环境
| ID | 功能 |
|---|
| B1 | 原生 Wayland 会话 |
| B2 | XWayland 兼容 |
| B3 | 窗口/工作区/通知/设置 |
| B4 | 自带应用套件 |
| B5 | 输入法一等公民 |
| B6 | AT-SPI2 默认启用 |
| B7 | 夜间模式/护眼与会话主题(含 AI UI 适配) |
| B8 | 多指针/无障碍缩放与高对比 |
C. 应用生态与兼容
| ID | 功能 |
|---|
| C1 | deb 官方仓库 |
| C2 | Flatpak + 认证 runtime |
| C3 | 基线 ELF / 条件 AppImage |
| C4 | 兼容矩阵与商店标签 |
| C5 | 可选 aios.manifest 语义清单 |
| C6 | 应用运行画像采集(本机匿名质量信号,可关) |
D. AI 引擎
| ID | 功能 |
|---|
| D1 | 本地模型运行时与后端插件 |
| D2 | 云端模型路由 |
| D3 | 模型包管理(签名/热切换/回滚) |
| D4 | RAG 与分层记忆 |
| D5 | OCR / 版面 / 轻量 VLM |
| D6 | 语音 ASR/TTS(可选) |
| D7 | 离线降级 |
| D8 | BYO Model |
| D9 | 提示注入防护与工具输出隔离 |
| D10 | 模型评测与影子流量 |
E. Agent 运行时
| ID | 功能 |
|---|
| E1 | 系统默认 Agent |
| E2 | 意图/槽位/规划 |
| E3 | 工具总线与沙箱工具 |
| E4 | Plan-first 可编辑计划 |
| E5 | 会话信任条与分级确认 |
| E6 | 技能库 |
| E7 | 时间线/重试/紧急停止 |
| E8 | 示范教学 → 技能草稿 |
| E9 | BYO Agent |
| E10 | 主动建议(默关) |
| E11 | 多 Agent 协作总线(同一策略下的角色分工) |
| E12 | 任务预算(步数/时间/费用/Token) |
F. DCP 桌面操控平面
| ID | 功能 |
|---|
| F1 | 目标发现 |
| F2 | Mode-A 语义操控 |
| F3 | Mode-B 协议操控 |
| F4 | Mode-C 合成操控 |
| F5 | 三通道融合与降级 |
| F6 | 操控事务 |
| F7 | 客户区坐标/HiDPI/多屏 |
| F8 | IME commit |
| F9 | 应用画像包热更新 |
| F10 | 系统 Intent 层 |
| F11 | 通知只读感知 |
| F12 | 拖拽/多步手势与剪贴板中转 |
| F13 | 虚拟列表/懒加载探测策略 |
| F14 | 元素稳定 ID 与重定位 |
| F15 | 工具包镜像 Widget Mirror(动态库内控件树) |
G. 便利性入口与上下文
| ID | 功能 |
|---|
| G1 | 全局召唤 |
| G2 | 右键交给 AI |
| G3 | 对本窗口… |
| G4 | 通知用 AI 处理 |
| G5 | Context Packet |
| G6 | 歧义选择器 |
| G7 | Share / aios:// 深链 |
| G8 | 智能剪贴板(隐私门控) |
| G9 | 截图即问(框选区域进上下文) |
H. 接入与开发者
| ID | 功能 |
|---|
| H1 | D-Bus API |
| H2 | Unix Socket JSON-RPC |
| H3 | 本地 OpenAI 兼容 HTTP |
| H4 | 系统 MCP Server |
| H5 | aios CLI |
| H6 | Python / TypeScript SDK |
| H7 | Flatpak AI Portal |
| H8 | L0/L1/L2 三级接入 |
| H9 | 技能包格式与签名 |
| H10 | DCP Fixture 与 CI 测试床 |
| H11 | 开发者模式与详细原因码 |
I. 安全与治理
| ID | 功能 |
|---|
| I1 | 四级风险模型 |
| I2 | 沙箱隔离栈 |
| I3 | 凭据 Broker |
| I4 | 屏幕/音频/输入分权 |
| I5 | 审计证据链 |
| I6 | 敏感界面拒自动 |
| I7 | 验证码/DRM/反自动化不绕过 |
| I8 | 家长控制/应用黑白名单(可选) |
| I9 | 远程锁止与吊销能力令牌 |
J. 可观测、性能与运维
| ID | 功能 |
|---|
| J1 | 资源守护与性能预算 |
| J2 | 结构化日志与回放 |
| J3 | 硬件探针与降级 |
| J4 | 诊断与安全模式 |
| J5 | 系统日志 AI 诊断助手 |
| J6 | 可选遥测(成功/失败原因码,无屏幕) |
K. 调度与事件自动化
| ID | 功能 |
|---|
| K1 | 定时 Agent 任务(需策略) |
| K2 | 事件触发(下载完成/U 盘插入/构建失败等) |
| K3 | 文件夹监视技能 |
L. 无障碍 AI 增强
| ID | 功能 |
|---|
| L1 | 自然语言读屏增强(基于 AT-SPI + 摘要) |
| L2 | 「描述当前屏幕/窗口」(授权截图) |
| L3 | 语音导航桌面(与 DCP 共用) |
M. 企业与多用户
| ID | 功能 |
|---|
| M1 | 系统策略包(禁用云端/禁用注入/强制审计) |
| M2 | 多用户隔离(DCP/模型按用户) |
| M3 | 访客/信息亭模式(Agent 能力裁剪) |
N. 虚拟化与工作区隔离
| ID | 功能 |
|---|
| N1 | Agent 工作区容器(高危工具默认进容器) |
| N2 | GPU/NPU 共享与配额 |
| N3 | 开发容器与 DCP 可选桥接(显式开启) |
R. 远程控制协议(网络 / 串口)
| ID | 功能 |
|---|
| R1 | 统一报文 RCP(网络与串口同一编解码) |
| R2 | TCP/TLS 传输与配对 |
| R3 | 串口传输(UART/USB-CDC) |
| R4 | 系统控制报文(电源、会话、服务、设置) |
| R5 | 应用与桌面控制报文(启动、DCP 发现/快照/动作) |
| R6 | Agent 任务报文(下发目标、进度事件、中止) |
| R7 | 会话鉴权、能力令牌与审计(不绕过 L2/L3) |
| R8 | 官方客户端 SDK 与抓包调试工具 |
4. 功能需求与实现方法(逐项细化)
A. 系统底座与发行
A1 Linux LTS 内核与硬件抽象
| 项 | 内容 |
|---|
| 需求 | 稳定硬件;为 AI/Agent 提供隔离与设备访问;禁止内核推理 |
| 模块 | linux-aios 分支(基于上游 LTS tag);CI rebase 机器人 |
| 接口 | 稳定 UAPI:/sys//proc/netlink/DRM;可选 ai.task cgroup 控制器、BPF LSM 钩子、audit tracepoint |
| 依赖 | 上游 stable;固件包;Mesa/厂商用户态 |
| 失败 | 设备探针失败 → 用户态降级 CPU;不假装加速 |
| 验收 | 认证 SKU 启动/休眠/DRM;自研补丁数有上限并能量化 |
A2 live ISO 与安装器
| 项 | 内容 |
|---|
| 需求 | 可试用、可安装(全盘/双系统/手动)、可选加密 |
| 模块 | aios-live-build;安装器(Calamares 或 d-i+preseed) |
| 接口 | 安装配置 JSON/YAML;硬件探测报告 |
| 依赖 | squashfs、grub/ukify、shim(若 Secure Boot) |
| 失败 | 驱动缺失给出可启动救援与日志 |
| 验收 | 目标硬件冷启动登录 P95 预算内;安装可复现 |
A3 签名更新与回滚
| 项 | 内容 |
|---|
| 需求 | 包级与系统镜像级更新;失败回滚 |
| 模块 | APT 签名仓;aios-update;OSTree 或 A/B 根 |
| 接口 | Update.Check/Apply/Rollback D-Bus;开机入口选择 |
| 依赖 | 仓库签名密钥、snapper/ostree |
| 失败 | 自动上一启动项;保留用户 /home |
| 验收 | 断电注入后可回滚 ≥ 约定比例 |
A4 账户、会话、密钥环
| 项 | 内容 |
|---|
| 需求 | 标准多用户;秘密不进模型 |
| 模块 | PAM、logind、aios-secretsd(或封装现有 keyring) |
| 接口 | secrets.CreateHandle(scope,ttl);Agent 只持 handle |
| 依赖 | libsecret / TPM 可选 |
| 失败 | 无 TPM 时软件密封 + 用户密码 |
| 验收 | 模型日志采样无明文密码 |
A5 桌面基础能力
| 项 | 内容 |
|---|
| 需求 | 电源、网络、声显、打印达可用桌面 |
| 模块 | NetworkManager、PipeWire、cups、bluez、power-profiles |
| 接口 | 标准 Freedesktop 接口 + 设置 GUI |
| 依赖 | 发行版既有栈 |
| 失败 | 分项降级提示 |
| 验收 | 基线硬件清单通过桌面冒烟 |
A6 恢复分区与急救环境
| 项 | 内容 |
|---|
| 需求 | 桌面损坏时可修引导、回滚、收集日志 |
| 模块 | 独立 recovery initramfs/根;aios-rescue |
| 接口 | 引导菜单「luminOS Rescue」 |
| 依赖 | A3 快照 |
| 失败 | 提供只读挂载与网络日志上传(可选) |
| 验收 | 人为破坏 /usr 后可回滚启动 |
A7 安全启动与镜像签名(可选)
| 项 | 内容 |
|---|
| 需求 | 企业场景验证引导链 |
| 模块 | shim/UKI 签名流程;文档化密钥托管 |
| 接口 | 构建流水线签名步骤 |
| 依赖 | 用户/OEM 密钥 |
| 失败 | 未启用时普通引导仍可用 |
| 验收 | 开启后篡改内核不可静默启动 |
B. 桌面环境
B1 原生 Wayland
| 项 | 内容 |
|---|
| 需求 | 默认会话 Wayland;DCP 可询窗口与坐标 |
| 模块 | aios-shell(扩展现有 compositor:如基于 wlroots/Mutter 策略二选一冻结) |
| 接口 | 私有或标准协议:aios_window_info、damage 信号;门户截图 |
| 依赖 | libwayland、xdg-desktop-portal |
| 失败 | 单应用全屏故障可重启 shell 保会话 |
| 验收 | 标准 xdg-shell 应用集通过 |
B2 XWayland
| 项 | 内容 |
|---|
| 需求 | 旧 X11 可运行;DCP 可绑定其窗口 |
| 模块 | XWayland;dcpd X11 适配器 |
| 接口 | 窗口 id 映射表 Wayland↔X |
| 依赖 | B1 |
| 失败 | 标记「兼容模式」,部分注入能力降级 |
| 验收 | 认证 X11 样本可 Mode-C |
B3 窗口/通知/设置
| 项 | 内容 |
|---|
| 需求 | 日常桌面完整;通知可转 AI |
| 模块 | shell UI;notification daemon 插件 |
| 接口 | Notifications + action=aios.handle |
| 依赖 | B1 |
| 验收 | 通知动作拉起同一 Agent Session |
B4 自带应用套件
| 项 | 内容 |
|---|
| 需求 | 文件/终端/浏览器/编辑器开箱 |
| 模块 | 精选 FOSS 打入镜像;全部进 DCP 认证集 |
| 接口 | 桌面文件;可选 L1 清单 |
| 验收 | 镜像可完成「上网+改文件+终端」无额外安装 |
B5 输入法一等公民
| 项 | 内容 |
|---|
| 需求 | Agent 中文等文本与手输等价 |
| 模块 | IBus 或 Fcitx5 标配;dcp-ime 桥 |
| 接口 | dcp.ime_commit(target, text, opts) |
| 依赖 | 焦点窗口;输入法守护 |
| 失败 | IME 不可用时降级逐键并告警「非首选」 |
| 验收 | 中文写入 GTK/Qt/常见 Electron 样本成功 |
B6 AT-SPI2 默认启用
| 项 | 内容 |
|---|
| 需求 | Mode-A 可用 |
| 模块 | at-spi2-core;会话自动拉起 |
| 接口 | 标准 AT-SPI D-Bus |
| 失败 | 单应用无树 → 记原因码转 C |
| 验收 | GTK4/Qt6 demo 树召回达标 |
B7 主题与 AI UI 适配
| 项 | 内容 |
|---|
| 需求 | 深浅色、缩放下召唤条/确认框可读 |
| 模块 | 设计令牌;控制中心随主题 |
| 验收 | 125%/150%/200% 缩放无裁切 |
B8 无障碍缩放与高对比
| 项 | 内容 |
|---|
| 需求 | 系统无障碍与 L 章 AI 增强协同 |
| 模块 | compositor magnifier;高对比主题 |
| 依赖 | B1、B6 |
| 验收 | 放大后 DCP 坐标仍正确(变换矩阵) |
C. 应用生态
C1–C3 包格式
| 项 | 内容 |
|---|
| 需求 | deb/Flatpak/基线 ELF;AppImage 条件;Snap 默认不做 |
| 模块 | APT、flatpak、aios-appimage-guard(检查 FUSE/库) |
| 接口 | 商店安装事务 API |
| 失败 | 依赖缺失给出兼容标签与修复建议(可 Agent 辅助) |
| 验收 | 官方样包安装率;跨发行版杂包不假装支持 |
C4 兼容矩阵与标签
| 项 | 内容 |
|---|
| 需求 | 用户知能否装、DCP 等级 |
| 模块 | 商店元数据服务;compat.json |
| 字段 | min_os、arch、gpu、portal、dcp_grade∈{A,mixed,C,unknown} |
| 验收 | 标签与实测夹具一致 |
C5 语义清单
| 项 | 内容 |
|---|
| 需求 | 可选增强 Mode-A/B |
| 模块 | 清单 schema 校验器;打包进 AppStream 扩展 |
| 示例字段 | automation, intents[], dangerous_actions[], a11y_hints |
| 验收 | 有清单应用 Mode-A 成功率相对无清单提升可测 |
C6 本机运行画像(可关)
| 项 | 内容 |
|---|
| 需求 | 改善本机通道选择;不默认上传屏幕 |
| 模块 | dcpd 本地 SQLite:app_id→成功率/通道 |
| 接口 | 设置「改进本机操控」开关 |
| 验收 | 关闭后无写入;开启仅本地 |
D. AI 引擎
D1 本地运行时
| 项 | 内容 |
|---|
| 需求 | 可插拔后端;启动前探针 |
| 模块 | ai-engined + backends:ORT/OpenVINO/CUDA/ROCm/Vulkan |
| 接口 | Infer(request_id, model_id, inputs, budget) |
| 失败 | 后端不满足 → CPU 量化模型或拒绝并说明 |
| 验收 | 认证 GPU/NPU/CPU 路径各至少一条绿 |
D2 云端路由
| 项 | 内容 |
|---|
| 需求 | 按隐私与难度路由 |
| 模块 | router:规则引擎 + 小模型分类 |
| 接口 | 路由决策日志(model、原因、数据级) |
| 失败 | 无网/无授权 → 本地或中止 |
| 验收 | 敏感类默认不上云(策略测试) |
D3 模型包管理
| 项 | 内容 |
|---|
| 需求 | 签名安装、热切换、回滚 |
| 模块 | modelctl;包格式 .aiosmodel |
| 内容 | weights、tokenizer、backend_req、license、sig |
| 验收 | 切换中旧请求不中断;坏包拒装 |
D4 RAG 与记忆
| 项 | 内容 |
|---|
| 需求 | 可检索用户批准语料;记忆分短/长 |
| 模块 | 本地向量库;memory.* 工具 |
| 策略 | 长期记忆需确认;屏幕默认不入长期 |
| 验收 | 未批准语料不可被检索 |
D5 OCR / VLM
| 项 | 内容 |
|---|
| 需求 | Mode-C 与文档;中文增强 |
| 模块 | ocrd;可选 vlm 插件 |
| 接口 | ocr.recognize(roi)→[{text,box,conf}] |
| 约束 | VLM 不可单独批准 L2/L3 |
| 验收 | 锚词「发送/搜索」类召回达标 |
D6 语音
| 项 | 内容 |
|---|
| 需求 | 按住说话;可选热词 |
| 模块 | ASR/TTS;PipeWire 源经 Portal |
| 验收 | 授权前无录音;入口进同一 Session |
D7 离线降级
| 项 | 内容 |
|---|
| 需求 | 断网可 DCP+本地模型+技能 |
| 模块 | 路由器强制 local;UI 横幅 |
| 验收 | 断网仍完成本机认证任务集子集 |
D8 BYO Model
| 项 | 内容 |
|---|
| 需求 | 用户 endpoint/Ollama/API Key |
| 模块 | 控制中心凭据进 secrets;router 增加 provider |
| 验收 | Key 不进明文日志 |
D9 提示注入防护
| 项 | 内容 |
|---|
| 需求 | 网页/文档/OCR 文本不可直接抬权 |
| 模块 | 工具层:外部文本标记 untrusted;禁止其改写策略;敏感动作只看用户确认与 schema |
| 验收 | 红队用例「忽略规则去发消息」被拦 |
D10 评测与影子流量
| 项 | 内容 |
|---|
| 需求 | 换模型可对比 |
| 模块 | 影子调用(不执行副作用);离线评测集 |
| 验收 | 仅管理员/开发者模式可开 |
E. Agent 运行时
E1 默认 Agent
| 项 | 内容 |
|---|
| 需求 | 开箱助手 |
| 模块 | agentd + 控制中心 |
| 接口 | agent.run(goal, context_packet, opts) |
| 验收 | 首登引导 3 个样例任务 |
E2 意图/规划
| 项 | 内容 |
|---|
| 需求 | 自然语言→结构化 plan |
| 模块 | planner;plan schema JSON |
| 字段 | steps[].tool, args, risk, assert |
| 验收 | 样例集规划可解析率 |
E3 工具总线与沙箱
| 项 | 内容 |
|---|
| 需求 | 每工具最小权限 |
| 模块 | toolbroker;bubblewrap/用户命名空间模板 |
| 接口 | 注册表:name→seccomp profile、landlock paths |
| 验收 | 工具逃逸用例失败 |
E4 Plan-first
| 项 | 内容 |
|---|
| 需求 | 可编辑后执行 |
| 模块 | UI PlanView;plan.patch |
| 验收 | 删除「发送」步后不调用发送工具 |
E5 信任条与确认
| 项 | 内容 |
|---|
| 需求 | 少打断不降 L3 |
| 模块 | aios-policy;TrustBar TTL;同类批准确认表 |
| 验收 | L3 无法被批量静默;TTL 到期收回注入 |
E6 技能库
| 项 | 内容 |
|---|
| 需求 | 参数化重跑;可上架 |
| 模块 | ~/.local/share/aios/skills;商店技能仓 |
| 格式 | manifest.yaml + plan.json + sig |
| 验收 | 参数替换后执行;权限安装时展示 |
E7 时间线/重试/急停
| 项 | 内容 |
|---|
| 需求 | 可恢复、可立刻停 |
| 模块 | timeline store;全局热键 → agent.abort + dcp.freeze |
| 验收 | 急停后无后续注入事件 |
E8 示范教学
| 项 | 内容 |
|---|
| 需求 | 录制用户操作→技能草稿 |
| 模块 | dcp.record 语义事件优先;坐标仅标注 |
| 验收 | 草稿可编辑且不含明文密码字段 |
E9 BYO Agent
| 项 | 内容 |
|---|
| 需求 | 外置 Agent 用本机 DCP |
| 模块 | MCP Server(H4);token 绑定用户会话 |
| 验收 | 外置侧无法绕过确认 UI |
E10 主动建议
| 项 | 内容 |
|---|
| 需求 | 默关;限额 |
| 模块 | suggester;空闲+高置信触发 |
| 验收 | 关闭后零建议;日上限生效 |
E11 多 Agent 协作
| 项 | 内容 |
|---|
| 需求 | 规划者/执行者/检查者分工,同策略 |
| 模块 | 同一 agentd 内角色协程;共享 task_id 与审计 |
| 验收 | 检查者可否决执行者 L2+ 建议 |
E12 任务预算
| 项 | 内容 |
|---|
| 需求 | 步数/时间/费用/Token 上限 |
| 模块 | Supervisor 计数器;超限熔断 |
| 验收 | 超限停止并保留时间线 |
F. DCP(核心)
F1 目标发现
| 项 | 内容 |
|---|
| 需求 | 列出并可解析窗口/应用 |
| 模块 | dcp-discover |
| 接口 | list_targets→[{target_id,app_id,title,pid,bbox}] |
| 依赖 | compositor;/proc 凭据 |
| 验收 | 10 窗下列表正确且稳定 id |
F2 Mode-A
| 项 | 内容 |
|---|
| 需求 | AT-SPI 读写与 action |
| 模块 | dcp-a11y |
| 接口 | snapshot 树摘要;act(node_id, action) |
| 失败 | 树空→原因码 NO_TREE |
| 验收 | GTK/Qt 认证集 ≥95% |
F3 Mode-B
| 项 | 内容 |
|---|
| 需求 | D-Bus/Intent/CLI |
| 模块 | dcp-proto;intent registry |
| 接口 | invoke(intent, params) |
| 验收 | 系统文件管理器「打开路径」走协议非点击 |
F4 Mode-C
| 项 | 内容 |
|---|
| 需求 | 无树也可控可见 UI |
| 模块 | dcp-vision + dcp-input |
| 流程 | 截窗口→OCR→客户区坐标→注入→断言 |
| 约束 | 必须绑定 target;须授权 |
| 验收 | 无 a11y 自绘 demo 达尽力阈值 |
F5 融合与降级
| 项 | 内容 |
|---|
| 需求 | A≥B≥C;可解释 |
| 模块 | dcp-fusion 状态机 |
| 输出 | 每步 mode, reason, confidence |
| 验收 | 强制破坏树后自动转 C |
F6 操控事务
| 项 | 内容 |
|---|
| 需求 | 快照-动作-断言-补偿 |
| 模块 | dcp-tx |
| 数据 | Tx{pre_hash, capability, post_assert} |
| 验收 | 断言失败不继续危险步 |
F7 坐标与多屏
| 项 | 内容 |
|---|
| 需求 | DPR/多屏正确 |
| 模块 | coord 库:logical/physical/client + transform |
| 验收 | 双屏不同缩放点击误差在阈值内 |
F8 IME commit
| 项 | 内容 |
|---|
| 需求 | 见 B5;DCP 统一入口 |
| 验收 | 与 B5 共用用例 |
F9 应用画像
| 项 | 内容 |
|---|
| 需求 | 可选热更加速;无画像仍可用 |
| 模块 | profiled;签名仓 |
| 格式 | match、regions、anchors_ocr、channel_order、rate_limit、forbid |
| 验收 | 坏签名拒装;无画像 Mode-C 仍通 |
F10 Intent 层
| 项 | 内容 |
|---|
| 需求 | 业务抽象与确认卡 |
| 模块 | intent resolver |
| 例 | messaging.send → 选应用 → DCP/协议 |
| 验收 | 发送前必出确认(策略) |
F11 通知感知
| 项 | 内容 |
|---|
| 需求 | 授权后只读 |
| 模块 | 通知总线旁路到 context |
| 验收 | 可剔除敏感 app |
F12 拖拽与剪贴板中转
| 项 | 内容 |
|---|
| 需求 | 文件拖入、复制粘贴类任务 |
| 模块 | dcp.drag;clipboard portal 中转(授权) |
| 验收 | 文件管理器→应用拖放样例 |
F13 虚拟列表策略
| 项 | 内容 |
|---|
| 需求 | 长列表不盲滚 |
| 模块 | 优先搜索框/过滤;有限滚动+OCR 探针;超限放弃并请用户 |
| 验收 | 不出现无限滚轮 |
F14 稳定 ID 与重定位
| 项 | 内容 |
|---|
| 需求 | 动画/刷新后仍找到控件 |
| 模块 | 多键:role+name+path+邻域锚词;失败则重 snapshot |
| 验收 | 刷新列表后重定位成功率 |
F15 工具包镜像 Widget Mirror
| 项 | 内容 |
|---|
| 需求 | 动态链接 GTK/Qt 的应用,在控件创建和变化时由系统库维护一份实时控件文档,DCP 读文档即可知道控件、坐标和状态 |
| 模块 | gtk-aios-mirror(GTK_MODULES);Qt 发行版小补丁 + libaios-qt-hook.so;dcpd 读取端 |
| 数据 | 每进程一块共享内存,双缓冲快照;不落磁盘 |
| 依赖 | 应用加载的是系统 SONAME,不是自己打包的工具包 |
| 失败 | 无镜像则回退 AT-SPI,再回退 Mode-C。静态链接、自绘、自带库不报错,只标记 mirror=absent |
| 验收 | GTK4/Qt6 动态链接样本:创建按钮后 100ms 内文档含角色、文本、分配矩形、可见与敏感状态;密码框无明文 |
机制与做不到的范围见 5.5。
G. 便利性
G1–G4 多入口
| 项 | 内容 |
|---|
| 需求 | 快捷键/右键/窗口菜单/通知同一 Session |
| 模块 | aios-entry;shell 插件 |
| 验收 | 并发入口合并或排队策略明确 |
G5 Context Packet
| 项 | 内容 |
|---|
| 需求 | 自动上下文可预览剔除 |
| 数据 | focused、selection、files、clipboard_summary、locale、permissions |
| 验收 | 密码焦点时剪贴板/选区不进模型 |
G6 歧义选择器
| 项 | 内容 |
|---|
| 需求 | 多窗口/多文件手选 |
| 模块 | Picker UI |
| 验收 | 未选择不执行副作用 |
G7 Share / 深链
| 项 | 内容 |
|---|
| 需求 | aios:// 与系统分享 |
| 模块 | xdg mime + handler |
| 验收 | 无权限 token 的深链被拒 |
G8 智能剪贴板
| 项 | 内容 |
|---|
| 需求 | 历史可选;敏感检测 |
| 模块 | clipboard manager 插件;默关云同步 |
| 验收 | 密码形态不进历史或仅本地短 TTL |
G9 截图即问
| 项 | 内容 |
|---|
| 需求 | 框选区域进本次上下文 |
| 模块 | 区域选择 portal → context.attachments |
| 验收 | 任务结束可删附件位图 |
H. 接入与开发者
H1–H3 总线三形态
| 项 | 内容 |
|---|
| 需求 | D-Bus、Socket、127.0.0.1 HTTP 同策略 |
| 模块 | aios-gateway 统一鉴权 |
| 验收 | 策略测试:HTTP 不能比 D-Bus 更松 |
H4 MCP Server
| 项 | 内容 |
|---|
| 需求 | 暴露 dcp/fs/confirm 等工具 |
| 模块 | aios-mcp |
| 验收 | 外置客户端跑通认证任务 |
H5–H6 CLI/SDK
| 项 | 内容 |
|---|
| 需求 | 脚本与集成 |
| 模块 | aios Go/Rust CLI;aios-sdk py/ts |
| 验收 | Hello DCP ≤30 分钟文档路径 |
H7 Flatpak AI Portal
| 项 | 内容 |
|---|
| 需求 | 沙箱经批准用 Agent/DCP |
| 接口 | org.freedesktop.portal.AI(草案名) |
| 验收 | 未批准无全局注入 |
H8 三级接入
| 项 | 内容 |
|---|
| 需求 | L0 零改造 / L1 清单 / L2 Intent |
| 文档 | 接入指南 + schema |
| 验收 | 样例 App 三级各一 |
H9 技能包签名
H10 Fixture CI
| 项 | 内容 |
|---|
| 需求 | 无头/专用会话跑 DCP 回归 |
| 模块 | aios-fixtures 容器或 VM |
| 验收 | PR 门禁跑 Mode-A/C 烟雾 |
H11 开发者模式
| 项 | 内容 |
|---|
| 需求 | 详细 reason、树转储(脱敏) |
| 验收 | 关闭后无敏感转储落盘 |
I. 安全与治理
I1–I7(与第 6 章一致,实现要点)
| ID | 实现要点 |
|---|
| I1 | policy 引擎映射工具→L0–L3;UI 确认组件 |
| I2 | bwrap+seccomp+landlock+cgroup 模板库 |
| I3 | secretsd handle;禁止工具把秘密返回给模型文本 |
| I4 | portal 分权;PipeWire fd 不进模型 |
| I5 | append-only 审计;可导出脱敏包 |
| I6 | 窗口分类器:password/payment/auth → DENY |
| I7 | 检测挑战→STOP_HANDOFF_USER |
I8 家长控制/名单
| 项 | 内容 |
|---|
| 需求 | 限制可被 Agent 操控的应用集 |
| 模块 | 策略:allow/deny app_id |
| 验收 | 拒绝列表内应用 DCP 直接失败 |
I9 令牌吊销
| 项 | 内容 |
|---|
| 需求 | 用户一键收回所有 capability |
| 接口 | policy.revoke_all |
| 验收 | 吊销后进行中注入立即停 |
J. 可观测与运维
J1 资源守护
| 项 | 内容 |
|---|
| 需求 | AI 不拖死桌面 |
| 模块 | cgroup 切片 aios.slice;空闲休眠引擎 |
| 预算 | 空闲 RSS 增量、常驻 CPU 有配置项 |
| 验收 | 压测下 UI 输入延迟不崩 |
J2 日志回放
| 项 | 内容 |
|---|
| 需求 | 任务可回放 |
| 格式 | JSONL:time、task、tool、mode、result |
| 验收 | 同 task_id 可重建时间线 |
J3 硬件探针
| 项 | 内容 |
|---|
| 需求 | 启动与任务前检查 |
| 模块 | aios-hwprobe |
| 验收 | 无 GPU 时商店隐藏仅 GPU 模型 |
J4 诊断与安全模式
| 项 | 内容 |
|---|
| 需求 | 一键日志;禁用注入的安全模式 |
| 验收 | 安全模式下 dcp.act 拒绝 |
J5 日志 AI 诊断
| 项 | 内容 |
|---|
| 需求 | 解释 journal/启动失败并给修复步骤 |
| 模块 | 只读挂载日志工具 + 本地模型;高危修复走确认 |
| 验收 | 不能静默 rm 用户数据 |
J6 可选遥测
| 项 | 内容 |
|---|
| 需求 | 仅原因码/成功率;无屏幕 |
| 默认 | 关 |
| 验收 | 抓包无截图与文件路径明文(或哈希) |
K. 调度与事件
K1 定时任务
| 项 | 内容 |
|---|
| 需求 | 如每周清理下载(仍受策略) |
| 模块 | aios-scheduler(systemd timer 用户级) |
| 约束 | L2+ 到点仍可能要确认或需预授权窗 |
| 验收 | 无预授权不自动发送/删除 |
K2 事件触发
| 项 | 内容 |
|---|
| 需求 | 下载完成、U 盘插入、CI 失败通知等 |
| 模块 | 事件总线订阅;映射到 skill |
| 验收 | 用户可关单事件 |
K3 文件夹监视
| 项 | 内容 |
|---|
| 需求 | inotify 目录→技能 |
| 模块 | aios-watch |
| 验收 | 排除敏感目录默认列表 |
L. 无障碍 AI 增强
L1 自然语言读屏增强
| 项 | 内容 |
|---|
| 需求 | 基于 AT-SPI 摘要「当前窗口有什么」 |
| 模块 | 复用 Mode-A snapshot + 本地摘要模型 |
| 验收 | 不需截图即可工作(默认) |
L2 描述屏幕
| 项 | 内容 |
|---|
| 需求 | 授权后描述窗口 |
| 模块 | Mode-C 截图 + VLM/OCR 摘要 |
| 验收 | 每次授权可感知 |
L3 语音导航
| 项 | 内容 |
|---|
| 需求 | 「打开设置里的显示」 |
| 模块 | ASR + Intent + DCP |
| 验收 | 与 E/F 共用权限 |
M. 企业与多用户
M1 策略包
| 项 | 内容 |
|---|
| 需求 | 强制禁用云端/注入/外置 MCP 等 |
| 模块 | /etc/aios/policy.d/*.yaml;不可被用户会话改松 |
| 验收 | 用户设置无法越过管理员禁止项 |
M2 多用户隔离
| 项 | 内容 |
|---|
| 需求 | 每用户独立 dcpd/agentd/模型缓存权限 |
| 验收 | 用户 A 不能 snapshot 用户 B 会话 |
M3 访客/信息亭
| 项 | 内容 |
|---|
| 需求 | Agent 只读或白名单应用 |
| 模块 | 会话类型 aios-kiosk |
| 验收 | 无商店安装、无 L3 |
N. 虚拟化与工作区
N1 Agent 工作区容器
| 项 | 内容 |
|---|
| 需求 | 高危 shell/文件工具默认进 rootless 容器 |
| 模块 | podman/bubblewrap 模板 |
| 验收 | 容器内看不到主机密钥路径 |
N2 GPU/NPU 配额
| 项 | 内容 |
|---|
| 需求 | 多任务共享加速器 |
| 模块 | cgroup + 设备管理器队列 |
| 验收 | 超配额排队而非系统卡死 |
N3 开发容器桥接
| 项 | 内容 |
|---|
| 需求 | 可选让容器内工具经显式策略调主机 DCP |
| 默认 | 关 |
| 验收 | 未开启时容器无 DCP socket |
R. 远程控制协议(网络 / 串口)
实现细节(帧格式、命令字、状态机)见 第 13 章。本节只列功能级实现要点。
R1 统一报文 RCP
| 项 | 内容 |
|---|
| 需求 | 网络与串口使用同一套帧与命令,便于一套客户端控桌面应用和系统 |
| 模块 | rcp-codec(编解码库,C/Rust 实现,Python 绑定) |
| 接口 | 二进制外帧 + CBOR 载荷;调试模式可切换 JSON 载荷(同字段) |
| 依赖 | 无传输假设;由 R2/R3 喂字节流 |
| 失败 | CRC/长度错误丢帧并回 NACK(BAD_FRAME);不执行半包 |
| 验收 | 同一条 APP_ACT 在 TCP 与串口上载荷字节一致(去掉传输层差异) |
R2 TCP/TLS 传输与配对
| 项 | 内容 |
|---|
| 需求 | 局域网/指定网卡上方便接入;默认不裸奔 |
| 模块 | rcpd 监听 127.0.0.1 与可选 LAN 地址;TLS 1.3 |
| 接口 | 默认端口 17420;配对见第 13 章 |
| 依赖 | aios-policy、用户会话 dcpd/agentd |
| 失败 | 证书或配对失败立即断连;不降级明文 |
| 验收 | 未配对客户端无法下发 APP_ACT/SYS_POWER |
R3 串口传输
| 项 | 内容 |
|---|
| 需求 | 无网或工控场景用 UART/USB 串口控本机 |
| 模块 | rcpd-serial:打开 /dev/ttyS*、/dev/ttyUSB*、/dev/ttyACM* |
| 接口 | 115200 8N1 起,可协商更高波特率;帧格式与 TCP 载荷相同 |
| 依赖 | udev 规则把授权串口交给 rcpd;物理接入仍需配对 |
| 失败 | 噪声导致 CRC 失败则丢帧;连续失败发 LINK_RESET |
| 验收 | USB-CDC 回环完成「列窗口→点击」闭环 |
R4 系统控制报文
| 项 | 内容 |
|---|
| 需求 | 查询与控制电源、音量、网络开关、服务状态等系统能力 |
| 模块 | rcp-sys 适配 systemd/logind/NetworkManager 等,经策略网关 |
| 接口 | SYS_INFO / SYS_CALL(白名单方法,禁止任意 shell) |
| 依赖 | Polkit / aios-policy |
| 失败 | 未授权方法返回 NACK(FORBIDDEN) |
| 验收 | SYS_CALL power.reboot 在未确认时不重启 |
R5 应用与桌面控制报文
| 项 | 内容 |
|---|
| 需求 | 远程启动应用,并对无 AI 接口的桌面窗口做发现、快照、动作 |
| 模块 | rcp-dcp:把报文翻译为 dcp.*,不复制一套点击实现 |
| 接口 | APP_LIST APP_LAUNCH WIN_LIST DCP_SNAPSHOT DCP_FIND DCP_ACT DCP_ASSERT |
| 依赖 | 图形会话中的 dcpd;无会话时这些命令 NACK(NO_SESSION) |
| 失败 | DCP 通道降级原因原样放进应答 reason |
| 验收 | 远程客户端经报文完成认证夹具上的点击与输入 |
R6 Agent 任务报文
| 项 | 内容 |
|---|
| 需求 | 远程下发自然语言目标,收回进度与结果 |
| 模块 | rcp-agent → agent.run |
| 接口 | AGENT_RUN / AGENT_EVENT(进度)/ AGENT_ABORT |
| 依赖 | agentd、确认 UI(L2/L3 仍在本机弹窗或远程确认策略) |
| 失败 | 本机无人值守且策略要求本地确认时,任务挂起并事件通知 |
| 验收 | 中止报文后注入停止(与 E7 急停一致) |
R7 鉴权、令牌与审计
| 项 | 内容 |
|---|
| 需求 | 远程通道不能绕过权限;每条副作用可追责 |
| 模块 | 配对密钥存 secrets;每连接 session_id;命令映射 capability |
| 接口 | AUTH 成功后才接受业务帧;审计字段含 `transport=tcp |
| 依赖 | I1–I5、I9 |
| 失败 | 令牌吊销后下一条业务帧 NACK(REVOKED) 并断连 |
| 验收 | 红队:无 AUTH 的 DCP_ACT 被拒且有审计 |
R8 客户端 SDK 与调试工具
| 项 | 内容 |
|---|
| 需求 | 上位机/单片机侧方便接入 |
| 模块 | aios-rcp Python/TS SDK;rcp-dump 十六进制与字段解码 |
| 接口 | SDK:connect_tcp / connect_serial → 同一 Client API |
| 验收 | README 样例 30 分钟内完成串口心跳与 WIN_LIST |
5. 关键子系统:DCP 桌面操控平面
5.1 定位
会话级系统服务,合成操作面:Mode-A 语义 · Mode-B 协议 · Mode-C 视觉注入。
动态链接 GTK/Qt 时,Mode-A 的数据源优先用 Widget Mirror,没有镜像再读 AT-SPI。
应用无 AI 接口不是障碍;有清单/Intent 只是加速。
5.2 稳定 API
dcp.list_targets()
dcp.snapshot(target)
dcp.find(target, query)
dcp.act(target, action, args)
dcp.assert(condition)
dcp.invoke(intent, params)
dcp.freeze() / dcp.record(...)
5.3 融合状态机
绑定 target → 探 Widget Mirror / AT-SPI / 协议 / 画像
→ 有镜像或语义树:A
→ 混合 / B / C(需截图·输入授权)
→ 敏感·验证码·DRM → STOP
→ 事务执行与断言 → 审计
5.4 与单应用特例
国民级商业软件仅为 画像与回归样本,架构不依赖厂商合作或协议破解。
5.5 工具包镜像(Widget Mirror)
结论:能做,而且应该做在操作系统自带的动态库上,而不是去改每个应用。它只覆盖「动态链接了系统工具包」的程序。静态链接、自己打包一套 GTK/Qt、以及不走这些库的自绘界面,这条路不存在,继续用 Mode-C。
为什么可行
GTK、Qt 的控件不是画完就丢的像素。库里有对象:创建、显示、隐藏、改文本、分配位置都会发生在 libgtk-4.so、libQt6Widgets.so 这些动态库里。应用若在运行时加载的是系统里的这些库,发行版就可以在库的扩展点上加一份观测,应用不用重新编译。
这和现有无障碍桥是同一类做法:GTK 用 GTK_MODULES 加载 AT-SPI 桥,Qt 在控件变化时通知辅助功能。Widget Mirror 不另造点击通道,只是把工具包里已经存在的控件树,变成 DCP 能直接读的内存文档。
不怎么做
- 不扫盘替换所有
.so,不向无关库注入代码。只挂系统提供的 GTK/Qt。 - 不把文档写成磁盘上的 JSON 文件。布局一次会改几十个控件,落盘又慢又把界面文本留下来。
- 不假设「只要是动态库就能看到按钮」。下面这些库里没有控件对象:Wayland 客户端库、图形驱动、字体库。钩它们只能知道有一块窗口表面,不知道按钮。
加载方式
| 工具包 | 做法 | 原因 |
|---|
| GTK3/GTK4 | 会话设置 GTK_MODULES=aios-mirror | GTK 官方扩展点,和现有无障碍模块相同,不必改 GTK 源码 |
| Qt5/Qt6 | 发行版 Qt 在 QWidget 的构造、setGeometry、setVisible、文本属性变化处调用弱符号;符号由 libaios-qt-hook.so 提供,没有该库则空操作 | Qt 没有等价的、可对所有程序自动加载的「控件模块」环境变量。C++ 符号用 LD_PRELOAD 去钩,换一个小版本就断。弱符号补丁控制在十几处调用 |
| 其他工具包 | 第一版不做 | wx、Flutter engine 以后单独立项,不阻塞 GTK/Qt |
Flatpak 默认不用宿主机的 GTK_MODULES。官方运行时里要带上 aios-mirror,否则沙箱应用没有镜像,自动回退。AppImage 或安装包自带 libgtk/libQt 的,系统库不会被加载,同样回退。
内存文档
每个图形进程一块 POSIX 共享内存,仅属主用户可读写。写侧在界面线程更新,读侧只读副本。双缓冲:写完一次原子交换序号,DCP 不读半截树。
布局风暴时合并,最快每 50ms 发布一版,而不是每个分配都发布。文档用版本化的二进制结构(实现可选 FlatBuffers),调试工具再导出 JSON。逻辑上每个顶层窗口一棵树:
window
id, title, frame, client, scale, visible, focused
widgets[]
id 工具包对象的稳定编号,不是指针
parent_id
role button / entry / label / ...
name, text 密码框 text 恒为空,只标 sensitive_value=true
bounds 相对客户区的 x,y,w,h,另存 scale
visible, enabled, focused, checked
actions[] click / set_text / toggle
rev 本节点最后变更序号
进程退出、窗口销毁,文档删除。dcpd 用套接字和对端 uid 校验后映射这块内存。其他用户和普通应用读不到。
和三条通道的关系
有完整镜像时,Mode-A 的「找控件、读状态、读坐标」走这份文档,点击和填字仍优先调用工具包自己的动作(模块内执行),其次才是 AT-SPI。没有镜像就保持现在的顺序:AT-SPI,然后协议,然后视觉。
镜像模块执行动作前必须向 dcpd 要 capability。模块自己不决定能不能点。密码、支付、认证窗口的规则不变。
做不到时不要装做做到
| 应用 | 结果 |
|---|
| 动态链接系统 GTK/Qt | 文档可用,作为 Mode-A 主数据源 |
| 同一应用里的自绘区域 | 只有一块无子控件的画布节点,内部仍走 Mode-C |
| 静态链接工具包 | 无镜像 |
| 自带一份 GTK/Qt 的商业包、多数 AppImage | 无镜像 |
| Electron 网页内容、游戏、即时模式界面 | 控件不在 GTK/Qt 对象里,无镜像 |
| Flutter | 第一版不承诺。引擎里的控件在 Dart 侧,不在 GTK 控件树里 |
所以 Widget Mirror 提高的是「正常桌面程序」的成功率和坐标精度,不取消视觉兜底。
6. 安全、隐私与权限模型
6.1 四级风险
| 级 | 例 | 策略 |
|---|
| L0 | 读公开标题/非敏感树 | 会话授权 |
| L1 | 输入、点击、本地只读 | 信任条/应用级 |
| L2 | 截图、写文件、联网、装包 | 显式确认 |
| L3 | 凭据、支付、删除、发送、改系统 | 单次确认+短 TTL |
6.2 隔离与审计
四层隔离 + Secret Broker + append-only 审计;密码/支付/认证窗默认 DENY;验证码/DRM 不绕过。
7. 兼容、发行与硬件
- 软件: 基线 deb、Flatpak、基线 ELF;AppImage 条件;Snap 默认无。
- 硬件: 上游驱动优先;闭源 GPU 按 SKU 认证;无加速器仍可用小模型+DCP。
- 镜像自带: 控制中心、模型管理、商店、文件/浏览器/终端/设置、文档。
8. 非功能需求与验收
| 场景 | 目标(设计预算) |
|---|
| 召唤→上下文就绪 | P95 ≤ 300 ms |
| 感知→建议动作 | P95 ≤ 800 ms |
| 普通 E2E 成功率 | ≥ 85% |
| 仅 Mode-A | ≥ 95% |
| 危险动作拦截审计 | 100% |
| 技能命中(成熟期) | ≥ 60% |
| Hello DCP | ≤ 30 分钟 |
| 空闲 AI 驻留 | RSS/CPU 可配置预算内 |
主成功率分母不含游戏/验证码/DRM。夹具:GTK/Qt、无 a11y 自绘、Flatpak、MCP 外置 Agent。
9. 工程目录与组件映射(建议落地树)
aios/
kernel/ # LTS 补丁与配置(极少)
desktop/compositor/ # B1
services/
dcpd/ # F*
agentd/ # E*
ai-engined/ # D*
policy/ # I*
gateway/ # H1-H4
rcpd/ # R* 远程控制协议(TCP + 串口)
scheduler/ # K*
portals/ # H7 等
apps/control-center/ # GUI
sdk/{python,ts}/ # H6
cli/ # H5
profiles/ # F9 画像仓
fixtures/ # H10
live-build/ # A2
docs/ # 本文档
10. 分期路线图
| 阶段 | 时间 | 范围 |
|---|
| M0 | 0–3 月 | ISO;dcpd A+C;agentd 最小闭环;夹具;威胁模型 |
| M1 | 4–6 月 | 安装器;G 入口;Plan/确认;MCP/CLI;技能 v1;商店雏形 |
| M2 | 7–12 月 | 路由/BYO;画像;K 调度;L 无障碍;RCP 网络+串口 v1;硬件矩阵;85%/95% |
| M3 | 13–18 月 | 示范教学;M 企业策略;N 容器配额;补丁上游化 |
11. 明确不做的事项
- 内核内大模型
- 以逆向 IM/业务私有协议为 OS 主能力
- 破解验证码/反自动化/DRM
- 未授权操作支付与系统认证
- 任意发行版二进制无痛兼容空头支票
- 永久私有内核 ABI
- 承诺模型永不出错
- 远程/串口控制绕过本机权限、确认或审计(RCP 必须走同一策略引擎)
12. 术语表
| 术语 | 含义 |
|---|
| luminOS | 本操作系统 |
| DCP | Desktop Control Plane |
| Mode-A/B/C | 语义 / 协议 / 视觉注入 |
| Widget Mirror | 系统 GTK/Qt 动态库维护的实时控件文档,Mode-A 的优先数据源 |
| Context Packet | 唤醒上下文包 |
| Capability | 短时能力令牌 |
| 应用画像 | OS 签名的可选 UI 锚点数据 |
| BYO | 自带模型或 Agent |
| RCP | Remote Control Protocol,网络与串口共用的控制报文 |
13. 远程控制协议 RCP(网络与串口)
13.1 目标与原则
上位机、另一台电脑或单片机,可通过 网络 或 串口 控制 luminOS 上的:
- 桌面应用(含没有 AI 接口的窗口:走 DCP)
- 系统(电源、音量、网络开关、服务状态等白名单能力)
- Agent 任务(下发目标、收进度、中止)
原则:
- 一套报文,两种传输。 TCP 与串口只是字节管道,命令语义相同。
- 不另开后门。 所有副作用经
aios-policy 与 DCP/systemd 适配器,L2/L3 规则不变。 - 禁止任意 shell。 系统控制是白名单方法,不是
exec(cmd)。 - 物理串口也不等于已授权。 插上线仍需配对或预置密钥。
13.2 架构
上位机 SDK / 串口主站
│ RCP 帧
▼
┌───────────────┐ ┌──────────────┐
│ TCP/TLS :17420│ │ UART/USB-CDC │
└───────┬───────┘ └──────┬───────┘
└──────────┬─────────┘
▼
rcpd(编解码、会话、限流)
│
▼
aios-policy(鉴权、确认、审计)
│
┌──────────┼──────────┐
▼ ▼ ▼
dcpd agentd rcp-sys
桌面应用操控 任务 系统白名单
rcpd 为 systemd 系统服务 + 每用户会话代理:系统类命令可在无图形时处理;桌面类命令必须附着到已登录图形会话,否则 NO_SESSION。
13.3 传输
| 传输 | 实现 | 默认 |
|---|
| 网络 | TCP + TLS 1.3;可选仅 127.0.0.1 | 端口 17420;LAN 需在控制中心显式打开 |
| 串口 | 原始字节流,默认 115200 8N1 | 设备节点由 udev 标签 aios-rcp=1 才打开 |
串口在 HELLO 后可协商波特率(LINK_SET_BAUD),失败保持 115200。
TCP 上同样使用下面的二进制帧,便于抓包工具统一解析;TLS 只保护传输,不改变帧格式。
13.4 帧格式(外层,两种传输通用)
多字节整数均为 大端。
| 偏移 | 长度 | 字段 | 说明 |
|---|
| 0 | 2 | SOF | 固定 A1 05 |
| 2 | 1 | VER | 协议版本,当前 0x01 |
| 3 | 1 | FLAGS | bit0=需要应答;bit1=载荷为 JSON(否则 CBOR);bit2=压缩(预留 0) |
| 4 | 4 | MSG_ID | 命令字,见 13.6 |
| 8 | 4 | SEQ | 发送方递增序号,应答原样带回 |
| 12 | 2 | RSV | 置 0 |
| 14 | 4 | LEN | 载荷字节数,最大 65536 |
| 18 | LEN | PAYLOAD | CBOR 或 JSON |
| 18+LEN | 4 | CRC32 | 对 SOF 至载荷末字节的 CRC-32/ISO-HDLC |
无转义:靠 LEN 定界。串口读到 SOF 后读满头部,再读 LEN+4。CRC 失败丢弃并计错误,不执行。
13.5 载荷公共字段
每条业务载荷(CBOR map)建议包含:
| 字段 | 类型 | 说明 |
|---|
sid | string | 会话 id,AUTH_OK 之后必填 |
ts | uint | 发送方毫秒时间戳 |
target | string | 可选,窗口/应用 id |
args | map | 命令参数 |
code | int | 仅应答:0 成功,非 0 见 13.8 |
reason | string | 仅应答或事件:人可读原因码 |
data | any | 仅应答:结果 |
13.6 命令字
| MSG_ID | 名称 | 方向 | 作用 |
|---|
0x0001 | HELLO | C→S | 版本、传输能力、客户端 id |
0x0002 | HELLO_ACK | S→C | 服务端版本、是否要配对 |
0x0010 | AUTH | C→S | 配对码或会话令牌 |
0x0011 | AUTH_OK | S→C | 下发 sid 与权限掩码 |
0x0012 | AUTH_FAIL | S→C | 失败原因 |
0x0020 | PING | 双向 | 保活 |
0x0021 | PONG | 双向 | 保活应答 |
0x0100 | SYS_INFO | C→S | 主机名、版本、会话是否存在、电量 |
0x0101 | SYS_CALL | C→S | 白名单系统方法 |
0x0200 | APP_LIST | C→S | 已安装应用 |
0x0201 | APP_LAUNCH | C→S | 按 desktop id 启动 |
0x0202 | APP_CLOSE | C→S | 请求关闭(L2,需确认策略) |
0x0210 | WIN_LIST | C→S | 当前窗口(DCP targets) |
0x0211 | DCP_SNAPSHOT | C→S | 结构化 UI 摘要;截图像素另走授权 |
0x0212 | DCP_FIND | C→S | 按名/角色/文本找元素 |
0x0213 | DCP_ACT | C→S | click / ime_commit / scroll / key |
0x0214 | DCP_ASSERT | C→S | 等待断言 |
0x0300 | AGENT_RUN | C→S | 自然语言任务 |
0x0301 | AGENT_EVENT | S→C | 步骤进度(可无请求对应,SEQ=0) |
0x0302 | AGENT_ABORT | C→S | 中止任务并冻结注入 |
0x03F0 | CONFIRM_REQ | S→C | 本机需要确认时通知远端 |
0x03F1 | CONFIRM_RSP | C→S | 远端确认(仅当策略允许远程确认) |
0x7F00 | ACK | S→C | 通用成功(若命令无专用应答) |
0x7F01 | NACK | S→C | 通用失败 |
0x7F10 | LINK_RESET | 双向 | 重新同步帧 |
SYS_CALL 白名单第一版仅:
args.method | 风险 | 说明 |
|---|
power.suspend / power.reboot / power.poweroff | L3 | 必须确认 |
audio.set_volume | L1 | 0–100 |
audio.set_mute | L1 | bool |
net.set_wifi | L2 | 开/关,不含改密 |
session.lock | L1 | 锁屏 |
svc.status | L0 | 查询单元状态 |
svc.restart | L3 | 仅策略列出的单元名 |
不允许 method=shell。新增方法必须改策略表并发版 VER。
13.7 会话时序
C: HELLO {client_id, ver, transport}
S: HELLO_ACK {need_auth: true, pairing_required}
C: AUTH {mode: "pairing_code", code: "482913"}
# 配对码由本机控制中心显示,60 秒有效,一次性
S: AUTH_OK {sid, scopes: ["sys.read","dcp.act","agent.run"]}
C: WIN_LIST {sid}
S: ACK {seq, data: {windows:[...]}}
C: DCP_ACT {sid, target, args:{action:"click", node:"..."}}
S: ACK 或 NACK(NEED_CONFIRM)
S: CONFIRM_REQ {prompt, risk:"L2"}
# 默认在本机弹窗;若策略 allow_remote_confirm 才接受 CONFIRM_RSP
串口与 TCP 时序相同。串口无 TLS,因此 AUTH 使用一次性配对码换短期 sid,后续帧带 sid;可选再协商会话内 HMAC(密钥来自配对),防止总线上窃听重放。第一版串口要求:物理可达 + 一次性配对码 + sid TTL ≤ 8 小时 + 序号防重放(SEQ 必须递增,否则 NACK(REPLAY))。
13.8 状态码
| code | 名称 | 含义 |
|---|
| 0 | OK | 成功 |
| 1 | BAD_FRAME | CRC/长度/版本错误 |
| 2 | UNAUTH | 未认证 |
| 3 | FORBIDDEN | 策略拒绝 |
| 4 | NEED_CONFIRM | 等待确认 |
| 5 | NO_SESSION | 无图形会话,不能控桌面 |
| 6 | NOT_FOUND | 窗口或节点不存在 |
| 7 | TIMEOUT | 断言或应用无响应 |
| 8 | REVOKED | 令牌已吊销 |
| 9 | REPLAY | 序号回退 |
| 10 | BUSY | 已有独占任务 |
| 11 | DENIED_UI | 敏感界面拒绝自动化 |
13.9 载荷示例(逻辑 JSON,线上默认为 CBOR)
列窗口请求:
{"sid":"s_8f3","ts":1710000000000,"args":{}}
对应帧:MSG_ID=0x0210,FLAGS bit0=1。
点击应答:
{"sid":"s_8f3","code":0,"reason":"MODE_A","data":{"tx":"tx_12","assert":"ok"}}
系统重启被拒:
{"sid":"s_8f3","code":4,"reason":"NEED_CONFIRM","data":{"method":"power.reboot","risk":"L3"}}
13.10 实现步骤(工程顺序)
- 冻结
rcp-codec:组帧、CRC、CBOR schema、单测(坏 CRC、截断、超长)。 rcpd 先做 Unix 套接字环回,命令直通 dcpd 桩。- 加
AUTH 与策略映射,接上真实确认框。 - 打开 TCP/TLS 与串口两端,共用同一解码器。
- 实现
SYS_CALL 白名单适配器(logind、PipeWire、NetworkManager)。 - 发布 Python SDK 与
rcp-dump。 - 夹具:串口回环 + TCP 各跑通
WIN_LIST、DCP_ACT、未授权 power.reboot 被拒。
13.11 安全实现要点
- LAN 监听默认关闭;打开时防火墙仅允许用户填写的网段。
- 配对码 6 位、一次性、60 秒;不写进日志明文。
sid 绑定传输、客户端 id、用户 uid;换用户会话即失效。- 每条
DCP_ACT / SYS_CALL 写审计:transport、client_id、msg_id、target、code。 - 速率限制:默认每连接每秒最多 20 条动作帧,超出
BUSY。 - 企业策略
M1 可设 rcp.network=off 或 rcp.serial=off。
14. 总结
luminOS = 可安装的 Linux 桌面 + AI 引擎与 Agent + 系统级 DCP(无 AI 接口也可控) + 统一接入与治理 + RCP(网络与串口同一报文控应用与系统) + 调度/无障碍/企业/隔离等配套。
差异化核心:不在应用里找 AI 接口,而在操作系统里提供桌面操控平面;远程与串口只是这条平面的传输,不是第二套特权。
本文 v1.4 为唯一设计真源;实现与验收以功能 ID A1–N3、R1–R8 为准。动态链接 GTK/Qt 的控件观测见 F15。