fix: 修复项目定位逻辑,支持在任意位置创建小说项目

- 移除 project_locator.py 中硬编码的默认目录名 (noma-project)
- 更新文档明确说明项目可以在任意位置创建
- 修复 FIXES.md 中的硬编码路径示例
- 新增 CHANGELOG.md 记录变更历史
This commit is contained in:
2026-06-24 04:18:48 +08:00
parent ea8f6066c4
commit 63da7e2d3c
4 changed files with 62 additions and 17 deletions
+13 -13
View File
@@ -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. 安装依赖
+6 -2
View File
@@ -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`
+2 -2
View File
@@ -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"