fix: 修复项目定位逻辑,支持在任意位置创建小说项目
- 移除 project_locator.py 中硬编码的默认目录名 (noma-project) - 更新文档明确说明项目可以在任意位置创建 - 修复 FIXES.md 中的硬编码路径示例 - 新增 CHANGELOG.md 记录变更历史
This commit is contained in:
+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