← Silent Star

X-Ray · Agent 工具链

查完 ZCode,再看 MiniMax 和 Qoder 的代码上传

上一篇在本机找到了 ZCode 的仓库快照。这次我在另一台 Mac 上检查 MiniMax Code 3.0.68 和 Qoder CN 0.3.3,又回到 ZCode,看 GLM 对话是否会读回那些快照。三份客户端都有云端代码相关实现,但打包内容、启用条件和留下的运行记录并不一样。

ZCode 传含 Git 的快照,MiniMax 和 Qoder 远程索引传源文件 ZIP
图中比较的是已检查的打包实现。是否真的运行,还要看开关和本机记录。

MiniMax:桌面版保留了索引,记录却是空的

应用在 /Applications/MiniMax Code.app,短版本 3.0.68,asar 包约 461 MB。这里容易混淆的是公开 TUI 和桌面版:公开仓库 MiniMax-AI/minimax-code 的 TUI 0.4.12 已经移除了工作区索引,检查的桌面包仍保留着 workspace indexing 子系统。它会把用户选中的项目打成 workspace.zip,再生成一份 manifest.json,交给远程 worker。

本地 SQLite 表 local_runtime_workspace_indexing_revisions 包含 archive_oss_key、embedding_model、dimensions 等字段,对应上传归档和生成向量的流程。这条实现用于语义搜索。我没有在 asar 中搜到 pack-objects,但仅靠这个搜索结果,不能断言它没有其他打包路径。

是否启用由 resolveWorkspaceIndexingPreference 决定:

enabled = forced || persisted === true
forced  = runtimeOwnerKind !== 'tui'
          && (internalBuild || buildEnv === 'test')

在这段逻辑里,正式桌面版默认不开远程索引,只有持久化偏好为 true 才启用;内部或测试构建另有强制条件。另一个检查 isWorkspaceIndexingSessionEligible 要求 isDefaultWorkspace === false。代码注释解释了为什么要写得这么严格:旧记录若缺少字段,把 undefined 当作合格,可能扫到应用自己的 fallback 目录。

本机 ~/.minimax/v2/sqlite/runtime-state.sqlite 中,local_runtime_workspace_indexing_sessions、local_runtime_workspace_indexing_revisions 和 local_runtime_file_api_uploads 都是 0 行。所以这里查到了远程索引实现,没有查到它在这台机器上成功上传的记录。

另一个名为 eval_snapshot 的流程只留下过一次超时失败。后来的聊天成功了,却没有对应快照行。要判断对话是否还会经过其他静默快照路径,需要更多运行样本;这台机器目前的记录回答不了。

Qoder CN:本地扫了文件,远程索引没有启动

这台 Mac 安装的是 Qoder CN 0.3.3,qoder-context 插件版本为 1.0.51.fa026ec3。插件中的 qoder-search.bundle.mjs 包含远程索引实现:先由本地 mtree 扫描工作区、计算 Merkle 树,再与远端比对。未同步文件会被读取 fileContent,经 deflate 压缩为 batch_N.zip,随后 PUT 到 /algo/api/v2/service/codebase/file/upload。配置的 embedding 模型为 text-embedding-v4,维度是 512。

这条扫描路径跳过 node_modules、.git、dist、out、build、coverage,再应用 gitignore。Git watch 使用 status、diff、rev-parse 和 hash-object 计算指纹,没有在这条路径中打包 Git objects。

不过,包里有实现不代表 CN 产品会运行它。同一份插件里的两张产品配置表,把下面几项设成了不同的值:

能力 产品 ID qoder 产品 ID qoder-cn
远程代码索引 开 关
云端搜工作区 开 关
索引设置界面 开 关
知识库远程配置 开 关

host 中的 dk() 返回 qoder-cn,进程环境变量 QODER_PRODUCT_ID 也是这个值。daemon 启动时不创建远程 client;tryRemoteSync 遇到 remoteCodeIndexing 为 false 就返回。设置界面同时被 indexSettings 关闭,因此也看不到索引开关。

日志与配置相符。2026 年 9 月 18 日 22 点 53 分,日志写下 knowledge remote config disabled by product profile。22 点 55 分打开 /Users/lifcc/Desktop/code 后,UserPromptSubmit 触发 mtree sync begin,但 codebaseId 是 null;CLI 还记录了 registerWorkspace skipped: non-target org。22 点 57 分出现 mtree sync end 时,fileCount 为 100000,codebaseId 仍是 null。

发提示词后先做本地 Merkle,CN 产品表把远程上传关掉
打开整个 code 目录后,本地开始扫描;这段日志从 22 点 55 分记录到 22 点 57 分,没有建立远程 codebaseId。

本地 index-settings.v1.json 的 autoIndex 虽然是 true,仍不能据此判断发生了远程上传。工作区树里有约 25 万文件、10.9 万目录,本地索引文件数达到 10 万;同时没有找到真正运行 workspace_sync 时才会写出的 qoder-search-indexing.log。这些记录显示本地扫描发生了,远程代码库没有建起来,这轮云端语义搜索也就没有可查询的代码库。

文件数还有另一层限制:自动触发遇到大于等于 10000 个文件时会跳过,大于 100000 则超过硬上限。这台机器的目录达到 10 万文件,即便启用远程配置,自动上传路径仍会遇到前一个门槛。

至于 CN 为什么关闭这些功能,安装包没有给出原因。国内网关 https://gateway.qoder.com.cn 和国际地址 https://repo2.qoder.sh 都在 endpoint 表里,但没有找到解释关闭原因的注释。日志只说按产品配置禁用,不能从中推断是合规、成本或其他决策。

表格中 qoder 一列也有范围限制:它来自 CN 安装包内的配置,不能替代国际版实测。我没有另外安装国际版,也没有它的运行日志;国际安装包若更换插件或覆盖配置,行为可能不同。

回到 GLM:这些会话有没有引用仓库快照

ZCode 已经有了快照上传记录,还需要检查另一件事:模型对话是否使用它。在本机的发送路径中,host 先调用 scheduleRepoSnapshotSidecar,对错误做 catch,随后执行 await session/send。这条路径没有等待快照上传或索引完成,单凭两者前后调用,不能认定对话已经拿到了快照。

快照 sidecar 与 GLM session/send 分开执行,已检查的对话使用本地工具
快照调度与对话发送分开执行。判断模型是否读取快照,还需要看请求和工具记录。

我在 zcode.cjs 中没有找到 snapshot_id 或 /api/v1/snapshot。asar 里查到的仓库快照 HTTP 接口是 GET /api/v1/snapshot/upload-credential,没有找到对应的 search、status、query、retrieve 调用。

再看运行记录:本机 3 份发往 GLM-5.3 的 model-io 请求包含 messages、tools、system 等字段,没有 snapshot 字段。提供给模型的工具包括 Agent、Read、Bash、Edit、Write、WebSearch;22 份 transcript 中实际出现的工具名是 Bash、Read、TodoWrite。这些样本显示 agent 在通过本地工具读文件,没有显示它读回了那份 Git 包。设置里的 instantGrepIndexingEnabled 控制本地 grep,也与快照上传分开。

这仍然只是已检查的客户端路径和会话样本。快照的内容密钥按客户端实现封装给服务端,服务端具备解包条件;之后是否用于索引、训练或其他用途,仅凭这些请求和日志无法判断。

三份客户端的差别

ZCode 3.10.1 MiniMax 3.0.68 Qoder CN 0.3.3
代码中的打包内容 工作区文件加整个 .git/ workspace.zip 源文件 ZIP 批次
客户端用途 仓库快照,接口名 snapshot 远程 embedding / 语义搜索 远程 embedding / 语义搜索
检查到的开关行为 host 不读设置页开关 正式桌面版默认关,偏好为 true 时开 国内产品表关掉远程
本机记录 公开小仓的本地状态显示已接收 索引表 0 行 本地扫了 10 万文件,未见索引上传记录
与对话的关系 已检查的会话用 Read / Bash 读磁盘 未在这台机器上观察到 ZIP 回读 CN 未建立 codebaseId

本次检查覆盖本机 ZCode 3.10.1,以及另一台 Mac 上的 MiniMax Code 3.0.68 和 Qoder CN 0.3.3。表格区分实现、开关与运行记录,不代表检查过三家的所有数据发送路径或服务端行为。

文章目录4
Silent Star约 5 分钟