Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

[Bug] Windows 下 agent setup 无法识别仅大小写不同的重复配置路径

オープン
#257 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
3/5
見積もり時間
1〜2日
初心者へのやさしさ
76/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
typescript
領域
cli, tooling

調査の方向性

まず writeTarget() と assertDistinctConfigurationTargets() を読み、次に既存の重複ターゲットのテストと、それらを呼び出す準備/書き込みフローを見つけます。Windows では大文字と小文字を区別しない識別キー、Windows 以外では大文字と小文字を区別する識別キーについて、焦点を絞ったカバレッジを追加します。完了の条件は、共有ターゲットがファイル作成またはバックアップの前に失敗し、元の targetPath が変更されないことです。

索引モデルが issue の本文から書いたものです。

説明

[Bug] Windows 下 agent setup 无法识别仅大小写不同的重复配置路径

问题描述

在 Windows 上,如果 CLAUDE_CONFIG_DIR 和 PI_CODING_AGENT_DIR 使用不同的字母大小写指向同一个目录,Claude Code 与 Pi 实际会使用同一个 settings.json,但当前的重复目标预检会把它们识别成两个不同路径。

当前 main 中,writeTarget() 使用 realpathSync() 生成目标路径;Windows 上该调用会保留调用方提供的路径大小写。随后 assertDistinctConfigurationTargets() 使用区分大小写的 Set<string> 判重,因此同一物理路径的不同大小写形式能够绕过预检。

最小复现

在 Windows 上准备一个包含合法 settings.json 的共享目录,让 CLAUDE_CONFIG_DIR 与 PI_CODING_AGENT_DIR 以不同大小写指向该目录,然后同时准备 Claude Code 和 Pi 的配置。

  • 预期:按照现有测试契约,在创建文件或备份前报告重复配置目标。
  • 实际:两个逻辑路径指向同一个物理文件,但因字符串大小写不同而绕过重复目标预检。

核验情况

我已经检索所有状态的 issue 和 PR,并检查开放 PR 涉及的文件,未发现等价报告、现有实现或正在进行的同文件修改。该问题可以使用 Windows 临时目录完全离线验证,不需要 API key、账号或网络。

建议修复方案

我建议保留 writeTarget() 生成的 targetPath 作为唯一真实读写路径,不修改它的大小写;另派生一个只用于判重的路径身份键:

function configurationTargetIdentity(
  targetPath: string,
  platform = process.platform,
): string {
  const normalized = platform === 'win32'
    ? win32.normalize(targetPath)
    : normalize(targetPath);
  return platform === 'win32' ? normalized.toLowerCase() : normalized;
}

assertDistinctConfigurationTargets() 中的 Set 改为保存这个身份键,而不是直接保存 file.targetPath。这样 C:\Users\A\Config\settings.json 与 c:\users\a\config\SETTINGS.JSON 在 Windows 下会得到同一个比较键,并在任何写入或备份前触发现有的重复目标错误。

真实的 file.targetPath 仍用于读取、写入、错误提示和回滚,因此不会因为判重而改写用户路径,也不会引入第二份可变路径状态。准备阶段与写入前复检继续调用同一个 assertDistinctConfigurationTargets(),保证只有一套判重规则。

计划补充以下聚焦测试:

  • 保留现有“完全相同路径必须在创建文件或备份前失败”的测试。
  • 给纯身份函数传入 win32 平台语义,验证盘符、目录名和文件名仅大小写不同的路径得到相同身份键;这样现有 Ubuntu CI 也能稳定覆盖 Windows 比较规则。
  • 验证非 Windows 平台仍保持大小写敏感,避免改变其他平台行为。
  • 在 Windows 本地执行端到端回归,确认不同大小写指向同一共享目录时,准备阶段直接失败且没有生成文件或备份。

本次范围只处理 Windows 大小写路径碰撞,不比较文件内容,不改变 Agent 配置格式、安装流程、认证、事务写入或回滚行为,也不扩展到硬链接等其他文件别名。

请问维护者是否同意由我提交这个 PR?在获得明确许可前,我不会开始实现。

主要言語
TypeScript
スター
2.2k
フォーク
185
平均マージ
9時間 55分
マージ済み PR(30日)
4

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

MiniMax-AI/cli のほかの issue

MiniMax-AI/cli の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。