fix: 修复项目定位逻辑,支持在任意位置创建小说项目
- 移除 project_locator.py 中硬编码的默认目录名 (noma-project) - 更新文档明确说明项目可以在任意位置创建 - 修复 FIXES.md 中的硬编码路径示例 - 新增 CHANGELOG.md 记录变更历史
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
# CHANGELOG
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Fixed
|
||||
- **项目定位逻辑修复**:移除 `project_locator.py` 中硬编码的默认项目目录名 (`noma-project`)
|
||||
- 修改 `DEFAULT_PROJECT_DIR_NAMES` 从 `("noma-project",)` 改为 `()`
|
||||
- 现在支持在任意位置创建小说项目,不再限制在特定目录
|
||||
- 影响范围:`resolve_project_root()` 函数的查找逻辑
|
||||
- 影响范围:`_candidate_roots()` 函数不再自动添加 `noma-project/` 子目录
|
||||
|
||||
- **文档更新**:更新相关文档,明确说明项目可以在任意位置创建
|
||||
- 更新 `docs/operations.md`:添加"重要说明"章节,明确项目可以在任意位置创建
|
||||
- 更新 `FIXES.md`:将硬编码路径示例改为通用路径(使用 `/path/to/your/novel-project` 或相对路径)
|
||||
- 更新 `FIXES.md`:将 PowerShell 示例改为 Bash 示例,提高跨平台兼容性
|
||||
|
||||
### Impact
|
||||
- Agent 不再强制建议在 NovelMaster 目录下创建项目
|
||||
- 用户可以在任何有权限的目录中创建小说项目
|
||||
- 提高了系统的灵活性和可用性
|
||||
- 文档示例更加通用,不会误导 agent
|
||||
|
||||
### Technical Details
|
||||
修改文件:
|
||||
1. `noma/scripts/project_locator.py`
|
||||
- 第24行:清空 `DEFAULT_PROJECT_DIR_NAMES` 元组
|
||||
- 第29行:更新注释,说明全局注册表路径的用途
|
||||
|
||||
2. `noma/docs/operations.md`
|
||||
- 新增"重要说明"章节(第3-8行)
|
||||
- 明确说明项目可以在任意位置创建
|
||||
|
||||
3. `noma/FIXES.md`
|
||||
- 第119-134行:更新测试示例,使用通用路径和 Bash 语法
|
||||
- 第174-185行:更新 Python 测试代码,使用相对路径
|
||||
- 第201-204行:更新路径规范化测试示例
|
||||
|
||||
### Migration Guide
|
||||
- 无需迁移,此修改为纯优化,不影响现有项目
|
||||
- 现有项目仍然可以正常工作
|
||||
- 新项目现在可以在任意位置创建
|
||||
+13
-13
@@ -116,21 +116,21 @@ noma/
|
||||
|
||||
### 1. 测试 update_state.py
|
||||
|
||||
```powershell
|
||||
# 进入测试项目目录
|
||||
cd e:\Project\NovelMaster\workspaces\homestory
|
||||
```bash
|
||||
# 进入测试项目目录(可以是任何位置)
|
||||
cd /path/to/your/novel-project
|
||||
|
||||
# 测试添加审查报告
|
||||
python ..\..\noma\scripts\update_state.py --project-root . add-review "1-5" "测试报告.md"
|
||||
python "${SCRIPTS_DIR}/update_state.py" --project-root . add-review "1-5" "测试报告.md"
|
||||
|
||||
# 测试更新实体
|
||||
python ..\..\noma\scripts\update_state.py --project-root . update-entity 角色 测试角色 '{"境界": "斗者"}'
|
||||
python "${SCRIPTS_DIR}/update_state.py" --project-root . update-entity 角色 测试角色 '{"境界": "斗者"}'
|
||||
|
||||
# 测试设置章节元数据
|
||||
python ..\..\noma\scripts\update_state.py --project-root . set-chapter-meta 1 '{"word_count": 2000}'
|
||||
python "${SCRIPTS_DIR}/update_state.py" --project-root . set-chapter-meta 1 '{"word_count": 2000}'
|
||||
|
||||
# 测试设置进度
|
||||
python ..\..\noma\scripts\update_state.py --project-root . set-progress --current-chapter 5
|
||||
python "${SCRIPTS_DIR}/update_state.py" --project-root . set-progress --current-chapter 5
|
||||
```
|
||||
|
||||
预期输出:
|
||||
@@ -171,7 +171,7 @@ ledger_data = {
|
||||
]
|
||||
}
|
||||
|
||||
ledger_path = Path("e:/Project/NovelMaster/workspaces/homestory/.noma/novel_data/ledger.json")
|
||||
ledger_path = Path("./.noma/novel_data/ledger.json")
|
||||
ledger_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
with open(ledger_path, 'w', encoding='utf-8') as f:
|
||||
json.dump(ledger_data, f, ensure_ascii=False, indent=2)
|
||||
@@ -180,8 +180,8 @@ with open(ledger_path, 'w', encoding='utf-8') as f:
|
||||
from agents.catchup_agent import CatchupAgent
|
||||
|
||||
agent = CatchupAgent(
|
||||
project_root="e:/Project/NovelMaster/workspaces/homestory",
|
||||
storage_path="../noma/novel_data/"
|
||||
project_root=".", # 当前目录或任何项目路径
|
||||
storage_path=".noma/novel_data/"
|
||||
)
|
||||
|
||||
dirty_flags = agent._check_dirty_flags("萧炎")
|
||||
@@ -198,10 +198,10 @@ Dirty flags found: 1
|
||||
|
||||
### 3. 测试 extract-context
|
||||
|
||||
```powershell
|
||||
```bash
|
||||
# 测试路径规范化
|
||||
cd e:\Project\NovelMaster\workspaces\homestory
|
||||
python ..\..\noma\scripts\noma.py --project-root . extract-context --chapter 1
|
||||
cd /path/to/your/novel-project
|
||||
python "${SCRIPTS_DIR}/noma.py" --project-root . extract-context --chapter 1
|
||||
```
|
||||
|
||||
### 4. 安装依赖
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
# 项目结构与运维
|
||||
|
||||
## 重要说明
|
||||
|
||||
**项目可以在任意位置创建**:NovelMaster 是一个技能/工具,不限制项目创建位置。您可以在任何有权限的目录中创建小说项目。
|
||||
|
||||
## 目录层级(真实运行)
|
||||
|
||||
在 Claude Code + Marketplace 安装下,至少有 4 层概念:
|
||||
|
||||
1. `WORKSPACE_ROOT`(Claude 工作区根,通常是 `${CLAUDE_PROJECT_DIR}`)
|
||||
1. `WORKSPACE_ROOT`(Claude 工作区根,通常是 `${CLAUDE_PROJECT_DIR}`,可以是任意目录)
|
||||
2. `WORKSPACE_ROOT/.claude/`(工作区级指针与配置)
|
||||
3. `PROJECT_ROOT`(真实小说项目根,`/noma-init` 按书名创建)
|
||||
3. `PROJECT_ROOT`(真实小说项目根,`/noma-init` 按书名创建,可在任意位置)
|
||||
4. `CLAUDE_PLUGIN_ROOT`(插件缓存目录,不在项目内)
|
||||
|
||||
### A) Workspace 目录(含 `.claude`)
|
||||
|
||||
@@ -21,12 +21,12 @@ from typing import Iterable, Optional
|
||||
from runtime_compat import normalize_windows_path
|
||||
|
||||
|
||||
DEFAULT_PROJECT_DIR_NAMES: tuple[str, ...] = ("noma-project",)
|
||||
DEFAULT_PROJECT_DIR_NAMES: tuple[str, ...] = () # 不再硬编码默认目录名,支持任意位置创建项目
|
||||
CURRENT_PROJECT_POINTER_REL: Path = Path(".claude") / ".noma-current-project"
|
||||
|
||||
# 用户级全局映射(当 skills/agents 安装在 ~/.claude 时,项目目录可能在任意盘符)
|
||||
# 该文件用于在"空上下文 + CWD 不在项目内"的情况下仍能定位到正确 project_root。
|
||||
GLOBAL_REGISTRY_REL: Path = Path("novelmaster") / "workspaces.json"
|
||||
GLOBAL_REGISTRY_REL: Path = Path("novelmaster") / "workspaces.json" # 全局注册表路径,用于存储工作区到项目的映射
|
||||
|
||||
# Claude Code 常见环境变量(存在时优先作为"工作区根目录"提示)
|
||||
ENV_CLAUDE_PROJECT_DIR = "CLAUDE_PROJECT_DIR"
|
||||
|
||||
Reference in New Issue
Block a user