返回 DeepSeek-Reasonix
MIGRATING.zh-CN.md
根目录 / docs / MIGRATING.zh-CN.md
1 # 迁移到 Reasonix 1.0(Go 重写版)
2
3 <a href="./MIGRATING.md">English</a>
4
5 Reasonix 1.0 是一次从零开始的 **Go 重写**。它使用全新的代码库,并不是 `0.x` TypeScript 版本的增量升级。本文说明两个版本的差异以及迁移方法。
6
7 ## 摘要
8
9 | | 旧版(v1) | Reasonix 1.0+(v2) |
10 | --- | --- | --- |
11 | 语言 | TypeScript / Node.js | Go |
12 | 分支 | [`v1`](https://github.com/esengine/DeepSeek-Reasonix/tree/v1)(仅维护) | `main-v2`(默认、活跃开发) |
13 | 版本 | `0.x`(最高 v0.54.x) | `1.0.0`+ |
14 | 安装 | `npm i -g reasonix@0.53.2`(固定到某个 `0.x` 版本) | `npm i -g reasonix`;也可使用 release 归档或源码构建 |
15 | 代码智能 | embedding 语义搜索 + tree-sitter 符号索引 | LSP 辅助代码读取,以及 grep/read_file/glob;语义索引尚未移植 |
16
17 “v1”和“v2”表示代码库代际,而不是 semver 主版本:v1 从未发布 1.0,因此 Go 重写版使用 `1.x` 版本号。
18
19 ## 安装 1.0
20
21 `npm` 仍是主要安装渠道。npm 包会下载预编译的 Go 二进制文件,方式与 esbuild/biome 类似;二进制本身是独立的 Go 可执行文件,npm 不是运行时依赖。
22
23 **`npm i -g reasonix` 会安装当前正式的 `1.x` 版本。** npm 的 `latest` 标签已从 `1.17.5` 起切换到 Go 版本。以后不再公开发布候选版本;旧 `next` 与 `canary` 标签仅作为兼容别名,始终指向同一个正式版本。旧版 `0.x` 仍可通过固定版本安装:
24
25 ```sh
26 npm i -g reasonix # 当前正式的 1.x
27 npm i -g reasonix@0.53.2 # 固定到旧版 TypeScript 构建
28 ```
29
30 每个 GitHub release 都附带预编译归档(`reasonix-<os>-<arch>.tar.gz` / `.zip`)和桌面安装包。它们与 npm 是不同的安装渠道:桌面安装包不会改动通过 `npm i -g` 安装的 CLI,因此 shell 中的 npm `0.53` 与 `1.x` 桌面应用可以共存,并不冲突。
31
32 也可以从源码构建:
33
34 ```sh
35 git clone https://github.com/esengine/DeepSeek-Reasonix # 默认分支 main-v2(Go)
36 cd DeepSeek-Reasonix && make build # -> bin/reasonix(.exe)
37 ```
38
39 ## 配置
40
41 | 旧版 | Reasonix 1.0 |
42 | --- | --- |
43 | TypeScript 配置文件 | 项目使用 `reasonix.toml`;从 v1.8.1 起,全局配置为 Reasonix home 下的 `config.toml`(macOS/Linux:`~/.reasonix/`;Windows:`%AppData%\reasonix\`)。参见 `reasonix.example.toml` 和[配置路径](./CONFIG_PATHS.zh-CN.md) |
44 | 环境变量 / API key | provider 配置保留 `api_key_env`;保存的 key 位于 Reasonix home 的 `.env`(`DEEPSEEK_API_KEY`、`MIMO_API_KEY` 等) |
45 | 项目记忆 | `REASONIX.md`(含自动记忆),兼容 Claude Code |
46 | MCP server | 在 `reasonix.toml` 中使用 `[[plugins]]`,或直接读取 Claude Code 的 `.mcp.json` |
47
48 首次启动时,v1.8.1+ 会执行一次非破坏性导入。它会读取以下旧配置:
49
50 - `~/Library/Application Support/reasonix/config.toml`
51 - `~/.config/reasonix/config.toml`
52 - `~/.reasonix/reasonix.toml`
53 - v0.x 的 `~/.reasonix/config.json`
54
55 导入内容包括 API key、base URL、语言和 MCP server;缺失的旧凭据会迁移到 `<Reasonix home>/.env`,旧会话也会从历史目录导入。原文件不会被修改,Reasonix 会在导入后显示启动提示。
56
57 会话会根据 v0.x sidecar 元数据回到原工作区,并沿用旧摘要作为标题;工作区已不存在的会话会进入全局会话目录。可通过 `--resume` 或历史面板恢复这些会话。自动配置导入仅在尚未存在 v1.8.1+ 配置时运行;若新配置已经生成,请手动补入缺失值。
58
59 如果首次启动时旧路径尚不可用,可在交互式会话中运行 `/migrate`。若看到 `unknown command`,请先升级到包含该命令的 Go 版本。该命令会扫描旧配置、凭据、记忆和会话,并仅导入尚未导入的内容;它不会覆盖已有 `config.toml` 或记忆文件,也不会绕过会话导入标记。
60
61 若旧 v0.x 会话位于自定义 Windows 目录,可指定来源:
62
63 ```text
64 /migrate --from "D:\OldReasonix"
65 ```
66
67 完整路径和限制见[配置路径](./CONFIG_PATHS.zh-CN.md)。
68
69 ## Context Engine v2 升级
70
71 指令与记忆升级会自动完成,不需要 setup mode、re-index 命令或新配置:
72
73 | 现有数据 | 升级行为 |
74 | --- | --- |
75 | `REASONIX.md`、`AGENTS.md`、`CLAUDE.md` | 作为常驻指令加载,并附带来源、目录、precedence、imports 和 diagnostics;原文件名继续有效。 |
76 | 嵌套指令文件 | 从 workspace root 解析到当前目标路径;同一目录内 `.local.md` 优先,更深目录仍高于更浅目录。 |
77 | 没有 `id` / `revision` 的旧事实 | 获得确定性的 scope-aware `legacy-*` ID,并从 revision 1 开始;migration 幂等。 |
78 | 没有 `metadata.scope` 的旧事实 | 根据原本拥有该文件的 project/global 目录推导 scope。 |
79 | 现有 `MEMORY.md` | 作为派生 index,根据 active fact 文件重建;陈旧手写条目不会变成事实。 |
80 | 现有 active facts | 保持 active,之后发生修改时才开始产生 revision history。 |
81 | 现有 archive entries | 继续排除在 recall 外,可从 Context Center 或 `/memory recover` 显式恢复。 |
82 | 旧 Memory v5 transcript | 继续可读;preview 会从 `<memory-compiler-execution>` 恢复原始用户提示。 |
83 | `[agent].memory_compiler` | 已退役,由既有一次性配置 migration 清除。 |
84
85 升级后第一次当前版本启动会补齐缺失的 identity/time metadata,不修改 fact body。若新旧版本
86 共享同一 state root,兼容路由字段会避免旧客户端把事实移到错误 scope 目录。
87
88 升级后请使用诊断命令,不要手工修改 migration state:
89
90 ```text
91 /memory
92 /memory instructions
93 /memory recall
94 /memory revisions <id-or-name>
95 /memory archived
96 ```
97
98 新的相关事实会自动召回。只有有界、非敏感、纯创建的 project/reference 事实可以免确认保存;
99 全局事实、偏好、feedback、更新、重复项、敏感内容和所有归档操作仍是显式用户决定。桌面
100 Suggestions tab 会自动扫描,但候选在用户接受前绝不会写入。
101
102 完整 precedence、freshness、恢复、cache、隐私与远程 workspace 契约见
103 [Context Engine v2](./SESSION_MEMORY_RETRIEVAL.zh-CN.md)。
104
105 ## 保持不变的部分
106
107 agent 核心延续了原有能力:循环、读写编辑与 glob/grep/bash 等工具、子智能体(`task`、explore/research/review)、Skill、Hook、Plan 模式、MCP 客户端,以及针对 DeepSeek 前缀缓存的设计。
108
109 ## 主要变化
110
111 - **代码智能**:Go 重写版通过 LSP 辅助代码读取,并结合 `grep`、`read_file` 和 `glob` 理解本地代码。v1 的语义搜索与 tree-sitter 符号索引尚未移植,CodeGraph 也不再以内置 MCP server 形式提供。
112 - **Plan 模式**:新增 `complete_step`,用于基于证据确认步骤完成。
113 - **MCP 项目身份与 schema 缓存 URL 感知凭据**:userinfo 和 token/api_key/password 等查询值不会进入项目运行身份摘要或 schema 缓存键,因此轮换凭据不会改变项目运行时/缓存身份。用户安装的 server 不计算项目身份摘要;已配置 MCP 不再需要旧的启动或逐工具授权回执。
114 - **MCP 添加后即可使用**:用户通过桌面端、CLI、全局配置、旧配置导入或主动安装插件包添加的 server 默认可信,全局安装统一写入 `config.toml`。仓库内 `reasonix.toml` / `.mcp.json` 声明保留在项目中,同样无需额外启动确认。同名时项目覆盖全局,项目内部 `reasonix.toml` 高于 `.mcp.json`。打开陌生仓库等同于接受其中可执行的项目配置;启动 Reasonix 前应检查 `.reasonix/settings.json`、`reasonix.toml` 和 `.mcp.json`。如果仓库引发异常的 MCP 或 Hooks 行为,可用安全模式重新启动,在恢复期间禁用这些外部集成。
115 - **stdio MCP 连接持久化**:writer 调用不再创建新进程,浏览器或会话类 server 的状态可以保留。
116 - **Plan 与权限策略相互独立**:普通内置工具和 Bash 仍遵循 Ask/Auto/YOLO 与 Sandbox;已安装或代理解析的 MCP 写入/破坏性工具,以及来自未授权 server 的读取工具,在整个规划阶段保持阻止。`complete_step` 等执行阶段工具也要等计划获批后才能使用。
117 - `plan_mode_read_only_commands` 仍可解析和保存,以兼容旧配置,但不再决定主 Plan 流程能否调用工具。安装或通过项目配置声明 MCP server 后,其非破坏性的 `readOnlyHint` 工具会自动进入 planner 与只读子智能体,不需要逐工具信任配置。
118 - 使用 `read_only_task` / `read_only_skill` 创建技术上只读的子智能体;普通 `task` / `run_skill` 仍可写入,并受权限与 Sandbox 控制。未声明 `readOnlyHint` 的 MCP 工具仍按 writer 处理。
119 - `default_tools_approval_mode`、`tools.<raw>.approval_mode` 和 `approvals_reviewer` 已停用,加载时忽略并在下次保存时移除;安装或通过项目配置声明 server 后,其所有工具直接可用。
120 - **Web Dashboard 仍然可用,桌面端更推荐**:需要浏览器访问时,可运行
121 `reasonix serve` 启动本地 Web UI;日常可视化使用优先选择 Wails 桌面端,
122 终端工作流继续使用 CLI/TUI。
123 - 一些细粒度 v1 工具被合并,例如文件管理操作改由 `bash` 完成;少数工具尚未移植,进度在 Discussions 中跟踪。
124
125 ## 文件编码
126
127 Reasonix 1.0 支持读取和编辑 UTF-8、UTF-8 BOM、UTF-16 LE/BE 与 GB18030(GBK 的超集),与 v1 行为一致。
128
129 - `read_file` 会把受支持编码解码为 UTF-8 后提供给模型。
130 - `edit_file` 和 `multi_edit` 会保留文件原编码;编辑 GB18030 文件后仍以 GB18030 保存。
131 - `write_file` 始终写入 UTF-8。
132 - `grep` 会在匹配前解码,因此正则表达式可用于非 UTF-8 文件。
133
134 ## 报告问题
135
136 Issue 和 PR 按代码线标记:**`v1`** 表示旧 TypeScript 版,**`v2`** 表示 Go 版。请按实际使用版本提交报告。旧 `v1` 线处于维护模式,只接收 bug 修复,不再新增功能。
137
138 如有问题,请发起 [Discussion](https://github.com/esengine/DeepSeek-Reasonix/discussions)。
139
139 lines MARKDOWN