技术改造:复用什么,新建什么
2.0 不是重写。现有的执行引擎(工具循环、权限层、提权层、计费、历史、记忆、知识库)全部保留,在它上面加三层:场景层、主动层、能力包层。
复用清单(现有代码直接用)
| 能力 | 位置 | 在 2.0 里的角色 |
|---|---|---|
| 工具循环、两层模型、移交 | tool_loop.rs、commands.rs | 所有场景的执行内核,不动 |
| 13 + 2 工具原语、输出控长落盘 | executor.rs | 不动;新增工具按同一模式加 |
| 提权层:单步 UAC、整机重启续跑 | elevation.rs、commands.rs | 电脑优化方向的底座 |
| 权限层 G0:确认卡、白名单、快照 | tool_loop.rs permission_gate | 保留;扩展到 G1b 风险分级(文档已有设计) |
| ask_user 卡片与稳定 id 选项 | tool_loop.rs、ChatSession.svelte | 场景流程里所有「让用户选」都复用它 |
| 后台进程与完成唤醒 | executor.rs 注册表、lib.rs 监听 | 长任务(转码、扫描)直接用 |
| 截屏(隐藏自身窗口) | executor.rs | 弹窗溯源、游戏模式 |
| 知识库远程同步(manifest + zip) | lib.rs sync_knowledge_remote | 场景库、指纹库、白名单的分发通道;能力包分发复用同一模式 |
| 外置记忆与技能候选提取 | memory.rs | 「要不要以后自动做」的数据来源 |
| 交付物面板、进度面板 | ChatSession.svelte、RechargeModal.svelte | 扩展为任务中心 |
| 积分、充值、余额、本轮扣费 | auth.rs、recharge.rs | 保留;订阅是后端新增,客户端加展示 |
| 托盘、关闭即隐藏、单实例 | lib.rs | 常驻的基础已经有 |
| 系统通知插件 | tauri-plugin-notification | 巡检通知直接用 |
| 多语言框架 | i18n.rs、src/lib/i18n | 新文案照规则加 |
新建模块一览
| 模块 | 做什么 | 依赖 | 规模估计 |
|---|---|---|---|
| 便携运行时与能力包 | 嵌入式 Python、ffmpeg、OCR 等按需下载、校验、挂载到 PATH | 知识库同步机制 | 大,前置 |
| 调度器 | 定时巡检、定时任务、事件触发(新装软件、磁盘告警、前台窗口变化) | 托盘常驻、通知 | 中 |
| 体检引擎 | 五维度检查项的执行与评分,结果结构化 | 运行时、知识库里的评分规则 | 中 |
| 场景层(前端) | 新首页、场景卡片、意图菜单、任务中心、周报、订阅页 | 场景库元数据 | 大 |
| 场景库 | 技能条目加展示元数据(图标、标题、板块、触发条件、入口脚本) | 知识库 | 内容工作为主 |
| 文件拖入与右键菜单 | Tauri 拖放事件、托盘拖放、SendTo 注册 | 小 | |
| 全局快捷键与浮窗 | 游戏模式 | Tauri global shortcut 插件、置顶窗口 | 中 |
| 窗口事件监听 | 弹窗溯源、全屏游戏检测 | Win32 事件钩子 | 中 |
| 站点检索工具 | 按白名单站点抓取并解析结构化结果 | fetch_url 的扩展 | 中 |
| 玩法社区(客户端) | 板块卡片列表、详情 Sheet、发布表单、脱敏、点赞收藏 | 场景库格式扩展为「玩法」 | 中 |
| UI 规范迁移 | 引入 shadcn-svelte 与 Tailwind,现有 design-tokens.md 与橙色品牌色作废;侧栏改为两组列表 | 中,前端全局 | |
| GUI 自动化(可选、后期) | 离线单机脚本、复杂安装向导的自动点击 | UI Automation | 大,风险高 |
便携运行时与能力包
现状:run_python 调系统 python,截屏用 PowerShell,其余工具走 PowerShell 或原生。目标用户机器上没有 Python、没有 ffmpeg。
设计:
- 数据目录下新增
runtime/,每个能力包一个子目录,带版本文件与签名校验。 - 基础运行时(嵌入式 Python 加常用库)随安装包或首次启动下载;其余包按需。
- run_python 优先用内置解释器,找不到再退系统的。ffmpeg 等二进制加入子进程 PATH。
- 包的 manifest 与下载走现有知识库同步的同一套接口模式(后端加一类资源即可)。
- 工具描述里告诉模型哪些包已就绪,缺包时工具返回结构化提示,前端据此弹「下载 XX 包」卡。
Cargo 已有 pack-cg 的 feature 模式,但那是编译期开关。能力包是运行期资源,不走 feature。
调度器与主动层
- Rust 侧一个 tokio 任务循环,读本地
schedules表:类型(周期 / 事件)、下次执行、关联的场景或用户任务、上次结果。 - 执行方式:合成一轮对话(现有「后台进程完成时合成一轮」已经是这个模式),在隐藏 tab 里跑,结果写入任务中心并按需通知。
- 事件源:安装列表变化(注册表 Uninstall 键轮询)、磁盘阈值、前台窗口变化(Win32 钩子)、开机。
- 节流:每天通知上限、游戏模式下静默、用户可按类别关闭。
- 开机自启:注册表 Run 键或计划任务,安装时询问。
- 巡检的 token 成本由后端订阅规则决定是否计费,客户端带标记上报。
场景层
场景 = 技能条目 + 展示元数据 + 入口方式。元数据示例:
id: pc/startup-check
board: pc # pc | tools | game | media
title: 开机慢?查查启动项
icon: 🚀
entry: diagnose # diagnose | ask | run
triggers: # 动态推荐与巡检用
- schedule: weekly
- event: boot_time_gt 60s
requires: [] # 需要的能力包
tier: free_diagnose_paid_fix
前端板块页从场景库渲染卡片;点击「使用」时把场景 id 作为「移交技能」传给专家模型(现有 handoff 的 skill 参数已经支持)。建议提示词由体检结果、triggers 与社区热门混合生成。
社区玩法与官方场景共用同一格式,多三个字段:publisher(官方 / 用户 id)、derived_from(改自哪张卡)、steps(用户语言的步骤,由会话自动整理)。社区玩法不含可执行脚本,使用时由小D 按 steps 与 intent 在本机重新规划执行,这是安全边界也是审核依据。
现有 ask_user 卡需要补一个 tone 字段(权限设计文档里已规划但前端未实现),用来区分普通选择、权限确认、危险操作。
站点检索工具
现有 web_search 是让联网模型给综合回答,适合问答,不适合「列出所有结果」。新增 site_search 工具:
- 输入:查询词、来源类别(正版平台 / 字幕 / 公开分享)。
- 白名单与解析规则放知识库,可远程更新,不发版。
- 输出结构化 JSON,前端渲染为结果卡片,不进入模型长文本。
- 保留 fetch_url 的私网过滤与大小限制。
后端改动(yuntuserver)
| 改动 | 说明 | 路线图位置 |
|---|---|---|
| product 维度 | 区分 CG 助手与 DeskAI 用户、模型绑定、计费规则 | 已在路线图阶段 2 |
| 订阅 | 套餐、周期发放积分(credit_ledger 已预留 subscription 类型)、巡检免计费标记 | 新增 |
| 资源分发 | 场景库、指纹库、白名单、能力包的 manifest 与下载 | 复用知识库接口模式 |
| 发布路由 | latest.json 目前 404,自动更新不通 | 已在路线图阶段 2 |
| 巡检数据 | 体检结果的元数据上报(分数、扣分项类别),用于周报与运营 | 新增,复用 events 同步 |
| 玩法社区(后端) | 玩法的发布、审核、下架、点赞、使用计数、按板块与热度分发;与现有 skill-candidates 上报合流 | 新增 |
待核实
- 基础运行时是随安装包还是首次启动下载。影响安装包体积(当前 NSIS 包很小)。
- 开机自启的实现方式与用户授权时机。
- GUI 自动化是否进入 2.0 范围。建议不进。
- 场景库的编辑与发布流程由谁负责(admin 后台是否要加页面)。