用途与实际影响
这项功能怎样使用
为什么需要它
电脑上多个 AI 编程工具和模型服务可能互相串线,官方登录也可能被旧设置送到第三方。启动前先看清要开哪个程序、模型和请求去向,选择只影响这次新进程。
举个实际例子
“这个项目继续用我已经选好的配置,不要改我的全局默认;先让我知道会启动哪个程序、请求去哪里。”先预览实际入口,再启动相同配置。进入原生程序后,权限与任务行为仍由它自己的真实能力决定。
最后我会得到什么
拿到清楚的启动预览,确认后在指定项目打开原来的 AI 编程工具;也可以导出不含密钥的独立启动说明。本工具不接管原工具的聊天历史。
正常时
项目目录和配置档有效,启动计划显示的程序与实际启动一致。
发现问题时
旧环境可能把官方请求改送别处时,体检会指出冲突,不偷偷改原配置。
入口不可用或证据不足时
配置档损坏、目录不存在或参数要偷换模型时拒绝启动,不猜替代路线。
从哪里开始
在可信项目目录打开 PowerShell,先运行 aicli profile list/show,再用 aicli native 预览、aicli start 启动。
需要准备什么
- 项目目录
- 要用的引擎和 Profile
- 模型与数据去向偏好
从开始到拿到结果
- 1
把配置档展开为真实程序
工具显示这次会启动 Codex、Claude 等哪一个原生程序、选哪个模型、请求送到哪里。
- 2
看清启动计划
native 展示真正要启动的程序和环境差异,避免官方登录误走第三方。
- 3
进入原生工具
aicli start 在当前项目启动原来的 AI 编程工具;若配置有问题,先查看启动预览或运行静态体检(Doctor)。
技术实现与依据
这里保留实现、关键条件、精确入口、历史记录和验证结果。
命令、Profile 与启动计划已实现;当前源码回归通过关键规则与设计选择
切换 Profile 只对新进程生效,不能在已经打开的会话中热换 Provider。
profile remove 默认确认;删除最后一个引用某秘密的用户 Profile 时会删除对应 DPAPI 密文,但不会删除上游官方登录。
OpenClaw 导入默认只预览;只有 -Apply 才写 Profile,已有同名项还需 -Force 才替换。
machine-only 的 Qwen Code / OpenCode 路线不提供交互式 start。
eject 不带 Key 或 OAuth(账号授权协议);它给的是理解和迁移入口,不是秘密备份。
本模块用到的名词
- LaunchPlan(启动计划)
- 本次进程的可执行文件、参数、工作目录和环境增删;不是永久全局配置。
- OpenClaw preview/apply(导入预览/应用)
- 先只显示将生成哪些 DeepSeek Profile,显式 -Apply 后才写入;不会导入 Qwen3.7。
- native(原生计划查看)
- 展示 aicli 最终要怎样启动上游,但不执行模型请求。
- eject(导出脱离)
- 生成可理解的无秘密配方,让用户不依赖 aicli 也能重建入口。
专业定义
Profile 保存选择,LaunchPlan 只服务本次进程;聊天仍在原生工具里。
解决什么
防止官方登录与第三方 API 串线,也让用户在使用前能回答“到底会启动什么、数据去哪”。
当前怎样实现
- CommandRouter.ps1 严格解析命令、值选项和双横线后的原生参数。
- ProfileService 实现 list/show/configure/set-default/remove;删除最后 SecretRef 引用时只删本工具的 DPAPI 密文。损坏对象不会回退到同名模板。
- Import-FromOpenClaw.ps1读取一个明确JSON并验证来源;默认预览,-Apply只导入当前codex-deepseek-flash,把Key转入DPAPI。旧Codex Flash/Pro、Claude、OI四目标导入已经被此单目标入口替代。
- OpenClaw 导入只接受能由 api.deepseek.com 主机名证明的 DeepSeek 来源;Qwen3.7、未知或 OpenAI Base URL 被拒绝。
- LaunchPlan.ps1 使用 ProcessStartInfo.ArgumentList 形态组织可执行文件、参数、工作目录和环境差异;native 脱敏,eject 只写无秘密配方并拒绝覆盖已有目录。
执行流程
- 1
运行 setup 或 profile list --available。
- 2
已有 OpenClaw DeepSeek 配置时先运行导入脚本预览,确认后才加 -Apply;否则直接 configure。
- 3
用 profile show 核对引擎、模型、数据去向和状态,并按需运行 profile set-default。
- 4
用 native 查看本次启动计划。
- 5
用 start 在可信项目目录启动原生 CLI(命令行工具),或用 eject 导出。
- 6
不再需要某个用户 Profile 时运行 profile remove 并确认将保留或删除什么。
边界
- 不提供自己的聊天 UI 或会话数据库。
- 不覆盖上游基础 config.toml、settings.json 或官方登录。
- OpenClaw 导入不读取任意 Provider;默认预览不写入,同名 Profile 不带 -Force 不替换。
- 不把 machine-only Profile 伪装成交互式入口。
失败与恢复
- 用户 Profile JSON 损坏或根节点不是对象
- 当前 main 失败关闭并返回不可用;不静默使用同名内置模板。
- OpenClaw 来源不是 api.deepseek.com、结构未知或是 Qwen3.7
- 拒绝导入,不把一个服务的 Key 发给另一个 host,也不生成假 Profile。
- 原生参数覆盖 Provider、模型或配置
- 在启动前拒绝,并保留 Profile 的精确身份。
- eject 目标已有内容
- 拒绝覆盖,要求选择一个新目录。
真实入口
E:\Projects\Tools\ai-cli-profile-manager\src\AiCliProfileManager\Private\CommandRouter.ps1命令解析与退出码
E:\Projects\Tools\ai-cli-profile-manager\src\AiCliProfileManager\Private\ProfileService.ps1用户 Profile、SecretRef 与删除生命周期
E:\Projects\Tools\ai-cli-profile-manager\scripts\Import-FromOpenClaw.ps1DeepSeek 配置预览、应用与来源拒绝
E:\Projects\Tools\ai-cli-profile-manager\src\AiCliProfileManager\Private\LaunchPlan.ps1计划、native 与 eject
如何验证
- 9月3日385项Pester覆盖当时的路由、Profile生命周期、参数和导出;9月17日Owner又完成442项源码回归。两者按对应来源保存,不声称网页本轮重新执行。
- 离线发行检查实际执行 version、list/show、native、eject 和错误退出码。
- 本轮未用 start 打开交互会话,也未对真实 OpenClaw 私有配置执行 -Apply。
与其他模块的关系
本模块决定怎样进入原生工具;引擎模块定义可选身份,秘密模块定义凭据怎样到达目标进程。
